{"pages":[["2D-introduction","Introduction to 2D"],["2DAnd3DModeSettings","2D and 3D mode settings"],["2DFeature","2D feature set"],["2Dor3D","2D or 3D projects"],["2DPrimitiveObjects","Types of 2D primitive GameObjects"],["2DSorting","2D Sorting"],["3D-formats","Model file formats"],["9SliceSprites","9-slicing Sprites"],["ActivationFAQ","License Troubleshooting"],["AdvancedRefProbe","Advanced Reflection Probe Features"],["AmbisonicAudio","Ambisonic Audio"],["analysis","Analysis"],["AnatomyofaMesh","Mesh data"],["android-aar-import","Import an Android Archive plug-in"],["android-API","Android mobile scripting"],["android-apk-expansion-files-host","Host APK expansion files"],["android-apk-expansion-files-in-unity","APK expansion files in Unity"],["android-apk-expansion-files-install","Manually install an APK expansion file"],["android-application-size-restrictions","Android application size restrictions"],["android-AppPatching","Application patching"],["android-asset-packs-create-custom","Create a custom asset pack"],["android-asset-packs-in-unity","Asset packs in Unity"],["android-asset-packs-manage","Manage asset packs at runtime"],["android-asset-packs-set-up","Set up Play Asset Delivery"],["android-asset-splitting","Introduction to asset splitting"],["android-build-settings","Android Build Settings"],["android-building-and-delivering","Building and delivering for Android"],["android-BuildProcess","Build your application for Android"],["android-ChromeOS-building-your-application","Build for ChromeOS"],["android-ChromeOS-debugging","Debugging on a ChromeOS device"],["android-ChromeOS-developing","Developing for ChromeOS"],["android-ChromeOS-getting-started","Getting started with ChromeOS"],["android-ChromeOS-introducing","ChromeOS"],["android-ChromeOS-player-settings","ChromeOS Player Settings"],["android-ChromeOS-preparing-your-development-environment","Preparing your development environment for ChromeOS"],["android-ChromeOS-requirements-and-compatibility","Requirements and compatibility"],["android-ChromeOS-support-user-input","Support user input on ChromeOS devices"],["android-custom-activity-command-line","Specify Android Player command-line arguments"],["android-custom-activity","Create a custom activity"],["android-debugging-on-an-android-device","Debugging on an Android device"],["android-developing","Developing for Android"],["android-device-features-and-permissions","Device features and permissions"],["android-device-simulator","Simulate an Android device"],["android-distribution-google-play","Delivering to Google Play"],["android-distribution","Digital distribution services for Android"],["android-export-process","Export an Android project"],["android-getting-started","Getting started with Android"],["android-gradle-overview","Gradle for Android"],["android-graphics","Graphics for Android"],["android-handle-crashes","Handle Android crashes"],["android-input","Input for Android devices"],["android-introducing","Introducing Android"],["android-keystore-add-keys","Add keys to a keystore"],["android-keystore-create","Create a new keystore"],["android-keystore-load","Load a keystore"],["android-keystore-manager","Keystore Manager window reference"],["android-keystore","Android keystores"],["android-launcher-manifest","Unity Launcher Manifest"],["android-library-manifest","Unity Library Manifest"],["android-library-project-and-aar-plugins-introducing","Introducing Android Library Projects and Android Archive plug-ins"],["android-library-project-import","Import an Android Library Project"],["android-manifest","Android App Manifest"],["android-native-plugins-call","Call native plug-in for Android code"],["android-native-plugins-create","Create a native plug-in for Android"],["android-native-plugins-import","Import a native plug-in for Android"],["android-native-plugins-introducing","Introducing native plug-ins for Android"],["android-OBBsupport","APK expansion files"],["android-optimize-distribution-size","Optimize distribution size"],["android-permissions-declare","Declare permissions for an application"],["android-permissions-in-unity","Android permissions in Unity"],["android-plugin-types","Android plug-in types"],["android-plugins-java-code-from-c-sharp","Call Java and Kotlin plug-in code from C# scripts"],["android-profile-on-an-android-device","Profile on an Android device"],["android-RequestingPermissions","Request runtime permissions"],["android-requirements-and-compatibility","Android requirements and compatibility"],["android-screen-configuration","Screen configuration"],["android-sdksetup","Android environment setup"],["Android-SinglePassStereoRendering","Single-pass stereo rendering for Android"],["android-symbols","Android symbols"],["android-testing-and-debugging","Testing and debugging"],["android-thread-configuration","Android thread configuration"],["android","Android"],["AndroidAARPlugins","Android Library Projects and Android Archive plug-ins"],["AndroidJARPlugins","JAR plug-ins"],["AndroidJavaSourcePlugins","Java and Kotlin source plug-ins"],["AndroidNativePlugins","Native plug-ins for Android"],["AndroidUnityPlayerActivity","Extend the default Unity activity"],["AnimationClips","Animation Clips"],["AnimationCurvesOnImportedClips","Curves"],["AnimationEditorGuide","Animation Window Guide"],["AnimationEulerCurveImport","Euler curve resampling"],["AnimationEventsOnImportedClips","Events"],["AnimationGlossary","A Glossary of animation terms"],["AnimationLayers","Animation Layers"],["AnimationMaskOnImportedClips","Mask"],["AnimationOverview","Animation system overview"],["AnimationParameters","Animation Parameters"],["AnimationRootMotionNodeOnImportedClips","Motion"],["AnimationRotate","Rotation in animations"],["Animations","Legacy Animation system"],["AnimationScripting","Animation Scripting (Legacy)"],["AnimationSection","Animation"],["AnimationsImport","Animation from external sources"],["AnimationSoloMute","Solo and Mute functionality"],["AnimationStateMachines","Animation State Machines"],["Animator","The Animator Controller Asset"],["AnimatorControllerCreation","Creating an AnimatorController"],["AnimatorControllers","Animator Controllers"],["AnimatorOverrideController","Animator Override Controllers"],["AnimatorWindow","The Animator Window"],["animeditor-AdvancedKeySelectionAndManipulation","Key manipulation in Dopesheet mode"],["animeditor-AnimatingAGameObject","Animating a GameObject"],["animeditor-AnimationCurves","Using Animation Curves"],["animeditor-CreatingANewAnimationClip","Creating a new Animation Clip"],["animeditor-KeyManipulationInCurvesMode","Key manipulation in Curves mode"],["animeditor-MultipleParts","Objects with Multiple Moving Parts"],["animeditor-UsingAnimationEditor","Using the Animation view"],["api-action-handler","Registering an Action Handler"],["api-register-provider","Registering a Search Provider"],["api-search-provider-class","The SearchProvider class"],["api-searching","Performing a search"],["api","Creating a custom Search Provider"],["APIUpdater","API updater"],["AppleMac","macOS"],["AppThinning","App thinning"],["Archives","Archives"],["ARFeature","AR feature set"],["AROverview","AR development in Unity"],["articulations-section","Articulations"],["AssemblyDefinitionFileFormat","Assembly Definition File Format"],["AssetBundles-Browser","Unity Asset Bundle Browser tool"],["AssetBundles-Building","Building AssetBundles"],["AssetBundles-Cache","AssetBundle compression"],["AssetBundles-Dependencies","AssetBundle Dependencies"],["AssetBundles-Integrity","AssetBundle Download Integrity and Security"],["AssetBundles-Native","Using AssetBundles Natively"],["AssetBundles-Patching","Patching with AssetBundles"],["AssetBundles-Preparing","Preparing Assets for AssetBundles"],["AssetBundles-Troubleshooting","Troubleshooting"],["AssetBundles-Workflow","AssetBundle workflow"],["AssetBundlesIntro","AssetBundles"],["AssetDatabase","The Asset Database"],["AssetDatabaseBatching","Batching with the AssetDatabase"],["AssetDatabaseCustomizingWorkflow","Customizing the Asset Database workflow"],["AssetDatabaseRefreshing","Refreshing the Asset Database"],["AssetMetadata","Asset Metadata"],["AssetPackages","Asset packages"],["AssetPackagesCreate","Create and export asset packages"],["AssetPackagesImport","Importing local asset packages"],["AssetPackagesLabels","Using labels to organize \"My Assets\""],["AssetPackagesOrganize","Finding your Asset Store packages"],["AssetPackagesPurchase","Purchasing or downloading a package on the Asset Store"],["AssetStore","Unity's Asset Store"],["AssetStoreAdmin","Asset Store Publisher portal"],["AssetStoreAnalytics","Connecting your account to Google Analytics"],["AssetStoreCreateAcct","Creating your Publisher Account"],["AssetStoreCreatePkg","Creating a new package draft"],["AssetStoreDeletePkg","Deleting a package draft"],["AssetStoreMassLabeler","Adding tags to published packages"],["AssetStorePackages","Asset Store packages"],["AssetStorePayouts","Collecting revenue"],["AssetStorePkgDetails","Filling in the package details"],["AssetStorePromotion","Promoting your Assets"],["AssetStorePublishing","Publishing to the Asset Store"],["AssetStoreRefunding","Refunding your customers"],["AssetStoreRemoving","Deprecating your Assets"],["AssetStoreStatus","Viewing the status of your Asset Store submissions"],["AssetStoreSubmit","Submitting your package for approval"],["AssetStoreSupport","Providing support to your customers"],["AssetStoreUpgrade","Upgrading packages"],["AssetStoreUpload","Uploading assets to your package"],["AssetStoreUsers","Managing your publishing team"],["AssetStoreVouchers","Issuing vouchers"],["AssetTypes","Supported Asset Types"],["AssetWorkflow","Asset workflow"],["AsynchronousShaderCompilation","Asynchronous shader compilation"],["AsyncReadManagerMetrics","Asset loading metrics"],["Attributes","Attributes"],["Audio","Audio"],["AudioDevelopAmbisonicDecoder","Develop an ambisonic audio decoder"],["AudioFiles","Audio files"],["AudioMixer","Audio Mixer"],["AudioMixerInspectors","AudioGroup Inspector"],["AudioMixerNativeAudioPlugin","Native audio plug-in SDK"],["AudioMixerOverview","An overview of the concepts and Audio Mixer"],["AudioMixerSpecifics","Specifics on the Audio Mixer window"],["AudioMixerUsage","Overview of Usage and API"],["AudioOverview","Audio overview"],["AudioProfiler","Audio Profiler"],["AudioSpatializerSDK","Audio Spatializer SDK"],["AvatarCreationandSetup","Humanoid Avatars"],["BackgroundTasksWindow","The Background Tasks window"],["bakemultiplescenes","Bake data in multiple scenes"],["batch-renderer-group-creating-a-renderer","Creating a renderer with BatchRendererGroup"],["batch-renderer-group-creating-batches","Creating batches"],["batch-renderer-group-creating-draw-commands","Creating draw commands"],["batch-renderer-group-getting-started","Getting started with BatchRendererGroup"],["batch-renderer-group-how","How BatchRendererGroup works"],["batch-renderer-group-initializing","Initializing a BatchRendererGroup object"],["batch-renderer-group-registering-meshes-and-materials","Registering meshes and materials"],["batch-renderer-group","BatchRendererGroup"],["best-practice-guides","Advanced best practice guides"],["BestPracticeUnderstandingPerformanceInUnity","Understanding optimization in Unity"],["BestPracticeUnderstandingPerformanceInUnity4","Asset auditing"],["BestPracticeUnderstandingPerformanceInUnity5","Strings and text"],["BestPracticeUnderstandingPerformanceInUnity6","The Resources folder"],["BestPracticeUnderstandingPerformanceInUnity7","General Optimizations"],["BestPracticeUnderstandingPerformanceInUnity8","Special optimizations"],["BlendShapes","Working with blend shapes"],["BlendTree-1DBlending","1D Blending"],["BlendTree-2DBlending","2D Blending"],["BlendTree-AdditionalOptions","Additional Blend Tree Options"],["BlendTree-DirectBlending","Direct Blending"],["BuildPlayerPipeline","Build Player Pipeline"],["Buildsettings-linux","Linux Build Settings"],["BuildSettings","Build Settings"],["BuildSettingsiOS","iOS build settings"],["built-in-render-pipeline","Using the Built-in Render Pipeline"],["built-in-rendering-order","Rendering order in the Built-in Render Pipeline"],["built-in-shader-examples-vertex-data","Visualizing vertex data"],["built-in-shader-examples","Example shaders for the Built-in Render Pipeline"],["Built-inParticleSystem","Built-in Particle System"],["Built-inShaderGuide","Legacy Shaders"],["BuiltInImporters","Built-in Importers"],["CameraRays","Rays from the Camera"],["Cameras","Cameras"],["CamerasOverview","Cameras"],["CameraTricks","Camera Tricks"],["character-control-section","Character control"],["CharacterAnimationFeature","3D Characters and Animation feature set"],["CharacterControllers","Introduction to character control"],["choose-a-lighting-setup","Choose a lighting setup"],["choose-a-render-pipeline","Choose a render pipeline"],["ChoosingYourParticleSystem","Choosing your particle system solution"],["CinematicStudioFeature","Cinematic Studio feature set"],["class-AimConstraint","Aim Constraints"],["class-Animation","Animation"],["class-AnimationClip","Animation tab"],["class-Animator","Animator component"],["class-AnimatorController","Animator Controller"],["class-AreaEffector2D","Area Effector 2D"],["class-ArticulationBody","Articulation Body component reference"],["class-AssemblyDefinitionImporter","Assembly Definition properties"],["class-AssemblyDefinitionReferenceImporter","Assembly Definition Reference properties"],["class-AudioChorusEffect","Audio Chorus Effect"],["class-AudioChorusFilter","Audio Chorus Filter"],["class-AudioClip","Audio Clip"],["class-AudioCompressor","Audio Compressor Effect"],["class-AudioDistortionEffect","Audio Distortion Effect"],["class-AudioDistortionFilter","Audio Distortion Filter"],["class-AudioEchoEffect","Audio Echo Effect"],["class-AudioEchoFilter","Audio Echo Filter"],["class-AudioEffect","Audio Filters"],["class-AudioEffectMixer","Audio Effects"],["class-AudioFlangeEffect","Audio Flange Effect"],["class-AudioHighPassEffect","Audio High Pass Effect"],["class-AudioHighPassFilter","Audio High Pass Filter"],["class-AudioHighPassSimpleEffect","Audio High Pass Simple Effect"],["class-AudioListener","Audio Listener"],["class-AudioLowPassEffect","Audio Low Pass Effect"],["class-AudioLowPassFilter","Audio Low Pass Filter"],["class-AudioLowPassSimpleEffect","Audio Low Pass Simple Effect"],["class-AudioManager","Audio"],["class-AudioMixer","Audio Mixer"],["class-AudioNormalizeEffect","Audio Normalize Effect"],["class-AudioParamEQEffect","Audio Parametric Equalizer Effect"],["class-AudioPitchShifterEffect","Audio Pitch Shifter Effect"],["class-AudioReverbEffect","Audio SFX Reverb Effect"],["class-AudioReverbFilter","Audio Reverb Filter"],["class-AudioReverbZone","Reverb Zones"],["class-AudioSettings","Audio Settings"],["class-AudioSource","Audio Source"],["class-Avatar","Avatar Mapping tab"],["class-AvatarMask","Avatar Mask window"],["class-BillboardAsset","Billboard asset"],["class-BillboardRenderer","Billboard Renderer component"],["class-BlendTree","Blend Trees"],["class-BoxCollider","Box Collider component reference"],["class-BoxCollider2D","Box Collider 2D"],["class-Brush","Brushes"],["class-BuoyancyEffector2D","Buoyancy Effector 2D"],["class-Camera","Camera component"],["class-Canvas","Canvas"],["class-CanvasGroup","Canvas Group"],["class-CanvasRenderer","Canvas Renderer"],["class-CapsuleCollider","Capsule Collider component reference"],["class-CapsuleCollider2D","Capsule Collider 2D"],["class-CharacterController","Character Controller component reference"],["class-CharacterJoint","Character Joint component reference"],["class-CircleCollider2D","Circle Collider 2D"],["class-Cloth","Cloth"],["class-CompositeCollider2D","Composite Collider 2D"],["class-ComputeShader","Compute shaders"],["class-ConfigurableJoint","Configurable Joint component reference"],["class-ConstantForce","Constant Force component reference"],["class-ConstantForce2D","Constant Force 2D"],["class-Cubemap","Cubemaps"],["class-CubemapArray","Cubemap arrays"],["class-CustomCollider2D","Custom Collider 2D"],["class-CustomRenderTexture","Custom Render Textures"],["class-Debug","Debug"],["class-DistanceJoint2D","Distance Joint 2D"],["class-EdgeCollider2D","Edge Collider 2D"],["class-EditorManager","Editor"],["class-FBXImporter","Model Import Settings window"],["class-FixedJoint","Fixed Joint component reference"],["class-FixedJoint2D","Fixed Joint 2D"],["class-Flare","Flare asset"],["class-FlareLayer","Flare Layer component"],["class-Font","Font assets"],["class-FrictionJoint2D","Friction Joint 2D"],["class-GameObject","GameObject"],["class-GraphicsSettings","Graphics"],["class-Grid","Grid component reference"],["class-GUISkin","GUI Skin (IMGUI System)"],["class-GUIStyle","GUI Style (IMGUI System)"],["class-Halo","Halo component"],["class-HingeJoint","Hinge Joint component reference"],["class-HingeJoint2D","Hinge Joint 2D"],["class-HumanTemplate","Human Template window"],["class-InputManager","Input Manager"],["class-LensFlare","Lens Flare component"],["class-Light","Lights"],["class-LightingSettings","Lighting Settings Asset"],["class-LightmapParameters","Lightmap Parameters Asset"],["class-LightProbeGroup","Light Probe Groups"],["class-LightProbeProxyVolume","Light Probe Proxy Volume component"],["class-LineRenderer","Line Renderer component"],["class-LODGroup","LOD Group"],["class-LookAtConstraint","Look At Constraints"],["class-Material","Material Inspector reference"],["class-Mathf","Mathf"],["class-Mesh","Mesh asset"],["class-MeshCollider","Mesh Collider component reference"],["class-MeshFilter","Mesh Filter component"],["class-MeshRenderer","Mesh Renderer component"],["class-Microphone","Microphone"],["class-MonoBehaviour","MonoBehaviour"],["class-MonoManager","Script Execution Order settings"],["class-MovieTexture","Movie Textures"],["class-NetworkAnimator","Network Animator"],["class-NetworkBehaviour","NetworkBehaviour"],["class-NetworkClient","NetworkClient"],["class-NetworkConnection","NetworkConnection"],["class-NetworkDiscovery","Network Discovery"],["class-NetworkIdentity","Network Identity"],["class-NetworkLobbyManager","Network Lobby Manager"],["class-NetworkLobbyPlayer","Network Lobby Player"],["class-NetworkManagerHUD","Network Manager HUD"],["class-NetworkManagerUNet","Network Manager"],["class-NetworkProximityChecker","Network Proximity Checker"],["class-NetworkServer","NetworkServer"],["class-NetworkServerSimple","NetworkServerSimple"],["class-NetworkStartPosition","NetworkStartPosition"],["class-NetworkTransform","Network Transform"],["class-NetworkTransformChild","Network Transform Child"],["class-NetworkTransformVisualizer","Network Transform Visualizer"],["class-Object","Object"],["class-OcclusionArea","Occlusion Areas"],["class-OcclusionPortal","Occlusion Portals"],["class-PackageManager","Package Manager"],["class-PackageManifestImporter","Package Manifest window"],["class-ParentConstraint","Parent Constraints"],["class-ParticleSystem","Particle System"],["class-ParticleSystemForceField","Particle System Force Field"],["class-PhysicMaterial","Physic Material component reference"],["class-Physics2DManager","Physics 2D"],["class-PhysicsManager","Physics"],["class-PhysicsMaterial2D","Physics Material 2D"],["class-PlatformEffector2D","Platform Effector 2D"],["class-PlayerSettings","Player"],["class-PlayerSettingsAndroid","Android Player settings"],["class-PlayerSettingsiOS","iOS Player settings"],["class-PlayerSettingsSplashScreen","Splash Image Player settings"],["class-PlayerSettingsWebGL","WebGL Player settings"],["class-PlayerSettingsWSA","UWP Player settings"],["class-PointEffector2D","Point Effector 2D"],["class-PolygonCollider2D","Polygon Collider 2D reference"],["class-PositionConstraint","Position Constraints"],["class-PresetManager","Preset Manager"],["class-Projector","Projector component"],["class-QualitySettings","Quality"],["class-Quaternion","Quaternion"],["class-Random","Random"],["class-RectTransform","Rect Transform"],["class-ReflectionProbe","Reflection Probe"],["class-RelativeJoint2D","Relative Joint 2D"],["class-RenderTexture","Render Texture"],["class-Rigidbody","Rigidbody component reference"],["class-Rigidbody2D","Introduction to Rigidbody 2D"],["class-RotationConstraint","Rotation Constraints"],["class-ScaleConstraint","Scale Constraints"],["class-ScriptableObject","ScriptableObject"],["class-Shader","Shader assets"],["class-SketchUpImporter","SketchUp Import Settings window"],["class-SkinnedMeshRenderer","Skinned Mesh Renderer component"],["class-Skybox","Skybox component reference"],["class-SliderJoint2D","Slider Joint 2D"],["class-SortingGroup","Sorting Groups"],["class-SpeedTreeImporter","SpeedTree Import Settings window"],["class-SphereCollider","Sphere Collider component reference"],["class-SpringJoint","Spring Joint component reference"],["class-SpringJoint2D","Spring Joint 2D"],["class-SpriteAtlas","Sprite Atlas properties reference"],["class-SpriteMask","Sprite Masks"],["class-SpriteRenderer","Sprite Renderer"],["class-SpriteShapeRenderer","Sprite Shape Renderer"],["class-State","Animation States"],["class-StreamingController","Streaming Controller component"],["class-SurfaceEffector2D","Surface Effector 2D"],["class-TagManager","Tags and Layers"],["class-TargetJoint2D","Target Joint 2D"],["class-TerrainCollider","Terrain Collider component reference"],["class-TerrainLayer","Terrain Layers"],["class-TextAsset","Text assets"],["class-TextMesh","Text Mesh component (legacy)"],["class-Texture2DArray","Texture arrays"],["class-Texture3D","3D textures"],["class-TextureImporter","Texture Import Settings"],["class-TextureImporterOverride","Recommended, default, and supported texture formats, by platform"],["class-Tilemap","Tilemap component reference"],["class-TilemapCollider2D","Tilemap Collider 2D"],["class-TilemapRenderer","Tilemap Renderer"],["class-TimeManager","Time"],["class-TrailRenderer","Trail Renderer component"],["class-Transform","Transforms"],["class-Transition","Animation transitions"],["class-Tree","Tree Editor"],["class-VFXManager","Project Settings - VFX"],["class-VideoClip","Video Clips"],["class-VideoPlayer","Video Player component"],["class-VisualEffect","Visual Effect"],["class-VisualEffectAsset","Visual Effect Graph Asset"],["class-VisualEffectSubgraphBlock","Block Subgraph"],["class-VisualEffectSubgraphOperator","Operator Subgraph"],["class-WheelCollider","Wheel Collider component reference"],["class-WheelJoint2D","Wheel Joint 2D"],["class-WindZone","Wind Zones"],["ClassIDReference","YAML Class ID Reference"],["CLIBatchmodeCoroutines","Batch mode and built-in coroutine compatibility"],["code-reloading-editor","Code reloading in the Unity Editor"],["Collider2D","Collider 2D"],["CollidersOverview","Introduction to collision"],["collision-section","Collision"],["com.havok.physics","Havok Physics for Unity"],["com.unity.2d.animation","2D Animation"],["com.unity.2d.aseprite","2D Aseprite Importer"],["com.unity.2d.pixel-perfect","2D Pixel Perfect"],["com.unity.2d.psdimporter","2D PSD Importer"],["com.unity.2d.sprite","2D Sprite"],["com.unity.2d.spriteshape","2D SpriteShape"],["com.unity.2d.tilemap.extras","2D Tilemap Extras"],["com.unity.2d.tilemap","2D Tilemap Editor"],["com.unity.adaptiveperformance","Adaptive Performance"],["com.unity.addressables","Addressables"],["com.unity.ads.ios-support","iOS 14 Advertising Support"],["com.unity.ads","Advertisement Legacy"],["com.unity.ai.navigation","AI Navigation"],["com.unity.animation.rigging","Animation Rigging"],["com.unity.burst","Burst"],["com.unity.cinemachine","Cinemachine"],["com.unity.collab-proxy","Version Control"],["com.unity.collections","Collections"],["com.unity.connect.share","WebGL Publisher"],["com.unity.device-simulator.devices","Device Simulator Devices"],["com.unity.editorcoroutines","Editor Coroutines"],["com.unity.entities.graphics","Entities Graphics"],["com.unity.entities","Entities"],["com.unity.formats.alembic","Alembic"],["com.unity.formats.fbx","FBX Exporter"],["com.unity.ide.rider","JetBrains Rider Editor"],["com.unity.ide.visualstudio","Visual Studio Editor"],["com.unity.ide.vscode","Visual Studio Code Editor"],["com.unity.inputsystem","Input System"],["com.unity.learn.iet-framework.authoring","Tutorial Authoring Tools"],["com.unity.learn.iet-framework","Tutorial Framework"],["com.unity.live-capture","Live Capture"],["com.unity.localization","Localization"],["com.unity.logging","Unity Logging"],["com.unity.mathematics","Mathematics"],["com.unity.memoryprofiler","Memory Profiler"],["com.unity.ml-agents","ML Agents"],["com.unity.mobile.android-logcat","Android Logcat"],["com.unity.mobile.notifications","Mobile Notifications"],["com.unity.modules.ai","AI"],["com.unity.modules.androidjni","Android JNI"],["com.unity.modules.animation","Animation"],["com.unity.modules.assetbundle","Asset Bundle"],["com.unity.modules.audio","Audio"],["com.unity.modules.cloth","Cloth"],["com.unity.modules.director","Director"],["com.unity.modules.imageconversion","Image Conversion"],["com.unity.modules.imgui","IMGUI"],["com.unity.modules.jsonserialize","JSONSerialize"],["com.unity.modules.nvidia","NVIDIA"],["com.unity.modules.particlesystem","Particle System"],["com.unity.modules.physics","Physics"],["com.unity.modules.physics2d","Physics 2D"],["com.unity.modules.screencapture","Screen Capture"],["com.unity.modules.terrain","Terrain"],["com.unity.modules.terrainphysics","Terrain Physics"],["com.unity.modules.tilemap","Tilemap"],["com.unity.modules.ui","UI"],["com.unity.modules.uielements","UIElements"],["com.unity.modules.umbra","Umbra"],["com.unity.modules.unityanalytics","Unity Analytics"],["com.unity.modules.unitywebrequest","Unity Web Request"],["com.unity.modules.unitywebrequestassetbundle","Unity Web Request Asset Bundle"],["com.unity.modules.unitywebrequestaudio","Unity Web Request Audio"],["com.unity.modules.unitywebrequesttexture","Unity Web Request Texture"],["com.unity.modules.unitywebrequestwww","Unity Web Request WWW"],["com.unity.modules.vehicles","Vehicles"],["com.unity.modules.video","Video"],["com.unity.modules.vr","VR"],["com.unity.modules.wind","Wind"],["com.unity.modules.xr","XR"],["com.unity.multiplayer.tools","Multiplayer Tools"],["com.unity.netcode.gameobjects","Netcode for GameObjects"],["com.unity.netcode","Netcode for Entities"],["com.unity.performance.profile-analyzer","Profile Analyzer"],["com.unity.physics","Unity Physics"],["com.unity.polybrush","Polybrush"],["com.unity.postprocessing","Post Processing"],["com.unity.probuilder","ProBuilder"],["com.unity.profiling.core","Unity Profiling Core API"],["com.unity.profiling.systemmetrics.mali","System Metrics Mali"],["com.unity.purchasing","In App Purchasing"],["com.unity.purchasing.udp","Unity Distribution Portal"],["com.unity.recorder","Recorder"],["com.unity.remote-config","Remote Config"],["com.unity.render-pipelines.core","Core RP Library"],["com.unity.render-pipelines.high-definition","High Definition RP"],["com.unity.render-pipelines.universal","Universal RP"],["com.unity.scriptablebuildpipeline","Scriptable Build Pipeline"],["com.unity.scripting.python","Python Scripting"],["com.unity.sequences","Sequences"],["com.unity.serialization","Serialization"],["com.unity.services.analytics","Analytics"],["com.unity.services.authentication","Authentication"],["com.unity.services.ccd.management","CCD Management"],["com.unity.services.cloud-build","Build Automation"],["com.unity.services.cloud-diagnostics","Cloud Diagnostics"],["com.unity.services.cloudcode","Cloud Code"],["com.unity.services.cloudsave","Cloud Save"],["com.unity.services.deployment","Deployment"],["com.unity.services.economy","Economy"],["com.unity.services.friends","Friends"],["com.unity.services.leaderboards","Leaderboards"],["com.unity.services.levelplay","Ads Mediation"],["com.unity.services.lobby","Lobby"],["com.unity.services.matchmaker","Matchmaker"],["com.unity.services.moderation","Moderation"],["com.unity.services.multiplay","Multiplay"],["com.unity.services.playeraccounts","Player Accounts"],["com.unity.services.push-notifications","Push Notifications"],["com.unity.services.relay","Relay"],["com.unity.services.ugc.bridge","User Generated Content Bridge"],["com.unity.services.ugc","User Generated Content"],["com.unity.services.user-reporting","User Reporting"],["com.unity.shadergraph","Shader Graph"],["com.unity.splines","Splines"],["com.unity.sysroot.linux-x86_64","Sysroot Linux x64"],["com.unity.sysroot","Sysroot Base"],["com.unity.terrain-tools","Terrain Tools"],["com.unity.test-framework","Test Framework"],["com.unity.testtools.codecoverage","Code Coverage"],["com.unity.textmeshpro","TextMeshPro"],["com.unity.timeline","Timeline"],["com.unity.toolchain.linux-x86_64","Toolchain Linux x64"],["com.unity.toolchain.macos-x86_64-linux-x86_64","Toolchain MacOS Linux x64"],["com.unity.toolchain.win-x86_64-linux-x86_64","Toolchain Win Linux x64"],["com.unity.transport","Unity Transport"],["com.unity.ugui","Unity UI"],["com.unity.visualeffectgraph","Visual Effect Graph"],["com.unity.visualscripting","Visual Scripting"],["com.unity.xr.arcore","Google ARCore XR Plugin"],["com.unity.xr.arfoundation","AR Foundation"],["com.unity.xr.arkit","Apple ARKit XR Plugin"],["com.unity.xr.hands","XR Hands"],["com.unity.xr.interaction.toolkit","XR Interaction Toolkit"],["com.unity.xr.magicleap","Magic Leap XR Plugin"],["com.unity.xr.management","XR Plugin Management"],["com.unity.xr.meta-openxr","Unity OpenXR Meta"],["com.unity.xr.oculus","Oculus XR Plugin"],["com.unity.xr.openxr","OpenXR Plugin"],["combining-meshes","Manually combining meshes"],["CommandLineArguments","Command-line arguments"],["comp-AnimationGroup","Animation Reference"],["comp-CanvasComponents","Canvas Components"],["comp-ManagerGroup","Project Settings"],["comp-MeshGroup","Mesh components"],["comp-UIAutoLayout","Auto Layout"],["comp-UIEffects","UI Effect Components"],["comp-UIInteraction","Interaction Components"],["comp-UIVisual","Visual Components"],["Components","Introduction to components"],["ConfigurableEnterPlayMode","Configurable Enter Play Mode"],["ConfigurableEnterPlayModeDetails","Details of disabling Domain and Scene Reload"],["configuring-project-for-xr","XR Project set up"],["ConfiguringtheAvatar","Importing a model with humanoid animations"],["Console","Console Window"],["Constraints","Constraints"],["ContentNamespace","ContentNamespaces"],["ContinuousCollisionDetection","Continuous collision detection (CCD)"],["Cookies","Cookies"],["Coroutines","Coroutines"],["create-layers","Create functional layers in Unity"],["creating-cookies-built-in-render-pipeline","Creating cookies for the Built-in Render Pipeline"],["CreatingAndUsingScripts","Creating and Using Scripts"],["CreatingComponents","Create components with scripts"],["CreatingDCCAssets","Creating models outside of Unity"],["CreatingEnvironments","World building"],["CreatingGameplay","Create Gameplay"],["CreatingPrefabs","Creating Prefabs"],["CreatingScenes","Scenes"],["CrossPlatformConsiderations","Cross-Platform Considerations"],["CSharpCompiler","C# compiler"],["CullingGroupAPI","CullingGroup API"],["cus-asmdef","Assembly definition and packages"],["cus-document","Documenting your package"],["cus-layout","Package layout"],["cus-legal","Meeting legal requirements"],["cus-naming","Naming your package"],["cus-samples","Creating samples for packages"],["cus-share","Sharing your package"],["cus-tests","Adding tests to a package"],["CustomizingYourWorkspace","Customizing your workspace"],["CustomPackages","Creating custom packages"],["CustomPhysicsShape","Sprite Editor: Custom Physics Shape"],["CustomScriptingSymbols","Custom scripting symbols"],["DeactivatingGameObjects","Deactivate GameObjects"],["DebuggingShadersWithPIX","Debugging DirectX 12 shaders with PIX"],["dedicated-server-assetbundles","Dedicated Server AssetBundles"],["dedicated-server-build","Build your application for Dedicated Server"],["dedicated-server-get-started","Get started with Dedicated Server"],["dedicated-server-introduction","Introduction to Dedicated Server"],["dedicated-server-optimizations","Dedicated Server optimizations"],["dedicated-server-player-settings","Dedicated Server Player settings"],["dedicated-server-requirements","Dedicated Server requirements"],["dedicated-server","Dedicated Server"],["deep-learning-super-sampling","Deep learning super sampling"],["deep-linking-android","Deep linking on Android"],["deep-linking-ios","Deep linking on iOS"],["deep-linking-macos","Deep linking for macOS"],["deep-linking-universal-windows-platform","Use deep linking on UWP"],["deep-linking","Deep linking"],["default-overlays-reference","Default Scene view overlay reference"],["DefaultPresetsByFolder","Applying default presets to Assets by folder"],["DeployingUnityOffline","Install Unity offline without the Hub"],["desktop-headless-mode","Desktop headless mode"],["DeveloperDashboard","Using the developer dashboard"],["DeveloperToolsFeature","Engineering feature set"],["device-simulator-adding-a-device","Adding a device"],["device-simulator-introduction","Device Simulator introduction"],["device-simulator-plugins","Extending the device simulator"],["device-simulator-simulated-classes","Simulated classes"],["device-simulator-view","The Simulator view"],["device-simulator","Device Simulator"],["display-and-hide-overlay","Display or hide an overlay"],["DomainReloading","Domain Reloading"],["dotnetProfileAssemblies","Referencing additional class library assemblies"],["dotnetProfileLimitations","Stable scripting runtime: known limitations"],["dotnetProfileSupport",".NET profile support"],["dots-instancing-shaders","DOTS Instancing shaders"],["DrawCallBatching","Draw call batching"],["dynamic-batching","Dynamic batching"],["DynamicResolution","Dynamic resolution"],["EditingCurves","Editing Curves"],["EditingInPrefabMode","Editing a Prefab in Prefab Mode"],["EditingPrefabViaInstance","Editing a Prefab via its instances"],["EditingValueProperties","Editing properties"],["editor-CustomEditors","Custom Editors"],["editor-EditorWindows","Editor Windows"],["editor-PropertyDrawers","Property Drawers"],["EditorAnalytics","Editor Analytics"],["EditorCommandLineArguments","Unity Editor command line arguments"],["EditorFeatures","Editor Features"],["Effectors2D","Effectors 2D"],["EventFunctions","Event Functions"],["EventSystem","Event System"],["Example-CreatingaBillboardPlane","Example: creating a quad"],["ExecutionOrder","Order of execution for event functions"],["ExtendingTheEditor","Extending the Editor with IMGUI"],["FBXImporter-Materials","Materials tab"],["FBXImporter-Model","Model tab"],["FBXImporter-Rig","Rig tab"],["FeatureSets","Feature sets"],["FormatDescription","Format of Text Serialized files"],["frame-debugger-window-event-hierarchy","Frame Debugger Event Hierarchy"],["frame-debugger-window-event-information","Frame Debugger event information"],["frame-debugger-window","Frame Debugger window reference"],["frame-timing-manager","FrameTimingManager"],["FrameDebugger","Debug frames in Unity"],["FrustumSizeAtDistance","The Size of the Frustum at a Given Distance from the Camera"],["fs-details","Features (detail) view"],["fs-install","Install a feature set from the Unity registry"],["GameObjects","GameObjects"],["GameplayStorytellingFeature","Gameplay and Storytelling feature set"],["GameView","The Game view"],["GeneratingMeshGeometryProcedurally","Using meshes with C# scripts"],["GenericAnimations","Importing a model with non-humanoid (generic) animations"],["GettingStartedInstallingUnity","Installing Unity"],["GI-Enlighten","Lightmapping using Enlighten Baked Global Illumination"],["GICache","GI cache"],["GIVis","Scene View Draw Modes for lighting"],["GizmosAndHandles","Gizmos and Handles"],["GizmosMenu","Gizmos menu"],["Glossary","Glossary"],["gpu-instancing-shader","Creating shaders that support GPU instancing"],["GPUInstancing","GPU instancing"],["GPUProgressiveLightmapper","The Progressive GPU Lightmapper (preview)"],["gradle-templates","Gradle templates"],["graphics-color","Color"],["graphics-performance-profiling","Graphics performance and profiling"],["graphics-tiers","Graphics tiers"],["Graphics","Graphics"],["GraphicsAPIs","Graphics API support"],["GraphicsCommandBuffers","Extending the Built-in Render Pipeline with CommandBuffers"],["GridSnapping","Grid snapping"],["gui-Basics","IMGUI Basics"],["gui-Controls","Controls"],["gui-Customization","Customization"],["gui-Extending","Extending IMGUI"],["gui-Layout","IMGUI Layout Modes"],["GUIScriptingGuide","Immediate Mode GUI (IMGUI)"],["handling-IL2CPP-additional-args","Handling platform specific settings for IL2CPP additional arguments"],["HDR","High dynamic range"],["HDRColorPicker","HDR color picker"],["Hierarchy","The Hierarchy window"],["high-definition-render-pipeline","Using the High Definition Render Pipeline"],["how-unity-builds-android-applications","How Unity builds Android applications"],["how-unity-builds-ios-applications","How Unity builds iOS applications"],["HOWTO-ImportObjectsFrom3DApps","Support for proprietary model file formats"],["HOWTO-UICreateFromScripting","Creating UI elements from scripting"],["HOWTO-UIFitContentSize","Making UI elements fit the size of their content"],["HOWTO-UIMultiResolution","Designing UI for Multiple Resolutions"],["HOWTO-UIScreenTransition","Creating Screen Transitions"],["HOWTO-UIWorldSpace","Creating a World Space UI"],["IL2CPP-managed-stack-traces","Managed stack traces with IL2CPP"],["IL2CPP-WindowsRuntimeSupport","Windows Runtime support"],["IL2CPP","IL2CPP Overview"],["IMEInput","IME in Unity"],["ImportActivityWindow","Import Activity window"],["ImporterConsistency","Importer Consistency"],["importing-lod-meshes","Importing LOD Meshes"],["ImportingAssets","Importing assets"],["ImportingModelFiles","Importing a model"],["ImportingTextures","Importing Textures"],["incremental-build-pipeline","Incremental build pipeline"],["Input","Input"],["InputModules","Input Modules"],["InspectorFocused","Focused Inspectors"],["InspectorOptions","Working in the Inspector"],["InstallingUnity","Installing Unity from the command line"],["InstantiatingPrefabs","Instantiating Prefabs at run time"],["InverseKinematics","Inverse Kinematics"],["ios-authorizations-in-unity","iOS authorizations in Unity"],["ios-building-and-delivering","Building and delivering for iOS"],["ios-detect-game-controllers","Detect Game Controllers"],["ios-developing","Developing for iOS"],["ios-device-simulator","Unity's Device Simulator for iOS"],["ios-environment-setup","iOS environment setup"],["ios-game-controller-support","Game Controller support"],["ios-handle-game-controller-input","Handle Game Controller input"],["ios-input-overview","iOS input overview"],["ios-input","Input for iOS devices"],["ios-introducing","Introducing iOS"],["ios-requirements-and-compatibility","iOS requirements and compatibility"],["iOSManagedStackTraces","Managed stack traces on iOS"],["iphone-API","iOS Scripting"],["iphone-bugreporting","Reporting crash bugs on iOS"],["iphone-BuildProcess","Build for iOS"],["iphone-Downloadable-Content","Preparing your application for In-App Purchases (IAP)"],["iphone-GettingStarted","Getting started with iOS"],["iphone-InternalProfiler","Measuring performance with the built-in profiler"],["iphone-iOS-Optimization","iOS-specific optimizations"],["iphone-Optimizing-Physics","Optimizing Physics Performance"],["iphone-performance","Optimizing Performance on iOS"],["iphone-playerSizeOptimization","Optimizing the size of the built iOS Player"],["iphone","iOS"],["job-system-copy-nativecontainer","Copying NativeContainer structures"],["job-system-custom-nativecontainer-example","Custom NativeContainer example"],["job-system-custom-nativecontainer","Implement a custom native container"],["job-system-jobs","Jobs overview"],["JobSystem","Job system"],["JobSystemCreatingJobs","Create and run a job"],["JobSystemJobDependencies","Job dependencies"],["JobSystemNativeContainer","Thread safe types"],["JobSystemOverview","Job system overview"],["JobSystemParallelForJobs","Parallel jobs"],["joints-section","Joints"],["Joints","Introduction to joints"],["joints2D-constraints","Constraints of 2D joints"],["Joints2D","2D joints"],["LateBinding","Late Binding"],["LayerBasedCollision","Layer-based collision detection"],["layermask-add","Add a layer to a layerMask"],["layermask-remove","Remove a layer from a layerMask"],["layermask-set","Set a layerMask"],["layers-and-layermasks","Layers and layerMasks"],["Layers","Layers"],["LevelOfDetail","Level of Detail (LOD) for meshes"],["LicenseActivationMethods","License activation methods"],["LicensesAndActivation","Licenses and activation"],["light-probes-and-scene-loading","Light Probes and Scene loading"],["LightExplorerExtension","Light Explorer extension"],["lighting-ambient-light","Ambient light"],["lighting-emissive-materials","Emissive materials"],["lighting-light-sources","Light sources"],["lighting-mode","Lighting Mode"],["lighting-precomputed-data","Precomputed lighting data"],["lighting-window","The Lighting window"],["Lighting","Types of light"],["LightingBakedAmbientOcclusion","Ambient occlusion"],["LightingExplorer","The Light Explorer window"],["LightingGiUvs-GeneratingLightmappingUVs","Generating lightmap UVs"],["LightingGiUvs-visualizing","Visualizing lightmap UVs"],["LightingGiUvs","Lightmap UVs introduction"],["LightingInUnity","Introduction to lighting"],["LightingOverview","Lighting"],["Lightmappers","Lightmapping"],["Lightmapping-SeamStitching","Lightmap seam stitching"],["Lightmapping","Lightmapping: Getting started"],["LightmappingDirectional","Directional Mode"],["Lightmaps-TechnicalInformation","Lightmaps: Technical information"],["LightmapSnapshot","Lighting Data Asset"],["LightMode-Baked","Light Mode: Baked"],["LightMode-Mixed-BakedIndirect","Lighting Mode: Baked Indirect"],["LightMode-Mixed-Shadowmask","Lighting Mode: Shadowmask"],["LightMode-Mixed-Subtractive","Lighting Mode: Subtractive"],["LightMode-Mixed","Light Mode: Mixed"],["LightMode-Realtime","Light Mode: Realtime"],["LightModes","Light Modes"],["LightProbes-MeshRenderer","Light Probes and the Mesh Renderer"],["LightProbes-MovingObjects","Light Probes for moving objects"],["LightProbes-Placing-Scripting","Placing Light Probes using scripting"],["LightProbes-TechnicalInformation","Light Probes: Technical information"],["LightProbes","Light Probes"],["Lights","Lights"],["LinearLighting","Color space"],["LinearRendering-GammaTextures","Gamma Textures with linear rendering"],["LinearRendering-LinearOrGammaWorkflow","Linear or gamma workflow"],["LinearRendering-LinearTextures","Working with linear Textures"],["linux-editor-troubleshooting","Troubleshooting the Linux Editor issues"],["linux-IL2CPPcrosscompiler","Linux IL2CPP cross-compiler"],["linux","Linux"],["LoadingResourcesatRuntime","Loading Resources at Runtime"],["LoadingTextureandMeshData","Loading texture and mesh data"],["LODForBakedGI","Lightmaps and LOD"],["LODRealtimeGI","LOD and Enlighten Realtime Global Illumination"],["LogFiles","Log files"],["LoopingAnimationClips","Loop optimization on Animation clips"],["low-level-native-plugin-memory-manager-api-reference","IUnityMemoryManager API reference"],["low-level-native-plugin-memory-manager-api","Memory Manager API for low-level native plug-ins"],["LowLevelNativePluginProfiler","Low-level native plug-in Profiler API"],["LowLevelNativePluginRenderingExtensions","Low-level native plug-in rendering extensions"],["LowLevelNativePluginShaderCompilerAccess","Low-level native plug-in Shader compiler access"],["macos-building-notarization","Code sign and notarize your macOS application"],["macos-building","Build a macOS application"],["macos-delivery","Build and distribute a macOS application"],["macos-distribution-mac-app-store","Deliver applications to the Mac App Store"],["macosbuildsettings","macOS build settings"],["macoscodesigning","Code sign your application"],["macosdevelopment","macOS development"],["macOSIL2CPPScriptingBackend","Use IL2CPP with macOS"],["macosnotarizationxcode","Notarize with Xcode and command-line tools"],["macosnotarizealtool","Notarize with altool"],["manage-overlay-configurations","Create and manage overlay configurations"],["manage-overlay-layouts","Manage overlay layouts"],["ManagedCodeDebugging","Debug C# code in Unity"],["ManagedCodeStripping","Managed code stripping"],["ManagingYourUnityLicense","Manage your license through the command line"],["ManualActivationCmdMac","Submit a license request from a command line and browser (macOS, Linux)"],["ManualActivationCmdWin","Submit a license request from a command line and browser (Windows)"],["ManualActivationGuide","Manual license activation"],["ManualActivationHub","Submit a license request from the Hub"],["ManualVersions","Documentation versions"],["MasterVariantAtlases","Master and Variant Sprite Atlases"],["materials-introduction","Materials introduction"],["Materials","Materials"],["MaterialsAccessingViaScript","Using materials with C# scripts"],["MaterialValidator","Physically Based Rendering Material Validator"],["materialvariant-concept","Material Variant benefits and limitations"],["materialvariant-hierarchyconcept","Material Variant inheritance"],["materialvariant-landingpage","Material Variants"],["materialvariant-tasks","Create, modify, and apply Material Variants"],["MecanimFAQ","Animation FAQ"],["MecanimPeformanceandOptimization","Performance and optimization"],["memory-allocator-customization","Memory allocator customization"],["mesh-compression","Compressing mesh data"],["mesh-introduction","Meshes introduction"],["mesh","Meshes"],["MessagingSystem","Messaging System"],["metal-debug","Debug Metal graphics"],["metal-introduction","Introduction to Metal"],["metal-optimize","Optimize Metal graphics"],["metal-requirements-and-compatibility","Metal requirements and compatibility"],["Metal","Metal"],["MetaPass","Lightmapping and shaders"],["MethodDistribution","Methods of distribution"],["MobileFeature","Mobile feature set"],["MobileInput","Mobile device input"],["MobileKeyboard","Mobile Keyboard"],["ModelingOptimizedCharacters","Creating models for optimal performance"],["models-importing","Importing models into Unity"],["models-preparing","Preparing your model files for export"],["models","Models"],["ModifyingSourceAssetsThroughScripting","Modifying Source Assets Through Scripting"],["Mono","Mono overview"],["MultiDisplay","Multi-display"],["MultipleCameras","Using more than one camera"],["MultiSceneEditing","Work with multiple scenes in Unity"],["MuscleDefinitions","Avatar Muscle & Settings tab"],["Namespaces","Namespaces"],["NativePluginInterface","Low-level native plug-in interface"],["NativePlugins","Native plug-ins"],["NestedPrefabs","Nested Prefabs"],["NestedStateMachines","Sub-State Machines"],["net-SocialAPI","Social API"],["NullReferenceException","Null Reference Exceptions"],["ObliqueFrustum","Using an oblique frustum"],["occlusion-culling-additional-resources","Occlusion culling additional resources"],["occlusion-culling-dynamic-gameobjects","Using occlusion culling with dynamic GameObjects"],["occlusion-culling-getting-started","Getting started with occlusion culling"],["occlusion-culling-scene-loading","Occlusion culling and Scene loading"],["occlusion-culling-window","The Occlusion Culling window"],["OcclusionCulling","Occlusion culling"],["OfflineDocumentation","Offline documentation"],["OpenGLCoreDetails","OpenGL Core"],["optimizing-draw-calls","Optimizing draw calls"],["OptimizingGraphicsPerformance","Graphics performance fundamentals"],["OrgsManagingyourOrganization","Managing your Organization"],["OrgsManagingyourOrganizationsProjects","Managing your Organization’s Projects"],["OrgsSubscriptionsAndSeats","Subscriptions and seats"],["OrgsUnityOrganizations","Unity Organizations"],["OtherViews","Additional windows"],["overlays-custom","Create your own overlay"],["overlays","Overlays"],["overriding-android-manifest","Override the Android App Manifest"],["overview-of-dot-net-in-unity","Overview of .NET in Unity"],["pack-build","Built-in packages"],["pack-core","Core packages"],["pack-exp","Experimental packages"],["pack-keys","Packages by keywords"],["pack-preview","Pre-release packages"],["pack-releasecandidate","Release Candidates"],["pack-safe","Released packages"],["Packages","Unity's Package Manager"],["PackagesList","Packages and feature sets"],["ParallelImport","Importing assets simultaneously"],["particle-system-job-system-integration","Particle System C# Job System integration"],["ParticleSystemModules","Particle System modules"],["ParticleSystems","Particle systems"],["PartSysCollisionModule","Collision module"],["PartSysColorBySpeedModule","Color by Speed module"],["PartSysColorOverLifeModule","Color over Lifetime module"],["PartSysCustomDataModule","Custom Data module"],["PartSysEmissionModule","Emission module"],["PartSysExtForceModule","External Forces module"],["PartSysForceOverLifeModule","Force over Lifetime module"],["PartSysInheritVelocity","Inherit Velocity module"],["PartSysInstancing","Particle System GPU Instancing"],["PartSysLifetimeByEmitterSpeedModule","Lifetime by Emitter Speed module"],["PartSysLightsModule","Lights module"],["PartSysLimitVelOverLifeModule","Limit Velocity over Lifetime module"],["PartSysMainModule","Main module"],["PartSysNoiseModule","Noise module"],["PartSysReference","Components and Modules"],["PartSysRendererModule","Renderer module"],["PartSysRotBySpeedModule","Rotation by Speed module"],["PartSysRotOverLifeModule","Rotation over Lifetime module"],["PartSysShapeModule","Shape module"],["PartSysSizeBySpeedModule","Size by Speed module"],["PartSysSizeOverLifeModule","Size over Lifetime module"],["PartSysSubEmitModule","Sub Emitters module"],["PartSysTexSheetAnimModule","Texture Sheet Animation module"],["PartSysTrailsModule","Trails module"],["PartSysTriggersModule","Triggers module"],["PartSysUsage","Using the Built-in Particle System"],["PartSysVelOverLifeModule","Velocity over Lifetime module"],["PartSysVertexStreams","Particle System vertex streams and Standard Shader support"],["perForceIntegration","Perforce Integration"],["performance-disabling-garbage-collection","Disabling garbage collection"],["performance-garbage-collection-best-practices","Garbage collection best practices"],["performance-garbage-collector","Garbage collector overview"],["performance-incremental-garbage-collection","Incremental garbage collection"],["performance-managed-memory","Managed memory"],["performance-memory-overview","Memory in Unity"],["performance-profiler-traces","Analyzing profiler traces"],["performance-profiling-tools","Profiling tools"],["PhysicalCameras","Using Physical Cameras"],["physics-articulations","Introduction to physics articulations"],["physics-multi-scene","Multi-scene physics"],["Physics2DReference","Physics 2D Reference"],["PhysicsDebugVisualization","Physics Debug window reference"],["PhysicsOverview","Built-in 3D Physics"],["PhysicsSection","Physics"],["PlatformDependentCompilation","Conditional compilation"],["PlatformSpecific","Platform development"],["play-asset-delivery","Play Asset Delivery"],["Playables-Examples","Playables Examples"],["Playables-Graph","The PlayableGraph"],["Playables-ScriptPlayable","ScriptPlayable and PlayableBehaviour"],["Playables","Playables API"],["PlayerCommandLineArguments","Unity Standalone Player command line arguments"],["PlayerSettings-linux","Linux Player settings"],["PlayerSettings-macOS","macOS player settings"],["playersettings-windows","Windows Player settings"],["PluginInspector","Import and configure plug-ins"],["Plugins","Plug-ins"],["PluginsForAndroid","Create and use plug-ins in Android"],["PluginsForDesktop","Building plug-ins for desktop platforms"],["PluginsForIOS","Building plug-ins for iOS"],["position-overlay","Position an overlay"],["PositioningGameObjects","Position GameObjects"],["PostProcessingOverview","Post-processing and full-screen effects"],["PrefabInstanceOverrides","Instance overrides"],["PrefabOverridesMultiLevel","Overrides at multiple levels"],["Prefabs","Prefabs"],["PrefabVariants","Prefab Variants"],["Preferences","Preferences"],["Presets","Presets"],["PrimitiveObjects","Primitive and placeholder objects"],["profiler-2d-physics-profiler-module","Physics 2D Profiler module"],["profiler-asset-loading-module","Asset Loading Profiler module"],["Profiler-creating-custom-counters","Creating custom Profiler counters"],["Profiler-creating-custom-modules","Creating Custom Profiler modules"],["Profiler-customizing-details-view","Creating a custom module details panel"],["Profiler-customizing","Customizing the Profiler"],["profiler-file-access-module","File Access Profiler module"],["profiler-markers","Common Profiler markers"],["profiler-module-editor","Profiler Module Editor"],["profiler-profiling-applications","Profiling your application"],["profiler-video-profiler-module","Video Profiler module"],["profiler-virtual-texturing-module","Virtual Texturing Profiler module"],["Profiler","Profiler overview"],["ProfilerAudio","Audio Profiler module"],["ProfilerCPU","CPU Usage Profiler module"],["ProfilerGI","Global Illumination Profiler module"],["ProfilerGPU","GPU Usage Profiler module"],["ProfilerMemory","Memory Profiler module"],["ProfilerPhysics","Physics Profiler module"],["ProfilerRendering","Rendering Profiler module"],["ProfilerUI","UI and UI Details Profiler"],["ProfilerWindow","The Profiler window"],["progressive-lightmapper","The Progressive Lightmapper"],["ProgressiveLightmapper-CustomFallOff","Custom fall-off"],["ProgressiveLightmapper-UVOverlap","Fixing lightmap UV overlap"],["ProjectView","The Project window"],["properties","Unity Properties"],["property-bags","Property bags"],["property-paths","Property paths"],["property-visitors-low-level-api","Use low-level APIs to create a property visitor"],["property-visitors-PropertyVisitor","Use `PropertyVisitor` to create a property visitor"],["property-visitors","Property visitors"],["PublishingBuilds","Publishing Builds"],["QuaternionAndEulerRotationsInUnity","Rotation and orientation in Unity"],["Quickstart2D","2D game development quickstart guide"],["Quickstart2DArt","Art styles for 2D games"],["Quickstart2DCreate","Creating a 2D game"],["Quickstart2DPerspective","Game perspectives for 2D games"],["Quickstart2DSetup","Initial setup for 2D games"],["Quickstart3D","3D game development quickstart guide"],["Quickstart3DCreate","Creating a 3D game"],["QuickstartGuides","Quickstart guides"],["ragdoll-physics-section","Ragdoll physics"],["RagdollStability","Joint and Ragdoll stability"],["Raycasters","Raycasters"],["realtime-gi-using-enlighten","Realtime Global Illumination using Enlighten"],["ReducingFilesize","Reducing the file size of your build"],["ReflectionProbes","Reflection Probes"],["RefProbePerformance","Reflection Probe performance"],["RefProbeTypes","Types of Reflection Probe"],["render-pipelines-feature-comparison","Render pipeline feature comparison"],["render-pipelines-overview","Introduction to render pipelines"],["render-pipelines","Render pipelines"],["RenderDocIntegration","RenderDoc Integration"],["RenderingPaths","Rendering paths in the Built-in Render Pipeline"],["RenderingStatistics","The Rendering Statistics window"],["RenderTech-DeferredShading","Deferred Shading rendering path"],["RenderTech-ForwardRendering","Forward rendering path"],["RenderTech-HardwareRequirements","Hardware requirements for the Built-in Render Pipeline"],["RenderTech-VertexLit","Vertex Lit Rendering Path"],["Retargeting","Retargeting of Humanoid animations"],["RigidbodiesOverview","Introduction to rigid body physics"],["rigidbody-configure-colliders","Configure Rigidbody Colliders"],["rigidbody-constant-force","Apply constant force to a Rigidbody"],["rigidbody-interpolation","Apply interpolation to a Rigidbody"],["rigidbody-physics-section","Rigidbody physics"],["rigidbody2D-body-types","Rigidbody 2D body types"],["Rigidbody2D-Dynamic","Body Type: Dynamic"],["Rigidbody2D-Kinematic","Body Type: Kinematic"],["rigidbody2D-simulated-property","Rigidbody 2D properties: Simulated"],["Rigidbody2D-Static","Body Type: Static"],["rigidbody2D","Rigidbody 2D"],["RootMotion","Root Motion - how it works"],["roslyn-analyzers","Roslyn analyzers and source generators"],["RunningEditorCodeOnLaunch","Running Editor Script Code on Launch"],["SafeMode","Safe Mode"],["Saving","Save your work"],["scene-templates-creating","Creating scene templates"],["scene-templates-customizing-scene-instantiation","Customizing new scene creation"],["scene-templates-editing","Editing scene templates"],["scene-templates-settings","Scene template settings"],["scene-templates","Scene Templates"],["ScenePicking","Pick and select GameObjects"],["SceneReloading","Scene Reloading"],["scenes-working-with","Creating, loading, and saving Scenes"],["SceneViewCamera","Scene view Camera"],["SceneViewNavigation","Scene view navigation"],["SceneVisibility","Scene visibility"],["script-AnimationWindowEvent","Using Animation Events"],["script-AspectRatioFitter","Aspect Ratio Fitter"],["script-Button","Button"],["script-CanvasScaler","Canvas Scaler"],["script-compilation","Script compilation"],["script-ContentSizeFitter","Content Size Fitter"],["script-Dropdown","Dropdown"],["script-EventSystem","Event System Manager"],["script-EventTrigger","Event Trigger"],["script-GraphicRaycaster","Graphic Raycaster"],["script-GridLayoutGroup","Grid Layout Group"],["script-HorizontalLayoutGroup","Horizontal Layout Group"],["script-Image","Image"],["script-InputField","Input Field"],["script-LayoutElement","Layout Element"],["script-Mask","Mask"],["script-Outline","Outline"],["script-Physics2DRaycaster","Physics 2D Raycaster"],["script-PhysicsRaycaster","Physics Raycaster"],["script-PositionAsUV1","Position as UV1"],["script-RawImage","Raw Image"],["script-RectMask2D","RectMask2D"],["script-Scrollbar","Scrollbar"],["script-ScrollRect","Scroll Rect"],["script-Selectable","Selectable Base Class"],["script-SelectableNavigation","Navigation Options"],["script-SelectableTransition","Transition Options"],["script-Serialization","Script serialization"],["script-Shadow","Shadow"],["script-Slider","Slider"],["script-StandaloneInputModule","Standalone Input Module"],["script-Terrain","Terrain"],["script-Text","Text"],["script-Toggle","Toggle"],["script-ToggleGroup","Toggle Group"],["script-TouchInputModule","Touch Input Module"],["script-VerticalLayoutGroup","Vertical Layout Group"],["script-VFXPropertyBinder","Property Binders"],["scriptable-render-pipeline-introduction","Scriptable Render Pipeline introduction"],["ScriptableRenderPipeline","Scriptable Render Pipeline fundamentals"],["ScriptCompilationAssemblyDefinitionFiles","Assembly definitions"],["ScriptCompileOrderFolders","Special folders and script compilation order"],["ScriptedImporters","Scripted Importers"],["scripting-backends","Scripting backends"],["ScriptingAssets","Scripting with Assets"],["ScriptingConcepts","Scripting concepts"],["ScriptingImportantClasses","Important Classes"],["ScriptingRestrictions","Scripting restrictions"],["ScriptingRootMotion","Tutorial: Scripting Root Motion for \"in-place\" humanoid animations"],["ScriptingSection","Scripting"],["ScriptingSettingUp","Setting Up Your Scripting Environment"],["ScriptingToolsIDEs","Integrated development environment (IDE) support"],["ScriptingTransform","Transform"],["scriptmultiplescenes","Use scripts to edit multiple scenes"],["search-additional-searchfilters","Additional Search filters"],["search-advanced-object-picker","Search Object Picker"],["search-api","Execute API methods"],["search-asset-store","Search the Unity Asset Store"],["search-assets","Search Project Assets"],["search-calculator","The calculator"],["search-expression-functions-ref","Functions reference"],["search-expressions","Search expressions"],["search-files","Search for files"],["search-filters","Filter searches"],["search-help","Help Search Provider"],["search-index-manager","The Index Manager"],["search-menu","Search the Unity main menu"],["search-overview","Unity Search"],["search-packages","Search for packages"],["search-providers","Search Providers"],["search-query-operators","Search query operators"],["search-saved-queries","Search saved queries"],["search-scene","Search the current Scene"],["search-settings","Search Settings and Preferences"],["search-tables","Search tables"],["search-usage","Search usage"],["Searching","Search in the Editor"],["SettingUpProjectServices","Setting up your project for Unity services"],["setupmultiplescenes","Set up multiple scenes"],["Shader-Autodesk-Interactive","Autodesk Interactive shader"],["shader-branching","Branching in shaders"],["shader-built-in","Built-in shaders"],["shader-compilation","Shader compilation"],["shader-conditionals","Conditionals in shaders"],["shader-error","Error and loading shaders"],["shader-graph","Using Shader Graph"],["shader-how-many-variants","Check how many shader variants you have"],["shader-include-directives","include and include_with_pragmas directives in HLSL"],["shader-introduction","Shaders introduction"],["shader-keywords-material-inspector","Using shader keywords with the material Inspector"],["shader-keywords-scripts","Using shader keywords with C# scripts"],["shader-keywords","Shader keywords"],["shader-loading","How Unity loads and uses shaders"],["shader-NormalBumpedDiffuse","Bumped Diffuse"],["shader-NormalBumpedSpecular","Bumped Specular"],["shader-NormalDecal","Decal"],["shader-NormalDiffuse","Diffuse"],["shader-NormalDiffuseDetail","Diffuse Detail"],["shader-NormalFamily","Normal Shader Family"],["shader-NormalParallaxDiffuse","Parallax Diffuse"],["shader-NormalParallaxSpecular","Parallax Bumped Specular"],["shader-NormalSpecular","Specular"],["shader-NormalVertexLit","Vertex-Lit"],["shader-objects","The Shader class"],["shader-performance-debugging","Understanding shader performance"],["shader-Performance","Usage and Performance of Built-in Shaders"],["shader-predefined-pass-tags-built-in","ShaderLab: Predefined Pass tags in the Built-in Render Pipeline"],["shader-preprocessor-directives","Preprocessor directives in HLSL"],["shader-ReflectiveBumpedDiffuse","Reflective Bumped Diffuse"],["shader-ReflectiveBumpedSpecular","Reflective Bumped Specular"],["shader-ReflectiveBumpedUnlit","Reflective Normal Mapped Unlit"],["shader-ReflectiveBumpedVertexLit","Reflective Normal mapped Vertex-lit"],["shader-ReflectiveDiffuse","Reflective Diffuse"],["shader-ReflectiveFamily","Reflective Shader Family"],["shader-ReflectiveParallaxDiffuse","Reflective Parallax Diffuse"],["shader-ReflectiveParallaxSpecular","Reflective Parallax Specular"],["shader-ReflectiveSpecular","Reflective Specular"],["shader-ReflectiveVertexLit","Reflective Vertex-Lit"],["shader-SelfIllumBumpedDiffuse","Self-Illuminated Normal mapped Diffuse"],["shader-SelfIllumBumpedSpecular","Self-Illuminated Normal mapped Specular"],["shader-SelfIllumDiffuse","Self-Illuminated Diffuse"],["shader-SelfIllumFamily","Self-Illuminated Shader Family"],["shader-SelfIllumParallaxDiffuse","Self-Illuminated Parallax Diffuse"],["shader-SelfIllumParallaxSpecular","Self-Illuminated Parallax Specular"],["shader-SelfIllumSpecular","Self-Illuminated Specular"],["shader-SelfIllumVertexLit","Self-Illuminated Vertex-Lit"],["shader-shaderlab-code-blocks","ShaderLab: adding shader programs"],["shader-shaderlab-commands","ShaderLab: commands"],["shader-shaderlab-legacy","ShaderLab legacy functionality"],["shader-skybox-6sided","6 Sided skybox"],["shader-skybox-cubemap","Cubemap skybox"],["shader-skybox-panoramic","Panoramic skybox"],["shader-skybox-procedural","Procedural skybox"],["shader-StandardParticleShaders","Standard Particle Shaders"],["shader-StandardShader","Standard Shader"],["shader-TransBumpedDiffuse","Transparent Bumped Diffuse"],["shader-TransBumpedSpecular","Transparent Bumped Specular"],["shader-TransCutBumpedDiffuse","Transparent Cutout Bumped Diffuse"],["shader-TransCutBumpedSpecular","Transparent Cutout Bumped Specular"],["shader-TransCutDiffuse","Transparent Cutout Diffuse"],["shader-TransCutSpecular","Transparent Cutout Specular"],["shader-TransCutVertexLit","Transparent Cutout Vertex-Lit"],["shader-TransDiffuse","Transparent Diffuse"],["shader-TransParallaxDiffuse","Transparent Parallax Diffuse"],["shader-TransParallaxSpecular","Transparent Parallax Specular"],["shader-TransparentCutoutFamily","Transparent Cutout Shader Family"],["shader-TransparentFamily","Transparent Shader Family"],["shader-TransSpecular","Transparent Specular"],["shader-TransVertexLit","Transparent Vertex-Lit"],["shader-variant-collections","Shader variant collections"],["shader-variant-stripping","Shader variant stripping"],["shader-variants-and-keywords","Branching, variants, and keywords"],["shader-variants","Shader variants"],["shader-writing-vertex-fragment","Example shaders"],["shader-writing","Writing shaders"],["Shaders","Shaders"],["ShadersOverview","Shaders core concepts"],["shadow-cascades","Shadow Cascades"],["shadow-configuration","Configuring shadows"],["shadow-distance","Shadow Distance"],["shadow-mapping","Shadow mapping"],["ShadowPerformance","Shadow troubleshooting"],["Shadows","Shadows"],["ShortcutsManager","Shortcuts Manager"],["SinglePassInstancing","Single-pass instanced rendering and custom shaders"],["SinglePassStereoRendering","Stereo rendering"],["sky","Sky"],["skybox-shaders","Skybox shaders"],["skyboxes-using","Using skyboxes"],["skyboxes","Skyboxes"],["SL-AlphaTest","ShaderLab: legacy alpha testing"],["SL-AlphaToMask","ShaderLab command: AlphaToMask"],["SL-BindChannels","ShaderLab: legacy vertex data channel mapping"],["SL-Blend","ShaderLab command: Blend"],["SL-BlendOp","ShaderLab command: BlendOp"],["SL-BuiltinFunctions","Built-in shader helper functions"],["SL-BuiltinIncludes","Built-in shader include files"],["SL-BuiltinMacros","Built-in macros"],["SL-CameraDepthTexture","Cameras and depth textures"],["SL-ColorMask","ShaderLab command: ColorMask"],["SL-Conservative","ShaderLab command: Conservative"],["SL-Cull","ShaderLab command: Cull"],["SL-CustomEditor","ShaderLab: assigning a custom editor"],["SL-DataTypesAndPrecision","Shader data types and precision"],["SL-DebuggingD3D11ShadersWithVS","Debugging shaders using Visual Studio"],["SL-Fallback","ShaderLab: assigning a fallback"],["SL-Fog","ShaderLab: legacy fog"],["SL-GLSLShaderPrograms","GLSL in Unity"],["SL-GrabPass","ShaderLab command: GrabPass"],["SL-Material","ShaderLab: legacy lighting"],["SL-MultipleProgramVariants","Declaring and using shader keywords in HLSL"],["SL-Name","ShaderLab: assigning a name to a Pass"],["SL-Offset","ShaderLab command: Offset"],["SL-Other","ShaderLab: grouping commands with the Category block"],["SL-PackageRequirements","ShaderLab: specifying package requirements"],["SL-Pass","ShaderLab: defining a Pass"],["SL-PassTags","ShaderLab: assigning tags to a Pass"],["SL-PlatformDifferences","Writing shaders for different graphics APIs"],["SL-PragmaDirectives","pragma directives in HLSL"],["SL-Properties","ShaderLab: defining material properties"],["SL-PropertiesInPrograms","Accessing shader properties in Cg/HLSL"],["SL-Reference","ShaderLab"],["SL-RenderPipeline","Surface Shaders and rendering paths"],["SL-SamplerStates","Using sampler states"],["SL-SetTexture","ShaderLab: legacy texture combining"],["SL-Shader","ShaderLab: defining a Shader object"],["SL-ShaderCompilationAPIs","Targeting graphics APIs and platforms in HLSL"],["SL-ShaderCompileTargets","Targeting shader models and GPU features in HLSL"],["SL-ShaderLOD","ShaderLab: assigning a LOD value to a SubShader"],["SL-ShaderPerformance","Optimizing shader runtime performance"],["SL-ShaderPrograms","HLSL in Unity"],["SL-ShaderReplacement","Replacing shaders at runtime"],["SL-ShaderSemantics","Shader semantics"],["SL-ShadingLanguage","Writing shaders overview"],["SL-Stencil","ShaderLab command: Stencil"],["SL-SubShader","ShaderLab: defining a SubShader"],["SL-SubShaderTags","ShaderLab: assigning tags to a SubShader"],["SL-SurfaceShaderExamples","Surface Shader examples"],["SL-SurfaceShaderLighting","Custom lighting models in Surface Shaders"],["SL-SurfaceShaderLightingExamples","Surface Shader lighting examples"],["SL-SurfaceShaders","Writing Surface Shaders"],["SL-SurfaceShaderTessellation","Surface Shaders with DX11 / OpenGL Core Tessellation"],["SL-UnityShaderVariables","Built-in shader variables"],["SL-UsePass","ShaderLab command: UsePass"],["SL-VertexFragmentShaderExamples","Custom shader fundamentals"],["SL-VertexProgramInputs","Providing vertex data to vertex programs"],["SL-ZClip","ShaderLab command: ZClip"],["SL-ZTest","ShaderLab command: ZTest"],["SL-ZWrite","ShaderLab command: ZWrite"],["SmartMerge","Smart merge"],["SparseTextures","Sparse Textures"],["SpecialFolders","Special folder names"],["SpeedTree","SpeedTree"],["SpeedTreeImporter-Materials","Materials tab"],["SpeedTreeImporter-Model","Model tab"],["Splittinganimations","Extracting animation clips"],["sprite-atlas","Sprite Atlas"],["sprite-automatic-slicing","Automatic slicing"],["Sprite-data-provider-api","Sprite Editor Data Provider API"],["sprite-editor-use","Use the Sprite Editor"],["sprite-polygon-resizing","Resize polygons"],["SpriteAtlasDistribution","Preparing Sprite Atlases for distribution"],["SpriteAtlasScenarios","Resolving different Sprite Atlas scenarios"],["SpriteAtlasV2","Sprite Atlas V2"],["SpriteAtlasWorkflow","Sprite Atlas workflow"],["SpriteCreator","Sprite Creator"],["SpriteEditor-SecondaryTextures","Sprite Editor: Secondary Textures"],["SpriteEditor","Sprite Editor"],["SpriteOutlineEditor","Sprite Editor: Custom Outline"],["SpritePacker","Sprite Packer"],["SpritePackerModes","Sprite Packer Modes"],["sprites-setup","Set up sprites"],["sprites-sort","Sort sprites"],["Sprites","Work with sprites"],["srp-creating-render-pipeline-asset-and-render-pipeline-instance","Creating a Render Pipeline Asset and Render Pipeline Instance in a custom render pipeline"],["srp-creating-simple-render-loop","Creating a simple render loop in a custom render pipeline"],["srp-custom-getting-started","Creating a custom render pipeline based on the Scriptable Render Pipeline"],["srp-custom","Creating a custom render pipeline"],["srp-setting-render-pipeline-asset","How to get, set, and configure the active render pipeline"],["srp-using-scriptable-render-context","Scheduling and executing rendering commands in the Scriptable Render Pipeline"],["SRPBatcher","Scriptable Render Pipeline Batcher"],["StackTrace","Stack trace logging"],["StandardShaderContextAndContent","Content and Context"],["StandardShaderFresnel","The Fresnel Effect"],["StandardShaderMakeYourOwn","Make your own"],["StandardShaderMaterialCharts","Material charts"],["StandardShaderMaterialParameterAlbedoColor","Albedo Color and Transparency"],["StandardShaderMaterialParameterDetail","Secondary Maps (Detail Maps) & Detail Mask"],["StandardShaderMaterialParameterEmission","Emission"],["StandardShaderMaterialParameterHeightMap","Heightmap"],["StandardShaderMaterialParameterMetallic","Metallic mode: Metallic Property"],["StandardShaderMaterialParameterNormalMap","Normal map (Bump mapping)"],["StandardShaderMaterialParameterOcclusionMap","Occlusion Map"],["StandardShaderMaterialParameterRenderingMode","Rendering Mode"],["StandardShaderMaterialParameters","Standard Shader Material Inspector reference"],["StandardShaderMaterialParameterSmoothness","Smoothness"],["StandardShaderMaterialParameterSpecular","Specular mode: Specular Property"],["StandardShaderMetallicVsSpecular","Metallic vs. specular workflow"],["StateMachineBasics","State Machine Basics"],["StateMachineBehaviours","State Machine Behaviours"],["StateMachineTransitions","State Machine Transitions"],["static-batching","Static batching"],["StaticObjects","Static GameObjects"],["StatusBar","The status bar"],["StreamingAssets","Streaming Assets"],["StructureOfXcodeProject","Structure of a Unity Xcode Project"],["StyledText","Rich Text"],["SupportedEvents","Supported Events"],["SupportingPresets","Supporting presets"],["svt-cache-management","Cache Management for Virtual Texturing"],["svt-enable-in-project","Enabling Streaming Virtual Texturing in your project"],["svt-error-material","Virtual Texturing error material"],["svt-how-it-works","How Streaming Virtual Texturing works"],["svt-marking-textures","Marking textures as \"Virtual Texturing Only\""],["svt-requirements-compatibility","Streaming Virtual Texturing requirements and compatibility"],["svt-streaming-virtual-texturing","Streaming Virtual Texturing"],["svt-use-in-shader-graph","Using Streaming Virtual Texturing in Shader Graph"],["system-requirements","System requirements for Unity 2022.3"],["Tags","Tags"],["TargetMatching","Target Matching"],["TermsOfUse","Trademarks and terms of use"],["terrain-CreateNeighborTerrains","Create Neighbor Terrains"],["terrain-Grass","Grass and other details"],["terrain-Heightmaps","Working with Heightmaps"],["terrain-OtherSettings","Terrain settings"],["terrain-PaintHoles","Paint Holes"],["terrain-PaintTexture","Paint Texture"],["terrain-RaiseLowerTerrain","Raise or Lower Terrain"],["terrain-Runtime","Using Terrain at runtime"],["terrain-SetHeight","Set Height"],["terrain-SmoothHeight","Smooth Height"],["terrain-StampTerrain","Stamp Terrain"],["terrain-Tools","Terrain tools"],["terrain-Trees","Trees"],["terrain-UsingTerrains","Creating and editing Terrains"],["TerrainTools","Terrain Tools"],["testing-editortestsrunner","Unit Testing"],["TextSceneFormat","Text-Based Scene Files"],["texture-compression-formats","Texture formats"],["texture-mipmaps-introduction","Mipmaps introduction"],["texture-mipmaps","Mipmaps"],["texture-type-cookie","Cookie Import Settings reference"],["texture-type-cursor","Cursor Import Settings reference"],["texture-type-default","Default Import Settings reference"],["texture-type-directional-lightmap","Directional Lightmap Import Settings reference"],["texture-type-editor-gui-and-legacy-gui","Editor GUI and Legacy GUI Import Settings reference"],["texture-type-lightmap","Lightmap Import Settings reference"],["texture-type-normal-map","Normal map Import Settings reference"],["texture-type-shadowmask","Shadowmask Import Settings reference"],["texture-type-singlechannel","Single Channel Import Settings reference"],["texture-type-sprite","Sprite (2D and UI) Import Settings reference"],["Textures","Textures"],["TextureStreaming-API","The Mipmap Streaming system API"],["TextureStreaming","The Mipmap Streaming system"],["Tile-Palette-Preferences","Tile Palette Preferences"],["Tile-Palette-visual-elements","Tile Palette visual elements"],["Tilemap-CreatingTilemaps","Creating Tilemaps"],["Tilemap-CreatingTiles","Creating Tiles"],["Tilemap-Hexagonal","Hexagonal Tilemaps"],["Tilemap-Isometric-CreateIso","Creating an Isometric Tilemap"],["Tilemap-Isometric-Palette","Creating a Tile Palette for an Isometric Tilemap"],["Tilemap-Isometric-RenderModes","Tilemap Renderer Modes"],["Tilemap-Isometric-ScriptableBrushes","Scriptable Brushes"],["Tilemap-Isometric-SpritesImport","Importing and preparing Sprites for an Isometric Tilemap"],["Tilemap-Isometric","Isometric Tilemaps"],["Tilemap-Painting","Painting on Tilemaps"],["Tilemap-Palette","Creating a Tile Palette"],["Tilemap-ScriptableBrushes-Example","Scriptable Brush example"],["Tilemap-ScriptableBrushes-GridBrushBase","GridBrushBase"],["Tilemap-ScriptableBrushes-GridBrushEditorBase","GridBrushEditorBase"],["Tilemap-ScriptableBrushes-OtherClasses","Other useful classes"],["Tilemap-ScriptableBrushes-TilemapEditorTool","TilemapEditorTool"],["Tilemap-ScriptableBrushes","Scriptable Brushes"],["Tilemap-ScriptableTiles-Example","Scriptable Tile example"],["Tilemap-ScriptableTiles-OtherClasses","Other useful classes"],["Tilemap-ScriptableTiles-Tile","Tile"],["Tilemap-ScriptableTiles-TileAnimationData","TileAnimationData"],["Tilemap-ScriptableTiles-TileBase","TileBase"],["Tilemap-ScriptableTiles-TileData","TileData"],["Tilemap-ScriptableTiles","Scriptable Tiles"],["Tilemap-TileAsset","Tile asset reference"],["Tilemap-workflow","Tilemap workflow"],["Tilemap","Tilemaps"],["TilemapPainting-SelectionTool","Select Tool"],["TimeFrameManagement","Time"],["Toolbar","The Toolbar"],["TrackerModules","Tracker Modules"],["TransferringProjects","Transfer a Project to a new Organization"],["tree-Branches","Branch Group Properties"],["tree-FirstTree","Building Your First Tree"],["tree-Leaves","Leaf Group Properties"],["tree-Structure","Tree Basics"],["TreeViewAPI","TreeView"],["TroubleShooting","Troubleshooting"],["TroubleShootingEditor","Troubleshoot the Editor"],["TroubleShootingIPhone","Troubleshooting on iOS devices"],["tvos-building-your-application","Building your application for tvOS"],["tvos-debugging","Debugging Your Application"],["tvOS-developing","Developing for tvOS"],["tvOS-introducing","tvOS"],["tvos-player-settings","tvOS Player Settings"],["tvos-requirements-and-compatibility","Requirements and compatibility"],["tvos-setting-up-application-navigation","Setting up app navigation from the Unity UI"],["tvos-supporting-input-devices","Supporting input devices on tvOS"],["udp-api","UDP API"],["udp-distribution","Distributing your game with UDP"],["udp-firebase","Using Firebase with UDP builds"],["udp-getting-started","Getting started with UDP"],["udp-implementing-iap","Implementing IAP products"],["udp-managing-and-publishing","Managing and publishing your game on the UDP console"],["udp-reference","UDP reference"],["udp-sandbox-testing","Testing your game in the UDP sandbox"],["udp-sdk-data-collection","UDP SDK data collection"],["udp-service-interoperability","Using UDP with other services"],["udp-troubleshooting","UDP troubleshooting"],["udp","Unity Distribution Portal"],["UI-system-compare","Comparison of UI systems in Unity"],["UIAnimationIntegration","Animation Integration"],["UIAutoLayout","Auto Layout"],["UIB-getting-started","Get started with UI Builder"],["UIB-interface-overview","UI Builder interface overview"],["UIB-project-setting","UI Builder project settings"],["UIB-structuring-ui-custom-elements","Create a custom control with two attributes"],["UIB-structuring-ui-elements","Work with elements"],["UIB-structuring-ui-templates","Use UXML instances as templates"],["UIB-styling-ui-backgrounds","Set background images"],["UIB-styling-ui-text","Style text with USS"],["UIB-styling-ui-using-uss-selectors","Style UI with UI Builder"],["UIB-styling-ui-using-uss-variables","Assign USS variables in UI Builder"],["UIB-testing-ui","Test UI"],["UIBasicLayout","Basic Layout"],["UIBuilder","UI Builder"],["UICanvas","Canvas"],["UIE-9-slice-images-with-ui-toolkit","9-Slice images with UI Toolkit"],["UIE-about-uss","Introduction to USS"],["UIE-add-style-to-uxml","Add styles to UXML"],["UIE-apply-styles-with-csharp","Apply styles in C# scripts"],["UIE-best-practices-for-managing-elements","Best practices for managing elements"],["UIE-bind-custom-control","Bind a custom control"],["UIE-bind-to-custom-data-type","Bind a custom control to custom data type"],["UIE-bind-to-list-without-listview","Bind to a list without ListView"],["UIE-bind-to-list","Bind to a list with ListView"],["UIE-bind-to-nested-properties","Bind to nested properties"],["UIE-bind-uxml-template","Bind to a UXML template"],["UIE-bind-without-bindpath","Bind without the binding path"],["UIE-bindable-elements","Bindable elements reference"],["UIE-binding-data-type-conversion","Bindable data types and fields"],["UIE-binding-examples","Binding examples"],["UIE-binding-implementation-details","Binding system implementation details"],["UIE-Binding","SerializedObject data binding"],["UIE-Capture-Events","Capture events"],["UIE-Change-Events","Change events"],["UIE-Click-Events","Click events"],["UIE-color-gradient","Color gradients"],["UIE-Command-Events","Command events"],["UIE-contextual-menus","Contextual menu events"],["UIE-Controls","Structure UI with C# scripts"],["UIE-coordinate-and-position-system","Coordinate and position systems"],["UIE-create-a-binding-callback-any-properties","Receive callbacks when any bound properties change"],["UIE-create-a-binding-callback","Receive callbacks when a bound property changes"],["UIE-create-a-binding-csharp","Bind with binding path in C# script"],["UIE-create-a-binding-uxml-bind","Bind with UXML and C# script"],["UIE-create-a-binding-uxml-inspector","Create a binding with the Inspector"],["UIE-create-a-conditional-ui","Use Toggle to create a conditional UI"],["UIE-create-a-popup-window","Create a pop-up window"],["UIE-create-bindable-custom-control","Create a bindable custom control"],["UIE-create-custom-controls","Create a custom control"],["UIE-create-custom-style-custom-control","Create a custom style for a custom control"],["UIE-create-drag-and-drop-ui","Create a drag-and-drop UI inside a custom Editor window"],["UIE-create-list-view-complex","Create a complex list view"],["UIE-create-tabbed-menu-for-runtime","Create a tabbed menu for runtime"],["UIE-custom-controls","Custom controls"],["UIE-custom-tag-name-and-attributes","Customize UXML tag names and attributes"],["UIE-drag-across-windows","Create a drag-and-drop UI to drag between Editor windows"],["UIE-Drag-Events","Drag-and-drop events"],["UIE-draw-order","Draw order"],["UIE-ElementRef","UXML elements reference"],["UIE-encapsulate-uxml-with-logic","Encapsulate UXML documents with logic"],["UIE-event-examples","Event examples"],["UIE-Events-Dispatching","Dispatch events"],["UIE-Events-Handling","Handle events"],["UIE-Events-Reference","Event reference"],["UIE-Events-Synthesizing","Synthesize and send events"],["UIE-Events","Control behavior with events"],["UIE-examples","Examples"],["UIE-expose-custom-control-to-uxml","Expose custom control to UXML and UI Builder"],["UIE-fallback-font","Fallback font"],["UIE-faq-event-and-input-system","FAQ for input and event systems with UI Toolkit"],["UIE-Focus-Events","Focus events"],["UIE-font-asset-landing","Font assets"],["UIE-font-asset-properties","Font Asset properties reference"],["UIE-font-asset","Introduction to font assets"],["UIE-font-creator-properties","Font Asset Creator properties reference"],["UIE-generate-2d-visual-content","Generate 2D visual content"],["UIE-get-started-with-runtime-ui","Get started with runtime UI"],["UIE-get-started-with-text","Get started with text"],["UIE-HowTo-CreateCustomInspector","Create a Custom Inspector"],["UIE-HowTo-CreateEditorWindow","Create a custom Editor window"],["UIE-HowTo-CreateRuntimeUI","Create a list view runtime UI"],["UIE-image-import-settings","Image import settings"],["UIE-IMGUI-Events","IMGUI events"],["UIE-IMGUI-migration","Migrate from Immediate Mode GUI (IMGUI) to UI Toolkit"],["UIE-Input-Events","Input events"],["UIE-Keyboard-Events","Keyboard events"],["UIE-Layout-Events","Layout events"],["UIE-LayoutEngine","Position element with the layout engine"],["UIE-ListView-TreeView","Create list and tree views"],["UIE-LoadingUXMLcsharp","Instantiate UXML from C# scripts"],["UIE-manage-asset-reference","Load UXML and USS C# scripts"],["UIE-manipulators","Manipulators"],["UIE-migration-guides","Migration guides"],["UIE-Mouse-Events","Mouse events"],["UIE-Navigation-Events","Navigation events"],["UIE-Panel-Events","Panel events"],["UIE-panels","Panels"],["UIE-performance-consideration-runtime","Performance consideration for runtime UI"],["UIE-pie-chart","Create a pie chart in the Editor and runtime UI"],["UIE-Pointer-Events","Pointer events"],["UIE-radial-progress-use-vector-api","Use Vector API to create a radial progress indicator"],["UIE-radial-progress","Use Mesh API to create a radial progress indicator"],["UIE-reference-other-files-from-uxml","Reference other files from UXML"],["UIE-relative-absolute-positioning-example","Relative and absolute positioning"],["UIE-render-runtime-ui","Render UI in the Game view"],["UIE-reuse-uxml-files","Reuse UXML files"],["UIE-rich-text-tags","Style text with rich text tags"],["UIE-Runtime-Event-System","Runtime UI event system"],["UIE-Runtime-Panel-Settings","Panel Settings properties reference"],["UIE-set-background-images-with-an-image-asset","Set background images with an image asset"],["UIE-simple-ui-toolkit-workflow","Get started with UI Toolkit"],["UIE-slide-toggle","Create a slide toggle custom control"],["UIE-sprite-asset-properties","Sprite Asset properties reference"],["UIE-sprite","Include sprites in text"],["UIE-structure-ui","Structure UI"],["UIE-style-sheet","Style sheets"],["UIE-support-for-editor-ui","Support for Editor UI"],["UIE-support-for-runtime-ui","Support for runtime UI"],["UIE-supported-tags","Supported rich text tags"],["UIE-text-setting-asset","Panel Text Settings assets"],["UIE-Tooltip-Events","Tooltip event"],["UIE-Transform","USS transform"],["UIE-transition-event-example","Create a transition event"],["UIE-transition-event-loop-example","Create looping transitions"],["UIE-Transition-Events","Transition events"],["UIE-transition-example","Create a transition in a custom Editor window"],["UIE-Transitioning-From-UGUI","Migrate from Unity UI (uGUI) to UI Toolkit"],["UIE-Transitions","USS transition"],["UIE-tss","Theme Style Sheet (TSS)"],["UIE-ui-debugger","UI Toolkit Debugger"],["UIE-ui-renderer","UI Renderer"],["UIE-UQuery","Find visual elements with UQuery"],["UIE-uss-built-in-variable-reference","USS built-in variable references"],["UIE-uss-color-keywords","USS color keywords"],["UIE-USS-CustomProperties","Create USS variables"],["UIE-USS-Properties-Reference","USS properties reference"],["UIE-uss-properties","USS properties"],["UIE-USS-PropertyTypes","USS data types"],["UIE-uss-selector-precedence","Selector precedence"],["UIE-USS-Selectors-child","Child selectors"],["UIE-USS-Selectors-class","Class selectors"],["UIE-USS-Selectors-descendant","Descendant selectors"],["UIE-USS-Selectors-list","Selector lists"],["UIE-USS-Selectors-multiple","Multiple selectors"],["UIE-USS-Selectors-name","Name selectors"],["UIE-USS-Selectors-Pseudo-Classes","Pseudo-classes"],["UIE-USS-Selectors-type","Type selectors"],["UIE-USS-Selectors-universal","Universal selectors"],["UIE-USS-Selectors","USS selectors"],["UIE-USS-SupportedProperties","USS common properties"],["UIE-USS-UnityVariables","Introduction to USS built-in variables"],["UIE-USS-variables","USS custom properties (variables)"],["UIE-USS-WritingStyleSheets","Best practices for USS"],["UIE-USS","Style UI"],["UIE-uxml-element-BindableElement","UXML element BindableElement"],["UIE-uxml-element-BoundsField","UXML element BoundsField"],["UIE-uxml-element-BoundsIntField","UXML element BoundsIntField"],["UIE-uxml-element-Box","UXML element Box"],["UIE-uxml-element-Button","UXML element Button"],["UIE-uxml-element-ColorField","UXML element ColorField"],["UIE-uxml-element-CurveField","UXML element CurveField"],["UIE-uxml-element-DoubleField","UXML element DoubleField"],["UIE-uxml-element-DropdownField","UXML element DropdownField"],["UIE-uxml-element-EnumField","UXML element EnumField"],["UIE-uxml-element-EnumFlagsField","UXML element EnumFlagsField"],["UIE-uxml-element-FloatField","UXML element FloatField"],["UIE-uxml-element-Foldout","UXML element Foldout"],["UIE-uxml-element-GradientField","UXML element GradientField"],["UIE-uxml-element-GroupBox","UXML element GroupBox"],["UIE-uxml-element-Hash128Field","UXML element Hash128Field"],["UIE-uxml-element-HelpBox","UXML element HelpBox"],["UIE-uxml-element-Image","UXML element Image"],["UIE-uxml-element-IMGUIContainer","UXML element IMGUIContainer"],["UIE-uxml-element-InspectorElement","UXML element InspectorElement"],["UIE-uxml-element-IntegerField","UXML element IntegerField"],["UIE-uxml-element-Label","UXML element Label"],["UIE-uxml-element-LayerField","UXML element LayerField"],["UIE-uxml-element-LayerMaskField","UXML element LayerMaskField"],["UIE-uxml-element-ListView","UXML element ListView"],["UIE-uxml-element-LongField","UXML element LongField"],["UIE-uxml-element-MaskField","UXML element MaskField"],["UIE-uxml-element-MinMaxSlider","UXML element MinMaxSlider"],["UIE-uxml-element-MultiColumnListView","UXML element MultiColumnListView"],["UIE-uxml-element-MultiColumnTreeView","UXML element MultiColumnTreeView"],["UIE-uxml-element-ObjectField","UXML element ObjectField"],["UIE-uxml-element-PopupWindow","UXML element PopupWindow"],["UIE-uxml-element-ProgressBar","UXML element ProgressBar"],["UIE-uxml-element-PropertyField","UXML element PropertyField"],["UIE-uxml-element-RadioButton","UXML element RadioButton"],["UIE-uxml-element-RadioButtonGroup","UXML element RadioButtonGroup"],["UIE-uxml-element-RectField","UXML element RectField"],["UIE-uxml-element-RectIntField","UXML element RectIntField"],["UIE-uxml-element-RepeatButton","UXML element RepeatButton"],["UIE-uxml-element-Scroller","UXML element Scroller"],["UIE-uxml-element-ScrollView","UXML element ScrollView"],["UIE-uxml-element-Slider","UXML element Slider"],["UIE-uxml-element-SliderInt","UXML element SliderInt"],["UIE-uxml-element-TagField","UXML element TagField"],["UIE-uxml-element-TemplateContainer","UXML element TemplateContainer"],["UIE-uxml-element-TextElement","UXML element TextElement"],["UIE-uxml-element-TextField","UXML element TextField"],["UIE-uxml-element-Toggle","UXML element Toggle"],["UIE-uxml-element-Toolbar","UXML element Toolbar"],["UIE-uxml-element-ToolbarBreadcrumbs","UXML element ToolbarBreadcrumbs"],["UIE-uxml-element-ToolbarButton","UXML element ToolbarButton"],["UIE-uxml-element-ToolbarMenu","UXML element ToolbarMenu"],["UIE-uxml-element-ToolbarPopupSearchField","UXML element ToolbarPopupSearchField"],["UIE-uxml-element-ToolbarSearchField","UXML element ToolbarSearchField"],["UIE-uxml-element-ToolbarSpacer","UXML element ToolbarSpacer"],["UIE-uxml-element-ToolbarToggle","UXML element ToolbarToggle"],["UIE-uxml-element-TreeView","UXML element TreeView"],["UIE-uxml-element-UnsignedIntegerField","UXML element UnsignedIntegerField"],["UIE-uxml-element-UnsignedLongField","UXML element UnsignedLongField"],["UIE-uxml-element-Vector2Field","UXML element Vector2Field"],["UIE-uxml-element-Vector2IntField","UXML element Vector2IntField"],["UIE-uxml-element-Vector3Field","UXML element Vector3Field"],["UIE-uxml-element-Vector3IntField","UXML element Vector3IntField"],["UIE-uxml-element-Vector4Field","UXML element Vector4Field"],["UIE-uxml-element-VisualElement","UXML element VisualElement"],["UIE-uxml-examples","Structure UI examples"],["UIE-UXML","Structure UI with UXML"],["UIE-ViewData","View data persistence"],["UIE-VisualTree-landing","The visual tree"],["UIE-VisualTree","Introduction to visual elements and the visual tree"],["UIE-work-with-text","Work with text"],["UIE-wrap-content-inside-scrollview","Wrap content inside a scroll view"],["UIE-WritingUXMLTemplate","Introduction to UXML"],["UIElements","UI Toolkit"],["UIHowTos","UI How Tos"],["UIInteractionComponents","Interaction Components"],["UIReference","UI Reference"],["UIToolkits","User interface (UI)"],["UIVisualComponents","Visual Components"],["UnderstandingFrustum","Understanding the View Frustum"],["UndoWindow","Undo"],["UNet","Multiplayer and Networking"],["UNetClassesReference","Multiplayer Classes Reference"],["UNetConverting","Converting a single-player game to Unity Multiplayer"],["UNetDebugging","Debugging Information"],["UNetEncryptionPlugins","Multiplayer Encryption Plug-ins"],["UNetGettingStarted","Setting up a multiplayer project"],["UNetManager","Using the Network Manager"],["UNetManagerHUD","Using the Network Manager HUD"],["UNetManagerHUDLanMode","The Network Manager HUD in LAN mode"],["UNetManagerHUDMatchMakerMode","The Network Manager HUD in Matchmaker mode"],["UNetOverview","Multiplayer Overview"],["UNetReference","Multiplayer Component Reference"],["unity-architecture","Unity architecture"],["unity-linker","The Unity linker"],["unity-remote-ios","Requirements and compatibility"],["Unity2D","2D game development"],["UnityAccelerator","Unity Accelerator"],["UnityAds","Unity Ads"],["UnityAnalytics","Unity Analytics"],["UnityasaLibrary-Android","Integrating Unity into Android applications"],["UnityasaLibrary-iOS","Integrating Unity into native iOS applications"],["UnityasaLibrary-UWP","Integrate Unity into UWP applications"],["UnityasaLibrary-Windows","Integrating Unity into Windows applications"],["UnityasaLibrary","Using Unity as a Library in other applications"],["UnityCloudDiagnostics","Unity Cloud Diagnostics"],["UnityEvents","UnityEvents"],["UnityHotkeys","Unity shortcuts"],["UnityIAP","Unity IAP"],["UnityIAPAmazonConfiguration","Configuration for the Amazon Appstore"],["UnityIAPAmazonExtendedFunctionality","Amazon Appstore and Amazon Underground Store"],["UnityIAPAppleConfiguration","Configuring for Apple App Store and Mac App Store"],["UnityIAPBrowsingMetadata","Browsing Product Metadata"],["UnityIAPCodelessIAP","Codeless IAP"],["UnityIAPCrossStoreInstallationIssues","Cross-store installation issues with Android in-app purchase stores"],["UnityIAPDefiningProducts","Defining products"],["UnityIAPGoogleConfiguration","Configuring for Google Play Store"],["UnityIAPGooglePlay","Google Play"],["UnityIAPHandlingPurchaseFailures","Handling purchase failures"],["UnityIAPImplementingAStore","Implementing a Store"],["UnityIAPInitialization","Initialization"],["UnityIAPInitiatingPurchases","Initiating Purchases"],["UnityIAPiOSMAS","iOS & Mac App Stores"],["UnityIAPIStoreHandlingPurchases","Handling purchases"],["UnityIAPIStoreInitialization","Initialization"],["UnityIAPIStoreRetrievingProducts","Retrieving products"],["UnityIAPModuleConfiguration","Store Configuration"],["UnityIAPModuleExtension","Store Extensions"],["UnityIAPModuleRegistration","Registering your store"],["UnityIAPModules","Store Modules"],["UnityIAPProcessingPurchases","Processing Purchases"],["UnityIAPPurchaseReceipts","Purchase Receipts"],["UnityIAPRestoringTransactions","Restoring Transactions"],["UnityIAPSettingUp","Setting up Unity IAP"],["UnityIAPStoreExtensions","Store Extensions"],["UnityIAPSubscriptionProducts","Subscription Product support"],["UnityIAPUniversalWindows","Universal Windows Platform"],["UnityIAPValidatingReceipts","Receipt validation"],["UnityIAPWindowsConfiguration","Configuring for Windows Store"],["UnityIntegrations","Unity Integrations"],["UnityManual","Unity User Manual 2022.3 (LTS)"],["UnityMultiplayerService","Multiplayer Services"],["UnityOverview","Working in Unity"],["UnityRemote5","Requirements and compatibility"],["UnityServices","Unity Services"],["UnityWebRequest-CreatingDownloadHandlers","Creating DownloadHandlers"],["UnityWebRequest-CreatingUnityWebRequests","Creating UnityWebRequests"],["UnityWebRequest-CreatingUploadHandlers","Creating UploadHandlers"],["UnityWebRequest-DownloadingAssetBundle","Downloading an AssetBundle from an HTTP server (GET)"],["UnityWebRequest-HLAPI","Common operations: using the HLAPI"],["UnityWebRequest-LLAPI","Advanced operations: Using the LLAPI"],["UnityWebRequest-RetrievingTextBinaryData","Retrieving text or binary data from an HTTP Server (GET)"],["UnityWebRequest-RetrievingTexture","Retrieving a Texture from an HTTP Server (GET)"],["UnityWebRequest-SendingForm","Sending a form to an HTTP server (POST)"],["UnityWebRequest-UploadingRawData","Uploading raw data to an HTTP server (PUT)"],["UnityWebRequest","UnityWebRequest"],["UnityYAML","UnityYAML"],["universal-render-pipeline","Using the Universal Render Pipeline"],["UnpackingPrefabInstances","Unpacking Prefab instances"],["UnusedOverrides","Unused Overrides"],["UpgradeGuide2019LTS","Upgrading to Unity 2019 LTS"],["UpgradeGuide2020LTS","Upgrading to Unity 2020 LTS"],["UpgradeGuide20211","Upgrading to Unity 2021.1"],["UpgradeGuide20212","Upgrading to Unity 2021.2"],["UpgradeGuide2021LTS","Upgrading to Unity 2021 LTS"],["UpgradeGuide20221","Upgrade to Unity 2022.1"],["UpgradeGuide20222","Upgrade to Unity 2022.2"],["UpgradeGuide2022LTS","Upgrading to Unity 2022 LTS"],["UpgradeGuides","Upgrading Unity"],["upm-api","Scripting API for packages"],["upm-assets","Accessing package assets"],["upm-cache","Global Cache"],["upm-concepts","Concepts"],["upm-config-cache-as","Customize the Asset Store cache location"],["upm-config-cache","Customize the global cache location"],["upm-config-https-git","Using private repositories with HTTPS Git URLs"],["upm-config-network","Solving network issues"],["upm-config-scoped","Scoped registry authentication"],["upm-config-ssh-git-mac","Loading SSH keys automatically on macOS"],["upm-config-ssh-git-putty","Loading SSH keys automatically on Windows (PuTTY)"],["upm-config-ssh-git-win","Loading SSH keys automatically on Windows (OpenSSH)"],["upm-config-ssh-git","Using passphrase-protected SSH keys with SSH Git URLs"],["upm-config","Configuration"],["upm-conflicts-auto","Lock files"],["upm-conflicts","Resolution and conflict"],["upm-del-pkg-as-cache","Delete a package from the Asset Store cache"],["upm-dependencies","Dependency and resolution"],["upm-docs","Finding package documentation"],["upm-embed","Embedded dependencies"],["upm-errors","Troubleshooting"],["upm-git","Git dependencies"],["upm-inspect","Inspecting packages"],["upm-lifecycle","Package states and lifecycle"],["upm-localpath","Local folder or tarball paths"],["upm-manifestPkg","Package manifest"],["upm-manifestPrj","Project manifest"],["upm-network","Diagnose network issues"],["upm-overview","How Unity works with packages"],["upm-scoped","Scoped registries"],["upm-semver","Versioning"],["upm-ui-access","Access the Package Manager window"],["upm-ui-actions","Adding and removing"],["upm-ui-details","Details view"],["upm-ui-disable","Disabling a built-in package"],["upm-ui-filter","Packages list context"],["upm-ui-filter2","Filtering the list"],["upm-ui-find","Finding packages and feature sets"],["upm-ui-giturl","Install a package from a Git URL"],["upm-ui-import","Importing an Asset Store package"],["upm-ui-install","Install a package from a registry"],["upm-ui-list","List view"],["upm-ui-local","Install a package from a local folder"],["upm-ui-multi","Perform an action on multiple packages"],["upm-ui-quick","Install a package from a registry by name"],["upm-ui-remove-asset","Remove imported assets from a project"],["upm-ui-remove","Removing an installed package from a project"],["upm-ui-search","Search box"],["upm-ui-sort","Sorting the list"],["upm-ui-tarball","Install a package from a local tarball file"],["upm-ui-update","Switching to another package version"],["upm-ui-update2","Updating your Asset Store package"],["upm-ui","Package Manager window"],["use-layers","Uses of layers in Unity"],["using-skymanager","SkyManager"],["UsingComponents","Use components"],["UsingCustomEditorTools","Custom Editor tools"],["UsingDLL","Managed plug-ins"],["UsingDX11GL3Features","DirectX"],["UsingHumanoidChars","Creating models for animation"],["UsingLights","Using Lights"],["UsingPrecomputedLighting","Generating lighting data"],["UsingReflectionProbes","Using Reflection Probes"],["UsingTheEditor","Unity's interface"],["UsingTheInspector","The Inspector window"],["UsingtheMeshClass","Using the Mesh Class"],["UsingTheSceneView","The Scene view"],["uwp-building-and-delivering","Build and deliver for Universal Windows Platform"],["uwp-debug-c-sharp","Debug C# code"],["uwp-debug-generated-cpp","Debug generated C++ code"],["uwp-defines","UWP scripting symbols"],["uwp-developing","Develop for Universal Windows Platform"],["uwp-environment-setup","Set up your environment for UWP"],["uwp-getting-started","Get started with Universal Windows Platform"],["uwp-il2cpp-debugging","Debug UWP applications with IL2CPP"],["uwp-il2cpp-plugins","Use UWP plug-ins with IL2CPP"],["uwp-il2cpp-scripting","IL2CPP scripting backend for UWP"],["uwp-introducing","Introduction to Universal Windows Platform"],["uwp-managed-plugins","Use managed UWP plug-ins"],["uwp-native-plugins-author","Author native UWP plug-ins"],["uwp-native-plugins-call","Call and implement native UWP plug-ins"],["uwp-package-app-vs","Package a UWP app in Visual Studio"],["uwp-pinvoke","Use P/Invoke"],["uwp-requirements-and-compatibility","UWP requirements and compatibility"],["VariablesAndTheInspector","Variables and the Inspector"],["VariantSpriteAtlas","Variant Sprite Atlas"],["VectorCookbook","Vectors"],["VersionCheck","Check For Updates"],["VersionControl","Version Control"],["Versioncontrolintegration","Version control integrations"],["VFXGraph","Visual Effect Graph"],["Video","Video sources"],["VideoPanoramic","Panoramic video"],["VideoPlayer-MigratingFromMovieTexture","Migrating from MovieTexture to VideoPlayer"],["VideoPlayer","Video overview"],["VideoSources-FileCompatibility","Video file compatibility"],["VideoSources-VideoFiles","Understanding video files"],["VideoTransparency","Video transparency support"],["ViewModes","Scene view View Options toolbar"],["visionOS","visionOS"],["visual-effects-decals","Decals and projectors"],["visual-effects-lens-flares","Lens flares and halos"],["visual-effects-lines-trails-billboards","Lines, trails, and billboards"],["visual-effects","Visual effects"],["VisualStudioIntegration","Visual Studio C# integration"],["VisualStudioprojectgenerationWindows","Visual Studio project generation for Windows"],["VRAudioSpatializer","Audio Spatializers"],["VRFeature","VR feature set"],["VRFrameTiming","VR frame timing"],["VROverview","VR development in Unity"],["vulkan-swapchain-pre-rotation","Framebuffer orientation"],["webgl-assetbundles","Reduce load times with AssetBundles"],["webgl-audio","Audio in WebGL"],["webgl-browser-access-device","WebGL browser access to device features"],["webgl-browsercompatibility","WebGL browser compatibility"],["webgl-building-distribution","Build and distribute a WebGL application"],["webgl-building","Build your WebGL application"],["webgl-caching","Cache behavior in WebGL"],["webgl-canvas-size","Configure a WebGL Canvas size"],["webgl-cursorfullscreen","Cursor locking and full-screen mode in WebGL"],["webgl-debugging","Debug and troubleshoot WebGL builds"],["webgl-deploying","Deploy WebGL application"],["webgl-develop","WebGL development"],["webgl-distributionsize-codestripping","Distribution size and code stripping"],["webgl-embeddedresources","Embedded resources in WebGL"],["webgl-gettingstarted","WebGL prerequisites"],["webgl-graphics","WebGL graphics"],["webgl-input","Input in WebGL"],["webgl-interactingwithbrowserscripting","Interaction with browser scripting"],["webgl-intro","WebGL introduction"],["webgl-memory","Memory in Unity WebGL"],["webgl-native-plugins-with-emscripten","WebGL native plug-ins for Emscripten"],["webgl-networking","WebGL networking"],["webgl-performance","WebGL performance considerations"],["webgl-server-configuration-code-samples","Server configuration code samples"],["webgl-technical-overview","Advanced overview"],["webgl-templates","WebGL templates"],["webgl-texture-compression","Texture compression in WebGL"],["webgl","WebGL"],["WhatsNew20221","New in Unity 2022.1"],["WhatsNew20222","New in Unity 2022.2"],["WhatsNew2022LTS","New in Unity 2022 LTS"],["WheelColliderTutorial","Create a vehicle with Wheel Colliders"],["windows-develop","Develop for Windows"],["Windows","Windows"],["WindowsDebugging","Windows debugging"],["WindowsLowIntegrity","Windows integrity control"],["WindowsPlayerIL2CPPScriptingBackend","Windows Player: IL2CPP Scripting Backend"],["WindowsStandaloneBinaries","Windows Build Settings"],["windowsstore-appcallbacks","AppCallbacks class reference"],["windowsstore-assocation-launching","Association launching for UWP"],["windowsstore-buildsettings","UWP build settings"],["windowsstore-commandlinearguments","Command line arguments for UWP"],["windowsstore-deployment","Deploy a UWP application"],["windowsstore-deviceportal","Deploy a UWP app with the Windows Device Portal"],["windowsstore-generatedproject-il2cpp","Generate your Visual Studio C++ solution"],["windowsstore-profiler","Connect the profiler to UWP"],["windowsstore-scripts","WinRT API in C# scripts for UWP"],["WindowsStore","Universal Windows Platform"],["wizard-RagdollWizard","Create a ragdoll"],["WorldBuildingFeature","3D World Building feature set"],["XcodeFrameDebuggerIntegration","Xcode frame debugger Unity integration"],["xr-audio","XR audio"],["xr-configure-providers","Choose XR provider plug-ins"],["xr-create-projects","Create an XR project"],["xr-graphics","XR graphics"],["xr-input-overview","XR input options"],["xr-origin","XR Origin"],["xr-plugin-management","XR Plug-in Management settings"],["xr-render-pipeline-compatibility","Universal Render Pipeline compatibility in XR"],["xr-run","Run an XR application"],["xr-scene-setup","Set up an XR scene"],["xr-sdk","Unity XR SDK"],["xr-support-landing","Overview"],["xr-support-packages","XR packages"],["XR","XR"],["XRPluginArchitecture","XR architecture"],["xrsdk-display","XR SDK Display subsystem"],["xrsdk-input","XR SDK Input subsystem"],["xrsdk-meshing","XR SDK Meshing subsystem"],["xrsdk-pre-init-interface","XR SDK PreInit interface"],["xrsdk-provider-setup","Creating an XR provider"],["xrsdk-runtime-discovery","Runtime discovery and activation of subsystems"],["xrsdk-stats","XR SDK Stats interface"],["xrsdk-unity-subsystems-manifest-json","UnitySubsystemsManifest.json"],["xr_input","Unity XR Input"],["YAMLSceneExample","An Example of a YAML Scene File"]],"info":[["Introduction to 2D",0],["You can use Unity to create 2D projects. This page introduces the gameplay, graphics, and physics specific to 2D Unity projects.",0],["Gameplay in 2D",0],["The familiar functions of the Unity Editor when you use 3D mode are still available but with helpful additions to simplify 2D development.",0],["The most noticeable feature is the 2D view mode button in the toolbar of the Scene view. When you enable 2D mode, Unity will set an orthographic (perspective-free) view. This view means that the camera looks along the z-axis with the y-axis increasing upwards, which enables you to visualize the scene and easily place 2D objects.",0],["For a full list of 2D components, how to change between 2D and 3D mode, and the different 2D and 3D mode settings, refer to 2D or 3D Projects.",0],["2D graphics",0],["Graphic objects in 2D are known as Sprites. Sprites are standard textures, with special techniques for combining and managing sprite textures for efficiency and convenience during development. Unity provides a built-in Sprite Editor to let you extract sprite graphics from a larger image. This enables you to edit many component images within a single texture in your image editor. You can use this, for example, to keep the arms, legs, and body of a character as separate elements within one image.",0],["Sprites are rendered with a Sprite Renderer component rather than the Mesh Renderer used with 3D objects. You can add this to a GameObject via the Components menu (Component > Rendering > Sprite Renderer) or you can create a GameObject directly with a Sprite Renderer already attached (menu: GameObject > 2D Object > Sprite).",0],["You can also use a Sprite Creator tool to make placeholder 2D images.",0],["2D physics",0],["Unity has a separate physics system to handle 2D physics so you can make use of optimizations only available with 2D. The components correspond to the standard 3D physics components such as Rigidbody, Box Collider, and Hinge Joint, but with 2D appended to the name. Therefore, you can equip sprites with Rigidbody 2D, Box Collider 2D, and Hinge Joint 2D. Most 2D physics components are flattened versions of the 3D equivalents (for example, Box Collider 2D is a square while Box Collider is a cube) but there are a few exceptions.",0],["For the full list of 2D physics components, refer to 2D or 3D Projects. For further information about 2D physics concepts and components, refer to the Physics section of the manual. To specify 2D physics settings, refer to the Physics 2D window.",0],["2D and 3D mode settings",1],["When creating a new Project, you can specify whether to start the Unity Editor in 2D mode or 3D mode. However, you also have the option of switching the Editor between 2D mode and 3D mode at any time. You can read more about the difference between 2D and 3D Projects here. This page provides information about how to switch modes, and what exactly changes within the editor when you do.",1],["Switching between 3D and 2D modes",1],["To change modes between 2D or 3D mode:",1],["Open the Editor settings (top menu: Edit > Project Settings, then select the Editor category).",1],["Then set Default Behavior Mode to either 2D or 3D.",1],["2D vs 3D mode settings",1],["2D or 3D mode determines some settings for the Unity Editor. These are listed below.",1],["In 2D Project mode:",1],["Any images you import are assumed to be 2D images (Sprites) and set to Sprite mode.",1],["The Scene View is set to 2D.",1],["The default game objects do not have real time, directional light.",1],["The camera's default position is at 0,0,-10. (It is 0,1,-10 in 3D Mode.)",1],["The camera is set to be Orthographic. (In 3D Mode it is Perspective.)",1],["In the Lighting Window:",1],["Skybox is disabled for new scenes.",1],["Ambient Source is set to Color. (With the color set as a dark grey: RGB: 54, 58, 66.)",1],["Realtime Global Illumination (Enlighten) is set to off.",1],["Baked Global Illumination is set to off.",1],["Auto-Building set to off.",1],["In 3D Project mode:",1],["Any images you import are NOT assumed to be 2D images (Sprites).",1],["The Scene View is set to 3D.",1],["The default game objects have real time, directional light.",1],["The camera's default position is at 0,1,-10. (It is 0,0,-10. in 2D Mode.)",1],["The camera is set to be Perspective. (In 2D Mode it is Orthographic.)",1],["In the Lighting Window:",1],["Skybox is the built-in default Skybox Material.",1],["Ambient Source is set to Skybox.",1],["Realtime Global Illumination (Enlighten) is set to on.",1],["Baked Global Illumination is set to on.",1],["Auto-Building is set to on.",1],["2D feature set",2],["The 2D feature set provides creators of 2D experiences in Unity with features covering Foundations, World-building, Animation, Graphics and Physics. Use the 2D feature set to:",2],["Import images including multi-layered Photoshop and Aseprite files as Sprites and configure them for use in 2D games.",2],["Create freeform, tile-based and spline-based 2D game worlds.",2],["Create frame-by-frame and bone-based animated characters.",2],["Use 2D physics to support simulations with colliders and joints.",2],["Create a range of 2D art styles, including pixel art.",2],["Getting started",2],["Packages",2],["The 2D feature set contains the following packages:",2],["Samples",2],["Asset Store",2],["Package samples",2],["The following packages have package samples.",2],["These are visible in the Package Manager in the Samples sections when you select the package.",2],["Related forums",2],["Public roadmap",2],["Find out about upcoming features for 2D development in the 2D roadmap.",2],["2D or 3D projects",3],["Unity is equally suited to creating both 2D and 3D games. When you create a new project in Unity, you have the choice to start in 2D or 3D mode. You may already know what you want to build, but there are a few subtle points that may affect which mode you choose.",3],["The choice between starting in 2D or 3D mode determines some settings for the Unity Editor, such as whether images are imported as textures or sprites. You can swap between 2D or 3D mode at any time regardless of the mode you set when you created your project (see 2D and 3D Mode Settings). Here are some guidelines which should help you choose.",3],["Full 3D",3],["3D games usually make use of three-dimensional geometry, with Materials and Textures rendered on the surface of GameObjects to make them appear as solid environments, characters and objects that make up your game world. The Camera can move in and around the Scene freely, with light and shadows cast around the world in a realistic way. 3D games usually render the Scene using perspective, so objects appear larger on screen as they get closer to the camera. For all games that fit this description, start in 3D mode.",3],["Orthographic 3D",3],["Sometimes games use 3D geometry, but use an orthographic camera instead of perspective. This is a common technique used in games which give you a bird's-eye view of the action, and is sometimes called \"2.5D\". If you're making a game like this, you should also use the Editor in 3D mode, because even though there is no perspective, you will still be working with 3D models and Assets. You'll need to switch your Camera and Scene view to Orthographic though.",3],["Full 2D",3],["Many 2D games use flat graphics, sometimes called sprites, which have no three-dimensional geometry at all. They are drawn to the screen as flat images, and the game's camera has no perspective. For this type of game, you should start the editor in 2D mode.",3],["2D gameplay with 3D graphics",3],["Some 2D games use 3D geometry for the environment and characters, but restrict the gameplay to two dimensions. For example, the camera may show a side-scrolling view, and the player can only move in two dimensions, but the game itself still uses 3D models for the obstacles and a 3D perspective for the camera. For these games, the 3D effect may serve a stylistic rather than functional purpose. This type of game is also sometimes referred to as \"2.5D\". Although the gameplay is 2D, you are mostly manipulating 3D models to build the game, so you should start the editor in 3D mode.",3],["2D gameplay and graphics with a perspective camera",3],["This is another popular style of 2D game, using 2D graphics but with a perspective camera to get a parallax scrolling effect. This is a \"cardboard theater\"-style scene, where all graphics are flat, but arranged at different distances from the camera. It's most likely that 2D mode will suit your development in this case. However, you should change your Camera's projection mode to Perspective and the Scene view mode to 3D.",3],["Additional resources",3],["Types of 2D primitive GameObjects",4],["Unity has import support for different image formats, such as .png or Adobe's .psd, which gives you additional options when creating and preparing your 2D assets for your project. But if you want to create a quick prototype, Unity provides 2D primitive GameObjects to help you build your project, without needing to prepare and import your own assets.",4],["This page details the dimensions and common uses of the available 2D primitive options.",4],["Important:** Your project must have the 2D Sprite package installed to enable the following 2D primitive options. The 2D Sprite package is automatically installed when you create a project with the 2D project template selected, or you can install the 2D Sprite package via the Package Manager.",4],["Create a 2D primitive GameObject",4],["To create one of these preset 2D primitive GameObjects, go to GameObject > 2D Object > Sprites or Create > 2D > Sprites and select one of the available options:",4],["Default sprite dimensions",4],["The default sprite size of the 2D primitives is 256 X 256 pixels, with a pixels-per-unit (PPU) size of 256. This combination of dimensions and PPU value makes the sprite's size equal to one Unity unit in the scene. There are two exceptions - the Capsule primitive is 256 X 512 pixels (1:2 units) in size, and the Isometric Diamond primitive is 256 X 128 pixels (1:0.5 units).",4],["Triangle",4],["The Triangle 2D primitive is white isosceles triangle with a base measuring one Unity unit in size. You can use it as a placeholder for various elements in your scene, such as obstacles or parts of the user interface. You can add the Polygon Collider 2D component to the primitive to have it interact with other GameObjects and the 2D physics system.",4],["Square",4],["The Square 2D primitive is a white square that's 1 X 1 Unity units in size. You can use it as a placeholder for various elements, such as obstacles or platforms. You can add the Box Collider 2D component to the primitive to have it interact with other GameObjects and the 2D physics system. You can select the 9-Sliced option for a more scalable sprite that resizes dynamically.",4],["Circle",4],["The Circle 2D primitive is a white circle that's one Unity unit in diameter. You can use it as a placeholder for various elements in your scene, such as obstacles or props. You can add the Circle Collider 2D to the primitive to have it interact with other GameObjects and the 2D physics system.",4],["Capsule",4],["The Capsule 2D primitive is a white capsule that's 1 X 2 units in size. You can use it as a placeholder for various elements in your scene, such as an obstacle, prop, or a stand-in for a character. You can add a Capsule Collider 2D to the primitive to have it interact with other GameObjects and the 2D physics system.",4],["Isometric Diamond",4],["The Isometric Diamond 2D primitive is a white diamond-shaped sprite that's 1 X 0.5 units in size. This sprite is often used as a placeholder for Tiles placed on Isometric Tilemaps. The pixels at the top and bottom of this sprite are slightly cropped to improve tiling.",4],["Hexagon Flat-Top",4],["The Hexagon Flat-Top 2D primitive is a regular hexagon that's one unit wide, with its flat sides oriented towards the top and bottom. This sprite is often used as a placeholder for Tiles placed on Hexagonal Flat-Top Tilemaps. The pixels to the left and right of this sprite are slightly cropped to improve tiling.",4],["Hexagon Point-Top",4],["The Hexagon Point-Top 2D primitive is a regular hexagon that's one unit tall, with its points oriented towards the top and bottom. This sprite is often used as a sprite placeholder for Tiles placed on a Hexagonal Pointed-Top Tilemaps. The pixels to the top and bottom of this sprite are slightly cropped to improve tiling.",4],["9-Sliced",4],["The 9-Sliced 2D primitive is a white square with rounded corners that's 1 X 1 units in size. This sprite has been 9-sliced with borders measuring 64 pixels on each side. This sprite is primarily used with the Sprite Renderer component's Sliced and Tiled Draw Modes. You can use the 9-sliced sprite as a flexible placeholder for various elements in your scene and project (see 9-slicing sprites for more information). You can add a Box Collider 2D with Auto Tiling enabled to have the sprite interact with other objects and the 2D physics system.",4],["Additional resources",4],["2D Sorting",5],["Overview",5],["Unity sorts Renderers according to a priority order that depends on their types and usages. You can specify the render order of Renderers through their Render Queue. In general, there are two main queues: the Opaque queue and the Transparent queue. 2D Renderers are mainly within the Transparent queue, and include the Sprite Renderer, Tilemap Renderer, and Sprite Shape Renderer types.",5],["Transparent Queue Sorting Order by Priority",5],["2D Renderers within the Transparent Queue generally follow the priority order below:",5],["\n2D Sorting\n",5],["\nOverview\n",5],["\nTransparent Queue Sorting Order by Priority\n",5],["\nSorting Layer and Order in Layer\n",5],["\nSpecify Render Queue\n",5],["\nDistance to Camera\n",5],["\nPerspective\n",5],["\nOrthographic\n",5],["\nCustom Axis sort mode\n",5],["\nSprite Sort Point\n",5],["\nSorting Group\n",5],["\nMaterial/Shader\n",5],["\nTiebreaker\n",5],["There are other factors which can cause the sorting order to differ from the regular priority order. These factors vary from project to project.",5],["Sorting Layer and Order in Layer",5],["The Sorting Layer and Order in Layer (in the Renderer’s Property settings) are available to all 2D Renderers through the Inspector window or via the Unity Scripting API. Set the Renderer to an existing Sorting Layer or create a new one to determine its priority in the rendering queue. Change the value of the Order in Layer to set the Renderer’s priority among other Renderers within the same Sorting Layer.",5],["Specify Render Queue",5],["You can specify the Render Queue type of the Renderer in its Material settings or in the Shader settings of its Material. This is useful for grouping and sorting Renderers which are using different Materials. Refer to documentation on ShaderLab: SubShader Tags for more details.",5],["Distance to Camera",5],["The Camera component sorts Renderers based on its Projection setting. The two options are Perspective and Orthographic.",5],["Perspective",5],["In this mode, the sorting distance of a Renderer is the direct distance of the Renderer from the Camera’s position.",5],["Orthographic",5],["The sorting distance of a Renderer is the distance between the position of the Renderer and the Camera along the Camera’s view direction. For the default 2D setting, this is along the (0, 0, 1) axis.",5],["When you set the Camera component to Perspective or Orthographic, Unity automatically sets the Camera’s TransparencySortMode to match the selected mode. You can set the Transparency Sort Mode manually in two ways:",5],["\nOpen the Project Settings and go to Graphics, then under Camera Settings use Transparent Sort Mode\n",5],["\nSet the Camera’s TransparencySortMode via the Scripting API.\n",5],["The Camera Transparency Sort Mode settings are under the Graphics category in the Project Settings (main menu: Edit > Project Settings > Graphics). When this is set to Default, a Camera component’s Projection setting take priority. When this is set to an option other than Default, the Camera component’s Projection setting remains the same, but the Camera’s Transparency Sort Mode changes to that option.",5],["An additional option available through the Project settings and via the Scripting API is the Custom Axis sort mode.",5],["Custom Axis sort mode",5],["Select this mode to sort Renderers based on their distance along the custom axis you set in the Project settings (main menu: Edit > Project Settings > Graphics > Transparency Sort Axis). This is commonly used in projects with Isometric Tilemaps to sort and render the Tile Sprites correctly on the Tilemap. Refer to Creating an Isometric Tilemap for further information.",5],["Note:** If your project is a 2D Universal Render Pipeline (URP) project, the Transparency Sort Mode isn't available in the Project Settings, and is instead configured in the 2D Renderer asset properties. Refer to the Configure the 2D Renderer Asset documentation for more information.",5],["Sprite Sort Point",5],["By default, a Sprite’s Sort Point is set to its Center, and Unity measures the distance between the camera’s Transform position and the Center of the Sprite to determine their render order during sorting. An alternate option is to set a Sprite’s Sort Point to its Pivot position in World Space. Select the Pivot option in the Sprite’s Sprite Renderer property settings and edit the Sprite’s Pivot position in the Sprite Editor.",5],["Sorting Group",5],["The Sorting Group is a component that groups Renderers which share a common root together for sorting purposes. All Renderers within the same Sorting Group share the same Sorting Layer, Order in Layer, and Distance to Camera. Refer to documentation on the Sorting Group component and its settings for more details.",5],["Material/Shader",5],["Unity sorts Renderers with the same Material settings together for more efficient rendering performance, such as with dynamic batching.",5],["Tiebreaker",5],["When multiple Renderers have identical sorting priority, the tiebreaker is the order that Unity places the Renderers in the Render Queue. Because this is an internal process that you have no control over, you should use the sorting options (such as Sorting Layers and Sorting Groups) to make sure all Renderers have distinct sorting priorities.",5],["Model file formats",6],["Unity supports a number of standard and proprietary model file formats.",6],["Internally, Unity uses the .fbx file format as its importing chain. It is best practice to use the .fbx file format whenever possible, and you should not use proprietary model file formats in production.",6],["Supported model file formats",6],["Standard file formats",6],["Unity can read the following standard 3D file formats:",6],[".dxf",6],[".obj.",6],["These file formats are widely supported. They are also often smaller than the proprietary equivalent, which makes your project size smaller, and faster to iterate over.",6],["You can also also re-import exported .fbx or .obj files into your 3D modeling software of choice to check that all of the information has been exported correctly.",6],["Proprietary file formats",6],["You should not use these file formats in production; instead, export to the .fbx format wherever possible. However, sometimes you might need to include these files as part of your project.",6],["Unity can import proprietary files from the following 3D modeling software, and then convert them into .fbx files:",6],["For more information, see Importing proprietary model files into Unity.",6],["The following applications do not use .fbx as an intermediary. Unity must convert them into .fbx files before importing them into the Editor:",6],["For more information, see the documentation on SketchUp Import Settings and SpeedTree Import Settings.",6],["Unsupported model file formats",6],["Unity does not provide built-in support for Cinema4D files. To use Cinema4D files in Unity, you should export them from the proprietary software as .fbx files.",6],["Assets saved as .ma, .mb, .max, .c4d, or .blend files fail to import unless you have the corresponding 3D modeling software installed on your computer. This means that everybody working on your Unity project must have the correct software installed. For example, if you use the Autodesk Maya LT license to create an .mb file and copy it into your project, anyone else that opens your project also needs to have Autodesk Maya LT installed on their computer.",6],["9-slicing Sprites",7],["9-slicing is a 2D technique which allows you to reuse an image at various sizes without needing to prepare multiple Assets. It involves splitting the image into nine portions, so that when you re-size the Sprite, the different portions scale or tile (that is, repeat in a grid formation) in different ways to keep the Sprite in proportion. This is useful when creating patterns or Textures, such as walls or floors in a 2D environment.",7],["This is an example of a 9-sliced Sprite, split into nine sections. Each section is labelled with a letter from A to I.",7],["The following points describe what happens when you change the dimensions of the image:",7],["The four corners (A, C, G and I) do not change in size.",7],["The B and H sections stretch or tile horizontally.",7],["The D and F sections stretch or tile vertically.",7],["The E section stretches or tiles both horizontally and vertically.",7],["This page describes how to set 9-slicing up, and which settings to apply depending on whether you want to stretch or tile the areas shown above.",7],["Setting up your Sprite for 9-slicing",7],["Before you 9-slice a Sprite, you need to ensure the Sprite is set up properly.",7],["First, you need to make sure the Mesh Type is set to Full Rect. To apply this, select the Sprite, then in the Inspector window click the Mesh Type drop-down and select Full Rect. If the Mesh Type is set to Tight, 9-slicing might not work correctly, because of how the Sprite Renderer generates and renders the Sprite when it is set up for 9-slicing.",7],["Next, you need to define the borders of the Sprite via the Sprite Editor window. To do this, select the Sprite, then in the Inspector window click the Sprite Editor button.",7],["Use the Sprite Editor window to define the borders of the Sprite (that is, where you want to define the tiled areas, such as the walls of a floor tile). To do this, use the Sprite control panel’s L, R, T, and B fields (left, right, top, and bottom, respectively). Alternatively, click and drag the green dots at the top, bottom, and sides.",7],["Click Apply in the Sprite Editor window’s top bar. Close the Sprite Editor window, and drag the Sprite from the Project window into the Scene view to begin working on it.",7],["9-slicing your Sprite",7],["Select the Sprite in the Scene view or the Hierarchy window. In the Inspector window, navigate to the Sprite Renderer component and change the Draw Mode property.",7],["It is set to Simple by default; to apply 9-slicing, set it to either Sliced or Tiled depending on the behavior you want. The following sections explain how each one behaves, using this Sprite:",7],["Simple",7],["This is the default Sprite Renderer behaviour. The image scales in all directions when its dimensions change. Simple is not used for 9-slicing.",7],["Sliced",7],["In Sliced mode, the corners stay the same size, the top and bottom of the Sprite stretch horizontally, the sides of the Sprite stretch vertically, and the centre of the Sprite stretches horizontally and vertically to fit the Sprite’s size.",7],["When a Sprite’s Draw Mode is set to Sliced, you can choose to change the size using the Size property on the Sprite Renderer or the Rect Transform Tool. You can still scale the Sprite using the Transform properties or the Transform Tool; however, the Transform scales the Sprite without applying the 9-slicing.",7],["Tiled",7],["In Tiled mode, the sprite stays the same size, and does not scale. Instead, the top and bottom of the Sprite repeat horizontally, the sides repeat vertically, and the centre of the Sprite repeats in a tile formation to fit the Sprite’s size.",7],["When you set the Draw Mode to Tiled, an additional property called Tile Mode appears. See the next section in this page for more information on how Tile Mode works.",7],["See documentation on the Sprite Renderer for full details on all of the component’s properties.",7],["Tile Mode",7],["When the Draw Mode is set to Tiled, use the Tile Mode property to control how the sections repeat when the dimensions of the Sprite change.",7],["Continuous",7],["Tile Mode is set to Continuous by default. When the size of the Sprite changes, the repeating sections repeat evenly in the Sprite.",7],["Adaptive",7],["When Tile Mode is set to Adaptive, the repeating sections only repeat when the dimensions of the Sprite reach the Stretch Value.",7],["Use the Stretch Value slider to set the value between 0 and 1. Note that 1 represents an image resized to twice its original dimensions, so if the Stretch Value is set at 1, the section repeats when the image is stretched to twice its original size.",7],["To demonstrate this, the following images show the difference between an image with the same dimension but a different Stretch Value:",7],["Stretch Value 0.1:",7],["Stretch Value 0.5:",7],["9-slicing and Colliders",7],["If your Sprite has a Collider2D attached, you need to ensure that when you change the Sprite’s dimensions, the Collider2D changes with it.",7],["Box Collider 2D and Polygon Collider 2D are the only Collider2D components in Unity that support 9-slicing. These two Collider2Ds have an Auto Tiling checkbox. To make sure the Collider2D components are set up for 9-slicing, select the Sprite you are applying it to, navigate to the Collider2D in the Inspector window, and tick the Auto Tiling checkbox. This enables automatic updates to the shape of the Collider2D, meaning that the shape is automatically readjusted when the Sprite’s dimensions change. If you don’t enable Auto Tiling, the Collider2D stays the same shape and size, even when the Sprite’s dimensions change.",7],["Limitations and known issues",7],["The only two Collider2Ds that support 9-slicing are BoxCollider2D and PolygonCollider2D.",7],["You cannot edit BoxCollider2D or PolygonCollider2D when the Sprite Renderer’s Draw Mode is set to Sliced or Tiled. Editing in the Inspector window is disabled, and a warning appears to notify you that the Collider2D cannot be edited because it is driven by the Sprite Renderer component’s tiling properties.",7],["When the shape is regenerated in Auto Tiling, additional edges might appear within the Collider2D’s shape. This may have an effect on collisions.",7],["License Troubleshooting",8],["This section provides information on the following licensing management issues:",8],["",8],["Activation issues",8],["If you encounter any error codes or other problems during the activation process, they might be caused by the following issues:",8],["Issue: Solution: ",8],["--------------------------------------------------- ------------------------------------------------------------ ",8],["No internet access Try to activate your license with a license request. For more information, see Manual license activation. ",8],["Security settings block Unity Review your firewall, proxy, or internet security settings. They might be blocking Unity from sending and receiving data about your license file. ",8],["No write privileges for saving the license file Grant or obtain write permissions to the user account you are using to activate a license. This often occurs in closed networks, such as those at workplaces and schools. Contact your IT administrator to find out whether there are any restrictions in place. ",8],["License fails to recognize your machine Major operating system changes or updates might affect your machine’s ID, which might cause your license to stop recognizing your machine. See this Unity Knowledge Base article: I Have Just Updated/Installed A New Operating System. Why Is My License Failing To Activate? ",8],["Unity’s license servers are down See the Unity Cloud System Status Page for status updates on all Unity servers. ",8],["Too many license activations Return your license if you no longer need it for a specific machine. You must return your license before you switch machines. You must also return your license before you make any hardware changes or OS changes to your machine. If you fail to return the license, the Unity license server sees a request from another machine and informs you that you have reached your activation limit for the license.If you get this message but you think it's an error, you can always return all licenses at once, and then reactivate each machine as needed. ",8],["Account credentials not recognized Make sure you enter your details correctly. Passwords are case sensitive, so make sure you enter them exactly as registered. To reset your password, go to I forgot my password.You can also receive failed login or activation errors if you or your build server exceed the login rate limit, which is 10 logins per minute.If you are still having problems logging in, contact support@unity3d.com. ",8],["",8],["Issues with returning licenses",8],["If you encounter any error codes or other problems while returning your license, they might be caused by the following:",8],["Issue: Solution: ",8],["------------------------------------------------- ------------------------------------------------------------ ",8],["You can't return your license by using the Unity Hub because you can't access your computer 1. Go to https://id.unity.com/ and log in with your Unity ID.2. Select My Account > My Seats in the side menu.3. Select the activation you want to deactivate, then select Remove selected activations. If you want to return all activations in one action, select Disable all activations.If you have licenses activated on other computers, you need to re-activate them later.If you still can't return your license, email support@unity3d.com and explain your situation. Include these details:- The serial number you were using on the machine.- The (local network) name of the machine that died.- The order or invoice number used to make the purchase.The Support Team can return your license manually if you provide the above information; however, it can take some time. This process is only available for purchased licenses. ",8],["",8],["Answers to other questions",8],["Question: Answer: ",8],["------------------------------------------------------------ ------------------------------------------------------------ ",8],["How many machines can I install my copy of Unity on? Every paid commercial Unity license allows one person to use Unity on two machines that they have exclusive use of. It doesn't matter where the machines are physically located or what operating system they are running. Educational licenses sold via Unity or any one of our resellers are only good for a single activation. The same goes for Trial licenses (Unity 4.x only), unless otherwise stated.The free version of Unity cannot be licensed by a commercial entity with annual gross revenues (based on fiscal year) in excess of US\\$100,000, or by an educational, non-profit or government entity with an annual budget of over US\\$100,000.If you are a Legal Entity, you cannot combine files developed with the free version of Unity with any files developed by you (or by any third party) through the use of Unity Pro.See our EULA for further information regarding license usage. ",8],["Can I use the latest version of Unity with a serial number from a previous version? If you have a serial number for Unity Editor 2017 or later, open the Unity Hub and activate the serial key. See Activate with a serial number.If you have a serial number for Unity version 5.x, use that version of the Editor. For activation information, see Version 5.6 documentation.To get a new Unity license, go to the online store.If you're unsure about your license options, contact Unity using this form. ",8],["I have two licenses, each with an add-on I require, how do I activate them in unison on my machine? You may use a single license on only one machine at a time. You cannot activate two or more licenses at the same time on one machine. ",8],["How can I use different Unity versions? Unity assumes that only a single version of Unity can be run on a machine. You can, however, have multiple Unity versions installed and running on your machine. These versions all need the same serial number. If you have different versions of Unity which need different licenses, you need a way to copy licenses around. For example, you could store the licenses on your Desktop. Before running a specific version, copy the Unity license (.ulf) file into the location where the license needs to be stored. For any further assistance, please contact at support@unity3d.com. ",8],["I am planning to replace an item of hardware and/or my OS. What should I do? You must return your license before you make any hardware changes or OS changes to your machine. You must also return your license before you switch machines. If you fail to return the license, the Unity license server sees a request from another machine and informs you that you have reached your activation limit for the license. ",8],["Where is my Unity license file stored? - macOS: /Library/Application\\ Support/Unity- Linux: ~/.local/share/unity3d/Unity/Unity_lic.ulf- Windows: C:\\ProgramData\\Unity\\Note: If Windows User Account Control (UAC) has restricted your access to C:\\ProgramData\\Unity, find your ulf file at:C:\\Users\\(username)\\AppData\\Local\\VirtualStore\\ProgramData\\Unity(UAC can restrict access if the folder is deleted or if Unity is started with administrative permissions first time.) ",8],["",8],["Additional resources",8],["Unity Support article, Licenses",8],["Unity Support article, Activations and Management",8],["Contact Unity Customer Services for more assistance.",8],["Advanced Reflection Probe Features",9],["Two further features which can improve the visual realism obtained from Reflection Probes are described below: Interreflections and Box Projection.",9],["Interreflections",9],["You may have seen a situation where two mirrors are placed fairly close together and facing each other. Both mirrors reflect not only the mirror opposite but also the reflections produced by that mirror. The result is an endless progression of reflections between the two; reflection between objects like this are known as Interreflections.",9],["Reflection probes create the cubemap by taking a snapshot of the view from their position. However, with a single snapshot, the view cannot show interreflections and so additional snapshots must be taken for each stage in the interreflection sequence.",9],["The number of times that a reflection can \"bounce\" back and forth between two objects is controlled in the Lighting window; go to Environment > Environment Reflections and edit the Bounces property. This is set globally for all probes, rather than individually for each probe. With a reflection bounce count of 1, reflective objects viewed by a probe are shown as black. With a count of 2, the first level of interreflection are visible, with a count of 3, the first two levels will be visible, and so on.",9],["Note that the reflection bounce count also equals the number of times the probe must be baked with a corresponding increase in the time required to complete the full bake. You should therefore set the count higher than one only when you know that reflective objects will be clearly visible in one or more probes.",9],["Box projection",9],["Normally, the reflection cubemap is assumed to be at an infinite distance from any given object. Different angles of the cubemap will be visible as the object turns but it is not possible for the object to move closer or farther away from the reflected surroundings. This often works very well for outdoor scenes but its limitations show in an indoor scene; the interior walls of a room are clearly not an infinite distance away and the reflection of a wall should get larger the closer the object gets to it.",9],["The Box Projection option allows you to create a reflection cubemap at a finite distance from the probe, thus allowing objects to show different-sized reflections according to their distance from the cubemap's walls. The size of the surrounding cubemap is determined by the probes zone of effect, as determined by its Box Size property. For example, with a probe that reflects the interior of a room, you should set the size to match the dimensions of the room.",9],["In the Built in Render Pipeline, you can enable global Box Projection for a given Graphics tier in Project Settings > Graphics > Tier Settings. You can disable this setting for individual Reflection Probes in the Reflection Probe inspector if you want to create infinite projection.",9],["Ambisonic Audio",10],["Ambisonics are a type of audio that provide a representation of sound that can completely surround a listener. They can provide an audio skybox for distant ambient sounds, and are particularly useful for 360-degree videos and applications.",10],["Ambisonics are stored in a multi-channel format. Instead of mapping each channel to a specific speaker, ambisonics represent the soundfield in a more general way. You can rotate the soundfield based on the listener’s orientation (such as the user’s head rotation in VR). You can also decode the soundfield into a format that matches the speaker setup.",10],["Selecting an ambisonic audio decoder",10],["To select an ambisonic audio decoder in your project, open your project's Audio settings (menu: Edit > Project Settings > Audio). Select an Ambisonic Decoder Plugin from the list of available decoders in the project.",10],["There are no built-in decoders included with Unity, but you can do one of the following options:",10],["You can create your own ambisonic audio decoder plug-in. For more information, refer to Ambisonic Audio Decoder.",10],["Use external decoders. For instance, some VR hardware manufacturers provide them in their audio SDKs for Unity. Check your target platform manufacturer's documentation to learn if this is available for your project.",10],["Importing an ambisonic audio clip",10],["To import an ambisonic audio clip, import a multi-channel B-format WAV file with ACN component ordering, and SN3D normalization. In the Inspector window for the audio clip, enable Ambisonic.",10],["Playing the ambisonic audio clip through an Audio Source",10],["To play an ambisonic audio clip through an Audio Source:",10],["Assign the WAV file as an Audio Clip on an Audio Source.",10],["Disable the Spatialize option. When you play an ambisonic audio clip, it is automatically decoded through the project’s selected ambisonic audio decoder. The decoder converts the clip from ambisonic format to the project’s selected speaker format. It also already handles spatialization as a part of this decoding operation, based on the orientation of the audio source and audio listener.",10],["When Unity plays an ambisonic audio clip, it decompresses the file, if necessary, then decodes it to convert it to the project’s selected speaker mode. It then applies the Audio Source’s effects.",10],["Note:** Reverb zones are disabled for ambisonic audio clips.",10],["Analysis",11],["When you make an application in Unity, it’s important that you analyze and debug it to make sure that its bug-free, optimized, and runs correctly on the target device.",11],["This section contains information on:",11],["Unity has several tools that you can use to measure the performance of your game:",11],["Mesh data",12],["This page contains information on the data that a mesh contains, and how Unity stores that data in the Mesh class.",12],["Overview",12],["A mesh is defined by these properties:",12],["Vertices: A collection of positions in 3D space, with optional additional attributes.",12],["Topology: The type of structure that defines each face of the surface.",12],["Indices: A collection of integers that describe how the vertices combine to create the surface, based on the topology.",12],["In addition to this, deformable meshes contain either:",12],["Blend shapes: Data that describes different deformed versions of the mesh, for use with animation.",12],["Bind poses: Data that describes the \"base\" pose of the skeleton in a skinned mesh.",12],["",12],["Vertex data",12],["The elements of vertex data are called vertex attributes.",12],["Every vertex can have the following attributes:",12],["Up to 8 texture coordinates",12],["Internally, all vertex data is stored in separate arrays of the same size. If your mesh contains an array with 10 vertex positions, it also has arrays with 10 elements for each other vertex attribute that it uses.",12],["In C#, Unity describes the available vertex attributes with the VertexAttribute enum. You can check whether an instance of the Mesh class has a given vertex attribute with the Mesh.HasVertexAttribute function.",12],["",12],["Position",12],["The vertex position represents the position of the vertex in object space.",12],["Unity uses this value to determine the surface of the mesh.",12],["This vertex attribute is required for all meshes.",12],["In the Mesh class, the simplest way to access this data is with Mesh.GetVertices and Mesh.SetVertices. Unity also stores this data in Mesh.vertices, but this older property is less efficient and user-friendly.",12],["",12],["Normal",12],["The vertex normal represents the direction that points directly \"out\" from the surface at the position of the vertex.",12],["Unity uses this value to calculate the way that light reflects off the surface of a mesh.",12],["This vertex attribute is optional.",12],["In the Mesh class, the simplest way to access this data is with Mesh.GetNormals and Mesh.SetNormals. Unity also stores this data in Mesh.normals, but this older property is less efficient and user-friendly.",12],["",12],["Tangent",12],["The vertex tangent represents the direction that points along the \"u\" (horizontal texture) axis of the surface at the position of the vertex.",12],["Unity stores the vertex tangent with an additional piece of data, in a four-component vector. The x,y,z components of the vector describe the tangent, and the w component of the vector describes its orientation. Unity uses the w value to compute the binormal, which is the cross product of the tangent and normal.",12],["Unity uses the tangent and binormal values in normal mapping.",12],["This vertex attribute is optional.",12],["In the Mesh class, the simplest way to access this data is with Mesh.GetTangents and Mesh.SetTangents. Unity also stores this data in Mesh.tangents, but this older property is less efficient and user-friendly.",12],["",12],["Texture coordinates (UVs)",12],["A mesh can contain up to eight sets of texture coordinates. Texture coordinates are commonly called UVs, and the sets are called channels.",12],["Unity uses texture coordinates when it \"wraps\" a texture around the mesh. The UVs indicate which part of the texture aligns with the mesh surface at the vertex position.",12],["UV channels are commonly called \"UV0\" for the first channel, \"UV1\" for the second channel, and so on up to \"UV7\". The channels respectively map to the shader semantics TEXCOORD0, TEXCOORD1, and so on up to TEXCOORD7.",12],["By default, Unity uses the first channel (UV0) to store UVs for regular textures such as diffuse maps and specular maps. Unity can use the second channel (UV1) to store baked lightmap UVs, and the third channel (UV2) to store input data for real-time lightmap UVs. For more information on lightmap UVs and how Unity uses these channels, see Lightmap UVs.",12],["All eight texture coordinate attributes are optional.",12],["In the Mesh class, the simplest way to access this data is with Mesh.GetUVs and Mesh.SetUVs. Unity also stores this data in the following properties: Mesh.uv, Mesh.uv2, Mesh.uv3 and so on, up to Mesh.uv8. Note that these older properties are less efficient and user-friendly.",12],["",12],["Color",12],["The vertex color represents the base color of a vertex, if any.",12],["This color exists independently of any textures that the mesh may use.",12],["This vertex attribute is optional.",12],["In the Mesh class, the simplest way to access this data is with Mesh.GetColors and Mesh.SetColors. Unity also stores this data in Mesh.colors, but this older property is less efficient and user-friendly.",12],["",12],["Blend indices and bone weights",12],["In a skinned mesh, blend indices indicate which bones affects a vertex, and bone weights describe how much influence those bones have on the vertex.",12],["In Unity, these vertex attributes are stored together.",12],["Unity uses blend indices and bone weights to deform a skinned mesh based on the movement of its skeleton. For more information, see Skinned Mesh Renderer.",12],["These vertex attributes are required for skinned meshes.",12],["In the past, Unity only allowed up to 4 bones to influence a vertex. It stored this data in a BoneWeight struct, in the Mesh.boneWeights array. Now, Unity allows up to 256 bones to influence a vertex. It stores this data in a BoneWeight1 struct, and you can access it with Mesh.GetAllBoneWeights and Mesh.SetBoneWeights. For more information, read the linked API documentation.",12],["",12],["Topology",12],["Topology describes the type of face that a mesh has.",12],["A mesh’s topology defines the structure of the index buffer, which in turn describes how the vertex positions combine into faces. Each type of topology uses a different number of elements in the index array to define a single face.",12],["Unity supports the following mesh topologies:",12],["Triangle",12],["Quad",12],["Lines",12],["LineStrip",12],["Points",12],["Note:** The Points topology doesn’t create faces; instead, Unity renders a single point at each position. All other mesh topologies use more than one index to create either faces or edges.",12],["In the Mesh class, you can get the topology with Mesh.GetTopology, and set it as a parameter of Mesh.SetIndices.",12],["For more information on supported mesh topologies, see the documentation for the MeshTopology enum.",12],["Note:** You must convert any meshes that use other modelling techniques (such as NURBS or NURMS/Subdivision Surfaces modelling) into supported formats in your modelling software before you can use them in Unity.",12],["",12],["Index data",12],["The index array contains integers that refer to elements in the vertex positions array. These integers are called indices.",12],["Unity uses the indices to connect the vertex positions into faces. The number of indices that make up each face depends on the topology of the mesh.",12],["In the Mesh class, you can get this data with Mesh.GetIndices, and set it with Mesh.SetIndices. Unity also stores this data in Mesh.triangles, but this older property is less efficient and user-friendly.",12],["Note:** The Points topology doesn’t create faces; instead, Unity renders a single point at each position. All other mesh topologies use more than one index to create either faces or edges.",12],["For example, for a mesh that has an index array that contains the following values:",12],["0,1,2,3,4,5",12],["If the mesh has a triangular topology, then the first three elements (0,1,2) identify one triangle, and the following three elements (3, 4, 5) identify another triangle.",12],["There is no limit to the number of faces that a vertex can contribute to. This means that the same vertex can appear in the index array multiple times. For example, an index array could contain these values:",12],["0,1,2,1,2,3",12],["If the mesh has a triangular topology, then the first three elements (0,1,2) identify one triangle, and the following three elements (1,2,3) identify another triangle that shares vertices with the first.",12],["Winding order",12],["The order of the vertices in each group in the index array is called the winding order. Unity uses winding order to determine whether a face is front-facing or back-facing, and in turn whether it should render a face or cull it (exclude it from rendering). By default, Unity renders front-facing polygons and culls back-facing polygons.",12],["Unity uses a clockwise winding order, which means that Unity considers any face where the indices connect in a clockwise direction is front facing.",12],["The above diagram demonstrates how Unity uses winding order. The order of the vertices in each face determines the direction of the normal for that face and Unity compares this to the forward direction of the current camera perspective. If the normal points away from the current camera’s forward direction, it is back-facing.",12],["The closer triangle is ordered (1, 2, 3), which is a clockwise direction in relation to the current perspective, so the triangle is front-facing. The further triangle is ordered (4, 5, 6), which from this perspective is an anti-clockwise direction, so the triangle is back-facing.",12],["",12],["Blend shapes",12],["Blend shapes describe versions of the mesh that are deformed into different shapes. Unity interpolates between these shapes. You use blend shapes for morph target animation, which is a common technique for facial animation.",12],["Blend shape data is stored as blend shape vertices. Blend shape data is \"sparse\". This means that there isn't a blend shape vertex for every mesh vertex; there is only a corresponding blend shape vertex if the mesh vertex deforms.",12],["A blend shape vertex contains deltas for position, normal, and tangent, and an index value. The meaning of the index value depends on how you request the data.",12],["In the Mesh class, you can access blend shape vertex data with Mesh.GetBlendShapeBuffer. This returns a GraphicsBuffer that provides access to the blend shape vertex data on the GPU. This method allows you to choose between two different buffers; one that orders the data by blend shape, and one that orders the data by mesh vertex. The choice of buffer determines the meaning of the index value and the layout of the data in the buffer. For more information on buffer layouts, see BlendShapeBufferLayout.",12],["For information on using blend shapes with animations, see Working with blend shapes.",12],["This data is optional.",12],["",12],["Bind poses",12],["In a skinned mesh, the bind pose of a bone describes its position when the skeleton is in its default position (also called its bind pose or rest pose).",12],["In the Mesh class, you can get and set this data with Mesh.bindposes. Each element contains data for the bone with the same index.",12],["This data is required for skinned meshes.",12],["Import an Android Archive plug-in",13],["This page describes how to import an Android Archive (AAR) plug-in into your Unity Project.",13],["Copy the AAR file to your Unity Project's Assets folder.",13],["Select the AAR in Unity and view it in the Inspector.",13],["In the Select platforms for plugin section, select Android.",13],["Select Apply.",13],["Additional resources",13],["Android mobile scripting",14],["Note:** For cross-platform Projects, use the UNITY_ANDROID #define directive to conditionally compile Android-specific C# code. See documentation on Platform dependent compilation to learn more.",14],["Accessing device-specific features and properties",14],["Apps can access most features of an Android device through the Input and Handheld classes. For more information, see:",14],["Vibration support",14],["You can trigger a vibration by calling Handheld.Vibrate. Devices without vibration hardware ignore this call.",14],["Activity indicator",14],["Mobile operating systems have built-in activity indicators your app can use during slow operations. For more information, see Handheld.StartActivityIndicator.",14],["To access device-specific properties, use these scripts:",14],["Script Device property ",14],["SystemInfo.deviceUniqueIdentifier Always returns the md5 of ANDROID_ID. For more information, see Android developer documentation on ANDROID_ID. ",14],["SystemInfo.deviceName Returns the device name. For Android devices, Unity tries to read device_name and bluetooth_name from secure system settings. If these strings have no values, Unity returns <unknown>. ",14],["SystemInfo.deviceModel Returns the device model. This often includes the manufacturer name and model number (for example, \"LGE Nexus 5 or \"SAMSUNG-SM-G900A\"). ",14],["SystemInfo.operatingSystem Returns the operating system name and version. ",14],["Host APK expansion files",15],["This page explains how to host APK expansion files so they are accessible by the application.",15],["Host APK expansion files on Google Play",15],["Google Play can host APK expansion files for applications in their store. If an application includes APK expansion files, Google Play automatically downloads them to the device when the user downloads the application. This means if you deliver your application to Google Play, publish the APK expansion files along with the main APK, and Google Play handles everything.",15],["Additional resources",15],["APK expansion files in Unity",16],["This page describes how APK expansion files work in the context of a Unity Android application.",16],["Unity can automatically split an application into a main APK and a single APK expansion file that uses the .obb file extension. In Unity, this process is called splitting the application binary. The APK expansion file this process generates is the main APK expansion file and if you want to create the patch APK expansion, you must do that manually.",16],["",16],["Create the main APK expansion file",16],["To create the main APK expansion file for your application, indicate to Unity to split the application. For information on how to do this, refer to Splitting the application binary.",16],["Now when you Build the application, Unity generates the APK and the main APK expansion file then copies them both to the output directory. Unity uses the name of the application followed by .main for the name of the APK expansion file. For example, if the application is called my-app, the APK will be my-app.apk and the APK expansion file will be my-app.main.obb.",16],["If the application starts and it can’t find and load the main APK expansion file, only the first Scene is available. In this case, try to download the APK expansion file. For more information, refer to Download process.",16],["",16],["Create the patch APK expansion file",16],["Unity only automatically creates the main APK expansion file, but you can manually create the patch APK expansion file if the application requires more storage space. For information on how to create the patch APK expansion file, refer to Android's Development checklist documentation.",16],["APK compatibility",16],["When you create the patch expansion file, you must include a unity_obb_guid file within it so Android recognizes the APK expansion as being compatible with the APK. To do this:",16],["Find the main APK expansion file that Unity generates. It's a zip archive.",16],["Extract the files from the APK expansion zip archive.",16],["In the list of extracted files, find the unity_obb_guid file.",16],["Copy this file over to the patch expansion file.",16],["Additional resources",16],["Manually install an APK expansion file",17],["Main and patch expansion files must be in a particular location on the device for the application to read from them. If you Build and Run your application, Unity installs both the APK and the main APK expansion file on the device.",17],["If you instead want to install the application manually, or want to install a patch expansion file, you must use the ADB utility to copy APK expansion files into the correct location on your device. For information on how to do this, refer to Testing file reads.",17],["Note**: The APK expansion file name must correspond to the format that Google requires. For more information, refer to expansion files.",17],["Additional resources",17],["Android application size restrictions",18],["Digital distribution services often have application size restrictions which means that larger applications must split their assets up. This section of the documentation explains how to overcome application size restrictions for each publishing format.",18],["Topic Description ",18],["---------------------------------------------------------- ------------------------------------------------------------ ",18],["Introduction to asset splitting Understand the options available for asset splitting in different Android publishing formats. ",18],["APK expansion files Understand what APK expansion files are and how to work with them in a Unity Android application. ",18],["Play Asset Delivery Understand what Play Asset Delivery is and how to use it to split assets in a Unity Android application. ",18],["Application patching",19],["Building an application for Android can take a significant amount of time. For faster iterations during development, you can patch the application package instead of rebuilding it. When you patch an application package, Unity only processes files you made changes to since the last patch and sends them to the connected Android device.",19],["Platform compatibility",19],["Platform Application patching ",19],["------------- ------------------------ ",19],["Android Supported ",19],["ChromeOS Unsupported ",19],["Patching an application",19],["To patch an application, you can use the Unity Editor or, if you implement your own build pipeline, the scripting API.",19],["The first time you patch an application, Unity sets up the patch application environment on the device. This means that the first patch takes longer than future patches.",19],["From the Editor",19],["To patch an application from the Unity Editor:",19],["Open the Build Settings window (menu: File > Build Settings).",19],["Select the Android platform from the Platform list.",19],["Enable Development Build.",19],["Select Patch or, if you want to run the patch after Unity finishes building it, Patch And Run.",19],["Using the scripting API",19],["If you implement your own build pipeline, you can use the scripting API to patch your application. To do this, pass the BuildOptions.BuildScriptsOnly and BuildOptions.PatchPackage options to the BuildPipeline.BuildPlayer method.",19],["For example:",19],["```c#",19],["BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();",19],["buildPlayerOptions.scenes = new[] { \"Assets/Scene1.unity\"};",19],["buildPlayerOptions.target = BuildTarget.Android;",19],["// Use Patch & Run for all builds for optimal turn-around times.",19],["// (In prior versions, an initial regular Build & Run was necessary.)",19],["buildPlayerOptions.options = BuildOptions.PatchPackage BuildOptions.AutoRunPlayer BuildOptions.Development;",19],["BuildPipeline.BuildPlayer(buildPlayerOptions);",19],["How application patching works",19],["When you patch an application, Unity:",19],["Creates a minimal APK that contains all compiled Java sources.",19],["Takes files that have changed since the last patch and stores them in a directory inside the application's cache folder at: /storage/emulated/0/Android/data/<PackageName>/pram-shadow-files/.",19],["Stores native library files, including scripts compiled using Il2cpp, in the application's data directory at: /data/data/<PackageName>/pram-shadow-files/lib/.",19],["When the application starts, it checks for a marker file inside the APK. If the marker exists, the application redirects its file reads to the pram-shadow-files directory.",19],["A Build & Run doesn't clear any of the patch files. Instead, it replaces the APK install. This disables the redirect to the pram-shadow-files directory. This means that subsequent patch builds can re-use unchanged files.",19],["Clearing patch files",19],["You can use the Android storage settings to clear the application's cache. Clearing the cache removes the patch files installed by the application patching build process.",19],["The steps to clear an application's cache are different depending on the Android device. To find the steps for your device:",19],["Go to Get help from your device manufacturer.",19],["Find your device manufacturer and follow the link to its support site.",19],["Search the support site for steps on clearing an application's cache.",19],["Create a custom asset pack",20],["To create a custom asset pack, create a directory with a name that ends with .androidpack. You can place this directory anywhere in your project’s Assets directory, or any subdirectory.",20],["Important**: Unity doesn't import assets from .androidpack directories, so you can't use assets in custom asset packs directly in Unity scenes. To use assets from custom asset packs, you must manually access and load them dynamically at runtime. For information on how to do this, refer to Manage asset packs at runtime.",20],["The following steps explain how to create a custom asset pack named MyAssets1:",20],["Go to the directory you want to create the asset pack in. This can be directly in Assets or a subdirectory like Assets/CustomAssetPacks.",20],["Create a new directory and call it MyAssets1.androidpack. This is the root folder of your new asset pack. The contents of the asset pack must match the structure that Android Studio expects or builds of your project will fail. For information on the expected structure, refer to Integrate asset delivery. The only exception is that you don't need to add a build.gradle file.Note: Asset pack names must begin with a letter and consist of English alphanumeric characters or an underscore. If you're creating more than one custom asset pack, make sure you choose a unique name for each asset pack. Asset pack names that are similar, such as Assets1.androidpack and MyAssets1.androidpack, cause Android App Bundle (AAB) build failure.",20],["To add assets to the asset pack, place them at the following folder path within the asset pack: src/main/assets.",20],["By default, the delivery mode is on-demand, which means that if you don’t change the delivery mode, you need to manually download the asset pack at runtime. For information on how to do this, refer to Manage asset packs at runtime.",20],["To use a different delivery mode, create a file called build.gradle inside the custom asset pack directory. Paste the following into the file:",20],["apply plugin: 'com.android.asset-pack'",20],["assetPack {",20],["packName = \"MyAssets1\"",20],["dynamicDelivery {",20],["deliveryType = \"fast-follow\"",20],["This sets the delivery mode to fast-follow, which means Google Play automatically downloads the asset pack after it installs the application. For information on the format of this file, refer to Integrate asset delivery.",20],["Note**: The packName you specify in the build.gradle file must match the asset pack directory name you set without the .androidpack extension.",20],["Additional resources",20],["Asset packs in Unity",21],["This page describes how asset packs work in the context of a Unity Android application that uses Play Asset Delivery.",21],["You can configure Unity to generate an Android App Bundle (AAB) that includes your application split into a base module and asset packs:",21],["Base module**: Contains the executables (Java and native), plug-ins, and assets in the first scene. The first scene is the scene that has a build index of 0.",21],["Asset packs**: Contains everything else, including the remaining scenes, resources, and Streaming Assets. For more information about the asset packs that Unity generates at build time, refer to Generated asset packs.",21],["Alongside the asset packs that Unity generates automatically, you can also create your own custom asset packs. This is useful when you need to control which assets an asset pack contains. Unity adds your custom asset packs to the final AAB. For more information, see Custom asset packs.",21],["",21],["Generated asset packs",21],["Asset packs have download size limits. To account for this, Unity changes how it generates asset packs depending on the size of your additional assets:",21],["If the additional assets take less than 1GB of storage, Unity packs everything into a single asset pack with the install-time delivery mode. If you do not create any custom asset packs, this means that the device downloads the asset pack as part of the application installation and, when the user first launches the application, all assets are available.",21],["If the additional assets take more than 1GB of storage, Unity adds streaming assets into one asset pack and adds all other assets into another asset pack. Unity assigns the install-time delivery mode to the larger asset pack and assigns the fast-follow delivery mode to the smaller one.",21],["Important**: If either of these asset packs is larger than the size limit that the Google Play Store allows, Unity displays a warning but doesn’t fail the build. Also, Unity checks the sizes of asset packs individually and doesn’t perform size verification for custom asset packs. This means that, if Unity-generated asset packs fit within the Google Play Store limits but their combination with custom asset packs is too large for the Google Play Store, Unity doesn’t display a warning or error.",21],["For asset packs that Unity automatically generates, Unity does not support changing the delivery mode. If you want to change the delivery mode of an asset pack, create custom asset packs with your assets.",21],["",21],["Custom asset packs",21],["If you want to control which non-code resources are in a particular asset pack, you can create a custom asset pack. Unlike Unity-generated asset packs, you can set the delivery mode for custom asset packs. If you create a custom asset pack, be aware that the Google Play Store has size and quantity limits for asset packs. For information on the limits, see Download size limits.",21],["To use custom asset packs with Addressables, you must extend the Addressables functionality. The Play Asset Delivery Addressables sample provides an example of how to do this. For more information, refer to the sample documentation.",21],["Additional resources",21],["Manage asset packs at runtime",22],["Unity provides APIs to manage asset packs at runtime. They use Google’s PlayCore API, which means they have the same limitations as PlayCore, and can’t manage install-time asset packs. Using the PlayCore API also means your application requires the PlayCore plugin. If your project has asset packs, either custom asset packs or Unity-generated asset packs, Unity automatically adds the PlayCore dependency to the application’s manifest.",22],["The way you download asset packs and access their assets depends on the asset pack delivery mode. There are three asset pack delivery modes:",22],["install-time: Google Play automatically downloads install-time asset packs when the device installs the application. Google Play considers these asset packs to be part of the base application, and an end user can’t uninstall them without uninstalling the entire application. The PlayCore API doesn’t handle install-time asset packs, which means that you can’t check the status, request to download, or remove install-time asset packs. You also can’t directly access assets inside of these asset packs, except streaming assets in Unity-generated install-time asset packs. To access streaming assets, use Application.streamingAssetsPath to get the path to streaming assets location, then use UnityWebRequest to access assets in that path. If you create a custom asset pack, you can’t access assets inside it using standard file APIs. Instead, use Android’s AssetManager APIs.",22],["fast-follow: Google Play automatically starts to download fast-follow asset packs after it installs the application. However, it is possible that not all fast-follow asset packs are available on the first time the application launches. To check the status and download fast-follow asset packs, see Download asset packs.",22],["on-demand: Google Play doesn’t automatically download on-demand asset packs. You have to manually start the download. For information on how to do this, see below.",22],["For more information about delivery modes, see Delivery modes.",22],["",22],["Download asset packs",22],["If your application uses fast-follow or on-demand asset packs, the device must download these asset packs before the application can access assets inside of them. To check the status of asset packs and download them if they are not on the device, you must first know the name of each asset pack. To get the names of Unity-generated asset packs, call AndroidAssetPacks.GetCoreUnityAssetPackNames. There is no runtime API to get the names of custom asset packs so you must keep track of them yourself. You set the name of custom asset packs at build time; it’s the name of the directory.",22],["After you have the names of your asset packs, to check the status of each asset pack, call AndroidAssetPacks.GetAssetPackStateAsync, passing in the asset pack name. This returns the status of the asset pack you query, and you can use the result to determine whether you need to download the asset pack. If you want to quickly query the status of every Unity-generated asset pack, you can use AndroidAssetPacks.coreUnityAssetPacksDownloaded. This is useful because you must ensure that every Unity-generated asset pack is available before you load any scene other than the first one or try to access other resources that Unity handles.",22],["For every asset pack you need to download, call AndroidAssetPacks.DownloadAssetPackAsync, passing in the asset pack name. While the asset pack downloads, monitor the download status because downloads can pause or fail. There are two ways to do this:",22],["Periodically check the DownloadAssetPackAsyncOperation instance that AndroidAssetPacks.DownloadAssetPackAsync returns.",22],["Use the version of AndroidAssetPacks.DownloadAssetPackAsync that takes a callback as its second parameter. The callback you pass in must take an AndroidAssetPackInfo as a parameter that you can use to determine the state of the download.",22],["Additional resources",22],["Set up Play Asset Delivery",23],["Play Asset Delivery is the asset splitting solution for Android App Bundles (AAB). To use Play Asset Delivery, set up your project to:",23],["Use the AAB publishing format. For information on how to do this, refer to Publishing format.",23],["Split the application binary. For information on how to do this, refer to Splitting the application binary. If Split Application Binary is grayed out, it means your current Unity Editor version doesn't support Play Asset Delivery. To resolve this, update the Unity Editor. All versions of Unity from 2021.3 support Play Asset Delivery. Support was also added for previous Unity versions in the following patch releases:",23],["2019.4.29f1",23],["2020.3.15f2",23],["2021.1.16f1",23],["2021.2.0f1",23],["When you build your application, Unity creates an AAB that includes your application split into a base module and asset packs. For more information, see Asset packs in Unity.",23],["Important**: Unity uses the PLAY_ASSET_PACKS Gradle template variable to specify which asset packs to include in the Android App Bundle. If you use a custom Gradle template that was created before Unity supported Play Asset Delivery, your template will not contain this variable. Because Unity automatically generates the values for this variable, it's best practice to recreate your Gradle template file from the current Unity version and reapply your modifications on top.",23],["Additional resources",23],["Introduction to asset splitting",24],["Depending on which publishing format your application uses, there is a different solution for asset splitting.",24],["The following table shows which asset splitting solution is for which publishing format:",24],["Publishing format Asset splitting solution ",24],["------------------------------------------------------------ ------------------------------------------ ",24],["APK APK expansion files ",24],["Android App Bundle (AAB) Play Asset Delivery ",24],["Note**: Some digital distribution services require applications to use a specific publishing format. For example, Google Play requires new applications to use the AAB format thus applications you want to distribute through Google Play must use Play Asset Delivery to split assets.",24],["Additional resources",24],["Android Build Settings",25],["Use the Android Build Settings to configure and build your application for Android devices. The Android Build Settings are part of the Build Settings window. To view the Android Build Settings:",25],["Select File > Build Settings.",25],["From the list of platforms in the Platform pane, select Android.",25],["Note: If Android is greyed out, follow the steps on Android environment setup.",25],["If the Build button isn't visible and Build And Run is greyed out, select Switch Platform. The Android Build Settings now have an effect on the build.",25],["Build settings",25],["This section explains each Android Build Setting. For information on the rest of the Build Settings window, refer to Build Settings window.",25],["Setting Description ",25],["------------------------------------------------------- ------------------------------------------------------------ ",25],["Texture Compression The texture compression format to use for the build. The options are:• Use Player Settings: Uses the texture compression format you set in Player Settings.• ETC (GLES 2.0): Uses ETC format.• ETC2 (GLES 3.0): Uses ETC2 format.• ASTC: Uses ASTC format.• DXT (Tegra): Uses DXT format.• PVRTC (PowerVR): Uses PVRTC format. You can also change this setting from a script or using the -setDefaultPlatformTextureFormat command-line switch. For more information, see Recommended, default, and supported texture compression formats, by platform. ",25],["ETC2 fallback Specifies the uncompressed RGBA texture format that Unity uses for Android devices that don’t support ETC2. This affects the amount of memory uncompressed textures use and their image quality. The options are:• 32-bit: Stores RGBA textures in full resolution using 32 bits to store each pixel (8 bits per color channel). This is the highest quality uncompressed texture format and uses the most memory.• 16-bit: Stores RGBA textures in full resolution using 16 bits to store each pixel (4 bits per color channel). This uses half of the memory that 32-bit uses, but textures can lose valuable color information because of the lower precision.• 32-bit, half resolution: Stores RGBA textures in half resolution using 32 bits to store each pixel (8 bits per color channel). This uses a quarter of the memory that 32-bit uses, but the texture can become blurry. Note: If a texture doesn't use ETC2 compression format:• Most compression formats use the 32-bit fallback.• Single-channel and two-channel texture compression formats fall back to a different format depending on what the GPU supports. For example, it could be R8_UNorm or R8G8B8A8_SRGB.• ASTC HDR formats fall back to a floating-point format if the GPU supports it. Otherwise, they fall back to 32-bit. ",25],["Export Project Indicates whether to export the Unity project as a Gradle project that you can import into Android Studio. For more information, refer to Exporting an Android project. ",25],["Symlink Sources Indicates whether to share Java and Kotlin source files between the Unity and exported Gradle project. Enable this setting to create symbolic links so the Gradle project references Java and Kotlin source files in the Unity project. This is useful to test and iterate Java and Kotlin code because it means any changes you make to Java and Kotlin source files in the exported Gradle project persist if you re-export the Unity project. Disable this setting to make Unity copy Java and Kotlin source files from the Unity project into the exported Gradle project. You can only interact with this setting if you enable Export Project. ",25],["Build App Bundle (Google Play) Indicates whether to build the application as an Android App Bundle (AAB) to distribute on Google Play. If you enable this setting, Unity builds the application as an AAB. If you disable this setting, Unity builds the application as an APK. The setting only appears if you disable Export Project. ",25],["Export for App Bundle Indicates whether to configure the exported Gradle project to build as an Android App Bundle. The setting only appears if you enable Export Project. ",25],["Create symbols.zip Specifies how Unity generates a symbols package when it builds your application. The options are:• Disabled: Unity doesn't generate a symbols package.• Public: Unity generates a public symbols package for your application.• Debugging: Unity generates a debugging symbols package for your application. ",25],["Run Device Specifies which attached device to test the build on. Devices connected via USB should appear in the list automatically. If you connect a new device or don’t see an attached device in the list, click Refresh. To connect a new device wirelessly over Android Debug Bridge, select the <Enter IP> option. For more information, refer to Debugging on an Android device or Debugging on a ChromeOS device, depending on the platform you want to build for. ",25],["Build to Device A build pipeline that doesn't create a full build and instead deploys single files that changed since the last patch directly to the device. Patch deploys changed files to the devices and Patch And Run deploys changed files and then runs the application on the device. For more information, refer to Application patching. You can only interact with this setting if you enable Development Build. ",25],["Development Build Indicates whether to include scripting debug symbols and the Profiler in your build. Use this setting when you want to test your application.When you select this option, Unity sets the DEVELOPMENT_BUILD scripting define. Your build then includes preprocessor directives that set DEVELOPMENT_BUILD as a condition. For more information, refer to Platform-dependent compilations. ",25],["Autoconnect Profiler Indicates whether to automatically connect the Profiler to the built application when it runs. You can only interact with this setting if you enable Development Build. ",25],["Deep Profiling Support Indicates whether to enable Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application so it returns more detailed profiling data. This option might slow down script execution. You can only interact with this setting if you enable Development Build. ",25],["Script Debugging Indicates whether to allow debugging for the application's script code. You can only interact with this setting if you enable Development Build. ",25],["Wait For Managed Debugger Indicates whether the application waits for a debugger to attach before it runs any script code. This setting only appears if you enable Script Debugging. Also, you can only interact with this setting if you enable Development Build. ",25],["Compression Method Specifies the method Unity uses to compress the data in your Project when it builds the Player. This includes Assets, Scenes, Player settings, and GI data. The options are:• Default: Uses ZIP which gives slightly better compressions results than LZ4 and LZ4HC but data is slower to decompress. • LZ4: Uses LZ4, a fast compression format that's useful for development builds. Using LZ4 compression instead of ZIP can significantly improve loading time for Unity applications. For more information, refer to BuildOptions.CompressWithLz4. • LZ4HC: A high compression variant of LZ4 that's slower to build but produces better results for release builds. Using LZ4HC compression instead of ZIP can significantly improve loading time for Unity applications. For more information, refer to BuildOptions.CompressWithLz4. ",25],["Building and delivering for Android",26],["This section of the User Manual explains how to build and publish an Android application.",26],["Topic Description ",26],["------------------------------------------------------------ ------------------------------------------------------------ ",26],["Gradle templates Explains what Gradle templates are and how to use them to gain more control over the build process. ",26],["Override the Android App Manifest Explains how to override the Android App Manifest within the context of building an Android application. ",26],["Android Build Settings Reference documentation for Android Build Settings. ",26],["Building for Android Explains how to build a Unity application for Android. ",26],["Exporting your Android project Explains how to export a Unity project as a Gradle project for Android Studio. ",26],["Digital distribution services for Android Describes digital distribution service-specific delivery requirements for Android applications and explains how to meet them. ",26],["Build your application for Android",27],["This page contains instructions on how to build your Unity application for Android as well as considerations to be aware of when you do. For information on the build process for Android and the tools Unity uses, see How Unity builds Android applications.",27],["Instead of building your application, you can also export the Unity project as a Gradle project and import that into Android Studio. This is useful if you want more control over the build pipeline, want to see or modify the Android App Manifest that Unity generates for your application, or integrate Unity-powered features into another Android application. For more information, see Exporting an Android project.",27],["Some digital distribution services that host Android applications have particular requirements that can change the build process. For example, Google Play requires your application to be an Android App Bundle (AAB) and not an APK. If you are targeting a specific digital distribution service with your build, see the documentation for that Digital distribution service first to check if the requirements differ.",27],["Some digital distribution services have a limit on the initial install size of your application. Unity includes multiple methods that you can use to optimize the install size. For more information, see Optimize distribution size.",27],["If you want to build your application for debugging purposes, application patching can help you reduce the time it takes to build your application. For more information, refer to Application patching.",27],["Configure the build",27],["Before you create a build, configure your project's settings so that Unity builds the application with the runtime settings and build system properties you want. There are two sets of settings that configure a Unity build:",27],["Player Settings: Configure runtime and build settings for the application.",27],["Build Settings: Configure build system settings.",27],["",27],["Publishing format",27],["Unity can build Android applications in the following publishing formats:",27],["APK",27],["By default, Unity builds Android applications in the APK publishing format. To make Unity build the Android application as an AAB:",27],["Select File > Build Settings.",27],["From the list of platforms in the Platform pane, select Android.",27],["Enable Build App Bundle (Google Play). If you want to export the project and build it in Android Studio, enable Export Project then enable Export for App Bundle.",27],["",27],["Build the application",27],["To build your Unity application for Android:",27],["Select File > Build Settings.",27],["From the list of platforms in the Platform pane, select Android.",27],["Note**: If Android is greyed out, set up your project for Android development.",27],["Disable Export Project. If you want to export your project for Android Studio instead of building it within Unity, refer to Exporting your Android project.",27],["If you want to use the Build and Run option to immediately run the build on a target device, set Run Device to the device you want to run the application on. For information on how to connect your target device to Unity, refer to Debugging on an Android device or Debugging on a ChromeOS device, depending on the platform you want to build for.",27],["Click either Build or Build and Run.",27],["Select the destination for Unity to place the application. If you selected Build and Run, Unity also installs the application on the Run Device.",27],["Click Save. This starts the build.",27],["If you selected Build and Run, when Unity creates the build:",27],["\nIf the Split Application Binary Player Setting is enabled and the Build App Bundle (Google Play) Build Setting is disabled, Unity builds Android expansion files (OBB) for the APK and places them in the correct location on your device.\n",27],["\nIf the Development Build Build Setting is enabled, Unity also sets up a Profiler tunnel and enables CheckJNI before it launches your application.\n",27],["Tip**: After you specify the output path the first time, you can use Ctrl+B (macOS: Cmd+B) keyboard shortcut to build and run the application.",27],["",27],["Application signing",27],["Android applications must be digitally signed to run on an Android device. There are two types of application signing:",27],["Debug signing: The default signing method for a new Unity Project. Applications that use debug signing are able to run on an Android device, but you can't publish them.",27],["Custom signing: The signing method that Gradle uses when you provide custom signing information. Applications that use custom signing are able to run on an Android device and you can publish them.",27],["To provide custom signing information, create a keystore and load it into Publishing Settings.",27],["When you provide custom signing information, Unity doesn't store keystores and key passwords on disk for security reasons. This means that you need to re-enter key passwords each time you restart the Unity Editor. If you don't provide the passwords and attempt to build the application, the build process fails. To avoid entering passwords each time you open the Unity Editor, it's best practice to only provide custom signing information when you want to build the application to publish. To create a build for testing on a device, don't provide custom signing information and use debug signing instead.",27],["For more information about application signing, refer to Sign your app.",27],["Build for ChromeOS",28],["This page contains instructions on how to build your Unity application for ChromeOS. ChromeOS supports the Google Play Store and Android applications which means, to build an application for ChromeOS, Unity actually builds an Android application.",28],["Configure your project to build for ChromeOS",28],["To configure your application to support ChromeOS devices:",28],["Select File > Build Settings.",28],["From the list of platforms in the Platform pane, select Android.",28],["Note**: If Android is greyed out, set up your project for ChromeOS development.",28],["Click Player Settings. This opens the Project Settings window in the Player tab.",28],["In the Settings for Android section, expand Other Settings.",28],["In the Target Architectures section, enable both the ARMv7 and ARM64 properties as well the x86 and x86–64 properties.",28],["By default, your application can run on ChromeOS devices and Android devices such as phones, tablets, and TVs. If you want to limit the devices that your application can run on, use the Target Devices setting. Phones, Tablets, and TV Devices Only limits your application to run on phones, tablets, and TV devices only. ChromeOS Devices Only limits your application to run on ChromeOS devices only and not all other Android devices.",28],["Build the application",28],["After you configure your project to build for ChromeOS, you can start the build process. The build process for ChromeOS is the same as the one for Android. The only difference is if you want to use the Build and Run option to immediately run the build on a ChromeOS device. On ChromeOS, you must use Android Debug Bridge to connect to the target device. For information on how to do this, refer to Android Debug Bridge for ChromeOS devices. To build your application for ChromeOS, follow the instructions for Building Apps for Android.",28],["Debugging on a ChromeOS device",29],["While developing an application for ChromeOS, you may find issues that you need to debug on a ChromeOS device. You can use the Unity Profiler and Managed Debuggers to profile and debug applications respectively on ChromeOS devices.",29],["ChromeOS has networking restrictions which mean the Unity Profiler and Managed Debuggers can’t automatically connect to ChromeOS devices wireless or through USB connections. Instead, manually connect to the device wirelessly using its IP address. To do this:",29],["For the Profiler, refer to Profiling your application.",29],["For Managed Debuggers, refer to Android Debug Bridge for ChromeOS devices.",29],["",29],["Android Debug Bridge for ChromeOS devices",29],["To wirelessly connect ADB to a ChromeOS device:",29],["Enable ADB on the device. For information on how to do this, refer to Enable ADB debugging.",29],["Find the IP address of the device. For information on how to do this, refer to Connect to ADB over a network.",29],["In Unity, open Android Build settings.",29],["In the Build settings window, select the Run Device drop-down and then select the <Enter IP> option.",29],["In the window that opens, enter the IP address and port number of the device and select Add. If the device's port number is 5555, you don't need to enter it. After Unity successfully connects to the device, it selects the device as the Run Device.",29],["Notes**:",29],["If your device or host machine goes to sleep or loses network connectivity you may need to reconnect.",29],["For native debugging, you need to enable Developer Mode on your Chromebook and connect your device using Wi-Fi.",29],["Developing for ChromeOS",30],["When you are developing applications for ChromeOS, you need to know how to support the ChromeOS input devices and how to debug your application.",30],["Topic Description ",30],["",30],["Supporting input devices and window features Explains how to support window features and input devices such as touchpads and touch-screen keyboards. ",30],["Debugging your application Contains guidance on debugging your ChromeOS applications using the Unity Profiler and Managed Debuggers. ",30],["Getting started with ChromeOS",31],["Before you can start developing your application, you need to prepare your development environment and become familiar with the specific Player Settings for ChromeOS.",31],["Topic Description ",31],["",31],["Preparing your development environment for ChromeOS Guides you through the process to prepare your development environment and connect to a ChromeOS device. ",31],["Player Settings Describes the specific Player Settings for ChromeOS. ",31],["ChromeOS",32],["ChromeOS is the operating system used on Chromebooks. It supports the Google Play Store and Android applications. Unity deploys to ChromeOS by building Android applications. However, because ChromeOS runs on Chromebooks, Unity must also support features such as windowing and various input devices.",32],["Use the following information to develop, build, and publish an application for ChromeOS.",32],["Topic Description ",32],["",32],["ChromeOS requirements and compatability Contains the requirements, feature compatibility, and known issues to be aware of before you start developing applications for ChromeOS. ",32],["Getting started with ChromeOS Explains how to set up a Unity project for ChromeOS and choose the appropriate Player Settings. ",32],["Developing for ChromeOS Explains how to develop and debug applications for ChromeOS, and support various input devices and specify windowing options. ",32],["Building Your Application for ChromeOS Explains how to build and publish your ChromeOS application. ",32],["ChromeOS Player Settings",33],["In addition to the Android player settings, ChromeOS has the following Player Settings.",33],["Setting Function ",33],["",33],["Target Architectures Specify which target architecture you want to support. To support all ChromeOS devices, include both options as the build target. ",33],["x86 (ChromeOS) Support ChromeOS, 32-bit x86 architecture. ",33],["x86–64 (ChromeOS) Support ChromeOS, 64-bit x86–64 architecture. ",33],["TargetDevices Specify the devices on which your application can run. ",33],["All Devices Allow your application to run on all devices. ",33],["Phones, Tablets, and TV Devices Only Allow your application to run on Android phones, tablets, and TV devices only. ",33],["ChromeOS Devices Only Allow your application to run on ChromeOS devices only. If this option is selected, all Android phones and tablets aren't supported. ",33],["ChromeOS Input Emulation Convert all mouse and touchpad events into touchscreen events. This setting is enabled by default. Enable this setting if you developed your application for Android and you want it to work on ChromeOS without any extra development. Disable this setting if you want your application to fully support and receive events directly from input devices such as mice and touchpads. ",33],["Resolution and Presentation settings",33],["The Android window-related Player Settings are important because ChromeOS has a desktop window user interface.",33],["These settings specify:",33],["Whether the application starts full-screen or in a window.",33],["The starting and minimum sizes of the window",33],["Whether you can resize the window.",33],["For windows settings to take affect, set your application’s Minimum API Level (menu: File > Build Settings > Player Settings > Other Settings) to at least 24.",33],["Important**: If you enable the Resizable Window Player Setting for a ChromeOS application, the application launches in full screen regardless of which Fullscreen Mode Player Setting you select.",33],["Window orientation and aspect ratio",33],["For optimum performance, use either portrait orientation or landscape orientation, but not both. To avoid several known issues with app rotation and windowing, enable the Resizable Window setting. This setting ensures that windowed applications on ChromeOS can be resized when they aren’t in full-screen mode.",33],["Note**: Only a single aspect ratio, either landscape or portrait, is allowed via auto-rotation.",33],["Preparing your development environment for ChromeOS",34],["To build and run projects for ChromeOS, you need to set up a ChromeOS development environment. Android and ChromeOS use the same Unity environment, so you can use the Android instructions to set up your development environment for ChromeOS. For information on how to set up an Android environment, refer to Android Environment Setup.",34],["Connecting to your ChromeOS device",34],["When you develop applications for ChromeOS, you can’t debug a ChromeOS application using a USB connection. As a result, you must connect to the ChromeOS device over Wifi or Ethernet using Android Debug Bridge (adb). For more information, refer to ‘Connect to a device over Wi-Fi (Android 11+).’.",34],["Requirements and compatibility",35],["Important:** ChromeOS isn’t a supported Unity Editor platform.",35],["Although ChromeOS development is very similar to Android, there are specific differences that you need to be aware of. Before you start to develop your application for ChromeOS, review the requirements, feature compatibility, and known issues specific to ChromeOS.",35],["Requirements",35],["The system requirements for ChromeOS are similar to Android development. The only difference is that there are USB connection issues. To avoid these, you can connect the Unity Editor to a ChromeOS device over Wi-Fi/Ethernet.",35],["Unity supports all brands of ChromeOS laptops, tablets, netbooks and desktops. Chromecast devices aren’t supported. Unity supports ChromeOS version R89 and later releases on the stable release channel. As with other platforms, you can use beta and development OS builds at your own discretion.",35],["Compatibility",35],["The following table describes the features that are supported when you're developing applications for ChromeOS.",35],["Features Compatibility ",35],["",35],["x86 and x86_64 architectures Supported only for devices running ChromeOS. These architectures aren't supported on Android devices with an Intel processor. Both architectures support IL2CPP only. Mono isn't supported. ",35],["Project Tiny Not supported on ChromeOS x86 and x86–64 devices. ",35],["Havok Physics (from Unity Physics package) Not supported. ",35],["Script debugging and profiling Supported over Wi-Fi or Ethernet only using Android Debug Bridge. ",35],["Script only builds Not supported. ",35],["Profiling and debugging in Android Studio Supported only when your target device is in Developer Mode. For more information, see the Chromium documentation. ",35],["Unity video player The H.264 video format is supported on ChromeOS devices. The H.265 video format isn't supported. ",35],["Known issues",35],["Applications that support auto-rotation across all orientations can suffer from several bugs. This includes the screen auto-rotating when it shouldn’t, and Unity setting the screen to the wrong resolution.",35],["Non-resizable windows don't behave properly on ChromeOS devices that have both clamshell and tablet modes. When in tablet mode, the app goes full-screen and never goes back to its original size, even when returning to clamshell mode.",35],["Support user input on ChromeOS devices",36],["Unlike Android applications that use touchscreens, many ChromeOS devices are laptops or have a laptop mode. As a result, when you build an application for ChromeOS, you must handle inputs from mice, touchpads, and keyboards. You can use the Player setting ChromeOS Input Emulation (menu: File > Build Settings > Player Settings > Other Settings) to determine how your application handles user input on ChromeOS devices.",36],["Mouse and touchpad input",36],["To emulate touchscreen input, ChromeOS automatically converts left+clicks from a mouse or touchpad input into screen taps. As a result, an Android application that you developed for phones and tablets works by default on a ChromeOS device.",36],["Important: **Only left+click and keyboard inputs are supported. Any other inputs are ignored.",36],["By default, this behavior is enabled via the ChromeOS Input Emulation Player Setting.",36],["To support mouse and touchpad input, disable the ChromeOS Input Emulation setting. When you disable this option, your application receives the following mouse and touchpad input unchanged:",36],["Left and right mouse clicks (instead of just left).",36],["Scroll wheel and touchpad scroll events.",36],["Updates to the position of the cursor,which allows you to implement mouse-over functionality, such as highlighting components with the cursor.",36],["When you disable this setting, you also need to write Unity input code to handle mouse and touchpad input. The input code must include information on how to read the cursor position, handle mouse and touchpad clicks, and read scrolling evens. For more information on writing input code, refer to Input for API script references.",36],["Note:** Android and ChromeOS support custom cursors. To customize your cursor, refer to Cursor.SetCustomCursor.",36],["UI and touch-screen keyboards",36],["On Android, whenever there is an input field or text field selected, the virtual on-screen keyboard always comes up so that the user can enter text. On ChromeOS, when there is a hardware keyboard available, the on-screen keyboard isn't shown or required. When a hardware keyboard isn't available, the on-screen keyboard is displayed. This behavior isn't affected by the ChromeOS Input Emulation Player setting.",36],["Note**: If your Android application prompts the user to open a TouchScreenKeyboard, it behaves the same way on ChromeOS.",36],["Hover over UI elements",36],["To support hover over functionality, Unity needs the exact mouse position. When in ChromeOS Input Emulation mode, the exact mouse information isn't available. As a result, you need to disable the ChromeOS Input Emulation setting to support hover over in your application.",36],["Specify Android Player command-line arguments",37],["A use-case for extending the custom Unity activity is to pass command-line arguments when you launch the Android Player. For information on the available command-line arguments, refer to Command-line arguments.",37],["To specify startup command-line arguments in custom activity:",37],["Create a custom activity and set it as the application entry point.",37],["In the custom activity, override the String UnityPlayerActivity.updateUnityCommandLineArguments(String cmdLine) method.",37],["In the method, concatenate the cmdLine argument with your own startup arguments then return the result.",37],["Important**: The cmdLine argument can be an empty string or null so make sure your code handles these possible values.",37],["The following example shows how to specify startup arguments to select the graphics API based on the current device:",37],["```java",37],["package com.company.product;",37],["import com.unity3d.player.UnityPlayerActivity;",37],["import android.os.Bundle;",37],["import android.os.Build;",37],["public class OverrideExample extends UnityPlayerActivity {",37],["private boolean preferVulkan() {",37],["// Use Vulkan on Google Pixel devices",37],["if (Build.MANUFACTURER.equals(\"Google\") && Build.MODEL.startsWith(\"Pixel\"))",37],["return true;",37],["else",37],["return false;",37],["private boolean preferES2() {",37],["// Use OpenGL ES 2.0 on devices that run Android 5.1 or older",37],["if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1)",37],["return true;",37],["else",37],["return false;",37],["private String appendCommandLineArgument(String cmdLine, String arg) {",37],["if (arg == null arg.isEmpty())",37],["return cmdLine;",37],["else if (cmdLine == null cmdLine.isEmpty())",37],["return arg;",37],["else",37],["return cmdLine + \" \" + arg;",37],["@Override protected String updateUnityCommandLineArguments(String cmdLine)",37],["if (preferVulkan())",37],["return appendCommandLineArgument(cmdLine, \"-force-vulkan\");",37],["else if (preferES2())",37],["return appendCommandLineArgument(cmdLine, \"-force-gles20\");",37],["else",37],["return cmdLine; // let Unity pick the Graphics API based on PlayerSettings",37],["@Override protected void onCreate(Bundle savedInstanceState)",37],["super.onCreate(savedInstanceState);",37],["Additional ways to specify command-line arguments",37],["Apart from the custom activity, you can specify command-line arguments in the following ways:",37],["In Android Studio**: If you open your project in Android Studio, you can pass startup command-line arguments to Unity through Launch Flags in Run/Debug Configurations dialog.",37],["Via Android Debug Bridge (adb)**: You can pass command-line arguments by launching an Android application via adb using the following code.",37],["adb shell am start -n \"/\" -e unity ",37],["The following example shows how to pass -systemallocator command-line argument to your application.",37],["adb shell am start -n \"com.Company.MyGame/com.unity3d.player.UnityPlayerActivity\" -e unity -systemallocator",37],["Create a custom activity",38],["To extend the default Unity activity, you create your own custom activity and set it as the application's entry point. The process to do this is as follows:",38],["Create a new activity that extends the UnityPlayerActivity class.",38],["Create a plug-in to deliver the new activity to the final Unity Android application.",38],["Override the Android App Manifest to set your new activity as the application's entry point.",38],["After you do this, you can implement custom behavior in your activity to control interactions between Unity and Android.",38],["Create a new activity",38],["To create a new activity:",38],["In the Assets folder, create a new Java (.java) or Kotlin (.kt) file.",38],["In the new file, create a class that extends UnityPlayerActivity.",38],["In the new class, override the various base Activity methods to implement the custom behavior you want your activity to have. For more information, refer to Android's Activity documentation.",38],["Example activity",38],["The following code sample shows an example activity that overrides multiple functions.",38],["```java",38],["package com.company.product;",38],["import com.unity3d.player.UnityPlayerActivity;",38],["import android.os.Bundle;",38],["import android.util.Log;",38],["public class OverrideExample extends UnityPlayerActivity {",38],["protected void onCreate(Bundle savedInstanceState) {",38],["// Calls UnityPlayerActivity.onCreate()",38],["super.onCreate(savedInstanceState);",38],["// Prints debug message to Logcat",38],["Log.d(\"OverrideActivity\", \"onCreate called!\");",38],["public void onBackPressed()",38],["// Instead of calling UnityPlayerActivity.onBackPressed(), this example ignores the back button event",38],["// super.onBackPressed();",38],["Create a plug-in for the activity",38],["To use a custom activity for a Unity Android application, you must create a plug-in to contain the activity. Activities are written in either Java or Kotlin, which means you must use one of the following types of plug-ins:",38],["If you want to create a custom activity for a single project, use Java and Kotlin source plug-ins. To create the source plug-ins, place the source files directly in the Assets folder of your project.",38],["If you want to reuse the activity in multiple projects or distribute it to other people, use Android Archive (AAR) or JAR plug-ins. Managing one AAR or JAR plug-in file is easier to deliver functionalities in multiple projects.",38],["Use an Android Library Project while you develop the plug-in and then compile it into an Android Archive plug-in when you complete the implementation, want to use it in multiple projects, or distribute it to other people.",38],["After you create the plug-in, add the activity file to it.",38],["Set the new activity as the application entry point",38],["After you create an activity and add it to a plug-in, you can set it as the application entry point. To do this, override the Android Manifest and set the name attribute of the activity element to the class name of your custom activity.",38],["The following Android Manifest example shows how to do this:",38],["```xml",38],["",38],["",38],["",38],["",38],["android:theme=\"@style/UnityThemeSelector\"",38],["android:label=\"@string/app_name\"",38],["android:configChanges=\"fontScale keyboard keyboardHidden locale mnc mcc navigation orientation screenLayout screenSize smallestScreenSize uiMode touchscreen\">",38],["",38],["",38],["",38],["",38],["",38],["",38],["",38],["Debugging on an Android device",39],["Unity supports the following ways to debug an application on an Android device:",39],["USB debugging.",39],["Both wired and wireless connection through Android Debug Bridge.",39],["",39],["USB debugging",39],["Unity supports USB debugging for Android devices. To use USB debugging, enable developer options on your device. To do this, refer to Android’s Configure developer options documentation.",39],["Use a USB cable to connect the device to your computer. If you are developing on a Windows computer, you might need to install a device-specific USB driver. See the manufacturer's website for your device for additional information.",39],["The setup process differs for Windows and macOS. For more information on connecting your Android device to the SDK, refer to the Run Your App section of the Android Developer documentation.",39],["Note**: Unity doesn't support USB debugging for ChromeOS devices. Instead, use Android Debug Bridge over wireless connection.",39],["",39],["Android Debug Bridge",39],["Unity supports Android Debug Bridge (ADB) over USB for Android devices and over wireless connection for Android and ChromeOS devices. Wireless connection is useful when you can’t perform USB debugging, such as when using a ChromeOS device, when a controller is plugged into the Android device, or when debugging VR applications and you insert the Android device into the VR Kit. For information on how to connect a ChromeOS device to Unity through ADB, refer to Debugging on a ChromeOS device.",39],["Connect via USB",39],["To connect an Android device to Unity through ADB using a USB:",39],["Enable ADB on the device. For information on how to do this, refer to Set up a device for development.",39],["Use a USB cable to connect your Android device to the machine running Unity.",39],["In Unity, open Android Build settings.",39],["In the Build settings window, select the Run Device drop-down and select your device from the options. If your device doesn't appear, click Refresh.",39],["Connect wirelessly",39],["To wirelessly connect an Android device to Unity through ADB:",39],["Enable ADB on the device. For information on how to do this, refer to Set up a device for development.",39],["Find the IP address of your device. The process to do this depends on your device manufacturer.",39],["In Unity, open Android Build settings.",39],["In the Build settings window, select the Run Device drop-down and then select the <Enter IP> option.",39],["In the window that opens, enter the IP address and port number of the device and select Add. If the device's port number is 5555, you don't need to enter it. After Unity successfully connects to the device, it selects the device as the Run Device.",39],["",39],["View Android logs",39],["When you run a build of your application on an Android device, Android collects messages such as stack traces and logs from scripts. To see these messages, Android provides the logcat command-line tool. To use this tool with your Unity application, either:",39],["Launch ADB with the logcat parameter:",39],["$ adb logcat",39],["Use the Android Logcat package which implements the logcat command-line tool and displays messages from the application in a dedicated window in Unity.",39],["For more information, refer to Android Logcat.",39],["Developing for Android",40],["This section of the User Manual contains Android-specific development information on topics such as input, asset management, and debugging.",40],["Topic Description ",40],["------------------------------------------------------------ ------------------------------------------------------------ ",40],["Android mobile scripting Contains information about scripting for Android. ",40],["Input for Android devices Explains how to detect and handle user input on different types of Android device. ",40],["Android application size restrictions Describes the application size restrictions that affect Android and explains how to overcome them. ",40],["Graphics for Android Contains Android-specific graphics information. ",40],["Testing and debugging Contains guidance on testing and debugging for Android. ",40],["Create and use plug-ins in Android Describes the plug-in types you can use in Android and explains how to build and use them. ",40],["Integrate Unity into Android applications Explains how to integrate the Unity Runtime Library into Android applications. ",40],["Deep linking on Android Explains how to use deep linking on Android devices. ",40],["Thread configuration Explains how to configure thread affinity and thread priority to optimize for specific devices. ",40],["Device features and permissions Explains how Android application permissions work as well as how to request them. ",40],["Device features and permissions",41],["For an application to access private data on the device, use device features like an in-built microphone or camera, or generally interact with the device outside of the application sandbox, it must have permission from the device's user.",41],["For more information about permissions on Android devices, see Permissions on Android.",41],["Topic Description ",41],["------------------------------------------------------------ ------------------------------------------------------------ ",41],["Android permissions in Unity Understand Android permissions and how to work with them in Unity. ",41],["Declare permissions for an application Declare which permissions the application requires. An application can only request to use permissions that it declares. ",41],["Request runtime permissions Request permission to use device features or access private data outside of the application sandbox. ",41],["Simulate an Android device",42],["Unity's Device Simulator can simulate the appearance and behavior of a variety of Android devices. This helps you test basic interactions and view the layout of your application on Android devices. This reduces costs, because you don't need to own a device to simulate it, and helps you to improve device coverage. Additionally, the Device Simulator doesn't require you to build your application which means you can debug layout issues and iterate quickly.",42],["The Device Simulator doesn't simulate the graphics backend of the target device and renders your application in the same way that the Editor does. This means that it doesn't impose limitations that the graphics backend of the target device might have. The Device Simulator also doesn't simulate the performance characteristics of the device, so to profile your application, you must create a build and run it directly on the device. For more information, refer to Profile on an Android device. For more information on the capabilities and limitations of the Device Simulator, refer to Device Simulator introduction.",42],["The device Simulator includes a variety of Android devices, but you can also add other devices if necessary. For information on how to do this, refer to Add a device.",42],["Additional resources",42],["Delivering to Google Play",43],["This page contains information about Google Play-specific delivery requirements and considerations.",43],["For information on how to publish your application on Google Play, see Google Play.",43],["Delivery requirements",43],["Google Play has requirements an application must fulfil before you publish it. This section describes Google Play-specific requirements and explains how to meet them.",43],["Android App Bundle",43],["Google Play requires new apps to be an Android App Bundle (AAB) instead of an APK. For information on why, refer to The future of Android App Bundles is here.",43],["To configure an application to be an AAB:",43],["Select Edit > Project Settings.",43],["In the Project settings window, select the Player tab, then open Android Player Settings:",43],["In the Publishing Settings section, enable Split Application Binary.",43],["Select File > Build Settings.",43],["From the list of platforms in the Platform pane, select Android.",43],["Enable Build App Bundle (Google Play). If you want to export the project and build it in Android Studio, enable Export Project then enable Export for App Bundle.",43],["Now when you build the application, Unity builds the application as an AAB.",43],["Application size",43],["Google Play limits the install size of applications. The following table describes the size limitations Google Play has for each application type:",43],["Application type Size limitation ",43],["-------------------- ------------------------------------------------------------ ",43],["APK If you split the application binary or use a custom expansion file, the APK must be smaller than 100MB and the expansion file must be smaller than 2GB. Otherwise, the APK must be smaller than 100MB. ",43],["AAB If you split the application binary or use custom asset packs, the base module inside the AAB must be smaller than 150MB and the asset packs must fit the file sizes described in Android's Download Size Limits documentation. Otherwise, the AAB must be smaller than 150MB. ",43],["For information on how to optimize the install size of your application, refer to Optimize distribution size.",43],["64-bit Architecture",43],["Google Play requires applications to support 64-bit architecture. For more information, refer to Support 64-bit architectures. To make your application support 64-bit architecture:",43],["Select Edit > Project Settings.",43],["In the Project settings window, select the Player tab, then open Android Player Settings:",43],["In the Other Settings section, enable ARM64. If your application targets ChromeOS, enable x86-64 (ChromeOS) too. Note: You can only interact with this setting if your project uses the IL2CPP scripting backend.",43],["Target API",43],["Google Play requires applications to support a minimum target API. For information on what the current minimum target API is, refer to Meet Google Play's target API level requirement.",43],["To change your application's target API:",43],["Select Edit > Project Settings.",43],["In the Project settings window, select the Player tab, then open Android Player Settings:",43],["In the Other Settings > Identification section, set Target API Level to at least the target API level that Google Play requires.",43],["App signature",43],["Google Play requires applications to be signed. For information on how to sign your application, refer to Android Keystore Manager.",43],["Considerations",43],["This section contains Google Play-specific considerations to be aware of before you publish an application to Google Play.",43],["Best practice checklist",43],["To help launch an Android application successfully, Android's documentation includes a best practice checklist of processes to follow. Refer to Launch checklist.",43],["Public symbols",43],["If your application crashes on a device, Google can use a symbols package to make a native stacktrace human-readable on the Android Vitals dashboard. It's best practice to generate a public symbols package for your application and upload it to Google Play. For information on how to do this, refer to Generating a symbols package.",43],["Deobfuscation file",43],["Similar to symbol files, Unity can produce a deobfuscation file if you apply minification to your application build. For more information on applying minification, refer to Android Player Settings. A deobfuscation file is automatically generated as a mapping file in the same location as your application build.",43],["If you apply minification, it’s best practice to upload the deobfuscation file when publishing your application on Google Play. A deobfuscation file deciphers the method names in the stack trace, allowing you to identify and resolve the exact cause of the application crashes. For more information, refer to Google's documentation on Deobfuscate or symbolicate crash stack traces",43],["Digital distribution services for Android",44],["This section of the documentation contains information about digital distribution service-specific delivery requirements for Android applications. Each page includes any relevant considerations to be aware of and requirements that an application must fulfil before you publish it there.",44],["For more information on how to publish applications for Android, see Publish your app.",44],["Topic Description ",44],["------------------------------------------------------------ ------------------------------------------------------------ ",44],["Delivering to Google Play Google Play-specific delivery requirements and considerations. ",44],["Export an Android project",45],["If you need more control over the build pipeline, you can export a Unity project as a Gradle project and import that into Android Studio. This is useful if you want more control over the build pipeline, want to see or modify the Android App Manifest that Unity generates for your application, or integrate Unity-powered features into another Android application.",45],["Exporting",45],["To export a Unity project for Android Studio:",45],["Select File > Build Settings.",45],["From the list of platforms in the Platform pane, select Android.Note: If Android is greyed out, set up your project for Android development.",45],["Enable Export Project.",45],["Click Export.",45],["Select the destination folder and click Select Folder to start the export process.",45],["After Unity exports the Gradle project, you can import the Gradle project into Android Studio. For information on how to do this, refer to Migrate to Android Studio. For information on the file structure of the exported Gradle project, refer to Gradle project structure.",45],["Additional resources",45],["Getting started with Android",46],["This section of the User Manual explains how to set up a project for Android development and introduces Android-specific tools and settings.",46],["Topic Description ",46],["---------------------------------------------------- ------------------------------------------------------------ ",46],["Setting up Unity for Android Explains how to set up a Unity project for Android development. ",46],["Player Settings Reference documentation for Android Player Settings. ",46],["Android Keystore Manager Explains what the Android Keystore Manager is and how to use it. ",46],["Gradle for Android",47],["Gradle is a build system that automates a number of build processes and prevents many common build errors. Unity uses Gradle for all Android builds. You can either build the output package (.apk, .aab) in Unity, or export a Gradle project from Unity, and then build it with an external tool such as Android Studio.",47],["For more information about:",47],["\nGradle: Refer to the Gradle user manual and Android Gradle plugin documentation.\n",47],["\nExporting a Unity project as a Gradle project: Refer to Exporting an Android Project.\n",47],["\nBuilding an output package (.apk): Refer to Unity documentation on Building apps for Android and Android developer documentation on configuring your build.\n",47],["\nBuilding an output package (.aab): Refer to Unity documentation on Play Asset Delivery and Android developer documentation on Android app bundles.\n",47],["Version compatibility",47],["The following table shows compatibility between Gradle version and Unity version.",47],["Unity version Gradle version Android Gradle Plug-in version ",47],["------------------------------------------------------------ -------------- -------------- ",47],["2022.3 7.2 7.1.2 ",47],["2021.32020.3 starting from 2020.3.15f1 6.1.1 4.0.1 ",47],["2020.3 up to and including 2020.3.14f1 5.6.4 4.0.1 ",47],["If you want to use a custom Gradle or Android Gradle plug-in version, it's important to know the version compatibility between Gradle and the Android Gradle plug-in. For information on this, refer to Update Gradle.",47],["",47],["Gradle project files",47],["Gradle project files configure different aspects of your application, such as which modules to include and how to build them.",47],["The following table lists the Gradle project files that exist for Unity projects and describes the purpose of each one.",47],["Gradle project file Purpose ",47],["--------------------------- ------------------------------------------------------------ ",47],["Main Manifest This file contains important metadata about your Android application. For more information about the responsibilities of the Main/Unity Library Manifest, refer to Unity Library Manifest. ",47],["Unity Launcher Manifest This file contains important metadata about your Android application’s launcher. For more information about the responsibilities of the Unity Launcher Manifest, refer to Unity Launcher Manifest. ",47],["Main Gradle This file contains information on how to build your Android application as a library. ",47],["Launcher Gradle This file contains instructions on how to build your Android application. ",47],["Base Gradle This file contains configuration that's shared between all other templates and Gradle projects. ",47],["Gradle Properties This file contains configuration settings for the Gradle build environment. This includes:- The JVM (Java Virtual Machine) memory configuration.- A property to allow Gradle to build using multiple JVMs.- A property for choosing the tool to do the minification.- A property to not compress native libs when building an app bundle. ",47],["Gradle Settings This file contains declaration of artifact repositories to resolve external dependencies required for your application. ",47],["Proguard This file contains configuration settings for the minification process. If minification removes some Java code which should be kept, you should add a rule to keep that code in this file. ",47],["",47],["Gradle project structure",47],["If you export your Unity project as a Gradle project, Unity creates a Gradle project with two modules:",47],["\nUnityLibrary module: Contains the Unity runtime and project data. This module is a library that you can integrate into any other Gradle project. You can use it to embed Unity into existing Android applications.\n",47],["\nLauncher module: Contains the application's name and all its icons. This is a simple Android application module that launches Unity. You can replace it with your own application.\n",47],["File Description ",47],["------------------- ------------------------------------------------------------ ",47],["build.gradle The base Gradle file that affects all modules in the Gradle project. It specifies which plug-in versions to use in this Gradle project. One of these plug-ins is Android Gradle Plug-in. To influence the contents of this file, provide a custom Base Gradle Template. ",47],["gradle.properties A standard Gradle project file that configures how to build the application. Unity also adds the names of assets inside the Streaming Assets directory and specifies that these assets should be in the final application and Gradle shouldn't compress them. To influence the contents of this file, provide a custom Gradle Properties Template. For information on the properties this file can contain, refer to Gradle property files. ",47],["launcher A directory that contains the launcher module and everything related to it. ",47],["  build.gradle A standard Gradle project build.gradle file that describes how to build the launcher module and includes a list of dependencies to include in the build. In Unity, the launcher module depends on the unityLibrary module which means unityLibrary is built and included in the final result when building the launcher module. To influence the contents of this file, provide a custom Launcher Gradle Template. ",47],["  src A standard Android Gradle project directory that contains the launcher module's source code and resources. Unity places the source code and resources in the main subdirectory. ",47],["    main A standard Android Gradle project directory that contains the launcher module's source code and resources. Unity only supports the main source set. For more information about source sets, refer to Create source sets. ",47],["      AndroidManifest.xml A standard Android Gradle project file that Unity merges into the final Android App Manifest. It contains settings specific to the launcher module. Important: If multiple manifest files specify different values for the same setting, the manifest merging process fails and you must fix it manually. You can specify rules for the manifest merger to automatically decide how to solve merge conflicts. For information on how to do this, refer to Manage manifest files. For information on how to influence the contents of this file, refer to the Override the Android App Manifest. ",47],["      jniLibs A standard Android Gradle project directory that contains native code libraries that the launcher module uses. ",47],["      res A standard Android Gradle project directory that contains resources to include in the final application. The resources are application icons, text that the application accesses at runtime, and application style descriptions. To specify the resources in this directory, set application icons and the project name in the Android Player Settings. ",47],["local.properties A standard Android Gradle project file that configures the environment of the build system. Unity specifies the path to SDK here so that by default, the exported Gradle project uses the same SDK that the Unity Editor used. NDK path used to be specified here with previous Gradle versions as well, but now Unity specifies it in the build.gradle files of launcher and unityLibrary modules. For information on the properties this file can contain, refer to Gradle property files. ",47],["settings.gradle A standard Android Gradle project file that specifies all the modules that make up this Android Gradle project. In projects that Unity exports, this usually only specifies the launcher and unityLibrary modules. However, if the Unity project uses Play Asset Delivery, each asset pack is a separate module, so this file lists them too. The file also specifies locations which contain Gradle project plug-ins. The locations are a combination of online repositories and java plug-ins inside of this project. To influence the contents of this file, provide a custom Gradle Settings Template. ",47],["unityLibrary A directory that contains the unityLibrary module and everything related to it. ",47],["  build.gradle A standard Gradle project build.gradle file that describes how to build the unityLibrary module and includes a list of dependencies to include in the build. In Unity, the unityLibrary module depends on all of the plug-ins in the Unity project. To influence the contents of this file, provide a custom Main Gradle Template. ",47],["  libs A common Android Gradle project directory that stores Android Archive (.aar) and Java Archive (.jar) plug-ins for the unityLibrary module. For exported Unity projects, this contains the unity-classes.jar and all .jar and .aar plug-ins in the Unity project. Note: This directory doesn't contain Android Library Projects plug-ins. Instead, Unity copies these into the Gradle project as separate modules. ",47],["    unity-classes.jar A Unity-specific java plug-in that contains java code that the Unity engine uses. ",47],["  proguard-unity.txt A Unity-specific file that contains ProGuard configurations for Unity java code (code in unity-classes.jar plug-in). Configurations are effective when Minification is enabled in Player settings (or if it is enabled by manually modifying gradle build files). ",47],["  src A standard Android Gradle project directory that contains the unityLibrary module's source code and resources. Unity places the source code and resources in the main subdirectory. ",47],["    main A standard Android Gradle project directory that contains the unityLibrary module's source code and resources. Unity only supports the main source set. For more information about source sets, see Create source sets. ",47],["      AndroidManifest.xml A standard Android Gradle project file that Unity merges into the final Android App Manifest. It contains settings specific to the unityLibrary module. To influence the contents of this file, provide a custom Custom Main Manifest. ",47],["      assets A standard Android Gradle directory that contains project assets. Unity places the Unity project's resources in the bin subdirectory. ",47],["        bin A standard Android Gradle project directory that Unity adds all of the Unity project's resources to. ",47],["      java A standard Android Gradle project directory that contains uncompiled java source files for the unityLibrary module. Unity only uses this directory to store the UnityPlayerActivity source file. For information on how to extend UnityPlayerActivity, refer to Extending the UnityPlayerActivity Java Code. ",47],["      jniLibs A standard Android Gradle project directory that contains native code libraries that the unityLibrary module uses. Unity places the libil2cpp, libmain, and libunity Unity engine libraries in this directory. Unity also places any [Native (C++) plug-ins(AndroidNativePlugins) in this directory. ",47],["      res A standard Android Gradle project directory that contains resources to include in the final application. For exported Unity projects, the res directory for the unityLibrary module only contains style descriptions that the unityLibrary module uses. ",47],["proguard-user.txt This is a Unity project specific file which contains ProGuard configurations for the project's java code and third-party java plug-ins. Just like ProGuard-unity.txt Gradle uses it if you enable minification. To create this file, enable Custom Proguard File in the Android Player Settings. ",47],["Graphics for Android",48],["This section of the User Manual contains Android-specific graphics information.",48],["Android device hardware capabilities vary between models, and there are many different Android models on the market. This is important to consider when you develop graphics features and write shaders.",48],["Topic Description ",48],["------------------------------------------------------------ ------------------------------------------------------------ ",48],["Screen configuration Contains information on screen-related features such as application orientation and multi-window mode. ",48],["Single-pass stereo instancing Explains how to use single-pass stereo rendering in your Android application. ",48],["Framebuffer orientation Explains how to manually match the application's frame buffer to the Android device's native orientation. ",48],["Handle Android crashes",49],["Crash handling for Unity applications on Android works as a chain of crash handlers. The crash handler at the start of the chain receives the crash first and it can process the crash and also forward the crash to the next crash handler in the chain. The order of the crash handlers in the chain is defined by the order in which they're installed. The crash handler installed first is the last one to receive the crash and the crash handler installed last is the first one to receive the crash. By default, Unity acts as the first crash handler in the chain. It processes crashes and forwards them to the next crash handler in the chain, which is the Android system crash handler by default.",49],["You can configure Unity to react differently to crashes and also add your own custom crash handler to the chain. This page explains how to specify the method Unity uses to handle crashes and how to create a custom crash handler.",49],["",49],["Specify how Unity handles crashes",49],["If you don't want to use Unity's default crash handling behavior, you can use the -androidChainedSignalHandlerBehavior command-line argument to change how Unity reacts to crashes. This argument takes one of the following values:",49],["Behavior value Description ",49],["------------------ ------------------------------------------------------------ ",49],["legacy When a native crash occurs, Unity wraps and throws the crash as a java exception. Unity doesn't forward the crash to the any installed crash handlers or to the default system. Note: In the future Unity versions, -androidChainedSignalHandlerBehavior command-line argument will no longer support legacy value. ",49],["disabled When a native crash occurs, Unity ignores it and Android forwards the crash directly to the next crash handler in the chain. This is either a custom crash handler, if one is installed, or the default system if not.Note: If you use this value, Unity services such as Unity Cloud Diagnostics no longer handle crashes and won't report them. ",49],["For information on how to pass this command-line argument to Unity, refer to Specify Android Player command-line arguments.",49],["Create and setup a custom crash handler",49],["This section contains an example of how to create and set up your own crash handler. For this to work, you must not use Unity's legacy crash handling behavior. For more information, refer to Specify how Unity handles crashes.",49],["Create a crash handler",49],["The following code sample shows a custom crash handler. If you use the IL2CPP scripting backend, you can place this example cpp file directly into your Unity project. Unity then compiles it as part of libil2cpp.cpp. If you use the Mono scripting backend, you must compile and link your own shared library. For more information, refer to Create a native plug-in for Android.",49],["android_crash_handler.cpp**",49],["```C++",49],["include ",49],["include ",49],["include ",49],["struct sigaction s_PreviousHandler;",49],["bool s_SignalHandlerInstalled;",49],["static void MyCustomHandler(int sig, siginfo_t* info, void* ucontext)",49],["androidlogprint(ANDROID_LOG_VERBOSE, \"CustomCrashHandler\", \"Handling signal %d\", sig);",49],["s_PreviousHandler.sa_sigaction(sig, info, ucontext);",49],["extern \"C\" void InstallCustomSignalHandlers()",49],["struct sigaction Action = {};",49],["Action.sa_sigaction = MyCustomHandler;",49],["// Note: Register more signals if you want.",49],["Action.sa_flags = SIGSEGV;",49],["sigaction(SIGSEGV, &Action, &s_PreviousHandler);",49],["s_SignalHandlerInstalled = true;",49],["extern \"C\" JNIEXPORT void Java_com_unity3d_player_UnityPlayerActivity_InstallCustomSignalHandlersFromJava()",49],["InstallCustomSignalHandlers();",49],["extern \"C\" void UninstallCustomSignalHandlers()",49],["if (s_SignalHandlerInstalled)",49],["sigaction(SIGSEGV, &s_PreviousHandler, nullptr);",49],["s_SignalHandlerInstalled = false;",49],["Install the crash handler",49],["To install the crash handler and have Unity use it to handle crashes, call the InstallCustomSignalHandlers method in the above cpp file. You can do this either through C# or Java code, however it's best practice to call this method from Java, because a crash can occur after the Unity Player initializes, but before your C# code runs.",49],["The following code sample shows how to call the InstallCustomSignalHandlers method from Java code. To add it to your project, you can either install the Java file as a plug-in (refer to Create a Java or Kotlin source plug-in) or you can modify an existing Java file in an exported project.",49],["Note**: Depending on where you call this method, it changes the behavior of crash handling. If you call it before Unity runtime initialization, which is a line of code that contains mUnityPlayer = new UnityPlayer(this, this);, then during the native crash Unity's crash handler is executed first and then your signal handler is executed (if Unity forwards the signal). If you call InstallCustomSignalHandlers after Unity runtime initialization, then during the native crash your handler is executed first and it's your responsibility to forward the signal.",49],["UnityPlayerActivity.java**",49],["```Java",49],["...",49],["public native void InstallCustomSignalHandlersFromJava();",49],["static",49],["System.loadLibrary(\"il2cpp\");",49],["// Setup activity layout",49],["@Override protected void onCreate(Bundle savedInstanceState)",49],["InstallCustomSignalHandlersFromJava();",49],["...",49],["mUnityPlayer = new UnityPlayer(this, this);",49],["setContentView(mUnityPlayer);",49],["mUnityPlayer.requestFocus();",49],["...",49],["Input for Android devices",50],["Mobile devices are the primary target for Android applications, but Android applications can also run on ChromeOS devices. This is important because ChromeOS devices are laptops, or at least support a laptop mode, and mobile and laptop devices have different input capabilities. Applications can target both types of devices at the same time. For more information:",50],["On mobile device input, refer to Mobile device input.",50],["On ChromeOS device input, refer to Support user input on ChromeOS devices.",50],["Android keyboard",50],["Android devices include a touchscreen keyboard. When you select editable UI elements such as Input Fields Unity automatically activates the Android touchscreen keyboard and handles input from it. For information on how to manually activate and configure the Android touchscreen keyboard, refer to Mobile Keyboard.",50],["Additional resources",50],["Introducing Android",51],["Android is a popular open-source operating system for smartphones and tablets. Unity includes native support for the Android platform which means you can use Unity and its tools to create and deliver 2D and 3D applications for Android.",51],["Before you begin to develop an Android application in Unity, familiarize yourself with the key concepts and workflows.",51],["For general information about developing Android applications, refer to Android’s developer documentation.",51],["Topic Description ",51],["------------------------------------------------------------ ------------------------------------------------------------ ",51],["Android requirements and compatibility Lists requirements for Android development in Unity and Unity feature compatibility on Android devices. ",51],["Gradle for Android Introduces the Gradle build system, its version compatibility with Unity, and the structure of a Gradle project. ",51],["Android App Manifest Introduces Android App Manifests and explains how Unity generates them. ",51],["Unity Launcher Manifest Introduces Unity Launcher Manifests and explains how they configure how applications look and behave before they launch. ",51],["Unity Library Manifest Introduces Unity Library Manifests and explains how Unity uses them to generate the final Android App Manifest for an application. ",51],["How Unity builds Android applications A high-level overview of the Android build process. ",51],["Additional resources",51],["Add keys to a keystore",52],["This page explains how to use the Keystore Manager window to add a new key to an existing keystore. Unity requests the same information as Android Studio does when you generate a key or keystore through that. Unity doesn't validate this information. If you leave a field blank, Unity uses an empty value. This might affect the final validity of the key. For more information, see Generate an upload key and keystore.",52],["This task is relevant if you want to create a new keystore from the Keystore Manager window, or want to store multiple keys in the same keystore.",52],["To add a key to a keystore:",52],["Open the Keystore Manager window.",52],["Either start to create a new keystore, or load an existing keystore. To do this, see Create a new keystore or Load a keystore respectively.",52],["In the New Key Values section, add values for all the relevant properties. For information on each property, see Keystore Manager window reference.",52],["Select Add key. If this button is grayed out, there is an issue with one of your key properties and the text to the left of this button explains what the issue is.",52],["In the dialogue window that appears, if you want to use the keystore as your Project keystore and the new key as the active key for the Project, select Yes. Otherwise, select No.",52],["Additional resources",52],["Create a new keystore",53],["This page explains how to use the Keystore Manager window to create a new keystore.",53],["This is relevant if you want to publish your application, because you must provide a key from a keystore when you sign the application.",53],["To create a new keystore:",53],["Open the Keystore Manager window.",53],["In the top-left of the window, select Keystore > Create New.",53],["Select Anywhere and save the keystore file in your Project folder, or select In Dedicated Location and save the keystore to a different directory on your computer. For more information, see Choose the keystore location.",53],["Enter a password for the keystore in the Password field and re-enter the password in the Confirm password field.",53],["A keystore must contain at least one key so to finish creating a keystore, add a key. To do this, see Add keys to a keystore.",53],["",53],["Choose the keystore location",53],["You can create a new keystore anywhere on your computer, however there are two special locations: the Project folder and what is called the keystores dedicated location. If you place a keystore in either of these places, Unity saves a relative path to the keystore. Otherwise Unity saves an absolute path to the keystore. Under the Keystore > Create New menu option, there are two options:",53],["Anywhere** opens the file explorer at the root of your Project folder. This is the default place that Unity stores keystores.",53],["In Dedicated Location** opens the file explorer in a custom location. By default, this path points to $HOME/ on MacOS and to %USER_HOME%\\ on Windows. To change the dedicated location for your computer, go to Unity > Preferences > External Tools > Android > Keystores Dedicated Location, then click Browse to select a location or enter a path in the text box.",53],["If you store a keystore in a dedicated location, Unity saves a relative path from the dedicated location to the keystore. This means different computers can specify a different dedicated location and store the keystore in a different place.",53],["Note**: If you save the new keystore outside of your Project folder or a shared directory, collaborators on your project might not have access to it.",53],["Additional resources",53],["Load a keystore",54],["This page explains how to load an existing keystore and select a key from it to use as the project key.",54],["This is relevant if you want to publish your application, because you must provide a key from a keystore when you sign the application.",54],["To load an existing keystore:",54],["Open Android Publishing Settings.",54],["Under the Project Keystore heading, enable Custom Keystore.",54],["Click the drop-down below Custom Keystore.",54],["Select Browse to load a keystore from your file system, or select a keystore from below the partition in the UI. The keystores below the partition are those stored in the keystores dedicated location. For more information, see Choose the keystore location.",54],["Enter the password for the keystore in the Password property field. If the password is correct, Unity loads the keystore.",54],["Select a project key",54],["After you load a keystore into your project, select a key from the keystore to use as the project key. To do this:",54],["Open Android Publishing Settings.",54],["Under the Project Key heading, set Alias to the key you want to use.",54],["In the Password property field, enter the password for the key.",54],["Additional resources",54],["Keystore Manager window reference",55],["This page describes the Keystore Manager window interface.",55],["To open the Keystore Manager window, open Android Publishing Settings and select Keystore Manager.",55],["You can use this interface to:",55],["Keystore",55],["The properties in this section of the interface relate to the keystore that the Keystore Manager window currently manages.",55],["Property Description ",55],["--------------------- ------------------------------------------------------------ ",55],["Keystore dropdown Specifies which keystore to use in the Keystore Manager window. You can either create a new keystore, or load an existing one. For more information, see:• Create a new keystore.• Load an existing keystore. ",55],["Password The password for the keystore. If you create a new keystore, use this to create a password for the keystore. If you load an existing keystore, use this to enter the password for existing keystore. ",55],["Confirm Password The confirmed password for the new keystore. Set the value of this property to the same as Password.This property only appears if you create a new keystore. ",55],["Existing Keys",55],["This section of the interface contains a read-only list of keys that the current keystore contains.",55],["New Key Values",55],["The properties in this section of the interface describe a new key to add to the keystore. For more information, see Add keys to a keystore.",55],["Note**: The application doesn't display the personal information in this section. Instead, the certificate that is part of your application includes it.",55],["Property Description ",55],["----------------------- ------------------------------------------------------------ ",55],["Alias An identifying name for the key. ",55],["Password The password to use for the key. ",55],["Confirm password The confirmed password for the key. Set the value of this property to the same as Password. ",55],["Validity (years) The number of years that the key is valid for. This should exceed the amount of time you expect to manage the application for, so that you can use the same key to sign application updates. The default validity is 50 years. ",55],["First and Last Name Your first and last name. ",55],["Organizational Unit The division of your organization that you are part of. ",55],["Organization The organization that manages your application. This is often your company name. ",55],["City or Locality Your personal city or locality. ",55],["State or Province Your personal state or province. ",55],["Country Code Your personal country code. ",55],["Additional resources",55],["Android keystores",56],["A keystore is a binary file that contains private keys and public key certificates. Android uses the keys in a keystore to sign an application for security reasons. For more information, see Keystores, keys, and certificates.",56],["Android keystores in Unity",56],["To interface with keystores, Unity provides the Keystore Manager and properties in Player Settings. You can use these tools to create, configure, or load Android keystores and keys.",56],["Note**: If you sign an application with a particular key and upload the application to an app store, you must sign future versions of the application with the same key.",56],["Topic Description ",56],["------------------------------------------------------------ ------------------------------------------------------------ ",56],["Keystore Manager window reference Open and use Unity's Keystore Manager window. ",56],["Create a new keystore Use the Keystore Manager window to create a new keystore file and configure its path. ",56],["Add keys to a keystore Use the Keystore Manager window to add keys to a keystore. ",56],["Load a keystore Use the Keystore Manager to load an existing keystore. ",56],["Additional resources",56],["Unity Launcher Manifest",57],["A Unity Launcher Manifest configures how the application looks and behaves before the application launches. For example, it contains the application's icon, name, and install location. The Unity Launcher Manifest is a Unity-specific concept for Android development and you can overwrite it to integrate Unity as a component into an existing project. For more information, see Integrating Unity into Android applications.",57],["Settings",57],["You can configure all the settings in the Unity Launcher Manifest from Unity's Player Settings. This means, unless you want to integrate Unity as a component into an existing project, you don't need to overwrite the Unity Launcher Manifest or manually edit any settings directly in the file.",57],["A Unity Launcher Manifest file declares the following:",57],["\nThe package's name.\n",57],["\nThe application's icons.\n",57],["\nThe application's name.\n",57],["\nThe application's starting activity and its intents.\n",57],["\nThe application's install location.\n",57],["\nThe application's supported screen sizes.\n",57],["\nThe application's isGame flag.Note: This setting is exclusively used by AndroidTV. If you don't enable AndroidTV support in Player Settings, Unity doesn't declare this setting.\n",57],["Unity Library Manifest",58],["A Unity Library Manifest is the main Unity manifest and contains information about the Unity Player and its activity. Unity uses a default Unity Library Manifest during the build process to generate the final Android App Manifest for the application. You can override this with your own manifest file to have more control over the Android App Manifest that Unity generates. For more information, see Override an Android App Manifest.",58],["Settings",58],["A Unity Library Manifest declares:",58],["\nThe Unity activity.\n",58],["\nThe theme that the Unity activity uses.\n",58],["\nPermissions.\n",58],["\nVR modes.\n",58],["\nVR performance.\n",58],["\nWhether to allow the user to resize the application window. This is useful for VR and ChromeOS.\n",58],["\nThe maximum aspect ratio.\n",58],["\nHow to react to configuration changes.\n",58],["\nSupported orientations.\n",58],["\nSupported launch modes.\n",58],["Note: Unity only supports the singleTask launch mode.",58],["\nAndroid UI.\n",58],["\nWhether to use hardware acceleration.\n",58],["\nWhich features the application uses such as a gamepad or touchscreen.\n",58],["\nWhich graphics APIs the application supports.\n",58],["\nWhether the application supports notches on the device.\n",58],["\nThe initial window size.\n",58],["\nWhich window modes the application supports. This is useful for ChromeOS.\n",58],["\nSplash screen configuration.\n",58],["\nWhether to extract native libraries when installing the application.\n",58],["\nWhich devices the application can run on.\n",58],["Introducing Android Library Projects and Android Archive plug-ins",59],["Android Archives are a compiled version of Android Libraries, and are the recommended way to format plug-ins that you want to distribute. However, while you create a plug-in, it's faster to work with the Android Library format since that doesn't require you to compile the plug-in outside of Unity and re-import the result. If you plan to modify the plug-in at all in the future, or want to iterate over it often, use an Android Library. After you finish development for the plug-in, compile it into an Android Archive.",59],["Android Library projects",59],["An Android Library is a directory with a specific structure that contains all the plug-in assets and the manifest.",59],["When Unity creates the final Gradle project during the build or export process, it automatically includes all Android Library Projects in it and builds them together. Unity does this in the same way that Android Studio projects build when they have multiple subprojects.",59],["Android Archive plug-ins",59],["An Android Archive (AAR) plug-in is a compiled version of an Android Library project that you can use as a dependency for an Android app module. The .aar file itself is a .zip archive that contains all of the compiled code, assets, and plug-in manifest. For more information on the structure of an AAR, see Anatomy of an AAR file.",59],["Providing additional Android Assets and resources",59],["If you need to add Assets to your Unity application that should be copied as they are into the output package, include the raw assets in an Android Library Project or AAR. To access these assets, call the getAssets Android API from your Java code.",59],["Additional resources",59],["Import an Android Library Project",60],["This page describes how to import an Android Library Project into your Unity Project.",60],["Copy the Android Library Project to your Unity Project's Assets folder.",60],["If the Android Library Project root folder doesn't use the .androidlib extension, add this extension to the folder. For example, mylibrary.androidlib.",60],["Unity now supports the Android Library Project and will include it in the final project that Gradle uses to build your application. For more information, see How Unity builds Android applications.",60],["Additional resources",60],["Android App Manifest",61],["The Android App Manifest contains information about an Android application. Each application has a single Android App Manifest XML file at the root of the source set called AndroidManifest.xml. The Android operating system and digital distribution services (for example, Google Play) use Android App Manifests to find information, such as the application’s name, the application’s entry point, Android version support, hardware features support, and application permissions. For more information about the Android App Manifest file, and for a list of settings that it configures, see the Android Developer documentation on Android App Manifests.",61],["To generate an Android App Manifest to represent an application, Gradle merges manifest files from a variety of sources. This includes:",61],["Unity Library Manifest**: A manifest file that Unity produces which configures Unity Player activities. For more information, see Unity Library Manifest.",61],["Unity Launcher Manifest**: A manifest file that Unity produces which configures the application that wraps the Unity library. For more information, see Unity Launcher Manifest.",61],["Plug-in manifests**: Manifest files that represent plug-ins such as Android Archives (AAR) or Android Library Projects.",61],["For information on how Unity uses these manifest files to generate an Android App Manifest, see Generating an Android App Manifest.",61],["",61],["Generating an Android App Manifest",61],["The Android application build process generate an Android App Manifest file for the application. To do this:",61],["Unity uses the Unity Library Manifest as a template for the Android App Manifest. If you override the Unity Library Manifest, Unity uses the file you specify as the template.",61],["Unity updates the Unity Library Manifest and Unity Launcher Manifest files with information such as permissions, configuration options, and the features that the application uses.",61],["Gradle merges the Unity Library Manifest, Unity Launcher Manifest, and plug-in manifests into one Android App Manifest file.",61],["You can view the Android App Manifest file inside the output Android App Bundle (AAB) or Android Package (APK) using the Android Studio APK Analyzer, or another third-party tool such as Apktool.",61],["Important**: You cannot edit the Android App Manifest file in the APK or AAB. For information on how to override the contents of an Android App Manifest, see Overriding an Android App Manifest.",61],["",61],["Permissions",61],["Unity automatically adds the necessary permissions to the manifest based on the Android Player Settings and Unity APIs that your applications calls from C# scripts. For example:",61],["\nNetwork classes add the INTERNET permission.\n",61],["\nUsing vibration (such as Handheld.Vibrate) adds VIBRATE.\n",61],["\nThe InternetReachability property adds ACCESS_NETWORK_STATE.\n",61],["\nLocation APIs (such as LocationService) adds ACCESS_FINE_LOCATION\n",61],["\nWebCamTexture APIs add CAMERA.\n",61],["\nThe Microphone class adds RECORD_AUDIO.\n",61],["If a plug-in requires a permission that is declared in its manifest, Unity automatically adds the permission to the final Android App Manifest during the Gradle merge stage. Note that Unity includes all Unity APIs that the plug-ins use in the permissions list.",61],["You can use the Android Runtime Permission System to request permission at runtime, instead of specifying permissions in the Android App Manifest.",61],["For more information about permissions, see Android developer documentation on Android App Manifest Permissions.",61],["Call native plug-in for Android code",62],["The process to call code in native plug-ins for Android is the same as standard native plug-ins.",62],["Note**: If you use individual C/C++ source files as plug-ins, use __Internal as the plug-in name in the DllImport attribute.",62],["It's best practice to wrap all native plug-in method calls with an additional C# code layer that:",62],["Checks Application.platform and only calls native methods when the application is running on Android devices using the architecture that you compiled the native plug-in for. On other platforms and architectures, the additional C# code layer should return dummy values.",62],["Uses platform defines to control platform dependent code compilation and only compile code that uses the plug-in on platforms that have the plug-in available.",62],["Sample package",62],["The AndroidNativePlugin.unitypackage zip file contains a simple example of a native code plug-in distributed as a Unity package.",62],["The sample shows how to invoke C++ code from a Unity application. The package includes a scene which displays the sum of two values as calculated by a native plug-in. To compile the plug-in, use Android NDK. For information on how to install Android NDK via the Unity Hub, see Android environment setup.",62],["To install the sample:",62],["Download the zip file.",62],["Extract the AndroidNativePlugin.unitypackage file.",62],["In a Unity project, click Assets > Import Package > Custom Package.",62],["In the Import Package file dialog, find and select the extracted AndroidNativePlugin.unitypackage file.",62],["Create a native plug-in for Android",63],["To compile a C++ plug-in for Android, use the Android NDK and familiarize yourself with the steps required to build a shared library or a static library.",63],["If you use C++ to implement the plug-in, you must declare with C linkage to avoid name mangling issues. By default, only C source files that have a .c file extension in the plug-ins have C linkage (not C++).",63],["```c++",63],["extern \"C\" {",63],["float Foopluginmethod ();",63],["Additional resources",63],["Import a native plug-in for Android",64],["This page describes how to import a native plug-in for Android into your Unity Project.",64],["Copy the plug-in to your Unity Project's Assets folder.",64],["Select the plug-in in Unity and view it in the Inspector.",64],["In the Select platforms for plugin section, select Android.",64],["In the Platform settings section, set CPU to the CPU architecture that you built the plug-in for.",64],["Select Apply.",64],["Additional resources",64],["Introducing native plug-ins for Android",65],["You can use native plug-ins in Android applications. There are different types of native plug-in, and the project's scripting backend determines which plug-in types Unity supports. The possible plug-in types are:",65],["Shared library**: Plug-ins packaged in a shared library (.so).",65],["Static library**: Plug-ins packaged in a static library (.a).",65],["C/C++ source files**: C/C++ source files that Unity compiles along with IL2CPP generated files. This includes all C/C++ source files with extensions .c, .cc, .cpp and .h.",65],["Scripting backend compatibility",65],["The following table shows which scripting backends support the different types of native plug-ins.",65],["Scripting backend Shared library Static library C/C++ source files ",65],["--------------------- ------------------ ------------------ ---------------------- ",65],["IL2CPP Yes Yes Yes ",65],["Mono Yes No No ",65],["Additional resources",65],["APK expansion files",66],["APK expansion files are the asset splitting solution for the APK publishing format. They enable an application to split its assets into:",66],["Core assets like scripts, plug-ins, and assets that the application requires for the first scene.",66],["Additional assets like Streaming Assets and assets that the application requires for additional scenes.",66],["The core assets go in the main APK file and the additional assets go in APK expansion files.",66],["Digital distribution services often have an application size limit. This makes it necessary for APK applications that are larger than the size limit to use APK expansion files. For example, Google Play requires applications that are larger than 100MB to use APK expansion files. It allows you to use two APK expansion files, the main APK expansion file, and the patch APK expansion file, which can be up to 2GB each. For more information, see APK Expansion Files.",66],["This section of the documentation introduces APK expansion files and explains how to work with them in Unity.",66],["Topic Description ",66],["------------------------------------------------------------ ------------------------------------------------------------ ",66],["APK expansion files in Unity Learn how APK expansion files work in Unity. ",66],["Create the main APK expansion file Split your application into the APK and the main APK expansion file. ",66],["Create the patch APK expansion file Create the optional patch APK expansion file. ",66],["Manually install an APK expansion file Manually install an APK expansion file on a device for local testing. ",66],["Host APK expansion files Learn how to host APK expansion files for your application. ",66],["Optimize distribution size",67],["Some digital distribution services have a limit on the initial install size of your application. Unity includes the following methods to help you to optimize the install size:",67],["Split APKs by target architecture.",67],["Split the application binary.",67],["Minification.",67],["",67],["Split APKs by target architecture",67],["If your output application uses APK format, the Split APKs by target architecture Player Setting optimizes the application download and installation size. Instead of producing one APK that contains binaries for every target CPU architecture selected in the Target Architectures Player Setting, Unity creates a separate APK for each CPU architecture. You can upload this set of APKs to digital distribution services which serve the APK with the correct target CPU architecture to each device that downloads your application.",67],["This is primarily a Google Play feature and may not work for other digital distribution services. For more information, see Multiple APK support.",67],["Note**: Google Play requires new applications to be AABs and not APKs. When you upload an AAB, Google Play automatically generates and serves optimized APKs for each device configuration.",67],["",67],["Split the application binary",67],["You can split your output application to make the initial install size smaller. The device can install a lighter version of your application and then download assets separately. If your output application uses APK format, Unity can split the application into a main APK and an expansion file (OBB). For more information see APK expansion files. If your output application uses AAB format, Unity can split the application into a base module and asset packs. For more information, see Play Asset Delivery.",67],["To split the application binary:",67],["Select Edit > Project Settings.",67],["In the Project settings window, select the Player tab, then open Android Player Settings:",67],["In the Publishing Settings section, enable Split Application Binary.",67],["",67],["Compression",67],["You can change the method Unity uses to compress resource files for the application. This can reduce the size of the application but can increase loading times if the method means data takes longer to decompress.",67],["For more information, see Compression Method.",67],["",67],["Minification",67],["You can use ProGuard minification to decrease the size of the application and improve performance.",67],["To enable ProGuard minification:",67],["Select Edit > Project Settings.",67],["In the Project settings window, select the Player tab, then open Android Player Settings:",67],["In the Publishing Settings section, under Minify enable either Release, Debug, or both depending on the type of build you want to minify.",67],["Note**: ProGuard might strip out important code that your application relies on, so check any builds that you minify.",67],["For more control over the minification process, generate a custom proguard.txt file and configure it to specify what not to strip. To generate the file, select Custom Proguard File in the Publishing Settings section. This generates the proguard.txt file in your project's Assets/Plugins/Android folder. For information on how to configure ProGuard minification, see the ProGuard documentation.",67],["Declare permissions for an application",68],["Android applications declare what permissions they require in their Android App Manifest. This page explains how to manage permissions for an Android application. For a list of the possible permissions, refer to Manifest.permission.",68],["You can use one of the following methods to modify the Android App Manifest file and manage permissions:",68],["Create a custom Unity Library Manifest template for Unity to generate the application's Android App Manifest file from.",68],["Export the project and modify the Android App Manifest file in Android Studio.",68],["Note**: Depending on the Player Settings and Unity APIs that the application uses, Unity automatically adds some required permissions to the Unity Library Manifest. For more information, refer to Unity-handled permissions.",68],["",68],["Create a template Unity Library Manifest",68],["The simplest way to add new permissions for an application is to create a template Unity Library Manifest file and add the permissions to it.",68],["For more information, refer to Create a template Unity Library Manifest file.",68],["",68],["Use Android Studio",68],["To have complete control over which permissions are in the final Android App Manifest file, export the project and edit the Android App Manifest in Android Studio.",68],["For more information, refer to Edit the Android App Manifest in Android Studio.",68],["Additional resources",68],["Android permissions in Unity",69],["To get permission to access device features or data outside of your Unity application's sandbox, there are two stages:",69],["At build time, declare the permission in the application's Android App Manifest.",69],["At runtime, request permission from the user.",69],["For some permissions, Unity automatically handles both the build-time Android App Manifest entries and runtime permission requests. For more information, see Unity-handled permissions.",69],["Declare permissions",69],["An Android application can only request the user for permission to use device features or data that it declares in its Android App Manifest. This is the build-time stage of Android permission handling. For information on how to declare permissions, see Declare permissions for an application.",69],["Note**: If a plug-in declares a permission in its Android App Manifest, Gradle automatically adds the permission to the final Android App Manifest during the Gradle merge stage",69],["Runtime permissions",69],["You can request runtime permissions at any time while the application is running. It's best practice to request permission for restricted data or a device feature when the application requires the data/feature for the first time. You should also show the user a message that explains why the application requires the data/feature before you send the request. This is important to give users context so they are less likely to deny the permission out of confusion.",69],["For information on how to request permission at runtime, see Request runtime permissions.",69],["Important**: If you try to request the user for a permission that the Android App Manifest doesn't declare, the device doesn't show the permission dialogue.",69],["",69],["Unity-handled permissions",69],["Depending on the Player Settings and Unity APIs that the application uses, Unity automatically adds some required permissions to the Android App Manifest and sends permission requests at runtime. This also applies to any plug-ins that the application uses.",69],["To stop Unity from automatically sending permission requests at runtime, add unityplayer.SkipPermissionsDialog to the Android App Manifest. This is useful if you want to provide information about why the application requires each permission before the user sees the permission request. In this case, you need to send the permission requests manually. For more information, see Request runtime permissions.",69],["The following list explains which permissions Unity handles automatically:",69],["If the application uses vibration such as Handheld.Vibrate, Unity adds the VIBRATE permission to the Android App Manifest.",69],["If the application uses the Application.internetReachability property, Unity adds the ACCESS_NETWORK_STATE permission to the Android App Manifest.",69],["If the application uses a location API such as LocationService, Unity adds the ACCESS_FINE_LOCATION permission to the Android App Manifest and requests permission from the user the first time that the application uses location.",69],["If the application uses the WebCamTexture class Unity adds the CAMERA permission to the Android App Manifest and requests permission from the user the first time that the application uses WebCamTexture.",69],["If the application uses the Microphone class adds the RECORD_AUDIO permission to the Android App Manifest and requests permission from the user the first time that the application uses Microphone.",69],["Additional resources",69],["Android plug-in types",70],["Unity supports multiple plug-in types for Android applications. Each plug-in type has its own capabilities so, if you want to create your own plug-in for a particular use-case, make sure to select the most relevant plug-in type for the use-case.",70],["Topic Description ",70],["------------------------------------------------------------ ------------------------------------------------------------ ",70],["Android Library Projects and Android Archive plug-ins Understand Android Library Projects and Android Archive plug-ins, and how to use them to extend your application with C++ and Java code created outside of Unity. ",70],["JAR plug-ins Understand JAR plug-ins and learn how to use them to interact with the Android operating system or call Java code from C# scripts. ",70],["Native plug-ins for Android Understand how to use native plug-ins to call C/C++ code from C# scripts. ",70],["Java and Kotlin source plug-ins Understand how to use Java and Kotlin source code plug-ins to call Java or Kotlin code from C# scripts. ",70],["Additional resources",70],["Call Java and Kotlin plug-in code from C# scripts",71],["To call Java code from C# scripts, Unity provides C# APIs that communicate with the Android Java Native Interface (JNI) through C++. Unity provides both a low level and a high level API that you can use to interact with Java code using JNI.",71],["Low-level API",71],["The low-level AndroidJNI class wraps JNI calls and provides static methods that directly map to JNI methods. The AndroidJNIHelper API provides helper functionality that is primarily used by the high-level API, but they can be useful in certain situations.",71],["High-level API",71],["The high-level AndroidJavaObject, AndroidJavaClass, and AndroidJavaProxy APIs automate a lot of tasks required for JNI calls. They also use caching to make calls to Java faster. The combination of AndroidJavaObject and AndroidJavaClass is built on top of AndroidJNI and AndroidJNIHelper, but they also contain additional functionality such as static methods that you can use to access static members of Java classes.",71],["Instances of AndroidJavaObject and AndroidJavaClass have a one-to-one mapping to an instance of java.lang.Object and java.lang.Class respectively. They provide three types of interactions with Java/Kotlin code:",71],["Call a method.",71],["Get the value of a field.",71],["Set the value of a field.",71],["Each interaction also has a static version:",71],["CallStatic to call a static method.",71],["GetStatic to get the value of a static field.",71],["SetStatic to set the value of a static field.",71],["When you get the value of a field or call a method that returns a value, you use generics to specify the return type. When you set the value of a field, you also use generics to specify the type of the field that you are setting. For methods that don't return a value, there is a regular, non-generic, version of Call.",71],["Important**: You must access any non-primitive type as an AndroidJavaObject. The only exception is a string which you access directly, even though they don't represent a primitive type in Java.",71],["Examples",71],["This section contains code samples that show how to use the high-level AndroidJavaObject and AndroidJavaClass APIs.",71],["Get the hash code for a Java string",71],["The following code sample creates an instance of java.lang.String initialized with a string, and retrieves the hash value for that string.",71],["```c#",71],["using UnityEngine;",71],["public class JavaExamples",71],["public static int GetJavaStringHashCode(string text)",71],["using (AndroidJavaObject jo = new AndroidJavaObject(\"java.lang.String\", text))",71],["int hash = jo.Call(\"hashCode\");",71],["return hash;",71],["This example:",71],["Creates an AndroidJavaObject that represents a java.lang.String. The AndroidJavaObject constructor takes at least one parameter, which is the name of the class to construct an instance of. Any parameters after the class name are for the constructor call on the object, in this case the text parameter from GetJavaStringHashCode.",71],["Calls hashCode() to get the hash code of the string. This call uses the int generic type parameter for Call because hashCode() returns the hash code as an integer.",71],["Note**: You can't use dotted notation to instantiate a nested Java class. You must use the $ separator to instantiate inner classes. For example, Use android.view.ViewGroup$LayoutParams or android/view/ViewGroup$LayoutParams, where the LayoutParams class is nested in the ViewGroup class.",71],["Get the cache directory",71],["The following code sample shows how to get the cache directory for the current application in C# without using plug-ins.",71],["```c#",71],["using UnityEngine;",71],["public class JavaExamples",71],["public static string GetApplicationCacheDirectory()",71],["using (AndroidJavaClass unityPlayer = new AndroidJavaClass(\"com.unity3d.player.UnityPlayer\"))",71],["using (AndroidJavaObject currentActivity = unityPlayer.GetStatic(\"currentActivity\"))",71],["using (AndroidJavaObject javaFile = currentActivity.Call(\"getCacheDir\"))",71],["string cacheDirectory = javaFile.Call(\"getCanonicalPath\");",71],["return cacheDirectory;",71],["This example:",71],["Creates an AndroidJavaClass to represent com.unity3d.player.UnityPlayer. It's best practice to use AndroidJavaClass instead of AndroidJavaObject to access static members.",71],["Creates an AndroidJavaObject to represent the current activity, which is a static member of com.unity3d.player.UnityPlayer.",71],["Calls getCacheDir() on the Activity object, which returns a File object that represents the cache directory.",71],["Calls getCanonicalPath() on the File object can to get the cache directory as a string.",71],["Note**: This example is for reference purposes. Instead, to access the application’s cache and file directory use the Application.temporaryCachePath and Application.persistentDataPath APIs.",71],["Pass data from Java to Unity",71],["The following code sample shows how to pass data from Java to Unity using UnitySendMessage.",71],["```c#",71],["using UnityEngine;",71],["public class JavaExamples : MonoBehaviour",71],["private void Start()",71],["AndroidJNIHelper.debug = true;",71],["using (AndroidJavaClass jc = new AndroidJavaClass(\"com.unity3d.player.UnityPlayer\"))",71],["jc.CallStatic(\"UnitySendMessage\", \"My GameObject\", \"JavaMessage\", \"NewMessage\");",71],["private void JavaMessage(string message)",71],["Debug.Log(\"message from java: \" + message);",71],["This example:",71],["Creates an AndroidJavaClass to represent com.unity3d.player.UnityPlayer.",71],["Calls the staticUnitySendMessage method that is a member of com.unity3d.player.UnityPlayer.",71],["Although you call UnitySendMessage from within Unity, it relays the message using Java, then Java calls back to the native/Unity code to deliver the message to the object, in this example it is the GameObject named \"My GameObject\" which has an attached script that contains a method called JavaMessage.",71],["Best practice",71],["This section describes best practices to be aware of when you call Java and Kotlin plug-in code from C# scripts.",71],["Minimize JNI calls",71],["Using the Java Native Interface (JNI), through either the high-level or low-level C# API is resource intensive and can be slow. To improve performance, and also code clarity, it's best practice to keep the number of JNI calls low.",71],["To avoid unnecessary JNI calls, the high-level C# API caches the ID of each Java method that you call. This means that subsequent calls to the same method are not as resource intensive as the first call. The calls don't need to be during the same frame or even from the same AndroidJavaObject/AndroidJavaClass instance. If you use the low-level API and want this performance benefit, you must cache method ID yourself. Otherwise, it's best practice to use the high-level API.",71],["Note**: Unity maintains the cache until the application closes. This includes while the application is in the background.",71],["Garbage collection",71],["You should wrap any instance of AndroidJavaObject or AndroidJavaClass with a using statement to ensure Unity destroys them as soon as possible. If you don't use using, Unity's garbage collector should still release all created instances, but you lose control of when this will be.",71],["The following code sample shows how to use using statements to get the system language in an optimal way:",71],["```c#",71],["using UnityEngine;",71],["public class LocaleExample : MonoBehaviour",71],["void Start()",71],["using (AndroidJavaClass cls = new AndroidJavaClass(\"java.util.Locale\"))",71],["using (AndroidJavaObject locale = cls.CallStatic(\"getDefault\"))",71],["if (locale != null)",71],["Debug.Log(\"current lang = \" + locale.Call(\"getDisplayLanguage\"));",71],["Note**: To see a record of the garbage collector's activity in Android Logcat, set AndroidJNIHelper.debug to true.",71],["Profile on an Android device",72],["It's important to profile your application on the device you are developing the application for. You can profile your application in the Unity Editor to get an idea of how it will perform, but the hardware differences between a desktop development machine and a mobile device mean that, to get a clear understanding of how the application will perform for your end-user, you must profile it on a target device. There are also mobile-specific performance characteristics which you can only profile on a device. For example, the affect on battery life.",72],["For information on how to connect Unity to an instance of your application running on an Android device, refer to Profile your application on a target platform.",72],["Additional resources",72],["Request runtime permissions",73],["This page explains how to request the user's permission for your application to access data on the device or use a device feature such as a built-in camera or microphone.",73],["Google’s guideline for requesting permissions recommends that, if the user denies a permission request once, you should display the reason for the request and present the request again.",73],["For more information on when and how to request permissions on an Android device, refer to App permissions best practices in the Android developer guide.",73],["Prerequisites",73],["The runtime permissions API requires Android version 6 (API level 23). To change your application's target API:",73],["Select Edit > Project Settings.",73],["In the Project settings window, select the Player tab, then open Android Player Settings:",73],["In the Other Settings > Identification section, set Target API Level to at least level 23.",73],["Before the application requests permission to use restricted data or a particular device feature, it must declare the permission in its Android App Manifest. For more information, refer to Declare permissions for an application.",73],["Request permission at runtime",73],["The Android.Permission API provides functionality that you can use to check what permissions the application currently has and request permissions that the application requires but doesn't have.",73],["An overview of the process to request permission at runtime is as follows:",73],["Check whether the user has already granted the application permission. If they have, you don't need to request it again.",73],["If the user hasn't granted permission, send a request for permission to access the data or use the device feature that the application requires.",73],["If the user denies the application permission, disable the application's functionality that requires the specific permission. If the application can't work without this functionality, inform the user.",73],["If the user still denies the application permission, it's best practice to provide a method that lets the user manually trigger the permission request again from inside the application.",73],["Check if the application has permission",73],["Use Permission.HasUserAuthorizedPermission to check if the user has already granted permission for the data or feature the application requires.",73],["For a code example that shows how to use this API, refer to Permission.HasUserAuthorizedPermission.",73],["Send a request for permission",73],["Use Permission.RequestUserPermission to request the permission to use the data or feature. When you call this method, Android opens the system permission dialog that the user can use to grant or deny the permission.",73],["For a code example that shows how to use this API, refer to Permission.RequestUserPermission.",73],["Use Permission.RequestUserPermissions to request permissions to access multiple resources on the user’s device at once. This method uses an array of strings with each string representing a specific permission to access a particular resource such as the device's camera , microphone, or location.",73],["These methods can accept a PermissionCallbacks object that you can use to specify code to run after the user grants or denies the permission. You can use this to start using a device feature as soon as the user grants the permission request. For example, you can start recording from the microphone.",73],["Tip**: When you request permission, it's best practice to show the user a message that explains why the application requires the feature.",73],["Note**: If the user has enabled the Do not ask me again option on the system permission dialog, or has denied the permission more than once, RequestUserPermission() doesn't open the system dialog. In this case, the user must go into the application permission settings and manually enable the permission.",73],["Provide a way to manually trigger the permission request",73],["If the user denies the permission that the application requires, provide a way for the user to manually display the permission request dialog. How to do this depends on the application, but one solution is to provide a button that calls Permission.RequestUserPermission.",73],["Android requirements and compatibility",74],["Before you begin to develop an Android application in Unity, check Unity’s requirements and compatibility information for Android to make sure you’re aware of any limitations for developing a Unity application for this platform.",74],["Android support",74],["Unity supports Android 5.1 “Lollipop” (API level 22) and above. For more information, refer to AndroidSdkVersions.",74],["Graphics API support",74],["Android devices support Vulkan and OpenGL ES. This section contains information about the graphics APIs Unity supports for Android.",74],["Graphics API Support ",74],["----------------- ----------- ",74],["Vulkan Yes ",74],["OpenGL ES 1.0 No ",74],["OpenGL ES 1.1 No ",74],["OpenGL ES 2.0 Yes (1) ",74],["OpenGL ES 3.0 Yes ",74],["OpenGL ES 3.1 Yes ",74],["OpenGL ES 3.2 Yes ",74],["Notes**:",74],["New Unity Projects don't support OpenGL ES 2.0 by default. For information on how to add support for OpenGL ES 2.0, see OpenGL ES 2.0.",74],["",74],["OpenGL ES 2.0",74],["Unity doesn't include OpenGL ES 2.0 in its built-in set of graphics APIs for Android by default. To add support for OpenGL ES 2.0:",74],["Go to Edit > Project Settings.",74],["In the Project settings window, select the Player tab, then open Android Player Settings:",74],["Open the Other Settings fold-out. In the Rendering section, disable Auto Graphics API. This makes the Graphics APIs list appear.",74],["To add support for OpenGL ES 2.0, select Add (+) and choose OpenGLES2.",74],["If you upgrade an old project that uses Auto Graphics API to a Unity version that doesn't include OpenGL ES 2.0 by default, then Unity disables Auto Graphics API and manually adds OpenGL ES 2.0 to the list.",74],["Render pipeline compatibility",74],["Not every render pipeline is compatible with Android due to hardware and graphics API limitations.",74],["Feature Built-in Render Pipeline Universal Render Pipeline High Definition Render Pipeline Custom Scriptable Render Pipeline ",74],["----------- ---------------------------- ----------------------------- ----------------------------------- ------------------------------------- ",74],["Android Yes Yes No Yes ",74],["",74],["Manifest element attributes",74],["This section contains compatibility information on Android App Manifest element attributes.",74],["For the <Activity> element, Unity only supports the singleTask launchMode.",74],["Emulator compatibility",74],["Unity doesn't support Android emulators. To test your application, you can:",74],["\nTest on an Android device.\n",74],["\nIf you only need to test mobile input for your application, use Unity Remote.\n",74],["\nIf you only need to test the appearance of an Android device, use the Device Simulator.\n",74],["",74],["Texture compression",74],["The standard texture compression formats on Android are Ericsson Texture Compression (ETC) and Adaptable Scalable Texture Compression (ASTC). To target the widest range of Android devices, use one of these texture compression formats. Unity's default texture compression format is ASTC. If an Android device doesn't support the texture compression format you use for a texture, Unity decompresses the texture at runtime. This increases memory usage and decreases rendering speed.",74],["A subset of Android devices support the DXT and PVRTC texture compression formats. These formats support textures with an alpha channel as well as high compression rates or high image quality. For digital distribution services that filter content based on texture compression format, it is best practice to create separate builds of your application for each texture compression format.",74],["There are two ways to change the default texture compression format for your application:",74],["In Android Player Settings with the Texture compression format setting.",74],["In Android Build Settings with the Texture Compression setting. The default value for this is Use Player Settings.",74],["The value you set in Build Settings has priority over the one you set in Player Settings. Use it to change the texture compression format for a particular build.",74],["You can also customize the texture compression format for individual textures. The value you set for an individual texture overrides the default texture compression format value. For information on how to change the texture format of individual textures, see Texture Importer.",74],["Playing video files",74],["This section provides additional information for playing video files on Android:",74],["To play video files on Android, use the Video Player component. If your application tries to play a video file that the device doesn't support, Unity doesn't play the video.",74],["You can use any resolution or number of audio channels so long as the target device supports them. Note: Not all devices support resolutions greater than 640 × 360.",74],["Unity supports playback from uncompressed asset bundles. For Android Pie and above, Unity supports playback from compressed asset bundles.",74],["Unity doesn't support native webM/VP8 transparency. To play VP8-encoded webM clips with transparency, transcode the clips to a supported format.",74],["In Android versions prior to 6.0.1, videos with transparency that have a higher resolution than the device support render pixels outside the supported resolution as white.",74],["Unity reports format compatibility issues in the adb logcat output and prefixes them with AndroidVideoMedia. This file might display other device-specific error messages near the video format issues Unity reports. These device-specific errors aren't visible to Unity and often explain what the compatibility issue is.",74],["Screen configuration",75],["Unity provides features that you can use to configure the screen when in the Editor and at runtime.",75],["Screen orientation",75],["You can control the screen orientation of your application on Android devices. Detecting a change in orientation or forcing a specific orientation is useful for creating behaviors that depend on how the user holds the device.",75],["To retrieve the current application orientation, access Screen.orientation property. The available orientations are:",75],["Orientation Behavior ",75],["---------------------- ------------------------------------------------------------ ",75],["Portrait The application is in portrait mode and expects the device to be upright and the home button at the bottom. ",75],["PortraitUpsideDown The application is in portrait mode but upside down and expects the device to be upright and the home button at the top. ",75],["LandscapeLeft The application is in landscape mode and expects the device to be upright and the home button on the right side. ",75],["LandscapeRight The application is in landscape mode and expects the device to be upright and the home button on the left side. ",75],["To manually control the screen orientation, set Screen.orientation to one of the above orientations, or use ScreenOrientation.AutoRotation. When you enable autorotation, you can still disable some orientation on a case-by-case basis.",75],["The following properties control autorotation:",75],["The screen orientation of your application may vary depending on the device orientation set by the user, regardless of your application’s default orientation setting.",75],["The following table shows the default screen orientation set for your application and the actual orientation the application loads in based on the device orientation.",75],["Default screen orientation: Autorotate Default screen orientation: Portrait Default screen orientation: Landscape ",75],["",75],["Device orientation: Autorotate The application screen loads in portrait, and can rotate between portrait, portrait upside down, landscape right, and landscape left orientations.Note: On a tablet, the application screen loads in portrait or landscape orientation based on the device orientation. The application screen loads in portrait and can rotate between portrait and portrait upside down orientations. The application screen loads in the same orientation as the device orientation. If the device orientation is portrait, the application screen loads in portrait, and can rotate to landscape orientation. In landscape orientation, the screen can only rotate between landscape right or landscape left orientations.Note: On a tablet, if the user turns off the device autorotation setting, and then reopens the application, the application screen orientation remains unchanged. ",75],["Device orientation: Portrait lock The application screen loads and remains locked in portrait orientation. Note: Whilst in portrait orientation, if you set the ScreenOrientation.AutoRotation property for portrait to false, the application screen remains in portrait until you rotate the device to landscape orientation. Once in landscape, the screen can't rotate back to portrait orientation. If you now set the ScreenOrientation.AutoRotation property for landscape to false, the screen orientation remains unchanged. The application screen loads and remains locked in portrait orientation. The application screen loads and remains locked in portrait orientation even if you set the portrait option to false. To allow screen rotation, assign the required orientation to Screen.orientation property. You can enable autorotation with ScreenOrientation.AutoRotation. ",75],["Device orientation: Landscape lock The application loads and remains locked in landscape orientation. The application loads in landscape and remains locked in landscape left or landscape right orientation depending on the device orientation even if you set either option to false. To change the orientation, assign the required orientation to Screen.orientation property. You can enable autorotation with ScreenOrientation.AutoRotation. The application loads in landscape and remains locked in landscape left or landscape right orientation depending on the device orientation. ",75],["Multi-window mode",75],["Android's multi-window mode supports Unity applications. Users can resize the windows that will contain your Unity applications so it's best practice to make your user interface scale to non-standard aspect ratios and resolutions.",75],["Android environment setup",76],["To create a Unity application for Android, you first need to set up your Unity project to support Android. To support Android, a Unity project requires the following dependencies:",76],["\nThe Android Build Support module.\n",76],["\nThe Android Software Development Kit (SDK).\n",76],["\nThe Native Development Kit (NDK).\n",76],["\nA Java Development Kit. By default, Unity uses OpenJDK.\n",76],["Before you get started, check Unity's Requirements and compatibility documentation for Android to make sure you're aware of any limitations for developing a Unity application for Android.",76],["Installing dependencies",76],["Unity distributes dependencies as modules which means you must use the Unity Hub to install them. You can install them either when you install a new Unity Editor version, or add them to an existing Unity Editor install. To install modules:",76],["\nAt install time, refer to Downloading and installing Editors and modules with the Unity Hub.\n",76],["\nTo an existing install, refer to Add modules.\n",76],["The three modules to install are:",76],["\nAndroid Build Support\n",76],["\nAndroid SDK & NDK Tools\n",76],["\nOpenJDK\n",76],["Unity installs Android SDK & NDK Tools and OpenJDK respectively in the SDK, NDK, and OpenJDK folders under /[EditorVersion]/Editor/Data/PlaybackEngines/AndroidPlayer/.",76],["",76],["Customizing dependencies",76],["You should use the Unity Hub to install Android SDK & NDK tools and OpenJDK to ensure that you receive the correct versions and configurations. However, there are situations where it's useful to change the SDK, NDK, or JDK that Unity uses to build applications for Android. For example, if you have multiple versions of Unity with the same dependencies and you don't want to duplicate the installation of the SDK, NDK, and JDK, you can specify a shared location.",76],["To make Unity use a custom version of a dependency:",76],["Download the custom version of the dependency.",76],["Warning**: Unity only officially supports versions of the OpenJDK, SDK, or NDK that it supplies through the Hub. For more information, refer to Supported dependency versions.",76],["In Unity's main menu, go to Edit > Preferences > External Tools > Android (macOS: Unity > Settings > External Tools > Android)",76],["Refer to the External tools for Android documentation to understand how to customize the installation of JDK, SDK, NDK, and Gradle.",76],["",76],["Supported dependency versions",76],["This section contains information on which versions of each dependency each Unity version supports. Each version of Unity requires a specific version of the Android NDK and Android JDK, but there are no exact version requirements for the Android SDK.",76],["SDK",76],["Unity relies on tools that the Android SDK provides and different versions of the SDK usually have the same tools available. This means you can use any recent version of the SDK as they all contain the build tools that Unity requires.",76],["The following table shows the supported versions of Android SDK tools installed with each Unity version:",76],["Unity version SDK tools version SDK Build tools version SDK Command-line tools version SDK Platform tools version ",76],["----------------- ------- --------- ----- ---- ",76],["2022.3 LTS 26.1.1 32.0.0 6 32.0.0 ",76],["2021.3 LTS 26.1.1 30.0.2 2 30.0.4 ",76],["2020.3 LTS 26.1.1 30.0.2 2 28.0.1 ",76],["Important**: Unity versions 2020.3 and 2021.3 LTS do not support Android SDK Build tools versions 31 and above.",76],["NDK",76],["The following table shows the NDK version that each Unity version supports:",76],["Unity version NDK version ",76],["----------------- --------------- ",76],["2022.3 LTS r23b(23.1.7779620) ",76],["2021.3 LTS r21d(21.3.6528147) ",76],["2020.3 LTS r19(19.0.5232133) ",76],["JDK",76],["The following table shows the JDK version that each Unity version supports:",76],["Unity version JDK version ",76],["----------------- ----------------------- ",76],["2022.3 LTS 11 (OpenJDK version 11) ",76],["2021.3 LTS 8 (OpenJDK version 1.8) ",76],["2020.3 LTS 8 (OpenJDK version 1.8) ",76],["",76],["External Tools for Android",76],["The External Tools section for Android allows you to configure settings for Android development tools used to set up Unity projects on Android devices. To access the External Tools for Android section, in the Preferences window (macOS: Unity > Settings >), go to Edit > Preferences > External Tools > Android.",76],["For general Preferences settings, refer to Preferences.",76],["Setting Description ",76],["",76],["JDK installed with Unity(recommended) Indicates whether to use the recommended version of Java Development Kit (JDK) installed with Unity or the custom JDK installation. If enabled, the setting displays the path to the JDK installation folder. To use the custom JDK version, disable this option and click Browse to set the custom JDK installation folder path. ",76],["Android SDK tools installed with Unity(recommended) Indicates whether to use the recommended versions of Android SDK tools installed with Unity or the custom SDK tools installation. If enabled, the setting displays the path to the SDK tools installation folder. To use the custom SDK tools version, disable this option and click Browse to set the custom SDK tools installation folder path. ",76],["Android NDK installed with Unity(recommended) Indicates whether to use the recommended version of Android Native Development Kit (NDK) installed with Unity or the custom NDK installation. If enabled, the setting displays the path to the NDK installation folder. To use the custom NDK version, disable this option and click Browse to set the custom NDK installation folder path. ",76],["Gradle installed with Unity(recommended) Indicates whether to use the recommended version of Android Gradle installed with Unity or the custom Gradle installation. If enabled, the setting displays the path to the Gradle installation folder. To use the custom Gradle version, disable this option and click Browse to set the custom Gradle installation folder path. ",76],["Stop Gradle daemons on exit Indicates whether to stop Gradle daemons when the Unity Editor exits. This option is enabled by default and it might help to free up resources on your computer. ",76],["Kill ADB server on exit Indicates whether to terminate Android Debug Bridge (adb) server when the Unity Editor exits. This option is enabled by default and it might help to free up resources on your computer. ",76],["Maximum JVM heap size, Mbyte Specifies the maximum Java heap size that can be allocated during the Android build process. The value is specified in megabytes and the default value is 4096. You can increase or decrease this value based on your project requirement. Increase this value if you experience heap space errors. ",76],["Keystores Dedicated Location Specifies the folder path to your Android keystores. Unity uses this path when signing your Android application during the build process. To set a new path for your application, click Browse and navigate to the folder where you want to store your Android keystores. For more information, refer to Choose the keystore location. ",76],["Setting the Android SDK Target API",76],["The Unity Hub installs the latest version of the Android SDK Target API that Google Play requires. If you need to use a more recent version, you can change it in the Android Player Settings. To do this:",76],["Select Edit > Project Settings.",76],["In the Project settings window, select the Player tab, then open Android Player Settings:",76],["In the Other Settings section, change the Target API Level.",76],["If you select a target API version newer than the latest installed version, the Unity Android SDK Updater can automatically download and install the new version. Unity displays a prompt and you can choose to either:",76],["\nAutomatically download and install the new version of the Android SDK.\n",76],["\nContinue to use the highest installed version of the Android SDK.\n",76],["If you select a target API version that isn't installed and is older than the latest installed version, the Unity Android SDK Updater can't perform the update and Unity displays an error message. In this case, to update the Android SDK Target API, you must use the Android sdkmanager from either Android Studio or the command-line tool. Regardless of the method you choose, make sure to select the correct Android SDK folder for Unity in the Edit > Preferences > External Tools window. For more information, refer to Customizing dependencies.",76],["Important**: On Windows, if you installed the Unity Editor in the default folder (/Program Files/), you must run the sdkmanager with elevated privileges (Run as Administrator) to perform the update.",76],["ChromeOS",76],["In Unity, ChromeOS is part of the Android development environment. This means you can deliver new and existing Android applications to ChromeOS. Also, since many ChromeOS devices are laptops or have a laptop mode, you can use features such as mouse and keyboard input. For more information:",76],["\nOn ChromeOS in Unity: ChromeOS.\n",76],["\nOn how to build an Android application for ChromeOS: Building your ChromeOS application.\n",76],["Single-pass stereo rendering for Android",77],["Unity supports single-pass stereo rendering for Android devices that support multiview. Multiview consists of the GL_OVR_multiview2 and GL_OVR_multiview_multisampled_render_to_texture OpenGL ES extensions. These extensions require shaders to use a 2D texture array that consists of two slices, one slice per eye.",77],["Shader code requirements",77],["To use single-pass stereo rendering with custom shaders, you may need to include additional shader code. You don't need to include additional code if your custom shaders are:",77],["Surface Shaders that don't have custom vertex processing.",77],["Fixed-function pipeline shaders.",77],["Note**: These shader changes are compatible with multi-pass stereo rendering.",77],["Modify your shaders",77],["If you want to use the unity_StereoEyeIndex built-in shader variable to know which eye the GPU is rendering to, you must declare UNITY_VERTEX_OUTPUT_STEREO in any shader stage output structs that you have. For example:",77],["struct v2f {",77],["float2 uv : TEXCOOR0;",77],["float4 vertex : SV_POSITION;",77],["UNITY_VERTEX_OUTPUT_STEREO",77],["};",77],["To initialize the output data, use UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO() in the vertex shader function. For example:",77],["v2f vert (appdata v)",77],["v2f o;",77],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);",77],["o.vertex = UnityObjectToClipPos(v.vertex);",77],["o.uv = TRANSFORM_TEX(v.uv, _MainTex);",77],["return o;",77],["To initialize unity_StereoEyeIndex in subsequent stages, add UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX() at the beginning. For example:",77],["fixed4 frag (v2f i) : SV_Target",77],["UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);",77],["// sample the texture",77],["fixed4 col = tex2D(_MainTex, i.uv);",77],["// apply fog",77],["UNITY_APPLY_FOG(i.fogCoord, col);",77],["return col;",77],["If your shaders use other shader stages, use the UNITY_TRANSFER_VERTEX_OUTPUT_STEREO() macro to transfer the eye index to the subsequent stages.",77],["Tip**: To calculate the final position of the object, it's best practice to use UnityObjectToClipPos(IN.vertex) instead of mul(UNITY_MATRIX_MVP, IN.vertex).",77],["Post-Processing Shaders",77],["You must update post-processing shaders to deal with the eye textures being a 2D texture array. To help with this, Unity includes the UNITY_DECLARE_SCREENSPACE_TEXTURE() macro. To make textures work in both multi-pass and single-pass modes, wrap each textures in this macro. Also, when you sample the texture, use the UNITY_SAMPLE_SCREENSPACE_TEXTURE() macro.",77],["This macro requires that you call UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX() beforehand when in single-pass mode. Unity also includes similar macros for depth textures and screen space shadow maps. You can see the full list at the bottom of HLSLSupport.cginc.",77],["Android symbols",78],["To help you debug your application, Unity can generate a package that contains symbol files for native Unity libraries. Symbol files contain a table that translates active memory addresses into information you can use, like a method name. The translation process is called symbolication. You can upload a symbols package to the Google Play Console to see a human-readable stack trace on the Android Vitals dashboard.",78],["There are two types of symbol files:",78],["Public: A small file that contains a symbol table. For more information, refer to Public symbols.",78],["Debug: Contains everything that a public symbol file contains, and full debugging information that you can use for more in-depth debugging. For more information, refer to Debugging symbols.",78],["You can generate symbol files for the following libraries:",78],["libmain: Responsible for initial Unity engine loading logic.",78],["libunity: Unity's engine code.",78],["libil2cpp: Contains C# scripts from the project converted to C++ code.",78],["Unity generates the libmain and libunity symbol files. Gradle generates the libil2cpp symbol file.",78],["",78],["Public symbols",78],["A public symbol file contains information that resolves function addresses to human-readable strings. Unity uses the --strip-debug parameter to create public symbols that remove more in-depth debug information. This makes public symbol files and packages smaller than debugging symbol files and packages.",78],["",78],["Debugging symbols",78],["A debugging symbol file contains full debugging information and a symbol table. Use it to:",78],["Resolve stack traces and to debug applications that you have source code available for.",78],["Attach a native debugger to the application and debug the code.",78],["Unity uses the --only-keep-debug parameter to create debugging symbols. For more information, refer to --only-keep-debug in the Linux user manual.",78],["Note:** If debugging symbols aren't available, Unity places a public symbol file in your project at build time. For the libmain and libunity libraries, debugging symbols aren't available and Unity always generates public symbol files.",78],["",78],["Custom symbols",78],["You can instruct Unity to include additional symbol files. This is useful if you use shared libraries and want your local debugger, and Google Play, to resolve the shared library stack traces if the application crashes.",78],["To make Unity include a custom symbols file:",78],["In the Project window, select a plug-in that has a .so file extension.",78],["In the Inspector, find the Platform settings section.",78],["Set CPU to the CPU architecture that the symbols file is compatible with.",78],["Set Shared Library Type to Symbol.",78],["Whenever Unity generates a symbols package, it adds the additional symbol files to the symbols package.",78],["If you want to make Unity include a custom symbols file from a C# script, the UnityEditor.Android namespace includes the following APIs to set the CPU and Shared Library Type respectively:",78],["Note:** The symbols file name must match the name of the shared library that the symbols file is for. For example, if a shared library is called mylibrary.so, the symbols file must also be named mylibrary.so. To avoid file name collisions, the symbols file and the shared library must be in separate directories.",78],["Important:** Ensure the symbols file is up to date and compatible with the shared library that contains the executable code. If you don't, your local debugger and Google Play will fail to resolve stack traces for code in the shared library.",78],["Generating a symbols package",78],["There are two ways to enable symbols package generation for your application:",78],["Through the Build Settings window.",78],["Using the EditorUserBuildSettings.androidCreateSymbols API.",78],["To enable symbols package generation through the Build Settings window:",78],["Open the Build Settings window (menu: File > Build Settings).",78],["Select the Android platform.",78],["Set Create symbols.zip to one of the following:",78],["After you enable symbols package generation, building your project generates a .zip file that contains symbol files for the libmain and libunity library. If you set your scripting backend to IL2CPP, the .zip also contains a symbol file for the libil2cpp library. Unity places this symbols package within the output directory.",78],["If you enable Export Project in the Android Build Settings, Unity doesn't build the project. Instead, it exports the project for Android Studio, generates symbols for libmain and libunity, and places them within unityLibrary/symbols/<architecture>/ in the output directory. When you build your exported project from Android Studio, Gradle generates the libil2cpp symbol file and places it within the unityLibrary/symbols/<architecture>/ directory alongside the libmain and libunity symbol file.",78],["Using symbols in the Google Play console",78],["After you upload your application to Google Play, you can upload a public symbols package for it. For information on how to do this, refer to Google's documentation: Deobfuscate or symbolicate crash stack traces.",78],["Note:** Google Play doesn't symbolicate crashes that your application received before you uploaded the symbols package.",78],["Testing and debugging",79],["This section of the User Manual contains guidance on testing and debugging Android applications.",79],["Topic Description ",79],["------------------------------------------------------------ ------------------------------------------------------------ ",79],["Debug on an Android device Debug your application on an Android device via a USB or wireless connection. ",79],["Android symbols Generate symbols to help you debug a built Android application. ",79],["Simulate an Android device Simulate how your application will appear and behave on an Android device. ",79],["Profile on an Android device Connect an Android device to Unity and profile your application. ",79],["Unity Remote Use Unity Remote to view your application on a device without creating a build. ",79],["Iterate faster using application patching Perform an application patch, rather than a full build, to increase iteration speed. ",79],["Android thread configuration",80],["Unity configures thread affinity and thread priority based on the CPU topology of the device. Unity’s default thread configuration works well for most projects, but in some situations, you might want to change the thread configuration (for example, if you want to optimize for specific devices, or if your application aims for low power consumption and doesn't require high frame rates).",80],["Important**: Use Unity’s default settings when possible. If you change the thread configuration to optimize for specific devices, any changes you make can have a negative performance impact on other devices or even the same devices in future operating system versions.",80],["",80],["Thread affinity",80],["The affinity of a thread controls which CPU cores the thread should run on. For Android devices, cores usually fit into two categories:",80],["Big: Powerful cores that are battery power-intensive.",80],["Little: Slower cores that are less battery power-intensive than big cores.",80],["Important**: For typical applications that target a variety of Android devices, don't bind threads to specific cores.",80],["Identifying CPU cores",80],["Unity usually receives the capacity and big/little assignment for every CPU core from the device's operating system. For older operating system versions, this information isn't always available. In this case, Unity calculates the capacity of the CPU cores and uses that information to assign each core as either big or little. To assign a core, Unity compares the CPU capacity of each core to a threshold. By default, a core is big if it has at least double the CPU capacity of the slowest core, and is little otherwise.",80],["For more control over which cores Unity assigns as big or little, you can provide a custom threshold. To provide a custom threshold, use the -platform-android-cpucapacity-threshold [value] command-line argument with a value between 0 and 1024 where 0 represents the lowest capacity core and 1024 represents the highest capacity core. For example, a value of 870, which is approximately 85% of 1024, means that a core is big if its CPU capacity is in the top 15% of those on the chip. For information on how to add start-up command-line arguments to Unity on Android devices, see Specify Unity startup arguments from a custom UnityPlayerActivity file.",80],["Note**: Unity always categorizes a core as either big or little. For some complex CPU topologies (for example, those that have medium cores), Unity still categorizes its cores as either big or little.",80],["Thread affinity aliases",80],["Unity provides the following aliases that you can use as the thread affinity value:",80],["any: Allows the thread to run on any core.",80],["little: Allows the thread to run on any little core.",80],["big: Allows the thread to run on any big core.",80],["You can also use hexadecimal and binary values to specify thread affinity. In binary, the index of the bit references a specific CPU core. Typically, little cores start at index 0 and big cores come directly after them.",80],["For example, if the CPU contains four little cores and four big cores:",80],["The binary value 0b11110000 and hexadecimal value 0xf0 allow the thread to run on big cores.",80],["The binary value 0b1111 and hexadecimal value 0xf allow the thread to run on little cores.",80],["",80],["Thread priority",80],["The priority of a thread controls how the device's operating system allocates CPU time to the thread. The operating system allocates more CPU time to threads with a higher priority relative to threads with a lower priority.",80],["The thread priority values you can use in Unity are in the range of –20 to 19, where –20 indicates the highest priority and 19 indicates the lowest priority.",80],["Configurable Unity threads",80],["This section contains information about the Unity threads you can configure, and which command-line arguments you use to configure them.",80],["For information on how to add startup command-line arguments to Unity on Android devices, see Specify Unity startup arguments from a custom UnityPlayerActivity file.",80],["Important**: On some devices and Android OS versions, the Android OS might ignore command-line parameters and throw an error. If this occurs, you application still runs normally without issue, but Android doesn't apply the thread affinity or thread priority settings that you specified.",80],["Unity main thread",80],["Unity's main thread executes all scripts and usually has a high CPU load. The command-line arguments that affect this thread are:",80],["-platform-android-unitymain-priority [value] where [value] is the priority of the thread.",80],["-platform-android-unitymain-affinity [value] where [value] is the affinity of the thread.",80],["Unity JobWorker threads",80],["Unity's worker threads execute jobs from both the core engine and those your application dispatches via the C# Job System. The command-line arguments that affect these threads are:",80],["-platform-android-jobworker-priority [value] where [value] is the priority of the threads.",80],["-platform-android-jobworker-affinity [value] [value1 value2 value3] where [value] is the affinity of the thread and [value1 value2 value3] are optional values you can use to specify the affinity of worker threads per thread. If you only set a single value, Unity uses the same value for all worker threads. You can use '-job-worker-count’ to specify the number of worker threads.",80],["Unity render thread",80],["Unity's render thread interacts with the Graphics API if your project uses multithreaded rendering.",80],["-platform-android-gfxdeviceworker-priority [value] where [value] is the priority of the thread.",80],["-platform-android-gfxdeviceworker-affinity [value] where [value] is the affinity of the thread.",80],["Note**: If you use GraphicsJobs, JobWorker threads also interact with the Graphics API.",80],["Android",81],["This section of the User Manual contains information on Unity development for Android.",81],["Topic Description ",81],["------------------------------------------------------------ ------------------------------------------------------------ ",81],["Introducing Android Introduces key concepts and workflows that are useful to understand before you begin to develop a Unity application for Android. ",81],["Getting started with Android Explains how to set up a project for Android development and introduces Android-specific tools and settings. ",81],["Developing for Android Contains Android-specific development information on topics such as input, asset management, and debugging. ",81],["Building and delivering for Android Explains how to build and publish an Android application. ",81],["Android Library Projects and Android Archive plug-ins",82],["Android Libraries and Android Archives (AAR) are plug-in types that can contain C++ and Java code, resources such as assets, and a plug-in manifest file. You can use them to reuse components across multiple applications, or build variations of one application with the same core components.",82],["Topic Description ",82],["------------------------------------------------------------ ---------------------------------------------------------- ",82],["Introducing Android Library Projects and Android Archive plug-ins Understand Android Library Projects and Android Archives. ",82],["Import an Android Library Project Import an Android Library Project into your Unity Project. ",82],["Import an Android Archive plug-in Import an Android Archive into your Unity Project. ",82],["Additional resources",82],["JAR plug-ins",83],["You can use Java Archive (JAR) plug-ins to interact with the Android OS or to call methods written in Java from C# scripts.",83],["Java Archive (JAR) plug-ins contain Java code that you can call from C# scripts. They're useful if you want to interact with the Android operating system, or just call Java code from C#.",83],["This type of plug-in is useful if you plan to reuse Java code in multiple projects, or distribute it to other people. If instead you only want to write a small amount of Java code for a single project, then a Java or Kotlin source code plug-in might be more appropriate.",83],["Import a JAR plug-in",83],["To import a JAR plug-in (AAR) plug-in into your Unity Project:",83],["Copy the .jar file to your Unity Project's Assets folder.",83],["Select the .jar file in Unity and view it in the Inspector.",83],["In the Select platforms for plugin section, select Android.",83],["Select Apply.",83],["Additional resources",83],["Java and Kotlin source plug-ins",84],["Unity can interpret individual Java and Kotlin source files as individual plug-ins.",84],["Unity supports Java and Kotlin code written in source files with .java and .kt extensions. To do this, Unity interprets each source file as an individual plug-in and compiles them when it builds the Player. This type of plug-in is useful if you need to write a small amount of code for a single project. If you plan to reuse the code in multiple projects or distribute it to other people, then an Android Library Project or Android Archive plug-in might be more appropriate.",84],["Create a Java or Kotlin source plug-in",84],["To indicate to Unity to create a plug-in from a Java (.java) or Kotlin (.kt) source file:",84],["In the Assets folder, place your Java (.java) or Kotlin (.kt) source file.",84],["Tip**: It's best practice to create a sub-folder to contain your Java and Kotlin source files.",84],["Select the source file and view it in the Inspector window.",84],["In the Inspector, under the Select Platforms for plugin section, enable Android.",84],["Select Apply.",84],["Note**: You can place the source files in any folder in your Project, except in special use locations such as StreamingAssets. If you place files in these locations, the Unity Editor doesn't display the plug-in inspector.",84],["Edit Java or Kotlin files in an exported Android Studio project",84],["By default when you export a Unity project for Android, Unity copies any Java/Kotlin files over to the Android Studio project. If you edit these files in Android Studio, the changes aren't reflected in the original files in the Unity project. If you export the Unity project again, the export process will overwrite your changes in Android Studio.",84],["To resolve this, Unity provides the Symlink Sources Build Setting. If you select this Build Setting, Unity creates a symbolic link in the Android Studio project to Java/Kotlin files in the Unity project, instead of copying files over. This means that if you edit the files from Android Studio, the edit affects the files in the original Unity project.",84],["Additional resources",84],["Native plug-ins for Android",85],["Unity supports native plug-ins for Android applications so you can integrate middleware libraries or existing C/C++ code into your Unity application.",85],["Topic Description ",85],["------------------------------------------------------------ ----------------------------------------------------------- ",85],["Introducing native plug-ins for Android Understand native plug-ins for Android and their use-cases. ",85],["Create a native plug-in for Android Create a new native plug-in for Android applications. ",85],["Import a native plug-in for Android Import an existing native plug-in into your Unity project. ",85],["Call native plug-in for Android code Call native plug-in code from C# scripts. ",85],["Additional resources",85],["Extend the default Unity activity",86],["The UnityPlayerActivity of a Unity Android application is responsible for basic interactions between the Android operating system and the application. You can use plug-ins to create your own Activity that extends and overrides Unity's default UnityPlayerActivity.",86],["Topic Description ",86],["------------------------------------------------------------ ------------------------------------------------------------ ",86],["Create a custom activity Extend the default Unity activity to control interactions between Unity and Android. ",86],["Specify Android Player command-line arguments Specify startup command-line arguments to pass to Unity. ",86],["Additional resources",86],["Animation Clips",87],["Animation Clips are one of the core elements to Unity's animation system. Unity supports importing animation from external sources, and offers the ability to create animation clips from scratch within the editor using the Animation window.",87],["Animation from External Sources",87],["Animation clips imported from external sources could include:",87],["Humanoid animations captured at a motion capture studio",87],["Animations created from scratch by an artist in an external 3D application (such as Autodesk® 3ds Max® or Autodesk® Maya®)",87],["Animation sets from 3rd-party libraries (eg, from Unity's asset store)",87],["Multiple clips cut and sliced from a single imported timeline.",87],["Animation Created and Edited Within Unity",87],["Unity's Animation Window also allows you to create and edit animation clips. These clips can animate:",87],["The position, rotation and scale of GameObjects",87],["Component properties such as material colour, the intensity of a light, the volume of a sound",87],["Properties within your own scripts including float, integer, enum, vector and Boolean variables",87],["The timing of calling functions within your own scripts",87],["2017-10-02 ",87],["Integer properties within scripts can be animated in 2017.31 NewIn20173",87],["2D Button added to animation previewer 2017.3",87],["Curves",88],["You can attach animation curves to imported animation clips in the Animation tab.",88],["You can use these curves to add additional animated data to an imported clip. You can use that data to animate the timings of other items based on the state of an animator. For example, in a game set in icy conditions, an extra animation curve could be used to control the emission rate of a particle system to show the player's condensing breath in the cold air.",88],["To add a curve to an imported animation, expand the Curves section at the bottom of the Animation tab, and click the plus icon to add a new curve to the current animation clip:",88],["If your imported animation file is split into multiple animation clips, each clip can have its own custom curves.",88],["The curve's X-axis represents normalized time and always ranges between 0.0 and 1.0 (corresponding to the beginning and the end of the animation clip respectively, regardless of its duration).",88],["(A)** Wrapping mode",88],["(B)** Curve Presets",88],["Double-clicking an animation curve brings up the standard Unity curve editor which you can use to add keys to the curve. Keys are points along the curve's timeline where it has a value explicitly set by the animator rather than just using an interpolated value. Keys are very useful for marking important points along the timeline of the animation. For example, with a walking animation, you might use keys to mark the points where the left foot is on the ground, then both feet on the ground, right foot on the ground, and so on. Once the keys are set up, you can move conveniently between key frames by pressing the Previous Key Frame and Next Key Frame buttons. This moves the vertical red line and shows the normalized time at the keyframe. The value you enter in the text box drives the value of the curve at that time.",88],["Animation curves and animator controller parameters",88],["If you have a curve with the same name as one of the parameters in the Animator Controller, then that parameter takes its value from the value of the curve at each point in the timeline. For example, if you make a call to GetFloat from a script, the returned value is equal to the value of the curve at the time the call is made. Note that at any given point in time, there might be multiple animation clips attempting to set the same parameter from the same controller. In that case, Unity blends the curve values from the multiple animation clips. If an animation has no curve for a particular parameter, then Unity blends with the default value for that parameter.",88],["Animation Window Guide",89],["The Animation Window in Unity allows you to create and modify Animation Clips directly inside Unity. It is designed to act as a powerful and straightforward alternative to external 3D animation programs. In addition to animating movement, the editor also allows you to animate variables of materials and components and augment your Animation Clips with Animation Events, functions that are called at specified points along the timeline.",89],["See the pages about Animation import and Animation Scripting for further information about these subjects.",89],["Euler curve resampling",90],["Rotations in 3D applications are usually represented as Quaternions or Euler angles. For the most part, Unity represents rotations as Quaternions internally; however, it's important to have a basic understanding of rotation and orientation in Unity.",90],["When you import files containing animation that come from external sources, the imported files usually contain keyframe animation in Euler format. Unity's default behavior is to resample these animations as Quaternion values and generate a new Quaternion keyframe for every frame in the animation. This minimizes the differences between the source animation and how it appears in Unity.",90],["There are still some situations where the quaternion representation of the imported animation may not match the original closely enough, even with resampling. For this reason, Unity provides the option to turn off animation resampling. This means that you can use the original Euler animation keyframes at run-time instead.",90],["Note:** You should only keep the Euler curves as a last resort, if the default Quaternion interpolation between frames gives bad results and causes issues.",90],["Keeping the original Euler curves on imported animations",90],["To use the original Euler curve values in an animation file, uncheck the Resample Curves option in the Animation tab:",90],["When you disable this option, Unity keeps the rotation curve with its original keyframes, in Euler or Quaternion mode as appropriate for the curve type.",90],["Note:** The FBX SDK automatically resamples any rotation curve on a joint that has pre- or post-rotations. This means that Unity automatically imports them as Quaternion curves.",90],["Unity supports such a wide variety of imported files and attempts to keep the imported curves as close to the original as possible. In order to achieve this, Unity supports all normal (non-repeating) Euler rotation orders, and imports curves in their original rotation orders.",90],["Euler values and the Unity engine",90],["When using original Euler (non-resampled) rotations, you can see very little visual difference in the playback of animations. Under the hood, Unity stores these curves in Euler representation even at run-time. However, Unity has to convert rotation values to Quaternions eventually, since the engine only works with Quaternions.",90],["When you disable the Resample Curves option, Unity keeps the rotation values as Euler values up until they are applied to a GameObject. This means that the end result should look as good as the original, but with an improvement in memory, since rotation curves that have not been baked in the authoring software take up less memory.",90],["",90],["Non-default Euler orders in the Transform Inspector",90],["By default, Unity applies the Euler angles that appear in the Transform Inspector in the Z,X,Y order.",90],["When playing back or editing imported animations that feature Euler curves with a rotation order different from Unity’s default, Unity displays an indicator of the difference next to the rotation fields:",90],["When editing multiple transforms with differing rotation orders, Unity displays a warning message that the same Euler rotation applied will give different results on curves with different rotation orders:",90],["Events",91],["You can attach animation events to imported animation clips in the Animation tab.",91],["Events allow you to add additional data to an imported clip which determines when certain actions should occur in time with the animation. For example, for an animated character you might want to add events to walk and run cycles indicating when the footstep sounds should play.",91],["To add an event to an imported animation, expand the Events section to reveal the events timeline for the imported animation clip:",91],["To move the playback head to a different point in the timeline, use the timeline in the preview pane of the window:",91],["Position the playback head at the point where you want to add an event, then click Add Event. A new event appears, indicated by a small white marker on the timeline. in the Function property, fill in the name of the function to call when the event is reached.",91],["Make sure that any GameObject which uses this animation in its animator has a corresponding script attached that contains a function with a matching event name.",91],["The example below demonstrates an event set up to call the Swipe function in a script attached to the Player GameObject. This could be used in combination with an AudioSource to play a slashing sound synchronized with the animation.",91],["You can also choose to specify a parameter to be sent to the function called by the event. There are four different parameter types: Float, Int, String or Object.",91],["By filling out a value in one of these fields, and implementing your function to accept a parameter of that type, you can have the value specified in the event passed through to your function in the script.",91],["For example, you might want to pass a float value to specify how loud the sound effects should be during different actions, such as quiet footstep events on a walking loop and loud footstep events on a running loop. You could also pass a reference to an effect Prefab, allowing your script to instantiate different effects at certain points during your animation.",91],["A Glossary of animation terms",92],["Animation Clip terms",92],["Term: Definition: ",92],["Animation Clip Animation data that can be used for animated characters or simple animations. It is a simple \"unit\" piece of motion, such as (one specific instance of) \"Idle\", \"Walk\" or \"Run\". ",92],["Animation Curves Curves can be attached to animation clips and controlled by various parameters from the game. ",92],["Avatar Mask A specification for which body parts to include or exclude for a skeleton. Used in Animation Layers and in the importer. ",92],["Avatar terms",92],["Term: Definition: ",92],["Avatar An interface for retargeting one skeleton to another. ",92],["Retargeting Applying animations created for one model to another. ",92],["Rigging The process of building a skeleton hierarchy of bone joints for your mesh. Performed with an external tool, such as Autodesk® 3ds Max® or Autodesk® Maya®. ",92],["Skinning The process of binding bone joints to the character's mesh or 'skin'. Performed with an external tool, such as Autodesk® 3ds Max® or Autodesk® Maya®. ",92],["Muscle definition This allows you to have more intuitive control over the character's skeleton. When an Avatar is in place, the Animation system works in muscle space, which is more intuitive than bone space. ",92],["T-pose The pose in which the character has their arms straight out to the sides, forming a \"T\". The required pose for the character to be in, in order to make an Avatar. ",92],["Bind-pose The pose at which the character was modelled. ",92],["Human template A pre-defined bone-mapping. Used for matching bones from FBX files to the Avatar. ",92],["Translate DoF The three degrees-of-freedom associated with translation (movement in X,Y & Z) as opposed to rotation. ",92],["Animator and Animator Controller terms",92],["Term: Definition: ",92],["Animator Component Component on a model that animates that model using the Animation system. The component has a reference to an Animator Controller asset that controls the animation. ",92],["Root Motion Motion of character's root, whether it's controlled by the animation itself or externally. ",92],["Animator Controller The Animator Controller controls animation through Animation Layers with Animation State Machines and Animation Blend Trees, controlled by Animation Parameters. The same Animator Controller can be referenced by multiple models with Animator components. ",92],["Animator Window The window where the Animator Controller is visualized and edited. ",92],["Animation Layer An Animation Layer contains an Animation State Machine that controls animations of a model or part of it. An example of this is if you have a full-body layer for walking or jumping and a higher layer for upper-body motions such as throwing an object or shooting. The higher layers take precedence for the body parts they control. ",92],["Animation State Machine A graph controlling the interaction of Animation States. Each state references an Animation Blend Tree or a single Animation Clip. ",92],["Animation Blend Tree Used for continuous blending between similar Animation Clips based on float Animation Parameters. ",92],["Animation Parameters Used to communicate between scripting and the Animator Controller. Some parameters can be set in scripting and used by the controller, while other parameters are based on Custom Curves in Animation Clips and can be sampled using the scripting API. ",92],["Inverse Kinematics (IK) The ability to control the character's body parts based on various objects in the world. ",92],["Animation Layers",93],["Unity uses Animation Layers for managing complex state machines for different body parts. An example of this is if you have a lower-body layer for walking-jumping, and an upper-body layer for throwing objects / shooting.",93],["You can manage animation layers from the Layers Widget in the top-left corner of the Animator Controller.",93],["Clicking the gear wheel on the right of the window shows you the settings for this layer.",93],["On each layer, you can specify the mask and the Blending type. The mask specifies the body parts on which to apply the animation. The Blending type specifies how the animation is applied.",93],["Select Override to use the animation on this layer, replacing the animation on previous layers.",93],["Select Additive to add the animation on this layer on top of the animation from previous layers. For additive blending to be successful, the animation on the additive layer must contain the same properties as the previous layers.",93],["Add a new layer by pressing the + above the widget.",93],["The Mask property is there to specify the mask used on this layer. For example if you wanted to play a throwing animation on just the upper body of your model, while having your character also able to walk, run or stand still at the same time, you would use a mask on the layer which plays the throwing animation where the upper body sections are defined, like this:",93],["An 'M' symbol in the Layers sidebar indicates that the layer has a mask applied.",93],["Animation Layer syncing",93],["Sometimes it is useful to be able to re-use the same state machine in different layers. For example if you want to simulate \"wounded\" behavior, and have \"wounded\" animations for walk / run / jump instead of the \"healthy\" ones. You can click the Sync checkbox on one of your layers, and then select the layer you want to sync with. The state machine structure will then be the same, but the actual animation clips used by the states will be distinct.",93],["This means the Synced layer does not have its own state machine definition at all - instead, it is an instance of the source of the synced layer. Any changes you make to the layout or structure of the state machine in the synced layer view (eg, adding/deleting states or transitions) is done to the source of the synced layer. The only changes that are unique to the synced layer are the selected animations used within each state.",93],["The Timing checkbox allows the animator to adjust how long each animation in synced layers takes, determined by the weight. If Timing is unselected then animations on the synced layer will be adjusted. The adjustment will be stretched to the length of the animation on the original layer. If the option is selected the animation length will be a balance for both animations, based on weight. In both cases (chosen and not chosen) the animator adjusts the length of the animations. If not chosen then the original layer is the sole master. If chosen, it is then a compromise.",93],["An 'S' symbol in the Layers sidebar indicates that the layer is a synced layer.",93],[" 2021-07-07 ",93],["Mask",94],["Masking allows you to discard some of the animation data within a clip, allowing the clip to animate only parts of the object or character rather than the entire thing. For example, if you had a character with a throwing animation. If you wanted to be able to use the throwing animation in conjunction with various other body movements such as running, crouching and jumping, you could create a mask for the throwing animation limiting it to just the right arm, upper body and head. This portion of the animation can then be played in a layer over the top of the base running or jumping animations.",94],["Masking can be applied to your build, making filesize and memory smaller. It also makes for faster processing speed because there is less animation data to blend at run-time. In some cases, import masking may not be suitable for your purposes. In that case you can use the layer settings of the Animator Controller to apply a mask at run-time. This page relates to masking in the import settings.",94],["To apply a mask to an imported animation clip, expand the Mask heading to reveal the Mask options. When you open the menu, you'll see three options: Definition, Humanoid and Transform.",94],["Definition",94],["Allows you to specify whether you want to create a one-off mask in the inspector specially for this clip, or whether you want to use an existing mask asset from your project.",94],["If you want to create a one-off mask just for this clip, choose / Create From This Model /.",94],["If you are going to set up multiple clips with the same mask, you should select / Copy From Other Mask / and use a mask asset. This allows you to re-use a single mask definition for many clips.",94],["When Copy From Other Mask is selected, the Humanoid and Transform options are unavailable, since these relate to creating a one-off mask within the inspector for this clip.",94],["Humanoid",94],["The Humanoid option gives you a quick way of defining a mask by selecting or deselecting the body parts of a human diagram. These can be used if the animation has been marked as humanoid and has a valid avatar.",94],["Transform",94],["This option allows you to specify a mask based on the individual bones or moving parts of the animation. This gives you finer control over the exact mask definition, and also allows you to apply masks to non-humanoid animation clips.",94],["Animation system overview",95],["Unity has two animation systems with different capabilities and performance characteristics:",95],["Unity's animation system, also known as Mecanim, is a rich and sophisticated animation system. It uses the Animator component, the Animation window, and the Animator window. The remaining sections of this page describe this system.",95],["Unity's Legacy Animation system has a smaller feature set. It uses the Animation component and was the only animation system available before Unity 4.",95],["Unity's animation system is recommended in most situations and provides better performance for complex animations with many animation curves and blending. The Legacy Animation system can provide better performance for simpler animations with few animation curves, such as simple UI animations. You can use both systems in your project.",95],["Unity's animation system",95],["Unity's animation system provides the following features:",95],["Easy workflow and setup of animations for all elements of Unity including objects, characters, and properties.",95],["Support for imported animation clips and animation created within Unity",95],["Humanoid animation retargeting - the ability to apply animations from one character model onto another.",95],["Simplified workflow for aligning animation clips.",95],["Convenient preview of animation clips, transitions and interactions between them. This allows animators to work more independently of programmers, prototype and preview their animations before gameplay code is hooked in.",95],["Management of complex interactions between animations with a visual programming tool.",95],["Animating different body parts with different logic.",95],["Layering and masking features",95],["Animation workflow",95],["Unity's animation system is based on the concept of Animation Clips, which contain information about how certain objects should change their position, rotation, or other properties over time. Each clip can be thought of as a single linear recording. Animation clips from external sources are created by artists or animators with 3rd party tools such as Autodesk® 3ds Max® or Autodesk® Maya®, or come from motion capture studios or other sources.",95],["Animation Clips are then organised into a structured flowchart-like system called an Animator Controller. The Animator Controller acts as a \"State Machine\" which keeps track of which clip should currently be playing, and when the animations should change or blend together.",95],["A very simple Animator Controller might only contain one or two clips, for example to control a powerup spinning and bouncing, or to animate a door opening and closing at the correct time. A more advanced Animator Controller might contain dozens of humanoid animations for all the main character's actions, and might blend between multiple clips at the same time to provide a fluid motion as the player moves around the scene.",95],["Unity's Animation system also has numerous special features for handling humanoid characters which give you the ability to retarget humanoid animation from any source (for example: motion capture; the Asset Store; or some other third-party animation library) to your own character model, as well as adjusting muscle definitions. These special features are enabled by Unity's Avatar system, where humanoid characters are mapped to a common internal format.",95],["Each of these pieces - the Animation Clips, the Animator Controller, and the Avatar, are brought together on a GameObject via the Animator Component. This component has a reference to an Animator Controller, and (if required) the Avatar for this model. The Animator Controller, in turn, contains the references to the Animation Clips it uses.",95],["The above diagram shows the following:",95],["Animation clips are imported from an external source or created within Unity. In this example, they are imported motion captured humanoid animations.",95],["The animation clips are placed and arranged in an Animator Controller. This shows a view of an Animator Controller in the Animator window. The States (which may represent animations or nested sub-state machines) appear as nodes connected by lines. This Animator Controller exists as an asset in the Project window.",95],["The rigged character model (in this case, the astronaut \"Astrella\") has a specific configuration of bones which are mapped to Unity's common Avatar format. This mapping is stored as an Avatar asset as part of the imported character model, and also appears in the Project window as shown.",95],["When animating the character model, it has an Animator component attached. In the Inspector view shown above, you can see the Animator Component which has both the Animator Controller and the Avatar assigned. The animator uses these together to animate the model. The Avatar reference is only necessary when animating a humanoid character. For other types of animation, only an Animator Controller is required.",95],["Unity's animation system comes with a lot of concepts and terminology. If at any point, you need to find out what something means, go to our Animation Glossary.",95],["Animation Parameters",96],["Animation Parameters are variables that are defined within an Animator Controller that can be accessed and assigned values from scripts. This is how a script can control or affect the flow of the state machine.",96],["For example, the value of a parameter can be updated by an animation curve and then accessed from a script so that, say, the pitch of a sound effect can be varied as if it were a piece of animation. Likewise, a script can set parameter values to be picked up by Mecanim. For example, a script can set a parameter to control a Blend Tree.",96],["Default parameter values can be set up using the Parameters section of the Animator window, selectable in the top right corner of the Animator window. They can be of four basic types:",96],["Integer - a whole number",96],["Float - a number with a fractional part",96],["Bool - true or false value (represented by a checkbox)",96],["Trigger - a boolean parameter that is reset by the controller when consumed by a transition (represented by a circle button)",96],["Parameters can be assigned values from a script using functions in the Animator class: SetFloat, SetInteger, SetBool, SetTrigger and ResetTrigger.",96],["Here's an example of a script that modifies parameters based on user input and collision detection.",96],["using UnityEngine;",96],["using System.Collections;",96],["public class SimplePlayer : MonoBehaviour {",96],["Animator animator;",96],["// Use this for initialization",96],["void Start () {",96],["animator = GetComponent();",96],["// Update is called once per frame",96],["void Update () {",96],["float h = Input.GetAxis(\"Horizontal\");",96],["float v = Input.GetAxis(\"Vertical\");",96],["bool fire = Input.GetButtonDown(\"Fire1\");",96],["animator.SetFloat(\"Forward\",v);",96],["animator.SetFloat(\"Strafe\",h);",96],["animator.SetBool(\"Fire\", fire);",96],["void OnCollisionEnter(Collision col) {",96],["if (col.gameObject.CompareTag(\"Enemy\"))",96],["animator.SetTrigger(\"Die\");",96],["Motion",97],["Unity uses root motion to displace and orient the GameObject at the root of the Animator hierarchy for all Animation clips. Sometimes, it is necessary to select a different node to act as the root motion source rather than the designated node.",97],["To select a different Root Motion Node for all animation clips:",97],["Expand the Motion section.",97],["Select the new root motion source from the Root Motion Node menu. This menu list all the objects and nodes under the root of the imported file's hierarchy. This includes None (designated node) and Root Transform, your character's mesh objects, the root bone name, and a submenu for each item with child objects. Each submenu also contains the child object(s) themself and further sub-menus if those objects have child objects.",97],["Select Apply.",97],["When you select a different Root Motion Node, the newly selected root motion source overrides the manual root motion settings for each imported animation clip. This hides and overriddes the Root Transform Rotation, Root Transform Position (Y), and Root Transform Position (XZ) settings.",97],["Rotation in animations",98],["You can use Unity to animate your GameObject's rotations. There are different methods of applying these rotations to suit your project best.",98],["See Rotation and orientation in Unity for more information on rotational representations.",98],["Rotation interpolation",98],["You can use the Animation window to choose how Unity applies rotation to your GameObject. Unity uses interpolation to calculate how a GameObject visually moves from one orientation to another in your animation.",98],["Different interpolation methods look different in motion, but have the same result. Unity offers three types of interpolation for your animations:",98],["Euler angle interpolation",98],["Euler Angles** interpolation applies the full range of motion to the GameObject specified by the angles you enter; if the rotation is greater than 360 degrees, the GameObject rotates fully before it stops at the correct orientation.",98],["Euler Angles (Quaternion)** interpolation uses the above interpolation method but bakes the information into a quaternion curve. This method uses more memory but results in a slightly faster runtime.",98],["Quaternion interpolation",98],["Quaternion** interpolation rotates the GameObject across the shortest distance to a particular orientation. For example, regardless of whether the rotation value is 5 degrees or 365 degrees, the GameObject rotates 5 degrees.",98],["External animation sources",98],["Animation from external sources often contains rotational keyframe animation in Euler format. Unity resamples these animations and generates new keyframes for each frame in the animation to avoid rotations that exceed the valid range of rotational quaternions.",98],["For example, if you have two keyframes that are six frames apart with the x value going from 0 to 270 degrees, the GameObject rotates 90 degrees in the opposite direction because it's the shortest way to get to the same result. Instead, Unity resamples and adds a keyframe on every frame, so the rotation is only 45 degrees between keyframes and the rotation is correct.",98],["Resolve rotation problems with external animation sources",98],["If the quaternion resampling of the imported animation doesn't match the original closely enough for your needs, you can turn off animation resampling and use the original Euler animation keyframes at runtime. For more information, see Euler curve resampling.",98],["Additional resources",98],["Legacy Animation system",99],["Unity's Legacy Animation system is a simpler alternative to Unity's animation system.",99],["Working with Legacy Animations",99],["To import a Legacy Animation, first select Legacy as the Animation Type in the Rig tab of the Import Settings window:",99],["Make sure you enable the Import Animation option on the Animation tab.",99],["Animation Scripting (Legacy)",100],["Unity's Animation System allows you to create beautifully animated skinned characters. The Animation System supports animation blending, mixing, additive animations, walk cycle time synchronization, animation layers, control over all aspects of the animation playback (time, speed, blend-weights), mesh skinning with 1, 2 or 4 bones per vertex as well as supporting physically based rag-dolls and procedural animation. To obtain the best results, it is recommended that you read about the best practices and techniques for creating a rigged character with optimal performance in Unity on the Modeling Optimized Characters page.",100],["Making an animated character involves two things; moving it through the world and animating it accordingly. If you want to learn more about moving characters around, take a look at the Character Controller page. This page focuses on the animation. The actual animating of characters is done through Unity's scripting interface.",100],["You can download example demos showing pre-setup animated characters. Once you have learned the basics on this page you can also see the animation script interface.",100],["Animation Blending",100],["In today's games, animation blending is an essential feature to ensure that characters have smooth animations. Animators create separate animations, for example, a walk cycle, run cycle, idle animation or shoot animation. At any point in time during your game you need to be able to transition from the idle animation into the walk cycle and vice versa. Naturally, you want the transition to be smooth and avoid sudden jerks in the motion.",100],["This is where animation blending comes in. In Unity you can have any number of animations playing on the same character. All animations are blended or added together to generate the final animation.",100],["Our first step will be to make a character blend smoothly between the idle and walk animations. In order to make the scripter's job easier, we will first set the Wrap Mode of the animation to Loop. Then we will turn off Play Automatically to make sure our script is the only one playing animations.",100],["Our first script for animating the character is quite simple; we only need some way to detect how fast our character is moving, and then fade between the walk and idle animations. For this simple test, we will use the standard input axes:-",100],["function Update () {",100],["if (Input.GetAxis(\"Vertical\") > 0.2)",100],["animation.CrossFade (\"walk\");",100],["else",100],["animation.CrossFade (\"idle\");",100],["To use this script in your project:-",100],["Create a Javascript file using Assets > Create > Javascript.",100],["Copy and paste the code into it",100],["Drag the script onto the character (it needs to be attached to the GameObject that has the animation)",100],["When you hit the Play button, the character will start walking in place when you hold the up arrow key and return to the idle pose when you release it.",100],["Animation Layers",100],["Layers are an incredibly useful concept that allow you to group animations and prioritize weighting.",100],["Unity's animation system can blend between as many animation clips as you want. You can assign blend weights manually or simply use animation.CrossFade(), which will animate the weight automatically.",100],["Blend weights are always normalized before being applied",100],["Let's say you have a walk cycle and a run cycle, both having a weight of 1 (100%). When Unity generates the final animation, it will normalize the weights, which means the walk cycle will contribute 50% to the animation and the run cycle will also contribute 50%.",100],["However, you will generally want to prioritize which animation receives most weight when there are two animations playing. It is certainly possible to ensure that the weight sums up to 100% manually, but it is easier just to use layers for this purpose.",100],["Layering Example",100],["As an example, you might have a shoot animation, an idle and a walk cycle. The walk and idle animations would be blended based on the player's speed but when the player shoots, you would want to show only the shoot animation. Thus, the shoot animation essentially has a higher priority.",100],["The easiest way to do this is to simply keep playing the walk and idle animations while shooting. To do this, we need to make sure that the shoot animation is in a higher layer than the idle and walk animations, which means the shoot animation will receive blend weights first. The walk and idle animations will receive weights only if the shoot animation doesn't use all 100% of the blend weighting. So, when CrossFading the shoot animation in, the weight will start out at zero and over a short period become 100%. In the beginning the walk and idle layer will still receive blend weights but when the shoot animation is completely faded in, they will receive no weights at all. This is exactly what we need!",100],["function Start () {",100],["// Set all animations to loop",100],["animation.wrapMode = WrapMode.Loop;",100],["// except shooting",100],["animation[\"shoot\"].wrapMode = WrapMode.Once;",100],["// Put idle and walk into lower layers (The default layer is always 0)",100],["// This will do two things",100],["// - Since shoot and idle/walk are in different layers they will not affect",100],["// each other's playback when calling CrossFade.",100],["// - Since shoot is in a higher layer, the animation will replace idle/walk",100],["// animations when faded in.",100],["animation[\"shoot\"].layer = 1;",100],["// Stop animations that are already playing",100],["//(In case user forgot to disable play automatically)",100],["animation.Stop();",100],["function Update () {",100],["// Based on the key that is pressed,",100],["// play the walk animation or the idle animation",100],["if (Mathf.Abs(Input.GetAxis(\"Vertical\")) > 0.1)",100],["animation.CrossFade(\"walk\");",100],["else",100],["animation.CrossFade(\"idle\");",100],["// Shoot",100],["if (Input.GetButtonDown (\"Fire1\"))",100],["animation.CrossFade(\"shoot\");",100],["By default the animation.Play() and animation.CrossFade() will stop or fade out animations that are in the same layer. This is exactly what we want in most cases. In our shoot, idle, run example, playing idle and run will not affect the shoot animation and vice versa (you can change this behavior with an optional parameter to animation.CrossFade if you like).",100],["Animation Mixing",100],["Animation mixing allow you to cut down on the number of animations you need to create for your game by having some animations apply to part of the body only. This means such animations can be used together with other animations in various combinations.",100],["You add an animation mixing transform to an animation by calling AddMixingTransform() on the given AnimationState.",100],["Mixing Example",100],["An example of mixing might be something like a hand-waving animation. You might want to make the hand wave either when the character is idle or when it is walking. Without animation mixing you would have to create separate hand waving animations for the idle and walking states. However, if you add the shoulder transform as a mixing transform to the hand waving animation, the hand waving animation will have full control only from the shoulder joint to the hand. Since the rest of the body will not be affected by the hand-waving, it will continue playing the idle or walk animation. Consequently, only the one animation is needed to make the hand wave while the rest of the body is using the idle or walk animation.",100],["/// Adds a mixing transform using a Transform variable",100],["var shoulder : Transform;",100],["animation[\"wave_hand\"].AddMixingTransform(shoulder);",100],["Another example using a path.",100],["function Start () {",100],["// Adds a mixing transform using a path instead",100],["var mixTransform : Transform = transform.Find(\"root/upper_body/left_shoulder\");",100],["animation[\"wave_hand\"].AddMixingTransform(mixTransform);",100],["Additive Animations",100],["Additive animations and animation mixing allow you to cut down on the number of animations you have to create for your game, and are important for creating facial animations.",100],["Suppose you want to create a character that leans to the sides as it turns while walking and running. This leads to four combinations (walk-lean-left, walk-lean-right, run-lean-left, run-lean-right), each of which needs an animation. Creating a separate animation for each combination clearly leads to a lot of extra work even in this simple case but the number of combinations increases dramatically with each additional action. Fortunately additive animation and mixing avoids the need to produce separate animations for combinations of simple movements.",100],["Additive Animation Example",100],["Additive animations allow you to overlay the effects of one animation on top of any others that may be playing. When generating additive animations, Unity will calculate the difference between the first frame in the animation clip and the current frame. Then it will apply this difference on top of all other playing animations.",100],["Referring to the previous example, you could make animations to lean right and left and Unity would be able to superimpose these on the walk, idle or run cycle. This could be achieved with code like the following:-",100],["private var leanLeft : AnimationState;",100],["private var leanRight : AnimationState;",100],["function Start () {",100],["leanLeft = animation[\"leanLeft\"];",100],["leanRight = animation[\"leanRight\"];",100],["// Put the leaning animation in a separate layer",100],["// So that other calls to CrossFade won't affect it.",100],["leanLeft.layer = 10;",100],["leanRight.layer = 10;",100],["// Set the lean animation to be additive",100],["leanLeft.blendMode = AnimationBlendMode.Additive;",100],["leanRight.blendMode = AnimationBlendMode.Additive;",100],["// Set the lean animation ClampForever",100],["// With ClampForever animations will not stop",100],["// automatically when reaching the end of the clip",100],["leanLeft.wrapMode = WrapMode.ClampForever;",100],["leanRight.wrapMode = WrapMode.ClampForever;",100],["// Enable the animation and fade it in completely",100],["// We don't use animation.Play here because we manually adjust the time",100],["// in the Update function.",100],["// Instead we just enable the animation and set it to full weight",100],["leanRight.enabled = true;",100],["leanLeft.enabled = true;",100],["leanRight.weight = 1.0;",100],["leanLeft.weight = 1.0;",100],["// For testing just play \"walk\" animation and loop it",100],["animation[\"walk\"].wrapMode = WrapMode.Loop;",100],["animation.Play(\"walk\");",100],["// Every frame just set the normalized time",100],["// based on how much lean we want to apply",100],["function Update () {",100],["var lean = Input.GetAxis(\"Horizontal\");",100],["// normalizedTime is 0 at the first frame and 1 at the last frame in the clip",100],["leanLeft.normalizedTime = -lean;",100],["leanRight.normalizedTime = lean;",100],["Tip:** When using Additive animations, it is critical that you also play some other non-additive animation on every transform that is also used in the additive animation, otherwise the animations will add on top of the last frame's result. This is most certainly not what you want.",100],["Animating Characters Procedurally",100],["Sometimes you want to animate the bones of your character procedurally. For example, you might want the head of your character to look at a specific point in 3D space which is best handled by a script that tracks the target point. Fortunately, Unity makes this very easy, since bones are just Transforms which drive the skinned mesh. Thus, you can control the bones of a character from a script just like the Transforms of a GameObject.",100],["One important thing to know is that the animation system updates Transforms after the Update() function and before the LateUpdate() function. Thus if you want to do a LookAt() function you should do that in LateUpdate() to make sure that you are really overriding the animation.",100],["Ragdolls are created in the same way. You simply have to attach Rigidbodies, Character Joints and Capsule Colliders to the different bones. This will then physically animate your skinned character.",100],["Animation Playback and Sampling",100],["This section explains how animations in Unity are sampled when they are played back by the engine.",100],["AnimationClips are typically authored at a fixed frame rate. For example, you may create your animation in Autodesk® 3ds Max® or Autodesk® Maya® at a frame rate of 60 frames per second (fps). When importing the animation in Unity, this frame rate will be read by the importer, so the data of the imported animation is also sampled at 60 fps.",100],["However, games typically run at a variable frame rate. The frame rate may be higher on some computers than on others, and it may also vary from one second to the next based on the complexity of the view the camera is looking at at any given moment. Basically this means that we can make no assumptions about the exact frame rate the game is running at. What this means is that even if an animation is authored at 60 fps, it may be played back at a different framerate, such as 56.72 fps, or 83.14 fps, or practically any other value.",100],["As a result, Unity must sample an animation at variable framerates, and cannot guarantee the framerate for which it was originally designed. Fortunately, animations for 3D computer graphics do not consist of discrete frames, but rather of continuous curves. These curves can be sampled at any point in time, not just at those points in time that correspond to frames in the original animation. In fact, if the game runs at a higher frame rate than the animation was authored with, the animation will actually look smoother and more fluid in the game than it did in the animation software.",100],["For most practical purposes, you can ignore the fact that Unity samples animations at variable framerates. However, if you have gameplay logic that relies on animations that animate transforms or properties into very specific configurations, then you need to be aware that the re-sampling takes place behind the scenes. For example, if you have an animation that rotates an object from 0 to 180 degrees over 30 frames, and you want to know from your code when it has reached half way there, you should not do it by having a conditional statement in your code that checks if the current rotation is 90 degrees. Because Unity samples the animation according to the variable frame rate of the game, it may sample it when the rotation is just below 90 degrees, and the next time right after it reached 90 degrees. If you need to be notified when a specific point in an animation is reached, you should use an AnimationEvent instead.",100],["Note also that as a consequence of the variable framerate sampling, an animation that is played back using WrapMode.Once may not be sampled at the exact time of the last frame. In one frame of the game the animation may be sampled just before the end of the animation, and in the next frame the time can have exceeded the length of the animation, so it is disabled and not sampled further. If you absolutely need the last frame of the animation to be sampled exactly, you should use WrapMode.ClampForever which will keep sampling the last frame indefinitely until you stop the animation yourself.",100],["Animation",101],["Unity's Animation features include retargetable animations, full control of animation weights at runtime, event calling from within the animation playback, sophisticated state machine hierarchies and transitions, blend shapes for facial animations, and much more.",101],["Read this section to find out how to import and work with imported animation, and how to animate objects, colours, and any other parameters within Unity itself.",101],["Related tutorials:** Animation",101],["See the Knowledge Base Animation section for tips, tricks and troubleshooting.",101],["Animation from external sources",102],["Animation from external sources is imported into Unity in the same way as regular 3D files. These files, whether they're generic FBX files or native formats from 3D software such as Autodesk® Maya®, Cinema 4D, Autodesk® 3ds Max®, or Blender™, can contain animation data in the form of a linear recording of the movements of objects within the file.",102],["In some cases, the object to be animated (for example, a character) and its animations are in the same file. In other cases, the animations may exist in a separate file from the object to be animated.",102],["It may be that animations are specific to a particular model, and cannot be re-used on other models. For example, a giant octopus end-boss in your game might have a unique arrangement of limbs and bones, and its own set of animations.",102],["In other situations, it may be that you have a library of animations which are to be used on various different models in your scene. For example, a number of different humanoid characters might all use the same walk and run animations. In these situations, it's common to have a simple placeholder model in your animation files for the purposes of previewing them. Alternatively, it is possible to use animation files even if they have no geometry at all, just the animation data.",102],["When importing multiple animations, the animations can each exist as separate files within your project folder, or you can extract multiple animation clips from a single FBX file if exported as takes from Motion builder or with a plugin / script for Autodesk® Maya®, Autodesk® 3ds Max® or other 3D packages. You might want to do this if your file contains multiple separate animations arranged on a single timeline. For example, a long motion captured timeline might contain the animation for a few different jump motions, and you may want to cut out certain sections of this to use as individual clips and discard the rest. Unity provides animation cutting tools to achieve this when you import all animations in one timeline by allowing you to select the frame range for each clip.",102],["Importing animation files",102],["Before any animation can be used in Unity, it must first be imported into your project. Unity can import native Autodesk® Maya® (.mb or .ma), Autodesk® 3ds Max® (.max), and Blender™ (.blend), and also generic FBX files which can be exported from most animation packages. Note that importing from .blend files requires a local installation of Blender™.",102],["For more information, see Importing.",102],["Viewing and copying data from imported animation files",102],["You can view the keyframes and curves of imported animation clips in the Animation window. Sometimes, if these imported clips have lots of bones with lots of keyframes, the amount of information can look overwhelmingly complex. For example, the image below is what a humanoid running animation looks like in the Animation window:",102],["To simplify the view, select the specific bones you are interested in examining. The Animation window then displays only the keyframes or curves for those bones.",102],["When viewing imported Animation keyframes, the Animation window provides a read-only view of the Animation data. To edit this data, create a new empty Animation Clip in Unity (see Creating a new Animation Clip), then select, copy and paste the Animation data from the imported Animation Clip into your new, writable Animation Clip.",102],["Solo and Mute functionality",103],["In complex state machines, it is useful to preview the operation of some parts of the machine separately. For this, you can use the Mute and Solo functionality:",103],["Mute disables a transition.",103],["Solo plays only that transition.",103],["You can set up multiple Solo transitions to play only those that have Solo enabled. If one transition has Solo enabled, Unity enables Mute on the other transitions. If both Solo and Mute are enabled, then Mute takes precedence.",103],["You can set up Mute and Solo states either from the Transition Inspector, or the State Inspector, which provides an overview of all transitions from that state.",103],["Unity displays Solo transitions in green, and Mute transitions in red:",103],["In the example above, if you are in State 0, only transitions to State A and State B are available.",103],["Known issues:",103],["The Controller graph doesn't always reflect the internal Mute states of the engine.",103],["Animation State Machines",104],["It is common for a character or other animated Game Object to have several different animations that correspond to different actions it can perform in the game. For example, a character may breathe or sway slightly while idle, walk when commanded to and raise its arms in panic as it falls from a platform. A door may have animations for opening, closing, getting jammed, and being broken open. Mecanim uses a visual layout system similar to a flow-chart, to represent a state machine to enable you to control and sequence the animation clips that you want to use on your character or object. This section gives further details about Mecanim's state machines and explains how to use them.",104],["The Animator Controller Asset",105],["When you have animation clips ready to use, you need to use an Animator Controller to bring them together. An Animator Controller asset is created within Unity and allows you to maintain a set of animations for a character or object.",105],["Animator Controller assets are created from the Assets menu, or from the Create menu in the Project window.",105],["In most situations, it is normal to have multiple animations and switch between them when certain game conditions occur. For example, you could switch from a walk animation to a jump whenever the spacebar is pressed. However even if you just have a single animation clip you still need to place it into an animator controller to use it on a Game Object.",105],["The controller manages the various animation states and the transitions between them using a so-called State Machine, which could be thought of as a kind of flow-chart, or a simple program written in a visual programming language within Unity. More information about state machines can be found here. The structure of the Animator Controller can be created, viewed and modified in the Animator Window.",105],["The animator controller is finally applied to an object by attaching an Animator component that references them. See the reference manual pages about the Animator component and Animator Controller for further details about their use.",105],["Creating an AnimatorController",106],["Animator Controller",106],["You can view and set up character behavior from the Animator Controller view (Menu: Window > Animation > Animator).",106],["The various ways an Animator Controller can be created:",106],["From the Project View by selecting 'Create > Animator Controller'.",106],["By right-clicking in the Project View and selecting 'Create > Animator Controller'.",106],["From the Assets menu by selecting 'Assets > Create > Animator Controller'.",106],["This creates a .controller asset on disk. In the Project Browser window the icon will look like:",106],["Animator Window",106],["After the state machine setup has been made, you can drop the controller onto the Animator component of any character with an Avatar in the Hierarchy View.",106],["The Animator Controller window contains:",106],["The Animation Layer Widget (top-left corner, see Animation Layers)",106],["The Event Parameters Widget (top-left, see Animation Parameters)",106],["The visualization of the State Machine itself.",106],["Note that the Animator Controller Window will always display the state machine from the most recently selected .controller asset, regardless of what scene is currently loaded.",106],["Animator Controllers",107],["An Animator Controller allows you to arrange and maintain a set of animations for a character or other animated Game Object.",107],["The controller has references to the animation clips used within it, and manages the various animation states and the transitions between them using a so-called State Machine, which could be thought of as a kind of flow-chart, or a simple program written in a visual programming language within Unity.",107],["The following sections cover the main features that Mecanim provides for controlling and sequencing your animations.",107],["Animator Override Controllers",108],["The Animator Override Controller is a type of asset which allows you to extend an existing Animator Controller, replacing the specific animations used but otherwise retaining the original's structure, parameters and logic.",108],["This allows you to create multiple variants of the same basic state machine, but with each using different sets of animations. For example, your game may have a variety of NPC types living in the world, but each type (goblin, ogre, elf, etc) has their own unique animations for walking, idling, sitting, etc.",108],["By creating one \"base\" Animator Controller containing the logic for all NPC types, you could then create an override for each type and drop in their respective animation files.",108],["To demonstrate, here's a typical Animator Controller asset:",108],["This represents an Animator Controller containing a simple state machine with a blend tree controlling animations in four directions, plus an idle animation, looking like this:",108],["To extend this general NPC state machine to use unique animations which just apply to - say - an ogre-type character, you can create an Animator Override Controller and drop in the Ogre's animation clips as replacements to the original animation clips. The Ogre may have a different way of idling and moving around, perhaps with slower, heavier and more muscular motion. However, using an Animator Override Controller, the basic logic for how to transition and blend between movement states can be shared between different characters with different sets of animation, reducing the work required building and modifying state machines themselves.",108],["To create a new Animator Override Controller, use the Assets -> Create menu, or the Create button in the Project view, and select Animator Override Controller.",108],["The Animator Override Controller has a very similar icon to the Animator Controller, except that it has a \"plus\" sign rather than a \"play\" sign in the corner of the icon:",108],["When you select the new Animator Override Controller in the inspector, it will initially be unassigned, and will look like this:",108],["To begin using the Override Controller, you need to assign the original controller asset to the new Override Controller in the inspector. Once this is done, all the animations used in the original controller will show up as a list in the inspector of the override controller:",108],["You can then assign new animation clips to override the original's clips. In this example, all the clips have been overridden with the \"Ogre\" versions of the animation.",108],["This Override Controller can now be used in an animator component on the Ogre character's Game Object just as if it was an Animator Controller. It will use the same logic as the original Animator Controller, but play the new animations assigned instead of the originals.",108],["The Animator Window",109],["The Animator Window allows you to create, view and modify Animator Controller assets.",109],["The Animator window has two main sections: the main gridded layout area, and the left-hand Layers & Parameters pane.",109],["The main section with the dark grey grid is the layout area. You can use this area to create, arrange and connect states in your Animator Controller.",109],["You can right-click on the grid to create a new state node. Use the middle mouse button or Alt/Option drag to pan the view around. Click to select state nodes to edit them, and click & drag state nodes to rearrange the layout of your state machine.",109],["The left-hand pane can be switched betwen Parameters view and Layers view. The parameters view",109],["allows you to create, view and edit the Animator Controller Parameters. These are variables you define that act as inputs into the state machine. To add a parameter, click the Plus icon and select the parameter type from the pop up menu. To delete a parameter, select the parameter in the lists and press the delete key (on macOS use fn-Delete to delete the selected parameter).",109],["When the left-hand pane is switched to Layers view, you can create, view and edit layers within your Animator Controller. This allows you to have multiple layers of animation within a single animation controller working at the same time, each controlled by a separate state machine. A common use of this is to have a separate layer playing upper-body animations over a base layer that controls the general movement animations for a character.",109],["To add a layer, click the plus icon. To delete a layer, select the layer and press the delete key.",109],["Clicking the \"eye\" icon on or off will show or hide the Parameters & Layers side-pane, allowing you more room to see and edit your state machine.",109],["The \"breadcrumb\" hierarchical location within the current state machine. States can contain sub-states and trees and these structures can be nested repeatedly. When drilling down into sub states, the hierarchy of parent states and the current state being viewed is listed here. Clicking on the parent states allows you to jump back up to parent states or go straight back to the base layer of the state machine.",109],["Enabling the lock icon will keep the Animator Window focused on the current state machine. When the lock icon is off, clicking a new animator asset or a Game Object with an animator component will switch the Animator Window to show that item's state machine. Locking the window allows you to keep the Animator window showing the same state machine, regardless of which other assets or Game Objects are selected.",109],["Key manipulation in Dopesheet mode",110],["Box Selection is used to select multiple keys while viewing the Animation window in Dopesheet mode. This allows you to select and manipulate several keys at once.",110],["The following actions allow you to select multiple keys:",110],["Hold Shift+click to add individual keys to your selection",110],["Drag a rectangle with the mouse to select a group of keys",110],["Hold Shift and drag a rectangle to add or remove group of keys to the current selection",110],["As you add keys to the selection, Box Selection handles appear on either side of the selected keys. If you add or remove more keys to the selection, the handles automatically adapt their position and size to enclose all the currently selected keys.",110],["Use the Box Selection handles to move, scale and ripple-edit the selected keys (see Ripple editing, below).",110],["Moving selected keys",110],["Click anywhere within the Box Selection handles to drag the selected keys and move them. You do not need to click directly on a key to do this; you can drag by clicking the empty space within the Box Selection handles.",110],["While you drag, the time of first and last key is displayed under the timeline bar to help you place your keys at the desired position. While dragging a selection of keys to the left, any keys that end up at a negative time (that is, to the left of the 0 marker on the timeline) are deleted when you release the mouse button.",110],["Scaling selected keys",110],["When you have multiple keys selected, you can Scale the selected keys, either pulling them apart over a longer period of time (making the selected animation slower), or pushing them closer together to occupy a shorter period of time (making the selected animation faster). To scale the selected keys, click and hold either of the blue Box Selection handles at the left and right side of the selected keys, and drag horizontally.",110],["While you scale, the time of first and last key is displayed under the timeline bar to help you scale your keys to the desired position. When scaling a selection of keys down to a smaller amount of time, some keys might end up on the same frame as each other. If this happens, the extra keys that occupy the same frame are discarded when you release the mouse button, and only the last key is kept.",110],["Ripple editing",110],["Ripple editing is a method of moving and scaling selected keys. This method also affects non-selected keys on the same timeline as the keys that you are manipulating. The name refers to having the rest of your content automatically move along the timeline to accommodate content you have added, expanded or shrunk. The effects of your edit have a \"ripple effect\" along the whole timeline.",110],["Press and hold the R key while dragging inside the Box Selection to perform a Ripple Move. This has the effect of \"pushing\" any unselected keys, plus the original amount of space between your selection and those keys, to the left or right of your selection when you drag the selected keys along the timeline.",110],["Press and hold the R key while dragging a Box Selection handle to perform a Ripple Scale. The effect on the rest of the unselected keys in the timeline is exactly the same as with a Ripple Move - they are pushed to the left or right as you scale to the left or right side of your Box Selection.",110],["Animating a GameObject",111],["Once you have saved the new Animation clip Asset, you are ready to begin adding keyframes to the clip.",111],["There are two distinct methods you can use to animate GameObjects in the Animation window: Record Mode and Preview Mode.",111],["Record Mode.** (Also referred to as auto-key mode)",111],["In record mode, Unity automatically creates keyframes at the playback head when you move, rotate, or otherwise modify any animatable property on your animated GameObject. Press the button with the red circle to enable record mode. The Animation window time line is tinted red when in record mode.",111],["Preview Mode:**",111],["In preview mode, modifying your animated GameObject does not automatically create keyframes. You must manually create keyframes (see below) each time you modify your GameObject to a desired new state (for example, moving or rotating it). Press the Preview button to enable preview mode. The Animation window time line is tinted blue when in preview mode.",111],["Note: In record mode, the Preview button is also active, because you are previewing the existing animation and recording new keyframes at the same time.*",111],["Recording keyframes",111],["To begin recording keyframes for the selected GameObject, click on the Animation Record button. This enters Animation Record Mode, where changes to the GameObject are recorded into the Animation Clip.",111],["Once in Record mode you can create keyframes by setting the white Playback head to the desired time in the Animation time line, and then modify your GameObject to the state you want it to be at that point in time.",111],["The changes you make to the GameObject are recorded as keyframes at the current time shown by the white line (the playback head) in the Animation Window.",111],["Any change to an animatable property (such as its position or rotation) will cause a keyframe for that property to appear in the Animation window.",111],["Clicking or dragging in the time line bar moves the playback head and shows the state of the animation at the playback head's current time.",111],["In the screenshot below you can see the Animation window in record mode. The time line bar is tinted red, indicating record mode, and the animated properties show up with a red background in the inspector.",111],["You can stop the Record Mode at any time by clicking the Record button again. When you stop Record mode, the Animation window switches to Preview mode, so that you can still see the GameObject in its current position according to the animation time line.",111],["You can animate any property of the GameObject by manipulating it while in Animation Record Mode. Moving, Rotating or Scaling the GameObject adds corresponding keyframes for those properties in the animation clip. Adjusting values directly in the GameObject's inspector also adds keyframes while in Record mode. This applies to any animatable property in the inspector, including numeric values, checkboxes, colors, and most other values.",111],["Any properties of the GameObject that are currently animated are shown listed in the left-hand side of the Animation Window. Properties which are not animated are not shown in this window. Any new properties that you animate, including properties on child objects, are added to the property list area as soon as you start animating them.",111],["Transform properties are special in that the .x, .y, and .z properties are linked, so curves for all three are added at the same time.",111],["You can also add animatable properties to the current GameObject (and its children) by clicking the Add Property button. Clicking this button shows a pop up list of the GameObject's animatable properties. These correspond with the properties you can see listed in the inspector.",111],["When in Preview mode or Record mode, the white vertical line shows which frame of the Animation Clip is currently previewed. The Inspector and Scene View shows the GameObject at that frame of the Animation Clip. The values of the animated properties at that frame are also shown in a column to the right of the property names.",111],["In Animation Mode a white vertical line shows the currently previewed frame.",111],["Time line",111],["You can click anywhere on the Animation window time line to move the playback head to that frame, and preview or modify that frame in the Animation Clip. The numbers in the time line are shown as seconds and frames, so 1:30 means 1 second and 30 frames.",111],["Note: The time line appears tinted blue when in Preview mode, or tinted red when in Record mode.",111],["Creating keyframes in preview mode",111],["As well as using Record mode to automatically create keyframes when you modify a GameObject, you can create keyframes in Preview mode by modifying a property on the GameObject, then explicitly choosing to create a keyframe for that property.",111],["In preview mode, animated properties are tinted blue in the Inspector window. When you see this blue tint, it means these values are being driven by the keyframes of the animation clip currently being previewed in the animation window.",111],["If you modify any of these blue-tinted properties while previewing (such as rotating a GameObject that has its rotation property animated, as in the above screenshot) the GameObject is now in a modified animation state. This is indicated by a change of color in the tint of the inspector field to a pink color. Because you are not in record mode, your modification is not yet saved as a keyframe.",111],["For example, in the screenshot below, the rotation property has been modified to have a Y value of -90. This modification has not yet been saved as a keyframe in the animation clip.",111],["In this modified state, you must manually create a keyframe to \"save\" this modification. If you move the playback head, or switch your selection away from the animated GameObject, you will lose the modification.",111],["Manually creating keyframes",111],["There are three different ways to manually create a keyframe when you have modified a GameObject in preview mode.",111],["You can add a keyframe by right-clicking the property label of the property you have modified, which allows you to either add a keyframe for just that property, or for all animated properties:",111],["When you have added a keyframe, the new keyframe will be visible in the animator window as a diamond symbol (called out in red in the screenshot below), and the property field will return to a blue tint, indicating that your modification is saved as a keyframe, and that you are now previewing a value that is driven by the animation keyframes.",111],["You can also add a keyframe by clicking the Add Keyframe button in the Animation window:",111],["Or, you can add a keyframe (or keyframes) by using the hotkeys K or Shift-K as described below:",111],["Hotkeys",111],["K** - Key all animated. Adds an keyframe for all animated properties at the current position of the playback head in the animation window.",111],["Shift-K** - Key all modified. Adds an keyframe for only those animated properties which have been modified at the current position of the playback head in the animation window.",111],["2017-09-05 ",111],["Preview mode added in Unity 2017.1 NewIn20171",111],["Using Animation Curves",112],["The Property List",112],["In an Animation Clip, any animatable property can have an Animation Curve, which means that the Animation Clip controls how that property changes over time. In the property list area of the Animation View (on the left), all the currently animated properties are listed. With the Animation View in Dope Sheet mode, the animated values for each property appear only as linear tracks, however in Curves mode you are able to see the changing values of properties visualised as lines on graph. Whichever mode you use to view, the curves still exist - the Dope Sheet mode just gives you a simplified view of the data showing only when the keyframes occur.",112],["In Curves mode, the Animation Curves have colored curve indicators, each colour representing the values for one of the currently selected properties in the property list. For information on how to add curves to an animation property, see the section on Using the Animation View.",112],["Understanding Curves, Keys and Keyframes",112],["An Animation Curve has multiple keys which are control points that the curve passes through. These are visualized in the Curve Editor as small diamond shapes on the curves. A frame in which one or more of the shown curves have a key is called a keyframe.",112],["If a property has a key in the currently previewed frame, the curve indicator will have a diamond shape, and the property list will also have diamond shapes next to the value.",112],["The Curve Editor will only show curves for the properties that are selected. If multiple properties are selected in the property list, the curves will be shown overlaid together.",112],["Adding and Moving Keyframes",112],["You can add a keyframe at the currently previewed frame by clicking the Keyframe button.",112],["A keyframe can be added at the currently previewed frame by clicking the Keyframe button. This will add a keyframe to all currently selected curves. Alternatively you can add a keyframe to a single curve at any given frame by double-clicking the curve where the new keyframe should be. It is also possible to add a keyframe by right-clicking the Keyframe Line and select Add Keyframe from the context menu. Once placed, keyframes can be dragged around with the mouse. It is also possible to select multiple keyframes to drag at once. Keyframes can be deleted by selecting them and pressing Delete, or by right-clicking on them and selecting Delete Keyframe from the context menu.",112],["Supported Animatable Properties",112],["The Animation View can be used to animate much more than just the position, rotation, and scale of a Game Object. The properties of any Component and Material can be animated - even the public variables of your own scripts components. Making animations with complex visual effects and behaviors is only a matter of adding Animation Curves for the relevant properties.",112],["The following types of properties are supported in the animation system:",112],["Float",112],["Color",112],["Vector2",112],["Vector3",112],["Vector4",112],["Quaternion",112],["Boolean",112],["Arrays are not supported and neither are structs or objects other than the ones listed above.",112],["For boolean properties, a value of 0 equals False while any other value equals True.",112],["Here are a few examples of the many things the Animation View can be used for:",112],["Animate the Color and Intensity of a Light to make it blink, flicker, or pulsate.",112],["Animate the Pitch and Volume of a looping Audio Source to bring life to blowing wind, running engines, or flowing water while keeping the sizes of the sound assets to a minimum.",112],["Animate the Texture Offset of a Material to simulate moving belts or tracks, flowing water, or special effects.",112],["Animate the Emit state and Velocities of multiple Ellipsoid Particle Emitters to create spectacular fireworks or fountain displays.",112],["Animate variables of your own script components to make things behave differently over time.",112],["When using Animation Curves to control game logic, please be aware of the way animations are played back and sampled in Unity.",112],["Rotation Interpolation Types",112],["In Unity rotations are internally represented as Quaternions. Quaternions consist of .x, .y, .z, and .w values that should generally not be modified manually except by people who know exactly what they're doing. Instead, rotations are typically manipulated using Euler Angles which have .x, .y, and .z values representing the rotations around those three respective axes.",112],["When interpolating between two rotations, the interpolation can either be performed on the Quaternion values or on the Euler Angles values. The Animation View lets you choose which form of interpolation to use when animating Transform rotations. However, the rotations are always shown in the form of Euler Angles values no matter which interpolation form is used.",112],["Quaternion Interpolation",112],["Quaternion interpolation always generates smooth changes in rotation along the shortest path between two rotations. This avoids rotation interpolation artifacts such as Gimbal Lock. However, Quaternion interpolation cannot represent rotations larger than 180 degrees, due to its behaviour of always finding the shortest path. (You can picture this by picking two points on the surface of a sphere - the shortest line between them will never be more than half-way around the sphere).",112],["If you use Quaternion interpolation and set the numerical rotation values further than 180 degrees apart, the curve drawn in the animation window will still appear to cover more than a 180 degree range, however the actual rotation of the object will take the shortest path.",112],["When using Quaternion interpolation for rotation, changing the keys or tangents of either the x, y or z curve may also change the values of the other two curves, since all three curves are created from the internal Quaternion representation. When using Quaternion interpolation, keys are always linked, so that creating a key at a specific time for one of the three curves (x, y or z) will also create a key at that time for the other two curves.",112],["Euler Angles Interpolation",112],["Euler Angles interpolation is what most people are used to working with. Euler Angles can represent arbitrary large rotations and the .x, .y, and .z curves are independent from each other. Euler Angles interpolation can be subject to artifacts such as Gimbal Lock when rotating around multiple axes at the same time, but are intuitive to work with for simple rotations around one axis at a time. When Euler Angles interpolation is used, Unity internally bakes the curves into the Quaternion representation used internally. This is similar to what happens when importing animation into Unity from external programs. Note that this curve baking may add extra keys in the process and that tangents with the Constant tangent type may not be completely precise at a sub-frame level.",112],["Creating a new Animation Clip",113],["To create a new Animation Clip, select a GameObject in your Scene, and open the Animation Window (top menu:) Window > Animation > Animation.",113],["If the GameObject does not yet have any Animation Clips assigned, the \"Create\" button appears in the centre of the Animation Window timeline area (see Fig 1: Create a new Animation Clip).",113],["Click the Create button. Unity prompts you to save your new empty Animation Clip in your Assets folder.",113],["When you save this new empty Animation Clip, Unity does the following:",113],["Creates a new Animator Controller Asset",113],["Adds the new clip into the Animator Controller as the default state",113],["Adds an Animator Component to the GameObject that you are applying animation to",113],["Assigns the new Animator Controller to the Animator Component",113],["All the required elements of the animation system are now set up, and you can begin animating the GameObject.",113],["Adding another Animation Clip",113],["If the GameObject already has one or more Animation Clips assigned, the \"Create\" button is not visible. Instead, one of the existing clips is visible in the Animation window. To switch between Animation Clips, use the menu in the top-left of the Animation window, under the playback controls (see Fig 2: Adding more Animation Clips).",113],["To create a new Animation Clip on a GameObject that has existing animations, select Create New Clip from this menu. Again, Unity prompts you to save your new empty Animation Clip before you can work on it.",113],["How it fits together",113],["The above steps automatically set up the relevant components and references. However, it is useful to understand how the pieces connect.",113],["A GameObject must have an Animator component",113],["The Animator component must have an Animator Controller Asset assigned",113],["The Animator Controller asset must have one or more Animation Clips assigned",113],["The diagram below shows how Unity assigns these pieces, starting from the new Animation Clip in the Animation Window (see Fig 3: Animation Clip Diagram).",113],["After you create a new Animation Clip, you can now see:",113],["The Animation Window (top left) shows a timeline with a white playback head line, ready to record new keyframes. The clip's name is visible in the clip menu, just below the playback controls.",113],["The Inspector (center) shows that the \"Cube\" GameObject has an Animator Component, and the Controller field of the component shows that an Animator Controller Asset called Cube is assigned to it.",113],["The Project Window (bottom right) shows that two new Assets have been created: an Animator Controller asset called Cube and an Animation Clip Asset called Cube Animation Clip.",113],["The Animator Window (bottom left) shows the contents of the Animator Controller: there is a Cube Animation Clip on the controller, and that it is in the default state (as indicated by the orange color). Subsequent clips you add to the controller have a grey color, indicating they are not the default state (see Fig 4: New Animation Clip in the Project Window).",113],["2017-09-05 ",113],["Key manipulation in Curves mode",114],["Box Selection is used to select multiple keys while viewing the Animation window in Curves mode. This allows you to select and manipulate several keys at once.",114],["The following actions allow you to select multiple keys:",114],["Hold Shift+click to add individual keys to your selection",114],["Drag a rectangle with the mouse to select a group of keys",114],["Hold Shift and drag a rectangle to add or remove group of keys to the current selection",114],["As you add keys to the selection, Box Selection handles appear on either side of the selected keys, and at the top and bottom. If you add or remove more keys to the selection, the handles automatically adapt their position and size to enclose all the currently selected keys.",114],["Moving selected keys",114],["Click anywhere within the Box Selection handles to drag the selected keys and move them. You do not need to click directly on a key to do this; you can drag by clicking the empty space within the Box Selection handles.",114],["While you drag, the time of first and last key is displayed under the timeline bar to help you place your keys at the desired position. While dragging a selection of keys to the left, any keys that end up at a negative time (that is, to the left of the 0 marker on the timeline) are deleted when you release the mouse button.",114],["Scaling selected keys",114],["When you have multiple keys selected, you can Scale the selected keys. In Curve mode, you can scale horizontally to change the time placement of the keys, or vertically to change the value of the keys.",114],["Horizontally scaling selected keys",114],["Use the Box Selection handles to the left and right of the selected keys to scale the selection horizontally. This changes the time placement of the keys without modifying their values. Pull the handles apart to stretch the keys over a longer period of time (making the selected animation slower), or push them closer together to place the keys over a shorter period of time (making the selected animation faster).",114],["While you scale the selection horizontally, the minimum and maximum time of the keys are shown at the top of the view, to help you set your selection to the desired time.",114],["Vertically scaling selected keys",114],["Use the Box Selection handles to the top and bottom of the selected keys to scale the selection vertically. This changes the value of the keys without modifying their time placement.",114],["While you scale the selection vertically, the minimum and maximum time of the keys are shown to the left of the view, to help you set your selection to the desired values.",114],["Manipulation bars",114],["In addition to the Box Selection handles that appear around your selected keys, there are also grey manipulation bars to the top and left of the Curves window, which provide additional ways to manipulate the current selection.",114],["The manipulation bar at the top allows you to modify the time placement of the selected keys, while preserving their values. The bar at the side allows you to modify the values of the keys while preserving their time placement.",114],["When you have multiple keys selected, the bars at the top and right display a square at each end. Drag the centre of the bar to move the selected keys (either horizontally or vertically), or drag the squares at the end of each bar to scale the selected keys.",114],["Just like the Box Selection handles, when moving or scaling the selected keys using grey bars, the minimum and maximum values or keyframe times are shown. For the time manipulation bar (at the top of the window), the times of the first and last keyframes are displayed. For the value manipulation bar (at the left of the window), the lowest and highest values of the keys are displayed.",114],["Note**: the scale boxes at the end of the bars are only visible if you have multiple keys selected, and the view is sufficiently zoomed in so that the bar is long enough to show the scale boxes at each end.",114],["Ripple editing",114],["Ripple editing is a method of moving and scaling selected keys. This method also affects non-selected keys on the same timeline as the keys that you are manipulating. The name refers to having the rest of your content automatically move along the timeline to accommodate content you have added, expanded or shrunk. The effects of your edit have a \"ripple effect\" along the whole timeline.",114],["Press and hold the R key while dragging inside the Box Selection to perform a Ripple Move. This has the effect of \"pushing\" any unselected keys, plus the original amount of space between your selection and those keys, to the left or right of your selection when you drag the selected keys along the timeline.",114],["Press and hold the R key while dragging a Box Selection handle to perform a Ripple Scale. The effect on the rest of the unselected keys in the timeline is exactly the same as with a Ripple Move - they are pushed to the left or right as you scale to the left or right side of your Box Selection.",114],["Objects with Multiple Moving Parts",115],["You may want to animate Game Objects that have multiple moving parts, such as a gun turret with a moving barrel, or a character with many body parts. All the parts can be animated by a single Animation component on the parent, although it is useful to have additional Animation components on the children in some cases.",115],["Animating Child Game Objects",115],["The Game Object hierarchy is shown in the panel to the left of the Animation View.",115],["You can access the children of a Game Object by using the foldout triangle next to the object's name. The properties of child objects can be animated just like those of the parent.",115],["Alternatively you can select just the child Game Object you want to animate from the Hierarchy panel or the scene view, and manipulate the object or change its properties in the inspector, while in animation recording mode.",115],["Using the Animation view",116],["Use the Animation view to preview and edit Animation Clips for animated GameObjects in Unity. To open the Animation view in Unity, go to Window > Animation.",116],["Viewing Animations on a GameObject",116],["The Animation window is linked to the Hierarchy window, the Project window, the Scene view, and the Inspector window. Like the Inspector, the Animation window shows the timeline and keyframes of the Animation for the currently selected GameObject or Animation Clip Asset. You can select a GameObject using the Hierarchy window or the Scene View, or select an Animation Clip Asset using the Project Window.",116],["The Animated Properties list",116],["In the image below, the Animation view (left) shows the Animation used by the currently selected GameObject, and its child GameObjects if they are also controlled by this Animation. The Scene view and Hierarchy view are on the right, demonstrating that the Animation view shows the Animations attached to the currently selected GameObject.",116],["In the left side of the Animation view is a list of the animated properties. In a newly created clip where no animation has yet been recorded, this list is empty.",116],["When you begin to animate various properties within this clip, the animated properties will appear here. If the animation controls multiple child objects, the list will also include hierarchical sub-lists of each child object's animated properties. In the example above, various parts of the Robot Arm's GameObject hierarchy are all animated within the same animation clip.",116],["When animating a hierarchy of GameObjects within a single clip like this, make sure you create the Animation on the root GameObject in the hierarchy.",116],["Each property can be folded and unfolded to reveal the exact values recorded at each keyframe. The value fields show the interpolated value if the playback head (the white line) is between keyframes. You can edit these fields directly. If changes are made when the playback head is over a keyframe, the keyframe's values are modified. If changes are made when the playback head is between keyframes (and therefore the value shown is an interpolated value), a new keyframe is created at that point with the new value that you entered.",116],["The Animation Timeline",116],["On the right side of the Animation View is the timeline for the current clip. The keyframes for each animated property appear in this timeline. The timeline view has two modes, Dopesheet and Curves. To toggle between these modes, click Dopesheet or Curves at the bottom of the animated property list area:",116],["These offer two alternate views of the Animation timeline and keyframe data.",116],["Dopesheet mode",116],["Dopesheet** mode offers a more compact view, allowing you to view each property's keyframe sequence in an individual horizontal track. This allows you to view a simple overview of the keyframe timing for multiple properties or GameObjects.",116],["See documentation on Key manipulation in Dopesheet mode for more information.",116],["Curves mode",116],["Curves** mode displays a resizable graph containing a view of how the values for each animated property changes over time. All selected properties appear overlaid within the same graph view. This mode allows you to have great control over viewing and editing the values, and how they are interpolated between.",116],["Fitting your selection to the window",116],["When using Curves mode to view your Animation, it's important to understand that sometimes the various ranges for each property can differ greatly. For example, consider a simple Animation clip for a spinning bouncing cube. The bouncing Y position value may vary between the range 0 to 2 (meaning the cube bounces 2 units high during the animation); however, the rotation value goes from 0 to 360 (representing its degrees of rotation). When viewing these two curves at the same time, the animation curves for the position values will be very difficult to make out because the view will be zoomed out to fit the 0-360 range of the rotation values within the window:",116],["Press F on the keyboard to zoom the view to the currently selected keyframes. This is useful as a quick way to focus and re-scale the window on a portion of your Animation timeline for easier editing.",116],["Click on individual properties in the list and press F on the keyboard to automatically re-scale the view to fit the range for that value. You can also manually adjust the zoom of the Curves window by using the drag handles at each end of the view's scrollbar sliders. In the image below, the Animation Window is zoomed in to view the bouncing Y position Animation. The start of the yellow rotation curve is still visible, but now extends way off the top of the view:",116],["Press A on the keyboard to fit and re-scale the window to show all the keyframes in the clip, regardless of which ones are selected. This is useful if you want to view the whole timeline while preserving your current selection:",116],["Playback and frame navigation controls",116],["To control playback of the Animation Clip, use the Playback Controls at the top left of Animation view.",116],["From left-to-right, these controls are:",116],["Preview mode (toggle on/off).",116],["Record mode (toggle on/off). Note: Preview mode is on when record mode is on.",116],["Move playback head to the beginning of the clip.",116],["Move playback head to the previous keyframe.",116],["Play Animation.",116],["Move playback head to the next keyframe.",116],["Move playback head to the end of the clip.",116],["You can also control the playback head using the following keyboard shortcuts:",116],["Press Comma (,) to go to the previous frame.",116],["Press Period (.) to go to the next frame.",116],["Hold Alt (macOS: Option) and press Comma (,) to go to the previous keyframe.",116],["Hold Alt (macOS: Option) and press Period (.) to go to the next keyframe.",116],["Locking the window",116],["You can lock the Animation editor window so that it does not automatically switch to reflect the currently selected GameObject in the Hierarchy or Scene. Locking the window is useful if you want to focus on the Animation for one particular GameObject, and still be able to select and manipulate other GameObjects in the Scene.",116],["To learn more about navigating the Curve view, see documentation on Using Animation Curves.",116],["Registering an Action Handler",117],["You can register actions for a Search Provider. Users can access registered actions via the More Options (⋮) icon in the search results.",117],["\n Note: Registering an action handler and registering a Search Provider are different processes. You can register new action handlers for existing Search Providers.\n",117],["To register an action, you create a function tagged with the SearchActionsProvider attribute. This function must return an IEnumerable<SearchAction>.",117],["The following example shows how to register actions for the Asset Search Provider.",117],["```CSharp",117],["[SearchActionsProvider]",117],["internal static IEnumerable ActionHandlers()",117],["return new[]",117],["new SearchAction(\"asset\", \"select\", Icons.@goto, \"Select asset...\")",117],["handler = (item, context) =>",117],["var asset = AssetDatabase.LoadAssetAtPath(item.id);",117],["if (asset != null)",117],["Selection.activeObject = asset;",117],["EditorGUIUtility.PingObject(asset);",117],["EditorWindow.FocusWindowIfItsOpen(",117],["Utils.GetProjectBrowserWindowType());",117],["},",117],["new SearchAction(\"asset\", \"open\", SearchIcon.open, \"Open asset... (Alt+Enter)\")",117],["handler = (item, context) =>",117],["var asset = AssetDatabase.LoadAssetAtPath(item.id);",117],["if (asset != null)",117],["AssetDatabase.OpenAsset(asset);",117],["},",117],["new SearchAction(\"asset\", \"reveal\", SearchIcon.folder, \"Show in Explorer\")",117],["handler = (item, context) =>",117],["EditorUtility.RevealInFinder(item.id);",117],["};",117],["Search actions",117],["The SearchAction class describes an action and provides a handler to execute the action on a specific SearchItem.",117],["```CSharp",117],["public class SearchAction",117],["public SearchAction(string providerType, string name,",117],["Texture2D icon = null,",117],["string tooltip = null);",117],["public ActionHandler handler;",117],["public EnabledHandler isEnabled;",117],["The providerType is the unique ID of the provider that you register the action for.",117],["The ActionHandler has the following signature:",117],["```CSharp",117],["// item: item that needs the action to be executed.",117],["// context: search context of the SearchTool when the item is executed.",117],["public delegate void ActionHandler(SearchItem item, SearchContext context);",117],["You can set up an action with the isEnabled predicate, which determines whether an action is available for a specific item.",117],["Contextual search actions",117],["To provide contextual (right-click) actions for specific types of items in search results, register an action named context for the Search Provider.",117],["The following example is from the Asset Search Provider:",117],["```CSharp",117],["new SearchAction(type, \"context\", null, \"Context\")",117],["handler = (item, context) =>",117],["var asset = AssetDatabase.LoadAssetAtPath(item.id);",117],["if (asset != null)",117],["Selection.activeObject = asset;",117],["EditorUtility.DisplayPopupMenu(",117],["QuickSearchTool.ContextualActionPosition,",117],["\"Assets/\", null);",117],["Registering a Search Provider",118],["To add a new Search Provider, create a function and tag it with the SearchItemProvider attribute, as in the following example:",118],["```CSharp",118],["[SearchItemProvider]",118],["internal static SearchProvider CreateProvider()",118],["return new SearchProvider(type, displayName)",118],["filterId = \"me:\",",118],["fetchItems = (context, items, provider) =>",118],["var itemNames = new List();",118],["var shortcuts = new List();",118],["GetMenuInfo(itemNames, shortcuts);",118],["items.AddRange(itemNames.Where(menuName =>",118],["SearchProvider.MatchSearchGroups(context.searchText, menuName))",118],[".Select(menuName => provider.CreateItem(menuName,",118],["Path.GetFileName(menuName), menuName)));",118],["},",118],["fetchThumbnail = (item, context) => Icons.shortcut",118],["};",118],["\nThe function must return a new SearchProvider instance.\n",118],["\nThe SearchProvider instance must have the following:\n",118],["\nA unique type. For example, Asset, Menu, or Scene.\n",118],["\nA displayName to use in the Filters pane.\n",118],["\nThe optional filterId provides a search token for text-based filtering. For example, p: is the filter ID for Asset searches.\n",118],["Registering a Search Provider shortcut",118],["To register a shortcut for a new provider, use:",118],["```CSharp",118],["[UsedImplicitly, Shortcut(\"Help/Quick Search/Assets\")]",118],["private static void PopQuickSearch()",118],["// Open Search with only the \"Asset\" provider enabled.",118],["SearchService.ShowContextual(\"asset\");",118],["You can map shortcuts to keys or key combinations using the shortcuts manager.",118],["The SearchProvider class",119],["The SearchProvider class executes searches for specific types of items, and manages thumbnails, descriptions, and sub-filters.",119],["It has the following basic API:",119],["```CSharp",119],["public class SearchProvider",119],["public SearchProvider(string id, string displayName = null);",119],["// Creates an Item bound to this provider.",119],["public SearchItem CreateItem(string id, string label = null, string description = null, Texture2D thumbnail = null);",119],["// Utility functions to check whether the search text matches a string.",119],["public static bool MatchSearchGroups(string searchContext, string content);",119],["public static bool MatchSearchGroups(string searchContext, string content,",119],["out int startIndex, out int endIndex);",119],["// The provider's unique ID.",119],["public NameId name;",119],["// Text token to \"filter\" a provider (for example, \"me:\", \"p:\", and \"s:\").",119],["public string filterId;",119],["// This provider is only active when a search explicitly specifies it with",119],["// its filterId.",119],["public bool isExplicitProvider;",119],["// Handler to fetch and format the label of a search item.",119],["public FetchStringHandler fetchLabel;",119],["// Handler to provide an async description for an item. Called just before",119],["// Search displays the item.",119],["// Allows a plug-in provider to fetch long descriptions only when",119],["// Search needs them.",119],["public FetchStringHandler fetchDescription;",119],["// Handler to provider an async thumbnail for an item. Called just before",119],["// Search displays the item.",119],["// Allows a plug-in provider to fetch/generate previews only when",119],["// Search needs them.",119],["public PreviewHandler fetchThumbnail;",119],["// Handler to support drag interactions. It is up to the SearchProvider",119],["// to properly set up the DragAndDrop manager.",119],["public StartDragHandler startDrag;",119],["// Called when the selection changes and Search can track it.",119],["public TrackSelectionHandler trackSelection;",119],["// MANDATORY: Handler to get items for a search context.",119],["public GetItemsHandler fetchItems;",119],["// A Search Provider can return a list of words that help the user complete",119],["// their search query.",119],["public GetKeywordsHandler fetchKeywords;",119],["// List of sub-filters that are visible in the FilterWindow for a",119],["// SearchProvider (see AssetProvider for an example).",119],["public List subCategories;",119],["// Called when the Search window opens. Allows the Provider to perform",119],["// some caching.",119],["public Action onEnable;",119],["// Called when the Search window closes. Allows the Provider to release",119],["// cached resources.",119],["public Action onDisable;",119],["// Int to sort the Provider. Affects the order of search results and the",119],["// order in which providers are shown in the FilterWindow.",119],["public int priority;",119],["// Called when Search opens in \"contextual mode\". If you return true",119],["// it means the provider is enabled for this search context.",119],["public IsEnabledForContextualSearch isEnabledForContextualSearch;",119],["Caching and releasing resources",119],["When you launch the Search window, it calls onEnable, which you can use to cache resources.",119],["When you close the Search window, it calls onDisable, which you can use to release resources.",119],["Initialization",119],["Because the Search item list uses a virtual scrolling algorithm, some SearchItem fields (for example, label, thumbnail, and description) are fetched on demand, if they are not already provided.",119],["To populate those fields after the items are created, you need to initialize the SearchProvider with specific handlers (fetchLabel, fetchDescription, fetchThumbnail).",119],["Tracking item selection",119],["You can register a callback on trackSelection to have Search do something whenever you select an item in the search results using the mouse or the keyboard. For example, the Asset and Scene providers use the trackSelection callback to ping the selected item in Search.",119],["Enabling drag and drop",119],["Some Search Providers return items that you can drag and drop into the Scene. If you are creating a custom provider whose items support drag and drop, implement startDrag.",119],["For example, the Asset and Scene providers populate the DragAndDrop structure with the relevant item UIDs to allow proper drag and drop interactions.",119],["Including a provider in a contextual search",119],["When you open the Search window with the Alt Shift + C shortcut, it starts a contextual search, meaning Search searches the window that has focus.",119],["When you launch a contextual search, providers that override isEnabledForContextualSearch check to see if they should be enabled, as in the following example:",119],["```CSharp",119],["// Taken from Scene hierarchy provider:",119],["// Makes the provider part of the contextual search if the Scene view or the",119],["// Hierarchy window has focus.",119],["isEnabledForContextualSearch = () =>",119],["QuickSearchTool.IsFocusedWindowTypeName(\"SceneView\") ",119],["QuickSearchTool.IsFocusedWindowTypeName(\"SceneHierarchyWindow\");",119],["Performing a search",120],["Search Providers use the fetchItems function to search for items and filter the results. The fetchItems function has the following signature:",120],["```CSharp",120],["// context: the necessary search context (for example, tokenized search and",120],["// sub-filters).",120],["// items: list of items to populate (if not using the asynchronous api)",120],["// provider: the Search Provider itself",120],["public delegate IEnumerable GetItemsHandler(SearchContext context,",120],["List items,",120],["SearchProvider provider);",120],["The SearchProvider must add new SearchItems to the items list or return an IEnumerable<SearchItem>.",120],["\n Note: If you do not use the asynchronous fetchItems API, you must return null in your fetchItems function.\n",120],["A SearchItem is a simple struct:",120],["```CSharp",120],["public struct SearchItem",120],["public readonly string id;",120],["// The item score affects how Search sorts the item within the results from the Search Provider.",120],["public int score;",120],["// Optional: Display name of the item. If the item does not have one,",120],["// SearchProvider.fetchLabel is called).",120],["public string label;",120],["// If the item does not have a description SearchProvider.fetchDescription",120],["// is called when Search first displays the item.",120],["public string description;",120],["// If true, the description already has rich text formatting.",120],["public SearchItemDescriptionFormat descriptionFormat;",120],["// If the item does not have a thumbnail, SearchProvider.fetchThumbnail",120],["// is called when Search first displays the item.",120],["public Texture2D thumbnail;",120],["// Search Provider user-customizable content",120],["public object data;",120],["A SearchItem only requires the id.",120],["\n Tip: When you filter according to SearchContext.searchText use the static function SearchProvider.MatchSearchGroup which makes a partial search.\n",120],["Using fuzzy search",120],["To use fuzzy search on an item, you can use FuzzySearch.FuzzyMatch, as in the following example:",120],["```CSharp",120],["if (FuzzySearch.FuzzyMatch(sq, CleanString(item.label), ref score, matches))",120],["item.label = RichTextFormatter.FormatSuggestionTitle(item.label, matches);",120],["All search items are sorted against items of the same provider with their score. The lower score appears at the top of the item list (ascending sorting).",120],["Asynchronous search API",120],["You can use the asynchronous fetchItems API when a Search Provider takes a long time to compute its results, or relies on an asynchronous search engine such as WebRequests.",120],["To use the asynchronous API, have the fetchItems function return an IEnumerable<SearchItem>. The IEnumerable<SearchItem> should be a function that yields results, so that the API can fetch one item at a time.",120],["When an IEnumerable<SearchItem> is returned, the enumerator is stored and iterated over during an application update. Enumeration continues over multiple application updates until it is finished.",120],["The iterating time is constrained to ensure the UI is not blocked. However, because the call is in the main thread, you should make sure to yield as soon as possible if the results are not ready.",120],["The following example demonstrates how to use the asynchronous fetchItems API:",120],["```CSharp",120],["public class AsyncSearchProvider : SearchProvider",120],["public AsyncSearchProvider(string id, string displayName = null)",120],[": base(id, displayName)",120],["fetchItems = (context, items, provider) => FetchItems(context, provider);",120],["private IEnumerable FetchItems(SearchContext context, SearchProvider provider)",120],["while(ResultsNotReady())",120],["yield return null;",120],["var oneItem = // Get an item",120],["yield return oneItem;",120],["var anotherItem = // Get another item",120],["yield return anotherItem;",120],["if(SomeConditionThatBreaksTheSearch())",120],["// Search must be terminated",120],["yield break;",120],["// You can iterate over an enumerable. The enumeration",120],["// continues where it left.",120],["foreach(var item in someItems)",120],["yield return item;",120],["\nAssetStoreProvider.cs: queries the Asset Store using WebRequest.\n",120],["\nESS.cs: creates a process to start the Entrian Source search indexer, which provides full text search for Assets in your Project.\n",120],["Creating a custom Search Provider",121],["You can use the Search API to create your own Search Providers.",121],["This section provides an overview and examples of how to:",121],["\nCreate the SearchProvider.\n",121],["\nRegister the SearchProvider.\n",121],["\nAdd a search and fetch function.\n",121],["\nCreate action handlers.\n",121],["API updater",122],["To improve usability and performance, Unity might change the way classes, functions and properties (the API) work. Occasionally, these improvements might introduce breaking changes when moving from one major Unity version to another.",122],["To minimize the impact of breaking changes, the API updater identifies and updates obsolete code in your scripts and assemblies.",122],["The API updater consists of the ScriptUpdater and the AssemblyUpdater, which are responsible for updating source code (scripts) and assemblies (dll files) respectively.",122],["Note**: The API Updater can only fix certain errors and warnings in the API. These are indicated as UnityUpgradable in the console message. You must manually resolve other errors or warnings that the API Updater cannot handle.",122],["Using the API updater",122],["When a script compilation is triggered, the API updater runs automatically. For example, this occurs when you:",122],["Open a project.",122],["Import a package.",122],["Save changes to a script.",122],["The API updater offers to update any obsolete code that it detects. If you accept, it rewrites any obsolete code with the recommended updated version of the API.",122],["For example, the API updater would convert the following obsolete statement from:",122],["light.color = Color.red;",122],["to:",122],["GetComponent().color = Color.red;",122],["The steps below describe the workflow of the API updater when Unity triggers a script compilation:",122],["Unity triggers a script compilation.",122],["The API updater checks for updatable compiler errors or warnings that it can handle.",122],["If it doesn’t find any errors or warnings, the process ends.",122],["If it finds any errors or warnings, it displays a dialog offering an automatic update.Close the Editor and back up your project before you let the API updater update your scripts or assemblies. When you reopen your project, Unity compiles your scripts and triggers the API updater.",122],["If you accept the update, the API updater updates all scripts in the same compilation unit.",122],["The API Updater repeats this process until it detects no more errors or warnings that it can handle.",122],["The updater can run multiple times if scripts with obsolete code fall into different compilation passes, for example, editor scripts.",122],["If you don’t allow the API updater to update your scripts, the console displays any script errors or warnings. Errors or warnings which the API updater could resolve display (UnityUpgradable) in the message.",122],["If your script has other errors which prevent the API updater from running successfully, the Console displays a message to inform you of this. You must resolve those errors before the API Updater can complete the updates.",122],["Command line arguments related to API Updater",122],["When running Unity in batch mode from the command line, use the -accept-apiupdate option to run the API updater. For more information, see Command Line Arguments.",122],["Logging",122],["The API updater logs changes it makes to any assemblies to the Editor log. To control how much information is logged, set the UNITY_APIUPDATER_LOG_THRESHOLD environment variable to the desired log threshold and start Unity. For example:",122],["On Windows:",122],["c:> set UNITY_APIUPDATER_LOG_THRESHOLD=Debug",122],["c:> \\path\\to\\unity\\Unity.exe",122],["On Linux:",122],["$ export UNITY_APIUPDATER_LOG_THRESHOLD=Debug",122],["$ /path/to/unity/Unity",122],["On Mac:",122],["$ export UNITY_APIUPDATER_LOG_THRESHOLD=Debug",122],["$ /path/to/unity/Unity",122],["Note**: You can also use version control to see changes the API updater makes to a project’s scripts.",122],["When AssemblyUpdater has finished, the Editor.log displays the changes. For example:",122],["[AssemblyUpdater] Property access to 'UnityEngine.Rigidbody",122],["UnityEngine.GameObject::get_rigidbody()' in 'System.Void",122],["Test.ClassReferencingObsoleteUnityAPIThroughEditorAssembly::Run()' replaced with 'T",122],["UnityEngine.GameObject::GetComponent()'.",122],["The table below describes the values for the UNITY_APIUPDATER_LOG_THRESHOLD environment variable:",122],["Log threshold Description ",122],["",122],["Error (default value) The API updater only logs Error messages. Error messages are logged when the API updater fails to apply a specific update, which requires you to take corrective action (usually requesting the original assembly author to provide an updated version of the assembly). ",122],["Warning The API updater logs Warning and Error messages. Warning messages are logged when the API updater applies a change that the user might need to review. ",122],["Info The API updater logs Informational, Warning and Error messages. Info messages include updates applied by the AssemblyUpdater. ",122],["Debug The API updater logs all messages. This is useful for troubleshooting, for example if you have issues with the API updater that you want to report to Unity. ",122],["Troubleshooting",122],["API Updating failed. Check previous console messages.",122],["The API updater couldn’t update all obsolete code. This can occur if the updater can’t save its changes, for example if the user has read-only permissions on the script.",122],["Check the previous lines in the console to see any problems that occurred during the update process.",122],["2018-07-31 ",122],["\"accept-apiupdate\" command line option added in Unity 2017.2",122],["AssemblyUpdater logging improved in Unity [2018.3] (https://docs.unity3d.com/2018.3/Documentation/Manual/30_search.html?q=newin20183) NewIn20183",122],["macOS",123],["This section of the User Manual has information on Unity development for macOS.",123],["Topic Description ",123],["",123],["macOS player settings Reference documentation for macOS Player Settings. ",123],["macOS development Details macOS specific development information ",123],["Build and distribute a macOS application Describes how to build and publish your macOS application. ",123],["App thinning",124],["The Apple store and iOS optimize the installation of iOS, tvOS, and watchOS apps by tailoring app delivery to the capabilities of a user’s particular device. This optimization is called app thinning. App thinning lets you create apps that use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. Learn more about this optimization process on Apple's Developer Library page on App Thinning.",124],["Unity lets you implement the following two major components for app thinning:",124],["",124],["On-demand resources",124],["On-demand resources (ODR) is a feature available for the iOS and tvOS platforms, from version 9.0 of iOS and tvOS onwards. It allows you to reduce the size of your application by separating the core Assets (those that are needed from application startup) from Assets which may be optional, or which appear in later levels of your game. These additional Assets are called AssetBundles that are available across all Unity build targets, but you must take additional steps to enable them for hosting from the App Store.",124],["AssetBundles can contain Asset files such as models, Materials, Textures, and Scenes, but they can't include scripts. Therefore, all your scripting logic must reside in the main application. Apple recommends that an AssetBundle be no larger than 64MB in size, to reduce loading time (particularly over-the-air) and minimize the amount of storage space used on the device.",124],["Setting up ODR",124],["To set up your project for ODR, first check that your build type is set to iOS. In the menu bar, go to File > Build Settings.",124],["If it isn’t already selected, click on iOS, then click the Switch Platform button. Next, click the Player Settings button. In the Inspector window, open Other Settings, navigate to the Configuration section, and enable the Use on demand resources checkbox.",124],["Creating an AssetBundle",124],["First, create a new folder to group the Assets you want to place into an AssetBundle. To do this, right-click inside the Project window and go to Create > Folder (or click Create > Folder in the top-left of the Project window).",124],["Select the Asset files you wish to add to the AssetBundle, then drag-and-drop them into your new folder.",124],["When creating an AssetBundle, you need to assign it a tag, which is used as an identifier when requesting the AssetBundle download. It’s good practice to create a label that matches the bundle’s filename; this ensure a unique label, and makes it easier to recognise when you are working with it later.",124],["To create or assign a tag, select your new folder and navigate to the Asset Labels section at the bottom of the Inspector window. Click the left-hand drop-down menu, select New, and enter the name of your new label. Note that AssetBundle labels must be lower-case.",124],["In this example, a folder called Textures is being given a new label.",124],["To generate the new AssetBundle file, you must references the new label in an Editor script. To create an Editor script, create a new folder inside the Project window called Editor. Right-click on the Editor folder and select Create > C# Script. Name the new script BuildiOSAssetBundles.cs.",124],["In this example, the Textures folder has the label textures and the new script BuildiOSAssetBundles.cs is created in the Editor folder.",124],["Open BuildiOSAssetBundles.cs and copy in the code below. In this example, the label textures is used; change this throughout with the name of your label (in lower-case text).",124],["Note that this example uses uncompressed bundles; however, this isn't a requirement for app thinning.",124],["using UnityEngine;",124],["using UnityEditor;",124],["public class BuildiOSAssetBundles : MonoBehaviour",124],["[InitializeOnLoadMethod]",124],["static void SetupResourcesBuild( )",124],["UnityEditor.iOS.BuildPipeline.collectResources += CollectResources;",124],["static UnityEditor.iOS.Resource[] CollectResources( )",124],["return new UnityEditor.iOS.Resource[]",124],["new UnityEditor.iOS.Resource( \"textures\", \"Assets/ODR/textures\" ).AddOnDemandResourceTags( \"textures\" ),",124],["new UnityEditor.iOS.Resource( \"bundle\", \"Assets/Bundles/bundle.unity3d\" ).AddOnDemandResourceTags( \"bundle\" ),",124],["};",124],["[MenuItem( \"Bundle/Build iOS AssetBundle\" )]",124],["static void BuildAssetBundles( )",124],["var options = BuildAssetBundleOptions.None;",124],["bool shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;",124],["if UNITY_TVOS",124],["shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.tvOS;",124],["endif",124],["if( shouldCheckODR )",124],["if ENABLE_IOS_ON_DEMAND_RESOURCES",124],["if( PlayerSettings.iOS.useOnDemandResources )",124],["options = BuildAssetBundleOptions.UncompressedAssetBundle;",124],["endif",124],["if ENABLE_IOS_APP_SLICING",124],["options = BuildAssetBundleOptions.UncompressedAssetBundle;",124],["endif",124],["BuildPipeline.BuildAssetBundles( \"Assets/ODR\", options, EditorUserBuildSettings.activeBuildTarget );",124],["The significant line in the above code sample is the following, which takes the files tagged with the textures label and creates an AssetBundle file called textures within the Assets/ODR folder:",124],["new UnityEditor.iOS.Resource( \"textures\", \"Assets/ODR/textures\" ).AddOnDemandResourceTags( \"textures\" )",124],["For demonstration purposes, the above code sample also includes the following line, which adds an AssetBundle called bundle that's already built - for example, from another project or a third-party vendor:",124],["new UnityEditor.iOS.Resource( \"bundle\", \"Assets/Bundles/bundle.unity3d\" ).AddOnDemandResourceTags( \"bundle\" )",124],["The whole code sample creates a new menu in the Unity Editor menu bar. Go to Bundle > Build iOS AssetBundle. This generates the AssetBundles in the ODR folder.",124],["The following script downloads the textures ODR AssetBundle, assigning it to the public member TextureBundle. Place this somewhere in your project.",124],["using UnityEngine;",124],["using UnityEngine.iOS;",124],["using System;",124],["using System.Collections;",124],["public class LoadBundle : MonoBehaviour",124],["public AssetBundle TextureBundle;",124],["void Start( )",124],["StartCoroutine( LoadAsset( \"textures\", \"textures\" ) );",124],["public IEnumerator LoadAsset( string resourceName, string odrTag )",124],["// Create the request",124],["OnDemandResourcesRequest request = OnDemandResources.PreloadAsync( new string[] { odrTag } );",124],["// Wait until request is completed",124],["yield return request;",124],["// Check for errors",124],["if( request.error != null )",124],["throw new Exception( \"ODR request failed: \" + request.error );",124],["TextureBundle = AssetBundle.LoadFromFile( \"res://\" + resourceName );",124],["request.Dispose( );",124],["The next step is to generate an Xcode project, build an .IPA, and upload it to iTunes Connect’s TestFlight. As part of the TestFlight processing procedure, the embedded ODR AssetBundles are removed from the app and hosted on Apple’s servers, ready for downloading.",124],["Before you build the .IPA in Xcode, check in XCode’s Build Settings to make sure that in the Assets section, Embed Asset packs In Product Bundle is set to No, and Enable On Demand Resources is set to Yes.",124],["Once iTunes Connect has finished processing your app upload, click on the build version in TestFlight Builds to see more information about it:",124],["",124],["App slicing",124],["App slicing follows a similar process to on-demand resourcing, allowing you to dynamically download Assets according the specification of the device the app is running on (for example, to download high-resolution Assets for retina iPads, and low-resolution Assets for smaller devices like iPhones and the iPad Mini). This is achieved by defining AssetBundles, with the added provision of variants. This way, you can decide at startup which variant to use, and automatically append this to the Asset file name upon download.",124],["To create a Variant, click on your new folder and navigate to the Asset Labels section at the bottom of the Inspector window. Click on the right-hand drop-down menu, select New, and enter the name of your new variant. Note that AssetBundle variants must be lower-case.",124],["The new variant must be referenced in an Editor script. To create an Editor script, create a new folder inside the Project window called Editor. Right-click on the Editor folder and select Create > C# Script. Name the new script BuildiOSAppSlices.cs.",124],["Copy and paste the code below, replacing the example label (\"textures\") and variants (“hd” and “sd”) with your own. In this code example, multiple folders are referred to: one containing HD textures, and one containing SD textures. These have been given the variants “hd” and “sd” respectively.",124],["using UnityEngine;",124],["using UnityEditor;",124],["public class BuildiOSAppSlices : MonoBehaviour",124],["[InitializeOnLoadMethod]",124],["static void SetupResourcesBuild( )",124],["UnityEditor.iOS.BuildPipeline.collectResources += CollectResources;",124],["static UnityEditor.iOS.Resource[] CollectResources( )",124],["return new UnityEditor.iOS.Resource[]",124],["new UnityEditor.iOS.Resource(\"textures\").BindVariant( \"Assets/ODR/textures.hd\", \"hd\" )",124],[".BindVariant( \"Assets/ODR/textures.sd\", \"sd\" )",124],[".AddOnDemandResourceTags( \"textures\" ),",124],["};",124],["[MenuItem( \"Bundle/Build iOS App Slices\" )]",124],["static void BuildAssetBundles( )",124],["var options = BuildAssetBundleOptions.None;",124],["bool shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;",124],["if UNITY_TVOS",124],["shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.tvOS;",124],["endif",124],["if( shouldCheckODR )",124],["if ENABLE_IOS_ON_DEMAND_RESOURCES",124],["if( PlayerSettings.iOS.useOnDemandResources )",124],["options = BuildAssetBundleOptions.UncompressedAssetBundle;",124],["endif",124],["if ENABLE_IOS_APP_SLICING",124],["options = BuildAssetBundleOptions.UncompressedAssetBundle;",124],["endif",124],["BuildPipeline.BuildAssetBundles( \"Assets/ODR\", options, EditorUserBuildSettings.activeBuildTarget );",124],["This creates a new menu in the Unity Editor menu bar called Bundle. Click this and select the only item in the list, Build iOS App Slices. This generates the AssetBundles in the ODR folder.",124],["Then, to load an Asset, place this class somewhere in your project and pass in the name of the Variant you wish to load:",124],["using UnityEngine;",124],["using UnityEngine.iOS;",124],["using System;",124],["using System.Collections;",124],["public class LoadBundle : MonoBehaviour",124],["public AssetBundle TextureBundle;",124],["void Start( )",124],["StartCoroutine( LoadAsset( \"textures\", \"textures\" ) );",124],["public IEnumerator LoadAsset( string resourceName, string odrTag )",124],["// Create the request",124],["OnDemandResourcesRequest request = OnDemandResources.PreloadAsync( new string[] { odrTag } );",124],["// Wait until request is completed",124],["yield return request;",124],["// Check for errors",124],["if( request.error != null )",124],["throw new Exception( \"ODR request failed: \" + request.error );",124],["TextureBundle = AssetBundle.LoadFromFile( \"res://\" + resourceName );",124],["request.Dispose( );",124],["You can now see and modify variants in Player Settings > Other Settings > Configuration in a Variant map for app slicing drop-down menu. The Variant map for app slicing menu is visible only if Use on demand resources is enabled in Player Settings.",124],["Additional resources:",124],["Archives",125],["An archive is a generic packaging format which can store any type of file, similar to a .zip file.",125],["Archive File System",125],["Unity loads archives to a mount point within a ContentNamespace. Once Unity mounts the file, your application can access the files inside an Archive through any Unity systems that use Unity's virtual file system. Use the AsyncReadManager to access the virtual file system directly.",125],["Create and mount an archive",125],["The following example describes how to create an archive with the ContentBuildInterface.ArchiveAndCompress function and mount the archive with the ArchiveFileInterface.MountAsync function. This example produces and archive that uses LZ4 compression and contains one text file.",125],["```lang-csharp",125],["using Unity.Collections.LowLevel.Unsafe;",125],["using Unity.Content;",125],["using Unity.IO.Archive;",125],["using Unity.IO.LowLevel.Unsafe;",125],["using UnityEngine;",125],["if UNITY_EDITOR",125],["using UnityEditor.Build.Content;",125],["endif",125],["public class SampleBehaviour : MonoBehaviour",125],["if UNITY_EDITOR",125],["unsafe void CreateAndMountArchive()",125],["// Create the Archive",125],["ResourceFile[] rFiles = new ResourceFile[1];",125],["ResourceFile rf = new ResourceFile();",125],["rf.fileAlias = \"file1.txt\";",125],["rf.fileName = \"Assets/file1.txt\";",125],["rFiles[0] = rf;",125],["string archivePath = System.IO.Path.Combine(Application.streamingAssetsPath, \"myArchive\");",125],["ContentBuildInterface.ArchiveAndCompress(rFiles, archivePath, UnityEngine.BuildCompression.LZ4);",125],["// Mount the Archive",125],["var ns = ContentNamespace.GetOrCreateNamespace(\"MyNamespace123\");",125],["ArchiveHandle ahandle = ArchiveFileInterface.MountAsync(ns, archivePath, \"a:\");",125],["ahandle.JobHandle.Complete();",125],["string textFilePath = ahandle.GetMountPath() + \"file1.txt\"; // ns:/MyNamespace123/a:/file1.txt",125],["ReadCommand cmd;",125],["cmd.Size = 1024;",125],["cmd.Buffer = UnsafeUtility.Malloc(cmd.Size, 4, Unity.Collections.Allocator.Temp);",125],["cmd.Offset = 0;",125],["NativeArray cmds = new NativeArray(1, Allocator.Persistent);",125],["cmds[0] = cmd;",125],["ReadHandle rHandle = AsyncReadManager.Read(textFilePath, (ReadCommand*)cmds.GetUnsafePtr(), 1);",125],["rHandle.JobHandle.Complete();",125],["rHandle.Dispose();",125],["UnsafeUtility.Free(cmd.Buffer, Unity.Collections.Allocator.Temp);",125],["cmds.Dipose():",125],["endif",125],["AR feature set",126],["Unity provides powerful AR tools to create rich, deeply engaging augmented reality experiences that intelligently interact with the real world. Unity’s AR feature set provides a starting point for augmented reality development, spanning from head-mounted displays to mobile.",126],["Getting started",126],["Unity’s AR feature set pre-installs the correct packages needed for AR development. Unity directly supports the following AR platforms:",126],["For more information on how to start developing applications for these platforms in Unity, see the documentation in the list above.",126],["To get started with AR Foundation and add AR features to your project, see:",126],["AR Foundation documentation",126],["AR Foundation Samples GitHub repository",126],["Configuration",126],["To configure your Unity Project for AR, see Project Setup.",126],["Packages",126],["The AR feature set contains the following packages:",126],["Samples",126],["The following samples are available for the AR feature set.",126],["AR Foundation Samples GitHub repository",126],["Resources",126],["To learn more about Unity’s full suite of AR platforms, watch What's new in AR Foundation.",126],["Related forums",126],["Reach out and connect with our developer community in Unity’s AR forum.",126],["Public roadmap",126],["We’re on a mission to provide the best development platform for creating AR/VR experiences that distribute seamlessly to your target platforms. To understand our future trajectory, refer to the AR/VR product roadmap.",126],["AR development in Unity",127],["Augmented Reality (AR) involves a new set of design challenges compared to VR or traditional real-time 3D applications. By definition, an augmented reality app overlays its content on the real world around the user. To place an object in the real world, you must first determine where to place for it. For example, you may want to place a virtual painting on a physical wall. If you place a virtual potted plant, you may want it on a physical table or the floor. An AR app receives information about the world from the user's device, such as the locations of planar surfaces, the detection of objects, people, faces, and so on; and must decide how to use this information to create a good experience for the user.",127],["When you open a typical AR scene in Unity, you will not find many 3D objects in the scene or the Hierarchy view. Instead, most GameObjects in the scene define the settings and logic of the app. 3D content is typically created as prefabs that are added to the scene at runtime in response to AR-related events.",127],["A typical AR scene in the Unity Editor",127],["",127],["Basic AR scene elements",127],["A basic AR scene contains the following GameObjects and components:",127],["AR Session** GameObject",127],["XR Origin (Mobile)** GameObject",127],["Camera Offset** GameObject",127],["If you have the XR Interaction Toolkit installed, the XR Origin option for AR applications changes to XR Origin (AR), which adds GameObjects for representing hand-held controllers and the toolkit components to interaction with objects in the scene.",127],["XR Origin (AR)** GameObject",127],["Camera Offset** GameObject",127],["LeftHand/RightHand Controller** GameObjects",127],["Tip:** Use the GameObject > XR menu to add these GameObjects and their associated components to a scene. (You can also open the menu by right-clicking in the Hierarchy window.)",127],["In addition to these session GameObjects, you need the corresponding AR manager component for each type of AR feature that your application uses.",127],["Refer to Set up an XR scene for an overview of how to set up any XR scene.",127],["Refer to the AR Foundation package documentation, including Scene set up for more in-depth information on creating AR applications.",127],["",127],["AR packages",127],["To build AR apps in unity, you can install the AR Foundation package along with the XR provider plug-ins for the devices you want to support. Unity provides additional packages, including Unity Mars and the XR Interaction Toolkit to make it easier and faster to develop AR experiences.",127],["",127],["AR provider plug-ins",127],["The AR provider plug-ins supported by Unity include:",127],["Apple ARKit XR Plug-in on iOS",127],["Google ARCore XR Plug-in on Android",127],["OpenXR for any AR device with an OpenXR runtime, including HoloLens 2 and others.",127],["Use the XR Plug-in Management system to add and enable one or more of these plug-ins. See XR Project set up for instructions.",127],["Note:** Depending on the platform or device, you might need to install additional packages to along with OpenXR. For example, to build an AR app for HoloLens 2, you must install the Microsoft's Mixed Reality OpenXR Plugin.",127],["",127],["AR Foundation",127],["The AR Foundation package supports AR development in Unity.",127],["AR Foundation enables you to create multi-platform AR apps with Unity. In an AR Foundation project, you choose which AR features to enable by adding the corresponding manager components to your scene. When you build and run your app on an AR device, AR Foundation enables these features using the platform's native AR SDK, so you can create once and deploy to the world's leading AR platforms.",127],["A device can be AR-capable without supporting all possible AR features. Available functionality depends on both the device platform and the capabilities of the specific device. For example, ARCore, Google's AR platform for Android, does not currently support body tracking, so body tracking can't be used when you build your app for the Android platform. Even on the same platform, capabilities can vary from device to device. For example, a specific device model might support AR through its world-facing camera, but not its user-facing camera.",127],["For more information about AR Foundation, see the AR Foundation package documentation.",127],["",127],["Unity Mars",127],["Unity Mars provides purpose-built authoring tools and better workflows for creating AR applications.",127],["Plain-language authoring:** You can define simple rules that can be stated in plain language like, \"on every horizontal surface, create grass,\" to specify how your app content should augment a scene based on the AR features detected by a user's device. See A plain-language approach to authoring AR for more information.",127],["Proxy-based workflow:** you add proxies to a scene to represent real-world AR features. You can set conditions and actions on your proxies to specify how your app should respond when a matching object is detected in the real world. For example, you can add a proxy to a scene that activates whenever a suitable horizontal plane is detected.",127],["In-Editor simulation:** Unity Mars provides a simulation mode, along with pre-built sample environments, that helps you test your AR logic inside the Editor.",127],["Customizable building-blocks:** Unity Mars contains templates and other building blocks for creating all or part of an AR application. For example, the Training Template provides UI and logic that you can use to build an AR tutorial that walks a trainee through a series of steps.",127],["Unity Mars requires a compatible license. The Unity Pro, Unity Enterprise, and Unity Industrial Collection plans include Mars. You can also obtain a license for Unity Mars separately if you have a different plan. See Unity Mars for more information.",127],["",127],["XR Interaction Toolkit",127],["The Unity XR Interaction Toolkit provides tools for building both AR and VR interactions. The AR functionality provided by the XR Interaction Toolkit includes:",127],["AR gesture system to map screen touches to gesture events",127],["AR placement Interactable component to help place virtual objects in the real world",127],["AR gesture Interactor and Interactable components to support object manipulations such as place, select, translate, rotate, and scale",127],["AR annotations to inform users about AR objects placed in the real world",127],["",127],["AR template",127],["Unity’s AR Project Template provides a starting point for virtual reality development in Unity. The template configures project settings, pre-installs the right packages, and includes a sample scene with various pre-configured example assets to demonstrate how to set up a project that is ready for AR. Access the AR template through the Unity Hub when you create a new project. Refer to Create a new project for information about creating a project with the template.",127],["For more information about the template assets and how the sample scene is set up, refer to About the AR Project Template.",127],["Articulations",128],["A physics articulation is a set of Articulation Bodies organized in a logical tree, in which each parent-child relationship reflects mutually constrained relative motion.",128],["The main purpose of physics articulations is to provide a realistic physics behavior for industrial and commercial non-gaming applications that involve joints. For example, they make it a lot easier than the regular Joints to simulate robotic arms and kinematic chains.",128],["You can configure articulations via the ArticulationBody class, or the corresponding Articulation Body component.",128],["Topic Description ",128],[":-------------------- :----------------------- ",128],["Introduction to physics articulations Overview of the concepts and behaviours of articulations in Unity. ",128],["Articulation Body component reference Reference for the Articulation Body component. ",128],["Assembly Definition File Format",129],["Assembly Definition and Assembly Definition Reference assets are JSON files. You can edit the asset files inside the Unity Editor using the Inspector window, but you can also modify the JSON content with an external tool.",129],["Assembly Definition JSON",129],["An Assembly Definition is a JSON object with the following fields:",129],["allowUnsafeCode bool",129],["Optional. Defaults to false. See [Allow ‘unsafe’ Code].",129],["```yml",129],["\"allowUnsafeCode\" : true",129],["autoReferenced bool",129],["Optional. Defaults to true. See [Auto Referenced].",129],["```yml",129],["\"autoReferenced\": false",129],["defineConstraints string[]",129],["Optional. The symbols that serve as constraints. Can be empty. See [Define Constraints].",129],["``` yml",129],["\"defineConstraints\": [",129],["\"UNITY_2019\",",129],["\"UNITY_INCLUDE_TESTS\"",129],["",129],["excludePlatforms string[]",129],["Optional. The platform name strings to exclude or an empty array. The excludePlatforms array must be empty if [includePlatforms] contains values. You can retrieve the platform name strings with the [CompilationPipeline.GetAssemblyDefinitionPlatforms] function (support for a platform must be installed for the current Editor when calling this function.) See [Platforms].",129],["``` yml",129],["\"includePlatforms\": [],",129],["\"excludePlatforms\": [",129],["\"iOS\",",129],["\"macOSStandalone\",",129],["\"tvOS\"",129],["",129],["includePlatforms string[]",129],["Optional. The platform name strings to include or an empty array. The includePlatforms array must be empty if [excludePlatforms] contains values. You can retrieve the platform name strings with the [CompilationPipeline.GetAssemblyDefinitionPlatforms] function (support for a platform must be installed for the current Editor when calling this function.) See [Platforms].",129],["``` yml",129],["\"includePlatforms\": [",129],["\"Android\",",129],["\"LinuxStandalone64\",",129],["\"WebGL\"",129],["],",129],["\"excludePlatforms\": []",129],["name string",129],["Required. Any [legal assembly name].",129],["``` yml",129],["\"name\" : \"MyAssemblyName\"",129],["noEngineReferences bool",129],["Optional. Defaults to false. See [No Engine References].",129],["``` yml",129],["\"noEngineReferences\": false",129],["optionalUnityReferences string[]",129],["Optional. In earlier versions of Unity, this field serialized the Unity References : Test Assemblies option used to designate the assembly as a test assembly. As of Unity 2019.3, the option is no longer displayed. The field is still supported, but if the asset is reserialized in a newer version of the Unity Editor, the field is replaced by the equivalent assembly references.",129],["See [Creating a test assembly] for more information about test assemblies.",129],["``` yml",129],["\"optionalUnityReferences\": [",129],["\"TestAssemblies\"",129],["",129],["overrideReferences bool",129],["Optional. Set to true if [precompiledReferences] contains values. Defaults to false.",129],["See [Override References].",129],["``` yml",129],["\"overrideReferences\": true",129],["",129],["precompiledReferences string[]",129],["Optional. The file names of referenced DLL libraries including extension, but without other path elements. Can be empty. This array is ignored unless you set [overrideReferences] to true.",129],["See [Assembly References].",129],["``` yml",129],["\"overrideReferences\": true,",129],["\"precompiledReferences\": [",129],["\"Newtonsoft.Json.dll\",",129],["\"nunit.framework.dll\"",129],["references string[]",129],["Optional. References to other assemblies created with Assembly Definition assets. You can use either the GUID of the Assembly Definition asset file or the name of the assembly (as defined by the [name] field of the Assembly Definition). You must use the same form for all references in the list. Can be empty.",129],["You can use the [AssetDatabase.AssetPathToGUID] function to retrieve the GUID of an asset. (The GUID is also part of the metadata associated with every asset.)",129],["Note that the Editor displays a Use GUIDs option in the Assembly Definition Inspector. This option is not serialized in the associated JSON file. Instead, the choice is inferred from the form of reference found in the file.",129],["See [Referencing another assembly].",129],["Using GUIDs:",129],["```yml",129],["\"references\": [",129],["\"GUID:17b36165d09634a48bf5a0e4bb27f4bd\",",129],["\"GUID:b470eee7144904e59a1064b70fa1b086\",",129],["\"GUID:2bafac87e7f4b9b418d9448d219b01ab\",",129],["\"GUID:27619889b8ba8c24980f49ee34dbb44a\",",129],["\"GUID:0acc523941302664db1f4e527237feb3\"",129],["Using assembly names:",129],["```yml",129],["\"references\": [",129],["\"Unity.CollabProxy.Editor\",",129],["\"AssemblyB\",",129],["\"UnityEngine.UI\",",129],["\"UnityEngine.TestRunner\",",129],["\"UnityEditor.TestRunner\"",129],["versionDefines object[]",129],["Optional. Contains an object for each version define. This object has three fields:",129],["name:string -- the name of the resource",129],["expression:string -- the expression defining the version or range of versions of the resource",129],["define:string -- the symbol to define",129],["See [Version Defines].",129],["```yml",129],["\"versionDefines\": [",129],["\"name\": \"com.unity.ide.vscode\",",129],["\"expression\": \"[1.7,2.4.1]\",",129],["\"define\": \"MY_SYMBOL\"",129],["},",129],["\"name\": \"com.unity.test-framework\",",129],["\"expression\": \"[2.7.2-preview.8]\",",129],["\"define\": \"TESTS\"",129],["Example Assembly Definition JSON strings",129],["Using assembly names for references to other Assembly Definitions and includePlatforms:",129],["```yml",129],["\"name\": \"BeeAssembly\",",129],["\"references\": [",129],["\"Unity.CollabProxy.Editor\",",129],["\"AssemblyB\",",129],["\"UnityEngine.UI\",",129],["\"UnityEngine.TestRunner\",",129],["\"UnityEditor.TestRunner\"",129],["],",129],["\"includePlatforms\": [",129],["\"Android\",",129],["\"LinuxStandalone64\",",129],["\"WebGL\"",129],["],",129],["\"excludePlatforms\": [],",129],["\"overrideReferences\": true,",129],["\"precompiledReferences\": [",129],["\"Newtonsoft.Json.dll\",",129],["\"nunit.framework.dll\"",129],["],",129],["\"autoReferenced\": false,",129],["\"defineConstraints\": [",129],["\"UNITY_2019\",",129],["\"UNITY_INCLUDE_TESTS\"",129],["],",129],["\"versionDefines\": [",129],["\"name\": \"com.unity.ide.vscode\",",129],["\"expression\": \"[1.7,2.4.1]\",",129],["\"define\": \"MY_SYMBOL\"",129],["},",129],["\"name\": \"com.unity.test-framework\",",129],["\"expression\": \"[2.7.2-preview.8]\",",129],["\"define\": \"TESTS\"",129],["],",129],["\"noEngineReferences\": false",129],["Using GUIDS for references to other Assembly Definitions and excludePlatforms:",129],["```yml",129],["\"name\": \"BeeAssembly\",",129],["\"references\": [",129],["\"GUID:17b36165d09634a48bf5a0e4bb27f4bd\",",129],["\"GUID:b470eee7144904e59a1064b70fa1b086\",",129],["\"GUID:2bafac87e7f4b9b418d9448d219b01ab\",",129],["\"GUID:27619889b8ba8c24980f49ee34dbb44a\",",129],["\"GUID:0acc523941302664db1f4e527237feb3\"",129],["],",129],["\"includePlatforms\": [],",129],["\"excludePlatforms\": [",129],["\"iOS\",",129],["\"macOSStandalone\",",129],["\"tvOS\"",129],["],",129],["\"allowUnsafeCode\": false,",129],["\"overrideReferences\": true,",129],["\"precompiledReferences\": [",129],["\"Newtonsoft.Json.dll\",",129],["\"nunit.framework.dll\"",129],["],",129],["\"autoReferenced\": false,",129],["\"defineConstraints\": [",129],["\"UNITY_2019\",",129],["\"UNITY_INCLUDE_TESTS\"",129],["],",129],["\"versionDefines\": [",129],["\"name\": \"com.unity.ide.vscode\",",129],["\"expression\": \"[1.7,2.4.1]\",",129],["\"define\": \"MY_SYMBOL\"",129],["},",129],["\"name\": \"com.unity.test-framework\",",129],["\"expression\": \"[2.7.2-preview.8]\",",129],["\"define\": \"TESTS\"",129],["],",129],["\"noEngineReferences\": false",129],["Assembly Definition Reference JSON",129],["An Assembly Definition Reference is a JSON object with the following field:",129],["reference string",129],["Required. The assembly definition to reference. See [Assembly Definition References].",129],["You can reference an Assembly Definition asset using either the name of the assembly or the GUID of the asset.You can use the [AssetDatabase.AssetPathToGUID] function to retrieve the GUID of an asset. (The GUID is also part of the metadata associated with every asset.)",129],["Using assembly name:",129],["```yml",129],["\"reference\": \"AssemblyA\"",129],["Using Assembly Definition asset GUID",129],["```yml",129],["\"reference\": \"GUID:f4de40948f4904ecb94b59dd38aab8a1\"",129],["See [Creating an Assembly Definition Reference asset].",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["",129],["Unity Asset Bundle Browser tool",130],["You can use the Asset Bundle Browser to view and edit the configuration of asset bundles in your Unity project.",130],["For more information, see the Unity Asset Bundle Browser documentation.",130],["Note: This tool is an unsupported utility. Viewing extremely large asset bundles can lead to slow performance and memory issues. The Github repository linked from this page contains the latest source code and supersedes any other sources.",130],["Installation",130],["To install the Asset Bundle Browser:",130],["Open the Unity [Package Manager]((https://docs.unity3d.com/2020.1/Documentation/Manual/upm-ui.html) in your Project (menu: Windows > Package Manager).",130],["Click the + (Add) button at the top, left corner of the window.",130],["Choose Add package from git URL...",130],["Enter https://github.com/Unity-Technologies/AssetBundles-Browser.git as the URL",130],["Click Add.",130],["The Package Manager downloads and installs the package's \"master\" branch.",130],["",130],["New feature in 5.6",130],["Building AssetBundles",131],["Note**: This section describes the creation of AssetBundles using the built-in BuildPipeline.BuildAssetBundles() API. A recommended, and more user friendly, alternative is to use the Addressables package.",131],["In the documentation on the AssetBundle Workflow, we have a code sample which passes three arguments to the BuildPipeline.BuildAssetBundles function. Let’s dive a little deeper into what we’re actually saying.",131],["Assets/AssetBundles: This is the directory that the AssetBundles will be output to. You can change this to any output directory you desire, just ensure that the folder actually exists before you attempt a build.",131],["BuildAssetBundleOptions",131],["There are several different BuildAssetBundleOptions that you can specify that have a variety of effects. See Scripting API Reference on BuildAssetBundleOptions for a table of all the options.",131],["While you’re free to combine BuildAssetBundleOptions as needs change and arise, there are three specific BuildAssetBundleOptions that deal with AssetBundle Compression:",131],["BuildAssetBundleOptions.None: This bundle option uses LZMA Format compression, which is a single compressed LZMA stream of serialized data files. LZMA compression requires that the entire bundle is decompressed before it’s used. This results in the smallest possible file size but a slightly longer load time due to the decompression. It is worth noting that when using this BuildAssetBundleOptions, in order to use any assets from the bundle the entire bundle must be uncompressed initially. Once the bundle has been decompressed, it will be recompressed on disk using LZ4 compression which doesn’t require the entire bundle be decompressed before using assets from the bundle. This is best used when a bundle contains assets such that to use one asset from the bundle would mean all assets are going to be loaded. Packaging all assets for a character or scene are some examples of bundles that might use this. Using LZMA compression is only recommended for the initial download of an AssetBundle from an off-site host due to the smaller file size. LZMA compressed asset bundles loaded through UnityWebRequestAssetBundle are automatically recompressed to LZ4 compression and cached on the local file system. If you download and store the bundle through other means, you can recompress it with the AssetBundle.RecompressAssetBundleAsync API.",131],["BuildAssetBundleOptions.UncompressedAssetBundle: This bundle option builds the bundles in such a way that the data is completely uncompressed. The downside to being uncompressed is the larger file download size. However, the load times once downloaded will be much faster. Uncompressed AssetBundles are 16-byte aligned.",131],["BuildAssetBundleOptions.ChunkBasedCompression: This bundle option uses a compression method known as LZ4, which results in larger compressed file sizes than LZMA but does not require that entire bundle is decompressed, unlike LZMA, before it can be used. LZ4 uses a chunk based algorithm which allows the AssetBundle be loaded in pieces or \"chunks.\" Decompressing a single chunk allows the contained assets to be used even if the other chunks of the AssetBundle are not decompressed.",131],["Using ChunkBasedCompression has comparable loading times to uncompressed bundles with the added benefit of reduced size on disk.",131],["BuildTarget",131],["BuildTarget.Standalone: Here we’re telling the build pipeline which target platform we are going to be using these AssetBundles for. You can find a list of the available explicit build targets in the Scripting API Reference for BuildTarget. However, if you’d rather not hardcode in your build target, feel free to take advantage of EditorUserBuildSettings.activeBuildTarget which will automatically find the platform you’re currently setup to build for and build your AssetBundles based on that target.",131],["Once you’ve properly set up your build script, it’s finally time to build your bundles. If you followed the script example above, click Assets > Build AssetBundles to kick off the process.",131],["Now that you’ve successfully built your AssetBundles, you may notice that your AssetBundles directory has more files than you might have originally expected. 2*(n+1) more files, to be exact. Let’s take a minute and go over exactly what the BuildPipeline.BuildAssetBundles call yields.",131],["For every AssetBundle you specified in the editor, you’ll notice a file with your AssetBundle name and your AssetBundle name + \".manifest\".",131],["There will be an additional bundle and manifest that doesn’t share a name with any AssetBundle you created. It, instead, is named after the directory that it’s located in (where the AssetBundles were built to). This is the Manifest Bundle. This bundle contains the AssetBundleManifest object which will be useful for figuring out which bundle dependencies to load at runtime. To learn more about how to use this bundle and the manifest object, see documentation on Using AssetBundles Natively.",131],["The AssetBundle File",131],["This is the file that lacks the .manifest extension and what you’ll be loading in at runtime in order to load your Assets.",131],["The AssetBundle file is an archive that contains multiple files internally. The structure of this archive can change slightly depending on if it is an AssetBundle or a Scene AssetBundle. This is the structure of a normal AssetBundle:",131],["The Scene AssetBundle is different to normal AssetBundles, in that it is optimized for stream loading of a Scene and its content.",131],["The Manifest File",131],["For every bundle generated, including the additional Manifest Bundle, an associated manifest file is generated. The manifest file has the extension .manifest and can be opened with any text editor. It contains information such as the cyclic redundancy check (CRC) data and dependency data for the bundle. The manifest files for normal AssetBundles will look something like this:",131],["ManifestFileVersion: 0",131],["CRC: 2422268106",131],["Hashes:",131],["AssetFileHash:",131],["serializedVersion: 2",131],["Hash: 8b6db55a2344f068cf8a9be0a662ba15",131],["TypeTreeHash:",131],["serializedVersion: 2",131],["Hash: 37ad974993dbaa77485dd2a0c38f347a",131],["HashAppended: 0",131],["ClassTypes:",131],["\nClass: 91\n",131],["Script: {instanceID: 0}",131],["Assets:",131],["Asset_0: Assets/Mecanim/StateMachine.controller",131],["Dependencies: {}",131],["Which shows the contained assets, dependencies, and other information.",131],["A manifest file is also generated for the Manifest Bundle. It will look like this:",131],["ManifestFileVersion: 0",131],["AssetBundleManifest:",131],["AssetBundleInfos:",131],["Info_0:",131],["Name: scene1assetbundle",131],["Dependencies: {}",131],["This file records how AssetBundles relate, and what their dependencies are. This is similar to the information recorded by the AssetBundleManifest object, inside the Manifest Bundle, and because it is a text file it is convenient for human readability and parsing by external tools.",131],["AssetBundle compression",132],["Use this page to learn about the AssetBundle compression formats and cache types that Unity supports.",132],["AssetBundle compression formats",132],["By default, Unity creates AssetBundles with LZMA compression, and caches them with LZ4 compression. This section describes both compression formats.",132],["Unity's AssetBundle build pipeline creates AssetBundles with LZMA compression. This compression format is a stream of data representing the entire AssetBundle, which means that if you need to read an Asset from these archives, you must decompress the entire stream. This is the preferred format for AssetBundles downloaded from a Content Delivery Network (CDN), because the file sizes are smaller than those with LZ4 compression.",132],["LZ4 compression is a chunk-based compression algorithm. If Unity needs to access an Asset from an LZ4 archive, it only needs to decompress and read the chunks that contain bytes of the requested Asset. This is the compression method that Unity uses in both of its AssetBundle caches. Use the BuildAssetBundleOptions.ChunkBasedCompression value when building AssetBundles to force LZ4(HC) compression.",132],["Uncompressed AssetBundles that Unity builds when you use BuildAssetBundleOptions.UncompressedAssetBundle require no decompression, but occupy more disk space. Uncompressed AssetBundles are 16-byte aligned.",132],["AssetBundle cache",132],["To optimize the fetching, recompressing, and versioning of LZMA AssetBundles using WWW or UnityWebRequest (UWR), Unity maintains two caches:",132],["The Memory Cache** stores AssetBundles in UncompressedRuntime format in RAM.",132],["The Disk Cache** stores fetched AssetBundles on writable media in the compression format described later.",132],["AssetBundles loaded into the Memory Cache consume a large amount of memory. Unless you specifically want to frequently and rapidly access the contents of an AssetBundle, the Memory Cache is likely not worth the Memory cost. Instead, you should use the Disk Cache.",132],["If you provide a version parameter to the UWR API, Unity stores your AssetBundle data in the Disk Cache. If you don't provide a version parameter, Unity uses the Memory Cache. The version parameter can be either a version number or a hash. If Caching.compressionEnabled is set to true, Unity applies LZ4 compression when it writes AssetBundles to disk for all subsequent downloads. It doesn't compress existing uncompressed data in the cache. If Caching.compressionEnabled is false, Unity applies no compression when it writes AssetBundles to disk.",132],["It takes longer to initially load cached LZMA AssetBundles, because Unity must recompress the archive to the destination format. Subsequent loads use the cached version.",132],["AssetBundle.LoadFromFile or AssetBundle.LoadFromFileAsync always use the Memory Cache for LZMA AssetBundles, so you should use the UWR API. If it's not possible to use the UWR API, you can use AssetBundle.RecompressAssetBundleAsync to rewrite an LZMA AssetBundle on disk.",132],["Note:** WebGL doesn't support LZMA compression for AssetBundles. Use LZ4 compression with AssetBundles on WebGL platforms. For more information, see Reduce load times with AssetBundles.",132],["Internal testing shows significant difference in RAM usage between using the Disk Cache instead of the Memory Cache. You must weigh the trade-off between memory impact versus added disk space requirements and Asset instantiation time for your application.",132],["AssetBundle Dependencies",133],["AssetBundles can become dependent on other AssetBundles if one or more of the UnityEngine.Objects contains a reference to a UnityEngine.Object located in another bundle. A dependency does not occur if the UnityEngine.Object contains a reference to a UnityEngine.Object that is not contained in any AssetBundle. In this case, a copy of the object that the bundle would be dependent on is copied into the bundle when you build the AssetBundles. If multiple objects in multiple bundles contain a reference to the same object that isn’t assigned to a bundle, every bundle that would have a dependency on that object will make its own copy of the object and package it into the built AssetBundle.",133],["Should an AssetBundle contain a dependency, it is important that the bundles that contain those dependencies are loaded before the object you’re attempting to instantiate is loaded. Unity will not attempt to automatically load dependencies.",133],["Consider the following example, a Material in Bundle 1 references a Texture in Bundle 2:",133],["In this example, before loading the Material from Bundle 1, you would need to load Bundle 2 into memory. It does not matter which order you load Bundle 1 and Bundle 2, the important takeaway is that Bundle 2 is loaded before loading the Material from Bundle 1. In the next section, we’ll discuss how you can use the AssetBundleManifest objects we touched on in the previous section to determine, and load, dependencies at runtime.",133],["Duplicated information across AssetBundles",133],["By default, Unity doesn’t optimize duplicated information across AssetBundles. This means multiple AssetBundles in your Project might contain the same information, such as a Material which is used by multiple Prefabs. Assets which are used in multiple AssetBundles are known as common Assets. These can affect memory resources and loading times.",133],["This page describes how Unity manages duplicated information across AssetBundles, and how you can apply optimization.",133],["",133],["Editor setup",133],["By default, Unity doesn't perform any optimization to reduce or minimize the memory required to store duplicate information. During build creation, Unity builds duplicates of any implicitly referenced Assets inside the AssetBundles.",133],["To prevent this duplication, assign common Assets (such as Materials) to their own AssetBundle.",133],["For example: you could have an application with two Prefabs, both of which are assigned to their own AssetBundle. Both Prefabs share the same Material, which is not assigned to an AssetBundle. This Material references a Texture, which is not assigned to an AssetBundle.",133],["If you follow the AssetBundle Workflow and use the example class CreateAssetBundles to build AssetBundles, each generated AssetBundle contains the Material (including its Shader and referenced Textures). In the example image below, the Prefab files have a size of 383 KB and 377 KB respectively.",133],["If the project contains a larger number of Prefabs, this behaviour impacts the final installer size, and the runtime memory footprint when both AssetBundles are loaded. Data duplication across AssetBundles also impacts batching, because Unity considers each copy of the same Material as a unique Material.",133],["To avoid data duplication, assign the Material and its referenced Assets to its own modulesmaterials AssetBundle. You can also tag the Material only, because the Texture dependency is also included in the AssetBundle automatically during the build process.",133],["Now if you rebuild the AssetBundles, the generated output includes a separate modulesmaterials AssetBundle (359 KB), which contains the Material and its associated Texture. This significantly reduces the size of the other AssetBundles for the Prefabs (from roughly 380 KB in the previous iteration down to roughly 20 KB).",133],["The image below illustrates this.",133],["",133],["Runtime loading",133],["When you extract common Assets to a single AssetBundle, be careful about dependencies. In particular, if you only use a Prefab to instantiate a module, the Materials do not load.",133],["To solve this problem, load the Materials AssetBundle in memory before you load the AssetBundle that belongs to the module. In the following example, this happens in the variable materialsAB.",133],["using System.IO;",133],["using UnityEngine;",133],["public class InstantiateAssetBundles : MonoBehaviour",133],["void Start()",133],["var materialsAB = AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, Path.Combine(\"AssetBundles\", \"modulesmaterials\")));",133],["var moduleAB = AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, Path.Combine(\"AssetBundles\", \"example-prefab\")));",133],["if (moduleAB == null)",133],["Debug.Log(\"Failed to load AssetBundle!\");",133],["return;",133],["var prefab = moduleAB.LoadAsset(\"example-prefab\");",133],["Instantiate(prefab);",133],["Note:** When you use LZ4 compressed and uncompressed AssetBundles, AssetBundle.LoadFromFile only loads the catalog of its content in memory, but not the content itself. To check if this is happening, use the Memory Profiler package to inspect memory usage.",133],["AssetBundle Download Integrity and Security",134],["AssetBundles can be distributed with your game build, but can also be downloaded from remote servers. When downloading AssetBundles, you should take precaution to prevent AssetBundle data corruption as well as attacks by malicious actors. Even though AssetBundles cannot contain executable code, changing serialized data could allow an attacker to exploit a vulnerability in the game code or the Unity runtime.",134],["Download With a Secure Protocol",134],["UnityWebRequestAssetBundle can be used to download and cache AssetBundles from the internet. When using this API you should use the HTTPS protocol in your URL, unless your URL refers to a local web server that runs on the same machine. The HTTP protocol is not secure and is vulnerable to a malicious man in the middle attack.",134],["CRC Checksums",134],["A 32-bit checksum is generated during the AssetBundle build process. When you provide this CRC through the AssetBundle loading APIs, the loading system calculates the checksum of the AssetBundle before loading it. If the CRC of the AssetBundle does not match the provided CRC, the AssetBundle will not load. Checking the CRC ensures the AssetBundle data was not corrupted or tampered with after it was built.",134],["User Generated Content",134],["If you allow users to upload content that is distributed to other players (User Generated Content), it is your responsibility to filter this data for inappropriate or malicious content. We do not recommend that you let users build and upload binary AssetBundle files. It is preferable to have your users upload their source assets and let you, the developer, build the AssetBundle binary file for them. This will make it easier for you to filter out malicious or inappropriate content through manual and automated processes. It also enables you to rebuild the AssetBundles as needed if you upgrade to a later Unity version.",134],["Using AssetBundles Natively",135],["There are four different APIs that you can use to load AssetBundles. Their behavior varies based on the platform the bundle is being loaded and the compression method used when the AssetBundles were built (uncompressed, LZMA, LZ4).",135],["The four APIs we have to work with are:",135],["AssetBundle.LoadFromMemoryAsync",135],["This function takes an array of bytes that contains AssetBundle data. Optionally you can also pass in a CRC value if you desire. If the bundle is LZMA compressed it will decompress the AssetBundle while it’s loading. LZ4 compressed bundles are loaded in their compressed state.",135],["Here’s one example of how to use this method:",135],["using UnityEngine;",135],["using System.Collections;",135],["using System.IO;",135],["public class Example : MonoBehaviour",135],["IEnumerator LoadFromMemoryAsync(string path)",135],["AssetBundleCreateRequest createRequest = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));",135],["yield return createRequest;",135],["AssetBundle bundle = createRequest.assetBundle;",135],["var prefab = bundle.LoadAsset(\"MyObject\");",135],["Instantiate(prefab);",135],["However, this is not the only strategy that makes using LoadFromMemoryAsync possible. File.ReadAllBytes(path) could be replaced with any desired procedure of obtaining a byte array.",135],["AssetBundle.LoadFromFile",135],["This API is highly-efficient when loading uncompressed bundles from local storage. LoadFromFile will load the bundle directly from disk if the bundle is uncompressed or chunk (LZ4) compressed. Loading a fully compressed (LZMA) bundle with this method will first decompress the bundle before loading it into memory.",135],["One example of how to use LoadFromFile:",135],["using System.IO;",135],["using UnityEngine;",135],["public class LoadFromFileExample : MonoBehaviour",135],["void Start()",135],["var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, \"myassetBundle\"));",135],["if (myLoadedAssetBundle == null)",135],["Debug.Log(\"Failed to load AssetBundle!\");",135],["return;",135],["var prefab = myLoadedAssetBundle.LoadAsset(\"MyObject\");",135],["Instantiate(prefab);",135],["Note: On Android devices with Unity 5.3 or older, this API will fail when trying to load AssetBundles from the Streaming Assets path. This is because the contents of that path will reside inside a compressed .jar file. Unity 5.4 and newer can use this API call with Streaming Assets just fine.",135],["UnityWebRequestAssetBundle",135],["The UnityWebRequestAssetBundle has a specific API call to deal with AssetBundles. To begin, you’ll need to create your web request using UnityWebRequestAssetBundle.GetAssetBundle. After returning the request, pass the request object into DownloadHandlerAssetBundle.GetContent(UnityWebRequestAssetBundle). This GetContent call will return your AssetBundle object.",135],["You can also use the assetBundle property on the DownloadHandlerAssetBundle class after downloading the bundle to load the AssetBundle with the efficiency of AssetBundle.LoadFromFile.",135],["Here’s an example of how to load an AssetBundle that contains two GameObjects and Instantiate them. To begin this process, we’d just need to call StartCoroutine(InstantiateObject());",135],["IEnumerator InstantiateObject()",135],["string uri = \"file:///\" + Application.dataPath + \"/AssetBundles/\" + assetBundleName;",135],["UnityEngine.Networking.UnityWebRequestAssetBundle request",135],["= UnityEngine.Networking.UnityWebRequestAssetBundle.GetAssetBundle(uri, 0);",135],["yield return request.SendWebRequest();",135],["AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);",135],["GameObject cube = bundle.LoadAsset(\"Cube\");",135],["GameObject sprite = bundle.LoadAsset(\"Sprite\");",135],["Instantiate(cube);",135],["Instantiate(sprite);",135],["Loading Assets from AssetBundles",135],["Now that you’ve successfully downloaded your AssetBundle, it’s time to finally load in some Assets.",135],["Generic code snippet:",135],["T objectFromBundle = bundleObject.LoadAsset(assetName);",135],["T is the type of the Asset you’re attempting to load.",135],["There are a couple options when deciding how to load Assets. We have LoadAsset, LoadAllAssets, and their Async counterparts LoadAssetAsync and LoadAllAssetsAsync respectively.",135],["This is how to load an asset from an AssetBundles synchronously:",135],["To load a single GameObject:",135],["GameObject gameObject = loadedAssetBundle.LoadAsset(assetName);",135],["To load all Assets:",135],["Unity.Object[] objectArray = loadedAssetBundle.LoadAllAssets();",135],["Now, where as the previously shown methods return either the type of object you’re loading or an array of objects, the asynchronous methods return an AssetBundleRequest. You’ll need to wait for this operation to complete before accessing the asset. To load an asset:",135],["AssetBundleRequest request = loadedAssetBundleObject.LoadAssetAsync(assetName);",135],["yield return request;",135],["var loadedAsset = request.asset;",135],["And",135],["AssetBundleRequest request = loadedAssetBundle.LoadAllAssetsAsync();",135],["yield return request;",135],["var loadedAssets = request.allAssets;",135],["Once you have loaded your Assets you’re good to go! You’re able to use the loaded objects as you would any Object in Unity.",135],["Loading AssetBundle Manifests",135],["Loading AssetBundle manifests can be incredibly useful. Especially when dealing with AssetBundle dependencies.",135],["To get a useable AssetBundleManifest object, you’ll need to load that additional AssetBundle (the one that’s named the same thing as the folder it’s in) and load an object of type AssetBundleManifest from it.",135],["Loading the manifest itself is done exactly the same as any other Asset from an AssetBundle:",135],["AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);",135],["AssetBundleManifest manifest = assetBundle.LoadAsset(\"AssetBundleManifest\");",135],["Now you have access to the AssetBundleManifest API calls through the manifest object from the above example. From here you can use the manifest to get information about the AssetBundles you built. This information includes dependency data, hash data, and variant data for the AssetBundles.",135],["Remember in the earlier section when we discussed AssetBundle Dependencies and how, if a bundle had a dependency on another bundle, those bundles would need to be loaded in before loading any Assets from the original bundle? The manifest object makes dynamically finding a loading dependencies possible. Let’s say we want to load all the dependencies for an AssetBundle named \"assetBundle\".",135],["AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);",135],["AssetBundleManifest manifest = assetBundle.LoadAsset(\"AssetBundleManifest\");",135],["string[] dependencies = manifest.GetAllDependencies(\"assetBundle\"); //Pass the name of the bundle you want the dependencies for.",135],["foreach(string dependency in dependencies)",135],["AssetBundle.LoadFromFile(Path.Combine(assetBundlePath, dependency));",135],["Now that you’re loading AssetBundles, AssetBundle dependencies, and Assets, it’s time to talk about managing all of these loaded AssetBundles.",135],["",135],["Managing Loaded AssetBundles",135],["Note:** The Addressable Assets package provides a ready-made system to manage loading Asset Bundes, dependencies, and Assets. Unity recommends using Addressables rather than managing AssetBundles yourself.",135],["See also: Unity Learn tutorial on Managing Loaded AssetBundles",135],["Unity does not automatically unload Objects when they are removed from the active scene. Asset cleanup is triggered at specific times, and it can also be triggered manually.",135],["It is important to know when to load and unload an AssetBundle. Improperly unloading an AssetBundle can lead to duplicating objects in memory or other undesirable circumstances, such as missing textures.",135],["The biggest things to understand about AssetBundle management is when to call AssetBundle.Unload(bool) -- or AssetBundle.UnloadAsync(bool) -- and if you should pass true or false into the function call. Unload is a non-static function that will unload your AssetBundle. This API unloads the header information of the AssetBundle being called. The argument indicates whether to also unload all Objects instantiated from this AssetBundle.",135],["AssetBundle.Unload(true) unloads all GameObjects (and their dependencies) that were loaded from the AssetBundle. This does not include copied GameObjects (such as Instantiated GameObjects), because they no longer belong to the AssetBundle. When this happens, Textures that are loaded from that AssetBundle (and still belong to it) disappear from GameObjects in the Scene, and Unity treats them as missing Textures.",135],["Let’s assume Material M is loaded from AssetBundle AB as shown below and used in Prefab P.",135],["If AB.Unload(true) is called. Any instance of M in the active scene will also be unload and destroyed.",135],["If you were instead to call AB.Unload(false) it would break the chain of the current instances of M and AB.",135],["If AB is loaded again later and AB.LoadAsset() is called, Unity will not re-link the existing copies of M to the newly loaded Material.",135],["If you create another instance of Prefab P, it will not use the existing copy of M. Instead two copies of M are loaded.",135],["Generally, using AssetBundle.Unload(false) does not lead to an ideal situation. Most projects should use AssetBundle.Unload(true) and adopt a method to ensure that Objects are not duplicated. Two common methods are:",135],["Having well-defined points during the application's lifetime at which transient AssetBundles are unloaded, such as between levels or during a loading screen.",135],["Maintaining reference-counts for individual Objects and unload AssetBundles only when all of their constituent Objects are unused. This permits an application to unload & reload individual Objects without duplicating memory.",135],["If an application must use AssetBundle.Unload(false), then individual Objects can only be unloaded in two ways:",135],["Eliminate all references to an unwanted Object, both in the scene and in code. After this is done, call Resources.UnloadUnusedAssets.",135],["Load a scene non-additively. This will destroy all Objects in the current scene and invoke Resources.UnloadUnusedAssets automatically.",135],["Patching with AssetBundles",136],["Patching AssetBundles is as simple as downloading a new AssetBundle and replacing the existing one. If WWW.LoadFromCacheOrDownload or UnityWebRequest are used to manage an application's cached AssetBundles, passing a different version parameter to the chosen API will trigger a download of the new AssetBundles.",136],["The more difficult problem to solve in the patching system is detecting which AssetBundles to replace. A patching system requires two lists of information:",136],["A list of the currently downloaded AssetBundles, and their versioning information",136],["A list of the AssetBundles on the server, and their versioning information",136],["The patcher should download the list of server-side AssetBundles and compare the AssetBundle lists. Missing AssetBundles, or AssetBundles whose versioning information has changed, should be re-downloaded.",136],["It is also possible to write a custom system for detecting changes to AssetBundles. Most developers who write their own system choose to use an industry-standard data format for their AssetBundle file lists, such as JSON, and a standard C# class for computing checksums, such as MD5.",136],["Unity builds AssetBundles with data ordered in a deterministic manner. This allows applications with custom downloaders to implement differential patching.",136],["Unity does not provide any built-in mechanism for differential patching and neither WWW.LoadFromCacheOrDownload nor UnityWebRequest perform differential patching when using the built-in caching system. If differential patching is a requirement, then a custom downloader must be written.",136],["Preparing Assets for AssetBundles",137],["When using AssetBundles you are free to assign any asset to any bundle you desire. However, there are certain strategies to consider when setting up your bundles. These grouping strategies are meant to be used however you see fit for your specific project. Feel free to mix and match these strategies as you see fit.",137],["Logical Entity Grouping",137],["Logical Entity Grouping is where assets are assigned to AssetBundles based on the functional portion of the project they represent. This includes sections such as User-Interface, characters, environments, and anything else that may appear frequently throughout the lifetime of the application.",137],["Examples",137],["Bundling all the textures and layout data for a User-Interface screen",137],["Bundling all the models and animations for a character/set of characters",137],["Bundling the textures and models for pieces of the scenery shared across multiple levels",137],["Logical Entity Grouping is ideal for downloadable content (DLC) for the fact that, with everything separated in this way, you’re able to make a change to a single entity and not require the download of additional, unchanged, assets.",137],["The biggest trick to being able to properly implement this strategy is that the developer assigning assets to their respective bundles must be familiar with precisely when and where each asset will be used by the project.",137],["Type Grouping",137],["For this strategy you’ll assign assets that are of similar type, such as audio tracks or language localization files, to a single AssetBundle.",137],["Type grouping is one of the better strategies for building AssetBundles to be used by multiple platforms. For example if your audio compression settings are identical between windows and mac platforms, you can pack all audio data into AssetBundles by themselves and reuse those bundles, whereas shaders tend to get compiled with more platform specific options so a shader bundle you build for mac may not be reused on windows. In addition, this method is great for making your AssetBundles compatible with more unity player versions as textures compression formats and settings change less frequently than something like your code scripts or prefabs.",137],["Concurrent Content Grouping",137],["Concurrent Content Grouping is the idea that you will bundle assets together that will be loaded and used at the same time. You could think of these types of bundles as being used for a level based game where each level contains totally unique characters, textures, music, etc. You would want to be absolutely certain that an asset in one of these AssetBundles is only used at the same time the rest of the assets in that bundle are going to be used. Having a dependency on a single asset inside a Concurrent Content Grouping bundle would result in significant increased load times. You would be forced to download the entire bundle for that single asset.",137],["The most common use-case for Concurrent Content Grouping bundles is for bundles that are based on scenes. In this assignment strategy, each scene bundle should contain most or all of that scenes dependencies.",137],["Note that a project absolutely can and should mix these strategies as your needs require. Using the optimal asset assignment strategy for any given scenario greatly increases efficiency for any project.",137],["For example, a project may decide to group its User-Interface (UI) elements for different platforms into their own Platform-UI specific bundle but group its interactive content by level/scene.",137],["Regardless of the strategy you follow, here are some additional tips that are good to keep in mind across the board:",137],["Split frequently updated objects into AssetBundles separate from objects that rarely change",137],["Group objects that are likely to be loaded simultaneously. Such as a model, its textures, and its animations",137],["If you notice multiple objects across multiple AssetBundles are dependant on a single asset from a completely different AssetBundle, move the dependency to a separate AssetBundle. If several AssetBundles are referencing the same group of assets in other AssetBundles, it may be worth pulling those dependencies into a shared AssetBundle to reduce duplication.",137],["If two sets of objects are unlikely to ever be loaded at the same time, such as Standard and High Definition assets, be sure they are in their own AssetBundles.",137],["Consider splitting apart an AssetBundle if less than 50% of that bundle is ever frequently loaded at the same time",137],["Consider combining AssetBundles that are small (less than five to ten assets) but whose content is frequently loaded simultaneously",137],["If a group of objects are simply different versions of the same object, consider AssetBundle Variants",137],["Troubleshooting",138],["This section describes several problems that commonly appear in projects using AssetBundles.",138],["Asset Duplication",138],["Unity's AssetBundle system will discover all dependencies of an Object when the Object is built into an AssetBundle. This is done using the Asset Database. This dependency information is used to determine the set of Objects that will be included in an AssetBundle.",138],["Assignment to AssetBundles happens at the Asset level. The Objects inside an Asset that is explicitly assigned to an AssetBundle will only be built into that single AssetBundle. Depending which signature of BuildPipeline.BuildAssetBundles is called, an Asset is \"explicitly assigned\" either by setting the Asset's AssetImporter.assetBundleName property to a non-empty string, or by listing it in AssetBundleBuild.assetNames.",138],["Any Object that is part of an Asset that is not explicitly assigned in an AssetBundle will be included in each AssetBundle that contains any Objects that reference it.",138],["In other words, if two different Objects are assigned to two different AssetBundles, but both have references to a common dependency Object, then that dependency Object will be copied into both AssetBundles. The duplicated dependency will also be instanced, meaning that the two copies of the dependency Object will be considered different Objects with a different identifiers. This will increase the total size of the application's AssetBundles. This will also cause two different copies of the Object to be loaded into memory if the application loads both of its parents.",138],["There are several ways to address this problem:",138],["Ensure that Objects built into different AssetBundles do not share dependencies. Any Objects which do share dependencies can be placed into the same AssetBundle without duplicating their dependencies.",138],["This method usually is not viable for projects with many shared dependencies. It can produce monolithic AssetBundles that must be rebuilt and re-downloaded too frequently to be convenient or efficient.",138],["Segment AssetBundles so that no two AssetBundles that share a dependency will be loaded at the same time.",138],["This method may work for certain types of projects, such as level-based games. However there is still a trade-off, because duplicated objects will increase the build time and sizes of the project's AssetBundles, and could impact loading times.",138],["Ensure that all dependency assets are built into their own AssetBundles. This entirely eliminates the risk of duplicated assets, but also introduces complexity. The application must track dependencies between AssetBundles, and ensure that the right AssetBundles are loaded before calling any AssetBundle.LoadAsset APIs.",138],["Object dependencies are tracked via the AssetDatabase API, located in the UnityEditor namespace. As the namespace implies, this API is only available in the Unity Editor and not at runtime. AssetDatabase.GetDependencies can be used to locate all of the immediate dependencies of a specific Object or Asset. Note that these dependencies may have their own dependencies so this can be a recursive calculation. The assignment of Assets to AssetBundles will either be defined explicitly by passing arrays of AssetBundleBuild structures when calling BuildPipeline.BuildAssetBundles, or can be queried using the AssetImporter API. It is possible to write an Editor script that ensures that all of an AssetBundle's direct or indirect dependencies are assigned to AssetBundles, or that no two AssetBundles share dependencies that have not been assigned to an AssetBundle.",138],["Note**: When building AssetBundles with the Addressables package, the Addressables Analyze window can be used to discover duplicated assets.",138],["Sprite Atlas Duplication",138],["The following sections describe a quirk of asset dependency calculation code when used in conjunction with automatically-generated sprite atlases.",138],["Any automatically-generated sprite atlas will be assigned to the AssetBundle containing the Sprite Objects from which the sprite atlas was generated. If the sprite Objects are assigned to multiple AssetBundles, then the sprite atlas will not be assigned to an AssetBundle and will be duplicated. If the Sprite Objects are not assigned to an AssetBundle, then the sprite atlas will also not be assigned to an AssetBundle.",138],["To ensure that sprite atlases are not duplicated, check that all sprites tagged into the same sprite atlas are assigned to the same AssetBundle.",138],["Android Textures",138],["Due to heavy device fragmentation in the Android ecosystem, it is often necessary to compress textures into several different formats. While all Android devices support ETC1, ETC1 does not support textures with alpha channels. Should an application not require OpenGL ES 2 support, the cleanest way to solve the problem is to use ETC2, which is supported by all Android OpenGL ES 3 devices.",138],["Most applications need to ship on older devices where ETC2 support is unavailable. One way to solve this problem is with AssetBundle Variants. (Please see Unity's Android optimization guide for details on other options.)",138],["To use AssetBundle Variants, all textures that cannot be cleanly compressed using ETC1 must be isolated into texture-only AssetBundles. Next, create sufficient variants of these AssetBundles to support the non-ETC2-capable slices of the Android ecosystem, using vendor-specific texture compression formats such as DXT5, PVRTC and ATITC. For each AssetBundle Variant, change the included textures' TextureImporter settings to the compression format appropriate to the Variant.",138],["At runtime, support for the different texture compression formats can be detected using the SystemInfo.SupportsTextureFormat API. This information should be used to select and load the AssetBundle Variant containing textures compressed in a supported format.",138],["More information on Android texture compression formats can be found here.",138],["Interactions between Shaders and AssetBundles",138],["When you build an AssetBundle, Unity uses information in that bundle to select which shader variants to compile. This includes information about the scenes, materials, Graphics Settings, and ShaderVariantCollections in the AssetBundle.",138],["Separate build pipelines compile their own shaders independently of other pipelines. If both a Player build and an Addressables build reference a shader, Unity compiles two separate copies of the shader, one for each pipeline.",138],["This process doesn't account for any runtime information such as keywords, textures, or changes due to code execution. If you want to include specific shaders in your build, either include a ShaderVariantCollection with the desired shaders, or include the shader in your build manually by adding it to the Always Included Shaders list in your graphics settings.",138],["",138],["AssetBundle workflow",139],["To get started with AssetBundles, follow these steps. More detailed information about each piece of the workflow can be found in the other pages in this section of documentation.",139],["Note**: This section describes the creation of AssetBundles using the built-in BuildPipeline.BuildAssetBundles() API. A recommended, and more user friendly, alternative is to use the Addressables package.",139],["Assigning Assets to AssetBundles",139],["To assign a given Asset to an AssetBundle, follow these steps:",139],["Select the Asset you want to assign to a bundle from your Project View.",139],["Examine the object in the Inspector.",139],["At the bottom of the Inspector, there is a section to assign AssetBundles and Variants. Use the left-hand drop down to assign the AssetBundle, and the right-hand drop down to assign the variant.",139],["Click None on the left-hand drop to reveal the currently registered AssetBundle names.",139],["Click New to create a new AssetBundle",139],["Type in the desired AssetBundle name. Note: AssetBundle names support a type of folder structure depending on what you type. To add sub-folders, separate folder names by a /. For example, use the AssetBundle name environment/forest to create a bundle named forest under an environment sub-folder",139],["Once you’ve selected or created an AssetBundle name, you can repeat this process for the right hand drop down to assign or create a Variant name, if you desire. Variant names are not required to build the AssetBundles",139],["Note:** In the Inspector you can assign an AssetBundle to a folder in your Project. By default, all Assets in that folder are assigned to the same AssetBundle as the folder. The AssetBundle assignments for individual Assets takes precedence, however.",139],["To read more information on AssetBundle assignments and accompanying strategies, see documentation on Preparing Assets for AssetBundles.",139],["Build the AssetBundles",139],["Create a folder called Editor in the Assets folders, and place a script with the following contents in the folder:",139],["using UnityEditor;",139],["using System.IO;",139],["public class CreateAssetBundles",139],["[MenuItem(\"Assets/Build AssetBundles\")]",139],["static void BuildAllAssetBundles()",139],["string assetBundleDirectory = \"Assets/AssetBundles\";",139],["if(!Directory.Exists(assetBundleDirectory))",139],["Directory.CreateDirectory(assetBundleDirectory);",139],["BuildPipeline.BuildAssetBundles(assetBundleDirectory,",139],["BuildAssetBundleOptions.None,",139],["BuildTarget.StandaloneWindows);",139],["This script creates a menu item at the bottom of the Assets menu called Build AssetBundles that executes the code in the function associated with that tag. When you click Build AssetBundles a progress bar appears with a build dialog. This takes all the Assets you labeled with an AssetBundle name and places them in a folder at the path assetBundleDirectory defines.",139],["Note:** You can also define the content of AssetBundles programmatically instead of using the Inspector-based method described above. This is available by using a signature of BuildPipeline.BuildAssetBundles that accepts an array of AssetBundleBuild structures. In that case the list of desired Assets for each bundle are passed in, and any assignment to AssetBundles made in the Inspector is ignored.",139],["For more details about this, see documentation on Building AssetBundles.",139],["Loading AssetBundles and Assets",139],["If you want to load from local storage, use the AssetBundles.LoadFromFile API, which looks like this:",139],["```c",139],["public class LoadFromFileExample : MonoBehaviour {",139],["void Start() {",139],["var myLoadedAssetBundle",139],["= AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, \"myassetBundle\"));",139],["if (myLoadedAssetBundle == null) {",139],["Debug.Log(\"Failed to load AssetBundle!\");",139],["return;",139],["var prefab = myLoadedAssetBundle.LoadAsset(\"MyObject\");",139],["Instantiate(prefab);",139],["LoadFromFile takes the path of the bundle file.",139],["If your AssetBundles are hosted online, or you are running on a platform that does not support direct file system access, then use the UnityWebRequestAssetBundle API. Here’s an example:",139],["IEnumerator InstantiateObject()",139],["string url = \"file:///\" + Application.dataPath + \"/AssetBundles/\" + assetBundleName;",139],["var request",139],["= UnityEngine.Networking.UnityWebRequestAssetBundle.GetAssetBundle(url, 0);",139],["yield return request.Send();",139],["AssetBundle bundle = UnityEngine.Networking.DownloadHandlerAssetBundle.GetContent(request);",139],["GameObject cube = bundle.LoadAsset(\"Cube\");",139],["GameObject sprite = bundle.LoadAsset(\"Sprite\");",139],["Instantiate(cube);",139],["Instantiate(sprite);",139],["GetAssetBundle(string, int) takes the URL of the location of the AssetBundle and the version of the bundle you want to download. This example points to a local file, but string url could point to any URL you have your AssetBundles hosted at.",139],["The UnityWebRequestAssetBundle class has a specific handle for dealing with AssetBundles, DownloadHandlerAssetBundle, which gets the AssetBundle from the request.",139],["Regardless of the method you use, you now have access to the AssetBundle object. From that object you need to use LoadAsset<T>(string) which takes the type, T, of the asset you’re attempting to load and the name of the object as a string that’s inside the bundle. This returns whatever object you’re loading from the AssetBundle. You can use these returned objects just like any object inside of Unity. For example, if you want to create a GameObject in the scene, you just need to call Instantiate(gameObjectFromAssetBundle).",139],["For more information on APIs that load AssetBundles, see documentation on Using AssetBundles Natively.",139],["AssetBundles",140],["An AssetBundle is an archive file that contains platform-specific non-code Assets (such as Models, Textures, Prefabs, Audio clips, and even entire Scenes) that Unity can load at run time. AssetBundles can express dependencies between each other; for example, a Material in one AssetBundle can reference a Texture in another AssetBundle. For efficient delivery over networks, you can compress AssetBundles with a choice of built-in algorithms depending on use case requirements (LZMA and LZ4).",140],["AssetBundles can be useful for downloadable content (DLC), reducing initial install size, loading assets optimized for the end-user’s platform, and reduce runtime memory pressure.",140],["Note:** An AssetBundle can contain the serialized data of an instance of a code object, such as a ScriptableObject. However, the class definition itself is compiled into one of the Project assemblies. When you load a serialized object in an AssetBundle, Unity finds the matching class definition, creates an instance of it, and sets that instance's fields using the serialized values. This means that you can introduce new items to your game in an AssetBundle as long as those items do not require any changes to your class definitions.",140],["What’s in an AssetBundle?",140],["\"AssetBundle\" can refer to two different, but related things.",140],["First is the actual file on disk. This is called the AssetBundle archive. The AssetBundle archive is a container, like a folder, that holds additional files inside it. These additional files consist of two types:",140],["A serialized file, which contains your Assets broken out into their individual objects and written out to this single file.",140],["Resource files, which are chunks of binary data stored separately for certain Assets (Textures and audio) to allow Unity to efficiently load them from disk on another thread.",140],["\"AssetBundle\" can also refer to the actual AssetBundle object you interact with via code to load Assets from a specific AssetBundle archive. This object contains a map of all the file paths of the Assets you added to this archive.",140],["The Asset Database",141],["With most types of asset, Unity needs to convert the data from the asset’s source file into a format that it can use in a game or real-time application. It stores these converted files, and the data associated with them, in the Asset Database.",141],["The conversion process is required because most file formats are optimized to save storage space, whereas in a game or a real-time application, the asset data needs to be in a format that is ready for hardware, such as the CPU, graphics, or audio hardware, to use immediately. For example, when Unity imports a .png image file as a texture, it does not use the original .png-formatted data at runtime. Instead, when you import the texture, Unity creates a new representation of the image in a different format which is stored in the Project's Library folder. The Texture class in the Unity engine uses this imported version, and Unity uploads it to the GPU for real-time display.",141],["If you subsequently modify an asset’s source file that you have already imported (or if you change any of its dependencies) Unity reimports the file and updates the imported version of the data. See Refreshing the Asset Database for more information on this process.",141],["The Asset Database also provides an AssetDatabase API that you can use to access Assets, and control or customize the import process.",141],["Asset import dependencies",141],["The Asset Database keeps track of all the dependencies for each asset, and keeps a cache of the imported versions of all the Assets.",141],["An Asset's import dependencies consists of all of the data that might influence the imported data. For example, the source file of an Asset is a dependency, as well as the Asset's import settings (such as a texture’s compression type), or the target platform of your Project (for instance, PS4 hardware requires data in a different format to Android hardware). If you modify any of these dependencies, the cached version of the imported Asset becomes invalid and Unity must re-import it to reflect the changes.",141],["Asset caching",141],["The Asset Cache is where Unity stores the imported versions of assets. Because Unity can always recreate these imported versions from the source asset file and its dependencies, these imported versions are treated as a cache of pre-calculated data, which saves time when you use Unity. For this reason, you should exclude the files in the Asset Cache from version control systems.",141],["Unity uses a local cache by default, which means that the imported versions of Assets are cached in the Library folder in your Project’s folder on your local machine. You should use an ignore file to exclude this folder from version control.",141],["However, if you work as part of a team and use a version control system, it might be beneficial to also use Unity Accelerator, which shares the Asset Cache across your LAN.",141],["Because cached Assets are not suitable for storing in a version control system, when your team works together on a Project and uses local caching, every team member’s copy of Unity performs the import process if an Asset or dependency changes, which can be time consuming.",141],["Unity provides a solution to this called Unity Accelerator. One of the Accelerator’s features is a software agent which stores and serves the cached versions of Assets to everyone who is working on the same Project together on the same local network. This means that only one team member needs to import any given asset. The imported version of the Asset is then stored in the Accelerator and the other team members can download the cached version instead of waiting for the import process locally.",141],["Source Assets and Artifacts",141],["Unity maintains two database files in the Library folder, which together are called the Asset Database. These two databases keep track of information about your source asset files, and Artifacts, which is information about the import results.",141],["The source Asset Database",141],["The source Asset Database contains meta-information about your source asset files which Unity uses to determine whether the file has been modified, and therefore whether it should reimport the files. This includes information such as last modified date, a hash of the file’s contents, GUIDs and other meta-information.",141],["The Artifact database",141],["Artifacts are the results of the import process. The Artifact database contains information about the import results of each source asset. Each Artifact contains the import dependency information, Artifact meta-information and a list of Artifact files.",141],["Note:** The database files are located in your Project’s Library folder, and as such you should exclude them from version control systems. You can find them in the following locations:",141],["Source Asset Database: Library\\SourceAssetDB",141],["Artifact Database: Library\\ArtifactDB",141],["Importing an Asset",141],["Unity normally imports assets automatically when they are dragged into the project but it is also possible to import them under script control. To do this you can use the AssetDatabase.ImportAsset method as in the example below.",141],["using UnityEngine;",141],["using UnityEditor;",141],["public class ImportAsset {",141],["[MenuItem (\"AssetDatabase/ImportExample\")]",141],["static void ImportExample ()",141],["AssetDatabase.ImportAsset(\"Assets/Textures/texture.jpg\", ImportAssetOptions.Default);",141],["You can also pass an extra parameter of type AssetDatabase.ImportAssetOptions to the AssetDatabase.ImportAsset call. The scripting reference page documents the different options and their effects on the function's behaviour.",141],["Loading an Asset",141],["The editor loads assets only as needed, say if they are added to the scene or edited from the Inspector panel. However, you can load and access assets from a script using AssetDatabase.LoadAssetAtPath, AssetDatabase.LoadMainAssetAtPath, AssetDatabase.LoadAllAssetRepresentationsAtPath and AssetDatabase.LoadAllAssetsAtPath. See the scripting documentation for further details.",141],["using UnityEngine;",141],["using UnityEditor;",141],["public class ImportAsset {",141],["[MenuItem (\"AssetDatabase/LoadAssetExample\")]",141],["static void ImportExample ()",141],["Texture2D t = AssetDatabase.LoadAssetAtPath(\"Assets/Textures/texture.jpg\", typeof(Texture2D)) as Texture2D;",141],["File Operations using the AssetDatabase",141],["Since Unity keeps metadata about asset files, you should never create, move or delete them using the filesystem. Instead, you can use AssetDatabase.Contains, AssetDatabase.CreateAsset, AssetDatabase.CreateFolder, AssetDatabase.RenameAsset, AssetDatabase.CopyAsset, AssetDatabase.MoveAsset, AssetDatabase.MoveAssetToTrash and AssetDatabase.DeleteAsset.",141],["public class AssetDatabaseIOExample {",141],["[MenuItem (\"AssetDatabase/FileOperationsExample\")]",141],["static void Example ()",141],["string ret;",141],["// Create",141],["Material material = new Material (Shader.Find(\"Specular\"));",141],["AssetDatabase.CreateAsset(material, \"Assets/MyMaterial.mat\");",141],["if(AssetDatabase.Contains(material))",141],["Debug.Log(\"Material asset created\");",141],["// Rename",141],["ret = AssetDatabase.RenameAsset(\"Assets/MyMaterial.mat\", \"MyMaterialNew\");",141],["if(ret == \"\")",141],["Debug.Log(\"Material asset renamed to MyMaterialNew\");",141],["else",141],["Debug.Log(ret);",141],["// Create a Folder",141],["ret = AssetDatabase.CreateFolder(\"Assets\", \"NewFolder\");",141],["if(AssetDatabase.GUIDToAssetPath(ret) != \"\")",141],["Debug.Log(\"Folder asset created\");",141],["else",141],["Debug.Log(\"Couldn't find the GUID for the path\");",141],["// Move",141],["ret = AssetDatabase.MoveAsset(AssetDatabase.GetAssetPath(material), \"Assets/NewFolder/MyMaterialNew.mat\");",141],["if(ret == \"\")",141],["Debug.Log(\"Material asset moved to NewFolder/MyMaterialNew.mat\");",141],["else",141],["Debug.Log(ret);",141],["// Copy",141],["if(AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(material), \"Assets/MyMaterialNew.mat\"))",141],["Debug.Log(\"Material asset copied as Assets/MyMaterialNew.mat\");",141],["else",141],["Debug.Log(\"Couldn't copy the material\");",141],["// Manually refresh the Database to inform of a change",141],["AssetDatabase.Refresh();",141],["Material MaterialCopy = AssetDatabase.LoadAssetAtPath(\"Assets/MyMaterialNew.mat\", typeof(Material)) as Material;",141],["// Move to Trash",141],["if(AssetDatabase.MoveAssetToTrash(AssetDatabase.GetAssetPath(MaterialCopy)))",141],["Debug.Log(\"MaterialCopy asset moved to trash\");",141],["// Delete",141],["if(AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(material)))",141],["Debug.Log(\"Material asset deleted\");",141],["if(AssetDatabase.DeleteAsset(\"Assets/NewFolder\"))",141],["Debug.Log(\"NewFolder deleted\");",141],["// Refresh the AssetDatabase after all the changes",141],["AssetDatabase.Refresh();",141],["Platform Switching and reimporting",141],["Switching between platforms might cause Unity to reimport your assets. This usually happens when the way the asset is imported differs between platforms, which is often the case. For example, different platforms have different texture formats, so textures are imported differently for each platform.",141],["When using Asset Database V2, the platform is part of the hash that the Asset Database uses to store the import results for Unity’s built-in importers. This means that the results for importing your assets on different platforms are stored as separate pieces of cached data.",141],["The result of this feature is that the first time you switch platform with new assets in your project that haven’t already been imported for that platform, they are reimported. This means that you have to wait for that process to complete. However the new reimported data does not overwrite the old data cached import for the previous platform.",141],["This means whenever you subsequently switch back to a platform where you have already imported assets for that platform, those asset import results are already cached and ready to use, making the switch much faster.",141],["",141],["Asset Database version",141],["This documentation refers to the version 2 of the Asset Database, which is the default in new Projects created with Unity 2019.3 or newer. The legacy version (version 1) was the default in earlier versions of Unity, which behaves in a different way. The legacy version cannot be used in Unity 2020+.",141],["Batching with the AssetDatabase",142],["You can use batching to reduce the amount of time and processing taken when making changes to Assets in your code.",142],["If you make changes to multiple Asset in your code (for example, copying or moving Asset files), the Asset Database’s default behavior is to process each change in turn, and perform a full Refresh process for the Asset before moving on to the next line of code.",142],["In the example below, three Assets are changed. Asset1 is copied, Asset2 is moved, and Asset3 is deleted:",142],["AssetDatabase.CopyAsset(\"Assets/Asset1.txt\", \"Assets/Text/Asset1.txt\");",142],["AssetDatabase.MoveAsset(\"Assets/Asset2.txt\", \"Assets/Text/Asset2.txt\");",142],["AssetDatabase.DeleteAsset(\"Assets/Asset3.txt\");",142],["Without batching, Unity processes each change before moving on to the next line of code. This not only takes an unnecessarily long amount of time, but also triggers many callbacks that you can avoid if you use batching.",142],["Instead, you can specify that the Asset Database should process a group of operations at once. To do this, you need to tell the Asset Database to pause its normal behavior before you make your changes, then tell it to resume after your changes are complete.",142],["In particular, you should try to use batching if you are doing more than one of any of the following operations:",142],["AssetDatabase.ImportAsset",142],["AssetDatabase.MoveAsset",142],["AssetDatabase.CopyAsset",142],["AddObjectToAsset",142],["Methods to process operations",142],["To specify that the Asset Database should process a group of operations at once, you can use the following methods: AssetDatabase.StartAssetEditing and AssetDatabase.StopAssetEditing.",142],["AssetDatabase.StartAssetEditing**",142],["This method tells the Asset Database that you are starting to make edits to Assets. The Asset Database enters a paused state, and does not process any further changes to your Assets until you call the corresponding StopAssetEditing method to tell it you are finished.",142],["AssetDatabase.StopAssetEditing**",142],["Once you perform all of your Asset changes, call this method to tell the Asset Database to process your changes and resume its normal behavior of automatically processing changes immediately. The Asset Database then processes the changes you made between StartAssetEditing and StopAssetEditing in a Batch, which is faster than if they had been processed one by one.",142],["Nested calls to StartAssetEditing and StopAssetEditing",142],["If you make more than one call to StartAssetEditing, you must make the corresponding number of calls to StopAssetEditing to make the Asset Database resume its normal behavior of automatically processing changes.",142],["This is because these functions increment and decrement a counter, rather than acting as a simple on/off switch. Calling StartAssetEditing increments the counter, and calling StopAssetEditing decrements the counter. The Asset Database resumes its normal behavior when the counter reaches zero.",142],["The reason Unity uses a counter rather than a simple on/off boolean is so that if your code executes multiple nested \"start\" and \"stop\" pairs, the inner pairs do not accidentally re-enable the Asset Database’s normal behavior too early. Instead, each pair increments and decrements the counter by one, and if your code is correctly nested, the final outer call to StopAssetEditing sets the counter to zero.",142],["Note:** Your code should never cause the counter to go below zero. Doing so generates an error.",142],["Example",142],["The following example shows the recommended way to use these methods:",142],["```using UnityEngine;",142],["using UnityEditor;",142],["public class StartStopAssetEditingExample : MonoBehaviour",142],["[MenuItem(\"APIExamples/StartStopAssetEditing\")]",142],["static void CallAssetDatabaseAPIsBetweenStartStopAssetEditing()",142],["try",142],["//Place the Asset Database in a state where",142],["//importing is suspended for most APIs",142],["AssetDatabase.StartAssetEditing();",142],["AssetDatabase.CopyAsset(\"Assets/Asset1.txt\", \"Assets/Text/Asset1.txt\");",142],["AssetDatabase.MoveAsset(\"Assets/Asset2.txt\", \"Assets/Text/Asset2.txt\");",142],["AssetDatabase.DeleteAsset(\"Assets/Asset3.txt\");",142],["finally",142],["//Adding a call to StopAssetEditing inside",142],["//a \"finally\" block ensures that the AssetDatabase",142],["//state will be reset when leaving this function",142],["AssetDatabase.StopAssetEditing();",142],["Using try...finally for Asset Editing",142],["When you call AssetDatabase.StartAssetEditing, Unity puts the entire Editor’s AssetDatabase in a paused state. As such, if you do not make a corresponding call to AssetDatabase.StopAssetEditing, the Editor appears to be unresponsive when it comes to any Asset-related operations (Importing, Refreshing, etc.), and requires an Editor restart to restore its normal operation.",142],["Without using a try ... finally block, if any of your code which modifies Assets causes an error, it might prevent the StopAssetEditing from being called. To avoid this situation, wrap the calls inside a try...finally block, with the StartAssetEditing, and your Asset modification code in the try block, and the StopAssetEditing call placed in the finally block. This ensures that if any exceptions happen while your changes are made in the try block, it’s still guaranteed that AssetDatabase.StopAssetEditing will be called.",142],["Customizing the Asset Database workflow",143],["Use the AssetDatabase class to customize your asset pipeline and create tools to access, load, create and manipulate assets with your own scripts, to extend the way the Editor works. It is an Editor class, so its features are not available at runtime in standalone builds.",143],["Customize your asset workflow",143],["The AssetDatabase class has a large number of methods that allow you to access and perform operations on assets in exactly the same way that the Unity Editor itself does. You can create, import, delete, copy, move, load, and save assets, and search the asset database.",143],["This means you can create anything from simple adjustments to powerful tools and customizations to your project’s asset workflow, using Unity’s Editor scripting and Editor window customization.",143],["For a simple example, see the documentation for the AssetDatabase.ForceReserializeAssets method. It shows how you can add a menu item to the Editor that gives you more control over how certain asset bundles should be upgraded when you upgrade your project to a newer version of Unity.",143],["For the full list of methods available, and documentation for each of the methods, see the AssetDatabase scripting API page.",143],["Asset objects",143],["From a scripting point of view, what Unity considers an \"asset\" is slightly different than what you see displayed in the Project window. The files that you place in your project’s *Assets *folder are the source files for your assets, but they differ conceptually to the asset objects that the Unity Editor works with. When Unity imports asset files, it processes them and generates an imported result: serialized C# objects that derive from UnityEngine.Object. From a scripting point-of-view, the assets that you have access to when scripting in the Unity Editor are these imported results.",143],["For example, an asset that might start off as a binary file, such as a JPEG or PNG image file, is converted to a C# object whose type is a specialization of UnityEngine.Object. In the case of JPEG or PNG files, they are converted to serialized instances of the Texture class, which in turn inherits from UnityEngine.Object. The serialized object data is then stored as an artifact in the Library folder. So, when you access a Texture asset with a script, you are not accessing the original JPEG or PNG file, you are accessing the serialized version of the C# Texture object that was generated when the original image file was imported. The .meta file which Unity creates during the import process, stored next to the original asset file, contains the asset’s import settings, and contains a GUID which allows Unity to connect the original asset file with the artifact in the asset database.",143],["Inside asset files and artifact files",143],["Some types of asset files that Unity itself creates, such as .prefab, .scene, .asset, and .mat, already contain serialized data in their source file, so the artifact file that Unity produces and caches is very similar to the source file. The source files for these, for example a .mat material file in your project’s Assets folder, are human-readable (provided Asset Serialization Mode is set to Force Text, which is the default setting). This is in contrast to binary asset files imported from external sources such as textures or audio, where the files are not normally human-readable.",143],["Asset files can contain multiple serialized objects, and each of these can be considered an \"asset\" for the purposes of scripting with the AssetDatabase methods. For example, a .prefab asset file could contain a serialized GameObject with multiple components attached. Each of those components are also serialized as objects in the asset file, and so when accessing the contents of the prefab asset using AssetDatabase methods, the component objects within the asset file are considered sub assets, (explained in more detail below).",143],["The serialized objects generated during the import process are called artifacts, and Unity stores them in the Asset Database’s cache of import artifacts, in the Library folder of your project. They are treated as cached data because Unity can always regenerate them from the source assets, using the importer settings and project settings saved in your project.",143],["You can inspect the artifacts produced for the assets in your project by using the Import Activity window, which reveals the specific cached artifact files that Unity generates, along with other useful information such as when the import happened, and how long it took.",143],["Each artifact file name is a unique hash (a GUID) with no file extension. Unity separates these files into subfolders, each subfolder with a name matching the first two characters of the artifact filename.",143],["These artifact files contain binary data, and are not designed to be human-readable. While it’s useful to understand that these files contain the data used by the asset database, you do not need to view, edit, or use these files directly while working with Unity. Instead, the AssetDatabase class provides the methods necessary to work with assets within the Editor.",143],["Main assets and sub-assets",143],["Because Unity can store multiple serialized objects within the same asset file, Unity has a concept of the main asset within any asset file. When Unity creates asset files that contain a single asset, such as a material, the main asset is always that single asset. For other types containing more than one serialized asset object, the main asset is always the first asset added to the file, unless otherwise specified with the SetMainObject method.",143],["You can sometimes see sub-assets in the Project window of the Editor, if those sub-assets are of certain types. For example, looking at this FBX asset file containing a \"Space Frigate\" model in the Project window, its view has been expanded to reveal that it has a material and a mesh as sub-assets.",143],["Assets can also have sub-asset types that do not show in the Project window like this. For example, the \"Space Frigate\" asset file above actually contains more than the two sub-assets displayed in the Project window. You can see the real number of assets when you access the asset file using AssetDatabase methods, as demonstrated in the script below:",143],["using UnityEngine;",143],["using UnityEditor;",143],["public class Example : MonoBehaviour",143],["[MenuItem(\"AssetDatabase/InspectAssets\")]",143],["private static void InspectAssets()",143],["Object[] data = AssetDatabase.LoadAllAssetsAtPath(\"Assets/Space Frigate.fbx\");",143],["Debug.Log(data.Length + \" Assets\");",143],["foreach (Object o in data)",143],["Debug.Log(o);",143],["In this case, the output would show that the imported, serialized version of this file contains six assets:",143],["6 Assets",143],["Space Frigate (UnityEngine.GameObject)",143],["space_frigate_0 (UnityEngine.Material)",143],["space_frigate_0 (UnityEngine.Mesh)",143],["Space Frigate (UnityEngine.Transform)",143],["Space Frigate (UnityEngine.MeshRenderer)",143],["Space Frigate (UnityEngine.MeshFilter)",143],["This is because the GameObject, material, the mesh data itself, and each of the components that Unity automatically added to the GameObject during the import process (the Transform, the MeshFilter, and the MeshRenderer), each count as a separate serialized object. Therefore they are sub-assets of the asset file, and as far as the Asset Database API is concerned, are each a separate asset.",143],["Asset Import Order",143],["If you are scripting using the AssetDatabase class, it’s important to understand how the order of Unity’s import processes can affect your scripts, otherwise you may get unexpected results. The order is as follows:",143],["Import Script Assets (.cs, .dll, .asmdef files)",143],["Compilation",143],["Domain reload",143],["InitializeOnLoad callback",143],["Import all other assets",143],["Scripts are always imported and compiled before all other regular assets, because the Editor needs to know whether there are custom asset post-processors or scripted importers in the project. This ensures that the Editor uses any new or changed importers or post-processors when importing the rest of the non-script assets.",143],["The InitializeOnLoad callback is often used to run some code on project startup or when scripts change. As shown in the list above, this callback is run after Unity reloads the domain, but before it starts importing assets. This means if you’re using the [InitializeOnLoad] callback to access assets, your code is executed before the current asset import cycle completes. In particular:",143],["For assets being imported for the first time, methods like AssetDatabase.LoadAssetAtPath, AssetDatabase.FindAssets, Shader.Find, Resources.Load will return null, since those assets have not yet been imported.",143],["For assets that have already been imported at least once, methods like AssetDatabase.LoadAssetAtPath, AssetDatabase.FindAssets, Shader.Find, Resources.Load will return the previous (outdated) version of the asset if it was modified before reloading the domain, since domain reload occurs before the regular asset import phase.",143],["When you are writing scripted importers, asset pre-processors, and asset post-processors, you should not make your code assume that other specific assets are already imported according to any particular order. When importing, Unity groups assets into queues by type, and while the types are imported in a predefined order, assets within a queue of the same type are imported in an arbitrary order unless you use ScriptedImporter.GatherDependenciesFromSourceFile. Using GatherDependenciesFromSourceFile also creates a dependency between the assets, so if one asset is modified, the other that depends on it is reimported.",143],["Refreshing the Asset Database",144],["Unity refreshes the Asset Database in the following situations:",144],["When the Unity Editor regains focus (if you have enabled Auto-Refresh in the Preferences window)",144],["When you select Assets > Refresh from the menu",144],["When you call AssetDatabase.Refresh from C#",144],["Some other AssetDatabase APIs trigger a Refresh() but only for the Assets you specify. For example CreateAsset() and ImportAsset().",144],["Unity performs the following steps during an Asset Database refresh:",144],["It looks for changes to the Asset files, and then updates the source Asset Database",144],["It imports and compiles code-related files such as .dll, .asmdef, .asmref, .rsp, and .cs files.",144],["It then reloads the domain, if Refresh was not invoked from a script.",144],["It post-processes all of the Assets for the imported code-related files",144],["It then imports non-code-related Assets and post-processes all the remaining imported Assets",144],["It then hot reloads the Assets",144],["The Asset Database detailed refresh process",144],["Unity performs the steps described in the previous section during the Asset Database refresh. This section describes this process in more detail. These steps happen inside a loop, and some steps might cause the refresh process to restart (for example, if importing an Asset creates other Assets which Unity also needs to import).",144],["Unity restarts the Asset Database refresh loop under the following conditions:",144],["If, after the import, a file that the importer used has changed on disk.",144],["If, in OnPostProcessAllAssets, you call any of the following:",144],["Any AssetDatabase API that queues an additional Refresh, such as MoveAsset, CreateAsset and ImportAsset",144],["If the timestamp of the file being imported changes while it is being imported, the file is queued for re-import",144],["When an importer creates a file in the middle of an import (for example, FBX models can restart a Refresh by extracting their Textures from the model).",144],["Look for changes on disk",144],["When Unity looks for changes on disk, it scans the Assets and Packages folders in your Project to check if any files have been added, modified, or deleted since the last scan. It gathers any changes into a list to process in the next step.",144],["Update source Asset Database",144],["Once Unity gathers the file list, it then gets the file hashes for the files which have either been added or modified. It then updates the Asset Database with the GUIDs for those files, and removes the entries for the files that it detected as deleted.",144],["Dependency tracking",144],["The Asset Database keeps track of two types of Asset dependencies: static dependencies and dynamic dependencies. If any dependency of an Asset changes, Unity triggers a reimport of that Asset.",144],["Static dependencies",144],["A static dependency is a value, setting or property that an importer depends on. Static dependencies are known before the Asset is imported, and are not affected by the behavior of the importer during the import process. If a static dependency of an Asset changes, Unity re-imports that Asset.",144],["Some common static dependencies are:",144],["The name of the Asset",144],["ID of the importer associated with the Asset",144],["The version of the importer",144],["The currently selected build target platform",144],["Dynamic dependencies",144],["Unity typically discovers the dynamic dependencies of an asset during the import process. This is because these dependencies are defined by the content of the source asset. For example, a Shader might reference another Shader, and a Prefab might depend on other Prefabs.",144],["The importer might also use a global state conditionally based on the content of the source asset, in which case it also becomes a dynamic dependency. Examples of this are the target platform, the Project’s color space, the graphics API, the scripting runtime version, or the Texture compression state.",144],["Unity stores these dynamic dependencies of an asset in an Asset Import Context.",144],["Import and compile code-related files",144],["In the list of changed or added files, Unity gathers the ones that relate to code, and sends them to the script compilation pipeline. The compiler generates assemblies from the script files and assembly definition files in your Project. For more information on this step, see documentation on script compilation assembly definition files.",144],["Reload the domain",144],["If Unity detects any script changes, it reloads the C# domain. It does this because new Scripted Importers could have been created, and their logic could potentially impact the import result of Assets in the Refresh queue. This step restarts the Refresh() to ensure any new Scripted Importers take effect.",144],["Import non-code-related Assets",144],["Once Unity imports all code-related assets and it reloads the domain, it then moves on to the remaining Assets. Each Asset’s importer processes that type of Asset, and identifies the file types that it should import based on the filename extensions. For example, the TextureImporter is responsible for importing .jpg, .png and .psd files, among others.",144],["There are two types of importers:",144],["Native importers: Unity's built-in importers.",144],["Scripted importers: Custom importers that extend Unity's import capabilities. These are written in C#.",144],["Unity processes all native importers first, and then all scripted importers in a separate phase.",144],["When an importer imports an asset file, Unity generates an AssetImportContext. The AssetImportContext reports the Static Dependencies of an asset.",144],["Also, during the import step, there are a number of callbacks which occur.",144],["Preprocess Asset Importer Calls:",144],["Postprocess Asset Importer Calls:",144],["One final post processing callback which is triggered once all importing has completed is OnPostprocessAllAssets.",144],["There are a number of things that can happen which will restart the refresh process on the Asset folder, some of them being:",144],["If the import of an asset failed",144],["If the asset was modified during the import phase of the Refresh. For example, if a file in the list gets modified so its modification date is not what it was in the previous refresh. This can happen if you start pulling files from a Version Control system while the Editor has focus.",144],["If an Asset created other assets during import. For example: When importing an FBX, textures can get extracted from the FBX and placed into the project, and this means that Unity has to import the textures (and any artifacts they generate).",144],["If you force the re-import of a file during one of the pre/post process callbacks or inside OnPostProcessAllAssets, for example, using AssetDatabase.ForceReserializeAssets or AssetImport.SaveAndReimport. Note, you must be careful not to cause infinite reimport loops if you do this.",144],["If an Assembly Reload happens after compiling scripts. If you generate a C# file during the refresh process, that new file must then be compiled, so Unity restarts the refresh.",144],["If you save an asset as \"Text only\" but the Asset must be serialized as binary, a restart will happen. (For example, Scenes with Terrains in them must be serialized as Binary, since the terrain data would be unwieldy if viewed as an array of characters in a text file.)",144],["",144],["Hot reloading",144],["Hot reloading refers to the process where Unity imports and applies any changes to scripts and assets while the Editor is open. This might happen while the Editor is in Play Mode or outside of Play Mode. You do not have to restart your application or the Editor for changes to take effect.",144],["When you change and save a script, Unity hot-reloads all of the project's script data. It first stores all serializable variable values in all loaded scripts, reloads the scripts, then restores the values. All of the data stored in non-serializable variables is lost during a hot reload.",144],["Note:** Unity imports assets imported by the (built-in DefaultImporter)[BuiltInImporters] first, and then script assets, so it does not call any script-defined PostProcessAllAssets for default assets.",144],["End of Refresh",144],["Once all these steps have completed, the Refresh() is complete. The Artifact Database is updated with the relevant information, and the necessary import result files are generated on disk.",144],["Asset Metadata",145],["When Unity imports assets, it also stores and manages additional data about the asset, such as what import settings Unity should use to import the asset, and where the asset is used throughout your project. Below is a description of how this process works:",145],["Unity assigns the asset a unique ID.",145],["Unity creates a .meta file to accompany the asset file.",145],["Unity processes the asset.",145],["The Import settings for any given asset affects how Unity processes the asset. If you modify the asset file, or any of the asset's import settings, Unity reimports the asset. For more information, see Assets and their import settings.",145],["",145],["Unique IDs",145],["The Unity Editor frequently checks the contents of the Assets folder against the list of assets it already knows about. When you place an asset in the Assets folder, Unity detects that you have added a new file.",145],["When Unity finds the new file, it assigns a unique ID to the asset. This is an ID that Unity uses internally to reference the asset, so that Unity can move or rename the asset without breaking anything.",145],["The IDs are not normally visible in the Editor,",145],["",145],["Meta files",145],["The image below shows .meta files that Unity creates for each item in your project's Assets folder. Unity creates meta files for asset files and folders.",145],["These files are hidden in Unity's Project window, and might also be hidden in your file system by default (see Wikipedia: Hidden file and hidden directory), so you might not see them in Windows Explorer or Finder unless you make your hidden files visible on your computer.",145],["This example demonstrates that Unity creates a .meta file for each asset or folder inside the project's Assets folder, because they appear in a system file browser. However, these .meta files are not visible in the Project window because they are hidden by default. To make them visible, open the Mode project setting and enable Visible Meta Files.",145],["When Unity creates a .meta file for an asset, it writes the asset's ID inside the .meta file and stores the .meta file in the same location as the asset file.",145],["The .meta files contain the unique ID assigned to the asset, and values for all the import settings you see in the Inspector window when you select an asset in your Project window. For example, for a Texture, this includes the Texture Type, Wrap Mode, Filter Mode and Aniso Level import settings.",145],["If you change the import settings for an asset, Unity saves those new settings to the .meta file that accompanies the asset. Unity then re-imports the asset according to your updated settings, and updates the corresponding imported \"game-ready\" data in the project's Library folder.",145],["Meta files and asset files",145],["Important**: Meta files contain important information about how the asset is used in the Project, and they must stay with the asset file they relate to. If you move or rename an asset within Unity's own Project window, Unity also automatically moves or renames the corresponding .meta file. However, if you move or rename an asset outside of Unity (that is, in Windows Explorer, or Finder on macOS), you must move or rename the .meta file to match.",145],["If an asset loses its meta file (for example, if you move or rename the asset outside of Unity, but don't move or rename the corresponding .meta file), any reference to that asset is broken in your project. In this situation, Unity notices that the asset does not have a corresponding meta file, generates a new one for the moved/renamed asset as if it is a brand new asset, and deletes the old \"orphaned\" .meta file.",145],["This process can cause significant problems in your project. For example:",145],["If a texture asset loses its .meta file, any materials that use that texture lose their reference to that texture. To fix it, you would need to manually re-assign that texture to any materials which require it.",145],["If a script asset loses its .meta file, any GameObjects or Prefabs that have that script assigned instead have an \"unassigned script\" component, and lose their functionality. To fix it, you would need to manually re-assign that script to any GameObjects which require it.",145],["",145],["Empty folders, meta files, and version control",145],["Unity assigns each folder in your project's Assets folder its own .meta file. However, some version control systems (VCS) can't store empty folders. This means that when you add or delete an empty folder from your project, your VCS stores the .meta file as added or removed, but doesn't store the change of adding or removing the folder itself, which can be confusing or problematic.",145],["To help with this issue, Unity behaves in the following specific ways relating to empty folders:",145],["If Unity detects an empty folder that no longer has a corresponding meta file, when that folder previously had a meta file, Unity assumes the meta file was removed via the deletion of the folder by another user in your VCS, and deletes the empty folder locally.",145],["If Unity detects a new meta file for a folder, but that folder does not exist locally, Unity assumes the new meta file was created via to the addition of the folder by another user in the VCS, and creates the corresponding empty folder locally.",145],["Asset packages",146],["Asset packages are collections of files and data from Unity projects, or elements of projects, which Unity compresses and stores in one file with the .unitypackage extension. Like a zip file, an asset package maintains its original directory structure when it is unpacked, as well as metadata about assets (such as import settings and links to other assets).",146],["To create your own (custom) asset package, use the Assets > Export Package menu option to compress a collection of assets in your current Unity project. For more information, see Creating your own Asset packages.",146],["To import a local custom asset package into your project, use the Assets > Import Package menu option to unpack the collection into your currently open Unity project. For more information, see Importing Asset packages.",146],["",146],["",146],["My Assets filter added in Unity 2019.3 NewIn20193",146],["Re-install Standard Assets, Upgrade Standard Assets, Upgrading Standard Assets, Install Standard Assets, Installing Standard Assets, Import Standard Assets, Importing Standard Assets",146],["",146],["Create and export asset packages",147],["Note**: If you want to share scenes, samples, tools, or other assets, Unity recommends creating your own Unity package. However, you can also use the asset package (.unitypackage) format. For example, you might want to create an asset package to copy a number of assets or an entire Scene from one project to another.",147],["Follow the instructions in this section for exporting asset packages from the Assets menu in the Unity Editor.",147],["Note**: If your assets are high quality and you believe other users would find them useful, follow the instructions in the documentation for Publishing to the Asset Store to create a package draft and upload it to the Asset Store",147],["To create your own custom asset package:",147],["Open the project you want to export assets from.",147],["Choose Assets > Export Package from the menu to open the Exporting package dialog box.",147],["In the dialog box, select the assets you want to include in the package by clicking on the boxes so they are checked.",147],["Leave Include dependencies enabled to auto-select any assets used by the assets you already selected.",147],["Click Export to bring up the file explorer, and choose where you want to store your package file.",147],["Name and save the package anywhere you like.",147],["Tip:** When exporting a package, Unity can export all dependencies as well. So, for example, if you select a Scene and export a package with all dependencies, then Unity exports all Models, Textures and other assets that appear in the Scene as well. This can be a quick way of exporting several assets without manually locating them all.",147],["Note:** If you select Include dependencies, and your current selection contains or references any scripts, Unity includes all scripts in your project. This is because Unity does not have a way to determine whether the scripts in your selection reference other scripts. For example, if you select a Scene asset in your project to export, and that scene contains a GameObject with a script attached, then Unity counts all scripts in your project as dependencies. If you do not want Unity to do this, you should uncheck Include dependencies.",147],["Re-exporting asset packages",147],["If you want to change the contents of an asset package and create a newer, updated version of your asset package, select the asset files you want in your package (both the unchanged ones and the new ones). Then follow the instructions above to export the files.",147],["Naming strategies",147],["Rename your updated package using incremental names: for example, MyAssetPackageVer1, MyAssetPackageVer2. Unity recognizes it as an update, so you should use a naming convention that is clear for you and anyone you share it with.",147],["Warning:** Don't remove files from asset packages and then add different files with the same name. Unity uses unique IDs to track files, so it recognizes them as different and possibly conflicting files. In these cases, Unity displays a warning symbol when importing them. If you have removed a file and then decide to replace it, rename it something else, even if it is close to the original name.",147],["Importing local asset packages",148],["Note**: If you are looking for information about how to use the Package Manager window to import an Asset Store package you purchased or downloaded directly from the Asset Store, see Importing an Asset Store package.",148],["If you have a .unitypackage file saved locally, for example, because you created your own custom asset package, you can import it into your project in the Unity Editor through the Assets menu.",148],["To import a local asset package in Unity:",148],["Open the project in the Editor where you want to import the asset package.",148],["Choose Assets > Import Package > Custom Package. A file browser appears, prompting you to locate the .unitypackage file.",148],["In the file browser, select the file you want to import and click Open.",148],["The Import Unity Package window displays all the items in the package already selected, ready to install.",148],["Deselect any items you don't want to import and click Import. Unity puts the contents of the imported asset package into the Assets folder, so that you can access them from your Project window.",148],["Using labels to organize \"My Assets\"",149],["Labels help you organize your Asset Store package list in the Asset Store and in the Package Manager window. Labels are like user-defined categories, or collections that help you find packages easily.",149],["You can only create and use labels on the Asset Store website.",149],["(A)** Click Manage my labels to switch to an edit mode where you can assign labels to more than one Asset Store package at a time.",149],["(B)** Labels you have already assigned to this Asset Store package. If you haven't assigned any labels to the Asset Store package yet, Add label appears instead.",149],["(C)** Click Edit label to display the Edit Labels window where you can create and assign labels for this Asset Store package.",149],["(D)** Click Add label to display a window where you can create and assign labels for this Asset Store package. If you have already assigned a label to the Asset Store package, the label(s) appear instead.",149],["(E)** Your list of labels appears here. When you select a label from this list, only those Asset Store packages that have that label assigned appear in the list. You can select multiple labels at once.",149],["Creating labels",149],["The Edit Labels window lets you create and apply labels at the same time.",149],["To create a new label:",149],["Go to the Unity Asset Store and sign into your Unity account.",149],["Go to the My Assets page and click the Add label link.",149],["The Edit Labels window appears.",149],["Enter the name for your new label in the text box.",149],["Click Save to save and apply the label to this Asset Store package or Cancel if you don't want to create the label at all.",149],["The Edit Labels window closes and you can see the My Assets list again.",149],["Adding and removing labels",149],["On the My Assets page, if the Asset Store package already has a label, the Edit label link appears under the release note for that Asset Store package. If it does not have a label, the Add label link appears. Either of these links open the Edit Labels window, where you can add or remove labels.",149],["To add (apply) an existing label to an Asset Store package:",149],["Click either Add label or Edit label to open the Edit Labels window.",149],["To select a label and add it to the Asset Store package, on the Edit Labels window, click in the text box. A drop-down shows any labels not yet assigned to this Asset Store package. Click on the label you want to apply. The label now appears under the text box.",149],["Click the x on the label underneath the text box to remove any label.",149],["When you are satisfied with the labels on your Asset Store packages, click the Save button or Cancel if you don't want to make any changes.",149],["Adding labels to more than one Asset Store package at once",149],["Click Manage my labels to display checkboxes next to each Asset Store package in the list. A set of group links also appear at the top.",149],["Enable Select all to select all packages at once or click the checkbox beside each Asset Store package you want to include. Click Edit label at the top to open the Edit Labels window.",149],["Click inside the text box to choose a label from the list to add that label to the selected Asset Store package(s).",149],["Click the x on any label underneath the text box to remove that label from the selection Asset Store package(s).",149],["When you are satisfied with the labels on the selected Asset Store packages, click the Save button or Cancel if you don't want to make any changes.",149],["To exit the edit mode, click Done.",149],["Deleting labels",149],["Labels only exist when they are in use, so to delete a label from the list of labels, remove that label from all assets that use it:",149],["In the Unity Asset Store, go to the My Assets page.",149],["Click Manage my labels to display checkboxes next to each Asset Store package in the list. A set of group links also appear at the top.",149],["Select every package that has the label you want to delete.",149],["Click Edit label at the top of the list of Asset Store packages.",149],["The Edit Labels window appears.",149],["Click the x on the label underneath the textbox to remove them.",149],["Click the the Save button to close the Edit Labels window and return to the My Assets list (still in edit mode).",149],["Click Done to exit the edit mode.",149],["The label you deleted no longer appears in the Labels section of the filter sidebar.",149],["",149],["Finding your Asset Store packages",150],["If you own a lot of Asset Store packages, it might be difficult to find what you need on the My Assets list. The Asset Store provides tools to help organize and find what you need.",150],["To access your purchased and downloaded Asset Store packages, click the My Assets quick link (A) or select My Assets from your profile drop-down menu (B).",150],["The My Assets page displays the list of Asset Store packages you have purchased or downloaded already and that match any searches, filters, sorting, or categories you select.",150],["(A)** Labels allow you to organize your Asset Store packages, like buckets that you put the assets into so you can easily find them again. You can also toggle between hiding and showing your Asset Store packages.",150],["(B)** Click Manage my labels to switch to an edit mode where you can apply changes to more than one Asset Store package at a time.",150],["(C)** The search box lets you search for an Asset Store package by entering a keyword, such as the Asset Store package's name, a word or phrase in its description, or a filename matching any files in the Asset Store package.",150],["(D)** Click Open in Unity to load the Unity Hub so you can pick the project where you want to import your Asset Store package.",150],["(E)** The filter sidebar helps narrow down the list of Asset Store packages displayed. You can apply these filters to any searches, categories, selections, or sorting schemes you make:",150],["Choose one Status to remove any package that doesn't match. For example, if you choose Unlabeled, then only those Asset Store packages that you never assigned a label to appear in the list.",150],["Choose any of the Labels that you applied to your Asset Store packages before. You can search for the label name if you don't see it right away. If you select more than one label, then only those packages that match any one label remain in the list.",150],["Choose any of the categories and sub-categories to keep all Asset Store packages that match any selection.",150],["Search for a publisher by name.",150],["",150],["Hiding Asset Store packages from \"My Assets\"",150],["You can mark Asset Store packages as hidden in your My Assets list on the Unity Asset Store. For example, if you no longer need a deprecated package, hiding it from your list in the Asset Store or the Package Manager window can reduce the clutter. Since you cannot remove Asset Store packages from your account, this is the equivalent of deleting the package from your account.",150],["To hide your asset, under the Release Notes for your assets, click Hide asset.",150],["If you need to access them again, you can always select the Hidden Assets status from the filter sidebar.",150],["To stop hiding an Asset Store package, you can click the x on the Hidden asset marker.",150],["To hide several assets at once:",150],["Click Manage my labels to display checkboxes next to each Asset Store package in the list. A set of group links also appear at the top.",150],["Enable Select all to select all packages at once or click the checkbox beside each Asset Store package you want to include.",150],["Click Hide asset to mark the selected Asset Store packages hidden.",150],["The hidden Asset Store packages disappear from the list.",150],["To exit the edit mode, click Done.",150],["",150],["Purchasing or downloading a package on the Asset Store",151],["Approximately 10% of the Asset Store's content is free to download. The price of paid content ranges from \\$5 to \\$3500, depending on the size and scope of the offering. Many publishers provide a \"lite\" version of their package, which is available for free or at a reduced rate, so you can determine if it meets your needs.",151],["If you don't have a Unity account, you need to create one before you can download or buy Asset Store packages. If you already have a Unity ID for the Unity Hub or the Unity Editor, use the same ID for your Unity Asset Store account.",151],["The Unity Asset Store manages your downloads and purchases through your Unity account, which requires a Unity ID. After buying or downloading Asset Store packages, sign in to the Hub or Editor with the same Unity ID you used on the Asset Store. Then use Package Manager to import those Asset Store packages into your projects.",151],["Creating a Unity account",151],["To create a new Unity account, go to Create a Unity ID and follow the instructions. You can also open the Unity Asset Store, click the user account icon, then select Create a Unity Account:",151],["Finding packages on the Asset Store",151],["When you open the Asset Store in a web browser, the main page displays several thumbnail images which represent some of the sales and promotions that Unity is offering. There are also some suggestions, such as most popular and recommended Asset Store packages.",151],["You can browse through the suggestions, or search for something specific. If you are looking for a specific asset, you can use any of these searching, filtering, and sorting methods alone or in combination:",151],["Search by name or keyword. For example:",151],["Search for something specific, such as \"fox family\".",151],["Search for \"FBX\" to find any packages containing FBX models or tools.",151],["Search for \"demo\" to browse for any packages with \"demo\" in the title.",151],["Choose a collection of related Asset Store packages to browse from the selection menus. For example, you could choose Tutorial Projects from the Essentials collection menu.",151],["Select any categories or subcategories in the filter sidebar. For example, you could select the Audio main category or select its expander and then select the Sound FX subcategory.",151],["Use any combination of the items on the filter sidebar to narrow down the Asset Store packages that Unity suggests. For example, setting these options narrows down the list of suggestions to include Unity's 3D packages for iOS:",151],["All Categories**: check 3D",151],["Unity Versions**: select Unity 2019.x",151],["Publisher**: search for \"unity\" and select Unity Technologies",151],["Platforms**: check iOS",151],["Choose a sort method from the Sort by menu. You can sort by relevance, popularity, rating, publish or update date, name, or price.",151],["Tip**: If you need to start over, click clear filters at the top of the filter sidebar to reset all filter options to their default values.",151],["Getting information about an Asset Store package",151],["When you find an Asset Store package that looks interesting, you can:",151],["Hover over the thumbnail (A) and click the QUICK LOOK link (B) that appears. A pop-up window displays a few images or videos and some basic information. The window displays either an Add to Cart button (to buy the Asset Store package) or an Add to My Assets button (to download a free package).",151],["Click the thumbnail (A) to open the Asset Store package's main information page, which provides a full description and list of package contents. You can add the package to your Favorites list, see reviews, see links to other Asset Store suggestions, and more.",151],["Buying an Asset Store package",151],["After you buy an Asset Store package on the Unity Asset Store, it's immediately available in the Package Manager window, if you're logged into your Unity ID in the Unity Editor.",151],["To buy an Asset Store package:",151],["From the Quick Look window, click the Add to Cart button. From the package details page, click Buy Now or click the Add to Cart icon.",151],["A message confirms that the package is in your shopping cart.",151],["When you are ready to pay for your item(s), click the Proceed to Checkout button, or access your cart and click Checkout.",151],["The Checkout page appears.",151],["On the Checkout page, enter the following information:",151],["In the Address section, enter your address, email address, and phone number.",151],["In the Payment method section, enter your payment details. You can pay by credit card or PayPal.",151],["In the Summary sidebar, make sure the Order summary and quantities are correct.",151],["Enable the Asset Store Terms of Service and EULA.",151],["If you want to receive information from the Asset Store, enable email notifications.",151],["If you have any coupons or credits from sales or special promotions, enter the code in the Enter Coupon/Credit Code to update your price box and click Apply.",151],["Click the Pay now button.",151],["When the Asset Store finishes processing your payment, it displays your newly purchased package(s) on an invoice page.",151],["Save or print this page so you can find the order number in the future. Publishers might request this number so they can confirm your purchase when providing support.",151],["Downloading an Asset Store package",151],["After you download a free Asset Store package on the Unity Asset Store, it's immediately available in the Package Manager window, if you're logged into your Unity ID in the Unity Editor.",151],["To download a free Asset Store package:",151],["Click the Add to My Assets button.",151],["Read the Asset Store Terms of Service and EULA and click Accept if you agree to the terms.",151],["A message confirms that the package is now in your assets list and provides links to Open in Unity or Go to My Assets to view the list in the Unity Asset Store.",151],["",151],["Unity's Asset Store",152],["The Unity Asset Store contains a library of free and commercial assets that Unity Technologies and members of the community create. A wide variety of assets are available, including textures, models, animations, entire project examples, tutorials, and Editor extensions.",152],["Starting from Unity 2020.1, the dedicated Asset Store window is no longer hosted inside the Unity Editor. However, you can still access the Asset Store website at https://assetstore.unity.com/ and you can still search for your purchased and downloaded Asset Store packages, and import and download them directly in the Package Manager window.",152],["This section contains information for both consumers and providers of Asset Store products:",152],["Asset Store packages contains information on how to find, acquire, and organize your Asset Store packages directly on the Asset Store website.",152],["Publishing to the Asset Store helps guide Asset Store package producers through the process of creating, marketing, and managing Asset Store packages for the Unity community.",152],["",152],["The Asset Store website",152],["To access the Asset Store, open a web browser and go to https://assetstore.unity.com/.",152],["(A)** Collection menus help you narrow down the list of matching Asset Store packages. They group related Asset Store packages together and display them in the list. For example, you can select Terrain from the Tools menu to see Asset Store packages that contain tools for building terrain.",152],["(B)** The search box lets you search for an Asset Store package by entering search terms, such as the Asset Store package's name, a word or phrase in its description, or a filename matching any files in the Asset Store package.",152],["(C)** The quick links provide access to the following areas:",152],["The list of purchased or downloaded assets for your account (your My Assets page)",152],["The list of Saved Assets you marked as favorites",152],["Your Shopping Cart",152],["Asset Store Applications, such as Dashboard, Distribute, Forum, and Learn",152],["Your Unity ID (account), where you can see and modify personal settings and account settings (including licenses), view notifications, redeem vouchers, and more.",152],["(D)** Quick filter and sort controls help narrow and order the list of Asset Store packages displayed. You can filter by Price (including Free) and Rating.",152],["(E)** The filter sidebar helps refine the list of Asset Store packages displayed. You can apply these filters to any searches, categories, selections, or sorting schemes you make.",152],["(F)** The list of Asset Store packages that match any searches, filters, sorting, or categories you select. The Asset Store also displays suggestions and special lists of packages here.",152],["",152],["",152],["Asset Store tab removed from Editor in 2020.1 NewIn20201",152],["Package Manager's MyAssets filter added in 2019.3 NewIn20193",152],["",152],["Asset Store Publisher portal",153],["The Asset Store Publisher portal lets you manage your profile as an Asset Store provider.",153],["The Asset Store Publisher portal displays your account information across several tabs:",153],["",153],["Packages",153],["Use the Packages tab to manage your Asset Store packages and create new packages for submission. The contents of this tab change depending on the status you select from the Package Status drop-down menu.",153],["See Filling in the package details for workflows and procedures relating to publishing packages.",153],["",153],["Package status",153],["A package can go through many states during its lifecycle. When you open the Asset Store Publisher portal and navigate to the Packages tab, you can choose a status from the Package Status drop-down menu to see all packages that are in that state:",153],["Status: Description: ",153],[":------------- :----------------------------------------------------------- ",153],["Draft This is a version of your package before you submit it to the Asset Store. A draft represents the information on the Create new package page, but it can also include the Assets from your Project. ",153],["Pending This is a package that the Asset Store Specialists have received for review. You should contact the Asset Store team if your package is still pending for more than one month after you submit it. ",153],["Published This is a package currently published on the Asset Store and is available for users to purchase and download. ",153],["Declined If the Asset Store Specialists reviews your package and decides not to publish it, it's marked as Declined. You can make any improvements suggested by the Asset Store Specialists, and then create a new draft to resubmit. ",153],["Disabled When the Asset Store disables a package, that means it's not available to publishers or users (even those who have already purchased it). Most of the time this happens because a publisher submits a takedown notice of copyright violation (DMCA) or trademark conflicts. ",153],["Deprecated When the Asset Store deprecates a package, that means it's no longer discoverable by customers who haven't downloaded or purchased it. Customers who have already downloaded or purchased the package can still access it from their Unity account.You can mark a package to be deprecated from the Asset Store so that it's no longer available (except to customers who have already purchased or downloaded it). For more information, see Deprecating your Assets. ",153],["",153],["Reviews",153],["The Reviews tab displays feedback from users on your packages.",153],["If you respond to user reviews, make sure your responses are very professional. If you see any abusive language (either figurative or literal), or if the review has nothing to do with the Asset itself, click the Report this review button to notify the Asset Store team. For more information, see the Publisher's forum.",153],["Reviews are available via an RSS feed (see the link at the bottom). You can set up a service that can deliver RSS directly to your email account using a third-party provider such as IFTTT or Zapier.",153],["",153],["Upgrades",153],["When you are ready to publish a new version of your package, you can manage that on the Upgrades tab.",153],["For more information, see Upgrading packages.",153],["",153],["Sales",153],["The Sales tab displays the sales data on each of your paid packages (one row for each package). It also displays the Gross and Net amounts for the selected month. You can view the sales figures for different months by changing the month from the drop down box.",153],["This tab only displays paid packages.",153],["Column: Description: ",153],["Package The name of the package, linked directly to your package page on the Asset Store. ",153],["Price The cost of the product at the time of the sale. ",153],["Qty The quantity of purchases for that package. ",153],["Refunds The number of refunds completed for that package. ",153],["Chargebacks The number of chargeback refunds completed for that package. A chargeback is when a credit-card provider demands that a retailer compensate them for the loss on a fraudulent or disputed transaction. ",153],["Gross The gross amount of money earned for that package's sales. ",153],["First The date of the first purchase for that package for the selected month. ",153],["Last The date of the last purchase for that package for the selected month. ",153],["",153],["Downloads",153],["The Downloads tab displays the number of times a specific Asset has been downloaded by a user. This includes only paid Assets, but might not match the sales of an Asset in any particular month, because users might not download the data right away, and can download the data multiple times over the lifetime of use.",153],["This tab only displays free packages. Paid packages appear on the Sales tab.",153],["Column: Description: ",153],["------------- ------------------------------------------------------------ ",153],["Package The name of the free package available to download. ",153],["Downloads The number of downloads on that package. ",153],["First The date of the first download for that package for the selected month. ",153],["Last The date of the last download for that package for the selected month. ",153],["",153],["Revenue",153],["The Revenue tab displays your revenue earned for each month and when Unity paid your earnings.",153],["",153],["Verify Invoice",153],["The Verify Invoice tab lets you enter the invoice number of an Asset Store customer to see if the invoice is valid. It also displays any packages already refunded for that invoice.",153],["For more information about refunding customers, see Refunding your customers.",153],["",153],["Vouchers",153],["The Vouchers tab lets you generate a voucher code which you can give to a customer. Vouchers allow customers to download a paid package for free. This tab also displays any vouchers you have already issued.",153],["For more about how to create a voucher for a paid package, see Issuing vouchers.",153],["",153],["Users",153],["You can manage members of your publishing team on the Users tab.",153],["For more information about managing team members, see Managing your publishing team.",153],["",153],["Payout",153],["The Payout tab provides easy access to your Unity ID page where you can manage payout options for the revenue earned by your Publisher Account.",153],["For more information about setting up your payout profile and tax information, see Collecting revenue.",153],["",153],["Info",153],["The Info tab lets you edit the profile of your Publisher Account. This tab appears when you first create your Publisher Account, but you can come back at any time to update the information.",153],["The Info tab contains several sections where you can add or edit general information about your account (that's not specific to any specific packages):",153],["You can click on the links indicated (A) to jump directly to each section.",153],["When you are finished, click the Save and Preview button (B) to commit your changes.",153],["",153],["Profile",153],["Use the Profile section to update your picture, name, websites, email addresses, and phone numbers for your account.",153],["Label: Description: ",153],["--------------------------------------------------------- ------------------------------------------------------------ ",153],["Profile picture You can upload any logo or brand image as long as it's not offensive or vulgar and you have the rights or permission to use it. Don't use Unity's logo. ",153],["Publisher Name Enter the name you want to associate with your publisher account. This appears everywhere on your account throughout the Asset Store, both internally and publicly. Make sure this name does not violate any trademarks or brands. ",153],["Website Enter the address of the homepage of your website. Your website or portfolio must look professional and should contain a contact page. ",153],["Customer Support Enter the URL of the support page on your website and the email address that customers can use to contact you for help with your packages.For more information, see Providing support to your customers. ",153],["Business Contact Enter your business contact information. This is for internal use and is not publicly available. We use it when we need to contact you about promotions or other business-related issues. ",153],["Technical Contact Enter your technical contact information. This is for internal use and is not publicly available. We use it when we need to contact you about technical issues. ",153],["",153],["Promo",153],["Use the Promo section to enter promotional images, video, and messages to attract potential customers to your account page.",153],["Label: Description: ",153],["------------------- ------------------------------------------------------------ ",153],["Promo media Upload an image or video file or link to use on your Publisher Account page to entice customers to browse your packages. It's what visitors see first, and introduces users to your brand, your work, and yourself. You can change it often and use it for marketing purposes.To add a file, you can either drag and drop it or select it from your computer when you click the Choose File button. To add a link, you can enter the URL and click the Upload link button. ",153],["Promo headline Describe your Assets or your brand in a short sentence. Use this headline to attract the attention of potential customers. This is optional. ",153],["Promo paragraph Enter a paragraph that describes in more detail what kind of Assets you create. Use this space to market yourself as a brand. ",153],["",153],["About",153],["Use the About section to include any information about yourself, for example your work experience or hobbies, that can help connect you with users on a more personal level.",153],["",153],["Social Media",153],["Use the Social Media section to add external links to provide additional ways for users to read about your work, ask questions, or connect with your community.",153],["From the drop-down menus (A) select the social media outlet (C) you want to add a link to, up to a maximum of five. A text box appears to the right (B) which you can use to add the full URL to your account on that media. For example, you can add a link like this for a YouTube page: https://www.youtube.com/user/<your_id>.",153],["",153],["Google Analytics",153],["Use the Google Analytics section to connect your product and publisher pages to your Google Analytics account for tracking page views and purchases. Unity does not support the configuration or use of Google Analytics. For more information, see the Google Analytics website.",153],["For more information about how to connect your Google Analytics account to your Publisher Account, see Connecting your account to Google Analytics.",153],["Connecting your account to Google Analytics",154],["Google Analytics is a web-based information center that displays statistics on websites and web pages. As a publisher, you might have seen the Tracking ID text field under the info tab of your Asset Store Publisher Administration section.",154],["Go to the Google Analytics home page, and sign in with your Gmail account.",154],["In Google Analytics, a \"new account\" refers to a new link or URL that you want to track. When you log into Google Analytics for the first time, the site prompts you to create a new account.",154],["To create a new account, click the Start for free button and then click the Start measuring button.",154],["The Google Analytics Create account form appears.",154],["Enter the Short URL for your package in the Account name text box. You can find the Short URL in the Asset Store Publisher portal’s Packages tab, under the Public Links section:",154],["Follow the rest of the instructions for setting up your Google Analytics account. When your account is complete, an Admin page displays the information about your account, including a Tracking ID for your new account.",154],["Copy the Tracking ID and navigate to the Info tab of the Asset Store Publisher portal.",154],["On the Info tab, in the Google Analytics section, paste the ID into the Tracking ID text box.",154],["Optionally, can also enter a value in the Location Prefix box.",154],["Click the Save and Preview button to finish.",154],["For more information on Google Analytics, see the Google's Marketing Platform website.",154],["Creating your Publisher Account",155],["Before you can create package drafts and upload Assets to them, you need to set up a Publisher Account:",155],["If you do not yet have a Unity Account, you need to create one; to do this, go to Create a Unity ID. Alternatively, open the Unity Asset Store, click Sign In and then select Create a Unity Account:",155],["Carefully read the Asset Store Provider Agreement for legal information, and the Submission Guidelines to learn about the submission process.",155],["Open the Create New Asset Store Publisher page and provide the required Profile information:",155],["(A)** Profile picture where you can upload your logo or brand image",155],["(B)** Publisher name where you can specify the account name",155],["(C)** Website where you can set your website's location",155],["(D)** Customer Support where you can set the location for support",155],["Provide the required Promo information:",155],["Optionally, you can also provide information in the About, Social Media, and Google Analytics sections:",155],["Note**: You can add and modify the optional information at any time; to do this, return to your Publisher Account page and navigate to the Info tab.",155],["Click the Save and Preview button at the bottom of the screen.",155],["The Asset Store Provider Agreement dialog box asks you to confirm.",155],["Enable Accept Terms of Service and click OK to finalize creating your Asset Store Publisher Account.",155],["A dialog box appears to inform you that Unity has successfully created your Publisher Profile. Click OK and return to the Editor to complete the publication process.",155],["Your new customer-facing Publisher Account page now appears in the Unity Asset Store.",155],["Note**: The information you provide appears on the Asset Store on your customer-facing Publisher Account page, with a few exceptions where indicated. You can see Unity's own Publisher's Account page for an example of a customer-facing Publisher Account page.",155],["Creating a new package draft",156],["A package draft is a version of your package before you submit it to the Asset Store. At a minimum, a draft represents the information on the Create new package page, but it can also include the Assets from your Project.",156],["To create a new draft:",156],["Open the Asset Store Publisher portal and navigate to the Packages tab.",156],["Click Create New Package to create a package draft.",156],["The Create new package page appears.",156],["You can fill out the package details before or after you add your Assets to the package draft.",156],["When you have a package draft, you can add and upload your Assets to it.",156],["Deleting a package draft",157],["If you want to scrap your package draft and start over, you can delete your draft:",157],["Open your Publisher Administration page and select the Packages tab.",157],["Select Draft from the drop-down list beside the Create New Package button.",157],["A list of your draft packages appear.",157],["Click on the name of the draft you want to delete.",157],["The Create new package page appears. This displays your package's details.",157],["Scroll down to the bottom of the page and click the Delete Draft button.",157],["Click OK on the dialog box to confirm the deletion or click Cancel to keep the draft.",157],["Adding tags to published packages",158],["You can define a list of tags to influence your Asset's results in Asset Store searches.",158],["Note**: This section describes how to add tags to Assets that you have already published. You can also add keywords to improve your package's discoverability. You can add keywords to the Metadata section of your package at every step in the publishing process.",158],["Choosing which tags to use",158],["Before you add tags for your package, think about what kind of search terms you expect customers to use in order to find your Asset. Think about how users search. Choose the right tags in combination with your description to optimize search engine results. For example, if your Asset is a 3D Model of a spaceship, don't use \"3D\" as a tag. You can use \"spaceship\" and any other tags that describe or differentiate your spaceship from similar Assets.",158],["Separate your tags by whitespace, and ensure the whole string contains less than 256 characters.",158],["How to add tags to an Asset",158],["Tags make your Assets easier for potential customers to locate within the store when using the search bar. To add tags to an existing Asset, you need to create a new package draft for it and then submit the new draft for re-publishing:",158],["Log into your Publisher Account.",158],["Navigate to the Packages tab. Your package drafts and published packages appear in the Published Packages list:",158],["Click the link for the published package you want to edit. The published package detail page appears.",158],["Navigate to the bottom of the Metadata & Artwork section.",158],["Enter your list of tags separated with commas in the Tags text box and click Add.",158],["When you are done adding tags, click the Go Back button at the top of the page to return to the main package draft page.",158],["Asset Store packages",159],["Asset Store packages are collections of files and data from Unity projects, or elements of projects, which Unity compresses and stores in one file with the .unitypackage extension. Like a zip file, an Asset Store package maintains its original directory structure when it's unpacked, as well as metadata about assets (such as import settings and links to other assets).",159],["To purchase an Asset Store package from Unity or a third-party publisher, start by searching the Unity Asset Store to find assets that meet your needs. When you find an Asset Store package you want to use, purchase or download it in the Asset Store. You can also make it easier to locate Asset Store packages by organizing your assets with labels and hiding Asset Store packages that are deprecated or unused.",159],["In the Unity Package Manager, select the My Assets filter to see your list of available Asset Store packages. You can search by name for Asset Store packages. When you find the Asset Store package you want to use, you can download and import it inside the Package Manager. If your Asset Store package has a newer version available, you can also update it directly in the Package Manager window.",159],["Unity users can become publishers on the Asset Store, and sell the content they have created. Follow the instructions in Publishing to the Asset Store for creating a package draft and uploading your assets from Unity into it for publication on the Unity Asset Store.",159],["",159],["Location of downloaded asset files",159],["You can use the Package Manager window to manage your Asset Store packages within your project. However, if you need to access your asset files directly, you can find them in the Asset Store package cache. This cache, which is separate from the global cache, makes reusing and sharing packages more efficient. You can find the Asset Store package cache in the following paths (which might be within hidden folders depending on your computer settings):",159],["macOS: ~/Library/Unity/Asset Store-5.x",159],["Windows: C:\\Users\\accountName\\AppData\\Roaming\\Unity\\Asset Store-5.x",159],["Linux: ~/.local/share/unity3d/Asset Store-5.x",159],["These folders contain subfolders that correspond to particular Asset Store vendors and are available after download and import. The Package Manager stores asset files inside the subfolders using a structure defined by the Asset Store package publisher.",159],["You can override the default location of the Asset Store package cache root. For information, see Customize the Asset Store cache location.",159],["Collecting revenue",160],["You can receive automated payouts for your Asset Store Publisher earnings either monthly (through PayPal) or quarterly (through a bank transfer). You need to set up a payout profile so that Unity knows how you want to get paid, and whether your tax authority requires tax withholding on revenue.",160],["Note**: The Unity Asset Store currently only supports payouts in USD.",160],["Setting up your payout profile",160],["To set up your payout profile:",160],["Log in to the Unity ID portal.",160],["Go to the Asset Store Publisher portal.",160],["Open the Payout tab. The following message appears:",160],["Click the link to update your payout data. Your Unity ID AS Publisher page appears.",160],["If you haven't set up a payout profile yet, click the Add profile button.",160],["If you haven't activated two-factor authentication (2FA or TFA) on your Unity ID yet, a dialog box appears asking you to activate it.",160],["Click Activate TFA to proceed and follow the instructions to set up TFA on your account.",160],["Note**: Using TFA on your Publisher Account is mandatory for creating a payout profile and receiving payment.",160],["Once you set that up, the Create Payout Profile page appears.",160],["Follow the instructions on the Asset Store FAQ to complete your profile and set up your tax information.",160],["Filling in the package details",161],["When you create a package draft, the Create new package window appears, containing several sections where you can fill out information about your package. These sections are also available every time you edit your package draft, but you must complete all required sections before submitting your package for approval.",161],["The topics on this page provide instructions on how to fill out these sections:",161],["",161],["Package Detail",161],["The Package Detail section lets you set the version (with description), category, and price for your package.",161],["Note**: Although the package title appears in the Package Detail section, you can only change it in the Metadata section.",161],["Information: Description: ",161],[":------------------ :----------------------------------------------------------- ",161],["Status Current status of the package (including Draft, Published, Declined, and Pending). ",161],["Version The version number for your package (such as 1.5, 1.6, 1.7). New Asset Store packages should use the default version 1.0.When you release updates for your Assets, you can increment the version number here. For example, if you need to fix a bug, change the minor version number (1.3 to 1.4). If you introduce a big change, change the major version (1.3 to 2.0). ",161],["Version Changes Describe any updates that triggered a version change, such as bug fixes, new Assets, or changes to match a new version of Unity. ",161],["Category Choose a category that best fits your package, because when customers look for Assets on the Asset Store, they can filter the list of packages by the category that you choose. If you're not sure which category to choose, go to the main page of the Asset Store and see what types of Assets are available in similar categories. ",161],["Price USD You can set a price of $4.99 or any higher amount in US dollars. For any lower price, enable Free instead. ",161],["When you are finished, click Save.",161],["",161],["Metadata & Artwork",161],["The Metadata & Artwork section lets you set the name of the package, and provide marketing images, audio, and video to add branding for your package.",161],["The artwork (key images, audio/video, and screenshots) are shared across all languages.",161],["You must set an English name and description, but you can also specify a name and description in Japanese, Korean, and Chinese; to do this, click the links under the Language column. When you add a language, a new Edit link appears under the Metadata column for that language.",161],["You can only edit Tags after your package has been accepted for publishing.",161],["",161],["Metadata",161],["Metadata includes the name, description, and keywords for your package: that is, anything to help customers find your package while they are browsing or searching the Asset Store.",161],["To edit the name and description of your package:",161],["In the Metadata & Artwork section, under Metadata, click the Edit button.",161],["The Metadata page for a specific language appears:",161],["Enter the Title of your package (required). The title shouldn't begin with the word \"Unity\" if possible. For example, you can't use \"Unity Sculpting Tools\", but you could use \"Sculpting Tools for Unity\".",161],["Enter a package Description:",161],["If your package contains 3D Assets, include information about the polygon count, the Texture size, and which rendering pipeline is compatible.",161],["If your package contains scripts and tools, mention any dependencies needed for the Asset (for example, another Asset or third-party software), because you can't add them to the Asset Store package and the user needs to import them separately.",161],["You can decorate this text with any of the following HTML tags:",161],["EM** (for italics). For example: This is for <EM>italicized</EM> text.",161],["STRONG** (for bold). For example: This is for <STRONG>bold</STRONG> text.",161],["A** (for hyperlinks). For example: This links <A HREF=\"http://www.example.com\">here</A>.",161],["P** (to define a paragraph). For example: <P>This is a new paragraph</P>.",161],["BR** (for a line break). For example: This is the first line.</BR>This text appears on the next line.",161],["You can optionally add a list of Keywords separated by whitespace to influence your Asset's results in Asset Store searches. There is a limit of 255 characters.",161],["Click Save when you are finished and then click OK when the dialog box appears.",161],["To return to the Package window, click Go Back.",161],["",161],["Key image",161],["Key images should indicate what your Asset Store package does and help it stand out. You can set four different resolutions so that your key images appear as icons or thumbnails when customers browse or filter the list of packages available in the Asset Store, and as larger images on the main product page or on social media. These also might appear in promotional material.",161],["Here are some general requirements for the images you upload in this section:",161],["The images cannot contain the following:",161],["Unity logos",161],["Sale banners",161],["The default Unity Skybox (for example, as a background)",161],["The images must not be blurry, stretched, or cropped.",161],["The images cannot only be screenshots of the Unity Editor.",161],["You should make different designs for images of different sizes so that the objects or visuals in the icon and card images are legible and separate.",161],["This table describes the different images, where they might appear on the Asset Store and specific requirements for each:",161],["Key Image Type: Size (in pixels): Description: ",161],[":------------------ :-------------------- ------------------------------------------------------------ ",161],["Icon 160 x 160 The Icon image is visible while users are browsing the Asset Store using the icon grid layout. This image should not contain text.Note: Icon images must be 160x160, even though the actual display size is 80x80. At 80x80, image text is not readable, but uploading the larger size lets the Asset Store display icons clearly at the smaller size. ",161],["Card 420 x 280 This is the main thumbnail visible on your Home page and the default view while browsing the Asset Store. This image can have only the following text: - Title of the Asset- Logo or name of the publisherNote: Like icon images, Card images must be uploaded at a larger size (420x280) than the size of image that ultimately appears on the Asset Store. ",161],["Cover 1950 x 1300 This is what customers see on the main product page for your package. This image can have only the following text: - Title of the Asset- Logo or name of the publisher- A tag lineNote: Like icon images, images must be uploaded at a larger size (1950x1300) than the size of image that ultimately appears on the Asset Store. ",161],["Social Media 1200 x 630 The Unity community team might post these images to social media, or on the Asset Store home page. This image should not contain text. ",161],["For more information, see the Asset Store FAQ.",161],["To set one or more key images:",161],["In the Metadata & Artwork section, under the Key Images column, click the Edit button.",161],["The Key Images page appears:",161],["To upload an image, click Choose File or drag and drop the image onto the gray box.",161],["Note:** The image must be the exact size as indicated.",161],["The uploaded image appears with a Remove button under it, which you can click if you need to remove that image.",161],["To return to the Package window, click Go Back.",161],["",161],["Audio/Video",161],["You can upload audio or video files that demonstrate what your Asset Store package does or contains. These are available on your main product page (as thumbnails you can click on to play).",161],["Note:** If your package contains audio or video files, you must upload samples of your media Assets here. If your package contains tools, scripting, or other technical Assets, include a video tutorial explaining the setup process, and give an overview of your Asset's functionality. If your package contains animations, include a video of all the available animations.",161],["You can embed uploaded files in the show reel with the screenshots of your package. Audio and video files can come from either your local computer or device, or you can specify links to any of these services:",161],["To set one or more key images:",161],["In the Metadata & Artwork section, under the Audio/Video column, click the Edit button.",161],["The Audio/Video page appears:",161],["You can upload audio or video files using any of these methods:",161],["Drag-and-drop the file onto the gray box.",161],["Click Choose File to select the file from a file browser.",161],["Enter a link to an online file in the text box and click Upload link.",161],["The uploaded image appears with a Remove button under it.",161],["To return to the Package window, click Go Back.",161],["",161],["Screenshots",161],["You can upload screenshots of your package's Assets in action. These are available on your main product page (as thumbnails you can click on to enlarge).",161],["Screenshots are just as important as key images when trying to sell your package. Screenshots showcase your package, showing users how it works and what it can do. Users often use screenshots as a kind of package preview before they actually buy it. Asset Store curators prefer having screenshots for most Assets. For example, if it's a Model, add images that display the Asset from different perspectives, both fully textured and in wireframe.",161],["To set one or more screenshots:",161],["Click the Edit button under the Screenshots section.",161],["The Screenshots page appears:",161],["You can upload one or more screenshots using either of these methods:",161],["Drag-and-drop the file onto the gray box.",161],["Click Choose File to select the file from a file browser.",161],["The uploaded image appears with a red X icon (to remove it) under it.",161],["To return to the Package window, click Go Back.",161],["",161],["Package upload",161],["The Package upload section lets you launch Unity directly after having created a package draft or editing package draft details.",161],["When you click the Launch Unity button, your Project appears in the Unity Editor if Unity is already open. If not, the Hub opens, allowing you to choose which Project to open.",161],["If you have already uploaded Assets to your package draft, they appear in this section with the Remove and Edit buttons:",161],["If you want to clear the Assets from your package, click the Remove button.",161],["Before submitting the package for approval, click the Edit button.",161],["For each section, select Yes to display a question and a set of checkboxes. Then check or uncheck the options that answer the questions about your package. When you are finished, click Save to return to the Package upload section.",161],["For more information about adding and uploading Assets into your package draft, see Uploading Assets to your package.",161],["",161],["Review",161],["Under the Review section, click Preview in Asset Store to see how your package will look in the Asset Store after publishing it. You can also see a preview of the URLs under Public links:",161],["",161],["Submit package for approval",161],["Under the Submit package for approval section, click Auto publish to indicate whether you want the package to appear in the Asset Store directly after Unity approval.",161],["You also have to confirm whether you own the rights to sell the Assets.",161],["For detailed instructions, see Submitting your package for approval.",161],["Promoting your Assets",162],["Leading up to a sale, the Asset Store team reaches out to publishers whose Assets fit the criteria or style of the upcoming sale. If your package is selected, the team emails you to see if you want to take part. If so, you can state which Asset(s) you want to enter into the sale, and discuss the discount/sale price with the Asset Store team.",162],["The Asset Store team often chooses sales candidates a month or two ahead of the sale. The team chooses Asset Store packages based on which ones are likely to market well and perform well in the Store, or which packages best fit the specific theme of a promotion.",162],["Unity's Asset Store allows publishers to change the price of their Assets for their own promotion. If you do this, you must use your own website or social media page to advertise the promotion. You must provide details of your sale in the description text for your Asset while the sale is on, and this must include the regular price and the length of the promotional sale period (a maximum of two weeks). After your sale is over, don't change the Asset's price for an additional two months. Changing your price often may exclude your Asset from official sales and promotions. For more information, see Unity's Submission Guidelines.",162],["Unity does not allow any sale-related graphics throughout your Asset Store package’s marketing and sales imagery. You may not promote your product as being included in any sales or features hosted by Unity Technologies without Unity's permission. If any Asset Store package doesn't respect these guidelines, the Asset Store team might return the Asset Store package to its former regular price without notice.",162],["Publishing to the Asset Store",163],["This is the basic workflow for publishing your assets to the Asset Store:",163],["Create your Publisher Account.",163],["Create a new package draft. You can also delete your draft at any time and create a new draft.",163],["Upload the assets into the package.",163],["Finalize the package details.",163],["Submit the package for approval.",163],["View the status of your asset Store submissions.",163],["While you wait to hear whether Unity has accepted your package to the Asset Store, you can set up your payout profile so you can collect revenue from your packages. If you haven't already done this, you can also set up customer support for your publisher account.",163],["Once your package is on the Asset Store, you can take these actions to improve discoverability and encourage customers to purchase your package:",163],["Add tags to your package to make it easier for your customers to find it.",163],["Connecting your account to Google Analytics to track website traffic to your package page on the Asset Store.",163],["Unity might offer you the chance to include your package in an Asset Store sales promotion. You can either participate in Unity's sales promotion or set up one of your own.",163],["Authorize Unity to refund your customers for a package.",163],["If you want to update or enhance an existing package, you can create a major upgrade version. After your upgrade is published to the Asset Store, you can deprecate your old package so that new users only find the most recent version. You can also create a \"lite\" upgrade version, which can be useful to allow customers to test out your package without spending the full amount.",163],["You can use the tabs on your Publisher Account page to:",163],["Read the Reviews about your packages.",163],["Check Sales and Revenue.",163],["See the statistics on your package Downloads and any Vouchers you issued to customers.",163],["Manage the Users on your team.",163],["Manage your account Info.",163],["For additional help with any of these procedures, see the online Asset Store FAQ and the Asset Store forum. Publishers who have an asset accepted to the Asset Store can also apply to join the Publisher's forum.",163],["Concepts",163],["Here are some important concepts you need to know about publishing to the Unity Asset Store:",163],["Concept: Definition: ",163],["---------------------- ------------------------------------------------------------ ",163],["Unity ID (account) Your user account for use in Unity. Your Unity ID enables you to buy subscriptions, manage your Projects and collaborate with teams, and acquire tools and samples on the Asset Store.You can only access and manage your Asset Store purchases when you are logged in with your Unity account. If you decide to create a publisher account, you also need your Unity account. ",163],["Publisher account This account is tied to your Unity account, but it also gives you access to creating and publishing packages, setting up payouts, viewing sales and revenues, and managing all aspects of your profile on the Asset Store. ",163],["Payout profiles Payout profiles let you specify how (and how often) Unity pays you for your Asset sales, and whether Unity needs to withhold taxes (as some tax authorities require). Payout profiles are associated with Organizations. You must be the Organization’s Owner to see, create or update its payout profile. For more information, see Managing your Organization. ",163],["Asset Store Tools You need these tools to be able to create packages to sell on the Asset Store from inside Unity. You can get them from the Asset Store itself: they are like any other Asset available on the store. Download the tools to your computer and import them into your Project.The Asset Store Tools package also includes the Validator tool, which you can use to check your Asset Store package before uploading and submitting it for review. Validating your package with this tool is part of the review process that the Asset Store curation team performs on your Assets when you submit a package to the Asset Store, so running it on your package can reduce the reviewing time. However, note that the Validator tool cannot completely simulate the approval process, and might sometimes give false positives. ",163],["Package status Describes what part of the package lifecycle each package is at. For more information, see Package status. ",163],["Refunding your customers",164],["Customers might contact you to request a refund on your Asset Store package. However, because they made purchases through the Asset Store, the store manages refunds, not individual publishers.",164],["If the user has an issue that you can solve, then you should do everything you can to resolve your customer's issue. If your customer has a logical reason to want a refund and it doesn't violate the Asset Store's Refund Requirements, then you must request a refund from the Asset Store on the customer's behalf.",164],["Note:** The Unity Asset Store does not give refunds without your authorization unless there has been a server error where the customer was charged for duplicate Assets by mistake, or another similar error.",164],["To request a refund from the Asset Store on the customer's behalf:",164],["Ask the user to provide you with the invoice they received when they purchased the Asset Store package.",164],["Navigate to the Verify Invoice tab of the Asset Store Publisher portal.",164],["If you don't see the invoice in the list, enter the invoice number in the Invoice No. text box and click the Verify button.",164],["Once verified, submit a request to Unity, and fill out the following information:",164],["Your email address** (use an email address attached to your publisher account)",164],["Subject** (for example, \"Request for an Asset Store refund\")",164],["Description**: Use this field to pass on any relevant information about why the customer has requested a refund. If you are not attaching an invoice, also indicate the invoice number in this field.",164],["Attachments**: Attach the customer's invoice here.",164],["For more information on refunds, see the Asset Store FAQ.",164],["Deprecating your Assets",165],["When you set a package as deprecated, the package no longer displays when you search the Asset Store. For new customers, it's removed from the store. However, customers who have already purchased or downloaded the package can still download the package.",165],["Once you deprecate a package, you need to submit a new draft for review.",165],["To deprecate an Asset:",165],["Open the Asset Store Publisher portal and navigate to the Packages tab.",165],["Select the Published view in the drop-down menu.",165],["Click the name of the package you want to deprecate.",165],["Scroll to the bottom of the page and click the I agree to have the package deprecated checkbox.",165],["Click the Deprecate Package button.",165],["Viewing the status of your Asset Store submissions",166],["After you submit your package to the Asset Store, the package is no longer in Draft status, but is now Pending Review.",166],["To see the publishing status of your Asset:",166],["Open the Asset Store Publisher portal and navigate to the Packages tab.",166],["Select Pending Review from the Package Status drop-down menu.",166],["You can see a list of packages waiting for approval under the Packages pending review list.",166],["Note:** Wait at least one month after you submit your package for review before contacting the Support desk.",166],["If your package is accepted, you can add tags to the package to improve its discoverability. For more information, see Adding tags to published packages.",166],["Submitting your package for approval",167],["When your package is ready and you want to publish it to the Asset Store, you need to submit it for review before Unity can approve it for publishing:",167],["Open the Asset Store Publisher portal and navigate to the Packages tab.",167],["Select Draft from the Package Status drop-down menu.",167],["Click the link to the package you want to submit.",167],["The Create new package page appears with your package information.",167],["You can fill out the Package Detail and Metadata & Artwork sections. If you need help, follow the instructions under Creating a new package draft",167],["Under the Package upload section, click Edit to set information about the quality of your package for build platforms, Editor versions, compatible render pipelines, and any other Asset dependencies.",167],["Alternatively, you can click Remove to remove the uploaded Assets from the package draft. In that case, you need to re-upload your package Assets.",167],["Under the Review section, click Preview in Asset Store to see how your package will look in the Asset Store after publishing it. You can also see a preview of the URLs under Public links.",167],["Under the Submit package for approval section:",167],["Enable Auto publish to indicate that you want the package to appear in the Asset Store as soon as Unity approves it.",167],["Enable the I own the rights to sell these assets checkbox.",167],["Click Submit to start the approval process.",167],["A popup appears asking you to confirm whether you want to submit your package. The Asset Store team will consider whether to publish your package or not. To help move the decision process along, you can provide additional information to help evaluate your package, why it should be published, or what you fixed (in the case of an upgrade).",167],["Enter your message to the Asset Store team, such as \"You will need to download an X asset to be able to fully test this asset\" or \"You need to use HDRP to test my asset\".",167],["Select OK to finalize your submission or Cancel to stop the submission process.",167],["When you select OK, a message appears letting you know you submitted your package successfully (Version submitted.) or not (An error has occurred, with a list of issues to fix).",167],["Note:** The Asset Store team will take at least 5 business days to analyze your submission. However, if you don't hear back after a month or longer, contact the Unity support team.",167],["Providing support to your customers",168],["As an Asset Store publisher, you are not required to provide customer support on all your published packages, but you should consider providing at least an email address for users to contact you.",168],["To add your support contact information to your account:",168],["Navigate to the Info tab of the Asset Store Publisher portal.",168],["Enter an email address under the Customer Support section:",168],["Click the Save and Preview button to finish.",168],["Note:** Handle support requests from users in a professional manner. If the Asset Store receives complaints about a publisher's conduct in handling customer support requests, they may review that publisher's suitability for the Unity Asset Store, as stated in your Asset Store provider agreement.",168],["Upgrading packages",169],["There are two types of package upgrade:",169],["Major**: This is a new version of an existing package that has significant differences. This might be many more Assets, or it might include breaking changes to an API. In this case, the original package has to have been available on the Asset Store for more than a year.",169],["Once you create the new upgrade package, you should deprecate the previous version from the Asset Store, because you want your users to find the new package. Deprecated packages are only available to customers who have previously purchased or downloaded them.",169],["Lite**: This is a version (often free) of a more expensive package that has less functionality or fewer Assets. Typically, you create a \"lite\" package as a way for your potential customers to try out your package so they can figure out whether they want to buy the other version at the full price.",169],["The procedures for these is mostly the same:",169],["Create a new package draft, upload Assets to the package, and submit it to the Asset Store for publication. Make sure you use the same name for the new package if you are creating a Major upgrade.",169],["Open the Asset Store Publisher portal and navigate to the Upgrades tab.",169],["Click the Create New Upgrade button. The Create Paid Package Upgrades page appears.",169],["From the Type drop-down box, select the type of upgrade you want to create.",169],["From the Upgrade From drop-down menu, select the original package (the package that you published over a year ago).",169],["From the Upgrade To drop-down menu, select the newly published package.",169],["For the Price USD value, enter an amount that corresponds to the type of upgrade you are creating:",169],["For Major upgrades, set a price for customers who have purchased the original version of your package to upgrade to the new one. For example, customers who have already purchased version 1 of your package would pay less for version 2 than customers who haven't purchased your package previously.",169],["For Lite upgrades, set a lower price (or make your package free) that represents the value of the lite package compared to the full version of your package.",169],["If you are creating a Major upgrade, enter the number of Grace Days that represents a period of time before the new package is published when customers can purchase the old package and upgrade for free. For example, if you set a period of 10 grace days and version 2 of your package appears on the store on March 20, anyone who purchased version 1 between March 10 and March 19 can upgrade to version 2 for free.",169],["Click Save and then click Go Back to return to the Upgrades tab.",169],["Uploading assets to your package",170],["After you create a package draft, you can add your assets and upload them to this package draft. There are two ways to do this:",170],["Open the Project containing the assets you want to upload inside the Unity Editor.",170],["Go to the Create new package page, navigate to the Package upload section, and click the Launch Unity button to launch Unity and open your Project.",170],["To prevent confusion during upload and import for your users, make sure that the assets you want to upload are inside a top-level folder with the same title as your submission. This folder contains all of the components for your Project:",170],["Note**: If your package contains audio or video files, you must upload samples of your media assets in the Audio/Video section of your package draft's Package Detail section.",170],["To upload assets to your package:",170],["Download the Asset Store Tools package from the Asset Store.",170],["Open the Unity Project containing the content you want to submit to the Asset Store and import the Asset Store Tools into it.",170],["From the main menu of the Unity Editor, select Asset Store Tools > Package Upload.",170],["The Publisher Login dialog box appears, prompting you to enter your publisher credentials:",170],["The Package Upload tool displays your drafts and packages in the Package Upload window:",170],["If you don't see your package draft in the list, click the Refresh Packages button in the top right corner.",170],["Select the package draft you want to use from the list.",170],["Click the Select button to choose the folder that contains the assets you want to upload from the file browser. You can only select one folder, and if the selected folder is empty, an error message appears when you click the Validate or Upload button. ",170],["Click the Validate button to display the Validator window.",170],["Click the Scan button to check your package for any problems. You should fix these problems before submitting your package for approval. When you are finished, close the window to return to the Package Upload window.",170],["Click Upload to connect your assets to your package. The status bar next to the title of your selected folder shows the progress of the upload. When the upload is finished, a dialog box appears letting you know whether or not the upload was successful.",170],["To test out the newly created .unitypackage file, create a new Unity Project and import the package into it.",170],["You can close the window and return to your Publisher Account page where you can make any final changes to your package draft and submit your package for final approval.",170],["Managing your publishing team",171],["If you are working with a team to create Assets and publish them on the Asset Store, you probably want to associate some of your team members with your own Publishing Account so that they can also publish to the team's page on the Asset Store.",171],["The Users tab allows you to view, add, and remove other Unity Publisher Accounts to your Publishing Account. Beyond publishing Asset Store packages, team members that you add here can perform many administrative functions. For example, when you request a refund on behalf of the customer, the Asset Store support team checks that the requester's user ID matches a valid email account attached to that Publishing Account.",171],["To associate a user with your Publishing Account:",171],["Open the Asset Store Publisher portal and navigate to the Users tab.",171],["Enter the email address of the team member in the Add User text box.",171],["Click the Add button beside it. A new row appears at the top of the table displaying their email and name.",171],["To remove a user:",171],["Click the delete (X) icon on the right side of their row.",171],["Issuing vouchers",172],["You can give a customer one of your paid packages for free by creating a voucher on your Publisher Account and giving them the voucher code so they can redeem it. You can create up to 12 vouchers per year for each Asset.",172],["Note:** You can only give vouchers away for free. You cannot sell them or exchange them.",172],["To issue a voucher:",172],["Open the Asset Store Publisher portal and navigate to the Vouchers tab.",172],["Select the package you want to create a voucher for.",172],["Click the Create Voucher button and follow the instructions.",172],["Supported Asset Types",173],["Unity supports many different types of assets and most common image file types, including BMP, TIFF, TGA, JPG, and PSD.",173],["If you save layered Photoshop (.psd) files in your Assets folder, Unity imports them as flattened images. You can find out more about importing images as textures, or importing images as sprites.",173],["For the full list of Unity's built-in importers, supported file types and supported filename extensions, see Built-in importers.",173],["Listed below are some of the more common types of asset that you might want to use when getting started with Unity, and links to find out more about how to work with them.",173],["Commonly used asset types",173],["Type Description ",173],["3D Model Files Unity supports the FBX file format, which means that you can import data from any 3D modeling software that supports FBX. Unity also natively supports importing SketchUp files. For a list of 3D modeling software that Unity supports, see Model file formats.3D Model files can contain many types of asset, such as meshes, animation, materials and textures.For more information about importing 3D model files, see Importing Models.Unity also supports SketchUp and SpeedTree formats. ",173],["Image files Unity imports image files as textures. Unity supports most common image file types, such as BMP, TIF, TGA, JPG, and PSD. If you save your layered Photoshop (.psd) files in your Assets folder, Unity imports them as flattened images. Read more about importing textures. ",173],["Audio files Unity supports many audio file formats. It's generally best to import uncompressed audio file formats such as .wav or .aiff, because during import Unity applies the compression settings specified in your import settings. Read more about importing audio files. ",173],["Text, HTML, XML, JSON Unity can import arbitrary data from files, allowing you to store and use data from external sources. These are all handled by the Text Asset Importer. ",173],["Plug-ins and code-related assets You can drop managed and native plug-ins into your Unity project as assets (such as .dll files) to expand the functionality of your game or app. Unity also supports assembly definitions to help you create and organize your scripts into assemblies. ",173],["Native Assets There are a range of asset types that are native to the Unity Editor. You can create assets of these types using Editor features. When you create these, Unity saves the files which represent them as asset files in the Assets folder of your project.These include animations, curves, gradients, masks, materials, and presets. For the full list, see the NativeFormatImporter type in the Built-in Importer list below. ",173],["Assets in the Unity Package Manager",173],["You can install a wide range of assets, including plug-ins, tools, and libraries directly into Unity through the Unity Package Manager (UPM). These are a new type of package, and are available through the Package Manager window. For more information about packages in general, see the Packages documentation.",173],["Reusing assets between projects",173],["As you build your game, Unity stores a lot of metadata about your assets, such as import settings and links to other assets, among other information. If you want to transfer your assets into a different project and preserve all this information, you can export your assets into one of these containers:",173],["A custom package, which you can access and manage inside Unity’s Package Manager.",173],["An asset package, which you can create directly in the Editor.",173],["Asset workflow",174],["An asset is any item that you use in your Unity project to create your game or app. Assets can represent visual or audio elements in your project, such as 3D models, textures, sprites, sound effects, or music. Assets can also represent more abstract items such as color gradients, animation masks, or arbitrary text or numeric data for any use.",174],["An asset might come from a file created outside of Unity, such as a 3D Model, an audio file, or an image. You can also create some types of asset in the Unity Editor, such as a ProBuilder Mesh, an Animator Controller, an Audio Mixer, or a Render Texture.",174],["Import, Create, Build, Distribute, Load",174],["The above diagram shows the typical workflow when you work with assets in Unity. Each column represents a separate step and is described below:",174],["\nImport assets into the Unity Editor\n",174],["\nCreate content using the Unity Editor with those assets.\n",174],["\nBuild your app or game file, and optionally its accompanying content bundles\n",174],["\nDistribute the built files so that your users can access them, via a publisher, or an app store\n",174],["\nLoad futher updates as neccessary at runtime, depending on your user's behavior, and how you have grouped and bundled your content.\n",174],["",174],["Import",174],["Importing is the process of bringing your source files into the Unity Editor to work with. When you save or copy a file into your project's Assets folder, Unity imports that file which allows you to work with it in the Editor.",174],["It's important to learn some fundamentals of importing assets into Unity, such as where the files are stored in your Project, how to adjust the Import Settings for each kind of asset, what the meta files are for, and how the Asset Database stores imported data. See Importing Assets for more detail about these topics.",174],["You can speed up Unity's processing of assets when working with teams by using Unity Accelerator.",174],["Create",174],["Once you have imported some assets into your project, you can start creating your game or app. This typically involves placing assets into one or more Scenes as GameObjects, and adding scripts which control how the user interacts with them.",174],["As development on your project grows, you might need to split your assets up into separate groups which allows your game to incrementally download selected extra content at runtime.",174],["During the creation process, you can decide a strategy on how to group your assets into separate bundles, and implement the code for choosing when to load them.",174],["Grouping your assets into bundles allows you reduce the size of your initial download and load some assets later at runtime. This can help you optimize the download size and memory usage of your game or app. The recommended way to do this is to use Unity's Addressables system.",174],["Build",174],["Building refers to the process of exporting your completed project to binary files which you can then distribute and run on the platform of your choice. For example, when building for Windows, Unity generates an .EXE file, along with some accompanying data files which you can then distribute.",174],["If you're using Addressables or Asset Bundles to group your assets into separate downloadable bundles you also need to build those bundle files for distribution.",174],["You can build your project on your own computer, or you can use Unity's Cloud Build service which provides automated build generation and continuous integration for your Unity projects.",174],["Distribute",174],["Once you have built your game or app and its content bundles, your users need a way to access it. Your choice of distribution method depends on the platforms that you're targeting.",174],["For example, mobile platforms have their own app stores, you could use a professional publisher, or you could self-host on your own servers.",174],["Unity offers its own Cloud Content Delivery service, allowing you to host and deliver your game or app and its content to your users, and is fully integrated into the Unity development platform. This can save lots of time and is valuable for content-rich, live games or applications that require content updates on a regular basis.",174],["Load",174],["When users load and use your game or app, the loading process and experience is defined by the rules and programming that you set up, and the way that you grouped and bundled your assets.",174],["Using a combination of the techniques and services described here, you can provide fast initial downloads, and ongoing updates and extra content which you can roll out over the lifetime of your project.",174],["Artist workflow benefits",174],["Unity's asset workflow has tools and features which make it easy to edit and design directly in the Unity Editor:",174],["\nSupport for many different file formats\n",174],["\nQuick roundtripping between Unity and third-party tools\n",174],["\nPresets to apply custom default settings for types of assets\n",174],["\nUpdate live content seamlessly using Addressables and Cloud Content Delivery\n",174],["Programmer workflow benefits",174],["\nA tailored content pipeline (for example, you can write scripts to process assets as Unity imports them, or to control which presets Unity automatically applies based on your own rules).\n",174],["\nModify source assets through scripting. You can adjust source assets such as materials, meshes or physics through your game code.\n",174],["\nSave memory using the Addressable assets system, which simplifies content management for complex projects, and provides automatic memory management and profiling tools.\n",174],["\nOptimize assets for target platforms. When you’re making a multiplatform project, you might have hundreds of different textures, which all need to be packaged at different resolutions for different platforms. Unity packages, resizes and recompresses your assets automatically when you build to each target platform.\n",174],["Workflow considerations",174],["When working with assets in Unity there are different strategies you can use. Which one suits your project depends on factors such as the size of your team, the size of your project, your target platforms, the memory availability on those platforms, and whether you want to release updates, patches, and DLC after publishing it.",174],["For example, if you are working in a team, you could use a Cache Server alongside your version control system to cache Unity's import results, to save time across the team.",174],["If you are working with a large number of assets that you want to publish as separate bundles, you might find it useful to separate some of those groups of assets out into separate projects, so that members of your team don't need to load a single huge project to work on those bundles.",174],["Platform considerations",174],["If you keep all your assets in a single project, Unity automatically builds them in the correct format for the current selected platform when you run a build. However, if you split your assets across multiple projects to build your bundles separately, you must make a build for each platform you support. See the Addressables documentation Building for multiple platforms for more information.",174],["The characteristics of a platform also determine the restrictions and possibilities of how you organize your runtime assets. For example, on the standalone platforms (PC or macOS), virtual memory provides a almost unbounded pool of memory, so using the Resources folder or large asset bundles doesn't typically pose a memory challenge. Conversely, mobile devices and console platforms typically have limited or nonexistent virtual memory, so apps built for those platforms must manage asset loading and unloading more efficiently.",174],["User expectations on a platform are also an important consideration. For example, on mobile platforms, a long initial download and install process can lead to players abandoning your app before they ever play it. For this reason, it's common for mobile apps to include only a minimal set of assets in the initial build and to download the remaining assets from a remote server the first time the user runs your app.",174],["Asynchronous shader compilation",175],["Asynchronous shader compilation is an Editor-only feature that can improve your workflow when you have complex Shader objects with lots of shader variants.",175],["This page contains the following information:",175],["",175],["Overview",175],["Shader objects can contain of hundreds or thousands of shader variants. If the Editor compiled all variants when loading a Shader object, the import process would be very slow. Instead, the Editor compiles shader variants on-demand, the first time it encounters them.",175],["Compiling these shader variants can cause the Editor to stall for milliseconds or even seconds, depending on the graphics API and the complexity of the Shader object. To avoid these stalls, you can use asynchronous shader compilation to compile the shader variants in the background, and use placeholder Shader objects in the meantime.",175],["",175],["How asynchronous shader compilation works",175],["Asynchronous shader compilation works like this:",175],["When the Editor first encounters an uncompiled shader variant, it adds the shader variant to a compilation queue on a job thread. The progress bar in the bottom right corner of the Editor shows the status of the compilation queue.",175],["While the shader variant is loading, Editor renders the geometry with a placeholder shader, which appears as a plain cyan color.",175],["When the Editor has finished compiling the shader variant, it renders the geometry using the shader variant.",175],["Exceptions",175],["The following exceptions apply:",175],["If you draw geometry using DrawProcedural or CommandBuffer.DrawProcedural, the Editor doesn’t use a placeholder shader. Instead, the Editor just skips rendering this geometry until it has compiled the shader variant.",175],["The Unity Editor does not use asynchronous shader compilation with Blit operations. This is to guarantee correct output in the most common use cases.",175],["",175],["Enabling and disabling asynchronous shader compilation for your project",175],["Asynchronous shader compilation is enabled by default.",175],["To enable or disable asynchronous shader compilation:",175],["Go to Edit > Project Settings > Editor.",175],["At the bottom of the Editor settings, under Shader Compilation, check or uncheck the Asynchronous Shader Compilation checkbox.",175],["Note:** Enabling and disabling asynchronous shader compilation in this way affects only the Scene and Game views by default. If you want to use it in other parts of the Editor, see Custom Editor tools and asynchronous shader compilation.",175],["",175],["Enabling and disabling asynchronous shader compilation for specific rendering calls",175],["You can enable or disable asynchronous shader compilation for specific rendering commands in your C# scripts.",175],["The following instructions show you how to enable or disable the feature in an immediate scope, and a CommandBuffer scope.",175],["In an immediate scope",175],["In an immediate scope, you can use ShaderUtil.allowAsyncCompilation.",175],["To do this:",175],["Store the current state of ShaderUtil.allowAsyncCompilation in a variable.",175],["Before you call the rendering commands, set ShaderUtil.allowAsyncCompilation to false.",175],["Call the rendering commands.",175],["After calling the rendering commands, restore ShaderUtil.allowAsyncCompilation back to its previous state.",175],["Here is a pseudo-code example:",175],["// Store the current state",175],["bool oldState = ShaderUtil.allowAsyncCompilation;",175],["// Disable async compilation",175],["ShaderUtil.allowAsyncCompilation = false;",175],["// Enter your rendering code that should never use the placeholder shader, for example UI elements or characters.",175],["Graphics.RenderMesh(...);",175],["// Restore the old state",175],["ShaderUtil.allowAsyncCompilation = oldState;",175],["In a CommandBuffer scope",175],["In a CommandBuffer scope, you can use ShaderUtil.SetAsyncCompilation and ShaderUtil.RestoreAsyncCompilation.",175],["Immediately before you call the rendering commands, call ShaderUtil.SetAsyncCompilation, and set it to false. Subsequent commands in the CommandBuffer won’t allow asynchronous compilation.",175],["Add the rendering commands to the CommandBuffer.",175],["After the rendering commands, call Shader.Util.RestoreAsyncCompilation to restore the state of asynchronous shader compilation.",175],["Here is an example:",175],["// Create the CommandBuffer",175],["CommandBuffer cmd = new CommandBuffer();",175],["// Disable async compilation for subsequent commands",175],["ShaderUtil.SetAsyncCompilation(cmd, false);",175],["/// Enter your rendering commands that should never use the placeholder shader, for example UI elements or characters.",175],["cmd.DrawMesh(...);",175],["// Restore the old state",175],["ShaderUtil.RestoreAsyncCompilation(cmd);",175],["",175],["Disabling asynchronous compilation for specific Shader objects",175],["You can disable asynchronous shader compilation for specific Shader objects by forcing the Editor to always compile them synchronously. This is a good option for data generating Shader objects that are always present at the start of your rendering, and which are relatively quick to compile. You would most likely need this if you are performing advanced rendering.",175],["To force synchronous compilation for a Shader object, add the #pragma editor_sync_compilation directive to your shader source code.",175],["Note:** You should not force synchronous compilation for complex Shader objects that encounter new shader variants during rendering; this can stall rendering in the Editor.",175],["",175],["Detecting asynchronous shader compilation",175],["You can use C# APIs to monitor the state of asynchronous shader compilation, and perform operations when this state changes.",175],["This is most likely useful in advanced rendering; if the placeholder shader pollutes your generated data, you can wait until compilation is complete, discard the polluted data, and regenerate a new set with the correct shader variants.",175],["If you already know which material you are interested in, you can use ShaderUtil.IsPassCompiled to check the compilation status of the shader variant. When the status changes Uncompiled to Compiled, compilation is complete.",175],["If you do not know which material you are interested in, or if you are interested in more than one material, you can use ShaderUtil.anythingCompiling to detect whether Unity is compiling any shader variants asynchronously. When this changes from true to false, all current compilation is complete.",175],["",175],["Advanced rendering in the Editor and asynchronous shader compilation",175],["Advanced rendering solutions rely on generating data once and reusing it in later frames. If the Editor uses a placeholder shader during this process, it might pollute the generated data. If this happens, you can see the cyan color or other rendering artifacts in your scene, even after the shader variants have finished compiling.",175],["To avoid this, you can:",175],["Detect when the source of the data pollution has finished compiling, and then re-generate the data.",175],["",175],["Custom Editor tools and asynchronous shader compilation",175],["By default, asynchronous Shader compilation works in the Game and Scene views. If you want to use it in custom Editor tools, you can enable it via C# for your custom tool.",175],["To do this, you can enable asynchronous shader compilation for specific rendering calls.",175],["Customizing compile time rendering",175],["You can make your custom tools draw something other than the placeholder shader for each material. This way, you can avoid rendering in plain cyan, and instead draw something else while the shader variant compiles.",175],["To check if a specific shader variant has compiled, see Detecting asynchronous shader compilation.",175],["To trigger compilation manually, you can use ShaderUtil.CompilePass. This way, you can avoid rendering with the cyan placeholder, and draw something else while the shader variant compiles.",175],["Asset loading metrics",176],["Use the AsyncReadManagerMetrics class to monitor runtime asset loading and file reading performance. This class records data about all the file read operations managed by the AsyncReadManager.",176],["The Unity Engine uses the AsyncReadManager to read most files at runtime. The files loaded with the AsyncReadManager include AssetBundles, Addressables and Resources. In addition, you can load files from scripts using AsyncReadManager.Read.",176],["The AsyncReadManagerMetrics class allows you to enable metrics collection and retrieve the recorded metrics data. You can also filter and summarize the recorded data to help your analysis. This metrics information can help you identify problem areas involving asset loading as well as measure the impact that your changes have on asset loading performance.",176],["The AsyncReadManagerMetrics class is only available in development builds. You must guard any calls to the AsyncReadManagerMetrics APIs inside an #if preprocessor directive using the ENABLE_PROFILER symbol. The ENABLE_PROFILER symbol is only defined for development builds, so this allows your scripts to compile in builds where the metrics are unavailable. For backwards compatibility, you can also use the UNITY_2020_2_OR_NEWER symbol to remove the metrics code from earlier versions of Unity. For example:",176],["``` lang-cs",176],["if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER",176],["AsyncReadManagerMetrics.StartCollectingMetrics();",176],["endif",176],["Enabling metric collection",176],["You must enable metrics collection before any data is recorded. Enable metrics collection with one of the following methods:",176],["Calling AsyncReadManagerMetrics.StartCollectingMetrics",176],["Passing -enable-file-read-metrics as a command line argument when launching your application",176],["Note: you can pass -enable-file-read-metrics when launching the Unity Editor application to enable collection on entering Play mode. However, the Editor loads some categories of assets, such as textures, itself and does not reload them when you enter Playmode. To get a full picture of your file IO metrics, you must collect data from a development build of your application.",176],["Getting metric data",176],["Retrieve the metrics collected by the AsyncReadManagerMetrics class by calling GetMetrics. Pass an AsyncReadManagerMetrics.Flags to this function to specify whether or not to clear the metrics after retrieval. Clear the metrics to remove all the completed (including cancelled and failed) reads from the stored metrics. Clearing doesn’t affect any queued or in-process operations; you can access the metrics for unfinished operations by calling GetMetrics again after they complete. By clearing the metrics regularly, you can avoid rereading the same data and also reduce the data overhead of the system.",176],["``` lang-cs",176],["if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER",176],["AsyncReadManagerRequestMetric[] metrics",176],["= AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);",176],["endif",176],["Where possible, the metric data includes context information about a read operation. This information includes the AssetLoadingSubsystem that requested the read, the AssetName, and the AssetTypeID. When the AsyncReadManager doesn’t have access to this information, the value for these metrics fields is Other, empty, and zero, respectively.",176],["Note: The Asset TypeIDs currently known to be supported are shown in the table below. For other TypeIDs that may appear, please see YAML Class ID Reference.",176],["TypeID Type Name ",176],["28 Texture2D ",176],["117 Texture3D ",176],["89 CubeMap ",176],["43 Mesh ",176],["Getting summarized data",176],["You can get a summary of the AsyncReadManager metrics with the following methods:",176],["GetCurrentSummaryMetrics -- returns a summary of all the metrics collected since the last time you cleared the metric store.",176],["GetSummaryOfMetrics -- returns a summary of the metrics in an array of AsyncReadManagerRequestMetric, which you can get by calling GetMetrics.",176],["For example:",176],["``` lang-cs",176],["if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER",176],["AsyncReadManagerSummaryMetrics summaryOfMetrics",176],["= AsyncReadManagerMetrics.GetCurrentSummaryMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);",176],["endif",176],["Or:",176],["``` lang-cs",176],["if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER",176],["AsyncReadManagerRequestMetric[] metrics",176],["= AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);",176],["AsyncReadManagerSummaryMetrics summaryOfMetrics",176],["= AsyncReadManagerMetrics.GetSummaryOfMetrics(metrics);",176],["endif",176],["Summary data for the metrics includes statistics such as:",176],["Average bandwidth",176],["Average read size",176],["Asset type with longest load time",176],["Number of reads",176],["Number of requests",176],["Total bytes read",176],["(See AsyncReadManagerSummaryMetrics for a complete list.)",176],["By default, the summarized statistics include all read operations, including those that are queued or in-progress. You can use a filter to limit the summary to those operations you are specifically interested in. For example, you could use a filter to limit the summarized statistics to completed read operations for texture assets.",176],["Note: Calculating the summary statistics does require processing resources. To prevent these calculations from changing the measurements you are recording, you can collect the metrics first and only get the summary after the operations you are analyzing have finished.",176],["Summary filters",176],["Use AsyncReadManagerMetricsFilters with either of these methods to specify what types of data to summarize. Any metrics that do not match a filter are excluded from the summary. You can filter with the following categories:",176],["Asset type (by YAML ID)",176],["Subsystem (AssetLoadingSubsystem)",176],["You can set multiple categories for the same filter. A read operation must match all categories for the metrics of that operation to be included in the summary. For example, you can specify values for both the ProcessingState and the Subsystem of a filter to summarize only operations in the designated processing states initiated by the designated subsytems.",176],["You can also specify multiple values for a category. In this case, a read operation can match any value you specify for a category for its metrics to be included in the summary. For example, you can specify both Mesh and Texture for the Subsystem category to summarize operations for both Mesh and Texture assets.",176],["Attributes",177],["Attributes are markers that can be placed above a class, property or function in a script to indicate special behaviour. For example, you can add the HideInInspector attribute above a property declaration to prevent the Inspector from showing the property, even if it is public. C# contains attribute names within square brackets, like so:",177],["[HideInInspector]",177],["public float strength;",177],["Unity provides a number of attributes which are listed in the API Reference documentation:",177],["For UnityEngine attributes, see AddComponentMenu and sibling pages",177],["For UnityEditor attributes, see CallbackOrderAttribute and sibling pages",177],["There are also attributes defined in the .NET libraries which might sometimes be useful in Unity code. See Microsoft's documentation on Attributes for more information.",177],["Note:** Do not use the ThreadStatic attribute defined in the .NET library; it causes a crash if you add it to a Unity script.",177],["Audio",178],["Unity's audio features include full 3D spatial sound, real-time mixing and mastering, hierarchies of mixers, snapshots, and predefined effects. Read this section to learn about audio in Unity, including clips, sources, listeners, importing, and sound settings.",178],["Topic Description ",178],[":-------------------------------------------------- :------------------------------------------------------------------ ",178],["Audio overview An overview of the theory behind Unity's audio system ",178],["Audio files Reference information about audio files and their supported formats ",178],["Tracker modules Reference information about the benefits of tracker modules ",178],["Audio mixer Reference information about the Unity Audio Mixer and its UI ",178],["Native audio plugin SDK Instructions to use the built-in native audio plugin interface ",178],["Audio profiler A description of the audio profiler window ",178],["Ambisonic audio Reference information about ambisonics ",178],["Audio reference Reference information about the Editor's audio-related UI elements ",178],["Additional resources",178],["\nAudio tutorial\n",178],["\nThe Knowledge Base Audio section\n",178],["Develop an ambisonic audio decoder",179],["An ambisonic decoder is an audio component that decodes the ambisonic audio format into a specific output format, such as stereo or surround sound. This format depends on your speaker configuration (menu: Edit > Project Settings > Audio > Default Speaker Mode), unless your platform overrides this.",179],["Although Unity supports ambisonic audio, it doesn't provide built-in decoders by default. Instead, you must either select a third-party decoder, or use your own decoder plug-in.",179],["Set up an ambisonic audio decoder plug-in",179],["You can set up an ambisonic audio decoder in the same way as you'd set up an Audio Spatializer. However, the following parameters in the AudioPluginInterface.h file are specific to ambisonic audio decoder plug-ins:",179],["The UnityAudioEffectDefinitionFlags_IsAmbisonicDecoder effect definition flag",179],["The UnityAudioAmbisonicData data struct",179],["UnityAudioEffectDefinitionFlags_IsAmbisonicDecoder",179],["During the plug-in scanning phase, the UnityAudioEffectDefinitionFlags_IsAmbisonicDecoder flag notifies Unity that this is an ambisonic decoder effect.",179],["To enable a plug-in to operate as an ambisonic decoder, set a flag in the description bit-field of the effect:",179],["definition.flags = UnityAudioEffectDefinitionFlags_IsAmbisonicDecoder;",179],["Unity lists your plug-in as an option in the Project Settings window (menu: Edit > Project Settings > Audio > Ambisonic Decoder Plugin).",179],["UnityAudioAmbisonicData struct",179],["The UnityAudioAmbisonicData struct is similar to the UnityAudioSpatializerData struct that Unity passes into spatializers, and contains an ambisonicOutChannels integer.",179],["The ambisonicOutChannels integer",179],["The Ambisonic decoders run early in the audio pipeline in Unity, and the ambisonicOutChannels variable tells the plug-in how many of the output channels Unity needs to use. ambisonicOutChannels is automatically set to the DefaultSpeakerMode’s channel count.",179],["For example, if you play back a first order ambisonic audio clip that has 4 channels, and your speaker mode is stereo (which has only 2 channels):",179],["An ambisonic decoder’s process callback passes in 4 for the in and out channel count.",179],["The ambisonicOutChannels field is automatically set to 2.",179],["The plug-in outputs its spatialized data to the first 2 channels and zero out the other 2 channels.",179],["Steps to develop an ambisonic audio decoder plug-in",179],["Follow these steps to develop your own ambisonic audio decoder plug-in for Unity:",179],["Create a custom audio plug-in using the Native audio plug-in SDK.",179],["Set a flag in the description bit-field of the effect:",179],["definition.flags = UnityAudioEffectDefinitionFlags_IsAmbisonicDecoder;",179],["When you are done configuring your plug-in, compile your file. Make sure it is compilable on your preferred platforms.",179],["Optionally, convert your file to a .dll file.",179],["Move your plug-in file into your Unity project’s Asset folder.",179],["For more information on how to work with your ambisonic audio plug-in in Unity, see Ambisonic Audio.",179],["Formats that Unity ambisonics support",179],["The Unity ambisonic sources framework can support first order ambisonics. The plug-in interface includes information to support binaural stereo and quad output, but the plug-in itself determines which outputs are supported.",179],["Initially, ambisonic decoder plug-ins support first order ambisonic sources and binaural stereo output. There is no support for second order ambisonics.",179],["There is nothing in the framework that's specific to any of the different ambisonic formats available. If the clip’s format matches the ambisonic decoder plug-in’s expected format, then ambisonic audio should work without issue. Unity’s preferred ambisonic format is B-format, with ACN component ordering, and SN3D normalization.",179],["Further information",179],["For information on how to develop a plug-in, refer to Native audio plug-in SDK and Audio spatializer SDK. You must also download the Audio plug-in SDK.",179],["Audio files",180],["As with Meshes or Textures, the workflow for Audio File assets is designed to be smooth and trouble free. Unity can import almost every common file format but there are a few details that are useful to be aware of when working with Audio Files.",180],["Since Unity 5.0 audio data is separated from the actual AudioClips. The AudioClips merely refer to the files containing the audio data and there are various combinations of options in the AudioClip importer that determine how the clips are loaded at runtime. This means that you have great flexibility for deciding which audio assets should be kept in memory at all times (because you may not be able to predict how often or how fast they will be playing, i.e. footsteps, weapons and impacts), while other assets may be loaded on demand or gradually as the player progresses through the level (speech, background music, ambience loops etc).",180],["When audio is encoded in Unity the main options for how it is stored on disk is either PCM, ADPCM or Compressed. Additionally there are a few platform-specific formats, but they work in similar ways. Unity supports most common formats for importing audio (see the list below) and will import an audio file when it is added to the project. The default mode is Compressed, where the audio data is compressed with either Vorbis/MP3 for standalone and mobile platforms.",180],["See the AudioClip documentation for an extensive description of the compression formats and other options available for encoding audio data.",180],["Any Audio File imported into Unity is available from scripts as an Audio Clip instance, which provides a way for the game runtime of the audio system to access the encoded audio data. The game may access meta-information about the audio data via the AudioClip even before the actual audio data has been loaded. This is possible because the import process has extracted various bits of information such as length, channel count and sample rate from the encoded audio data and stored it in the AudioClip. This can for instance be useful when creating automatic dialogue or music sequencing systems, because the music engine can use the information about the length to schedule music playback before actually loading the data. It also helps reducing memory usage by only keeping the audio clips in memory that are needed at a time.",180],["Supported formats",180],["Format Extensions ",180],["MPEG layer 3 .mp3 ",180],["Ogg Vorbis .ogg ",180],["Microsoft Wave .wav ",180],["Free Lossless Audio Codec (FLAC) .flac ",180],["Audio Interchange File Format .aiff / .aif ",180],["Ultimate Soundtracker module .mod ",180],["Impulse Tracker module .it ",180],["Scream Tracker module .s3m ",180],["FastTracker 2 module .xm ",180],["See the Audio Overview for more information on using sound in Unity.",180],["Audio Mixer",181],["The Unity Audio Mixer allows you to mix various audio sources, apply effects to them, and perform mastering.",181],["Audio Mixer Window",181],["The window displays the Audio Mixer which is basically a tree of Audio Mixer Groups. An Audio Mixer group is essentially a mix of audio, a signal chain which allows you to apply volume attenuation and pitch correction; it allows you to insert effects that process the audio signal and change the parameters of the effects. There is also a send and return mechanism to pass the results from one bus to another.",181],["An Audio Mixer is an asset. You can create one or more Audio Mixer and have more than one active at any time. An Audio Mixer always contains a master group. Other groups can then be added to define the structure of the mixer.",181],["Note:** Unity WebGL doesn't support Audio Mixers. For more information on how audio is used in WebGL, see Audio in WebGL.",181],["How it works",181],["You route the output of an Audio Source to a group within an Audio Mixer. The effects will then be applied to that signal.",181],["The output of an Audio Mixer can be routed into any other group in any other Audio Mixer in a scene enabling you to chain up a number of Audio Mixers in a scene to produce complex routing, effect processing and snapshot applying.",181],["Snapshots",181],["You can capture the settings of all the parameters in a group as a snapshot. If you create a list of snapshots you can then transition between them in gameplay to create different moods or themes.",181],["Ducking",181],["Ducking allows you to alter the effect of one group based on what is happening in another group. An example might be to reduce the background ambient noise while something else is happening.",181],["Views",181],["Different views can be set up. You can disable the visibility of certain groups within a mixer and set this as a view. You can then transition between views as required.",181],["AudioGroup Inspector",182],["Selecting an AudioGroup in the AudioGroup Hierarchy, the AudioGroup View or the Project window (as a sub-asset) will show the inspector for that AudioGroup.",182],["The inspector for the AudioGroup consists of a number of elements:",182],["Inspector Header",182],["At the top of the AudioGroup Inspector there is the name of the AudioGroup, along with with the gear dropdown menu common to all Object Inspectors.",182],["The gear menu contains the following functionality:",182],["Copy all effect settings to all snapshots**: This lets you to copy all of the effect parameter, volume and pitch settings of this AudioGroup to all of the other snapshots present within the Audio Mixer. This lets you to quickly make all snapshots 'like this one' for this AudioGroup.",182],["Toggle CPU usage display**: This toggles CPU performance information for all of the effects present in the AudioGroup inspector. This is used to get an idea of which effects within your DSP setup are consuming the most resources.",182],["Edit in Playmode",182],["When in Playmode within Unity, the Inspector for an AudioGroup includes a button at the top called Edit in Playmode. By default, the parameter values of an Audio Mixer are not editable in Playmode and are fully controlled by the current snapshot within the game.",182],["Edit in Playmode allows you to override the snapshot system and make edits to the current snapshot directly during playmode. This is a great way to mix and master a game while playing it in realtime.",182],["Pitch slider",182],["At the top of all AudioGroup Inspectors, there is a slider that defines the pitch of playback through that AudioGroup. To change the pitch, either use the slider or enter the pitch manually into the text field to the right.",182],["Attenuation Unit",182],["Every AudioGroup within an Audio Mixer has exactly 1 Attenuation Unit.",182],["The Attenuation Unit is where you can apply attenuation / gain to the audio signal passing through the AudioGroup. The attenuation is computed and applied to the signal 'at the unit' (not combined with other attenuation settings and applied at the voice source). This allows very complex and interesting setups to be created when combined with Sends / Receives and non linear DSP effects. Attenuation can be applied to -80dB (silence) and gain can be applied to +20dB.",182],["Every Attenuation Unit has a VU meter in the inspector. This meter shows the audio signal levels at that point in the signal chain (just after attenuation is applied). This means that if you have DSP effects or Receives after the Attenuation Unit, the metering information seen in the AudioGroup strip for that AudioGroup will be different to the metering information at the Attenuation Unit. This is a great way to debug the signal chain of an AudioGroup by dragging the Attenuation Unit up and down the processing chain to see the metering at different points.",182],["The VU meter shows both RMS and peak hold values.",182],["To move the Attenuation Unit (or any effect) up or down the signal chain, select the Unit's header and drag up or down the inspector to reposition it.",182],["To change the attenuation setting, move the slider above the metering or enter in a value in the text box.",182],["Effect Units",182],["Effect Units are general DSP effects that modify the audio signal being played through the AudioGroup, for example Highpass or Reverb. Effect Units can also process side-chain signal information that is sent to it from a Send Unit. The interface for each Effect Unit is different, but for the most part expose a collection of parameters that you can modify to change how the effect is applied to the signal. For example, a Parameter EQ effect has 3 parameters that modify how the signal is processed:",182],["Unity comes with a collection of in-built effects that you can use within an AudioGroup. There is also the ability to create custom DSP effect plugins that can be used within an Audio Mixer.",182],["To add an effect to the AudioGroup, select Add Effect button at the bottom of the AudioGroup Inspector.",182],["To change the ordering of the effect within the AudioGroup, select the effect header and drag up or down to place it in a different position.",182],["To remove the effect from the AudioGroup, right-click on the effect header and select Remove this effect.",182],["Send Units",182],["Sends allow you to diverge the audio signal flow and send a potentially attenuated copy of the signal to be used as a side-chain within another Effect Unit, for example, a side-chain compressor. You can insert Sends anywhere in the signal chain, allowing divergence of signal at any point.",182],["Initially, when Sends are added to an AudioGroup, they don't send to anything, and the Send Level is set to 80dB. To send to another Effect Unit, you must already have an Effect Unit that can accept side-chain signals in the Audio Mixer somewhere. After the destination Effect Unit has been selected, you need to increase the Send Level to send signal to the destination.",182],["To add a Send to an AudioGroup, select Add Effect at the bottom of the AudioGroup Inspector and choose Send.",182],["To connect a Send to another Effect Unit (capable of receiving signal), choose the destination from the drop down menu in the Send Unit Inspector.",182],["Set the level of signal sent to the destination with \"Send Level\"",182],["Receive Units",182],["Receives are the signal sinks of Sends. They take the audio signal that is sent to them from Sends and mix it with the current signal passing through their AudioGroup. There are no parameters to a Receive.",182],["Note**: If you Solo a Receive unit, the sound stops playing. This is by design.",182],["Duck Volume Units",182],["Duck Volume Units allow you to create side-chain compression from signal sent from Sends. Duck Volume is a great way to control the attenuation of a signal based on audio being played somewhere else in the Audio Mixer.",182],["Duck Volume Units can be added like any other Effect Unit and must have signal sent to them from at least one Send to be useful.",182],["Common options",182],["Each unit within the AudioGroup Inspector has a number of common features.",182],["Gear options",182],["Allow Wet Mixing** - Toggling this option creates a dry channel around the effect. The slider that appears when this is enabled dictates what percentage of the signal is passed into the wet/dry components. Enabling this increases memory usage and CPU overhead. This is only available on certain units.",182],["Bypass** - Toggling this will bypass the Effect Unit completely, effectively disabling it in the signal chain.",182],["Copy Effect Settings to all Snapshots** - Selecting this will copy all the parameter values within this Effect Unit to all the other Snapshots in the Audio Mixer. This is useful when adding a new Effect Unit, making changes to that Effect Unit and wanting those settings to be the same across all Snapshots.",182],["Add Effect Before** - Allows the insertion of an Effect Unit before the current Effect Unit in the AudioGroup. Select the desired effect from the menu shown.",182],["Add Effect After** - Allows the insertion of an Effect Unit after the current Effect Unit in the AudioGroup. Select the desired effect from the menu shown.",182],["Remove This Effect** - Remove this Effect Unit completely from the Audio Mixer. Attenuation Units cannot be removed from AudioGroups.",182],["Wet Mixing",182],["Allowing Wet Mixing on a DSP effect allows you to decide how much of the audio signal that is to enter the effect actually is processed by the effect. Enabling Wet Mixing effectively creates a dry channel around the effect. You can then select the effect slot and drag left and right to increase or decrease the percentage of audio signal that is passed through the DSP effect unit. The rest of the signal is passed through the dry channel. The following diagram illustrates this concept:",182],["Wet mixing is good for when a user wants to control the influence an effect has on the mix and preserve a percentage of the original signal.",182],["Exposed parameters",182],["Exposed parameters allow you to bypass the Snapshot system of an Audio Mixer and set the value of any parameter within an Audio Mixer from script. When an exposed parameter is set via script, that parameter is locked to that value and will not change as the the game transitions Snapshots.",182],["Exposing a parameter with an Audio Mixer is done in the AudioGroup Inspector. For any parameter shown in the Inspector (including Pitch, Volume, Send Level and Wet Level), you can right-click on the name of the parameter and choose 'Expose X to script'.",182],["After a parameter is exposed, it shows up in the Exposed Parameter drop down in the top right corner of the Audio Mixer Window. Selecting on this drop down reveals all the exposed parameters in the Audio Mixer.",182],["To rename an exposed parameter, right-click on the name of the exposed parameter and select Rename. This name will be how you reference the parameter from the AudioMixer API.",182],["To delete an exposed parameter, right-click on the name of the exposed parameter and select Delete.",182],["Transition overrides",182],["When transitioning between Snapshots, by default all transitions are done with linear interpolation from the beginning to target values. In some cases this transition behaviour is not desired however, for example when it's preferable to brick-wall the change at the start or end of the transition.",182],["All of the parameters available within the Audio Mixer can have their transition behaviour changed. Transition behaviours are defined per-Snapshot, with the target Snapshot defining the transition behaviour.",182],["To set the transition override for a particular parameter for the current Snapshot, right-click on the parameter name and select the required transition type.",182],["Audi Mixer inspector",182],["The audio mixer asset itself has an inspector that allows specifying the overall activation/suspense behavior of the mixer. Being assets, audio mixers are basically activated when any audio source plays into the mixer and will stay active as long as there is such a driver supplying audio data to the mixer. Since mixers can also be activated by the audio preview button in the scene view, the activation behavior is different from that of scene-objects such as MonoBehaviors. Thus, a mixer may be active (and therefore consuming CPU) even in stop mode.",182],["To avoid running out of CPU resources in a project that contains a large number of mixers that are not supposed to be running all at the same time (say, because specific levels use certain specialized mixers), the audio mixers have functionality built-in to put themselves into suspended mode in which all processing stops. To do this in a natural way that doesn’t lead to audible artefacts such as clicks or missing reverb/echo tails each mixer uses the following strategy:",182],["As long as any audio source is playing into this mixer or the mixer is receiving audio data from other sub-mixers the mixer will keep itself active. After the last sound source has finished playing, the mixer will wait for a second and then continually use loudness-measurement at its own output to decide if it should suspend itself. This is needed because reverb and echo tails can potentially decay very slowly. The loudness threshold at which the mixer suspends itself is determined by enabling Auto Mixer Suspend and setting the Threshold Volume parameter on the mixer asset’s inspector which is shown then the mixer asset is selected in the project browser (not when selecting a sub-asset like a mixer group or snapshot). The value of -80 dB is chosen as the default and matches the lowest value of the faders in the mixer. In practice it is often possible to set it to a significantly larger value to get quicker deactivation and avoid intermediate CPU spikes that could cause stutter.",182],["Native audio plug-in SDK",183],["The native audio plug-in SDK is the built-in native audio plug-in interface of Unity. This page walks you through both basic concepts and complex use cases.",183],["Prerequisite",183],["You must first download the newest audio plug-in SDK.",183],["Overview",183],["The native audio plug-in system consists of two parts:",183],["The native DSP (Digital Signal Processing) plug-in which should be implemented as a .dll (Windows) or .dylib (OSX) in C or C++. Unlike scripts, this must be compilable by any platform that you want to support, possibly with platform-specific optimizations.",183],["The GUI which is developed in C#. The GUI is optional, so you always start out plug-in development by creating the basic native DSP plug-in, and let Unity display a default slider-based UI for the parameter descriptions that the native plug-in exposes. This is the recommended approach to initiate any project.",183],["You can initially prototype the C# GUI as a .cs file that you just drop into the Editor's Assets folder much like any other Editor script. You can move this into a proper Visual Studio project later as your code starts to grow, and needs better modularization and better IDE support. This also enables you to compile it into a .dll, making it easier for the user to drop into the project and also to protect your code.",183],["Both native DSP and GUI DLLs can contain multiple plug-ins, and binding happens only through the names of the effects in the plug-ins regardless of what the DLL file is called.",183],["File types",183],["The native side of the plug-in SDK consists of one file (AudioPluginInterface.h). However, to add multiple plug-in effects within the same .dll, Unity provides additional code to handle the effect definition and parameter registration in a unified manner (AudioPluginUtil.h and AudioPluginUtil.cpp). Note that the NativePluginDemo project contains several example plug-ins to get you started and display a variety of different plug-in types that are useful in a game context. This code is available in the public domain so anyone can use this code as a starting point to their own creations.",183],["Develop a plug-in",183],["To start developing a plug-in, define the parameters for your plug-in. Although, you don't need to have a detailed plan of all the parameters that the plug-in should include, it's useful to have a rough idea of the user experience and the various components to which you'd like to refer.",183],["The example plug-ins that Unity provides come package with utility functions that's easy to start with.",183],["As an example, use the Ring Modulator example plug-in, which is a simple plug-in. It multiplies the incoming signal by a sine wave, which gives a nice radio-noise and broken reception like effect, especially if you chain together multiple ring modulation effects with different frequencies.",183],["The basic scheme for dealing with parameters in the example plug-ins is to define them as enum-values that you use as indices into an array of floats for both convenience and brevity.",183],["enum Param",183],["P_FREQ,",183],["P_MIX,",183],["P_NUM",183],["};",183],["int InternalRegisterEffectDefinition(UnityAudioEffectDefinition& definition)",183],["int numparams = P_NUM;",183],["definition.paramdefs = new UnityAudioParameterDefinition [numparams];",183],["RegisterParameter(definition, \"Frequency\", \"Hz\",",183],["0.0f, kMaxSampleRate, 1000.0f,",183],["1.0f, 3.0f,",183],["P_FREQ);",183],["RegisterParameter(definition, \"Mix amount\", \"%\",",183],["0.0f, 1.0f, 0.5f,",183],["100.0f, 1.0f,",183],["P_MIX);",183],["return numparams;",183],["The numbers in the RegisterParameter calls are the minimum, maximum, and default values followed by a scaling factor used for display-only. That is, for a percentage-value, the actual value goes from 0 to 1 and can be scaled to 100 when displayed. Although, there is no custom GUI code for this, Unity will generate a default GUI from these basic parameter definitions. No checks are performed for undefined parameters, so the AudioPluginUtil system expects that all declared enum values (except P_NUM) are matched up with a corresponding parameter definition.",183],["Behind the scenes the RegisterParameter function fills out an entry in the UnityAudioParameterDefinition array of the UnityAudioEffectDefinition structure that's associated with that plug-in (refer to the AudioEffectPluginInterface.h header file). In addition, set up the following remaining items in UnityAudioEffectDefinition:",183],["The callbacks to the functions that handle instantiating the plug-in (CreateCallback)",183],["Set and get parameters for SetFloatParameterCallback/UnityAudioEffect_GetFloatParameterCallback",183],["The actual processing for UnityAudioEffect_ProcessCallback",183],["Destroy the plug-in instance for UnityAudioEffect_ReleaseCallback when done",183],["To make it easy to have multiple plug-ins in the same DLL, each plug-in resides in its own namespace, and a specific naming convention for the callback functions is used such that the DEFINE_EFFECT and DECLARE_EFFECT macros can fill out the UnityAudioEffectDefinition structure. Underneath the hood all the effects definitions are stored in an array to which a pointer is returned by the only entry point of the library UnityGetAudioEffectDefinitions.",183],["This is useful to know in case you want to develop bridge plug-ins that map from other plug-in formats such as VST or AudioUnits to or from the Unity audio plug-in interface, in which case you need to develop a more dynamic way to set up the parameter descriptions at load time.",183],["Instantiating the plug-in",183],["You must next set the data for the instance of the plug-in. In the example plug-ins, data is set into the EffectData structure. The allocation of this must happen in the corresponding CreateCallback which is called for each instance of the plug-in in the mixer. Following is a simple example, where there's only one sine-wave being multiplied to all channels. Typically, advanced plug-ins need you to allocate additional data per input channel.",183],["struct EffectData",183],["struct Data",183],["float p[P_NUM]; // Parameters",183],["float s; // Sine output of oscillator",183],["float c; // Cosine output of oscillator",183],["};",183],["union",183],["Data data;",183],["unsigned char pad[(sizeof(Data) + 15) & ~15];",183],["};",183],["};",183],["UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK CreateCallback(",183],["UnityAudioEffectState* state)",183],["EffectData* effectdata = new EffectData;",183],["memset(effectdata, 0, sizeof(EffectData));",183],["effectdata->data.c = 1.0f;",183],["state->effectdata = effectdata;",183],["InitParametersFromDefinitions(",183],["InternalRegisterEffectDefinition, effectdata->data.p);",183],["return UNITY_AUDIODSP_OK;",183],["The UnityAudioEffectState contains various data from the host such as the sampling rate, the total number of samples processed (for timing), or whether the plug-in is bypassed, and is passed to all callback functions.",183],["To free the plug-in instance, use the following corresponding function:",183],["UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK ReleaseCallback(",183],["UnityAudioEffectState* state)",183],["EffectData::Data* data = &state->GetEffectData()->data;",183],["delete data;",183],["return UNITY_AUDIODSP_OK;",183],["The main processing of audio happens in ProcessCallback:",183],["UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK ProcessCallback(",183],["UnityAudioEffectState* state,",183],["float* inbuffer, float* outbuffer,",183],["unsigned int length,",183],["int inchannels, int outchannels)",183],["EffectData::Data* data = &state->GetEffectData()->data;",183],["float w = 2.0f * sinf(kPI * data->p[P_FREQ] / state->samplerate);",183],["for(unsigned int n = 0; n < length; n++)",183],["for(int i = 0; i < outchannels; i++)",183],["outbuffer[n * outchannels + i] =",183],["inbuffer[n * outchannels + i] *",183],["(1.0f - data->p[P_MIX] + data->p[P_MIX] * data->s);",183],["data->s += data->c * w; // cheap way to calculate a sine-wave",183],["data->c -= data->s * w;",183],["return UNITY_AUDIODSP_OK;",183],["The GetEffectData function at the top is a helper function casting the effectdata field of the state variable to the EffectData::Data in the structure that's declared above.",183],["Other simple plug-ins included are the NoiseBox plug-in, which adds and multiplies the input signal by white noise at variable frequencies, or the Lofinator plug-in, which does simple downsampling and quantization of the signal. All these can be used in combination and with game-driven animated parameters to simulate anything from mobile phones to bad radio reception on walkies and broken loudspeakers.",183],["The StereoWidener, which decomposes a stereo input signal into mono and side components with variable delay and then recombines these to increase the perceived stereo effect.",183],["Determine what plug-in to load on which platform?",183],["Native audio plug-ins use the same scheme as other native or managed plug-ins, in that, they must be associated with their respective platforms via the plug-in importer inspector. For information about the subfolders and where to place plug-ins, refer to Building plug-ins for desktop platforms. The platform association is necessary so that the system knows which plug-ins to include on a each build target in the standalone builds, and with the introduction of 64-bit support this even has to be specified within a platform. macOS plug-ins are useful because it supports universal binary format, which allows them to contain both 32 and 64 bit variants in the same bundle.",183],["Native plug-ins in Unity that are called from managed code are loaded via the [DllImport] attribute, which reference the function to import from the native DLL. However, native audio plug-ins are different, because they need to be loaded before Unity starts creating any mixer assets that might need effects from the plug-in. The Editor doesn't have this problem, because you can reload and rebuild the mixers that depend on plug-ins unlike in standalone builds, the plug-ins must be loaded before creating the mixer assets. To work around this, prefix the DLL of the plug-in audioplugin (case insensitive) for the system to detect and add it to a list of plug-ins that are automatically loaded at start. You must remember that the definitions inside the plug-in only define the names of the effects that are displayed inside Unity's mixer. Regardless of what the .dll is called, it needs to start with the string audioplugin to be detected as such.",183],["For platforms such as iOS, the plug-in code must be statically linked into the Unity binary that's produced by the generated XCode project and just like plug-in rendering devices, the plug-in registration must be added explicitly to the startup code of the app.",183],["On macOS, one bundle can contain both the 32 and 64 bit version of the plug-in. You can also split them to save size.",183],["Plug-ins with custom GUIs",183],["This section provides advanced plug-in use cases, such as effects for equalization and multiband compression. These plug-ins have a much higher number of parameters than the simple plug-ins presented in the above section. In addition, the advanced plug-ins require physical coupling between parameters that require a better way to visualize the parameters than the simple sliders described above. Consider an equalizer for instance: each band has 3 different filters that collectively contribute to the final equalization curve and each of these filters has the 3 parameters frequency, Q-factor and gain which are physically linked and define the shape of each filter. It also useful to have an equalizer plug-in with a big display showing the resulting curve and the individual filter contributions. You operate the plug-in in such a way that multiple parameters are set simultaneously by simple dragging operations on the control instead of changing sliders one at a time.",183],["For customizing the GUI of the Equalizer plug-in, drag the three bands to change the gains and frequencies of the filter curve. Hold shift down while dragging to change the shape of each band.",183],["In summary, the definition, initialization, deinitialization, and parameter handling follows the exact same enum-based method that the simple plug-ins use, and even the ProcessCallback code is rather short.",183],["To play around with a proper plug-in:",183],["Open the AudioPluginDemoGUI.sln project in Visual Studio.",183],["Locate the associated C# classes for the GUI code.",183],["After Unity loads the native plug-in dlls and registers the contained audio plug-ins, it starts looking for corresponding GUIs that match the names of the registered plug-ins. This happens through the Name property of the EqualizerCustomGUI class which, like all custom plug-in GUIs, must inherit from IAudioEffectPluginGUI. The only important function inside this class is the bool OnGUI(IAudioEffectPlugin plugin) function. Through the IAudioEffectPlugin plug-in argument this function gets a handle to the native plug-in that it can use to read and write the parameters that the native plug-in has defined.",183],["To read a parameter that the native plug-in calls:",183],["plugin.GetFloatParameter(\"MasterGain\", out masterGain);",183],["Which returns true if the parameter is found. To set it, it calls:",183],["plugin.SetFloatParameter(\"MasterGain\", masterGain);",183],["Which also returns true if the parameter exists, which is the most important binding between GUI and native code.",183],["You can also use the function to query parameter NAME for its minimum, maximum, and default values to avoid duplicate definitions of these in the native and UI code.",183],["plugin.GetFloatParameterInfo(\"NAME\", out minVal, out maxVal, out defVal);",183],["If your OnGUI function returns true, the Inspector will display the default UI sliders below the custom GUI. This is useful for GUI development as all the parameters are available while developing your custom GUI with the added advantage to check that the right actions performed on it result in the expected parameter changes.",183],["The DSP processing that goes on in the Equalizer and Multiband plug-ins are filters taken from Robert Bristow Johnson's excellent Audio EQ Cookbook. You can use Unity's internal API functions to plot the curves and draw antialiased curves for the frequency response.",183],["Both Equalizer and Multiband plug-ins also provide code to overlay the input and output spectra for visualizing the effect of the plug-ins, which suggests: The GUI code runs at much lower update rate (the frame rate) than the audio processing and doesn't have access to the audio streams. Therefore, to read this data, the native code provides the following special function:",183],["UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK GetFloatParameterCallback(",183],["UnityAudioEffectState* state,",183],["int index,",183],["float* value,",183],["char *valuestr)",183],["EffectData::Data* data = &state->GetEffectData()->data;",183],["if(index >= P_NUM)",183],["return UNITY_AUDIODSP_ERR_UNSUPPORTED;",183],["if(value != NULL)",183],["value = data->p[index];",183],["if(valuestr != NULL)",183],["valuestr[0] = 0;",183],["return UNITY_AUDIODSP_OK;",183],["It enables reading an array of floating-point data from the native plug-in. The plug-in system doesn't care about what that data is, as long as the request doesn't slow down the UI or the native code. For the Equalizer and Multiband code, a utility class called FFTAnalyzer makes it easy to feed in input and output data from the plug-in and get a spectrum back. This spectrum data is then resampled by GetFloatBufferCallback and handed to the C# UI code. The data must be resampled so that the FFTAnalyzer runs the analysis at a fixed frequency resolution while GetFloatBufferCallback just returns the number of samples requested, which is determined by the width of the view that's displaying the data. For a simple plug-in that has a minimal amount of DSP code you might want to use the CorrelationMeter plug-in, which plots the amplitude of the left channel against the amplitude of the right channel to display the stereo effects of the signal.",183],["Left: Custom GUI of the CorrelationMeter plug-in.",183],["Right: Equalizer GUI with overlaid spectrum analysis (green curve is source, red is processed).",183],["At this point we would also like to point out that both the Equalizer and Multiband effects are kept intentionally simple and unoptimized, but we think they serve as good examples of more complex user interfaces that are supported by the plug-in system. There's obviously a lot of work still in doing the relevant platform-specific optimizations, tons of parameter tweaking to make it fell really right and respond in the most musical way etc. etc… We might also implement some of these effects as built-in plug-ins in Unity at some point simply for the convenience of increasing Unity's standard repertoire of plug-ins, but we sincerely hope that the reader will also take up the challenge to make some really awesome plug-ins -- and who knows, they might at some point end up as built-in plug-ins. ;-)",183],["Convolution reverb example plug-in. The impulse response is decaying random noise,",183],["defined by the parameters. This is only for demonstration purposes, as a production plug-in",183],["should allow the user to load arbitrary recorded impulses, the underlying convolution algorithm",183],["remains the same nevertheless.",183],["Example of a loudness monitoring tool measuring levels at 3 different time scales.",183],["Also just for demonstration purposes, but a good place to start building a monitor tool that",183],["conforms to modern loudness standardizations. The curve rendering code is built into Unity.",183],["Synchronizing to the DSP clock",183],["To try out some fun exercises, use the plug-in system to generate sound instead of processing it. For simple bassline and drum synthesizers for users who listen to acid trance, try simple clones of the main synths that defined this genre. Plugin_TeeBee.cpp and Plugin_TeeDee.cpp are simple synths that generate patterns with random notes, have parameters for tweaking the filters and envelopes in the synthesis engine. The state->dsptick parameter is read in the ProcessCallback to determine the position in a song. This counter is a global sample position, so you can divide it by the length of each note specified in samples and fire a note event to the synthesis engine whenever this division has a zero remainder. This way, all plug-in effects stay in sync to the same sample-based clock. If you want to play a prerecorded piece of music with a known tempo through such an effect, use the timing info to apply tempo-synchronized filter effects or delays on the music.",183],["Spatialization",183],["The native audio plug-in SDK is the foundation of the Spatialization SDK, which allows developing custom spatialization effects to instantiate per audio source.",183],["For more information, see Audio Spatializer SDK.",183],["Outlook",183],["This is just the beginning of an effort to open up parts of the sound system to high performance native code. Future plans include:",183],["Integrate native audio in other parts of Unity and utilize the effects outside the mixer.",183],["Extend the SDK to support other parameter types than floats with support for better default GUIs and storage of binary data.",183],["Disclaimer:**",183],["While there are many similarities in the design, Unity's native audio SDK isn't built on top of other plug-in SDKs like Steinberg VST or Apple AudioUnits. While it's possible to implement basic wrappers for these using this SDK that allow using such plug-ins with Unity, it's important to note that this is strictly not managed by the Unity development team.",183],[" Hosting a plug-in poses its own challenges. For example, dealing with the intricacies of expected invocation orders and handling custom GUI windows that are based on native code can quickly become unmanageable, making the example code unhelpful.",183],["While it's possible to load your VST or AU plug-in or even effects for mocking up and testing sound design, note that using VST/AU limits you to few specific platforms. The advantage of writing audio plug-ins based on the Unity SDK however, is that it allows you to extend it to all platforms that support software-mixing and dynamically loaded native code. Therefore, use this approach only if you want to make a nice solution for mocking up early sound design with your favorite tools before committing to dedicating time to develop custom plug-ins (or simply to use metering plug-ins in the Editor that don’t alter the sound in any way).",183],["An overview of the concepts and Audio Mixer",184],["The Audio Mixer is an Asset that can be referenced by Audio Sources to provide more complex routing and mixing of the audio signal generated from AudioSources. It does this category based mixing via the AudioGroup hierarchy that is constructed by the user inside the Asset.",184],["DSP effects and other audio mastering concepts can be applied to the audio signal as it is routed from the AudioSource to the AudioListener.",184],["Audio Mixer View",184],["The Asset - Containing all AudioGroups and AudioSnapshots as sub-assets.",184],["The Hierarchy view - This contains the entire mixing hierarchy of AudioGroups within the Audio Mixer.",184],["The Mixer Views - This is a list of cached visibility settings of the mixer. Each view only shows a sub-set of the entire hierarchy in the main mixer window.",184],["Snapshots - This is a list of all the AudioSnapshots within the Audio Mixer Asset. Snapshots capture the state of all the parameter settings within an Audio Mixer, and can be transitioned between at runtime.",184],["The Output Audio Mixer - Audio Mixers can be routed into AudioGroups of other Audio Mixers. This property field allows one to define the output AudioGroup to route this Audio Mixer signal into.",184],["AudioGroup Strip View - This shows an overview of an AudioGroup, including the current VU levels, attenuation (volume) settings, Mute, Solo and Effect Bypass settings and the list of DSP effects within the AudioGroup.",184],["Edit In Play Mode - This is a toggle that allows you to edit the Audio Mixer during play mode, or prevent edits and allow the game runtime to control the state of the Audio Mixer.",184],["Exposed Parameters - This shows a list of Exposed Parameters (any parameter within an Audio Mixer can be exposed to script via a string name) and corresponding string names.",184],["Audio Mixer Inspector",184],["The Pitch and Ducking settings are present at the top of all AudioGroups.",184],["An example Send Effect, positioned before where the attenuation is applied.",184],["The Attenuation (volume setting) is done here for an AudioGroup. The Attenuation can be applied anywhere in the effect stack. The VU meter here shows the volume levels at that point in the effect stack (different from the VU meters shown in the Audio Mixer view which show the levels of the signal as it leaves the AudioGroup.",184],["An example effect with parameters, in this case a Reverb. Parameters can be exposed by right clicking on them and choosing to expose them.",184],["Concepts",184],["Routing and Mixing",184],["Audio routing is the process of taking a number of input audio signals and outputting 1 or more output signals. The term signal here refers to a continuous stream of digital audio data, which can be broken down into digital audio channels (such as stereo or 5.1 (6 channels)).",184],["Internally there is usually some work on these signals being done, such as mixing, applying effects, attenuation etc. For various reasons that will be covered, this is an important aspect of audio processing and this is what the Audio Mixer is designed to allow you to do.",184],["With the exception of Sends and Returns (which will be covered later), the Audio Mixer contains AudioGroups that allow any number of input signals, mix those signals and have exactly 1 output.",184],["In the land of audio processing, this routing and mixing is usually done ORTHOGONAL to the scene graph hierarchy, as audio behaves and designers interact with audio very differently to objects and concepts shown in the scene.",184],["In previous versions of Unity, the concept of routing and mixing was not available. Users were able to place AudioSources within the scene, and the audio signal that they produced (via AudioClips for example) was routed directly to the AudioListener, where all the audio signals were mixed together at one point. Remember here that this is happening orthogonal to the scene graph and no matter where your AudioSources are in the scene,",184],["Audio Mixers now sit between the AudioSource and the AudioListener in the audio signal processing space and allow you to take the output signal from the AudioSource perform whatever routing and mixing operations they wish until finally all audio is output to the AudioListener and is heard from the speakers.",184],["Why do any of this stuff?",184],["Mixing and routing allows you to categorise the audio within their game into whatever concepts they desire. Once sound is mixed together into these categories, effects and other operations can be applied to these categories as a whole. This is powerful not only applying game logic changes to the various sound categories, but also for allowing designers to tweak the various aspects of the mix to perform whats knows as \"Mastering\" of the entire soundscape dynamically at runtime.",184],["Relation to 3D spatial attenuation",184],["Some sound concepts are related to the scene graph and the 3D world. The most obvious of those is the application of attenuation based on 3D distance, relative speed to the AudioListener and environmental Reverb effects.",184],["As these operations are related to the scene and not to the categories of sounds in an Audio Mixer, the effects are applied at the AudioSource, before the signal enters an Audio Mixer. For example, the attenuation applied to an AudioSource based on its distance from the AudioListener is applied to the signal before it leaves the AudioSource and is routed into an Audio Mixer.",184],["Sound Categories",184],["As stated above, Audio Mixers allow you to effectively categorise types of sounds and do stuff to these categories. This is an important concept, because without such categorisations, the entire soundscape quickly becomes a mess of indistinguishable noise as every sound is played back equally and without any mixing applied to them. With concepts such as ducking, categories of sounds can also influence each other, adding additional richness to the mix.",184],["Examples of operations that designers might want to do on a category are;",184],["Apply attenuation to a group of ambiences.",184],["Trigger a lowpass filter on all the foley sounds in a game, simulating being underwater.",184],["Attenuate all sounds in the game except the Menu music and interaction sounds.",184],["Reduce the volume of all the gun and explosion sounds in a game to ensure that an NPC talking to you can be heard.",184],["etc...",184],["These categories are really quite game specific and vary between different projects, but an example of such categorisation might be described as follows;",184],["All sounds are routed into the \"Master\" AudioGroup",184],["Into the Master group, there is a category for Music, Menu sounds and all game sounds",184],["The game sounds group is broken down into dialog from NPCs, environmental sounds from ambiences and other foley sounds like gunshots and footsteps",184],["These categories are broken further down as required",184],["The category hierarchy of this layout would look something like this:",184],["Note that the scene graph layout would look nothing like the layout for sound categories.",184],["Moods and Themes of the Mix",184],["Mixing and routing of the games sounds can also be used to create the immersion the designer is looking for. For example, reverb can be applied to all of the game sounds and the music attenuated to create the feeling of being in a cave.",184],["The Audio Mixer can be used effectively to create moods within the game. Using concepts such as snapshots (explained later) and other different mixers within a game, the game can transition its mood easily and emote the player into feeling what the designer wishes, which is super powerful in the immersion of the game.",184],["The Global Mix",184],["The Audio Mixer is used to control the overall mix of all the sounds within a game. These Audio Mixers control the global mix and can be seen as the static singleton mix that sound instances are routed through.",184],["In other words, the Audio Mixers are always present through the lifetime of a scene, and sound instances are created and destroyed as the game progresses and play through these global Audio Mixers.",184],["Snapshots",184],["Snapshots allow you to capture the state of an Audio Mixer, and transition between these different states as the game progresses. This is a great way to define moods or themes of the mix and have those moods change as the player progresses through the game.",184],["Snapshots capture the values of all of the parameters within the Audio Mixer;",184],["Volume",184],["Pitch",184],["Send Level",184],["Wet Mix Level",184],["Effect Parameters",184],["Combining Snapshots with game logic is a great way to change many aspects of the soundscape.",184],["Specifics on the Audio Mixer window",185],["Mixers panel",185],["The Mixers panel displays a complete list of all Audio Mixers in the project. Select the Audio Mixers in the Mixers panel to quickly switch between them. You can also route one Audio Mixer into the AudioGroup of another Audio Mixer from this panel.",185],["Select + in the top right of the panel to create a new Audio Mixer in the project.",185],["Route Audio Mixers into other Audio Mixers",185],["Unity supports the use of multiple Audio Mixers within a scene at once. By default, each Audio Mixer outputs the audio signal directly to the AudioListener.",185],["You can choose to route the audio output of an Audio Mixer into an AudioGroup of another Audio Mixer. This allows for flexible and dynamic routing hierarchies at game runtime.",185],["You can route an Audio Mixer into another AudioGroup through either of the following methods:",185],["From the Mixers panel in the Editor.",185],["Dynamically at runtime through the AudioMixer API.",185],["To change the output of an Audio Mixer within the Editor:",185],["Select an Audio Mixer within the Mixers panel.",185],["Drag the Audio Mixer over the top of another Audio Mixer.",185],["In the dialog that appears, select the AudioGroup of the Audio Mixer you want to route into.",185],["The panel displays the parenting relationship of the Audio Mixers. It also displays the target AudioGroup next to the Audio Mixer's name.",185],["Hierarchy panel",185],["The Hierarchy view is where you define the sound categories of an Audio Mixer and the mixing structure. You can define your own custom categories that AudioSources can connect to and play through.",185],["Add and configure AudioGroups within the Hierarchy",185],["You can add and modify the topology of an Audio Mixer within the AudioGroup Hierarchy panel.",185],["To add a new AudioGroup to the hierarchy, do either of the following:",185],["Right-click on an existing AudioGroup (there must be at least one in an Audio Mixer), and select Add child group or Add sibling group.",185],["Select an AudioGroup to add a child to, and select + in the top right of the panel. This adds a new group to the Audio Mixer under the selected one.",185],["To change the topology of an Audio Mixer:",185],["Select an AudioGroup in the panel.",185],["Drag it over the top of another AudioGroup.",185],["This parents the target AudioGroup above the one selected.",185],["To delete an AudioGroup (including its children), do either of the following:",185],["Select the group you want to delete, and press the Delete key.",185],["Right-click the group you want to delete, and select Remove Group (and children).",185],["To duplicate an AudioGroup and make it a sibling:",185],["Right-click the AudioGroup you want to duplicate.",185],["Select Duplicate Group (and children).",185],["This duplicates the group and child groups exactly, including effects contained within the groups.",185],["To rename an AudioGroup:",185],["Right-click the group.",185],["Select Rename.",185],["AudioGroup view",185],["The AudioGroup view displays a flat arrangement of the AudioGroups in the Audio Mixer. This arrangement is organized horizontally within the view. The current view selection dictates the groups shown in the AudioGroup view.",185],["Each AudioGroup within the view is represented as a vertical “strip”. The layout and look and feel of the strip is common to Digital Audio Workstations and other audio editing packages. This layout facilitates the transition of audio engineers from a music and video background, and is a parallel for audio hardware integration.",185],["The strip is made up of a title bar, followed by a vertical VU meter, which represents the current audio levels through that AudioGroup. Beside the VU meter is a volume selector that allows you to input the AudioGroups attenuation along the same scale as the VU meter, which is represented in dB levels.",185],["Below the VU meter are three buttons with the following functionality:",185],["Solo** - This toggle switches between hearing the entire mix or only the AudioSources that play into children of the AudioGroup being Soloed.",185],["Mute** - This toggle includes the current AudioGroup in the audible mix or excludes it from being heard in the global mix.",185],["Bypass** - This toggle bypasses or enables all the effects in the AudioGroup.",185],["The AudioGroup also contains a list of DSP Effect Units and the Attenuation Units in the AudioGroup. The attenuation can be applied anywhere in the Effect Unit chain in an AudioGroup and allows you to decide exactly where you apply the volume adjustment. This is useful for non-linear effects and Send and Receive Units.",185],["Each Effect Unit slot displays the name of the Effect unit that is being applied. The circle on the left side of the effect is a toggle to enable or bypass that individual effect. If you right-click the effect and select Allow Wet Mixing, the colored bar on the bottom of the screen becomes active. This colored bar denotes the amount of wet signal that passes through the effect.",185],["To refine the order of effects, drag an effect up and down the audiogroup. You can also drag effects across AudioGroups to move the effect to another AudioGroup.",185],["To add new Effect Units, right-click on an existing effect to add it before or after it, or select Add.. at the bottom of the strip.",185],["Snapshot panel",185],["In the Snapshot panel, you can create, switch between, and tweak different Snapshots in the Audio Mixer. There is always at least one snapshot active. Selection of a snapshot within the Snapshot panel indicates that further edits of the Audio Mixer are edits to that snapshot.",185],["Snapshots defined in the Snapshot panel also display as sub-assets of the Audio Mixer. This allows you to access the snapshots elsewhere in the editor and within scripts.",185],["You can also define a Start Snapshot. A Start Snapshot has a star icon to its right on the snapshot list. The Start Snapshot is the snapshot that the Audio Mixer initializes to when it loads. For example, when the scene starts.",185],["To create a new Snapshot:",185],["Select the + at the top right of the panel.",185],["Enter a name for the new snapshot.",185],["To define a different Start Snapshot:",185],["Right-click a Snapshot.",185],["Select Set as Start Snapshot.",185],["Views panel",185],["Views allow you to create groups of visible AudioGroups in the Audio Mixer. With views, you can create perspectives of interest into the Audio Mixer, instead of always being presented with the full hierarchy. Views are only for workflow optimization and don't affect runtime setup or performance.",185],["Like the Snapshot panel, there is always one view selected and shown in the AudioGroup View. By default, all AudioGroups are visible in the default view. The eye icons in the Hierarchy panel control what is contained in a view.",185],["To add a new view to the list of views;",185],["Select the + at the top right of the Views panel.",185],["Enter a name for the new view.",185],["To change the current view, select one from the list of views in the Views panel.",185],["To remove a view:",185],["Right-click on the view you want to remove.",185],["Select Delete.",185],["To duplicate a view with all of the current view settings:",185],["Right-click on the view you want to duplicate.",185],["Select Duplicate.",185],["The eye icon of an AudioGroup",185],["Each AudioGroup in the Hierarchy panel has a small eye icon to the left of the group. This icon serves two purposes:",185],["Select the eye icon to toggle this AudioGroup's visibility in the currently selected View.",185],["Right-click on the eye icon to select from a range of colors to tag this AudioGroup with. Select a color other than No Colour to create a small color tag to the left of the eye icon and a color tag under the AudioGroup's name in the AudioGroup view. These color indicators visually group different concepts and collections of AudioGroups in the Audio Mixer.",185],["Overview of Usage and API",186],["The Audio Mixer is a self-contained asset with a streamlined API.",186],["You can find music-related demos in the audio demos repository.",186],["The native audio plugin repository provides the official SDK for developing custom extensions, as well as examples involving complex routing, custom processing and custom generation of audio in the mixer.",186],["Audio overview",187],["A game would be incomplete without some kind of audio, be it background music or sound effects. Unity's audio system can import most standard audio file formats, play sounds in 3D space, and apply optional effects such as echo and filtering. Unity can also record audio from any available microphone on your machine for use during gameplay or for storage and transmission.",187],["Basic theory",187],["In real life, objects emit sounds that listeners hear. The way a sound is perceived depends on many factors. A listener can tell roughly which direction a sound is coming from and may also get some sense of its distance from its loudness and quality. A fast-moving sound source (such as a falling bomb or a passing police car) changes in pitch as it moves as a result of the Doppler Effect. Surroundings also affect the way sound is reflected. A voice inside a cave has an echo, but the same voice in the open air doesn't.",187],["To simulate the effects of position, Unity requires sounds to originate from Audio Sources attached to objects. The sounds emitted are then picked up by an Audio Listener attached to another object, most often the main camera. Unity can then simulate the effects of a source's distance and position from the listener object and play them to you accordingly. You can also use the relative speed of the source and listener objects to simulate the Doppler Effect for added realism.",187],["Unity can't calculate echoes purely from scene geometry, but you can simulate them by adding Audio Filters to objects. For example, you could apply the Echo filter to a sound that is supposed to be coming from inside a cave. In situations where objects can move in and out of a place with a strong echo, you can add a Reverb Zone to the scene. For example, your game might involve cars driving through a tunnel. If you place a reverb zone inside the tunnel, the cars' engine sounds start to echo as they enter. The echo quiets as the cars emerge from the other side.",187],["With the Unity Audio Mixer, you can mix various audio sources, apply effects to them, and perform mastering.",187],["Working with audio assets",187],["Unity can import audio files in AIFF, WAV, MP3, and Ogg formats in the same way as other assets. Drag the files into the Project panel. Import an audio file to create an Audio Clip that you can then drag to an Audio Source or use from a script. The Audio Clip reference page has more details about the import options available for audio files.",187],["For music, Unity also supports tracker modules, which use short audio samples as \"instruments\" that you can arrange to play tunes. You can import tracker modules from .xm, .mod, .it, and .s3m files and use them the same way you use other audio clips.",187],["Audio recording",187],["Unity can access the computer's microphones from a script and create Audio Clips by direct recording. The Microphone class provides an API to find available microphones, query their capabilities, and start and end a recording session. The script reference page for Microphone has further information and code samples for audio recording.",187],["Additional resources",187],["\nAudio Source\n",187],["\nAudio Listener\n",187],["\nAudio Mixer\n",187],["\nThe audio effects\n",187],["\nReverb Zones\n",187],["Audio Profiler",188],["The profiler window contains an audio pane that can reveal detailed information about performance metrics and a log for any audio activity for the past rendered frames. See Audio Area for more information.",188],["Audio Spatializer SDK",189],["The audio spatializer SDK provides controls to change the way your application transmits audio from an audio source into the surrounding space. It is an extension of the native audio plugin SDK.",189],["The built-in panning of audio sources is a simple form of spatialization. It takes the source and regulates the gains of the left and right ear contributions based on the distance and angle between the Audio Listener and the Audio Source. This provides simple directional cues for the player on the horizontal plane.",189],["The Unity Audio Spatializer SDK and example implementation",189],["To provide flexibility and support for working with audio spatialization, Unity has an open interface, the Audio Spatializer SDK, as an extension on top of the Native Audio Plugin SDK. You can replace the standard panner in Unity with a more advanced one, and give it access to important meta-data about the source and listener needed for the computation.",189],["For an example of a native spatializer audio plugin, see the Unity Native Audio Plugin SDK. The plugin only supports a direct Head-Related Transfer Function (HRTF), and is intended for example purposes only.",189],["You can use a simple reverb, included in the plugin, to route audio data from the spatializer plugin to the reverb plugin. The HRTF filtering is based on a modified version of the KEMAR data set. For more information on the KEMAR data set, see the MIT Media Lab's documentation and measurement files.",189],["If you would like to explore a data set obtained from a human subject, refer to IRCAM's data sets.",189],["Initializing the Unity Audio Spatializer ",189],["Unity applies spatialization effects directly after the Audio Source decodes audio data. This produces a stream of audio data in which each source has its own separate effect instance. Unity only processes the audio from that source with its corresponding effect instance.",189],["To enable a plugin to operate as a spatializer, you need to set a flag in the description bit-field of the effect:",189],["definition.flags = UnityAudioEffectDefinitionFlags_IsSpatializer;",189],["If you set the UnityAudioEffectDefinitionFlags_IsSpatializer flag, Unity recognizes the plugin as a spatializer during the plugin scanning phase. When Unity creates an instance of the plugin, it allocates the UnityAudioSpatializerData structure for the spatializerdata member of the UnityAudioEffectState structure.",189],["To use the spatializer in a project, select it in your Project settings (menu: Edit > Project Settings > Audio):",189],["Then, in the Inspector window for an Audio Source that you want to use with the spatializer plugin, enable Spatialize:",189],["You can also enable the spatializer for an Audio Source through a C# script, using the AudioSource.spatialize property.",189],["In an application with a lot of sounds, you might want to only enable the spatializer on your nearby sounds, and use traditional panning on the distant ones, to reduce the CPU load on the mixing thread for the spatializer effects.",189],["If you want Unity to pass spatial data to an audio mixer plugin that is not a spatializer, you can use the following flag in the description bit-field:",189],["definition.flags = UnityAudioEffectDefinitionFlags_NeedsSpatializerData;",189],["If a plugin initializes with the UnityAudioEffectDefinitionFlags_NeedsSpatializerData flag, the plugin receives the UnityAudioSpatializerData structure, but only the listenermatrix field is valid. For more information about UnityAudioSpatializerData, see the Spatializer effect meta-data section.",189],["To stop Unity from applying distance-attenuation on behalf of a spatializer plugin, use the following flag:",189],["definition.flags = UnityAudioEffectDefinitionFlags_AppliesDistanceAttenuation;",189],["The UnityAudioEffectDefinitionFlags_AppliesDistanceAttenuation flag indicates to Unity that the spatializer handles the application of distance-attenuation. For more information on distance-attenuation, see the Attenuation curves and audibility section.",189],["Spatializer effect meta-data ",189],["Unlike other Unity audio effects that run on a mixture of sounds, Unity applies spatializers directly after the Audio Source decodes audio data. Each instance of the spatializer effect has its own instance of UnityAudioSpatializerData, mainly associated with data about the Audio Source.",189],["```lang-csharp",189],["struct UnityAudioSpatializerData",189],["float listenermatrix[16]; // Matrix that transforms sourcepos into the local space of the listener",189],["float sourcematrix[16]; // Transform matrix of the Audio Source",189],["float spatialblend; // Distance-controlled spatial blend",189],["float reverbzonemix; // Reverb zone mix level parameter (and curve) on",189],["// the Audio Source",189],["float spread; // Spread parameter of the Audio Source (0..360 degrees)",189],["float stereopan; // Stereo panning parameter of the Audio Source (-1: fully left, 1: fully right)",189],["// The spatializer plugin may override the distance attenuation to",189],["// influence the voice prioritization (leave this callback as NULL",189],["// to use the built-in Audio Source attenuation curve)",189],["UnityAudioEffect_DistanceAttenuationCallback distanceattenuationcallback;",189],["float minDistance; // The minimum distance of the Audio Source.",189],["// This value may be useful for determining when to apply near-field effects.",189],["float maxDistance; // The maximum distance of the Audio Source, or the",189],["// distance where the audio becomes inaudible to the listener.",189],["};",189],["The structure contains fields corresponding to the properties of the Audio Source component in the Inspector: Spatial Blend, Reverb Zone Mix, Spread, Stereo Pan, Minimum Distance, and Maximum Distance.",189],["The UnityAudioSpatializerData structure contains the full 4x4 transform matrices for the Audio Listener and Audio Source. The listener matrix is inverted so that you can multiply the two matrices to get a relative direction-vector. The listener matrix is always orthonormal, so you can quickly calculate the inverse matrix.",189],["Unity’s audio system only provides the raw source sound as a stereo signal. The signal is stereo even when the source is mono or multi-channel, and Unity uses up- or down-mixing, as required.",189],["Matrix conventions",189],["The sourcematrix field contains a copy of the Audio Source's transformation matrix. For a default Audio Source on a GameObject that is not rotated, the matrix is a translation matrix where the position is encoded in elements 12, 13 and 14.",189],["The listenermatrix field contains the inverse of the AudioListener's transform matrix.",189],["You can determine the direction vector from the AudioListener to the Audio Source as shown below, where L is the listenermatrix and S is the sourcematrix:",189],["```lang-csharp",189],["float dir_x = L[0] * S[12] + L[4] * S[13] + L[ 8] * S[14] + L[12];",189],["float dir_y = L[1] * S[12] + L[5] * S[13] + L[ 9] * S[14] + L[13];",189],["float dir_z = L[2] * S[12] + L[6] * S[13] + L[10] * S[14] + L[14];",189],["The position in (L[12], L[13], L[14]) is actually the negative value of what you see in Unity’s Inspector window for the camera matrix. If the camera had also been rotated, you would also have to undo the effect of the rotation first. To invert a Transformation-Rotation matrix, transpose the top-left 3x3 rotation matrix of L, and calculate the positions as shown below:",189],["```lang-csharp",189],["float listenerpos_x = -(L[0] * L[12] + L[ 1] * L[13] + L[ 2] * L[14]);",189],["float listenerpos_y = -(L[4] * L[12] + L[ 5] * L[13] + L[ 6] * L[14]);",189],["float listenerpos_z = -(L[8] * L[12] + L[ 9] * L[13] + L[10] * L[14]);",189],["For an example in the code for the Audio Spatializer plugin, see line 215 in the Plugin_Spatializer.cpp file.",189],["Attenuation curves and audibility ",189],["Unless you specify the UnityAudioEffectDefinitionFlags_AppliesDistanceAttenuation flag, as specified in the Initializing the Unity Audio Spatializer section, the Unity audio system still controls the distance-attenuation. Unity applies distance-attenuation to the sound before it enters the spatialization stage, and allows the audio system to know the approximate audibility of the source. The audio system uses approximate audibility for dynamic virtualization of sounds based on importance to match the user-defined Max Real Voices limit.",189],["Unity does not retrieve audibility information from actual signal level measurements, but uses the combination of the values that it reads from the distance-controlled attenuation curve, the Volume property, and the mixer's applied attenuations.",189],["You can directly override the attenuation curve, or you can use the value calculated by the Audio Source’s curve as a base for modification. To override or modify the value, use the callback in the UnityAudioSpatializerData structure as shown below:",189],["```lang-csharp",189],["typedef UNITY_AUDIODSP_RESULT (UNITY_AUDIODSP_CALLBACK* UnityAudioEffect_DistanceAttenuationCallback)(",189],["UnityAudioEffectState* state,",189],["float distanceIn,",189],["float attenuationIn,",189],["float* attenuationOut);",189],["You can also use a simple custom logarithmic curve, as shown below:",189],["```lang-csharp",189],["UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK SimpleLogAttenuation(",189],["UnityAudioEffectState* state,",189],["float distanceIn,",189],["float attenuationIn,",189],["float* attenuationOut)",189],["const float rollOffScale = 1.0f; // Similar to the one in the Audio Project Settings",189],["attenuationOut = 1.0f / max(1.0f, rollOffScale * distanceIn);",189],["return UNITY_AUDIODSP_OK;",189],["Using C# scripts from the Unity API",189],["There are two methods on the Audio Source that allow setting and getting parameters from the spatializer effect: SetSpatializerFloat and GetSpatializerFloat. These methods work similarly to the SetFloatParameter and GetFloatParameter methods in the generic native audio plugin interface. However, SetSpatializerFloat and GetSpatializerFloat take an index to the parameter they must set or read, while SetFloatParameter and GetFloatParameter refer to the parameters by name.",189],["The boolean property AudioSource.spatializer is linked to the Spatialize option in Unity's Inspector window for an Audio Source. The property controls how Unity instantiates and deallocates the spatializer effect, based on the selected plugin in your Audio Project Settings.",189],["If instantiation of your spatializer effect is very resource-intensive, in terms of memory or other resources in your project, it might be effective to allocate your spatialization effects from a preset \"pool,\" so that Unity does not need to create a new instance of the spatializer every time you need to use it. If you keep your Unity plugin interface bindings very lightweight and dynamically allocate your audio effects, you can avoid frame drops or other performance issues in your project.",189],["Known limitations of the example plugin",189],["Due to the fast convolution algorithm, quick movements cause some zipper artifacts, which you can remove through the use of overlap-save convolution or cross-fading buffers.",189],["The code also does not support tilting the listener's head, whether the listener is directly attached to the player character, or a camera located elsewhere.",189],["Humanoid Avatars",190],["Unity's Animation System has special features for working with humanoid characters. Because humanoid characters are so common in games, Unity provides a specialized workflow, and an extended tool set for humanoid animations.",190],["The Avatar system is how Unity identifies that a particular animated model is humanoid in layout, and which parts of the model correspond to the legs, arms, head and body.",190],["Because of the similarity in bone structure between different humanoid characters, it is possible to map animations from one humanoid character to another, allowing retargeting and inverse kinematics (IK).",190],["The Background Tasks window",191],["The Background Tasks window displays the progress of any running asynchronous tasks. For example, you can see the progress for shader compilation, lightmap baking, and occlusion culling.",191],["To open the Background Tasks window, do one of the following:",191],["\nFrom the menu, select Window > General > Progress.\n",191],["\nFrom the Unity Editor status bar, click the global progress bar or the activity indicator (spinner).\n",191],["Toolbar: Provides options to filter tasks and clear inactive tasks from the list.",191],["Task list: Displays progress information about each task for the following:",191],["\nActive tasks, including tasks that have stopped responding.\n",191],["\nSome finished tasks. By default, Unity removes these from the list, but some are designed to stay in the list until you clear them manually.\n",191],["\nFailed and cancelled tasks.\n",191],["",191],["Task information",191],["Each entry in the Background Tasks window displays the following information about the task.",191],["Screenshot label Section Displays ",191],["",191],["1 Task name/description A name or short description for the task. ",191],["2 Progress bar Indicates how close the task is to completion. If the task is indeterminate, because its progress is not measurable, the bar shows a small filled region that moves from side to side until the task is finished. ",191],["3 Percent complete Shows how close the task is to completion, as a percentage. For indeterminate tasks, whose progress is not measurable, this area is empty. ",191],["4 Cancel Click to cancel an active task. If the task cannot be cancelled, this icon does not appear. ",191],["5 Status Optionally displays a short description of the current activity for an active task. When the task finishes, this area displays its final status (for example, finished, failed, or cancelled). ",191],["6 Time elapsed/remaining/total When an active task takes longer than a few seconds, displays either the current time elapsed or the estimated time remaining. When the task finishes, this area displays the total time elapsed. ",191],["Subtasks",191],["Some tasks spawn subtasks. The progress window displays an overall progress entry in the parent task (1), and a sub progress entry for each child task (2).",191],["Monitor subtasks to determine which part of a complex task takes the most time. This is useful for operations like lightmap baking, which can have hundreds of subtasks.",191],["",191],["View task status",191],["Background tasks can have the following statuses:",191],["Status Description Icon ",191],["",191],["Active The task is running and reports progress as percent complete, or estimated time remaining. None ",191],["Indeterminate The task is running and reports progress, but cannot determine how close it is to being complete. None ",191],["Finished The task finished successfully (check mark) ",191],["Unresponsive The task has not reported any progress for five seconds. None ",191],["Cancelled The task is no longer active because you cancelled it manually.Some tasks cannot be cancelled from the Background Tasks window. (warning symbol) ",191],["Failed The task is no longer active because it failed (error symbol) ",191],["",191],["Filter tasks by status",191],["Use the filter options in the Background Tasks window toolbar to hide and show different types of tasks.",191],["Filter option Shows or hides ",191],["\n\n- \n\n",191],["(check mark) Finished tasks ",191],["(warning symbol) Cancelled and unresponsive tasks ",191],["(error symbol) Failed tasks ",191],["Cancel active tasks",191],["You can cancel some running tasks directly from the Background Tasks window. To cancel a running task click the cancel (x) icon.",191],["",191],["Clear inactive tasks",191],["Click the Clear inactive button in the toolbar to remove all inactive tasks from the list.",191],["Unity automatically clears most finished tasks from the list. However, some tasks are designed to stay in the list until you clear them manually.",191],["Failed and cancelled tasks also stay in the list until you clear them.",191],["To clear unresponsive tasks, you must cancel them first.",191],["View global progress",191],["The Unity Editor status bar displays a global progress bar that shows the aggregate overall progress of all active tasks. It does not include finished, failed, or cancelled tasks.",191],["Bake data in multiple scenes",192],["You can reduce the time taken to bake data and the size of the generated data if you bake your data into multiple scenes.",192],["Bake lightmaps with multiple scenes",192],["To predetermine the brightness of surfaces in your scenes, you can bake lightmaps. There are two ways to bake lightmaps for multiple scenes at once:",192],["To automate your lightmap builds, use the Lightmapping.BakeMultipleScenes function.",192],["To manually bake the lightmaps in multiple scenes, use the Unity Editor and perform the following steps:",192],["Open the scenes that you want to bake.",192],["Open the Lighting window and disable the Auto Generate option.",192],["Select Generate Lighting.",192],["Shadows and GI light bounces work across all scenes, but the lightmaps and Realtime GI data loads and unloads separately for each scene. This means scenes don't share and you can unload scenes with lightmaps safely. Scenes do share Light Probe data so all Light Probes for scenes baked together load at the same time.",192],["Bake occlusion culling data with multiple scenes",192],["You can bake occlusion culling data for multiple scenes at once to determine which GameObjects render:",192],["Open the scenes that you want to bake.",192],["Go to the Occlusion Culling window (Window > Rendering > Occlusion Culling).",192],["Select the Bake button.",192],["Save the baked scenes to make the scene-to-occlusion-data reference persistent.",192],["This saves the occlusion culling data into a single asset called OcclusionCullingData.asset in a folder matching the name of the current active scene.",192],["If you load a scene additively and it has the same occlusion data reference as the active scene, then the static renderers and portals that cull information for that scene initialize from the occlusion data. This means the occlusion system performs as if static renderers and portals are baked into a single scene.",192],["Additional resources",192],["Creating a renderer with BatchRendererGroup",193],["This section of the documentation explains how to use BatchRendererGroup (BRG) to create a renderer.",193],["The following table lists and describes the topics in this section of the documentation.",193],["Topic Description ",193],["------------------------------------------------------------ ------------------------------------------------------------ ",193],["Initializing a BachRendererGroup object Explains how to initialize a BatchRendererGroup object with a minimal OnPerformCulling callback. ",193],["Registering meshes and materials Explains how to register meshes and materials so you can use them in a renderer. ",193],["Creating batches Explains how to create batches of instance data that describe what to render. ",193],["Creating draw commands Explains how to create draw commands and complete your simple renderer. ",193],["Creating batches",194],["BatchRendererGroup (BRG) doesn't automatically provide any instance data. Instance data includes many properties which are normally built in for GameObjects, such as transform matrices, light probe coefficients, and lightmap texture coordinates. This means features like ambient lighting only work if you provide instance data yourself. To do this, you add and configure batches. A batch is a collection of instances, where each instance corresponds to a single thing to render. What the instance actually represents depends on what you want to render. For example, in a prop object renderer, an instance could represent a single prop, and in a terrain renderer, it could represent a single terrain patch.",194],["Each batch has a set of metadata values and a single GraphicsBuffer, which every instance in the batch shares. To load data for an instance, the typical process is to use the metadata values to load from the correct location in the GraphicsBuffer. The UNITY_ACCESS_DOTS_INSTANCED_PROP family of shader macros work with this scheme (see Accessing DOTS Instanced properties). However, you don't need to use this per-instance data loading scheme, and you are free to implement your own scheme if you want.",194],["To create a batch, use BatchRendererGroup.AddBatch. The method receives an array of metadata values as well as a handle to a GraphicsBuffer. Unity passes the metadata values to the shader when it renders instances from the batch, and binds the GraphicsBuffer as unity_DOTSInstanceData. For metadata values that the shader uses but you don't pass in when you create a batch, Unity sets them to zero.",194],["You can't modify batch metadata values after you create them, so any metadata values you pass to the batch are final. If you need to change any metadata values, create a new batch and remove the old one. You can modify the batch's GraphicsBuffer at any time. To do this, use SetBatchBuffer. This can be useful to resize buffers and allocate a larger buffer if the existing one runs out of space.",194],["Note**: You don't need to specify the size of a batch when you create one. Instead, you have to make sure that the shader can correctly handle the instance indices you pass to it. What this means depends on the shader. For Unity-provided SRP shaders, this means that there must be valid instance data in the buffer at the index you pass.",194],["See the following code sample for an example of how to create a batch with metadata values and a GraphicsBuffer of instance data. This code sample builds on the one in Registering meshes and materials.",194],["```c#",194],["using System;",194],["using Unity.Collections;",194],["using Unity.Collections.LowLevel.Unsafe;",194],["using Unity.Jobs;",194],["using UnityEngine;",194],["using UnityEngine.Rendering;",194],["public class SimpleBRGExample : MonoBehaviour",194],["public Mesh mesh;",194],["public Material material;",194],["private BatchRendererGroup m_BRG;",194],["private GraphicsBuffer m_InstanceData;",194],["private BatchID m_BatchID;",194],["private BatchMeshID m_MeshID;",194],["private BatchMaterialID m_MaterialID;",194],["// Some helper constants to make calculations more convenient.",194],["private const int kSizeOfMatrix = sizeof(float) * 4 * 4;",194],["private const int kSizeOfPackedMatrix = sizeof(float) * 4 * 3;",194],["private const int kSizeOfFloat4 = sizeof(float) * 4;",194],["private const int kBytesPerInstance = (kSizeOfPackedMatrix * 2) + kSizeOfFloat4;",194],["private const int kExtraBytes = kSizeOfMatrix * 2;",194],["private const int kNumInstances = 3;",194],["// The PackedMatrix is a convenience type that converts matrices into",194],["// the format that Unity-provided SRP shaders expect.",194],["struct PackedMatrix",194],["public float c0x;",194],["public float c0y;",194],["public float c0z;",194],["public float c1x;",194],["public float c1y;",194],["public float c1z;",194],["public float c2x;",194],["public float c2y;",194],["public float c2z;",194],["public float c3x;",194],["public float c3y;",194],["public float c3z;",194],["public PackedMatrix(Matrix4x4 m)",194],["c0x = m.m00;",194],["c0y = m.m10;",194],["c0z = m.m20;",194],["c1x = m.m01;",194],["c1y = m.m11;",194],["c1z = m.m21;",194],["c2x = m.m02;",194],["c2y = m.m12;",194],["c2z = m.m22;",194],["c3x = m.m03;",194],["c3y = m.m13;",194],["c3z = m.m23;",194],["private void Start()",194],["m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);",194],["m_MeshID = m_BRG.RegisterMesh(mesh);",194],["m_MaterialID = m_BRG.RegisterMaterial(material);",194],["AllocateInstanceDateBuffer();",194],["PopulateInstanceDataBuffer();",194],["private void AllocateInstanceDateBuffer()",194],["m_InstanceData = new GraphicsBuffer(GraphicsBuffer.Target.Raw,",194],["BufferCountForInstances(kBytesPerInstance, kNumInstances, kExtraBytes),",194],["sizeof(int));",194],["private void PopulateInstanceDataBuffer()",194],["// Place a zero matrix at the start of the instance data buffer, so loads from address 0 return zero.",194],["var zero = new Matrix4x4[1] { Matrix4x4.zero };",194],["// Create transform matrices for three example instances.",194],["var matrices = new Matrix4x4[kNumInstances]",194],["Matrix4x4.Translate(new Vector3(-2, 0, 0)),",194],["Matrix4x4.Translate(new Vector3(0, 0, 0)),",194],["Matrix4x4.Translate(new Vector3(2, 0, 0)),",194],["};",194],["// Convert the transform matrices into the packed format that the shader expects.",194],["var objectToWorld = new PackedMatrix[kNumInstances]",194],["new PackedMatrix(matrices[0]),",194],["new PackedMatrix(matrices[1]),",194],["new PackedMatrix(matrices[2]),",194],["};",194],["// Also create packed inverse matrices.",194],["var worldToObject = new PackedMatrix[kNumInstances]",194],["new PackedMatrix(matrices[0].inverse),",194],["new PackedMatrix(matrices[1].inverse),",194],["new PackedMatrix(matrices[2].inverse),",194],["};",194],["// Make all instances have unique colors.",194],["var colors = new Vector4[kNumInstances]",194],["new Vector4(1, 0, 0, 1),",194],["new Vector4(0, 1, 0, 1),",194],["new Vector4(0, 0, 1, 1),",194],["};",194],["// In this simple example, the instance data is placed into the buffer like this:",194],["// Offset Description",194],["// 0 64 bytes of zeroes, so loads from address 0 return zeroes",194],["// 64 32 uninitialized bytes to make working with SetData easier, otherwise unnecessary",194],["// 96 unity_ObjectToWorld, three packed float3x4 matrices",194],["// 240 unity_WorldToObject, three packed float3x4 matrices",194],["// 384 _BaseColor, three float4s",194],["// Calculates start addresses for the different instanced properties. unity_ObjectToWorld starts",194],["// at address 96 instead of 64, because the computeBufferStartIndex parameter of SetData",194],["// is expressed as source array elements, so it is easier to work in multiples of sizeof(PackedMatrix).",194],["uint byteAddressObjectToWorld = kSizeOfPackedMatrix * 2;",194],["uint byteAddressWorldToObject = byteAddressObjectToWorld + kSizeOfPackedMatrix * kNumInstances;",194],["uint byteAddressColor = byteAddressWorldToObject + kSizeOfPackedMatrix * kNumInstances;",194],["// Upload the instance data to the GraphicsBuffer so the shader can load them.",194],["m_InstanceData.SetData(zero, 0, 0, 1);",194],["m_InstanceData.SetData(objectToWorld, 0, (int)(byteAddressObjectToWorld / kSizeOfPackedMatrix), objectToWorld.Length);",194],["m_InstanceData.SetData(worldToObject, 0, (int)(byteAddressWorldToObject / kSizeOfPackedMatrix), worldToObject.Length);",194],["m_InstanceData.SetData(colors, 0, (int)(byteAddressColor / kSizeOfFloat4), colors.Length);",194],["// Set up metadata values to point to the instance data. Set the most significant bit 0x80000000 in each",194],["// which instructs the shader that the data is an array with one value per instance, indexed by the instance index.",194],["// Any metadata values that the shader uses that are not set here will be 0. When a value of 0 is used with",194],["// UNITY_ACCESS_DOTS_INSTANCED_PROP (i.e. without a default), the shader interprets the",194],["// 0x00000000 metadata value and loads from the start of the buffer. The start of the buffer is",194],["// a zero matrix so this sort of load is guaranteed to return zero, which is a reasonable default value.",194],["var metadata = new NativeArray(3, Allocator.Temp);",194],["metadata[0] = new MetadataValue { NameID = Shader.PropertyToID(\"unity_ObjectToWorld\"), Value = 0x80000000 byteAddressObjectToWorld, };",194],["metadata[1] = new MetadataValue { NameID = Shader.PropertyToID(\"unity_WorldToObject\"), Value = 0x80000000 byteAddressWorldToObject, };",194],["metadata[2] = new MetadataValue { NameID = Shader.PropertyToID(\"_BaseColor\"), Value = 0x80000000 byteAddressColor, };",194],["// Finally, create a batch for the instances and make the batch use the GraphicsBuffer with the",194],["// instance data as well as the metadata values that specify where the properties are.",194],["m_BatchID = m_BRG.AddBatch(metadata, m_InstanceData.bufferHandle);",194],["// Raw buffers are allocated in ints. This is a utility method that calculates",194],["// the required number of ints for the data.",194],["int BufferCountForInstances(int bytesPerInstance, int numInstances, int extraBytes = 0)",194],["// Round byte counts to int multiples",194],["bytesPerInstance = (bytesPerInstance + sizeof(int) - 1) / sizeof(int) * sizeof(int);",194],["extraBytes = (extraBytes + sizeof(int) - 1) / sizeof(int) * sizeof(int);",194],["int totalBytes = bytesPerInstance * numInstances + extraBytes;",194],["return totalBytes / sizeof(int);",194],["private void OnDisable()",194],["m_BRG.Dispose();",194],["public unsafe JobHandle OnPerformCulling(",194],["BatchRendererGroup rendererGroup,",194],["BatchCullingContext cullingContext,",194],["BatchCullingOutput cullingOutput,",194],["IntPtr userContext)",194],["// This simple example doesn't use jobs, so it can just return an empty JobHandle.",194],["// Performance-sensitive applications should use Burst jobs to implement",194],["// culling and draw command output. In this case, this function would return a",194],["// handle here that completes when the Burst jobs finish.",194],["return new JobHandle();",194],["Now that you have registered all the required resources with a BatchRendererGroup object, you can create draw commands. For more information, see the next topic, Creating draw commands.",194],["Creating draw commands",195],["To create draw commands, use the BatchRendererGroup.OnPerformCulling callback. Specifically, you use the callback's BatchCullingOutput parameter. This parameter contains a NativeArray with a single element. This layout means you can directly modify the contents of the array element without Unity copying data unnecessarily. The element in the NativeArray is a BatchCullingOutputDrawCommands struct that contains the actual draw commands.",195],["Your OnPerformCulling implementation can generate as many or as few draw commands as you want. A simple implementation that only uses a single mesh and material could only output a single draw command, a more complex implementation could output thousands, each with different meshes and materials.",195],["Note**: To provide maximum flexibility, Unity doesn't preallocate the arrays in the BatchCullingOutputDrawCommands output struct and stores them as raw pointers so you can easily allocate them and use them from Burst jobs. You must allocate the arrays using UnsafeUtility.Malloc with the the Allocator.TempJob allocator. The callback shouldn't release the memory. Instead, Unity releases the memory after it finishes rendering using the draw commands.",195],["See the following code sample for an example of how to create draw commands. This code sample builds on the one in Creating batches.",195],["```c#",195],["using System;",195],["using Unity.Collections;",195],["using Unity.Collections.LowLevel.Unsafe;",195],["using Unity.Jobs;",195],["using UnityEngine;",195],["using UnityEngine.Rendering;",195],["public class SimpleBRGExample : MonoBehaviour",195],["public Mesh mesh;",195],["public Material material;",195],["private BatchRendererGroup m_BRG;",195],["private GraphicsBuffer m_InstanceData;",195],["private BatchID m_BatchID;",195],["private BatchMeshID m_MeshID;",195],["private BatchMaterialID m_MaterialID;",195],["// Some helper constants to make calculations more convenient.",195],["private const int kSizeOfMatrix = sizeof(float) * 4 * 4;",195],["private const int kSizeOfPackedMatrix = sizeof(float) * 4 * 3;",195],["private const int kSizeOfFloat4 = sizeof(float) * 4;",195],["private const int kBytesPerInstance = (kSizeOfPackedMatrix * 2) + kSizeOfFloat4;",195],["private const int kExtraBytes = kSizeOfMatrix * 2;",195],["private const int kNumInstances = 3;",195],["// The PackedMatrix is a convenience type that converts matrices into",195],["// the format that Unity-provided SRP shaders expect.",195],["struct PackedMatrix",195],["public float c0x;",195],["public float c0y;",195],["public float c0z;",195],["public float c1x;",195],["public float c1y;",195],["public float c1z;",195],["public float c2x;",195],["public float c2y;",195],["public float c2z;",195],["public float c3x;",195],["public float c3y;",195],["public float c3z;",195],["public PackedMatrix(Matrix4x4 m)",195],["c0x = m.m00;",195],["c0y = m.m10;",195],["c0z = m.m20;",195],["c1x = m.m01;",195],["c1y = m.m11;",195],["c1z = m.m21;",195],["c2x = m.m02;",195],["c2y = m.m12;",195],["c2z = m.m22;",195],["c3x = m.m03;",195],["c3y = m.m13;",195],["c3z = m.m23;",195],["private void Start()",195],["m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);",195],["m_MeshID = m_BRG.RegisterMesh(mesh);",195],["m_MaterialID = m_BRG.RegisterMaterial(material);",195],["AllocateInstanceDateBuffer();",195],["PopulateInstanceDataBuffer();",195],["private void AllocateInstanceDateBuffer()",195],["m_InstanceData = new GraphicsBuffer(GraphicsBuffer.Target.Raw,",195],["BufferCountForInstances(kBytesPerInstance, kNumInstances, kExtraBytes),",195],["sizeof(int));",195],["private void PopulateInstanceDataBuffer()",195],["// Place a zero matrix at the start of the instance data buffer, so loads from address 0 return zero.",195],["var zero = new Matrix4x4[1] { Matrix4x4.zero };",195],["// Create transform matrices for three example instances.",195],["var matrices = new Matrix4x4[kNumInstances]",195],["Matrix4x4.Translate(new Vector3(-2, 0, 0)),",195],["Matrix4x4.Translate(new Vector3(0, 0, 0)),",195],["Matrix4x4.Translate(new Vector3(2, 0, 0)),",195],["};",195],["// Convert the transform matrices into the packed format that shaders expects.",195],["var objectToWorld = new PackedMatrix[kNumInstances]",195],["new PackedMatrix(matrices[0]),",195],["new PackedMatrix(matrices[1]),",195],["new PackedMatrix(matrices[2]),",195],["};",195],["// Also create packed inverse matrices.",195],["var worldToObject = new PackedMatrix[kNumInstances]",195],["new PackedMatrix(matrices[0].inverse),",195],["new PackedMatrix(matrices[1].inverse),",195],["new PackedMatrix(matrices[2].inverse),",195],["};",195],["// Make all instances have unique colors.",195],["var colors = new Vector4[kNumInstances]",195],["new Vector4(1, 0, 0, 1),",195],["new Vector4(0, 1, 0, 1),",195],["new Vector4(0, 0, 1, 1),",195],["};",195],["// In this simple example, the instance data is placed into the buffer like this:",195],["// Offset Description",195],["// 0 64 bytes of zeroes, so loads from address 0 return zeroes",195],["// 64 32 uninitialized bytes to make working with SetData easier, otherwise unnecessary",195],["// 96 unity_ObjectToWorld, three packed float3x4 matrices",195],["// 240 unity_WorldToObject, three packed float3x4 matrices",195],["// 384 _BaseColor, three float4s",195],["// Calculates start addresses for the different instanced properties. unity_ObjectToWorld starts at",195],["// address 96 instead of 64 which means 32 bits are left uninitialized. This is because the",195],["// computeBufferStartIndex parameter requires the start offset to be divisible by the size of the source",195],["// array element type. In this case, it's the size of PackedMatrix, which is 48.",195],["uint byteAddressObjectToWorld = kSizeOfPackedMatrix * 2;",195],["uint byteAddressWorldToObject = byteAddressObjectToWorld + kSizeOfPackedMatrix * kNumInstances;",195],["uint byteAddressColor = byteAddressWorldToObject + kSizeOfPackedMatrix * kNumInstances;",195],["// Upload the instance data to the GraphicsBuffer so the shader can load them.",195],["m_InstanceData.SetData(zero, 0, 0, 1);",195],["m_InstanceData.SetData(objectToWorld, 0, (int)(byteAddressObjectToWorld / kSizeOfPackedMatrix), objectToWorld.Length);",195],["m_InstanceData.SetData(worldToObject, 0, (int)(byteAddressWorldToObject / kSizeOfPackedMatrix), worldToObject.Length);",195],["m_InstanceData.SetData(colors, 0, (int)(byteAddressColor / kSizeOfFloat4), colors.Length);",195],["// Set up metadata values to point to the instance data. Set the most significant bit 0x80000000 in each",195],["// which instructs the shader that the data is an array with one value per instance, indexed by the instance index.",195],["// Any metadata values that the shader uses and not set here will be zero. When such a value is used with",195],["// UNITY_ACCESS_DOTS_INSTANCED_PROP (i.e. without a default), the shader interprets the",195],["// 0x00000000 metadata value and loads from the start of the buffer. The start of the buffer which is",195],["// is a zero matrix so this sort of load is guaranteed to return zero, which is a reasonable default value.",195],["var metadata = new NativeArray(3, Allocator.Temp);",195],["metadata[0] = new MetadataValue { NameID = Shader.PropertyToID(\"unity_ObjectToWorld\"), Value = 0x80000000 byteAddressObjectToWorld, };",195],["metadata[1] = new MetadataValue { NameID = Shader.PropertyToID(\"unity_WorldToObject\"), Value = 0x80000000 byteAddressWorldToObject, };",195],["metadata[2] = new MetadataValue { NameID = Shader.PropertyToID(\"_BaseColor\"), Value = 0x80000000 byteAddressColor, };",195],["// Finally, create a batch for the instances, and make the batch use the GraphicsBuffer with the",195],["// instance data, as well as the metadata values that specify where the properties are.",195],["m_BatchID = m_BRG.AddBatch(metadata, m_InstanceData.bufferHandle);",195],["// Raw buffers are allocated in ints. This is a utility method that calculates",195],["// the required number of ints for the data.",195],["int BufferCountForInstances(int bytesPerInstance, int numInstances, int extraBytes = 0)",195],["// Round byte counts to int multiples",195],["bytesPerInstance = (bytesPerInstance + sizeof(int) - 1) / sizeof(int) * sizeof(int);",195],["extraBytes = (extraBytes + sizeof(int) - 1) / sizeof(int) * sizeof(int);",195],["int totalBytes = bytesPerInstance * numInstances + extraBytes;",195],["return totalBytes / sizeof(int);",195],["private void OnDisable()",195],["m_BRG.Dispose();",195],["public unsafe JobHandle OnPerformCulling(",195],["BatchRendererGroup rendererGroup,",195],["BatchCullingContext cullingContext,",195],["BatchCullingOutput cullingOutput,",195],["IntPtr userContext)",195],["// UnsafeUtility.Malloc() requires an alignment, so use the largest integer type's alignment",195],["// which is a reasonable default.",195],["int alignment = UnsafeUtility.AlignOf();",195],["// Acquire a pointer to the BatchCullingOutputDrawCommands struct so you can easily",195],["// modify it directly.",195],["var drawCommands = (BatchCullingOutputDrawCommands*)cullingOutput.drawCommands.GetUnsafePtr();",195],["// Allocate memory for the output arrays. In a more complicated implementation, you would calculate",195],["// the amount of memory to allocate dynamically based on what is visible.",195],["// This example assumes that all of the instances are visible and thus allocates",195],["// memory for each of them. The necessary allocations are as follows:",195],["// - a single draw command (which draws kNumInstances instances)",195],["// - a single draw range (which covers our single draw command)",195],["// - kNumInstances visible instance indices.",195],["// You must always allocate the arrays using Allocator.TempJob.",195],["drawCommands->drawCommands = (BatchDrawCommand*)UnsafeUtility.Malloc(UnsafeUtility.SizeOf(), alignment, Allocator.TempJob);",195],["drawCommands->drawRanges = (BatchDrawRange*)UnsafeUtility.Malloc(UnsafeUtility.SizeOf(), alignment, Allocator.TempJob);",195],["drawCommands->visibleInstances = (int*)UnsafeUtility.Malloc(kNumInstances * sizeof(int), alignment, Allocator.TempJob);",195],["drawCommands->drawCommandPickingInstanceIDs = null;",195],["drawCommands->drawCommandCount = 1;",195],["drawCommands->drawRangeCount = 1;",195],["drawCommands->visibleInstanceCount = kNumInstances;",195],["// This example doens't use depth sorting, so it leaves instanceSortingPositions as null.",195],["drawCommands->instanceSortingPositions = null;",195],["drawCommands->instanceSortingPositionFloatCount = 0;",195],["// Configure the single draw command to draw kNumInstances instances",195],["// starting from offset 0 in the array, using the batch, material and mesh",195],["// IDs registered in the Start() method. It doesn't set any special flags.",195],["drawCommands->drawCommands[0].visibleOffset = 0;",195],["drawCommands->drawCommands[0].visibleCount = kNumInstances;",195],["drawCommands->drawCommands[0].batchID = m_BatchID;",195],["drawCommands->drawCommands[0].materialID = m_MaterialID;",195],["drawCommands->drawCommands[0].meshID = m_MeshID;",195],["drawCommands->drawCommands[0].submeshIndex = 0;",195],["drawCommands->drawCommands[0].splitVisibilityMask = 0xff;",195],["drawCommands->drawCommands[0].flags = 0;",195],["drawCommands->drawCommands[0].sortingPosition = 0;",195],["// Configure the single draw range to cover the single draw command which",195],["// is at offset 0.",195],["drawCommands->drawRanges[0].drawCommandsBegin = 0;",195],["drawCommands->drawRanges[0].drawCommandsCount = 1;",195],["// This example doesn't care about shadows or motion vectors, so it leaves everything",195],["// at the default zero values, except the renderingLayerMask which it sets to all ones",195],["// so Unity renders the instances regardless of mask settings.",195],["drawCommands->drawRanges[0].filterSettings = new BatchFilterSettings { renderingLayerMask = 0xffffffff, };",195],["// Finally, write the actual visible instance indices to the array. In a more complicated",195],["// implementation, this output would depend on what is visible, but this example",195],["// assumes that everything is visible.",195],["for (int i = 0; i < kNumInstances; ++i)",195],["drawCommands->visibleInstances[i] = i;",195],["// This simple example doesn't use jobs, so it returns an empty JobHandle.",195],["// Performance-sensitive applications are encouraged to use Burst jobs to implement",195],["// culling and draw command output. In this case, this function returns a",195],["// handle here that completes when the Burst jobs finish.",195],["return new JobHandle();",195],["This is the final, complete, code sample for BRG. If you attach this Component to a GameObject, set a mesh and DOTS Instancing-compatible material in the Inspector, and enter Play Mode, Unity renders three instances of the mesh using the material.",195],["Getting started with BatchRendererGroup",196],["This page explains what render pipelines and platforms support BatchRendererGroup (BRG) and explains how to set up your project to support BRG.",196],["Requirements and compatibility",196],["Render pipeline compatibility",196],["The following table shows which render pipelines support BRG.",196],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",196],["------------------ ---------------------------- ----------------------------------- ------------------------------------------ -------------- ",196],["BatchRendererGroup No Yes (1) Yes (1) Yes (1) ",196],["Notes**:",196],["If the project uses the SRP Batcher.",196],["Platform compatibility",196],["Unity supports BRG on:",196],["Windows using DirectX 11",196],["Windows using DirectX 12",196],["Windows using Vulkan",196],["Universal Windows Platform",196],["Linux using Vulkan",196],["macOS using Metal",196],["iOS",196],["Android using Vulkan",196],["PlayStation 4",196],["PlayStation 5",196],["Xbox One",196],["Xbox Series X and Xbox Series S",196],["Nintendo Switch",196],["Google Stadia",196],["Setting up your project for BatchRendererGroup",196],["Before you use BRG, your project must support it. BRG requires your project to:",196],["Use the SRP Batcher. To enable the SRP Batcher, see Using the SRP Batcher.",196],["Keep BRG shader variants. To do this, select Edit > Project Settings > Graphics, and set BatchRendererGroup variants to Keep all.",196],["If your project uses URP, it's best practice to disable the Strip Unused Variants Global Setting. This helps to avoid problems with Unity stripping necessary DOTS Instancing variants. For more information, see DOTS Instancing shaders. To find this setting, select Edit > Project Settings > URP Global Settings.",196],["Allow unsafe code. To do this, enable the Allow ‘unsafe’ Code Player Setting.",196],["Note:** The BatchRendererGroup uses DOTS Instancing shaders, but it doesn't require any DOTS packages. The name reflects the new data-oriented way to load instance data, and also helps with backward compatibility with existing Hybrid Renderer compatible shaders.",196],["For information on how to use BRG to create a basic renderer, see Creating a renderer with BatchRendererGroup.",196],["How BatchRendererGroup works",197],["To render to the screen, BatchRendererGroup (BRG) generates draw commands which are a BRG-specific concept that contains everything Unity needs to efficiently create optimized, instanced draw calls.",197],["To determine when to render the instances in a draw command, BRG uses filter settings. Filter settings control when to render instances themselves, but also when to render certain facets of each instance such as its shadows and motion vectors",197],["Because the same filter settings can often apply to a large number of draw commands, BRG uses draw ranges to apply filter settings to a range of draw commands. A draw range combines a contiguous number of draw commands with an instance of filter settings that apply to them. Draw ranges are especially useful if the filter settings determine that Unity shouldn't render the draw commands, because this makes it possible for Unity to efficiently skip rendering for every draw command in the range.",197],["There is no restriction on which instances are in which draw calls. It's possible to render the same instance, an object with the same instance index and batchID, many times with different meshes and materials. One example where this can be useful is drawing different sub-meshes with different materials, but using the same instance indices to share properties like transform matrices between the draws.",197],["For information on how to create a renderer with BRG, see Creating a renderer with BatchRendererGroup.",197],["Technical limitations",197],["In most cases, Unity renders a draw command as a single, platform-level, instanced draw call for each compatible DrawRenderers call in the Scriptable Render Pipeline. However, that isn't possible when the graphics API has a lower size limit for draw calls than the draw command's visibleCount. In these situations, Unity splits the draw command into multiple instanced draw calls.",197],["Initializing a BatchRendererGroup object",198],["The first step to render using BRG is to create an instance of BatchRendererGroup and initialize it with an implementation of OnPerformCulling.",198],["The OnPerformCulling callback is the main entry point of BRG and Unity calls it whenever it culls visible objects. For information on the parameters it receives, see OnPerformCulling. Typically, there are two tasks that the OnPerformCulling callback needs to perform:",198],["Visibility culling to determine which of its instances are visible based on the BatchCullingContext parameter.",198],["Output the actual draw commands to render those instances. To do this you write to the BatchCullingOutput parameter.",198],["In simple implementations, you can do these tasks directly in the OnPerformCulling callback, but for high-performance implementations, it's best practice to do most of this work in Burst jobs. The OnPerformCulling callback should return a JobHandle that completes after the jobs write the output into the BatchCullingOutput parameter. If your implementation doesn't use jobs, you can return an empty JobHandle.",198],["See the following code sample for an example of how to create a BatchRendererGroup object and initialize it with the most minimum OnPerformCulling callback that compiles.",198],["```c#",198],["using System;",198],["using Unity.Collections;",198],["using Unity.Collections.LowLevel.Unsafe;",198],["using Unity.Jobs;",198],["using UnityEngine;",198],["using UnityEngine.Rendering;",198],["public class SimpleBRGExample : MonoBehaviour",198],["private BatchRendererGroup m_BRG;",198],["private void Start()",198],["m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);",198],["private void OnDisable()",198],["m_BRG.Dispose();",198],["public unsafe JobHandle OnPerformCulling(",198],["BatchRendererGroup rendererGroup,",198],["BatchCullingContext cullingContext,",198],["BatchCullingOutput cullingOutput,",198],["IntPtr userContext)",198],["// This example doesn't use jobs, so it can return an empty JobHandle.",198],["// Performance-sensitive applications should use Burst jobs to implement",198],["// culling and draw command output. In this case, this function would return a",198],["// handle here that completes when the Burst jobs finish.",198],["return new JobHandle();",198],["Before you use OnPerformCulling to create draw commands, you need to provide your BatchRendererGroup object any meshes you want it to draw, and any materials you want it to use. For more information, see the next topic, Registering meshes and materials.",198],["Registering meshes and materials",199],["Mesh and Material are managed C# objects in Unity which means you can't use them from Burst C# code. This means that to use them in BRG draw commands, you must pre-register with the BRG.",199],["To register Mesh and Material objects, use BatchRendererGroup.RegisterMesh and BatchRendererGroup.RegisterMaterial respectively. These functions return a BatchMeshID and a BatchMaterialID, respectively, which are plain data structs that contain a Burst-compatible handle. They are strongly typed to help prevent errors from accidentally using the wrong handle type.",199],["You can register Mesh and Material objects at any time, including run time. The only requirements are:",199],["You need to register Mesh and Material objects before the BatchRendererGroup can use them to render.",199],["The Material must support DOTS Instancing.",199],["You can also unregister Mesh and Material objects if you no longer need them. This is necessary if you want to unload any Mesh or Material objects. BatchRendererGroup.Dispose automatically unregisters all registered assets.",199],["Note**: You can't serialize a BatchMeshID or a BatchMaterialID. They are only valid with the BatchRendererGroup you register them with and become invalid if you unregister them, or if the BatchRendererGroup no longer exists. BatchMeshID and BatchMaterialID also become invalid if something forces Unity to unload the Mesh or Material objects, which happens when Unity unloads the Scene that the Mesh or Material objects are part of.",199],["It is possible to register the same Mesh or Material object multiple times. This is useful in situations where you want to register Meshes or Materials without having to know which Meshes and Materials have been registered already. In this situation, the BatchRenderer keeps an internal count of the number of registrations in the following way:",199],["Each time you register a Mesh or Material object, the BatchRendererGroup increases its reference count by 1.",199],["Each time you unregister a Mesh or Material object, the BatchRendererGroup decreases its reference count by 1. If this causes the reference count to reach 0, the BatchRendererGroup unregisters the Mesh or Material. If you want to use the Mesh or Material in future draw commands, you must register it again.",199],["A RegisterMesh or RegisterMaterial call with an already registered Mesh or Material returns the same BatchMeshID or BatchMaterialID as the previous call. However, if the BatchRendererGroup completely unregistered the Mesh or Material, registering it again could return a different ID.",199],["Note**: BRG checks for modifications to Mesh or Material objects after the first OnPerformCulling callback method in a frame. This means that Unity takes any modification that occurs before that point into account. This includes changes you make in the first callback itself, but not changes that occur in any jobs scheduled by the callback. Modifying Mesh or Material objects after that point causes undefined behavior.",199],["See the following code sample for an example of how to register meshes and materials with a BatchRendererGroup object. This code sample builds on the one in Initializing a BatchRendererGroup object.",199],["```c#",199],["using System;",199],["using Unity.Collections;",199],["using Unity.Collections.LowLevel.Unsafe;",199],["using Unity.Jobs;",199],["using UnityEngine;",199],["using UnityEngine.Rendering;",199],["public class SimpleBRGExample : MonoBehaviour",199],["public Mesh mesh;",199],["public Material material;",199],["private BatchRendererGroup m_BRG;",199],["private BatchMeshID m_MeshID;",199],["private BatchMaterialID m_MaterialID;",199],["private void Start()",199],["m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);",199],["m_MeshID = m_BRG.RegisterMesh(mesh);",199],["m_MaterialID = m_BRG.RegisterMaterial(material);",199],["private void OnDisable()",199],["m_BRG.Dispose();",199],["public unsafe JobHandle OnPerformCulling(",199],["BatchRendererGroup rendererGroup,",199],["BatchCullingContext cullingContext,",199],["BatchCullingOutput cullingOutput,",199],["IntPtr userContext)",199],["// This simple example doesn't use jobs, so it can return an empty JobHandle.",199],["// Performance-sensitive applications should use Burst jobs to implement",199],["// culling and draw command output. In this case, this function would return a",199],["// handle that completes when the Burst jobs finish.",199],["return new JobHandle();",199],["Before you create any draw commands that use the registered Meshes and Materials, you need to provide data, like transform matrices, to use for the draw command instances. To provide data to use for each instance, BatchRendererGroup uses a concept called batches. For more information, see the next topic, Creating batches.",199],["BatchRendererGroup",200],["BatchRendererGroup (BRG) is an API for high-performance custom rendering in projects that use a Scriptable Render Pipeline (SRP) and the SRP Batcher.",200],["BRG is the perfect tool to:",200],["Render DOTS Entities. For example, Unity's Hybrid Renderer uses BRG to do this.",200],["Render a large number of environment objects where using individual GameObjects would be too resource-intensive. For example, procedurally-placed plants or rocks.",200],["Render custom terrain patches. You can use different meshes or materials to display different levels of detail.",200],["The following table lists and describes the topics in this section of the documentation.",200],["Topic Description ",200],["------------------------------------------------------------ ------------------------------------------------------------ ",200],["How BatchRendererGroup works Explains how BRG renders to the screen and introduces BRG-specific concepts. ",200],["Getting started with BatchRendererGroup Describes the requirements and compatibility of BRG and explains how to set up your project to support BRG. ",200],["Creating a renderer with BatchRendererGroup A section that explains how to use BRG to create a simple custom renderer. ",200],["DOTS Instancing shaders Describes the new data-oriented way shaders can load instance data. ",200],["Advanced best practice guides",201],["Use this page to discover and learn production-tested best practices from Unity experts. The Technical Content Marketing team at Unity created the guides listed on this page together with industry experts, and engineers and technical artists from Unity R&D and the Accelerate Games Solutions teams.",201],["",201],["",201],["Art and Design",201],["",201],["",201],["Authored by the art director of the Unity 2D demo Dragon Crashers and with contributions from Unity 2D experts, this guide shows how to set up your 2D project, switch between Unity and Autodesk, work with sprites, sort layers, and more.",201],["",201],["",201],["This guide is designed to help experienced game designers learn how to prototype their ideas in Unity for more efficient creation and team collaboration. Learn about visual scripting, creating input, level design tools, microinteractions, and more.",201],["",201],["",201],["Some of Unity’s most experienced technical artists made key contributions to this guide. It covers working with assets, rendering pipelines, lighting, worldbuilding, digital humans, and more.",201],["",201],["",201],["Some of Unity’s most experienced technical artists made key contributions to this guide. It covers, working with assets, rendering pipelines, lighting, worldbuilding, digital humans, and more.",201],["",201],["",201],["This e-book provides step-by-step guidance on how to build interfaces using Unity’s UI systems, including UI design and development concepts, asset preparation workflows, styling, and fonts.",201],["",201],["",201],["",201],["DevOps",201],["",201],["",201],["Learn the fundamentals of version control and project organization in Unity. Key topics covered include setting up a Unity project with different version control solutions, organizing a Unity project, proper folder structure, and naming standards.",201],["",201],["",201],["",201],["Graphics & Rendering",201],["",201],["",201],["[![Recipes for popular visual effects using the Universal Render Pipeline",201],["](../uploads/Main/best-practice-urp-recipes.png)](https://resources.unity.com/games/the-universal-render-pipeline-cookbook-unity-2022-lts-edition?ungated=true)",201],["[Recipes for popular visual effects using the Universal Render Pipeline",201],["](https://resources.unity.com/games/the-universal-render-pipeline-cookbook-unity-2022-lts-edition?ungated=true)",201],["In this guide, you can choose from 12 recipes for creating popular effects using URP. Learn how to create effects with Renderer Features, build a Toon and outline shader with Shader Graph, use GPU instancing, produce reflections and refractions, and more.",201],["",201],["",201],["[![Universal Render Pipeline for advanced Unity creators",201],["](../uploads/Main/best-practice-urp.png)](https://resources.unity.com/games/introduction-universal-render-pipeline-for-advanced-unity-creators?ungated=true)",201],["[Universal Render Pipeline for advanced Unity creators",201],["](https://resources.unity.com/games/introduction-universal-render-pipeline-for-advanced-unity-creators?ungated=true)",201],["Use this guide to learn how to set up a new project with URP or convert an existing Built-in Render Pipeline-based project to URP. Learn about URP quality settings and shaders, setting up lighting, shadows, special effects, and more.",201],["",201],["",201],["This guide provides in-depth reference for creating high-end lighting for PC and console games and covers topics such as HDRP settings, cameras, and Volume frameworks, creating skyscapes, reflections, real-time lighting, and more.",201],["",201],["",201],["This guide provides in-depth reference for creating high-end lighting for PC and console games and covers topics such as HDRP settings, cameras, and Volume frameworks, creating skyscapes, reflections, real-time lighting, and more.",201],["",201],["",201],["This guide provides a complete overview of how to use visual effects authoring tools in Unity to create any kind of effect: water and liquid, smoke, fire, explosions, weather, impact, magic, and electricity.",201],["",201],["",201],["",201],["Performance optimization",201],["",201],["",201],["This guide provides advanced knowledge and advice on how to profile an application in Unity, manage its memory, and optimize its power consumption from start to finish. Learn best practices for a profiling workflow and using Unity’s profiling tools.",201],["",201],["",201],["Get over 80 tips from Unity’s support engineers on how to optimize PC and console games for smooth performance and gameplay. It covers topics like programming and code architecture, GPU optimization, memory, assets, and more.",201],["",201],["",201],["This guide provides over 75 tips on how you can optimize your mobile game to run smoothly on as many devices as possible. Learn about programming and code architecture, GPU optimization, memory, assets, and more.",201],["",201],["",201],["Use this guide to get familiar with the latest Unity features and workflows and covers Editor navigation, setting up your development environment, as well as Unity’s profiling tools, physics, and Input Systems.",201],["",201],["",201],["This guide collects over 70 time-saving tips to improve your day-to-day aggregate workflow with Unity 2020 LTS.",201],["",201],["",201],["",201],["Scripting",201],["",201],["",201],["This guide provides tips from professional developers on leveraging ScriptableObjects in your Unity projects. Download the accompanying demo project from GitHub, inspired by classic arcade game mechanics, to follow along.",201],["",201],["",201],["Learn industry best practices on how to organize your Unity C# code and what to consider for your own code style guide, including naming conventions, formatting, classes, methods, and comments.",201],["",201],["",201],["This guide covers SOLID principles and provides examples of how to implement well-known design patterns for game development, including Factory, Singleton, Command, State, and Observer Pattern, Object Pooling, and Model View Presenter (MVP).",201],["",201],["",201],["",201],["",201],["Understanding optimization in Unity",202],["This Best Practice Guide is a companion piece to the Unite Unity Europe 2016 talk Optimizing Mobile Applications. It covers much of the same material, but with supplementary material added for the interested reader. You can watch the talk itself on YouTube: Unite 2016: Optimizing Mobile Applications.",202],["While the Unite talk implied that the covered topics might only be relevant to mobile performance, much of the talk was applicable to a general audience. Effort has been taken in this write-up to discuss information related to performance in a broad and platform-independent manner.",202],["Contents",202],["Asset auditing",202],["Strings and text",202],["The resources folder",202],["General optimizations",202],["Special optimizations",202],["Asset auditing",203],["Many of the problems found in real projects occur because of honest mistakes – temporary \"test\" changes and misclicks by a tired developer can silently add poorly-performing Assets, or change the import settings of existing Assets.",203],["For any project of significant scale, it is best to have a first line of defense against human errors. It is relatively simple to write a small piece of code that ensures that no one can add a 4K uncompressed Texture to a project.",203],["And yet, this is a surprisingly common problem. A 4K uncompressed Texture occupies 60 megabytes of memory. On a low-end mobile device, such as an iPhone 4S, it is dangerous to consume more than about 180-200 megabytes of memory. If added by mistake, this Texture inadvertently occupies between a third and a quarter of the application’s memory budget, and causes difficult-to-diagnose out-of-memory errors.",203],["While it is now possible to track these issues down with the 5.3 Memory Profiler, it is arguably better to make sure such mistakes are impossible in the first place.",203],["Using AssetPostprocessor",203],["The AssetPostprocessor class in the Unity Editor can be used to enforce certain minimum standards on a Unity project. This class receives callbacks when Assets are imported. To use it, inherit from AssetPostprocessor and implement one or more OnPreprocess methods. Significant ones include:",203],["OnPreprocessTexture",203],["OnPreprocessModel",203],["OnPreprocessAnimation",203],["OnPreprocessAudio",203],["See the Scripting Reference on AssetPostprocessor for more possible OnPreprocess methods.",203],["public class ReadOnlyModelPostprocessor : AssetPostprocessor {",203],["public void OnPreprocessModel() {",203],["ModelImporter modelImporter =",203],["(ModelImporter)assetImporter;",203],["if(modelImporter.isReadable) {",203],["modelImporter.isReadable = false;",203],["modelImporter.SaveAndReimport();",203],["This is a simple example of an AssetPostprocessor enforcing rules on a project:",203],["This class is called any time a model is imported into the project, or whenever a model has its import settings changed. The code simply checks to see if the Read/Write enabled flag (represented by the isReadable property) is set to true. If it is, it forces the flag to be false and then saves and reimports the Asset.",203],["Note that calling SaveAndReimport causes this snippet of code to be called again! However, because it is now assured that isReadable is false, this code does not produce an infinite reimport loop.",203],["The reason for this change is discussed in the \"Models\" section, below.",203],["Common Asset rules",203],["Textures",203],["Disable the read/write enabled flag**",203],["The Read/Write enabled flag causes a Texture to be kept twice in memory: once on the GPU and once in CPU-addressable memory(1) (NOTE:",203],["This is because, on most platforms, readback from GPU memory is extremely slow. Reading a Texture from GPU memory into a temporary buffer for use by CPU code (e.g. Texture.GetPixel) would be very nonperformant.). In Unity, this setting is disabled by default, but it can be accidentally switched on.",203],["Read/Write Enabled is only necessary when manipulating Texture data outside of Shaders (such as with the Texture.GetPixel and Texture.SetPixel APIs) and should be avoided whenever possible.",203],["Disable Mipmaps if possible**",203],["For objects that have a relatively invariant Z-depth relative to the Camera, it is possible to disable mipmaps to save about a third of the memory required to load the Texture. If an object changes Z-depth, disabling mipmaps can lead to worse Texture sampling performance on the GPU.",203],["In general, this is useful for UI Textures and other Textures that are displayed at a constant size on screen.",203],["Compress all Textures**",203],["Using a texture compression format suitable for the project’s target platform is crucial for saving memory.",203],["If the selected texture compression format is unsuited to the target platform, Unity decompresses the Texture when the Texture is loaded, consuming both CPU time and an excessive amount of memory. This is most commonly a problem on Android devices, which often support vastly different texture compression formats depending on the chipset.",203],["Enforce sensible Texture size limits**",203],["While this is simple, it is also very easy to forget to resize a Texture or to inadvertently alter the Texture size import setting. Determine a sensible maximum size for different types of Textures and enforce these via code.",203],["For many mobile applications, 2048x2048 or 1024x1024 is sufficient for Texture atlases, and 512x512 is sufficient for Textures applied to 3D models.",203],["Models",203],["Disable the Read/Write enabled flag**",203],["TheRead/Write enabled flag for models operates identically to the one described for Textures. However, it is enabled by default for models.",203],["Unity requires this flag to be enabled if a project is modifying a Mesh at runtime via script, or if the Mesh is used as the basis for a MeshCollider component. If the model is not used in a MeshCollider and is not manipulated by scripts, disable this flag to save half of the model’s memory.",203],["Disable rigs on non-character models**",203],["By default, Unity imports a generic rig for non-character models. This causes an Animator component be to added if the model is instantiated at runtime. If the model is not animated via the Animation system, this adds unnecessary overhead to the animation system, because all active Animators must be ticked once per frame.",203],["Disable the rig on non-animated models to avoid this automatic addition of an Animator component and possible inadvertent addition of unwanted Animators to a Scene.",203],["Enable the Optimize Game Objects option on animated models**",203],["The Optimize Game Objects option has a significant performance impact on animated models. When the option is disabled, Unity creates a large transform hierarchy mirroring the model’s bone structure whenever the model is instantiated. This transform hierarchy is expensive to update, especially if other components (such as Particle Systems or Colliders) are attached to it. It also limits Unity’s ability to multithread Mesh skinning and bone animation calculations.",203],["If specific locations on a model’s bone structure need to be exposed (such as exposing a model’s hands in order to dynamically attach weapon models) then these locations can be specifically allowed in the Extra Transforms list.",203],["Some additional details can be found in the Unity Manual page on the Model Importer.",203],["Use Mesh compression when possible**",203],["Enabling Mesh compression reduces the number of bits used to represent the floating-point numbers for different channels of a model’s data. This can lead to a minor loss of precision, and the effects of this imprecision should be checked by artists before use in a final project.",203],["The specific numbers of bits that a given compression level uses are detailed in the ModelImporterMeshCompression Scripting Reference.",203],["Note that it is possible to use different levels of compression for different channels, so a project may choose to compress only tangents and normals while leaving UVs and vertex positions uncompressed.",203],["Note: Mesh Renderer Settings**",203],["When adding Mesh Renderers to Prefabs or GameObjects, take note of the settings on the component. By default, Unity enables Shadow casting and receiving, Light Probe sampling, Reflection Probe sampling, and Motion Vector calculation.",203],["If a project does not require one or more of these features, ensure that they’re turned off by an automated script. Any runtime code that adds MeshRenderers needs to toggle these settings as well.",203],["For 2D games, accidentally adding a MeshRenderer to the Scene with the shadow options turned on adds a full shadow pass to the rendering loop. This is generally a waste of performance.",203],["Audio",203],["Platform-appropriate compression settings**",203],["Enable a compression format for audio that matches the available hardware. All iOS devices include hardware MP3 decompressors, and many Android devices support Vorbis natively.",203],["Further, import uncompressed audio files into Unity. Unity always recompresses audio when building a project. There is no need to import compressed audio and then recompress it; this only serves to degrade the quality of the final audio clips.",203],["Force audio clips to mono**",203],["Few mobile devices actually have stereo speakers. On a mobile project, forcing the imported audio clips to be mono-channel halves their memory consumption. This setting is also applicable to any audio without stereo effects, such as most UI sound effects.",203],["Reduce audio bitrate**",203],["While this requires consultation with an audio designer, attempt to minimize the bitrate of audio files in order to further save on memory consumption and built project size.",203],["Strings and text",204],["Handling strings and text is a common source of performance problems in Unity projects. In C#, all strings are immutable. Any manipulation of a string results in the allocation of a full new string. This is relatively expensive, and repeated string concatenations can develop into performance problems when performed on large strings, on large datasets, or in tight loops.",204],["Further, as N string concatenations require the allocation of N-1 intermediate strings, serial concatenations can also be a major cause of managed memory pressure.",204],["For cases where strings must be concatenated in tight loops or during each frame, use a StringBuilder to perform the actual concatenation operations. The StringBuilder instance can also be reused to further minimize unnecessary memory allocation.",204],["Microsoft maintains a list of best practices for working with strings in C#, which can be found here on the MSDN website: msdn.microsoft.com.",204],["Locale coercion and ordinal comparisons",204],["One of the core performance problems often found in string-related code is the unintended use of the slow, default string APIs. These APIs were built for business applications, and attempt to deal with handling strings from many different cultural and linguistic rules with regards to the characters found in text.",204],["For example, the following example code returns true when run under the US-English locale, but returns false for many European locales.",204],["Note**:",204],["As of Unity 5.3 and 5.4, Unity’s scripting runtimes always run under the US English (en-US) locale:",204],["String.Equals(\"encyclopedia\", “encyclopædia”);",204],["For most Unity projects, this is entirely unnecessary. It's roughly ten times faster to use the ordinal comparison type, which compares strings in a manner familiar to C and C++ programmers: by simply comparing each sequential byte of the string, without regard for the character represented by that byte.",204],["Switching to ordinal string comparison is as simple as supplying StringComparison.Ordinal as the final argument to String.Equals:",204],["myString.Equals(otherString, StringComparison.Ordinal);",204],["Inefficient built-in string APIs",204],["Beyond switching to ordinal comparisons, certain C# String APIs are known to be extremely inefficient. Among these are String.Format, String.StartsWith and String.EndsWith. String.Format is difficult to replace, but the inefficient string comparison methods are trivially optimized away.",204],["While Microsoft’s recommendation is to pass StringComparison.Ordinal into any string comparison that doesn't need to be adjusted for localization, Unity benchmarks show that the impact of this is relatively minimal compared to a custom implementation.",204],["Method Time (ms) for 100k short strings ",204],["String.StartsWith, default culture 137 ",204],["String.EndsWith, default culture 542 ",204],["String.StartsWith, ordinal 115 ",204],["String.EndsWith, ordinal 34 ",204],["Custom StartsWith replacement 4.5 ",204],["Custom EndsWith replacement 4.5 ",204],["Both String.StartsWith and String.EndsWith can be replaced with simple hand-coded versions, similar to the example attached below.",204],["public static bool CustomEndsWith(this string a, string b)",204],["int ap = a.Length - 1;",204],["int bp = b.Length - 1;",204],["while (ap >= 0 && bp >= 0 && a [ap] == b [bp])",204],["ap--;",204],["bp--;",204],["return (bp < 0);",204],["public static bool CustomStartsWith(this string a, string b)",204],["int aLen = a.Length;",204],["int bLen = b.Length;",204],["int ap = 0; int bp = 0;",204],["while (ap < aLen && bp < bLen && a [ap] == b [bp])",204],["ap++;",204],["bp++;",204],["return (bp == bLen);",204],["Regular Expressions",204],["While Regular Expressions are a powerful way to match and manipulate strings, they can be extremely performance-intensive. Further, due to the C# library’s implementation of Regular Expressions, even simple Boolean IsMatch queries allocate large transient datastructures \"under the hood.\" This transient managed memory churn should be deemed unacceptable, except during initialization.",204],["If regular expressions are necessary, it's strongly recommended to not use the static Regex.Match or Regex.Replace methods, which accept the regular expression as a string parameter. These methods compile the regular expression on-the-fly and don't cache the generated object.",204],["This example code is an innocuous one-liner.",204],["Regex.Match(myString, \"foo\");",204],["However, each time it’s executed, it generates 5 kilobytes of garbage. A simple refactoring can eliminate much of this garbage:",204],["var myRegExp = new Regex(\"foo\");",204],["myRegExp.Match(myString);",204],["In this example, each call to myRegExp.Match \"only\" results in 320 bytes of garbage. While this is still expensive for a simple matching operation, it's a considerable improvement over the previous example.",204],["Therefore, if the regular expressions are invariant string literals, it's considerably more efficient to precompile them by passing them as the first parameter of the Regex object’s constructor. These precompiled Regexes should then be reused.",204],["XML, JSON and other long-form text parsing",204],["Parsing text is often one of the heaviest operations that occurs at loading time. Sometimes, the time spent parsing text can outweigh the time spent loading and instantiating Assets.",204],["The reasons behind this depend on the specific parser used. C#’s built-in XML parser is extremely flexible, but as a result, it's not optimizable for specific data layouts.",204],["Many third-party parsers are built on reflection. While reflection is an excellent choice during development (because it allows the parser to rapidly adapt to changing data layouts), it's notoriously slow.",204],["Unity has introduced a partial solution with its built-in JSONUtility API, which provides an interface to Unity’s serialization system that reads/emits JSON. In most benchmarks, it's faster than pure C# JSON parsers, but it has the same limitations as other interfaces to Unity’s serialization system – it can't serialized many complex data types, such as Dictionaries, without additional code.",204],["Note**: See the ISerializationCallbackReceiver interface for one way to add the additional processing necessary to convert to/from complex data types during Unity’s serialization process.",204],["When encountering performance problems that arise from textual data parsing, consider three alternative resolutions.",204],["Option 1: Parse at build time",204],["The best way to avoid the cost of text parsing is to entirely eliminate the parsing of text at runtime. In general, this means \"baking\" the textual data into a binary format via some sort of build step.",204],["Most developers who opt for this route move their data to some sort of ScriptableObject-derived class hierarchy and then distribute the data via AssetBundles. For an excellent discussion of using ScriptableObjects, see Richard Fine’s Unite 2016 talk on youtube.",204],["This strategy offers the best possible performance, but is only suitable for data that doesn't need to be generated dynamically. it's best suited for game design parameters and other content.",204],["Option 2: Split and lazy load",204],["A second possibility is to split up the data that must be parsed into smaller chunks. Once split, the cost of parsing the data can be spread across several frames. In the ideal case, identify the specific portions of the data that are required to present the desired experience to the user and load only those portions.",204],["In a simple example: if the project were a platform game, it would not be necessary to serialize data for all the levels together into one giant blob. If the data were split into individual Assets for each level, and perhaps segmented the levels into regions, the data could be parsed as the player approached it.",204],["While this sounds easy, in practice it requires a substantial investment in tool code and may require data structures to be reorganized.",204],["Option 3: Threads",204],["For data that's parsed entirely into plain C# objects, and doesn't require any interaction with Unity APIs, it's possible to move the parsing operations to worker threads.",204],["This option can be extremely powerful on platforms with a significant number of cores. However, it requires careful programming to avoid creating deadlocks and race conditions.",204],["Note**: iOS devices have at most 2 cores. Most Android devices have from 2 to 4. This technique of more interest when building for standalone and console build targets.",204],["Projects that choose to implement threading use the built-in C# Thread and ThreadPool classes (see msdn.microsoft.com) to manage their worker threads, along with the standard C# synchronization classes.",204],["The Resources folder",205],["The Resources folder is a common source of many problems in Unity projects. Improper use of the Resources folder can bloat the size of a project's build, lead to uncontrollable excessive memory utilization, and significantly increase application startup times.",205],["While the problems that this folder make it less suitable for production applications, it can still be useful for fast prototyping. For full production of new projects, you should usually use the Addressables package for asset organization.",205],["If you have an existing project that uses the Resources folder, or you want to use the folder for a prototype, you can use the AssetBundles and Resources series of articles to understand more about organizing your assets in this folder. Use the Resources article from this series to learn more about the problems with the Resources folder and how to use it properly if you need to.",205],["Although you can still use the Resources folder, the tutorial resources are deprecated. They might contain outdated information and you should only use them as a reference for working with the Resources folder.",205],["General Optimizations",206],["There are as many different ways to optimize code as there are reasons for performance problems. In general, it is strongly recommended that developers closely profile their applications before attempting to apply CPU optimizations. However, there are several simple CPU optimizations that are universally applicable.",206],["Address Properties by ID",206],["Unity does not use string names to address Animator, Material and Shader properties internally. For speed, all property names are hashed into property IDs, and it is these IDs that are actually used to address the properties.",206],["Therefore, whenever using a Set or Get method on an Animator, Material or Shader, use the integer-valued method instead of the string-valued methods. The string methods simply perform string hashing and then forward the hashed ID to the integer-valued methods.",206],["The property IDs created from string hashes are deterministic over the course of a single run. The simplest way to use them is to declare a static read-only integer variable for each property name, and use the integer variable in place of the string. These are automatically initialized during startup with no further initialization code needed.",206],["The appropriate APIs are Animator.StringToHash for Animator property names, and Shader.PropertyToID for Material & Shader property names.",206],["Use non-allocating physics APIs",206],["In Unity 5.3 and onwards, non-allocating versions of all Physics query APIs have been introduced. Replace RaycastAll calls with RaycastNonAlloc, SphereCastAll calls with SphereCastNonAlloc, and so on. For 2D applications, there are also non-allocating versions of all Physics2D query APIs.",206],["Null comparisons against UnityEngine.Object subclasses",206],["The Mono and IL2CPP runtimes treat instances of classes that derive from UnityEngine.Object in a specific way. Invoking methods on the instances actually calls into engine code, which must perform lookups and validations to convert the script references to the native references. While small, the cost of comparing a variable of this type to null is much more expensive than a comparison against a purely C# class. For this reason, avoid these null comparisons in tight loops or in code that runs every frame.",206],["Vector and quaternion math and order of operations",206],["For vector and quaternion math that is located in tight loops, remember that integer math is faster than floating-point math, and floating-point math is faster than vector, matrix or quaternion math.",206],["Therefore, whenever commutative or associative arithmetic allows, attempt to minimize the cost of individual mathematical operations:",206],["Vector3 x;",206],["int a, b;",206],["// Less efficient: results in two vector multiplications",206],["Vector3 slow = a * x * b;",206],["// More efficient: one integer mult, one vector mult",206],["Vector3 fast = a * b * x;",206],["Built-In ColorUtility",206],["It is common for applications that must convert between HTML-formatted color strings (#RRGGBBAA) and Unity’s native Color and Color32 structures to use a script from the Unify Community. This script was both slow and caused extensive memory allocation due to string manipulation.",206],["As of Unity 5, there is a built-in ColorUtility API that performs these conversions efficiently. Usage of the built-in API should be preferred.",206],["Find and FindObjectOfType",206],["It is a general best practice to eliminate all usage of GameObject.Find and Object.FindObjectOfType in production code. As these APIs require Unity to iterate over all GameObjects and Components in memory, they rapidly become non-performant as the scope of a project grows.",206],["An exception to the above rule can be made in accessors for singleton objects. A global manager object often exposes an \"instance\" property, and often has a FindObjectOfType call in the getter to detect pre-existing instances of the singleton:",206],["class SomeSingleton {",206],["private SomeSingleton _instance;",206],["public SomeSingleton Instance {",206],["get {",206],["if(_instance == null) {",206],["_instance =",206],["FindObjectOfType();",206],["if(_instance == null) {",206],["_instance = CreateSomeSingleton();",206],["return _instance;",206],["While this pattern is generally acceptable, it is important to examine the code and ensure that the accessor is be called in Scenes where the singleton object does not exist. If the getter does not automatically create an instance of a missing singleton, it is very common to discover that code looking for the singleton results in repeated calls to FindObjectOfType (often multiple times per frame) and creates an undesirable drain on performance.",206],["Debug code & the [conditional] attribute",206],["The UnityEngine.Debug logging APIs are not stripped from non-development builds, and do write to log files if called. As most developers do not intend to write debug information in non-development builds, it is recommended to wrap development-only logging calls in custom methods, like so:",206],["public static class Logger {",206],["[Conditional(\"ENABLE_LOGS\")]",206],["public static void Debug(string logMsg) {",206],["UnityEngine.Debug.Log(logMsg);",206],["By decorating these methods with the [Conditional] attribute, the define or defines used by the Conditional attribute determine whether the decorated method is included in the compiled source.",206],["If none of the defines passed to the Conditional attribute are defined, then the decorated method and all calls to the decorated method are compiled out. The effect is identical to what would happen if the method and all calls to the method were wrapped in #if … #endif preprocessor blocks.",206],["For more information on the Conditional attribute, see the MSDN website: msdn.microsoft.com.",206],["Special optimizations",207],["While the previous section described optimizations applicable to all projects, this section details optimizations that should not be applied prior to gathering profiling data. This may be because the optimizations are labor-intensive to implement, may compromise code cleanliness or maintainability in favor of performance, or may resolve problems that only appear at certain magnitudes of scale.",207],["Multidimensional vs. jagged arrays",207],["As described in this StackOverflow article, it is generally more efficient to iterate over jagged arrays than over multidimensional arrays, as multidimensional arrays require a function call.",207],["NOTES:",207],["These are arrays of arrays, and are declared as type[x][y] instead of type[x,y].)",207],["This can be discovered by inspecting the IL generated by accessing a multidimensional array, using ILSpy or similar tools.)",207],["When profiled in Unity 5.3, 100 fully sequential iterations over a three-dimensional 100x100x100 array yielded the following timings, which were averaged over 10 runs of the test:",207],["Array type Total time (100 iterations) ",207],["One-Dimensional Array 660 ms ",207],["Jagged Arrays 730 ms ",207],["Multidimensional Array 3470 ms ",207],["The cost of the additional function call can be seen in the disparity between the cost of accessing multidimensional arrays vs. one-dimensional arrays, and the cost of iterating over a non-compact memory structure can be seen in the difference between accessing jagged arrays vs. one-dimensional arrays.",207],["As demonstrated above, the cost of the additional function call heavily outweighs the cost imposed by using a non-compact memory structure.",207],["For highly performance-sensitive operations, it is recommended to use a one-dimensional array. For all other cases where an array with multiple dimensions is required, use a jagged array. Multidimensional arrays should not be used.",207],["Particle System pooling",207],["When pooling Particle Systems, be aware that they consume at least 3500 bytes of memory. Memory consumption increases based on the number of modules activated on the Particle System. This memory is not released when Particle Systems are deactivated; It is only released when they are destroyed.",207],["As of Unity 5.3, most Particle System settings can now be manipulated at runtime. For projects that must pool a large number of different particle effects, it may be more efficient to extract the configuration parameters of the Particle Systems out onto a data-carrier class or structure.",207],["When a particle effect is needed, a pool of \"generic\" particle effects can then supply the requisite particle effect object. The configuration data can then be applied to the object to achieve the desired graphical effect.",207],["This is substantially more memory-efficient than attempting to pool all possible variants & configurations of Particle Systems used in a given Scene, but requires substantial engineering effort to achieve.",207],["Update managers",207],["Internally, Unity tracks lists of objects interested in its callbacks, such as Update, FixedUpdate and LateUpdate. These are maintained as intrusively-linked lists to ensure that list updates occur in constant time. MonoBehaviours are added to/removed from these lists when they are Enabled or Disabled, respectively.",207],["While it is convenient to simply add the appropriate callbacks to the MonoBehaviours that require them, this becomes increasingly inefficient as the number of callbacks grows. There is a small but significant overhead to invoking managed-code callbacks from native code. This results both in degraded frame times when invoking large numbers of per-frame methods, and in degraded instantiation times when instantiating Prefabs that contain large numbers of MonoBehaviours (NOTE:",207],["The instantiation cost is due to the performance overhead of invoking Awake and OnEnable callbacks on each Component in a prefab.).",207],["When the number of MonoBehaviours with per-frame callbacks grows into the hundreds or thousands, it is advantageous to remove these callbacks and instead have MonoBehaviours (or even standard C# objects) attach to a global manager singleton. The global manager singleton can then distribute Update, LateUpdate and other callbacks to interested objects. This has the additional benefit of allowing code to smartly unsubscribe from callbacks when they would otherwise no-op, thereby shrinking the sheer number of functions that must be called each frame.",207],["The greatest saving is usually realized by eliminating callbacks which rarely execute. Consider the following pseudo-code:",207],["void Update() {",207],["if(!someVeryRareCondition) { return; }",207],["// … some operation …",207],["If there are large numbers of MonoBehaviours with Update callbacks similar to the above, then a significant amount of the time consumed running Update callbacks are spent switching between native and managed code domains for MonoBehaviour execution that then exit immediately. If these classes instead subscribed to a global Update Manager only while someVeryRareCondition were true, and unsubscribed thereafter, time would be saved both code domain switching and on the evaluation of the rare condition.",207],["Using C# delegates in an update manager",207],["It is tempting to use plain C# delegates to implement these callbacks. However, C#’s delegate implementation is optimized for a low rate of subscription and unsubscription, and for a low number of callbacks. A C# delegate performs a full deep-copy of the callback list each time a callback is added or removed. Large lists of callbacks, or large numbers of callbacks subscribing/unsubscribing during a single frame results in a performance spike in the internal Delegate.Combine method.",207],["For cases where adds/removes occur at high frequencies, consider using a data structure designed for fast inserts/removes instead of delegates.",207],["Loading thread control",207],["Unity permits developers to control the priority of background threads that are being used to load data. This is particularly important when trying to stream AssetBundles onto disk in the background.",207],["The priority for the main thread and graphics thread are both ThreadPriority.Normal – any threads with higher priority preempt the main/graphics threads and cause framerate hiccups, whereas threads with lower priority do not. If threads have an equivalent priority to the main thread, the CPU attempts to give equal time to the threads, which generally results in framerate stuttering if multiple background threads are performing heavy operations, such as AssetBundle decompression.",207],["Currently, this priority can be controlled in three places.",207],["First, the default priority for Asset loading calls, such as Resources.LoadAsync and AssetBundle.LoadAssetAsync, is taken from the Application.backgroundLoadingPriority setting. As documented, this call also limits the amount of time that the main thread spends integrating Assets (NOTE:",207],["Most types of Unity Assets must be \"integrated\" onto the Main thread. During integration, the Asset initialization is finalized and certain thread-safe operations are performed. This includes scripting callback invocations, such as Awake callbacks. See the “Resource Management” guide for further details.), in order to limit the impact of Asset loading on frame time.",207],["Second, each asynchronous Asset loading operation, as well as each UnityWebRequest request, returns an AsyncOperation object to monitor and manage the operation. This AsyncOperation object exposes a priority property that can be used to tweak an individual operation’s priority.",207],["Finally, WWW objects, such as those returned from a call to WWW.LoadFromCacheOrDownload, expose a threadPriority property. It is important to note that WWW objects do not automatically use the Application.backgroundLoadingPriority setting as their default value – WWW objects always default to ThreadPriority.Normal.",207],["It’s important to note that the under-the-hood systems used to decompress and load data differ between these APIs. Resources.LoadAsync and AssetBundle.LoadAssetAsync are operated by Unity’s internal PreloadManager system, which governs its own loading thread(s) and performs its own rate-limiting. UnityWebRequest uses its own dedicated thread pool. WWW spawns an entirely new thread each time a request is created.",207],["While all other loading mechanisms have a built-in queuing system, WWW does not. Calling WWW.LoadFromCacheOrDownload on a very large number of compressed AssetBundles spawns an equivalent number of threads, which then compete with the main thread for CPU time. This can easily result in frame-rate stuttering.",207],["Therefore, when using WWW to load and decompress AssetBundles, it is considered best practice to set an appropriate value for the threadPriority of each WWW object that is created.",207],["Mass object movement & CullingGroups",207],["As mentioned in the section on Transform Manipulation, moving large Transform hierarchies has a relatively high CPU cost due to the propagation of change messages. However, in real development environments, it is often impossible to collapse a hierarchy to a modest number of GameObjects.",207],["At the same time, it is good development practice to only run enough behavior to maintain the believability of the game world while eliminating behavior the user will not notice – for example, in a Scene with a large number of characters, it is always more optimal to only run Mesh-skinning and animation-driven Transform movement for characters that are on-screen. There is no reason to waste CPU time calculating purely visual elements of the simulation for characters that are off-screen.",207],["Both of these problems can be neatly addressed with an API first introduced in Unity 5.1: CullingGroups.",207],["Instead of directly manipulating a large group of GameObjects in the scene, change the system to manipulate the Vector3 parameters of a group of BoundingSpheres within a CullingGroup. Each BoundingSphere serves as the authoritative repository for a single game-logical entity’s world-space position, and receives callbacks when the entity moves near/within the frustum of the CullingGroup’s main camera. These callbacks can then be used to activate/deactivate code or components (such as Animators) governing behavior that should only run while the entity is visible.",207],["Reducing method call overhead",207],["C#’s string library provides an excellent case study in the cost of adding additional method calls to simple library code. In the section on the built-in string APIs String.StartsWith and String.EndsWith, it was mentioned that hand-coded replacements are 10-100 times faster than the built-in methods, even when unwanted locale coercion was suppressed.",207],["The key reason for this performance difference is simply the cost of adding additional method calls to tight inner loops. Each method that is invoked must locate the address of the method in memory and push another frame onto the stack. Neither of these operations are free, but in most code they are sufficiently small to ignore.",207],["However, when running small methods in tight loops, the overhead added by introducing additional method calls can become significant – and even dominant.",207],["Consider the following two simple methods.",207],["Example 1:**",207],["int Accum { get; set; }",207],["Accum = 0;",207],["for(int i = 0; i < myList.Count; i++) {",207],["Accum += myList[i];",207],["Example 2:**",207],["int accum = 0;",207],["int len = myList.Count;",207],["for(int i = 0; i < len; i++) {",207],["accum += myList[i];",207],["Both methods calculate the sum of all integers in a C# generic List<int>. The first example is a bit more \"modern C#\" in that it uses an automatically generated property to hold its data values.",207],["While on the surface these two pieces of code appear equivalent, the difference is notable when the code is analyzed for method calls.",207],["Example 1:**",207],["int Accum { get; set; }",207],["Accum = 0;",207],["for(int i = 0;",207],["i < myList.Count; // call to List::getCount",207],["i++) {",207],["Accum // call to set_Accum",207],["+= // call to get_Accum",207],["myList[i]; // call to List::get_Value",207],["So there are four method calls each time the loop executes:",207],["myList.Count invokes the get method on the Count property",207],["The get and set methods on the Accum property must be called",207],["get to retrieve the current value of Accum so that it can be passed to the addition operation",207],["set to assign the result of the addition operation to Accum",207],["The [] operator invokes the list’s get_Value method to retrieve the value of the item at a specific index at the list.",207],["Example 2:**",207],["int accum = 0;",207],["int len = myList.Count;",207],["for(int i = 0;",207],["i < len;",207],["i++) {",207],["accum += myList[i]; // call to List::get_Value",207],["In this second example, the call to get_Value remains, but all other methods have either been eliminated or no longer execute once per loop iteration.",207],["As accum is now a primitive value instead of a property, method calls do not need to be made to set or retrieve its value.",207],["As myList.Count is assumed to not vary while the loop is running, its access has been moved outside of the loop’s conditional statement, so it is no longer executed at the beginning of each loop iteration.",207],["The timings for the two versions reveal the true benefit of removing 75% of the method call overhead from this specific snippet of code. When run 100,000 times on a modern desktop machine:",207],["Example 1 requires 324 milliseconds to execute",207],["Example 2 requires 128 milliseconds to execute",207],["The primary issue here is that Unity performs very little method inlining, if any. Even under IL2CPP, many methods do not currently inline properly. This is especially true of properties. Further, virtual and interface methods cannot be inlined at all.",207],["Therefore, a method call declared in the source C# is very likely to end up producing a method call in the final binary application.",207],["Trivial properties",207],["Unity provides many \"simple\" constants on its data types for the convenience of developers. However, in light of the above, it is important to note that these constants are generally implemented as properties that return constant values.",207],["Vector3.zero’s property body is as follows:",207],["get { return new Vector3(0,0,0); }",207],["Quaternion.identity is very similar:",207],["get { return new Quaternion(0,0,0,1); }",207],["While the cost of accessing these properties is usually tiny compared to the actual code surrounding them, they can make a small difference when they are executed thousands of times per frame (or more).",207],["For simple primitive types, use a const value instead. Const values are inlined at compile time – the reference to the const variable is replaced with its value.",207],["Note:** Because every reference to a const variable is replaced with its value, it is inadvisable to declare long strings or other large data types const. This unnecessarily bloats the size of the final binary due to all the duplicated data in the final instruction code.",207],["Wherever const isn’t appropriate, make a static readonly variable instead. In some projects, even Unity’s built-in trivial properties have been replaced with static readonly variables, resulting in small improvements in performance.",207],["Trivial methods",207],["Trivial methods are trickier. It is extremely useful to be able to declare functionality once and reuse it elsewhere. However, in tight inner loops, it may be necessary to depart from good coding practices and instead \"manually inline\" certain code.",207],["Some methods can be eliminated outright. Consider Quaternion.Set, Transform.Translate or Vector3.Scale. These perform very trivial operations and can be replaced with simple assignment statements.",207],["For more complex methods, weigh the profiling evidence for manual inlining against the long-term cost of maintaining the more-performant code.",207],["Working with blend shapes",208],["Preparing the artwork",208],["Once you have your blend shapes set up in your 3D modeling application (such as Autodesk® Maya®):",208],["In your 3D modeling application, enable these export settings:",208],["Enable exporting animation.",208],["Enable exporting blend shapes for deformed models.",208],["Export your selection to an .fbx file.",208],["Import your FBX file into Unity.",208],["Select the newly imported Model in the Hierarchy window. The Inspector window displays the BlendShapes section containing all the blend shapes under the SkinnedMeshRenderer component.",208],["For each of the blend shapes listed, you can change its influence (weighting) to the default shape, where:",208],["0 means the blend shape has no influence.",208],["100 means the blend shape has full influence.",208],["Create animations In Unity",208],["To create a blend animation:",208],["Open the Animation window (from the main Unity menu: Window > Animation > Animation).",208],["On the left side of the window, click Add Curve and add a blend shape. The Inspector window displays the new blend shape in the BlendShapes section under the SkinnedMeshRenderer component.",208],["Create the animation you want by adjusting the keyframes and blend weights.",208],["To preview your animation, click Play in the Editor window or the Animation window.",208],["Scripting access",208],["You can also set the blend weights through scripting using functions like GetBlendShapeWeight and SetBlendShapeWeight.",208],["To check how many blend shapes a Mesh has, use the blendShapeCount variable.",208],["This code example demonstrates how to blend a default shape into two other blend shapes over time when attached to a GameObject with three or more blend shapes:",208],["````c#",208],["using UnityEngine;",208],["using System.Collections;",208],["public class BlendShapeExample : MonoBehaviour",208],["int blendShapeCount;",208],["SkinnedMeshRenderer skinnedMeshRenderer;",208],["Mesh skinnedMesh;",208],["float blendOne = 0f;",208],["float blendTwo = 0f;",208],["float blendSpeed = 1f;",208],["bool blendOneFinished = false;",208],["void Awake ()",208],["skinnedMeshRenderer = GetComponent ();",208],["skinnedMesh = GetComponent ().sharedMesh;",208],["void Start ()",208],["blendShapeCount = skinnedMesh.blendShapeCount;",208],["void Update ()",208],["if (blendShapeCount > 2) {",208],["if (blendOne < 100f) {",208],["skinnedMeshRenderer.SetBlendShapeWeight (0, blendOne);",208],["blendOne += blendSpeed;",208],["} else {",208],["blendOneFinished = true;",208],["if (blendOneFinished == true && blendTwo < 100f) {",208],["skinnedMeshRenderer.SetBlendShapeWeight (1, blendTwo);",208],["blendTwo += blendSpeed;",208],["1D Blending",209],["The first option in the Inspector of a Blend Node is the Blend Type. This drop-down is used to select one of the different blend types that can blend according to one or two parameters. 1D Blending blends the child motions according to a single parameter.",209],["After setting the Blend Type, the first thing you need is to select the Animation Parameter that will control this Blend Tree. In this example, the parameter is direction which varies between -1.0 (left) and +1.0 (right), with 0.0 denoting a straight run without leaning.",209],["Then you can add individual animations by clicking the small \"+\" button and selecting Add Motion Field from the popup menu. When you're done, it should look something like this:",209],["The diagram at the top of the Inspector shows the influence of each of the child motions as the parameter varies between its minimum and maximum values. Each motion is shown as a little blue pyramid (the first and last are only shown in half), and if you click and hold down the left mouse button on one them, the corresponding motion is highlighted in the motion list below. The peak of each pyramid defines the parameter value where the motion has full influence, meaning that its animation weight is 1 and the other animations have a weight of 0. This is also called the threshold of the motion.",209],["The red vertical bar indicates the value of the Parameter. If you press Play in the Preview at the bottom of the Inspector and drag the red bar in the diagram left and right, you can see how the value of the parameter is controlling the blending of the different motions.",209],["Parameter Range",209],["The range of the parameter used by the Blend Tree is shown below the diagram as two numbers to the left and right. Either one of them can be changed by clicking on the number and dragging left or right with the mouse. Note that the values correspond to the threshold of the first and last motion in the motion list.",209],["Thresholds",209],["You can change the threshold value of a motion by clicking on its corresponding blue pyramid in the diagram and dragging it left or right. If the \"Automate Thresholds\" toggle is not enabled, you can also edit the threshold value of a motion in the motion list by typing in a number in the number field in the Threshold column.",209],["Below the motion list is the checkbox Automate Thresholds. Enabling it will distribute the thresholds of the motions evenly across the parameter range. For example, if there are five clips and the parameter ranges from -90 to +90, the thresholds will be set to -90, -45, 0, +45 and +90 in order.",209],["The Compute Thresholds drop-down will set the thresholds from data of your choice obtained from the root motions in the Animation Clips. The data that is available to choose from is speed, velocity x, y, or z, and angular speed in degrees or radians. If your parameter corresponds to one of these properties, you can compute the thresholds using the Compute Thresholds drop-down.",209],["Property: Function: ",209],["Speed Sets the threshold of each motion according to its speed (the magnitude of the velocity). ",209],["Velocity X Sets the threshold of each motion according to its velocity.x. ",209],["Velocity Y Sets the threshold of each motion according to its velocity.y. ",209],["Velocity Z Sets the threshold of each motion according to its velocity.z. ",209],["Angular Speed (Rad) Sets the threshold of each motion according to its angular speed in radians per second. ",209],["Angular Speed (Deg) Sets the threshold of each motion according to its angular speed in degrees per second. ",209],["Say, for example, you had a walk animation that covered 1.5 units per second, a jog at 2.3 units per second, and a run at 4 units per second, choosing the Speed option from the drop-down would set the parameter range and thresholds for the three animations based on these values. So, if you set the speed parameter to 3.0, it would blend the jog and run with a slight bias toward the jog.",209],["2D Blending",210],["The first option in the Inspector of a Blend Node is the Blend Type. This drop-down is used to select one of the different blend types that can blend according to one or two parameters. The 2D blending types blends the child motions according to two parameters.",210],["The different 2D Blend Types have different uses that they are suitable for. They differ in how the influence of each motion is calculated.",210],["2D Simple Directional: Best used when your motions represent different directions, such as \"walk forward\", \"walk backward\", \"walk left\", and \"walk right\", or \"aim up\", \"aim down\", \"aim left\", and \"aim right\". Optionally a single motion at position (0, 0) can be included, such as \"idle\" or \"aim straight\". In the Simple Directional type there should not be multiple motions in the same direction, such as \"walk forward\" and \"run forward\".",210],["2D Freeform Directional: This blend type is also used when your motions represent different directions, however you can have multiple motions in the same direction, for example \"walk forward\" and \"run forward\". In the Freeform Directional type the set of motions should always include a single motion at position (0, 0), such as \"idle\".",210],["2D Freeform Cartesian: Best used when your motions do not represent different directions. With Freeform Cartesian your X parameter and Y parameter can represent different concepts, such as angular speed and linear speed. An example would be motions such as \"walk forward no turn\", \"run forward no turn\", \"walk forward turn right\", \"run forward turn right\" etc.",210],["Direct: This type of blend tree lets user control the weight of each node directly. Useful for facial shapes or random idle blending.",210],["After setting the Blend Type, the first thing you need is to select the two Animation Parameters that will control this Blend Tree. In this example, the parameters are velocityX (strafing) and velocityZ (forward speed).",210],["Then you can add individual animations by clicking + -> Add Motion Field to add an Animation Clip to the blend tree. When you're done, it should look something like this:",210],["The positions in 2D blending are like the thresholds in 1D blending, except that there are two values instead of one, corresponding to each of the two parameters. Their positions along the horizontal X axis correspond to the first parameter, and their positions along the vertical Y axis correspond to the second parameter. A walking forward animation might have a velocityX of 0 and a velocityZ of 1.5, so those values should be typed into the Pos X and Pos Y number fields for the motion.",210],["The 2D Blending Diagram",210],["The diagram at the top of the Inspector shows the positions of the child motions in the 2D blend space. The motions are shown as blue dots. Motions with no Animation Clip or Blend Tree assigned have no influence on the blend and are shown as gray dots. You can select a motion by clicking on its dot in the diagram. Once selected, the influence of that motion for each point in the blending space is visualized as a blue field. The field is strongest right under the position of the motion, where the motion has full influence, meaning that its animation weight is 1 and the other animations have a weight of 0. Further away the influence decreases as the influence of other motions take over.",210],["The red dot indicates the values of the two Parameters. If you press Play in the Preview at the bottom of the Inspector and drag the red dot in the diagram around, you can see how the values of the parameters are controlling the blending of the different motions. In the diagram you can also see the influence of each motion represented as circles around each motion. You will see that if you move the red dot on top of one of the blue dots representing a motion, the circle for that motion gains its maximum radius and the circles for all other motions shrink down to nothing. At positions that are in between several motions, multiple of the nearby motions will have an influence on the blend. If you select one of the motions in order to see the blue influence field of that motion, you can see that as you move the red dot around, the circle size of the motion corresponds exactly with how strong the influence field is at various positions.",210],["When no motion is selected, the diagram shows a mix of all the influence fields that is more blue where a single motion dominates and less blue where many motions contribute to the blend.",210],["Positions",210],["You can change the positions of a motion by clicking on its corresponding blue dot in the diagram and dragging it around. You can also edit position coordinates of a motion in the motion list by typing in numbers in the number fields in the Pos X and Pos Y columns.",210],["The Compute Positions drop-down will set the positions from data of your choice obtained from the root motions in the Animation Clips. The data that is available to choose from is speed, velocity x, y, or z, and angular speed in degrees or radians. If one or both of your parameters correspond to one of these properties, you can compute the Pos X and/or Pos Y using the Compute Positions drop-down.",210],["Property: Function: ",210],["Velocity XZ Sets the Pos X of each motion according to its velocity.x and the Pos Y according to its velocity.z. ",210],["Speed And Angular Speed Sets the Pos X of each motion according to its angular speed (in radians per second) and the Pos Y according to its speed. ",210],["Furthermore you can mix and match by choosing Compute Position -> X Position From and/or Compute Position -> Y Position From to only auto-compute one of them at a time, leaving the other unchanged.",210],["Property: Function: ",210],["Speed Sets the Pos X or Pos Y of each motion according to its speed (the magnitude of the velocity). ",210],["Velocity X Sets the Pos X or Pos Y of each motion according to its velocity.x. ",210],["Velocity Y Sets the Pos X or Pos Y of each motion according to its velocity.y. ",210],["Velocity Z Sets the Pos X or Pos Y of each motion according to its velocity.z. ",210],["Angular Speed (Rad) Sets the Pos X or Pos Y of each motion according to its angular speed in radians per second. ",210],["Angular Speed (Deg) Sets the Pos X or Pos Y of each motion according to its angular speed in degrees per second. ",210],["Say, for example, that your parameters correspond to sideways velocity and forward velocity, and that you have an idle animation with an average velocity (0, 0, 0), a walk animation with (0, 0, 1.5), and two strafe animations with velocities of (-1.5, 0, 0) and (1.5, 0, 0) respectively. Choosing the Velocity XZ option from the drop-down would set the positions of the motions according to the X and Z coordinates of those velocities.",210],["Additional Blend Tree Options",211],["The options below are common to both 1D and 2D blending.",211],["Time Scale",211],["You can alter the \"natural\" speed of animation clips with the animation speed number fields (the columns with a clock icon). For example, you can double the speed of a walk clip by specifying a value of 2.0. The Adjust Time Scale > Homogeneous Speed button rescales the speed of the clips so that they correspond with the chosen minimum and maximum values of the parameter but keep the same relative speed they initially had.",211],["Note that the Adjust Time Scale drop-down is only available if all the motions are Animation Clips and not child Blend Trees.",211],["Mirroring",211],["Enable the Mirror checkbox to mirror any humanoid Animation Clip in the motions list. Mirroring uses the same animation as its unmirrored original without doubling the memory and space.",211],["However, mirroring an animation in a blend tree does not create a fully symmetrical animation. Unity automatically adds offsets to ensure that run cycles, walk cycles, and animations such as footsteps are blended correctly with other animation clips and blend trees. For example, if your blend tree has a humanoid running left, and you enable Mirror to switch the humanoid to run right, the foot cycles need to match so that the left foot touches the ground at the same time. This ensures that the mirrored Blend tree correctly blends with surrounding clips and other blend trees that have not been mirrored.",211],["Direct Blending",212],["Using a Direct Blend Tree allows you to map animator parameters directly to the weight of a BlendTree child. This can be useful if you want to have exact control over the various animations that are being blended rather than blend them indirectly using one or two parameters (in the case of 1D and 2D blend trees).",212],["When setting up a direct blend tree, the inspector allows you to add motions to the motion list. Each motion should then be assigned a corresponding parameter to directly control its blend weight in the tree. Read more about creating Animator Parameters here.",212],["In effect, this Direct mode simply bypasses the crossfading, or the various 2D blending algorithms (Freeform Directional, Freeform Cartesian, etc) and allows you to implement whatever code you like to control the mix of blended animations.",212],["This can be particularly useful when mixing blend shape animations for facial expressions, or when blending together additive animations.",212],["Build Player Pipeline",213],["When building a player, you sometimes want to modify the built player in some way. For example you might want to add a custom icon, copy some documentation next to the player or build an Installer. You can do this via editor scripting using BuildPipeline.BuildPlayer to run the build and then follow it with whatever postprocessing code you need:",213],["// C# example.",213],["using UnityEditor;",213],["using System.Diagnostics;",213],["public class ScriptBatch",213],["[MenuItem(\"MyTools/Windows Build With Postprocess\")]",213],["public static void BuildGame ()",213],["// Get filename.",213],["string path = EditorUtility.SaveFolderPanel(\"Choose Location of Built Game\", \"\", \"\");",213],["string[] levels = new string[] {\"Assets/Scene1.unity\", \"Assets/Scene2.unity\"};",213],["// Build player.",213],["BuildPipeline.BuildPlayer(levels, path + \"/BuiltGame.exe\", BuildTarget.StandaloneWindows, BuildOptions.None);",213],["// Copy a file from the project folder to the build folder, alongside the built game.",213],["FileUtil.CopyFileOrDirectory(\"Assets/Templates/Readme.txt\", path + \"Readme.txt\");",213],["// Run the game (Process class from System.Diagnostics).",213],["Process proc = new Process();",213],["proc.StartInfo.FileName = path + \"/BuiltGame.exe\";",213],["proc.Start();",213],["PostProcessBuild Attribute",213],["You can also use the postprocessOrder parameter of the PostProcessBuildAttribute to define the execution order for your build methods, and call your external scripts with the Process class from these methods as shown in the last section. This parameter is used to sort the build methods from lower to higher, and you can assign any negative or positive value to it.",213],["Linux Build Settings",214],["To create a build for Linux, go to File > Build Settings from Unity's main menu. In the Platform list, select Linux and then click Switch Platform.",214],["When you have configured the Build Settings, choose from the following two options:",214],["\nBuild builds your application into a Player\n",214],["\nBuild and Run builds your application in a Player, and opens that Player on your target platform.\n",214],["Scenes in Build",214],["The Scenes In Build pane displays a list of the Scenes from your Project that Unity includes in the build. If you can't see any Scenes in this pane, select Add Open Scenes to add all the currently open Scenes to the build. You can also drag Scene Assets from your Project window into this window.",214],["To exclude a Scene in the list from the build, clear the checkbox next to that scene. This removes the Scene from the build, but not from the list. To remove a Scene from the list, select it and press the Delete key on your keyboard.",214],["When you select Build or Build and Run, Unity creates a build that includes all Scenes in the Scenes in Build list. Unity uses the list of Scenes to determine the order that it loads the Scenes in. To adjust the order of the Scenes, drag them up or down the list.",214],["Platform list",214],["The Platform pane lists all platforms available in your Unity Editor. The list displays the Unity icon next to the name of the platform currently selected as the target platform.",214],["Unity determines the platforms available to you depending on the platform modules you have installed.",214],["To install further platform modules to your Project, do the following:",214],["\nGo to the Unity Hub and select the version of Unity you want to add the module to.\n",214],["\nClick the vertical ellipses and select Add Modules.\n",214],["To change the target platform, select the platform you want to switch to, then select Switch Platforms. This might take some time, because Unity might need to re-import your Assets in formats that match your target platform.",214],["When you select a platform, Unity displays a list of options that you can adjust for the build. Each platform has unique settings that are listed on each platform-specific manual page.",214],["Select the Windows, Mac, Linux build target to build standalone applications for most desktop platforms.",214],["Build settings",214],["Use these settings to configure how Unity builds your application.",214],["Setting Function ",214],["",214],["Target platform Select Linux to build your app for the Linux platform.",214],["Development Build Enable this setting to include scripting debug symbols and the Profiler in your build. When you enable this, Unity sets the DEVELOPMENT_BUILD#define for testing purposes. When you select Development Build, Autoconnect Profiler, Deep Profiling Support, Script Debugging, and Wait for Managed Debugger settings also become available. ",214],["Autoconnect Profiler Enable this setting to automatically connect the Unity Profiler to your build. ",214],["Deep Profiling Support Enable this setting to switch Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application and returns more detailed profiling data. When you enable Deep Profiling Support, it might slow down script execution. ",214],["Script debugging Enable this setting to allow your script code to be debugged. Not available on WebGL. ",214],["Wait for Managed Debugger Enable this setting to be prompted to attach a debugger before Unity executes any script code. ",214],["Compression Method (Not available on the WebGL platform) Compress the data in your Project when you build the Player. This includes Assets, Scenes, Player settings, and GI data. Choose between the following methods:",214],["**Default** On Windows, Mac, Linux, and iOS, there is no compression by default. On Android, the default compression is ZIP, which provides better compression results than LZ4HC; however, data is slower to decompress.\n",214],["**LZ4** A fast compression format that's useful for development builds. For more information, see [BuildOptions.CompressWithLz4](ScriptRef:BuildOptions.CompressWithLz4.html).\n",214],["**LZ4HC** A high compression variant of LZ4 that's slower to build but produces better results for release builds. For more information, see [BuildOptions.CompressWithLz4HC](ScriptRef:BuildOptions.CompressWithLz4HC.html).\n",214],["Asset import overrides ",214],["The Asset Import Overrides section allows you to locally override all texture import settings to speed up import and platform switch time. You must avoid shipping your final build with any import overrides, but during development they can be useful to speed up iteration time, especially, if assets such as textures resulting in lower resolution is not of any concern.",214],["Setting Function ",214],["",214],["Max Texture Size Override the maximum imported texture size. Unity imports textures in the lower of two values: this value, or the Max Size value specified in Texture import settings. The time it takes to import a texture is roughly proportional to the amount of pixels it contains; therefore, reducing maximum allowed texture size can speed up the import times. However, as this setting might result in lower resolution textures, use it only for development. ",214],["Texture Compression Override the texture compression options set in Texture import settings. This only affects textures imported into one of the compressed texture formats. ",214],["**Force Fast Compressor** Use a faster yet lower quality texture compression mode for formats where this is applicable (BC7, BC6H, ASTC, ETC, ETC2). Typically, this results in more compression artifacts, but for many formats the compression itself is many times faster (2 to 20 times faster). <br/><br/> This setting also disables the **Crunch** texture compression format on any textures that have it. <br/><br/> The effect is the same as if all textures had their **Compressor Quality** set to **Fast** setting in their platform's [Texture import settings](class-TextureImporter). \n",214],["**Force Uncompressed** Don't compress the textures; use uncompressed formats instead. Note that while this is faster to import because it skips the whole texture compression process, the resulting textures take up more memory, game data size, and can impact rendering performance. [Texture import settings](class-TextureImporter). <br/><br/> This option has the same effect as all textures that have their **Compression** set to **None** in their platforms' [Texture Import settings](class-TextureImporter). \n",214],["You can also set Asset import override settings using -overrideMaxTextureSize and -overrideTextureCompression Editor Command line arguments to change any initial project import.",214],["Building your Linux application",214],["To build your Linux application, select one of the following:",214],["Build**: Compile a Player. The default build is incremental, except for the first build, which is always a full non-incremental (clean) build. To force a clean build instead of an incremental build, select Clean Build from the dropdown menu.",214],["Build and run**: Compile a Player and open it in your native platform. This option always uses the incremental build.",214],["Additional resources:",214],["Build Settings",215],["Unity can build your application for different platforms and with different settings. This documentation describes how to define the scenes, target platform, and settings for your build.",215],["To select your platform and settings, and start the build process, use the Build Settings window. To access the Build Settings window: from Unity’s main menu, go to File > Build Settings.",215],["Understanding builds",215],["Unity produces two build types:",215],["A release build, which includes only what’s necessary to run the application. This is the default build type.",215],["A development build, which includes scripting debug symbols and the Profiler. Selecting the development build option enables an additional set of options, such as deep profiling support and script debugging. These options are explained in the Generic Platform Settings section.",215],["For faster iteration during development, Unity uses an incremental build pipeline that rebuilds artifacts only if they have changed since the previous build. For more information, see Incremental build pipeline.",215],["Managing scenes in a build",215],["When you build your application, Unity builds all selected scenes in the Scenes In Build pane. Unity builds scenes in the order in which they appear in the list.",215],["You can add, exclude, remove, and reorder scenes in the list:",215],["To add all currently open scenes to the list**: Select Add Open Scenes. You can also drag scenes from your Project window into the list.",215],["To exclude a scene in the list from the build**: Clear the checkbox next to that scene. This removes the scene from the build, but not from the list.",215],["To remove a scene from the list**: Select the scene and press Delete.",215],["To adjust the scene order**: Drag and drop scenes in the list to reorder them.",215],["Platform list",215],["Each build must have a target platform. The Platform pane lists all the platforms you can build for.",215],["Each version of Unity installed on your computer has its own platform list.",215],["If the platform you need is not on the list, do one of the following:",215],["In the Build Settings window:",215],["Select the platform you want to add.",215],["Select Install or Download.",215],["In Unity Hub > Installs:",215],["Select the three dots on the version of Unity you’re using.",215],["Select Add Modules.",215],["Follow the instructions to install the platform module.",215],["To change the build’s target platform:",215],["Select the platform you want to switch to.Tip: The list displays the Unity icon next to the platform currently selected as the target platform.",215],["Select Switch Platforms.If Unity needs to re-import your assets in formats that match your target platform, the switch process can take a long time.",215],["Build settings",215],["When you select a platform, Unity displays a list of options that you can adjust for the build. Some settings apply to all platforms, and some are platform-specific.",215],[" Generic platform settings",215],["The following settings apply to all platforms.",215],["Setting: Function: ",215],["Development Build Include scripting debug symbols and the Profiler in your build. You should use this setting when you want to test your application.When you select this option, Unity sets the DEVELOPMENT_BUILD scripting define. Your build then includes preprocessor directives that set DEVELOPMENT_BUILD as a condition (see Platform-dependent compilations). ",215],["Autoconnect Profiler Automatically connect the Unity Profiler to your build.This option is only available if you selected Development Build. ",215],["Deep Profiling Support Turn on Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application so it returns more detailed profiling data. This option might slow down script execution.This option is only available if you selected Development Build. ",215],["Script Debugging Allow your script code to be debugged.This option is only available if you selected Development Build.This option is not available for WebGL. ",215],["Wait for Managed Debugger Make the Player wait for a debugger to be attached before it executes any script code.This option is only available if you selected Script Debugging. ",215],["IL2CPP Code Generation Define how Unity manages IL2CPP code generation.This option is only available if you are using IL2CPP for your scripting backend, not Mono.To change your scripting backend, go to Player Settings > Configuration > Scripting Backend and change from Mono to IL2CPP. ",215],["Faster runtime Generates code that is optimized for runtime performance. This is the default, and the behavior in previous versions of Unity. ",215],["Faster (smaller) builds Generates code that is optimized for build size and iteration. It generates less code and produces a smaller build, but may have an impact on runtime performance, especially for generic code. You might want to use this option when faster build times are important, such as when iterating on changes. ",215],["Compression Method Compress the data in your Project when you build the Player. This includes Assets, Scenes, Player settings, and GI data.This option is not available for the WebGL platform. ",215],["Default On PC, Mac, Linux Standalone, and iOS, there is no default compression.On Android, the default compression is ZIP, which gives slightly better compression results than LZ4HC. However, ZIP data is slower to decompress. ",215],["LZ4 A fast compression format that is useful for development builds. For more information, see BuildOptions.CompressWithLz4. ",215],["LZ4HC A high compression variant of LZ4 that is slower to build but produces better results for release builds. For more information, see BuildOptions.CompressWithLz4HC. ",215],["",215],["Asset Import Overrides",215],["To speed up import and platform switch time, you can locally override all texture import settings. Usually you would not ship your final build with any import overrides, but during development they can be useful to speed up iteration time, especially if you are not concerned with assets (textures, in this case) looking as good as possible.",215],["To set asset import overrides for initial project imports, use the editor command line arguments -overrideMaxTextureSize and -overrideTextureCompression.",215],["The default value for both override options is No Override.",215],["Setting: Function: ",215],["Max Texture Size Override the maximum imported texture size. Unity imports textures in the lower of two values: this value, or the Max Size value specified in Texture import settings.The time it takes to import a texture is roughly proportional to the number of pixels it contains, so a lower maximum allowed texture size can speed up import times. However, the resulting textures are lower resolution, so use this setting only during development. ",215],["Texture Compression Override the texture compression options set in Texture import settings.Only affects textures imported into one of the compressed texture formats. ",215],["Force Fast Compressor Use a faster but lower quality texture compression mode for formats that support it (BC7, BC6H, ASTC, ETC, ETC2). Usually this results in more compression artifacts, but for many formats the compression itself is 2 to 20 times faster.This setting also disables Crunch texture compression format on any textures that have it.The effect of this setting is the same as if all textures had their Compressor Quality set to Fast setting in their platform’s Texture import settings. ",215],["Force Uncompressed Do not compress the textures; use uncompressed formats instead. This is faster to import (because it skips the texture compression process), but the resulting textures take up more memory and game data size, and can impact rendering performance.The effect of this setting is the same as if all textures had their Compression set to None in their platforms’ Texture import settings. ",215],["Platform-specific settings",215],["Each platform also has specific build settings:",215],["PC, Mac, and Linux Standalone**: See PC, Mac, and Linux build settings.",215],["Universal Windows Platform**: See Universal Windows Platform build settings.",215],["tvOS**: See Building your application for tvOS.",215],["iOS**: See iOS build settings.",215],["Android**: See Android Build Settings.",215],["WebGL**: See Building and Running a WebGL project.",215],["For the Build Settings for closed platform development, see the documentation included in the Unity installer, or consult the Unity Forums.",215],["Building your application",215],["To build your application, select one of the following:",215],["Build**: Compile a Player, then do nothing. The default build is incremental, except for the first build, which is always a full non-incremental (clean) build. To force a clean build instead of an incremental build, select Clean Build from the dropdown menu.",215],["Build and run**: Compile a Player and open it on your target platform (for more information, see the individual platform pages). This option always uses the incremental build.",215],["iOS build settings",216],["Use the iOS Build Settings to configure and build your application for iOS devices. The iOS Build Settings are part of the Build Settings window. To view the iOS Build Settings:",216],["Select File > Build Settings.",216],["From the list of platforms in the Platform pane, select iOS.Note: If iOS is greyed out, follow the steps on iOS environment setup.",216],["If the Build button isn't visible and Build And Run is greyed out, select Switch Platform. The iOS Build Settings now have an effect on the build.",216],["You can configure these settings for your build:",216],["Property Description ",216],[":-------------------- :---------------------- :----------------------- ",216],["Run in Xcode Selects the Xcode version to open your project with. You can choose the Latest version or select a specific version from the drop-down list.If you have a specific Xcode version installed on your machine that doesn't appear in this list, select Other to find the version in the Applications window that appears.If Unity can't find an Xcode installation on your computer, select the Browse button that you can select to locate the Xcode installation directory on your computer, if it exists. This option is visible only when you run Unity on macOS. ",216],["Run in Xcode as Selects whether Xcode runs your Project as a Release or Debug build. ",216],[" **Release** Builds an optimized version of your app. \n",216],[" **Debug** Builds a testing version of your app that contains additional code that helps with debugging. \n",216],["Symlink Sources References Unity libraries instead of copying them into the Xcode project. This option reduces the Xcode project size and makes iteration times faster. ",216],["Development Build Indicates whether to include scripting debug symbols and the Profiler in your build. Use this setting when you want to test your application. When you select this option, Unity sets the DEVELOPMENT_BUILD scripting define. Your build then includes preprocessor directives that set DEVELOPMENT_BUILD as a condition.For more information, see Platform dependent compilation. ",216],["Autoconnect Profiler Automatically connects the Profiler to the build. Only available if you enable the Development Build setting. For more information, see Profiler. This property is visible only when Development Build is enabled. ",216],["Deep Profiling Indicates whether to enable Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application so it returns more detailed profiling data. This option might slow down script execution.This property is visible only when Development Build is enabled. ",216],["Script Debugging Attach script debuggers to the Player remotely. This property is visible only when Development Build is enabled. ",216],["Compression Method Specifies the method Unity uses to compress the data in your Project when it builds the Player. This includes Assets, Scenes, Player settings, and GI data. ",216],[" **Default** The default compression is None. \n",216],[" **LZ4** A fast compression format that's useful for development builds. LZ4 compression can significantly improve the loading time of your application. For more information, see [BuildOptions.CompressWithLz4](ScriptRef:BuildOptions.CompressWithLz4). \n",216],[" **LZ4HC** A high compression variant of LZ4 that's slower to build but produces better results for release builds. LZ4HC compression can significantly improve the loading time of your application. For more information, see [BuildOptions.CompressWithLz4HC](ScriptRef:BuildOptions.CompressWithLz4HC). \n",216],["Using the Built-in Render Pipeline",217],["Unity's Built-in Render Pipeline is Unity's older render pipeline. It is not based on the Scriptable Render Pipeline.",217],["You can configure it by choosing between different rendering paths, and extend its functionality with command buffers and callbacks.",217],["This section contains information on the following subjects:",217],["Rendering order in the Built-in Render Pipeline",218],["In the Built-in Render Pipeline, the order in which Unity renders objects is based on two things: which render queue the object is in, and how Unity sorts objects within that render queue.",218],["Render queues",218],["Unity sorts objects into groups called render queues. Unity renders the contents of one render queue, and then renders the contents of another render queue, and so on.",218],["Unity has the following named render queues, which it renders in the following order:",218],["Name Index Description ",218],["Background 1000 Use this queue for anything that should be drawn in the background of your Scene. ",218],["Geometry 2000 Use this queue for opaque geometry. This is the default queue. ",218],["AlphaTest 2450 Use this queue for alpha tested geometry. This is after the Geometry queue because it's more efficient to render alpha-tested objects after all solid ones are drawn. ",218],["Transparent 3000 Use this queue for anything alpha-blended (shaders that don't write to the depth buffer). Examples include glass, or particle effects. ",218],["Overlay 4000 Use this queue for effects that are rendered on top of everything else, such as lens flares. ",218],["Note that Skybox materials are a special case. Unity draws Skybox materials after all opaque geometry (after queue index 2500), but before all transparent geometry (before queue index 2501).",218],["Setting the render queue",218],["By default, Unity places objects in the render queue specified in their Unity shader. You define this value using the [Queue] SubShader tag.",218],["You can override this value on a per-material basis.",218],["In the Unity Editor, you can do this in the material Inspector by setting the Render Queue property. In a C# script, you can do this by setting the value of Material.renderQueue using the Rendering.RenderQueue enum.",218],["Sorting behaviors within render queues",218],["Within each render queue, Unity sorts and draws objects based on their distance from the camera. The sorting behavior depends on the index of the render queue:",218],["For queues with an index up to and including 2500 (Geometry + 500), Unity sorts Renderers in these queues using the behavior defined in OpaqueSortMode.FrontToBack by default.",218],["For queues with an index of 2501 or above, Unity sorts Renderers in these queues using the behavior defined in TransparencySortMode.Default by default.",218],["Setting the sorting behavior",218],["How you change the sorting behavior within a render queue depends on the index of the render queue:",218],["For queues with an index up to and including 2500 (Geometry + 500), you can change the opaque sort mode for a Camera by using the Camera.opaqueSortMode API.",218],["For queues with an index of 2501 or above, you can change the default transparent sort mode by using the Rendering.GraphicsSettings-transparencySortMode API. You can change the transparent sort mode for a Camera by using the Camera.transparencySortMode API.",218],["Visualizing vertex data",219],["These example shaders for the Built-in Render Pipeline demonstrate different ways of visualizing vertex data.",219],["For information on writing shaders, see Writing shaders.",219],["Visualizing UVs",219],["The following example shader visualizes the first set of UVs of a mesh. This shader is useful for debugging the coordinates.",219],["The code defines a struct called appdata as its vertex shader input. This struct takes the vertex position and the first texture coordinate as its inputs.",219],["Shader \"Debug/UV 1\" {",219],["SubShader {",219],["Pass {",219],["CGPROGRAM",219],["pragma vertex vert",219],["pragma fragment frag",219],["include \"UnityCG.cginc\"",219],["// vertex input: position, UV",219],["struct appdata {",219],["float4 vertex : POSITION;",219],["float4 texcoord : TEXCOORD0;",219],["};",219],["struct v2f {",219],["float4 pos : SV_POSITION;",219],["float4 uv : TEXCOORD0;",219],["};",219],["v2f vert (appdata v) {",219],["v2f o;",219],["o.pos = UnityObjectToClipPos(v.vertex);",219],["o.uv = float4( v.texcoord.xy, 0, 0 );",219],["return o;",219],["half4 frag( v2f i ) : SV_Target {",219],["half4 c = frac( i.uv );",219],["if (any(saturate(i.uv) - i.uv))",219],["c.b = 0.5;",219],["return c;",219],["ENDCG",219],["Here, UV coordinates are visualized as red and green colors, while an additional blue tint has been applied to coordinates outside of the 0 to 1 range:",219],["This variation on the same shader visualizes the second UV set:",219],["Shader \"Debug/UV 2\" {",219],["SubShader {",219],["Pass {",219],["CGPROGRAM",219],["pragma vertex vert",219],["pragma fragment frag",219],["include \"UnityCG.cginc\"",219],["// vertex input: position, second UV",219],["struct appdata {",219],["float4 vertex : POSITION;",219],["float4 texcoord1 : TEXCOORD1;",219],["};",219],["struct v2f {",219],["float4 pos : SV_POSITION;",219],["float4 uv : TEXCOORD0;",219],["};",219],["v2f vert (appdata v) {",219],["v2f o;",219],["o.pos = UnityObjectToClipPos(v.vertex );",219],["o.uv = float4( v.texcoord1.xy, 0, 0 );",219],["return o;",219],["half4 frag( v2f i ) : SV_Target {",219],["half4 c = frac( i.uv );",219],["if (any(saturate(i.uv) - i.uv))",219],["c.b = 0.5;",219],["return c;",219],["ENDCG",219],["Visualizing vertex colors",219],["The following shader uses the vertex position and the per-vertex colors as the vertex shader inputs (defined in structure appdata).",219],["Shader \"Debug/Vertex color\" {",219],["SubShader {",219],["Pass {",219],["CGPROGRAM",219],["pragma vertex vert",219],["pragma fragment frag",219],["include \"UnityCG.cginc\"",219],["// vertex input: position, color",219],["struct appdata {",219],["float4 vertex : POSITION;",219],["fixed4 color : COLOR;",219],["};",219],["struct v2f {",219],["float4 pos : SV_POSITION;",219],["fixed4 color : COLOR;",219],["};",219],["v2f vert (appdata v) {",219],["v2f o;",219],["o.pos = UnityObjectToClipPos(v.vertex );",219],["o.color = v.color;",219],["return o;",219],["fixed4 frag (v2f i) : SV_Target { return i.color; }",219],["ENDCG",219],["Visualizing normals",219],["The following shader uses the vertex position and the normal as the vertex shader inputs (defined in the structure appdata). The normal's X,Y & Z components are visualized as RGB colors. Because the normal components are in the -1 to 1 range, we scale and bias them so that the output colors are displayable in the 0 to 1 range.",219],["Shader \"Debug/Normals\" {",219],["SubShader {",219],["Pass {",219],["CGPROGRAM",219],["pragma vertex vert",219],["pragma fragment frag",219],["include \"UnityCG.cginc\"",219],["// vertex input: position, normal",219],["struct appdata {",219],["float4 vertex : POSITION;",219],["float3 normal : NORMAL;",219],["};",219],["struct v2f {",219],["float4 pos : SV_POSITION;",219],["fixed4 color : COLOR;",219],["};",219],["v2f vert (appdata v) {",219],["v2f o;",219],["o.pos = UnityObjectToClipPos(v.vertex );",219],["o.color.xyz = v.normal * 0.5 + 0.5;",219],["o.color.w = 1.0;",219],["return o;",219],["fixed4 frag (v2f i) : SV_Target { return i.color; }",219],["ENDCG",219],["Visualizing tangents and binormals",219],["Tangent and binormal vectors are used for normal mapping. In Unity only the tangent vector is stored in vertices, and the binormal is derived from the normal and tangent values.",219],["The following shader uses the vertex position and the tangent as vertex shader inputs (defined in structure appdata). Tangent's x,y and z components are visualized as RGB colors. Because the normal components are in the -1 to 1 range, we scale and bias them so that the output colors are in a displayable 0 to 1 range.",219],["Shader \"Debug/Tangents\" {",219],["SubShader {",219],["Pass {",219],["CGPROGRAM",219],["pragma vertex vert",219],["pragma fragment frag",219],["include \"UnityCG.cginc\"",219],["// vertex input: position, tangent",219],["struct appdata {",219],["float4 vertex : POSITION;",219],["float4 tangent : TANGENT;",219],["};",219],["struct v2f {",219],["float4 pos : SV_POSITION;",219],["fixed4 color : COLOR;",219],["};",219],["v2f vert (appdata v) {",219],["v2f o;",219],["o.pos = UnityObjectToClipPos(v.vertex );",219],["o.color = v.tangent * 0.5 + 0.5;",219],["return o;",219],["fixed4 frag (v2f i) : SV_Target { return i.color; }",219],["ENDCG",219],["The following shader visualizes bitangents. It uses the vertex position, normal and tangent values as vertex inputs. The bitangent (sometimes called",219],["binormal) is calculated from the normal and tangent values. It needs to be scaled and biased into a displayable 0 to 1 range.",219],["Shader \"Debug/Bitangents\" {",219],["SubShader {",219],["Pass {",219],["Fog { Mode Off }",219],["CGPROGRAM",219],["pragma vertex vert",219],["pragma fragment frag",219],["include \"UnityCG.cginc\"",219],["// vertex input: position, normal, tangent",219],["struct appdata {",219],["float4 vertex : POSITION;",219],["float3 normal : NORMAL;",219],["float4 tangent : TANGENT;",219],["};",219],["struct v2f {",219],["float4 pos : SV_POSITION;",219],["float4 color : COLOR;",219],["};",219],["v2f vert (appdata v) {",219],["v2f o;",219],["o.pos = UnityObjectToClipPos(v.vertex );",219],["// calculate bitangent",219],["float3 bitangent = cross( v.normal, v.tangent.xyz ) * v.tangent.w;",219],["o.color.xyz = bitangent * 0.5 + 0.5;",219],["o.color.w = 1.0;",219],["return o;",219],["fixed4 frag (v2f i) : SV_Target { return i.color; }",219],["ENDCG",219],["Example shaders for the Built-in Render Pipeline",220],["This section contains example source code for hand-coded custom shaders that are compatible with the Built-in Render Pipeline.",220],["For information on how to write shaders, see Writing shaders. For example custom shaders that are compatible with different render pipelines, see Example custom shaders.",220],["This section contains the following examples:",220],["Built-in Particle System",221],["Unity's Built-in Particle System allows you to create effects for every platform that Unity supports. The Built-in Particle System simulates particle behavior on the CPU which allows for the following main benefits:",221],["\nYou can use C# scripts to interact with a system and the individual particles within it.\n",221],["\nParticle systems can use Unity's underlying physics system and thus interact with Colliders in your Scene.\n",221],["For more information on how to use the Built-in Particle System, see the Particle System component.",221],["Legacy Shaders",222],["Prior to the introduction of the Physically Based Standard Shader, Unity was supplied with more than eighty built-in shaders which each served different purposes. These shaders are still included and available for use in Unity for backwards compatibility but we recommend you use the Standard Shader wherever possible for new projects.",222],["This section begins by explaining how to use the legacy built-in shaders to maximum effect. The remainder of the section details all the available shaders, grouped into related \"families\".",222],["Built-in Importers",223],["Unity supports many asset file types via its collection of built-in importers. Most of these importers are implemented in the Unity Editor's native code, and are named \"native importers\". They provide the import functionality for most of Unity’s basic asset types, such as 3D models, Textures, and audio files.",223],["Built in native importers",223],["Importer File Formats ",223],["AssemblyDefinitionImporter asmdef ",223],["AssemblyDefinitionReferenceImporter asmref ",223],["AudioImporter ogg, aif, aiff, flac, wav, mp3, mod, it, s3m, xm ",223],["ComputeShaderImporter compute ",223],["DefaultImporter rsp, unity ",223],["FBXImporter fbx, mb, ma, max, jas, dae, dxf, obj, c4d, blend, lxo ",223],["IHVImageFormatImporter astc, dds, ktx, pvr ",223],["LocalizationImporter po ",223],["Mesh3DSImporter 3ds ",223],["NativeFormatImporter anim, animset, asset, blendtree, buildreport, colors, controller, cubemap, curves, curvesNormalized, flare, fontsettings, giparams, gradients, guiskin, ht, mask, mat, mesh, mixer, overrideController, particleCurves, particleCurvesSigned, particleDoubleCurves, particleDoubleCurvesSigned, physicMaterial, physicsMaterial2D, playable, preset, renderTexture, shadervariants, spriteatlas, state, statemachine, texture2D, transition, webCamTexture, brush, terrainlayer, signal ",223],["PackageManifestImporter json ",223],["PluginImporter dll, winmd, so, jar, java, kt, aar, suprx, prx, rpl, cpp, cc, c, h, jslib, jspre, bc, a, m, mm, swift, xib, bundle, dylib, config ",223],["PrefabImporter prefab ",223],["RayTracingShaderImporter raytrace ",223],["ShaderImporter cginc, cg, glslinc, hlsl, shader ",223],["SketchUpImporter skp ",223],["SpeedTreeImporter spm, st ",223],["SubstanceImporter .sbsar ",223],["TextScriptImporter txt, html, htm, xml, json, csv, yaml, bytes, fnt, manifest, md, js, boo, rsp ",223],["TextureImporter jpg, jpeg, tif, tiff, tga, gif, png, psd, bmp, iff, pict, pic, pct, exr, hdr ",223],["TrueTypeFontImporter ttf, dfont, otf, ttc ",223],["VideoClipImporter avi, asf, wmv, mov, dv, mp4, m4v, mpg, mpeg, ogv, vp8, webm ",223],["VisualEffectImporter vfx, vfxoperator, vfxblock ",223],["Built-in scripted importers",223],["Scripted importers allow you to write your own custom importers for formats that Unity does not natively support. However, in addition to the built-in native importers listed above, some of Unity’s own built-in importers are themselves implemented as scripted importers. This is because they are implemented in C# in core packages, rather than within the Editor's native code itself. Unity imports scripted importer assets after native importer assets.",223],["Importer File Formats ",223],["StyleSheetImporter .uss ",223],["UIElementsViewImporter .uxml ",223],["Rays from the Camera",224],["In the section Understanding the View Frustum, it was explained that any point in the camera's view corresponds to a line in world space. It is sometimes useful to have a mathematical representation of that line and Unity can provide this in the form of a Ray object. The Ray always corresponds to a point in the view, so the Camera class provides the ScreenPointToRay and ViewportPointToRay functions. The difference between the two is that ScreenPointToRay expects the point to be provided as a pixel coordinate, while ViewportPointToRay takes normalized coordinates in the range 0..1 (where 0 represents the bottom or left and 1 represents the top or right of the view). Each of these functions returns a Ray which consists of a point of origin and a vector which shows the direction of the line from that origin. The Ray originates from the near clipping plane rather than the Camera's transform.position point.",224],["Raycasting",224],["The most common use of a Ray from the camera is to perform a raycast out into the scene. A raycast sends an imaginary \"laser beam\" along the ray from its origin until it hits a collider in the scene. Information is then returned about the object and the point that was hit in a RaycastHit object. This is a very useful way to locate an object based on its onscreen image. For example, the object at the mouse position can be determined with the following code:",224],["using UnityEngine;",224],["using System.Collections;",224],["public class ExampleScript : MonoBehaviour {",224],["public Camera camera;",224],["void Start(){",224],["RaycastHit hit;",224],["Ray ray = camera.ScreenPointToRay(Input.mousePosition);",224],["if (Physics.Raycast(ray, out hit)) {",224],["Transform objectHit = hit.transform;",224],["// Do something with the object that was hit by the raycast.",224],["Moving the Camera Along a Ray",224],["It is sometimes useful to get a ray corresponding to a screen position and then move the camera along that ray. For example, you may want to allow the user to select an object with the mouse and then zoom in on it while keeping it \"pinned\" to the same screen position under the mouse (this might be useful when the camera is looking at a tactical map, for example). The code to do this is fairly straightforward:",224],["using UnityEngine;",224],["using System.Collections;",224],["public class ExampleScript : MonoBehaviour {",224],["public bool zooming;",224],["public float zoomSpeed;",224],["public Camera camera;",224],["void Update() {",224],["if (zooming) {",224],["Ray ray = camera.ScreenPointToRay(Input.mousePosition);",224],["float zoomDistance = zoomSpeed * Input.GetAxis(\"Vertical\") * Time.deltaTime;",224],["camera.transform.Translate(ray.direction * zoomDistance, Space.World);",224],["Cameras",225],["Just as cameras are used in films to display the story to the audience, Cameras in Unity are used to display the game world to the player. You will always have at least one camera in a scene, but you can have more than one. Multiple cameras can give you a two-player splitscreen or create advanced custom effects. You can animate cameras, or control them with physics. Practically anything you can imagine is possible with cameras, and you can use typical or unique cameras to fit your game's style.",225],["For further information on how Cameras work, see the Cameras page in the Graphics Overview section.",225],["For further information about the Camera Component, see the Camera Component reference page.",225],["Cameras",226],["A Unity scene represents GameObjects in a three-dimensional space. Since the viewer's screen is two-dimensional, Unity needs to capture a view and \"flatten\" it for display. It does this using cameras. In Unity, you create a camera by adding a Camera component to a GameObject.",226],["Defining what a camera sees",226],["What a camera sees is defined by its transform and its Camera component. The transform position defines the viewpoint, its forward (Z) axis defines the view direction, and its and upward (Y) axis defines the top of the screen. Settings on the Camera component define the size and shape of the region that falls within the view. With these parameters set up, the camera can display what it currently \"sees\" to the screen. As the GameObject moves and rotates, the displayed view moves and rotates accordingly.",226],["Perspective and orthographic cameras",226],["A camera in the real world, or indeed a human eye, sees the world in a way that makes objects look smaller the farther they are from the point of view. This well-known perspective effect is widely used in art and computer graphics and is important for creating a realistic scene. Naturally, Unity supports perspective cameras, but for some purposes, you want to render the view without this effect. For example, you might want to create a map or information display that is not supposed to appear exactly like a real-world object. A camera that does not diminish the size of objects with distance is referred to as orthographic and Unity cameras also have an option for this. The perspective and orthographic modes of viewing a scene are known as camera projections. (scene above from BITGEM)",226],["The shape of the viewed region",226],["Both perspective and orthographic cameras have a limit on how far they can \"see\" from their current position. The limit is defined by a plane that is perpendicular to the camera's forward (Z) direction. This is known as the far clipping plane since objects at a greater distance from the camera are \"clipped\" (ie, excluded from rendering). There is also a corresponding near clipping plane close to the camera - the viewable range of distance is that between the two planes.",226],["Without perspective, objects appear the same size regardless of their distance. This means that the viewing volume of an orthographic camera is defined by a rectangular box extending between the two clipping planes.",226],["When perspective is used, objects appear to diminish in size as the distance from camera increases. This means that the width and height of the viewable part of the scene grows with increasing distance. The viewing volume of a perspective camera, then, is not a box but a pyramidal shape with the apex at the camera's position and the base at the far clipping plane. The shape is not exactly a pyramid, however, because the top is cut off by the near clipping plane; this kind of truncated pyramid shape is known as a frustum. Since its height is not constant, the frustum is defined by the ratio of its width to its height (known as the aspect ratio) and the angle between the top and bottom at the apex (known as the field of view or FOV). See the page about understanding the view frustum for a more detailed explanation.",226],["The background to the camera view",226],["You can set what a camera does with the background you see in the empty areas between objects, before it renders the scene.",226],["For example, you can choose to fill the background with a flat color before rendering the scene on top of it, or draw the sky or a distant background, or even leave the contents of the previous frame there. For information on configuring this setting, see the Background property in the Camera Inspector reference. For information on drawing sky, see Sky.",226],["Camera Tricks",227],["It is useful to understand how the camera works when designing certain visual effects or interactions with objects in the scene. This section explains the nature of the camera's view and how it can enhance gameplay.",227],["This section contains information on the following subjects:",227],["\nUnderstanding the View Frustum\n",227],["\nThe Size of the Frustum at a Given Distance from the Camera\n",227],["\nRays from the Camera\n",227],["\nUsing an oblique Frustum\n",227],["Character control",228],["In a first-person or third-person application, a user’s character or avatar usually needs some collision-based physics, so that it doesn’t fall through the floor or walk through walls. In 3D physics, you can create and configure character physics and control with a Character Controller.",228],["You can configure character control via the CharacterController class, or the corresponding Character Controller component.",228],["Topic Description ",228],[":-------------------- :----------------------- ",228],["Introduction to character control Overview of the concepts and fundamental behaviours of character controllers. ",228],["Character Controller component reference Reference page for the Character Controller component. ",228],["3D Characters and Animation feature set",229],["Animate characters and create cutscenes with the 3D Characters and Animation feature set.",229],["Build interactive character rigs and constraints to animate characters and GameObjects.",229],["Arrange tracks and clips to create gameplay sequences, cutscenes, or movies.",229],["Orchestrate, shoot, and record beautiful narratives for cutscenes or movies.",229],["Easily round-trip to your 3D modeling software.",229],["Packages",229],["The 3D Characters and Animation feature set contains the following packages:",229],["Related forums",229],["Public roadmap",229],["Find out about upcoming features in the Characters and Animation roadmap.",229],["Introduction to character control",230],["The character in a first- or third-person game usually needs some collision-based physics so that it doesn't fall through the floor or walk through walls. In many applications, the character's acceleration and movement are intentionally not physically realistic, so that the character can accelerate, brake and change direction almost instantly and without being affected by momentum.",230],["In 3D physics, this type of behaviour can be created using a Character Controller. This component gives the character a simple, capsule-shaped collider that is always upright. The controller has its own special functions to set the object's speed and direction but unlike true colliders, a rigidbody is not needed and the momentum effects are not realistic.",230],["A character controller cannot walk through static colliders in a scene, and so will follow floors and be obstructed by walls. It can push rigidbody objects aside while moving but will not be accelerated by incoming collisions. This means that you can use the standard 3D colliders to create a scene around which the controller will walk but you are not limited by realistic physical behaviour on the character itself.",230],["You can find out more about character controllers on the reference page.",230],["Choose a lighting setup",231],["The following flowchart provides a high-level perspective of the entire lighting pipeline in Unity, from the point of view of a content creator.",231],["You start by selecting a render pipeline. Then you decide how the indirect lighting is generated and pick a Global Illumination system accordingly. After you’ve made sure all the global lighting settings are tuned appropriately for your project, you can continue adding Lights, Emissive Surfaces, Reflection Probes, Light Probes, and Light Probe Proxy Volumes (LPPVs). Detailing the usage and features of all these lighting objects is beyond the scope of this article, therefore I encourage you to read the Lighting section of the manual to learn how to utilize them correctly in your projects.",231],["Global Illumination systems",231],["The Global Illumination systems available in Unity are:",231],["Realtime Global Illumination: This system builds upon Enlighten, a third-party middleware solution. It enables you to adjust your lighting in real-time if you do a precompute and do not modify GameObjects in your scene with the ContributeGI setting enabled.",231],["Baked Global Illumination: When you select this system, Unity uses the Progressive Lightmapper (CPU or GPU) to bake lighting data into Light Probes, textures called lightmaps, and Reflection Probes.",231],["The Progressive Lightmapper calculates indirect lighting values using path tracing. It can prioritize precomputing lighting that affects objects visible to the scene view camera. Although only updating lighting for parts of lightmaps increases the overall bake time, it also enables you to more quickly iterate on your lighting design.",231],["See the Render Pipeline Feature Comparison for compatibility information specific to scriptable render pipelines. Unless the comparison matrix specifies otherwise, the Built-In Render Pipeline supports all features this article describes.",231],["Static versus Dynamic",231],["No matter which Global Illumination system you use, Unity will only consider objects that are marked as “Contribute GI” during the baking/precomputing of the lighting. Dynamic (i.e. non-static) objects have to rely on the Light Probes you placed throughout the scene to receive indirect lighting.",231],["Because the baking/precomputing of the lighting is a relatively slow process, only large and complex assets with distinct lighting variations, such as concavity and self-shadowing, should be tagged as “Contribute GI”. Smaller and convex meshes that receive homogeneous lighting should not be marked as such, and they should, therefore, receive indirect lighting from the Light Probes which store a simpler approximation of the lighting. Larger dynamic objects can rely on LPPVs, in order to receive better localized indirect lighting. Limiting the number of objects tagged as “Contribute GI” in your scene is absolutely crucial to minimize baking times while maintaining an adequate lighting quality. You can learn more about this optimization process and the importance of Probe lighting in this tutorial.",231],["Warning",231],["The Unity Editor and Player allow you to use both Enlighten Realtime Global Illumination and baked lighting at the same time.",231],["However, simultaneously enabling these features greatly increases baking time and memory usage at runtime, because they do not use the same data sets. You can expect visual differences between indirect light you have baked and indirect light provided by Enlighten Realtime Global Illumination, regardless of the lightmapper you use for baking. This is because Enlighten Realtime Global Illumination often operates at a significantly different resolution than Unity's baking backends, and relies on different techniques to simulate indirect lighting.",231],["If you wish to use both Enlighten Realtime Global Illumination and baked lighting at the same time, limit your simultaneous use of both global illumination systems to high-end platforms and/or to projects that have tightly controlled scenes with predictable costs. Only expert users who have a very good understanding of all lighting settings can effectively use this approach. Consequently, picking one of the two global illumination systems is usually a safer strategy for most projects. Using both systems is rarely recommended.",231],["Light Modes",231],["The Mode property of a Light component is a common source of confusion.",231],["There are three Light Modes available in the Light Inspector:",231],["Baked: The direct and indirect lighting from these lights is baked into lightmaps, which can be a time-consuming process. There is no runtime cost to process these lights, however applying the resulting lightmaps to the scene does have a minor cost.",231],["Realtime: The direct lighting and shadows from these lights are real-time and therefore not baked into lightmaps. Their runtime cost can be high, depending on the complexity of the scene, the number of shadow casting lights, the number of overlapping lights, etc. Furthermore, if you enable Enlighten Realtime Global Illumination, further performance costs will be incurred to update the indirect lighting at runtime.",231],["Mixed: This is a hybrid mode that offers a mix of baked and real-time features, such as baked indirect lighting and real-time direct lighting. The behavior of all Mixed lights in your Scene and their performance impact depends on the Lighting Mode for that Scene.",231],["It is important to note that the mode of a light is only relevant if the Baked Global Illumination system is enabled. If you do not use any global illumination system or only use Enlighten Realtime Global Illumination system, then all Baked and Mixed lights will behave as though their Mode property was set to Realtime.",231],["The following diagram combines a decision flowchart with a comparison table; it can help you decide which light mode is appropriate every time a new light is added into the scene.",231],["Lighting Modes",231],["As you can see in the previous diagram, all Mixed Lights in a Scene have specific baked and real-time capabilities, depending on the Lighting Mode that you picked in the Lighting window.",231],["There are three modes to choose from:",231],["Subtractive",231],["Baked Indirect",231],["Shadowmask",231],["Shadowmask Lighting Mode has two quality settings:",231],["Shadowmask",231],["Distance Shadowmask",231],["When using HDRP’s Shadowmask Lighting Mode, the Shadowmask feature is enabled in the HDRP Asset assigned in the Graphics settings; it then has to be activated specifically for your camera(s) via the Frame Settings.",231],["Lighting scenarios",231],["Now that we have introduced the render pipelines and the main lighting features, let’s have a look at a few examples of projects and see which settings could be used to light them. Since every project is unique, you might use slightly different options based on your requirements.",231],["Prototype or quick previsualization",231],["If you rely heavily on the Asset Store to build your prototype, the Built-In Render Pipeline could be the only suitable render pipeline, as most assets found on the Store are not fully compatible with HDRP and URP; nonetheless, asset compatibility will improve over time. If you are building all the assets from the ground up and already have a clear idea of your project’s requirements, then you could pick one of the two SRPs (i.e. URP or HDRP) or even create a custom one.",231],["When you are in the early stage of (pre-)production and need a quick turnaround and maximum flexibility for the lighting, you might prefer a full real-time approach that does not require any precomputation, therefore you might want to turn off both Baked Global Illumination and Enlighten Realtime Global Illumination. To alleviate the lack of proper indirect lighting, you can enable Screen Space Ambient Occlusion: it can help ground the object in the scene by offering cheap real-time contact shadows.",231],["3D Mobile strategy game",231],["If you are targeting mobile devices, URP could be a great candidate to ensure solid performance for your game. It is in many cases possible to customise URP to suit your game's specific needs, with help from a graphics programmer.",231],["The Built-In Render Pipeline and URP both support Shadowmask Lighting Mode which makes it possible for you to bake shadows for static objects while still enabling dynamic objects to cast real-time shadows. If Shadowmasks are too expensive for your project, you can fall back to the cheapest Subtractive mode. Finally, the forward rendering path is probably the best option if you have a very small number of lights in your level(s), and if you’re targeting older hardware.",231],["AAA corridor shooter (fixed time of day)",231],["If you are aiming for AAA-quality visuals on PC and consoles for your linear first-person shooter, HDRP should be the preferred render pipeline. Again, with the help of graphics programmers, a custom SRP could also be developed.",231],["If your levels contain many real-time shadow casting lights (e.g. destructible light props and moving lights), then using the Baked Global Illumination system with the Baked Indirect mode should ensure you get great looking indirect lighting from the Mixed directional light and the Baked lights in static light props. If your levels consist of a larger proportion of fixed shadow casting lights, then an approach with Shadowmasks could be recommended because HDRP offers a great hybrid Shadowmask mode which gives you more control over the blend between real-time and baked shadows.",231],["If you also plan to support the Nintendo Switch, then using URP would be recommended, so that you can support most gaming platforms on the market and not having to go through the potentially tedious process of porting your project from HDRP to URP, or vice versa.",231],["Battle Royale (day-night cycle)",231],["If you plan to release a battle royale game for PC and consoles, that features large-scale environments and fully dynamic lighting, you should select HDRP, or extend it to tailor the rendering pipeline to your project. You could consider URP if you are not aiming for AAA visual fidelity and are targeting mobile devices or systems with lower specifications.",231],["For this particular scenario, if you are using the Built-in Render Pipeline, activating both the Enlighten Realtime Global Illumination and a Baked Global Illumination system is not recommended, because the resulting overhead in terms of performance and scene management for an immense level could be problematic. Another argument against the use of both global illumination systems is the unpredictable nature of such large-scale multiplayer games: performance estimations are for instance more difficult than in a highly-scripted linear level.",231],["Final words",231],["The rendering landscape has changed radically in Unity over the past few years, thanks to the introduction of the Scriptable Render Pipelines. Therefore, keeping up with all these changes and their implications for the lighting pipeline can be exhausting.",231],["Hopefully, this guide and its many illustrations have given you a better understanding of the capabilities of each Render Pipeline so that you can confidently start your projects in Unity with the appropriate rendering and lighting settings!",231],["You can learn more about the lighting in Unity and the rendering pipelines with the following pages:",231],["\nURP documentation & HDRP documentation\n",231],["\nUse the Unity Hub to get started with HDRP, URP or Built-In RP\n",231],["\nIntroduction to Lighting and Rendering tutorial\n",231],["\nCreating Believable Visuals tutorial (Built-In RP)\n",231],["\nSet up HDRP for high-end visualizations\n",231],["\nCreate high-quality light fixtures in Unity\n",231],["Choose a render pipeline",232],["It's important to choose the right Unity render pipeline for your project when you're early in development.",232],["Different render pipelines have different capabilities and perform differently, so they work best for different games, applications, and platforms.",232],["It can be very time-consuming to switch a project from one render pipeline to another, especially if the project is far along in development. Different render pipelines use different shaders and might not have the same features.",232],["The table shows some high-level differences between the pipelines to help you choose the right pipeline for your project at the start.",232],["",232],["",232],["",232],["",232],["Feature",232],["Built-In Render Pipeline",232],["Universal Render Pipeline (URP)",232],["High Definition Render Pipeline (HDRP)",232],["",232],["",232],["",232],["Target uses",232],["Projects that need rendering scalability across all platforms.2D and 3D projects.",232],["Projects that need rendering scalability across all platforms, especially tile-based deferred rendering (TBDR) platforms, and untethered VR platforms.Projects that need to extend and customize the rendering pipeline.2D and 3D projects.",232],["Projects that need photorealism and high-fidelity rendering on high-end platforms3D projects",232],["",232],["",232],["Platform support",232],["Supports all Unity-supported platforms ",232],["Supports all Unity-supported platformsFocuses on efficiency on tile-based deferred rendering (TBDR) platforms, and untethered VR platforms",232],["Supports desktop, Xbox and PlayStation platformsFocuses on efficiently using advanced GPU hardware capabilities such as async compute shaders, and ray tracing if the hardware supports it. ",232],["",232],["",232],["Source code access",232],["Mostly C++ Private access by purchasing source code access",232],["Mostly C# Public access to the URP source code on GitHub. You can also create a custom pipeline using URP as a baseEasier to read, change, and extend the source code than the Built-In Render Pipeline",232],["Mostly C# Public access to the HDRP source code on GitHub. You can also create a custom pipeline using HDRP as a baseEasier to read, change, and extend the source code than the Built-In Render Pipeline",232],["",232],["",232],["Pipeline extension",232],["The API and injection points the pipeline provides ",232],["The API and injection points the pipeline provides, or you can modify the publicly available source codeEasier to extend than the Built-In Render Pipeline",232],["The API and injection points the pipeline provides, or you can modify the publicly available source codeEasier to extend than the Built-In Render Pipeline, but more difficult than URP because HDRP is complex and has advanced features",232],["",232],["",232],["Customization through artist tooling",232],["Shader Graph, which you can use to customize shading, materials, and screen space effectsShader Graph doesn't receive updates for Built-In Render Pipeline support, aside from bug fixes for existing features Built-in Particle System, which you can use to customize visual effects. Limited customization",232],["Shader Graph, which you can use to customize shading, materials, and screen space effects Built-in Particle System, which you can use to customize visual effects.Limited customization VFX Graph, which you can use to design visual effects, from simple common particle behaviors to complex simulations running on the GPU. ",232],["Shader Graph, which you can use to customize shading, materials, and screen space effects Built-in Particle System, which you can use to customize visual effects. Limited customizationVFX Graph, which you can use to design visual effects, from simple common particle behaviors to complex simulations running on the GPU. ",232],["",232],["",232],["Customization through hand-coded shaders ",232],["HLSL shaders and surface shaders",232],["HLSL shaders, and URP shaders in the source code that you can customize",232],["HLSL shaders, and HDRP shaders in the source code that you can customizeHand-coded shaders are recommended for advanced users only, because HDRP shaders are complex and have advanced features",232],["",232],["",232],["Lighting",232],["Designed for both realistic and stylized lightingBasic physically-based rendering (PBR)Easier to customize for custom lighting models such as cel shading",232],["Designed for both realistic and stylized lightingBasic PBR, and some advanced PBR such as clear coatEasier to customize for custom lighting models such as cel shading",232],["Focuses on photorealism and physically accurate lighting with built-in support for physical light unitsBasic and advanced PBR. For example clear coat, skin, hair, eyes, subsurface scattering and waterAdvanced screen space and volumetric effectsHarder to customize for custom lighting models such as cel shading",232],["",232],["",232],["Performance",232],["Supports static batching and dynamic batching",232],["Supports static batching and dynamic batching Advanced draw call batching with the Scriptable Render Pipeline (SRP) Batcher Compatible with the BatchRenderer Group API, and Entities",232],["Supports static batchingAdvanced draw call batching with the Scriptable Render Pipeline (SRP) Batcher Compatible with the BatchRenderer Group API, and Entities",232],["",232],["",232],["",232],["Refer to Render pipeline feature comparison for detailed information about which pipeline is compatible with which features, to help you choose the right pipeline for your project.",232],["Set up a render pipeline",232],["To create a new project with one of the render pipelines, use the Unity Hub. Refer to Manage your templates for more information.",232],["To convert a project from the Built-In Render Pipeline to URP or HDRP, refer to the following:",232],["\nURP Render Pipeline Converter\n",232],["\nHDRP Pipeline Wizard\n",232],["After you choose a rendering pipeline, you can Choose a lighting setup.",232],["Extend a render pipeline",232],["If you have advanced rendering knowledge and you're familiar with C#, you can extend URP or HDRP to add custom features. Refer to Create a custom render pipeline for more information.",232],["Additional resources",232],["\nCreating Believable Visuals tutorial for the Built-In Render Pipeline\n",232],["\nMove on over to the Universal Render Pipeline with our advanced guide\n",232],["\nHow to set up Unity's High Definition Render Pipeline for high-end visualizations\n",232],["Choosing your particle system solution",233],["To provide flexibility when you author a particle system, Unity offers two solutions to choose from. If your Project targets platforms that support Compute Shaders, Unity allows you to use both at the same time. The two particle system solutions are:",233],["\nThe Built-in Particle System: A solution that gives you full read/write access to the system, and the particles it contains, from C# scripts. You can use the Particle System API to create custom behaviors for your particle system.\n",233],["\nThe Visual Effect Graph: A solution that can run on the GPU to simulate millions of particles and create large-scale visual effects. The Visual Effect Graph also includes a visual graph editor to help you author highly customizable visual effects.\n",233],["The following table shows a high-level comparison of the two particle system solutions. For more information about either solution, see Built-in Particle System or Visual Effect Graph.",233],["Feature Built-in Particle System Visual Effect Graph ",233],["--------------------------------- ------------------------------------------------------------ ------------------------------------------------------------ ",233],["Render Pipeline compatibility Built-in Render Pipeline, Universal Render Pipeline, High Definition Render Pipeline Universal Render Pipeline, High Definition Render Pipeline ",233],["Feasible number of particles Thousands Millions ",233],["Particle system authoring Simple modular authoring process that uses the Particle System component in the Inspector. Each module represents a predefined behavior for the particle. Highly customizable authoring process that uses a graph view. ",233],["Physics Particles can interact with Unity's underlying physics system. Particles can interact with specific elements that you define in the Visual Effect Graph. For example, particles can interact with the depth buffer. ",233],["Script interaction You can use C# scripts to fully customize the Particle System at runtime. You can read from and write to each particle in a system, and respond to collision events. The Particle System component also provides playback control API. This means that you can use scripts to play and pause the effect, and simulate the effect with custom step sizes. You can expose graph properties and access them through C# scripts to customize instances of the effect. You can also use the Event Interface to send custom events with attached data that the graph can process. The Visual Effect component also provides playback control API. This means that you can use scripts to play and pause the effect, and simulate the effect with custom step sizes. ",233],["Frame buffers No In the High Definition Render Pipeline, provides access to the color and depth buffer. For example, you can sample the color buffer and use the result to set particle color, or you can use the depth buffer to simulate collisions. ",233],["Cinematic Studio feature set",234],["Enable the creation of films, TV shows, and other animated linear content:",234],["Organize, assemble, edit and swap your assets in a structured sequence hierarchy.",234],["Automate complex camera movements and camera shot transitions.",234],["Export data for round-trip processing and editorial reviews, and output your final cut.",234],["Work with common film industry formats.",234],["Packages",234],["The Cinematic Studio feature set contains the following packages:",234],["Samples",234],["Asset Store",234],["Related forums",234],["Aim Constraints",235],["An Aim Constraint rotates a GameObject to face its source GameObjects. It can also maintain a consistent orientation for another axis. For example, you can add an Aim Constraint to a Camera. To keep the Camera upright while the Constraint aims it, specify the up axis of the Camera and an up direction to align it to.",235],["Use the Up Vector to specify the up axis of a constrained GameObject. Use the World Up Vector to specify the upward direction. As the Aim Constraint rotates the GameObject to face its source GameObjects, the Constraint also aligns the up axis of the constrained GameObject with the upward direction.",235],["Properties",235],["Property: Function: ",235],["Activate After you rotate the constrained GameObject and move its source GameObjects, click Activate to save this information. Activate saves the current offset from the source GameObjects in Rotation At Rest and Rotation Offset, then checks Is Active and Lock. ",235],["Zero Sets the rotation of the constrained GameObject to the source GameObjects. Zero resets the Rotation At Rest and Rotation Offset fields, then checks Is Active and Lock. ",235],["Is Active Toggles whether or not to evaluate the Constraint. To also apply the Constraint, make sure Lock is checked. ",235],["Weight The strength of the Constraint. A weight of 1 causes the Constraint to rotate the GameObject at the same rate that its source GameObjects move. A weight of 0 removes the effect of the Constraint completely. This weight affects all source GameObjects. Each GameObject in the Sources list also has a weight. ",235],["Aim Vector Specifies the axis which faces the direction of its source GameObjects. For example, to specify that the GameObject should orient only its positive Z axis to face the source GameObjects, enter an Aim Vector of 0, 0, 1 for the X, Y, and Z axes, respectively. ",235],["Up Vector Specifies the up axis of this GameObject. For example, to specify that the GameObject should always keep its positive Y axis pointing upward, enter an Up Vector of 0, 1, 0 for the X, Y, and Z axes, respectively. ",235],["World Up Type Specifies the axis for the upward direction. The Aim Constraint uses this vector to align the up axis of the GameObject the upward direction. ",235],["Scene Up The Y axis of the scene. ",235],["Object Up The Y axis of the GameObject referred to by World Up Object. ",235],["Object Up Rotation The axis specified by World Up Vector of the GameObject referred to by World Up Object. ",235],["Vector The World Up Vector. ",235],["None Do not use a World Up vector. ",235],["World Up Vector Specifies the vector to use for the Object Up Rotation and Vector choices in World Up Type. ",235],["World Up Object Specifies the GameObject to use for the Object Up and Object Up Rotation choices in World Up Type. ",235],["Constraint Settings ",235],["Lock Enable this setting to let the Constraint rotate the GameObject. Uncheck this property to edit the rotation of this GameObject. You can also edit the Rotation At Rest and Rotation Offset properties. If Is Active is checked, the Constraint updates the Rotation At Rest or Rotation Offset properties for you as you rotate the GameObject or its source GameObjects. When you are satisfied with your changes, check Lock to let the Constraint control this GameObject. This property has no effect in Play Mode. ",235],["Rotation At Rest The X, Y, and Z values to use when Weight is 0 or when the corresponding Freeze Rotation Axes are not checked. To edit these fields, uncheck Lock. ",235],["Rotation Offset The X, Y, and Z offset from the rotation that is calculated by the Constraint. To edit these fields, uncheck Lock. ",235],["Freeze Rotation Axes Check X, Y, or Z to allow the Constraint to control the corresponding axes. Uncheck an axis to stop the Constraint from controlling it. This allows you to edit, animate, or script the unfrozen axis. ",235],["Sources The list of GameObjects that constrain this GameObject. Unity evaluates source GameObjects in the order that they appear in this list. This order affects how this Constraint rotates the constrained GameObject. To get the result you want, drag and drop items in this list. Each source has a weight from 0 to 1. ",235],["AimConstraint",235],["Animation",236],["This is the Legacy Animation component, which was used on GameObjects for animation purposes prior to the introduction of Unity's current animation system.",236],["This component is retained in Unity for backwards-compatibility only. For new projects, please use the Animator component.",236],["Properties",236],["Property: Function: ",236],["Animation The default animation to play when Play Automatically is enabled. ",236],["Animations A list of animations that you can access from scripts. ",236],["Play Automatically Enable this option to play animation automatically when the game starts. ",236],["Animate Physics Enable this option to have the animation interact with Physics. ",236],["Culling Type Determine when not to play the animation. ",236],["Always Animate Always animate. ",236],["Based on Renderers Cull based on the default animation pose. ",236],["See the Animation Window Guide for more information on how to create animations inside Unity.",236],["See Model import workflows page on how to import animated characters.",236],["Animation",236],["Animation tab",237],["Animation Clips are the smallest building blocks of animation in Unity. They represent an isolated piece of motion, such as RunLeft, Jump, or Crawl, and can be manipulated and combined in various ways to produce lively end results (see Animation State Machines, Animator Controller, or Blend Trees).",237],["You can select Animation Clips from imported FBX data.",237],["When you click on the model containing animation clips, these properties appear:",237],["There are five areas on the Animation tab of the Inspector window:",237],["(A)** Asset-specific properties. These settings define import options for the entire Asset.",237],["(B)** Clip selection list. You can select any item from this list to display its properties and preview its animation. You can also define new clips.",237],["(C)** Clip-specific properties. These settings define import options for the selected Animation Clip.",237],["(D)** Clip properties. These settings define import options for all Animation clips.",237],["(E)** Animation preview. You can playback the animation and select specific frames here.",237],["",237],["Asset-specific properties",237],["These properties apply to all animation clips and constraints defined within this Asset:",237],["Property: Function: ",237],["Import Constraints Import constraints from this asset. ",237],["Import Animation Import animation from this asset. Note: If disabled, all other options on this page are hidden and no animation is imported. ",237],["Bake Animations Bake animations created using IK or Simulation to forward kinematic keyframes. Only available for Autodesk® Maya®, Autodesk® 3ds Max® and Cinema 4D files. ",237],["Resample Curves Resample animation curves as Quaternion values and generate a new Quaternion keyframe for every frame in the animation. This option only appears if the import file contains Euler curves. This option is enabled by default.Disable this option to keep animation curves as they were originally authored. You should only disable this option if there are interpolation issues in the resampled animation when compared with your original animation. ",237],["Anim. Compression The type of compression to use when importing the animation. ",237],["Off Disable animation compression. This means that Unity doesn't reduce keyframe count on import. Disabling animation compression leads to the highest precision animations, but slower performance and bigger file and runtime memory size. It is generally not advisable to use this option - if you need higher precision animation, you should enable keyframe reduction and lower allowed Animation Compression Error values instead. ",237],["Keyframe Reduction Reduce redundant keyframes on import. If enabled, the Inspector displays Animation Compression Errors options. This affects both file size (runtime memory) and how curves are evaluated.Applies to Legacy, Generic, and Humanoid Animation Type rigs. ",237],["Keyframe Reduction and Compression Reduce keyframes on import and compress keyframes when storing animations in files. This affects only file size: the runtime memory size is the same as Keyframe Reduction. If enabled, the Inspector displays Animation Compression Errors options.Only for Legacy Animation Type rigs. ",237],["Optimal Let Unity decide how to compress, either by keyframe reduction or by using dense format. If enabled, the Inspector displays Animation Compression Errors options.Only for Generic and Humanoid Animation Type rigs. ",237],["Animation Compression Errors Only available when Keyframe Reduction or Optimal compression is enabled. ",237],["Rotation Error Set the error tolerance (as an angle in degrees) for rotation curve compression. Unity uses this to determine whether or not it can remove a key on a rotation curve. This represents the minimum angle between the original rotation value and the reduced value:Angle(value, reduced) < RotationError ",237],["Position Error Set the error tolerance (as a percentage) for position curve compression. Unity uses this to determine whether or not it can remove a key on a position curve. For more information, see Setting error tolerance for key reduction on position and scale curves. ",237],["Scale Error Set the error tolerance (as a percentage) for scale curve compression. Unity uses this to determine whether or not it can remove a key on a scale curve. For more information, see Setting error tolerance for key reduction on position and scale curves. ",237],["Animated Custom Properties Import any FBX properties that you designated as custom user properties. Unity only supports a small subset of properties when importing FBX files (such as translation, rotation, scale and visibility). However, you can treat standard FBX properties like user properties by naming them in your importer script via the extraUserProperties member. During import, Unity then passes any named properties to the Asset postprocessor just like 'real' user properties. ",237],[" ",237],["Setting error tolerance for key reduction on position and scale curves",237],["Set the error tolerance percentage to determine whether or not Unity can remove a key on a position or scale curve as a strategy for animation compression.",237],["When you set the Anim. Compression property to \"Keyframe Reduction\" or \"Optimal\", Unity compares the original curve to what the curve looks like after removing a specific keyframe and applies this test:",237],["OriginalValue - ReducedValue > OriginalValue * percentageOfError",237],["Unity removes a keyframe if the delta between the original value and the reduced value is less than the original value multiplied by the error tolerance percentage.",237],["Note that the Unity compares the distances between the three curve components (that is, it compares distance(x,y,z) ), and also per component ( distance(x), distance(y), and then distance(z) ).",237],["This example demonstrates how Unity evaluates a reduction on the y-axis using an error tolerance of 10%:",237],["Keyframe A has a value of 11.2:",237],["Keyframe B has a value of 11.1:",237],["The resulting reduced curve looks like this:",237],["Keyframe A is not reduced** because:",237],["The distance between the original and reduced value is D = 11.2 - 10 = 1.2.",237],["The error margin is E = 10% * 11.2 = 1.12",237],["D > E**",237],["Keyframe B is reduced** because 11.1 - 10 < 10% * 11.1:",237],["The distance between the original and reduced value is D = 11.1 - 10 = 1.11",237],["The error margin is E = 10% * 11.1 = 1.11",237],["D = E**",237],["Note that this method has a limitation when using high values that vary only slightly. Moving the Scene 1000 units away results in essentially the same animation but located far from 0.",237],["In this case, both keyframes are reduced.",237],["Keyframe A is reduced** because:",237],["The distance between the original and reduced value is D = 1011.2 - 1010 = 1.2",237],["The error margin is E = 10% * 1011.2 = 101.12",237],["Keyframe B is reduced** because 11.1 - 10 < 10% * 11.1:",237],["The distance between the original and reduced value is D = 11.1 - 10 = 1.11",237],["The error margin is E = 10% * 1011.1 = 101.11",237],["Higher values require a much larger difference between the original and reduced values for keyframes to remain in the reduced curve. Keyframe A has a value of 1100 and is discarded; keyframe B has a value of 1112 and remains:",237],[" ",237],["Clip selection list",237],["You can perform these tasks in this area of the Animation tab:",237],["Select a clip from the list to display its clip-specific properties.",237],["Play a selected clip in the clip preview pane.",237],["Create a new clip for this file with the add (+) button.",237],["Remove the selected clip definition with the delete (-) button.",237],["Warning:** If you manually change any properties of the imported clips, Unity will not import new animation clips when the source Asset changes. For example, if you create a new clip or change a clip's timing on the Animation tab, that clip list will not change even if you add clips to the FBX file outside of Unity. Unity will ignore the new animation clips.",237],[" ",237],["Clip-specific properties",237],["This area of the Animation tab displays these features:",237],["(A)** The editable name of the selected clip.",237],["(B)** The animation clip timeline.",237],["(C)** Clip properties to control looping, root motion extraction, curves, events and Avatar masks.",237],["You can set these properties separately for each animation clip defined within this asset:",237],["Property: Function: ",237],["Area A ",237],["Take name The name of the source take in the source file. Source files contain a set of source takes that are created in external 3D applications such as Motionbuilder or Autodesk® Maya®.You can import source takes as individual Animation clips. You can also create Animation clips from a subset of frames. ",237],["Area B ",237],[" Drag the start and end indicators on the animation timeline to define frame ranges for each clip.Creating clips is essentially defining the start and end points for segments of animation. To define a looping clip, trim the start and end points so that the first and last frames match as best as possible. You can also zoom and scroll the timeline to be more precise. ",237],["Start Start frame of the clip. ",237],["End End frame of the clip. ",237],["Area C ",237],["Loop Time Play the animation clip through and restart when the end is reached. ",237],["Loop Pose Loop the motion seamlessly. ",237],["Cycle Offset Offset to the cycle of a looping animation, if it starts at a different time. ",237],["Root Transform Rotation ",237],["Bake into Pose Bake root rotation into the movement of the bones. Disable to store as root motion. ",237],["Based Upon Basis of root rotation. ",237],["Original Keep the original rotation from the source file. ",237],["Root Node Rotation Use the rotation of the root node. Only available for the Generic Animation Type. ",237],["Body Orientation Keep the upper body pointing forward.Only available for the Humanoid Animation Type. ",237],["Offset Offset to the root rotation (in degrees). ",237],["Root Transform Position (Y) ",237],["Bake into Pose Bake vertical root motion into the movement of the bones. Disable to store as root motion. ",237],["Based Upon (at Start) Basis of vertical root position. ",237],["Original Keep the vertical position from the source file. ",237],["Root Node Position Use the vertical root position.Only available for the Generic Animation Type. ",237],["Center of Mass Keep center of mass aligned with the root transform position.Only available for the Humanoid Animation Type. ",237],["Feet Keep feet aligned with the root transform position.Only available for the Humanoid Animation Type. ",237],["Offset Offset to the vertical root position. ",237],["Root Transform Position (XZ) ",237],["Bake into Pose Bake horizontal root motion into the movement of the bones. Disable to store as root motion. ",237],["Based Upon Basis of horizontal root position. ",237],["Original Keep the horizontal position from the source file. ",237],["Root Node Position Use the horizontal root transform position.Only available for the Generic Animation Type. ",237],["Center of Mass Keep aligned with the root transform position.Only available for the Humanoid Animation Type. ",237],["Offset Offset to the horizontal root position. ",237],["Mirror Mirror left and right in this clip. Only appears if the Animation Type is set to Humanoid. ",237],["Additive Reference Pose Enable to set frame for the reference pose used as the base for the additive animation layer. A blue marker becomes visible in the timeline editor: ",237],["Pose Frame Enter a frame number to use as the reference pose. You can also drag the blue marker in the timeline to update this value. Only available if Additive Reference Pose is enabled. ",237],["Curves Expand this section to manage animation curves for this animation clip. ",237],["Events Expand this section to manage animation events for this animation clip. ",237],["Mask Expand this section to manage Avatar masking for this animation clip. ",237],[" ",237],["Properties for all clips",237],["These expandable properties apply to all Animation clips being imported.",237],["Property: Function: ",237],["Motion Expand this section to manage the root motion node for all imported clips. ",237],["Import Messages Expand this section to see detailed information about how your animation was imported, including an optional Retargeting Quality Report. ",237],["",237],["Animation import warnings",237],["If any problems occur during the animation import process, a warning appears at the top of the Animations Import inspector:",237],["The warnings do not necessarily mean your animation has not imported or doesn't work. It may just mean that the imported animation looks slightly different from the source animation.",237],["To see more information, expand the Import Messages section:",237],["In this case, Unity has provided a Generate Retargeting Quality Report option which you can enable to see more specific information on the retargeting problems.",237],["Other warning details you may see include the following:",237],["\nDefault bone length found in this file is different from the one found in the source avatar.\n",237],["\nInbetween bone default rotation found in this file is different from the one found in the source avatar.\n",237],["\nSource avatar hierarchy doesn't match one found in this model.\n",237],["\nThis animation has translation animation that will be discarded.\n",237],["\nHumanoid animation has inbetween transforms and rotation that will be discarded.\n",237],["\nThis animation has scale animation that will be discarded.\n",237],["These messages indicate that some data present in your original file was omitted when Unity imported and converted your animation to its own internal format. These warnings essentially tell you that the retargeted animation may not exactly match the source animation.",237],["Note:** Unity does not support pre- and post-extrapolate modes (also known as pre- and post-infinity modes) other than constant, and converts these to constant when imported.",237],["",237],["Animation preview",237],["The preview area of the Animation tab provides these features:",237],["(A)** The name of the selected clip.",237],["(B)** The 2D preview mode button (switches between orthographic and perspective camera).",237],["(C)** The pivot and mass center display button (switches between displaying and hiding the gizmos).",237],["(D)** The Avatar selector (change which GameObject will preview the action).",237],["(E)** The play/pause button.",237],["(F)** The playback head on the preview timeline (allows scrubbing back and forth).",237],["(G)** The animation preview speed slider (move left to slow down; right to speed up).",237],["(H)** The playback status indicator (displays the location of the playback in seconds, percentage, and frame number).",237],["(I)** The Tag bar, where you can define and apply Tags to your clip.",237],["(J)** The AssetBundles bar, where you can define AssetBundles and Variants.",237],["AnimationClip",237],["Animator component",238],["Use the Animator component to assign animation to a GameObject in your Scene. The Animator component requires a reference to an Animator Controller which defines which animation clips to use, and controls when and how to blend and transition between them.",238],["If the GameObject is a humanoid character with an Avatar definition, the Avatar should also be assigned in this component, as seen here:",238],["This diagram shows how the various assets (Animation Clips, an Animator Controller, and an Avatar) are all brought together in an Animator Component on a GameObject:",238],["See Also State Machines, Blend Trees, Avatar, Animator Controller",238],["Properties",238],["Property: Function: ",238],["Controller The animator controller attached to this character. ",238],["Avatar The Avatar for this character. (If the Animator is being used to animate a humanoid character) ",238],["Apply Root Motion Select whether to control the character's position and rotation from the animation itself or from script. ",238],["Update Mode This allows you to select when the Animator updates, and which timescale it should use. ",238],["Normal The Animator is updated in-sync with the Update call, and the animator’s speed matches the current timescale. If the timescale is slowed, animations will slow down to match. ",238],["Animate Physics The animator is updated in-sync with the FixedUpdate call (i.e. in lock-step with the physics system). You should use this mode if you are animating the motion of objects with physics interactions, such as characters which can push rigidbody objects around. ",238],["Unscaled Time The animator is updated in-sync with the Update call, but the animator’s speed ignores the current timescale and animates at 100% speed regardless. This is useful for animating a GUI system at normal speed while using modified timescales for special effects or to pause gameplay. ",238],["Culling Mode Culling mode you can choose for animations. ",238],["Always Animate Always animate, don't do culling even when offscreen. ",238],["Cull Update Transforms Retarget, IK and write of Transforms are disabled when renderers are not visible. ",238],["Cull Completely Animation is completely disabled when renderers are not visible. ",238],["Animation curve information",238],["The information box at the bottom of the Animator component provides you with a breakdown of the data being used in all the clips used by the Animator Controller.",238],["An animation clip contains data in the form of “curves”, which represent how a value changes over time. These curves may describe the position or rotation of an object, the flex of a muscle in the humanoid animation system, or other animated values within the clip such as a changing material colour.",238],["This table explains what each item of data represents:",238],["Label Description ",238],["Clip Count The total number of animation clips used by the animator controller assigned to this Animator. ",238],["Curves (Pos, Rot & Scale) The total number of curves Unity uses to animate the position, rotation or scale of GameObjects. These are for animated GameObjects that are not part of a standard humanoid rig. When animating a humanoid avatar, these curves would show up a count for extra non-muscle bones such as a tail, flowing cloth or a dangling pendant. If you have a humanoid animation and you notice unexpected non-muscle animation curves, you might have unnecessary animation curves in your animation files. ",238],["Muscles The number of muscle animation curves used for humanoid animation by this Animator. These are the curves used to animate the standard humanoid avatar muscles. As well as the standard muscle movements for all the humanoid bones in Unity’s standard avatar, this also includes two “muscle curves” which store the root motion position and rotation animation. ",238],["Generic The number of numeric (float) curves used by the animator to animate other properties such as material color. ",238],["PPtr The total count of sprite animation curves (used by Unity's 2d system) ",238],["Curves Count The total combined number of animation curves ",238],["Constant The number of animation curves that are optimized as constant (unchanging) values. Unity selects this automatically if your animation files contain curves with unchanging values. ",238],["Dense The number of animation curves that are optimized using the “dense” method of storing data (discrete values which are interpolated between linearly). This method uses significantly less memory than the “stream” method. ",238],["Stream The number of animation curves using the “stream” method of storing data (values with time and tangent data for curved interpolation). This data occupies significantly more memory than the “dense” method. ",238],["If your animation clips are imported with “Anim Compression” set to “Optimal” in the Animation import reference, Unity will use a heuristic algorithm to determine whether it is best to use the dense or stream method to store the data for each curve.",238],["Animator",238],["Animator Controller",239],["An Animator Controller allows you to arrange and maintain a set of Animation Clips and associated Animation Transitions for a character or object. In most cases it is normal to have multiple animations and switch between them when certain game conditions occur. For example, you could switch from a walk Animation Clip to a jump Animation Clip whenever the spacebar is pressed. However even if you only have a single Animation Clip you still need to place it into an Animator Controller to use it on a GameObject.",239],["The Animator Controller has references to the Animation clips used within it, and manages the various Animation Clips and the Transitions between them using a State Machine, which could be thought of as a flow-chart of Animation Clips and Transitions, or a simple program written in a visual programming language within Unity. More information about state machines can be found here.",239],["Unity automatically creates an Animator Controller when you begin animating a GameObject using the Animation Window, or when you attach an Animation Clip to a GameObject.",239],["To manually create an Animator Controller, right-click within either column of the Project window and select Create > Animator Controller.",239],["Navigation",239],["Use the scroll wheel to zoom in and zoom out of the Animator Controller window.",239],["To focus on an item in the Animator Controller window, select one or multiple states (click or drag a selection box around the states you wish to select), then press the F key to zoom in on the selection.",239],["Press the A key to fit all of the animation states into the Animator Controller view.",239],["Unity preserves your selection. Press the A and F keys to switch between your selected animation states and the entire Animator Controller.",239],["During Play Mode, the Animator pans the view so that the current state being played is always visible. The Animator Controller respects the independent zoom factors of the Base Layer and Sub-State Machine, and the window pans automatically to ensure visibility of the active state or states.",239],["To modify the zoom during Play Mode, follow these steps:",239],["Enable Auto Live Link in the Animator Controller window.",239],["Click the Play button to enter Play Mode.",239],["Click Pause.",239],["In the Animator Controller, select the state or states you want to zoom into.",239],["Press the F key to zoom into the selection.",239],["Click the Play button again to resume Play Mode.",239],["Note that the Animator Controller pans to each state when it activates.",239],["AnimatorController",239],["Area Effector 2D",240],["The Area Effector 2D applies forces within an area defined by the attached Collider 2Ds when another (target) Collider 2D comes into contact with the Effector 2D. You can configure the force at any angle with a specific magnitude and random variation on that magnitude. You can also apply both linear and angular drag forces to slow down Rigidbody 2Ds.",240],["Collider 2Ds that you use with the Area Effector 2D would typically be set as triggers, so that other Collider 2Ds can overlap with it to have forces applied. Non-triggers will still work, but forces will only be applied when Collider 2Ds come into contact with them.",240],["Properties",240],["Property: Function: ",240],["Use Collider Mask Check to enable use of the Collider Mask property? If this is not enabled, the Global Collision Matrix will be used as the default for all Collider 2Ds. ",240],["Collider Mask The mask used to select specific Layers allowed to interact with the Area Effector 2D. ",240],["Use Global Angle Check this to define the Force Angle as a global (world-space) angle. If this is not checked, the Force Angle is considered a local angle by the physics engine. ",240],["Force Angle The angle of the force to be applied. ",240],["Force Magnitude The magnitude of the force to be applied. ",240],["Force Variation The variation of the magnitude of the force to be applied. ",240],["Drag The linear drag to apply to Rigidbody 2Ds. ",240],["Angular Drag The angular drag to apply to Rigidbody 2Ds. ",240],["Force Target The point on a target GameObject where the Area Effector 2D applies any force. ",240],["        Collider The target point is defined as the current position of the Collider 2D. Applying force here can generate torque (rotation) if the Collider 2D isn't positioned at the center of mass. ",240],["        Rigidbody The target point is defined as the current center-of-mass of the Rigidbody 2D. Applying force here will never generate torque (rotation). ",240],["AreaEffector2D",240],["Articulation Body component reference",241],["Articulation Bodies enable you to build physics articulations such as robotic arms or kinematic chains with GameObjects that are hierarchically organized. They help you get realistic physics behaviors in the context of simulation for industrial applications.",241],["Properties",241],["An Articulation Body allows you to define in one single component the properties that you would similarly define through a RigidBody and a regular Joint in a classic configuration. That said, these properties depend on the GameObject position in the hierarchy:",241],["\nFor the root GameObject of the articulation, you can only set up physical body properties:\n",241],["\nFor any child GameObject within the articulation, you can set up physical body properties as well as the type and properties of the joint that links this GameObject to its parent GameObject:\n",241],["The Articulation Body properties fall into the following main categories:",241],["\nPhysical body properties\n",241],["\nJoint anchor properties\n",241],["\nJoint type selection and properties\n",241],["\nJoint drive properties\n",241],["",241],["Physical body properties",241],["Define the way the Articulation Body responds to the physics environment.",241],["Property Function ",241],["",241],["Mass The mass of the Articulation Body (in kilograms by default). ",241],["Immovable Use this property to define whether this articulation body is movable or not. You can set this property only for the root Articulation Body. This property is useful to make the base body of robotic hands immovable, for example. The physics engine solves it separately from all the other constraints and guarantees that it is not violated. ",241],["Use Gravity Use this property to make the gravity affect this Articulation Body or not. ",241],["",241],["Joint anchor properties",241],["Define the coordinates of the joint anchors for the Articulation Body and its parent Articulation Body.",241],["Property Function ",241],["",241],["Compute Parent Anchor Enable this property to make the parent-relative anchor match the anchor of the current Articulation Body. If you disable this property, you can separately set values for Parent Anchor Position and Parent Anchor Rotation. ",241],["Anchor Position The position coordinates of the Anchor, relative to the current Articulation Body. ",241],["Anchor Rotation The rotation coordinates of the Anchor, relative to the current Articulation Body. ",241],["Parent Anchor Position The position coordinates of the Parent Anchor, relative to the parent Articulation Body. This property only appears if you disable Compute Parent Anchor. ",241],["Parent Anchor Rotation The rotation coordinates of the Parent Anchor, relative to the parent Articulation Body. This property only appears if you disable Compute Parent Anchor. ",241],["Snap Anchor to closest contact Computes the point on the surface of this Articulation Body that is closest to the center of mass of the parent Articulation Body, and sets the anchor to it. If Compute Parent Anchor is enabled, Unity also updates the parent anchor accordingly. ",241],["",241],["Joint type selection and joint properties",241],["Select the type of joint that links the current Articulation Body to its parent Articulation Body, and define its common and specific properties.",241],["Property Function ",241],["",241],["Articulation Joint Type The type of joint that connects this Articulation Body to its parent Articulation Body. Note: All types of joints have in common the properties that this table describes, and some of them have specific additional properties. ",241],[" Fixed Sets a rigid, unbreakable and unstretchable link between bodies. A Fixed articulation joint has no additional properties than the ones that this table describes. \n",241],[" Prismatic Prevents all motion except sliding along a particular axis. See also the [Prismatic joint additional properties](#prismatic-joint-additional-properties). \n",241],[" Revolute Allows rotation around a particular axis (like a hinge). See also the [Revolute joint additional properties](#revolute-joint-additional-properties). \n",241],[" Spherical Anatomical joint, which allows two swings and one twist. See also the [Spherical joint additional properties](#spherical-joint-additional-properties). \n",241],["Linear Damping Coefficient that controls the linear slow down. ",241],["Angular Damping Coefficient that controls the rotational slow down. ",241],["Joint Friction Coefficient that controls the energy loss caused by friction in the joint. ",241],["",241],["Prismatic joint additional properties",241],["Property Function ",241],["",241],["Axis Specifies the axis that the prismatic joint allows motion along, relative to the parent anchor. ",241],["Motion Specifies the motion restriction type along that axis. ",241],[" Free Allows the Articulation Body to freely move along the selected **Axis** of the parent anchor. \n",241],[" Limited Restricts the movement of the Articulation Body along the selected **Axis** of the parent anchor, according to the **Lower Limit** and **Upper Limit** you specify in the **Drive** properties. \n",241],["X Drive, Y Drive, or Z Drive The properties of the linear drive that is attached to the joint, according to the selected Axis of the parent anchor. Note: There is only one Drive section here. Its title automatically adjusts according to the axis selection. ",241],["",241],["Revolute joint additional properties",241],["Property Function ",241],["",241],["Motion Specifies the rotation restriction type around the X axis of the parent anchor. ",241],[" Free Allows the Articulation Body to freely rotate around the X axis of the parent anchor. \n",241],[" Limited Restricts the rotation of the Articulation Body around the X axis of the parent anchor, according to the **Lower Limit** and **Upper Limit** you specify in the **X Drive** properties. \n",241],["X Drive The properties of the rotational drive that is attached to the joint, around the X axis of the parent anchor. ",241],["",241],["Spherical joint additional properties",241],["Property Function ",241],["",241],["Swing Y Specifies the rotation restriction type around the Y axis. ",241],[" Free Allows the Articulation Body to freely rotate around the Y axis of the parent anchor. \n",241],[" Limited Restricts the rotation of the Articulation Body around the Y axis of the parent anchor, according to the **Lower Limit** and **Upper Limit** you specify in the **Y Drive** properties. \n",241],[" Locked Totally locks the rotation of the Articulation Body around the Y axis of the parent anchor. **Note:** You cannot lock more than two degrees of freedom at the same time. \n",241],["Swing Z Specifies the rotation restriction type around the Z axis. The options are the same for all 3 axes. ",241],["Twist Specifies the rotation restriction type around the X axis. The options are the same for all 3 axes. ",241],["Y Drive, Z Drive, and X Drive The properties of the rotational drive that is attached to the joint, respectively around the Y, Z and X axes of the parent anchor. Note: There is a separate subsection for each drive. If you lock an axe, the Inspector does not display its Drive properties. ",241],["",241],["Joint drive properties",241],["Set up joint limits about a specific",241],["axis, as well as the joint drive effect parameters for",241],["this axis.",241],["Property Function ",241],["",241],["Lower Limit The limit below which the joint prevents the body from moving or rotating, depending on the joint type. You can define this property only if you set the related Motion, Swing or Twist property to Limited. ",241],["Upper Limit The limit above which the joint prevents the body from moving or rotating, depending on the joint type. You can define this property only if you set the related Motion, Swing or Twist property to Limited. ",241],["Stiffness The stiffness of the spring that attracts the joint to the target. ",241],["Damping The damping of the spring that attracts the joint to the target. ",241],["Force limit The maximum amount of force or torque this drive can produce. ",241],["Target The target value this drive aims to reach. ",241],["Target velocity The target velocity this drive aims to reach. ",241],["Configuring articulation joints",241],["",241],["Joint drive effect",241],["Any drive is an implicit 1D spring that aims to bring the current drive parameters to the target by the application of an effect (forces or torques) computed by this formula:",241],["Effect = stiffness * (drivePosition - targetPosition) - damping * (driveVelocity - targetVelocity)**",241],["A drive attached to a linear degree of freedom produces forces. A drive attached to a rotational degree of freedom produces torques. You can set each parameter of this formula through the Joint drive properties to fine-tune the desired effect for any axis involved in a joint.",241],["Notice that the effect formula consists of two independent terms that you can balance, and even cancel out. For example:",241],["\nIf you set the stiffness to zero, you get a drive that only aims at reaching a specific velocity.\n",241],["\nIf you set the damping to zero, you get a drive that aims at reaching a certain position without trying to reach any particular velocity. In that case, the drive does not try to eventually stop once the target is reached.\n",241],["",241],["Joint anchors",241],["There are two anchors per each joint:",241],["\nThe Anchor, relative to the current Articulation Body\n",241],["\nThe Parent Anchor, relative to the parent Articulation Body\n",241],["By default, Unity automatically computes the Parent Anchor to match the pose of the Anchor. However, you can disable the Compute Parent Anchor property to manually set the Parent Anchor:",241],["Currently, the Unity Editor displays the anchors with a scaled transform tool to differentiate them from the GameObject transform tool:",241],["To change the position of the anchors, you can either use the Inspector and edit the Joint anchor properties or directly move and rotate their transform tools in the Scene View.",241],["Note:** When you create a new Articulation Body, Unity positions the anchors at the local zero of their respective bodies. However, the local zero is not an ideal default position for the anchor if the connected bodies have colliders attached, because the joint might then try to push the bodies into each other. The Snap Anchor to closest contact button helps you set a more reasonable default location of the anchors, which works with many articulations.",241],["",241],["Joint degrees of freedom and limits",241],["Note:** Currently, the Scene View allows you to visualize the joint limits but not to manipulate them graphically.",241],["Fixed joint",241],["A fixed joint has no degrees of freedom, so the Scene View displays no specific markers.",241],["Prismatic joint",241],["A prismatic joint is practically a slider along a specified axis relative to the parent anchor. This axis can only be a basis axis (X, Y, or Z) but you can still rotate the parent anchor to get a different axis orientation in world space.",241],["You can set up a prismatic joint to have a free or limited translation. To do this, use the Inspector and edit the prismatic joint specific properties.",241],["Note:** You cannot lock a prismatic joint, otherwise this would remove its only degree of freedom and would make it a degenerate joint.",241],["When you set the prismatic joint Motion to Limited, the Scene View displays markers to represent the translation limits:",241],["\nThe small red marker represents the lower limit.\n",241],["\nThe small green marker represents the upper limit.\n",241],["\nThe dotted white line materializes allowed translation between the limits.\n",241],["To manipulate the joint limits, you must use the Inspector and edit their values in the Joint drive properties.",241],["Example of a limited prismatic joint.",241],["Note:** The Scene View displays no specific markers when you set the prismatic joint Motion to Free.",241],["",241],["Revolute joint",241],["A revolute joint is essentially a hinge with a single rotational degree of freedom around the parent anchor’s X axis. You can still rotate the parent anchor to get a different axis orientation in world space.",241],["You can set up a revolute joint to have a free or limited rotation. To do this, use the Inspector and edit the revolute joint specific properties.",241],["Note:** You cannot lock a revolute joint, otherwise this would remove its only degree of freedom and would make it a degenerate joint.",241],["When you set the revolute joint Motion to Free, the Scene View displays a red disk to represent the free rotation allowed around the X axis.",241],["Example of a free revolute joint.",241],["When you set the revolute joint Motion to Limited, the Scene View displays markers to represent the rotation limits:",241],["\nThe small red marker represents the lower limit.\n",241],["\nThe small green marker represents the upper limit.\n",241],["\nThe red circle sector materializes the allowed rotation angle between the limits.\n",241],["\nThe Z axis of the parent anchor serves as the reference (zero) for both limit angles.\n",241],["To manipulate the joint limits, you must use the Inspector and edit their values in the Joint drive properties.",241],["Example of a limited revolute joint.",241],["Spherical joint",241],["A spherical joint is an anatomical joint that is best suited for simulating humanoid limbs.",241],["This joint type can have up to three rotational degrees of freedom. You can set up each of these rotations to be free, limited, or locked. To do this, use the Inspector and edit the revolute joint specific properties.",241],["Note:** You cannot lock all rotations at the same time for a spherical joint, otherwise this would remove all its degrees of freedom and would make it a degenerate joint. Also, you should not lock both swing axes to mimic a revolute joint, because the simulation would happen differently than with the revolute joint and would be more expensive.",241],["Like with the revolute joint:",241],["\nThe Scene View displays free rotations with colored disks and limited rotations with colored circle sectors. Each color (red, green, blue) represents the rotation around the axis of this color (respectively: X, Y, Z).\n",241],["\nThe small red and green markers respectively represent the lower and upper limits.\n",241],["Example of a free spherical joint.",241],["Example of a spherical joint with limited swings.",241],["ArticulationBody",241],["Assembly Definition properties",242],["Click on an Assembly Definition Asset to set the properties for an assembly in the Inspector window.",242],["Assembly Definition properties are divided into the following sections:",242],["",242],["",242],["Name and General",242],["Property: Description: ",242],["Name The name for the assembly (without a file extension). Assembly names must be unique across the Project. Consider using a reverse-DNS naming style to reduce the chance of name conflicts, especially if you want to use the assembly in more than one Project.Note: Unity uses the name you assign to the Assembly Definition asset as the default value of the Name field, but you can change the name as needed. However, if you reference an Assembly Definition by its name rather than its GUID, changing the name will break the reference. ",242],["Allow ‘unsafe’ Code Enable the Allow ‘unsafe’ Code option if you have used the C# unsafe keyword in a script within the assembly. When you enable this setting, Unity passes the /unsafe option to the C# compiler when it compiles the assembly. ",242],["Auto Referenced Specify whether the predefined assemblies should reference this Project assembly. When you disable the Auto Reference option, Unity does not automatically reference the assembly during compilation. This has no effect on whether Unity includes it in the build. ",242],["No Engine References When you enable this property, Unity does not add references to UnityEditor or UnityEngine when it compiles the assembly. ",242],["Override References Enable the Override References setting to manually specify which precompiled assemblies this assembly depends upon. When you enable Override References, the Inspector shows the Assembly References section, which you can use to specify the references.A precompiled assembly is a library compiled outside your Unity Project. By default, assemblies you define in your Project reference all the precompiled assemblies you add to the Project, which matches how the predefined assemblies reference all precompiled assemblies. When you enable Override References, this assembly only references the precompiled assemblies you add under Assembly References.Note: To prevent Project assemblies from automatically referencing a precompiled assembly, you can disable its Auto Referenced option. See Plugin Inspector for more information. ",242],["Root Namespace The default namespace for scripts in this assembly definition. If you use either [Rider] or [Visual Studio] as your code editor, they automatically add this namespace to any new scripts you create in this assembly definition. ",242],["For more information, see [Creating an Assembly Definition asset].",242],["",242],["Define Constraints",242],["Define constraints specify the compiler #define directives that must be defined for Unity to compile or reference an assembly.",242],["Unity only compiles and references a Project assembly if all of the Define Constraints are satisfied. Constraints work like the #if preprocessor directive in C#, but on the assembly level instead of the script level. Define all the symbols in the Define Constraints setting for the constraints to be satisfied.",242],["To specify that a symbol must be undefined, prefix it with a negating ! (bang) symbol. For example, if you specify the following symbols as the Define Constraints:",242],["!ENABLE_IL2CPP",242],["UNITY_2018_3_OR_NEWER",242],["The constraints are satisfied when the symbol ENABLE_IL2CPP is not defined and the symbol UNITY_2018_3_OR_NEWER is defined. The result is that Unity only compiles and references this assembly on non-IL2CPP scripting runtimes for Unity 2018.3 or newer.",242],["You can use the (OR) operator to specify that at least one of the constraints must be present in order for the constraints to be satisfied. For example:",242],["UNITY_IOS UNITY_EDITOR_OSX",242],["UNITY_2019_3_OR_NEWER",242],["!UNITY_ANDROID",242],["The constraints are satisfied when either UNITY_IOS or UNITY_EDITOR_OSX and UNITY_2019_3_OR_NEWER are defined and UNITY_ANDROID is not defined. Individual lines are analogous to performing a logical AND operation between the constraints in them. The above example is equivalent to:",242],["(UNITY_IOS OR UNITY_EDITOR_OSX) AND (UNITY_2019_3_OR_NEWER) AND (NOT UNITY_ANDROID)",242],["You can use any of Unity’s built-in #define directives, symbols defined in a global compiler response (.rsp) file, and any symbols defined in the Project’s Scripting Define Symbols Player setting. See [Platform dependent compilation] for more information, including a list of the built-in symbols.",242],["Note**: The Scripting Define Symbols settings are platform-specific. If you use this setting to define whether Unity should use an assembly, make sure that you define the necessary symbols on all the relevant platforms.",242],["For more information, see [Conditionally including an assembly].",242],["",242],["Invalid or incompatible constraints",242],["Unity marks each constraint with an indicator based on the currently defined settings (for example, the following set of three constraints indicates that the first symbol is currently defined while the other two are not). Since each individual constraint must be true for the overall constraint to be satisfied, the Editor marks the entire Define Constraints section as currently incompatible or invalid.",242],["To satisfy the constraints in this example, you could change the Scripting Backend to IL2CPP for the second constraint (in Player Settings) and remove the invalid characters from the third constraint. However, what often matters is how the constraints are evaluated when you build the project, not how the constraints appear in the Unity Editor (for example, you might have an assembly that you only want to include in builds that use the IL2CPP backend, but not on other builds that use the Mono backend).",242],["",242],["Assembly Definition References",242],["Property: Description: ",242],["Assembly Definition References Specify references to other assemblies that you have created using Assembly Definition assets. Unity uses these references to compile the assembly and also define the dependencies between assemblies. ",242],["Use GUIDs This setting controls how Unity serializes references to other Assembly Definition assets. When you enable this property, Unity saves the reference as the asset’s GUID, instead of the Assembly Definition name. It’s good practice to use the GUID instead of the name, because it means you can make changes to the name of an Assembly Definition asset without having to update other Assembly Definition files that reference it. ",242],["For more information, see [Creating an Assembly Definition asset]",242],["",242],["Assembly References",242],["The Assembly References section only appears when you enable the Override References property (in the [General] section). Use this area to specify any references to precompiled assemblies on which this assembly depends.",242],["For more information, see [Referencing a precompiled, plugin assembly]",242],["",242],["Platforms",242],["Set the platform compatibility of the assembly. Unity only compiles or references this assembly on the included (or not excluded) platforms.",242],["For more information, see [Creating a platform-specific assembly]",242],["",242],["Version Defines",242],["Specify which symbols to define according to the versions of the packages and modules in a project.",242],["Property: Description: ",242],["Resource A package or module ",242],["Define The symbol to define when an applicable version of the Resource is also present in this Unity Project. ",242],["Expression An expression defining a version or range of versions. See [Version Define expressions]. ",242],["Expression outcome The Expression evaluated as a logical statement, where “x” is the version checked. If the Expression outcome says, Invalid, then the Expression is malformed. ",242],["For more information, see [Defining symbols based on project packages]",242],["",242],["",242],["",242],["",242],["",242],["",242],["",242],["",242],["",242],["",242],["AssemblyDefinitionImporter",242],["Assembly Definition Reference properties",243],["An Assembly Definition Reference is an asset that defines a reference to an Assembly Definition. Create an Assembly Definition Reference asset in a folder to include the scripts in that folder in the referenced Assembly Definition (rather than creating a new assembly). Scripts in child folders are also included, unless they have their own Assembly Definition or Assembly Definition Reference asset.",243],["Property Description ",243],["Use GUID This setting controls how Unity serializes the reference to the Assembly Definition asset. When you enable this property, Unity saves the reference as the asset’s GUID, instead of the Assembly Definition name. It’s good practice to use the GUID instead of the name, because it means you can make changes to the name of an Assembly Definition asset without having to update other Assembly Definitions and References that reference it. ",243],["Assembly Definition The referenced Assembly Definition asset. ",243],["See Creating an Assembly Definition Reference asset",243],["AssemblyDefinitionReferenceImporter",243],["Audio Chorus Effect",244],["The Audio Chorus Effect takes an Audio Mixer group output and processes it creating a chorus effect.",244],["Properties",244],["Property: Function: ",244],["Dry mix Volume of original signal to pass to output. 0.0 to 1.0. Default = 0.5. ",244],["Wet mix tap 1 Volume of 1st chorus tap. 0.0 to 1.0. Default = 0.5. ",244],["Wet mix tap 2 Volume of 2nd chorus tap. This tap is 90 degrees out of phase of the first tap. 0.0 to 1.0. Default = 0.5. ",244],["Wet mix tap 3 Volume of 3rd chorus tap. This tap is 90 degrees out of phase of the second tap. 0.0 to 1.0. Default = 0.5. ",244],["Delay The LFO's delay in ms. 0.1 to 100.0. Default = 40.0 ms ",244],["Rate The LFO's modulation rate in Hz. 0.0 to 20.0. Default = 0.8 Hz. ",244],["Depth Chorus modulation depth. 0.0 to 1.0. Default = 0.03. ",244],["Feedback Chorus feedback. Controls how much of the wet signal gets fed back into the filter's buffer. 0.0 to 1.0. Default = 0.0. ",244],["Details",244],["The chorus effect modulates the original sound by a sinusoid low frequency oscillator (LFO). The output sounds like there are multiple sources emitting the same sound with slight variations - resembling a choir.",244],["You can tweak the chorus filter to create a flanger effect by lowering the feedback and decreasing the delay, as the flanger is a variant of the chorus.",244],["Creating a simple, dry echo is done by setting Rate and Depth to 0 and tweaking the mixes and Delay",244],["AudioChorusEffect",244],["Audio Chorus Filter",245],["The Audio Chorus Filter takes an Audio Clip and processes it creating a chorus effect.",245],["Properties",245],["Property: Function: ",245],["Dry Mix Volume of original signal to pass to output. 0.0 to 1.0. Default = 0.5. ",245],["Wet Mix 1 Volume of 1st chorus tap. 0.0 to 1.0. Default = 0.5. ",245],["Wet Mix 2 Volume of 2nd chorus tap. This tap is 90 degrees out of phase of the first tap. 0.0 to 1.0. Default = 0.5. ",245],["Wet Mix 3 Volume of 3rd chorus tap. This tap is 90 degrees out of phase of the second tap. 0.0 to 1.0. Default = 0.5. ",245],["Delay The LFO's delay in ms. 0.1 to 100.0. Default = 40.0 ms ",245],["Rate The LFO's modulation rate in Hz. 0.0 to 20.0. Default = 0.8 Hz. ",245],["Depth Chorus modulation depth. 0.0 to 1.0. Default = 0.03. ",245],["Feed Back Chorus feedback. Controls how much of the wet signal gets fed back into the filter's buffer. 0.0 to 1.0. Default = 0.0. ",245],["Details",245],["The chorus effect modulates the original sound by a sinusoid low frequency oscillator (LFO). The output sounds like there are multiple sources emitting the same sound with slight variations - resembling a choir.",245],["You can tweak the chorus filter to create a flanger effect by lowering the feedback and decreasing the delay, as the flanger is a variant of the chorus.",245],["Creating a simple, dry echo is done by setting Rate and Depth to 0 and tweaking the mixes and Delay",245],["AudioChorusFilter",245],["Audio Clip",246],["Audio clips contain the audio data used by Audio Sources. Unity supports mono, stereo, and multichannel audio assets up to eight channels.",246],["You can import the following audio file formats in Unity: .aif, .wav, .mp3, and .ogg. Unity also supports importing of tracker modules in the .xm, .mod, .it, and .s3m formats. The tracker module assets behave the same way as any other audio assets in Unity although no waveform preview is available in the asset import inspector.",246],["Options",246],["Force To Mono**",246],["When this option is enabled, multi-channel audio will be mixed down to a mono track before packing.",246],["Normalize**",246],["When this option is enabled, audio will be normalized during the \"Force To Mono\" mixing down process.",246],["Load In Background**",246],["When this option is enabled, the loading of the clip will happen at a delayed time on a separate thread, without blocking the main thread.",246],["Ambisonic**",246],["Ambisonic audio sources store audio in a format which represents a soundfield that can be rotated based on the listener's orientation. It's useful for 360-degree videos and XR applications. Enable this option if your audio file contains Ambisonic-encoded audio.",246],["Properties",246],["Property: Function: ",246],["Load Type The method Unity uses to load audio assets at runtime. ",246],["Decompress On Load Audio files are decompressed as soon as they're loaded. Use this option for smaller compressed sounds to avoid the performance overhead of decompressing on the fly. Be aware that decompressing Vorbis-encoded sounds on load will use about ten times more memory than keeping them compressed (for ADPCM encoding it's about 3.5 times), so don't use this option for large files. ",246],["Compressed In Memory Keep audio compressed in memory and decompress while playing. This option has a slight performance overhead, especially for Ogg/Vorbis compressed files. Use it only for files that consume excess memory for the Decompressed on Load. The decompression happens on the mixer thread, which can be monitored in the DSP CPU section in the Audio pane of the Profiler window. ",246],["Streaming Decode continuous audio. This method uses a minimal amount of memory to buffer compressed data that's incrementally read from the disk and decoded spontaneously. The decompression happens on a separate streaming thread whose CPU usage can be monitored in the Streaming CPU section in the Audio pane of the profiler window. Note: Streaming clips have an overhead of approximately 200KB, even if none of the audio data is loaded. ",246],["Compression Format The specific format that will be used for the sound at runtime. Note that the options available depend on the currently selected build target. ",246],["PCM This option offers higher quality at the expense of larger file size and is best for short sound effects. ",246],["ADPCM This format is useful for sounds that contain a fair bit of noise and need to be played in large quantities, such as footsteps, impacts, weapons. The compression ratio is 3.5 times smaller than PCM, but CPU usage is much lower than the MP3/Vorbis formats which makes it the preferrable choice for the aforementioned categories of sounds. ",246],["Vorbis/MP3 The compression results in smaller files but with somewhat lower quality compared to PCM audio. The amount of compression is configurable via the Quality slider. This format is best for medium length sound effects and music. ",246],["Sample Rate Setting PCM and ADPCM compression formats allow automatically optimized or manual sample rate reduction. ",246],["Preserve Sample Rate This setting keeps the sample rate unmodified (default). ",246],["Optimize Sample Rate This setting automatically optimizes the sample rate according to the highest frequency content analyzed. ",246],["Override Sample Rate This setting allows manual overriding of the sample rate, so effectively this might be used to discard frequency content. ",246],["Force To Mono When enabled, the audio clip is down-mixed to a single channel sound. After the down-mixing the signal is peak-normalized, because the down-mixing process typically results in signals that are more quiet than the original. The peak-normalized signal provides headroom for later adjustments through the volume property of AudioSource. ",246],["Load In Background When enabled, the audio clip loads in the background without causing stalls on the main thread. This is disabled by default to ensure the standard Unity behavior where all AudioClips complete loading as soon as the scene starts playing. Play requests on AudioClips that are still loading in the background are deferred until the clip is loaded. You can query the load state through the AudioClip.loadState property. ",246],["Preload Audio Data When enabled, the audio clip is pre-loaded after the scene is loaded. This is enabled by default to reflect standard Unity behavior where all AudioClips complete loading as soon as the scene starts playing. If this flag isn't set, the audio data will either be loaded on the first AudioSource.Play AudioSource.PlayOneShot, or it can be loaded through AudioClip.LoadAudioData and unloaded again through AudioClip.UnloadAudioData. ",246],["Quality Determines the amount of Compression to be applied to a compressed clip. Doesn't apply to PCM/ADPCM/HEVAG formats. Statistics about the file size can be seen in the inspector. A good approach to tuning this value is to drag the slider to a place that leaves the playback \"good enough\" while keeping the file small enough for your distribution requirements. Note that the original size relates to the original file, so if this was an MP3 file and Compression Format is set to PCM (uncompressed), the resulting Ratio will be bigger than 100% because the file is now stored uncompressed and taking up more space than the source MP3 that it came from. ",246],["Preview Window",246],["The Preview window contains the following icons:",246],[" - When Auto Play is on, the clips play as soon as they're selected.",246],[" - When Loop is on, the clips play in a continuous loop.",246],[" - Plays the selected clip.",246],["If Unity Audio is disabled in Project Settings, preview is unavailable.",246],["Importing Audio Assets",246],["Unity supports a wide range of source file formats. Whenever importing a file, Unity transcodes to a format suitable for the build target and the type of sound. You can select this via the Compression Format setting in the inspector.",246],["Typically, the PCM and Vorbis/MP3 formats are preferrable for keeping the sound as close to the original as possible. PCM is lightweight on the CPU requirements, because the sound is uncompressed and can just be read from memory. Vorbis/MP3 allows adaptive discarding with less audible information via the Quality slider.",246],["ADPCM falls between memory and CPU usage as it uses only slightly more CPU than the uncompressed PCM option, but yields a constant 3.5 compression factor, which is in general about 3 times worse than the compression that can be achieved with Vorbis or MP3 compression. Furthermore ADPCM (like PCM) allows automatically optimized or manually set sample rates to be used, which -- depending on the frequency content of the sound and the acceptable loss of quality -- can further shrink the size of the packed sound assets.",246],["Module files (.mod,.it,.s3m..xm) can deliver high quality with an extremely low footprint. When using module files, unless you specifically want this, make sure that the Load Type is set to Compressed In Memory, because if it's set to Decompress On Load, the whole song will be decompressed.",246],["As a general rule of thumb, Compressed audio (or modules) are best for long files like background music or dialog, while PCM and ADPCM is better for short sound effects that contain some noise, as the artefacts of ADPCM are too apparent on smooth signals. You should tweak the amount of Compression using the compression slider. Start with high-quality compression and gradually reduce the setting to the point where the loss of sound quality is perceptible. Then, increase it again slightly until the perceived loss of quality disappears.",246],["Platform specific details",246],["Unity supports importing a variety of source format sound files. However, when importing these files (except tracker files), they're always re-encoded to the build target format. By default, this format is Vorbis, though this can be overridden per platform to other formats (ADPCM, MP3 etc) if required.",246],["For audio clip support on Linux, make sure you've installed the ffmpeg package.",246],["AudioClip",246],["Audio Compressor Effect",247],["The Audio Compressor Effect reduces the volume of loud sounds or amplifies quiet sounds by narrowing or \"compressing\" an audio signal's dynamic range.",247],["Properties",247],["Property: Function: ",247],["Threshold Threshold level in dB (range 0 to -60dB, default = 0dB). ",247],["Attack The rate the effect is applied in ms. (range 10.0 to 200.0 ms, default = 50.0 ms). ",247],["Release The rate the effect is released in ms. (range 20.0 to 1000.0 ms, default = 50.0 ms). ",247],["Make up gain Make up gain level in dB (range 0 to 30dB, default = 0dB). ",247],["AudioCompressor",247],["Audio Distortion Effect",248],["The Distortion Effect distorts the sound from an AudioMixer group.",248],["Properties",248],["Property: Function: ",248],["Distortion Distortion value. 0.0 to 1.0. Default = 0.5. ",248],["Details",248],["Apply the Distortion Effect to simulate the sound of a low quality radio transmission.",248],["AudioDistortionEffect",248],["Audio Distortion Filter",249],["The Audio Distortion Filter distorts the sound from an AudioSource or sounds reaching the AudioListener.",249],["Properties",249],["Property: Function: ",249],["Distortion Distortion value. 0.0 to 1.0. Default = 0.5. ",249],["Details",249],["Apply the Audio Distortion Filter to simulate the sound of a low quality radio transmission.",249],["AudioDistortionFilter",249],["Audio Echo Effect",250],["The Audio Echo Effect repeats a sound after a given Delay, attenuating the repetitions based on the Decay Ratio.",250],["Properties",250],["Property: Function: ",250],["Delay Echo delay in ms. 10 to 5000. Default = 500. ",250],["Decay Echo decay per delay. 0 to 100%. 100% = No decay, 0% = total decay (ie simple 1 line delay). Default = 50%. ",250],["Max channels ",250],["Drymix Volume of original signal to pass to output. 0 to 100%. Default = 100%. ",250],["Wetmix Volume of echo signal to pass to output. 0 to 100%. Default = 100%. ",250],["Details",250],["The Wetmix value determines the amplitude of the filtered signal, where the Drymix determines the amplitude of the unfiltered sound output.",250],["Hard surfaces reflects the propagation of sound. For example a large canyon can be made more convincing with the Audio Echo Filter.",250],["AudioEchoEffect",250],["Audio Echo Filter",251],["The Audio Echo Filter repeats a sound after a given Delay, attenuating the repetitions based on the Decay Ratio.",251],["Properties",251],["Property: Function: ",251],["Delay Echo delay in ms. 10 to 5000. Default = 500. ",251],["Decay Ratio Echo decay per delay. 0 to 1. 1.0 = No decay, 0.0 = total decay (ie simple 1 line delay). Default = 0.5.L ",251],["Wet Mix Volume of echo signal to pass to output. 0.0 to 1.0. Default = 1.0. ",251],["Dry Mix Volume of original signal to pass to output. 0.0 to 1.0. Default = 1.0. ",251],["Details",251],["The Wet Mix value determines the amplitude of the filtered signal, where the Dry Mix determines the amplitude of the unfiltered sound output.",251],["Hard surfaces reflects the propagation of sound. For example a large canyon can be made more convincing with the Audio Echo Filter.",251],["Sound propagates slower than light - we all know that from lightning and thunder. To simulate this, add an Audio Echo Filter to an event sound, set the Wet Mix to 0.0 and modulate the Delay to the distance between AudioSource and AudioListener.",251],["AudioEchoFilter",251],["Audio Filters",252],["You can modify the output of Audio Source and Audio Listener components by applying Audio Effects. These can filter the frequency ranges of the sound or apply reverb and other effects.",252],["The effects are applied by adding effect components to the object with the Audio Source or Audio Listener. The ordering of the components is important, since it reflects the order in which the effects will be applied to the source audio. For example, in the image below, an Audio Listener is modified first by an Audio Low Pass Filter and then an Audio Chorus Filter.",252],["To change the ordering of these and any other components, open a context menu in the inspector and select the Move Up or Move Down commands. Enabling or disabling an effect component determines whether it will be applied or not.",252],["Though highly optimized, some filters are still CPU intensive. Audio CPU usage can monitored in the profiler under the Audio Tab.",252],["See the other pages in this section for further information about the specific filter types available.",252],["AudioEffect",252],["Audio Effects",253],["You can modify the output of Audio Mixer components by applying Audio Effects. These can filter the frequency ranges of the sound or apply reverb and other effects.",253],["The effects are applied by adding effect components to the relevant section of the Audio Mixer. The ordering of the components is important, since it reflects the order in which the effects will be applied to the source audio. For example, in the image below, the Music section of an Audio Mixer is modified first by a Lowpass effect and then a compressor Effect, Flange Effect and so on.",253],["To change the ordering of these and any other components, open a context menu in the inspector and select the Move Up or Move Down commands. Enabling or disabling an effect component determines whether it will be applied or not.",253],["Though highly optimized, some filters are still CPU intensive. Audio CPU usage can monitored in the profiler under the Audio Tab.",253],["See the other pages in this section for further information about the specific effect types available.",253],["AudioEffectMixer",253],["Audio Flange Effect",254],["The Audio Flange Effect is used to create the audio effect produced by mixing two identical signals together, one signal delayed by a small and gradually changing period, usually smaller than 20 milliseconds.",254],["Properties",254],["Property: Function: ",254],["Drymix Percentage of original signal to pass to output. 0.0 to 100.0%. Default = 45%. ",254],["Wetmix Percentage of flange signal to pass to output. 0.0 to 100.0%. Default = 55%. ",254],["Depth 0.01 to 1.0. Default = 1.0. ",254],["Rate 0.1 to 20 Hz. Default = 10 Hz. ",254],["AudioFlangeEffect",254],["Audio High Pass Effect",255],["The Highpass Effect passes high frequencies of an AudioMixer group and cuts off signals with frequencies lower than the Cutoff Frequency.",255],["Properties",255],["Property: Function: ",255],["Cutoff freq Highpass cutoff frequency in Hertz (range 10.0 to 22000.0, default = 5000.0). ",255],["Resonance Highpass resonance quality value (range 1.0 to 10.0, default = 1.0). ",255],["Details",255],["The Resonance (short for Highpass Resonance Quality Factor) determines how much the filter's self-resonance is dampened. Higher highpass resonance quality indicates a lower rate of energy loss, that is the oscillations die out more slowly.",255],["AudioHighPassEffect",255],["Audio High Pass Filter",256],["The Audio High Pass Filter passes high frequencies of an AudioSource and cuts off signals with frequencies lower than the Cutoff Frequency.",256],["Properties",256],["Property: Function: ",256],["Cutoff Frequency Highpass cutoff frequency in Hertz (range 10.0 to 22000.0, default = 5000.0). ",256],["Highpass Resonance Q Highpass resonance quality value (range 1.0 to 10.0, default = 1.0). ",256],["Details",256],["The Highpass resonance Q (short for Highpass Resonance Quality Factor) determines how much the filter's self-resonance is dampened. Higher highpass resonance quality indicates a lower rate of energy loss, that is the oscillations die out more slowly.",256],["AudioHighPassFilter",256],["Audio High Pass Simple Effect",257],["The Highpass Simple Effect passes high frequencies of an AudioMixer group and cuts off signals with frequencies lower than the Cutoff Frequency.",257],["Properties",257],["Property: Function: ",257],["Cutoff freq Highpass cutoff frequency in Hertz (range 10.0 to 22000.0, default = 5000.0). ",257],["Details",257],["The Resonance (short for Highpass Resonance Quality Factor) determines how much the filter's self-resonance is dampened. Higher highpass resonance quality indicates a lower rate of energy loss, that is the oscillations die out more slowly.",257],["For additional control over the resonance value of the high pass filter use the Audio High Pass effect.",257],["AudioHighPassSimpleEffect",257],["Audio Listener",258],["The Audio Listener acts as a microphone-like device. It receives input from any given Audio Source in the scene and plays sounds through the computer speakers. For most applications it makes the most sense to attach the listener to the Main Camera. If an audio listener is within the boundaries of a Reverb Zone reverberation is applied to all audible sounds in the scene. Furthermore, Audio Effects can be applied to the listener and it will be applied to all audible sounds in the scene.",258],["Properties",258],["The Audio Listener has no properties. It simply must be added to work. It is always added to the Main Camera by default.",258],["Details",258],["The Audio Listener works in conjunction with Audio Sources, allowing you to create the aural experience for your games. When the Audio Listener is attached to a GameObject in your scene, any Sources that are close enough to the Listener will be picked up and output to the computer's speakers. Each scene can only have 1 Audio Listener to work properly.",258],["If the Sources are 3D (see import settings in Audio Clip), the Listener will emulate position, velocity and orientation of the sound in the 3D world (You can tweak attenuation and 3D/2D behavior in great detail in Audio Source) . 2D will ignore any 3D processing. For example, if your character walks off a street into a night club, the night club's music should probably be 2D, while the individual voices of characters in the club should be mono with their realistic positioning being handled by Unity.",258],["You should attach the Audio Listener to either the Main Camera or to the GameObject that represents the player. Try both to find what suits your game best.",258],["Hints",258],["Each scene can only have one Audio Listener.",258],["You access the Project-wide Audio settings using the Audio window (main menu: Edit > Project Settings, then select the Audio category).",258],["View the Audio Clip Component page for more information about Mono vs Stereo sounds.",258],["AudioListener",258],["Audio Low Pass Effect",259],["The Audio Low Pass Effect passes low frequencies of an AudioMixer group while removing frequencies higher than the Cutoff Frequency.",259],["Properties",259],["Property: Function: ",259],["Cutoff freq Lowpass cutoff frequency in Hertz (range 10.0 to 22000.0, default = 5000.0). ",259],["Resonance Lowpass resonance quality value (range 1.0 to 10.0, default = 1.0). ",259],["Details",259],["The Resonance (short for Lowpass Resonance Quality Factor) determines how much the filter's self-resonance is dampened. Higher lowpass resonance quality indicates a lower rate of energy loss, that is the oscillations die out more slowly.",259],["AudioLowPassEffect",259],["Audio Low Pass Filter",260],["The Audio Low Pass Filter passes low frequencies of an AudioSource or all sound reaching an AudioListener while removing frequencies higher than the Cutoff Frequency.",260],["Properties",260],["Property: Function: ",260],["Cutoff Frequency Lowpass cutoff frequency in Hertz (range 0.0 to 22000.0, default = 5000.0). ",260],["Lowpass Resonance Q Lowpass resonance quality value (range 1.0 to 10.0, default = 1.0). ",260],["Details",260],["The Lowpass Resonance Q (short for Lowpass Resonance Quality Factor) determines how much the filter's self-resonance is dampened. Higher lowpass resonance quality indicates a lower rate of energy loss, that is the oscillations die out more slowly.",260],["The Audio Low Pass Filter has a Rolloff curve associated with it, making it possible to set Cutoff Frequency over distance between the AudioSource and the AudioListener.",260],["Sounds propagates very differently given the environment. For example, to compliment a visual fog effect add a subtle low-pass to the Audio Listener. The high frequencies of a sound being emitted from behind a door will be filtered out by the door and so won't reach the listener. To simulate this, simply change the Cutoff Frequency when opening the door.",260],["AudioLowPassFilter",260],["Audio Low Pass Simple Effect",261],["The Audio Low Pass Simple Effect passes low frequencies of an AudioMixer group while removing frequencies higher than the Cutoff Frequency.",261],["Properties",261],["Property: Function: ",261],["Cutoff freq Lowpass cutoff frequency in Hertz (range 10.0 to 22000.0, default = 5000.0). ",261],["Details",261],["The Resonance (short for Lowpass Resonance Quality Factor) determines how much the filter's self-resonance is dampened. Higher lowpass resonance quality indicates a lower rate of energy loss, that is the oscillations die out more slowly.",261],["For additional control over the resonance value of the low pass filter use the Audio Low Pass effect.",261],["AudioLowPassSimpleEffect",261],["Audio",262],["The Audio settings (main menu: Edit > Project Settings, then select the Audio category) allows you to tweak the maximum volume of all sounds playing in the Scene.",262],["Property Function ",262],["Global Volume Set the volume for all sounds during playback. ",262],["Volume Rolloff Scale Set the global attenuation rolloff factor for Logarithmic rolloff-based sources. The higher the value, the faster the volume attenuates. Conversely, the lower the value, the slower it attenuates. Tip: A value of 1 simulates the \"real world\". ",262],["Doppler Factor Set how audible the Doppler effect is. Use 0 to disable it. Use 1 make it audible for fast moving objects.Tip: After setting the Doppler Factor to 1, you can tweak both Speed of Sound and Doppler Factor until you are satisfied. ",262],["Default Speaker Mode Set which speaker mode should be the default for your project. The default is 2, which corresponds to stereo speakers. For the full list of modes, see the AudioSpeakerMode API reference.Note: You can also change the speaker mode at runtime through scripting. See Audio Settings for details. ",262],["System Sample Rate Set the output sample rate. If set to 0, Unity uses the sample rate of the system. Note: This only serves as a reference only, since certain platforms allow you to change the sample rate, such as iOS or Android. ",262],["DSP Buffer Size Set the size of the DSP buffer to optimize for latency or performance. ",262],["Default Default buffer size. ",262],["Best Latency Trade off performance in favour of latency. ",262],["Good Latency Balance between latency and performance. ",262],["Best Performance Trade off latency in favour of performance. ",262],["Max Virtual Voices Set the number of virtual voices that the audio system manages. This value should always be larger than the number of voices played by the game. If not, Unity displays warnings in the console. ",262],["Max Real Voices Set the number of real voices that can play at the same time. At every frame, the loudest voice is picked. ",262],["Spatializer Plugin Choose which native audio plugin to use in order to perform spatialized filtering of 3D sources. ",262],["Ambisonic Decoder Plugin Choose which native audio plugin to perform ambisonic-to-binaural filtering of sources. ",262],["Disable Unity Audio Enable to deactivate the audio system in standalone builds. In the Editor the audio system is still on and supports previewing audio clips, but Unity does not handle calls to AudioSource.Play and AudioSource.playOnAwake in order to simulate behavior of the standalone build. ",262],["Virtualize Effect Enable to dynamically turn off effects and spatializers on AudioSources that are culled in order to save CPU. ",262],["AudioManager",262],["Audio Mixer",263],["Properties",263],["Property: Function: ",263],["S Button Soloing the group. ",263],["M Button Muting the group. ",263],["B Button Bypassing all the effects in the group. ",263],["When you select Add you can select from a list of effects that can be applied to the group.",263],["AudioMixer",263],["Audio Normalize Effect",264],["The Audio Normalize Effect applies a constant amount of gain to an audio stream to bring the average or peak amplitude to a target level.",264],["Properties",264],["Property: Function: ",264],["Fade in time Fade in time of the effect in milliseconds (range 0 to 20000.0, default = 5000.0 milliseconds). ",264],["Lowest volume (range 0.0 to 1.0, default = 0.10). ",264],["Maximum amp Maximum amplification (range 0.0 to 100000.0, default = 20 x). ",264],["AudioNormalizeEffect",264],["Audio Parametric Equalizer Effect",265],["The Audio Param EQ Effect is used to alter the frequency response of an audio system using linear filters.",265],["Properties",265],["Property: Function: ",265],["Center freq The frequency in Hertz where the gain is applied (range 20.0 to 22000.0, default = 8000.0 Hz). ",265],["Octave Range The number of Octaves over which the gain is applied (Centered on the Center Frequency) (range 0.20 to 5.00, default = 1.0 octave). ",265],["Frequency Gain The gain applied (range 0.05 to 3.00, default = 1.00 - no gain applied). ",265],["Details",265],["The graph shows the effect of the gain to be applied over the frequency range of the audio output.",265],["AudioParamEQEffect",265],["Audio Pitch Shifter Effect",266],["The Audio Pitch Shifter Effect is used to shift a signal up or down in pitch.",266],["Properties",266],["Property: Function: ",266],["Pitch The pitch multiplier (range 0.5 x to 2.0 x, default 1.0 x). ",266],["FFT Size (range 256.0 to 4096.0, default = 1024.0). ",266],["Overlap (range 1 to 32, default = 4). ",266],["Max channels The maximum number of channels (range 0 to 16, default = 0 channels). ",266],["AudioPitchShifterEffect",266],["Audio SFX Reverb Effect",267],["The SFX Reverb Effect takes the output of an Audio Mixer group and distorts it to create a custom reverb effect.",267],["Properties",267],["Property: Function: ",267],["Dry Level Mix level of dry signal in output in mB. Ranges from -10000.0 to 0.0. Default is 0 mB. ",267],["Room Room effect level at low frequencies in mB. Ranges from -10000.0 to 0.0. Default is -10000.0 mB. ",267],["Room HF Room effect high-frequency level in mB. Ranges from -10000.0 to 0.0. Default is 0.0 mB. ",267],["Decay Time Reverberation decay time at low-frequencies in seconds. Ranges from 0.1 to 20.0. Default is 1.0. ",267],["Decay HF Ratio Decay HF Ratio : High-frequency to low-frequency decay time ratio. Ranges from 0.1 to 2.0. Default is 0.5. ",267],["Reflections Early reflections level relative to room effect in mB. Ranges from -10000.0 to 1000.0. Default is -10000.0 mB. ",267],["Reflect Delay Early reflections delay time relative to room effect in mB. Ranges from -10000.0 to 2000.0. Default is 0.02. ",267],["Reverb Late reverberation level relative to room effect in mB. Ranges from -10000.0 to 2000.0. Default is 0.0 mB. ",267],["Reverb Delay Late reverberation delay time relative to first reflection in seconds. Ranges from 0.0 to 0.1. Default is 0.04 s. ",267],["Diffusion Reverberation diffusion (echo density) in percent. Ranges from 0.0 to 100.0. Default is 100.0%. ",267],["Density Reverberation density (modal density) in percent. Ranges from 0.0 to 100.0. Default is 100.0%. ",267],["HFReference Reference high frequency in Hz. Ranges from 20.0 to 20000.0. Default is 5000.0 Hz. ",267],["Room LF Room effect low-frequency level in mB. Ranges from -10000.0 to 0.0. Default is 0.0 mB. ",267],["LFReference Reference low-frequency in Hz. Ranges from 20.0 to 1000.0. Default is 250.0 Hz. ",267],["AudioReverbEffect",267],["Audio Reverb Filter",268],["The Audio Reverb Filter takes an Audio Clip and distorts it to create a custom reverb effect.",268],["Properties",268],["Property: Function: ",268],["Reverb Preset Custom reverb presets, select user to create your own customized reverbs. ",268],["Dry Level Mix level of dry signal in output in mB. Ranges from -10000.0 to 0.0. Default is 0. ",268],["Room Room effect level at low frequencies in mB. Ranges from -10000.0 to 0.0. Default is 0.0. ",268],["Room HF Room effect high-frequency level in mB. Ranges from -10000.0 to 0.0. Default is 0.0. ",268],["Room LF Room effect low-frequency level in mB. Ranges from -10000.0 to 0.0. Default is 0.0. ",268],["Decay Time Reverberation decay time at low-frequencies in seconds. Ranges from 0.1 to 20.0. Default is 1.0. ",268],["Decay HFRatio Decay HF Ratio : High-frequency to low-frequency decay time ratio. Ranges from 0.1 to 2.0. Default is 0.5. ",268],["Reflections Level Early reflections level relative to room effect in mB. Ranges from -10000.0 to 1000.0. Default is -10000.0. ",268],["Reflections Delay Early reflections delay time relative to room effect in mB. Ranges from 0 to 0.3. Default is 0.0. ",268],["Reverb Level Late reverberation level relative to room effect in mB. Ranges from -10000.0 to 2000.0. Default is 0.0. ",268],["Reverb Delay Late reverberation delay time relative to first reflection in seconds. Ranges from 0.0 to 0.1. Default is 0.04. ",268],["HFReference Reference high frequency in Hz. Ranges from 1000.0 to 20000.0. Default is 5000.0. ",268],["LFReference Reference low-frequency in Hz. Ranges from 20.0 to 1000.0. Default is 250.0. ",268],["Diffusion Reverberation diffusion (echo density) in percent. Ranges from 0.0 to 100.0. Default is 100.0. ",268],["Density Reverberation density (modal density) in percent. Ranges from 0.0 to 100.0. Default is 100.0. ",268],["Note:** These values can only be modified if your Reverb Preset is set to User, else these values will be grayed out and they will have default values for each preset.",268],["AudioReverbFilter",268],["Reverb Zones",269],["Reverb Zones take an Audio Clip and distorts it depending where the audio listener is located inside the reverb zone. They are used when you want to gradually change from a point where there is no ambient effect to a place where there is one, for example when you are entering a cavern.",269],["Properties",269],["Property: Function: ",269],["Min Distance Represents the radius of the inner circle in the gizmo, this determines the zone where there is a gradually reverb effect and a full reverb zone. ",269],["Max Distance Represents the radius of the outer circle in the gizmo, this determines the zone where there is no effect and where the reverb starts to get applied gradually. ",269],["Reverb Preset Determines the reverb effect that will be used by the reverb zone. ",269],["This diagram illustrates the properties of the reverb zone.",269],["Hints",269],["You can mix reverb zones to create combined effects.",269],["AudioReverbZone",269],["Audio Settings",270],["The AudioSettings class contains various bits of global information relating to the sound system, but most importantly it contains API that allows resetting the audio system at runtime in order to change settings such as speaker mode, sample rate (if supported by the platform), DSP buffer size and real/virtual voice counts.",270],["Many of these settings can also be configured in the Audio section of the project settings. When changed these settings will apply both to the editor and define the initial state of the game while changes performed using the AudioSettings API only apply to the runtime of the game and are reset back to the state defined in the project settings when stopping the game in the editor.",270],["The game may provide a sound options menu in which the user can change the sound settings or changes may come from outside in response to a device change such as plugging in an external audio input/output device or even an HDMI monitor which may also act as an audio device. The AudioConfiguration AudioSettings.GetConfiguration() / bool AudioSettings.Reset(AudioConfiguration config) API can read and apply global changes to the current sound system configuration and essentially replaces the AudioSettings.SetDSPBufferSize(...) function and the AudioSettings.outputSampleRate, AudioSettings.speakerMode which had the side effect of reinitializing the whole audio system when the properties were modified.",270],["The API defines the AudioSettings.OnAudioConfigurationChanged(bool device) to set up a callback through which scripts can be notified about audio configuration changes. These can either be caused by actual device changes or by a configuration initiated by script.",270],["It is important to note that whenever runtime modifications of the global audio system configuration are performed all audio objects have to be reloaded. This works for disk-based AudioClip assets and audio mixers, but any AudioClips generated or modified by scripts are lost and have to be recreated. Likewise any play state is lost too, so these need to be regenerated in the AudioSettings.OnAudioConfigurationChanged(...) callback.",270],["For details and examples see the scripting API reference.",270],["AudioSettings",270],["Audio Source",271],["The Audio Source plays back an Audio Clip in the scene. The clip can be played to an audio listener or through an audio mixer. The audio source can play any type of Audio Clip and can be configured to play these as 2D, 3D, or as a mixture (SpatialBlend). The audio can be spread out between speakers (stereo to 7.1) (Spread) and morphed between 3D and 2D (SpatialBlend). This can be controlled over distance with falloff curves. Also, if the listener is within one or multiple Reverb Zones, reverberation is applied to the source. Individual filters can be applied to each audio source for an even richer audio experience. See Audio Effects for more details.",271],["Properties",271],["Property Description ",271],["Audio Clip Reference to the sound clip file that will be played. ",271],["Output By default, the clip is output directly to the Audio Listener in the Scene. Use this property to output the clip to an Audio Mixer instead. ",271],["Mute If enabled the sound will be playing but muted. ",271],["Spatialize Enables or disables custom spatialization for the Audio Source. This property is only available if you have installed an audio spatializer SDK, and selected it in your project's global audio settings.",271],["Spatialize Post Effect Determines whether the custom spatializer is applied before or after other effects attached to the Audio Source. Enable this property to apply the custom spatializer after other effects attached to the Audio Source. This property is only available if you have enabled the Spatialize property for the Audio Source. ",271],["Bypass Effects This is to quickly \"by-pass\" filter effects applied to the audio source. An easy way to turn all effects on/off. ",271],["Bypass Listener Effects This is to quickly turn all Listener effects on/off. ",271],["Bypass Reverb Zones This is to quickly turn all Reverb Zones on/off. ",271],["Play On Awake If enabled, the sound will start playing the moment the scene launches. If disabled, you need to start it using the Play() command from scripting. ",271],["Loop Enable this to make the Audio Clip loop when it reaches the end. ",271],["Priority Determines the priority of this audio source among all the ones that coexist in the scene. (Priority: 0 = most important. 256 = least important. Default = 128.). Use 0 for music tracks to avoid it getting occasionally swapped out. ",271],["Volume How loud the sound is at a distance of one world unit (one meter) from the Audio Listener. ",271],["Pitch Amount of change in pitch due to slowdown/speed up of the Audio Clip. Value 1 is normal playback speed. ",271],["Stereo Pan Sets the position in the stereo field of 2D sounds. ",271],["Spatial Blend Sets how much the 3D engine has an effect on the audio source. ",271],["Reverb Zone Mix Sets the amount of the output signal that gets routed to the reverb zones. The amount is linear in the (0 - 1) range, but allows for a 10 dB amplification in the (1 - 1.1) range which can be useful to achieve the effect of near-field and distant sounds. ",271],["3D Sound Settings Settings that are applied proportionally to the Spatial Blend parameter. ",271],["Doppler Level Determines how much doppler effect will be applied to this audio source (if is set to 0, then no effect is applied). ",271],["Spread Sets the spread angle to 3D stereo or multichannel sound in speaker space. ",271],["Min Distance Within the MinDistance, the sound will stay at loudest possible. Outside MinDistance it will begin to attenuate. Increase the MinDistance of a sound to make it 'louder' in a 3d world, and decrease it to make it 'quieter' in a 3d world. ",271],["Max Distance The distance where the sound stops attenuating at. Beyond this point it will stay at the volume it would be at MaxDistance units from the listener and will not attenuate any more. ",271],["Rolloff Mode How fast the sound fades. The higher the value, the closer the Listener has to be before hearing the sound. (This is determined by a Graph). ",271],["- Logarithmic Rolloff The sound is loud when you are close to the audio source, but when you get away from the object it decreases significantly fast. ",271],["- Linear Rolloff The further away from the audio source you go, the less you can hear it. ",271],["- Custom Rolloff The sound from the audio source behaves accordingly to how you set the graph of roll offs. ",271],["Types of Rolloff",271],["There are three Rolloff modes: Logarithmic, Linear and Custom Rolloff. The Custom Rolloff can be modified by modifying the volume distance curve as described below. If you try to modify the volume distance function when it is set to Logarithmic or Linear, the type will automatically change to Custom Rolloff.",271],["Distance Functions",271],["There are several properties of the audio that can be modified as a function of the distance between the audio source and the audio listener.",271],["Volume**: Amplitude(0.0 - 1.0) over distance.",271],["Spatial Blend**: 2D (original channel mapping) to 3D (all channels downmixed to mono and attenuated according to distance and direction).",271],["Spread**: Angle (degrees 0.0 - 360.0) over distance.",271],["Low-Pass** (only if LowPassFilter is attached to the AudioSource): Cutoff Frequency (22000.0-10.0) over distance.",271],["Reverb Zone**: Amount of signal routed to the reverb zones. Note that the volume property and distance and directional attenuation are applied to the signal first and therefore affect both the direct and reverberated signals.",271],["To modify the distance functions, you can edit the curves directly. For more information, see the guide to Editing Curves.",271],["Creating Audio Sources",271],["Audio Sources don't do anything without an assigned Audio Clip. The Clip is the actual sound file that will be played back. The Source is like a controller for starting and stopping playback of that clip, and modifying other audio properties.",271],["To create a new Audio Source:",271],["Import your audio files into your Unity Project. These are now Audio Clips.",271],["Create an Audio Source GameObject (menu: GameObject > Audio > Audio Source).",271],["With the new GameObject selected, select Component > Audio > Audio Source.",271],["In the Inspector, find the Audio Clip property on the Audio Source Component and assign a clip, either by dragging one from the Project Window or by clicking the small circle icon to the right of the Inspector property, then selecting a clip from the list.",271],["Note:** If you want to create an Audio Source just for one Audio Clip that you have in the Assets folder then you can just drag that clip to the scene view - a GameObject with an Audio Source component will be created automatically for it. Dragging a clip onto on existing GameObject will attach the clip along with a new Audio Source if there isn't one already there. If the object does already have an Audio Source then the newly dragged clip will replace the one that the source currently uses.",271],["API resources",271],["\nAudioSource\n",271],["\nAudioClip\n",271],["\nAudioListener\n",271],["\nAudioMixer\n",271],["AudioSource",271],["Avatar Mapping tab",272],["The Avatar Mapping tab is available when the Unity Editor is in Avatar Configuration mode.",272],["To enter Avatar Configuration mode, either:",272],["\nselect the Avatar Asset in the Project window, and click \"Configure Avatar\" in the Inspector, or\n",272],["\nselect the Model Asset in the Project window, go to the \"Rig\" tab in the Inspector, and click \"Configure...\" under the Avatar Definition menu.\n",272],["When you are in Avatar Configuration mode, the Avatar Mapping tab appears in the Inspector displaying Unity's bone mapping:",272],["(A)** Buttons to toggle between the Mapping and Muscles & Settings tabs. You must Apply or Revert any changes made before switching between tabs.",272],["(B)** Buttons to switch between the sections of the Avatar: Body, Head, Left Hand, and Right Hand.",272],["(C)** Menus which provide various Mapping and Pose tools to help you map the bone structure to the Avatar.",272],["(D)** Buttons to accept any changes made (Accept), discard any changes (Revert), and leave the Avatar window (Done). You must Apply or Revert any changes made before leaving the Avatar window.",272],["The Avatar Mapping indicates which of the bones are required (solid circles) and which are optional (dotted circles). Unity can interpolate optional bone movements automatically.",272],["",272],["Saving and reusing Avatar data (Human Template files)",272],["You can save the mapping of bones in your skeleton to the Avatar on disk as a Human Template file (extention *.ht). You can reuse this mapping for any character. For example, you want to put the Avatar mapping under source control and you prefer to commit text-based files; or perhaps you want to parse the file with your own custom tool.",272],["To save the Avatar data in a Human Template file, choose Save from the Mapping drop-down menu at the bottom of the Avatar window.",272],["Unity displays a dialog box for you to choose the name and location of the file to save.",272],["To load a Human Template file previously created, choose Mapping > Load and select the file you want to load.",272],["Using Avatar Masks",272],["Sometimes it is useful to restrict an animation to specific body parts. For example, an walking animation might involve the character swaying their arms, but if they pick up a torch, they should hold it up to cast light. You can use an Avatar Body Mask to specify which parts of a character an animation should be restricted to. See documentation on Avatar Masks for further details.",272],["Avatar",272],["Avatar Mask window",273],["There are two ways to define which parts of your animation should be masked:",273],["By selecting from a Humanoid body map",273],["By choosing which bones to include or exclude from a Transform hierarchy",273],["",273],["Humanoid body selection",273],["If your animation uses a Humanoid Avatar, you can select or deselect portions of the simplified humanoid body diagram to indicate where to mask the animation:",273],["The body diagram groups body parts into these portions:",273],["Head",273],["Left Arm",273],["Right Arm",273],["Left Hand",273],["Right Hand",273],["Left Leg",273],["Right Leg",273],["Root (denoted by the \"shadow\" under the feet)",273],["To include animation from one of these body portions, click the Avatar diagram for that portion until it appears as green.",273],["To exclude animation, click the body portion until it appears red.",273],["To include or exclude all, double-click the empty space surrounding the Avatar.",273],["You can also toggle Inverse Kinematics (IK) for hands and feet, which determines whether or not to include IK curves in animation blending.",273],["",273],["Transform selection",273],["Alternatively, if your animation does not use a Humanoid Avatar, or if you want more detailed control over which individual bones are masked, you can select or deselect portions of the Model's hierarchy:",273],["Assign a reference to the Avatar whose transform you would like to mask.",273],["Click the Import Skeleton button. The hierarchy of the avatar appears in the inspector.",273],["You can check each bone in the hierarchy to use as your mask.",273],["Mask assets can be used in Animator Controllers, when specifying Animation Layers to apply masking at runtime, or in the import settings of of your animation files to apply masking during to the import animation.",273],["A benefit of using Masks is that they tend to reduce memory overheads since body parts that are not active do not need their associated animation curves. Also, the unused curves need not be calculated during playback which will tend to reduce the CPU overhead of the animation.",273],["AvatarMask",273],["Billboard asset",274],["A Billboard asset is a collection of pre-rendered images of a mesh. Use it with the Billboard Renderer to an object that is distant from the Camera at a low level of detail (LOD).",274],["The most common way to generate a Billboard Asset is to create files in SpeedTree Modeler, and then import them into Unity.",274],["It is also possible to create your own Billboard Assets from script. For more information, see the API reference for BillboardAsset.",274],["BillboardAsset",274],["Billboard Renderer component",275],["The Billboard Renderer renders Billboard Assets. Billboards are a level-of-detail (LOD) method for drawing complicated 3D Meshes in a simpler way when they are far away from the Camera. When a Mesh is far away from the Camera, its size on screen means there is no need to draw it in full detail. Instead, you can replace the complex 3D Mesh with a 2D billboard representation.",275],["Certain features, such as SpeedTree, export Billboard Assets, but you can also create them yourself. For information on how to create a Billboard Asset, see the BillboardAssets Manual page and the BillboardAsset Script reference page.",275],["Properties",275],["Properties on this component are split into the following sections:",275],["\nGeneral\n",275],["\nLighting\n",275],["\nProbes\n",275],["\nAdditional Settings\n",275],["",275],["General",275],["This section contains general properties in the root of the component.",275],["Property: Function: ",275],["Billboard Specifies the Billboard Asset this component renders. ",275],["",275],["Lighting",275],["The Lighting section contains properties that specify how this Billboard Renderer interacts with lighting in Unity.",275],["Property: Function: ",275],["Cast Shadows Specify if and how the Mesh casts shadows when a suitable Light shines on it. ",275],["On The Mesh casts a shadow when a shadow-casting Light shines on it. ",275],["Off The Mesh does not cast shadows. ",275],["Two Sided The Mesh casts two-sided shadows from either side. Enlighten and the Progressive Lightmapper do not support two-sided shadows. ",275],["Shadows Only Shadows from the Mesh are visible, but not the Mesh itself. ",275],["Receive Shadows Enable this option to make the Mesh display any shadows that are cast upon it. This is only supported when using the Progressive Lightmapper. ",275],["",275],["Probes",275],["The Probes section contains properties relating to Light Probes and Reflection Probes.",275],["Property Function ",275],["Light Probes Set how this Renderer receives light from the Light Probe system.For more information, see Light Probes. ",275],["Off The Renderer doesn’t use any interpolated Light Probes. ",275],["Blend Probes The Renderer uses one interpolated Light Probe. This is the default value. ",275],["Use Proxy Volume The Renderer uses a 3D grid of interpolated Light Probes. ",275],["Custom Provided The Renderer extracts Light Probe shader uniform values from the MaterialPropertyBlock. ",275],["Proxy Volume Override Set a reference to another GameObject that has a Light Probe Proxy Volume component.This property is only visible when Light Probes is set to Use Proxy Volume. ",275],["Reflection Probes Set how the Renderer receives reflections from the Reflection Probe system.",275],["Off Disables Reflection Probes. Unity uses a skybox for reflection. ",275],["Blend Probes Enables Reflection Probes. Blending occurs only between Reflection Probes. This is useful in indoor environments where the character may transition between areas with different lighting settings. ",275],["Blend Probes and Skybox Enables Reflection Probes. Blending occurs between Reflection Probes, or between Reflection Probes and the default reflection. This is useful for outdoor environments. ",275],["Simple Enables Reflection Probes, but no blending occurs between Reflection Probes when there are two overlapping volumes. ",275],["",275],["Additional Settings",275],["This section contains additional rendering properties.",275],["Property Function ",275],["Motion Vectors Set whether to use motion vectors to track this Renderer's per-pixel, screen-space motion from one frame to the next. You can use this information to apply post-processing effects such as motion blur.Note that not all platforms support motion vectors. See SystemInfo.supportsMotionVectors for more information. ",275],["Camera Motion Only Use only Camera movement to track motion. ",275],["Per Object Motion Use a specific pass to track motion for this Renderer. ",275],["Force No Motion Do not track motion. ",275],["Dynamic Occlusion When Dynamic Occlusion is enabled, Unity culls this Renderer when it is blocked from a Camera's view by a Static Occluder. Dynamic Occlusion is enabled by default.When Dynamic Occlusion is disabled, Unity does not cull this Renderer when it is blocked from a Camera's view by a Static Occluder. Disable Dynamic Occlusion to achieve effects such as drawing the outline of a character behind a wall.See documentation on occlusion culling for more information. ",275],["BillboardRenderer",275],["Blend Trees",276],["A common task in game animation is to blend between two or more similar motions. Perhaps the best known example is the blending of walking and running animations according to the character's speed. Another example is a character leaning to the left or right as it turns during a run.",276],["It is important to distinguish between Transitions and Blend Trees. While both are used for creating smooth animation, they are used for different kinds of situations.",276],["Transitions are used for transitioning smoothly from one Animation State to another over a given amount of time. Transitions are specified as part of an Animation State Machine. A transition from one motion to a completely different motion is usually fine if the transition is quick.",276],["Blend Trees are used for allowing multiple animations to be blended smoothly by incorporating parts of them all to varying degrees. The amount that each of the motions contributes to the final effect is controlled using a blending parameter, which is just one of the numeric animation parameters associated with the Animator Controller. In order for the blended motion to make sense, the motions that are blended must be of similar nature and timing. Blend Trees are a special type of state in an Animation State Machine.",276],["Examples of similar motions could be various walk and run animations. In order for the blend to work well, the movements in the clips must take place at the same points in normalized time. For example, walking and running animations can be aligned so that the moments of contact of foot to the floor take place at the same points in normalized time (e.g. the left foot hits at 0.0 and the right foot at 0.5). Since normalized time is used, it doesn't matter if the clips are of different length.",276],["Using Blend Trees",276],["To start working with a new Blend Tree, you need to:",276],["Right-click on empty space on the Animator Controller Window.",276],["Select Create State > From New Blend Tree from the context menu that appears.",276],["Double-click on the Blend Tree to enter the Blend Tree Graph.",276],["The Animator Window now shows a graph of the entire Blend Tree while the Inspector shows the currently selected node and its immediate children.",276],["To add animation clips to the blend tree you can select the blend tree, then click the plus icon in the motion field in the inspector.",276],["Alternatively, you can add animation clips or child blend nodes by right-clicking on the blend tree and selecting from the context menu:",276],["When the blendtree is set up with Animation clips and input parameters, the inspector window gives a graphical visualization of how the animations are combined as the parameter value changes (as you drag the slider, the arrows from the tree root change their shading to show the dominant animation clip).",276],["You can select any of the nodes in the Blend Tree graph to inspect it in the Inspector. If the selected node is an Animation Clip the Inspector for that Animation Clip will be shown. The settings will be read-only if the animation is imported from a model. If the node is a Blend Node, the Inspector for Blend Nodes will be shown.",276],["You can choose either 1D or 2D blending from the Blend Type menu; the differences between the two types are described on their own pages in this section.",276],["Blend Trees and Root Motion",276],["The blending between animations is handled using linear interpolation (ie, the amount of each animation is an average of the separate animations weighted by the blending parameter). However, you should note that root motion is not interpolated in the same way. See the page about root motion for further details about how this might affect your characters.",276],["BlendTree",276],["Box Collider component reference",277],["The Box Collider is a basic cuboid-shaped collision primitive.",277],["Properties",277],["Property: Function: ",277],["Is Trigger If enabled, this Collider is used for triggering events, and is ignored by the physics engine. ",277],["Material Reference to the Physics Material that determines how this Collider interacts with others. ",277],["Center The position of the Collider in the object's local space. ",277],["Size The size of the Collider in the X, Y, Z directions. ",277],["Details",277],["Box Colliders are rectangular cuboids and are useful for items such as crates or chests. However, you can use a thin box as a floor, wall or ramp. The Box Collider is also a useful element in a Compound Collider.",277],["To edit the box's shape, press the Edit Collider button in the Inspector. To exit the Collider Edit Mode press the Edit Collider button again. A vertex appears in the center of each face of the Box Collider in Edit Mode. To move the vertices, drag them when the mouse is over the vertex to make the Box Collider bigger and smaller.",277],["BoxCollider",277],["Box Collider 2D",278],["The Box Collider 2D is a Collider that interacts with the 2D physics system. It is a rectangle in shape with a defined position, width and height in the local coordinate space of a Sprite. Note: The selection rectangle is axis-aligned, with its edges parallel to the X or Y axes of local space.",278],["Property Function ",278],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",278],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",278],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",278],["Used by Composite Enable this if you want this Collider to be used by an attached Composite Collider 2D.Note: When you enable Used by Composite, other properties disappear from the Box Collider 2D component as they are now controlled by the attached Composite Collider 2D. The properties that disappear from the Box Collider 2D are Material, Is Trigger, Used By Effector, and Edge Radius. ",278],["Auto Tiling Enable this if the Sprite Renderer component for the selected Sprite has the Draw Mode set to Tiled. This enables automatic updates to the shape of the Collider 2D, allowing the shape to automatically readjust when the Sprite’s dimensions change. If you don’t enable Auto Tiling, the Collider 2D geometry doesn’t automatically repeat. ",278],["Offset Set the local offset values of the Collider 2D geometry. ",278],["Size Set the size of the box in local space units. ",278],["Edge Radius Set a value that forms a radius around the edge of the Collider. This results in a larger Collider 2D with rounded convex corners. The default value is 0 (no radius). ",278],["Layer Overrides Expand for the Layer override settings. ",278],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",278],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",278],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",278],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",278],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",278],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",278],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",278],["BoxCollider2D",278],["Brushes",279],["When you apply a tool such as Paint Texture or Smooth Height to the Terrain, Unity uses a Brush, which is a ScriptableObject in the Terrain system. The Brush defines the tool's shape and strength of influence.",279],["Built-in Brushes",279],["Unity comes with a collection of built-in Brushes. They range from simple circles for quickly sketching designs, to more randomized scatter shapes that are good for creating detail and natural-looking features.",279],["Custom Brushes",279],["You can create your own custom Brushes with unique shapes or specific parameters for your needs. For example, use the heightmap Texture of a specific geological feature to define a Brush, then use the Stamp Terrain tool to place that feature on your Terrain.",279],["To create a new Brush, click the New Brush button in the Terrain Inspector window.",279],["After you click New Brush, the Select Texture2D window appears. Choose a Texture to define the shape of your new Brush, then use the Brush Inspector to adjust the Falloff and Radius Scale values.",279],["Alternatively, right-click in the Project window, and choose Create > Brush to create a new Brush. The default Brush shows a simple circle defined by a white Mask Texture, a Falloff curve, and a Radius Scale of 1. Use the Brush Inspector to change these values, or set a Texture to define the shape of the Brush. You can also use the Remap slider and the Invert Remap Range option to further modify the grayscale values of the Brush Texture.",279],["Brush settings",279],["Property Function ",279],["Mask Texture Defines the shape and strength of the Brush. Select a Texture in your project, and the system creates a grayscale mask from the Texture. If the selected Texture has multiple color channels, the Brush uses the Red channel as its source. ",279],["Remap Remaps the grayscale values of the Brush mask, after applying the Falloff curve. The Editor remaps black values in the Brush mask to the value you select using the left side of the slider, and remaps white values in the Brush mask to the value you select using the right side of the slider. ",279],["Invert Remap Range Inverts the left and right sides of the Remap slider, which basically inverts the values of the entire mask. ",279],["Falloff Defines a curve that affects the strength of the Brush in a circular fashion. Click the Falloff curve to open the Unity Curve Editor, where you can edit the curve to create effects ranging from smooth fades to sharp edges. ",279],["Radius Scale Affects the scale of the falloff curve. Use this option to increase or decrease the radius of the curve. ",279],["2019-10-22 ",279],["Updated screenshots to match the new UI and added information about new options in the Brush Inspector.",279],["Brush",279],["Buoyancy Effector 2D",280],["The Buoyancy Effector 2D defines simple fluid behaviour such as floating and the drag and flow of fluid. You can also control a fluid surface, with the fluid behaviour taking place below.",280],["Properties",280],["Property: Function: ",280],["Use Collider Mask Check this box to enable the 'Collider Mask' property. If this is not enabled, the Global Collision Matrix will be used as the default for all Collider 2Ds. ",280],["Collider Mask The mask used to select specific Layers allowed to interact with the effector. Note that this option only displays if you have selected Use Collider Mask. ",280],["Surface Level Defines the surface location of the buoyancy fluid. When a GameObject is above this line, no buoyancy forces are applied. When a GameObject is intersecting or completely below this line, buoyancy forces are applied. This is a location specified as a world-space offset along the world y-axis, but is also scaled by the GameObject's Transform component. ",280],["Density The density of the fluid. Colliders with a higher density sink, those with a lower density float, and those with the same density appear suspended in the fluid. ",280],["Linear Drag The drag coefficient affecting positional movement of a GameObject. This only applies when inside the fluid. ",280],["Angular Drag The drag coefficient affecting rotational movement of a GameObject. This only applies when inside the fluid. ",280],["Flow Angle The world-space angle (in degrees) for the direction of fluid flow. Fluid flow applies buoyancy forces in the specified direction. ",280],["Flow Magnitude The \"power\" of the fluid flow force. Combined with Fluid Angle, this specifies the level of buoyancy force applied to GameObjects inside the fluid. The magnitude can also be negative, in which case the buoyancy forces are applied at 180 degrees to the Flow Angle. ",280],["Flow Variation Enter a value here to randomly vary the fluid forces. Specify a positive or negative variation to randomly add or subtract from the Fluid Magnitude. ",280],["BuoyancyEffector2D",280],["Camera component",281],["Cameras are the devices that capture and display the world to the player. By customizing and manipulating cameras, you can make the presentation of your game truly unique. You can have an unlimited number of cameras in a scene. They can be set to render in any order, at any place on the screen, or only certain parts of the screen.",281],["Camera Inspector reference",281],["Unity displays different properties in the Camera Inspector depending on the render pipeline that your Project uses.",281],["If your Project uses the Universal Render Pipeline (URP), see the URP package documentation microsite.",281],["If your Project uses the High Definition Render Pipeline (HDRP), see the HDRP package documentation microsite.",281],["If your Project uses the Built-in Render Pipeline, Unity displays the following properties:",281],["Property: Function: ",281],["Clear Flags Determines which parts of the screen will be cleared. This is handy when using multiple Cameras to draw different game elements. ",281],["Background The color applied to the remaining screen after all elements in view have been drawn and there is no skybox. ",281],["Culling Mask Includes or omits layers of objects to be rendered by the Camera. Assigns layers to your objects in the Inspector. ",281],["Projection Toggles the camera's capability to simulate perspective. ",281],["        Perspective Camera will render objects with perspective intact. ",281],["        Orthographic Camera will render objects uniformly, with no sense of perspective. NOTE: Deferred rendering is not supported in Orthographic mode. Forward rendering is always used. ",281],["Size (when Orthographic is selected) The viewport size of the Camera when set to Orthographic. ",281],["FOV Axis (when Perspective is selected) Field of view axis. ",281],["        Horizontal The Camera uses a horizontal field of view axis. ",281],["        Vertical The Camera uses a vertical field of view axis. ",281],["Field of view (when Perspective is selected) The Camera's view angle, measured in degrees along the axis specified in the FOV Axis drop-down. ",281],["Physical Camera Tick this box to enable the Physical Camera properties for this camera. When the Physical Camera properties are enabled, Unity calculates the Field of View using the properties that simulate real-world camera attributes: Focal Length, Sensor Size, and Lens Shift. Physical Camera properties are not visible in the Inspector until you tick this box. ",281],["        Focal Length Set the distance, in millimeters, between the camera sensor and the camera lens.Lower values result in a wider Field of View, and vice versa. When you change this value, Unity automatically updates the Field of View property accordingly. ",281],["        Sensor Type Specify the real-world camera format you want the camera to simulate. Choose the desired format from the list. When you choose a camera format, Unity sets the the Sensor Size > X and Y properties to the correct values automatically. If you change the Sensor Size values manually, Unity automatically sets this property to Custom. ",281],["        Sensor Size Set the size, in millimeters, of the camera sensor. Unity sets the X and Y values automatically when you choose the Sensor Type. You can enter custom values if needed. ",281],["                X The width of the sensor. ",281],["                Y The height of the sensor. ",281],["        Lens Shift Shift the lens horizontally or vertically from center. Values are multiples of the sensor size; for example, a shift of 0.5 along the X axis offsets the sensor by half its horizontal size. You can use lens shifts to correct distortion that occurs when the camera is at an angle to the subject (for example, converging parallel lines). Shift the lens along either axis to make the camera frustum oblique. ",281],["                X The horizontal sensor offset. ",281],["                Y The vertical sensor offset. ",281],["        Gate Fit Options for changing the size of the resolution gate (size/aspect ratio of the game view) relative to the film gate (size/aspect ratio of the Physical Camera sensor). For further information about resolution gate and film gate, see documentation on Physical Cameras. ",281],["                Vertical Fits the resolution gate to the height of the film gate. If the sensor aspect ratio is larger than the game view aspect ratio, Unity crops the rendered image at the sides. If the sensor aspect ratio is smaller than the game view aspect ratio, Unity overscans the rendered image at the sides. When you choose this setting, changing the sensor width (Sensor Size > X property) has no effect on the rendered image. ",281],["                Horizontal Fits the resolution gate to the width of the film gate. If the sensor aspect ratio is larger than the game view aspect ratio, Unity overscans the rendered image on the top and bottom. If the sensor aspect ratio is smaller than the game view aspect ratio, Unity crops the rendered image on the top and bottom. When you choose this setting, changing the sensor height (Sensor Size > Y property) has no effect on the rendered image. ",281],["                Fill Fits the resolution gate to either the width or height of the film gate, whichever is smaller. This crops the rendered image. ",281],["                Overscan Fits the resolution gate to either the width or height of the film gate, whichever is larger. This overscans the rendered image. ",281],["                None Ignores the resolution gate and uses the film gate only. This stretches the rendered image to fit the game view aspect ratio. ",281],["Clipping Planes Distances from the camera to start and stop rendering. ",281],["        Near The closest point relative to the camera that drawing will occur. ",281],["        Far The furthest point relative to the camera that drawing will occur. ",281],["Viewport Rect Four values that indicate where on the screen this camera view will be drawn. Measured in Viewport Coordinates (values 0-1). ",281],["        X The beginning horizontal position that the camera view will be drawn. ",281],["        Y The beginning vertical position that the camera view will be drawn. ",281],["        W (Width) Width of the camera output on the screen. ",281],["        H (Height) Height of the camera output on the screen. ",281],["Depth The camera's position in the draw order. Cameras with a larger value will be drawn on top of cameras with a smaller value. ",281],["Rendering Path Options for defining what rendering methods will be used by the camera. ",281],["        Use Player Settings This camera will use whichever Rendering Path is set in the Player Settings. ",281],["        Vertex Lit All objects rendered by this camera will be rendered as Vertex-Lit objects. ",281],["        Forward All objects will be rendered with one pass per material. ",281],["Target Texture Reference to a Render Texture that will contain the output of the Camera view. Setting this reference will disable this Camera's capability to render to the screen. ",281],["Occlusion Culling Enables Occlusion Culling for this camera. Occlusion Culling means that objects that are hidden behind other objects are not rendered, for example if they are behind walls. See Occlusion Culling for details. ",281],["Allow HDR Enables High Dynamic Range rendering for this camera. See High Dynamic Range Rendering for details. ",281],["Allow MSAA Enables multi sample antialiasing for this camera. ",281],["Allow Dynamic Resolution Enables Dynamic Resolution rendering for this camera. See Dynamic Resolution for details. ",281],["Target Display Defines which external device to render to. Between 1 and 8. ",281],["Details",281],["Cameras are essential for displaying your game to the player. They can be customized, scripted, or parented to achieve just about any kind of effect imaginable. For a puzzle game, you might keep the Camera static for a full view of the puzzle. For a first-person shooter, you would parent the Camera to the player character, and place it at the character's eye level. For a racing game, you'd probably have the Camera follow your player's vehicle.",281],["You can create multiple Cameras and assign each one to a different Depth. Cameras are drawn from low Depth to high Depth. In other words, a Camera with a Depth of 2 will be drawn on top of a Camera with a depth of 1. You can adjust the values of the Normalized View Port Rectangle property to resize and position the Camera's view onscreen. This can create multiple mini-views like missile cams, map views, rear-view mirrors, etc.",281],["Render path",281],["Unity supports different rendering paths. You should choose which one you use depending on your game content and target platform / hardware. Different rendering paths have different features and performance characteristics that mostly affect lights and shadows.",281],["The rendering path used by your Project is chosen in the Player settings. Additionally, you can override it for each Camera.",281],["For more information on rendering paths, check the rendering paths page.",281],["Clear Flags",281],["Each Camera stores color and depth information when it renders its view. The portions of the screen that are not drawn in are empty, and will display the skybox by default. When you are using multiple Cameras, each one stores its own color and depth information in buffers, accumulating more data as each Camera renders. As any particular Camera in your scene renders its view, you can set the Clear Flags to clear different collections of the buffer information. To do this, choose one of the following four options:",281],["Skybox",281],["This is the default setting. Any empty portions of the screen will display the current Camera's skybox. If the current Camera has no skybox set, it will default to the skybox chosen in the Lighting Window (menu: Window > Rendering > Lighting). It will then fall back to the Background Color. Alternatively a Skybox component can be added to the camera.",281],["Solid color",281],["Any empty portions of the screen will display the current Camera's Background Color.",281],["Depth only",281],["If you want to draw a player's gun without letting it get clipped inside the environment, set one Camera at Depth 0 to draw the environment, and another Camera at Depth 1 to draw the weapon alone. Set the weapon Camera's Clear Flags to depth only. This will keep the graphical display of the environment on the screen, but discard all information about where each object exists in 3-D space. When the gun is drawn, the opaque parts will completely cover anything drawn, regardless of how close the gun is to the wall.",281],["Don't clear",281],["This mode does not clear either the color or the depth buffer. The result is that each frame is drawn over the next, resulting in a smear-looking effect. This isn't typically used in games, and would more likely be used with a custom shader.",281],["Note that on some GPUs (mostly mobile GPUs), not clearing the screen might result in the contents of it being undefined in the next frame. On some systems, the screen may contain the previous frame image, a solid black screen, or random colored pixels.",281],["Clip Planes",281],["The Near and Far Clip Plane properties determine where the Camera's view begins and ends. The planes are laid out perpendicular to the Camera's direction and are measured from its position. The Near plane is the closest location that will be rendered, and the Far plane is the furthest.",281],["The clipping planes also determine how depth buffer precision is distributed over the scene. In general, to get better precision you should move the Near plane as far as possible.",281],["Note that the near and far clip planes together with the planes defined by the field of view of the camera describe what is popularly known as the camera frustum. Unity ensures that when rendering your objects those which are completely outside of this frustum are not displayed. This is called Frustum Culling. Frustum Culling happens irrespective of whether you use Occlusion Culling in your game.",281],["For performance reasons, you might want to cull small objects earlier. For example, small rocks and debris could be made invisible at much smaller distance than large buildings. To do that, put small objects into a separate layer and set up per-layer cull distances using Camera.layerCullDistances script function.",281],["Culling Mask",281],["The Culling Mask is used for selectively rendering groups of objects using Layers. More information on using layers can be found here.",281],["Normalized Viewport Rectangles",281],["Normalized Viewport Rectangle is specifically for defining a certain portion of the screen that the current camera view will be drawn upon. You can put a map view in the lower-right hand corner of the screen, or a missile-tip view in the upper-left corner. With a bit of design work, you can use Viewport Rectangle to create some unique behaviors.",281],["It's easy to create a two-player split screen effect using Normalized Viewport Rectangle. After you have created your two cameras, change both camera's H values to be 0.5 then set player one's Y value to 0.5, and player two's Y value to 0. This will make player one's camera display from halfway up the screen to the top, and player two's camera start at the bottom and stop halfway up the screen.",281],["Orthographic",281],["Marking a Camera as Orthographic removes all perspective from the Camera's view. This is mostly useful for making isometric or 2D games.",281],["Note that fog is rendered uniformly in orthographic camera mode and may therefore not appear as expected. This is because the Z coordinate of the post-perspective space is used for the fog \"depth\". This is not strictly accurate for an orthographic camera but it is used for its performance benefits during rendering.",281],["Render Texture",281],["This will place the camera's view onto a Texture that can then be applied to another object. This makes it easy to create sports arena video monitors, surveillance cameras, reflections etc.",281],["Target display",281],["A camera has up to 8 target display settings. The camera can be controlled to render to one of up to 8 monitors. This is supported only on PC, Mac and Linux. In Game View the chosen display in the Camera Inspector will be shown.",281],["2018-10-05 ",281],["Physical Camera options added in Unity 2018.2",281],["Gate Fit options added in Unity 2018.3",281],["Camera",281],["Canvas",282],["The Canvas component represents the abstract space in which the UI is laid out and rendered. All UI elements must be children of a GameObject that has a Canvas component attached. When you create a UI element object from the menu (GameObject > Create UI), a Canvas object will be created automatically if there isn't one in the scene already.",282],["Properties",282],["Property: Function: ",282],["Render Mode The way the UI is rendered to the screen or as an object in 3D space (see below). The options are Screen Space - Overlay, Screen Space - Camera and World Space. ",282],["Pixel Perfect (Screen Space modes only) Should the UI be rendered without antialiasing for precision? ",282],["Render Camera (Screen Space - Camera mode only) The camera to which the UI should be rendered (see below). ",282],["Plane Distance (Screen Space - Camera mode only) The distance at which the UI plane should be placed in front of the camera. ",282],["Event Camera (World Space mode only) The camera that will be used to process UI events. ",282],["Receives Events Are UI events processed by this Canvas? ",282],["Details",282],["A single Canvas for all UI elements is sufficient but multiple Canvases in the scene is possible. It is also possible use nested Canvases, where one Canvas is placed as a child of another for optimization purposes. A nested Canvas uses the same Render Mode as its parent.",282],["Traditionally, UIs are rendered as if they were simple graphic designs drawn directly on the screen. That is to say, they have no concept of a 3D space being viewed by a camera. Unity supports this kind of screen space rendering but also allows UIs to rendered as objects in the scene, depending on the value of the Render Mode property. The modes available are Screen Space - Overlay, Screen Space - Camera and World Space.",282],["Screen Space - Overlay",282],["In this mode, the Canvas is scaled to fit the screen and then rendered directly without reference to the scene or a camera (the UI will be rendered even if there is no camera in the scene at all). If the screen's size or resolution are changed then the UI will automatically rescale to fit. The UI will be drawn over any other graphics such as the camera view.",282],["Note: The Screen Space - Overlay canvas needs to be stored at the top level of the hierarchy. If this is not used then the UI may disappear from the view. This is a built-in limitation. Keep the Screen Space - Overlay canvas at the top level of the hierarchy to get expected results.",282],["Screen Space - Camera",282],["In this mode, the Canvas is rendered as if it were drawn on a plane object some distance in front of a given camera. The onscreen size of the UI does not vary with the distance since it is always rescaled to fit exactly within the camera frustum. If the screen's size or resolution or the camera frustum are changed then the UI will automatically rescale to fit. Any 3D objects in the scene that are closer to the camera than the UI plane will be rendered in front of the UI, while objects behind the plane will be obscured.",282],["World Space",282],["This mode renders the UI as if it were a plane object in the scene. Unlike Screen Space - Camera mode, however, the plane need not face the camera and can be oriented however you like. The size of the Canvas can be set using its Rect Transform but its onscreen size will depend on the viewing angle and distance of the camera. Other scene objects can pass behind, through or in front of the Canvas.",282],["Hints",282],["Read more about setting up a World Space Canvas on the Creating a World Space UI page.",282],["For information about making your Canvas and UI scale to different resolutions or aspect ratios, see the Designing UI for Multiple Resolutions page as well as the Canvas Scaler page.",282],["Canvas",282],["Canvas Group",283],["The Canvas Group can be used to control certain aspects of a whole group of UI elements from one place without needing to handle them each individually. The properties of the Canvas Group affect the GameObject it is on as well as all children.",283],["Properties",283],["Property: Function: ",283],["Alpha The opacity of the UI elements in this group. The value is between 0 and 1 where 0 is fully transparent and 1 is fully opaque. Note that elements retain their own transparency as well, so the Canvas Group alpha and the alpha values of the individual UI elements are multiplied with each other. ",283],["Interactable Determines if this component will accept input. When it is set to false interaction is disabled. ",283],["Block Raycasts Will this component act as a collider for Raycasts? You will need to call the RayCast function on the graphic raycaster attached to the Canvas. This does not apply to Physics.Raycast. ",283],["Ignore Parent Groups Will this group also be affected by the settings in Canvas Group components further up in the Game Object hierarchy, or will it ignore those and hence override them? ",283],["Details",283],["Typical uses of Canvas Group are:",283],["Fading in or out a whole window by adding a Canvas Group on the GameObject of the Window and control its Alpha property.",283],["Making a whole set of controls non-interactable (\"grayed out\") by adding a Canvas Group to a parent GameObject and setting its Interactable property to false.",283],["Making one or more UI elements not block mouse events by placing a Canvas Group component on the element or one of its parents and setting its Block Raycasts property to false.",283],["CanvasGroup",283],["Canvas Renderer",284],["The Canvas Renderer component renders a graphical UI object contained within a Canvas.",284],["Properties",284],["The Canvas Renderer has no properties exposed in the inspector.",284],["Details",284],["The standard UI objects available from the menu (GameObject > Create UI) all have Canvas Renderers attached wherever they are required but you may need to add this component manually for custom UI objects. Although there are no properties exposed in the inspector, a few properties and function can be accessed from scripts - see the CanvasRenderer page in the Script Reference for full details.",284],["CanvasRenderer",284],["Capsule Collider component reference",285],["The Capsule Collider is made of two half-spheres joined together by a cylinder. It is the same shape as the Capsule primitive.",285],["Properties",285],["Property: Function: ",285],["Is Trigger If enabled, this Collider is used for triggering events, and is ignored by the physics engine. ",285],["Material Reference to the Physics Material that determines how this Collider interacts with others. ",285],["Center The position of the Collider in the object's local space. ",285],["Radius The radius of the Collider's local width. ",285],["Height The total height of the Collider. ",285],["Direction The axis of the capsule's lengthwise orientation in the object's local space. ",285],["Details",285],["You can adjust the Capsule Collider's Radius and Height independently of each other. It is used in the Character Controller and works well for poles, or can be combined with other Colliders for unusual shapes.",285],["CapsuleCollider",285],["Capsule Collider 2D",286],["The Capsule Collider 2D is a Collider that interacts with the 2D physics system. The capsule shape has no vertex corners and has a continuous round circumference. This shape allows the Capsule Collider 2D to not get easily caught in the corners of other Colliders.",286],["Note:** The capsule shape of the Collider is considered solid and not hollow, which means any other Collider 2Ds that are inside the Capsule Collider 2D are considered to be in contact with the Collider and are forced out of it over time.",286],["Property Function ",286],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",286],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",286],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",286],["Offset Set the local offset values of the Collider 2D geometry. ",286],["Size Set the x and y values to define the size of the box region that the Capsule Collider 2D fills. Refer to Defining Size and Direction for more details. ",286],["Direction Select the orientation of the Capsule Collider 2D. This determines the position and orientation of the curved ends of the Collider shape. Refer to Defining Size and Direction for more details. ",286],[" **Vertical** Select this to orient the ends of the Collider shape upwards and downwards. \n",286],[" **Horizontal** Select this to orient the ends of the Collider shape left and right. \n",286],["Layer Overrides Expand for the Layer override settings. ",286],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",286],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",286],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",286],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",286],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",286],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",286],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",286],["Defining Size and Direction ",286],["The settings that define the shape of the Capsule Collider 2D are Size and Direction. Both the Size and Direction properties refer to X and Y (horizontal and vertical, respectively) in the local space of the Capsule Collider 2D, and not in world space.",286],["A typical way to set up the Capsule Collider 2D is to set the Size to match the Direction. For example, if the Capsule Collider 2D’s Direction is Vertical, the Size of X is 0.5 and the Size of Y is 1, this makes the vertical direction capsule taller, rather than wider.",286],["In the example below, the X and Y are represented by the yellow lines.",286],["Capsule configuration examples",286],["You can change the Capsule Collider 2D with different configurations. Below are some examples.",286],["Note that when the X and Y of the Size property are the same, the Capsule Collider 2D always approximates to a circle.",286],["Note:** A known issue in the 2D physics system is that when a GameObject moves across multiple Colliders, one or several of the Colliders may register a collision between the Colliders. This may occur even when the Colliders are perfectly aligned. This collision can cause the Collider to slow down or stop.",286],["While constructing a surface with the Capsule Collider 2D can help reduce this problem, it is recommeneded to use a single Collider rather than multiple Colliders for a surface, such as the Edge Collider 2D.",286],["CapsuleCollider2D",286],["Character Controller component reference",287],["The Character Controller is mainly used for third-person or first-person player control that does not make use of Rigidbody physics.",287],["Properties",287],["Property: Function: ",287],["Slope Limit Limits the collider to only climb slopes that are less steep (in degrees) than the indicated value. ",287],["Step Offset The character will step up a stair only if it is closer to the ground than the indicated value. This should not be greater than the Character Controller's height or it will generate an error. ",287],["Skin width Two colliders can penetrate each other as deep as their Skin Width. Larger Skin Widths reduce jitter. Low Skin Width can cause the character to get stuck. A good setting is to make this value 10% of the Radius. ",287],["Min Move Distance If the character tries to move below the indicated value, it will not move at all. This can be used to reduce jitter. In most situations this value should be left at 0. ",287],["Center This will offset the Capsule Collider in world space, and won't affect how the Character pivots. ",287],["Radius Length of the Capsule Collider's radius. This is essentially the width of the collider. ",287],["Height The Character's Capsule Collider height. Changing this will scale the collider along the Y axis in both positive and negative directions. ",287],["Details",287],["The traditional Doom-style first person controls are not physically realistic. The character runs 90 miles per hour, comes to a halt immediately and turns on a dime. Because it is so unrealistic, use of Rigidbodies and physics to create this behavior is impractical and will feel wrong. The solution is the specialized Character Controller. It is simply a capsule shaped Collider which can be told to move in some direction from a script. The Controller will then carry out the movement but be constrained by collisions. It will slide along walls, walk up stairs (if they are lower than the Step Offset) and walk on slopes within the Slope Limit.",287],["The Controller does not react to forces on its own and it does not automatically push Rigidbodies away.",287],["If you want to push Rigidbodies or objects with the Character Controller, you can apply forces to any object that it collides with via the OnControllerColliderHit() function through scripting.",287],["On the other hand, if you want your player character to be affected by physics then you might be better off using a Rigidbody instead of the Character Controller.",287],["Fine-tuning your character",287],["You can modify the Height and Radius to fit your Character's mesh. It is recommended to always use around 2 meters for a human-like character. You can also modify the Center of the capsule in case your pivot point is not at the exact center of the Character.",287],["Step Offset can affect this too, make sure that this value is between 0.1 and 0.4 for a 2 meter sized human.",287],["Slope Limit should not be too small. Often using a value of 90 degrees works best. The Character Controller will not be able to climb up walls due to the capsule shape.",287],["Don't get stuck",287],["The Skin Width is one of the most critical properties to get right when tuning your Character Controller.",287],["If your character gets stuck it is most likely because your Skin Width is too small. The Skin Width will let objects slightly penetrate the Controller but it removes jitter and prevents it from getting stuck.",287],["It's good practice to keep your Skin Width at least greater than 0.01 and more than 10% of the Radius.",287],["We recommend keeping Min Move Distance at 0.",287],["See the Character Controller script reference here",287],["Hints",287],["Try adjusting your Skin Width if you find your character getting stuck frequently.",287],["The Character Controller can affect objects using physics if you write your own scripts.",287],["The Character Controller can not be affected by objects through physics.",287],["Note that changing Character Controller properties in the inspector will recreate the controller in the scene, so any existing Trigger contacts will get lost, and you will not get any OnTriggerEntered messages until the controller is moved again.",287],["The Character Controller's capsule used in queries such as raycast might shrink by a small factor. Queries therefore could miss in some corner cases, even when they appear to hit the Character Controller's gizmo.",287],["CharacterController",287],["Character Joint component reference",288],["Character Joints are mainly used for Ragdoll effects. They are an extended ball-socket joint which allows you to limit the joint on each axis.",288],["If you just want to set up a ragdoll read about Ragdoll Wizard.",288],["Properties",288],["Property: Function: ",288],["Connected Body Optional reference to the Rigidbody that the joint is dependent upon. If not set, the joint connects to the world. ",288],["Anchor The point in the GameObject's local space where the joint rotates around. ",288],["Axis The twist axes. Visualized with the orange gizmo cone. ",288],["Auto Configure Connected Anchor If this is enabled, then the Connected Anchor position will be calculated automatically to match the global position of the anchor property. This is the default behavior. If this is disabled, you can configure the position of the connected anchor manually. ",288],["Connected Anchor Manual configuration of the connected anchor position. ",288],["Swing Axis The swing axis. Visualized with the green gizmo cone. ",288],["Low Twist Limit The lower limit of the joint. See below. ",288],["High Twist Limit The higher limit of the joint. See below. ",288],["Swing 1 Limit Limits the rotation around one element of the defined Swing Axis (visualized with the green axis on the gizmo). See below. ",288],["Swing 2 Limit Limits movement around one element of the defined Swing Axis. See below. ",288],["Break Force The force that needs to be applied for this joint to break. ",288],["Break Torque The torque that needs to be applied for this joint to break. ",288],["Enable Collision When checked, this enables collisions between bodies connected with a joint. ",288],["Enable Preprocessing Disabling preprocessing helps to stabilize impossible-to-fulfil configurations. ",288],["Details",288],["Character joints give you a lot of possibilities for constraining motion like with a universal joint.",288],["The twist axis (visualized with the orange access on the gizmo) gives you most control over the limits as you can specify a lower and upper limit in degrees (the limit angle is measured relative to the starting position). A value of -30 in Low Twist Limit->Limit and 60 in High Twist Limit->Limit limits the rotation around the twist axis (orange gizmo) between -30 and 60 degrees.",288],["The Swing 1 Limit limits the rotation around the swing axis (visualized with the green axis on the gizmo). The limit angle is symmetric. Thus a value of 30 will limit the rotation between -30 and 30.",288],["The Swing 2 Limit axis isn't visualized on the gizmo but the axis is orthogonal to the two other axes (that is the twist axis visualised in orange on the gizmo and the Swing 1 Limit visualised in green on the gizmo).",288],["The angle is symmetric, thus a value of 40 will limit the rotation around that axis between -40 and 40 degrees.",288],["For each of the limits the following values can be set:",288],["Property: Function: ",288],["Bounciness A value of 0 will not bounce. A value of 1 will bounce without any loss of energy. ",288],["Spring The spring force used to keep the two objects together. ",288],["Damper The damper force used to dampen the spring force. ",288],["Contact Distance Within the contact distance from the limit contacts will persist in order to avoid jitter. ",288],["Breaking joints",288],["You can use the Break Force and Break Torque properties to set limits for the joint's strength. If these are less than infinity, and a force/torque greater than these limits are applied to the object, its Fixed Joint will be destroyed and will no longer be confined by its restraints.",288],["Hints",288],["You do not need to assign a Connected Body to your joint for it to work.",288],["Character Joints require your object to have a Rigidbody attached.",288],["For Character Joints made with the Ragdoll wizard, take a note that the setup is made such that the joint's Twist axis corresponds with the limb's largest swing axis, the joint's Swing 1 axis corresponds with limb's smaller swing axis and joint's Swing 2 is for twisting the limb. This naming scheme is for legacy reasons.",288],["CharacterJoint",288],["Circle Collider 2D",289],["The Circle Collider 2D is a collider that interacts with the 2D physics system for approximate collision detection. The Circle Collider 2D, as the name suggests, is in circular shape with a defined position and radius within the local coordinate space of a Sprite.",289],["Property Function ",289],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",289],["Is Trigger Enable this option if you want the Collider 2D to behave as a trigger. The physics system ignores the Collider 2D when you enable this option. ",289],["Used by Effector Enable this option if you want an attached Effector 2D to use this Collider 2D. ",289],["Offset Set the local offset values of the Collider 2D geometry. ",289],["Radius Set the radius of the Circle Collider 2D in local space units. ",289],["Layer Overrides Expand this option to use the Layer override settings. ",289],[" **Layer Override Priority** Assign the decision priority that this Collider 2D uses when resolving conflicting decisions on whether a contact between itself and another Collider 2D should happen or not. For more information, refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page. \n",289],[" **Include Layers** Select the additional Layers for this Collider 2D to include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",289],[" **Exclude Layers** Select the additional layers for this Collider 2D to exclude when deciding if a contact with another Collider 2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",289],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",289],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",289],[" **Contact Capture Layers** Select the Layers of other Collider 2D involved in contact with this Collider2D that you want to capture. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",289],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",289],["CircleCollider2D",289],["Cloth",290],["The Cloth component works with the Skinned Mesh Renderer to provide a physics-based solution for simulating fabrics. It is specifically designed for character clothing, and only works with the Skinned Mesh Renderer. If you add a Cloth component to a GameObject with a regular Mesh Renderer, Unity removes the Mesh Renderer and adds a Skinned Mesh Renderer.",290],["To attach a Cloth component to GameObject that has a Skinned Mesh Renderer, select the GameObject in the Editor, click the Add Component button in the Inspector window, and select Physics > Cloth. The component appears in the Inspector.",290],["Properties",290],["Property Function ",290],["Stretching Stiffness Stretching stiffness of the cloth. ",290],["Bending Stiffness Bending stiffness of the cloth. ",290],["Use Tethers Apply constraints that help to prevent the moving cloth particles from going too far away from the fixed ones. This helps to reduce excess stretchiness. ",290],["Use Gravity Should gravitational acceleration be applied to the cloth? ",290],["Damping Motion damping coefficient. ",290],["External Acceleration A constant, external acceleration applied to the cloth. ",290],["Random Acceleration A random, external acceleration applied to the cloth. ",290],["World Velocity Scale How much world-space movement of the character will affect cloth vertices. ",290],["World Acceleration Scale How much world-space acceleration of the character will affect cloth vertices. ",290],["Friction The friction of the cloth when colliding with the character. ",290],["Collision Mass Scale How much to increase mass of colliding particles. ",290],["Use Continuous Collision Enable continuous collision to improve collision stability. ",290],["Use Virtual Particles Add one virtual particle per triangle to improve collision stability. ",290],["Solver Frequency Number of solver iterations per second. ",290],["Sleep Threshold Cloth's sleep threshold. ",290],["Capsule Colliders An array of CapsuleColliders which this Cloth instance should collide with. ",290],["Sphere Colliders An array of ClothSphereColliderPairs which this Cloth instance should collide with. ",290],["Details",290],["Cloth does not react to all colliders in a scene, nor does it apply forces back to the world. When it has been added the Cloth component will not react to or influence any other bodies at all. Thus Cloth and the world do not recognise or see each other until you manually add colliders from the world to the Cloth component. Even after that, the simulation is still one-way: cloth reacts to those bodies but doesn’t apply forces back.",290],["Additionally, you can only use three types of colliders with cloth: a sphere, a capsule, and conical capsule colliders, constructed using two sphere colliders. These restrictions all exist to help boost performance.",290],["Edit Constraints Tool",290],["You can apply constraints to specific vertices of the cloth to give them more or less freedom of movement.",290],["In the Inspector, select Edit cloth constraints (top-left button) in the Cloth component. When the tool is active, small spheres appear in the Scene view on all vertices of the mesh. They represent the cloth particles to which you can apply constraints. The Cloth Constraints tool window also appears at the bottom right of the Scene view.",290],["Constraint types and colors",290],["For each cloth particle, you can set and display two types of constraints:",290],["Max Distance – the maximum distance a cloth particle can travel from its vertex position.",290],["Surface Penetration – how deep the cloth particle can penetrate the mesh.",290],["The color of a particle represents the relative value of its constraint within the cloth, according to the type of constraint currently selected.",290],["Constraints visualization",290],["Property Function ",290],["Visualization Allows you to select which constraint type and which particles to display. ",290],[" _Max Distance_ Displays only the Max Distance values of the cloth particles. \n",290],[" _Surface Penetration_ Displays only the Surface Penetration values of the cloth particles. \n",290],[" _Manipulate Backfaces_ Enable this option to visualize and manipulate particles that might be hidden behind the current facing part of the cloth. \n",290],["[ Color spectrum ] Provides the correspondance between particle colors and constraint values for the above selected constraint type, according to the mimimum and maximum values currently applied within the whole cloth. Black always means that the particle has no constraint. ",290],["Constraint Size The display size of the spheres that represent the cloth particles. Adjust this value at your convenience to ease your constraints edition. This property has no effect on the constraints themselves. ",290],["Constraints edition modes",290],["You can use 3 different modes to edit the cloth constraint values.",290],["Mode Description ",290],["Select Allows you to apply a fixed constraint value to a pre-selected group of particles. ",290],["Paint Allows you to apply a fixed constraint value by painting the cloth particles with a brush. ",290],["Gradient Allows to apply a left-to-right linear gradient of constraint values to a pre-selected group of particles. ",290],["The tool properties and the steps that you need to perform are different according to the mode you are using. In all cases, the last step corresponds to the action that applies the constraint values.",290],["With the Select mode:",290],["Use the mouse cursor to draw a selection box or click on particles one at a time.",290],["Enable the constraint type that you want to apply to your selection: Max Distance, Surface Penetration, or both.",290],["Set a value according to the constraint type you just enabled.",290],["With the Paint mode:",290],["Adjust the Brush Radius according to the area you need to cover with the brush.",290],["Enable the constraint type you want to apply: Max Distance, Surface Penetration, or both.",290],["Set a paint value according to the constraint type you just enabled.",290],["Paint the constraints on the particles with the brush.",290],["With the Gradient mode:",290],["Ensure to toggle on the 2D view in the Scene view (the tool cannot apply a gradient when in 3D view).",290],["Use the mouse cursor to draw a selection box or click on particles one at a time.",290],["Set the limit values of the gradient you want to apply left-to-right within your selection: Gradient Start and Gradient End.",290],["Enable the constraint type that you want to apply to your selection: Max Distance, Surface Penetration, or both.",290],["Self collision and intercollision",290],["Cloth collision makes character clothing and other fabrics in your game move more realistically. In Unity, a cloth has several cloth particles that handle collision. You can set up cloth particles for:",290],["Self-collision, which prevents cloth from penetrating itself.",290],["Intercollision, which allows cloth particles to collide with each other.",290],["To set up the collision particles for a cloth, select the Self Collision and Intercollision button in the Cloth inspector:",290],["The Cloth Self Collision And Intercollision window appears in the Scene view:",290],["Cloth particles appear automatically for skinned Meshes with a Cloth component. Initially, none of the cloth particles are set to use collision. These unused particles appear black:",290],["To apply self-collision or intercollision, you need to select a single set of particles to apply collision to. To select a set of particles for collision, click the Select button:",290],["Now left-click and drag to select the particles you want to apply collision to:",290],["The selected particles appear in blue:",290],["Tick the Self Collision and Intercollision checkbox to apply collision to the selected particles:",290],["The particles you specify for use in collision appear in green:",290],["To enable the self collision behavior for a cloth, to go the Self Collision section of the Cloth Inspector window and set Distance and Stiffness to non-zero values:",290],["Property: Function: ",290],["Distance The diameter of a sphere around each particle. Unity ensures that these spheres do not overlap during simulations. Distance should be smaller than the smallest distance between two particles in the configuration. If the distance is larger, self collision may violate some distance constraints and result in jittering. ",290],["Stiffness How strong the separating impulse between particles should be. The cloth solver calculates this and it should be enough to keep the particles separated. ",290],["Self collision and intercollision can take a significant amount of the overall simulation time. Consider keeping the collision distance small and using self collision indices to reduce the number of particles that collide with each other.",290],["Self collision uses vertices, not triangles, so don’t expect self collision to work perfectly for Meshes with triangles much larger than the cloth thickness.",290],["Paint and Erase modes allow you to add or remove particles for use in collision by holding the left mouse button down and dragging individual cloth particles:",290],["When in Paint or Erase mode, particles specified for collision are green, unspecified particles are black, and particles underneath the brush are blue:",290],["",290],["Cloth intercollision",290],["You specify particles for intercollision in the same way as you specify particles for self collision, as described above. As with self collision, you specify one set of particles for intercollision.",290],["To enable intercollision behavior, open the Physics settings (from the main menu in Unity: Edit > Project Settings, then select the Physics category) and set Distance and Stiffness to non-zero values in the Cloth InterCollision section:",290],["Cloth intercollision Distance and Stiffness properties have the same function as self collision Distance and Stiffness properties, which are described above.",290],["Collider collision",290],["Cloth is unable to simply collide with arbitrary world geometry, and now will only interact with the colliders specified in either the Capsule Colliders or Sphere Colliders arrays.",290],["The sphere colliders array can contain either a single valid SphereCollider instance (with the second one being null), or a pair. In the former cases the ClothSphereColliderPair just represents a single sphere collider for the cloth to collide against. In the latter case, it represents a conic capsule shape defined by the two spheres, and the cone connecting the two. Conic capsule shapes are useful for modelling limbs of a character.",290],["2017-12-05  ",290],["Cloth self collision and intercollision added in 2017.3 NewIn20173",290],["Cloth",290],["Composite Collider 2D",291],["The Composite Collider 2D component is a Collider that interacts with the 2D physics system. Unlike most Colliders, it does not define an inherent shape. Instead, it merges the shapes of any Box Collider 2D or Polygon Collider 2D that you set it up to use. The Composite Collider 2D uses the vertices (geometry) from any of these Colliders, and merges them together into new geometry controlled by the Composite Collider 2D itself.",291],["Property Function ",291],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",291],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",291],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",291],["Offset Set the local offset values of the Collider 2D geometry. ",291],["Geometry Type Select the type of geometry to merge the vertices of the selected Colliders into. Select either Outlines or Polygons from the dropdown menu. ",291],["Outlines Select this to produce a Collider 2D with hollow outlines, identical to an Edge Collider 2D. ",291],["Polygons Select this to produce a Collider 2D with solid polygons, identical to a Polygon Collider 2D. ",291],["Use Delaunay Mesh Enable this property to an additional Delaunay triangulation step to produce the Collider mesh. ",291],["Generation Type Select the geometry generation method used when either the Composite Collider 2D is changed, or when any of the Colliders composing the Composite Collider 2D is changed. ",291],["Synchronous Select this to have Unity immediately generate new geometry when a change is made to the Composite Collider 2D or to any of the Colliders composing it. ",291],["Manual Select this to have Unity only generate geometry generation happens when you request it. To request generation, either call the CompositeCollider2D.GenerateGeometry scripting API, or select Regenerate Geometry that appears under the selection. ",291],["Vertex Distance Set a value for the minimum spacing allowed for any vertices gathered from Colliders being composed. Any vertex closer than this limit is removed. This allows control over the effective resolution of the vertex compositing. ",291],["Offset Distance Set the value to offset vertices when compositing multiple physics shapes. Any vertices between physics shapes within this distance value are combined. Note: It's recommended to not set this value higher than 1% of the Sprite's length, as this may result in loss of detail when too many vertices are combined together. ",291],["Layer Overrides Expand for the Layer override settings. ",291],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",291],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",291],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",291],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",291],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",291],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",291],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",291],["Composing with the Box Collider 2D and Polygon Collider 2D",291],["Both the Box Collider 2D and Polygon Collider 2D components have the Used By Composite property, which allows them be merged and composed into a single Collider with the Composite Collider 2D. These Colliders must also be attached to the same Rigidbody 2D as the Composite Collider 2D. When you enable Used by Composite, other properties disappear from that component, as they are now controlled by the attached Composite Collider 2D.",291],["Refer to the CompositeCollider2D API documentation for more information about scripting with the Composite Collider 2D.",291],["CompositeCollider2D",291],["Compute shaders",292],["Compute shaders are shader programs that run on the GPU, outside of the normal rendering pipeline.",292],["They can be used for massively parallel GPGPU algorithms, or to accelerate parts of game rendering. In order to efficiently use them, an in-depth knowledge of GPU architectures and parallel algorithms is often needed; as well as knowledge of DirectCompute, OpenGL Compute, CUDA, or OpenCL.",292],["Compute shaders in Unity closely match DirectX 11 DirectCompute technology. Platforms where compute shaders work:",292],["Windows and Windows Store, with a DirectX 11 or DirectX 12 graphics API and Shader Model 5.0 GPU",292],["macOS and iOS using Metal graphics API",292],["Android, Linux and Windows platforms with Vulkan API",292],["Modern OpenGL platforms (OpenGL 4.3 on Linux or Windows; OpenGL ES 3.1 on Android). Note that Mac OS X does not support OpenGL 4.3",292],["Modern consoles",292],["Compute shader support can be queried runtime using SystemInfo.supportsComputeShaders.",292],["Compute shader Assets",292],["Similar to shader assets, compute shader assets are files in your project. with a .compute file extension. They are written in DirectX 11 style HLSL language, with a minimal number of #pragma compilation directives to indicate which functions to compile as compute shader kernels.",292],["Here’s a basic example of a compute shader file, which fills the output texture with red:",292],["// test.compute",292],["pragma kernel FillWithRed",292],["RWTexture2D res;",292],["[numthreads(1,1,1)]",292],["void FillWithRed (uint3 dtid : SV_DispatchThreadID)",292],["res[dtid.xy] = float4(1,0,0,1);",292],["The language is standard DX11 HLSL, with an additional #pragma kernel FillWithRed directive. One compute shader Asset file must contain at least onecompute kernel that can be invoked, and that function is indicated by the #pragma directive. There can be more kernels in the file; just add multiple #pragma kernel lines.",292],["When using multiple #pragma kernel lines, note that comments of the style // text are not permitted on the same line as the #pragma kernel directives, and cause compilation errors if used.",292],["The #pragma kernel line can optionally be followed by a number of preprocessor macros to define while compiling that kernel, for example:",292],["pragma kernel KernelOne SOME_DEFINE DEFINE_WITH_VALUE=1337",292],["pragma kernel KernelTwo OTHER_DEFINE",292],["// ...",292],["Invoking compute shaders",292],["In your script, define a variable of ComputeShader type and assign a reference to the Asset. This allows you to invoke them with ComputeShader.Dispatch function. See Unity documentation on ComputeShader class for more details.",292],["Closely related to compute shaders is a ComputeBuffer class, which defines arbitrary data buffer (\"structured buffer\" in DX11 lingo). Render Textures can also be written into from compute shaders, if they have “random access” flag set (“unordered access view” in DX11). See RenderTexture.enableRandomWrite to learn more about this.",292],["Texture samplers in compute shaders",292],["Textures and samplers aren’t separate objects in Unity, so to use them in compute shaders you must follow one of the following Unity-specific rules:",292],["Use the same name as the Texture name, with sampler at the beginning (for example, Texture2D MyTex; SamplerState samplerMyTex). In this case, the sampler is initialized to that Texture’s filter/wrap/aniso settings.",292],["Use a predefined sampler. For this, the name has to have Linear or Point (for filter mode) and Clamp or Repeat (for wrap mode). For example, SamplerState MyLinearClampSampler creates a sampler that has Linear filter mode and Clamp wrap mode.",292],["For more information, see documentation on Sampler States.",292],["Cross-platform support",292],["As with regular shaders, Unity is capable of translating compute shaders from HLSL to other shader languages. Therefore, for the easiest cross-platform builds, you should write compute shaders in HLSL. However, there are some factors that need to be considered when doing this.",292],["Cross-platform best practices",292],["DirectX 11 (DX11) supports many actions that are not supported on other platforms (such as Metal or OpenGL ES). Therefore, you should always ensure your shader has well-defined behavior on platforms that offer less support, rather than only on DX11. Here are few things to consider:",292],["Out-of-bounds memory accesses are bad. DX11 might consistently return zero when reading, and read some writes without issues, but platforms that offer less support might crash the GPU when doing this. Watch out for DX11-specific hacks, buffer sizes not matching with multiple of your thread group size, trying to read neighboring data elements from the beginning or end of the buffer, and similar incompatibilities.",292],["Initialize your resources. The contents of new buffers and Textures are undefined. Some platforms might provide all zeroes, but on others, there could be anything including NaNs.",292],["Bind all the resources your compute shader declares. Even if you know for sure that the shader does not use resources in its current state because of branching, you must still ensure a resource is bound to it.",292],["Platform-specific differences",292],["Metal (for iOS and tvOS platforms) does not support atomic operations on Textures. Metal also does not support GetDimensions queries on buffers. Pass the buffer size info as constant to the shader if needed.",292],["OpenGL ES 3.1 (for (Android, iOS, tvOS platforms) only guarantees support for 4 compute buffers at a time. Actual implementations typically support more, but in general if developing for OpenGL ES, you should consider grouping related data in structs rather than having each data item in its own buffer.",292],["OpenGL (ES) and Vulkan require an image format qualifier for RWTextures<T> that are not write-only.",292],["Unity derives this qualifier from the type T in the angle-brackets. The format qualifier needs to match the GraphicsFormat/RenderTextureFormat of the RenderTexture that is bound to the RWTexture. The following table maps Unity RenderTexture GraphicsFormats and RenderTextureFormats to their corresponding HLSL type and image format qualifier:",292],["GraphicsFormat RenderTextureFormat HLSL type GLSL image format qualifier ",292],["----------------------- ------------------- ----------------------- --------------------------- ",292],["R32G32B32A32_SFloat ARGBFloat float4 rgba32f ",292],["R16G16B16A16_SFloat ARGBHalf min16float4/half4 rgba16f ",292],["R32G32_SFloat RGFloat float2 rg32f ",292],["R16G16_SFloat RGHalf min16float2/half2 rg16f ",292],["B10G11R11_UFloatPack32 RGB111110Float min10float3 r11f_g11g_b10f ",292],["R32_SFloat RFloat float r32f ",292],["R16_SFloat RHalf min16float/half r16f ",292],["R16G16B16A16_UNorm ARGB64 unorm min16float4/half4 rgba16 ",292],["A2B10G10R10_UNormPack32 ARGB2101010 unorm min10float4 rgb10_a2 ",292],["R8G8B8A8_UNorm ARGB32 unorm float4 rgba8 ",292],["R16G16_UNorm RG32 unorm min16float2/half2 rg16 ",292],["R8G8_UNorm RG16 unorm float2 rg8 ",292],["R16_UNorm R16 unorm min16float/half r16 ",292],["R8_UNorm R8 unorm float r8 ",292],["R16G16B16A16_SNorm unsupported snorm min16float4/half4 rgba16_snorm ",292],["R8G8B8A8_SNorm unsupported snorm float4 rgba8_snorm ",292],["R16G16_SNorm unsupported snorm min16float2/half2 rg16_snorm ",292],["R8G8_SNorm unsupported snorm float2 rg8_snorm ",292],["R16_SNorm unsupported snorm min16float/half r16_snorm ",292],["R8_SNorm unsupported snorm float r8_snorm ",292],["R32G32B32A32_SInt ARGBInt int4 rgba32i ",292],["R16G16B16A16_SInt unsupported min16int4 rgba16i ",292],["R8G8B8A8_SInt unsupported min12int4 rgba8i ",292],["R32G32_SInt RGInt int2 rg32i ",292],["R16G16_SInt unsupported min16int2 rg16i ",292],["R8G8_SInt unsupported min12int2 rg8i ",292],["R32_SInt RInt int r32i ",292],["R16_SInt unsupported min16int r16i ",292],["R8_SInt unsupported min12int r8i ",292],["R32G32B32A32_UInt unsupported uint4 rgba32i ",292],["R16G16B16A16_UInt RGBAUShort min16uint4 rgba16ui ",292],["R8G8B8A8_UInt unsupported unsupported rgba8ui ",292],["R32G32_UInt unsupported uint2 rg32ui ",292],["R16G16_UInt unsupported min16uint2 rg16ui ",292],["R8G8_UInt unsupported unsupported rg8ui ",292],["R32_UInt unsupported uint r32ui ",292],["R16_UInt unsupported min16uint r16ui ",292],["R8_UInt unsupported unsupported r8ui ",292],["A2B10G10R10_UIntPack32 unsupported unsupported rgb10_a2ui ",292],["HLSL-only or GLSL-only compute shaders",292],["Usually, compute shader files are written in HLSL, and compiled or translated into all necessary platforms automatically. However, it is possible to either prevent translation to other languages (that is, only keep HLSL platforms), or to write GLSL compute code manually.",292],["The following information only applies to HLSL-only or GLSL-only compute shaders, not cross-platform builds. This is because this information can result in compute shader source being excluded from some platforms.",292],["Compute shader source surrounded by CGPROGRAM and ENDCG keywords is not processed for non-HLSL platforms.",292],["Compute shader source surrounded by GLSLPROGRAM and ENDGLSL keywords is treated as GLSL source, and emitted verbatim. This only works when targeting OpenGL or GLSL platforms. You should also note that while automatically translated shaders follow HLSL data layout on buffers, manually written GLSL shaders follow GLSL layout rules.",292],["Variants and keywords",292],["You can use keywords to produce multiple variants of compute shaders, the same as you can for graphics shaders.",292],["For general information on variants, see Shader variants. For information on how to implement these features in compute shaders, see Declaring and using shader keywords in HLSL and the ComputeShader API documentation.",292],["ComputeShader",292],["Configurable Joint component reference",293],["Configurable Joints incorporate all the functionality of the other joint types and provide greater control of character movement. They are particularly useful when you want to customize the movement of a ragdoll and enforce certain poses on your characters. You can also use them to adapt joints into highly specialized joints of your own design.",293],["Properties",293],["Property: Function: ",293],["Edit Joint Angular Limits Adds a visual gizmo to the Scene view that helps you edit joint angular limits. To use this gizmo, set the Angular X, Y, Z Motion to Limited and then handles appear for you to drag and adjust the joint’s rotational space. ",293],["Connected Body The Rigidbody object which the joint connects to. You can set this to None to indicate that the joint attaches to a fixed position in space rather than another Rigidbody. ",293],["Anchor The point which defines the center of the joint. All physics-based simulations use this point as the center in calculations. ",293],["Axis The local axis that defines the object's natural rotation based on physics simulation. ",293],["Auto Configure Connected Anchor Enable this setting to automatically calculate the Connected Anchor position to match the global position of the anchor property. This is the default setting. Disable it to configure the position of the connected anchor manually. ",293],["Connected Anchor Manually configure the connected anchor position. ",293],["Secondary Axis The Axis and Secondary Axis define the local coordinate system of the joint. The third axis is orthogonal to the other two. ",293],["X, Y, Z Motion Set the movement along the X, Y or Z axes to be Free, completely Locked, or Limited according to the limit properties described below. ",293],["Angular X, Y, Z Motion Set the rotation around the X, Y or Z axes to be Free, completely Locked, or Limited according to the limit properties described below. ",293],["Linear Limit Spring Apply a spring force to pull the object back when it goes past the limit position. ",293],["Spring The spring force. Set this value to zero to make the limit impassable. A value other than zero makes the limit elastic. ",293],["Damper The reduction of the spring force in proportion to the speed of the joint's movement. Set a value above zero to allow the joint to \"dampen\" oscillations which would otherwise carry on indefinitely. ",293],["Linear Limit Set a limit on the joint's linear movement (i.e., movement over distance rather than rotation), specified as a distance from the joint's origin. ",293],["Limit The distance in world units from the origin to the limit. ",293],["Bounciness Set a bounce force to apply to the object to push it back when it reaches the limit distance. ",293],["Contact Distance The minimum distance tolerance between the joint position and the limit to enforce the limit. A high tolerance means the limit is less likely to be violated when the object is moving fast. However, this requires the limit to be taken into account by the physics simulation more often and reduces performance slightly. ",293],["Angular X Limit Spring Apply a spring torque to rotate the object back when it goes past the limit angle of the joint. ",293],["Spring The spring torque. Set this value to zero to make the limit impassable. Set a value other than zero to make the limit elastic. ",293],["Damper The reduction of the spring torque in proportion to the speed of the joint's rotation. Set a value above zero to allow the joint to \"dampen\" oscillations which would otherwise carry on indefinitely. ",293],["Low Angular X Limit Lower limit on the joint's rotation around the x-axis, specified as an angle from the joint's original rotation. ",293],["Limit The limit angle. ",293],["Bounciness Set a bounce torque to apply to the object when its rotation reaches the limit angle. ",293],["Contact Distance The minimum angular tolerance (between the joint angle and the limit) at which the limit will be enforced. A high tolerance violates the limit less often when the object is moving fast. However, this requires the physics simulation to take into account the limit more often and reduces performance slightly. ",293],["High Angular XLimit This is similar to the Low Angular X Limit property described above but it determines the upper angular limit of the joint's rotation rather than the lower limit. ",293],["Angular YZ Limit Spring This is similar to the Angular X Limit Spring described above but applies to rotation around both the Y and Z axes. ",293],["Angular Y Limit This is similar to the Angular X Limit property described above but applies the limit to the y-axis and regards both the upper and lower angular limits as the same. ",293],["Angular Z Limit This is similar to the Angular X Limit property described above but applies the limit to the z-axis and regards both the upper and lower angular limits as the same. ",293],["Target Position The target position that the joint's drive force moves to. ",293],["Target Velocity The desired velocity that the joint moves to the Target Position under the drive force. ",293],["XDrive Set the force that Unity uses to rotate the joint around its local x-axis by the Position Spring and Position Damper drive torques. The Maximum Force parameter limits the force. This property is only available if the Rotation Drive Mode property is set to X & YZ. For more information, see Drive force section below. ",293],["Position Spring The spring torque that Unity uses to rotate the joint from its current position towards its target position. ",293],["Position Damper Reduces the amount of spring torque in proportion to the difference between the joint’s current velocity and its target velocity. This reduces the speed of the joint’s movement. Set a value above zero to allow the joint to dampen oscillations which would otherwise carry on indefinitely. ",293],["Maximum Force Limits the amount of force that the drive can apply. To make the drive apply the force that it's calculated, set this to a high value that the drive is unlikely to calculate. ",293],["YDrive This is similar to the X Drive described above but applies to the joint's y-axis. ",293],["ZDrive This is similar to the X Drive described above but applies to the joint's z-axis. ",293],["Target Rotation The orientation that the joint's rotational drive rotates towards, specified as a quaternion. The target rotation is relative to the body that the Joint is attached to, unless the Swap Bodies parameter is set, in which case it’s relative to the connected body's anchor. ",293],["Target Angular Velocity The angular velocity that the joint's rotational drive aims to achieve. The property is specified as a vector. The vector’s length specifies the rotational speed and whose direction defines the axis of rotation. ",293],["Rotation Drive Mode Set how Unity applies drive force to the object to rotate it to the target orientation. Set the mode to X and YZ, to apply the torque around the axes as specified by the Angular X/YZ Drive properties described below. If you use Slerp mode then the Slerp Drive properties determine the drive torque. ",293],["Angular X Drive This specifies how the drive torque rotates the joint around its local x-axis. This property is only available if the Rotation Drive Mode property described above is set to X & YZ. For more information, see Drive force section below. ",293],["Position Spring The spring torque that Unity uses to rotate the joint from its current position towards its target position. ",293],["Position Damper Reduces the amount of spring torque in proportion to the difference between the joint’s current velocity and its target velocity. This reduces the speed of the joint’s movement. Set a value above zero to allow the joint to dampen oscillations which would otherwise carry on indefinitely. ",293],["Maximum Force Limits the amount of force that the drive can apply. To make the drive apply the force that it's calculated, set this to a high value that the drive is unlikely to calculate. ",293],["Angular YZDrive This is similar to the Angular X Drive described above but applies to both the joint's Y and Z axes. ",293],["Slerp Drive This specifies how the drive torque rotates the joint around all local axes. The property is only available if the Rotation Drive Mode property described above is set to Slerp. For more information, see Slerp Drive section below. ",293],["Position Spring The spring torque that Unity uses to rotate the joint from its current position towards its target position. ",293],["Position Damper Reduces the amount of spring torque in proportion to the difference between the joint’s current velocity and its target velocity. This reduces the speed of the joint’s movement. Set a value above zero to allow the joint to dampen oscillations which would otherwise carry on indefinitely. ",293],["Maximum Force Limits the amount of force that the drive can apply. To make the drive apply the force that it's calculated, set this to a high value that the drive is unlikely to calculate. ",293],["Projection Mode This defines how the joint snaps back to its constraints when it unexpectedly moves beyond them, because the physics engine is unable to reconcile the current combination of forces within the simulation. The options are None and Position and Rotation. ",293],["Projection Distance The distance the joint must move beyond its constraints before the physics engine attempts to snap it back to an acceptable position. ",293],["Projection Angle The angle the joint must rotate beyond its constraints before the physics engine attempts to snap it back to an acceptable position. ",293],["Configured in World Space Enable this property to calculate the values set by the various target and drive properties in world space instead of the object's local space. ",293],["Swap Bodies Enable this property to swap the order in which the physics engine processes the Rigidbodies involved in the joint. This results in different joint motion but has no impact on Rigidbodies and anchors. ",293],["Break Force If a force larger than this value pushes the joint beyond its constraints then the joint is permanently \"broken\" and deleted. Break Torque only breaks a joint when its axes are Limited or Locked (see Constraining movement section below). ",293],["Break Torque If a torque larger than this value rotates the joint beyond its constraints then the joint is permanently \"broken\" and deleted. Break Force can break a joint regardless of whether its axes are Free, Limited or Locked (see Constraining movement section below). ",293],["Enable Collision Enable this property to let the object with the joint collide with the object it is connected to. If this is disabled, the joint and object will pass through each other. ",293],["Enable Preprocessing If preprocessing is disabled then certain \"impossible\" configurations of the joint are kept more stable rather than drifting wildly out of control. ",293],["Mass Scale The scale to apply to the inverted mass and inertia tensor of the Rigidbody, ranging from 0.00001 to infinity. This is useful when the joint connects two Rigidbodies of largely varying mass. The physics solver produces better results when the connected Rigidbodies have a similar mass. When your connected Rigidbodies vary in mass, use this property with the Connect Mass Scale property to apply fake masses to make them roughly equal to each other. This produces a high-quality and stable simulation, but reduces the physical behaviour of the Rigidbodies. ",293],["Connected Mass Scale The scale to apply to the inverted mass and inertia tensor of the connected Rigidbody, ranging from 0.00001 to infinity. ",293],["Details",293],["Like the other joints, you can use the Configurable Joint to restrict the movement of an object but you can also use it to drive it to a target velocity or position with forces. Because there are a lot of configuration options,you may need to experiment with them to get the joint to behave exactly the way you want.",293],["",293],["Constraining movement",293],["You can constrain both the translational movement and rotation on each joint axis independently using the X, Y, Z Motion and X, Y, Z Rotation properties. Enable Configured In World Space to constrain movements to the world axes rather than the object's local axes. Each of these properties can be set to Locked, Limited or Free:",293],["A Locked axis restricts all movement, so the joint cannot move at all. For example, an object locked in the world y-axis cannot move up or down.",293],["A Limited axis allows free movement between predefined limits, as explained below. For example, a gun turret might be given a restricted arc of fire by limiting its Y rotation to a specific angular range.",293],["A Free axis allows any movement.",293],["You can limit translational movement using the Linear Limit property, which defines the maximum distance the joint can move from its point of origin (measured along each axis separately). For example, you can constrain the puck for an air hockey table by locking the joint in the y-axis (in world space), leaving it free in the z-axis and setting the limit for the x-axis to fit the width of the table; the puck is then constrained to stay within the playing area.",293],["You can also limit rotation using the Angular Limit properties. Unlike the linear limit, you can specify different limit values for each axis with this property. You can also define separate upper and lower limits on the angle of rotation for the x-axis; the other two axes use the same angle either side of the original rotation. For example, you can construct a \"teeter table\" by using a flat plane with a joint constrained to allow slight tilting in the X and Z directions while leaving the Y rotation locked.",293],["Bounciness and springs",293],["By default, a joint stops moving when it runs into its limit. However, an inelastic collision like this is rare in the real world and so it is useful to add some feeling of bounce to a constrained joint. To make the constrained object bounce back after it hits its limit, use the Bounciness property of the linear and angular limits. Most collisions look more natural with a small amount of bounciness but you can also set this property higher to simulate unusually bouncy boundaries like the cushions of a pool table.",293],["To soften the joint limits even more, use the spring properties: Linear Limit Spring for translation and Angular X/YZ Limit Spring for rotation. If you set the Spring property to a value above zero, the joint does not abruptly stop moving when it hits a limit, but is drawn back to the limit position by a spring force. The strength of the force is determined by the Spring value. By default, the spring is perfectly elastic and will catapult the joint back in the opposite direction to the collision.",293],["You can use the Damper property to reduce the elasticity and return the joint to the limit more gently. For example, you can use a spring joint to create a lever that you can pull to the left or right, but then it springs back to an upright position. If the springs are perfectly elastic then the lever will oscillate back and forth around the centre point after it is released. However, if you add enough damping then the spring will rapidly settle down to the neutral position.",293],["",293],["Drive forces",293],["Not only can a joint react to the movements of object it is attached to, but it can also actively apply drive forces to set the object in motion. Some joints need to keep the object moving at a constant speed, such as a rotary motor turning a fan blade. Use the Target Velocity and Target Angular Velocity properties to set your desired velocity for such joints.",293],["You might need to use joints that move their object towards a particular position in space,or a particular orientation. Use the Target Position and Target Rotation properties to set this functionality. For example, to implement a forklift, mount the forks on a configurable joint and then set the target height to raise them from a script.",293],["With the target set, the X, Y, Z Drive and Angular X/YZ Drive (or alternatively Slerp Drive) properties specify the force to use to push the joint toward it. The Drives' Mode property selects whether the joint should seek a target position, velocity or both. The Position Spring and Position Damper work in the same way as for the joint limits when they seek a target position. In velocity mode, the spring force depends on the \"distance\" between the current velocity and the target velocity; the damper helps the velocity to settle at the chosen value rather than oscillating endlessly around it. For example, the formula for the XDrive force is:",293],["force = PositionSpring * (target position - position) + PositionDamper * (targetVelocity - velocity)",293],["So, the force grows proportional to the difference between the current value and the target value, and reduces by the damper proportional to the difference between the current velocity and the target one. Unity applies the force to both positional and rotational drives.",293],["The Maximum Force property is a final refinement that prevents the force applied by the spring from exceeding a limit value regardless of how far the joint is from its target. This prevents a joint that you stretch far from its target from rapidly snapping the object back in an uncontrolled way.",293],["When you use any drive force (except for Slerp Drive, described below), the joint applies the force to the object separately in each axis. For example, you can implement a spacecraft that has a high forward flying speed but a relatively low speed in sideways steering motion.",293],["",293],["Slerp Drive",293],["Unlike the other drive modes that apply forces in separate axes, the Slerp Drive uses the quaternion's spherical interpolation or \"slerp\" functionality to reorient the joint. Rather than isolating individual axes, the slerp process finds the minimum total rotation that takes the object from the current orientation to the target, and applies it on all axes as necessary. Slerp drive is slightly easier to configure but you cannot specify different drive forces for the X and Y/Z axes.",293],["To enable Slerp drive, change the Rotation Drive Mode property from X and YZ to Slerp. A joint can use either the Angular X/YZ Drive values or the Slerp Drive values, but not both.",293],["ConfigurableJoint",293],["Constant Force component reference",294],["Constant Force** adds constant forces to a Rigidbody. This is useful for GameObject movement that accelerates over time.",294],["If you add a Constant Force component to a GameObject that does not have a Rigidbody, Unity automatically creates and adds a Rigidbody to the same GameObject.",294],["For more details, see Apply constant force to a Rigidbody.",294],["Properties",294],["For all values, a higher value produces a stronger force, which in turn produces a faster initial velocity.",294],["Property: Function: ",294],["Force Define the direction of the linear force. The XYZ vectors refer to the scene’s global axes. ",294],["Relative Force Define the direction of the linear force. The XYZ vectors refer to the Rigidbody’s local axes. ",294],["Torque Define the global axes that the Rigidbody rotates around. ",294],["Relative Torque Define the local axes that the Rigidbody rotates around. ",294],["ConstantForce",294],["Constant Force 2D",295],["Constant Force 2D is a quick utility for adding constant forces to a Rigidbody 2D. This works well for one-shot objects like rockets, if you want them to accelerate over time rather than starting with a large velocity.",295],["Constant Force 2D applies both linear and torque (angular) forces continuously to the Rigidbody 2D, each time the physics engine updates at runtime.",295],["Properties",295],["Property: Function: ",295],["Force The linear force applied to the Rigidbody 2D at each physics update. ",295],["Relative Force The linear force, relative to the Rigidbody 2D coordinate system, applied each physics update. ",295],["Torque The torque applied to the Rigidbody 2D at each physics update. ",295],["ConstantForce2D",295],["Cubemaps",296],["A Cubemap is a collection of six square textures that represent the",296],["reflections on an environment. The six squares form the faces of an imaginary cube that surrounds an",296],["object; each face represents the view along the directions of the world axes",296],["(up, down, left, right, forward and back).",296],["Cubemaps are often used to capture reflections or \"surroundings\" of objects; for example",296],["skyboxes and environment reflections often use cubemaps.",296],["Creating Cubemaps from Textures",296],["The fastest way to create cubemaps is to import them from specially laid out Textures.",296],["Select the Texture in the Project window, to see the Import Settings in the Inspector window. In the Import Settings, set the Texture Type to Default, Normal Map or Single Channel, and the Texture Shape to Cube. Unity then automatically sets the Texture up as a Cubemap.",296],["Several commonly-used cubemap layouts are supported (and in most cases, Unity detects them automatically).",296],["Vertical and horizontal cross layouts, as well as column and row of cubemap faces are supported:",296],["Another common layout is LatLong (Latitude-Longitude, sometimes called cylindrical). Panorama images are",296],["often in this layout:",296],["SphereMap (spherical environment map) images can also be found:",296],["By default Unity looks at the aspect ratio of the imported texture to determine the most appopriate layout from",296],["the above. When imported, a cubemap is produced which can be used for skyboxes and reflections:",296],["Selecting Glossy Reflection option is useful for cubemap textures that will be used by",296],["Reflection Probes. It processed cubemap mip levels in a special way",296],["(specular convolution) that can be used to simulate reflections from surfaces of different smoothness:",296],["Legacy Cubemap Assets",296],["Unity also supports creating cubemaps out of six separate textures.",296],["Select Assets > Create > Legacy > Cubemap from the menu,",296],["and drag six textures into empty slots in the inspector.",296],["Property: Function: ",296],["Right..Back Slots Textures for the corresponding cubemap face. ",296],["Face Size Width and Height of each Cubemap face in pixels. The textures will be scaled automatically to fit this size. ",296],["Mipmap Should mipmaps be created? ",296],["Linear Should the cubemap use linear color? ",296],["Readable Should the cubemap allow scripts to access the pixel data? ",296],["Note that it is preferred to create cubemaps using the Cubemap texture import type (see above) - this",296],["way cubemap texture data can be compressed; edge fixups and glossy reflection convolution be performed;",296],["and HDR cubemaps are supported.",296],["Other Techniques",296],["Another useful technique is to generate the cubemap from the contents of a Unity scene using a script.",296],["The Camera.RenderToCubemap function can record the six face",296],["images from any desired position in the scene; the code example on the function's script reference page",296],["adds a menu command to make this task easy.",296],[" 2018-01-31 ",296],["Cubemap",296],["Cubemap arrays",297],["A cubemap array is an array of cubemaps that are the same size and format, and that the GPU can access as a single texture resource. Cubemap arrays are often used for implementing efficient reflection probe, lighting and shadowing systems.",297],["In your Unity Project, the Unity Editor represents cubemap arrays as Texture Assets.To configure a Texture Asset's import settings you can use the Inspector, or write a script that uses the TextureImporter API. In the Unity engine, Unity uses the CubemapArray class to represent cubemap arrays.",297],["Creating a cubemap array",297],["To create a cubemap array in your Project, you must use a script.",297],["The following example is an Editor script that creates an instance of the CubemapArray class, populates it with color data, and then saves it to your Project as a Texture Asset.",297],["```c#",297],["using UnityEngine;",297],["public class CreateCubeArrayTexture : MonoBehaviour",297],["[UnityEditor.MenuItem(\"CreateExamples/CubemapArray\")]",297],["static void CreateCubemapArray()",297],["// Configure the cubemap array and color data",297],["int faceSize = 16;",297],["int arraySize = 4;",297],["int[] kCubeXRemap = new int[] { 2, 2, 0, 0, 0, 0 };",297],["int[] kCubeYRemap = new int[] { 1, 1, 2, 2, 1, 1 };",297],["int[] kCubeZRemap = new int[] { 0, 0, 1, 1, 2, 2 };",297],["float[] kCubeXSign = new float[] { -1.0F, 1.0F, 1.0F, 1.0F, 1.0F, -1.0F };",297],["float[] kCubeYSign = new float[] { -1.0F, -1.0F, 1.0F, -1.0F, -1.0F, -1.0F };",297],["float[] kCubeZSign = new float[] { 1.0F, -1.0F, 1.0F, -1.0F, 1.0F, -1.0F };",297],["var baseCols = new Color[] { Color.white, new Color(1, .5f, .5f, 1), new Color(.5f, 1, .5f, 1), new Color(.5f, .5f, 1, 1), Color.gray };",297],["// Create an instance of CubemapArray",297],["var tex = new CubemapArray(faceSize, arraySize, TextureFormat.ARGB32, true);",297],["tex.filterMode = FilterMode.Trilinear;",297],["// Iterate over each cubemap",297],["var col = new Color[tex.width * tex.width];",297],["float invSize = 1.0f / tex.width;",297],["for (var i = 0; i < tex.cubemapCount; ++i)",297],["var baseCol = baseCols[i % baseCols.Length];",297],["// Iterate over each face of the current cubemap",297],["for (var face = 0; face < 6; ++face)",297],["var idx = 0;",297],["Vector3 signScale = new Vector3(kCubeXSign[face], kCubeYSign[face], kCubeZSign[face]);",297],["// Iterate over each pixel of the current face",297],["for (int y = 0; y < tex.width; ++y)",297],["for (int x = 0; x < tex.width; ++x)",297],["// Calculate a \"normal direction\" color for the current pixel",297],["Vector3 uvDir = new Vector3(x * invSize * 2.0f - 1.0f, y * invSize * 2.0f - 1.0f, 1.0f);",297],["uvDir = uvDir.normalized;",297],["uvDir.Scale(signScale);",297],["Vector3 dir = Vector3.zero;",297],["dir[kCubeXRemap[face]] = uvDir[0];",297],["dir[kCubeYRemap[face]] = uvDir[1];",297],["dir[kCubeZRemap[face]] = uvDir[2];",297],["// Shift the color into the 0.4..1.0 range",297],["Color c = new Color(dir.x * 0.3f + 0.7f, dir.y * 0.3f + 0.7f, dir.z * 0.3f + 0.7f, 1.0f);",297],["// Add a pattern to some pixels, so that mipmaps are more clearly visible",297],["if (((x ^ y) & 3) == 1)",297],["c *= 0.5f;",297],["// Tint the color with the baseCol tint",297],["col[idx] = baseCol * c;",297],["++idx;",297],["// Copy the color values for this face to the texture",297],["tex.SetPixels(col, (CubemapFace)face, i);",297],["// Apply the changes to the texture and upload the updated texture to the GPU",297],["tex.Apply();",297],["// Save the texture to your Unity Project",297],["AssetDatabase.CreateAsset(tex, \"Assets/ExampleCubemapArray.asset\");",297],["UnityEditor.AssetDatabase.SaveAssets();",297],["Previewing a cubemap array",297],["To preview a cubemap array in the Inspector window, navigate to the Project window and select the Texture Asset. The Texture import settings for this Texture Asset are now visible in the Inspector, and Unity renders a preview of the cubemap array at the bottom of the Inspector.",297],["The following controls are available in the toolbar:",297],["Control Function ",297],["Filter Mode The filtering to use for the preview. See the documentation on Filter Mode ",297],["Using a cubemap array in a shader",297],["Here is an example of a shader that uses a cubemap array.",297],["```c#",297],["Shader \"CubemapArrayShaderExample\" {",297],["Properties {",297],["_MainTex (\"CubemapArray\", CubeArray) = \"\" {}",297],["_Mip (\"Mip\", Float) = 0.0",297],["_Intensity (\"Intensity\", Float) = 1.0",297],["_SliceIndex (\"Slice\", Int) = 0",297],["_Exposure (\"Exposure\", Float) = 0.0",297],["SubShader {",297],["Tags {\"Queue\"=\"Transparent\" \"IgnoreProjector\"=\"True\" \"RenderType\"=\"Transparent\" \"ForceSupported\" = \"True\"}",297],["Pass {",297],["CGPROGRAM",297],["pragma vertex vert",297],["pragma fragment frag",297],["pragma require sampleLOD",297],["pragma require cubearray",297],["include \"UnityCG.cginc\"",297],["struct appdata {",297],["float4 pos : POSITION;",297],["float3 nor : NORMAL;",297],["};",297],["struct v2f {",297],["float3 uv : TEXCOORD0;",297],["float4 pos : SV_POSITION;",297],["};",297],["uniform int _SliceIndex;",297],["float _Mip;",297],["half _Alpha;",297],["half _Intensity;",297],["float _Exposure;",297],["v2f vert (appdata v) {",297],["v2f o;",297],["o.pos = UnityObjectToClipPos(v.pos);",297],["float3 viewDir = -normalize(ObjSpaceViewDir(v.pos));",297],["o.uv = reflect(viewDir, v.nor);",297],["return o;",297],["half4 MainTexHDR;",297],["UNITY_DECLARE_TEXCUBEARRAY(_MainTex);",297],["fixed4 frag (v2f i) : COLOR0",297],["fixed4 c = UNITY_SAMPLE_TEXCUBEARRAY(_MainTex, float4(i.uv, _SliceIndex));",297],["fixed4 cmip = UNITY_SAMPLE_TEXCUBEARRAY_LOD(_MainTex, float4(i.uv, _SliceIndex), _Mip);",297],["if (_Mip >= 0.0)",297],["c = cmip;",297],["c.rgb = DecodeHDR (c, MainTexHDR) * _Intensity;",297],["c.rgb *= exp2(_Exposure);",297],["c = lerp (c, c.aaaa, _Alpha);",297],["return c;",297],["ENDCG",297],["Fallback Off",297],["If you use this shader with the Cubemap Array created in the example at the top of the page, the result looks like this:",297],["[Cubemap array support] added in 2020.1 NewIn20201",297],["CubemapArray",297],["Custom Collider 2D",298],["The Custom Collider 2D is a Collider that interacts with the 2D physics system. Unlike other Colliders, you do not configure the Collider in-Editor, instead you configure the Collider by assigning PhysicsShape2D geometry to it via the PhysicsShapeGroup2D API. You can further define the Collider by adding, removing and modifying the PhysicsShape2D shapes. Refer to the PhysicsShape2D API documentation for more information. This also means that a Custom Collider 2D can contain an unlimited number of low-level PhysicsShape2D and represent any type of shape, or emulate other types of Collider 2D.",298],["Property Function ",298],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",298],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",298],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",298],["Offset Set the local offset values of the Collider 2D geometry. ",298],["Custom Shape Count (Read only) Indicates how many PhysicsShape2D the Collider is using. ",298],["Custom Vertex Count (Read Only) Indicates how many vertices all PhysicsShape2D in the Collider are using. ",298],["Layer Overrides Expand for the Layer override settings. ",298],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",298],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",298],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",298],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",298],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",298],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",298],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",298],["Using the Custom Collider 2D",298],["When assigning PhysicsShape2D to the Custom Collider 2D, you can do so either during Edit mode or Play mode. When modifying the Custom Collider 2D in Edit mode, Unity saves all assigned PhysicsShape2D and associated vertices in the Unity Scene, and the CustomCollider2D retains its configuration when the Scene is loaded. This makes it possible to use Edit mode authoring scripts to create custom geometry.",298],["When modifying the Custom Collider 2D during Play mode, the Collider will not retain any changes made to assigned PhysicsShape2D and their associated vertices, and all changes will be lost when exiting Play mode.",298],["CustomCollider2D",298],["Custom Render Textures",299],["Custom Render Textures** are a special type of texture that allow you to update a texture with a shader. They are an extension to Render Textures. You can use Custom Render Textures to create complex simulations like caustics, ripple simulation for rain effects, and liquid splatters.",299],["The Custom Render Textures feature provides a scripting and Shader framework to help with complicated configuration like varying update frequency, partial or multi-pass updates.",299],["To use this framework you need to assign a Material to the Custom Render Texture asset. Custom Render Textures require a compatible Material. For more information, see Writing a shader for a Custom Render Texture.",299],["To assign a compatible material to a Custom Render Texture asset:",299],["Create a new Custom Render Texture asset.",299],["Assign a compatible Material to it in the Material property in the Custom Render Texture asset.",299],["This Material updates the content of a texture according to its parameters.",299],["This page contains the following information:",299],["\nRender Pipeline Compatibility\n",299],["\nProperties\n",299],["\nRender Texture\n",299],["\nCustom Render Texture\n",299],["\nExporting Custom Render Texture to a file\n",299],["\nUpdate Zones\n",299],["\nControlling Custom Render Texture from Script\n",299],["\nDouble Buffered Custom Render Textures\n",299],["\nChaining Custom Render Textures\n",299],["\nWriting a shader for a Custom Render Texture\n",299],["",299],["Render Pipeline Compatibility",299],["The following table describes the compatibility between the Custom Render Textures feature and each render pipeline:",299],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",299],["---------------------- ------------------------ ------------------------------- -------------------------------------- --------------------------------------- ",299],["Custom Render Textures Yes (1) Yes (1) Yes (1) Yes (1) ",299],["Note:**",299],["Currently, you can't create Materials that update and initialize Custom Render Textures in Shader Graph. You can only create shaders that operate on Custom Render Textures by writing ShaderLab code.",299],["",299],["Properties",299],["The Custom Render Textures Inspector window displays many of the same properties as the Render Texture Inspector, and some properties specific to Custom Render Textures.",299],["",299],["Render Texture:",299],["Property: Function: ",299],["Dimension Dimension of the Render Texture. ",299],["     2D Makes the Render Texture two-dimensional. ",299],["     Cube Makes the Render Texture a cube map. ",299],["     3D Makes the Render Texture three-dimensional. ",299],["Size The size of the Render Texture in pixels. ",299],["Color Format The format of the Render Texture. ",299],["sRGB (Color Render Texture) Enable to allow the Render Texture to use sRGB read/write conversions (Read Only). ",299],["Enable Mip Maps Enable this property to allow the Render Texture to use mipmaps. ",299],["Auto generate Mip Maps Enable this property to automatically generate mipmaps. ",299],["Wrap Mode Defines how the Texture behaves when tiled. ",299],["     Repeat The Texture repeats itself as a tile. ",299],["     Clamp Unity stretches the edges of the Texture. ",299],["Filter Mode Defines how Unity filters the Texture when it is stretched by 3D transformations. ",299],["     Point The Texture becomes blocky up close. ",299],["     Bilinear The Texture becomes blurry up close. ",299],["     Trilinear Like Bilinear, but the Texture also blurs between different mip levels. ",299],["Aniso Level Increases Texture quality when viewing the texture at a steep angle. Good for floor and ground textures. ",299],["",299],["Custom Texture:",299],["These properties are exclusive to Custom Render Textures. Custom Texture parameters are separated into three categories:",299],["Material**: Defines what shader is used to update the texture.",299],["Initialization**: Controls how the texture is initialized before the shader performs any updates.",299],["Update**: Controls how the shader updates the texture.",299],["Property: Function: ",299],["Material The Material that Unity uses to update the Custom Render Texture. ",299],["     Shader Pass The Shader Pass that Unity uses to update the Custom Render Texture. The drop-down shows all passes available in your Material. ",299],["Initialization Mode The rate at which Unity initializes the texture. ",299],["     OnLoad Unity initializes the texture once upon creation. ",299],["     Realtime Unity initializes the texture every frame. ",299],["     OnDemand Unity initializes the texture on demand from the script. ",299],["Source How Unity texture initializes the texture. ",299],["     Texture and Color Unity uses a texture multiplied by a color to initialize the texture. ",299],["         Initialization Color Defines the color that Unity uses to initialize the Custom Render Texture. If you also provide an Initialization Texture, Unity uses the multiplication of the color and the texture to initialize the Custom Render Texture. ",299],["         Initialization Texture Defines the texture that Unity uses to initialize the Custom Render Texture. If you also provide an Initialization Color, Unity uses the multiplication of the color and the texture to initialize the Custom Render Texture. ",299],["     Material Unity uses a Material to initialize the texture. ",299],["         Initialization Material Defines the Material that Unity uses to initialize the Custom Render Texture. ",299],["Update Mode The rate at which the shader updates the Custom Render Texture. ",299],["     OnLoad The shader updates the texture once upon creation. ",299],["     Realtime The shader updates the texture every frame. ",299],["     OnDemand The shader updates the texture on demand from script. ",299],["Period The amount of time in seconds over which Unity updates a real-time texture. A value of 0.0 updates every frame. This property is only available when the Update Mode to property is set to Realtime. ",299],["Double Buffered Double-buffers the texture. Each update swaps the two buffers. This allows you to read the result of the preceding update in the shader. ",299],["Wrap Update Zones Enable to allow partial update zones to wrap around the border of the texture. ",299],["Cubemap Faces (Cubemap only) Series of toggle allowing user to enable/disable update on each of the cube map faces. ",299],["Update Zone Space The coordinate system where Unity defines the update zones. ",299],["     Normalized All coordinates and sizes are between 0 and 1 with the top-left corner starting at (0, 0). ",299],["     Pixel All coordinates and sizes are expressed in pixels limited by the width and height of the texture. Top-left corner starting at (0, 0). ",299],["Update Zone List List of update zones for the texture. For more information, see Update Zones. ",299],["",299],["Exporting Custom Render Texture to a file:",299],["You can export Custom Render Textures to a PNG or EXR file (depending on the texture format) in the Export menu.",299],["",299],["Update Zones:",299],["When Unity updates a Custom Render Texture, it uses the Material to update the whole texture at once by default. The Custom Render Texture allows you to define zones of partial update. You can use this to define as many zones as you want and the order in which the zones are processed.",299],["You can use update zones for various purposes. For example, you could have multiple small zones to splat water drops on the texture and then do a full pass to simulate the ripples. This can also be used as an optimization when you know that you don’t need to update the full texture.",299],["Update zones have their own set of properties. The Update Zone Space is visible in the display. Coordinates depend on the Dimension of the texture: 2D for 2D and Cube textures, or 3D for 3D textures.",299],["Property: Function: ",299],["Center The coordinates of the center of the update zone.. ",299],["Size The size of the update zone. ",299],["Rotation The orientation of the update zone in degrees (unavailable for 3D textures). ",299],["Shader Pass Defines the Shader Pass to use for this update zone. If you set this property as default, this update zone uses the Shader Pass that you defined in the main part of the inspector. Otherwise it will use the Shader Pass you provide. ",299],["Swap (Double Buffer) (Only for Double Buffered textures) When you enable this property, Unity swaps the buffers before processing this update zone. ",299],["",299],["Controlling Custom Render Texture from Script",299],["You can access most of the Custom Render Texture functionalities in the Scripting API. You can also change Material parameters, update frequency, update zones, request an update, and more using a script.",299],["When Unity updates or initializes a Custom Render Texture, it uses the current properties to render the next frame. This guarantees that any Material that uses this texture has an up-to-date result. For example, in the following script Unity performs two updates using the second Update Zone array:",299],["customRenderTexture.updateZones = updateZones1;",299],["customRenderTexture.Update();",299],["customRenderTexture.updateZones = updateZones2;",299],["customRenderTexture.Update();",299],["Note:** Unity does not update or initialize a Custom Render Texture at the same time you call Update() or Initialize(). This is because Unity always updates and initializes a Custom Render Texture at the start of the next frame.",299],["",299],["Double Buffered Custom Textures",299],["You can double-buffer Custom Render Textures. To do this, enable Double Buffered in the Custom Render Textures component, or use CustomRenderTexture.doubleBuffered.",299],["Double-buffering means that inside one Custom Render Texture there are two textures which Unity can swap after each update. This allows you to read the result of the last update while writing a new result in the Custom Render Texture.",299],["Double-buffering is particularly useful if the shader needs to use the content the Unity has already written in the texture but can’t mix the values with classic blend modes. This is also required if the shaders have to sample different pixels from the preceding result.",299],["Performance warning**: Double-buffering currently involves a copy of the texture at each swap which can lead to a drop in performance depending on the frequency at which it is done and the resolution of the texture.",299],["",299],["Chaining Custom Render Textures",299],["You can chain Custom Render Textures together. To do this, use a Custom Render Texture as the input for a material that you have assigned to the Material or Initialization Mode > Texture in another Custom Render Texture.",299],["You can use chained Custom Render Textures to generate a simulation with multiple steps.",299],["Chained Custom Render Textures are dependent on each other. Unity calculates this dependency automatically so that each update happens in the right order. It does this by looking at the materials assigned to the Material and Initialization Mode > Texture properties in the Custom Render Textures inspector window.",299],["",299],["Writing a shader for a Custom Render Texture",299],["To update a Custom Render Texture manually, you can write a specialized Custom Render Texture shader.",299],["To help you write your Custom Render Texture shaders, here are two example frameworks that contain utility functions and built-in helper variables.",299],["The following shader example fills the texture with a color multiplied by a color. When you write a shader for a Custom Render Texture, you must do the following:",299],["\n#include \"UnityCustomRenderTexture.cginc\".\n",299],["\nUse the provided Vertex Shader CustomRenderTextureVertexShader.\n",299],["\nUse the provided input structure v2f_customrendertexture for the pixel shader.\n",299],["Shader \"CustomRenderTexture/Simple\"",299],["Properties",299],["_Color (\"Color\", Color) = (1,1,1,1)",299],["_Tex(\"InputTex\", 2D) = \"white\" {}",299],["SubShader",299],["Lighting Off",299],["Blend One Zero",299],["Pass",299],["CGPROGRAM",299],["include \"UnityCustomRenderTexture.cginc\"",299],["pragma vertex CustomRenderTextureVertexShader",299],["pragma fragment frag",299],["pragma target 3.0",299],["float4 _Color;",299],["sampler2D _Tex;",299],["float4 frag(v2f_customrendertexture IN) : COLOR",299],["return Color * tex2D(Tex, IN.localTexcoord.xy);",299],["ENDCG",299],["The following example is a shader for a material you can use to initialize a Custom Render Texture. When you write a shader for an initialization Material, the following steps are mandatory:",299],["#include \"UnityCustomRenderTexture.cginc\"",299],["Use the provided Vertex Shader CustomRenderTextureVertexShader",299],["Use the provided input structure v2f_customrendertexture for the pixel shader.",299],["Shader \"CustomRenderTexture/CustomTextureInit\"",299],["Properties",299],["_Color (\"Color\", Color) = (1,1,1,1)",299],["_Tex(\"InputTex\", 2D) = \"white\" {}",299],["SubShader",299],["Lighting Off",299],["Blend One Zero",299],["Pass",299],["CGPROGRAM",299],["include \"UnityCustomRenderTexture.cginc\"",299],["pragma vertex InitCustomRenderTextureVertexShader",299],["pragma fragment frag",299],["pragma target 3.0",299],["float4 _Color;",299],["sampler2D _Tex;",299],["float4 frag(v2f_init_customrendertexture IN) : COLOR",299],["return Color * tex2D(Tex, IN.texcoord.xy);",299],["ENDCG",299],["#include \"UnityCustomRenderTexture.cginc\" gives you access to a set of built-in values. This includes Global values, values from the v2f_customrendertexture structure and values from the v2f_init_customrendertexture structure.",299],["The v2f_customrendertexture structure accepts the following inputs:",299],["Name Type Value ",299],["localTexcoord float3 Texture coordinates relative to the update zone being currently processed. ",299],["globalTexcoord float3 Texture coordinates relative to the Custom Render Texture itself ",299],["primitiveID uint Index of the update zone being currently processed. ",299],["direction float3 For Cube Custom Render Texture, direction of the current pixel inside the cubemap. ",299],["The v2f_init_customrendertexture structure accepts the following inputs:",299],["Name Type Value ",299],["texcoord float3 Texture coordinates relative to the Custom Render Texture itself. ",299],["The following structures are Global values:",299],["Name Type Value ",299],["_CustomRenderTextureWidth float Width of the Custom Texture in pixels ",299],["_CustomRenderTextureHeight float Height of the Custom Texture in pixels ",299],["_CustomRenderTextureDepth float Depth of the Custom Texture in pixels (only for 3D textures, otherwise will always be equal to 1). ",299],["_CustomRenderTextureCubeFace float The index of the current cubemap face that Unity processes (-X, +X, -Y, +Y, -Z, +Z). This only applies to cube maps. ",299],["_CustomRenderTexture3DSlice float Index of the current 3D slice being processed. This only applies to 3D textures. ",299],["_SelfTexture2D Sampler2D For double buffered textures: Texture containing the result of the last update before the last swap. ",299],["_SelfTextureCube SamplerCUBE For double buffered textures: Texture containing the result of the last update before the last swap. ",299],["_SelfTexture3D Sampler3D For double buffered textures: Texture containing the result of the last update before the last swap. ",299],[" 2017-05-18 ",299],["New feature in Unity 2017.1 NewIn20171",299],["CustomRenderTexture",299],["Debug",300],["The Debug class allows you to visualise information in the Editor that may help you understand or investigate what is going on in your project while it is running. For example, you can use it to print messages into the Console window, draw visualization lines in the Scene view and Game view, and pause Play Mode in the Editor from script.",300],["This page provides an overview of the Debug class and its common uses when scripting with it. For an exhaustive reference of every member of the Debug class, see the Debug script reference.",300],["Logging errors, warnings and messages",300],["Unity itself sometimes logs errors, warnings and messages to the Console window. The Debug class provides you with the ability to do exactly the same from your own code, as shown below:",300],["Debug.Log(\"This is a log message.\");",300],["Debug.LogWarning(\"This is a warning message!\");",300],["Debug.LogError(\"This is an error message!\");",300],["The three types (error, warning, and message) each have their own icon type in the Console window.",300],["Everything that is written to the Console Window (by Unity, or your own code) is also written to a Log File.",300],["If you have Error Pause enabled in the Console, any errors that you write to the Console via the Debug class will cause Unity's Play Mode to pause.",300],["You can also optionally provide a second parameter to these log methods to indicate that the message is associated with a particular GameObject, like this:",300],["using UnityEngine;",300],["public class DebugExample : MonoBehaviour",300],["{ void Start()",300],["Debug.LogWarning(\"I come in peace!\", this.gameObject);",300],["The benefit of this is that when you click the message in the console, the GameObject you associated with that message is highlighted in the Hierarchy, allowing you to identify which GameObject the message related to. In the image below you can see that clicking the \"I come in peace!\" warning message highlights the \"Alien (8)\" GameObject.",300],["The Debug class also offers two methods for drawing lines in the Scene view and Game view. These are DrawLine and DrawRay.",300],["In this example, a script has been added to every Sphere GameObject in the scene, which uses Debug.DrawLine to indicate its vertical distance from the plane where Y equals zero. Note that the last parameter in this example is the duration in seconds that the line should stay visible in the Editor.",300],["using UnityEngine;",300],["public class DebugLineExample : MonoBehaviour",300],["// Start is called before the first frame update",300],["void Start()",300],["float height = transform.position.y;",300],["Debug.DrawLine(transform.position, transform.position - Vector3.up * height, Color.magenta, 4);",300],["And the result in the Scene view looks like this:",300],["Debug",300],["Distance Joint 2D",301],["The Distance Joint 2D is a 2D joint that attaches two GameObjects controlled by Rigidbody 2D physics, and keeps them a certain distance apart.",301],["Property Function ",301],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",301],["Connected Rigidbody Specify the other object this joint connects to. Leave this as None to have the other end of the joint fixed at a point in space defined by the Connected Anchor property. Select the circle icon to the right to view a list of GameObjects to connect to. ",301],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other object this joint connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",301],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",301],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",301],["Auto Configure Distance Enable this to automatically detect the current distance between the two GameObjects, and set it as the distance that the Distance Joint 2D keeps between the two GameObjects. When enabled, you do not need to specify the distance between the GameObjects at Distance. ",301],["Distance Specify the distance that the Distance Joint 2D keeps between the two GameObjects. ",301],["Max Distance Only Enable this to only enforce a maximum distance. This allows connected GameObjects to move closer to each other, but not further than the distance set by Distance. Clear this to keep the distance between the GameObjects fixed. ",301],["Break Action Set the action taken when either a force or torque threshold is exceeded. ",301],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",301],["Using this joint",301],["The main application of the Distance Joint 2D component is to keep distance between two points. These two points can be two Rigidbody 2D components or a Rigidbody 2D component and a fixed position in the world. Tip: To connect a Rigidbody 2D component to a fixed position in the world, set the Connected Rigidbody field to None.",301],["This Joint 2D does not apply torque or rotation. It does apply a linear force to both connected items, using a very stiff simulated 'spring' to maintain the distance. You cannot configure the properties of this 'spring'.",301],["This Joint 2D has a selectable constraint:",301],["Constraint A**: Maintains a fixed distance between two anchor points on two bodies (when Max Distance Only is unchecked).",301],["Constraint B**: Maintains maximum distance only between two anchor points on two bodies (when Max Distance Only is checked).",301],["You can use this Joint 2D to construct physical objects that need to behave as if they are connected with a rigid connection that can rotate.",301],["Using Constraint A (Max Distance Only unchecked), you can create a fixed length connection, such as two wheels on a bicycle.",301],["Using Constraint B (Max Distance Only checked), you can create a constrained but unfixed length connection, which allows flexible movement such as a yo-yo moving towards and away from a fixed point.",301],["Additional resources",301],["\nRefer to Joints 2D for more information about other 2D Joints.\n",301],["DistanceJoint2D",301],["Edge Collider 2D",302],["The Edge Collider 2D component is a Collider that interacts with the 2D physics system. The Collider's shape is a freeform edge made of line segments that you can adjust to fit the shape of a Sprite or any other shape. The Collider’s start and end points do not need to meet or completely enclose an area to function (unlike the Polygon Collider 2D), and can form a straight line or other single edge shape.",302],["Property Function ",302],[":-------- :------- :----- ",302],["Edit Collider Select Edit Collider to make the collider outline editable. See Editing in Edit Collider mode for the actions and shortcuts available when Edit Collider is enabled. ",302],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",302],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",302],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",302],["Offset Set the local offset values of the Collider 2D geometry. ",302],["Edge Radius Set a value that forms a radius around the edge of the Collider. This results in a larger Collider 2D with rounded convex corners. The default value is 0 (no radius). ",302],["Points Expand to view read-only information about the complexity of the generated Collider. ",302],["Use Adjacent Start Point Enable this property to calculate the collision response using the Adjacent Start Point to form the collision normal when a collision occurs at the Edge Collider’s start point. ",302],["Adjacent Start Point X/Y Set the x and y-coordinates of the Adjacent Start Point. ",302],["Use Adjacent End Point Enable this property to calculate the collision response using the Adjacent End Point to form the collision normal when a collision occurs at the Edge Collider's end point. ",302],["Adjacent End Point X/Y Set the x and y-coordinates of the Adjacent End Point. ",302],["Layer Overrides Expand for the Layer override settings. ",302],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",302],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",302],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",302],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",302],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",302],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",302],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",302],["Editing in Edit Collider mode ",302],["The actions and shortcuts available when Edit Collider is enabled.",302],["Action Function ",302],[":------ :------- ",302],["Click and drag vertex or edge. Move the selected vertex and edge to a different position. ",302],["Click anywhere along an edge. Create a new vertex by clicking an empty space along the edge. ",302],["Hold the Ctrl(macOS:Cmd) key and select a vertex or edge. Deletes the selected vertex or edge. ",302],["EdgeCollider2D",302],["Editor",303],["Use the Editor settings (main menu: Edit > Project Settings, the select the Editor category) to apply global settings for working in Unity's Editor.",303],["Property Function ",303],["Unity RemoteNote: Unity Remote is deprecated in 2020.1 and future versions. To test your app on mobile devices, use the Device Simulator package instead. ",303],["Device Choose the device type you want to use for Unity Remote testing. Unity Remote is a downloadable app designed to help with Android, iOS and tvOS development. ",303],["Compression Choose the type of image compression to use when transmitting the game screen to the device via Unity Remote. Default is JPEG. ",303],["JPEG JPEG usually gives higher compression and performance, but the graphics quality is a little lower. This is the default option. ",303],["PNG PNG gives a more accurate representation of the game display, but can result in lower performance. ",303],["Resolution Choose the resolution the game should run at on Unity Remote. Default is Downsize. ",303],["Downsize Display the game at a lower resolution. This results in better performance, but lower graphical accuracy. This is the default option. ",303],["Normal Display the game at normal resolution. This results in better graphical accuracy, but lower performance. ",303],["Joystick Source Choose the connection source for the joysticks you are using. Default is Remote. ",303],["Remote Use joysticks that are connected to a device running Unity Remote. This is the default option. ",303],["Local Use joysticks that are connected to the computer running the Editor. ",303],["Version Control ",303],["Mode Choose the visibility of meta files. You can use Unity in conjunction with most common version control tools, including Perforce and PlasticSCM. Default is Hidden Meta Files. For more information on showing or hiding meta files, see Visible or hidden meta files at Unity Answers. ",303],["Hidden Meta Files Hide meta files. This is the default option. ",303],["Visible Meta Files Display meta files. This is useful when using version control, because it allows other users and machines to view these meta files. ",303],["Perforce Use Perforce version control system. ",303],["PlasticSCM Use PlasticSCM version control system. ",303],["Asset Serialization ",303],["Mode Choose which format to use for storing serialized Assets. This is set to Force Text by default. Unity uses serialization to load and save Assets and AssetBundles to and from your computer’s hard drive. To help with version control merges, Unity can store Scene files in a text-based format. If you are not merging Scenes, Unity can store Scenes in a more space-efficient binary format, or allow both text and binary Scene files to exist at the same time. ",303],["Mixed Assets in Binary mode remain in Binary mode, and Assets in Text mode remain in Text mode. Unity uses Binary mode by default for new Assets. ",303],["Force Binary Convert all Assets to Binary mode, including new Assets. ",303],["Force Text Convert all Assets to Text mode, including new Assets. This is the default option. ",303],["Serialize Inline Mappings On One Line Enable this setting to make Unity write references and inline mappings on one line. If this setting is disabled, Unity splits text serialized references over multiple lines when the total characters in a line reach over 80 characters. ",303],["Default Behavior Mode ",303],["Mode Choose the default 2D or 3D development mode. Unity sets up the certain default behaviors according to the mode you choose to make development easier. Default is 3D. ",303],["3D Set Unity up for 3D development. This is the default option. ",303],["2D Set Unity up for 2D development. ",303],["Asset Pipeline ",303],["Mode Choose which Asset Pipeline version to use. ",303],["Version 1 (deprecated) Use Asset Pipeline version 1. This feature is deprecated and is no longer supported. ",303],["Version 2 Use Asset Pipeline version 2. This is the default option. ",303],["Active version Displays the active Asset Pipeline version. For a change to take effect, you must save and restart the project. ",303],["Cache Server (project specific) ",303],["Mode Choose which Cache Server to use. ",303],["Use global settings (stored in preferences) The default Cache Server set in the Preferences window is used. ",303],["Enabled Choose a specific Cache Server to use instead of the default. ",303],["Disabled No Cache Server is used. ",303],["Prefab Editing Environments ",303],["Regular Environment Assign a Scene as an editing environment in Prefab Mode for regular Prefabs (that is, Prefabs with a regular Transform component). This allows you to edit your Prefab against a backdrop of your choosing rather than an empty Scene.See Editing a Prefab in Prefab Mode for more information. ",303],["UI Environment Assign a Scene as an editing environment in Prefab Mode for UI Prefabs (that is, Prefabs with a Rect Transform component). This allows you to edit your Prefab against a backdrop of your choosing rather than an empty Scene.See Editing a Prefab in Prefab Mode for more information. ",303],["Graphics ",303],["Show lightmap resolution overlay This setting relates to Draw Modes in the Baked Global Illumination category. When this is enabled, Unity draws a checkerboard overlay on top of these Draw Modes, where each checker tile corresponds to one texel. Use this to check the texel density of your Scene when lightmapping.You can also toggle this setting from the Draw Mode drop-down menu, when the active Draw Mode is from the Baked Global Illumination category. ",303],["Use legacy Light Probe sample counts Uses fixed Light Probe sample counts for baking with the Progressive Lightmapper. The sample counts are: 64 direct samples, 2048 indirect samples, and 2048 environment samples. ",303],["Enable baked cookies support For Projects created in Unity 2020.1 or above, baked cookies are enabled for Baked Lights and Mixed Lights in the Progressive Lightmapper by default. For Projects created in versions of Unity prior to 2020.1, baked cookies are disabled for Baked Lights and Mixed Lights in the Progressive Lightmapper by default. This is to provide backwards compatibility.Enable this to enable baked cookies for Baked Lights and Mixed Lights in the Progressive Lightmapper.For more information, see Cookies. ",303],["Sprite Packer ",303],["Mode Choose a mode to configure the Sprite Packer tool. The Sprite Packer tool automates the process of generating Sprite Atlases from individual Sprite Textures. This setting is set to Disabled by default. ",303],["Disabled Unity does not pack Sprite Atlases. This is the default setting. ",303],["Sprite Atlas V1 - Enabled For Builds Unity packs Sprite Atlases for builds only. ",303],["Sprite Atlas V1 - Always Enabled Unity packs Sprite Atlases for builds and before entering Play mode. ",303],["Sprite Atlas V2 (Experimental) - Enabled Unity packs Sprite Atlases for both builds and before entering Play mode. ",303],["Sprite Atlas V2 (Experimental) - Enabled For Builds Unity packs Sprite Atlases for builds only. ",303],["C# Project Generation ",303],["Additional extensions to include Include a list of additional file types to add to the C# Project. Separate each file type with a semicolon. By default, this field contains txt;xml;fnt;cd. ",303],["Root namespace Fill in the namespace to use for the C# project RootNamespace property. See Common MSBuild Project Properties for more information. This field is blank by default. ",303],["ETC Texture Compressor ",303],["Behavior Specify the compression tool to use for different compression qualities of ETC Textures.The compression tools available are etcpak, ETCPACK and Etc2Comp. These are all third-party compressor libraries. ",303],["Legacy Use the configuration that was available before ETC Texture compression became configurable. This sets the following properties: - Fast: ETCPACK Fast - Normal: ETCPACK Fast - Best: ETCPACK Best ",303],["Default Use the default configuration for Unity. This sets the following properties: - Fast: etcpack - Normal: ETCPACK Fast - Best: Etc2Comp Best ",303],["Custom Customize the ETC Texture compression configuration. When you choose this option, the Fast, Normal, and Best properties are enabled. This maps to the *Compressor Quality *setting in the Texture Importer for the supported platforms. ",303],["Fast Define the compression quality tool to use for Fast compression. ",303],["Normal Define the compression quality tool to use for Normal compression. ",303],["Best Define the compression quality tool to use for Best compression. ",303],["Line Endings For New Scripts ",303],["Mode Choose the file line endings to apply to new scripts created within the Editor. Note that configuring these settings does not convert existing scripts. ",303],["OS Native Apply line endings based on the operating system the Editor is running on. ",303],["Unix Apply line endings based on the Unix operating system. ",303],["Windows Apply line endings based on the Windows operating system. ",303],["Streaming Settings ",303],["Enable Texture Streaming in Play Mode Enable Mipmap Streaming in Play Mode. The Quality Texture Streaming setting must also be enabled. ",303],["Shader Compilation ",303],["Asynchronous Shader Compilation Enable this checkbox to make Unity compile shaders in the background. While compiling, the Unity engine uses a dummy Shader to render geometry in the Editor. When Shader compilation has finished, the engine swaps your Shader Variant back in. This means the Editor runs seamlessly, without having to wait for the Unity engine to compile every single Shader variant before rendering. For more information, see Asynchronous Shader compilation. ",303],["Numbering Scheme ",303],["Game Object Naming Naming scheme for duplicated GameObjects. Duplicated or instantiated GameObjects are named by appending successive numbers to the original object name. ",303],["Game Object Digits Sets the amount of digits to use for duplicated GameObject numbers. ",303],["Space Before Number in Asset Names Controls whether to insert a space before a number in duplicated Asset names. ",303],["EditorManager",303],["Model Import Settings window",304],["Note:** These settings are for importing Models and animations created in most 3D modeling applications. However, Models created in SketchUp and SpeedTree use specialized settings. For more information, see SketchUp Settings, and SpeedTree Import Settings.",304],["When you put Model files in the Assets folder under your Unity Project, Unity automatically imports and stores them as Unity Assets. To view the import settings in the Inspector window, click on the file in the Project window. You can customize how Unity imports the selected file by setting the properties on four tabs on this window:",304],["A 3D Model can represent a character, a building, or a piece of furniture. In these cases, Unity creates multiple Assets from a single model file. In the Project window, the main imported object is a model Prefab. Usually there are also several Mesh objects that the model Prefab references.",304],["A Rig (sometimes called a skeleton) comprises a set of deformers arranged in a hierarchy that animate a Mesh (sometimes called skin) on one or more models created in a 3D modeling application such as as Autodesk® 3ds Max® or Autodesk® Maya®. For Humanoid and Generic (non-humanoid) Models, Unity creates an Avatar to reconcile the imported Rig with the Unity GameObject.",304],["You can define any series of different poses occurring over a set of frames, such as walking, running, or even idling (shifting from one foot to the other) as an Animation Clip. You can reuse clips for any Model that has an identical Rig. Often a single file contains several different actions, each of which you can define as a specific Animation Clip.",304],["You can extract Materials and Textures or leave them embedded within the model. You can also adjust how Material is mapped in the Model.",304],["See also",304],["Model import workflows: Overview of importing Model files",304],["Model file formats: Which file formats (both proprietary and generic) that Unity supports, as well as issues specific to various 3D modeling software applications",304],["FBXImporter",304],["Fixed Joint component reference",305],["Fixed Joints restricts an object's movement to be dependent upon another object. This is somewhat similar to Parenting but is implemented through physics rather than Transform hierarchy. The best scenarios for using them are when you have objects that you want to easily break apart from each other, or connect two object's movement without parenting.",305],["Properties",305],["Property: Function: ",305],["Connected Body Optional reference to the Rigidbody that the joint is dependent upon. If not set, the joint connects to the world. ",305],["Break Force The force that needs to be applied for this joint to break. ",305],["Break Torque The torque that needs to be applied for this joint to break. ",305],["Enable Collision When checked, this enables collisions between bodies connected with a joint. ",305],["Enable Preprocessing Disabling preprocessing helps to stabilize impossible-to-fulfil configurations. ",305],["Details",305],["There may be scenarios in your game where you want objects to stick together permanently or temporarily. Fixed Joints may be a good Component to use for these scenarios, since you will not have to script a change in your object's hierarchy to achieve the desired effect. The trade-off is that you must use Rigidbodies for any objects that use a Fixed Joint.",305],["For example, if you want to use a \"sticky grenade\", you can write a script that will detect collision with another Rigidbody (like an enemy), and then create a Fixed Joint that will attach itself to that Rigidbody. Then as the enemy moves around, the joint will keep the grenade stuck to them.",305],["Breaking joints",305],["You can use the Break Force and Break Torque properties to set limits for the joint's strength. If these are less than infinity, and a force/torque greater than these limits are applied to the object, its Fixed Joint will be destroyed and will no longer be confined by its restraints.",305],["Hints",305],["You do not need to assign a Connected Body to your joint for it to work.",305],["Fixed Joints require a Rigidbody.",305],["FixedJoint",305],["Fixed Joint 2D",306],["Use the Fixed Joint 2D to connect two GameObjects controlled by Rigidbody 2D physics to keep them in a position relative to each other, so the GameObjects are always offset at a given position and angle. It is a spring-type 2D joint for which you don’t need to set maximum forces. You can set the spring to be rigid or soft.",306],["Refer to Fixed Joint 2D and Relative Joint 2D for the differences between Fixed Joint 2D and Relative Joint 2D.",306],["Property Function ",306],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",306],["Connected Rigid Body Specify the other object this joint connects to. Leave this as None to have the other end of the joint fixed at a point in space defined by the Connected Anchor property. Select the circle icon to the right to view a list of GameObjects to connect to. ",306],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other object this joint connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",306],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",306],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",306],["Damping Ratio Set the degree to suppress spring oscillation. In the range 0 to 1, the higher the value, the less movement. ",306],["Frequency Set the frequency at which the spring oscillates while the GameObjects are approaching the separation distance you want (measured in cycles per second). In the range 0 to 1,000,000 - the higher the value, the stiffer the spring. Note: Setting Frequency to zero will create the stiffest spring type joint possible. ",306],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",306],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",306],["Break Torque Set the torque threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",306],["Using this joint",306],["The aim of this joint is to maintain a relative linear and angular offset between two points. Those two points can be two Rigidbody 2D components or a Rigidbody 2D component and a fixed position in the world. (Connect to a fixed position in the world by setting Connected Rigidbody to None).",306],["The linear and angular offsets are based upon the relative positions and orientations of the two connected points, so you change the offsets by moving the connected GameObjects in your Scene view.",306],["The joint applies both linear and torque forces to connected Rigidbody 2D GameObjects. It uses a simulated spring that is pre-configured to be as stiff as the simulation can provide. You can change the spring's value to make it weaker using the Frequency setting.",306],["When the spring applies its force between the GameObjects, it tends to overshoot the desired distance between them and then rebound repeatedly, resulting in a continuous oscillation. The damping ratio determines how quickly the oscillation reduces and brings the GameObjects to rest. The frequency is the rate at which it oscillates either side of the target distance; the higher the frequency, the stiffer the spring.",306],["Fixed Joint 2D has two simultaneous constraints:",306],["Maintain the linear offset between two anchor points on two Rigidbody 2D GameObjects.",306],["Maintain the angular offset between two anchor points on two Rigidbody 2D GameObjects.",306],["You can use this joint to construct physical GameObjects that need to react as if they are rigidly connected. They can't move away from each other, they can't move closer together, and they can't rotate with respect to each other, such as a bridge made of sections which hold rigidly together.",306],["You can also use this joint to create a less rigid connection that flexes - for example, a bridge made of sections which are slightly flexible.",306],["Comparing Fixed and Relative joints 2D ",306],["It is important to know the major differences between Fixed Joint 2D and Relative Joint 2D:",306],["Fixed Joint 2D** is a spring-type joint. Relative Joint 2D is a motor-type joint with a maximum force and/or torque.",306],["Fixed Joint 2D** uses a spring to maintain the relative linear and angular offsets. Relative Joint 2D uses a motor. You can configure a joint's spring or motor.",306],["Fixed Joint 2D** works with anchor points (it’s derived from script Anchored Joint 2D); it maintains the relative linear and angular offset between the anchors. Relative Joint 2D doesn’t have anchor points (it’s derived directly from script Joint 2D).",306],["Fixed Joint 2D** cannot modify the relative linear and angular offsets in real time. Relative Joint 2D can.",306],["Additional resources",306],["\nRefer to Joints 2D for more information about other 2D Joints.\n",306],["FixedJoint2D",306],["Flare asset",307],["A Flare asset allows you to create and configure the appearance of lens flares. Lens flares simulate the effect of lights refracting inside a camera lens. Use them to represent bright lights or to add a bit more atmosphere to your Scene.",307],["Note:** This workflow is compatible only with the Built-in Render Pipelne. For similar functionality in other render pipelines, see Lens flares and halos.",307],["Using Flare assets",307],["Assign the Flare asset to a Light component or a Lens flare component.",307],["If you assign it to the Flare property of a Light component, Unity automatically tracks the position and direction of the Light and uses those values to configure the appearance of the lens flare.",307],["If you assign it to the Flare property of a Lens flare component, you can use the Lens Flare component to configure additional values for more precise control.",307],["If you want a Camera to see lens flares, attach a Flare Layer component to the Camera's GameObject.",307],["To see the lens flare effect in the Scene View, enable the Effect toggle in the Scene View toolbar and, in the drop-down, enable Flares.",307],["Examples",307],["There are some sample Flare assets in Unity's Standard Assets.",307],["Flare Inspector reference",307],["Flares work by containing several Flare Elements on a single Texture. Within the Flare, you pick and choose which Elements you want to include from any of the Textures.",307],["Property: Function: ",307],["Elements The number of Flare images included in the Flare. ",307],["        Image Index Which Flare image to use from the Flare Texture for this Element. See the Flare Textures section below for more information. ",307],["        Position The Element's offset along a line running from the containing GameObject's position through the screen center. 0 = GameObject position, 1 = screen center. ",307],["        Size The size of the element. ",307],["        Color Color tint of the element. ",307],["        Use Light Color If the Flare is attached to a Light, enabling this will tint the Flare with the Light's color. ",307],["        Rotate If enabled, bottom of the Element will always face the center of the screen, making the Element spin as the Lens Flare moves around on the screen. ",307],["        Zoom If enabled, the Element will scale up when it becomes visible and scale down again when it isn't. ",307],["        Fade If enabled, the Element will fade in to full strength when it becomes visible and fade out when it isn't. ",307],["Flare Texture A texture containing images used by this Flare's Elements. It must be arranged according to one of the TextureLayout options. ",307],["Texture Layout How the individual Flare Element images are laid out inside the Flare Texture (see Texture Layouts below for further details). ",307],["Use Fog If enabled, the Flare will fade away with distance fog. This is used commonly for small Flares. ",307],["Configuring Flare assets",307],["A Flare consists of multiple Elements, arranged along a line. The line is calculated by comparing the position of the GameObject containing the Lens Flare to the center of the screen. The line extends beyond the containing GameObject and the screen center. All Flare Elements are strung out on this line.",307],["For performance reasons, all Elements of one Flare must share the same Texture. This Texture contains a collection of the different images that are available as Elements in a single Flare. The Texture Layout defines how the Elements are laid out in the Flare Texture. If you use many different Flare assets, using a shared single Flare Texture that contains all the Elements will give you best rendering performance.",307],["Lens Flares are blocked by Colliders. A Collider in-between the Flare GameObject and the Camera will hide the Flare, even if the Collider does not have a Mesh Renderer. If the in-between Collider is marked as Trigger it will block the flare if and only if Physics.queriesHitTriggers is true.",307],["To override the shader used for Flares, open the Graphics window and set Lens Flares to the shader that you would like to use as the override.",307],["Texture Layouts",307],["These are the options you have for different Flare Texture Layouts. The numbers in the images correspond to the Image Index property for each Element.",307],["1 Large 4 Small",307],["Designed for large sun-style Flares where you need one of the Elements to have a higher fidelity than the others. This is designed to be used with Textures that are twice as high as they are wide.",307],["1 Large 2 Medium 8 Small",307],["Designed for complex flares that require 1 high-definition, 2 medium and 8 small images. This is used in the standard assets \"50mm Zoom Flare\" where the two medium Elements are the rainbow-colored circles. This is designed to be used with textures that are twice as high as they are wide.",307],["1 Texture",307],["A single image.",307],["2x2 grid",307],["A simple 2x2 grid.",307],["3x3 grid",307],["A simple 3x3 grid.",307],["4x4 grid",307],["A simple 4x4 grid.",307],["Flare",307],["Flare Layer component",308],["In the Built-in Render Pipeline, if you want a Camera to see lens flares, you must attach a Flare Layer component to the Camera's GameObject.",308],["Note:** This workflow is compatible only with the Built-in Render Pipelne. For similar functionality in other render pipelines, see Lens flares and halos.",308],["FlareLayer",308],["Font assets",309],["Importing Font files",309],["To add a font to your project you need to place the font file in your Assets folder. Unity will then automatically import it. Supported Font formats are TrueType Fonts (.ttf files) and OpenType Fonts (.otf files).",309],["To change the Size of the font, highlight it in the Project View and you have a number of options in the Import Settings in the Inspector.",309],["Property: Function: ",309],["Font Size The size of the font, based on the sizes set in any word processor. ",309],["Rendering mode The font rendering mode, which tells Unity how to apply smoothing to the glyphs. ",309],["Character The character set of the font to import into the font texture ",309],["Setting this mode to Dynamic causes Unity to embed the font data itself and render font glyphs at runtime (see below). \n",309],["Import Settings specific to dynamic fonts",309],["Property: Function: ",309],["Include Font Data This setting controls the packaging of the font when used with Dynamic font property. When selected the TTF is included in the output of the build. When not selected it is assumed that the end user will have the font already installed on their machine. Note that fonts are subject to copyright and you should only include fonts that you have licensed or created for yourself. ",309],["Font Names A list of fallback fonts to use when fonts or characters are not available (see below). ",309],["After you import the font, you can expand the font in Project View to see that it has auto-generated some assets. Two assets are created during import: \"font material\" and \"font texture\". Unlike many applications you might be familiar with, fonts in Unity are converted into textures, and the glyphs that you display are rendered using textured quads. Adjusting the font size effectively changes how many pixels are used for each glyph in this generated texture. Text Mesh assets are 3d geometry textured with these auto-generated font textures. You will want to vary the size of the font to make these assets look crisp.",309],["Dynamic fonts",309],["When you set the Characters drop-down in the Import Settings to Dynamic, Unity will not pre-generate a texture with all font characters. Instead, it will use the FreeType font rendering engine to create the texture on the fly. This has the advantage that it can save in download size and texture memory, especially when you are using a font which is commonly included in user systems, so you don't have to include the font data, or when you need to support asian languages or large font sizes (which would make the font textures very large using normal font textures).",309],["When Unity tries to render text with a dynamic font, but it cannot find the font (because Include Font Data was not selected, and the font is not installed on the user machine), or the font does not include the requested glyph (like when trying to render text in east Asian scripts using a latin font, or when using styled bold/italic text), then it will try each of the fonts listed in the Font Names field, to see if it can find a font matching the font name in the project (with font data included) or installed on the user machine which has the requested glyph. If none of the listed fallback fonts are present and have the requested glyph, Unity will fall back to a hard-coded global list of fallback fonts, which contains various international fonts commonly installed on the current runtime platform.",309],["Note that some target platforms (WebGL, some consoles) do not have OS default fonts Unity can access for rendering text. For those platforms, Include Font Data will be ignored, and font data will always be included. All fonts to be used as fallbacks must be included in the project, so if you need to render international text or bold/italic versions of a font, you need to add a font file which has the required characters to the project, and set up that font in the Font Names list of other fonts which should use it as fallbacks. If the fonts are set up correctly, the fallback fonts will be listed in the Font Importer inspector, as References to other fonts in project.",309],["Default font asset",309],["The default font asset is a dynamic font which is set up to use Arial. If Unity can't find the Arial font on your computer (for example, if you don't have it installed), it will fall back to a font bundled with Unity called Liberation Sans.",309],["Liberation Sans looks like Arial, but it does not include bold or italic font styles, and only has a basic Latin character set - so styled text or non-latin characters may fall back to other fonts or fail to render. It does however have a license which allows it to be included in player builds.",309],["Custom fonts",309],["To create a custom font select ‘Create->custom font’ from the project window. This will add a custom font asset to your project library.",309],["The Ascii Start Offset field is a decimal that defines the Ascii index you would like to begin your Character Rects index from. For example, if your Ascii Start Offset is set to 0 then the capital letter A will be at index 65 but if the Ascii Start Offset is set to 65 then the letter A will be at index 0. You can consult the Ascii Table here but you should bear in mind that custom font uses the decimal ascii numbering system.",309],["Tracking** can be set to modify how close each character will be to the next character on the same line and Line spacing can be set to define how close each line will be to the next.",309],["To create a font material you will need to import your font as a texture then apply that texture to a material, then drag your font material onto the Default Material section.",309],["The Character Rects section is where each character of your font is defined.",309],["The Size field is for defining how many characters are in your font.",309],["Within each Element there is an index field for the ascii index of the character. This will be an integer that represents the character in this element.",309],["To work out the UV values you need to figure out how your characters are positioned on a scale of 0 to 1. You divide 1 by the number of characters on a dimension. For example if you have a font and the image dimensions on it are 256x128, 4 characters across, 2 down (so 64x64), then UV width will be 0.25 and UV height will be 0.5.",309],["For UV X and Y, it's just a matter of deciding which character you want and multiplying the width or height value times the column/row of the letter.",309],["Vert** size is based on the pixel size of the characters e.g. your characters are each 128x128, putting 128 and -128 into the Vert Width and Height will give properly proportioned letters. Vert Y must be negative.",309],["Advance** will be the desired horizontal distance from the origin of this character to the origin of the next character in pixels. It is multiplied by Tracking when calculating the actual distance.",309],["Unicode support",309],["Unity has full unicode support. Unicode text allows you to display German, French, Danish or Japanese characters that are usually not supported in an ASCII character set. You can also enter a lot of different special purpose characters like arrow signs or the option key sign, if your font supports it.",309],["To use unicode characters, choose either Unicode or Dynamic from the Characters drop-down in the Import Settings. You can now display unicode characters with this font. If you are using a Text Mesh, you can enter unicode characters into the Component's Text field in the Inspector.",309],["You can also use unicode characters if you want to set the displayed text from scripting. The C# compiler fully supports Unicode based scripts. You have to save your scripts with UTF-16 encoding. Now you can add unicode characters to a string in your script and they will display as expected in UnityGUI or a Text Mesh.",309],["Note that surrogate pairs are not supported.",309],["Changing Font Color",309],["There are different ways to change the color of your displayed font, depending on how the font is used.",309],["Text Mesh",309],["If you are using a Text Mesh, you can change its color by using a custom Material for the font. In the Project View, click on Create > Material, and select and set up the newly created Material in the Inspector. Make sure you assign the texture from the font asset to the material. If you use the built-in GUI/Text Shader shader for the font material, you can choose the color in the Text Color property of the material.",309],["UnityGUI",309],["If you are using UnityGUI scripting to display your font, you have much more control over the font's color under different circumstances. To change the font's color, you create a GUISkin from Assets > Create > GUI Skin, and define the color for the specific control state, e.g. Label > Normal > Text Color. For more details, please read the GUI Skin page.",309],["Hints",309],["To display an imported font select the font and choose GameObject > Create Other > 3D Text.",309],["You can reduce the generated texture size for fonts by using only lower or upper case characters.",309],["Font",309],["Friction Joint 2D",310],["The Friction Joint 2D connects GameObjects controlled by Rigidbody 2D physics. The Friction Joint 2D reduces both the linear and angular velocities between the objects to zero (ie, it slows them down).",310],["Property Function ",310],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",310],["Connected Rigid Body Specify the other object this joint connects to. Leave this as None to have the other end of the joint fixed at a point in space defined by the Connected Anchor property. Select the circle icon to the right to view a list of GameObjects to connect to. ",310],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other object this joint connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",310],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",310],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",310],["Max Force Set the linear (or straight line) movement between joined GameObjects. A high value resists the linear movement between GameObjects. ",310],["Max Torque Set the angular (or rotation) movement between joined GameObjects. A high value resists the rotation movement between GameObjects. ",310],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",310],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",310],["Break Torque Set the torque threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",310],["Using this joint",310],["Use the Friction Joint 2D to slow down movement between two points to a stop. This joint's aim is to maintain a zero relative linear and angular offset between two points. Those two points can be two Rigidbody 2D components or a Rigidbody 2D component and a fixed position in the world. (Connect to a fixed position in the world by setting Connected Rigidbody to None).",310],["Resistance",310],["The joint applies linear force (Force) and angle force (Torque) to both Rigidbody 2D points. It uses a simulated motor that is pre-configured to have a low motor power (and so, low resistance). You can change the resistance to make it weaker or stronger.",310],["Strong Resistance:",310],["A high (1,000,000 is the highest) Max Force creates strong linear resistance. The Rigidbody 2D GameObjects won't move in a line relative to each other very much.",310],["A high (1,000,000 is the highest) Max Torque creates strong angular resistance. The Rigidbody 2D GameObjects won't move at an angle relative to each other very much.",310],["Weak Resistance:",310],["A low Max Force creates weak linear resistance. The Rigidbody 2D GameObjects move easily in a line relative to each other.",310],["A low Max Torque creates weak angular resistance. The Rigidbody 2D GameObjects move easily at an angle relative to each other.",310],["Constraints",310],["Friction Joint 2D has two simultaneous constraints:",310],["Maintain a zero relative linear velocity between two anchor points on two Rigidbody 2Ds",310],["Maintain a zero relative angular velocity between two anchor points on two Rigidbody 2Ds",310],["You can use this joint to construct physical GameObjects that need to behave as if they have friction. They can resist either linear movement or angular movement, or both linear and angular movement. For example:",310],["A platform that does rotate, but resists applied forces, making it difficult but possible for the player to move it.",310],["A ball that resists linear movement. The ball's friction is related to the GameObject's velocity and not to any collisions. It acts like the Linear Drag and Angular Drag which is set in Rigidbody 2D. The difference is that Friction Joint 2D has the option of maximum Force and Torque settings.)",310],["Additional resources",310],["\nRefer to Joints 2D for more information about other 2D Joints.\n",310],["FrictionJoint2D",310],["GameObject",311],["Unity’s GameObject class represents anything which can exist in a Scene.",311],["This page relates to scripting with Unity’s GameObject class. To learn about using GameObjects in the Scene and Hierarchy in the Unity Editor, see the GameObjects section of the user manual. For an exhaustive reference of every member of the GameObject class, see the GameObject script reference.",311],["GameObjects are the building blocks for scenes in Unity, and act as a container for functional components which determine how the GameObject looks, and what the GameObject does.",311],["In scripting, the GameObject class provides a collection of methods which allow you to work with them in your code, including finding, making connections and sending messages between GameObjects, and adding or removing components attached to the GameObject, and setting values relating to their status within the scene.",311],["Scene Status properties",311],["You can use scripts to modify many properties related to a GameObject's status in the scene. These typically correspond to the controls visible near the top of the inspector when you have a GameObject selected in the Editor.",311],["They don’t relate to any particular component, and are visible in the inspector of a GameObject at the top, above the list of components.",311],["All GameObjects share a set of controls at the top of the inspector relating to the GameObject’s status within the scene, and these can be controlled via the GameObject’s scripting API.",311],["If you want a quick list of all the available API for the GameObject class, see the GameObject Script Reference.",311],["Active Status",311],["GameObjects are active by default, but can be deactivated, which turns off all components attached to the GameObject. This generally means it will become invisible, and not receive any of the normal callbacks or events such as Update or FixedUpdate.",311],["The GameObject’s active status is represented by the checkbox to the left of the GameObject’s name. You can control this using GameObject.SetActive.",311],["You can also use GameObject.activeSelf to read the current active state of a GameObject. Use GameObject.activeInHierarchy to read whether the GameObject is actually active in the scene. GameObject.activeInHierarchy is necessary because whether a GameObject is actually active is determined by its own active state and the active state of all of its parents. If any of its parents aren't active, then it's not active despite its own active setting.",311],["Static Status",311],["Some of Unity’s systems, such as Global Illumination, Occlusion, Batching, Navigation, and Reflection Probes, rely on the static status of a GameObject. You can control which of Unity’s systems consider the GameObject to be static by using GameObjectUtility.SetStaticEditorFlags. Read more about Static GameObjects here.",311],["Tags and Layers",311],["Tags** provide a way of marking and identifying types of GameObject in your scene and Layers provide a similar but distinct way of including or excluding groups of GameObjects from certain built-in actions, such as rendering or physics collisions.",311],["For more information about how to use Tags and Layers in the editor, see the main user manual pages for Tags and Layers.",311],["You can modify tag and layer values via script using the GameObject.tag and GameObject.layer properties. You can also check a GameObject’s tag efficiently by using the CompareTag method, which includes validation of whether the tag exists, and doesn't cause any memory allocation.",311],["Adding and Removing components",311],["You can add or remove components at runtime, which can be useful for procedurally creating GameObjects, or modifying how a GameObject behaves. Note, you can also enable or disable script components, and some types of built-in component, via script without destroying them.",311],["The best way to add a component at runtime is to use AddComponent<Type>, specifying the type of component within angle brackets as shown. To remove a component, you must use Object.Destroy method on the component itself.",311],["",311],["Accessing components",311],["The simplest case is where a script on a GameObject needs to access another Component attached to the same GameObject (remember, other scripts attached to a GameObject are also Components themselves). To do this, the first step is to get a reference to the Component instance you want to work with. This is done with the GetComponent method. Typically, you want to assign the Component object to a variable, which is done in using the following code. In this example the script is getting a reference to a Rigidbody component on the same GameObject:",311],["void Start ()",311],["Rigidbody rb = GetComponent();",311],["Once you have a reference to a Component instance, you can set the values of its properties much as you would in the Inspector:",311],["void Start ()",311],["Rigidbody rb = GetComponent();",311],["// Change the mass of the object's Rigidbody.",311],["rb.mass = 10f;",311],["You can also call methods on the Component reference, for example:",311],["void Start ()",311],["Rigidbody rb = GetComponent();",311],["// Add a force to the Rigidbody.",311],["rb.AddForce(Vector3.up * 10f);",311],["Note: you can have multiple custom scripts attached to the same GameObject. If you need to access one script from another, you can use GetComponent as usual and just use the name of the script class (or the filename) to specify the Component type you want.",311],["If you attempt to retrieve a Component type that hasn't actually been added to the GameObject then GetComponent will return null; you will get a null reference error at runtime if you try to change any values on a null object.",311],["",311],["Accessing components on other GameObjects",311],["Although they sometimes operate in isolation, it's common for scripts to keep track of other GameObjects, or more commonly, components on other GameObjects. For example, in a cooking game, a chef might need to know the position of the stove. Unity provides a number of different ways to retrieve other objects, each appropriate to certain situations.",311],["Linking to GameObjects with variables in the inspector",311],["The most straightforward way to find a related GameObject is to add a public GameObject variable to the script:",311],["public class Chef : MonoBehaviour",311],["public GameObject stove;",311],["// Other variables and functions...",311],["This variable will be visible in the Inspector, as a GameObject field.",311],["You can now drag an object from the scene or Hierarchy panel onto this variable to assign it.",311],["The GetComponent function and Component access variables are available for this object as with any other, so you can use code like the following:",311],["public class Chef : MonoBehaviour {",311],["public GameObject stove;",311],["void Start() {",311],["// Start the chef 2 units in front of the stove.",311],["transform.position = stove.transform.position + Vector3.forward * 2f;",311],["Additionally, if you declare a public variable of a Component type in your script, you can drag any GameObject that has that Component attached onto it. This accesses the Component directly rather than the GameObject itself.",311],["public Transform playerTransform;",311],["Linking objects together with variables is most useful when you are dealing with individual objects that have permanent connections. You can use an array variable to link several objects of the same type, but the connections must still be made in the Unity editor rather than at runtime. It's often convenient to locate objects at runtime and Unity provides two basic ways to do this, as described below.",311],["Finding child GameObjects",311],["Sometimes, a game Scene makes use of a number of GameObjects of the same type, such as collectibles, waypoints and obstacles. These might need to be tracked by a particular script that supervises or reacts to them (for example, all waypoints might need to be available to a pathfinding script). Using variables to link these GameObjects is a possibility but it makes the design process tedious if each new waypoint has to be dragged to a variable on a script. Likewise, if a waypoint is deleted, then it's a nuisance to have to remove the variable reference to the missing GameObject. In cases like this, it is often better to manage a set of GameObjects by making them all children of one parent GameObject. The child GameObjects can be retrieved using the parent's Transform component (because all GameObjects implicitly have a Transform):",311],["using UnityEngine;",311],["public class WaypointManager : MonoBehaviour {",311],["public Transform[] waypoints;",311],["void Start()",311],["waypoints = new Transform[transform.childCount];",311],["int i = 0;",311],["foreach (Transform t in transform)",311],["waypoints[i++] = t;",311],["You can also locate a specific child object by name using the Transform.Find method:",311],["transform.Find(\"Frying Pan\");",311],["This can be useful when a GameObject has a child GameObject that can be added and removed during gameplay. A tool or utensil that can be picked up and put down during gameplay is a good example of this.",311],["Sending and Broadcasting messages",311],["While editing your project you can set up references between GameObjects in the Inspector. However, sometimes it's impossible to set up these in advance (for example, finding the nearest item to a character in your game, or making references to GameObjects that were instantiated after the Scene loaded). In these cases, you can find references and send messages between GameObjects at runtime.",311],["BroadcastMessage allows you to send out a call to a named method, without being specific about where that method should be implemented. You can use it to call a named method on every MonoBehaviour on a particular GameObject or any of its children. You can optionally choose to enforce that there must be at least one receiver (or an error is generated).",311],["SendMessage is a little more specific, and only sends the call to a named method on the GameObject itself, and not its children.",311],["SendMessageUpwards is similar, but sends out the call to a named method on the GameObject and all its parents.",311],["Finding GameObjects by Name or Tag",311],["It's always possible to locate GameObjects anywhere in the Scene hierarchy as long as you have some information to identify them. Individual objects can be retrieved by name using the GameObject.Find function:",311],["GameObject player;",311],["void Start()",311],["player = GameObject.Find(\"MainHeroCharacter\");",311],["An object or a collection of objects can also be located by their tag using the GameObject.FindWithTag and GameObject.FindGameObjectsWithTag methods.",311],["For example, in a cooking game with one chef character, and multiple stoves in the kitchen (each tagged \"Stove\"):",311],["GameObject chef;",311],["GameObject[] stoves;",311],["void Start()",311],["chef = GameObject.FindWithTag(\"Chef\");",311],["stoves = GameObject.FindGameObjectsWithTag(\"Stove\");",311],["Creating and Destroying GameObjects",311],["You can create and destroy GameObjects while your project is running. In Unity, a GameObject can be created using the Instantiate method which makes a new copy of an existing object.",311],["For a full description and examples of how to instantiate GameObjects, see Instantiating Prefabs at Runtime.",311],["The Destroy method destroys an object after the frame update has finished or optionally after a short time delay:",311],["void OnCollisionEnter(Collision otherObj) {",311],["if (otherObj.gameObject.tag == \"Garbage can\") {",311],["Destroy(gameObject, 0.5f);",311],["Note that the Destroy function can destroy individual components and not affect the GameObject itself. A common mistake is to write this and assume it destroys the GameObject the script is attached to:",311],["Destroy(this);",311],["this represents the script, and not the GameObject. It will actually just destroy the script component that calls it and leave the GameObject intact but with the script component removed.",311],["Primitives",311],["The GameObject class offers script-based alternatives to the options available in Unity's GameObject menu that allows you to create primitive objects.",311],["To create instances of Unity's built-in primitives, use GameObject.CreatePrimitive, which instantiates a primitive of the type that you specify. The available primitive types are Sphere, Capsule, Cylinder, Cube, Plane and Quad.",311],["GameObject",311],["Graphics",312],["Use the Graphics settings (main menu: Edit > Project Settings, then select the Graphics category) to apply global settings for Graphics.",312],["This section provides documentation on the following groups of properties:",312],["",312],["Scriptable Render Pipeline Settings",312],["Allows you to set the default render pipeline that Unity uses to render your project. To set a render pipeline based on the Scriptable Render Pipeline, assign the desired Render Pipeline Asset here.",312],["For more information, see How to get, set, and configure the active render pipeline.",312],["",312],["Camera Settings",312],["These properties control various rendering settings.",312],["Property Function ",312],["Transparency Sort Mode Define the order for rendering objects by their distance along a specific axis. Renderers in Unity are sorted by several criteria, such as their layer number or their distance from the camera. This is generally only useful in 2D development: for example, sorting Sprites by height or along the Y-axis. ",312],["Default Sort objects based on the Camera mode. ",312],["Perspective Sort objects based on perspective view. ",312],["Orthographic Sort objects based on orthographic view. ",312],["Custom Axis Sort objects based on the sort mode defined with the Transparency Sort Axis. ",312],["Transparency Sort Axis Define a custom Transparency Sort Mode. ",312],["",312],["Tier Settings",312],["In the Built-in Render Pipeline, you can use Tier settings to change rendering and shader compilation settings for different types of hardware. For more information, see Graphics tiers.",312],["Property Function ",312],["Standard Shader Quality Set the quality of the Standard Shader to High, Medium, or Low. ",312],["Reflection Probes Box Projection Enable projection for reflection UV mappings on Reflection Probes. ",312],["Reflection Probes Blending Enable blending on Reflection Probes. ",312],["Detail Normal Map Enable Detail Normal Map sampling, if assigned. ",312],["Enable Semitransparent Shadows Enable Semitransparent Shadows. This adds or removes the UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS shader compiler define. ",312],["Enable Light Probe Proxy Volume Enable rendering a 3D grid of interpolated Light Probes. ",312],["Cascaded Shadows Enable using cascaded shadow maps. This adds or removes the UNITY_NO_SCREENSPACE_SHADOWS shader compiler define. ",312],["Prefer 32 bit shadow maps Enable 32-bit float shadow map when you are targeting platforms that use DX11 or DX12.Most platforms have a fixed shadow map format that you can't adjust. These vary in format, and can be 16-bit, 24-bit, or 32-bit, and can also be either float- or integer-based. 32-bit shadow maps give higher quality shadows than 16-bit, but use increased memory and bandwidth on the GPU.Note: To use 32-bit shadow maps, make sure the depth buffer is also set to 32-bit. ",312],["Use HDR Enable High Dynamic Range rendering for this tier. ",312],["HDR Mode Select the format to use for the HDR buffer when HDR is enabled for the current Graphics Tier. By default, this is set to FP16. ",312],["FP16 Color render texture format, 16-bit floating point per channel. ",312],["R11G11B10 Color render texture format. R and G channels are 11-bit floating point, B channel is 10-bit floating point. ",312],["Rendering Path Choose how Unity should render graphics. Different rendering paths affect the performance of your game, and how lighting and shading are calculated. Some paths are more suited to different platforms and hardware than others.Deferred rendering is not supported when using Orthographic projection. If the camera’s projection mode is set to Orthographic, these values are overridden, and the camera always uses Forward rendering. For more information, see Rendering Paths. ",312],["Forward The traditional rendering path. This supports all the typical Unity graphics features (normal maps, per-pixel lights, shadows etc.). However under default settings, only a small number of the brightest lights are rendered in per-pixel lighting mode. The rest of the lights are calculated at object vertices or per-object. ",312],["Deferred Deferred shading has the most lighting and shadow fidelity, and is best suited if you have many real-time lights. It requires a certain level of hardware support. ",312],["Legacy Vertex Lit Legacy Vertex Lit is the rendering path with the lowest lighting fidelity and no support for real-time shadows. It is a subset of Forward rendering path. ",312],["Realtime Global Illumination CPU Usage The CPU budget you allow Enlighten Realtime Global Illumination to use for lighting calculations at runtime. Increasing this makes the system react faster to changes in lighting at a cost of using more CPU time.Note: Some platforms allow all CPUs to be occupied by worker threads whereas some enforce maximums. For example, some gaming consoles allow a maximum of 4 CPU cores. For Android devices, if it is a bigLittle architecture, only the little CPUs are used; otherwise the maximum is one less than the total number of CPUs.If you use the URP or HDRP render pipelines, you can configure this property in the quality settings. ",312],["Low 25% of the allowed CPU threads are used as worker threads. ",312],["Medium 50% of the allowed CPU threads are used as worker threads. ",312],["High 75% of the allowed CPU threads are used as worker threads. ",312],["Unlimited 100% of the allowed CPU threads are used as worker threads. ",312],["",312],["Built-in shader settings",312],["Use these settings to specify which shader to use for each of the listed features in the Built-in Render Pipeline.",312],["Rendering path Shader to use ",312],["Deferred Use with Deferred shading. ",312],["Deferred Reflection Use with Reflection Probes in deferred shading. ",312],["Screen Space shadows Use with cascaded shadow maps for directional lights on PC/console platforms. ",312],["Motion vectors Use for object-based motion vector calculations. ",312],["Lens Flare Use with Lens Flares. ",312],["Light Halo Use with Light Halos. ",312],["For each of these features, you can choose which type of Shader to use:",312],["No Support disables this calculation. Use this setting if you are not using deferred shading. This will save some space in the built game data files.",312],["Built-in Shader uses Unity's built-in Shaders to do the calculation. This is the default.",312],["Custom Shader uses your own compatible Shader to do the calculation. This enables you to do deep customization of deferred rendering.",312],["When you choose Custom shader, a Shader reference property appears below the feature property where you can set a reference to the Shader you want to use.",312],["",312],["Always Included Shaders",312],["This is a list of shaders for which Unity includes all possible variants in every build. This can be useful if you want to use shaders or variants at runtime that would not otherwise be included in the build; for example, if you use AssetBundles or Addressables that rely on those shaders or variants, or if you use shader keywords to change variants at runtime.",312],["Warning:** This feature is not recommended for shaders that have a large number of variants, such as the Standard Shader; it can lead to significant runtime and build time performance problems. You should instead create shader variant collections that contain only the variants you need, and include those in your build.",312],["Note:** This setting overrides shader keyword declaration settings. For each shader in the list, Unity includes all sets of all keywords, even if you use the \"shader feature\" declaration type.",312],["To add a shader to the list, increase the value in the Size property. To remove the last shader in the list, decrease the Size property. To remove a shader which is not the last one in the list, you can set the value to None.",312],["",312],["",312],["",312],["",312],["Shader stripping",312],["These properties allow you to configure shader variant stripping in your build.",312],["By default, Unity examines the scenes in the build and automatically strips shader variants that are not used in those scenes. However, this can cause problems if you want to use shaders or variants at runtime that would not otherwise be included in the build; for example, if you use AssetBundles or Addressables that rely on those shaders or variants, or if you use shader keywords to change variants at runtime.",312],["Property Function ",312],["Lightmap Modes Determine the shader variant stripping behavior for lightmap-related shaders. ",312],["Automatic Unity examines the scenes in the build and automatically strips variants that are not used in those scenes. This is the default setting. ",312],["Custom Choose to manually include or exclude variants for the following lightmap modes:* Baked Non-Directional* Baked Directional* Realtime Non-Directional* Realtime Directional* Baked Shadowmask* Baked Subtractive ",312],["Fog Modes Determine the shader variant stripping behavior for shaders that relate to Unity's built-in fog effect. ",312],["Automatic Unity examines the scenes in the build and automatically strips variants that are not used in those scenes. This is the default setting. ",312],["Custom Choose to manually include or exclude variants for the following fog modes:* Linear* Exponential* Exponential Squared ",312],["Instancing Variants Determine the shader variant stripping behavior for shaders that relate to GPU instancing. ",312],["Strip Unused Unity only includes variants for GPU instancing for a given shader if at least one material that uses that shader has Enable instancing enabled. This is the default setting. ",312],["Strip All Strip all variants for GPU instancing, even if they are being used. ",312],["Keep All Include all variants for GPU instancing, even if they are being used. ",312],["",312],["Shader loading",312],["These properties allow you to configure how Unity \"prewarms\" shader variant collections in your application.",312],["For information on prewarming, including important information about graphics API support, see Shader loading: Prewarming shader variants.",312],["Property Function ",312],["Renderer Light Probe Selection Choose the type of probe Unity uses when a Renderer receives global illumination from Light Probes but is not within the volume of influence (the tetrahedron) of any group of Light Probes. The default, Find closest Light Probe, means Unity searches for the nearest Light Probe, which consumes significant system resources. Renderer Light Probe Selection provides an alternative. Select Use Ambient Probe to make Unity fall back to the Ambient Probe in these situations, which conserves system resources. Options: Find closest Light Probe Use Ambient Probe ",312],["Preloaded shaders The shader variant collections to prewarm on application start. ",312],["Preload shaders after showing first scene When Unity prewarms the shader variants specified in Preloaded shaders.If enabled, Unity loads and prewarms them after the first scene has fully loaded. Otherwise, Unity loads and prewarms them before showing the first scene. ",312],["Preloaded shaders How Unity prewarms the shader variants specified in Preloaded shaders, if Preload shaders after showing first scene is enabled.If the value is 0, Unity preloads all shader variants on the next frame after it shows the first scene.Otherwise, Unity preloads new shader variants over multiple frames after it shows the first scene. In a given frame, it prewarms shader variants until it reaches that time limit set here. After that, it does not begin prewarming new shader variants until the next frame. ",312],["Tracked shader variants",312],["The Unity Editor can track which shader variants your application uses when it runs. You can use this information to build shader variant collections.",312],["Control Function ",312],["Create asset Creates a new shader variant collection asset using the currently tracked shader variants. ",312],["Clear Clear tracked shader variants. ",312],["",312],["Culling settings",312],["Property Function ",312],["Camera-Relative Culling Determines whether Unity uses the camera position as the reference point for culling. ",312],["Lights Use the camera position as the reference point to cull lights instead of the world space origin. Enable Lights to reduce flickering if lights are far away from the camera. Refer to Understanding the View Frustum for more information. ",312],["Shadows Use the camera position as the reference point to cull shadows instead of the world space origin. Enable Shadows to reduce flickering if shadows are far away from the camera. Refer to Understanding the View Frustum for more information. ",312],["GraphicsSettings",312],["Grid component reference",313],["The Grid component is a guide which helps to align GameObjects, such as Tiles, based on a selected layout. The component transforms Grid cell positions to the corresponding local coordinates of the GameObject. The Transform component then converts these local coordinates to world space or global coordinates.",313],["Property Function ",313],["-------------------- ------------------------------------------------------------ ",313],["Cell Size The size of a cell on this Grid. ",313],["Cell Gap Enter the size (in Unity units) of gaps between cells on this Grid. If a negative number with an absolute value higher than the Cell Size is entered, then Unity will automatically change the absolute value to match the Cell Size instead.For example, if Cell Size is (1, 1, 0) and Cell Gap is set to (-2, -2, 0), the Editor will automatically change the Cell Gap values to (-1, -1, 0) instead.",313],["Cell Layout Select an option from the drop-down menu to define the shape and arrangement of cells on this Grid. ",313],["Rectangle Cells are rectangular. ",313],["Hexagon Cells are hexagonal. ",313],["Isometric Cells are rhombus-shaped for an isometric layout. ",313],["Isometric Z as Y Similar to the Isometric Grid layout, but Unity converts the Z position of cells to their local Y coordinate. ",313],["Cell Swizzle Select the order that Unity reorders the XYZ cell coordinates to for transform conversions. See the Wikipedia article on Swizzling for more details. ",313],["    XYZ The Grid component uses the default XYZ cell coordinates. ",313],["    XZY The Grid component reorders the XYZ coordinates to XZY. ",313],["    YXZ The Grid component reorders the XYZ coordinates to YXZ. ",313],["    YZX The Grid component reorders the XYZ coordinates to YZX. ",313],["    ZXY The Grid component reorders the XYZ coordinates to ZXY. ",313],["    ZYX The Grid component reorders the XYZ coordinates to ZYX. ",313],["Page content and screenshots updated for 2020.1 NewIn20201",313],["Tilemaps added in 2017.2 NewIn20172",313],["Grid",313],["GUI Skin (IMGUI System)",314],["GUISkins are a collection of GUIStyles that can be applied to your GUI. Each Control type has its own Style definition. Skins are intended to allow you to apply style to an entire UI, instead of a single Control by itself.",314],["To create a GUISkin, select Assets->Create->GUI Skin from the menubar.",314],["Please Note*: This page refers to part of the IMGUI system, which is a *scripting-only UI system. Unity has a full GameObject-based UI system which you may prefer to use. It allows you to design and edit user interface elements as visible objects in the scene view. See the UI System Manual for more information.",314],["Properties",314],["All of the properties within a GUI Skin are an individual GUIStyle. Please read the GUIStyle page for more information about how to use Styles.",314],["Property: Function: ",314],["Font The global Font to use for every Control in the GUI ",314],["Box The Style to use for all Boxes ",314],["Button The Style to use for all Buttons ",314],["Toggle The Style to use for all Toggles ",314],["Label The Style to use for all Labels ",314],["Text Field The Style to use for all Text Fields ",314],["Text Area The Style to use for all Text Areas ",314],["Window The Style to use for all Windows ",314],["Horizontal Slider The Style to use for all Horizontal Slider bars ",314],["Horizontal Slider Thumb The Style to use for all Horizontal Slider Thumb Buttons ",314],["Vertical Slider The Style to use for all Vertical Slider bars ",314],["Vertical Slider Thumb The Style to use for all Vertical Slider Thumb Buttons ",314],["Horizontal Scrollbar The Style to use for all Horizontal Scrollbars ",314],["Horizontal Scrollbar Thumb The Style to use for all Horizontal Scrollbar Thumb Buttons ",314],["Horizontal Scrollbar Left Button The Style to use for all Horizontal Scrollbar scroll Left Buttons ",314],["Horizontal Scrollbar Right Button The Style to use for all Horizontal Scrollbar scroll Right Buttons ",314],["Vertical Scrollbar The Style to use for all Vertical Scrollbars ",314],["Vertical Scrollbar Thumb The Style to use for all Vertical Scrollbar Thumb Buttons ",314],["Vertical Scrollbar Up Button The Style to use for all Vertical Scrollbar scroll Up Buttons ",314],["Vertical Scrollbar Down Button The Style to use for all Vertical Scrollbar scroll Down Buttons ",314],["Custom 1-20 Additional custom Styles that can be applied to any Control ",314],["Custom Styles An array of additional custom Styles that can be applied to any Control ",314],["Settings Additional Settings for the entire GUI ",314],["        Double Click Selects Word If enabled, double-clicking a word will select it ",314],["        Triple Click Selects Line If enabled, triple-clicking a word will select the entire line ",314],["        Cursor Color Color of the keyboard cursor ",314],["        Cursor Flash Speed The speed at which the text cursor will flash when editing any Text Control ",314],["        Selection Color Color of the selected area of Text ",314],["Details",314],["When you are creating an entire GUI for your game, you will likely need to do a lot of customization for every different Control type. In many different game genres, like real-time strategy or role-playing, there is a need for practically every single Control type.",314],["Because each individual Control uses a particular Style, it does not make sense to create a dozen-plus individual Styles and assign them all manually. GUI Skins take care of this problem for you. By creating a GUI Skin, you have a pre-defined collection of Styles for every individual Control. You then apply the Skin with a single line of code, which eliminates the need to manually specify the Style of each individual Control.",314],["Creating GUISkins",314],["GUISkins are asset files. To create a GUI Skin, select Assets->Create->GUI Skin from the menubar. This will put a new GUISkin in your Project View.",314],["Editing GUISkins",314],["After you have created a GUISkin, you can edit all of the Styles it contains in the Inspector. For example, the Text Field Style will be applied to all Text Field Controls.",314],["No matter how many Text Fields you create in your script, they will all use this Style. Of course, you have control over changing the styles of one Text Field over the other if you wish. We'll discuss how that is done next.",314],["Applying GUISkins",314],["To apply a GUISkin to your GUI, you must use a simple script to read and apply the Skin to your Controls.",314],["// Create a public variable where we can assign the GUISkin",314],["var customSkin : GUISkin;",314],["// Apply the Skin in our OnGUI() function",314],["function OnGUI () {",314],["GUI.skin = customSkin;",314],["// Now create any Controls you like, and they will be displayed with the custom Skin",314],["GUILayout.Button (\"I am a re-Skinned Button\");",314],["// You can change or remove the skin for some Controls but not others",314],["GUI.skin = null;",314],["// Any Controls created here will use the default Skin and not the custom Skin",314],["GUILayout.Button (\"This Button uses the default UnityGUI Skin\");",314],["In some cases you want to have two of the same Control with different Styles. For this, it does not make sense to create a new Skin and re-assign it. Instead, you use one of the Custom Styles in the skin. Provide a Name for the custom Style, and you can use that name as the last argument of the individual Control.",314],["// One of the custom Styles in this Skin has the name \"MyCustomControl\"",314],["var customSkin : GUISkin;",314],["function OnGUI () {",314],["GUI.skin = customSkin;",314],["// We provide the name of the Style we want to use as the last argument of the Control function",314],["GUILayout.Button (\"I am a custom styled Button\", \"MyCustomControl\");",314],["// We can also ignore the Custom Style, and use the Skin's default Button Style",314],["GUILayout.Button (\"I am the Skin's Button Style\");",314],["For more information about working with GUIStyles, please read the GUIStyle page. For more information about using UnityGUI, please read the GUI Scripting Guide.",314],["GUISkin",314],["GUI Style (IMGUI System)",315],["GUI Styles are a collection of custom attributes for use with IMGUI. A single GUI Style defines the appearance of a single IMGUI Control.",315],["If you want to add style to more than one control, use a GUI Skin instead of a GUI Style. For more information about IMGUI, please read the GUI Scripting Guide.",315],["Please Note*: This page refers to part of the IMGUI system, which is a *scripting-only UI system. Unity has a full GameObject-based UI system which you may prefer to use. It allows you to design and edit user interface elements as visible objects in the scene view. See the UI System Manual for more information.",315],["Properties",315],["Property: Function: ",315],["Name The text string that can be used to refer to this specific Style ",315],["Normal Background image & Text Color of the Control in default state ",315],["Hover Background image & Text Color when the mouse is positioned over the Control ",315],["Active Background image & Text Color when the mouse is actively clicking the Control ",315],["Focused Background image & Text Color when the Control has keyboard focus ",315],["On Normal Background image & Text Color of the Control in enabled state ",315],["On Hover Background image & Text Color when the mouse is positioned over the enabled Control ",315],["On Active Properties when the mouse is actively clicking the enabled Control ",315],["On Focused Background image & Text Color when the enabled Control has keyboard focus ",315],["Border Number of pixels on each side of the Background image that are not affected by the scale of the Control' shape ",315],["Padding Space in pixels from each edge of the Control to the start of its contents. ",315],["Margin The margins between elements rendered in this style and any other GUI Controls. ",315],["Overflow Extra space to be added to the background image. ",315],["Font The Font used for all text in this style ",315],["Image Position The way the background image and text are combined. ",315],["Alignment Standard text alignment options. ",315],["Word Wrap If enabled, text that reaches the boundaries of the Control will wrap around to the next line ",315],["Text Clipping If Word Wrap is enabled, choose how to handle text that exceeds the boundaries of the Control ",315],["        Overflow Any text that exceeds the Control boundaries will continue beyond the boundaries ",315],["        Clip Any text that exceeds the Control boundaries will be hidden ",315],["Content Offset Number of pixels along X and Y axes that the Content will be displaced in addition to all other properties ",315],["        X Left/Right Offset ",315],["        Y Up/Down Offset ",315],["Fixed Width Number of pixels for the width of the Control, which will override any provided Rect() value ",315],["Fixed Height Number of pixels for the height of the Control, which will override any provided Rect() value ",315],["Stretch Width If enabled, Controls using this style can be stretched horizontally for a better layout. ",315],["Stretch Height If enabled, Controls using this style can be stretched vertically for a better layout. ",315],["Details",315],["GUIStyles are declared from scripts and modified on a per-instance basis. If you want to use a single or few Controls with a custom Style, you can declare this custom Style in the script and provide the Style as an argument of the Control function. This will make these Controls appear with the Style that you define.",315],["First, you must declare a GUI Style from within a script.",315],["/* Declare a GUI Style */",315],["var customGuiStyle : GUIStyle;",315],["...",315],["When you attach this script to a GameObject, you will see the custom Style available to modify in the Inspector.",315],["Now, when you want to tell a particular Control to use this Style, you provide the name of the Style as the last argument in the Control function.",315],["...",315],["function OnGUI () {",315],["// Provide the name of the Style as the final argument to use it",315],["GUILayout.Button (\"I am a custom-styled Button\", customGuiStyle);",315],["// If you do not want to apply the Style, do not provide the name",315],["GUILayout.Button (\"I am a normal IMGUI Button without custom style\");",315],["For more information about using IMGUI, please read the GUI Scripting Guide.",315],["GUIStyle",315],["Halo component",316],["Halos are glowing areas around light sources. Use them to give the impression of small dust particles in the air, and add atmosphere to your scene.",316],["Note:** This workflow is compatible only with the Built-in Render Pipelne. For similar functionality in other render pipelines, see Lens flares and halos.",316],["Using Halo components",316],["Add a Halo component to a GameObject with a Light component. Then set its size and color properties to give the desired glowing effect.",316],["Note:** A Light can also display a halo without a separate Halo component by enabling its Draw Halo property, but you cannot configure its size and color.",316],["To see Halos in the scene view, check Fx button in the Scene View Toolbar.",316],["To override the shader used for Halos, open the Graphics window and set Light Halo to the shader that you would like to use as the override.",316],["Halo component refence",316],["Property: Function: ",316],["Color Color of the Halo. ",316],["Size Size of the Halo. ",316],["Halo",316],["Hinge Joint component reference",317],["The Hinge Joint groups together two Rigidbodies, constraining them to move like they are connected by a hinge. It is perfect for doors, but can also be used to model chains, pendulums, etc.",317],["Properties",317],["Property: Function: ",317],["Connected Body Optional reference to the Rigidbody that the joint is dependent upon. If not set, the joint connects to the world. ",317],["Anchor The position of the axis around which the body swings. The position is defined in local space. ",317],["Axis The direction of the axis around which the body swings. The direction is defined in local space. ",317],["Auto Configure Connected Anchor If this is enabled, then the Connected Anchor position will be calculated automatically to match the global position of the anchor property. This is the default behavior. If this is disabled, you can configure the position of the connected anchor manually. ",317],["Connected Anchor Manual configuration of the connected anchor position. ",317],["Use Spring Spring makes the Rigidbody reach for a specific angle compared to its connected body. ",317],["Spring Properties of the Spring that are used if Use Spring is enabled. ",317],["        Spring The force the object asserts to move into the position. ",317],["        Damper The higher this value, the more the object will slow down. ",317],["        Target Position Target angle of the spring. The spring pulls towards this angle measured in degrees. ",317],["Use Motor The motor makes the object spin around. ",317],["Motor Properties of the Motor that are used if Use Motor is enabled. ",317],["        Target Velocity The speed the object tries to attain. ",317],["        Force The force applied in order to attain the speed. ",317],["        Free Spin If enabled, the motor is never used to brake the spinning, only accelerate it. ",317],["Use Limits If enabled, the angle of the hinge will be restricted within the Min & Max values. ",317],["Limits Properties of the Limits that are used if Use Limits is enabled. ",317],["        Min The lowest angle the rotation can go. ",317],["        Max The highest angle the rotation can go. ",317],["        Bounciness How much the object bounces when it hits the minimum or maximum stop limit. ",317],["        Contact Distance Within the contact distance from the limit contacts will persist in order to avoid jitter. ",317],["Break Force The force that needs to be applied for this joint to break. ",317],["Break Torque The torque that needs to be applied for this joint to break. ",317],["Enable Collision When checked, this enables collisions between bodies connected with a joint. ",317],["Enable Preprocessing Disabling preprocessing helps to stabilize impossible-to-fulfil configurations. ",317],["Details",317],["A single Hinge Joint should be applied to a GameObject. The hinge will rotate at the point specified by the Anchor property, moving around the specified Axis property. You do not need to assign a GameObject to the joint's Connected Body property. You should only assign a GameObject to the Connected Body property if you want the joint's Transform to be dependent on the attached object's Transform.",317],["Think about how the hinge of a door works. The Axis in this case is up, positive along the Y axis. The Anchor is placed somewhere at the intersection between door and wall. You would not need to assign the wall to the Connected Body, because the joint will be connected to the world by default.",317],["Now think about a doggy door hinge. The doggy door's Axis would be sideways, positive along the relative X axis. The main door should be assigned as the Connected Body, so the doggy door's hinge is dependent on the main door's Rigidbody.",317],["Chains",317],["Multiple Hinge Joints can also be strung together to create a chain. Add a joint to each link in the chain, and attach the next link as the Connected Body.",317],["Hints",317],["You do not need to assign a Connected Body to your joint for it to work.",317],["Use Break Force in order to make dynamic damage systems. You can use this to allow the player to damage the environment (for example, break a door off its hinges by blasting it with a rocket launcher or running into it with a car).",317],["The Spring, Motor, and Limits properties allow you to fine-tune your joint's behaviors.",317],["Use of Spring, Motor are intended to be mutually exclusive. Using both at the same time leads to unpredictable results.",317],["HingeJoint",317],["Hinge Joint 2D",318],["This joint allows a GameObject controlled by Rigidbody 2D physics to be attached to a point in space around which it can rotate. The rotation can be left to happen passively (for example, in response to a collision) or can be actively powered by a motor torque provided by the Joint 2D itself. You can set limits to prevent the hinge from making a full rotation, or make more than a single rotation.",318],["Properties",318],["Property Function ",318],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",318],["Connected Rigidbody Specify the other GameObject this joint connects to. If you leave this as None, the other end of the joint is fixed to a point in space defined by the Connected Anchor setting. Select the circle icon to the right to view a list of GameObjects to connect to. ",318],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other GameObject this Hinge Joint 2D connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",318],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",318],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",318],["Use Motor Enable this to apply motor force to the joint. ",318],["Motor Select this to expand this property's settings. ",318],[" **Motor Speed** Set the target motor speed (in degrees per second). \n",318],[" **Maximum Motor Force** Set the maximum torque (or rotation) the motor can apply when attempting to reach the target speed. \n",318],[" **Use Limits** Enable this to limit the rotation angle. \n",318],["Angle Limits Select this to expand the Angle limits settings. Set the limits used when User Limits is enabled. ",318],[" **Lower Angle** Set the lower end of the rotation arc allowed by the limit. \n",318],[" **Upper Angle** Set the upper end of the rotation arc allowed by the limit. \n",318],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",318],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",318],["Break Torque Set the torque threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",318],["Using this joint",318],["The Hinge Joint 2D's is used to have a joint that allows a GameObject to rotate around a particular point, for example a door hinge, wheels, or pendulums.",318],["You can use this joint to make two points overlap. Those two points can be two Rigidbody 2D components, or a Rigidbody 2D component and a fixed position in the world space. Connect the Hinge Joint 2D to a fixed position in the world by setting Connected Rigidbody to None. The joint applies a linear force to both connected Rigidbody 2D GameObjects.",318],["The Hinge Joint 2D has a simulated rotational motor which you can turn on or off. Set the Maximum Motor Speed and Maximum Motor Force to control the angular speed (Torque) and make the two Rigidbody 2D GameObjects rotate in an arc relative to each other. Set the limits of the arc using Lower Angle and Upper Angle.",318],["Constraints",318],["Hinge Joint 2D has three simultaneous constraints. All are optional:",318],["Maintain a relative linear distance between two anchor points on two Rigidbody 2D GameObjects.",318],["Maintain an angular speed between two anchor points on two Rigidbody 2D GameObjects (limited with a maximum torque in Maximum Motor Force).",318],["Maintain an angle within a specified arc.",318],["You can use this joint to construct physical GameObjects that need to behave as if they are connected with a rotational pivot. For example:",318],["A see-saw pivot where the horizontal section is connected to the base. Use the joint's Angle Limits to simulate the highest and lowest point of the see-saw's movement.",318],["A pair of scissors connected together with a hinge pivot. Use the joint's Angle Limits to simulate the closing and maximum opening of the scissors.",318],["A simple wheel connected to the body of a car with the pivot connecting the wheel at its center to the car. In this example you can use the Hinge Joint 2D's motor to rotate the wheel.",318],["Additional resources",318],["\nRefer to Joints 2D for more information about other 2D Joints.\n",318],["HingeJoint2D",318],["Human Template window",319],["A Human Template file (*.ht) stores a Humanoid bone mapping for a Model that you saved on the Avatar window in a YAML format:",319],["The Human Template window displays the contents of Human Template files as standard Unity text boxes.",319],["Each grouping represents an entry in the YAML file, with the name of the bone mapping target labelled First and the name of the bone in the Model file labelled Second.",319],["You can edit most of the values in this file using this property, but Unity instantly updates every change you make to the file. However, you can Undo any changes while this window is active.",319],["HumanTemplate",319],["Input Manager",320],["The Input Manager window allows you to define input axes and their associated actions for your Project. To access it, from Unity's main menu, go to Edit > Project Settings, then select Input Manager from the navigation on the right.",320],["The Input Manager uses the following types of controls:",320],["Key** refers to any key on a physical keyboard, such as W, Shift, or the space bar.",320],["Button** refers to any button on a physical controller (for example, gamepads), such as the X button on a remote control.",320],["A virtual axis (plural: axes) is mapped to a control, such as a button or a key. When the user activates the control, the axis receives a value in the range of [-1..1]. You can use this value in your scripts.",320],["Physical keys",320],["The Physical keys option allows you to map key codes to the physical keyboard layout, rather than to the language-specific layout that may vary between users in different regions.",320],["For example, on some keyboards the first row of letters reads \"QWERTY\", and on others it reads \"AZERTY\". This means if you scripted specific controls to use the well known \"WASD\" keys for movement, they would not be in the correct physical arrangement (like the arrow-key arrangement) on an AZERTY-layout keyboard.",320],["With Physical Keys enabled, Unity uses a generic ANSI/ISO \"Qwerty\" layout to represent the physical location of the keys regardless of the user's actual layout. This means if you specify the \"Q\" key, it will always be the left-most letter on the first row of letter keys, even if the user's keyboard has a different letter in that position.",320],["Note, you should not read key input for in-game text input, because this will not allow users to enter non-Latin characters. Instead, use Input.compositionString.",320],["Virtual axes",320],["Every Project you create has a number of input axes created by default. These axes enable you to use keyboard, mouse, and joystick input in your Project straight away.",320],["To see more about these axes, open the Input Manager window, and click the arrow next to any axis name to expand its properties.",320],["Each input axis has the following properties:",320],["Property Function ",320],["Name Axis name. You can use this to access the axis from scripts. ",320],["Descriptive Name, Descriptive Negative Name These values are deprecated and do not work. Previously, they displayed for the user on the Rebind Controls screen at startup, but this screen has also been deprecated. ",320],["Negative Button, Positive Button The controls to push the axis in the negative and positive direction respectively. These can be keys on a keyboard, or buttons on a joystick or mouse. ",320],["Alt Negative Button, Alt Positive Button Alternative controls to push the axis in the negative and positive direction respectively. ",320],["Gravity Speed in units per second that the axis falls toward neutral when no input is present. ",320],["Dead How far the user needs to move an analog stick before your application registers the movement. At runtime, input from all analog devices that falls within this range will be considered null. ",320],["Sensitivity Speed in units per second that the axis will move toward the target value. This is for digital devices only. ",320],["Snap If enabled, the axis value will reset to zero when pressing a button that corresponds to the opposite direction. ",320],["Type The type of input that controls the axis. Select from these values:- Key or Mouse button- Mouse Movement- Joystick Axis ",320],["Axis The axis of a connected device that controls this axis. ",320],["JoyNum The connected Joystick that controls this axis. You can select a specific joystick, or query input from all joysticks. ",320],["Axis values can be:",320],["Between -1 and 1 for joystick and keyboard input. The neutral position for these axes is 0. Some types of controls, such as buttons on a keyboard, aren't sensitive to input intensity, so they can't produce values other than -1, 0, or 1.",320],["Mouse delta (how much the mouse has moved during the last frame) for mouse input. The values for mouse input axes can be larger than 1 or smaller than -1 when the user moves the mouse quickly.",320],["Adding, removing, and copying virtual axes",320],["To add a virtual axis, increase the number in the Size field. This creates a new axis at the bottom of the list. The new axis copies the properties of the previous axis in the list.",320],["To remove a virtual axis, you can either:",320],["Decrease the number in the Size field. This removes the last axis in the list.",320],["Right-click any axis, and select Delete Array Element.",320],["Note:** You can't undo this action.",320],["To copy a virtual axis, right-click it and select Duplicate Array Element.",320],["Mapping virtual axes to controls",320],["To map a key or button to an axis, enter its name in the Positive Button or Negative Button property in the Input Manager.",320],["Key names follow these naming conventions:",320],["Key family Naming convention ",320],["Letter keys a, b, c... ",320],["Number keys 1, 2, 3... ",320],["Arrow keys up, down, left, right ",320],["Numpad keys [1], [2], [3], [+], [equals]... ",320],["Modifier keys right shift, left shift, right ctrl, left ctrl, right alt, left alt, right cmd, left cmd ",320],["Special keys backspace, tab, return, escape, space, delete, enter, insert, home, end, page up, page down ",320],["Function keys f1, f2, f3... ",320],["Mouse buttons are named mouse 0, mouse 1, mouse 2, and so on.",320],["Joystick buttons follow these naming conventions:",320],["Button origin Naming convention ",320],["A specific button on any joystick joystick button 0, joystick button 1, joystick button 2... ",320],["A specific button on a specific joystick joystick 1 button 0, joystick 1 button 1, joystick 2 button 0... ",320],["You can also query input for a specific key or button with Input.GetKey and the naming conventions specified above. For example:",320],["```csharp",320],["Input.GetKey(\"a\");",320],["Another way to access keys is to use the KeyCode enumeration.",320],["Using virtual axes in scripts",320],["To access virtual axes from scripts, you can use the axis name.",320],["For example, to query the current value of the Horizontal axis and store it in a variable, you can use Input.GetAxis like this:",320],["```csharp",320],["float horizontalInput = Input.GetAxis (\"Horizontal\");",320],["For axes that describe an event rather than a movement (for example, firing a weapon in a game), use Input.GetButtonDown instead.",320],["If two or more axes have the same name, the query returns the axis with the largest absolute value. This makes it possible to assign more than one input device to an axis name.",320],["For example, you can create two axes named Horizontal and assign one to keyboard input and the other to joystick input. If the user is using the joystick, input comes from the joystick and keyboard input is null. Otherwise, input comes from the keyboard and joystick input is null. This enables you to write a single script that covers input from multiple controllers.",320],["Example**",320],["You can use input from the Horizontal and Vertical axes and the transform.Translate method to move a GameObject in XZ space (forward, back, left, or right). Add the following code to the update() method on a script attached to the GameObject you want to move:",320],["float moveSpeed = 10;",320],["//Define the speed at which the object moves.",320],["float horizontalInput = Input.GetAxis(\"Horizontal\");",320],["//Get the value of the Horizontal input axis.",320],["float verticalInput = Input.GetAxis(\"Vertical\");",320],["//Get the value of the Vertical input axis.",320],["transform.Translate(new Vector3(horizontalInput, verticalInput, 0) * moveSpeed * Time.deltaTime);",320],["//Move the object to XYZ coordinates defined as horizontalInput, 0, and verticalInput respectively.",320],["Time.deltaTime represents the time that passed since the last frame. Multiplying the moveSpeed variable by Time.deltaTime ensures that the GameObject moves at a constant speed every frame.",320],["InputManager",320],["Lens Flare component",321],["A Lens Flare component displays a lens flare that is configured by a Flare asset.",321],["You can display a Flare asset with a Light component. If you do this, Unity automatically tracks the position and direction of the Light and uses those values to configure the appearance of the lens flare.",321],["Use this component instead to configure the values of the lens flare yourself, which gives you more precise control.",321],["Note:** This workflow is compatible only with the Built-in Render Pipeline. For similar functionality in other render pipelines, see Lens flares and halos.",321],["Using a Lens Flare component",321],["Create a new GameObject (menu bar: GameObject > Create Empty).",321],["In the Inspector, click Add Component > Effects > Lens Flare.",321],["Assign a Flare Asset to the Flare property.",321],["If you want a Camera to see lens flares, attach a Flare Layer component to the Camera's GameObject.",321],["To see the lens flare effect in the Scene View, enable the Effect toggle in the Scene View toolbar and, in the drop-down, enable Flares.",321],["Properties",321],["Property: Function: ",321],["Flare The Flare asset to render.Note: The other properties in the Lens Flare Inspector are stored in this Flare asset. They are not stored in the Lens Flare component. ",321],["Color The color to tint the Flare to. You can use this to make the lens flare better fit the Scene's mood. ",321],["Brightness The size and brightness the lens flare appears. If you use a very bright lens flare, make sure its direction fits with your Scene's primary light source. Can only affect properties that Flare has enabled. ",321],["Fade Speed The speed at which Unity fades the lens flare in and out. ",321],["Ignore Layers A mask that determins which Layers can see the lens flare. ",321],["Directional Indicates whether Unity orients the Flare along the positive z-axis of the GameObject. It appears as if it was infinitely far away, and does not track the GameObject's position, only the direction of its z-axis. ",321],["LensFlare",321],["Lights",322],["Unity displays different properties in the Light Inspector depending on the render pipeline that your Project uses.",322],["Properties",322],["If your Project uses the Universal Render Pipeline (URP), see the URP package documentation.",322],["If your Project uses the High Definition Render Pipeline (HDRP), see the HDRP package documentation.",322],["If your Project uses the Built-in Render Pipeline, Unity displays the following properties:",322],["Light settings",322],["Property: Function: ",322],["Type The current type of light. Possible values are Directional, Point, Spot and Area (Rectangle or Disc light). For information on these values, see Types of Light. ",322],["Range Define how far the light emitted from the center of the object travels (Point and Spot lights only). ",322],["Spot Angle Define the angle (in degrees) at the base of a spot light’s cone (Spot light only). ",322],["Color Use the color picker to set the color of the emitted light. ",322],["Mode Specify the Light Mode. Possible modes are Realtime, Mixed and Baked. For information on these values, see Light Modes. ",322],["Intensity Set the brightness of the light. The default value for a Directional light is 0.5. The default value for a Point, Spot or Area (Rectangle or Disc)light is 1. ",322],["Indirect Multiplier Use this value to vary the intensity of indirect light. If you set Indirect Multiplier to a value lower than 1, the bounced light becomes dimmer with every bounce. A value higher than 1 makes light brighter with each bounce. This is useful, for example, when a dark surface in shadow (such as the interior of a cave) needs to be brighter to make detail visible. If you want to use Enlighten Realtime Global Illumination, but want to limit a single real-time Light so that it only emits direct light, set its Indirect Multiplier to 0. ",322],["Shadows",322],["Property: Function: ",322],["Shadow Type Determine whether this Light casts Hard Shadows, Soft Shadows, or no shadows at all. Hard Shadows produces shadows with a sharp edge. Hard shadows aren't realistic compared to Soft Shadows but they involve less processing, and are acceptable for many purposes. Soft shadows also tend to reduce the \"blocky\" aliasing effect from the shadow map. ",322],["    Baked Shadow Angle If Mode is set to Baked or Mixed, Type is set to Directional, and Shadow Type is set to Soft Shadows, this property adds some artificial softening to the edges of shadows and gives them a more natural look. ",322],["    Baked Shadow Radius If Mode is set to Baked or Mixed, Type is set to Point or Spot ,and Shadow Type is set to Soft Shadows, this property adds some artificial softening to the edges of shadows and gives them a more natural look. ",322],["    Realtime Shadows These properties are available when Mode is set to Realtime or Mixed, and Shadow Type is set to Hard Shadows or Soft Shadows. Use these properties to control real-time shadow rendering settings. ",322],["        Strength Use the slider to control how dark the shadows cast by this Light are, represented by a value between 0 and 1. This is set to 1 by default. ",322],["        Resolution Control the rendered resolution of shadow maps. A higher resolution increases the fidelity of shadows, but requires more GPU time and memory usage. ",322],["        Bias Use the slider to control the distance at which shadows are pushed away from the light, defined as a value between 0 and 2. This is useful for avoiding false self-shadowing artifacts. See Shadow troubleshooting for more information. This is set to 0.05 by default. ",322],["        Normal Bias Use the slider to control distance at which the shadow casting surfaces are shrunk along the surface normal, defined as a value between 0 and 3. This is useful for avoiding false self-shadowing artifacts. See documentation on Shadow mapping and the bias property for more information. This is set to 0.4 by default. ",322],["        Near Plane Use the slider to control the value for the near clip plane when rendering shadows, defined as a value between 0.1 and 10. This value is clamped to 0.1 units or 1% of the light’s Range property, whichever is lower. This is set to 0.2 by default. ",322],["Additional settings",322],["Property: Function: ",322],["Cookie Specify a Texture mask through which shadows are cast (for example, to create silhouettes, or patterned illumination for the Light). For more information, see Cookies. ",322],["Draw Halo Tick this box to draw a spherical Halo of light with a diameter equal to the Range value. You can also use the Halo component to achieve this. Note that the Halo component is drawn in addition to the halo from the Light component, and that the Halo component’s Size parameter determines its radius, not its diameter. ",322],["Flare If you want to set a Flare to be rendered at the Light’s position, place an Asset in this field to be used as its source. ",322],["Render Mode Use this drop-down to set the rendering priority of the selected Light. This can affect lighting fidelity and performance. ",322],["    Auto The rendering method is determined at run time, depending on the brightness of nearby lights and the current Quality settings. ",322],["    Important The light is always rendered at per-pixel quality. Use Important mode only for the most noticeable visual effects (for example, the headlights of a player’s car). ",322],["    Not Important The light is always rendered in a faster, vertex/object light mode. ",322],["Culling Mask Use this to selectively exclude groups of objects from being affected by the Light. For more information, see Layers. ",322],["Details",322],["If you create a Texture that contains an alpha channel and assign it to the Cookie variable of the light, the cookie is projected from the light. The cookie’s alpha mask modulates the light’s brightness, creating light and dark spots on surfaces. This is a great way to add complexity or atmosphere to a scene.",322],["VertexLit shaders can't display Cookies or Shadows.",322],["Directional Light Shadows",322],["Note that shadows are disabled for directional lights with cookies when forward rendering is used. It's possible to write custom shaders to enable shadows in this case; see documentation on writing surface shaders for further details.",322],["Hints",322],["Spot** lights with cookies can be extremely effective for creating the effect of light coming in from a window.",322],["Low-intensity point lights are good for providing depth to a Scene.",322],["For maximum performance, use a VertexLit shader. This shader only does per-vertex lighting, giving a much higher throughput on low-end cards.",322],["Light",322],["Lighting Settings Asset",323],["A Lighting Settings Asset represents a saved instance of the LightingSettings class, which stores data for the Baked Global Illumination and the Enlighten Realtime Global Illumination systems. The Unity Editor uses this data when it precomputes lighting data for a Scene that uses one or both of these systems.",323],["You can assign the same Lighting Settings Asset or instance of the LightingSettings class to more than one Scene, which makes it easy to share Global Illumination system settings across multiple Scenes.",323],["Creating a Lighting Settings Asset",323],["There are two ways to create a Lighting Settings Asset in the Unity Editor.",323],["To create a Lighting Settings Asset from the Project view:",323],["In the Project view, either click the add (+) button, or open the context menu and navigate to Create.",323],["Click Lighting Settings. Unity creates a new Lighting Settings Asset in the Project view.",323],["To create and automatically assign Lighting Settings Asset from the Lighting window:",323],["Open the Lighting window (menu: Window > Rendering > Lighting).",323],["Open the Scene tab.",323],["Select New. Unity creates a new Lighting Settings Asset in the Project view, and immediately assigns it to the active Scene.",323],["Select Clone instead to create a duplicate of the current Lighting Settings Asset, and immediately assign it to the active Scene.",323],["You can also create a Lighting Settings Asset from a script. To do this, create an instance of the LightingSettings class and either save it to disk, or assign it to a Scene and save that Scene. For more information and code examples, see the LightingSettings API documentation.",323],["Assigning a Lighting Settings Asset to a Scene",323],["To assign a Lighting Settings Asset to a Scene in the Unity Editor:",323],["Open the Scene that you want to assign the Lighting Settings Asset to.",323],["If you have more than one Scene open, ensure that the Scene that you want to assign the Lighting Settings Asset to is the active Scene.",323],["Open the Lighting window (menu: Window > Rendering > Lighting).",323],["Open the Scene tab.",323],["Either drag the Lighting Settings Asset to the Lighting Settings field, or click the icon to the right of the Lighting Settings field and choose the Lighting Settings Asset from the list.",323],["You can also assign a Lighting Settings Asset to the active Scene from a script. To do this, load the Lighting Settings Asset to obtain an instance of the LightingSettings class, then use the Lightmapping.lightingSettings API to assign that LightingSettings instance to the active Scene. For more information and code examples, see the LightingSettings API documentation.",323],["Viewing and editing the properties of a Lighting Settings Asset",323],["You can view and edit the properties of Lighting Settings Asset in two places in the Unity Editor:",323],["In the Project view, if you select a Lighting Settings Asset, you can view and edit its properties in the Inspector.",323],["If the active Scene has a Lighting Settings Asset assigned to it, you can view and edit the properties of that Lighting Settings Asset in the Lighting Window’s Scene tab.",323],["You can also read from or write to the properties of a Lighting Settings Asset from a script. To do this, load the Lighting Settings Asset to obtain an instance of theLightingSettings class, and access its properties. For more information and code examples, see the LightingSettings API documentation.",323],["",323],["Default LightingSettings data",323],["When a Scene does not have a Lighting Settings Asset assigned to it, Unity uses the default LightingSettings object for that Scene. The default LightingSettings object is an internal, read-only instance of the LightingSettings class.",323],["You cannot make any changes to the LightingSettings data for a Scene that uses the default LightingSettings, but Unity can perform a bake using its settings.",323],["To make changes to the LightingSettings data for a Scene, you must use the Unity Editor to create and assign a Lighting Settings Asset, or use a script to create, configure, and assign a LightingSettings object. For more information and code examples, see the LightingSettings API documentation.",323],["Unity automatically generates an ambient probe and a default Reflection Probe to ensure that environment lighting affects your scene and the GameObjects in it by default. To learn more about this functionality, see SkyManager.",323],["Properties",323],["When you view the Lighting Settings Asset in the Inspector or the Lighting window, the properties that you can view or edit are divided into the following sections:",323],["",323],["Realtime Lighting",323],["This section contains settings related to the Enlighten Realtime Global Illumination system.",323],["Property Function ",323],["Realtime Global Illumination Enable this property to use the Enlighten Realtime Global Illumination system in Scenes that use this Lighting Settings Asset. ",323],["Realtime Environment Lighting Enable this property to use the Enlighten Realtime Global Illumination system to calculate and update ambient light in real-time. This property is only available when both Enlighten Realtime Global Illumination and Baked Global Illumination are enabled in the Scene. ",323],["Indirect Resolution Specifies the number of texels per unit to use for realtime lightmaps. Increasing this value improves lightmap quality, but also increases render time.This property is only available if you enable Realtime Global Illumination. ",323],[" ",323],["Mixed Lighting",323],["This section contains settings that affect the behavior of Baked Lights and Mixed Lights in Scenes that use this Lighting Settings Asset.",323],["Property: Function: ",323],["Baked Global Illumination When this setting is enabled, Unity enables the Baked Global Illumination system for the Scenes that use this Lighting Settings Asset. When this setting is disabled, Unity disables the Baked Global Illumination system for the Scenes that use this Lighting Settings Asset.When the Baked Global Illumination system is enabled, Unity uses Baked lights in the Scene for lightmapping only, and Mixed lights behave according to the Lighting Mode setting. When the Baked Global Illumination system is disabled, Unity forces all Baked and Mixed lights in the Scene to act as though they were Realtime Lights. ",323],["Lighting Mode Specifies which Lighting Mode Unity uses for all Mixed Lights in the Scenes that use this Lighting Settings Asset.When you change the Lighting Mode, you need to re-bake the lighting data for the Scenes that use this Lighting Settings Asset. ",323],["Baked Indirect Use Baked Indirect Lighting Mode for all Mixed Lights in the Scenes that use this Lighting Settings Asset.In Baked Indirect Lighting Mode, Mixed Lights provide real-time direct lighting and Unity bakes indirect light into lightmaps and Light Probes. Real-time shadow maps provide shadows. ",323],["Shadowmask Use Shadowmask Lighting Mode for all Mixed Lights in the Scenes that use this Lighting Settings Asset.In Shadowmask Lighting Mode Mixed Lights provide real-time direct lighting while indirect light is baked into lightmaps and probes. This mode combines real-time and baked shadows. ",323],["Subtractive Use Subtractive Lighting Mode for all Mixed Lights in the Scenes that use this Lighting Settings Asset.In Subtractive Lighting Mode Mixed Lights provide baked direct and indirect lighting for static objects. Dynamic objects receive real-time direct lighting and cast shadows using the Directional Light. ",323],[" ",323],["Lightmapping Settings",323],["Property Function ",323],["Lightmap Resolution Specifies the number of texels per unit to use for lightmaps. Increasing this value improves lightmap quality, but also increases bake times. Note that doubling this value causes the number of texels to quadruple because it determines both the height and width of the lightmap. See the Occupied texels count in the statistics area of the Lighting window. ",323],["Lightmap Padding Determines the separation (in texel units) between separate shapes in the baked lightmap. The default is 2. ",323],["Max Lightmap Size Specifies the size (in pixels) of the full lightmap texture, which incorporates a separate region for each included GameObject. The default value is 1024. ",323],["Lightmap compression The level of compression the Editor uses for lightmaps. - None: Does not compress lightmaps. - Low Quality: This may use less memory and storage than Normal Quality, but can also introduce visual artifacts. - Normal Quality: This is a good trade-off between memory usage and visual quality. - High Quality: Requires more memory and storage than Normal Quality, but provides better visual results.",323],["Ambient Occlusion Controls the relative brightness of surfaces in baked ambient occlusion. This only applies to the indirect lighting calculated by the lightmapper you are using to bake your lighting. Enabled by default. If Ambient Occlusion is enabled, it exposes three settings: Max Distance, Indirect Contribution, and Direct Contribution. For all three settings, higher values indicate a greater contrast between occluded and fully lit areas. ",323],["Max Distance Specifies how far the lighting system casts rays in order to determine whether or not to apply occlusion to an object. A higher value produces longer rays and contributes more shadows to the lightmap, while a lower value produces shorter rays that contribute shadows only when objects are very close to one another. A value of 0 casts an infinitely long ray that has no maximum distance. The default value is 1. ",323],["Indirect Contribution Scales the brightness of indirect ambient light bounced and emitted from objects in the final lightmap. This is a value between 0 and 10. The default value is 1. Values less than 1 reduce the intensity, while values greater than 1 increase it. ",323],["Direct Contribution Scales the brightness of direct light. This is a value between 0 and 10. The default value is 0. The higher this value is, the greater the contrast the Editor applies to the direct lighting. ",323],["Directional Mode Enables the lightmap to store information about the characteristics of the dominant incoming light at each point on an object's surface. See Directional Lightmapping for more information. The default mode is Directional. ",323],["Directional In Directional mode, , Unity generates a second lightmap to store the dominant direction of incoming light. This makes it possible for diffuse normal mapped materials to work with the global illumination system. Shaders sample both lightmap textures during rendering. As a result, directional mode requires about twice as much video memory as non-directional mode for the additional lightmap data. Generating the additional directionality texture has an impact on baking performance. Directional lightmaps cannot be decoded on SM2.0 hardware or when using GLES2.0. ",323],["Non-directional Non-directional mode lightmaps only include a single texture. As a result, they require less video memory and less storage than directional lightmaps, and are faster to decode in shaders. These optimizations reduce visual quality. ",323],["Indirect Intensity Determines the brightness of indirect light stored in real-time and baked lightmaps. This is a value between 0 and 5. A value above 1 increases the intensity of indirect light while a value of less than 1 reduces indirect light intensity. The default value is 1. ",323],["Albedo Boost Specifies the amount of light Unity bounces between surfaces. This value is between 1 and 10. Increasing this value pulls the albedo value towards white for indirect light computation. The default value of 1 is physically accurate. ",323],["Lightmap Parameters A Lightmap Parameters Asset stores values for settings relevant to Baked Global Illumination. The Editor provides several default Lightmap Parameters Assets to choose from, but you can also create your own lightmap parameters file using the Create New option. See Lightmap Parameters for more information. The default value is Default-Medium. The options are Default-Medium, Default-HighResolution, Default-LowResolution, and Default-VeryLowResolution. ",323],["Some settings are specific to certain lightmapper backends. To see these settings, visit the page for the relevant lightmapper:",323],["Progressive CPU Lightmapper; also includes settings for the Progressive GPU Lightmapper",323],["However, Enlighten Baked Global Illumination is deprecated and no longer visible in the user interface by default. See Lightmapping using Enlighten Baked Global Illumination for more information.",323],[" ",323],["Auto Generation",323],["When you view a Lighting Settings Asset in the Inspector, this property is at the top of the Inspector. When you view a Lighting Settings Asset in the Lighting window, this property is at the bottom of the Lighting window, near the Generate Lighting button.",323],["Property Function: ",323],["Auto Generate If Auto Generate is enabled, Unity precomputes lighting data automatically when you make changes to the Scene.This data includes lightmaps for the Baked Global Illumination system, data for the Enlighten Realtime Global Illumination system, Light Probes, and Reflection Probes. Unity usually begins the bake a few seconds after you make a change to the Scene. If Auto Generate is disabled, you must manually invoke a bake yourself, using the Generate Lighting button in the Lighting window, or the Lightmapping.Bake or Lightmapping.BakeAsync APIs.Note that when you precompute lighting data using Auto Generate, the precomputed lighting data is not stored as Assets in your Project. It is instead stored in memory, and serialized as part of the Scene. Note: From Unity Editor version 2022.2, Auto Generate mode is unavailable when the Entities package is installed. This is because when you generate lighting in a project where you have installed the Entities package, the Unity Editor opens all loaded subscenes, which may slow down Editor performance. ",323],["Lighting Settings Asset added in 2020.1 NewIn20201",323],["LightingSettings",323],["Lightmap Parameters Asset",324],["A Lightmap Parameters Asset contains a set of values for the parameters that control Unity’s lighting features. These Assets allow you to define and save different sets of values for lighting, for use in different situations.",324],["Lightmap Parameters Assets allow you to quickly create presets optimized for different types of GameObjects, or for different platforms and different Scene types (for example, indoor or outdoor Scenes).",324],["Creating a Lightmap Parameters Asset",324],["To create a new Lightmap Parameters Asset, right-click in the Project window and go to Create > New Parameters Asset. Unity stores this in your Project folder.",324],["Properties",324],["When you click on a Lightmap Parameters Asset in the Project window, the Inspector window displays the values defined in that Asset. The parameters and their descriptions are listed in the table below.",324],["Realtime GI",324],["These parameters configure Enlighten Realtime Global Illumination.",324],["See render pipeline feature comparison for more information about support for Enlighten Realtime Global Illumination across render pipelines.",324],["Property Function ",324],["Resolution This value scales the Realtime Resolution value in the Scene tab of the Lighting Window (menu: Window > Rendering > Lighting > Scene) to give the final resolution of the lightmap in texels per unit of distance. ",324],["Cluster Resolution The ratio of the cluster resolution (the resolution at which the light bounces are calculated internally) to the final lightmap resolution. See documentation on GI Visualizations in the Scene view for more information. ",324],["Irradiance Budget This value determines the precision of the incoming light data used to light each texel in the lightmap. Each texel’s lighting is obtained by sampling a \"view\" of the Scene from the texel’s position. Lower values of irradiance budget result in a more blurred sample. Higher values increase the sharpness of the sample. A higher irradiance budget improves the lighting, but this increases run-time memory usage and might increase CPU usage. ",324],["Irradiance Quality Use the slider to define the number of rays that are cast and used to compute which clusters affect a given output lightmap texel. Higher values offer visual improvements in the lightmap, but increase precomputing time in the Unity Editor. The value does not affect runtime performance. ",324],["Modelling Tolerance This value controls the minimum size of gaps in Mesh geometry that allows light to pass through. Make this value lower to allow light to pass through smaller gaps in your environment. ",324],["Edge Stitching If enabled, this property indicates that UV charts in the lightmap should be joined together seamlessly, to avoid unwanted visual artifacts. ",324],["Is Transparent If enabled, the object appears transparent during the Global Illumination calculations. Back-faces do not contribute to these calculations, and light travels through the surface. This is useful for invisible emissive surfaces. ",324],["System Tag A group of objects whose lightmap Textures are combined in the same lightmap atlas is known as a “system”. The Unity Editor automatically defines additional systems and their accompanying atlases if all the objects can’t be fitted into a single atlas. However, it is sometimes useful to define separate systems yourself (for example, to ensure that objects inside different rooms are grouped into one system per room). Change the System Tag number to force new system and lightmap creation. The exact numeric sequence values of the tag are not significant. ",324],["Baked GI",324],["These parameters configure lightmapping.",324],["See render pipeline feature comparison for more information about support for lightmapping across render pipelines.",324],["Property Function ",324],[" __Enlighten Baked Global Illumination__ __Progressive Lightmapper__ \n",324],["Blur Radius The radius of the blur filter that is applied to direct lighting during post-processing in texels. The radius is essentially the distance over which neighboring texels are averaged out. A larger radius gives a more blurred effect. Higher levels of blur tend to reduce visual artifacts but also soften the edges of shadows. Blur Radius is not available when you use Progressive Lightmapper. ",324],["Anti-aliasing Samples Determines the number of sub-texel positions to use when sampling a lightmap texel. Set the value above 1 to use supersampling to improve lightmap quality and reduce artifacts related to aliasing.•A value of 1 disables super sampling.•Values between 2 and 8 provide 2x2 supersampling. The default value is 8, which removes most aliasing artifacts.•Values between 9 and 256 provide 4x4 supersampling. Use these values to remove artifacts, like jagged edges in direct lighting. This can happen when you use baked shadows.Note: A higher anti-aliasing sample value uses more memory. This means that if you use a high sample number in a large Scene, with large lightmap texture sizes the lightmap bake might not complete. ",324],["Direct Light Quality The number of rays used to evaluate direct lighting. A higher number of rays tends to produce more accurate soft shadows but increases bake time. Direct Light Quality is not available when you use Progressive Lightmapper. ",324],["Backface Tolerance The structure of a Mesh sometimes causes some texels to have a “view” that includes back-facing geometry. Incoming light from a backface is meaningless in any Scene. Because of this, this property lets you select a percentage threshold of light that must come from front-facing geometry in order for a texel to be considered valid. Invalid texels have their lighting approximated from their neighbors’ values. Lowering this value can solve lighting problems caused by incoming light from backfaces. Specifies the percentage of front-facing geometry sampling ray hits a texel must have for Unity to consider it valid. This makes it possible for Unity to invalidate a texel if too many of the rays cast from it hit backfaces (e.g. if the texel is inside geometry). A value of 1.0 means that Unity considers a texel invalid when any of its rays hits a backface, for example. When a texel is invalid, Unity clones valid values from surrounding texels to prevent artifacts. Lower this value to solve lighting problems caused by backface samples. Use the Texel Validity Scene View Draw Mode to adjust this value. ",324],["Pushoff Pushes ray origins away from geometry along the normal based on the value you specify in modelling units. Unity applies this value to all baked lightmaps. It affects direct light, indirect light, and baked ambient occlusion. Adjust this setting to reduce self-occlusion and self-shadowing artifacts. ",324],["Baked Tag Groups specific sets of objects in atlases. As with the System Tag, the exact numeric value is not significant. Unity never puts GameObjects with different Baked Tag values in the same atlas. However, there is no guarantee that objects with the same tag end up in the same atlas because there may be too many objects with that tag to fit into one atlas. See image A (below) for an example of this. You do not need to set this value when you use the multi-scene bake API because Unity groups automatically in that case. You can use Baked Tag to replicate some of the behavior of the Lock Atlas option. See Baked Tags: Details for more information. ",324],["Limit Lightmap Count Limit Lightmap Count is not available when you use Enlighten Baked Global Illumination. Applies a limit to the number of lightmaps that Unity can use to pack together GameObjects with the same Baked Global Illumination settings. When you enable this limit, a related setting appears called Max Lightmaps. That setting determines the lightmap limit. The Lightmapping Settings define the size of these lightmaps.Unity considers GameObjects to have the same Baked Global Illumination settings if they have equal values for Anti-aliasing Samples, Pushoff, Baked Tag, and Backface Tolerance. This means that Unity might pack together GameObjects associated with different Lightmap Parameter Assets. To pack GameObjects into a set number of lightmaps, Unity scales down UV layouts until all fit within the specified number of lightmaps. This process may reduce lightmap resolution. ",324],[" ",324],["Baked Tags: Details",324],["The two images above shows two views of the same Scene:",324],["Top: Everything is in one atlas because all the GameObjects have the same Baked Tag.",324],["Bottom: One GameObject is assigned a different Baked Tag, and forced into a second lightmap.",324],["Baked AO",324],["These parameters configure Baked Ambient Occlusion.",324],["Property Function ",324],["Quality The number of rays cast when evaluating baked ambient occlusion (AO). A higher numbers of rays increases AO quality but also increases bake time. ",324],["Anti-aliasing Samples The number of samples to take when doing anti-aliasing of AO. A higher number of samples increases the AO quality but also increases the bake time. ",324],["General GI",324],["Property Function ",324],["Backface Tolerance The percentage of rays shot from an output texel that must hit front faces for the lighting system to consider them usable. This allows Unity to invalidate a texel if too many of the rays cast from it hit back faces ( (for example, if the texel is inside some geometry). The lighting system clones valid values from the surrounding texels to avoid unintended artifacts.If Backface Tolerance is 0.0, the lighting system rejects the texel only if it sees nothing but backfaces. If it is 1.0, the lighting system rejects the ray origin if it has even one ray that hits a backface. ",324],["Assigning Lightmap Parameters Assets",324],["Scenes",324],["To assign a Lightmap Parameters Asset to the whole Scene:",324],["Open the Lighting window (Window > Rendering > Lighting)",324],["Click the Scene tab",324],["Navigate to the Lightingmapping Settings.",324],["Use the Lightmap Parameters drop-down to assign a default Lightmap Parameters Asset. This drop-down lists all available Lightmap Parameters Assets.",324],["GameObjects",324],["To assign a Lightmap Parameters Asset to a single GameObject, ensure the GameObject has a Mesh Renderer or Terrain component attached.",324],["To assign a Lightmap Parameters Asset to a Mesh Renderer component:",324],["In the Inspector, go to Mesh Renderer > Lighting",324],["Enable Contribute Global Illumination",324],["In the mesh Renderer component, go to Lightmapping > Lightmap Parameters.",324],["Select an option from the menu. Select Scene Default Parameter to use the same Lightmap Parameters Asset that's assigned to the whole Scene.",324],["To assign a Lightmap Parameters Asset to a Terrain component:",324],["In the Inspector, go to Terrain > Terrain Settings > Lighting",324],["Enable Contribute Global Illumination",324],["In Terrain Settings, go to Lightmapping > Lightmap Parameters.",324],["Select an option from the menu. Select Scene Default Parameter to use the same Lightmap Parameters Asset that's assigned to the whole Scene.",324],[" 2019-03-28 ",324],[" 2018-03-28 ",324],["Limit Lightmap Count added in 2019.1 NewIn20191",324],["Progressive Lightmapper added in 2018.1 NewIn20181",324],["LightmapParameters",324],["Light Probe Groups",325],["To place Light Probes in your Scene, you must use a GameObject with a Light Probe Group component attached. You can add a Light Probe Group component from the menu: Component > Rendering > Light Probe Group.",325],["You can add the Light Probe Group component to any GameObject in the Scene. However, it’s good practice to create a new empty GameObject (menu: GameObject > Create Empty) and add it to that, to decrease the possibility of accidentally removing it from the Project.",325],["Property Function ",325],["",325],["Edit Light Probes To make changes to a Light Probe Group, click the Edit Light Probes button to enable editing. This changes Unity so that you can only move and edit Light Probes, so you must remember to disable it when you are finished. You cannot move or edit GameObjects or other element in Unity while Edit Light Probes is enabled. ",325],["Show Wireframe When this property is enabled, Unity displays the wireframe of the Light Probe Group in the Scene view. When it is disabled, Unity only displays the Light Probe points, and not the wireframe connecting them. ",325],["Remove Ringing When this property is enabled, Unity automatically removes Light Probe ringing from the Scene. For more information, see Ringing, later in this section. ",325],["Selected Probe Position This gives the x, y and z coordinates of the selected Light Probes in the Scene. This property is read-only. ",325],["Add Probe Click this to add a Light Probe to the Light Probe Group. ",325],["Select All Click this to select all Light Probes in the Light Probe Group. ",325],["Delete Selected Click this to delete the selected Light Probes from the Light Probe Group. ",325],["Duplicate Selected Click this to duplicate the selected Light Probes. ",325],["",325],["Ringing",325],["Under certain circumstances, Light Probes exhibit an unwanted behaviour called \"ringing\". This often happens when there are significant differences in the light surrounding a Light Probe. For example, if you have bright light on one side of a Light Probe, and no light on the other side, the light intensity can \"overshoot\" on the back side. This overshoot causes a light spot on the back side.",325],["There are several ways to deal with this:",325],["In the Light Probe Group component, enable Remove Ringing. Unity automatically removes the unintended light spots. However, this generally makes the Light Probes less accurate, and reduces light contrast, so you must check the visual results.",325],["Place in-game obstacles in such a way that players can’t get to a position where they can see the light spot.",325],["Avoid baking direct light into Light Probes. Direct light tends to have sharp discontinuities (such as shadow edges), which makes it unsuitable for Light Probes. To only bake indirect light, use Mixed lighting.",325],["Placing Light Probes",325],["When editing a Light Probe Group, you can manipulate individual Light Probes in a similar way to GameObjects. However, Light Probes are not GameObjects; they are a set of points in the Light Probe Group component.",325],["When you begin editing a new Light Probe Group, you start with a default formation of eight probes arranged in a cube, as shown below:",325],["You can now use the controls in the Light Probe Group inspector to add new probe positions to the group. The probes appear in the Scene as yellow spheres which you can position in the same way as GameObjects. You can also select and duplicate individual probes or in groups, by using the usual \"duplicate\" keyboard shortcut (ctrl+d/cmd+d).",325],["Remember to disable the Light Probe Group edit mode when you’ve finished editing the Light Probes, so that you can continue to edit and move GameObjects in your Scene as normal.",325],["Choosing Light Probe positions",325],["Unlike lightmaps, which usually have a continuous resolution across the surface of an object, the resolution of the Light Probe information depends on how closely packed you choose to position the Light Probes.",325],["To optimise the amount of data that Light Probes store, and the amount of computation done while the game is playing, you should generally attempt to place as few Light Probes as possible. However, you should also place enough Light Probes so that changes in light from one space to another are recorded at a level that is acceptable to you. This means you might place Light Probes in a more condensed pattern around areas that have complex or highly contrasting light, and you might place them in a much more spread out pattern over areas where the light does not significantly change.",325],["In the example above, the Light Probes are placed more densely near and between the buildings where there is more contrast and color variation, and less densely along the road, where the lighting does not significantly change.",325],["The simplest approach to positioning Light Probes is to arrange them in a regular 3D grid pattern. While this setup is simple and effective, it is likely to consume more memory than necessary, and you may have lots of redundant Light Probes. For example, in the Scene above, if there were lots of Light Probes placed along the road it would be a waste of resources. The light does not change much along the length of the road, so many Light Probes would be storing almost identical lighting data to their neighbouring Light Probes. In situations like this, it is much more efficient to interpolate this lighting data between fewer, more spread-out, Light Probes.",325],["Light Probes individually do not store a large amount of information. From a technical perspective, each probe is a spherical, panoramic HDR image of the view from the sample point, encoded using Spherical Harmonics L2 which is stored as 27 floating point values. However, in large Scenes with hundreds of Light Probes they can add up, and having unnecessarily densely packed Light Probes can result in large amounts of wasted memory in your game.",325],["Creating a volume",325],["Even if your gameplay takes place on a 2D plane (for example, cars driving around on a road surface), your Light Probes must form a 3D volume.",325],["This means you should have at least two vertical \"layers\" of points in your group of Light Probes.",325],["In the example below, you can see on the left the Light Probes are arranged only across the surface of the ground. This does not result in good lighting because the Light Probe system cannot calculate sensible tetrahedral volumes from the Light Probes.",325],["On the right, the Light Probes are arranged in two layers, some low to the ground and others higher up, so that together they form a 3D volume made up of lots of individual tetrahedra. This is a good layout.",325],["Light Probe placement for real-time global illumination",325],["Enlighten Realtime Global Illumination makes it possible for moving lights to cast dynamically bounced light on static GameObjects.",325],["When you use Light Probes along with Enlighten Realtime Global Illumination, it is also possible for moving lights to cast dynamic bounced light on moving GameObjects. The quality of the resulting lighting depends on how your Light Probes are positioned, and therefore it is important to position them carefully.",325],["A Light Probe captures the indirect lighting at its position in space. In order to faithfully capture the lighting environment, you must place more probes in areas where you expect more variation in the lighting. For example, you may need many probes in areas with moving lights or many occluders. In areas with little or no lighting variation, you can place fewer probes to save on memory and computation resources.",325],["Normally only a few Light Probes are needed in large areas of static light. However, if you plan to have moving lights within this area of static light, and you want moving objects to receive accurate bounced light from these moving lights, you need a dense network of Light Probes within this area to provide sufficient accuracy. The size and range of your lights, how fast these lights move, and the size(s) of the moving objects receiving dynamic light determine how you space your Light Probes.",325],["Troubleshooting Light Probe placement",325],["Your choice of Light Probe positions must take into account that the lighting is interpolated between sets of Light Probes. Problems can arise if your Light Probes don’t adequately cover the changes in lighting across your Scene.",325],["The example below shows a night-time Scene with two bright street lamps on either side, and a dark area in the middle. If Light Probes are only placed near the street lamps, and none in the dark area, the lighting from the lamps \"bleeds\" across the dark gap, on moving objects. This is because the lighting is being interpolated from one bright point to another, with no information about the dark area in-between.",325],["If you are using Realtime or Mixed lights, this problem may be less noticeable, because only the indirect light bleeds across the gap. The problem is more noticable if you are using fully baked lights, because in this situation the direct light on moving objects is also interpolated from the Light Probes. In this example Scene, the two lamps are baked, so moving objects get their direct light from Light Probes. Here you can see the result - a moving object (the ambulance) remains brightly lit while passing through the dark area, which is not the desired effect. The yellow wireframe tetrahedron shows that the interpolation is occurring between one brightly lit end of the street to the other.",325],["This is an undesired effect - the ambulance remains brightly lit while passing through a dark area, because no Light Probes were placed in the dark area.",325],["To solve this, you should place more Light Probes in the dark area, as shown below:",325],["Now the Scene has Light Probes in the dark area too. As a result, the moving ambulance takes on the darker lighting as it travels from one side of the Scene to the other.",325],[" 2018-10-17 ",325],[" 2017-06-08 ",325],["Remove Ringing added in 2018.3 NewIn20183",325],["Light Probes updated in 5.6",325],["LightProbeGroup",325],["Light Probe Proxy Volume component",326],["The Light Probe Proxy Volume (LPPV) component allows you to use more lighting information for large dynamic GameObjects that cannot use baked lightmaps (for example, large Particle Systems or skinned Meshes).",326],["By default, a probe-lit Renderer receives lighting from a single Light Probe that is interpolated between the surrounding Light Probes in the Scene. Because of this, GameObjects have constant ambient lighting across the surface. This lighting has a rotational gradient because it is using spherical harmonics, but it lacks a spatial gradient. This is more noticeable on larger GameObjects or Particle Systems. The lighting across the GameObject matches the lighting at the anchor point, and if the GameObject straddles a lighting gradient, parts of the GameObject may look incorrect.",326],["The Light Probe Proxy Volume component generates a 3D grid of interpolated Light Probes inside a Bounding Volume. You can specify the resolution of this grid in the UI of the component. The spherical harmonics (SH) coefficients of the interpolated Light Probes are uploaded into 3D textures. The 3D textures containing SH coefficients are then sampled at render time to compute the contribution to the diffuse ambient lighting. This adds a spatial gradient to probe-lit GameObjects.",326],["The Standard Shader supports this feature. To add this to a custom shader, use the ShadeSHPerPixel function. To learn how to implement this function, see the Particle System sample Shader code example at the bottom of this page.",326],["Render pipeline support",326],["See render pipeline feature comparison for more information about support for the Light Probe Proxy Volume component across render pipelines.",326],["When to use the component",326],["Most of the Renderer components in Unity contain Light Probes. There are three options for Light Probes:",326],["Off: the Renderer doesn’t use any interpolated Light Probes.",326],["Blend Probes (default value): the Renderer uses one interpolated Light Probe.",326],["Use Proxy Volume: the Renderer uses a 3D grid of interpolated Light Probes.",326],["When you set the Light Probes property in the Mesh Renderer component to Use Proxy Volume, the GameObject must have a Light Probe Proxy Volume (LPPV) component attached. You can add a LPPV component on the same GameObject, or you can use (borrow) a LPPV component from another GameObject using the Proxy Volume Override property. If Unity cannot find a LPPV component in the current GameObject or in the Proxy Volume Override GameObject, a warning message is displayed at the bottom of the Renderer.",326],["Example",326],["In the Scene above, there are two planes on the floor using Materials that emit a lot of light. Note that:",326],["The ambient light changes across the geometry when using a LPPV component. Use one interpolated Light Probe to create a constant color on each side of the geometry.",326],["The geometry doesn’t use static lightmaps, and the spheres represent interpolated Light Probes. They are part of the Gizmo Renderer.",326],["How to use the component",326],["The area in which the 3D grid of interpolated Light Probes are generated is affected by the Bounding Box Mode property.",326],["There are three options available:",326],["Bounding Box Mode: Function: ",326],["Automatic Local (default value) A local-space bounding box is computed. The interpolated Light Probe positions are generated inside this bounding box. If a Renderer component isn’t attached to the GameObject, then a default bounding box is generated. The bounding box computation encloses the current Renderer, and sets all the Renderers down the hierarchy that have the Light Probes property to Use Proxy Volume. ",326],["Automatic World A bounding box is computed which encloses the current Renderer and all the Renderers down the hierarchy that have the Light Probes property set to Use Proxy Volume. The bounding box is world-aligned. ",326],["Custom A custom bounding box is used. The bounding box is specified in the local-space of the GameObject. The bounding box editing tools are available. You can edit the bounding volume manually by modifying the Size and Origin values in the UI (see below). ",326],["The main difference between Automatic Local and Automatic World is that in Automatic Local, the bounding box is more resource-intensive to compute when a large hierarchy of GameObjects uses the same LPPV component from a parent GameObject. However, the resulting bounding box may be smaller in size, meaning the lighting data is more compact.",326],["The number of interpolated Light Probes from within the bounding volume is affected by the Proxy Volume Resolution property. There are two options:",326],["Automatic (default value) - The resolution on each axis is computed using the number of interpolated Light Probes per unit area that you specify, and the size of the bounding box.",326],["Custom - Allows you to specify a different resolution on each axis (see below).",326],["Note:** The final resolution on each axis must be a power of two, and the maximum value of the resolution is 32.",326],["Probe Position Mode specifies the relative position of an interpolated Light Probe to a cell center. This option may be useful in situations when some of the interpolated Light Probes pass through walls or other geometries and cause light leaking. The example below shows the difference between Cell Corner and Cell Center in a 2D view, using a 4x4 grid resolution:",326],["Data Format specifies which format the associated 3D texture uses. There are two options:",326],["Float (default value) - The texture uses the 32-bit floating-point channel format to store the spherical harmonics coefficients.",326],["Half Float - The texture uses the half-float (16-bit float) channel format to store the spherical harmonics coefficients. The advantage of this format is that half-float linear texture sampling is supported by the majority of devices and the precision difference between this format and the 32-bit floating point channel format is not noticeable. Also, the texture sampling performance on the GPU is better with this data format.",326],["Images for comparison",326],["A simple Mesh Renderer using a Standard Shader:",326],["A skinned Mesh Renderer using a Standard Shader:",326],["",326],["Particle System sample Shader using the ShadeSHPerPixel function",326],["Shader \"Particles/AdditiveLPPV\" {",326],["Properties {",326],["_MainTex (\"Particle Texture\", 2D) = \"white\" {}",326],["_TintColor (\"Tint Color\", Color) = (0.5,0.5,0.5,0.5)",326],["Category {",326],["Tags { \"Queue\"=\"Transparent\" \"IgnoreProjector\"=\"True\" \"RenderType\"=\"Transparent\" }",326],["Blend SrcAlpha One",326],["ColorMask RGB",326],["Cull Off Lighting Off ZWrite Off",326],["SubShader {",326],["Pass {",326],["CGPROGRAM",326],["pragma vertex vert",326],["pragma fragment frag",326],["pragma multi_compile_particles",326],["pragma multi_compile_fog",326],["// Specify the target",326],["pragma target 3.0",326],["include \"UnityCG.cginc\"",326],["// You must include this header to have access to ShadeSHPerPixel",326],["include \"UnityStandardUtils.cginc\"",326],["fixed4 _TintColor;",326],["sampler2D _MainTex;",326],["struct appdata_t {",326],["float4 vertex : POSITION;",326],["float3 normal : NORMAL;",326],["fixed4 color : COLOR;",326],["float2 texcoord : TEXCOORD0;",326],["};",326],["struct v2f {",326],["float4 vertex : SV_POSITION;",326],["fixed4 color : COLOR;",326],["float2 texcoord : TEXCOORD0;",326],["UNITY_FOG_COORDS(1)",326],["float3 worldPos : TEXCOORD2;",326],["float3 worldNormal : TEXCOORD3;",326],["};",326],["float4 MainTexST;",326],["v2f vert (appdata_t v)",326],["v2f o;",326],["o.vertex = UnityObjectToClipPos(v.vertex);",326],["o.worldNormal = UnityObjectToWorldNormal(v.normal);",326],["o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;",326],["o.color = v.color;",326],["o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);",326],["UNITY_TRANSFER_FOG(o,o.vertex);",326],["return o;",326],["fixed4 frag (v2f i) : SV_Target",326],["half3 currentAmbient = half3(0, 0, 0);",326],["half3 ambient = ShadeSHPerPixel(i.worldNormal, currentAmbient, i.worldPos);",326],["fixed4 col = TintColor * i.color * tex2D(MainTex, i.texcoord);",326],["col.xyz += ambient;",326],["UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(0,0,0,0)); // fog towards black due to our blend mode",326],["return col;",326],["ENDCG",326],["Hardware requirements",326],["The component requires at least Shader Model 4 graphics hardware and API support, including support for 3D Textures with 32-bit or 16-bit floating-point format and linear filtering.",326],["To work correctly, the Scene needs to contain Light Probes via Light Probe Group components. If a requirement is not fulfilled, the Renderer or Light Probe Proxy Volume component Inspector displays a warning message.",326],["LightProbeProxyVolume",326],["Line Renderer component",327],["The Line Renderer component takes an array of two or more points in 3D space, and draws a straight line between each one. You can use a Line Renderer to draw anything from a simple straight line to a complex spiral.",327],["The line is always continuous; if you need to draw two or more completely separate lines, you should use multiple GameObjects, each with its own Line Renderer.",327],["The Line Renderer does not render lines that have a width in pixels. It renders polygons that have a width in world units. The Line Renderer uses the same algorithm for line rendering as the Trail Renderer.",327],["Getting started",327],["To create a Line Renderer:",327],["In the Unity menu bar, go to GameObject > Effects > Line.",327],["Select the Line Renderer GameObject.",327],["Add points to the Line Renderer's Positions array, either by directly setting array values in the Inspector window or by using the Create Points Scene Editing Mode.",327],["Use the Inspector window to configure the color, width, and other display settings of the line.",327],["Line Renderer Materials",327],["By default, a Line Renderer uses the built-in Material, Default-Line. You can make many changes to the appearance of the line without changing this Material, such as editing the color gradient or width of the line.",327],["For other effects, such as applying a texture to the line, you will need to use a different Material. If you do not want to write your own Shader for the new Material, Unity's built-in Standard Particle Shaders work well with Line Renderers.",327],["See Creating and using Materials for more information.",327],["",327],["Line Renderer Scene Editing Mode",327],["You can use the Line Renderer's Inspector to change the Scene Editing Mode. Different Scene Editing Modes enable you to use the Scene view and the Inspector to edit the Line Renderer in different ways.",327],["There are three Scene Editing Modes: None, Edit Points, and Create Points.",327],["Setting the Scene Editing Mode",327],["Use the Edit Points and Create Points buttons at the top of the Inspector to set the current Scene Editing Mode.",327],["Click the Edit Points button to set the Scene Editing Mode to Edit Points. Click it again to set the Scene Editing Mode to None.",327],["Click the Create Points button to set the Scene Editing Mode to Create Points. Click it again to set the Scene Editing Mode to None.",327],["Scene Editing Mode: None",327],["When no Scene Editing Mode is selected, you can configure and perform a simplification operation that removes unnecessary points from the Positions array.",327],["The following controls are visible in the Inspector:",327],["Control Description ",327],["Simplify Preview Enable Simplify Preview to see a preview of the results of the simplification operation. ",327],["Tolerance Set the amount by which the simplified line can deviate from the original line.A value of 0 results in no deviation, and therefore little or no simplification. Higher positive values result in more deviation from the original line, and therefore more simplification.The default value is 1. ",327],["Simplify Click Simplify to reduce the number of elements in the Line Renderer’s Positions array.The simplification operation uses the Ramer-Douglas-Peucker algorithm to reduce the number of points, based on the Tolerance value. ",327],["Scene Editing Mode: Edit Points",327],["When the Scene Editing Mode is set to Edit Points, Unity represents each point in the Line Renderer's Positions array as a yellow sphere in the Scene view. You can move the individual points using the Move tool.",327],["The following controls are visible in the Inspector:",327],["Control Description ",327],["Show Wireframe When enabled, Unity draws a wireframe in the Scene view that visualizes the line. ",327],["Subdivide Selected This button is enabled when you select two or more adjacent points. Pressing this button inserts a new point between the selected adjacent points. ",327],["Scene Editing Mode: Create Points",327],["When the Scene Editing Mode is set to Create Points, you can click inside the Scene view to add new points to the end of the Line Renderer's Positions array.",327],["The following controls are visible in the Inspector:",327],["Control Description ",327],["Input Set the input method you want to use to create points. ",327],["Mouse position Create points based on the mouse position in the Scene view. ",327],["Physics Raycast Create points based on a raycast into the Scene. Unity creates the point at the position where the raycast hits. ",327],["Layer Mask The layer mask to use when performing a raycast. This property is visible only when Input is set to Physics Raycast. ",327],["Min Vertex Distance When you drag the mouse to create points in the Scene view, the Line Renderer creates a new point when this distance from the last point is exceeded. ",327],["Offset The offset applied to created points. When Input is set to Mouse Position, Line Renderer applies the offset from the Scene camera. When Input is set to Physics Raycast, Line Renderer applies the offset from the raycast normal. ",327],["Line Renderer Inspector reference",327],["This section contains the following sub-sections:",327],["\nLine settings\n",327],["\nMaterials\n",327],["\nLighting\n",327],["\nProbes\n",327],["\nAdditional Settings\n",327],["",327],["Line settings",327],["Property Function ",327],["Loop Enable this to connect the first and last positions of the line, and form a closed loop. ",327],["Positions The array of Vector3 points to connect. ",327],["Width Define a width value, and a curve value to control the width of your line along its length.The curve is sampled at each vertex, so its accuracy is limited by the number of vertices in your line. The overall width of the line is controlled by the width value. ",327],["Color Define a gradient to control the color of the line along its length.Unity samples colors from the Color gradient at each vertex. Between each vertex, Unity applies linear interpolation to colors. Adding more vertices to your line might give a closer approximation of a detailed gradient. ",327],["Corner Vertices This property dictates how many extra vertices are used when drawing corners in a line. Increase this value to make the line corners appear rounder. ",327],["End Cap Vertices This property dictates how many extra vertices are used to create end caps on the line. Increase this value to make the line caps appear rounder. ",327],["Alignment Set the direction that the line faces. ",327],["View The line faces the Camera. ",327],["TransformZ The line faces the Z axis of its Transform component. ",327],["Texture Mode Control how the Texture is applied to the line. ",327],["Stretch Map the texture once along the entire length of the line. ",327],["Tile Repeat the texture along the line, based on its length in world units. To set the tiling rate, use Material.SetTextureScale. ",327],["DistributePerSegment Map the texture once along the entire length of the line, assuming all vertices are evenly spaced. ",327],["RepeatPerSegment Repeat the texture along the line, repeating at a rate of once per line segment. To adjust the tiling rate, use Material.SetTextureScale. ",327],["Shadow Bias Set the amount to move shadows away from the Light to remove shadowing artifacts cused by approximating a volume with billboarded geometry. ",327],["Generate Lighting Data If enabled, Unity builds the line geometry with normals and tangents included. This allows it to use Materials that use the Scene lighting. ",327],["Use World Space If enabled, the points are considered as world space coordinates. If disabled, they are local to the transform of the GameObject to which this component is attached. ",327],["",327],["",327],["Materials",327],["The Materials section lists all the materials that this component uses.",327],["",327],["",327],["",327],["Property",327],["Description",327],["",327],["",327],[" ",327],["",327],["",327],["Lighting",327],["The Lighting section contains properties that relate to lighting.",327],["",327],["",327],["",327],["Property",327],["Description",327],["",327],["",327],[" ",327],["",327],["",327],["Probes",327],["The Probes section contains properties relating to Light Probe and Reflection Probes.",327],["",327],["",327],["",327],["Property",327],["Description",327],["",327],["",327],[" ",327],["",327],["",327],["Additional Settings",327],["The Additional Settings section contains additional properties.",327],["",327],["",327],["",327],["Property",327],["Description",327],["",327],["",327],[" ",327],["",327],["LineRenderer",327],["LOD Group",328],["The LOD Group component manages level of detail (LOD) for GameObjects.",328],[" LOD Group selection bar for switching between LOD levels and previewing LOD rendering",328],[" Information about the Lod Bias Quality setting. This message appears if the Lod Bias property is set to anything other than 1.",328],[" Fade Transition Width setting for the selected LOD level. This property only appears if you disable the Animate Cross-fading property: that is, when you choose to set a transition zone by width instead of time.",328],[" Mesh Renderers set for the selected LOD level",328],["In addition there are two buttons at the bottom of the component:",328],["Click Recalculate Bounds to recalculate the bounding volume of all LOD Mesh GameObjects after a new LOD level is added.",328],["Click Recalculate Lightmap Scale to update the Scale in Lightmap property on all LOD Mesh Renderers, based on the changes you made to the LOD level boundaries.",328],["",328],["LOD Group selection bar",328],["The LOD Group selection bar represents the different LOD levels as colored boxes.",328],["The percentage that appears in each LOD level box represents the threshold at which that level becomes active, based on the ratio of the GameObject's screen space height to the total screen height. For example, if the threshold for LOD 1 is set to 50%, then LOD 1 becomes active when the camera pulls back far enough that the GameObject’s height fills half of the view.",328],[" The playhead for the LOD preview. You can scrub the camera icon back and forth to test the LOD levels and their transitions. At the bottom of the playhead you can see the current percentage.",328],[" To select a level, click on the level box. For each LOD level you select, you can pick the Renderer to use or customize the transition zone.",328],[" To add and remove LOD levels from the selection bar, right-click the LOD level box and then choose Insert Before or Delete from the context menu.",328],[" Level adjustment control. To change the percentage value for the LOD level, drag the left border of the LOD level box's boundary.",328],["\n Note: If the Lod Bias property is not set to 1, the Camera position might not match the position where each LOD level actually transitions from the next. In this case, a warning message appears below the selection bar.\n",328],["",328],["Previewing the LOD transitions",328],["The Scene view displays a preview of the transitions between LOD levels when you move the camera icon on the LOD Group selection bar. The camera icon acts like a playhead which you can use to scrub back and forth to control the exact position to preview along the LOD Group selection bar. The preview shows what the Camera will render at each LOD level.",328],["The LOD preview playhead shows the exact position as a percentage along the LOD Group selection bar from 100% on the left to 0% on the right. The percentage represents the ratio of the GameObject's screen space height to the total screen height.",328],["As you move through the levels, the Scene view displays the bounding box of the Tree Asset and the overlay indicates which LOD is active:",328],["Note:** Unity only displays the LOD label when a single GameObject is selected. It is not displayed when multiple GameObjects are selected.",328],["",328],["Renderers for LOD Meshes",328],["When you select an LOD level box on the LOD Group selection bar, a Renderers panel appears.",328],["The 'Renderers' are actually GameObjects that hold the Mesh for that LOD level. Usually this is a child of the GameObject that has the LODGroup component.",328],["To set a renderer Mesh for the current LOD level, click the Add box and choose the GameObject for that LOD level from the object picker.",328],["You can choose any GameObject for the renderer, but if you choose a GameObject that isn't already a child, Unity prompts you to parent it to the LODGroup GameObject.",328],["",328],["Transitioning between LOD levels",328],["Smooth transitions between LOD levels improves the player's experience of your game. As the Camera moves closer or farther away, you don't want players to see an obvious switchover (sometimes called popping) from the current LOD level to the next.",328],["Smooth transitions take place inside transition zones, where Unity renders both the current and next LOD levels separately, and then cross-fades them together.",328],["Cross-fading* is the technique of rendering two levels at the same time, with a weighting of 1 to 0 for the current LOD level and 0 to 1 for the next LOD level:",328],["Unity usually implements the cross-fading by using either screen-space dithering or transparency. For the last LOD level, there is no cross-fading: the current level just fades out.",328],["To set up smooth transitions on your LOD levels:",328],["Select the Fade Mode drop-down menu and choose Cross Fade:",328],["Note:** If your Tree Asset was made with SpeedTree, choose the Speed Tree mode instead. For more information, see Working with SpeedTree Models.",328],["By default, the Animate Cross-fading option is enabled, meaning that Unity performs a time-based transition. If you want to define your own transition zone based on the Camera's position, disable the Animate Cross-fading option and set the Fade Transition Width property.",328],["For more information, see Customizing the transition zone value.",328],["",328],["Customizing the transition zone",328],["The transition between two LOD levels begins the moment the Model's height ratio crosses the next LOD threshold. For example, if the LOD 1 threshold is set at 60%, the transition between the LOD 0 and LOD 1 levels always begins as soon as the height of the Model is 60%. The transition lasts for a short period of time:",328],["This behavior is animated by time, so you don't need to set any properties once you enable the Animate Cross-fading property. The exact duration of the cross-fade is the same for every LOD level.",328],["Alternatively, you can manually define transition zones inside each LOD level by its position. Each zone begins and ends before the next LOD level's threshold. You define what proportion of each LOD level to use as the transition zone; that is, you set how far before the next level's threshold the transition begins:",328],["Use the Fade Transition Width property to define the transition zone on each LOD level:",328],["Disable the Animate Cross-fading option.",328],["Click on the specific LOD level box that you want to set.",328],["The Fade Transition Width property appears below the LOD Group selection bar.",328],["Set the Fade Transition Width property to define the width of the cross-fade transition zone as a proportion (between 0.0 and 1.0) of the current LOD level's entire length. For example, specify a smaller value to delay the onset of the blending and create a faster transition.",328],["",328],["Working with SpeedTree Models",328],["SpeedTree geometries store the next LOD position for each vertex. Every vertex then knows how to interpolate between the current LOD position and the next LOD position. When Unity imports Models created in SpeedTree, it automatically sets them to the Speed Tree mode.",328],["Unity only needs to render the current LOD geometry and provide a value from 0 to 1 to instruct each vertex to gradually move to the next LOD position. At the end of the transition, the geometries of the current LOD and the next LOD match perfectly.",328],["Blending between two LOD levels begins at 0 and ends at 1. Any point along this zone is the blend factor, which represents the weighting between the current LOD level and the next LOD level:",328],["The Speed Tree mode uses the blend factor to interpolate the vertex positions between the current Mesh LOD level and the next Mesh LOD level, and then renders the geometry at that position.",328],["\n Note: The Speed Tree mode is only used for blending between two Mesh LOD levels: that is, when both current and next LOD levels have a Mesh Renderer. When transitioning to a Billboard LOD level or when fading out entirely, Unity performs Cross Fade-style blending.\n",328],["Blend Factors in Shader code",328],["Unity doesn't provide a default built-in technique to blend LOD geometries. You need to implement your own technique according to your game type and Asset production pipeline.",328],["Unity calculates a blend factor from the GameObject's screen size and passes it to your shader in the unity_LODFade.x uniform variable. Depending on the Fade Mode you choose, use either the LOD_FADE_PERCENTAGE or LOD_FADE_CROSSFADE keyword for GameObjects rendered with LOD fading.",328],["For time-based (animated) transitions, you can set the exact duration of the transition globally for every LOD level with the LODGroup.crossFadeAnimationDuration member.",328],["For information on LOD naming conventions, see Level of Detail.",328],["",328],["2018-02-08 ",328],["LODGroup",328],["Look At Constraints",329],["A Look At Constraint rotates a GameObject to face its source GameObjects. You typically apply the Look At Constraint on a Camera to follow around one or more GameObjects. In addition, if you import a Target Camera, Unity creates a camera with a Look At Constraint using the target object as the source.",329],["Look At is a simplified version of the Aim Constraint. Whereas the Aim Constraint allows you to choose which axis will follow the constraining GameObject, the Look At Constraint always follows the z-axis.",329],["You can specify the upward direction for the Look At Constraint by setting it to another GameObject's y-axis, or you can specify a roll, which is a rotation around the z-axis (your aiming axis).",329],["Properties",329],["Property Function ",329],["Is Active Enable this option to evaluate the Constraint. To also apply the Constraint, enable the Lock property. ",329],["Weight Set the strength of the Constraint. Valid values range from 0 (the Constraint has no effect) to 1 (this GameObject rotates at the same rate as its source GameObjects move). This weight value affects all source GameObjects equally, but you can also change the weight on each GameObject individually in the Sources list. ",329],["Use Up Object Enable this option to set this GameObject's up vector to the y-axis of the World Up Object. If you disable this option, the up vector is set to the Roll value instead. A GameObject's up vector establishes which direction is up. ",329],["Roll Set the rotation angle in degrees along the z-axis to use for this GameObject's up vector (upward direction). Only available when Use Up Object is disabled. ",329],["World Up Object Set a reference to the GameObject you want to use as the up vector reference. When set, the y-axis of this up vector GameObject becomes the upward direction for the constrained GameObject. Only available when Use Up Object is enabled. ",329],["Constraint Settings ",329],["Lock Enable this option to let the Constraint rotate the GameObject (apply the Constraint). If you disable this option, you can modify the GameObject's rotation, the Rotation At Rest, and Rotation Offset properties. When you are satisfied with your changes, check Lock to let the Constraint control this GameObject. This property has no effect in Play Mode. ",329],["Rotation At Rest Set the orientation of the constrained GameObject when resting in X, Y, and Z. A GameObject is resting when the total weights, including the individual weights of all sources, add up to 0. To modify this property, disable the Lock. ",329],["Rotation Offset Set an offset from the constrained orientation (the rotation calculated by the Constraint) in X, Y, and Z. To modify this property, disable the Lock. ",329],["Sources The list of GameObjects that constrain this GameObject. Unity evaluates source GameObjects in the order that they appear in this list. The order affects how this Constraint rotates the constrained GameObject because of the way that rotations accumulate. To get the result you want, drag and drop items in this list. Different orders lead to different results. Each entry in the list contains a reference to a GameObject and its weight (that is, influence in the Constraint). Unity calculates the average of the source GameObjects in this list, and you can adjust the influence by changing the weights for each source. For example, if you have two sources (a cube and a sphere) and you want to concentrate the camera more on the sphere, you can set the sphere's weight to 1 (the maximum) and the cube's weight to 0.5. ",329],["LookAtConstraint",329],["Material Inspector reference",330],["You can view and edit a Material asset in the Inspector window.",330],["The Material Inspector makes it possible to do the following things:",330],["Modify a Material or Material Variant's Properties",330],["Identify and change its relationships with other Materials and Material Variant",330],["Copy and paste its Property settings",330],["Associate it with a shader or lightmap atlas",330],["See Materials introduction to learn more about Materials.",330],["Material controls in the Inspector",330],["A: Inspector Controls",330],["B: Material Controls",330],["C: Material Hierarchy ",330],["Settings",330],["Click Material Controls to open the selected Material's Settings menu.",330],["Setting Function ",330],["",330],["Select Shader Move focus to this shader asset in the Project window. This can aid navigation in a Project with many Assets. ",330],["Edit Shader Open the source file for the shader asset that this Material uses. ",330],["Select Material Move focus to this Material asset in the Project window. This can aid navigation in a Project with many Assets. ",330],["Flatten Material Variant Convert this Material Variant to a Material and retain its Property values. Only available when the selected Material is a Variant. ",330],["Copy Material Properties Copy Material Property values so that you can copy them to other Materials. ",330],["Paste Material Properties Paste Material Property values into this Material from the computer's clipboard. Only available when there are Property Values in the clipboard. ",330],["Create Material Preset Create a duplicate of this Material's Property settings. See Presets for more information. By default, Unity creates the duplicate in the same asset directory as this Material. ",330],["Copy Atlas Copy the font atlas to the keyboard. Only for Text Mesh Pro Materials. ",330],["Paste Atlas Paste a Text Mesh Pro font atlas into this Material. ",330],["Reset Reset all Material properties to the default values specified by the shader associated with this Material. ",330],["Advanced Options",330],["The properties the Unity Editor displays for a Material depend on the Material Properties defined by the shader that this Material uses. However, all Materials share three Advanced Options.",330],["Advanced Options Function ",330],["Render Queue Select a Render Queue. The Material's shader determines the default Render Queue value. Corresponds to the Material.renderQueue property. ",330],["Enable GPU Instancing Optimize draw calls for meshes that use this Material. See GPU Instancing for more information. ",330],["Double Sided Global Illumination Instruct the Progressive Lightmappers to consider backfaces in global illumination calculations. When this option is active, back-facing polygons bounce light using the same emission and albedo values as front-facing polygons. Note: The appearance of back-facing polygons does not change when you enable this option because this option does not cause Unity to render back-facing polygons or add them to lightmaps.Corresponds to the Material.doubleSidedGI property. ",330],["Additional resources",330],["Material",330],["Mathf",331],["Unity's Mathf class provides a collection of common math functions, including trigonometric, logarithmic, and other functions commonly required in games and app development.",331],["This page provides an overview of the Mathf class and its common uses when scripting with it. For an exhaustive reference of every member of the Mathf class, see the Mathf script reference.",331],["Trigonometric",331],["All Unity's trigonometry functions work in radians.",331],["\nSin\n",331],["\nCos\n",331],["\nTan\n",331],["\nAsin\n",331],["\nAcos\n",331],["\nAtan\n",331],["\nAtan2\n",331],["PI is available as a constant, and you can multiply by the static values Rad2Deg or Deg2Rad to convert between radians and degrees.",331],["Powers and Square Roots",331],["Unity provides the common power and square root functions you would expect:",331],["\nPow\n",331],["\nSqrt\n",331],["\nExp\n",331],["As well as some useful power-of-two related functions. These are useful when working with common binary data sizes, which are often constrained or optimized to power-of-two values (such as texture dimensions):",331],["\nClosestPowerOfTwo\n",331],["\nNextPowerOfTwo\n",331],["\nIsPowerOfTwo\n",331],["Interpolation",331],["Unity's interpolation functions allows you to calculate a value that is some way between two given points. Each of these functions behaves in a different way, suitable for different situations. See the examples in each for more information:",331],["\nLerp\n",331],["\nLerpAngle\n",331],["\nLerpUnclamped\n",331],["\nInverseLerp\n",331],["\nMoveTowards\n",331],["\nMoveTowardsAngle\n",331],["\nSmoothDamp\n",331],["\nSmoothDampAngle\n",331],["\nSmoothStep\n",331],["Note that the Vector classes and the Quaternion class all have their own interpolation functions (such as Quaternion.Lerp) which allow you to interpolate positions, directions and rotations in multiple dimensions.",331],["Limiting and repeating values",331],["These simple helper functions are often useful in games or apps and can save you time when you need to limit values to a certain range or repeat them within a certain range.",331],["\nMax and Min\n",331],["\nRepeat and PingPong\n",331],["\nClamp and Clamp01\n",331],["\nCeil and Floor\n",331],["Logarithmic",331],["The Log function allows you to calculate the logarithm of a specified number, either the natural logarithm or in a specified base. Additionally the Log10 function returns the base-10 logarithm of the specified number.",331],["Other functions",331],["For the full list of functions in the Mathf class, see the Mathf script reference.",331],["Mathf",331],["Mesh asset",332],["A mesh asset represents a mesh in your Unity project.",332],["Usually, Unity creates mesh assets when it imports model, but you can also create mesh assets directly in Unity; for example, by creating a mesh with code and saving the results as an asset.",332],["Mesh Inspector reference",332],["Select a mesh asset in the Project window to open the Mesh Inspector. This Inspector displays information about the mesh, such as the total number of vertices or the names of any blend shapes the mesh has. It also displays a visual preview of the mesh.",332],["Mesh information",332],["The Mesh Inspector displays information about how the mesh asset stores its data, but not the values in the data itself. For example, the Inspector shows that Unity stores the value for Position as a set of three Float32 values for each vertex, but it doesn’t show the Position value of a specific vertex.",332],["Property Description ",332],["",332],["Vertices The total number of vertices in the mesh, and how much on-disk storage and runtime memory Unity uses to store the vertex data for the mesh. For each vertex attribute, Unity shows how much on-disk storage and runtime memory Unity uses to store that attribute, and the data type that Unity uses for it.For more information about this data, see Mesh data. For information about how Unity can compress data in a mesh, see the Compressing mesh data. ",332],["Indices The total number of indices in the mesh, how much on-disk storage and runtime memory Unity uses to store this data, and information about the indices for each sub-mesh.For more information about this data, see Mesh data. ",332],["Skin This section is only visible on a skinned mesh.For more information about this data, see Mesh data. ",332],["BlendWeight How many bones can affect a vertex. ",332],["BlendIndices The indices of the bones that affect skinned vertices. ",332],["Blend Shapes The total number of blend shapes in your mesh and lists their names. The number of frames next to each blend shape describes how many key frames each one has. ",332],["Other Shows additional information. ",332],["Bounds Center A bounding box describes where the outermost edges of a mesh lie. The “Bounds Center” stores the location of the center of the mesh’s bounding box. ",332],["Bounds Size Each value represents the length of the bounding box edges in X, Y and Z directions. ",332],["Read/Write Enabled The value of the Mesh.isReadable property, which determines whether Unity can access and modify certain mesh data at runtime.You can set this value with the Read/Write Enabled checkbox in the Model Import Settings window. ",332],["Mesh preview",332],["This part of the Inspector allows you to preview the appearance of a mesh and explore the mesh data in a visual way.",332],["You can use the following mouse and keyboard controls to navigate the mesh view:",332],["Rotate the view: left-click and drag.",332],["Rotate the light source: right-click and drag. A light source is present only in the “Shaded” and “Blendshapes” views.",332],["Pan the camera: middle-click and drag.",332],["Zoom the camera in and out: scroll the mouse wheel.",332],["Reset the zoom and pan settings: hover the mouse cursor inside the preview and press the “F” key. This does not reset the rotation.",332],["The “UV Layout” view displays the UV map of your mesh as a 2D image. Unity disables rotation in this view. To pan the camera, click and drag any of the left, right, or middle mouse buttons.",332],["You can use the following properties in the UI to configure the view:",332],["Property Description ",332],["",332],["View mode Provides different ways of visualizing the mesh. ",332],["Shaded Provides a visualization of the mesh with a basic light. This is the default view. For more information, see Shaded view. ",332],["UV Checker Applies a checkerboard texture to the mesh to visualize how the mesh’s UV map applies textures. For more information, see UV Checker view ",332],["UV Layout Displays how the vertices of the mesh are organized in the unwrapped UV map. This view disables the Wireframe toggle. For more information, see UV Layout view ",332],["Vertex Color Visualizes any vertex colors that the vertices in this mesh have. If no vertices have a vertex color, this menu item is disabled. For more information, see Vertex Color view ",332],["Normals Visualizes the relative directions of the normals in the mesh with color. For more information, see Normals view ",332],["Tangents Visualizes the tangent data in the mesh with color. For more information, see Tangents view ",332],["Blendshapes Lets you preview blend shape deformations to the mesh. If the mesh has no blend shapes, this menu item is disabled. For more information, see Blendshapes view ",332],["Wireframe Not available in UV Layout mode.If enabled, the preview displays a visualisation of the vertices and edges. Otherwise, it doesn’t. ",332],["Channel picker Only available in UV Checker mode.This drop-down menu allows you to change which UV channel the preview displays. If the mesh only uses one UV channel, then only “Channel 0” is enabled. ",332],["Texture size Only available in UV Checker mode.This slider allows you to change the size of the checkered texture on the mesh’s UV map. ",332],["Blend shape picker Only available in Blendshapes mode.This drop-down allows you to change the blend shape that Unity visualizes in the mesh preview. When you select a different blend shape, Unity no longer applies the previous blend shape to the mesh preview. ",332],["Each view displays the following data about the mesh underneath the preview of the mesh:",332],["The name of the mesh.",332],["The number of vertices in the mesh.",332],["The type and number of faces in the mesh. Most meshes use triangles to define faces.",332],["The number of blend shapes in the mesh, if any.",332],["The number of sub-meshes in the mesh, if there is more than one.",332],["The names of all UV maps in the mesh.",332],["For skinned meshes, the name of the skin weights property.",332],["",332],["Shaded view",332],["The Shaded view provides a visualization of the mesh with a basic light. When you import a mesh from a 3D modelling application, Unity separates the mesh into sub-meshes for each material on the mesh. Unity applies a different color to each sub-mesh in this view. You can find the legend for these colors under the Indices section of the Mesh Inspector. The following screenshot shows an example of this legend for a mesh with three sub-meshes, with the wireframe setting enabled.",332],["",332],["UV Checker view",332],["This view applies a checkerboard texture to the mesh to visualize how the mesh’s UV map applies textures. It also adds another dropdown menu next to the view picker menu. In the above screenshot, this new menu displays “Channel 0”. This dropdown allows you to check different UV channels when your UV map uses more than one channel.",332],["To change the size of the checkerboard texture in this view, use the slider next to the channel picker dropdown menu. Changes to this slider don’t affect the settings in your UV map, only the texture size within this view. Use the slider to explore how different texture sizes look on the mesh.",332],["",332],["UV Layout view",332],["The UV Layout view view displays how the vertices of your mesh are organized in the unwrapped UV map. The wireframe toggle isn’t active in this view, because it already deals with vertices. Unity disables all camera controls except camera pan and zoom in this view.",332],["By default, the UV Layout view displays the 0..1 UV range. You can access different UV channels with the channel picker dropdown menu.",332],["",332],["Vertex Color view",332],["The Vertex Color view displays vertex colors in your mesh. Vertex colors are separate from any Materials the mesh has. For more information on vertex colors, see Mesh.colors.",332],["",332],["Normals view",332],["The Normals view uses color to visualize which direction the normals in the mesh face. The direction of a normal vector affects how light interacts with that part of the mesh.",332],["",332],["Tangents view",332],["The Tangents view uses color to visualize tangent data in the mesh. Unity uses tangents as part of the workflow for bump-mapped Shaders.",332],["",332],["Blendshapes view",332],["The Blendshapes view applies blend shape deformations to your mesh and displays the result in the preview window. You can preview one blend shape at a time; the view shows each blend shape at its highest value. This means that a preview of a blend shape that curves a character’s smile, for example, displays the curve at its maximum.",332],["This view adds a new dropdown menu to select a blend shape next to the view picker dropdown. The dropdown menu lists all blend shapes in the current mesh. If the list cannot fit into a single screen, use the arrows at the top and bottom of the list to navigate through the full list.",332],["Mesh",332],["Mesh Collider component reference",333],["The Mesh Collider takes a Mesh Asset and builds its Collider based on that Mesh. It is more accurate for collision detection than using primitives for complicated Meshes. Mesh Colliders that are marked as Convex can collide with other Mesh Colliders.",333],["Properties",333],["Property Function ",333],["Convex Enable the checkbox to make the Mesh Collider collide with other Mesh Colliders. Convex Mesh Colliders are limited to 255 triangles. ",333],["Is Trigger Enable this checkbox to make Unity use this Collider for triggering events, and the physics engine ignore it. ",333],["Cooking Options Enable or disable the Mesh cooking options that affect how the physics engine processes Meshes. ",333],["None Disables all of the Cooking Options listed below. ",333],["Everything Enables all of the Cooking Options listed below. ",333],["Cook for Faster Simulation Makes the physics engine cook Meshes for faster simulation. When enabled, this runs some extra steps to guarantee the resulting Mesh is optimal for run-time performance. This affects the performance of the physics queries and contacts generation. When this setting is disabled, the physics engine uses a faster cooking time instead, and produces results as fast as possible. Consequently, the cooked Mesh Collider might not be optimal. ",333],["Enable Mesh Cleaning Makes the physics engine clean Meshes. When enabled, the cooking process tries to eliminate degenerate triangles of the Mesh, as well as other geometrical artifacts. This results in a Mesh that is better suited for use in collision detection and tends to produce more accurate hit points. ",333],["Weld Colocated Vertices Makes the physics engine remove equal vertices in the Meshes. When enabled, the physics engine combines the vertices that have the same position. This is important for the collision feedback that happens at run time. ",333],["Use Fast Midphase Makes the physics engine use the fastest mid-phase acceleration structure and algorithm available for your output platform. When you enable this option, the physics engine uses a faster algorithm that doesn't require any R-Trees for spatial access. If you encounter mid-phase issues at runtime on some platform, you can still disable this option to use the slower legacy mid-phase algorithm instead. ",333],["Material Reference to the Physics Material that determines how this Collider interacts with others. ",333],["Mesh Reference to the Mesh to use for collisions. ",333],["Details",333],["The Mesh Collider builds its collision representation from the Mesh attached to the GameObject, and reads the properties of the attached Transform to set its position and scale correctly. The benefit of this is that you can make the shape of the Collider exactly the same as the shape of the visible Mesh for the GameObject, which creates more precise and authentic collisions. However, this precision comes with a higher processing overhead than collisions involving primitive colliders (such as Sphere, Box, and Capsule), so it is best to use Mesh Colliders sparingly.",333],["Faces in collision meshes are one-sided. This means GameObjects can pass through them from one direction, but collide with them from the other.",333],["Details about underlying algorithms and data structures used by mesh colliders can be found at PhysX documentation.",333],["",333],["Mesh cooking",333],["Mesh cooking changes a normal Mesh into a Mesh that you can use in the physics engine. Cooking builds the spatial search structures for the physics queries, such as Physics.Raycast, as well as supporting structures for the contacts generation. Unity cooks all Meshes before using them in collision detection. This can happen at import time (Import Settings > Model > Generate Colliders) or at run time.",333],["When you generate Meshes at run time (for example, for procedural surfaces), it's useful to set the Cooking Options to produce results faster, and disable the additional data cleaning steps of cleaning. The downside is that you need to generate no degenerate triangles and no co-located vertices, but the cooking works faster.",333],["If you disable Enable Mesh Cleaning or Weld Colocated Vertices, you need to ensure you aren't using data that those algorithms would otherwise filter. Make sure you don't have any co-located vertices if you have disabled Weld Colocated Vertices, and when you enable Enable Mesh Cleaning, make sure there are no tiny triangles whose area is close to zero, no thin triangles, and no huge triangles whose area is close to infinity.",333],["Note**: When you set the Cooking Options to any other value than the default settings, it means the Mesh Collider must use a Mesh that has an isReadable value of true.",333],["Limitations",333],["There are some limitations when using the Mesh Collider:",333],["GameObjects that have a Rigidbody component only support Mesh Colliders that have Convex option enabled: the physics engine can only simulate convex mesh colliders.",333],["For a Mesh Collider to work properly, the Mesh must be read/write enabled in any of these circumstances:",333],["The Mesh Collider's Transform has negative scaling (for example, (–1, 1, 1)) and the Mesh is convex.",333],["The Mesh Collider's transform is skewed or sheared (for example, when a rotated transform has a scaled parent transform).",333],["The Mesh Collider's Cooking Options flags are set to any value other than the default.",333],["You should not modify mesh geometry that is used for colliders because the physics engine has to rebuild an internal mesh collision acceleration structure every time you change the mesh. This causes a substantial performance overhead. For meshes that need to collide and change at runtime, it is often better to approximate the mesh shape with primitive colliders like capsules, spheres and boxes.",333],["Optimization tip: If a Mesh Collider only uses a Mesh, you can disable Normals in Import Settings, because the physics system doesn’t need them.",333],["Updated Mesh Collider limitations in 2018.3",333],["2018-10-12 ",333],["Mesh Cooking Options added in 2017.3 NewIn20173",333],["Updated functionality in 2018.1",333],["Updated limitations relating to read/write enabled setting in 2017.3",333],["Inflate Convex Mesh deprecated in 2018.3 because the new convex hull computation algorithm (Quickhull) is more tolerant towards imperfections in the input mesh.",333],["MeshCollider",333],["Mesh Filter component",334],["A Mesh Filter component holds a reference to a mesh. It works with a Mesh Renderer component on the same GameObject; the Mesh Renderer renders the mesh that the Mesh Filter references.",334],["To render a deformable mesh, use a Skinned Mesh Renderer instead. A Skinned Mesh Renderer component does not need a Mesh Filter component.",334],["Mesh Filter Inspector reference",334],["Property: Function: ",334],["Mesh A reference to a mesh asset.To change the mesh asset that the Mesh Filter component references, use the picker (circle icon) next to the mesh’s name.Note: The settings for other components on this GameObject don’t change when you change the mesh that the Mesh Filter references. For example, a Mesh Renderer doesn't update its settings, which might cause Unity to render the mesh with unexpected properties. If this happens, adjust the settings of the other components as needed.Corresponds to the MeshFilter.mesh property. ",334],["MeshFilter",334],["Mesh Renderer component",335],["A Mesh Renderer component renders a mesh. It works with a Mesh Filter component on the same GameObject; the Mesh Renderer renders the mesh that the Mesh Filter references.",335],["To render a deformable mesh, use a Skinned Mesh Renderer instead.",335],["In C# code, the MeshRenderer class represents a Mesh Renderer component. The MeshRenderer class inherits much of its functionality from the Renderer class. As such, this component has a lot in common with other components that inherit from Renderer, such as Line Renderer, and Trail Renderer.",335],["Mesh Renderer Inspector reference",335],["A: Materials",335],["B: Lighting",335],["C: Lightmapping",335],["D: Probes",335],["E: Additional Settings",335],["",335],["Materials",335],["The Materials section lists all the materials that this component uses.",335],["",335],["",335],["",335],["Property",335],["Description",335],["",335],["",335],[" ",335],["",335],["Note:** If there are more materials than there are sub-meshes, Unity renders the last sub-mesh with each of the remaining materials, one on top of the next. If the materials are not fully opaque, you can layer different materials and create interesting visual effects. However, fully opaque materials overwrite previous layers, so any additional opaque materials that Unity applies to the last sub-mesh negatively affect performance and produce no benefit.",335],["",335],["Lighting",335],["The Lighting section contains properties that relate to lighting.",335],["",335],["",335],["",335],["Property",335],["Description",335],["",335],["",335],[" ",335],["",335],["",335],["Lightmapping",335],["The Lightmapping section contains properties relating to baked and real-time lightmaps.",335],["This section is visible only if only if Receive Global Illumination is set to Lightmaps.",335],["Property: Function: ",335],["Scale in Lightmap Specify the relative size of the Renderer's UVs within a lightmap.A value of 0 results in the Renderer not being lightmapped, but it still contributes to lighting other Renderers in the Scene. A value greater than 1.0 increases the number of pixels (the lightmap resolution) used for this Renderer, while a value less than 1.0 decreases it.You can use this property to optimize lightmaps so that important and detailed areas are more accurately lit. For example, an isolated building with flat, dark walls uses a low lightmap scale (less than 1.0) while a collection of colourful motorcycles displayed close together requires a high scale value.This property corresponds to the MeshRenderer.scaleInLightmap API. ",335],["Stitch Seams Enable Lightmap seam stitching for this Renderer.This property corresponds to the MeshRenderer.stitchLightmapSeams API. ",335],["Lightmap Parameters Choose or create a Lightmap Parameters asset for this Renderer. ",335],["Optimize Realtime UVs Determine whether Unity merges the real-time lightmap UVs for this Renderer.This property is visible only if your Project uses the Built-in Render Pipeline, and Enlighten Realtime Global Illumination is enabled in your scene. ",335],["Max Distance Specify the maximum worldspace distance for UV chart simplification in real-time lightmaps. If charts are within this distance, Unity simplifies them.This property is visible only if your Project uses the Built-in Render Pipeline, and Enlighten Realtime Global Illumination is enabled in your scene. ",335],["Max Angle Specify the maximum angle in degrees between faces sharing a UV edge in real-time lightmaps. If the angle between the faces is below this value, Unity simplifies the UV charts.This property is visible only if your Project uses the Built-in Render Pipeline, and Enlighten Realtime Global Illumination is enabled in your scene. ",335],["Ignore Normals Enable this option to prevent Unity from splitting the UV charts in real-time lightmaps.This property is visible only if your Project uses the Built-in Render Pipeline, and Enlighten Realtime Global Illumination is enabled in your scene. ",335],["Min Chart Size Specify the minimum texel size used for a UV chart in real-time lightmaps. If stitching is required, a value of 4 creates a chart of 4x4 texels to store lighting and directionality. If stitching is not required, a value of 2 reduces the texel density and provides better lighting build times and game performance.This property is visible only if your Project uses the Built-in Render Pipeline, and Enlighten Realtime Global Illumination is enabled in your scene. ",335],["When you’ve baked your lighting data (menu: Window > Rendering > Lighting > Generate Lighting ), this section also shows the baked lightmaps and real-time lightmaps in the current scene that this Renderer uses.",335],["",335],["Probes",335],["The Probes section contains properties relating to Light Probe and Reflection Probes.",335],["",335],["",335],["",335],["Property",335],["Description",335],["",335],["",335],[" ",335],["",335],["",335],["Additional Settings",335],["The Additional Settings section contains additional properties.",335],["",335],["",335],["",335],["Property",335],["Description",335],["",335],["",335],[" ",335],["",335],["MeshRenderer",335],["Microphone",336],["The Microphone class is useful for capturing input from a built-in (physical) microphone on your PC or mobile device.",336],["With this class, you can start and end a recording from a built-in microphone, get a listing of available audio input devices (microphones), and find out the status of each such input device.",336],["There is no component for the Microphone class but you can access it from a script. See the Microphone page in the Scripting Reference for further information.",336],["Microphone",336],["MonoBehaviour",337],["The MonoBehaviour class is the base class from which every Unity script derives, by default. When you create a C# script from Unity's project window, it automatically inherits from MonoBehaviour, and provides you with a template script. See Creating and Using scripts for more information on this.",337],["The MonoBehaviour class provides the framework which allows you to attach your script to a GameObject in the editor, as well as providing hooks into useful Events such as Start and Update.",337],["For a complete reference of every member of the MonoBehaviour class, and its technical details, see the MonoBehaviour script reference.",337],["The script inspector",337],["When you select a script in the Project window, the Inspector displays some basic information about that script asset, including the name of the assembly it belongs to, and a preview of the contents of the script.",337],["Note:** Although the Inspector displays the contents of the script, you can't edit the script in the Inspector window.",337],["The script inspector also displays two buttons, Open and Execution Order.",337],["The Open button opens the script in the currently configured External Script Editor (also known as an Integrated Development Environment, or IDE). The Open button performs the same function as double-clicking the script in the Project window. You can configure which external editor Unity uses to open your scripts in the External Tools section of the Preferences window.",337],["The Execution Order button opens the Script Execution Order section of the Project Settings window, which allows you to alter the the order in which Unity executes your scripts.",337],["",337],["Default object references",337],["If you define public Object fields that can be assigned in the Editor in your MonoBehaviour script, you can set up default references for these fields. The default reference fields are visible in the inspector when you select the script asset in the Project window.",337],["In the example above, there are three public Audio Clip fields, without default references assigned. You could assign audio clips to each of the AudioClip default reference fields.",337],["If you assign default references, they are applied when you add your MonoBehaviour as a component to a GameObject, or when you reset an existing instance of your MonoBehaviour on a GameObject to its default values.",337],["Note:** There is no ongoing link between the references on MonoBehaviour instances on GameObjects and the default references. This means if you change the default references, they are not automatically updated on existing GameObjects.",337],["Other types of inspector-editable fields that do not inherit from UnityEngine.Object (for example, public string or int fields) do not have default fields in the inspector. Instead, they take their default values from the script itself.",337],["Coroutines",337],["The MonoBehaviour class allows you to start, stop, and manage Coroutines, which are a way to write asynchronous code which can include waiting for a certain amount of time, or for certain actions to complete, while allowing other code to continue executing.",337],["For more information about coroutines, see the Coroutines manual page and the StartCoroutine method script reference.",337],["Events",337],["The MonoBehaviour class provides access to a large collection of event messages, which allows you to execute your code based on what is currently happening in your project. Here are a few of the more common examples. For a list of them all, see the Messages section on the MonoBehaviour script reference page",337],["Start - called when the GameObject begins to exist (either when the Scene is loaded, or the GameObject is instantiated).",337],["Update - called every frame.",337],["FixedUpdate - called every physics timestep.",337],["OnBecameVisible and OnBecameInvisible - called when a GameObject's renderer enters or leaves a camera's view.",337],["OnCollisionEnter and OnTriggerEnter - called when physics collisions or triggers occur.",337],["OnDestroy - called when the GameObject is destroyed.",337],["Script Execution Order settings",338],["Use the Script Execution Order settings to specify the relative order that Unity invokes the event functions of different MonoBehaviour classes. For example, you can specify that Unity should run the event functions of your Rotation MonoBehaviour script before it runs those of your MoveForward MonoBehaviour script.",338],["The order applies to each category of event function separately, so Unity calls any Awake functions it needs to invoke during a frame in the specified order and, later, calls any Update functions of active GameObjects in the same order.",338],["You can adjust the script execution order in the Project Settings Inspector. Go to menu: Edit > Project Settings, and then select the Script Execution Order category.",338],["Note:** If you assign multiple script types to multiple GameObjects, the script execution order specifies that all scripts of one type are executed before all scripts of another type, regardless of which GameObject they are attached to.",338],["Use the Plus (+) button to add scripts to the settings Inspector window and select the class name. To remove a script, use the Minus (-) button located to the right of each item in the list.",338],["To specify the execution order, drag items in the list into the desired position or edit the order numbers of a class in the list. The assigned numbers express the relative order. Unity executes the list from top to bottom (from scripts with more negative order numbers to those with higher positive numbers). Unity executes any scripts not in the list during the Default Time slot, which occurs after any scripts with negative order numbers and before any scripts with positive order numbers.",338],["The order numbers are arbitrary and do not represent any physical quantity. The Editor stores these values in the script metadata files. You can leave gaps between order numbers to help avoid extraneous file changes when you add or move other scripts in the list.",338],["Note:** The execution order specified in this settings window does not affect the order of functions marked with the RuntimeInitializeOnLoadMethod attribute. (You cannot specify an order for runtime initialization.)",338],["See Order of Execution for Event Functions for information about when Unity invokes each of the different categories of event functions in a frame.",338],["MonoManager",338],["Movie Textures",339],["Note:** MovieTexture is due to be deprecated in a future version of Unity. You should use VideoPlayer for video download and movie playback.",339],["Movie Textures are animated Textures that Unity creates from a video file.",339],["To create a Movie Texture, place a video file in your project's Assets Folder. Unity uses this video file in the same way as a regular Texture.",339],["Unity imports video files using Apple QuickTime. On Windows, you need to install Quicktime to import a video file. Download Quicktime from Apple Support Downloads. Unity supports the same file types as your QuickTime installation (usually .mov, .mpg, .mpeg, .mp4, .avi, .asf).",339],["Properties",339],["The Movie Texture Inspector is similar to the Texture Inspector:",339],["Property Function ",339],["Aniso Level Increases Texture quality when viewing the texture at a steep angle. Good for floor and ground textures ",339],["Filtering Mode Selects how the Texture is filtered when it gets stretched by 3D transformations ",339],["Loop If enabled, the movie will loop when it finishes playing ",339],["Quality Compression of the Ogg Theora video file. A higher value means higher quality, but larger file size ",339],["Details",339],["When you add a video file to your Project, Unity automatically imports it and converts it to Ogg Theora format. Once Unity has imported your Movie Texture, you can attach it to any GameObject or Material in the same way as a regular Texture.",339],["Playing the Movie",339],["Your Movie Texture will not play automatically when the game begins running. You must use a short script to tell it when to play.",339],["// this line of code will make the Movie Texture begin playing",339],["((MovieTexture)GetComponent().material.mainTexture).Play();",339],["Attach the following script to toggle Movie playback when the space bar is pressed:",339],["public class PlayMovieOnSpace : MonoBehaviour {",339],["void Update () {",339],["if (Input.GetButtonDown (\"Jump\")) {",339],["Renderer r = GetComponent();",339],["MovieTexture movie = (MovieTexture)r.material.mainTexture;",339],["if (movie.isPlaying) {",339],["movie.Pause();",339],["else {",339],["movie.Play();",339],["For more information about playing Movie Textures, see the Movie Texture Script Reference page",339],["Movie Audio",339],["When you import a Movie Texture, Unity also imports the accompanying audio track. This audio appears as an AudioClip child of the Movie Texture.",339],["To play this audio, the Audio Clip must be attached to a GameObject. Drag the Audio Clip from the Project View onto any GameObject in the Scene or Hierarchy View. Usually, this will be the same GameObject that is showing the Movie. Then use AudioSource.Play() to make the the movie's audio track play along with its video.",339],["iOS",339],["Movie Textures are not supported on iOS. Instead, full-screen streaming playback is provided using Handheld.PlayFullScreenMovie.",339],["Keep your videos inside the StreamingAssets folder located in the Assets folder of your project.",339],["Unity iOS supports any movie file types that play correctly on an iOS device, implying files with the extensions .mov, .mp4, .mpv, and .3gp and using one of the following compression standards:",339],["H.264 Baseline Profile Level 3.0 video",339],["MPEG-4 Part 2 video",339],["For more information about supported compression standards, consult the iPhone SDK MPMoviePlayerController Class Reference.",339],["As soon as you call Handheld.PlayFullScreenMovie the screen fades from your current content to the designated background color. It might take some time before the movie is ready to play. In the meantime, the player continues displaying the background color and may also display a progress indicator to let the user know the movie is loading. When playback finishes, the screen fades back to your content.",339],["The video player does not respect switching to mute while playing videos",339],["Unity plays video files using Apple's embedded player (as of SDK 3.2 and iPhone OS 3.1.2 and earlier). This contains a bug that prevents Unity from switching to mute.",339],["The video player does not respect the device's orientation",339],["The Apple video player and iPhone SDK do not provide a way to adjust the orientation of the video. To fix this, you can manually create two copies of each movie in landscape and portrait orientations. Then, the orientation of the device can be determined before playback so the right version of the movie can be chosen.",339],["Android",339],["Movie Textures are not supported on Android. Instead, full-screen streaming playback is provided using Handheld.PlayFullScreenMovie.",339],["Keep your videos inside the StreamingAssets folder located in the Assets folder of your project.",339],["Unity Android supports any movie file type supported by Android, (ie, files with the extensions .mp4 and .3gp) and using one of the following compression standards:",339],["H.263",339],["H.264 AVC",339],["MPEG-4 SP",339],["However, device vendors are keen on expanding this list, so some Android devices are able to play formats other than those listed, such as HD videos.",339],["For more information about the supported compression standards, consult the Android SDK Core Media Formats documentation.",339],["As soon as you call Handheld.PlayFullScreenMovie the screen fades from your current content to the designated background color. It might take some time before the movie is ready to play. In the meantime, the player continues displaying the background color and may also display a progress indicator to let the user know the movie is loading. When playback finishes, the screen fades back to your content.",339],["MovieTexture",339],["Network Animator",340],["",340],["",340],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",340],["The Network Animator component allows you to synchronize animation states for networked objects. It synchronizes state and parameters from an AnimatorController.",340],["Note that if you create a Network Animator component on an empty GameObject, Unity also creates a Network Identity component and an Animator component on that GameObject.",340],["Property **Function ",340],["Animator Use this field to define the Animator component you want the Network Animator to synchronize with. ",340],["Details",340],["The Network Animator ensures the synchronisation of GameObject animation across the network - meaning that all players see the animation happen at the same. There are two kinds of authority for networked animation:",340],["If the GameObject has authority on the client, you should animate it locally on the client that owns the GameObject. That client sends the animation state information to the server, which broadcasts it to all the other clients. For example, this would be suitable for player characters.",340],["If the GameObject has authority on the server, then you should animate it on the server. The server then sends state information to all clients. This is common for animated GameObjects that are not related to a specific client, such as non-player characters.",340],["The Network Animator synchronizes the animation parameters checked in the Inspector window. It does not automatically synchronize animation triggers. A GameObject with authority can use the function SetTrigger to fire an animation trigger on other clients.",340],["The GetParameterAutoSend and SetParameterAutoSend functions can be used to control which individual animator parameters should be automatically synchronized.",340],["NetworkAnimator",340],["NetworkBehaviour",341],["",341],["",341],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",341],["NetworkBehaviour scripts work with GameObjects that have a Network Identity component. These scripts can perform high-level API functions such as Commands, ClientRPCs, SyncEvents and SyncVars.",341],["With the server-authoritative system of the Unity Network System, the server must use the NetworkServer.Spawn function to spawn GameObjects with Network Identity components. Spawning them this way assigns them a NetworkInstanceId and creates them on clients connected to the server.",341],["Note:** This is not a component that you can add to a GameObject directly. Instead, you must create a script which inherits from NetworkBehaviour (instead of the default MonoBehaviour), then you can add your script as a component to a GameObject.",341],["Properties",341],["Property Description ",341],["isLocalPlayer Returns true if this GameObject is the one that represents the player on the local client. ",341],["isServer Returns true if this GameObject is running on the server, and has been spawned. ",341],["isClient Returns true if this GameObject is on the client and has been spawned by the server. ",341],["hasAuthority Returns true if this GameObject is the authoritative version of the GameObject, meaning it is the source for changes to be synchronized. For most GameObjects, this returns true on the server. However, if the localPlayerAuthority value on the NetworkIdentity is true, the authority rests with that player's client, and this value is true on that client instead of on the server. ",341],["netId The unique network ID of this GameObject. The server assigns this at runtime. It is unique for all GameObjects in that network session. ",341],["playerControllerId The ID of the player associated with this NetworkBehaviour script. This is only valid if the object is a local player. ",341],["connectionToServer The NetworkConnection associated with the Network Identity component attached to this GameObject. This is only valid for player objects on the client. ",341],["connectionToClient The NetworkConnection associated with the Network Identity component attached to this GameObject. This is only valid for player GameObjects on the server. ",341],["localPlayerAuthority This value is set on the Network Identity component and is accessible from the NetworkBehaviour script for convenient access in scripts. ",341],["NetworkBehaviour scripts have the following features:",341],["Synchronized variables",341],["Network callbacks",341],["Server and client functions",341],["Sending commands",341],["Client RPC calls",341],["Networked events",341],["Synchronized variables",341],["You can synchronize member variables of NetworkBehaviour scripts from the server to clients. The server is authoritative in this system, so synchronization only takes place in the direction of server to client.",341],["Use the SyncVar attribute to tag member variables as synchronized. Synchronized variables can be any basic type (bool, byte, sbyte, char, decimal, double, float, int, uint, long, ulong, short, ushort, string), but not classes, lists, or other collections.",341],["public class SpaceShip : NetworkBehaviour",341],["[SyncVar]",341],["public int health;",341],["[SyncVar]",341],["public string playerName;",341],["When the value of a SyncVar changes on the server, the server automatically sends the new value to all ready clients in the game, and updates the corresponding SyncVar values on those clients. When GameObjects spawn, they are created on the client with the latest state of all SyncVar attributes from the server.",341],["Note:** To make a request from a client to the server, you need to use commands, not synchronized variables. See documentation on Sending commands for more information.",341],["Network callbacks",341],["There are built-in callback functions which are invoked on NetworkBehaviour scripts for various network events. These are virtual functions on the base class, so you can override them in your own code like this:",341],["public class SpaceShip : NetworkBehaviour",341],["public override void OnStartServer()",341],["// disable client stuff",341],["public override void OnStartClient()",341],["// register client events, enable effects",341],["The built-in callbacks are:",341],["OnStartServer - called when a GameObject spawns on the server, or when the server is started for GameObjects in the Scene",341],["OnStartClient - called when the GameObject spawns on the client, or when the client connects to a server for GameObjects in the Scene",341],["OnSerialize - called to gather state to send from the server to clients",341],["OnDeSerialize - called to apply state to GameObjects on clients",341],["OnNetworkDestroy - called on clients when the server destroys the GameObject",341],["OnRebuildObservers - called on the server when the set of observers for a GameObjects is rebuilt",341],["OnSetLocalVisibility - called on the client and/or server when the visibility of a GameObject changes for the local client",341],["OnCheckObserver - called on the server to check visibility state for a new client",341],["Note that in a peer-hosted setup, when one of the clients is acting as both host and client, both OnStartServer and OnStartClient are called on the same GameObject. Both these functions are useful for actions that are specific to either the client or server, such as suppressing effects on a server, or setting up client-side events.",341],["Server and Client functions",341],["You can tag member functions in NetworkBehaviour scripts with custom attributes to designate them as server-only or client-only functions. For example:",341],["using UnityEngine;",341],["using UnityEngine.Networking;",341],["public class SimpleSpaceShip : NetworkBehaviour",341],["int health;",341],["[Server]",341],["public void TakeDamage( int amount)",341],["// will only work on server",341],["health -= amount;",341],["[ServerCallback]",341],["void Update()",341],["// engine invoked callback - will only run on server",341],["[Client]",341],["void ShowExplosion()",341],["// will only run on client",341],["[ClientCallback]",341],["void Update()",341],["// engine invoked callback - will only run on client",341],["[Server] and [ServerCallback] return immediately if the client is not active. Likewise, [Client] and [ClientCallback] return immediately if the server is not active.",341],["The [Server] and [Client] attributes are for your own custom callback functions. They do not generate compile time errors, but they do emit a warning log message if called in the wrong scope.",341],["The [ServerCallback] and [ClientCallback] attributes are for built-in callback functions that are called automatically by Unity. These attributes do not cause a warning to be generated.",341],["For more information, see API reference documentation on the attributes discussed:",341],["Sending commands",341],["To execute code on the server, you must use commands. The high-level API is a server-authoritative system, so commands are the only way for a client to trigger some code on the server.",341],["Only player GameObjects can send commands.",341],["When client player GameObject sends a command, that command runs on the corresponding player GameObject on the server. This routing happens automatically, so it is impossible for a client to send a command for a different player.",341],["To define a command in your code, you must write a function which has:",341],["A name that begins with Cmd",341],["The [Command] attribute",341],["For example:",341],["using UnityEngine;",341],["using UnityEngine.Networking;",341],["public class SpaceShip : NetworkBehaviour",341],["bool alive;",341],["float thrusting;",341],["int spin;",341],["[ClientCallback]",341],["void Update()",341],["// This code executes on the client, gathering input",341],["int spin = 0;",341],["if (Input.GetKey(KeyCode.LeftArrow))",341],["spin += 1;",341],["if (Input.GetKey(KeyCode.RightArrow))",341],["spin -= 1;",341],["// This line triggers the code to run on the server",341],["CmdThrust(Input.GetAxis(\"Vertical\"), spin);",341],["[Command]",341],["public void CmdThrust(float thrusting, int spin)",341],["// This code executes on the server after Update() is",341],["// called from below.",341],["if (!alive)",341],["this.thrusting = 0;",341],["this.spin = 0;",341],["return;",341],["this.thrusting = thrusting;",341],["this.spin = spin;",341],["Commands are called just by invoking the function normally on the client. Instead of the command function running on the client, it is automatically invoked on the corresponding player GameObject on the server.",341],["Commands are type-safe, have built-in security and routing to the player, and use an efficient serialization mechanism for the arguments to make calling them fast.",341],["Client RPC calls",341],["Client RPC calls are a way for server GameObjects to make things happen on client GameObjects.",341],["Client RPC calls are not restricted to player GameObjects, and may be called on any GameObject with a Network Identity component.",341],["To define a *client RPC call *in your code, you must write a function which:",341],["Has a name that begins with Rpc",341],["Has the [ClientRPC] attribute",341],["For example:",341],["using UnityEngine;",341],["using UnityEngine.Networking;",341],["public class SpaceShipRpc : NetworkBehaviour",341],["[ServerCallback]",341],["void Update()",341],["// This is code run on the server",341],["int value = UnityEngine.Random.Range(0,100);",341],["if (value < 10)",341],["// This invoke the RpcDoOnClient function on all clients",341],["RpcDoOnClient(value);",341],["[ClientRpc]",341],["public void RpcDoOnClient(int foo)",341],["// This code will run on all clients",341],["Debug.Log(\"OnClient \" + foo);",341],["Networked events",341],["Networked events** are like *Client RPC *calls, but instead of calling a function on the GameObject, they trigger Events instead.",341],["This allows you to write scripts which can register for a callback when an event is triggered.",341],["To define a *Networked event *in your code, you must write a function which both:",341],["Has a name that begins with Event",341],["Has the [SyncEvent] attribute",341],["You can use events to build powerful networked game systems that can be extended by other scripts. This example shows how an effect script on the client can respond to events generated by a combat script on the server.",341],["SyncEvent is the base class that *Commands and ClientRPC *calls are derived from. You can use the SyncEvent attribute on your own functions to make your own event-driven networked gameplay code. Using SyncEvent, you can extend Unity’s Multiplayer features to better fit your own programming patterns. For example:",341],["using UnityEngine;",341],["using UnityEngine.Networking;",341],["// Server script",341],["public class MyCombat : NetworkBehaviour",341],["public delegate void TakeDamageDelegate(int amount);",341],["public delegate void DieDelegate();",341],["public delegate void RespawnDelegate();",341],["float deathTimer;",341],["bool alive;",341],["int health;",341],["[SyncEvent(channel=1)]",341],["public event TakeDamageDelegate EventTakeDamage;",341],["[SyncEvent]",341],["public event DieDelegate EventDie;",341],["[SyncEvent]",341],["public event RespawnDelegate EventRespawn;",341],["[ServerCallback]",341],["void Update()",341],["// Check if it is time to Respawn",341],["if (!alive)",341],["if (Time.time > deathTimer)",341],["Respawn();",341],["return;",341],["[Server]",341],["void Respawn()",341],["alive = true;",341],["// send respawn event to all clients from the Server",341],["EventRespawn();",341],["[Server]",341],["void EventTakeDamage(int amount)",341],["if (!alive)",341],["return;",341],["if (health > amount) {",341],["health -= amount;",341],["else",341],["health = 0;",341],["alive = false;",341],["// send die event to all clients",341],["EventDie();",341],["deathTimer = Time.time + 5.0f;",341],["NetworkBehaviour",341],["NetworkClient",342],["",342],["",342],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",342],["NetworkClient is a high-level API class that manages a network connection from a client to a server, and can send and receive messages between the client and the server. The NetworkClient class also helps to manage spawned network GameObjects, and routing of remote procedure call message and network events.",342],["See the NetworkClient script reference for more information.",342],["Properties",342],["Property: Function: ",342],["serverIP The IP address of the server that this client is connected to. ",342],["serverPort The port of the server that this client is connected to. ",342],["connection The NetworkConnection GameObject this NetworkClient instance is using. ",342],["handlers The set of registered message handler functions. ",342],["numChannels The number of configured NetworkTransport QoS channels. ",342],["isConnected True if the client is connected to a server. ",342],["allClients List of active NetworkClients (static). ",342],["active True if any NetworkClients are active (static). ",342],["NetworkClient",342],["NetworkConnection",343],["",343],["",343],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",343],["NetworkConnection is a high-level API class that encapsulates a network connection. NetworkClient objects have a NetworkConnection, and NetworkServers have multiple connections - one from each client. NetworkConnections have the ability to send byte arrays, or serialized objects as network messages.",343],["Properties",343],["Property: Function: ",343],["hostId The NetworkTransport hostId for this connection. ",343],["connectionId The NetworkTransport connectionId for this connection. ",343],["isReady Flag to control whether state updates are sent to this connection ",343],["lastMessageTime The last time that a message was received on this connection. ",343],["address The IP address of the end-point that this connection is connected to. ",343],["playerControllers The set of players that have been added with AddPlayer(). ",343],["clientOwnedObjects The set of objects that this connection has authority over. ",343],["The NetworkConnection class has virtual functions that are called when data is sent to the transport layer or recieved from the transport layer. These functions allow specialized versions of NetworkConnection to inspect or modify this data, or even route it to different sources. These function are show below, including the default behaviour:",343],["public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId)",343],["HandleBytes(bytes, numBytes, channelId);",343],["public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)",343],["return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);",343],["An example use of these function is to log the contents of incoming and outgoing packets. Below is an example of a DebugConnection class that is derived from NetworkConnection that logs the first 50 bytes of packets to the console. To use a class like this call the SetNetworkConnectionClass() function on a NetworkClient or NetworkServer.",343],["class DebugConnection : NetworkConnection",343],["public override void TransportRecieve(byte[] bytes, int numBytes, int channelId)",343],["StringBuilder msg = new StringBuilder();",343],["for (int i = 0; i < numBytes; i++)",343],["var s = String.Format(\"{0:X2}\", bytes[i]);",343],["msg.Append(s);",343],["if (i > 50) break;",343],["UnityEngine.Debug.Log(\"TransportRecieve h:\" + hostId + \" con:\" + connectionId + \" bytes:\" + numBytes + \" \" + msg);",343],["HandleBytes(bytes, numBytes, channelId);",343],["public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)",343],["StringBuilder msg = new StringBuilder();",343],["for (int i = 0; i < numBytes; i++)",343],["var s = String.Format(\"{0:X2}\", bytes[i]);",343],["msg.Append(s);",343],["if (i > 50) break;",343],["UnityEngine.Debug.Log(\"TransportSend h:\" + hostId + \" con:\" + connectionId + \" bytes:\" + numBytes + \" \" + msg);",343],["return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);",343],["NetworkConnection",343],["Network Discovery",344],["",344],["",344],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",344],["Network Discovery is a component that allows Unity applications using the networking system to find each other on a local network (LAN). This does not allow discovery for internet play. Use the Multiplayer Service (along with MatchMaker and Relay service) to connect to .",344],["The Network Discovery component does not require any integration with Unity services, and is intended as a fully stand-alone solution to finding other games on your local network to connect with.",344],["The Network Discovery component in the Inspector window",344],["Property Function ",344],["Broadcast Port The network port to broadcast on and listen to. ",344],["Broadcast Key The key to broadcast. This should be a unique value to indicate your discovery’s compatibility to other Network Discovery instances. Unique broadcast keys avoid games of different types from trying to connect to each other if they run on the same local network. ",344],["Broadcast Version The major version to include in the broadcast. Use this along with Broadcast SubVersion to indicate version compatibility. ",344],["Broadcast SubVersion The minor version to include in the broadcast. Use this alongside Broadcast Version to indicate version compatibility. ",344],["Broadcast Interval Specify how often Unity should broadcast discovery information, in seconds. ",344],["Use NetworkManager Enable this to use the Network Manager settings for broadcasting, and to then auto-join found games. ",344],["Broadcast Data Enter custom data to include in the broadcast. The Network Manager overrides this if you have enabled Use NetworkManager. ",344],["Show GUI Enable this to show the default broadcast GUI in Play mode. This GUI is only intended for developer testing. ",344],["Offset X The x-axis offset of the broadcast GUI. This setting is only visible if Show GUI is enabled. ",344],["Offset Y The y-axis offset of the broadcast GUI. This setting is only visible if Show GUI is enabled. ",344],["When running in play mode",344],["When running in play mode, the following information is also visible in the inspector:",344],["Property Function ",344],["hostId The host Id being used to broadcast. ",344],["running True if currently broadcasting. ",344],["isServer True if broadcasting as a server. ",344],["isClient True if listening for broadcasts as a client. ",344],["broadcastsReceived A list of broadcast messages received. ",344],["NetworkDiscovery",344],["Network Identity",345],["",345],["",345],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",345],["The Network Identity component is at the heart of the Unity networking high-level API. It controls a GameObject's unique identity on the network, and it uses that identity to make the networking system aware of the GameObject.",345],["Property Function ",345],["Server Only Tick this checkbox to ensure that Unity only spawns the GameObject on the server, and not on clients. ",345],["Local Player Authority Tick this checkbox to give authoritative network control of this GameObject to the client that owns it. The player GameObject on that client has authority over it. Other components such as Network Transform use this to determine which client to treat as the source of authority. ",345],["Instantiated network GameObjects",345],["With the Unity’s server-authoritative networking system, the server must spawn networked GameObjects with network identities, using NetworkServer.Spawn. This automatically creates them on clients that are connected to the server, and assigns them a NetworkInstanceId.",345],["You must put a Network Identity component on any Prefabs that spawn at runtime for the network system to use them.",345],["Scene-based network GameObjects",345],["You can also network GameObjects that are saved as part of your Scene (for example, environmental props). Networking GameObjects makes them behave slightly differently, because you need to have them spawn across the network.",345],["When building your game, Unity disables all Scene-based GameObjects with Network Identity components. When a client connects to the server, the server sends spawn messages to tell the client which Scene GameObjects to enable and what their most up-to-date state information is. This ensures the client’s game does not contain GameObjects at incorrect locations when they start playing, or that Unity does not spawn and immediately destroy GameObjects on connection (for example, if an event removed the GameObject before that client connected).",345],["Network Information in the preview pane",345],["This component contains network tracking information, and displays that information in the preview pane. For example, the scene ID, network ID and asset ID the object has been assigned. This allows you to inspect the information which can be useful for investigation and debugging.",345],["The scene ID is valid in all scene objects with a NetworkIdentity component. The network ID is the ID of this particular object instance. There might be multiple objects instantiated from a particular prefab, and the network ID is used to identity which object a network update should be applied to. The asset ID refers to which source asset the object was instantiated from. This is used internally when a particular GameObject prefab is spawned over the network.",345],["At runtime there is more information to display here (a disabled NetworkBehaviour is displayed non-bold):",345],["Preview Pane Information",345],["Property Description ",345],["assetId This identifies the prefab associated with this object (for spawning). ",345],["clientAuthorityOwner The client that has authority for this object. This will be null if no client has authority. ",345],["connectionToClient The NetworkConnection associated with this NetworkIdentity. This is only valid for player objects on the server. ",345],["connectionToServer The NetworkConnection associated with this NetworkIdentity. This is only valid for player objects on a local client. ",345],["hasAuthority True if this object is the authoritative version of the object. This would mean either on a the server for normal objects, or on the client with localPlayerAuthority. ",345],["isClient True if this object is running on a client. ",345],["isLocalPlayer This returns true if this object is the one that represents the player on the local machine. ",345],["isServer True if this object is running on the server, and has been spawned. ",345],["localPlayerAuthority True if this object is controlled by the client that owns it - the local player object on that client has authority over it. This is used by other components such as NetworkTransform. ",345],["netId A unique identifier for this network session, assigned when spawned. ",345],["observers The list of client NetworkConnections that are able to see this object. This is read-only. ",345],["playerControllerId The identifier of the controller associated with this object. Only valid for player objects. ",345],["SceneId A unique identifier for networked objects in a Scene. This is only populated in play-mode. ",345],["serverOnly A flag to make this object not be spawned on clients. ",345],["NetworkIdentity",345],["Network Lobby Manager",346],["",346],["",346],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",346],["The NetworkLobbyManager is a specialized type of NetworkManager that provides a multiplayer lobby before entering the main play scene of the game. It allows you to set up a network with:",346],["A maximum player limit",346],["Automatic start when all players are ready",346],["Option to prevent players from joining a game in progress",346],["Support for \"Couch Multiplayer\" (i.e. multiple players per client)",346],["Customizable ways for players to choose options while in lobby",346],["There are two types of player objects with the NetworkLobbyManager:",346],["LobbyPlayer Object",346],["One for each player",346],["Created when client connects, or player is added",346],["Persists until client disconnects",346],["Holds ready flag and configuration data",346],["Handles commands in the lobby",346],["should use the NetworkLobbyPlayer component",346],["GamePlayer Object",346],["One for each player",346],["Created when game scene is started",346],["Destroyed when re-entering lobby",346],["Handles commands in the game",346],["Properties",346],["Property: Function: ",346],["showLobbyGUI Show the developer OnGUI controls for the lobby. ",346],["maxPlayers The maximum number of players allowed in the lobby. ",346],["maxPlayersPerConnection The maximum number of players allowed to be added for each client connection. ",346],["lobbyPlayerPrefab The prefab to create for players when they enter the lobby. ",346],["gamePlayerPrefab The prefab to create for players when the game starts. ",346],["lobbyScene The scene to use for the lobby. ",346],["playScene The scene to use for main game play. ",346],["Details",346],["The lobbyPlayerPrefab slot should be filled by an object with the NetworkLobbyPlayer component on it.",346],["There is a GUI for the lobby manager. See the multiplayer-lobby Asset Store package.",346],["Network Lobby Manager",346],["The Network Lobby Manager is a specialized type of NetworkManager that provides an easy-to-use multiplayer lobby before entering the main play scene of the game.",346],["The Network Lobby Manager has many built-in features that are common to multiplayer games. For instance, it supports setting a maximum player limit, automatically starting the game when all players are ready, and an option to prevent players from joining an in-progress game. The Network Lobby Manager also supports \"Couch Multiplayer\" where multiple players are using the same client to play together.",346],["Property: Function: ",346],["Show Lobby GUI Enable this to show the developer GUI controls for the lobby. This is only intended to be used to facilitate developer ease of use. You should create your own UI for players to use in your finished game. ",346],["Max Players The maximum number of players allowed in the lobby. ",346],["Max Players Per Connection The maximum number of players allowed to be added for each client connection. ",346],["Min Players The minimum number of players required by the lobby. ",346],["Lobby Player Prefab The prefab to create for players when they enter the lobby. ",346],["Game Player Prefab The prefab to create for players when the game starts. ",346],["Lobby Scene The scene to use for the lobby. ",346],["Play Scene The scene to use for main game play. ",346],["NetworkLobbyManager",346],["Network Lobby Player",347],["",347],["",347],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",347],["The Network Lobby Player stores per-player state for the Network Lobby Manager while in the lobby. When using this component, you need to write a script which allows players to indicate they are ready to begin playing, which sets the readyToBegin property. See documentation on the Network Lobby Manager for full details on how to use this component.",347],["A GameObject with a Network Lobby Player component must also have a Network Identity component. When you create a Network Lobby Player component on a GameObject, Unity also creates a Network Identity component on that GameObject if it does not already have one.",347],["Property Function ",347],["Show Lobby GUI Enable this to show the developer GUI for players in the lobby. This UI is only intended to be used for ease of development. This is enabled by default. ",347],["Network Channel The network channel used by the Network Lobby Player ",347],["Network Send Interval The rate at which information is sent from the Network Lobby Player to the server. See GetNetworkSendInterval() ",347],["NetworkLobbyPlayer",347],["Network Manager HUD",348],["",348],["",348],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",348],["The Network Manager HUD is a simple and quick way to provide the basic functions that players of your game need in order to host a networked game, or find and join an existing networked game. It displays a collection of simple UI buttons which appear in the Game view when the Editor is in Play mode. It is intended as a helpful short term solution to get you started quickly with making your game. You should replace the UI it provides with your own that better suits your game when you are ready.",348],["For a full guide to using the Network Manager HUD component, and the controls that are displayed at runtime, see Using the Network Manager HUD.",348],["Property Function ",348],["Show Runtime GUI Tick this checkbox to show the Network Manager HUD GUI at run time. This allows you to reveal or hide it for quick debugging. ",348],["GUI Horizontal Offset Set the horizontal pixel offset of the HUD, measured from the left edge of the screen. ",348],["GUI Vertical Offset Set the vertical pixel offset of the HUD, measured from the top edge of the screen. ",348],["Note: the _Network Manager HUD _is designed as a temporary aid to development. It allows you to get your multiplayer game running quickly, but you should replace it with your own UI controls when you are ready.*",348],["NetworkManagerHUD",348],["Network Manager",349],["",349],["",349],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",349],["The Network Manager component allows you to control the state of a networked game. It provides an interface in the Editor for you to configure the network, the Prefabs you use for spawning GameObjects, and the Scenes you use for different game states.",349],["For more details on implementing the Network Manager in your game, see documentation on Using the Network Manager.",349],["Property Function ",349],["Dont Destroy On Load Use this property to control whether or not Unity should destroy the GameObject with the Network Manager when the Scene changes. Tick this checkbox to ensure Unity does not destroy your Network Manager GameObject when the Scene changes in your game. Untick the checkbox if you want Unity to destroy the GameObject when the Scene it exists in is no longer the active Scene. This is useful if you want to manage multiple, separate Network Manager GameObjects in each of your Scenes. This checkbox is ticked by default. ",349],["Run In Background Use this property to control whether the networked game runs when the window it is running in is not focused. Tick the checkbox if you want it to run; untick it if you want the game to stop running when the window is not focused. This checkbox is ticked by default. You need to enable this property if you want to run multiple instances of a program on the same machine, such as when testing using localhost. You should disable it when deploying to mobile platforms. When enabled, it sets Application.runInBackground to true when the Network Manager starts up. You can also set this property from the Unity menu: Edit > Project Settings, then select the Player category, and navigate to the Resolution and Presentation panel. ",349],["Log Level Use this property to control the amount of information Unity outputs to the console window. A low level results in more information; a high level results in less information. Each level includes message from all the levels higher than itself (for example, if you select \"Warn\", the console also prints outputs all “Error” and “Fatal” log messages). The drop-down lists the levels from low to high. This property is set to Info by default. You can set Log Level to Set in Scripting to prevent the Network Manager from setting the log level at all. This means you can control the level from your own scripts instead. ",349],["Offline Scene If you assign a Scene to this field, the Network Manager automatically switches to the specified Scene when a network session stops - for example, when the client disconnects, or when the server shuts down. ",349],["Online Scene If you assign a Scene to this field, the Network Manager automatically switches to the specified Scene when a network session starts - for example, when the client connects to a server, or when the server starts listening for connections. ",349],["NetworkManagerUNet",349],["Network Proximity Checker",350],["",350],["",350],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",350],["The Network Proximity Checker component controls the visibility of GameObjects for network clients, based on proximity to players.",350],["Property Function ",350],["Vis Range Define the range that the GameObject should be visible in. ",350],["Vis Update Interval Define how often (in seconds) the GameObject should check for players entering its visible range. ",350],["Check Method Define which type of physics (2D or 3D) to use for proximity checking. ",350],["Force Hidden Tick this checkbox to hide this object from all players. ",350],["With the Network Proximity Checker, a game running on a client doesn’t have information about GameObjects that are not visible. This has two main benefits: it reduces the amount of data sent across the network, and it makes your game more secure against hacking.",350],["This component relies on physics to calculate visibility, so the GameObject must also have a collider component on it.",350],["A GameObject with a Network Proximity Checker component must also have a Network Identity component. When you create a Network Proximity Checker component on a GameObject, Unity also creates a Network Identity component on that GameObject if it does not already have one.",350],["NetworkProximityChecker",350],["NetworkServer",351],["",351],["",351],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",351],["NetworkServer is a High-Level-API class that manages connections from multiple clients.",351],["Properties",351],["Property: Function: ",351],["active Checks if the server has been started. ",351],["connections A list of all the current connections from clients. ",351],["dontListen If you enable this, the server will not listen for incoming connections on the regular network port. ",351],["handlers Dictionary of the message handlers registered with the server. ",351],["hostTopology The host topology that the server is using. ",351],["listenPort The port that the server is listening on. ",351],["localClientActive True if a local client is currently active on the server. ",351],["localConnections A list of local connections on the server. ",351],["maxDelay The maximum delay before sending packets on connections. ",351],["networkConnectionClass The class to be used when creating new network connections. ",351],["numChannels The number of channels the network is configure with.",351],["objects This is a dictionary of networked objects that have been spawned on the server. ",351],["serverHostId The transport layer hostId used by this server. ",351],["useWebSockets This makes the server listen for WebSockets connections instead of normal transport layer connections. ",351],["NetworkServer",351],["NetworkServerSimple",352],["",352],["",352],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",352],["NetworkServerSimple is a High Level API (HLAPI) class that manages connections from multiple clients. While the NetworkServer class handles game-like things such as spawning, local clients, and player manager, and has a static interface, the NetworkServerSimple class is a pure network server with no game related functionality. It also has no static interface or singleton, so more than one instance can exist in a process at a time.",352],["The NetworkServer class uses an instance of NetworkServerSimple internally to do connection management.",352],["Properties",352],["Property: Function: ",352],["connections The set of active connections to remote clients. This is a sparse array where NetworkConnect objects reside at the index of their connectionId. There may be nulls in this array for recently closed connections. The connection at index zero may be the connection from the local client. ",352],["handlers The set of registered message handler function. ",352],["networkConnectionClass The type of NetworkConnection object to create for new connections. ",352],["hostTopology The host topology object that this server used to configure the transport layer.",352],["listenPort The network port that the server is listening on. ",352],["serverHostId The transport layer hostId associated with this server instance. ",352],["NetworkServerSimple",352],["NetworkStartPosition",353],["",353],["",353],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",353],["NetworkStartPosition is used by the NetworkManager when creating player objects. The position and rotation of the NetworkStartPosition are used to place the newly created player object.",353],["NetworkStartPosition",353],["Network Transform",354],["",354],["",354],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",354],["The Network Transform component synchronizes the movement and rotation of GameObjects across the network. Note that the network Transform component only synchronizes spawned networked GameObjects.",354],["Property Function ",354],["Network Send Rate (seconds) Set the number of network updates per second. You can set this slider to 0 for GameObjects that do not need to update after being created, like non-interactive effects generated by a player (for example, a dust cloud left behind that the player cannot interact with). ",354],["Transform Sync Mode Select what type of synchronization should occur on this GameObject. ",354],["    Sync None Don't synchronize. ",354],["    Sync Transform Use the GameObject's Transform for synchronization. Use this if the physics system does not control this GameObject (that is, if you are moving it via scripting or animation). This is the default option. ",354],["    Sync Rigidbody 2D Use the Rigidbody2D component for synchronization. Use this if the 2D physics system controls this GameObject. ",354],["    Sync Rigidbody 3D Use the Rigidbody component for synchronization. Use this if the 3D physics system controls this GameObject. ",354],["    Sync Character Controller Use the Character Controller component for synchronization. Only select this if you’re using a Character Controller. ",354],["Movement: ",354],["    Movement Threshold Set the distance that a GameObject can move without sending a movement synchronization update. ",354],["    Snap Threshold Set the threshold at which, if a movement update puts a GameObject further from its current position than this, the GameObject snaps to the position instead of moving smoothly. ",354],["    Interpolate Movement Factor Use this to enable and control interpolation of the synchronized movement. The larger this number is, the faster the GameObject interpolates to the target position. If this is set to 0, the GameObject snaps to the new position. ",354],["Rotation: ",354],["    Rotation Axis Define which rotation axis or axes should synchronize. This is set to XYZ (full 3D) by default. ",354],["    Interpolate Rotation Factor Use this to enable and control interpolation of the synchronized rotation. The larger this number is, the faster the GameObject interpolates to the target rotation. If this is set to 0, the GameObject snaps to the new rotation. ",354],["    Compress Rotation If you compress rotation data, the amount of data sent is lower, and the accuracy of the rotation synchronization is lower. ",354],["        None Choose this to apply no compression to the rotation synchronization. This is the default option. ",354],["        Low Choose this to apply a low amount of compression to the rotation synchronization. This option lessens the amount of information sent for rotation data. ",354],["        High Choose this to apply a high amount of compression to the rotation synchronization. This option sends the least amount of information possible for rotation data. ",354],["    Sync Angular Velocity Tick this checkbox to synchronize the angular velocity of the attached Rigidbody component. ",354],["This component takes authority into account, so local player GameObjects (which have local authority) synchronize their position from the client to server, then out to other clients. Other GameObjects (with server authority) synchronize their position from the server to clients.",354],["A GameObject with a Network Transform component must also have a Network Identity component. When you create a Network Transform component on a GameObject, Unity also creates a Network Identity component on that GameObject if it does not already have one.",354],["Note that the Network Transform Visualizer component is a useful tool for debugging the Network Transform component.",354],["NetworkTransform",354],["Network Transform Child",355],["",355],["",355],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",355],["The Network Transform Child component synchronizes the position and rotation of the child GameObject of a GameObject with a Network Transform component. You should use this component in situations where you need to synchronize an independently-moving child object of a Networked GameObject.",355],["To use the Network Transform Child component, attach it to the same parent GameObject as the Network Transform, and use the Target field to define which child GameObject to apply the component settings to. You can have multiple Network Transform Child components on one parent GameObject.",355],["Property Function ",355],["Network Send Rate (seconds) Set the number of network updates per second. You can set this slider to 0 for GameObjects that do not need to update after being created, like non-interactive effects generated by a player (for example, a dust cloud left behind that the player cannot interact with). ",355],["Target Child transform to be synchronized. (Remember, this component goes on the parent, not the child - so you specify the child object using this field). ",355],["Movement Threshold Set the distance that a GameObject can move without sending a movement synchronization update. ",355],["Interpolate Movement Factor Use this to enable and control interpolation of the synchronized movement. The larger this number is, the faster the GameObject interpolates to the target position. If this is set to 0, the GameObject snaps to the new position. ",355],["Interpolate Rotation Factor Use this to enable and control interpolation of the synchronized rotation. The larger this number is, the faster the GameObject interpolates to the target rotation. If this is set to 0, the GameObject snaps to the new rotation. ",355],["Rotation Axis Define which rotation axis or axes should synchronize. This is set to XYZ (full 3D) by default. ",355],["Compress Rotation If you compress rotation data, the amount of data sent is lower, and the accuracy of the rotation synchronization is lower. ",355],["None Choose this to apply no compression to the rotation synchronization. This is the default option. ",355],["Low Choose this to apply a low amount of compression to the rotation synchronization. This option lessens the amount of information sent for rotation data. ",355],["High Choose this to apply a high amount of compression to the rotation synchronization. This option sends the least amount of information possible for rotation data. ",355],["This component does not use physics; it synchronizes the position and rotation of the child GameObject, and interpolates towards updated values. Use Interpolate Movement Factor and Interpolate Rotation Factor to customize the rate of interpolation.",355],["A GameObject with a Network Transform Child component must also have a Network Identity component. When you create a Network Transform Child component on a GameObject, Unity also creates a Network Identity component on that GameObject if it does not already have one.",355],["NetworkTransformChild",355],["Network Transform Visualizer",356],["",356],["",356],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",356],["The Network Transform Visualizer is a utility component that allows you to visualize the interpolation of GameObjects that use the Network Transform component. To use it, add it to a GameObject that already has a Network Transform component, and assign a Prefab in the Inspector. The Prefab can be anything you choose, it will be used as a visual representation of the incoming transform data for GameObject.",356],["GameObjects with local authority (such as the local player) aren't interpolated, and therefore won't show a visualizer GameObject. The visualizer will only show other Networked GameObjects controlled by other computers on the network (such as other players).",356],["The Network Transform Visualizer component in the Inspector window",356],["Property Function ",356],["Visualizer Prefab Define the Prefab used to visualize the target position of the network transform. ",356],["When the game is playing, the Prefab is instantiated as the \"visualizer\" GameObject. When the Network Transform GameObject moves, the visualizer GameObject is displayed at the target position of the Network Transform.",356],["You can choose whatever you like to be the visualizer prefab. In the example below, a semi-transparent magenta cube is used.",356],["It usually appears to be moving a little ahead of - but less smoothly than - the Network Transform GameObject. This is because it is showing you the raw positional data coming in directly from the network, rather than using interpolation to smoothly reach each new target position.",356],["A GameObject with a Network Transform Visualizer component must also have a Network Identity component. When you create a Network Transform Visualizer component on a GameObject, Unity also creates a Network Transform component and a Network Identity component on that GameObject if it does not already have one.",356],["Note:** Make sure the prefab you choose to use as your visualization GameObject does not have a collider attached, or anything else that could affect the gameplay of your game!",356],["NetworkTransformVisualizer",356],["Object",357],["Unity has a class in the UnityEngine namespace called Object, which acts as a base class for all objects that Unity can reference in the editor. Classes which inherit from UnityEngine.Object have special functionality which means they can be dragged and dropped into fields in the Inspector, or picked using the Object Picker next to an Object field.",357],["This page provides an overview of the Object class and its common uses when scripting with it. For an exhaustive reference of every member of the Object class, see the Object script reference.",357],["When creating your own objects via scripting, you typically do not want to inherit directly from Object. Instead, you should inherit from a class designed to be more specific to your goal.",357],["For example, you should inherit from MonoBehaviour if you want to write a custom component which you can add to a GameObject, to control what the GameObject does or provide some functionality relating to it.",357],["Or, you should inherit from ScriptableObject if you want to create custom assets which can store serialized data. Both of these inherit from Unity’s Object class, but provide extra functionality to suit those purposes.",357],["Note: Unity’s Object class is in the UnityEngine namespace. This is different from .NET’s base Object class, which has the same name, but is the System namespace, and is not included in the default script template, so that the names do not clash. You can still inherit your classes from .NET’s System.Object if you want to create classes in your script which do not need to be assigned in the inspector.",357],["Unity’s Object class acts as the base class for most of Unity’s built-in classes such as GameObject, Component, Material, Texture, Mesh, Sprite, and many more, which means all of these types can be dragged and dropped into these reference fields in the inspector.",357],["If a field in the inspector specifies a specific type of class (such as Texture), then Unity restricts you from dropping any other type of object into that field, and the object picker will only show objects of the correct type.",357],["The above image shows three types of object field in the inspector.",357],["The first is of type Object, meaning any Unity Object can be assigned to this field. You could drop any type of object into this field, whether it was a GameObject, a Texture, an Audio Clip, or anything else. This is not usually very useful, and it’s better to make your fields be more specific about what they should accept.",357],["The second shows that its type is \"Texture\", as shown in the parentheses. Texture is a built-in Unity class, and this means you can drop any Texture Asset into this field. Unity has two classes which inherit from this, Texture2D and RenderTexture, which means you can drop either of these types into this field.",357],["The third shows that its type is \"Food\". There’s no built-in Unity class with this name, so this example is showing a custom user-made class which inherits from Object. If you were to subsequently create classes which inherit from “Food”, such as “Apple” and “Banana”, you would be able to assign references to instances of these classes into the Food field, because they inherit from that type.",357],["The Object class provides a few methods which allow you to Instantiate and Destroy them properly, as well as finding references to Objects of a specific type.",357],["For more information on the API for the Object class, see the script reference page for Object.",357],["Object",357],["Occlusion Areas",358],["Use the Occlusion Area component to define View Volumes in the occlusion culling system. View Volumes are areas of the Scene where the Camera is likely to be located at runtime. At bake time, Unity generates higher precision data within View Volumes. At runtime, Unity performs higher precision calculations when the Camera's position is within a View Volume.",358],["If you have not defined any View Volumes in your Scene, Unity creates a View Volume at bake time that contains all Scene geometry that is marked as Occluder Static or Occludee Static. This can lead to unnecessarily large data size, slow bake times and resource-intensive runtime calculations in large or complex Scenes. To avoid this, place Occlusion Areas in your Scene to define View Volumes for the areas where the Camera is likely to be.",358],["Using an Occlusion Area component to define a View Volume",358],["Add an Occlusion Area component to an empty GameObject in your Scene",358],["In the Inspector window, configure the Size property so that the bounding volume covers the desired area",358],["In the Inspector window, enable Is View Volume",358],["Occlusion Area component reference",358],["Property: Function: ",358],["Size Set the size of the Occlusion Area. ",358],["Center Set the center of the Occlusion Area. By default this is 0,0,0 and is located in the center of the box. ",358],["Is View Volume If enabled, the Occlusion Area defines a View Volume. If disabled, the Occlusion Area does not define a View Volume. This must be enabled for an Occlusion Area to work. ",358],["OcclusionArea",358],["Occlusion Portals",359],["An Occlusion Portal can either be open or closed. When an Occlusion Portal is closed, it occludes other GameObjects. When an Occlusion Portal is open, it does not occlude other GameObjects.",359],["If you have a GameObject in your Scene that has an open and a closed state (such as a door), you can create an Occlusion Portal that represents it in the occlusion culling system. You can then set the open state of the Occlusion Portal according to the state of that GameObject. An Occlusion Portal component does not need to be placed on the GameObject it represents.",359],["Setting up an Occlusion Portal in your Scene",359],["Choose a suitable GameObject in your Scene to act as an Occlusion Portal. Good candidates for Occlusion Portals are medium to large solid GameObjects, such as a door.",359],["Ensure that the GameObject is not marked as Occluder Static or Occludee Static.",359],["Add an Occlusion Portal component to the GameObject.",359],["Bake the occlusion data for your Scene. See Getting started with occlusion culling for instructions.",359],["Ensure that the Occlusion Culling window, the Inspector panel and the Scene view are all visible.",359],["In the Scene view, move the Camera to a position where it is directly in front of the Occlusion Portal.",359],["Select the GameObject with the Occlusion Portal component.",359],["In the Inspector window, toggle the Occlusion Portal component's Open property on and off. In the Scene view, observe the difference in occlusion culling.",359],["Opening and closing an Occlusion Portal at runtime",359],["Use a script to set the Occlusion Portal's open property to the desired state.",359],["void OpenDoor() {",359],["// Toggle the Occlusion Portal's open state, so that Unity renders the GameObjects behind it",359],["myOcclusionPortal.open = true;",359],["// Call a function that plays a door opening animation, or otherwise hides the GameObject",359],["…",359],["Occlusion Portal component reference",359],["Property: Function: ",359],["Open If enabled, the Occlusion Portal is open, and does not occlude Renderers. If disabled, the Occlusion Portal is closed, and occludes Renderers. ",359],["Center Set the center of the Occlusion Portal. The default value is 0,0,0. ",359],["Size Define the size of the Occlusion Portal. ",359],["OcclusionPortal",359],["Package Manager",360],["The Package Manager settings (menu: Edit > Project Settings, then the Package Manager category) let you manage your scoped registries and modify the advanced settings for your current project.",360],["(A)** Under the Advanced Settings section, toggle whether pre-release packages are visible in the Package Manager window.",360],["(B)** Add, modify, and remove scoped registries for your project under the Scoped Registries group, which contains the following areas:",360],["    (1) The list of scoped registries currently defined for this project",360],["    (2) The details for the selected scoped registry",360],["",360],["",360],["Advanced Settings",360],["Use the Advanced Settings group to toggle the Enable Pre-release Packages setting for your current project.",360],["",360],["Enable Pre-release Packages",360],["Enable the Enable Pre-release Packages setting to display pre-release packages in the Package Manager window. Pre-release packages appear with the tag in the list view and the tag in the details view, as a reminder of which packages will be released with the LTS version of the Editor.",360],["Warning**:",360],["By default this setting is disabled because pre-release packages are still being verified as stable enough for production, but are not fully released yet. For more information about the lifecycle of packages, see Package states and lifecycle.",360],["",360],["",360],["Scoped Registries",360],["The Scoped Registries group displays a list of scoped registries already added to the current project on the left, and the details of the selected registry on the right.",360],["For detailed information about scoped registries, including how to use and configure them with the Unity Package Manager, see the documentation on Scoped Registries.",360],["Note**: If you added a scoped registry but you don't see it in the My Registries context or the My Registries context isn't available at all, it might be because the package registry server you added does not implement the /-/v1/search or /-/all endpoints, which means that it is not compatible with Unity's Package Manager.",360],["",360],["Adding a new registry",360],["To add a new scoped registry to your project:",360],["Select the + button at the bottom of the list. A new entry appears as New Scoped Registry in the list and blank values for the details on the right and the Revert and Apply buttons change to Cancel and Save buttons.",360],["Enter values for the Name, URL, and Scope(s) properties.",360],["If you need to specify more than one scope, select the + button underneath the last Scope(s) value. Another text box appears.",360],["When you are finished entering the information for the selected scoped registry, click Save. To cancel adding the new scoped registry entirely, click Cancel.",360],["",360],["Modifying an existing registry",360],["To modify an existing scoped registry:",360],["Select the registry you want to modify from the list on the left. The existing information appears on the right.",360],["Modify any of the Name, URL, and Scope(s) properties.",360],["When you are finished updating the information for the selected scoped registry, click Apply. To cancel adding the new scoped registry entirely, click Revert.",360],["",360],["Removing a registry",360],["To delete an existing scoped registry:",360],["Select the registry you want to delete from the list",360],["Click the - button underneath the list. A dialog box prompts you to confirm the removal.",360],["Click Ok to proceed or Cancel to leave it intact.",360],["",360],["",360],["Scoped Registries, Enable Preview Packages and Show Dependencies project settings added in 2020.1 NewIn20201",360],["Enable Preview Packages project setting changed to Enable Pre-release Packages in 2021.1 NewIn20211",360],["PackageManager",360],["Package Manifest window",361],["When you click on the package manifest file in the Project view, the Package Manifest window opens:",361],["(A)** Click the Open button to load this package manifest in your default code editor, such as Visual Studio. Click the View in Package Manager button to open the Package Manager window and load this package in the details view. If you want to choose a different importer, click the Importer drop-down menu and select the package importer you want to use.",361],["(B)** The Information section contains details about this specific package version.",361],["(C)** Use the Brief Description text box to specify the text that you want to appear in the details view of the Package Manager window. For more information, see the documentation for the description property.",361],["(D)** Use the Dependencies section to manage the list of packages that this package depends on.",361],["(E)** Click the Revert button to discard any changes you've made to the manifest. Click the Apply button to save any changes you've made to the manifest.",361],["",361],["Information",361],["Property Description ",361],["------------------------- ------------------------------------------------------------ ",361],["Name The official name for this package. For Unity packages, this is the short name (the official name without the com.unity. string at the beginning.) ",361],["Organization name The identifier of the Unity Organization that created this package. ",361],["Display name The user-facing name on display in the Project view and in the Package Manager. For more information, see the documentation for the displayName property. ",361],["Version The package version number. For more information, see the documentation for the version property. ",361],["Type The type of package. These values are reserved for internal use. ",361],["Minimal Unity version Enable this option to specify the lowest Unity version this package is compatible with. When you enable this option, the Major, Minor, and Release properties appear. Disable this option to indicate that this package is compatible with all Unity versions and remove the Major, Minor, and Release properties. For more information, see the documentation for the unity property. ",361],["Major Specify the MAJOR portion of the minimal Unity version. For more information, see the documentation for the unity property. ",361],["Minor Specify the MINOR portion of the minimal Unity version. For more information, see the documentation for the unity property. ",361],["Release Specify the UPDATE and RELEASE portion of the minimal Unity version. For more information, see the documentation for the unityRelease property. ",361],["",361],["Dependencies",361],["Lists the other packages that are dependencies for this package. Each entry consists of the official package name (for example, \"com.unity.probuilder\") and its version number.",361],["To add a new dependency:",361],["Click the Add button. A new row appears in the list.",361],["Enter the package name on the left and the version on the right. For more information, see the documentation for the dependencies property.",361],["To remove a dependency:",361],["Click the selector to the left of the package you want to remove.",361],["Click the Remove button. The row disappears from the list.",361],["",361],["Custom Packages added in Unity 2019.1 NewIn20191",361],["PackageManifestImporter",361],["Parent Constraints",362],["A Parent Constraint moves and rotates a GameObject as if it is the child of another GameObject in the Hierarchy window. However, it offers certain advantages that are not possible when you make one GameObject the parent of another:",362],["A Parent Constraint does not affect scale.",362],["A Parent Constraint can link to multiple GameObjects.",362],["A GameObject does not have to be a child of the GameObjects that the Parent Constraint links to.",362],["You can vary the effect of the Constraint by specifying a weight, as well as weights for each of its source GameObjects.",362],["For example, to place a sword in the hand of a character, add a Parent Constraint component to the sword GameObject. In the Sources list of the Parent Constraint, link to the character’s hand. This way, the movement of the sword is constrained to the position and rotation of the hand.",362],["Properties",362],["Property: Function: ",362],["Activate After you move and rotate the constrained GameObject and its source GameObjects, click Activate to save this information. Activate saves the current offset from the source GameObjects in Rotation At Rest, Position At Rest, Position Offset, and Rotation Offset, then checks Is Active and Lock. ",362],["Zero Sets the position and rotation of the constrained GameObject to the source GameObjects. Zero resets the Rotation At Rest, Position At Rest, Position Offset, and Rotation Offset fields then checks Is Active and Lock. ",362],["Is Active Toggles whether or not to evaluate the Constraint. To also apply the Constraint, make sure Lock is checked. ",362],["Weight The strength of the Constraint. A weight of 1 causes the Constraint to move and rotate this GameObject at the same rate as its source GameObjects. A weight of 0 removes the effect of the Constraint completely. This weight affects all source GameObjects. Each GameObject in the Sources list also has a weight. ",362],["Constraint Settings   ",362],["Lock Toggle to let the Constraint move and rotate the GameObject. Uncheck this property to edit the position and rotation of this GameObject. You can also edit the Rotation At Rest, Position At Rest, Position Offset, and Rotation Offset properties. If Is Active is checked, the Constraint updates the Rotation At Rest, Position At Rest, Position Offset, or Rotation Offset properties for you as you move and rotate the GameObject or its Source GameObjects. When you are satisfied with your changes, check Lock to let the Constraint to control this GameObject. This property has no effect in Play Mode. ",362],["Position At Rest The X, Y, and Z values to use when Weight is 0 or when the corresponding Freeze Position Axes are not checked. To edit these fields, uncheck Lock. ",362],["Rotation At Rest The X, Y, and Z values to use when Weight is 0 or when the corresponding Freeze Rotation Axes are not checked. To edit these fields, uncheck Lock. ",362],["Position Offset The X, Y, and Z position offset from the Transform that the Constraint imposes. To edit these fields, uncheck Lock. ",362],["Rotation Offset The X, Y, and Z rotation offset from the Transform that the Constraint imposes. To edit these fields, uncheck Lock. ",362],["Freeze Position Axes Check X, Y, or Z to allow the Constraint to control the corresponding position axes. Uncheck an axis to stop the Constraint from controlling it, which allows you to edit, animate, or script it. ",362],["Freeze Rotation Axes Check X, Y, or Z to allow the Constraint to control the corresponding rotation axes. Uncheck an axis to stop the Constraint from controlling it, which allows you to edit, animate, or script it. ",362],["Sources The list of GameObjects that constrain this GameObject. Unity evaluates source GameObjects in the order they appear in this list. This order affects how this Constraint moves and rotates the constrained GameObject. To get the result you want, drag and drop items in this list. Each source has a weight from 0 to 1. ",362],[" 2018-03-13 ",362],["Constraints added in 2018.1",362],["ParentConstraint",362],["Particle System",363],["A Particle System component simulates fluid entities such as liquids, clouds and flames by generating and animating large numbers of small 2D images in the scene. For a full introduction to particle systems and their uses, see further documentation on Particle Systems.",363],["Properties",363],["The Particle System component has many properties, and for convenience, the Inspector organises them into collapsible sections called \"modules\". These modules are documented in separate pages. See documentation on Particle System Modules to learn about each one.",363],["To expand and collapse modules, click the bar that shows their name. Use the checkbox on the left to enable or disable the functionality of the properties in that module. For example, if you don't want to vary the sizes of particles over their lifetime, uncheck the Size over Lifetime module.",363],["The Open Editor button displays the options in a separate Editor window, which allows you to edit multiple systems at once.",363],["The Particle Effect panel in the Scene View contains some additional options for previewing Particle Systems.",363],["Property Function ",363],["Simulate Layers Allows you to preview Particle Systems that are not selected. By default, only selected Particle Systems play in the Scene View. However, when you set Simulate Layers to anything other than Nothing, effects that match the Layer Mask play automatically, without you needing to select them. This is particularly useful for previewing environmental effects. ",363],["Resimulate When this property is enabled, the Particle System immediately applies property changes to particles it has already generated. When disabled, the Particle System leaves existing particles as they are, and only applies property changes to new particles. ",363],["Show Bounds When this property is enabled, Unity displays the bounding volume around the selected Particle Systems. These bounds determine whether a Particle System is currently on screen or not. ",363],["Show Only Selected When this property is enabled, Unity hides all non-selected Particle Systems, allowing you to focus on producing a single effect. ",363],["2018-10-19 ",363],["ParticleSystem",363],["Particle System Force Field",364],["The Particle System Force Field component applies forces to particles in Particle Systems. To attach this component to a Particle System, enable the External Forces Module in the Particle System, and assign either a Layer Mask, or the specific Force Field component.",364],["For a full introduction to particle systems and their uses, see documentation on Particle Systems.",364],["Properties",364],["Use the Particle System Force Field component to apply various types of forces to particles.",364],["All forces are applied in the local space of the Force Field. For example, rotating Transform affects the direction and rotation properties.",364],["Property Function ",364],["",364],["Shape ",364],["Shape Select the shape of the area of influence. ",364],["Start Range Set the value for the inner point within the shape where the area of influence begins. ",364],["End Range Set the value for the outer point of the shape where the area of influence ends. ",364],["Direction X, Y and Z Set a linear force to apply to particles along the x-axis, y-axis and z-axis. The higher the value, the greater the force. You can specify a constant force or vary the force over time. See Varying properties over time documentation for more information. ",364],["Gravity ",364],["Strength Set the amount of attraction that particles have towards the focal point within the shape. The higher the value, the greater the strength. You can specify a constant strength or vary the strength over time. For more informtion, see Varying properties over time documentation. ",364],["Gravity Focus Set the focal point for gravity to pull particles towards. A value of 0 attracts particles to the center of the shape, and a value of 1 attracts particles to the outer edge of the shape. ",364],["Rotation ",364],["Speed Set the speed for the Particle System to propel particles around the vortex, which is the center of the force field. The higher the value, the faster the speed. You can specify a constant speed or vary the speed over time. For more information, see the Varying properties over time documentation. ",364],["Attraction Set the strength that particles are dragged into the vortex motion. A value of 1 applies the maximum attraction, and a value of 0 applies no attraction. You can specify a constant attraction or vary the attraction over time. For more information, see the Varying properties over time documentation. ",364],["Rotation Randomness Set a random axes of the shape to propel particles around. A value of 1 applies maximum randomness, and a value of 0 applies no randomness. ",364],["Drag ",364],["Strength Set the strength of the drag effect which slows particles down. The higher the value, the greater the strength. You can specify a constant strength or vary the strength over time. For more information, see the Varying properties over time documentation. ",364],["Multiply Drag by Size Enable this checkbox to adjust the drag based on the size of the particles. ",364],["Multiply Drag by Velocity Enable this checkbox to adjust the drag based on the velocity of the particles. ",364],["Vector Field ",364],["Volume Texture Select the texture of the vector field. ",364],["Speed Set the speed of the multiplier to apply to particles traveling through the vector field. The higher the value, the faster the speed. You can specify a constant strength or vary the strength over time. See Varying properties over time. ",364],["Attraction Set the strength at which Unity drags particles into the vector field motion. The higher the value, the greater the attraction. You can specify a constant attraction or vary the attraction over time. See Varying properties over time. ",364],["2019-05-16 ",364],["Particle System Force Field added in 2018.3 NewIn20183",364],["ParticleSystemForceField",364],["Physic Material component reference",365],["The Physic Material adjusts friction and bouncing effects of colliding GameObjects.",365],["To create a Physic Material, select Assets > Create > Physic Material from the menu bar. Then drag the Physic Material from the Project View onto a Collider in the scene.",365],["Properties",365],["Property: Function: ",365],["Dynamic Friction The friction used when already moving. Usually a value from 0 to 1. A value of zero feels like ice, a value of 1 will make it come to rest very quickly unless a lot of force or gravity pushes the object. ",365],["Static Friction The friction used when an object is laying still on a surface. Usually a value from 0 to 1. A value of zero feels like ice, a value of 1 will make it very hard to get the object moving. ",365],["Bounciness How bouncy is the surface? A value of 0 will not bounce. A value of 1 will bounce without any loss of energy, certain approximations are to be expected though that might add small amounts of energy to the simulation. ",365],["Friction Combine How the friction of two colliding objects is combined. ",365],["\nAverage The two friction values are averaged. \n",365],["\nMinimum The smallest of the two values is used. \n",365],["\nMaximum The largest of the two values is used. \n",365],["\nMultiply The friction values are multiplied with each other. \n",365],["Bounce Combine How the bounciness of two colliding objects is combined. It has the same modes as Friction Combine Mode ",365],["Details",365],["Friction is the quantity which prevents surfaces from sliding off each other. This value is critical when trying to stack objects. Friction comes in two forms, dynamic and static. Static friction is used when the object is lying still. It will prevent the object from starting to move. If a large enough force is applied to the object it will start moving. At this point Dynamic Friction will come into play. Dynamic Friction will now attempt to slow down the object while in contact with another.",365],["When two bodies are in contact, the same bounciness and friction effect is applied to both of them according to the chosen mode. There is a special case when the two colliders in contact have different combine modes set. In this particular case, the function that has the highest priority is used. The priority order is as follows: Average < Minimum < Multiply < Maximum. For example, if one material has Average set but the other one has Maximum, then the combine function to be used is Maximum, since it has higher priority.",365],["Please note that the friction model used by the Nvidia PhysX engine is tuned for performance and stability of simulation, and does not necessarily present a close approximation of real-world physics. In particular, contact surfaces which are larger than a single point (such as two boxes resting on each other) will be calculated as having two contact points, and will have friction forces twice as big as they would in real world physics. You may want to multiply your friction coefficients by 0.5 to get more realistic results in such a case.",365],["The same logic applies to the bounciness model. Nvidia PhysX doesn't guarantee perfect energy conservation due to various simulation details such as position correction. So for example when the bounciness value of an object affected by gravity is 1 and is colliding with ground that has bounciness 1 expect the object to reach at higher positions than then initial one.",365],["Updated functionality in 5.5",365],["PhysicMaterial",365],["Physics 2D",366],["Go to Edit > Project Settings... > Physics 2D to manage the global settings for Physics 2D.",366],["Note**: To manage the global settings for 3D physics, refer to the Physics Project settings documentation instead.",366],["The Physics 2D settings define limits on the accuracy of the physics simulation. A more accurate simulation requires more processing overhead, and these settings allow you to adjust the trade off between accuracy and performance that best suits your project. Refer to the general Physics documentation for further information.",366],["General Settings tab",366],["The following are the properties available in the General Settings tab of the Physics 2D manager window.",366],["Property Function ",366],[":----------- :------------ :----- ",366],["Gravity Set the amount of gravity applied to all Rigidbody 2D GameObjects. Generally, you only set gravity for the negative direction of the y-axis. ",366],["Default Material Set a reference to the Physics Material 2D to use if none has been assigned to an individual Collider 2D. ",366],["Velocity Iterations Set the number of iterations made by the physics engine to resolve velocity effects. Higher numbers result in more accurate physics calculations but at the cost of CPU time. ",366],["Position Iterations Set the number of iterations made by the physics engine to resolve position changes. Higher numbers result in more accurate physics calculations but at the cost of CPU time. ",366],["Velocity Threshold Set the threshold for elastic collisions. Unity treats collisions with a relative velocity lower than this value as inelastic collisions (that is, the colliding GameObjects do not bounce off each other). ",366],["Max Linear Correction Set the maximum linear position correction used when solving constraints (from a range between 0.0001 to 1000000). This helps to prevent overshooting. ",366],["Max Angular Correction Set the maximum angular correction used when solving constraints (from a range between 0.0001 to 1000000). This helps to prevent overshooting. ",366],["Max Translation Speed Set the maximum linear speed of a Rigidbody 2D GameObject during any physics update. ",366],["Max Rotation Speed Set the maximum rotation speed of a Rigidbody 2D GameObject during any physics update. ",366],["Baumgarte Scale Set the scale factor that determines how fast Unity resolves collision overlaps. ",366],["Baumgarte Time of Impact Scale Set the scale factor that determines how fast Unity resolves time-of-impact overlaps. ",366],["Time to Sleep Set the time (in seconds) that must pass after a Rigidbody 2D stops moving before it goes to sleep. ",366],["Linear Sleep Tolerance Set the linear speed below which a Rigidbody 2D goes to sleep after the Time to Sleep elapses. ",366],["Angular Sleep Tolerance Set the rotational speed below which a Rigidbody 2D goes to sleep after Time to Sleep elapses. ",366],["Default Contact Offset Set a proximity distance value for Colliders to be considered in contact, even though they are not actually in contact. Colliders whose distance is less than the sum of their contactOffset values generate contacts. This allows the collision detection system to predictively enforce the contact constraint even when the objects are slightly separated. Caution: Reducing this value too far could cripple Unity's ability to calculate continuous polygon collisions. Conversely, increasing the value too much could create artifacts for vertex collisions. ",366],["Simulation Mode Select when Unity executes the 2D physics simulation from the dropdown menu. ",366],["Fixed Update Select this to have Unity execute the physics simulation immediately after the MonoBehaviour.FixedUpdate is called. ",366],["Update Select this to have Unity execute the physics simulation immediately after the MonoBehaviour.Update is called. ",366],["Script Select this to manually execute the physics simulation via Physics2D.Simulate. ",366],["Queries Hit Triggers Enable this option if you want Collider 2Ds marked as Triggers to return a hit when any physics query (such as Linecasts or Raycasts) intersects with them. Defaults to enabled. ",366],["Queries Start In Colliders Enable this option if you want physics queries that start inside a Collider 2D to detect the Collider they start in. ",366],["Callbacks On Disable Enable this option to produce collision callbacks when a Collider with contacts is disabled. ",366],["Reuse Collision Callbacks Enable this setting to have the physics engine reuse a single Collision2D instance for all collision callbacks. Disable to have the physics engine create a new Collision2D instance for each collision callback instead. ",366],["Auto Sync Transforms Enable this option to automatically sync transform changes with the physics system. ",366],["Gizmos Select the types of physics 2D gizmos to be drawn within the Editor. You may select multiple options. ",366],[" **Nothing** Select this to deselect every option. No physics 2D gizmo will be drawn. \n",366],[" **Everything** Select this to select every option. \n",366],[" **All Colliders** Select this to have all Colliders drawn without having to select them in the Hierarchy window. \n",366],[" **Colliders Outlined** Select this to have Colliders drawn with an outline (you can customize the outline's color in [2D Physics Preferences](Preferences#2D)). \n",366],[" **Colliders Filled** Select this to have all Colliders drawn using the Fill color specified in the [2D Physics Preferences](Preferences#2D). \n",366],[" **Colliders Sleeping** Select this to have Colliders drawn to show when the Rigidbody 2D they are attached to is sleeping using the **Awake** or **Asleep** colors specified in the [2D Physics Preferences](Preferences#2D). \n",366],[" **Collider Contacts** Select this to have Collider contacts shown as a directional arrow that starts at the contact point in the direction of the contact normal. You can specify the Contact color of the arrow in the [2D Physics Preferences](Preferences#2D). \n",366],[" **Collider Bounds** Select this to have Collider bounds drawn for all [PhysicsShape2D](ScriptRef:PhysicsShape2D) that a Collider creates. The bounds are an Axis-Aligned Bounding Box (AABB). \n",366],["Multithreading Expand this to adjust the multithreading settings. Refer to Multithreading for information about each property. ",366],["Multithreading ",366],["The settings in the Multithreading section allow you to use the C# Job System to configure multithreaded physics.",366],["Property Function ",366],["Use Multithreading Enable this option to execute the simulation steps using the job system and use the rest of these options to control how to achieve that. ",366],["Use Consistency Sorting Enable this option if maintaining a consistent processing order becomes important to the simulation. Executing simulation steps on multiple CPU threads produces separate batches of data. Processing these separate batches reduces determinism in processing order, although produces faster results. ",366],["Interpolation Poses Per Job Set the minimum number of Rigidbody 2D objects being interpolated in each simulation job. ",366],["New Contacts Per Job Set the minimum number of new contacts to find in each simulation job. ",366],["Collide Contacts Per Job Set the minimum number of contacts to collide in each simulation job. ",366],["Clear Flags Per Job Set the minimum number of flags to be cleared in each simulation job. ",366],["Clear Body Forces Per Job Set the minimum number of bodies to be cleared in each simulation job. ",366],["Sync Discrete Fixtures Per Job Set the minimum number of fixtures to synchronize in the broadphase during discrete island solving in each simulation job. ",366],["Sync Continuous Fixtures Per Job Set the minimum number of fixtures to synchronize in the broadphase during continuous island solving in each simulation job. ",366],["Find Nearest Contacts Per Job Set the minimum number of nearest contacts to find in each simulation job. ",366],["Update Trigger Contacts Per Job Set the minimum number of trigger contacts to update in each simulation job. ",366],["Island Solver Cost Threshold Set the minimum threshold cost of all bodies, contacts and joints in an island during discrete island solving. ",366],["Island Solver Body Cost Scale Set the cost scale of each body during discrete island solving. ",366],["Island Solver Contact Cost Scale Set the cost scale of each contact during discrete island solving. ",366],["Island Solver Joint Cost Scale Set the cost scale of each joint during discrete island solving. ",366],["Island Solver Bodies Per Job Set the minimum number of bodies to solve in each simulation job when performing island solving. ",366],["Island Solver Contacts Per Job Set the minimum number of contacts to solve in each simulation job when performing island solving. ",366],["Layer Collision Matrix tab",366],["The Layer Collision Matrix tab settings control whether Colliders (attached to different Rigidbody 2Ds) can come into contact which each other, based on the Layer assigned to the GameObject they are on. The matrix displays each Layer against every other Layer, allowing you to select which specific Layers can come into contact with another.",366],["A check mark at the intersection between two Layers indicates that contact is allowed between those two Layers, while a cleared checkbox indicates that contact between those two Layers is never allowed. When you hover over a Layer's name or a checkbox, its row and column are highlighted to make it easier to see which Layers its affects.",366],["Tip**: To optimize for the best possible performance, you should ensure that only the minimum number of potential contacts are selected by only selecting the specific Layers that you want to have contact with others, and disabling all other unnecessary contacts. To help with this, you can select Disable All or Enable All to quickly select or deselect all options at once. and then select the specific Layers.",366],["Additional resources",366],["\nPhysics\n",366],["\nPhysics3D project settings\n",366],["\nPhysics reference 2D\n",366],["Physics2DManager",366],["Physics",367],["Use the Physics settings (main menu: Edit > Project Settings, then select the Physics category) to apply global settings for 3D physics.",367],["Note:** To manage global settings for 2D physics, use the Physics 2D settings instead.",367],["These settings define limits on the accuracy of the physical simulation. Generally speaking, a more accurate simulation requires more processing overhead, so these settings offer a way to trade off accuracy against performance. For more information, see the Physics section of the manual.",367],["Property Function ",367],["Gravity Use the x, y and z axes to set the amount of gravity applied to all Rigidbody components. For realistic gravity settings, apply a negative number to the y axis. Gravity is defined in world units per seconds squared. Note: If you increase the gravity, you might need to also increase the Default Solver Iterations value to maintain stable contacts. ",367],["Default Material Set a reference to the default Physics Material to use if none has been assigned to an individual Collider. ",367],["Bounce Threshold Set a velocity value. If two colliding objects have a relative velocity below this value, they do not bounce off each other. This value also reduces jitter, so it is not recommended to set it to a very low value. ",367],["Default Max Depenetration Velocity Define the default value for the maximum depenetration velocity (velocity that the solver can set to a body while trying to pull it out of overlap with the other bodies). ",367],["Sleep Threshold Set a global energy threshold, below which a non-kinematic Rigidbody (that is, one that is not controlled by the physics system) may go to sleep. When a Rigidbody is sleeping, it is not updated every frame, making it less resource-intensive. If a Rigidbody’s kinetic energy divided by its mass is below this threshold, it is a candidate for sleeping. ",367],["Default Contact Offset Set the distance the collision detection system uses to generate collision contacts. The value must be positive, and if set too close to zero, it can cause jitter. This is set to 0.01 by default. Colliders only generate collision contacts if their distance is less than the sum of their contact offset values. ",367],["Default Solver Iterations Define how many solver processes Unity runs on every physics frame. Solvers are small physics engine tasks which determine a number of physics interactions, such as the movements of joints or managing contact between overlapping Rigidbody components. This affects the quality of the solver output and it’s advisable to change the property in case non-default Time.fixedDeltaTime is used, or the configuration is extra demanding. Typically, it’s used to reduce the jitter resulting from joints or contacts. ",367],["Default Solver Velocity Iterations Set how many velocity processes a solver performs in each physics frame. The more processes the solver performs, the higher the accuracy of the resulting exit velocity after a Rigidbody bounce. If you experience problems with jointed Rigidbody components or Ragdolls moving too much after collisions, try increasing this value. ",367],["Queries Hit Backfaces Enable this option if you want physics queries (such as Physics.Raycast) to detect hits with the backface triangles of MeshColliders. By default, this setting is disabled. ",367],["Queries Hit Triggers Enable this option if you want physics hit tests (such as Raycasts, SphereCasts and SphereTests) to return a hit when they intersect with a Collider marked as a Trigger. Individual raycasts can override this behavior. By default, this setting is enabled. ",367],["Enable Adaptive Force Enable this option to enable the adaptive force. The adaptive force affects the way forces are transmitted through a pile or stack of objects, to give more realistic behaviour. By default, this setting is disabled. ",367],["Contacts Generation Choose a contact generation method. ",367],["Legacy Contacts Generation Before Unity 5.5, Unity used a contacts generation method based on the separating axis theorem (SAT.PCM is more efficient, but for older projects, you might find it easier to continue using SAT, to avoid needing to retweak physics slightly. PCM can result in a slightly different bounce, and fewer useless contacts end up in the contacts buffers (that is, the arrays you get in the Collision instance passed to OnCollisionEnter, OnCollisionStay, and OnCollisionExit).Upgrade advice: To migrate a Project made with Unity 2018.2 or lower, you might need to update your scripts to work with the code that merges patches in the manifold, and selects contacts. ",367],["Persistent Contacts Manifold (PCM) Generates fewer contacts every physics frame, and more contact data is shared across frames. The PCM contacts generation path is also more accurate, and usually produces better collision feedback in most of the cases. For more information, see Nvidia documentation on Persistent Contact Manifold.This is the default value. ",367],["Auto Simulation Enable this option to run the physics simulation automatically or allow explicit control over it. ",367],["Auto Sync Transforms Enable this option to automatically sync transform changes with the physics system whenever a Transform component changes. By default, this setting is disabled. ",367],["Contact Pairs Mode Choose the type of contact pair generation to use. ",367],["Default Contact Pairs Receive collision and trigger events from all contact pairs except kinematic-kinematic and kinematic-static pairs. ",367],["Enable Kinematic Kinematic Pairs Receive collision and trigger events from kinematic-kinematic contact pairs. ",367],["Enable Kinematic Static Pairs Receive collision and trigger events from kinematic-static contact pairs. ",367],["Enable All Contact Pairs Receive collision and trigger events from all contact pairs. ",367],["Broadphase Type Choose which broad-phase algorithm to use in the physics simulation. See NVIDIA’s documentation on PhysX SDK and Rigid Body Collision. ",367],["Sweep and Prune Broadphase Use the sweep-and-prune broad phase collision method (that is, sorting objects along a single axis to rule out having to check pairs that are far apart). ",367],["Multibox Pruning Broadphase Multi-box pruning uses a grid, and each grid cell performs sweep-and-prune. This usually helps improve performance if, for example, there are many GameObjects in a flat world. ",367],["Automatic Box Pruning This algorithm is similar to the Multibox Pruning one, except that it can also automatically compute the world boundaries and number of subdivisions. It maintains the set of grid cells and uses the regular sweep-and-prune approach to work out potentially overlapping pairs of colliders. It usually helps with big scenes where a single Sweep and Prune would produce lots of extra false positives. ",367],["World Bounds Define the 2D grid that encloses the world to prevent far away objects from affecting each other when using the Multibox Pruning Broadphase algorithm. This option is only used when you set Broadphase Type to Multibox Pruning Broadphase. ",367],["World Subdivisions The number of cells along the x and z axis in the 2D grid algorithm. This option is only used when you set Broadphase Type to Multibox Pruning Broadphase. ",367],["Friction Type Choose the friction algorithm used for simulation. ",367],["Patch Friction Type A basic strong friction algorithm which typically leads to the most stable results at low solver iteration counts. This method uses only up to four scalar solver constraints per pair of touching objects. ",367],["One Directional Friction Type A simplification of the Coulomb friction model, in which the friction for a given point of contact is applied in the alternating tangent directions of the contact's normal. This requires more solver iterations than patch friction but is not as accurate as the two-directional model. For Articulation bodies to work with this friction type, set the Solver Type to Temporal Gauss Seidel. ",367],["Two Directional Friction Type Like the one-directional model, but applies friction in both tangent directions simultaneously. This requires more solver iterations but is more accurate. More expensive than patch friction for scenarios with many contact points because it is applied at every contact point. For Articulation bodies to work with this friction type, set the Solver Type to Temporal Gauss Seidel. ",367],["Enable Enhanced Determinism Simulation in the scene is consistent regardless the actors present, provided that the game inserts the actors in a deterministic order. This mode sacrifices some performance to ensure this additional determinism. ",367],["Enable Unified Heightmaps Enable this option to process Terrain collisions in the same way as Mesh collisions. ",367],["Solver Type Choose the PhysX solver type to use for the simulation. ",367],["Projected Gauss Seidel The default PhysX solver. ",367],["Temporal Gauss Seidel This solver offers a better convergence and a better handling of high-mass ratios, minimizes energy introduced when correcting penetrations and improves the resistance of joints to overstretch. It usually helps when you experience some erratic behavior during simulation with the default solver. ",367],["Layer Collision Matrix Define how the layer-based collision detection system behaves. Select which layers on the Collision Matrix interact with the other layers by checking them. ",367],["Cloth Inter-Collision Specify one set of particles for cloth inter-collision to make fabrics in your game move more realistically. ",367],["Distance Define the diameter of a sphere around each intercolliding Cloth particle. Unity ensures that these spheres do not overlap during simulations. Distance should be smaller than the smallest distance between two particles in the configuration. If the distance is larger, cloth collision may violate some distance constraints and result in jittering. ",367],["Stiffness How strong the separating impulse between intercolliding Cloth particles should be. The cloth solver calculates this and it should be enough to keep the particles separated. ",367],["PhysicsManager",367],["Physics Material 2D",368],["A Physics Material 2D is used to adjust the friction and bounce that occur between 2D physics objects when they collide.",368],["For more detailed information on game physics, see 3D Physics.",368],["Use a Physics Material 2D",368],["To create a Physics Material 2D, go to Assets > Create > 2D > Physics Material 2D.",368],["Property: Function: ",368],["Friction Set the coefficient of friction for this collider. ",368],["Bounciness Set the degree to which collisions rebound from the surface. A value of 0 indicates no bounce while a value of 1 indicates a perfect bounce with no loss of energy. ",368],["To use your created Physics Material 2D, drag it onto an object with an attached 2D Collider component or drag it onto the collider in the Inspector window.",368],["Note:** The equivalent asset in 3D physics is referred to as a Physic Material.",368],["PhysicsMaterial2D",368],["Platform Effector 2D",369],["The Platform Effector 2D applies various platform behavior such as one-way collisions, removal of side-friction/bounce and more.",369],["Colliders used with the Effector are typically not set as triggers so that other colliders can collide with it.",369],["Properties",369],["Property: Function: ",369],["Use Collider Mask Select this option to indicate the use of the Collider Mask property. If this isn't selected, the global collision matrix is chosen as the default for all colliders. ",369],["Collider Mask The mask used to select specific layers allowed to interact with the Effector. ",369],["Use One Way Select this option to indicate if one-way collision behavior is used. ",369],["Use One Way Grouping Ensures that all contacts disabled by the one-way behavior act on all colliders. This is useful when using multiple colliders on the object passing through the platform and they all need to act together as a group. ",369],["Surface Arc The angle of an arc centered on the local \"up\" defines the surface which doesn't allow colliders to pass. Anything outside of this arc is considered for one-way collision. ",369],["Use Side Friction Select this option to indicate if the friction is used on the platform sides. ",369],["Use Side Bounce Select to indicate if bounce is used on the platform sides. ",369],["Side Arc The angle of an arc that defines the sides of the platform centered on the local \"left\" and \"right\" of the Effector. Any collision normals within this arc are considered for the \"side\" behaviors. ",369],["PlatformEffector2D",369],["Player",370],["The Player settings window (menu: Edit > Project Settings > Player) contain settings that determine how Unity builds and displays your final application. You can use the PlayerSettings API to control most of the settings available in this window.",370],["General settings",370],["The Player settings differ between the platform modules that you've installed. Each platform has its own Player settings which you'll need to set for each version of your application you want to build. To navigate between them, click on the tabs with the platform operating system icon on.",370],["However, there are some general settings that all platforms share, that you only need to set once:",370],["",370],["Property Function ",370],["Company Name Enter the name of your company. Unity uses this to locate the preferences file. ",370],["Product Name Enter the name that appears on the menu bar when your application is running. Unity also uses this to locate the preferences file. ",370],["Version Enter the version number of your application. ",370],["Default Icon Pick the Texture 2D file that you want to use as a default icon for the application on every platform. You can override this for specific platforms. ",370],["Default Cursor Pick the Texture 2D file that you want to use as a default cursor for the application on every supported platform. ",370],["Cursor Hotspot Set the pixel offset value from the top left of the default cursor to the location of the cursor hotspot. The cursor hotspot is the point in the cursor image that Unity uses to trigger events based on cursor position. ",370],["Platform-specific settings",370],["The platform-specific settings are divided into the following sections:",370],["Icon**: the game icon(s) as shown on the desktop. You can choose icons from 2D image assets in the Project, such as sprites or imported images.",370],["Resolution and Presentation**: settings for screen resolution and other presentation details such as whether the game should default to fullscreen mode.",370],["Splash Image**: the image shown while the game is launching. This section also includes common settings for creating a Splash Screen. For more information, see the Splash Image documentation.",370],["Other Settings**: any remaining settings specific to the platform.",370],["Publishing Settings**: details of how the built application is prepared for delivery from the app store or host webpage.",370],["XR Settings**: settings specific to Virtual Reality, Augmented Reality, and Mixed Reality applications.",370],["You can find information about the settings specific to individual platforms in the platform's own manual section:",370],["Android:** Android Player settings",370],["ChromeOS:** ChromeOS Player settings",370],["Dedicated Server:** Dedicated Server Player settings",370],["iOS:** iOS Player settings",370],["Linux:** Linux Player settings",370],["macOS:** macOS Player settings",370],["tvOS:** tvOS Player settings",370],["WebGL:** WebGL Player settings",370],["Windows:** Windows Player settings",370],["You can find details of closed platform Player settings in their respective documentation.",370],["PlayerSettings",370],["Android Player settings",371],["This page details the Player Settings for the Android platform. For a description of the general Player settings, refer to Player Settings.",371],["Documentation for the properties is grouped according to their respective sections in the Player UI:",371],["",371],["Icon",371],["Use the Icon section to specify icons to represent your application on the device.",371],["Property Description ",371],["--- --- ",371],["Adaptive Specify textures of various sizes to represent your application on devices running Android 8.0 (API level 26) or higher. ",371],["Round Specify textures of various sizes to represent your application on devices running Android 7.1 (API level 25) or higher. ",371],["Legacy Specify textures of various sizes to represent your application on devices running versions earlier than Android 7.1 (API level 25). ",371],["",371],["Resolution and Presentation",371],["Use the Resolution and Presentation section to customize aspects of the screen's appearance.",371],["Property Description ",371],["",371],["Fullscreen Mode Specifies how the window appears on the device. This sets the default window mode at startup. ",371],["Fullscreen Window The application window fills the full-screen native resolution of the device. To fill the full-screen window, Unity scales the application contents. Resolution Scaling Mode controls how Unity scales the contents. In this mode, the navigation bar is always hidden. ",371],["Windowed The application uses a standard, non-full-screen, movable window. The size of the window depends on the application's resolution. In this mode, the window is resizable by default. To prevent window resizing, disable Resizable Window. ",371],["Resizable Window Indicates whether the user can resize the application's window.This setting enables multi-window capabilities in your application on Android phones and tablets. For more information, refer to Google's developer documentation. ",371],["Default Window Width The default width of the application window in pixels. This option is only available if the Fullscreen Mode is set to Windowed. ",371],["Default Window Height The default height of the application window in pixels. This option is only available if the Fullscreen Mode is set to Windowed. ",371],["Minimum Window Width The minimum width of the application window in pixels. This option is only available if the Fullscreen Mode is set to Windowed. ",371],["Minimum Window Height The minimum height of the application window in pixels. This option is only available if the Fullscreen Mode is set to Windowed. ",371],["Hide Navigation Bar Indicates whether to hide the navigation bar that appears at the top of the window. ",371],["Render outside safe area Enable this option to allow the application to use all available screen space to render, including areas of the display that are cut out (notched). For more information, refer to Android's display cutout support documentation. ",371],["Optimized Frame Pacing Enable this option to allow Unity to evenly distribute frames for less variance in frame rate and create a smoother experience. ",371],["Other Resolution and Presentation settings are grouped under the following sections:",371],["",371],["Resolution Scaling",371],["Use the Resolution Scaling section to customize settings relating to screen resolution scaling. Using a resolution lower than the device's native resolution can improve performance and battery life.",371],["Property Description ",371],["--- --- --- ",371],["Resolution Scaling Mode Specifies whether and how the application scales its resolution. You can set the scaling to be equal to or lower than the native screen resolution. Using a lower resolution can improve performance and battery life. ",371],["Disabled Doesn't apply resolution scaling and the application renders to the device's native screen resolution. ",371],["FixedDPI Applies resolution scaling using a target DPI. Use this to optimize performance and battery life or target a specific DPI setting. ",371],["Letterboxed Adds black bars to the rendered output so the content doesn't stretch. This process is called letterboxing. ",371],["Target DPI The resolution of the application. If the device’s native screen DPI is higher than this value, Unity downscales the application's resolution to match this setting. Unity calculates the scale using min(Target DPI * Factor / Screen DPI, 1) where Factor is the Resolution Scaling Fixed DPI Factor from Quality settings.Note: This option only appears when you set Resolution Scaling Mode to Fixed DPI. ",371],["Reset resolution on window resize Indicates whether to set the screen resolution to the new native window size when the native window size changes. If you set Resolution Scaling Mode to Fixed DPI, Unity recalculates the resolution based on Fixed DPI property. ",371],["Blit Type Controls whether to use a blit to render the final image to the screen. Using a blit is compatible with most devices but is usually slower than not using a blit. ",371],["Always Unity renders to an offscreen buffer and then uses a blit to copy the contents of the buffer to the device's framebuffer. This is compatible with most devices but is usually slower than not using blit. ",371],["Never Unity renders to the framebuffer provided by the device's operating system. If this fails, the application prints a one-time warning to the device log. This is usually faster than using blit, but it isn't compatible with all devices. ",371],["Auto Unity renders to the framebuffer provided by the device's operating system if possible. If this fails, Unity prints a warning to the device console and uses a blit to render the final image to the screen. ",371],["",371],["Supported Aspect Ratio",371],["Use the Supported Aspect Ratio section to customize settings relating to which device aspect ratios to support.",371],["Property Description ",371],["--- --- --- ",371],["Aspect Ratio Mode Specifies the largest aspect ratio the application supports. If the device's aspect ratio is greater than this aspect ratio, Unity uses this aspect ratio for the application and adds black bars so the application doesn't stretch. ",371],["Legacy Wide Screen (1.86) The application supports aspect ratios up to Android's legacy wide-screen aspect ratio. ",371],["Native Aspect Ratio The application supports aspect ratios up to Android's native aspect ratio. ",371],["Custom The application supports aspect ratios up to the aspect ratio you set in Up To. ",371],["Up To The custom maximum aspect ratio.This setting only appears when you set Aspect Ratio Mode to Custom. ",371],["",371],["Orientation",371],["Use the Orientation section to customize settings relating to the orientation of the application on the device.",371],["Choose the game's screen orientation from the Default Orientation dropdown menu:",371],["Property Description ",371],["",371],["Default Orientation Specifies the screen orientation the application uses.Note: Unity shares the value you set for this setting between Android and iOS. ",371],["Portrait The application uses portrait screen orientation where the bottom of the application's window aligns with the bottom of the device's screen. ",371],["Portrait Upside Down The application uses portrait screen orientation where the bottom of the application's window aligns with the top of the device's screen. ",371],["Landscape Right The application uses landscape screen orientation where the right side of the application's window aligns with the bottom of the device's screen. ",371],["Landscape Left The application uses landscape screen orientation where the right side of the application's window aligns with the top of the device's screen. ",371],["Auto Rotation The screen can rotate to any of the orientations you specify in the Allowed Orientations for Auto Rotation section. ",371],["Use 32-bit Display Buffer Indicates whether the display buffer holds 32-bit color values instead of 16-bit color values. Enable this setting if you see banding, or need alpha values in post-processing effects. Some post-processing effects require this because they create Render Textures in the same format as the display buffer. ",371],["Disable Depth and Stencil Indicates whether to disable depth and stencil buffers. ",371],["Render Over Native UI Indicates whether to render on top of native UI on Android or iOS. For this setting to take effect, set your Camera's Clear Flags to use a solid color with an alpha value lower than 1. ",371],["Show Loading Indicator Specifies if and how the loading indicator appears. ",371],["Don't Show The loading indicator doesn't appear. ",371],["Large A large loading indicator appears. ",371],["Inversed Large A large loading indicator appears with inversed color. ",371],["Small A small loading indicator appears. ",371],["Inversed Small A small loading indicator appears with inversed color. ",371],["",371],["Allowed Orientations for Auto Rotation",371],["Use the Allowed Orientations for Auto Rotation section to specify which orientations the application supports when you set Default Orientation to Auto Rotation. This is useful, for example, to lock the application to landscape orientation but allow the user to switch between landscape left and landscape right.",371],["This section only appears when you set Default Orientation to Auto Rotation.",371],["Property Description ",371],["--- --- ",371],["Portrait Indicates whether the application supports portrait screen orientation where the bottom of the application's window aligns with the bottom of the device's screen. ",371],["Portrait Upside Down Indicates whether the application supports portrait screen orientation where the bottom of the application's window aligns with the top of the device's screen. ",371],["Landscape Right Indicates whether the application supports landscape screen orientation where the right side of the application's window aligns with the top of the device's screen. ",371],["Landscape Left Indicates whether the application supports landscape screen orientation where the right side of the application's window aligns with the bottom of the device's screen. ",371],["",371],["Splash Image",371],["Use the Virtual Reality Splash Image setting to select a custom splash image for Virtual Reality displays. For information on common Splash Screen settings, refer to Splash Screen.",371],["Below the common Splash Screen settings, you can set up an Android-specific Static Splash Image.",371],["Property Description ",371],["--- --- --- ",371],["Image Specifies the texture that the application uses for the Android splash screen. The standard size for the splash screen image is 320x480. ",371],["Scaling Specifies how to scale the splash image to fit the device's screen. ",371],["Center (only scale down) Draws the image at its native size unless it's too large, in which case Unity scales the image down to fit. ",371],["Scale to Fit (letter-boxed) Scales the image so that the longer dimension fits the screen size exactly. Unity fills in the empty space around the sides in the shorter dimension in black. ",371],["Scale to Fill (cropped) Scales the image so that the shorter dimension fits the screen size exactly. Unity crops the image in the longer dimension. ",371],["",371],["Other Settings",371],["This section allows you to customize a range of options organized into the following groups:",371],["",371],["Rendering",371],["Use these settings to customize how Unity renders your game for the Android platform.",371],["Property Description ",371],["",371],["Color Space Choose which color space should be used for rendering: Gamma or Linear. Refer to Linear rendering overview for an explanation of the difference between the two. ",371],["Auto Graphics API Disable this option to manually pick and reorder the graphics APIs. By default, this option is enabled, and Unity tries to use Vulkan. If the device doesn’t support Vulkan, Unity falls back to GLES3.2, GLES3.1 or GLES3.0.Important: Unity adds the GLES3/GLES3.1/AEP/3.2 requirement to your Android App Manifest only if GLES2 isn't in the list of APIs when Auto Graphics API is disabled. In this case only, your application doesn't appear on unsupported devices in the Google Play Store. ",371],["Require ES3.1 Indicates whether to require that the minimum OpenGL ES 3 minor version is 3.1. This property is visible only if you enable Auto Graphics API or if Graphics APIs includes OpenGLES3. ",371],["Require ES3.1+AEP Indicates whether to require that the minimum OpenGL ES 3 minor version is 3.1+AEP. This property is visible only if you enable Auto Graphics API or if Graphics APIs includes OpenGLES3. ",371],["Require ES3.2 Indicates whether to require that the minimum OpenGL ES 3 minor version is 3.2. This property is visible only if you enable Auto Graphics API or if Graphics APIs includes OpenGLES3. ",371],["Color Gamut You can add or remove color gamuts to use for rendering. Click the plus (+) icon to see a list of available gamuts. A color gamut defines a possible range of colors available for a given device (such as a monitor or screen). The sRGB gamut is the default (and required) gamut. ",371],["Multithreaded Rendering Enable this option to move graphics API calls from Unity's main thread to a separate worker thread. This can help to improve performance in applications that have high CPU usage on the main thread. ",371],["Static Batching Enable this option to use Static batching. ",371],["Dynamic Batching Check this box to use Dynamic Batching on your build (enabled by default). ",371],["Sprite Batching Threshold Controls the maximum vertex threshold used when batching. ",371],["GPU Compute Skinning Calculate mesh skinning and blend shapes on the GPU via shaders to free up CPU resources and improve performance. ",371],["Graphics Jobs (Experimental) Enable this option to instruct Unity to offload graphics tasks (render loops) to worker threads running on other CPU cores. This is intended to reduce the time spent in Camera.Render on the main thread, which is often a bottleneck. Note: This feature is experimental. It may not deliver a performance improvement for your project, and may introduce new crashes. ",371],["Texture compression format Choose between ASTC, ETC2 and ETC (ETC1 for RGB, ETC2 for RGBA). Refer to texture compression format overview for more information on how to pick the right format.Refer to Texture compression settings for more details on how this interacts with the texture compression setting in the Build Settings. ",371],["Normal Map Encoding Choose XYZ or DXT5nm-style to set the normal map encoding. This setting affects the encoding scheme and compression format used for normal maps. DXT5nm-style normal maps are of higher quality, but more expensive to decode in shaders. ",371],["Lightmap Encoding Choose Low Quality, Normal Quality, or High Quality to set the lightmap encoding. This setting affects the encoding scheme and compression format of the lightmaps. ",371],["HDR Cubemap Encoding Choose Low Quality, Normal Quality, or High Quality to set the HDR Cubemap encoding. This setting affects the encoding scheme and compression format of the HDR Cubemaps. ",371],["Lightmap Streaming Whether to use Mipmap Streaming for lightmaps. Unity applies this setting to all lightmaps when it generates them.Note: To use this setting, you must enable the Texture Streaming Quality setting. ",371],["Streaming Priority Set the priority for all lightmaps in the Mipmap Streaming system. Unity applies this setting to all lightmaps when it generates them.Positive numbers give higher priority. Valid values range from -128 to 127. ",371],["Frame Timing Stats Enable this option to gather CPU/GPU frame timing statistics. ",371],["OpenGL: Profiler GPU Recorders Indicates whether to enable profiler recorders when rendering with OpenGL. This option is always enabled for other rendering APIs but is optional on OpenGL due to potential compatibility issues with Frame Timing Stats and the GPU Profiler. ",371],["Allow HDR Display Output Activate HDR mode output when the application runs. This only works on displays that support this feature. If the display doesn’t support HDR mode, the game runs in standard mode. ",371],["Virtual Texturing Indicates whether to enable Virtual Texturing.Note: Virtual Texturing isn't compatible with Android. ",371],["Load/Store Action Debug Mode Highlights undefined pixels that may cause rendering problems on mobile platforms. This affects the Unity Editor Game view, and your built application if you select Development Build in Build Settings. Refer to LoadStoreActionDebugModeSettings. ",371],["Editor Only Highlights undefined pixels in the Game view in the Editor, but not your built application. ",371],["",371],["Vulkan Settings",371],["",371],["",371],["",371],["Property",371],["Description",371],["",371],["",371],[" ",371],["",371],["",371],["Identification",371],["Property Function ",371],["",371],["Override Default Package Name Indicates whether to override the default package name for your application.Note: This setting affects macOS, iOS, tvOS, and Android. ",371],["Package Name Set the application ID, which uniquely identifies your app on the device and in Google Play Store. The application ID must follow the convention com.YourCompanyName.YourProductName and must contain only alphanumeric and underscore characters. Each segment must start with an alphabetical character. For more information, refer to Set the application ID.Important: Unity automatically removes any invalid characters you type.To set this property, enable Override Default Package Name. ",371],["Version Enter the build version number of the bundle, which identifies an iteration (released or unreleased) of the bundle. The version is specified in the common format of a string containing numbers separated by dots (For example, 4.3.2). (Shared between iOS and Android.) ",371],["Bundle Version Code An internal version number. This number is used only to determine whether one version is more recent than another, with higher numbers indicating more recent versions. This isn't the version number shown to users; that number is set by the versionName attribute. The value must be set as an integer, such as “100”. You can define it however you want, as long as each successive version has a higher number. For example, it could be a build number. Or you could translate a version number in “x.y” format to an integer by encoding the “x” and “y” separately in the lower and upper 16 bits. Or you could simply increase the number by one each time a new version is released. Keep this number under 100000 if Split APKs by target architecture is enabled. Each APK must have a unique version code so Unity adds 100000 to the number for ARMv7, and 200000 for ARM64. ",371],["Minimum API Level Minimum Android version (API level) required to run the application. ",371],["Target API Level Target Android version (API level) against which to compile the application. ",371],["",371],["Configuration",371],["",371],["",371],["",371],["Property",371],["Description",371],["",371],["",371],["",371],["",371],["API Compatibility Level",371],["Choose which .NET APIs you can use in your project. This setting can affect compatibility with third-party libraries. However, it has no effect on Editor-specific code (code in an Editor directory, or within an Editor-specific Assembly Definition). Tip: If you are having problems with a third-party assembly, you can try the suggestion in the API Compatibility Level section below.",371],["",371],["",371],[".Net 2.0",371],[".Net 2.0 libraries. Maximum .net compatibility, biggest file sizes. Part of the deprecated .NET 3.5 runtime.",371],["",371],["",371],[".Net 2.0 Subset",371],["Subset of full .net compatibility, smaller file sizes. Part of the deprecated .NET 3.5 runtime.",371],["",371],["",371],[".Net Standard 2.0",371],["Compatible with .NET Standard 2.0. Produces smaller builds and has full cross-platform support.",371],["",371],["",371],[".Net 4.x",371],["Compatible with the .NET Framework 4 (which includes everything in the .NET Standard 2.0 profile as well as additional APIs). Choose this option when using libraries that access APIs not included in .NET Standard 2.0. Produces larger builds and any additional APIs available are not necessarily supported on all platforms. For more information, refer to Referencing additional class library assemblies.",371],["",371],["",371],["IL2CPP Code Generation",371],["Defines how Unity manages IL2CPP code generation. Note: To use this, set Scripting Backend to IL2CPP.",371],["",371],["",371],["C++ Compiler Configuration",371],["Choose the C++ compiler configuration used when compiling IL2CPP generated code. Note: This property is disabled unless Scripting Backend is set to IL2CPP.",371],["",371],["",371],["Enable Armv9 Security Features for Arm64",371],["Enable Pointer Authentication (PAuth, PAC) and Branch Target Identification (BTI) for Arm64 builds.This property is enabled only when Arm64 is set to true.",371],["",371],["",371],["Filter Touches When Obscured",371],["Enable this option to discard touches received when another visible window is covering the Unity application. This is to prevent tapjacking.",371],["",371],["",371],["Sustained Performance Mode",371],["Enable this option to set a predictable and consistent level of device performance over longer periods of time, without thermal throttling. Overall performance might be lower when this setting is enabled. Based on the [Android Sustained Performance API] (https://developer.android.com/about/versions/nougat/android-7.0.html#sustained_performance_api). ",371],["",371],["",371],["Low Accuracy Location ",371],["Enable this option to use low accuracy values with Android location APIs instead. ",371],["",371],["",371],["ChromeOS Input Emulation ",371],["ChromeOS's default behavior is to convert mouse and touchpad input events into touchscreen input events. Un-check this setting to disable the default behavior. ",371],["",371],["",371],["Warn about App Bundle size",371],["Enable this option to receive a warning when the size of the Android App Bundle exceeds a certain threshold. This option is selected by default and you can only configure it if you enable the Build App Bundle (Google Play) option in the Build settings.",371],["",371],["",371],[" App Bundle size threshold",371],["Enter a size in Mb. When your App Bundle exceeds this size, Unity displays a warning.",371],["",371],["",371],["",371],["API Compatibility Level",371],["You can choose your mono API compatibility level for all targets. Sometimes a third-party .NET library uses functionality that's outside of your .NET compatibility level. To understand what's going on in such cases, and how to best fix it, try following these suggestions:",371],["Install ILSpy for Windows.",371],["Drag the .NET assemblies for the API compatibility level that you are having issues with into ILSpy. You can find these under Frameworks/Mono/lib/mono/YOURSUBSET/.",371],["Drag in your third-party assembly.",371],["Right-click your third-party assembly and select Analyze.",371],["In the analysis report, inspect the Depends on section. The report highlights anything that the third-party assembly depends on, but that's not available in the .NET compatibility level of your choice in red.",371],["",371],["Shader Settings",371],["",371],["",371],["",371],["Property",371],["Description",371],["",371],["",371],["",371],["",371],["",371],["",371],["Shader Variant Loading Settings",371],["",371],["Script Compilation",371],["",371],["Optimization",371],["",371],["",371],["",371],["Property",371],["Description",371],["",371],["",371],[" ",371],["",371],["",371],["Stack Trace",371],["Select your preferred stack trace method by enabling the option that corresponds to each Log Type (Error, Assert, Warning, Log, and Exception) based on the type of logging you require.",371],["Property Description ",371],["",371],["None No logs are ever recorded. ",371],["ScriptOnly Logs only when running scripts. ",371],["Full Logs all the time. ",371],["For more information, refer to stack trace logging.",371],["",371],["Legacy",371],["Enable the Clamp BlendShapes (Deprecated) option to clamp the range of blend shape weights in SkinnedMeshRenderers.",371],["",371],["Publishing Settings",371],["Use the following Publishing Settings to configure how Unity builds your Android application.",371],["Note**: For security reasons, Unity doesn’t save your Keystore or Project Key passwords.",371],["Use the Keystore Manager window to create, configure and load your keys and keystores.",371],["You can load existing keystores and keys from either the Keystore Manager or the main Android Publishing panel. If you choose to load these from inside the Keystore Manager, Unity automatically fills the Project Keystore and Project Key fields.",371],["For further information, refer to the documentation on the Keystore Manager.",371],["",371],["Project Keystore",371],["A keystore is a container that holds signing keys for application security. For details, refer to Android developer documentation: Android keystore system.",371],["Use the Project Keystore settings to choose which keystore to use for the open project. When you load a keystore, Unity loads all the keys in that keystore.",371],["To load and use an existing keystore in your open project:",371],["Enable Custom Keystore.",371],["Open the Select dropdown, select Browse, and choose a keystore from your file system.",371],["Enter your Keystore password.",371],["If you don't have an existing keystore, leave Custom Keystore disabled.",371],["Unity uses a debug keystore to sign your application.",371],["A debug keystore is a working keystore. It allows you to sign the application and to test it locally. However, the app store will decline apps signed in this way. This is because the app store is unable to verify the validity and ownership of the application using a debug keystore.",371],["Property Description ",371],["",371],["Custom Keystore Enable Custom Keystore to load and use an existing Keystore. ",371],["Select When Custom Keystore is enabled, use this to select the keystore you want to use. The keystores below the partition in the Select dropdown are stored in a predefined dedicated location. For more details, refer to Choose the keystore location. ",371],["Path You don't need to enter your keystore path. Unity provides this based on the keystore you choose. ",371],["Password Enter your keystore password to load your chosen keystore. ",371],["",371],["Project Key",371],["When you load a keystore, Unity loads all the keys in that keystore. Use the Project Key settings to choose one key from that keystore to use as the active key for the open project.",371],["Property Description ",371],["",371],["Alias Select the key you want to use for the open project. ",371],["Password Enter your key Password. ",371],["",371],["Build",371],["By default, Unity builds your application with the manifest files, Gradle templates and Proguard files provided with the Unity installation. Use the Build section of the Android Publishing Settings to change these.",371],["To use a custom manifest file, Gradle template or Proguard file:",371],["Enable the appropriate checkbox. Unity creates a default file in your project, and the file location appears below the checkbox.",371],["Open the new file and make your changes.",371],["Save your changes to this file. Unity automatically uses the changes saved to this file next time it builds the application.",371],["The settings in the Build section only apply to the build process for the current project.",371],["Property Description ",371],["",371],["Custom Main Manifest Customizable version of the Android LibraryManifest.xml file. This file contains important metadata about your Android application. For more information about the responsibilities of the Main/Unity Library Manifest, refer to Unity Library Manifest. ",371],["Custom Launcher Manifest Customizable version of the Android LauncherManifest.xml file. This file contains important metadata about your Android application’s launcher. For more information about the responsibilities of the Unity Launcher Manifest, refer to Unity Launcher Manifest. ",371],["Custom Main Gradle Template Customizable version of the mainTemplate.gradle file. This file contains information on how to build your Android application as a library. For more information, refer to the documentation on Gradle project files. ",371],["Custom Launcher Gradle Template Customizable version of the launcherTemplate.gradle file. This file contains instructions on how to build your Android application. For more information, refer to the documentation on Gradle project files. ",371],["Custom Base Gradle Template Customizable version of the baseProjectTemplate.gradle file. This file contains configuration that's shared between all other templates and Gradle projects. For more information, refer to the documentation on Gradle project files. ",371],["Custom Gradle Properties Template Customizable version of the gradle.properties file. This file contains configuration settings for the Gradle build environment. This includes: • The JVM (Java Virtual Machine) memory configuration. • A property to allow Gradle to build using multiple JVMs.• A property for choosing the tool to do the minification. • A property to not compress native libs when building an app bundle. ",371],["Custom Gradle Settings Template Customizable version of the settingsTemplate.gradle file. This file contains declaration of artifact repositories to resolve external dependencies required for your application. ",371],["Custom Proguard File Customizable version of the proguard.txt file. This file contains configuration settings for the minification process. If minification removes some Java code which should be kept, you should add a rule to keep that code in this file. For more information refer to the documentation on Minification. ",371],["",371],["Minify",371],["Minification is a process which shrinks, obfuscates and optimizes the code in your application. It can reduce the code size and make the code harder to disassemble. Use the Minify settings to define when and how Unity should apply minification to your build.",371],["In most cases, it’s good practice to only apply minification to release builds, and not debug builds. This is because minification takes time, and can make the builds slower. It can also make debugging more complicated due to the optimization that the code undergoes.",371],["Note**: If the Java code is referenced via reflection, the minification process (R8/Proguard) cannot infer that the code is in use and strips that code. You can use Custom Proguard File to retain the code that you require.",371],["The settings in the Minify section only apply to the build process for the current project.",371],["Property Description ",371],["",371],["Release Enable this checkbox if you want Unity to minify your application’s code in release builds. ",371],["Debug Enable this checkbox if you want Unity to minify your application’s code in debug builds. ",371],["",371],["Split Application Binary",371],["Enable the Split Application Binary option to split your output package into main (APK) and expansion (OBB) packages. The Google Play Store requires this if you want to publish applications larger than 100 MB.",371],["",371],["Updated features in 5.5",371],["Sustained Performance Mode added in 2017.3",371],[".NET 4.x runtime added in 2018.1",371],["Android Multiple APK features added in 2018.2",371],["OpenGL ES 3.2 support for Android added in [2019.1] (https://docs.unity3d.com/2019.1/Documentation/Manual/30_search.html?q=newin20191) NewIn20191",371],["Input System preview added in Unity 2019.1",371],["Render outside safe area added in Unity 2019.1",371],["Warn about App Bundle size option added in Unity 2019.2",371],["GPU Skinning renamed to Compute Skinning in Unity 2019.3",371],["Vuforia removed in Unity 2019.3",371],["Support for built-in XR SDKs deprecated in Unity 2019.3.NewIn20193",371],["Updated for Texture compression format",371],["PlayerSettingsAndroid",371],["iOS Player settings",372],["This page details the Player settings specific to iOS. For a description of general Player settings that apply to all platforms, see Player - General settings.",372],["You can find documentation for the properties in the following sections:",372],["",372],["Icon",372],["Use the Icon settings to customize the branding for your app on the Apple Store.",372],["You can upload and assign these types of custom icons for each iOS device (iPhone, iPad):",372],["All icons you upload are Texture 2D-type Assets. If an icon Texture is missing, Unity scales the icon Texture with the nearest size, with a preference towards using larger Textures.",372],["",372],["Resolution and presentation",372],["Use the Resolution and Presentation section to customize aspects of the screen’s appearance.",372],["These settings are split into the following categories:",372],["",372],["Resolution Scaling",372],["Use the Resolution Scaling Mode setting to set the scaling to be equal to or below the native screen resolution:",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["",372],["",372],["",372],["Multitasking Support",372],["Enable the Requires Fullscreen option if your application needs to run in full screen mode.",372],["",372],["Status Bar",372],["Use the Status Bar section to specify parameters related to the iOS status bar.",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["Status Bar Hidden",372],["Enable this option to hide the status bar when your application launches.",372],["",372],["",372],["Status Bar Style",372],["Define the style of the status bar when the application launches. The options are Default and Light.",372],["",372],["",372],["Show Loading Indicator",372],["Select how the loading indicator appears. The options are White Large, White, and Gray.",372],["",372],["",372],["",372],["",372],["Splash image",372],["Use the Splash Image section to customize your app’s splash image for different iOS-supported devices.",372],["The Virtual Reality Splash Image setting, located above the common Splash Screen settings, allows you to select a custom splash image for Virtual Reality displays.",372],["Custom storyboards",372],["When you select the Custom Storyboard option in the Launch screen type dropdown for either iPhone or iPad, the Custom Storyboard button appears.",372],["Click the Custom Storyboard button to select a storyboard to display when your game starts up on the device. For your storyboard to appear here, you must first create the storyboard in Xcode and copy it to your Project. For more information, see Apple developer documentation about storyboards, scenes, and connections.",372],["When you disable the Use Storyboard for Launch Screen checkbox, you can implement splash images with one of these methods:",372],["If you don't use custom storyboards, you can use Unity's built-in launch screens to implement splash images.",372],["",372],["Launch Screens",372],["A launch screen is a Storyboard file from which iOS creates a splash screen on the device. It has the following limitations:",372],["You can’t display different content based on device orientation for iPads.",372],["All iPhones support landscape launch screens, but certain iOS versions display the Landscape Left launch screen instead of the Landscape Right one due to a bug.",372],["Before iOS 13, it was impossible to override the root view controller for a storyboard, so the launch screen supports all orientations and ignores some UI settings, like status bar behavior. Starting with iOS 13, launch screen is fully compliant with your app's settings for orientation and status bar appearance.",372],["These limitations also apply to custom storyboards.",372],["Select the Launch screen type for iPhone and iPad in the iPhone Launch Screen and iPad Launch Screen sections:",372],["Value Function ",372],["Default When you select this option, Unity adds a solid blue-black image that's the same color as the background for Unity's default splash screen. The image is used for both portrait and landscape orientations, and displays using aspect-fill mode. ",372],["None Apple no longer supports Launch Images. This option exists for backwards compatibility reasons. If you select it, your project will use Unity's default splash screen instead. ",372],["Image and background (relative size) Displays an image in the center of the screen and fills the remaining area with a solid color. ",372],["Portrait Image Select an image for portrait orientation. ",372],["Landscape Image Select an image for landscape orientation. ",372],["Background Color Select a background color to fill any screen space that the image doesn’t cover. ",372],["Fill percentage Specify image size as a percentage of the screen size. Unity calculates image size based on the length or width of the screen, whichever one is smaller (vertical for landscape displays, horizontal for portrait ones). ",372],["Image and background (constant size) Displays an image in the center of the screen and fills the area with a solid color. This has the same options as Image and background (relative size), except that you specify image size in points rather than as a percentage.Tip: Points and pixels aren't the same. A pixel (px) is a single dot in your image. A point (pt) is a unit of length that measures 1/72th of an inch. Pixel sizes are relative to the screen size and resolution, while point sizes are the size on any screen. For more information, see W3C guidance on size units. ",372],["Custom XIB When you select this option, the Custom XIB button appears. Click the button to select a custom XIB file to use as a loading screen. ",372],["Custom Storyboard When you select this option, the Custom Storyboard button appears. Click the button to select a custom Storyboard file to use as a loading screen. ",372],["Note:** With a Unity Personal subscription, the Unity Splash Screen displays as soon as the engine initializes, in addition to your chosen splash screen.",372],["",372],["Debugging and crash reporting",372],["Use the Debugging and crash reporting settings to gather data about your app’s performance and troubleshoot crashes.",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["",372],["",372],["Other settings",372],["You can configure a range of Player settings in the Other Settings section. These options are organized into the following groups:",372],["",372],["Rendering",372],["Use these settings to customize how Unity renders your application for the iOS platform.",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["",372],["",372],["Identification",372],["Enter identifying information for your app.",372],["Setting Function ",372],["Override Default Bundle Identifier Indicates whether you can manually set the bundle identifier.Note: This setting affects macOS, iOS, tvOS, and Android. ",372],["Bundle Identifier Enter the provisioning profile of the application you are building. The basic structure of the identifier is com.CompanyName.ProductName. This structure might vary based on which country you live in, so always default to the string Apple provides to you for your Developer Account. Your ProductName is set up in your provisioning certificates.The Bundle Identifier must follow the convention com.YourCompanyName.YourProductName and must contain only alphanumeric and hyphen characters. For more information, see CFBundleIdentifier.Important: Unity automatically replaces any invalid characters you type with a hyphen.To set this property, enable Override Default Bundle Identifier. ",372],["Version Enter the release-version-number string for the bundle (for example, 4.3.6).This value appears as CFBundleShortVersionString in the associated info.plist file. For more information, see Apple developer documentation on CFBundleShortVersionString. ",372],["Build Enter the build number for this version of your app.This value appears as CFBundleVersion in the associated info.plist file. For more information, see Apple developer documentation on CFBundleVersion. ",372],["Signing Team ID Enter your Apple Developer Team ID. You can find this on the Apple Developer website under Xcode Help. This sets the Team ID for the generated Xcode project, allowing developers to use Build and Run functionality. You must enter an Apple Developer Team ID for automatic signing of your app.For more information, see the Apple developer documentation on Creating Your Team Provisioning Profile. ",372],["Automatically Sign Enable this option to instruct Xcode to automatically sign your build. ",372],["",372],["Configuration",372],["A: API configuration settings",372],["B: Apple-specific information",372],["C: Device information",372],["D: Variant map for app slicing",372],["E: Other configuration settings",372],["",372],["API configuration settings",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["",372],["",372],["API Compatibility Level",372],["You can choose your mono API compatibility level for all targets. Sometimes a third-party .NET library uses functionality that is outside of your .NET compatibility level. If you're on Windows, you can use the third-party software ILSpy to understand what's happening and how to fix it. Follow these steps:",372],["Install ILSpy for Windows.",372],["Drag the .NET assemblies for the API compatibility level that you are having issues with into ILSpy. You can find these under Frameworks/Mono/lib/mono/YOURSUBSET/.",372],["Drag in your third-party assembly.",372],["Right-click your third-party assembly and select Analyze.",372],["In the analysis report, inspect the Depends on section. Anything that the third-party assembly depends on, but that's not available in the .NET compatibility level of your choice, is highlighted in red.",372],["",372],["Apple-specific information",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["Prepare iOS for Recording",372],["Enable this option to initialize the microphone recording APIs. This lowers recording latency, but it also re-routes iPhone audio output via earphones.",372],["",372],["",372],["Force iOS Speakers when Recording",372],["Enable this option to send the phone’s audio output through the internal speakers, even when headphones are plugged in and recording.",372],["",372],["",372],["Supported URL schemes",372],["A list of supported URL schemes.To add new schemes, increase the value of the Size property, then set a reference to the Asset to load in the new Element box that appears.",372],["",372],["",372],["",372],["",372],["Device information",372],["Setting Function ",372],["Target Device Select which devices the app targets. The options are iPhone Only, iPad Only, and iPhone + iPad. ",372],["Target SDK Select which SDK the app targets. The options are Device SDK and Simulator SDK.Note: Be sure to select the correct SDK. For example, if you select the Device SDK in Unity and target the Simulator in Xcode, your build will fail. ",372],["Target minimum iOS Version Select the minimum version of iOS that the app works on. ",372],["Enable ProMotion Support Enable this option to allow high frequency refresh rates (120 Hz) on ProMotion displays. This might cause your app to use more battery power. ",372],["Requires ARKit support Enable this option to restrict the app to iPhone 6s/iOS 11 or newer devices when you publish it to the App Store. ",372],["Automatically add capabilities When you enable this option, Unity generates an entitlements.plist file and adds capabiities for iOS APIs that your app implements (for example, Game Center or Notifications). For more information, see Apple developer documentation on Entitlements. ",372],["Defer system gestures on edges Select one or more edges that users must swipe twice to enact system gestures. The options are Top Edge, Left Edge, Bottom Edge, and Right Edge ",372],["Hide home button on iPhone X Enable this option to hide the home button on iPhone X devices when the app is running. ",372],["Render Extra Frame on Pause Enable this option to issue an additional frame after the frame when the app is paused. This allows your app to display graphics that indicate the paused state when the app goes into the background. ",372],["Enable Custom Background Behaviors Select what the app is allowed to do when the user presses the home button to send the app to the background. For an example, see the BackgroundFetch GitHub project. The options are:- Audio, AirPlay, PiP - Location updates- Voice over IP- Newsstand downloads- External accessory communication- Uses Bluetooth LE accessories- Act as a Bluetooth LE accessory- Background fetch- Remote notifications ",372],["",372],["Variant map for app slicing",372],["Expand the Variant map for app slicing section to see the list of variant names configured in scripting. For more information on variants, see App slicing.",372],["Note: If you don’t see the section, make sure the Use on Demand Resource property is enabled.",372],["You can add and remove new variants with the plus (+) and minus (-) icons. You can also select a variant from the list and see or modify its settings under Variant settings. For any of these settings except Variant name, if you choose Custom value, an additional property appears underneath where you can enter your own value to use:",372],["Setting Function ",372],["Variant name Displays the name of the variant from the loading script. ",372],["Device Choose which device this variant targets. Options include Any (default), iPhone, iPad, iWatch, and Custom value. ",372],["Memory Choose the minimum memory required for this variant. Options include Any (default), 1GB, 2GB, 3GB, 4GB, and Custom value. ",372],["Graphics Choose the Metal framework to use. Options include Any (default), Metal1v2, Metal2v2, Metal2v3, Metal3v1, Metal3v2, Metal4v1, and Custom value.For more information, see the Apple developer documentation about Metal. ",372],["Display color space Choose the color gamut to use. Options include Any (default), sRGB, DisplayP3, and Custom value. ",372],["You can also add your own setting. Click the Add custom entry button and a new pair of text boxes appear:",372],["<key>: Enter the name of the setting.",372],["<value>: Enter the value for this setting.",372],["",372],["Other configuration settings",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["Architecture Choose which architecture to target. This setting defaults to ARM64 for iOS and can’t be changed.",372],["",372],["",372],["",372],["Shader Variant Loading",372],["",372],["Script Compilation",372],["",372],["Optimization",372],["",372],["",372],["",372],["Setting",372],["Function",372],["",372],["",372],["",372],["",372],["",372],["",372],["Logging",372],["Select what type of logging to allow in specific contexts.",372],["",372],["Legacy",372],["Enable the Clamp BlendShapes (Deprecated) option to clamp the range of Blend Shape weights in SkinnedMeshRenderers. This option has been deprecated and should no longer be used.",372],["PlayerSettingsiOS",372],["Splash Image Player settings",373],["The Splash Image section of the Player settings window (menu: Edit > Project Settings > Player > Splash Image) allows you to configure a splash screen for your project. The splash screen displays when your application starts.",373],["You can use the settings in the Splash Image window to customize how the splash screen appears in your application, including disabling the Unity logo, adding your own logos, or disabling the splash screen entirely. However, the full customization of the splash screen is only available to those on Plus, Pro, or Enterprise Unity plans. If you’re on a Personal Plan, the following limitations apply to the Splash Image settings:",373],["You can’t disable the Show Splash Screen setting to disable the splash screen",373],["You can’t disable the Show Unity Logo setting to disable the Unity logo",373],["The Overlay Opacity setting has a minimum value of 0.5",373],["The Unity Splash Screen is the same across all platforms. It displays immediately while the first Scene of your application loads asynchronously in the background. However, if you use your own introductory screens or animations, this might take longer to appear because Unity has to load the entire engine and first Scene before it can display your own custom splash screen.",373],["Note:** Unity copies these options directly to the Package.appxmanifest file.",373],["Unity Splash Image settings",373],["To configure the options for your application’s splash screen, open the Player Settings window (menu: Edit > Project Settings > Player > Splash Image). You can also use the SplashScreen API to control the splash screen settings.",373],["Setting Description ",373],["",373],["Virtual Reality Splash Image Set an image to use for applications that use virtual reality. The image must be a 2D Texture. ",373],["Splash Screen Settings for displaying the splash screen ",373],["Show Splash Screen Enabled by default. Disable this setting to not display a splash screen at the start of your application. Important: If you have a Unity Personal plan you can’t disable this setting. ",373],["Preview Select the Preview button to see a preview of the Splash Screen in the Game view. The preview reflects the resolution and aspect ratio of the Game view. ",373],["Splash Style Settings for the color style of the Unity logo. ",373],["Light on Dark A light version of the Unity logo best suited to display on dark colored backgrounds. This is the default setting. ",373],["Dark on Light A dark version of the Unity logo best suited to display on light colored backgrounds. ",373],["Animation Settings for how the splash screen appears and disappears on screen. ",373],["Static Doesn't apply any animation. ",373],["Dolly The logo and background zoom to create a visual dolly effect. This is the default setting. ",373],["Custom Choose this setting to configure the background and logo zoom amounts to modify the dolly effect. ",373],["Logo Zoom The target zoom (from 0 to 1) for the logo when it reaches the end of the logo animation's total duration. ",373],["Background Zoom The target zoom (from 0 to 1) for the background when it reaches the end of the splash screen animation's total duration. ",373],["Logos Settings to customize the logos in your splash screen ",373],["Show Unity Logo Enabled by default. Disable this option to not display the Unity logo on the splash screen. Important: If you have a Unity Personal plan you can’t disable this setting. ",373],["Draw Mode Select the mode for the order that the logos appear on the splash screen ",373],["Unity Logo Below Displays the Unity logo underneath all logos in the Logos list. ",373],["All Sequential Displays the Unity logo sequentially with all logos in the Logos list. ",373],["Logos The logos to include on the splash screen. Each logo must be a Sprite Asset. Set the Sprite Mode to Single to use the entire sprite as the logo. If you want to change the logo’s aspect ratio, set the Sprite Mode to Multiple and edit the dimensions with the Sprite Editor.To add and remove logos, use the plus (+) and minus (-) buttons.To reorder logos, drag them in the list.To create a delay between logos, add an entry to the Logos list with no Sprite Asset assigned. ",373],["Logo Duration Set the length of time each Sprite Asset appears on the screen. Use a value between 2 and 10 seconds. ",373],["Splash Screen Duration Displays the total duration of the splash screen sequence, in seconds. This is the total of all logos plus 0.5 seconds for fading out. Note: Your application’s splash screen might display for longer if the first Scene isn't ready to play. In this case, the splash screen shows only the background image or color and then fades out when the first Scene is ready to play. ",373],["Background Settings to customize the background of your application’s splash screen. ",373],["Overlay Opacity Adjust the value of the Overlay Opacity setting to make the logos stand out. This affects the background color and image color of the logo, based on how you set the Splash Style (Light on Dark, or Dark on Light).Set the opacity to a lower value to reduce this effect. You can also disable the effect by setting it to 0. For example, if the Splash Style is Light on Dark, with a white background, the background becomes gray if you set the Overlay Opacity to 1, and white if set to 0. Important: If you have a Unity Personal plan, this setting has a minimum value of 0.5. ",373],["Background Color Sets a color for the splash screen. Unity uses this color if you don’t set a Background Image.Note: The Overlay Opacity setting has an effect on the display of the Background Color, and might not match the assigned color. ",373],["Blur Background Image Enable this setting to blur the Background Image you set. If you disable this setting, it displays the Background Image with no blur effect. ",373],["Background Image Set a reference to a Sprite image to use as a background. Unity adjusts the background image so that it fills the screen. It uniformly scales the image until it fits both the width and height of the screen. This means that parts of the image might extend beyond the screen edges in some aspect ratios. To adjust the background image’s response to aspect ratio, change the Sprite’s Position values in the Sprite Editor. ",373],["Alternate Portrait Image Set an alternative image to use with portrait aspect ratios (for example, a mobile device in portrait mode). If you don’t assign an Alternate Portrait Image Sprite, the Unity Editor uses the Sprite assigned as the Background Image for both portrait and landscape mode.You can adjust the Position and dimensions of the Sprite in the Sprite Editor to control the aspect ratio and position of the background image on the Splash Screen. ",373],["PlayerSettingsSplashScreen",373],["WebGL Player settings",374],["Use Player settings to know how Unity builds and displays your final WebGL application. For a description of the general Player settings, refer to Player settings.",374],["To access the WebGL Player settings:",374],["From the Unity main menu, go to Edit > Project Settings > Player. The Player settings window appears.",374],["Select the WebGL tab to view the WebGL Player settings.",374],["You can find documentation for the properties in the following sections:",374],["Note:** Although the Icon panel appears on the WebGL Player settings, there are no icon settings available because WebGL games don't use icons.",374],["For more information about WebGL Publishing Settings, see WebGL Building and Running.",374],["",374],["Resolution and Presentation",374],["Use the Resolution and Presentation section to customize the aspects of the screen's appearance in the Resolution section.",374],["Resolution",374],["Setting Function ",374],["Default Canvas Width Set the width of the WebGL canvas element. ",374],["Default Canvas Height Set the height of the WebGL canvas element. ",374],["Run In Background Enable this option to allow your content to continue to run when the canvas or the browser window loses focus. ",374],["WebGL Template",374],["Select a template to use for your WebGL Project:",374],["The Default page is a simple white page with a loading bar on a grey canvas.",374],["The Minimal page has only the necessary boilerplate code to run the WebGL content.",374],["The PWA page has a Progressive Web App including a web manifest file and service worker code.",374],["You can specify your own template so that you can run your game in a similar environment to the finished game. Follow the instructions in Using WebGL Templates.",374],["",374],["Splash Image",374],["Use the Virtual Reality Splash Image setting to select a custom splash image for XR displays. For information on common Splash Screen settings, see Splash Screen.",374],["",374],["Other Settings",374],["This section allows you to customize a range of options organized into the following groups:",374],["",374],["Rendering",374],["Use these settings to customize how Unity renders your game for the WebGL platform.",374],["Setting Function ",374],["Color Space Choose what color space to use for rendering: Gamma or Linear. See Linear rendering overview for an explanation of the difference between the two. ",374],["Auto Graphics API Disable this option to manually pick and reorder the graphics APIs. By default this option is enabled, and Unity includes WebGL2.0, with WebGL1.0 as a fallback for devices where WebGL2.0 isn't supported. ",374],["Static Batching Enable this option to use Static batching. ",374],["Dynamic Batching Check this box to use Dynamic Batching on your build (enabled by default). ",374],["Graphics Jobs Enable this option to instruct Unity to offload graphics tasks (render loops) to worker threads running on other CPU cores. Use it to reduce the time spent in Camera.Render on the main thread, which is often a bottleneck. Note: This feature is experimental. It might not deliver a performance improvement for your project, and might introduce new crashes. ",374],["Texture compression format Choose DXT, ETC2, or ASTC to set the texture compression format for WebGL. For information on how to pick the right format, refer to Texture compression format overview and to learn how to create builds for desktop and mobile browsers from a script, refer to Texture Compression in WebGL. ",374],["Lightmap Encoding Choose Low Quality, Normal Quality, or High Quality to set the lightmap encoding. This setting affects the encoding scheme and compression format of the lightmaps. ",374],["HDR Cubemap Encoding Choose Low Quality, Normal Quality, or High Quality to set the HDR Cubemap encoding. This setting affects the encoding scheme and compression format of the HDR Cubemaps. ",374],["Lightmap Streaming Enabled Whether to use Mipmap Streaming for lightmaps. Unity applies this setting to all lightmaps when it generates them.Note: To use this setting, you must enable the Texture Streaming Quality setting. ",374],["Streaming Priority Set the priority for all lightmaps in the Mipmap Streaming system. Unity applies this setting to all lightmaps when it generates them.Positive numbers give higher priority. Valid values range from —128 to 127. ",374],["Frame Timing Stats Enable this option to gather CPU/GPU frame timing statistics. ",374],["Virtual Texturing Indicates whether to enable Virtual Texturing.Note: The Unity Editor requires a restart for this setting to take effect. ",374],["Shader precision model Controls the default precision of samplers used in shaders. See Shader data types and precision for more details. ",374],["360 Stereo Capture Indicates whether Unity can capture stereoscopic 360 images and videos. When enabled, Unity compiles additional shader variants to support 360 capture (currently only on Windows/OSX). When enabled, enable360_capture_ keyword is added during the Stereo RenderCubemap call. Note that this keyword is not triggered outside the Stereo RenderCubemap function. For more information, see Stereo 360 Image and Video Capture. ",374],["Load/Store Action Debug Mode Highlights undefined pixels that might cause rendering problems in your built application. The highlighting appears only in the Game view, and your built application if you select Development Build in Build Settings. See LoadStoreActionDebugModeSettings. ",374],["Editor Only Highlights undefined pixels in the Game view, but not in your built application. ",374],["",374],["Configuration",374],["",374],["Shader Variant Loading",374],["",374],["API Compatibility Level",374],["You can choose your mono API compatibility level for all targets. Sometimes a 3rd-party .NET library uses functionality that's outside of your .NET compatibility level. To understand what's going on in such cases, and how to best fix it, try following these suggestions:",374],["Install ILSpy for Windows.",374],["Drag the .NET assemblies for the API compatilibity level that you are having issues with into ILSpy. You can find the problematic files under Frameworks/Mono/lib/mono/YOURSUBSET/.",374],["Drag in your 3rd-party assembly.",374],["Right-click your 3rd-party assembly and select Analyze.",374],["In the analysis report, inspect the Depends on section. The report highlights anything that the 3rd-party assembly depends on, but that's not available in the .NET compatibility level of your choice in red.",374],["",374],["Script Compilation",374],["",374],["Optimization",374],["",374],["",374],["",374],["Property",374],["Description",374],["",374],["",374],["",374],["",374],["",374],["",374],["Stack Trace",374],["Select the logging settings for the WebGL platform.",374],["",374],["Legacy",374],["Enable the Clamp BlendShapes (Deprecated) option to clamp the range of blend shape weights in Skinned Mesh Renderers.",374],["",374],["Publishing settings",374],["Use the Publishing Settings to configure how Unity builds your WebGL app. For example, you can choose to enable the browser cache to store its files in your build.",374],["Setting Function ",374],["Enable Exceptions Choose how to handle unexpected code behavior (generally considered errors) at run time. The options are: None, Explicitly Thrown Exceptions Only, Full Without Stacktrace, and Full With Stacktrace. See the Building and running a WebGL project page for details. ",374],["Compression Format Choose the compression format to use for release build files. The options are: Gzip, Brotli, or Disabled (none). Note that this option doesn't affect development builds. ",374],["Name Files As Hashes Enable this option to use an MD5 hash of the uncompressed file contents as a filename for each file in the build. ",374],["Data caching Enable this option to automatically cache your contents Asset data on the user's machine so it doesn't have to be re-downloaded on subsequent runs (unless the contents have changed). Caching is implemented using the IndexedDB API provided by the browser. Some browsers may implement restrictions around this, such as asking the user for permission to cache data over a specific size. ",374],["Debug Symbols Enable this option to preserve debug symbols and perform demangling (displaying the original function names) of the stack trace when an error occurs. For release builds, all the debug information is stored in a separate file which is downloaded from the server on demand when an error occurs. Development builds always have demangling support embedded in the main module and therefore aren't affected by this option. ",374],["Show Diagnostics Overlay Enable this option to display an overlay in WebGL builds that displays diagnostics information. It's available for both Development and Release builds. For more information, see Show Diagnostics Overlay Player settings. ",374],["Decompression Fallback Include decompression fallback code for build files in the loader. Use this option if you are unable to configure server response headers according to the selected compression method. ",374],["Initial Memory Size The initial size of the WASM heap memory in megabytes (MB). By default, this is set to 32 MB. If Memory Growth Mode is set to None, then this is also the maximum size of WASM heap memory. ",374],["Memory Growth Mode Choose the growth mode for the WASM heap memory from the following options. The recommended option is Geometric. ",374],["None The WASM heap memory has a fixed size configured in Initial Memory Size. ",374],["Linear The WASM heap memory increases by a fixed amount configured by Linear Memory Growth Step. ",374],["Geometric The WASM heap memory increases relative to the current heap size depending on the factor configured in Geometric Memory Growth Step and Geometric Memory Growth Cap. ",374],["Power Performance Helps you determine the performance mode that’s ideal for your GPU configuration in a multi-GPU systems environment for WebGL implementation. Select the best GPU configuration for your WebGL build: ",374],["Default Select Default if you want the WebGL implementation to use its default behavior. ",374],["Low Performance Select Low Performance if you want the WebGL implementation to prioritize power savings. ",374],["High Performance Select High Performance, if you want the WebGL implementation to prioritize rendering performance. ",374],["Maximum Memory Size The maximum size of the WASM heap memory in MB. By default, this is set to 2048 MB. This option is only available for the Memory Growth Mode Linear or Geometric. ",374],["Linear Memory Growth Step Advanced tuning option to control the WASM heap growth step in MB. By default, this is set to 16 MB. A growth step of 16MB indicates that the heap is increased by 16MB each time it needs to grow. Only available if Memory Growth Mode is set to Linear. ",374],["Geometric Memory Growth Step Advanced tuning option to control the WASM heap growth factor relative to the current heap size. By default, this is set to 0.2. A growth factor of 0.2 means that the size of the heap is increased by 0.2 * currentHeapSize each time the heap needs to grow. Only available if Memory Growth Mode is set to Geometric. ",374],["Geometric Memory Growth Cap Advanced tuning option to control the upper limit for a heap growth step in MB. By default, this is set to 96 MB. A growth cap of 96MB means that the size of the heap is increased by at most 96 MB. Only available if Memory Growth Mode is set to Geometric. ",374],["",374],["Show Diagnostic Overlay setting",374],["To help optimize WebGL builds and diagnose potential problems, you can view diagnostics information (currently limited to memory usage) by enabling this setting. Once enabled, an icon appears on the build that displays an overlay with useful data about the build. It's available for both Development and Release builds.",374],["To view the diagnostics information, enable the Show Diagnostics Overlay option in the Player settings window (File > Build Settings > Player Settings > Publishing Settings).",374],["On desktop, the Diagnostics icon appears on the footer of the WebGL canvas:",374],["On a mobile device, the Diagnostics icon appears on the bottom-right of the screen:",374],["Click the Diagnostics icon. An overlay appears showing the JavaScript memory, which is further broken down to display WASM heap memory usage:",374],["The following diagnostics appear on the overlay screen:",374],["Property Function ",374],["Total JS Memory The current size of the JavaScript (JS) heap, including unused memory not allocated to any JS objects in megabytes. ",374],["Used JS Memory Memory in use by JS objects in megabytes. ",374],["Total WASM heap memory Linear memory representing the entire heap of the C/C++ Unity engine that's compiled with Emscripten, including unallocated memory in megabytes. ",374],["Used WASM heap The space of the WASM heap that's allocated in megabytes. ",374],["Important note about JS Memory",374],["The JS Memory information is obtained using the performance.memory API, which is currently only supported on Chrome or Edge. There are no other APIs available that return this information for Safari or Firefox.",374],["Note:** The performance.memory API isn't supported on iOS devices.",374],["On browsers where this API isn't supported, a message showing N/A appears.",374],["Additional resources:",374],["PlayerSettingsWebGL",374],["UWP Player settings",375],["To access the Universal Windows Platform (UWP) Player settings, go to Edit > Preferences > Project Settings > Player from the main menu in Unity. Use the Player settings to determine how Unity builds and displays your final application. For a description of the general Player settings, refer to Player Settings.",375],["Documentation for the properties is grouped according to their respective sections in the Player UI:",375],["",375],["Icon",375],["Use the Icon settings to customize the branding for your app on the Microsoft Store.",375],["The Icon section displays warnings for any images that are required for certification but haven’t been assigned. A UWP application must specify icon and logo images as part of the package before you can submit it to the Microsoft Store.",375],["Note:** You can also choose the image types and their sizing within the API. For more information, refer to PlayerSettings.WSAImageType and PlayerSettings.WSAImageScale.",375],["Expand the Store Logo section to specify the image that appears on the Store description page for the application. You can add up to eight different resolutions.",375],["Tile",375],["Customize the general appearance of your Microsoft Store tiles with these settings:",375],["Property Description ",375],[":-------------------- :---------------------- :----------------------- ",375],["Short name Sets an abbreviated name for the app. ",375],["Show name on Indicates each icon image you want the name to appear on: Medium Tile, Large Tile, or Wide Tile. ",375],["Foreground text Chooses whether to use Light or Dark text on the app's Tile. ",375],["Background color Specifies what color to use for the background. ",375],["Default Size Chooses which size you want to use as the default size for the Tile. ",375],[" **Not Set** Don't use a default size. \n",375],[" **Medium** Use a medium size. \n",375],[" **Wide** Use a wide size. \n",375],["Unity copies these options directly to the Package.appxmanifest file.",375],["Tiles and Logos",375],["Specify the images your tiles display on the Microsoft Store with these settings:",375],["Property Description ",375],[":--- :--- ",375],["Square 44x44 Logo Set a 44x44 logo image to use on the app's tile. You can set up to 10 resolutions. ",375],["Square 71x71 Logo Set a 71x71 logo image to use on the app's tile. You can set up to 5 resolutions. ",375],["Square 150x150 Logo Set a 150x150 logo image to use on the app's tile. You can set up to 5 resolutions. ",375],["Square 310x310 Logo Set a 310x310 logo image to use on the app's tile. You can set up to 5 resolutions. ",375],["Wide 310x150 Logo Set a 310x150 logo image to use on the app's tile. You can set up to 5 resolutions. ",375],["",375],["Resolution and Presentation",375],["Use the Resolution and Presentation section to customize aspects of the screen's appearance.",375],["Property Description ",375],[":--- :--- ",375],["Default is Full Screen Sets the app window to the full-screen native display resolution, covering the whole screen. This mode is also known as borderless full-screen. Unity renders the app content at the resolution set by a script, or the native display resolution if none is set and scales it to fill the window. When scaling, Unity adds black bars to the rendered output to match the display aspect ratio to prevent content stretching. This process is called letterboxing. ",375],["Run In Background Indicates whether to keep the game running (rather than pausing) if the app loses focus. ",375],["Allow Fullscreen Switch Indicates whether to allow default OS full-screen key presses to toggle between full-screen and windowed modes. ",375],["Transparent Swapchain Indicates whether to set AlphaMode on the swap chain to DXGI_ALPHA_MODE_PREMULTIPLIED.This setting is used only for UWP projects that use the XAML build type. By enabling this setting, you can compose Unity content with other XAML content in your application. For more information, refer to PlayerSettings.WSA.transparentSwapchain. ",375],["Orientation",375],["Choose the game's screen orientation from the Default Orientation drop-down menu:",375],["",375],["",375],["",375],["Property",375],["Description",375],["",375],["",375],["",375],["",375],["",375],["",375],["Allowed Orientations for Auto Rotation",375],["Use the Allowed Orientations for Auto Rotation section to specify which orientations the application supports when you set Default Orientation to Auto Rotation. This is useful, for example, to lock the application to landscape orientation but allow the user to switch between landscape left and landscape right.",375],["This section is visible only when Default Orientation is set to Auto Rotation. Enable each orientation by checking its box in this section:",375],["",375],["",375],["",375],["Property",375],["Description",375],["",375],["",375],["",375],["",375],["",375],["",375],["Splash Image",375],["Above the common Splash Screen settings, the Player Settings settings allow you to specify splash images for UWP.",375],["Use the Virtual Reality Splash Image property to select a custom splash image to display in Virtual Reality displays.",375],["Below the common Splash Screen settings, there are a few additional sections:",375],["",375],["Windows",375],["Set the foreground image to use in your app's splash screen. You can add up to seven different resolutions.",375],["",375],["Windows Holographic",375],["Use these settings to customize the holographic splash image for Mixed Reality applications.",375],["Set a Holographic Splash Image to appear during startup. This image appears for five seconds (or until the app finishes loading).",375],["Tracking Loss",375],["A Mixed Reality headset needs to build world-locked coordinate systems from its environment to allow holograms to stay in position. Tracking loss occurs when the headset loses track of where it is (can't locate itself) in the world. This leads to a breakdown in spatial systems (spatial mapping, spatial anchors, spatial stages).",375],["When this happens, Unity stops rendering holograms, pauses the game, and displays a notification. You can customize the notification image that appears by enabling the On Tracking Loss Pause and Show Image property, and then selecting the image to display with the Tracking Loss Image property.",375],["For more information, refer to Recommended settings for Unity.",375],["",375],["Overwrite background color",375],["While your application initializes, UWP shows a Splash screen that appears before the Made with Unity Splash screen. It's best practice to match the UWP Splash screen background to the Splash screen image because it's more visually appealing. The default color is black.",375],["To overwrite the UWP specific Splash screen background color:",375],["Go to Player Settings > Splash Screen and enable Overwrite Background Color.",375],["Choose a color from the Background Color selector.",375],["If you overwrite the default background color, Unity changes the color value in the application manifest. If you are using the XAML application type, Unity also sets the color value in the initial XAML page.",375],["",375],["Other Settings",375],["This section allows you to customize a range of options organized into the following groups:",375],["",375],["Rendering",375],["Use these settings to customize how Unity renders your game for UWP.",375],["",375],["",375],["",375],["Property",375],["Description",375],["",375],["",375],["",375],["",375],["",375],["",375],["Configuration",375],["",375],["",375],["",375],["Property",375],["Description",375],["",375],["",375],["",375],["",375],["",375],["",375],["API Compatibility Level",375],["You can choose your mono API compatibility level for all targets. Sometimes a third-party .NET library uses functionality that's outside of your .NET compatibility level. To understand what's going on in such cases, and how to best fix it, try following these suggestions:",375],["Install ILSpy for Windows.",375],["Drag the .NET assemblies for the API compatibility level that you are having issues with into ILSpy. You can find these under Data/MonoBleedingEdge/lib/mono/YOURSUBSET/.",375],["Drag in your third-party assembly.",375],["Right-click your third-party assembly and select Analyze.",375],["In the analysis report, inspect the Depends on section. The report highlights anything that the 3rd-party assembly depends on, but that's not available in the .NET compatibility level of your choice in red.",375],["",375],["Script Compilation",375],["",375],["Optimization",375],["",375],["",375],["",375],["",375],["Property",375],["Description",375],["",375],["",375],["",375],["",375],["",375],["",375],["Stack Trace",375],["Select which type of stack trace logging to allow in specific contexts.",375],["",375],["Legacy",375],["Enable Clamp BlendShapes (Deprecated) to clamp the range of blend shape weights in SkinnedMeshRenderers.",375],["",375],["Publishing Settings",375],["Use these settings to customize building your UWP app. These options are organized into the following groups:",375],["Unity stores these settings in the Package.appxmanifest file when creating a Visual Studio solution for the first time.",375],["Note:** If you build your project on top of the existing one, Unity doesn’t overwrite the Package.appxmanifest file if it’s already present. That means if you change any of the Player settings, you need to check Package.appxmanifest. If you want to regenerate Package.appxmanifest, delete it and rebuild your project from Unity.",375],["For more information, refer to Microsoft's documentation on App package manifest.",375],["Supported orientations from Player Settings are also populated to the manifest (Package.appxmanifest file in Visual Studio solution). On UWP apps, Unity resets the orientation to the one you used in the Player settings, regardless of what you specify in the manifest. This is because Windows itself ignores those settings on desktop and tablet computers.",375],["Tip:** You can always change supported orientations using Unity scripting API.",375],["",375],["Packaging",375],["Property Description ",375],[":--- :--- ",375],["Package name Enter the name to identify the package on the system. The name must be unique. ",375],["Package display name The Product Name value that you set at the top of the Player settings appears here. This is the name of the app as it will appear on the Microsoft Store. ",375],["Version Enter the version for the package using a string in quad notation: Major.Minor.Build.Revision. ",375],["Publisher display name The Company Name value that you set at the top of the Player settings appears here. This is the user-friendly name of the publisher. ",375],["Streaming Install Enable this option to create a AppxContentGroupMap.xml manifest file containing streamable Assets for the Scene. To include Scene Assets by default, use the Last required scene index setting. Assets in Scenes with a scene index above the Last required scene index are specified as streamable in the manifest file. ",375],["Last required scene index Enter the index number from the Scenes In Build list on the Build Settings window that corresponds to the last scene in that list that must be present in the game build. For an application to start, Unity requires any scene index at or less than the specified index. To require all files in the list, use the index of the last scene in the list. Scenes with a greater scene index must include shared Assets for Scenes with a lesser index. The order of scenes in the Build Settings dialog may be important to allow the application to locate the required assets.Note: By default, the Streaming Install option is disabled, which means that this setting isn't available. To make this property editable, enable the Streaming Install option first. ",375],["",375],["Certificate",375],["Every UWP App needs a certificate which identifies a developer.",375],["Click Select to choose your certificate file (.pfx) from your local computer. The name of the file you selected appears on Select.",375],["If you don’t have a certificate file already, you can generate a file in Unity:",375],["Click Create. The Create Test Certificate for Microsoft Store dialog window appears.",375],["Enter the name of the package publisher in the Publisher text box.",375],["You may also protect the certificate with a password but this is optional. We recommend leaving the password field blank.",375],["Click Create.",375],["The window closes and the Certificate section displays the name you entered for both the Publisher and Issued by values. The Expiration date is set to one year from the time you created the certificate.",375],["",375],["Application UI",375],["Unity copies these options directly to the Package.appxmanifest file.",375],["The Display name value that you set at the top of the Player Settings settings appears in this section. This is the full name of the app.",375],["Enter the text you want to appear on the app's tile on the Microsoft Store in the Description text box. This defaults to the Package display name value.",375],["",375],["File and Protocol Associations",375],["The settings under the File Type Associations, File Types, and Protocol sections allow you to set up your Microsoft Store app as the default handler for a certain file type or URI scheme.",375],["Under the File Type Associations section, enter the name (lowercase only) for a group of file types in the Name text box. These are files that share the same display name, logo, info tip, and edit flags. Choose a group name that can stay the same across app updates.",375],["If you are setting this up as a file association:",375],["Click Add New. An empty entry appears in File Types. You can add multiple file types.",375],["Enter the MIME content type in the Content Type text box for a particular file type. For example, image/jpeg.",375],["Enter the file type to register for in the File Type text box, preceded by a period (for example, .jpeg).",375],["If you are setting this up as an association with a URI scheme, enter the protocol in the Name text box.",375],["For more information, refer to Microsoft documentation on Auto-launching with file and URI associations (XAML).",375],["",375],["Misc",375],["Unity receives input by subscribing to events. The Input Source setting defines where (which sources) to get input from. Currently this only applies to mouse and touch input, as keyboard input always comes from CoreWindow.",375],["Property Description ",375],[":-------------------- :---------------------- :----------------------- ",375],["Default Language (.vcxproj) Sets the XML default language in the generated Visual Studio project. If not specified, ‘en-US’ is used. Note: Changes only apply to the initial file generation, changes don’t affect pre-existing files. ",375],["Input Source Defines which sources to receive input from. Currently this only applies to mouse and touch input, as keyboard input always comes from CoreWindow. ",375],[" **CoreWindow** Subscribes to CoreWindow events. This is the default. \n",375],[" **Independent Input Source** Creates Independent Input Source and receive input from it. \n",375],[" **SwapChainPanel** Subscribes to SwapChainPanel events. \n",375],["",375],["Capabilities",375],["Use the Capabilities section to enable APIs or resources you want your app to access. These could be pictures, music, or devices such as the camera or the microphone.",375],["Property Description ",375],[":--- :--- ",375],["EnterpriseAuthentication Windows domain credentials enable a user to log into remote resources using their credentials, and act as if a user provided their username and password. ",375],["InternetClient Allows your app to receive incoming data from the Internet. Can't act as a server. No local network access. ",375],["InternetClientServer Same as InternetClient but also enables peer-to-peer (P2P) scenarios where the app needs to listen for incoming network connections. ",375],["MusicLibrary Accesses the user's Music, allowing the app to enumerate and access all files in the library without user interaction. This capability is typically used in jukebox apps that make use of the entire Music library. ",375],["PicturesLibrary Accesses the user's Pictures, allowing the app to enumerate and access all files in the library without user interaction. This capability is typically used in photo apps that make use of the entire Pictures library. ",375],["PrivateNetworkClientServer Provides inbound and outbound access to home and work networks through the firewall. This capability is typically used for games that communicate across the local area network (LAN), and for apps that share data across a variety of local devices. ",375],["RemovableStorage Accesses files on removable storage, like USB keys and external hard drives. ",375],["SharedUserCertificates Allows your app to add and access software and hardware-based certificates in the Shared User store, such as certificates stored on a smart card. This capability is typically used for financial or enterprise apps that require a smart card for authentication. ",375],["VideosLibrary Accesses the user's Videos, allowing the app to enumerate and access all files in the library without user interaction. This capability is typically used in movie-playback apps that make use of the entire Videos library. ",375],["WebCam Accesses the video feed of a built-in camera or external webcam, which allows the app to capture photos and videos.Note: This only grants access to the video stream. In order to grant access to the audio stream as well, the Microphone capability must be added. ",375],["Proximity Enables multiple devices in close proximity to communicate with one another. This capability is typically used in casual multi-player games and in apps that exchange information. Devices attempt to use the communication technology that provides the best possible connection, including Bluetooth, Wi-Fi, and the Internet. ",375],["Microphone Accesses the microphone’s audio feed, which allows the app to record audio from connected microphones. ",375],["Location Accesses location functionality that retrieved from dedicated hardware like a GPS sensor in the PC or derived from available network info. ",375],["HumanInterfaceDevice Enables access to Human Interface Device APIs. For more information, refer to How to specify device capabilities for HID. ",375],["AllJoyn Allows AllJoyn-enabled apps and devices on a network to discover and interact with each other. ",375],["BlockedChatMessages Allows apps to read SMS and MMS messages that have been blocked by the Spam Filter app. ",375],["Chat Allows apps to read and write all SMS and MMS messages. ",375],["CodeGeneration Allows apps to access the following functions which provide JIT capabilities to appsVirtualProtectFromAppCreateFileMappingFromAppOpenFileMappingFromAppMapViewOfFileFromApp ",375],["Objects3D Allows apps to have programmatic access to the 3D object files. This capability is typically used in 3D apps and games that need access to the entire 3D objects library. ",375],["PhoneCall Allows apps to access all of the phone lines on the device and perform the following functions.Place a call on the phone line and display the system dialer without prompting the user.Access line-related metadata.Access line-related triggers.Allows the user-selected spam filter app to set and check block list and call origin information. ",375],["UserAccountInformation Accesses the user's name and picture. ",375],["VoipCall Allows apps to access the VOIP calling APIs in the Windows.ApplicationModel.Calls namespace. ",375],["Bluetooth Allows apps to communicate with already paired bluetooth devices over both Generic Attribute (GATT) or Classic Basic Rate (RFCOMM) protocol. ",375],["SpatialPerception Provides programmatic access to spatial mapping data, giving mixed reality apps information about surfaces in application-specified regions of space near the user. Declare the spatialPerception capability only when your app will explicitly use these surface meshes, as the capability isn't required for mixed reality apps to perform holographic rendering based on the user’s head pose. ",375],["InputInjectionBrokered Allows apps to inject various forms of input such as HID, touch, pen, keyboard or mouse into the system programmatically. This capability is typically used for collaboration apps that can take control of the system. ",375],["Appointments Accesses the user’s appointment store. This capability allows read access to appointments obtained from the synced network accounts and to other apps that write to the appointment store. With this capability, your app can create new calendars and write appointments to calendars that it creates. ",375],["BackgroundMediaPlayback Changes the behavior of the media-specific APIs like the MediaPlayer and AudioGraph classes to enable media playback while your app is in the background. All active audio streams will no longer mute, but will continue to be audible when an app transitions to the background. Additionally, app lifetime will be extended automatically while playback is occurring. ",375],["Contacts Accesses the aggregated view of the contacts from various contacts stores. This capability gives the app limited access (network permitting rules apply) to contacts that were synced from various networks and the local contact store. ",375],["LowLevelDevices Allows apps to access custom devices when a number of additional requirements are met. ",375],["OfflineMapsManagement Allows apps to access offline maps. ",375],["PhoneCallHistoryPublic Allows apps to read cellular and some VOIP call history information on the device. This capability also allows the app to write VOIP call history entries. ",375],["PointOfService Enables access to APIs in the Windows.Devices.PointOfService namespace. This namespace lets your app access Point of Service (POS) barcode scanners and magnetic stripe readers. The namespace provides a vendor-neutral interface for accessing POS devices from various manufacturers from a UWP app. ",375],["RecordedCallsFolder Allows apps to access the recorded calls folder. ",375],["RemoteSystem Allows apps to have access to a list of devices associated with the user's Microsoft Account. Access to the device list is necessary to perform any operations that persist across devices. ",375],["SystemManagement Allows apps to have basic system administration privileges such as shutting down or rebooting, locale, and timezone. ",375],["UserDataTasks Allows apps to have access to the current state of the tasks setting. ",375],["UserNotificationListener Allows apps to have access to the current state of the notifications setting. ",375],["GazeInput Allows apps to detect where the user is looking when a compatible eye-tracking device is connected. ",375],["For more information, refer to App capability declarations.",375],["Unity copies these options directly to the Package.appxmanifest file.",375],["Note:** If you build your game on top of a previous package, Package.appxmanifest won’t be overwritten.",375],["",375],["Supported Device Families",375],["A device family identifies the APIs, system characteristics, and behaviors across a class of devices. It also determines the set of devices on which your app can be installed from the Store. For more information, refer to Microsoft's Device families overview.",375],["If no options are enabled, Windows.Universal is used as default, which enables your app to be available on all device families. You can also set this within the API in PlayerSettings.WSATargetFamily instead of in the Editor.",375],["Note:** These settings are used only when generating a new UWP Visual Studio solution. Changing these settings has no effect if you rebuild UWP to an existing folder.",375],["Property Description ",375],[":--- :--- ",375],["Desktop Indicates whether your application supports the Desktop device family. ",375],["Mobile Indicates whether your application supports the Mobile device family. ",375],["Holographic Indicates whether your application supports the HoloLens (self-contained, holographic computer) device family. This is used for Mixed Reality apps. ",375],["Team Indicates whether your application supports the Team device family. This is commonly used for Microsoft Surface Hub devices. ",375],["IoT Indicates whether your application supports the IoT device family. Note: Currently, apps targeting IoT aren't valid in the app store and should be used only for development purposes. ",375],["IoTHeadless Indicates whether your application supports the IoTHeadless device family. Note: Currently, apps targeting IoTHeadless aren't valid in the app store and should be used only for development purposes. ",375],["For more information, refer to Device family availability.",375],["",375],["PlayerSettingsWSA",375],["Point Effector 2D",376],["The Point Effector 2D applies forces to attract/repulse against a source point which can be defined as the position of the rigid-body or the center of a collider used by the effector. When another (target) collider comes into contact with the effector then a force is applied to the target. Where the force is applied and how it is calculated can be controlled.",376],["Colliders that you use with the effector would typically be set as triggers so that other colliders can overlap with it to have forces applied however, non-triggers will still work but forces will only be applied when colliders come into contact with it.",376],["Properties",376],["Property: Function: ",376],["Use Collider Mask Should the 'Collider Mask' property be used? If not then the global collision matrix will be used as is the default for all colliders. ",376],["Collider Mask The mask used to select specific layers allowed to interact with the effector. ",376],["Force Magnitude The magnitude of the force to be applied. ",376],["Force Variation The variation of the magnitude of the force to be applied. ",376],["Distance Scale The scale applied to the distance between the source and target. When calculating the distance, it is scaled by this amount allowing the effective distance to be changed which controls the magnitude of the force applied. ",376],["Drag The linear drag to apply to rigid-bodies. ",376],["Angular Drag The angular drag to apply to rigid-bodies. ",376],["Force Source The force source is the point that attracts or repels target objects. The distance from the target is defined from this point. ",376],["        Collider The source point is defined as the current position of the collider. ",376],["        Rigidbody The source point is defined as the current position of the rigidbody. ",376],["Force Target The force target is the point on a target object where the effector applies any force. The distance to the source is defined from this point. ",376],["        Collider The target point is defined as the current position of the collider. Applying force here can generate torque (cause the target to rotate) if the collider isn't positioned at the center-of-mass. ",376],["        Rigidbody The target point is defined as the current center-of-mass of the rigidbody. Applying force here will never generate torque (cause the target to rotate). ",376],["Force Mode How the force is calculated. ",376],["        Constant The force is applied ignoring how far apart the source and target are. ",376],["        Inverse Linear The force is applied as a function of the inverse-linear distance between the source and target. When the source and target are in the same position then the full force is applied but it falls-off linearly as they move apart. ",376],["        Inverse Squared The force is applied as a function of the inverse-squred distance between the source and target. When the source and target are in the same position then the full force is applied but it falls-off squared as they move apart. This is similar to real-world gravity. ",376],["PointEffector2D",376],["Polygon Collider 2D reference",377],["The Polygon Collider 2D is a Collider 2D component that interacts with the 2D physics system. It's shape is a freeform edge of line segments that you can adjust to fit the shape of a sprite or any other shape. Note: The edge must enclose an area for the collider to work.",377],["Property Description ",377],["Edit Collider Select this to edit the collider's geometry by editing and moving its vertices. ",377],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",377],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",377],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",377],["Used by Composite Enable this if you want this Collider to be used by an attached Composite Collider 2D.Note: When you enable Used by Composite, other properties disappear from the Box Collider 2D component as they are now controlled by the attached Composite Collider 2D. The properties that disappear from the Box Collider 2D are Material, Is Trigger, Used By Effector, and Edge Radius. ",377],["Auto Tiling Enable this if the Sprite Renderer component for the selected Sprite has the Draw Mode set to Tiled. This enables automatic updates to the shape of the Collider 2D, allowing the shape to automatically readjust when the Sprite’s dimensions change. If you don’t enable Auto Tiling, the Collider 2D geometry doesn’t automatically repeat. ",377],["Offset Set the local offset values of the Collider 2D geometry. ",377],["Use Delaunay Mesh Enable this property to include an additional Delaunay triangulation step to produce the Collider mesh. ",377],["Points Expand to view information about the complexity of the generated collider. ",377],["Layer Overrides Expand for the Layer override settings. ",377],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",377],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",377],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",377],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",377],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",377],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",377],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",377],["Info Expand for read-only physics system related information about the collider. ",377],["Edit the collider's geometry",377],["You can edit a collider's geometry manually or have Unity generate its shape automatically. Unity automatically generates a collider's geometry when you drag a sprite into the scene and add a Collider 2D component to it. The generated collider shape matches the outline of the sprite as close as possible.",377],["To edit the collider's shape:",377],["Select Edit Collider in the Inspector window to edit the collider's geometry. You can also access the collider's editing mode from the Tools overlay in the Scene view window.",377],["To move an existing vertex, select and hold it, then move it to a new location.",377],["To create a new vertex, hover your cursor over the outline of the collider's shape. A dot shows the position of the cursor on the collider's geometry. Click on the dot to create a new vertex at that position.",377],["To remove a vertex, hold Ctrl (macOS:Cmd) while hovering your cursor over the edges of the collider's geometry, which turn red. Click the red edges to remove the vertex that connects them.",377],["Exit the collider editing mode by selecting Edit Collider in the Inspector window or Tools overlay again.",377],["PolygonCollider2D",377],["Position Constraints",378],["A Position Constraint component moves a GameObject to follow its source GameObjects.",378],["Properties",378],["Property: Function: ",378],["Activate After you position the constrained GameObject and its source GameObjects, click Activate to save this information. Activate saves the current offset from the source GameObjects in Position At Rest and Position Offset, then checks Is Active and Lock. ",378],["Zero Sets the position of the constrained GameObject to the source GameObjects. Zero resets the Position At Rest and Position Offset fields, then checks Is Active and Lock. ",378],["Is Active Toggles whether or not to evaluate the Constraint. To also apply the Constraint, make sure Lock is checked. ",378],["Weight The strength of the Constraint. A weight of 1 causes the Constraint to move this GameObject at the same rate as its source GameObjects. A weight of 0 removes the effect of the Constraint completely. This weight affects all source GameObjects. Each GameObject in the Sources list also has a weight. ",378],["Constraint Settings ",378],["Lock Toggle to let the Constraint move the GameObject. Uncheck this property to edit the position of this GameObject. You can also edit the Position At Rest and Position Offset properties. If Is Active is checked, the Constraint updates the At Rest or Offset properties for you as you move the GameObject or its Source GameObjects. When you are satisfied with your changes, check Lock to let the Constraint control this GameObject. This property has no effect in Play Mode. ",378],["Position At Rest The X, Y, and Z values to use when Weight is 0 or when the corresponding Freeze Position Axes is not checked. To edit these fields, uncheck Lock. ",378],["Position Offset The X, Y, and Z offset from the Transform that is imposed by the Constraint. To edit these fields, uncheck Lock. ",378],["Freeze Position Axes Check X, Y, or Z to allow the Constraint to control the corresponding axes. Uncheck an axis to stop the Constraint from controlling it. This allows you to edit, animate, or script the unfrozen axis. ",378],["Sources The list of GameObjects that constrain this GameObject. Each source has a weight from 0 to 1. ",378],[" 2018-03-13 ",378],["Constraints added in 2018.1",378],["PositionConstraint",378],["Preset Manager",379],["The Preset Manager is a window in Project Settings (menu: Edit > Project Settings > Preset Manager) that allows you to manage custom Presets you create to specify default properties when you add a component to a GameObject or a new Asset to your project. The default Presets you define override Unity's default settings.",379],["Note: You cannot set the default properties for Project settings, Preferences settings, or native Assets such as Materials, Animations, or SpriteSheets.",379],["In addition to using default Presets when creating new components and importing Assets, Unity applies default Presets when you use the Reset command in the Component Context Menu in the Inspector window.",379],["Preset Manager reference",379],["Property Description",379],["",379],["Filter Use the Filter field to define which components or importers the Preset is applied to.",379],["Preset Use the Preset field to set the Preset you want to use. By default, a Preset applies to all components or asset importers of that Preset type once you create it. If you want to only apply it to specific components or asset types, use the Filter field to define when to apply the Preset.",379],["Add Default Preset Select this button to choose the Importer, Component, or ScriptableObject to add a Preset to. If you choose Importer or Component, select the type of asset importer or component you want to create a Preset for.",379],["Assigning a Preset for default settings",379],["To specify a Preset to use for default settings in the Preset Manager:",379],["If you don’t already have a Preset in your project to use for default settings, create one.",379],["Open the Preset Manager by choosing Edit > Project Settings, and selecting the Preset Manager.",379],["Select Add Default Preset and select a default type.The Preset type you choose appears in the Preset Manager list.",379],["In the Preset field, click the Preset selector (circle icon).",379],["From the Select Preset window, choose a Preset for this Preset type. Alternatively, you can also drag and drop a Preset from the Project window into the Preset field. ",379],["If you want to add another Preset field to the list, click the Add (+) tab.",379],["Note: If you set a default Preset for Transform components, Unity does not use the Position values when you create a new GameObject. Instead, it sets the default Position values to the center of the Scene view. To set the Position values to those of the default Preset, select the Transform component’s More items button (⋮) and select Reset.",379],["Assigning Presets via the Inspector window",379],["You can also add and remove Presets to use for default settings via the Inspector window.",379],["To add a default Preset:",379],["Select a Preset in the Project window.",379],["In the Inspector window, click Add to default. Unity adds your default Preset to the Preset Manager.",379],["Open the Preset Manager to add filters to the Preset or reorder your Preset list.",379],["To remove a default Preset:",379],["Select a Preset in the Project window.",379],["In the Inspector window, click Remove from.",379],["Adding filters",379],["By default, a Preset applies to all components or asset importers of that Preset type once it is created. If you want to only apply it to specific components or asset types, you can use the Filter field to define when to apply the Preset.",379],["Filters allow you to create multiple Presets for a given type, and apply them to specific components or importers based on whether those components and importers meet the filter criteria. You can filter by file names, directories, and file extensions.",379],["You can also apply partial Presets that affect only properties you specify in your components or assets.",379],["Note:** Default Presets in a Preset Type are applied in order from top to bottom. This means that filters at the bottom of the list can override previous filters if not logically ordered.",379],["Open the Preset Manager by choosing Edit > Project Settings, then selecting the Preset Manager category.",379],["Find the default Preset you want to filter, and enter the search string in the Filter field.",379],["Advanced filter search",379],["Presets can use glob search, which is a way to use symbols in your filters to allow for more inclusive import filters. See the table below for a list of symbols you can use. A glob search filter is case-sensitive.",379],["To create a glob search filter, the syntax is glob:\"yoursearchpatternhere\". Your filter field must begin glob:, and the search term must be in quotation mark characters. For example, glob:\"example-folder/*.fbx\" filters for any .fbx file in a folder called example-folder.",379],["Supported symbols:",379],["Symbol Description Example",379],["",379],["* Matches 0 or more characters in a single path portion (a single path portion is defined as any suite of characters excluding / ) glob:\"foldername/*.fbx\" searches for any .fbx file located in a folder named foldername.",379],["? Matches 1 character glob:\"foldername/filename-?.fbx\" searches for any .fbx file located in a folder named foldername that has the name filename- followed by one single character (for example, this would include filename-1.fbx, filename-2.fbx, but not filename-01.fbx).",379],["[...] Matches a range of characters, similar to a RegExp range. If the first character of the range is ! or ^ then it matches any character not in the range. glob:\"foldername/file[...]1.fbx\" searches for any .fbx file located in a folder named foldername that has a name that begins file and ends with 1 (for example, this would include file-1.fbx, file-01.fbx, but not file-2.fbx). ",379],["(pattern|pat*|pat?erN) Use searches inside parentheses, separated by a vertical pipe character (meaning “or”), to indicate that filter results can match one of the search patterns. glob:(\"foldername/*.fbx\"\\ \"foldername/filename-?.fbx\") searches for any .fbx file located in a folder named foldername, or any .fbx file located in a folder named foldername that has the name filename- followed by one single character.",379],["** Matches zero or more directories and subdirectories searching for matches. glob:\"foldername/**.fbx\" searches for any .fbx file located in a folder named foldername. or its subfolders. ",379],["Editing the list of default Presets",379],["This section describes how to toggle, move and remove Presets in the Preset Manager’s default Preset list for each Preset type.",379],["\nReorder a Preset list: Select the handle (=) of the default Preset that you want to move, and drag it to the new position.\n",379],["\nRemove a Preset: Select the handle (=) of the default Preset that you want to remove, then click the Remove (-) button to remove the selected Preset.\n",379],["\nRemove a Preset type: Remove all Presets assigned to that default Preset type.\n",379],["Disabling and enabling default Presets",379],["You can temporarily disable/enable a default Preset without losing filter settings.",379],["Open the Preset Manager by choosing Edit > Project Settings, and then selecting the Preset Manager category.",379],["Clear the check box to the left of the default Preset to disable the Preset. Select the check box to enable.",379],[" 2017-03-27 ",379],["New feature in 2018.1 NewIn20181",379],["PresetManager",379],["Projector component",380],["Use a Projector component to create effects such as:",380],["Decal effects, like bullet holes or paint splatters",380],["Blob shadows",380],["Stylized lighting effects",380],["The effect of a real-world projector, using another Camera that renders to a Render Texture",380],["Note:** This workflow is compatible only with the Built-in Render Pipelne. For similar functionality in other render pipelines, see Decals and projectors.",380],["Using the Projector component",380],["A Projector works by projecting a material onto all objects that intersect its frustum. The material must use the Projector/Light or Projector/Multiply shaders, available in Unity's Standard Assets.",380],["Material configuration",380],["When configuring a material to use with the Projector/Light and Projector/Multiply shaders, be aware of the following:",380],["Cookie texture:",380],["Make sure texture wrap mode is set to \"Clamp\"",380],["Turn on \"Replicate Border\" option in mipmap related import settings",380],["Use uncompressed texture format",380],["Projector/Shadow also requires alpha channel to be present (typically Alpha from Grayscale option is ok)",380],["Falloff texture (if present):",380],["Data needs to be in alpha channel, so typically Alpha8 texture format",380],["Make sure texture wrap mode is set to \"Clamp\"",380],["Make sure leftmost pixel column is black; and \"Border mipmaps\" import setting is on.",380],["Examples",380],["Standard Assets contains example Prefabs that demonstrate the use of Projector components.",380],["To use the Prefabs:",380],["Download Standard Assets",380],["Import StandardAssets > Effects > Projectors into your Project",380],["In the Project window, navigate to StandardAssets > Effects > Projectors > Prefabs",380],["Drag the one of the Prefabs into your Scene",380],["You can use the Prefab as is in your Project, modify it, or examine it to see how it is configured.",380],["Projector Inspector reference",380],["Property: Function: ",380],["Near Clip Plane Objects in front of the near clip plane will not be projected upon. ",380],["Far Clip Plane Objects beyond this distance will not be projected upon. ",380],["Field Of View The field of view in degrees. This is only used if the Projector is not Orthographic. ",380],["Aspect Ratio This allows you to tune the height and width of the Projector. ",380],["Orthographic If enabled, the Projector will be Orthographic instead of perspective. ",380],["Orthographic Size The Orthographic size of the Projection. This is only used if Orthographic is enabled. ",380],["Material The Material that will be projected. ",380],["Ignore Layers Objects in Layers that you specify here will not be projected upon. The default value is None. ",380],["Projector",380],["Quality",381],["Unity allows you to set the level of graphical quality it attempts to render. Generally speaking, quality comes at the expense of framerate and so it may be best not to aim for the highest quality on mobile devices or older hardware since it tends to have a detrimental effect on gameplay. Use the Quality settings (menu: Edit > Project Settings, then select the Quality category) to select the Quality Level in the Editor for the chosen device. It is split into two main areas: the Quality matrix appears at the top; and below it, the settings for the active Quality Level appear.",381],["Unity lets you assign a name to a given combination of quality options for easy reference. The rows of the matrix let you choose which of the different platforms each Quality Level applies to. The Default row at the bottom of the matrix is not a Quality Level in itself but rather sets the default Quality Level used for each platform (a green checkbox in a column denotes the level currently chosen for that platform). Unity comes with six Quality Levels pre-enabled but you can add your own levels.",381],["",381],["A: The Quality Level you have defined in this project.",381],["B: The currently active Quality Level.",381],["C: The configuration of the current Quality Level. ",381],["To delete an unwanted Quality Level, use the trashcan icon (the rightmost column).",381],["To select a Quality Level for editing, click on its name in the matrix.",381],["",381],["To define a new Quality Level, click the Add Quality Level button and type the name for the new level in the Name property box.",381],["Then you can choose which of the quality options documented in the following sections you need to update or set:",381],["",381],["Rendering",381],["Property Description ",381],["Render Pipeline The Render Pipeline Asset to use for this Quality Level. ",381],["Pixel Light Count Set the maximum number of pixel lights when Unity uses Forward Rendering. ",381],["AntiAliasing Choose the level of Multi-Sample Anti-aliasing (MSAA) that the GPU performs. The options are Disabled, 2x Multi Sampling, 4x Multi Sampling and 8x Multi Sampling.Anti aliasing smooths the appearance of polygon edges. As the level of anti-aliasing increases, so does the smoothness and the performance cost on the GPU.MSAA is compatible only with Forward rendering. For more information on other types of anti-aliasing and compatibility, see Post processing. ",381],["Realtime Reflection Probes Enable this option to update reflection probes during gameplay. ",381],["Resolution Scaling Fixed DPI Factor Downscales the device's screen resolution below its native resolution. For more details, see Android Player settings and iOS Player settings. ",381],["V Sync Count Choose to synchronize rendering with vertical blanks or not to synchronize at all. Unity can synchronize rendering with the refresh rate of the display device to avoid tearing artifacts. The available options are Every V Blank, Every Second V Blank, or Don't Sync. ",381],["Realtime GI CPU Usage The CPU budget you allow Enlighten Realtime Global Illumination to use for lighting calculations at runtime. Increasing this makes the system react faster to changes in lighting at a cost of using more CPU time.Note: Some platforms allow all CPUs to be occupied by worker threads whereas some enforce maximums. For example, some gaming consoles allow a maximum of 4 CPU cores. For Android devices, if it is a bigLittle architecture, only the little CPUs are used; otherwise the maximum is one less than the total number of CPUs. Note that this is only shown for Scriptable Render Pipelines.If you use the Built-in Render Pipeline, you can find this property in the graphics settings. ",381],["",381],["Tearing",381],["The picture on the display device is not continuously updated, but rather the updates happen at regular intervals much like frame updates in Unity. However, Unity's updates are not necessarily synchronized with those of the display, so it is possible for Unity to issue a new frame while the display is still rendering the previous one. This results in a visual artifact called \"tearing\" at the position onscreen where the frame change occurs.",381],["It is possible to get Unity to switch frames only during the period where the display device is not updating, the so-called \"vertical blank\". The V Sync Count option in Quality settings synchronizes frame switches with the device's vertical blank or optionally with every other vertical blank. The latter may be useful if the game requires more than one device update to complete the rendering of a frame.",381],["",381],["Textures",381],["",381],["Property Description ",381],["--------------------------------------------------- ------------------------------------------------------------ ",381],["Global Mipmap Limit Choose the highest resolution mipmap level that Unity uses when it renders textures. Higher mipmap levels have lower resolutions, which means that they require less GPU memory and GPU processing time.This property only affects textures with a texture shape of 2D. The options are: 0: Full Resolution 1: Half Resolution 2: Quarter Resolution 3: Eighth Resolution For more detailed information about what these resolutions mean, see Mipmaps introduction.Textures that do not have mipmaps render at their full resolution, regardless of the option you choose. ",381],["Mipmap Limit Groups Use these groups to designate specific textures that should disregard the globalTextureMipmapLimit or add a bias. This makes it possible to allocate more of your memory budget for important textures and less of it for less important textures.This property only affects textures with a texture shape of 2D. The options are: Offset Global Mipmap Limit: -3Offset Global Mipmap Limit: -2 Offset Global Mipmap Limit: -1Use Global Mipmap LimitOffset Global Mipmap Limit: +1Offset Global Mipmap Limit: +2Offset Global Mipmap Limit: +3Override Global Mipmap Limit: Full ResolutionOverride Global Mipmap Limit: Half ResolutionOverride Global Mipmap Limit: Quarter ResolutionOverride Global Mipmap Limit: Eighth Resolution The Offsets bias the Mipmap Limit value for the applicable group of textures. For example, if the Global Texture Mipmap Limit is Half Resolution and you select Offset Global Mipmap Limit: -1, then the new Mipmap Limit for the applicable group of textures is Full Resolution. The Overrides replace the Global Mipmap Limit for the applicable group of textures. For example, if the Global Texture Mipmap Limit is Half Resolution and you select Override Global Mipmap Limit: Full Resolution, then the new Mipmap Limit for the applicable group of textures is Full Resolution.Note: If you delete or rename a Mipmap Limit Group, this triggers a dialog box that provides you with the option to re-import the textures in that group. Undo does not revert these import changes. ",381],["Anisotropic Textures Choose if and how Unity uses anisotropic Textures. The options are Disabled, Per Texture and Forced On (that is, always enabled). ",381],["Texture Streaming Enable this checkbox to use Mipmap Streaming. If you are not planning to use the Mipmap Streaming system, disable this feature to avoid any overhead. ",381],["  Add All Cameras Enable this checkbox to make Unity calculate Mipmap Streaming for all active Cameras in the Project. This is enabled by default. For more information, see Mipmap Streaming system: Configuring Cameras. ",381],["  Memory Budget Set the total amount of memory you want to assign to all loaded textures (in MB) when using the Mipmap Streaming system. This is set to 512 MB by default. For more information, see Mipmpap Streaming system: Setting the memory budget. ",381],["  Renderers Per Frame This controls the CPU processing overhead for the Mipmap Streaming system for the main thread and associated jobs. This is 512 by default (that is, processing 512 Mesh renderers per frame). Lower values reduce processing time, but increase delays to Unity loading the mipmaps. ",381],["  Max Level Reduction Set the maximum number of mipmaps that the Mipmap Streaming system can discard if the Mipmap Streaming system reaches the Memory Budget. This is set to 2 by default (which means that the system discards no more than two mipmaps). This value is also the mipmap level that the Mipmap Streaming system initially loads at startup. For example, when this is set to 2, Unity skips the two highest mipmaps on first load.For more information, see Mipmpap Streaming system: Setting the memory budget. ",381],["  Max IO Requests Set the maximum number of texture file in/out (IO) requests from the MipMap Streaming system that are active at any one time. This is set to 1024 by default. This default is set high enough to prevent any IO cap beyond what is already active due to the Async Upload pipeline or file system itself.If the Scene Texture content changes significantly and rapidly, the system might attempt to load more Texture mipmaps than the file IO can keep up with. Lowering this value reduces the IO bandwidth that the Mipmap Streaming system generates. The result is a more rapid response to changing mipmap requirements. ",381],["",381],["Particles",381],["Property Description ",381],["--------------------------- ------------------------------------------------------------ ",381],["Soft Particles Indicates whether to fade particles as they approach the edges of opaque GameObject. For more information, see Soft particles. ",381],["Particle Raycast Budget Set the maximum number of raycasts to use for approximate particle system collisions (those with Medium or Low quality). See Particle System Collision Module. ",381],["",381],["Soft particles",381],["Soft particles fade out near intersections with other Scene geometry. This looks much nicer, but is more resource intensive to process and only works on platforms that support depth textures. Furthermore, you have to use the Deferred Shading rendering path, or make the camera render depth textures from scripts.",381],["",381],["Terrain",381],["Property Description ",381],["----------------------------------- ------------------------------------------------------------ ",381],["Billboards Face Camera Position Enable this option to force billboards to face the camera while rendering instead of the camera plane. This produces a better, more realistic image, but is more expensive to render. ",381],["Use Legacy Details Distribution Enable this option to use the previously supported scattering algorithm that often resulted in overlapping details. Included for backward compatibility with Terrains authored in Unity 2022.1 and earlier. ",381],["Terrain Setting Overrides Various override settings that, when enabled, override the value of all active terrains (except those with the \"Ignore Quality Settings\" setting enabled). For more information about these settings, see Terrain Settings. ",381],["  Pixel Error Value set to Terrain Pixel Error. See Terrain Settings. ",381],["  Base Map Dist. Value set to Terrain Basemap Distance. See Terrain Settings. ",381],["  Detail Density Scale Value set to Terrain Density Scale. See Terrain Settings. ",381],["  Detail Distance Value set to Terrain Detail Distance. See Terrain Settings. ",381],["  Tree Distance Value set to Terrain Tree Distance. See Terrain Settings. ",381],["  Billboard Start Value set to Terrain Billboard Start. See Terrain Settings. ",381],["  Fade Length Value set to Terrain Fade Length. See Terrain Settings. ",381],["  Max Mesh Trees Value set to Terrain Max Mesh Trees. See Terrain Settings. ",381],["",381],["Shadows",381],["Property Description ",381],["Shadowmask Mode Choose the shadowmask behavior when using the Shadowmask Mixed lighting mode. Use the Lighting window (menu: Window > Rendering > Lighting) to set this up in your Scene. ",381],["Distance Shadowmask Unity uses real-time shadows up to the Shadow Distance, and baked shadows beyond it. ",381],["Shadowmask Static GameObjects that cast shadows always cast baked shadows. ",381],["Shadows Choose which type of shadows to use. The available options are Hard and Soft Shadows, Hard Shadows Only and Disable Shadows. ",381],["Shadow Resolution Choose which resolution to render shadows at. The available options are Low Resolution, Medium Resolution, High Resolution and Very High Resolution. The higher the resolution, the greater the processing overhead. ",381],["Shadow Projection Choose which method to use for projecting shadows from a directional light. ",381],["Close Fit Renders higher resolution shadows but they can sometimes wobble slightly if the camera moves. ",381],["Stable Fit Renders lower resolution shadows but they don't wobble with camera movements. ",381],["Shadow Distance Enter the maximum distance from the Camera at which shadows are visible. Unity does not render shadows that fall beyond this distance. ",381],["Shadow Near Plane Offset Enter the offset shadow near plane to account for large triangles being distorted by shadow pancaking. ",381],["Shadow Cascades Choose the number of shadow cascades to use. The available options are No Cascades, Two Cascades, or Four Cascades. A higher number of cascades gives better quality but at the expense of processing overhead (see Shadow Cascades for further details). ",381],["Cascade splits Adjust the cascade shadow split(s) by moving the vertical line between each cascade left or right.Depending on what value you chose for the Shadow Cascades setting, you can see two or four different colors. If Shadow Cascades is set to No Cascades, then this entire control is hidden. ",381],["",381],["Async Asset Upload",381],["Property Description ",381],[":-------------------- :----------------------------------------------------------- ",381],["Time Slice Set the amount of CPU time in milliseconds per frame Unity spends uploading buffered Texture and Mesh data to the GPU. See LoadingTextureandMeshData. ",381],["Buffer Size Set the size in megabytes of the Async Upload Buffer Unity uses to stream Texture and Mesh data for the to the GPU. See LoadingTextureandMeshData. ",381],["Persistent Buffer Indicates whether the upload buffer should persist even when there is nothing left to upload. ",381],["",381],["Level of Detail",381],["Property Description ",381],[":--------------------------------- :----------------------------------------------------------- ",381],["Lod Bias Set the level-of-detail (LOD) bias. LOD levels are chosen based on the onscreen size of an object. When the size is between two LOD levels, the choice can be biased toward the less detailed or more detailed of the two Models available. This is set as a fraction from 0 to +infinity. When it is set between 0 and 1 it favors less detail. A setting of more than 1 favors greater detail. For example, setting LOD Bias to 2 and having it change at 50% distance, LOD actually only changes on 25%. ",381],["Maximum LOD Level Set the highest LOD that the game uses. See Maximum LOD level for more information. ",381],["",381],["Maximum LOD level",381],["Unity does not use Models which have a LOD below the MaximumLOD level and omits them from the build (which saves storage and memory space). Unity uses the smallest LOD value from all the MaximumLOD values linked with the Quality settings for the target platform. If an LOD level is included, then Models from that LODGroup are included in the build and always loaded at runtime for that LODGroup, regardless of the Quality setting being used. As an example, if LOD level 0 is used in any Quality setting then all the LOD levels are included in the build and all the referenced Models load at runtime.",381],["",381],["Meshes",381],["Property Description ",381],[":------------------------------------------ :----------------------------------------------------------- ",381],["Skin Weights Choose the number of bones that can affect a given vertex during an animation. The available options are 1 Bone, 2 Bones, 4 Bones, and Unlimited. ",381],["",381],["Terrain Quality Setting Overrides added in 2022.2",381],["QualitySettings",381],["Quaternion",382],["Unity uses the Quaternion class to store the three dimensional orientation of GameObjects, as well as using them to describe a relative rotation from one orientation to another.",382],["This page provides an overview of the Quaternion class and its common uses when scripting with it. For an exhaustive reference of every member of the Quaternion class, see the Quaternion script reference.",382],["It's important to understand the difference between Euler angles (the X, Y, & Z values that you see in the inspector for the rotation of a GameObject), and the underlying Quaternion value which Unity uses to store the actual rotation of GameObjects. For the basics of this topic, read Rotation and Orientation in Unity.",382],["When dealing with handling rotations in your scripts, you should use the Quaternion class and its functions to create and modify rotational values. There are some situations where it is valid to use Euler angles, but you should bear in mind:",382],["\nYou should use the Quaternion Class functions that deal with Euler angles\n",382],["\nRetrieving, modifying, and re-applying Euler values from a rotation can cause unintentional side-effects (see below)\n",382],["Creating and manipulating quaternions directly",382],["Unity's Quaternion class has a number of functions which allow you to create and manipulate rotations without needing to use Euler angles at all, and these are the ones you should use in most typical cases. Each of these links to the Script Reference with code samples:",382],["Creating Rotations:",382],["\nQuaternion.LookRotation\n",382],["\nQuaternion.Angle\n",382],["\nQuaternion.AngleAxis\n",382],["\nQuaternion.FromToRotation\n",382],["Manipulating Rotations:",382],["\nQuaternion.Slerp\n",382],["\nQuaternion.Inverse\n",382],["\nQuaternion.RotateTowards\n",382],["The Transform class also provides methods which allow you to work with the Quaternion rotations:",382],["\nTransform.Rotate & Transform.RotateAround\n",382],["Working with Euler angles",382],["In some cases it's more desirable to use Euler angles in your scripts. When doing so, it's important to note that you must keep your angles in variables, and only use them to apply them as Euler angles to your rotation, which should still ultimately be stored as a Quaternion. While it's possible to retrieve Euler angles from a quaternion, if you retrieve, modify and re-apply, problems are likely to arise.",382],["You can read more detail about exactly how these problems can arise in the eulerAngles script reference page.",382],["Here are some examples of mistakes commonly made using a hypothetical example of trying to rotate a GameObject around the X axis at 10 degrees per second. This is what you should avoid:",382],["// rotation scripting mistake #1",382],["// the mistake here is that we are modifying the x value of a quaternion",382],["// this value does not represent an angle, and does not produce desired results",382],["void Update ()",382],["var rot = transform.rotation;",382],["rot.x += Time.deltaTime * 10;",382],["transform.rotation = rot;",382],["// rotation scripting mistake #2",382],["// Read, modify, then write the Euler values from a Quaternion.",382],["// Because these values are calculated from a Quaternion,",382],["// each new rotation might return very different Euler angles, which might suffer from gimbal lock.",382],["void Update ()",382],["var angles = transform.rotation.eulerAngles;",382],["angles.x += Time.deltaTime * 10;",382],["transform.rotation = Quaternion.Euler(angles);",382],["And here is an example of using Euler angles in script correctly:",382],["// Rotation scripting with Euler angles correctly.",382],["// Store the Euler angle in a class variable, and only use it to",382],["// apply it as an Euler angle, but never rely on reading the Euler back.",382],["float x;",382],["void Update ()",382],["x += Time.deltaTime * 10;",382],["transform.rotation = Quaternion.Euler(x,0,0);",382],["See the Quaternion script reference page for more information.",382],["Quaternion",382],["Random",383],["The Random class provides you with easy ways of generating various commonly required types of random values.",383],["This page provides an overview of the Random class and its common uses when scripting with it. For an exhaustive reference of every member of the Random class and further technical details about it, see the Random script reference.",383],["Follow the links below for further details and examples of these useful methods.",383],["Simple random numbers",383],["Random.value gives you a random floating point number between 0.0 and 1.0. A common usage is to convert it to a number between zero and a range of your choosing by multiplying the result.",383],["Random.Range gives you a random number between a minimum and maximum value that you provide. It returns either an integer or a float, depending on whether the min and max values provided are integers or floats.",383],["Random points within Circles or Spheres",383],["Random.insideUnitCircle returns a randomly selected point inside a circle with a radius of 1 (Again you can multiply the result to get a random point within a circle of any size).",383],["Random.insideUnitSphere returns a randomly selected point inside a sphere with a radius of 1.",383],["Random.onUnitSphere returns a randomly selected point on the surface of a sphere with a radius of 1.",383],["Other types of random values",383],["Unity's random class also offers a few other types of random value.",383],["To generate a random rotation, use Random.rotation.",383],["To generate a random color, use Random.ColorHSV.",383],["Choosing a Random Item from an Array",383],["Picking an array element at random boils down to choosing a random integer between zero and the array's maximum index value (which is equal to the length of the array minus one). This is easily done using the built-in Random.Range function:-",383],["`var element = myArray[Random.Range(0, myArray.Length)];``",383],["Note that Random.Range returns a value from a range that includes the first parameter but excludes the second, so using myArray.Length here gives the correct result.",383],["Choosing Items with Different Probabilities",383],["Sometimes, you need to choose items at random but with some items more likely to be chosen than others. For example, an NPC may react in several different ways when it encounters a player:-",383],["50% chance of friendly greeting",383],["25% chance of running away",383],["20% chance of immediate attack",383],["5% chance of offering money as a gift",383],["You can visualize these different outcomes as a paper strip divided into sections each of which occupies a fraction of the strip's total length. The fraction occupied is equal to the probability of that outcome being chosen. Making the choice is equivalent to picking a random point along the strip's length (say by throwing a dart) and then seeing which section it is in.",383],["In the script, the paper strip is actually an array of floats that contain the different probabilities for the items in order. The random point is obtained by multiplying Random.value by the total of all the floats in the array (they need not add up to 1; the significant thing is the relative size of the different values). To find which array element the point is \"in\", firstly check to see if it is less than the value in the first element. If so, then the first element is the one selected. Otherwise, subtract the first element's value from the point value and compare that to the second element and so on until the correct element is found. In code, this would look something like the following:-",383],["float Choose (float[] probs) {",383],["float total = 0;",383],["foreach (float elem in probs) {",383],["total += elem;",383],["float randomPoint = Random.value * total;",383],["for (int i= 0; i < probs.Length; i++) {",383],["if (randomPoint < probs[i]) {",383],["return i;",383],["else {",383],["randomPoint -= probs[i];",383],["return probs.Length - 1;",383],["Note that the final return statement is necessary because Random.value can return a result of 1. In this case, the search will not find the random point anywhere. Changing the line",383],["if (randomPoint < probs[i])",383],["...to a less-than-or-equal test would avoid the extra return statement but would also allow an item to be chosen occasionally even when its probability is zero.",383],["Weighting continuous random values",383],["The array of floats method works well if you have discrete outcomes, but there are also situations where you want to produce a more continuous result - say, you want to randomize the number of gold pieces found in a treasure chest, and you want it to be possible to end up with any number between 1 and 100, but to make lower numbers more likely. Using the array-of-floats method to do this would require that you set up an array of 100 floats (i.e. sections on the paper strip) which is unwieldy; and if you aren't limited to whole numbers but instead want any number in the range, it's impossible to use that approach.",383],["A better approach for continuous results is to use an AnimationCurve to transform a 'raw' random value into a 'weighted' one; by drawing different curve shapes, you can produce different weightings. The code is also simpler to write:",383],["float CurveWeightedRandom(AnimationCurve curve) {",383],["return curve.Evaluate(Random.value);",383],["A 'raw' random value between 0 and 1 is chosen by reading from Random.value. It is then passed to curve.Evaluate(), which treats it as a horizontal coordinate, and returns the corresponding vertical coordinate of the curve at that horizontal position. Shallow parts of the curve have a greater chance of being picked, while steeper parts have a lower chance of being picked.",383],["Notice that these curves are not probability distribution curves like you might find in a guide to probability theory, but are more like inverse cumulative probability curves.",383],["By defining a public AnimationCurve variable on one of your scripts, you will be able to see and edit the curve through the Inspector window visually, instead of needing to calculate values.",383],["This technique produces floating-point numbers. If you want to calculate an integer result - for example, you want 82 gold pieces, rather than 82.1214 gold pieces - you can just pass the calculated value to a function like Mathf.RoundToInt().",383],["Shuffling a List",383],["A common game mechanic is to choose from a known set of items but have them arrive in random order. For example, a deck of cards is typically shuffled so they are not drawn in a predictable sequence. You can shuffle the items in an array by visiting each element and swapping it with another element at a random index in the array:-",383],["void Shuffle (int[] deck) {",383],["for (int i = 0; i < deck.Length; i++) {",383],["int temp = deck[i];",383],["int randomIndex = Random.Range(i, deck.Length);",383],["deck[i] = deck[randomIndex];",383],["deck[randomIndex] = temp;",383],["Choosing from a Set of Items Without Repetition",383],["A common task is to pick a number of items randomly from a set without picking the same one more than once. For example, you may want to generate a number of NPCs at random spawn points but be sure that only one NPC gets generated at each point. This can be done by iterating through the items in sequence, making a random decision for each as to whether or not it gets added to the chosen set. As each item is visited, the probability of its being chosen is equal to the number of items still needed divided by the number still left to choose from.",383],["As an example, suppose that ten spawn points are available but only five must be chosen. The probability of the first item being chosen will be 5 / 10 or 0.5. If it is chosen then the probability for the second item will be 4 / 9 or 0.44 (ie, four items still needed, nine left to choose from). However, if the first was not chosen then the probability for the second will be 5 / 9 or 0.56 (ie, five still needed, nine left to choose from). This continues until the set contains the five items required. You could accomplish this in code as follows:-",383],["Transform[] spawnPoints;",383],["Transform[] ChooseSet (int numRequired) {",383],["Transform[] result = new Transform[numRequired];",383],["int numToChoose = numRequired;",383],["for (int numLeft = spawnPoints.Length; numLeft > 0; numLeft--) {",383],["float prob = (float)numToChoose/(float)numLeft;",383],["if (Random.value <= prob) {",383],["numToChoose--;",383],["result[numToChoose] = spawnPoints[numLeft - 1];",383],["if (numToChoose == 0) {",383],["break;",383],["return result;",383],["Note that although the selection is random, items in the chosen set will be in the same order they had in the original array. If the items are to be used one at a time in sequence then the ordering can make them partly predictable, so it may be necessary to shuffle the array before use.",383],["Random Points in Space",383],["A random point in a cubic volume can be chosen by setting each component of a Vector3 to a value returned by Random.value:-",383],["var randVec = Vector3(Random.value, Random.value, Random.value);",383],["This gives a point inside a cube with sides one unit long. The cube can be scaled simply by multiplying the X, Y and Z components of the vector by the desired side lengths. If one of the axes is set to zero, the point will always lie within a single plane. For example, picking a random point on the \"ground\" is usually a matter of setting the X and Z components randomly and setting the Y component to zero.",383],["When the volume is a sphere (ie, when you want a random point within a given radius from a point of origin), you can use Random.insideUnitSphere multiplied by the desired radius:-",383],["var randWithinRadius = Random.insideUnitSphere * radius;",383],["Note that if you set one of the resulting vector's components to zero, you will not get a correct random point within a circle. Although the point is indeed random and lies within the right radius, the probability is heavily biased toward the center of the circle and so points will be spread very unevenly. You should use Random.insideUnitCircle for this task instead:-",383],["var randWithinCircle = Random.insideUnitCircle * radius;",383],["Random",383],["Rect Transform",384],["The Rect Transform component is the 2D layout counterpart of the Transform component. Where Transform represents a single point, Rect Transform represent a rectangle that a UI element can be placed inside. If the parent of a Rect Transform is also a Rect Transform, the child Rect Transform can also specify how it should be positioned and sized relative to the parent rectangle.",384],["Properties",384],["Property: Function: ",384],["Pos (X, Y, Z) Position of the rectangle's pivot point relative to the anchors. The pivot point is the location around which the rectangle rotates. ",384],["Width/Height Width and height of the rectangle. ",384],["Left, Top, Right, Bottom Positions of the rectangle's edges relative to their anchors. This can be thought of as padding inside the rectangle defined by the anchors. Shown in place of Pos and Width/Height when the anchors are separated (see below). To access these options click the square Anchor Presets box at the top left of the RectTransform component. ",384],["Anchors The anchor points for the lower left corner and the upper right corner of the rectangle. ",384],["        Min The anchor point for the lower left corner of the rectangle defined as a fraction of the size of the parent rectangle. 0,0 corresponds to anchoring to the lower left corner of the parent, while 1,1 corresponds to anchoring to the upper right corner of the parent. ",384],["        Max The anchor point for the upper right corner of the rectangle defined as a fraction of the size of the parent rectangle. 0,0 corresponds to anchoring to the lower left corner of the parent, while 1,1 corresponds to anchoring to the upper right corner of the parent. ",384],["Pivot Location of the pivot point around which the rectangle rotates, defined as a fraction of the size of the rectangle itself. 0,0 corresponds to the lower left corner while 1,1 corresponds to the upper right corner. ",384],["Rotation Angle of rotation (in degrees) of the object around its pivot point along the X, Y and Z axis. ",384],["Scale Scale factor applied to the object in the X, Y and Z dimensions. ",384],["Blueprint Mode Edit RectTransforms as if they were not rotated and scaled. This enabled snapping too. ",384],["Raw Edit Mode When enabled, editing pivot and anchor values will not counter adjust the position and size of the rectangle in order to make it stay in one place.",384],["Details",384],["Note that some RectTransform calculations are performed at the end of a frame, just before calculating UI vertices, in order to ensure that they are up to date with all the latest changes performed throughout the frame. This means that they haven't yet been calculated for the first time in the Start callback and first Update callback.",384],["You can work around this by creating a Start() callback and adding Canvas.ForceUpdateCanvases() method to it. This will force Canvas to be updated not at the end of the frame, but when that method is called.",384],["See the Basic Layout page for a full introduction and overview of how to use the Rect Transform.",384],["RectTransform",384],["Reflection Probe",385],["A Reflection Probe is rather like a camera that captures a spherical view of its surroundings in all directions. The captured image is then stored as a Cubemap that can be used by objects with reflective materials. Several reflection probes can be used in a given scene and objects can be set to use the cubemap produced by the nearest probe. The result is that the reflections on the object can change convincingly according to its environment.",385],["Properties",385],["Unity displays different properties in the Reflection Probe Inspector depending on the render pipeline that your Project uses.",385],["If your Project uses the Universal Render Pipeline (URP), see the URP package documentation microsite.",385],["If your Project uses the High Definition Render Pipeline (HDRP), see the HDRP package documentation microsite.",385],["If your Project uses the Built-in Render Pipeline, Unity displays the following properties:",385],["Property: Function: ",385],["Type Choose whether the probe is for a Baked, Custom, or Realtime setup. If you select Baked, the Reflection Probe does not capture GameObjects at runtime that have their Reflection Probe Static flag disabled. If you want to capture dynamic GameObjects in a baked Reflection Probe, select Custom and enable Dynamic Objects. ",385],["Dynamic Objects (Custom type only) Forces objects not marked as Static to be baked in to the reflection. ",385],["Cubemap (Custom type only) Sets a custom cubemap for the probe. ",385],["Refresh Mode (Realtime type only) Selects if and how the probe will refresh at runtime. The On Awake option renders the probe only once when it first becomes active. Every Frame renders the probe every frame update, optionally using Time Slicing (see below). The Via Scripting option refreshes the probe from a user script command rather than an automatic update. ",385],["Time Slicing (Realtime type only) How should the probe distribute its updates over time? The options are All Faces At Once (spreads update over nine frames), Individual Faces (updates over fourteen frames) and No Time Slicing (the update happens entirely within one frame). See below for further details. ",385],["Runtime settings ",385],["Importance A value that indicates the relative priority of this Reflection Probe for sorting. Unity renders probes with a higher value on top of those with a lower value where an object is in range of more than one probe. This setting also affects Blending. Refer to Using Reflection Probes for more information about reflection probe blending. ",385],["Intensity The intensity modifier that is applied to the texture of this probe in its shader. ",385],["Box Projection Check this box to enable projection for reflection UV mappings. ",385],["Box Size The size of the probe's bounding box in which the probe can contribute to reflections. The size is in world space. Also used by Box Projection. ",385],["Box Offset The center of the probe's bounding box in which the probe can contribute to reflections. The offset is relative to the position of the probe. Also used by Box Projection. ",385],["Cubemap capture settings ",385],["Resolution The resolution of the captured reflection image. ",385],["HDR Should High Dynamic Range rendering be enabled for the cubemap? This also determines whether probe data is saved in OpenEXR or PNG format. ",385],["Shadow Distance Distance at which shadows are drawn when rendering the probe. ",385],["Clear Flags Option to specify how empty background areas of the cubemap will be filled. The options are Skybox and Solid Color. ",385],["Background Background colour to which the reflection cubemap is cleared before rendering. ",385],["Culling Mask Allows objects on specified layers to be included or excluded in the reflection. See the section about the Camera's culling mask on the Layers page. ",385],["Use Occlusion Culling Should occlusion culling be used when baking the probe? ",385],["Clipping Planes Near and far clipping planes of the probe's \"camera\". ",385],["Details",385],["There are two buttons at the top of the Reflection Probe Inspector window that are used for editing the Size and Probe Origin properties directly within the Scene. With the left button (Size) selected, the probe's zone of effect is shown in the scene as a yellow box shape with handles to adjust the box's size.",385],["The right button (Origin) allows you to drag the probe's origin relative to the box. Note that the origin handle resembles the Transform position handle but the two positions are not the same. Also, the rotation and scale operations are not available for the probe box.",385],["The probe's Type property determines how the reflection data is created and updated:",385],["Baked probes store a static reflection cubemap generated by baking in the editor.",385],["Custom probes store a static cubemap which can either be generated by baking or set manually by the user.",385],["Realtime probes update the cubemap at runtime and can therefore react to dynamic objects in the scene.",385],["To make use of the reflection cubemap, an object must have the Reflection Probes option enabled on its Mesh Renderer and also be using a shader that supports reflection probes. When the object passes within the volume set by the probe's Size and Probe Origin properties, the probe's cubemap will be applied to the object.",385],["You can also manually set which reflection probe to use for a particular object using the settings on the object's Mesh Renderer. To do this, select one of the options for the Mesh Renderer's Reflection Probes property (Simple, Blend Probes or Blend Probes and Skybox) and drag the chosen probe onto its Anchor Override property.",385],["See the Reflection Probes section in the manual for further details about principles and usage.",385],["ReflectionProbe",385],["Relative Joint 2D",386],["The Relative Joint 2D connects two GameObjects controlled by Rigidbody physics to maintain in a position based on each other's location. Use this joint to keep two objects offset from each other, at a position and angle you decide.",386],["Refer to Comparing Fixed and Relative joints 2D for the differences between Relative Joint2D and FixedJoint2D.",386],["Property Function ",386],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",386],["Connected Rigid Body Specify the other object this joint connects to. Leave this as None to have the other end of the joint fixed at a point in space defined by the Connected Anchor property. Select the circle icon to the right to view a list of GameObjects to connect to. ",386],["Max Force Set the linear (or straight line) movement between joined GameObjects. A high value (up to 1,000) uses high force to maintain the offset. ",386],["Max Torque Set the angular (or rotation) movement between joined GameObjects. A high value (up to 1000) uses high force to maintain the offset. ",386],["Correction Scale Tweak the joint to correct its behaviorif required. Increasing the Max Force or Max Torque may affect the joint's behavior such that the joint doesn't reach its target, requiring you to correct it by adjusting this setting. The default setting is 0.3. ",386],["Auto Configure Offset Enable this property to automatically set and maintain the distance and angle between the connected objects. You do not need to manually enter the Linear Offset and Angular Offset when you enable this property. ",386],["Linear Offset Enter local space coordinates to specify and maintain the distance between the connected objects. ",386],["Angular Offset Enter local space coordinates to specify and maintain the angle between the connected objects. ",386],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",386],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",386],["Break Torque Set the torque threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",386],["Using this joint",386],["The aim of this joint is to maintain a relative linear and angular distance (offset) between two points. Those two points can be two Rigidbody2D components or a Rigidbody2D component and a fixed position in the world. Note: Connect to a fixed position in the world by setting Connected Rigidbody to None.",386],["The joint applies a linear and angular (torque) force to both connected Rigidbody objects. It uses a simulated motor that is preconfigured to be quite powerful: It has a high Max Force and Max Torque limit. You can lower these values to make the motor less powerful motor or turn-off it off completely.",386],["This joint has two simultaneous constraints:",386],["Maintain the specified linear offset between the two Rigidbody objects.",386],["Maintain the starting angular offset between the two Rigidbody objects.",386],["You can use this joint to construct physical objects that need to:",386],["Keep a distance apart from each other, as if they are unable to move further away from each other or closer together. (You decide the distance they are apart from each other. The distance can change in real-time.)",386],["Rotate with respect to each other only at particular angle. (You decide the angle.)",386],["Some uses may need the connection to be flexible, such as: A space-shooter game where the player has extra gun batteries that follow them. You can use the Relative Joint to give the trailing gun batteries a slight lag when they follow, but make them rotate with the player with no lag.",386],["Some uses may need a configurable force, such as: A game where the camera follows a player using a configurable force to keep track.",386],["Comparing Fixed and Relative joints 2D ",386],["FixedJoint2D** is spring type joint. RelativeJoint2D is a motor type joint with a maximum force and/or torque.",386],["The Fixed Joint uses a spring to maintain the relative linear and angular offsets and the Relative joint uses a motor. You can configure a joint's spring or motor.",386],["The Fixed joint works with anchor points (it’s derived from script AnchoredJoint2D): It maintains the relative linear and angular offset between the anchors. The Relative joint doesn’t have anchor points (it’s derived directly from script Joint2D).",386],["The Relative joint can modify the relative linear and angular offsets in real time: The Fixed joint cannot.",386],["Additional resources",386],["\nRefer to Joints 2D for more information about other 2D Joints.\n",386],["RelativeJoint2D",386],["Render Texture",387],["A Render Texture is a type of Texture that Unity creates and updates at run time. To use a Render Texture, create a new Render Texture using Assets > Create > Render Texture and assign it to Target Texture in your Camera component. Then you can use the Render Texture in a Material just like a regular Texture.",387],["Properties",387],["The Render Texture inspector is similar to the Texture Inspector.",387],["The Render Texture inspector displays the current contents of Render Texture in real-time and can be an invaluable debugging tool for effects that use render textures.",387],["Property: Function: ",387],["Dimension The dimensionality (type) of the render texture. ",387],["2D The render texture is two-dimensional. ",387],["Cube The render texture is a cube map. ",387],["3D The render texture is three-dimensional. ",387],["Size The size of the render texture in pixels. You can only enter power-of-two values, such as 128 and 256. ",387],["Anti-Aliasing The number of anti-aliasing samples. You can select None, 2 samples, 4 samples, or 8 samples. If you select None, Unity does not apply anti-aliasing. ",387],["Enable Compatible Color Format Enable this checkbox to make Unity apply a compatible format to the render texture if the defined Color Format is not supported by the platform. ",387],["Color Format The color format of the render texture. ",387],["Depth Buffer The format of the depth buffer. You can select No depth buffer, At least 16 bits depth (no stencil), or At least 24 bits depth (with stencil). The stencil buffer is a general purpose buffer that allows you to store an additional unsigned 8-bit integer (0–255) for each pixel drawn to the screen. ",387],["Enable Mip Maps Check this box to make the render texture generate mipmaps. ",387],["Auto generate Mip Maps Check this box to automatically fill the generated mipmaps with relevant data. If you don’t enable this, you'll have to use the GenerateMips function to fill those mipmaps manually. Alternatively, choose which mip to render into when you call the various SetRenderTarget functions. For more information about the SetRenderTarget functions, see Graphics.SetRenderTarget and Rendering.CommandBuffer.SetRenderTarget. ",387],["Dynamic Scaling Check this box to let dynamic resolution scaling resize the render texture. If you don’t enable this, the render texture maintains the same size regardless of the Dynamic Resolution setting. ",387],["Wrap Mode Controls how the texture is wrapped: ",387],["Repeat Tiles the texture to create a repeating pattern. ",387],["Clamp Stretches the edges of the texture. This is useful for preventing wrapping artifacts when you map an image onto an object and you don't want the texture to tile. ",387],["Mirror Tiles the texture to create a repeating pattern that mirrors the texture at every integer boundary. ",387],["Mirror Once Mirrors the texture once, and then falls back to clamping. ",387],["Per-axis Lets you set different wrap modes for the U axis and the V axis. The available options are also Repeat, Clamp, Mirror and Mirror Once. For example, when you use latitude-longitude environment maps for reflection probes, it is useful to have Clamp on the vertical coordinate (V axis), but Repeat on the horizontal coordinate (U axis). ",387],["Filter Mode Controls how the sampling of the texture uses nearby pixels. The options are: ",387],["Point Uses the nearest pixel. This makes the texture appear pixelated. ",387],["Bilinear Uses a weighted average of the four nearest texels. This makes the texture appear blurry when you magnify it. ",387],["Trilinear Uses a weighted average of the two nearest mips, which are bilinearly filtered. This creates a soft transition between mips, at the cost of a slightly more blurry appearance. ",387],["Aniso Level Anisotropic filtering level of the texture. This increases texture quality when you view the texture at a steep angle. Good for floor, ground, or road textures. ",387],["Example",387],["To create a live arena camera in your game:",387],["Create a new Render Texture asset using Assets >Create >Render Texture.",387],["Create a new Camera using GameObject > Camera.",387],["Assign the Render Texture to the Target Texture of the new Camera.",387],["Create a new 3D cube using GameObject > 3D Object > Cube.",387],["Drag the Render Texture onto the cube to create a Material that uses the render texture.",387],["Enter Play Mode, and observe that the cube's texture is updated in real-time based on the new Camera's output.",387],["2019-04-11 ",387],["Render Texture inspector changed in Unity 2017.2",387],["Ability to apply any GPU format to Render Textures added in Unity 2019.1",387],["RenderTexture",387],["Rigidbody component reference",388],["Use the Rigidbody component to apply a Rigidbody to your GameObject. A Rigidbody provides a physics-based way to control the movement and position of a GameObject. Instead of the Transform properties, you can use simulated physics forces and torque to move the GameObject, and let the physics engine calculate the results. For more information, see Introduction to Rigidbody Physics.",388],["To monitor the performance of a Rigidbody, use the Physics Debug Visualization tool.",388],["Properties",388],["Property Function ",388],["Mass Define the mass of the GameObject (in kilograms). Mass is set to 1 by default. As in real life, mass does not affect how quickly an item falls under gravity. To simulate resistance forces that slow down movement, use Drag. ",388],["Drag Define the decay rate of a Rigidbody’s linear velocity, to simulate drag, air resistance, or friction. Low values produce a slower decay rate, so that the GameObject moves faster for longer (this is useful for simulating heavy real-world objects). High values produce a faster decay rate, so that the GameObject slows down over a short amount of time (this is useful for simulating lightweight real-world objects). ",388],["Angular Drag Define the decay rate of a Rigidbody’s rotational velocity, to simulate drag, air resistance, or friction. Low values produce a slower decay rate, so that the GameObject moves faster for longer (this is useful for simulating heavy real-world objects). High values produce a faster decay rate, so that the GameObject slows down over a short amount of time (this is useful for simulating lightweight real-world objects). Note that you cannot make the GameObject stop rotating just by setting its Angular Drag to infinity. Angular Drag is set to 0.05 by default. ",388],["Automatic Center Of Mass Enable Automatic Center Of Mass to use the physics system's predicted center of mass for the Rigidbody, based on its shape and scale. Disable to set your own X, Y and Z coordinates for the center of mass. ",388],["Automatic Tensor Enable Automatic Tensor to use the physics system's predicted tensor and tensor rotation for the Rigidbody, based on all connected colliders. Like mass, an inertia tensor defines how much force or torque is required to make a Rigidbody move; however, while mass affects linear movement, inertia tensor affects rotational movement. Disable to set your own X, Y and Z coordinates for the tensor instead (see properties below). ",388],["\nInertia Tensor Define the inertia tensor of this Rigidbody. The higher the Inertia Tensor value is, the more torque is required to make the Rigidbody rotate on its axis. \n",388],["\nInertia Tensor Rotation Define the rotation of the inertia tensor. \n",388],["Use Gravity Toggle the effects of gravity on the Rigidbody. If enabled, the physics system applies a force to move the GameObject in the direction of simulated gravity (by default, down the y axis). Use Gravity is enabled by default. ",388],["Is Kinematic Toggle between physics-based and kinematic movement for the GameObject. When Is Kinematic is enabled, the physics system cannot apply forces to move or rotate the GameObject, instead, Unity can only move and rotate it via its Transform. See Introduction to Rigidbody physics: Rigidbody without physics-based movement for details. Is Kinematic is disabled by default. ",388],["Interpolate The Interpolate setting on a Rigidbody provides two options to smooth the appearance of a Rigidbody’s motion if it appears jittery at run time. These options are Interpolate and Extrapolate.Both interpolation and extrapolation calculate the pose of the Rigidbody (that is, the position and rotation) between physics updates. Which one you should choose depends on which option produces the best visual outcome for your use case.For detailed information on the Interpolate property, see Apply interpolation to a Rigidbody. ",388],["\nNone Apply no interpolation or extrapolation. This is the default option. \n",388],["\nInterpolate Use the pose and velocity of the Rigidbody from the previous two physics updates to calculate and apply the pose of the Rigidbody in the current frame.Interpolate is more accurate than Extrapolate, but it has a time lag of one physics update. It’s usually best for situations where accuracy is important; for example, if the Rigidbody’s velocity varies, or if there are other physics elements that influence the Rigidbody’s movement. \n",388],["\nExtrapolate Use the pose and velocity of the Rigidbody from the previous physics update, and predict the pose of the Rigidbody in the next physics update, to calculate and predict the pose in the current frame.Extrapolate makes the Rigidbody appear to move slightly ahead of where it should be, and can be slightly inaccurate. It’s usually best for situations where accuracy is not important; for example, if the Rigidbody moves at a constant velocity, and there are no other physics elements that influence the Rigidbody’s movement. \n",388],["Collision Detection Define how the physics system detects collisions between this Rigidbody’s collider and other colliders in the scene. Unity generates one collision per pair of colliders, and determines the method of collision detection based on this Collision Detection property. Collision Detection is set to Discrete by default. For more information on each collision detection type, see Continuous collision detection. ",388],["\nDiscrete The physics system uses discrete collision detection to calculate collisions for this Rigidbody’s collider. Select Discrete if this Rigidbody is not involved in any fast-moving collisions. Discrete collision detection is not very computationally intensive. \n",388],["\nContinuous The physics system uses sweep-based CCD to calculate collisions between this Rigidbody’s collider and any static colliders (that is, colliders without an associated Rigidbody). Select Continuous if this Rigidbody is involved in fast-moving collisions with static colliders. Sweep-based CCD is more computationally intensive than Discrete or Continuous Speculative. \n",388],["\nContinuous Dynamic The physics system uses sweep-based CCD to calculate collisions between this Rigidbody’s collider and all other colliders, except for those that are set to Discrete collision detection. Select Continuous Dynamic if this Rigidbody is involved in fast-moving collisions with any colliders. Sweep-based CCD is more computationally intensive than Discrete or Continuous Speculative. \n",388],["\nContinuous Speculative The physics system uses speculative continuous collision detection to calculate collisions between this Rigidbody’s collider and all other colliders. Select Continuous Speculative if collision accuracy is not important for this Rigidbody. Speculative collision detection is more computationally intensive than Discrete, but less computationally intensive than Continuous or Continuous Dynamic. \n",388],["Constraints Place restrictions on the Rigidbody's movement. ",388],["\nFreeze Position Stops the Rigidbody moving in the world X, Y and Z axes selectively. \n",388],["\nFreeze Rotation Stops the Rigidbody rotating around the local X, Y and Z axes selectively. \n",388],["Rigidbody",388],["Introduction to Rigidbody 2D",389],["You can attach a Rigidbody 2D component to a GameObject to control it with the physics system. The Rigidbody 2D shares similar properties with its standard Rigidbody counterpart, but it's adapted to 2D development. For example, GameObjects that have a Rigidbody 2D component attached to them can only move along the XY plane and can only rotate on an axis perpendicular to that plane.",389],["How a Rigidbody 2D works",389],["The Unity Editor’s Transform component defines how to position, rotate, and scale a GameObject (and its child GameObjects) within the Scene. When you change this component, it updates other components which can affect where they render or the position of other colliders. Unity's 2D physics system can move colliders and make them interact with each other, so Unity requires a method for the physics system to communicate this movement of colliders back to the Transform components. This movement and connection with colliders is what a Rigidbody 2D component is for. The Rigidbody 2D component overrides the Transform component and updates it to the position and/or rotation it defines instead.",389],["Note:** You can override the Rigidbody 2D by directly modifying the Transform component yourself (because Unity exposes all properties on all components). However, this will cause issues such as unpredictable movement or GameObjects passing through and into each other.",389],["Collider 2D and Rigidbody 2D interaction",389],["Any Collider 2D component added to the same GameObject or child GameObject is implicitly attached to that Rigidbody 2D GameObject, causing the Collider 2D to move with the Rigidbody 2D. When attached, you should never move the Collider 2D directly using the Transform or any collider offset; move the Rigidbody 2D instead. Moving the Rigidbody 2D provides the best performance and ensures correct collision detection. Collider 2Ds attached to the same Rigidbody 2D won’t collide with each other. This means you can create a set of colliders that act effectively as a single compound collider, all moving and rotating in sync with the Rigidbody 2D.",389],["Adding a Rigidbody 2D moves a sprite in a physically convincing way by applying forces from the scripting API. When you attach the appropriate collider component to the sprite GameObject, it's affected by collisions with other moving GameObjects. Using the Unity physics system can simplify many common gameplay mechanics and portray realistic behavior with minimal coding.",389],["Note:** Although Rigidbody 2Ds are often described as colliding with each other, it's the Collider 2Ds attached to each of those bodies which collide. Rigidbody 2Ds can't collide with each other without Colliders.",389],["Additional resources",389],["Rigidbody2D",389],["Rotation Constraints",390],["A Rotation Constraint component rotates a GameObject to match the rotation of its source GameObjects.",390],["Properties",390],["Property: Function: ",390],["Activate After you rotate the constrained GameObject and its source GameObjects, click Activate to save this information. Activate saves the current offset from the source GameObjects in Rotation At Rest and Rotation Offset then checks Is Active and Lock. ",390],["Zero Sets the rotation of the constrained GameObject to the source GameObjects. Zero resets the Rotation At Rest and Rotation Offset fields, then checks Is Active and Lock. ",390],["Is Active Toggles whether or not to evaluate the Constraint. To also apply the Constraint, make sure Lock is checked. ",390],["Weight The strength of the Constraint. A weight of 1 causes the Constraint to rotate this GameObject at the same rate as its source GameObjects. A weight of 0 removes the effect of the Constraint completely. This weight affects all source GameObjects. Each GameObject in the Sources list also has a weight. ",390],["Constraint Settings   ",390],["Lock Toggle to let the Constraint rotate the GameObject. Uncheck this property to edit the rotation of this GameObject. You can also edit the Rotation At Rest and Rotation Offset properties. If Is Active is checked, the Constraint updates the Rotation At Rest or Rotation Offset properties for you as you rotate the GameObject or its Source GameObjects. When you are satisfied with your changes, check Lock to let the Constraint to control this GameObject. This property has no effect in Play Mode. ",390],["Rotation At Rest The X, Y, and Z values to use when Weight is 0 or when the corresponding Freeze Rotation Axes is not checked. To edit these fields, uncheck Lock. ",390],["Rotation Offset The X, Y, and Z offset from the transform that is imposed by the Constraint. To edit these fields, uncheck Lock. ",390],["Freeze Rotation Axes Check X, Y, or Z to allow the Constraint to control the corresponding axes. Uncheck an axis to stop the Constraint from controlling it. This allows you to edit, animate, or script the unfrozen axis. ",390],["Sources The list of GameObjects that constrain this GameObject. Unity evaluates source GameObjects in the order they appear in this list. This order affects how this Constraint rotates the constrained GameObject. To get the result you want, drag and drop items in this list. Each source has a weight from 0 to 1. ",390],[" 2018-04-11 ",390],["Constraints added in 2018.1",390],["RotationConstraint",390],["Scale Constraints",391],["A Scale Constraint component resizes a GameObject to match the scale of its source GameObjects.",391],["Properties",391],["Property: Function: ",391],["Activate After you resize the constrained GameObject and its source GameObjects, click Activate to save this information. Activate saves the current offset from the source GameObjects in Scale At Rest and Scale Offset then checks Is Active and Lock. ",391],["Zero Sets the rotation of the constrained GameObject to the source GameObjects. Zero resets the Scale At Rest and Scale Offset fields then checks Is Active and Lock. ",391],["Is Active Toggles whether or not to evaluate the Constraint. To also apply the Constraint, make sure Lock is checked. ",391],["Weight The strength of the Constraint. A weight of 1 causes the Constraint to resize this GameObject at the same rate as its source GameObjects. A weight of 0 removes the effect of the Constraint completely. This weight affects all source GameObjects. Each GameObject in the Sources list also has a weight. ",391],["Constraint Settings   ",391],["Lock Toggle to let the Constraint resize the GameObject. Uncheck this property to edit the scale of this GameObject. You can also edit the Scale At Rest and Scale Offset properties. If Is Active is checked, the Constraint updates the Scale At Rest or Scale Offset properties for you as you resize the GameObject or its Source GameObjects. When you are satisfied with your changes, check Lock to let the Constraint to control this GameObject. This property has no effect in Play Mode. ",391],["Scale At Rest The X, Y, and Z values to use when Weight is 0 or when the corresponding Freeze Scale Axes is not checked. To edit these fields, uncheck Lock. ",391],["Scale Offset The X, Y, and Z offset from the transform that is imposed by the Constraint. To edit these fields, uncheck Lock. ",391],["Freeze Scale Axes Check X, Y, or Z to allow the Constraint to control the corresponding axes. Uncheck an axis to stop the Constraint from controlling it. This allows you to edit, animate, or script the unfrozen axis. ",391],["Sources The list of GameObjects that constrain this GameObject. Each source has a weight from 0 to 1. ",391],[" 2018-03-13 ",391],["Constraints added in 2018.1",391],["ScaleConstraint",391],["ScriptableObject",392],["A ScriptableObject is a data container that you can use to save large amounts of data, independent of class instances. One of the main use cases for ScriptableObjects is to reduce your Project's memory usage by avoiding copies of values. This is useful if your Project has a Prefab that stores unchanging data in attached MonoBehaviour scripts.",392],["Every time you instantiate that Prefab, it will get its own copy of that data. Instead of using the method, and storing duplicated data, you can use a ScriptableObject to store the data and then access it by reference from all of the Prefabs. This means that there is one copy of the data in memory.",392],["Just like MonoBehaviours, ScriptableObjects derive from the base Unity object but, unlike MonoBehaviours, you can not attach a ScriptableObject to a GameObject. Instead, you need to save them as Assets in your Project.",392],["When you use the Editor, you can save data to ScriptableObjects while editing and at run time because ScriptableObjects use the Editor namespace and Editor scripting. In a deployed build, however, you can’t use ScriptableObjects to save data, but you can use the saved data from the ScriptableObject Assets that you set up during development.",392],["Data that you save from Editor Tools to ScriptableObjects as an asset is written to disk and is therefore persistent between sessions.",392],["This page provides an overview of the ScriptableObject class and its common uses when scripting with it. For an exhaustive reference of every member of the ScriptableObject class, see the ScriptableObject script reference.",392],["Using a ScriptableObject",392],["The main use cases for ScriptableObjects are:",392],["Saving and storing data during an Editor session",392],["Saving data as an Asset in your Project to use at run time",392],["To use a ScriptableObject, create a script in your application's Assets folder and make it inherit from the ScriptableObject class. You can use the CreateAssetMenu attribute to make it easy to create custom assets using your class. For example:",392],["using UnityEngine;",392],["[CreateAssetMenu(fileName = \"Data\", menuName = \"ScriptableObjects/SpawnManagerScriptableObject\", order = 1)]",392],["public class SpawnManagerScriptableObject : ScriptableObject",392],["public string prefabName;",392],["public int numberOfPrefabsToCreate;",392],["public Vector3[] spawnPoints;",392],["With the above script in your Assets folder, you can create an instance of your ScriptableObject by navigating to Assets > Create > ScriptableObjects > SpawnManagerScriptableObject. Give your new ScriptableObject instance a meaningful name and alter the values. To use these values, you need to create a new script that references your ScriptableObject, in this case, a SpawnManagerScriptableObject. For example:",392],["using UnityEngine;",392],["public class Spawner : MonoBehaviour",392],["// The GameObject to instantiate.",392],["public GameObject entityToSpawn;",392],["// An instance of the ScriptableObject defined above.",392],["public SpawnManagerScriptableObject spawnManagerValues;",392],["// This will be appended to the name of the created entities and increment when each is created.",392],["int instanceNumber = 1;",392],["void Start()",392],["SpawnEntities();",392],["void SpawnEntities()",392],["int currentSpawnPointIndex = 0;",392],["for (int i = 0; i < spawnManagerValues.numberOfPrefabsToCreate; i++)",392],["// Creates an instance of the prefab at the current spawn point.",392],["GameObject currentEntity = Instantiate(entityToSpawn, spawnManagerValues.spawnPoints[currentSpawnPointIndex], Quaternion.identity);",392],["// Sets the name of the instantiated entity to be the string defined in the ScriptableObject and then appends it with a unique number.",392],["currentEntity.name = spawnManagerValues.prefabName + instanceNumber;",392],["// Moves to the next spawn point index. If it goes out of range, it wraps back to the start.",392],["currentSpawnPointIndex = (currentSpawnPointIndex + 1) % spawnManagerValues.spawnPoints.Length;",392],["instanceNumber++;",392],["Note:** The script file must have the same name as the class.",392],["Attach the above script to a GameObject in your Scene. Then, in the Inspector, set the Spawn Manager Values field to the new SpawnManagerScriptableObject that you set up.",392],["Set the Entity To Spawn field to any Prefab in your Assets folder, then click Play in the Editor. The Prefab you referenced in the Spawner instantiates using the values you set in the SpawnManagerScriptableObject instance.",392],["If you're working with ScriptableObject references in the Inspector, you can double click the reference field to open the Inspector for your ScriptableObject. You can also create a custom Editor to define the look of the Inspector for your type to help manage the data that it represents.",392],["2018-10-15 ",392],["ScriptableObject",392],["Shader assets",393],["A shader asset is an asset in your Unity project that defines a Shader object. It is a text file with a .shader extension. It contains shader code.",393],["Creating a new shader asset",393],["To create a new shader asset, use Assets > Create > Shader from the main menu or the Project View context menu.",393],["Inspector reference",393],["When you select a shader asset in your Unity project, the Inspector displays basic information about the Shader object that it defines. It also provides controls for compiling, and inspecting the compiled code.",393],["Import settings",393],["The Import settings section of the Inspector lets you set the default textures for a shader asset. Whenever a new Material is created with this shader, these textures are automatically assigned.",393],["Imported object",393],["The Imported object section of the Inspector lets you view and edit settings related to the Shader object itself, and how the shader compiler handles it.",393],["For Surface Shaders, the Show generated code",393],["button displays the code that Unity generates from your simplified source file. If you want to customize the generated code, you can just copy and paste it into your shader source file.",393],["You can use the Compile and show code popup menu to:",393],["Manually compile all shader variants for a selected graphics API. In the Unity Editor, the shader does not compile all shader variants for all graphics APIs until build time. You can manually force this to check for errors. For more information on what the shader compiler does and when, see Shader compilation",393],["Inspect the compiled shader code for selected platforms. This is mostly useful while optimizing shaders for performance; often you do want to know how many low-level instructions are generated. You can paste the generated code into GPU shader performance analysis tools (like",393],["or PVRShaderEditor.",393],["The Preprocess Only checkbox lets you view the preprocessed source for that shader asset.",393],["Shader",393],["SketchUp Import Settings window",394],["SketchUp is software that is commonly used for architecture modeling.",394],["Unity reads SketchUp files directly and supports the following SketchUp features:",394],["Textures and Materials, which Unity imports according to the settings on the Materials tab.",394],["Component Definitions and Groups, which are converted into meshes, instanced as GameObjects which you can place in the scene.",394],["Camera data for each scene in the file.",394],["Tip**: For a list of known issues and limitations with importing from SketchUp, see the Limitations section below.",394],["(A)** You can switch between the Sketch Up tab and the Materials tab. SketchUp import settings for Materials work exactly the same way as for standard FBX Models. For reference documentation on properties on the Materials tab, see the Materials tab documentation.",394],["(B)** The SketchUp section provides settings that are specific to SketchUp Models.",394],["(C)** The Meshes section provides the same settings as those available for FBX Models.",394],["(D)** The Geometry section provides a subset of the settings available for FBX Models, dealing with indexing and UVs.",394],["(E)** Use the Revert button to cancel any changes you make on the SketchUp Import Settings window or Apply to accept the changes and continue.",394],["",394],["SketchUp section",394],["To import a SketchUp file directly into Unity, drag it into the Assets folder using the Finder (macOS) or the File Manager (Windows). Then select the Asset file from the Project view inside the Unity Editor.",394],["Property: Function: ",394],["Generate Back Face Generate back-facing polygons in Unity. By default, Unity only imports the front-facing polygons to reduce polygon counts unless there is Material assigned to the back-facing polygons in SketchUp. ",394],["Merge Coplanar Faces Merge coplanar faces when generating meshes in Unity. ",394],["Unit Conversion Length measurement to unit conversion. ",394],["Unit drop-down box Choose the unit to use for the conversion. Defaults to Meters. ",394],["Value to convert This value determines how the Scale Factor is calculated (see Unit conversion below). ",394],["Longitude Read-only value from the Geo Coordinate system, used to identify a position on a geographic system. ",394],["Latitude Read-only value from the Geo Coordinate system, used to identify a position on a geographic system. ",394],["North Correction Read-only value from the Geo Coordinate system, used to describe the angle needed to rotate North to the Z axis. ",394],["Select Nodes Open a window where you can specify which nodes to import. A node represents an Entity, Group, or Component Instance in SketchUp. For example, if you have one file containing several couches, you can select the one you want to import. For more information, see Selecting SketchUpNodes below. ",394],["Import Cameras Import cameras from your .skp file. See Importing Cameras below for details. ",394],["",394],["Unit conversion",394],["By default, Unity scales SketchUp models to 1 meter (0.0254 inches) to 1 unit length.",394],["Changing the default Unit Conversion values affects the scale of the imported file:",394],["",394],["Selecting SketchUp Nodes",394],["Unity supports the visibility setting in the SketchUp file for each node. If a node is hidden in the SketchUp file, Unity does not import the node by default. However, you can override this behavior by clicking the Select Nodes button to display the SketchUp node hierarchy in the SketchUp Node Selection Dialog window.",394],["Each group and component instance in the file appears in the hierarchy as a node, which you can select or deselect. When you are finished selecting the nodes to include, click the OK button to import only the checked nodes.",394],["",394],["Importing cameras",394],["When Unity imports cameras from a .skp file, it converts these SketchUp camera types to the following:",394],["SketchUp Camera type: Unity Camera: ",394],["Parallel Projection Camera in orthographic mode ",394],["Perspective Camera in perspective mode ",394],["Two Point Physical Camera with a non-zero lens shift ",394],["",394],["Meshes property section",394],["Property Function ",394],["Mesh Compression Set the level of compression ratio to reduce the file size of the Mesh. When you increase the compression ratio lowers the precision of the Mesh by using the mesh bounds and a lower bit depth per component to compress the mesh data.To optimize game size, turn Mesh Compression up as high as possible without the Mesh looking too different from the uncompressed version. ",394],["Off Don't use compression. ",394],["Low Use a low compression ratio. ",394],["Medium Use a medium compression ratio. ",394],["High Use a high compression ratio. ",394],["Read/Write Enabled When you enable this option, Unity uploads the Mesh data to GPU-addressable memory, but also keeps it in CPU-addressable memory. This means that Unity can access the Mesh data at run time, and you can access it from your scripts. For example, you might want to do this if you're generating a Mesh procedurally, or if you want to copy some data from a Mesh. When this option is disabled, Unity uploads the Mesh data to GPU-addressable memory, and then removes it from CPU-addressable memory. By default, this option is enabled. In most cases, to save runtime memory usage, disable this option. For information on when to enable Read/Write Enabled, see the Mesh.isReadable API documentation. ",394],["Optimize Mesh Determine the order in which triangles are listed in the Mesh for better GPU performance. ",394],["Nothing No optimization. ",394],["Everything Let Unity reorder the vertices and indices for both polygons and vertices. This is the default. ",394],["Polygon Order Reorder only the polygons. ",394],["Vertex Order Reorder only the vertices. ",394],["Generate Colliders Enable this option to import your Meshes with Mesh Colliders automatically attached. This is useful to quickly generate a collision Mesh for environment geometry, but is not suitable for geometry you are moving. ",394],["",394],["Geometry properties section",394],["Property Function ",394],["Index Format Define the size of the Mesh index buffer. Note: For bandwidth and memory storage size reasons, you generally want to keep 16-bit indices as default, and only use 32-bit when necessary, which is what the Auto option uses. ",394],["Auto Let Unity decide whether to use 16-bit or 32-bit indices, depending on the Mesh vertex count when it imports a Mesh. This is the default setting. ",394],["16 bit Use 16-bit indices when importing a Mesh. If the Mesh is larger, then it is split into <64k vertex chunks. ",394],["32 bit Use 32-bit indices when importing a Mesh. If you are using GPU-based rendering pipelines (for example with compute shader triangle culling), using 32-bit indices ensures that all Meshes use the same index format. This reduces shader complexity, because they only need to handle one format. ",394],["Swap UVs Swap UV channels in your Meshes. Use this option if your diffuse Texture uses UVs from the lightmap. Unity supports up to eight UV channels but not all 3D modeling applications export more than two. ",394],["Generate Lightmap UVs Creates a second UV channel for Lightmapping. See Lightmapping for more information. ",394],["",394],["Limitations",394],["SketchUp import is not supported on Linux.",394],["Unity does not support GIF Textures.",394],["Unity imports only limited data from SketchUp Scenes.",394],["Unity does not support or import the following SketchUp features:",394],["2D Components (Text, dimensions)",394],["Animation settings",394],["Attributes",394],["Drawing Styles",394],["Dynamic components",394],["Layers",394],["Lines",394],["Section Planes",394],["Shadow settings",394],["Camera import fully supported starting in 2019.1 NewIn20191",394],["SketchUpImporter",394],["Skinned Mesh Renderer component",395],["The Skinned Mesh Renderer component renders a deformable mesh. Deformable meshes include skinned meshes (meshes that have bones and bind poses), meshes that have blend shapes, and meshes that run cloth simulation.",395],["To render a regular mesh, use a Mesh Renderer and a Mesh Filter instead.",395],["When you add a deformable mesh or a model with a deformable mesh to a scene, Unity adds a Skinned Mesh Renderer component to the resulting GameObject.",395],["In C# code, the SkinnedMeshRenderer class represents a Skinned Mesh Renderer component. The SkinnedMeshRenderer class inherits much of its functionality from the Renderer class. As such, this component has a lot in common with other components that inherit from Renderer, such as Line Renderer, and Trail Renderer.",395],["Troubleshooting Skinned Mesh Renderer visibility",395],["Unity uses the mesh’s bounds to determine whether to render it. If the entire bounding volume is outside the view of any active Camera, Unity does not render the mesh.",395],["In the case of a Skinned Mesh Renderer, its mesh bounds change as it deforms. Unity accounts for all animations present at import time when it calculates the maximum bounding volume, and uses this value to determine visibility; however, the following situations that occur after import might push vertices or bones outside of the maximum known bounds:",395],["Additive animations",395],["Changing the positions of bones from a script at runtime",395],["Using vertex shaders that change vertex positions",395],["Using ragdolls",395],["If this happens, Unity might not correctly determine the visibility of the mesh, and might fail to show it when expected.",395],["In these cases, you can try either of the following solutions to fix the problem:",395],["Modify the bounds to match the maximum potential bounding volume of your mesh. Use this option if possible, because it is better for performance.",395],["Enable Update When Offscreen, so that Unity continues to calculate the mesh bounds at all times, even when the mesh is not visible. Use this option if performance is not a major concern, or if you can’t predict the size of your bounding volume (for example, if you use ragdolls).",395],["Skinned Mesh Renderer Inspector reference",395],["\nProperties\n",395],["\nMaterials\n",395],["\nLighting\n",395],["\nProbes\n",395],["\nAdditional Settings\n",395],["",395],["Properties",395],["Property Description ",395],["Bounds Sets the bounding volume that Unity uses to determine when the mesh is offscreen. Unity pre-calculates the bounds when importing the mesh and animations in the Model file, and displays the bounds as a wireframe around the Model in the Scene view.If you set Update When Offscreen to True, Unity recalculates these bounds every frame and uses those calculated values to overwrite this property.This property corresponds to the Mesh.Bounds API. ",395],["BlendShapes Stores the weight values that Unity uses with the blend shapes defined in the mesh. ",395],["Quality Sets a runtime cap for the maximum number of bones that can affect a vertex. When Unity imports a mesh, Unity can skin every vertex with a number of bones from one to 32. A higher number of influential bones improves results during movement. However, this also increases the computational resources required, and therefore might affect performance.For performance reasons, it's better to set the number of bones that affect a vertex on import, rather than using a runtime cap. To do this, use the Rig tab of the Model Import Settings window and adjust the Skin Weights setting.In addition to using this setting to set a runtime cap per-component, you can also set a global limit for your project under Edit > Project Settings > Quality > Other > Skin Weights.This property corresponds to the SkinnedMeshRenderer.quality API. ",395],["Auto Use the global limit set in Quality Settings > Skin Weights.Note: If you import a custom number of skin weights and you want to allow more than four bones of influence, you must choose this option and make sure you set Skin Weights to Unlimited. ",395],["1 Bone Use only one bone per vertex. ",395],["2 Bones Use up to two bones per vertex. ",395],["4 Bones Use up to four bones per vertex. To allow more than four bones to influence a single vertex, use the Auto setting. ",395],["Update When Offscreen Enable this option to calculate the bounding volume at every frame, even when the mesh is not visible by any Camera. Disable this option to stop skinning when the GameObject is off-screen and resume it when the GameObject is visible again.This is disabled by default, for performance reasons.This property corresponds to the SkinnedMeshRenderer.updateWhenOffscreen API. ",395],["Mesh Set the mesh that this Renderer uses. The mesh should either contain a valid bind pose and skin weights, use blend shapes, or run cloth simulation. If the mesh does not use any of these techniques, consider using a Mesh Renderer and a Mesh Filter.Corresponds to the SkinnedMeshRenderer.sharedMesh property. ",395],["Root bone Set the transform that is the “root” of the skeleton. The bounds move along with this transform. ",395],["Rendering Layer Mask This property determines which rendering layer Unity assigns this renderer to. You can use this property to specify an additional rendering-specific layer mask. This filters the renderers based on the mask the renderer has.This property corresponds to the Renderer.renderingLayerMask API.Unity only displays this property when you use a Scriptable Render Pipeline. ",395],["Renderer Priority Sort renderers by priority. Lower values are rendered first and higher values are rendered last.This property corresponds to the Renderer.rendererPriority API.Unity only displays this property when you use the High Definition Render Pipeline. ",395],["",395],["Materials",395],["The Materials section lists all the materials that this component uses.",395],["",395],["",395],["",395],["Property",395],["Description",395],["",395],["",395],[" ",395],["",395],["Note:** If there are more materials than there are sub-meshes, Unity renders the last sub-mesh with each of the remaining materials, one on top of the next. If the materials are not fully opaque, you can layer different materials and create interesting visual effects. However, fully opaque materials overwrite previous layers, so any additional opaque materials that Unity applies to the last sub-mesh negatively affect performance and produce no benefit.",395],["",395],["Lighting",395],["The Lighting section contains properties that relate to lighting.",395],["",395],["",395],["",395],["Property",395],["Description",395],["",395],["",395],[" ",395],["",395],["",395],["Probes",395],["The Probes section contains properties relating to Light Probe and Reflection Probes.",395],["",395],["",395],["",395],["Property",395],["Description",395],["",395],["",395],[" ",395],["",395],["",395],["Additional Settings",395],["The Additional Settings section contains additional properties.",395],["",395],["",395],["",395],["Property",395],["Description",395],["",395],["",395],[" Skinned Motion VectorsEnable this option to double-buffer the Mesh skinning data, so Unity can interpolate the skinned motion and place it into the motion vector Texture. This uses more GPU memory, but leads to more correct motion vectors. ",395],["",395],["SkinnedMeshRenderer",395],["Skybox component reference",396],["The Skybox component overrides the skybox that Cameras on the same GameObject draw. It gives you control over what skybox a Camera renders and is useful when you have multiple Cameras in your Scene and want to draw different skyboxes depending on the Camera.",396],["Render pipeline compatibility",396],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",396],["-------------------- ---------------------------- ----------------------------------- ------------------------------------------ ",396],["Skybox component Yes (1) Yes (1) No (2) ",396],["Notes**:",396],["The Built-in Render Pipeline, and the Universal Render Pipeline (URP) both support this component.",396],["The High Definition Render Pipeline (HDRP) does not support this component and instead includes multiple sky generation solutions.",396],["Properties",396],["Property Description ",396],["----------------- ------------------------------------------------------------ ",396],["Custom Skybox The skybox that Cameras draw if they are on the same GameObject as this component. The Material you assign to this property should use a skybox Shader. ",396],["Skybox",396],["Slider Joint 2D",397],["This joint allows a GameObject controlled by Rigidbody physics to slide along a line in space. The object can freely move anywhere along the line in response to collisions or forces. Alternatively, it can be also be moved along by a motor force, with limits applied to keep its position within a certain section of the line.",397],["Property Function ",397],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",397],["Connected Rigidbody Specify the other object this joint connects to. Leave this as None to have the other end of the joint fixed at a point in space defined by the Connected Anchor property. Select the circle icon to the right to view a list of GameObjects to connect to. ",397],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other object this joint connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",397],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",397],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",397],["Auto Configure Angle Enable this property to automatically detect between the two GameObjects. The joint then keeps the same angle between the two GameObjects. You do not need to manually specify the angle when you enable this property. ",397],["Angle Enter the angle that the joint keeps between the two objects. ",397],["Use Motor Use the sliding motor? Check the box for yes. ",397],["Motor Expand for motor-related property settings. ",397],[" **Motor Speed** Set the target motor speed (meters/sec). \n",397],[" **Maximum Motor Force** Set the maximum force the motor can apply while attempting to reach the target speed. \n",397],["Use Limits Enable this property to set limits to the linear force. ",397],["Translation Limits Expand to set the limited distance that the translation can travel. ",397],[" **Lower Translation** Set the minimum distance the GameObject can be from the connected anchor point. \n",397],[" **Upper Translation** Set the maximum distance the GameObject can be from the connected anchor point. \n",397],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",397],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",397],["Break Torque Set the torque threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",397],["Using this joint",397],["Use this joint slide GameObjects by maintaining the position of two points on a configurable line that extends to infinity. Those two points can be two Rigidbody2D components, or a Rigidbody2D component and a fixed position in the world (by setting Connected Rigidbody to None).",397],["The joint applies a linear force to both connected Rigidbody objects to keep them on the line. It also has a simulated linear motor that applies linear force to move the Rigidbody GameObjects along the line. You can turn the motor off or on. Although the line is infinite, you can specify just a segment of the line that you want to use, using the Translation Limits option.",397],["This joint has three simultaneous constraints. All are optional:",397],["Maintain a relative linear distance away from a specified line between two anchor points on two Rigidbody objects.",397],["Maintain a linear speed between two anchor points on two Rigidbody objects along a specified line. (The speed is limited with a maximum force.)",397],["Maintain a linear distance between two points along the specified line.",397],["You can use this joint to construct physical objects that need to react as if they are connected together on a line. For example:",397],["A platform which can move up or down. The platform reacts by moving down when something lands on it but must never move sideways. You can use this joint to ensure platform to never moves up or down beyond certain limits. Use the motor to make the platform move up.",397],["Additional resources",397],["\nRefer to Joints 2D for more information about other 2D Joints.\n",397],["SliderJoint2D",397],["Sorting Groups",398],["Sorting Groups** allow you to group GameObjects with Sprite Renderers together, and control the order in which they render their Sprites. Unity renders Sprite Renderers in the same Sorting Group together, as if they are a single GameObject.",398],["Set up a Sorting Group",398],["To place a GameObject into a Sorting Group, add the Sorting Group component to it. To do this, select the GameObject and go to Component > Rendering > Sorting Group, or select the Add Component button in the Inspector window of the GameObject.",398],["When you add a Sorting Group component to a GameObject, Unity applies the same Sorting Group to all child GameObjects of the GameObject the component is attached to.",398],["The ‘Sprite’ child objects belong to the empty parent GameObject’s Sorting Group.",398],["Unity uses the Sorting Group’s settings to determine how to sort its Renderers among other Renderers and Sorting Groups in the Scene. See 2D sorting for more information.",398],["To sort Renderers within a Sorting Group, Unity uses the individual sort settings of the Renderers in the Sorting Group. See Sorting Renderers within a Sorting Group for more information.",398],["Sorting Group properties",398],["Unity uses a Sorting Group’s Sorting Layer and Order in Layer values to determine its priority in the rendering queue among other Sorting Groups and GameObjects in the Scene.",398],["Property Function ",398],["------------------ ------------------------------------------------------------ ",398],["Sorting Layer Select or add a Sorting Layer from this drop-down menu to determine the Sorting Group’s position in the render queue. Unity determines the Sorting Layer order by its place in the Sorting Layer settings; it renders Sorting Layers in the order they appear in the list. See Tags and Layers for information on setting up Sorting Layers. ",398],["Order in Layer Set the render order of this Sorting Group within its Sorting Layer. Unity queues Renderers with lower values first in the render queue, so they appear before Renderers with higher values. ",398],["Sort At Root Enable this option to ignore all parent Sorting Groups if this Sorting Group is nested. This allows this Sorting Group to be sorted against other Renderers and Sorting Groups at the root level. ",398],["See 2D Sorting for more information on using Sorting Layers to sort Sprites, and Unity’s Renderer sorting criteria.",398],["Sorting Renderers within a Sorting Group",398],["Unity sorts all Renderers within the same Sorting Group by their individual Sorting Layer and Order in Layer Renderer properties. Unity does not consider each Renderer’s individual Distance to Camera property during this sorting process. Instead, it sets a Distance to Camera value for the whole Sorting Group (including all its child Renderers), based on the position of the root GameObject that contains the Sorting Group component.",398],["The Sorting Group’s internal sort order remains constant when Unity sorts the Sorting Group among other Renderers and Sorting Groups in the Scene.",398],["The following diagram shows the sorting process.",398],["Unity treats all Renderers that belong to the same Sorting Group as a single layer, and sorts non-grouped Renderers based on their Sorting Layer and Order in Layer property settings.",398],["Particle System",398],["The Editor treats a Particle System that is a child of a Sorting Group as another Renderer within that Sorting Group, and sorts it internally among other Renderers based on its Sorting Layer and Order in Layer property settings.",398],["When Unity sorts the Particle System with the other Renderers within the Sorting Group, it ignores the Particle System’s Sorting Fudge value.",398],["Nested Sorting Groups",398],["A nested Sorting Group is a Sorting Group that has a parent Sorting Group. Unity sorts Renderers within a nested Sorting Group first, before their parent (see Sorting Renderers within a Sorting Group.",398],["After Unity determines the internal sort order of the nested Sorting Group, it sorts the nested Sorting Group with other Renderers or Sorting Groups within the parent Sorting Group. A nested Sorting Group can have a nested Sorting Group as a child. Unity sorts the innermost child Groups first, before their respective parents.",398],["The following diagram gives you an example of the nested Sorting Group sorting process.",398],["Sort At Root",398],["In certain situations, you may have a nested Sorting Group that is ordered based on the Scene Hierarchy. However, you may want this nested Sorting Group to be rendered separately from its parent Sorting Group without changing its position in the Scene Hierarchy.",398],["You can enable this option to allow this Sorting Group to ignore its parent Sorting Groups, which allows this Sorting Group to be sorted against other Renderers and Sorting Groups globally without requiring the GameObject to be reparented to another Transform. All child Renderers and Sorting Groups (which have not ignored their parents) will be sorted under this Sorting Group.",398],["Using Sorting Groups",398],["The most common way to create a 2D multi-Sprite character is to arrange and parent multiple Sprite Renderers together in the Hierarchy window to form a character. You can use Sorting Groups to help manage this kind of complex multi-Sprite character.",398],["In the example below, the Sprite Renderers belong to the same Sorting Layer, but with different Order in Layer values. Unity sorts the different parts of a character in the order that you want them to appear.",398],["After you’ve configured the Sorting Groups and Sorting Layers, you can save your character as a Prefab, and clone it as many times as you need to.",398],["However, Prefab Sprites all have the same Sorting Layer and Order in Layer values and render to the same layers as other Prefabs, which can cause different parts of a Prefab character to intersect and layer incorrectly.",398],["To make sure Prefabs keep their own render order consistent so they appear correctly, add the Sorting Group component to the root GameObject of each Prefab. Save the edited Prefab, so that all current and future instances of the Prefab also have the Sorting Group component.",398],["Each Prefab should have a Sorting Group component with the same Sorting Layer and Order in Layer property settings. This might cause Renderers in the Prefabs that are on the same Sorting Layer to render in inconsistent ways, because they have the same priority in the Render Queue.",398],["To prevent this issue, give each Prefab’s Sorting Group component a unique Order in Layer value. Unity renders Sorting Groups with lower Order in Layer values first and those with higher values overlap the Sorting Groups that are lower. Refer to Tags and Layers for more information about editing and reordering Sorting Layers.",398],["Each Prefab has a Sorting Group component with a unique Order in Layer value to ensure that Unity renders each character and their parts correctly.",398],["SortingGroup",398],["SpeedTree Import Settings window",399],["When you put SpeedTree files in your Unity project's Assets folder, Unity automatically imports and stores them as Unity assets. To view the import settings in the Inspector, select the file in the Project window. To customize how Unity imports the selected file, use the properties on the Model and Materials tabs on this window.",399],["Note:** These settings are for importing models created in SpeedTree. For information on models and animation created in other 3D modeling applications, see the Model Import Settings window.",399],["Unity recognizes and imports SpeedTree model assets in the same way it handles other assets. If you're using SpeedTree Modeler 7, re-save your .spm files using the Unity version of the Modeler. If you're using SpeedTree Modeler 8, save your .st files directly into the Unity project folder. The SpeedTree Importer generates a prefab with the LOD Group component configured. You can instantiate the prefab in a scene as a common prefab instance or select the prefab as a tree prototype and paint it across the terrain.",399],["Materials come embedded in the imported SpeedTree model as sub-assets. If you want to make adjustments to the materials, you can extract them to a location of your choice or re-use existing materials with Material Remapping.",399],["Topic Description ",399],[":--- :--- ",399],["Model tab Understand the options in the Model tab of the SpeedTree Import Settings window. ",399],["Materials tab Understand the options in the Materials tab of the SpeedTree Import Settings window. ",399],["New feature in 2018.3 NewIn20183",399],["SpeedTreeImporter",399],["Sphere Collider component reference",400],["The Sphere Collider is a basic sphere-shaped collision primitive.",400],["Properties",400],["Property: Function: ",400],["Is Trigger If enabled, this Collider is used for triggering events, and is ignored by the physics engine. ",400],["Material Reference to the Physics Material that determines how this Collider interacts with others. ",400],["Center The position of the Collider in the object's local space. ",400],["Radius The size of the Collider. ",400],["Details",400],["The collider can be resized via the Radius property but cannot be scaled along the three axes independently (ie, you can't flatten the sphere into an ellipse). As well as the obvious use for spherical objects like tennis balls, etc, the sphere also works well for falling boulders and other objects that need to roll and tumble.",400],["SphereCollider",400],["Spring Joint component reference",401],["The Spring Joint joins two Rigidbodies together but allows the distance between them to change as though they were connected by a spring.",401],["Properties",401],["Property: Function: ",401],["Connected Body The Rigidbody object that the object with the spring joint is connected to. If no object is assigned then the spring will be connected to a fixed point in space. ",401],["Anchor The point in the object's local space at which the joint is attached. ",401],["Auto Configure Connected Anchor Should Unity calculate the position of the connected anchor point automatically? ",401],["Connected Anchor The point in the connected object's local space at which the joint is attached. ",401],["Spring Strength of the spring. ",401],["Damper Amount that the spring is reduced when active. ",401],["Min Distance Lower limit of the distance range over which the spring will not apply any force. ",401],["Max Distance Upper limit of the distance range over which the spring will not apply any force. ",401],["Tolerance Changes error tolerance. Allows the spring to have a different rest length. ",401],["Break Force The force that needs to be applied for this joint to break. ",401],["Break Torque The torque that needs to be applied for this joint to break. ",401],["Enable Collision Should the two connected objects register collisions with each other? ",401],["Enable Preprocessing Disabling preprocessing helps to stabilize impossible-to-fulfil configurations. ",401],["Details",401],["The spring acts like a piece of elastic that tries to pull the two anchor points together to the exact same position. The strength of the pull is proportional to the current distance between the points with the force per unit of distance set by the Spring property. To prevent the spring from oscillating endlessly you can set a Damper value that reduces the spring force in proportion to the relative speed between the two objects. The higher the value, the more quickly the oscillation will die down.",401],["You can set the anchor points manually but if you enable Auto Configure Connected Anchor, Unity will set the connected anchor so as to maintain the initial distance between them (ie, the distance you set in the scene view while positioning the objects).",401],["The Min Distance and Max Distance values allow you to set a distance range over which the spring will not apply any force. You could use this, for example, to allow the objects a small amount of independent movement but then pull them together when the distance between them gets too great.",401],["SpringJoint",401],["Spring Joint 2D",402],["The Spring Joint 2D component allows two GameObjects controlled by Rigidbody physics to be attached together as if by a spring. The spring will apply a force along its axis between the two GameObjects, attempting to keep them a certain distance apart.",402],["Property Function ",402],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",402],["Connected Rigidbody Specify the other object this joint connects to. Leave this as None to have the other end of the joint fixed at a point in space defined by the Connected Anchor property. Select the circle icon to the right to view a list of GameObjects to connect to. ",402],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other object this joint connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",402],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the GameObject. ",402],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",402],["Auto Configure Distance Enable this property to automatically detect the distance between the two GameObjects and set it as the distance that the joint keeps between the two GameObjects. ",402],["Distance Set the distance that the spring should attempt to maintain between the two objects. (Can be set manually.) ",402],["Damping Ratio Set the degree to suppress spring oscillation. In the range 0 to 1, the higher the value, the less movement. ",402],["Frequency Set the frequency at which the spring oscillates while the GameObjects are approaching the separation distance you want (measured in cycles per second). In the range 0 to 1,000,000 - the higher the value, the stiffer the spring. Note: Setting Frequency to zero will create the stiffest spring type joint possible. ",402],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",402],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",402],["Using this joint",402],["This joint behaves like a spring, while keeping a linear distance between two points. You set this via the Distance setting. Those two points can be two Rigidbody2D components or a Rigidbody2D component and a fixed position in the world. (Connect to a fixed position in the world by setting Connected Rigidbody to None). The joint applies a linear force to both rigid bodies. It doesn't apply torque (an angle force).",402],["The joint uses a simulated spring. You can set the spring's stiffness and movement:",402],["A stiff, barely moving spring...",402],["A high (1,000,000 is the highest) Frequency == a stiff spring.",402],["A high (1 is the highest) Damping Ratio == a barely moving spring.",402],["A loose, moving spring...",402],["A low Frequency == a loose spring.",402],["A low Damping Ratio == a moving spring.",402],["When the spring applies its force between the objects, it tends to overshoot the distance you have set between them, and then rebound repeatedly, giving in a continuous oscillation. The Damping Ratio sets how quickly the objects stop moving. The Frequency sets how quickly the objects oscillate either side of the target distance.",402],["This joint has one constraint:",402],["Maintain a zero linear distance between two anchor points on two Rigidbody objects.",402],["You can use this joint to construct physical objects that need to react as if they are connected together using a spring or a connection which allows rotation. For example:",402],["A character who's body is composed of multiple objects that act as if they are semi-rigid. Use the Spring Joint to connect the character's body parts together, allowing them to flex to and from each other. You can specify whether the body parts are held together loosely or tightly.",402],["Note:** Spring Joint 2D uses a Box 2D spring-joint, which the Distance Joint 2D also uses with its frequency set to zero.",402],["Additional resources",402],["\nRefer to Joints 2D for more information about other 2D Joints.\n",402],["SpringJoint2D",402],["Sprite Atlas properties reference",403],["To create a Sprite Atlas in Unity, go to Assets > Create > 2D > Sprite Atlas. Unity creates the Sprite Atlas in the Assets folder, with the file extension .spriteatlas.",403],["Property Description ",403],["Type Set the Sprite Atlas' Type to either Master or Variant. Master is the default Type setting. When you set this property to Variant, Unity reveals additional property settings. For more information about the two types, refer to Master and Variant Sprite Atlases. ",403],["Include in Build Check this box to include the Sprite Atlas Asset in the current build. This option is enabled by default. ",403],["Allow Rotation Check this box to allow the Sprites to rotate when Unity packs them into the Sprite Atlas. This maximizes the density of Sprites in the combined Texture, and is enabled by default. Disable this option if the Sprite Atlas contains Canvas UI element Textures, as when Unity rotates the Textures in the Sprite Atlas during packing, it rotates their orientation in the Scene as well. ",403],["Tight Packing Check this box to pack Sprites based on their Sprite outlines instead of the default rectangle outline. This maximizes the density of Sprites in the combined Texture, and is enabled by default. ",403],["Padding Defines how many pixels are between the individual Sprite Textures in the Sprite Atlas. This is a buffer to prevent pixel overlap between Sprites that are next to each other in the Sprite Atlas. The default value is 4 pixels. ",403],["Read/Write Enabled Check this box to enable access to the Texture data from script functions (such as Texture2D.SetPixels, and other Texture2D functions). If you enable this property, Unity creates a copy of the Texture data. This doubles the amount of memory required for Texture Assets, and can negatively affect performance. This property is disabled by default. This property is only valid for uncompressed or DXT compressed Textures as Unity can't read other types of compressed Textures. ",403],["Generate Mip Maps Check this box to enable mipmap generation. For more information, refer to the Generate Mip Maps property in Sprite (2D and UI) Import Settings. ",403],["sRGB Check this box to store Textures in gamma space. For more information, refer to the sRGB (Color Texture) property in Sprite (2D and UI) Import Settings. ",403],["Filter Mode Select how Unity filters packed Textures when they stretch during transformations. This setting overrides the Filter Mode setting of any packed Sprite in the Atlas. For more information, refer to the Filter Mode property in Sprite (2D and UI) Import Settings. ",403],["Default (Platform-specific overrides panel on the Texture Import Settings window) Sets the resolution, the file size with associated memory size requirements, the pixel dimensions, and the quality of your Textures for each target platform of the Sprite Atlas. This panel lets you override these settings on the individual Textures that the Sprite Atlas contains. For more information, refer to Platform-specific overrides. ",403],["Objects For Packing Unity packs all items in this list into the currently selected Sprite Atlas. For more information, refer to Selecting items for the Objects for Packing list. ",403],["New in Unity 2017.1 NewIn20171",403],["SpriteAtlas",403],["Sprite Masks",404],["Sprite Masks are used to either hide or reveal parts of a Sprite or group of Sprites. The Sprite Mask only affects objects using the Sprite Renderer Component.",404],["Creating a Sprite Mask",404],["To create a Sprite Mask select from the main menu GameObject > 2D Object > Sprite Mask.",404],["Properties",404],["Property Function ",404],["Sprite The sprite to be used as a mask. ",404],["Alpha Cutoff If the alpha contains a blend between transparent and opaque areas, you can manually determine the cutoff point for which areas will be shown. You change this cutoff by adjusting the Alpha Cutoff slider. ",404],["Range Start The Range Start is the Sorting Layer which the mask starts masking from. ",404],["Sorting Layer The Sorting Layer for the mask. ",404],["Order in Layer The order within the Sorting Layer. ",404],["Range End ",404],["Mask All By default the mask will affect all sorting layers behind it (lower sorting order). ",404],["Custom The range end can be set to a custom Sorting Layer and Order in Layer. ",404],["Using Sprite Masks",404],["The Sprite Mask GameObject itself will not be visible in scene, only the resulting interactions with Sprites. To view Sprite Masks in the scene, select the Sprite Mask option in the Scene Menu.",404],["Sprite Masks are always in effect. Sprites to be affected by a Sprite Mask need to have their Mask Interaction set in the Sprite Renderer.",404],["By default a Sprite Mask will affect any sprite in the scene that has their Mask Interaction set to Visible or Not Visible Under Mask. Quite often we want the mask to only affect a particular sprite or a group of sprites.",404],["One method of ensuring the mask is interacting with particular sprites is to use a Sorting Group Component.",404],["An alternative method of controlling the effect of the mask is to use the Custom Range Settings of a Sprite Mask.",404],["The Range Start and Range End provides the ability to selectively mask sprites based on their Sorting Layer or Order in Layer.",404],["",404],["2017-05-26 ",404],["New feature in Unity 2017.1 NewIn20171",404],["SpriteMask",404],["Sprite Renderer",405],["The Sprite Renderer component renders the Sprite and controls how it visually appears in a Scene for both 2D and 3D projects.",405],["When you create a Sprite (GameObject > 2D Object > Sprite), Unity automatically creates a GameObject with the Sprite Renderer component attached. You can also add the component to an existing GameObject via the Components menu (Component > Rendering > Sprite Renderer).",405],["Properties",405],["Property Function ",405],["Sprite Define which Sprite texture the component should render. Click the small dot to the right to open the object picker window, and select from the list of available Sprite Assets. ",405],["Color Define the vertex color of the Sprite, which tints or recolors the Sprite’s image. Use the color picker to set the vertex color of the rendered Sprite texture. See the Color section below this table for examples. ",405],["Flip Flips the Sprite texture along the checked axis. This does not flip the Transform position of the GameObject. ",405],["Material Define the Material used to render the Sprite texture. ",405],["Draw Mode Define how the Sprite scales when its dimensions change. Select one of the following options from the drop-down box. ",405],["   Simple The entire image scales when its dimensions change. This is the default option. ",405],["   Sliced Select this mode if the Sprite is 9-sliced. ",405],["       Size          (‘Sliced’ or ‘Tiled’) Enter the Sprite's new Width and Height to scale the 9-sliced Sprite correctly. You can also use the Rect Transform Tool to scale the Sprite while applying 9-slicing properties. ",405],["   Tiled By default, this mode causes the middle of the 9-Sliced Sprite to tile instead of scale when its dimensions change. Use Tile Mode to control the tiling behavior of the Sprite. ",405],["       Continuous This is the default Tile Mode. In Continuous mode, the midsection tiles evenly when the Sprite dimensions change. ",405],["       Adaptive In Adaptive mode, the Sprite texture stretches when its dimensions change, similar to Simple mode. When the scale of the changed dimensions meets the Stretch Value, the midsection begins to tile. ",405],["        Stretch Value Use the slider to set the value between 0 and 1. The maximum value is 1, which represents double the original Sprite’s scale. ",405],["Sorting Layer Set the Sorting Layer of the Sprite, which controls its priority during rendering. Select an existing Sorting Layer from the drop-down box, or create a new Sorting Layer. ",405],["Order In Layer Set the render priority of the Sprite within its Sorting Layer. Lower numbered Sprites are rendered first, with higher numbered Sprites overlapping those below. ",405],["Mask Interaction Set how the Sprite Renderer behaves when interacting with a Sprite Mask. See examples of the different options in the Mask Interaction section below. ",405],["   None The Sprite Renderer does not interact with any Sprite Masks in the Scene. This is the default option. ",405],["   Visible Inside Mask The Sprite is visible where the Sprite Mask overlays it, but not outside of it. ",405],["   Visible Outside Mask The Sprite is visible outside of the Sprite Mask, but not inside it. The Sprite Mask hides the sections of the Sprite it overlays. ",405],["Sprite Sort Point Choose between the Sprite’s Center or its Pivot Point when calculating the distance between the Sprite and the camera. See the section on Sprite Sort Point for further details. ",405],["Details",405],["Color",405],["The image below demonstrates the effect of changing the RGB values on the Sprite Renderer’s Color setting. To change a Sprite’s opacity, change the value of its Color property’s Alpha (A) channel.",405],["Material",405],["Use a Material’s Material and Shader settings to control how Unity renders it. Refer to Materials, Shaders & Textures for further information on these settings.",405],["The default Material for newly created Sprites is Sprites - Default. Scene lighting does not affect this default Sprite. To have the Sprite react to lighting, assign the Material Default - Diffuse instead. To do this, click the small circle next to the Material field to bring up the object picker window, and select the Default-Diffuse Material.",405],["Mask Interaction",405],["Mask Interaction controls how the Sprite Renderer interacts with Sprite Masks. Select either Visible Inside Mask or Visible Outside Mask from the drop-down menu. The examples below demonstrate the effect of each option with a square Sprite and a circle Mask:",405],["To interact with a Sprite Mask, select Visible Inside Mask or Visible Outside Mask from the drop-down menu.",405],["Sprite Sort Point",405],["This property is only available when the Sprite Renderer’s Draw Mode is set to Simple.",405],["In a 2D project, the Main Camera is set to Orthographic Projection mode by default. In this mode, Unity renders Sprites in the order of their distance to the camera, along the direction of the Camera's view.",405],["By default, a Sprite’s Sort Point is set to its Center, and Unity measures the distance between the camera’s Transform position and the Center of the Sprite to determine their render order.",405],["To set to a different Sort Point from the Center, select the Pivot option. Edit the Sprite’s Pivot position in the Sprite Editor.",405],["2018-10-05 Added definition for new functionality.",405],["Ability to sort Sprite-based renderers using the pivot position added in 2017.3 New in 2017.3",405],["SpriteRenderer",405],["Sprite Shape Renderer",406],["The Sprite Shape Renderer component renders the geometry that Unity generates along a Spline and controls how it visually appears in a Scene for both 2D and 3D projects. Its inputs are derived from the Sprite Shape Profile.",406],["Properties",406],["Property Function ",406],["-------------------- ------------------------------ ------------------------ ",406],["Color Define the vertex color of the Sprite Shape geometry, which tints or recolors the Sprite Shape. Use the color picker to set the vertex. See the Color section below this table for examples. ",406],["Mask Interaction Set how the Sprite Renderer behaves when it interacts with a Sprite Mask . Refer to examples of the different options in the Mask Interaction section below. ",406],[" **None** The Sprite Shape Renderer does not interact with any Sprite Masks in the Scene. This is the default option. \n",406],[" **Visible Inside Mask** The Sprite Shape is visible where the Sprite Mask overlays it, but not outside of it. \n",406],[" **Visible Outside Mask** The Sprite Shape is visible outside of the Sprite Mask, but not inside it. The Sprite Mask hides the sections of the Sprite Shape it overlays. \n",406],["Sorting Layer Set the Sorting Layer of the Sprite Shape geometry, which controls its priority during rendering. Select an existing Sorting Layer from the drop-down box, or create a new Sorting Layer. ",406],["Order In Layer Set the render priority of the Sprite Shape within its Sorting Layer. Lower numbered Sprite Shapes are rendered first, with higher numbered Sprite Shapes overlapping those below. ",406],["",406],["Color",406],["The examples below show what happens when you change the RGB values on the Sprite Shape Renderer’s Color setting. To change a Sprite Shape’s opacity, change the value of the Alpha (A) channel, where lower values make the Sprite appear more transparent and higher values make the Sprite appear more opaque.",406],["Fill Material and Edge Material",406],["Use a Material’s Material and Shader settings to control how Unity renders Fill and Edge geometries. The default Material for a new Sprite Shape is ‘Sprites - Default’. Scene lighting does not affect this default Sprite Shape. To make the Sprite react to lighting, assign the Material ‘Default - Diffuse’ instead. To do this, select the small circle next to the Material field to bring up the Object Picker window, and select the ‘Default-Diffuse’ Material. Refer to Materials, Shaders & Textures for more information about these settings.",406],["",406],["Mask Interaction",406],["Mask Interaction controls how the Sprite Shape Renderer interacts with Sprite Masks. Select either Visible Inside Mask or Visible Outside Mask from the Mask Interaction drop-down menu. The examples below show the effect of either option:",406],["SpriteShapeRenderer",406],["Animation States",407],["Animation States** are the basic building blocks of an Animation State Machine. Each state contains an animation sequence (or blend tree) that plays when the character is in that state. Select the state in the Animator Controller, to view the properties for the state in the Inspector window.",407],["Property: Description: ",407],["Motion The animation clip or blend tree assigned to this state. ",407],["Speed The default speed of the motion for this state. Enable Parameter to modify the speed with a custom value from a script. For example, you can multiply the speed with a custom value to decelerate or accelerate the play speed. ",407],["Motion Time The time used to play the motion for this state. Enable Parameter to control the motion time with a custom value from a script. ",407],["Mirror This property only applies to states with humanoid animation. Enable to mirror the animation for this state. Enable Parameter to enable or disable mirroring from a script. ",407],["Cycle Offset The offset added to the state time of the motion. This offset does not affect the Motion Time. Enable Parameter to specify the Cycle Offset from a script. ",407],["Foot IK This property only applies to states with humanoid animation. Enable to respect Foot IK for this state. ",407],["Write Defaults Whether the AnimatorStates writes the default values for properties that are not animated by its motion. ",407],["Transitions The list of transitions originating from this state. ",407],["The default state, displayed in brown, is the state that the machine will be in when it is first activated. You can change the default state, if necessary, by right-clicking on another state and selecting Set As Default from the context menu. The solo and mute checkboxes on each transition are used to control the behaviour of animation previews - see this page for further details.",407],["A new state can be added by right-clicking on an empty space in the Animator Controller Window and selecting Create State->Empty from the context menu. Alternatively, you can drag an animation into the Animator Controller Window to create a state containing that animation. (Note that you can only drag Mecanim animations into the Controller - non-Mecanim animations will be rejected.) States can also contain Blend Trees.",407],["Any State",407],["Any State** is a special state which is always present. It exists for the situation where you want to go to a specific state regardless of which state you are currently in. This is a shorthand way of adding the same outward transition to all states in your machine. Note that the special meaning of Any State implies that it cannot be the end point of a transition (ie, jumping to \"any state\" cannot be used as a way to pick a random state to enter next).",407],["State",407],["Streaming Controller component",408],["The Streaming Controller component is part of the Mipmap Streaming system.",408],["Use the Streaming Controller component to enable Mipmap Streaming for a Camera in your scene when the the Add All Cameras setting in Quality settings (Edit > Project Settings > Quality) is disabled. You can also use it to change the mip bias setting per-Camera.",408],["This component takes the location and Camera settings (such as Field of View) directly from the Camera component.",408],["If the Camera is disabled, Unity does not calculate Mipmap Streaming for it, unless the Streaming Controller is enabled and in the preloading state. When the Streaming Controller and associated Camera are enabled, or if the Streaming Controller is in a preloading state, then Unity calculates Mipmap Streaming for this Camera. If the Streaming Controller is disabled, then Unity does not calculate Mipmap Streaming for this Camera.",408],["Property Description ",408],["Mip Map Bias Use this setting to force Unity to load a smaller or larger mipmap level than the one that the Mipmap Streaming system has automatically chosen. Enter a value in this field to set the offset that Unity applies to this mipmap level. Unity adds this offset to all the mipmaps assigned to Textures that are in the Camera’s view. For example, if Unity loads a texture at mip 1 and the Mip Map Bias is set to 1, this means it will load mip 2 instead.To control this setting using the API, use StreamingController.streamingMipmapBias. ",408],["StreamingController",408],["Surface Effector 2D",409],["The Surface Effector 2D applies tangent forces along the surfaces of colliders used by the effector in an attempt to match a specified speed along the surface. This is analogous to a conveyor belt.",409],["Colliders that you use with the effector would typically be set as non-triggers so that other colliders can come into contact with the surface.",409],["Properties",409],["Property Function ",409],["Use Collider Mask Enable this to use the Collider Mask property. If this not enabled, the global collision matrix will be used as the default for all Collider 2Ds. ",409],["Collider Mask The mask used to select specific Layers allowed to interact with the effector. Note that this option only displays if you have selected Use Collider Mask. ",409],["Speed Enter the speed to keep along the surface. ",409],["Speed Variation Enter a value here to apply a random increase in speed, where Unity selects a random number between 0 and the Speed Variation value. Entering a negative number here will result in a random reduction in speed instead, where Unity selects a random negative number between 0 and the Speed Variation value. ",409],["Force Scale Enter a value to scale the force that's applied when the effector attempts to meet the specified Speed along the surface. If this is 0, then Unity applies no force. If this is 1, then Unity applies full force. Note: Entering 1 to apply full force can counteract any other forces being applied to the target object and cause unwanted movement or behavior. It's recommended to enter a value less than 1 to prevent this issue from happening. ",409],["Use Contact Force Enable this to have Unity apply force at the point of contact between the surface and the target collider. Enabling contact forces can cause the target object to rotate when in contact with a surface. ",409],["Use Friction Enable this to enable friction between the collider and the surface it contacts. ",409],["Use Bounce Enable this to enable bounce between the collider and the surface it contacts. ",409],["SurfaceEffector2D",409],["Tags and Layers",410],["The Tags and Layers settings (main menu: Edit > Project Settings, then select the Tags and Layers category) allows you to set up Tags, Sorting Layers and Layers.",410],["",410],["Tags",410],["Tags** are marker values that you can use to identify objects in your Project (see documentation on Tags for further details). To add a new Tag, click the plus button (+) at the bottom-right of the list, and name your new Tag.",410],["Note that once you have named a Tag, you cannot rename it. To remove a Tag, click on it and then click the minus (-) button at the bottom-right of the list.",410],["",410],["Sorting Layers",410],["Sorting Layers are used in conjunction with Sprite graphics in the 2D system. Sorting refers to the overlay order of different Sprites.",410],["To add and remove Sorting Layers, use the plus and minus (+/-) buttons at the bottom-right of the list. To change their order, drag the handle at the left-hand side of each Layer item.",410],["",410],["Layers",410],["Use Layers throughout the Unity Editor as a way to create groups of objects that share particular characteristics (see documentation on Layers for further details). Use Layers primarily to restrict operations such as raycasting or rendering, so that they are only applied to the relevant groups of objects. Layers marked as Builtin Layer are default layers used by Unity, which you cannot edit. You can customise layers marked as User Layer.",410],["To customise User Layers, type a custom name into the text field for each one you wish to use. Note that you can't add to the number of Layers but, unlike Tags, you can rename Layers.",410],["TagManager",410],["Target Joint 2D",411],["This joint connects to a specified target, rather than another Rigidbody object as other joints do. This behaves in a similar way to a spring type joint.",411],["Property Function ",411],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",411],["Target Define where (in terms of x, y-coordinates in world space) the other end of the joint attempts to move. ",411],["Auto Configure Target Enable this property to automatically set the other end of the joint to the current position of the GameObject. Note: When this option is enabled, the target changes as you move the GameObject but the target will not change if the option is not enabled. ",411],["Max Force Set the force that the joint can apply when attempting to move the object to the target position. The higher the value, the higher the maximum force. ",411],["Damping Ratio Set the degree to suppress spring oscillation. In the range 0 to 1, the higher the value, the less movement. ",411],["Frequency Set the frequency at which the spring oscillates while the GameObjects are approaching the separation distance you want (measured in cycles per second). In the range 0 to 1,000,000 - the higher the value, the stiffer the spring. Note: Setting Frequency to zero will create the stiffest spring type joint possible. ",411],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",411],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",411],["Using this joint",411],["Use this joint to connect a Rigidbody GameObject to a point in space. The aim of this joint is to keep zero linear distance between two points: An anchor point on a Rigidbody object and a world space position, called the \"Target\". The joint applies linear force to the Rigidbody object, it does not apply torque (angular force).",411],["The joint uses a simulated spring. You can set the spring's stiffness and movement by adjusting its settings. For example, to set a stiff and barely moving spring:",411],["Set a high (1,000,000 is the highest) Frequency == a stiff spring.",411],["Set a high (1 is the highest) Damping Ratio == a barely moving spring.",411],["To simulate a looser and more freely moving spring, you would use the following settings:",411],["Set a low Frequency == a loose spring.",411],["Set a low Damping Ratio == a moving spring.",411],["When the spring applies its force between the Rigidbody object and target, it tends to overshoot the distance you have set between them, and then rebound repeatedly, giving in a continuous oscillation. The Damping Ratio sets how quickly the Rigidbody object stops moving. The Frequency sets how quickly the Rigidbody object oscillates either side of the distance you have specified.",411],["This joint has one constraint:",411],["Maintain a zero linear distance between the anchor point on a Rigidbody object and a world space position (Target).",411],["You can use this joint to construct physical objects that need to move to designated target positions and stay there until another target position is selected or the target is cleared. For example:",411],["A game where players pick up cakes, using a mouse-click, and drag them into to a plate. You can use this joint to move each cake to the plate.",411],["You could also use the joint to allow objects to hang: If the anchor point is not the center of mass, then the object will rotate. Such as:",411],["A game where players pick up boxes. If they use a mouse-click to pick a box up by its corner and drag it, it will hang from the cursor.",411],["Additional resources",411],["\nRefer to Joints 2D for more information about other 2D Joints.\n",411],["TargetJoint2D",411],["Terrain Collider component reference",412],["The Terrain Collider implements a collision surface with the same shape as the Terrain object it is attached to.",412],["Properties",412],["Property: Function: ",412],["Material Reference to the Physics Material that determines how this Collider interacts with others. ",412],["Terrain Data The terrain data. ",412],["Enable Tree Colliders When selected Tree Colliders will be enabled. ",412],["Details",412],["You should note that versions of Unity before 5.0 had a Smooth Sphere Collisions property for the Terrain Collider in order to improve interactions between terrains and spheres. This property is now obsolete since the smooth interaction is standard behaviour for the physics engine and there is no particular advantage in switching it off.",412],["TerrainCollider",412],["Terrain Layers",413],["A Terrain Layer is an Asset that defines a Terrain’s surface qualities. A Terrain Layer holds Textures and other properties that the Terrain's Material uses to render the Terrain surfaces. Because Terrain Layers are Assets, you can easily reuse them on multiple Terrain tiles.",413],["You can add Textures to the surface of a Terrain to create coloration and fine detail. Terrain GameObjects are usually large, so it is best to use a base Terrain Layer with Textures that tile over the surface and repeat seamlessly. You can use multiple Terrain Layers, each with different Textures, to build up interesting, varied Terrain surfaces.",413],["The first Terrain Layer you apply to a Terrain automatically becomes the base layer, and spreads over the whole landscape. In addition, you can paint areas with other Terrain Layers to simulate different ground surfaces, such as grass, desert, or snow. To create a gradual transition between grassy countryside and a sandy beach, you might choose to apply Textures with variable opacity.",413],["Creating Terrain Layers",413],["To create a Terrain Layer directly in the Terrain Inspector, click the paintbrush icon in the toolbar at the top of the Terrain Inspector, and select Paint Texture from the drop-down menu. At the bottom of the Terrain Layers section, click the Edit Terrain Layers button, and choose Create Layer.",413],["When you select Create Layer, Unity opens the Select Texture2D window. Here, choose the image to use as the Diffuse channel of the Terrain Layer. To assign a Normal Map or Mask Map Texture to your Terrain Layer, select the corresponding Terrain Layer in the Project view, and use its Inspector window.",413],["Alternatively, to create a Terrain Layer Asset that isn’t automatically associated with a Terrain, right-click the Project window, and select Create > Terrain Layer from the context menu. Then, configure the various properties in the Inspector window for your new Terrain Layer.",413],["For information about how the number of Terrain Layers affects rendering performance, see Rendering performance. Even assigned Terrain Layers that you do not actually paint onto the Terrain tile might impact the rendering performance.",413],["Adding Terrain Layers",413],["Initially, a Terrain has no Terrain Layers assigned to it. By default, it uses a checkerboard Texture until you add a Terrain Layer.",413],["After you create a Terrain Layer in your Project, click the Edit Terrain Layers button and select Add Layer to open the Select TerrainLayer window. Double-click on a Terrain Layer in this window to add it to your Terrain.",413],["Terrain Layer properties",413],["Depending on the Material that is set in the Terrain Settings, as well as the Render Pipeline that is currently in use, you might see different options and properties in the Inspector.",413],["Property Description ",413],["Diffuse The Diffuse Texture represents the base color Texture of the Terrain Layer. The Alpha channel of the Diffuse Texture has different uses, which depend on the active Scriptable Render Pipeline and Shader you use to render the Terrain.For example, the High Definition Render Pipeline (HDRP) and Universal Render Pipeline (URP) use the Alpha channel for Smoothness. However, if there is a Mask Map Texture on the Terrain Layer, it uses the Alpha channel of the Diffuse Texture for Density values. ",413],["Color Tint If you assign a Diffuse Texture, a new field called Color Tint appears in the Terrain Layer settings. Click the color picker field and select a color to use.Color Tint is a feature available in HDRP and URP. ",413],["Opacity as Density Specifies whether to render the Terrain Layer using the value stored in the Alpha channel of the Terrain Layer's Diffuse Texture, instead of the usual splatmap weight or the height value from the Mask Map. Unity uses the Alpha channel value as a threshold value for layer blending.Opacity as Density is a feature available in HDRP and URP. This option becomes available on each Terrain Layer when you disable the Enable Height-based Blend option on the Terrain's Terrain Lit Material, and when you assign Diffuse and Mask Map Textures to the Terrain Layer.",413],["Normal Map The Normal Map Texture contains the normal information for your Terrain Layer. Unity uses this information in lighting calculations.• If you do not assign a Normal Map Texture and enable instancing in the Terrain Settings, the Terrain uses the normals generated from the Terrain heightmap.• If you assign a Normal Map Texture and enable instancing, Unity uses the Normal Map Texture instead of the normals generated from the heightmap.• If you disable instancing on the Terrain, the built-in Terrain Material uses normals generated from the Terrain geometry, even if you assign a Normal Map Texture on the Terrain Layer. ",413],["Normal Scale If you assign a Normal Map Texture, a new field called Normal Scale appears in the Terrain Layer settings. This value acts as a scaling factor for the normal values present in the Normal Map. A value of 0 means that the normals stored in the Normal Map have a scale of 0, while a value of 1 means that the normals are at full scale or influence.Examples and results of different Normal Scale values: ",413],["Normal Scale = 0 • Multiplies the unpacked normal value by 0.• The strength, and thus the length, of the normal will be 0, and has no effect on lighting calculations. The mesh triangle on the Terrain effectively uses the mesh normal for lighting calculations. ",413],["Normal Scale = 1 • Multiplies the unpacked normal value by 1.• The strength of the normal will be 100%. ",413],["Normal Scale = 2 • Multiplies the unpacked normal value by 2.• The strength of the normal will be 200%, and appear twice as pronounced as normals with a Normal Scale of 1. ",413],["Normal Scale = -1 • Multiples the unpacked normal value by -1.• The strength of the normal will be at 100% but negated, making the normals point in the opposite direction from normals with a Normal Scale of 1. ",413],["Mask Map The TerrainLit Shader, which is part of the High Definition Render Pipeline (HDRP) and Universal Render Pipeline (URP), uses this Mask Map Texture data. Custom Terrain shaders might also use this Texture for user-defined purposes, such as ambient occlusion or height-based blending.For the HDRP and URP TerrainLit Shader, the RGBA channels of the Mask Map Texture correspond to: ",413],["R Metallic ",413],["G Ambient Occlusion",413],["B Height ",413],["A Smoothness (Diffuse Alpha becomes Density) ",413],["Channel Remapping If you assign a Mask Map Texture, a new heading called Channel Remapping appears in the Terrain Layer settings. Click the triangle next to that heading to display the fields for minimum and maximum RGBA values. Unity uses these ranges to remap values in each channel of the Mask Map Texture. ",413],["Specular The specular highlight color of the Terrain Layer. ",413],["Metallic The overall metallic value of the Terrain Layer. ",413],["Smoothness The overall smoothness value of the Terrain Layer. ",413],["Tiling Settings The tiling settings that apply to all Textures the Terrain Layer uses. ",413],["Size The size of the Textures in Terrain space, and how often the Textures tile. ",413],["Offset A base offset that Unity applies to the sample location for each Texture in the Terrain Layer. ",413],["Texture painting",413],["Unity applies the first Terrain Layer you add to the entire landscape. If you add multiple Terrain Layers, use the Paint Texture tool to apply subsequent Textures to your Terrain.",413],["If you add a new Terrain tile without any Terrain Layers, and paint on it, the system automatically adds the selected Terrain Layer to that new Terrain tile. Because this is the first Terrain Layer, that Texture becomes the base layer, and fills the entire Terrain tile.",413],["In the Terrain Inspector, under Brushes, there is a box that displays the available Brushes, along with the Brush Size and Opacity options underneath. See Creating and Editing Terrains for more information about these tools.",413],["",413],["Rendering performance",413],["The number of Terrain Layers you assign to a Terrain tile might impact the performance of the renderer. The maximum recommended number of Terrain Layers depends on which render pipeline your Project uses.",413],["If your Project uses the Universal Render Pipeline (URP) or Built-in Render Pipeline, you can use four Terrain Layers per Texture pass, with no limit on the number of passes. This means that although you are allowed to use as many Terrain Layers as you want, each pass increases the time spent rendering the Terrain. For maximum performance, limit each of your Terrain tiles to four Terrain Layers.",413],["If your Project uses the High Definition Render Pipeline (HDRP), you can add up to eight Terrain Layers per Terrain tile, and the system renders them in a single pass. No additional passes are possible. If you add more than eight Terrain Layers, they appear in the Unity Editor, but are ignored at run time.",413],["2021-01-27 ",413],["Updated information about Color Tint and Opacity as Density properties",413],["TerrainLayer",413],["Text assets",414],["Text Assets are a format for imported text files. When you drop a text file into your Project Folder, it will be converted to a Text Asset. The supported text formats are:",414],[".txt**",414],[".html**",414],[".htm**",414],[".xml**",414],[".bytes**",414],[".json**",414],[".csv**",414],[".yaml**",414],[".fnt**",414],[".md**",414],["Note that script files are also considered text assets for the purposes of using the AssetDatabase.FindAssets function, so they will also be included in the list of results when this function is used with the \"t:TextAsset\" filter.*",414],["Properties",414],["Property: Function: ",414],["Text The full text of the asset as a single string. ",414],["Details",414],["The Text Asset is a very specialized use case. It is extremely useful for getting text from different text files into your game while you are building it. You can write up a simple .txt file and bring the text into your game very easily. It is not intended for text file generation at runtime. For that you will need to use traditional Input/Output programming techniques to read and write external files.",414],["Consider the following scenario. You are making a traditional text-heavy adventure game. For production simplicity, you want to break up all the text in the game into the different rooms. In this case you would make one text file that contains all the text that will be used in one room. From there it is easy to make a reference to the correct Text Asset for the room you enter. Then with some customized parsing logic, you can manage a large amount of text very easily.",414],["Binary data",414],["A special feature of the text asset is that it can be used to store binary data. By giving a file the extension .bytes it can be loaded as a text asset and the data can be accessed through the bytes property.",414],["For example put a jpeg file into the Resources folder and change the extension to .bytes, then use the following script code to read the data at runtime:",414],["//Load texture from disk",414],["TextAsset bindata = Resources.Load(\"Texture\") as TextAsset;",414],["Texture2D tex = new Texture2D(1,1);",414],["tex.LoadImage(bindata.bytes);",414],["Please notice that files with the .txt and .bytes extension will be treated as text and binary files, respectively. Do not attempt to store a binary file using the .txt extension, as this will create unexpected behaviour when attempting to read data from it.",414],["Hints",414],["Text Assets are serialized like all other assets in a build. There is no physical text file included when you publish your game.",414],["Text Assets are not intended to be used for text file generation at runtime.",414],["TextAsset",414],["Text Mesh component (legacy)",415],["The Text Mesh component generates 3D geometry that displays text strings.",415],["Note:** This is a legacy component that has limited functionality. For information on more recent, full-featured ways of displaying text, see Creating user interfaces (UI).",415],["You can create a new Text Mesh from Component > Mesh > Text Mesh.",415],["Properties",415],["Property: Function: ",415],[":----------------- :-------------------------------------------------------------------------------------------------------------------- ",415],["Text The text that will be rendered ",415],["Offset Z How far should the text be offset from the transform.position.z when drawing ",415],["Character Size The size of each character (This scales the whole text.) ",415],["Line Spacing How much space will be in-between lines of text. ",415],["Anchor Which point of the text shares the position of the Transform. ",415],["Alignment How lines of text are aligned (Left, Right, Center). ",415],["Tab Size How much space will be inserted for a tab '\t' character. This is a multiplum of the 'spacebar' character offset. ",415],["Font Size The size of the font. This can override the size of a dynamic font. ",415],["Font Style The rendering style of the font. The font needs to be marked as dynamic. ",415],["Rich Text When selected this will enable tag processing when the text is rendered. ",415],["Font The TrueType Font to use when rendering the text. ",415],["Color The global color to use when rendering the text. ",415],["Details",415],["Text Meshes can be used for rendering road signs, graffiti etc. The Text Mesh places text in the 3D scene. To make generic 2D text for GUIs, use a GUI Text component instead.",415],["Follow these steps to create a Text Mesh with a custom Font:",415],["Import a font by dragging a TrueType Font - a .ttf file - from the Explorer (Windows) or Finder (OS X) into the Project View.",415],["Select the imported font in the Project View.",415],["Choose GameObject > Create Other > 3D Text.",415],["You have now created a text mesh with your custom TrueType Font. You can scale the text and move it around using the Scene View's Transform controls.",415],["Note:** If you want to change the font for a Text Mesh, need to set the component's font property and also set the texture of the font material to the correct font texture. This texture can be located using the font asset's foldout. If you forget to set the texture then the text in the mesh will appear blocky and misaligned.",415],["Best practices",415],["\nYou can download free TrueType Fonts from 1001freefonts.com (download the Windows fonts since they contain TrueType Fonts).\n",415],["\nIf you are scripting the Text property, you can add line breaks by inserting the escape character \"\n\" in your strings.\n",415],["\nYou can use simple markup to style text meshes. See the Styled Text page for more details.\n",415],["\nFonts in Unity render the font glyphs to a texture map before any further rendering. If the font size is set too small, these font textures will appear blocky. Since TextMesh assets are rendered using quads, it's possible that if the size of the TextMesh and font texture differ, the TextMesh might display incorrectly.\n",415],["TextMesh",415],["Texture arrays",416],["A texture array is a collection of same size/format/flags 2D textures that look like a single object to the GPU, and can be sampled in the shader with a texture element index. They are useful for implementing custom terrain rendering systems or other special effects where you need an efficient way of accessing many textures of the same size and format. Elements of a 2D texture array are also known as slices, or layers.",416],["Platform Support",416],["Texture arrays need to be supported by the underlying graphics API and the GPU. They are available on:",416],["Direct3D 11/12 (Windows)",416],["OpenGL Core (Mac OS X, Linux)",416],["Metal (iOS, Mac OS X)",416],["OpenGL ES 3.0 (Android, WebGL 2.0)",416],["Other platforms do not support texture arrays (OpenGL ES 2.0 or WebGL 1.0). Use SystemInfo.supports2DArrayTextures to determine texture array support at runtime.",416],["Importing texture arrays",416],["You can import texture arrays from source texture files that are divided into cells. These are called flipbook textures. To do this:",416],["Import the source texture into your Unity Project.",416],["In your Project view, select the resulting Texture Asset. Unity displays the Texture import settings in the Inspector.",416],["In the Inspector, set Texture Shape to 2D Array. Unity displays the Columns and Rows properties.",416],["Set Columns and Rows to the appropriate values for your flipbook texture.",416],["Click Apply.",416],["For more information, see Texture import settings.",416],["Creating and manipulating texture arrays using scripts",416],["To create a texture array from a C# script, use the Texture2DArray class to initialize the texture and set pixel data, and save the object as an asset file using AssetDatabase.CreateAsset.",416],["Normally, texture arrays are used purely within GPU memory, but you can use Graphics.CopyTexture, Texture2DArray.GetPixels and Texture2DArray.SetPixels to transfer pixels to and from system memory.",416],["Using texture arrays as render targets",416],["Texture array elements may also be used as render targets. Use RenderTexture.dimension to specify in advance whether the render target is to be a 2D texture array. The depthSlice argument to Graphics.SetRenderTarget specifies which mipmap level or cube map face to render to. On platforms that support “layered rendering” (i.e. geometry shaders), you can set the depthSlice argument to -1 to set the whole texture array as a render target. You can also use a geometry shader to render into individual elements.",416],["Using texture arrays in shaders",416],["Since texture arrays do not work on all platforms, shaders need to use an appropriate compilation target or feature requirement to access them. The minimum shader model compilation target that supports texture arrays is 3.5, and the feature name is 2darray.",416],["Use these macros to declare and sample texture arrays:",416],["UNITY_DECLARE_TEX2DARRAY(name) declares a texture array sampler variable inside HLSL code.",416],["UNITY_SAMPLE_TEX2DARRAY(name,uv) samples a texture array with a float3 UV; the z component of the coordinate is an array element index.",416],["UNITY_SAMPLE_TEX2DARRAY_LOD(name,uv,lod) samples a texture array with an explicit mipmap level.",416],["Examples",416],["The following shader example samples a texture array using object space vertex positions as coordinates:",416],["Shader \"Example/Sample2DArrayTexture\"",416],["Properties",416],["_MyArr (\"Tex\", 2DArray) = \"\" {}",416],["_SliceRange (\"Slices\", Range(0,16)) = 6",416],["_UVScale (\"UVScale\", Float) = 1.0",416],["SubShader",416],["Pass",416],["CGPROGRAM",416],["pragma vertex vert",416],["pragma fragment frag",416],["// texture arrays are not available everywhere,",416],["// only compile shader on platforms where they are",416],["pragma require 2darray",416],["include \"UnityCG.cginc\"",416],["struct v2f",416],["float3 uv : TEXCOORD0;",416],["float4 vertex : SV_POSITION;",416],["};",416],["float _SliceRange;",416],["float _UVScale;",416],["v2f vert (float4 vertex : POSITION)",416],["v2f o;",416],["o.vertex = mul(UNITY_MATRIX_MVP, vertex);",416],["o.uv.xy = (vertex.xy + 0.5) * _UVScale;",416],["o.uv.z = (vertex.z + 0.5) * _SliceRange;",416],["return o;",416],["UNITY_DECLARE_TEX2DARRAY(_MyArr);",416],["half4 frag (v2f i) : SV_Target",416],["return UNITY_SAMPLE_TEX2DARRAY(_MyArr, i.uv);",416],["ENDCG",416],["See Also",416],["Introduction To Textures in Direct3D documentation.",416],["Array Textures in OpenGL Wiki.",416],["Texture2DArray",416],["3D textures",417],["A 3D texture is a bitmap image that contains information in three dimensions rather than the standard two. 3D textures are commonly used to simulate volumetric effects such as fog or smoke, to approximate a volumetric 3D mesh, or to store animated textures and blend between them smoothly.",417],["3D texture size",417],["The maximum resolution of a 3D texture is 2048 x 2048 x 2048.",417],["Be aware that the size of a 3D texture in memory and on disk increases quickly as its resolution increases. An RGBA32 3D texture with no mipmaps and a resolution of 16 x 16 x 16 has a size of 128KB, but with a resolution of 256 x 256 x 256 it has a size of 512MB.",417],["Importing 3D textures",417],["You can import 3D textures from source texture files that are divided into cells. These are called flipbook textures. To do this:",417],["Import the source texture into your Unity Project.",417],["In your Project view, select the resulting Texture Asset. Unity displays the Texture import settings in the Inspector.",417],["In the Inspector, set Texture Shape to 3D. Unity displays the Columns and Rows properties.",417],["Set Columns and Rows to the appropriate values for your flipbook texture.",417],["Click Apply.",417],["For more information, see Texture import settings.",417],["Creating a 3D texture from a script",417],["Unity uses the Texture3D class to represent 3D textures. Use this class to interact with 3D textures in C# scripts.",417],["The following example is an Editor script that creates an instance of the Texture3D class, populates it with color data, and then saves it to your Project as a serialized asset file.",417],["```c#",417],["using UnityEditor;",417],["using UnityEngine;",417],["public class ExampleEditorScript : MonoBehaviour",417],["[MenuItem(\"CreateExamples/3DTexture\")]",417],["static void CreateTexture3D()",417],["// Configure the texture",417],["int size = 32;",417],["TextureFormat format = TextureFormat.RGBA32;",417],["TextureWrapMode wrapMode = TextureWrapMode.Clamp;",417],["// Create the texture and apply the configuration",417],["Texture3D texture = new Texture3D(size, size, size, format, false);",417],["texture.wrapMode = wrapMode;",417],["// Create a 3-dimensional array to store color data",417],["Color[] colors = new Color[size * size * size];",417],["// Populate the array so that the x, y, and z values of the texture will map to red, blue, and green colors",417],["float inverseResolution = 1.0f / (size - 1.0f);",417],["for (int z = 0; z < size; z++)",417],["int zOffset = z * size * size;",417],["for (int y = 0; y < size; y++)",417],["int yOffset = y * size;",417],["for (int x = 0; x < size; x++)",417],["colors[x + yOffset + zOffset] = new Color(x * inverseResolution,",417],["y * inverseResolution, z * inverseResolution, 1.0f);",417],["// Copy the color values to the texture",417],["texture.SetPixels(colors);",417],["// Apply the changes to the texture and upload the updated texture to the GPU",417],["texture.Apply();",417],["// Save the texture to your Unity Project",417],["AssetDatabase.CreateAsset(texture, \"Assets/Example3DTexture.asset\");",417],["Previewing a 3D texture",417],["The Unity Editor has three different visualization modes you can use to preview a 3D texture:",417],["Volumetric** visualization mode renders the 3D texture as a translucent cube",417],["Slice** visualization mode renders a single slice of each of the three axes of the 3D texture",417],["SDF** visualization mode renders the texture as a Signed Distance Field in 3D space",417],["You can preview the 3D texture in the Inspector, or you can write a script to preview it in the Scene view using the Handles API. Using the Inspector is quick and convenient, but does not allow the use of custom gradients. The Handles API lets you configure the preview to your exact requirements, and allows the use of custom gradients.",417],["Using the Inspector",417],["To preview the 3d texture in the Inspector window:",417],["In your Project window, select the Texture Asset. The Texture Asset Importer for this Texture Asset is now visible in the Inspector, and Unity renders a preview of the 3D texture at the bottom of the Inspector.",417],["Navigate to the toolbar above the preview of the 3D texture.",417],["Use the buttons on the right-hand side of the toolbar to choose between Volumetric, Slice, and SDF visualization modes. The preview image and the buttons on the toolbar change depending on the preview mode.",417],["Volumetric",417],["In this visualization mode, Unity renders the 3D texture as a translucent cube.",417],["The following controls are available in the toolbar:",417],["Control: Function: ",417],["Ramp Enables and disables color ramp visualization. If the image contains a lot of subtle details, enable Ramp to make those details easier to see. ",417],["Quality Sets the sample per texture pixel count. Higher values result in a higher quality render. ",417],["Alpha Controls the opacity of the visualization. A value of 1 is fully opaque and a value of 0 is fully transparent. Adjust to view the inner pixels. ",417],["Slice",417],["In this visualization mode, Unity renders slices of each axis plane of the 3D texture.",417],["The following controls are available in the toolbar:",417],["Control: Function: ",417],["Ramp Enables and disables color ramp visualization. If the image contains a lot of subtle details, enable Ramp to make those details easier to see. ",417],["X Sets the slicing position on the x axis, in texture pixels. Adjust to view a specific slice. ",417],["Y Sets the slicing position on the y axis, in texture pixels. Adjust to view a specific slice. ",417],["Z Sets the slicing position on the z axis, in texture pixels. Adjust to view a specific slice. ",417],["SDF",417],["In this visualization mode, Unity uses Signed Distance Field rendering mode in 3D space to render the 3D texture.",417],["Note that this visualization mode supports only non-directional Signed Distance Fields.",417],["The following controls are available in the toolbar:",417],["Control: Function: ",417],["Scale The number by which to multiply the ray step size. The ray step size is the distance between 2 neighboring pixels.If distant parts of the visualization are cut off, try increasing this. If the visualization is not rendered at all, try decreasing this. ",417],["Offset The intensity of the pixels at which the surface is rendered. When this value is positive, Unity will expand the rendered surface. When this value is negative, Unity will render empty space as a surface, and a surface as empty space. ",417],["Using the Handles API",417],["For information on previewing a 3D texture using the Handles API and code samples, see the following documentation:",417],["Using a 3D texture in a shader",417],["Here is an example of a simple raymarching shader that uses a 3D texture to visualize a volume.",417],["Shader \"Unlit/VolumeShader\"",417],["Properties",417],["_MainTex (\"Texture\", 3D) = \"white\" {}",417],["_Alpha (\"Alpha\", float) = 0.02",417],["_StepSize (\"Step Size\", float) = 0.01",417],["SubShader",417],["Tags { \"Queue\" = \"Transparent\" \"RenderType\" = \"Transparent\" }",417],["Blend One OneMinusSrcAlpha",417],["LOD 100",417],["Pass",417],["CGPROGRAM",417],["pragma vertex vert",417],["pragma fragment frag",417],["include \"UnityCG.cginc\"",417],["// Maximum amount of raymarching samples",417],["define MAX_STEP_COUNT 128",417],["// Allowed floating point inaccuracy",417],["define EPSILON 0.00001f",417],["struct appdata",417],["float4 vertex : POSITION;",417],["};",417],["struct v2f",417],["float4 vertex : SV_POSITION;",417],["float3 objectVertex : TEXCOORD0;",417],["float3 vectorToSurface : TEXCOORD1;",417],["};",417],["sampler3D _MainTex;",417],["float4 MainTexST;",417],["float _Alpha;",417],["float _StepSize;",417],["v2f vert (appdata v)",417],["v2f o;",417],["// Vertex in object space this will be the starting point of raymarching",417],["o.objectVertex = v.vertex;",417],["// Calculate vector from camera to vertex in world space",417],["float3 worldVertex = mul(unity_ObjectToWorld, v.vertex).xyz;",417],["o.vectorToSurface = worldVertex - _WorldSpaceCameraPos;",417],["o.vertex = UnityObjectToClipPos(v.vertex);",417],["return o;",417],["float4 BlendUnder(float4 color, float4 newColor)",417],["color.rgb += (1.0 - color.a) * newColor.a * newColor.rgb;",417],["color.a += (1.0 - color.a) * newColor.a;",417],["return color;",417],["fixed4 frag(v2f i) : SV_Target",417],["// Start raymarching at the front surface of the object",417],["float3 rayOrigin = i.objectVertex;",417],["// Use vector from camera to object surface to get ray direction",417],["float3 rayDirection = mul(unity_WorldToObject, float4(normalize(i.vectorToSurface), 1));",417],["float4 color = float4(0, 0, 0, 0);",417],["float3 samplePosition = rayOrigin;",417],["// Raymarch through object space",417],["for (int i = 0; i < MAX_STEP_COUNT; i++)",417],["// Accumulate color only within unit cube bounds",417],["if(max(abs(samplePosition.x), max(abs(samplePosition.y), abs(samplePosition.z))) < 0.5f + EPSILON)",417],["float4 sampledColor = tex3D(_MainTex, samplePosition + float3(0.5f, 0.5f, 0.5f));",417],["sampledColor.a *= _Alpha;",417],["color = BlendUnder(color, sampledColor);",417],["samplePosition += rayDirection * _StepSize;",417],["return color;",417],["ENDCG",417],["If you use this shader with the 3D texture created in the example at the top of the page, the result looks like this:",417],["Texture3D",417],["Texture Import Settings",418],["The Texture Import Settings window defines how Unity imports images from your project’s Assets folder into the Unity Editor.",418],["To access this window, select the image file in the Project window. The Texture Import Settings window appears in the Inspector.",418],["Note:** Some of the less commonly used properties are hidden by default. Expand the Advanced section in the Inspector window to view these properties.",418],["There are several sections on the Texture Import Settings window:",418],["(A)** Texture Type. Select the type of Texture you want to create.",418],["(B)** Texture Shape. Select the shape and set properties specific to that shape in this area.",418],["(C)** Type-specific and advanced properties. Depending on what Texture Type value you select, extra properties might appear in this area.",418],["(D)** Platform-specific overrides. Use the Platform-specific overrides panel to set default options and their overrides for a specific platforms.",418],["(E)** Texture preview. You can preview the Texture and adjust its values here.",418],["",418],["Texture Type",418],["Use the Texture Type property to select the type of Texture you want to create from the source image file. The other properties in the Texture Import settings window change depending on the value you set.",418],["The following table lists the available texture types and explains their purpose.",418],["Property Function ",418],["Default This is the most common setting used for all Textures. It provides access to most of the properties for Texture importing. For more information, see the Default Texture type. ",418],["Normal map The Normal map texture type formats the texture asset so it's suitable for real-time normal mapping. For more information, see the Normal map texture type documentation. For more information on normal mapping in general, see Importing Textures. ",418],["Editor GUI and Legacy GUI The Editor GUI and Legacy GUI texture type formats the texture asset so it's suitable for HUD and GUI controls. For more information, see the Editor GUI and Legacy GUI texture type documentation. ",418],["Sprite (2D and UI) The Sprite (2D and UI) texture type formats the texture asset so it's suitable to use in 2D applications as a Sprite. For more information, see the Sprite (2D and UI) texture type documentation. ",418],["Cursor The Cursor texture type formats the texture asset so it's suitable to use as a custom mouse cursor. For more information, see the Cursor texture type documentation. ",418],["Cookie The Cookie texture type formats the texture asset so it's suitable to use as a light cookie in the Built-in Render Pipeline. For more information, see the Cookie texture type documentation. ",418],["Lightmap The Lightmap texture type formats the texture asset so it's suitable to use as a Lightmap. This option enables encoding into a specific format (RGBM or dLDR depending on the platform) and a post-processing step on texture data (a push-pull dilation pass). For more information, see the Lightmap texture type documentation. ",418],["Directional Lightmap The Directional Lightmap texture type formats the texture asset so it's suitable to use as a directional Lightmap. For more information, see the Directional Lightmap texture type documentation. ",418],["Shadowmask The Shadowmask texture type formats the texture asset so it's suitable to use as a shadowmask. For more information, see the Shadowmask texture type documentation. ",418],["Single Channel The Single Channel texture type formats the texture asset so it only has one channel. For information on the properties available only for the this type, see the Single Channel texture type documentation. ",418],["",418],["Texture Shape",418],["Use the Texture Shape property to select and define the shape and structure of the Texture. There are four shape types:",418],["2D is the most common setting for all Textures; it defines the image file as a 2D Texture. These are used to map Textures to 3D Meshes and GUI elements, among other Project elements.",418],["Cube defines the Texture as a cubemap. You could use this for Skyboxes or Reflection Probes, for example. This type is only available with the Default, Normal Map, and Single Channel Texture types.",418],["2D Array defines the Texture as a 2D array texture. This is commonly used as an optimization for some rendering techniques, where many textures of the same size & format are used.",418],["3D defines the Texture as a 3D texture. 3D textures are used by some rendering techniques to represent volumetric data.",418],["Cubemap mapping",418],["You can further refine Cubemap shape textures with the following properties:",418],["Property: Function: ",418],["Mapping Use Mapping to specify how the Texture is projected onto your GameObject. This is set to Auto by default. ",418],["Auto Unity tries to create the layout from the Texture information. ",418],["6 Frames Layout (Cubic Environment) The Texture contains six images arranged in one of the standard cubemap layouts: cross, or sequence (+x -x +y -y +z -z). The images can be orientated either horizontally or vertically. ",418],["Latitude Longitude (Cylindrical) Maps the Texture to a 2D Latitude-Longitude representation. ",418],["Mirrored Ball (Sphere Mapped) Maps the Texture to a sphere-like cubemap. ",418],["Convolution Type Choose the type of pre-convolution (filtering) that you want to use for this Texture. The result of pre-convolution is stored in mips. This property is only available for the Default Texture type. ",418],["None The Texture has no pre-convolution (no filtering). This is the default. ",418],["Specular (Glossy Reflection) Select this to use cubemaps as Reflection Probes. The Texture mip maps are pre-convoluted (filtered) with the engine BRDF. For more information, see Wikipedia's page on Bidirectional reflectance distribution function. ",418],["Diffuse (Irradiance) The Texture is convoluted (filtered) to represent irradiance. This is useful if you use the cubemap as a Light Probe. ",418],["Fixup Edge Seams This option is only available with the None or Diffuse convolution (filter). Use this on low-end platforms as a work-around for filtering limitations, such as cubemaps incorrectly filtered between faces. ",418],["2D Array and 3D columns and rows",418],["The source texture files for 2D Array and 3D Textures are divided into cells; these textures are called flipbook textures. When Unity imports flipbook textures, it places the contents of each cell into its own 2D array layer or 3D texture slice.",418],["When you set the Texture Shape property to 2D Array or 3D, Unity displays the Columns and Rows properties. Use these to tell Unity how to divide the flipbook texture into cells.",418],["Property: Function: ",418],["Columns The number of columns that the source flipbook texture is divided into. ",418],["Rows The number of rows that the source flipbook texture is divided into. ",418],["For example, an image with 8x8 cells of smoke effect frames looks like this as a default 2D texture:",418],["But when you correctly import is as a 3D texture with 8 Columns and 8 Rows, it looks like this:",418],["",418],["Type-specific and advanced properties",418],["Depending on which Texture Type you select, different properties can appear in the Texture Import Settings window. Some of these properties are specific to the Texture Type itself, such as Sprite Mode available with the Sprite (2D and UI) type.",418],["Use Advanced settings to make finer adjustments to the way Unity handles the Texture. The order and availability of these settings can vary depending on the Texture Type you choose.",418],["For information on the properties for each texture type, see the documentation for that texture type:",418],["",418],["Platform-specific overrides",418],["When building for different platforms, you need to think about the resolution, the file size with associated memory size requirements, the quality of your Textures, and what compression format to use for each target platform. The Platform-specific overrides panel provides one tab for the Default options, and one tab for every target platform you are building for.",418],["Some texture import settings can also be overridden globally in Build Settings, mostly to speed up iteration time during development.",418],["To set up override values:",418],["Set the default properties on the Default tab.",418],["Navigate to a specific target platform tab and enable the Override for <target-platform> option.",418],["Set the override properties.",418],["The following table describes which properties are available:",418],["Property: Function: ",418],["Max Size Set the maximum imported Texture dimensions in pixels. Artists often prefer to work with huge dimension-size Textures, but you can scale down the Texture to a suitable dimension-size. ",418],["Resize Algorithm Choose an algorithm for downscaling the Texture when the Texture dimensions are larger than the specified Max Size. ",418],["Mitchell Resize the Texture using the Mitchell algorithm. This is the default resize algorithm. ",418],["Bilinear Resize the Texture using bilinear interpolation. For images where small, sharp details are important, this can preserve more of these details than Mitchell. ",418],["Format Bypass the automatic system to specify what internal representation to use for the Texture. The list of available formats depends on the platform and Texture type. For more information, see Texture formats for platform-specific overrides. Note: Even when you don't override a platform, this option shows the format chosen by the automatic system. This property is only available when overriding for a specific platform, and not as a default setting. ",418],["Compression Choose the compression type for the Texture. This helps Unity choose the right compression format for a Texture. Depending on the platform and the availability of compression formats, different settings might end up with the same internal format. For example, Low Quality Compression affects mobile platforms, but not desktop platforms. ",418],["None Do not compress the Texture. ",418],["Low Quality Compress the Texture in a low-quality format. This might use less memory than Normal Quality. ",418],["Normal Quality Compress the Texture using a standard format. ",418],["High Quality Compress the Texture in a high-quality format. This might use more memory than Normal Quality. ",418],["Use Crunch Compression Use crunch compression, if applicable. Crunch is a lossy compression format on top of DXT or ETC Texture compression. Unity decompresses Textures to DXT or ETC on the CPU and then uploads them to the GPU at runtime. Crunch compression helps the Texture use the lowest possible amount of space on disk and for downloads. Crunch Textures can take a long time to compress, but decompression at runtime is very fast. ",418],["Compressor Quality When using Crunch Texture compression, use the slider to adjust the quality. A higher compression quality means larger Textures and longer compression times.Note: For Android platforms, the Compressor Quality values provide slightly different options. For more information, see Texture formats for platform-specific overrides. ",418],["Split Alpha Channel Allows alpha splitting for this Texture on these platforms: tvOS, iOS, and Android. For more information, see the Notes on Android for Texture compression formats. ",418],["Override ETC2 fallback ETC2 texture decompression fallback override on Android devices that don't support ETC2.Allows to choose which texture format to decompress the texture to on Android devices that have no ETC2 texture format support. For more information, see the Notes on Android for Texture compression formats. ",418],["",418],["Crunch compression format updated in 2017.3 NewIn20173",418],["Ignore PNG file gamma added in 2020.1 NewIn20201",418],["TextureImporter",418],["Recommended, default, and supported texture formats, by platform",419],["This page contains the following information:",419],["\nTerminology\n",419],["\nRecommended texture formats, by platform\n",419],["\nDesktop\n",419],["\niOS and tvOS\n",419],["\nAndroid\n",419],["\nDefault texture formats, by platform\n",419],["\nTexture compression formats, by quality \n",419],["\nSupported texture formats, by platform\n",419],["This page doesn't contain information about console platforms. For information about console platforms, see the platform-specific documentation.",419],["For an overview of texture formats, see Texture formats. For information about texture import settings and how to set per-texture platform-specific overrides, see Texture import settings. Some texture import settings can also be overridden globally in Build Settings, mostly to speed up iteration time during development.",419],["",419],["Terminology",419],["This page uses the following terminology:",419],["Bits per pixel (bpp)** is the amount of storage required for a single texture pixel. Textures with a lower bpp value have a smaller size on disk and in memory. A lower bpp value also means that the GPU can store more pixels in its cache, which results in faster texture access.",419],["LDR (Low Dynamic Range) refers to most typical images where colors are conceptually between 0.0 (black) and 1.0 (white) values. The majority of image files (such as PNG and JPG) have low dynamic range.",419],["HDR (High Dynamic Range) refers to special image and texture formats where colors can have a higher range than 0 through 1. Image file formats like .exr or .hdr are often used for HDR image data. At runtime and on the GPU, there are several HDR formats, trading off accuracy, range and memory usage.",419],["RGB** is a color model in which red, green and blue combine to reproduce an array of colors.",419],["RGBA** is a version of RGB with an alpha channel, which supports blending and opacity alteration.",419],["Variable bit rate (VBR)** means that bits per pixel is not a fixed value, and depends on the actual content instead. VBR only applies to Crunch compression, and only texture size on disk. The size in memory is the same as when using the underlying texture format (for example, RGB Compressed DXT1 for RGB Crunched DXT1).",419],["",419],["Recommended texture formats, by platform",419],["",419],["Desktop",419],["For devices with DirectX 11 or better class GPUs, where support for BC7 and BC6H formats is guaranteed to be available, the recommended choice of compression formats is:",419],["RGB textures - DXT1 at four bits/pixel.",419],["RGBA textures - BC7 (higher quality, slower to compress) or DXT5 (faster to compress), both at eight bits/pixel.",419],["HDR textures - BC6H at eight bits/pixel.",419],["If you need to support DirectX 10 class GPUs on PC (NVIDIA GPUs before 2010, AMD before 2009, Intel before 2012), then DXT5 instead of BC7 would be preferred, since these GPUs do not support BC7 nor BC6H.",419],["See the Supported texture formats reference table for detailed information about all supported formats.",419],["",419],["iOS and tvOS",419],["For Apple devices that use the A8 chip (2014) or above, ASTC is the recommended texture format for RGB and RGBA textures. This format allows you to choose between texture quality and size on a granular level: all the way from eight bits/pixel (4x4 block size) down to 0.89 bits/pixel (12x12 block size).",419],["If support for older devices is needed, or you want additional Crunch compression, then Apple devices support ETC/ETC2 formats starting with A7 chip (2013).",419],["For even older devices, PVRTC is the format to use. On iOS you can configure the default texture format in the Player Settings. PVRTC gives you the broadest possible compatibility. ASTC is preferred, but is not supported on A7 devices (the very first Metal-enabled devices) and will be unpacked at runtime.",419],["See the Supported texture formats reference table for detailed information about all supported formats.",419],["",419],["Android",419],["Texture format support on Android is complicated. You might need to build several application versions with different sub-targets.",419],["You can select the default format in Player Settings. Your options are ASTC, ETC2 and ETC (ETC1 for RGB, ETC2 for RGBA). See Texture compression settings for more details on how the different settings interact.",419],["For LDR RGB and RGBA textures, most modern Android GPUs that support OpenGL ES 3.1 or Vulkan also support ASTC format, including:",419],["Qualcomm GPUs since Adreno 4xx / Snapdragon 415 (2015), ARM GPUs since Mali T624 (2012), NVIDIA GPUs since Tegra K1 (2014), PowerVR GPUs since GX6250 (2014).",419],["If you need support for older devices, or you want additional Crunch compression, then all GPUs that run Vulkan or OpenGL ES 3.0 support the ETC2 format.",419],["The resulting image quality is quite high, and it supports one- to four-component texture data. OpenGL ES 2 devices do not support the ETC2 format, so Unity decompresses the texture at runtime to the format ETC2 fallback specifies.",419],["For even older devices, usually only ETC format is available. The drawback is that there is no direct alpha channel support. For Sprites, Unity offers an option to use ETC1 compression by splitting a texture into two ETC1 textures: one for RGB, one for alpha. To enable this, enable the Android-specific Split Alpha Channel option for the Texture when importing a Sprite Atlas. The sprite shader samples both textures and combines them into the final result.",419],["For HDR textures, ASTC HDR is the only compressed format available on Android devices. ASTC HDR requires Vulkan or GL_KHR_texture_compression_astc_hdr support. ASTC is the most flexible format.",419],["If a device doesn't support ASTC HDR the texture is decompressed at runtime to RGB9e5 or RGBA Half, depending on alpha channel usage.",419],["For devices that don't support ASTC HDR, all devices running Vulkan, Metal, or OpenGL ES 3.0 support RGB9e5, which is suitable for textures without an alpha channel. If an alpha channel or even wider support is needed, use RGBA Half. This takes twice as much memory as RGB9e5.",419],["See the Supported texture formats reference table for detailed information about all supported formats.",419],["",419],["Default texture formats, by platform",419],["The following table shows the default formats used for each platform.",419],["Platform Color model None Normal quality (default) High quality Low quality (higher performance) ",419],["Windows, Linux, macOS RGB RGB 24 bit RGB Compressed DXT1 RGB(A) Compressed BC7 RGB Compressed DXT1 ",419],["RGBA RGBA 32 bit RGBA Compressed DXT5 RGB(A) Compressed BC7 RGBA Compressed DXT5 \n",419],["HDR RGBA Half RGB Compressed BC6H RGB Compressed BC6H RGB Compressed BC6H \n",419],["WebGL (configurable) RGB RGB 24 bit RGB Compressed DXT1 RGB Compressed DXT1 RGB Compressed DXT1 ",419],["RGBA RGBA 32 bit RGBA Compressed DXT5 RGBA Compressed DXT5 RGBA Compressed DXT5 \n",419],["Android (configurable) RGB RGB 24 bit RGBA Compressed ASTC 6x6 blockRGB Compressed ETC2RGB Compressed ETC RGBA Compressed ASTC 4x4 blockRGB Compressed ETC2RGB Compressed ETC RGBA Compressed ASTC 8x8 blockRGB Compressed ETC2RGB Compressed ETC ",419],["RGBA RGBA 32 bit RGBA Compressed ASTC 6x6 block<br/>RGBA Compressed ETC2 RGBA Compressed ASTC 4x4 block<br/>RGBA Compressed ETC2 RGBA Compressed ASTC 8x8 block<br/>RGBA Compressed ETC2 \n",419],["iOS (configurable) RGB RGB 24 bit RGBA Compressed ASTC 6x6 blockRGB Compressed PVRTC 4 bits RGBA Compressed ASTC 4x4 blockRGB Compressed PVRTC 4 bits RGBA Compressed ASTC 8x8 blockRGB Compressed PVRTC 2 bits ",419],["RGBA RGBA 32 bit RGBA Compressed ASTC 6x6 block<br/>RGBA Compressed PVRTC 4 bits RGBA Compressed ASTC 4x4 block<br/>RGBA Compressed PVRTC 4 bits RGBA Compressed ASTC 8x8 block<br/>RGBA Compressed PVRTC 2 bits \n",419],["tvOS RGB RGB 24 bit RGBA Compressed ASTC 6x6 block RGBA Compressed ASTC 4x4 block RGBA Compressed ASTC 8x8 block ",419],["RGBA RGBA 32 bit RGBA Compressed ASTC 6x6 block RGBA Compressed ASTC 4x4 block RGBA Compressed ASTC 8x8 block \n",419],["Default RGBA RGBA 32 bit RGBA 16 bit RGBA 16 bit RGBA 16 bit ",419],["",419],["Texture formats, by quality",419],["The table below shows each format available in Unity, and their quality details.",419],["Texture format Description Channels Quality Bits per pixel Size of 1024x1024 texture, in MB ",419],["RGB(A) Compressed BC7 Compressed RGB or RGBA RGB or RGBA High 8 1 ",419],["RGBA Crunched DXT5 Compressed RGBA, with additional on-disk Crunch compression RGBA Low to medium Variable Variable ",419],["RGBA 64 bit Uncompressed RGBA, very high precision RGBA Very high 64 8 ",419],["RGBA 32 bit Uncompressed RGBA RGBA High 32 4",419],["RGBA 16 bit Quantized RGBA RGBA Medium 16 2 ",419],["RGB Compressed DXT1 Compressed RGB (also known as BC1) RGB Medium 4 0.5 ",419],["RGB Crunched DXT1 Compressed RGB, with additional on-disk Crunch compression RGB Low to medium Variable Variable ",419],["RGB 48 bit Uncompressed RGB, very high precision. Converted to RGBA 64 bit for the GPU RGB Very high 48 disk, 64 GPU 6 disk, 8 GPU ",419],["RGB 24 bit Uncompressed RGB. Converted to RGBA 32 bit for the GPU RGB High 24 disk, 32 GPU 3 disk, 4 GPU ",419],["RGB 16 bit Quantized RGB RGB Medium 16 2 ",419],["RG Compressed BC5 Compressed two channel (RG) RG High 8 1 ",419],["RG 32 bit Uncompressed two channel (RG), very high precision RG Very high 32 4 ",419],["R Compressed BC4 Compressed single channel (R) R High 4 0.5 ",419],["R 8 Uncompressed single channel (R) R High 8 1 ",419],["R 16 bit Uncompressed single channel (R), very high precision R Very high 16 2 ",419],["Alpha 8 Uncompressed single channel (A) A High 8 1 ",419],["RGBA Half HDR, half-precision (FP16) RGBA, –64k to +64k range RGBA High 64 8 ",419],["RGB Compressed BC6H HDR, compressed RGB, 0 to +64k range RGB High 8 1 ",419],["RGB9e5 32 Bit Shared Exponent Float HDR, quantized RGB, 0 to +64k range RGB Medium 32 4 ",419],["RGB(A) Compressed ASTC Compressed RGB or RGBA, size & quality dependent on block size RGB or RGBA Low to high 12x12: 0.89, 10x10: 1.28, 8x8: 2, 6x6: 3.56, 5x5: 5.12, 4x4: 8 12x12: 0.11, 10x10: 0.16, 8x8: 0.25, 6x6: 0.45, 5x5: 0.64, 4x4: 1.0 ",419],["RGBA Compressed ETC2 Compressed RGBA RGBA Medium 8 1 ",419],["RGBA Crunched ETC2 Compressed RGBA, with additional on-disk Crunch compression RGBA Low to medium Variable Variable ",419],["RGB + 1-bit Alpha Compressed ETC2 4 bits Compressed RGBA, with alpha values fully opaque or fully transparent RGBA Medium 4 0.5 ",419],["RGBA Compressed PVRTC 4 bits Compressed RGBA, texture required to be square RGBA Medium 4 0.5 ",419],["RGBA Compressed PVRTC 2 bits Compressed RGBA, texture required to be square RGBA Low 2 0.25 ",419],["RGB Compressed ETC2 Compressed RGB RGB Medium 4 0.5 ",419],["RGB Compressed ETC Compressed RGB RGB Low 4 0.5 ",419],["RGB Crunched ETC Compressed RGB, with additional on-disk Crunch compression RGB Low Variable Variable ",419],["RGB Compressed PVRTC 4 bits Compressed RGB, texture required to be square RGB Medium 4 0.5 ",419],["RGB Compressed PVRTC 2 bits** Compressed RGB, texture required to be square RGB Low 2 0.25 ",419],["RG Compressed EAC 8 bit Compressed two channel (RG) RG High 8 1 ",419],["R Compressed EAC 4 bit Compressed single channel (R) R High 4 0.5 ",419],["RGB(A) Compressed ASTC HDR HDR, compressed RGB or RGBA, size & quality dependent on block size RGB or RGBA Low to High 12x12: 0.89, 10x10: 1.28, 8x8: 2, 6x6: 3.56, 5x5: 5.12, 4x4: 8 12x12: 0.11, 10x10: 0.16, 8x8: 0.25, 6x6: 0.45, 5x5: 0.64, 4x4: 1.0 ",419],["",419],["Supported texture formats, by platform",419],["The table below shows each texture format available in Unity, and the platforms that support them.",419],["Texture format Windows macOS Linux Android iOS & tvOS WebGL (Desktop Browsers) WebGL (iOS and Android browser) ",419],["RGB(A) Compressed BC7 yes (1) yes (1) yes no no yes (1) no ",419],["RGBA Compressed DXT5 yes yes yes no (3) no partial (2) no ",419],["RGBA Crunched DXT5 yes yes yes no (3) no partial (2) no ",419],["RGBA 64 bit yes yes yes partial (6) yes no no ",419],["RGBA 32 bit yes yes yes yes yes yes yes ",419],["RGBA 16 bit yes yes yes yes yes yes yes ",419],["RGB Compressed DXT1 yes yes yes no (3) no partial (2) no ",419],["RGB Crunched DXT1 yes yes yes no (3) no partial (2) no ",419],["RGB 48 bit yes yes yes partial (6) yes no no ",419],["RGB 24 bit yes yes yes yes yes yes yes ",419],["RGB 16 bit yes yes yes yes yes yes yes ",419],["RG Compressed BC5 yes yes yes no no yes no ",419],["RG 32 bit yes yes yes partial (6) yes no no ",419],["R Compressed BC4 yes yes yes no no yes no ",419],["R 8 yes yes yes partial (5) yes partial (5) partial (5) ",419],["R 16 bit yes yes yes partial (6) partial (6) yes (14) yes (14) ",419],["Alpha 8 yes yes yes yes yes yes yes ",419],["RGBA Half yes yes yes partial (7) yes partial (7) partial (7) ",419],["RGB Compressed BC6H yes (1) yes (1) yes no no yes (1) no ",419],["RGB9e5 32 Bit Shared Exponent Float yes yes yes partial (4) yes partial (4) partial (4) ",419],["RGB(A) Compressed ASTC no no no partial (8) yes (10) no yes (13 & 10) ",419],["RGBA Compressed ETC2 no no no partial (9) yes no yes ",419],["RGBA Crunched ETC2 no no no partial (9) yes no yes ",419],["RGB + 1-bit Alpha Compressed ETC2 4 bits no no no partial (9) yes no yes ",419],["RGBA Compressed PVRTC 4 bits no no no no (12) yes no no ",419],["RGBA Compressed PVRTC 2 bits no no no no (12) yes no no ",419],["RGB Compressed ETC2 no no no partial (9) yes no yes ",419],["RGB Compressed ETC no no no yes yes no yes ",419],["RGB Crunched ETC no no no yes yes no yes ",419],["RGB Compressed PVRTC 4 bits no no no no (12) yes no no ",419],["RGB Compressed PVRTC 2 bits no no no no (12) yes no no ",419],["RG Compressed EAC 8 bit no no no partial (9) yes no yes ",419],["R Compressed EAC 4 bit no no no partial (9) yes no yes ",419],["RGB(A) Compressed ASTC HDR no no no partial (11) partial (11) no partial (11) ",419],["Notes:**",419],["Except on pre-DX11 level GPUs, or macOS when using WebGL or OpenGL. When not supported, BC6H textures get decompressed to RGBA Half, and BC7 get decompressed to RGBA32 at load time.",419],["With linear rendering on web browsers that don't support sRGB DXT, textures are decompressed to RGBA32 at load time.",419],["Except on Android devices with NVIDIA Tegra GPUs; these do support DXT/BC formats.",419],["Except on OpenGL ES 2.0 / WebGL 1.",419],["When on OpenGL ES 2.0 / WebGL 1: requires GL_EXT_texture_rg extension support.",419],["Requires GL_EXT_texture_norm16 or corresponding Vulkan capability on Android.",419],["When on OpenGL ES 2.0 / WebGL 1: requires OES_texture_half_float extension support.",419],["Requires Vulkan or GL_KHR_texture_compression_astc_ldr OpenGL ES extension.",419],["Except on OpenGL ES 2.0; there ETC2 textures are decompressed into the format ETC2 fallback specifies in the Android Build Settings or on the Android tab for the Platform-specific overrides.",419],["Except on Apple A7 chip devices (2013).",419],["Android: requires GL_KHR_texture_compression_astc_hdr extension. iOS: requires A13 or later chip (2019).WebGL: requires WEBGL_compressed_texture_astc extension and HDR profile. When not supported, the texture is decompressed to RGB9E5 format, losing the alpha channel.",419],["Except on Android devices with Imagination PowerVR GPUs; these do support PVRTC formats.",419],["Requires WEBGL_compressed_texture_astc extension.",419],["Requires EXT_texture_norm16 extension and WebGL 2.",419],["Supported texture formats in WebGL",419],["The following table provides the supported texture formats for WebGL.",419],["Format Description ",419],["--- --- ",419],["ASTC Adaptive Scalable Texture Compression (ASTC) is an advanced lossy texture compression format. Widely used for mobile browsers / devices. ",419],["DXT Also known as S3 Texture Compression (S3TC), DXT is mainly used for desktop browsers and devices. ",419],["ETC2 Ericsson Texture Compression (ETC) is an older lossy texture compression format, lower quality than ASTC, used for mobile browsers / devices. ",419],["Additional resources:",419],["TextureImporterOverride",419],["Tilemap component reference",420],["The Tilemap component stores and manages Tile Assets for creating 2D levels. It transfers the required information from the tiles placed on it to other related components such as the Tilemap Renderer and the Tilemap Collider 2D.",420],["The 2D Tilemap Editor package is automatically installed when you create a project with the 2D template. You can install the 2D Tilemap Editor directly from the Unity registry via the Package Manager.",420],["To create, edit, and pick the tiles for painting onto a tilemap, refer to the Tile Palette (menu: Window > 2D > Tile Palette) documentation for more information on its features and tools.",420],["Property Description ",420],["------------ ------------ ---- ",420],["Animation Frame Rate Set the frame rate at which tile animations play. Increasing or decreasing this value changes the frame rate of the tile animations. For example, if set to 2, tile animations play at double the base frame rate. If set to 3, tile animations play at triple the base frame rate. ",420],["Color Select a color to apply as a tint to the tiles on this tilemap. Set to white (default color) to have Unity render the tiles without tint. ",420],["Tile Anchor Enter the amount (in cells) along the xyz axes to offset tile anchor positions on the tilemap. ",420],["Orientation Select the orientation of tiles on the tilemap. Each of the following options performs the same function by orienting the tiles along the selected plane. ",420],["XY Unity orients tiles along the XY plane. ",420],["XZ Unity orients tiles along the XZ plane. ",420],["YX Unity orients tiles along the YX plane. ",420],["YZ Unity orients tiles along the YZ plane. ",420],["ZX Unity orients tiles along the ZX plane. ",420],["ZY Unity orients tiles along the ZY plane. ",420],["Custom Select this option to enable the custom orientation settings below. ",420],["Offset Set the position offset of the custom orientation. This option is only available when you set the tilemap's Orientation to Custom. ",420],["Rotation Set the rotation of the custom orientation. This option is only available when you set the tilemap's Orientation to Custom. ",420],["Scale Set the scale of the custom orientation. This option is only available when you set the tilemap's Orientation to Custom. ",420],["Info Expand this to view the assets present in the tilemap. ",420],["Tiles Displays a list of Tile Assets present in the tilemap. ",420],["Sprites Displays a list of sprites present in the tilemap. ",420],["Additional resources",420],["\nTilemap Renderer component reference\n",420],["\nTile Palette preferences reference\n",420],["\nTile Palette visual elements\n",420],["\nTilemap workflow\n",420],["Tilemap",420],["Tilemap Collider 2D",421],["The Tilemap Collider 2D component generates Collider shapes for Tiles on a Tilemap component on the same GameObject. When you add or remove Tiles on the Tilemap component, the Tilemap Collider 2D updates the Collider shapes during LateUpdate. It batches multiple Tile changes together to ensure minimal impact on performance.",421],["Tilemap Collider 2D properties",421],["Property Function ",421],["Max Tile Change Count Set the maximum number of Tile changes (such as adding/removing Tiles to the Tilemap) to accumulate before doing a full Collider rebuild instead of an incremental rebuild.Note: A high number of accumulated changes can cause the incremental rebuild of the Tilemap Collider 2D to be slower than a full rebuild. Decrease this value to resolve this issue. ",421],["Extrusion Factor Set the amount (in Unity world space units) to extrude the Collider shape of each Tile. This minimizes the gaps between the Collider shapes of neighboring Tiles and brings them to within the minimum Vertex Distance set in the Composite Collider 2D, which can then compose the Tile Colliders together. Note: This property isn't available by default. It becomes available when you enable Used by Composite, and attach a Composite Collider 2D to the same GameObject. ",421],["Material Select the Physics Material 2D that determines properties of collisions, such as friction and bounce. ",421],["Is Trigger Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled. ",421],["Used by Effector Enable this if you want the Collider 2D to be used by an attached Effector 2D. ",421],["Used by Composite Enable this to use this Collider with an attached Composite Collider 2D.When you enable Used by Composite, all properties except Offset will no longer be available in the Tilemap Collider 2D component and the attached Composite Collider 2D component controls the Collider properties instead. ",421],["Offset Set the local offset values of the Collider 2D geometry. ",421],["Layer Overrides Expand for the Layer override settings. ",421],[" **Layer Override Priority** Assign the decision priority that this Collider2D uses when resolving conflicting decisions on whether a contact between itself and another Collision2D should happen or not. Refer to its [API](ScriptRef:Collider2D-layerOverridePriority) page for more information. \n",421],[" **Include Layers** Select the additional Layers that this Collider 2D should include when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-includeLayers) documentation for more information. \n",421],[" **Exclude Layers** Select the additional Layers that this Collider 2D should exclude when deciding if a contact with another Collider2D should happen or not. Refer to its [API](ScriptRef:Collider2D-excludeLayers) documentation for more information. \n",421],[" **Force Send Layers** Select the Layers that this Collider 2D is allowed to send forces to during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceSendLayers) documentation for more information. \n",421],[" **Force Receive Layers** Select the Layers that this Collider 2D can receive forces from during a Collision contact with another Collider2D. Refer to its [API](ScriptRef:Collider2D-forceReceiveLayers) documentation for more information. \n",421],[" **Contract Capture Layers** Select the Layers of other Collider 2D, involved in contacts with this Collider2D, that will be captured. Refer to its [API](ScriptRef:Collider2D-contactCaptureLayers) documentation for more information. \n",421],[" **Callback Layers** Select the Layers that this Collider 2D, during a contact with another Collider2D, will report collision or trigger callbacks for. Refer to its [API](ScriptRef:Collider2D-callbackLayers) documentation for more information. \n",421],["Collider Type's effect on Collider generation",421],["The Collider shapes generated for each Tile in the Tilemap depend on the desired Collider type set in the Tile Asset's properties. The component's shape generation behavior corresponds to the Collider Types in the following ways:",421],["Collider Type Function ",421],[":------------------------------- :------------------------------------------------------------ ",421],["None The Tilemap Collider 2D component does not generate any Collider shapes for this Tile. ",421],["Sprite The Tilemap Collider 2D component generates a Collider shape based on the Sprite assigned to the Tile. The Collider shape is based on the Custom Physics Shape set for the Sprite. ",421],["Grid The Tilemap Collider 2D component generates a Collider shape based on the shape of the Grid cell, which is determined by the selected Cell Layout of the Grid component. ",421],["Tilemap and Composite Colliders",421],["You can use the Tilemap Collider 2D component together with the Composite Collider 2D component. When you add both components to the same Tilemap, Unity composites the Collider shapes of neighboring Tiles together. This smoothens the corners and edges between Collider shapes in neighboring Tiles.",421],["Using both components together reduces the number of individual Collider shapes involved in a physics update, which reduces the amount of calculations required, and minimizes the impact on performance.",421],["Scripting API tips",421],["If you require immediate changes to happen to the Collider, use Tilemaps.TilemapCollider2D.ProcessTilemapChanges to process them immediately. You can use Tilemaps.TilemapCollider2D-hasTilemapChanges to check if any processing is required.",421],["Additional resources",421],["New properties added in Unity 2020.1",421],["Tilemaps added in 2017.2 NewIn20172",421],["TilemapCollider2D",421],["Tilemap Renderer",422],["The Tilemap Renderer component is part of the Tilemap GameObject. It determines how Tiles set on the Tilemap are rendered.",422],["Property Function ",422],["------------------------------------------------ ------------------------------------------------------------ ",422],["Sort Order Set the direction that Tiles on the selected Tilemap are sorted from. ",422],["Mode Set the rendering mode of the Renderer. ",422],["    Chunk The Renderer groups Tiles by location, and batches their Sprites together for rendering. Select this mode for the best rendering performance with Tilemap. ",422],["    Individual The Renderer renders each Tile individually, taking into account their location and sorting order. This mode enables the Sprites on the Tiles to interact with other Renderers in the scene or with a Custom Sorting Axis. ",422],["Detect Chunk Culling Bounds Determines how the Render detects the bounds used for the culling of Tilemap chunks. These bounds expand the boundary of Tilemap chunks to ensure that oversized Sprites will not be clipped during culling. ",422],["    Auto The Renderer automatically inspects the Sprites used by the Tiles to determine the expanded culling bounds to use. ",422],["    Manual The values used to extend the bounds for culling of the Tilemap chunks are manually set instead of with the Editor's automatic detection. ",422],["Chunk Culling Bounds Enabled when Manual is selected above. Enter the values (in Unity units) that the culling bounds are extended by. ",422],["Sorting Layer Set the Sorting Layer of the Tilemap. Select an existing Sorting Layer from the drop-down box, or create a new Sorting Layer. ",422],["Order in Layer Set the render priority of the Tilemap within its Sorting Layer. Lower numbered layers are rendered first. Higher numbered layers overlap those below. ",422],["Mask Interaction Set how the Tilemap Renderer behaves when it interacts with a Sprite Mask. ",422],["    None The Tilemap Renderer does not interact with any Sprite Mask in the Scene. This is the default option. ",422],["    Visible Inside Mask The Tilemap Renderer only renders areas of the Tilemap that the Sprite Mask overlays. ",422],["    Visible Outside Mask The Tilemap Renderer renders the Tilemap entirely but subtracts the areas the Sprite Mask overlays. ",422],["Page content and screenshots updated for 2020.1 NewIn20201",422],["Tilemaps added in 2017.2 NewIn20172",422],["TilemapRenderer",422],["Time",423],["The Time settings (menu: Edit > Project Settings, then the Time category) lets you set a number of properties that control timing within your game.",423],["Properties",423],["Property: Function: ",423],["Fixed Timestep A framerate-independent interval that dictates when physics calculations and FixedUpdate() events are performed. ",423],["Maximum Allowed Timestep A framerate-independent interval that caps the worst case scenario when frame-rate is low. Physics calculations and FixedUpdate() events will not be performed for longer time than specified. ",423],["Time Scale The speed at which time progresses. Change this value to simulate bullet-time effects. A value of 1 means real-time. A value of .5 means half speed; a value of 2 is double speed. ",423],["Maximum Particle Timestep A framerate-independent interval that controls the accuracy of the particle simulation. When the frame time exceeds this value, multiple iterations of the particle update are performed in one frame, so that the duration of each step does not exceed this value. For example, a game running at 30fps (0.03 seconds per frame) could run the particle update at 60fps (in steps of 0.0167 seconds) to achieve a more accurate simulation, at the expense of performance. ",423],["Details",423],["The Time Manager lets you set properties globally, but it is often useful to set them from a script during gameplay (for example, setting Time Scale to zero is a useful way to pause the game). See the page on Time and Framerate Management for full details of how time can be managed in Unity.",423],[" 2017-05-18 ",423],["Maximum Particle Timestep added in 2017.1 NewIn20171",423],["TimeManager",423],["Trail Renderer component",424],["The Trail Renderer component renders a trail of polygons behind a moving GameObject, over time. This can be used to give an emphasized feeling of motion to a moving object, or to highlight the path or position of moving objects.",424],["The Trail Renderer uses the same algorithm for trail rendering as the Line Renderer.",424],["Getting started",424],["To create a Trail Renderer:",424],["In the Unity menu bar, go to GameObject > Effects > Trail.",424],["Select the Trail Renderer GameObject, and parent it to the GameObject that you want it to generate a trail for.",424],["Use the Inspector window to configure the color, width, and other display settings of the trail.",424],["Preview the trail in Edit Mode by moving the GameObject and observing the effect in the Scene view.",424],["Trail Renderer Materials",424],["By default, a Trail Renderer uses the built-in Material, Default-Line. You can make many changes to the appearance of the trail without changing this Material, such as editing the color gradient or width of the trail.",424],["For other effects, such as applying a texture to the trail, you will need to use a different Material. If you do not want to write your own Shader for the new Material, Unity's built-in Standard Particle Shaders work well with Trail Renderers. If you apply a Texture to a Trail Renderer, the Texture should be of square dimensions (for example 256x256, or 512x512).",424],["If you apply more than one Material to a Trail Renderer, the trail is rendered once for each Material.",424],["See Creating and using Materials for more information.",424],["Distance between points",424],["The Min Vertex Distance value determines how far in world units the GameObject to which the trail applies must travel before a new segment is added to the trail. Low values like 0.1 create trail segments more often, creating smoother trails. Higher values like 1.5 create segments that are more jagged in appearance. Additionally, wide trails may exhibit visual artifacts when the vertices are very close together and the trail changes direction significantly over a short distance.",424],["For performance reasons, it is best to use the largest possible value that achieves the effect you are trying to create.",424],["Trail Renderer Inspector reference",424],["This section contains the following sub-sections:",424],["\nTrail settings\n",424],["\nMaterials\n",424],["\nLighting\n",424],["\nProbes\n",424],["\nAdditional Settings\n",424],["",424],["Trail settings",424],["Property Function ",424],["Width Define a width value, and a curve value to control the width of your trail along its length.The curve is sampled at each vertex, so its accuracy is limited by the number of vertices in your trail. The overall width of the trail is controlled by the width value. ",424],["Time Define the lifetime of a point in the trail, in seconds. ",424],["Min Vertex Distance The minimum distance between points in the trail, in world units. ",424],["AutoDestruct Enable this to destroy the GameObject to which the Trail Renderer component is attached after it has not moved for Time seconds. ",424],["Emitting When this is enabled, Unity adds new points in the trail. When this is disabled, Unity does not add new points to the trail. Use this to pause and unpause trail generation. ",424],["Color Define a gradient to control the color of the trail along its length.Unity samples colors from the Color gradient at each vertex. Between each vertex, Unity applies linear interpolation to colors. Adding more vertices to your trail might give a closer approximation of a detailed gradient. ",424],["Corner Vertices This property dictates how many extra vertices are used when drawing corners in a trail. Increase this value to make the trail corners appear rounder. ",424],["End Cap Vertices This property dictates how many extra vertices are used to create end caps on the trail. Increase this value to make the trail caps appear rounder. ",424],["Alignment Set the direction that the trail faces. ",424],["View The trail faces the Camera. ",424],["TransformZ The trail faces the Z axis of its Transform component. ",424],["Texture Mode Control how the Texture is applied to the trail. ",424],["Stretch Map the texture once along the entire length of the trail. ",424],["Tile Repeat the texture along the trail, based on its length in world units. To set the tiling rate, use Material.SetTextureScale. ",424],["DistributePerSegment Map the texture once along the entire length of the trail, assuming all vertices are evenly spaced. ",424],["RepeatPerSegment Repeat the texture along the trail, repeating at a rate of once per trail segment. To adjust the tiling rate, use Material.SetTextureScale. ",424],["Shadow Bias Set the amount to move shadows away from the Light to remove shadowing artifacts. ",424],["Generate Lighting Data If enabled, Unity builds the trail geometry with normals and tangents included. This allows it to use Materials that use the Scene lighting. ",424],["",424],["Materials",424],["The Materials section lists all the materials that this component uses.",424],["",424],["",424],["",424],["Property",424],["Description",424],["",424],["",424],[" ",424],["",424],["",424],["Lighting",424],["The Lighting section contains properties that relate to lighting.",424],["",424],["",424],["",424],["Property",424],["Description",424],["",424],["",424],[" ",424],["",424],["",424],["Probes",424],["The Probes section contains properties relating to Light Probe and Reflection Probes.",424],["",424],["",424],["",424],["Property",424],["Description",424],["",424],["",424],[" ",424],["",424],["",424],["Additional Settings",424],["The Additional Settings section contains additional properties.",424],["",424],["",424],["",424],["Property",424],["Description",424],["",424],["",424],[" ",424],["",424],["TrailRenderer",424],["Transforms",425],["The Transform stores a GameObject's Position, Rotation, Scale and parenting state. A GameObject always has a Transform component attached: you can't remove a Transform or create a GameObject without a Transform component.",425],["The Transform Component",425],["The Transform component determines the Position, Rotation, and Scale of each GameObject in the scene. Every GameObject has a Transform.",425],["Tip**: You can change the colors of the Transform axes (and other UI elements) (Menu: Unity > Preferences and then select the Colors & keys panel).",425],["Properties",425],["Property: Function: ",425],["Position Position of the Transform in the x, y, and z coordinates. ",425],["Rotation Rotation of the Transform around the x-axis, y-axis, and z-axis, measured in degrees. ",425],["Scale Scale of the Transform along the x-axis, y-axis, and z-axis. The value \"1\" is the original size (the size at which you imported the GameObject). ",425],["Unity measures the Position, Rotation and Scale values of a Transform relative to the Transform's parent. If the Transform has no parent, Unity measures the properties in world space.",425],["Editing Transforms",425],["In 2D space, you can manipulate Transforms on the x-axis or the y-axis only. In 3D space, you can manipulate Transforms on the x-axis, y-axis, and z-axis. In Unity, these axes are represented by the colors red, green, and blue respectively.",425],["There are three primary ways you can edit a Transform's properties:",425],["In the Scene view.",425],["In the Inspector window.",425],["In your C# scripts.",425],["Scene view",425],["In the Scene view, you can use the Move, Rotate and Scale tools to modify Transforms. These tools are located in the upper left-hand corner of the Unity Editor.",425],["You can use the Transform tools on any GameObject in a scene. When you select a GameObject, the tool Gizmo appears within it. The appearance of the Gizmo depends on which tool you select.",425],["When you click and drag on one of the three Gizmo axes, the axis's color changes to yellow. While you drag the mouse, the GameObject moves, rotates, or scales along the selected axis. When you release the mouse button, the axis remains selected",425],["While moving the GameObject, you can lock movement to a particular plane (that is, change two of the axes and keep the third unchanged). To activate the lock for each plane, select the three small coloured squares around the center of the Move Gizmo. The colors correspond to the axis that locks when you select the square (for example, select the blue square to lock the z-axis).",425],["Inspector window",425],["In the Inspector window, you can use the Transform component to edit the Transform properties of a selected GameObject. There are two ways to edit the Transform property values in the component:",425],["Enter values into the property value fields manually. This is useful for very specific adjustments.",425],["Click a value field and drag up or down to increase or decrease the value. This is useful for less specific adjustments.",425],["C# script",425],["Use the Transform API to edit the Transform of a GameObject through script.",425],["",425],["Grouping GameObjects",425],["In Unity, you can group GameObjects into parent-child hierarchies:",425],["A parent GameObject has other GameObjects connected to it that take on its Transform properties.",425],["A child GameObject is connected to another GameObject, and takes on that GameObject’s Transform properties.",425],["In the Hierarchy window, child GameObjects appear directly underneath parent GameObjects and are indented in the list. You can select the fold-out icon to hide or reveal a parent GameObject’s child GameObjects.",425],["A child GameObject moves, rotates, and scales exactly as its parent does. Child GameObjects can also have child GameObjects of their own. A GameObject can have multiple child GameObjects, but only one parent GameObject.",425],["These multiple levels of parent-child relationships between GameObjects form a Transform hierarchy. The GameObject at the top of a hierarchy (that is, the only GameObject in the hierarchy that doesn't have a parent) is known as the root GameObject.",425],["To create a parent GameObject, drag any GameObject in the Hierarchy window onto another. This creates a parent-child relationship between the two GameObjects.",425],["Editing Transforms for parent and child GameObjects",425],["You can group GameObjects into parent-child hierarchies.",425],["The Transform values for any child GameObject are displayed relative to the parent GameObject's Transform values. These values are called local coordinates. For scene construction, it is usually sufficient to work with local coordinates for child GameObjects. In gameplay, it is often useful to find their global coordinates or their exact position in world space. The scripting API for the Transform component has separate properties for local and global Position, Rotation and Scale, and lets you convert between local and global coordinates.",425],["Tip**: When you parent Transforms, it is useful to set the parent's location to <0,0,0> before you add the child Transform. This means that the local coordinates for the child Transform will be the same as the global coordinates, which makes it easier to ensure the child Transform is in the right position.",425],["Transforms and Scale",425],["The Scale of the Transform determines the difference between the size of a mesh in your modeling application and the size of that mesh in Unity. The mesh's size in Unity (and therefore the Transform's Scale) is important, especially during physics simulation. By default, the physics engine assumes that one unit in world space corresponds to one meter. If a GameObject is very large, it can appear to fall in \"slow motion\"; the simulation is correct because you are watching a very large GameObject fall a great distance.",425],["Three factors affect the Scale of your GameObject:",425],["The size of your mesh in your 3D modeling application.",425],["The Mesh Scale Factor setting in the GameObject's Import Settings.",425],["The Scale values of your Transform Component.",425],["Don't adjust the Scale of your GameObject in the Transform component. If you create your models at real-life scale, you won't have to change your Transform's Scale. You can also adjust the scale at which your mesh is imported because some optimizations occur based on the import size. Do this in the Import settings for your individual mesh. Instantiating a GameObject that has an adjusted Scale value can decrease performance.",425],["Note**: Changing the Scale affects the position of child Transforms. For example, scaling the parent Transform to (0,0,0) positions all child Transforms at (0,0,0) relative to the parent Transform.",425],["Non-uniform scaling",425],["Non-uniform scaling is when the Scale in a Transform has different values for x, y, and z; for example (2, 4, 2). In contrast, uniform scaling has the same value for x, y, and z; for example (3, 3, 3). Non-uniform scaling can be useful in a few specific cases but it behaves differently to uniform scaling:",425],["Some components don't fully support non-uniform scaling. For example, some components have a circular or spherical element defined by a Radius property, such as Sphere Collider, Capsule Collider, Light and Audio Source. This means the circular shape remains circular under non-uniform scaling instead of elliptical.",425],["If a child GameObject has a non-uniformly scaled parent GameObject and is rotated relative to that parent GameObject, it might appear skewed or \"sheared\". There are components that support simple non-uniform scaling but that don't work correctly when skewed like this. For example, a skewed Box Collider does not match the shape of the rendered mesh accurately.",425],["A child GameObject of a non-uniformly scaled parent GameObject does not have its scale automatically updated when it rotates. As a result, the child GameObject's shape might appear to change abruptly when you eventually update the scale, for example, if the child GameObject is detached from the parent GameObject.",425],["Additional Resources",425],["Transform",425],["Animation transitions",426],["Animation transitions allow the state machine to switch or blend from one animation state to another. Transitions define not only how long the blend between states should take, but also under what conditions they should activate. You can set up a transition to occur only when certain conditions are true. To set up these conditions, specify values of parameters in the Animator Controller.",426],["For example, your character might have a \"patrolling\" state and a \"sleeping\" state. You could set the transition between patrolling and sleeping to occur only when an \"alertness\" parameter value drops below a certain level.",426],["To give transitions a name, type it into the field as shown below:",426],["The Inspector window of a state shows the transitions the state uses as shown below:",426],["There can be only one transition active at any given time. However, the currently active transition can be interrupted by another transition if you have configured the settings to allow it (see Transition Interruption below).",426],["Transition properties",426],["To view properties for a transition, click on the transition line connecting two states in the Animator window. The properties appear in the Inspector window.",426],["Use the following properties to adjust the transition and how it blends between the current and next state.",426],["Property Function ",426],["Has Exit Time Exit Time is a special transition that doesn’t rely on a parameter. Instead, it relies on the normalized time of the state. Check to make the transition happen at the specific time specified in Exit Time. ",426],["Settings Fold-out menu containing detailed transition settings as below. ",426],["Exit Time If Has Exit Time is checked, this value represents the exact time at which the transition can take effect. This is represented in normalized time (for example, an exit time of 0.75 means that on the first frame where 75% of the animation has played, the Exit Time condition is true). On the next frame, the condition is false.For looped animations, transitions with exit times smaller than 1 are evaluated every loop, so you can use this to time your transition with the proper timing in the animation every loop. Transitions with an Exit Time greater than 1 are evaluated only once, so they can be used to exit at a specific time after a fixed number of loops. For example, a transition with an exit time of 3.5 are evaluated once, after three and a half loops. ",426],["Fixed Duration If the Fixed Duration box is checked, the transition time is interpreted in seconds. If the Fixed Duration box is not checked, the transition time is interpreted as a fraction of the normalized time of the source state. ",426],["Transition Duration The duration of the transition, in normalized time or seconds depending on the Fixed Duration mode, relative to the current state’s duration. This is visualized in the transition graph as the portion between the two blue markers. ",426],["Transition Offset The offset of the time to begin playing in the destination state which is transitioned to. For example, a value of 0.5 means the target state begins playing at 50% of the way through its own timeline. ",426],["Interruption Source Use this to control the circumstances under which this transition may be interrupted (see Transition interruption below). ",426],["Ordered Interruption Determines whether the current transition can be interrupted by other transitions independently of their order (see Transition interruption below). ",426],["Conditions A transition can have a single condition, multiple conditions, or no conditions at all. If your transition has no conditions, the Unity Editor only considers the Exit Time, and the transition occurs when the exit time is reached. If your transition has one or more conditions, the conditions must all be met before the transition is triggered.A condition consists of: - An event parameter (the value considered in the condition). - A conditional predicate (if needed,for example, ‘less than’ or ‘greater than’ for floats). - A parameter value (if needed). If you have Has Exit Time selected for the transition and have one or more conditions, note that the Unity Editor considers whether the conditions are true after the Exit Time. This allows you to ensure that your transition occurs during a certain portion of the animation. ",426],["",426],["Transition interruption",426],["Use the Interruption Source and Ordered Interruption properties to control how your transition can be interrupted.",426],["The interruption order works, conceptually, as if transitions are queued and then parsed for a valid transition from the first transition inserted to the last.",426],["Interruption Source property",426],["The transitions in AnyState are always added first in the queue, then other transitions are queued depending on the value of Interruption Source:",426],["Value Function ",426],["None Don’t add any more transitions. ",426],["Current State Queue the transitions from the current state. ",426],["Next State Queue the transitions from the next state. ",426],["Current State then Next State Queue the transitions from the current state, then queue the ones from the next state. ",426],["Next State then Current State Queue the transitions from the next state, then queue the ones from the current state. ",426],["Ordered Interruption property",426],["The property Ordered Interruption changes how the queue is parsed.",426],["Depending on its value, parsing the queue ends at a different moment as listed below.",426],["Value Ends when ",426],["Checked A valid transition or the current transition has been found. ",426],["Unchecked A valid transition has been found. ",426],["Only an AnyState transition can be interrupted by itself.",426],["To learn more about transition interruptions, see the Unity blog post State Machine Transition Interruptions.",426],["Transition graph",426],["To manually adjust the settings listed above, you can either enter numbers directly into the fields or use the transition graph. The transition graph modifies the values above when the visual elements are manipulated.",426],["Change the transition properties in the graph view using the following directions::",426],["Drag the Duration \"out\" marker to change the Duration of the transition.",426],["Drag the Duration \"in\" marker to change the duration of the transition and the Exit Time.",426],["Drag the target state to adjust the Transition Offset.",426],["Drag the preview playback marker to scrub through the animation blend in the preview window at the bottom of the Inspector.",426],["Transitions between Blend Tree states",426],["If either the current or next state belonging to this transition is a Blend Tree state, the Blend Tree parameters appear in the Inspector. Adjust these values to preview how your transition would look with the Blend Tree values set to different configurations.",426],["If your Blend Tree contains clips of differing lengths, you should test what your transition looks like when showing both the short clip and the long clip. Adjusting these values does not affect how the transition behaves at runtime; they are solely for helping you preview how the transition could look in different situations.",426],["",426],["Conditions",426],["A transition can have a single condition, multiple conditions, or no conditions at all. If your transition has no conditions, the Unity Editor only considers the Exit Time, and the transition occurs when the exit time is reached. If your transition has one or more conditions, the conditions must all be met before the transition is triggered.",426],["A condition consists of:",426],["An event parameter, the value of which is considered in the condition.",426],["A conditional predicate, if needed (for example, less or greater for floats).",426],["A parameter value, if needed.",426],["If Has Exit Time is enabled for the transition and has one or more conditions, these conditions are only checked after the exit time of the state. This allows you to ensure that your transition only occurs during a certain portion of the animation.",426],["Transition",426],["Tree Editor",427],["Unity provides a tool called Tree Editor that lets you design trees directly within the editor. This is very useful when you want to create detailed forests and jungles with different tree types and variations.",427],["This section of the manual explains how to use the Tree Editor. Use the navigation column on the left-hand side of the page to view topics in this section.",427],["SpeedTree",427],["You can use SpeedTree Modeler from IDV, Inc. to create trees with advanced visual effects such as smooth LOD transition, fast billboarding and natural wind animation. See Unity documentation on SpeedTree for more information.",427],["Tree",427],["Project Settings - VFX",428],["The VFX tab in the Project Settings window controls settings relevant to the Visual Effect Graph.",428],["This tab is only visible if you install the Visual Effect Graph package. For information on how to install the Visual Effect Graph, see the packages documentation.",428],["For information on the properties in this tab, see the Visual Effect Graph package documentation.",428],["VFXManager",428],["Video Clips",429],["A Video Clip is an imported video file, which the Video Player component uses to play video content (and accompanying audio content, if the video also has sound). Typical file extensions for video files include .mp4, .mov, .webm, and .wmv.",429],["When you select a Video Clip, the Inspector shows the Video Clip Importer, including options, preview, and source details. Click the Play button at the top-right of the preview to play the Video Clip, along with its first audio track.",429],["To view the source information of a Video Clip, navigate to the preview pane at the bottom of the Inspector window, click the name of the Video Clip in the top-left corner, and select Source Info.",429],["Platform-specific options adapt the transcode process for each target platform, allowing the selection of default options for each platform.",429],["If transcode is disabled, the video file is used as is, meaning compatibility with the target platform must be verified manually (see documentation on video file compatibility for more information). However, choosing not to transcode can save time as well as avoid transformation-related quality loss.",429],["",429],["Video Clip Importer Properties",429],["Property Function ",429],["Keep Alpha Keeps the alpha channel and encodes it during transcode so it can be used even if the target platform does not natively support videos with alpha.This property is only visible for sources that have an alpha channel. ",429],["Deinterlace Controls how interlaced sources are deinterlaced during transcode. For example, you can choose to change interlacing settings due to how a video is encoded or for aesthetic reasons. Interlaced videos have two time samples in each frame: one in odd-numbered lines, and one in even-numbered lines. ",429],["__Off__ The source is not interlaced, and there is no processing to do (this is the default setting). \n",429],["__Even__ Takes the even lines of each frame and interpolates them to create missing content. Odd lines are dropped. \n",429],["__Odd__ Takes the odd lines of each frame and interpolates them to create missing content. Even lines are dropped. \n",429],["Flip Horizontally If this tickbox is checked, the source content is flipped along a horizontal axis during transcode to make it upside-down. ",429],["Flip Vertically If this tickbox is checked, the source content is flipped along a vertical axis during transcode to swap left and right. ",429],["Import Audio If this tickbox is checked, audio tracks are imported during transcode.This property is only visible for sources that have audio tracks. ",429],["Transcode When enabled by ticking the checkbox, the source is transcoded into a format that is compatible with the target platform.If disabled, the original content is used, bypassing the potentially lengthy transcoding process.Note: Verify that the source format is compatible with each target platform (see documentation on video file compatibility for more information). ",429],["Dimensions Controls how the source content is resized. ",429],["__Original__ Keeps the original size. \n",429],["__Three Quarter Res__ Resizes the source to three quarters of its original width and height. \n",429],["__Half Res__ Resizes the source to half of its original width and height. \n",429],["__Quarter Res__ Resizes the source to a quarter of its original width and height. \n",429],["__Square (1024 X 1024)__ Resizes the source to 1024 x 1024 square images. Aspect ratio is controllable. \n",429],["__Square (512 X 512)__ Resizes the source to 512 x 512 square images. Aspect ratio is controllable. \n",429],["__Square (256 X 256)__ Resizes the source to to 256 x 256 square images. Aspect ratio is controllable. \n",429],["__Custom__ Resizes the source to a custom resolution. Aspect ratio is controllable. \n",429],["Width Width of the resulting images.This property is only visible when the Dimensions field is set to Custom. ",429],["Height Height of the resulting images.This property is only visible when the Dimensions field is set to Custom. ",429],["Aspect Ratio Aspect ratio control used when resizing images.This property is only visible when the Dimensions field is set to an option other than Original. ",429],["__No Scaling__ Black areas added as needed to preserve the aspect ratio of the original content. \n",429],["__Stretch__ Stretches the original content to fill the destination resolution without leaving black areas. \n",429],["Codec Codec used for encoding the video track. For information about codec support, see the documentation on Video file compatibility. ",429],["__Auto__ Chooses the most suitable video codec for the target platform. \n",429],["__H264__ The MPEG-4 Advanced Video Coding (AVC) video codec, supported by hardware on most platforms. \n",429],["__H265__ The MPEG-H Part 2, or High Efficiency Video Coding (HEVC) video codec, supported by hardware on some platforms. \n",429],["__VP8__ The VP8 video codec, supported by software on most platforms, and by hardware on a few platforms such as Android and WebGL. \n",429],["Bitrate Mode Low, Medium, or High bitrate, relative to the chosen codec’s baseline profile. ",429],["Spatial Quality This setting dictates whether video images are reduced in size during transcoding, which means they take up less storage space. However, resizing images also results in blurriness during playback. ",429],["__Low Spatial Quality__ The image is significantly reduced in size during transcode (typically to a quarter of its original dimensions), and then expanded back to its original size upon playback. This is the highest amount of resizing, meaning it saves the most storage space but results in the largest amount of blurriness upon playback. \n",429],["__Medium Spatial Quality__ The image is moderately reduced in size during transcode (typically to half of its original dimensions), and then expanded back to its original size upon playback. Although there is some resizing, images will be less blurry than those that use the Low Spatial Quality option, and there is some reduction in required storage space. \n",429],["__High Spatial Quality__ No resizing takes place if this option is selected. This means the image is not reduced in size during transcode, and therefore the video’s original level of visual clarity is maintained. \n",429],["2019-05-07 ",429],["New feature in Unity 5.6",429],["VideoClip",429],["Video Player component",430],["Use the Video Player component to attach video files to GameObjects, and play them on the GameObject’s Texture at run time.",430],["The screenshot below shows a Video Player component attached to a spherical GameObject.",430],["By default, the Material Property of a Video Player component is set to a GameObject's main texture, which means that when the Video Player component is attached to a GameObject that has a Renderer, it automatically assigns itself to the Texture on that Renderer (because this is the main Texture for the GameObject). Here, the GameObject has a Mesh Renderer component, so the Video Player automatically assigns it to the Renderer field, which means the Video Clip plays on the Mesh Renderer’s Texture.",430],["You can also set a specific target for the video to play on, including:",430],["A Camera plane",430],["A Render Texture",430],["A Material Texture parameter",430],["Any Texture field in a component",430],["Video Player component reference",430],["Property Description ",430],["Source Choose the source type of your video. ",430],["Video Clip Select the Video Clip to assign to the Video Player component. This isn’t supported on the Web platform. ",430],["URL Enter the URL (for example, http:// or file://) of the video you want to assign to the Video Player. ",430],["Update Mode Set the clock source that the Video Player component uses to update its timing. ",430],["DSP Time Use the same clock source that processes audio. ",430],["Game Time Use the same clock source as the game clock. This clock source is affected by the time scaling and capture frame rate settings. ",430],["Unscaled Game Time Use the same clock source as the game clock but without being affected by time scaling or capture frame rate. ",430],["Play On Awake Play the video when the Scene launches. Clear it if you want to trigger the video playback at another point during runtime. Trigger it via scripting with the Play() command. ",430],["Wait For First Frame Wait for the first frame of the source video to be ready for display before the game starts. Clear it to keep the video time in sync with the rest of the game, which might cause the first few frames to be discarded. ",430],["Loop Loop the source video when it reaches its end. Clear it to stop playing the video when it reaches the end. ",430],["Skip On Drop When you enable this option, and the Video Player component detects drift between the playback position and the game clock, the Video Player skips ahead. When you disable this option, the Video Player doesn't correct for drift and systematically plays all frames. ",430],["Playback Speed Set a multiplier for the playback speed, as a value between 0 and 10. This is set to 1 (normal speed) by default. If the field is set to 2, the video plays at two times its normal speed. ",430],["Render Mode Choose how the video will render. ",430],["Camera Far Plane Render the video on the Camera’s far plane. ",430],["Camera Near Plane Render the video on the Camera’s near plane. ",430],["Render Texture Render the video into a Render Texture. ",430],["Material Override Render the video into a selected Texture property of a GameObject through its Renderer’s Material. ",430],["API Only Render the video into the VideoPlayer.texture Scripting API property. You must use scripting to assign the Texture to its intended destination. ",430],["Camera Define the Camera receiving the video. ",430],["Alpha Set the global transparency level to add to the source video. This allows elements behind the plane to be visible through it. For more information about alpha channels, refer to video transparency support. ",430],["3D Layout Choose the layout of 3D content in the source video. ",430],["None Video doesn't have any 3D content. ",430],["Side by Side Video has 3D content where the left eye occupies the left half and right eye occupies the right half of video frames. ",430],["Over Under Video has 3D content where the left eye occupies the upper half and right eye occupies the lower half of video frames. ",430],["Target Texture Define the Render Texture where the Video Player component renders its images. ",430],["Aspect Ratio Set the aspect ratio of the images that fill the Camera Near Plane, Camera Far Plane, or Render Texture when the corresponding Render Mode is used. ",430],["No Scaling No scaling is used. The video is centered on the destination rectangle. ",430],["Fit Vertically Scale the source to fit the destination rectangle vertically, cropping the left and right sides or leaving black areas on each side if necessary. The source aspect ratio is preserved. ",430],["Fit Horizontally Scale the source to fit the destination rectangle horizontally, cropping the top and bottom regions or leaving black areas above and below if needed. The source aspect ratio is preserved. ",430],["Fit Inside Scale the source to fit the destination rectangle without having to crop. Leaves black areas on the left and right or above and below as needed. The source aspect ratio is preserved. ",430],["Fit Outside Scale the source to fit the destination rectangle without leaving black areas on the left and right or above and below, cropping as required. The source aspect ratio is preserved. ",430],["Stretch Scale both horizontally or vertically to fit the destination rectangle. The source aspect ratio isn't preserved. ",430],["Renderer Select the Renderer where the Video Player component renders its images. When set to None, the Renderer on the same GameObject as the Video Player component is used. ",430],["Auto-Select Property When you enable this option, the Video Player component selects the Renderer's main texture automatically. When you disable this option, you can set the Material Property option manually. ",430],["Material Property The name of the Material Texture property that receives the Video Player component images. ",430],["Audio Output Mode Define how the source’s audio tracks are output. ",430],["None Audio isn't played. ",430],["Audio Source Audio samples are sent to selected audio sources, enabling Unity’s audio processing to be applied. ",430],["Direct Audio samples are sent directly to the audio output hardware, bypassing Unity’s audio processing. ",430],["API Only (Experimental) Audio samples are sent to the associated AudioSampleProvider. ",430],["Controlled Tracks The number of audio tracks in the video.Only shown when Source is URL. When Source is Video Clip, the number of tracks is determined by examining the video file. ",430],["Track Number Enable the associated audio track to use for playback. This must be set prior to playback.The text to the left of the checkbox provides information about the audio track, specifically the track number, language, and number of channels.When the source is a URL, this information is only available during playback.This property only appears if your source is a Video Clip that has an audio track (or tracks), or your source is a URL (allowing you to indicate how many tracks are expected from the URL during playback). ",430],["Audio Source The audio source through which the audio track is played. The targeted audio source can also play Audio Clips.The audio source’s playback controls (Play On Awake and Play() in scripting API) don't apply to the video source’s audio track.This property only appears when the Audio Output Mode is set to Audio Source. ",430],["Mute Mute the associated audio track. In Audio Source mode, the audio source’s control is used.This property only appears when the Audio Output Mode is set to Direct. ",430],["Volume Volume of the associated audio track. In Audio Source mode, the audio source’s volume is used.This property only appears when the Audio Output Mode is set to Direct. ",430],["Video Player Scripting Example",430],["The following script demonstrates a few of the Video Player component's features.",430],["// Examples of Video Player function",430],["using UnityEngine;",430],["public class Example : MonoBehaviour",430],["void Start()",430],["// Will attach a Video Player to the main camera.",430],["GameObject camera = GameObject.Find(\"Main Camera\");",430],["// VideoPlayer automatically targets the camera backplane when it is added",430],["// to a camera object, no need to change videoPlayer.targetCamera.",430],["var videoPlayer = camera.AddComponent();",430],["// Play on awake defaults to true. Set it to false to avoid the url set",430],["// below to auto-start playback since we're in Start().",430],["videoPlayer.playOnAwake = false;",430],["// By default, Video Players added to a camera will use the far plane.",430],["// Let's target the near plane instead.",430],["videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.CameraNearPlane;",430],["// This will cause our Scene to be visible through the video being played.",430],["videoPlayer.targetCameraAlpha = 0.5F;",430],["// Set the video to play. URL supports local absolute or relative paths.",430],["// Here, using absolute.",430],["videoPlayer.url = \"/Users/graham/movie.mov\";",430],["// Skip the first 100 frames.",430],["videoPlayer.frame = 100;",430],["// Restart from beginning when done.",430],["videoPlayer.isLooping = true;",430],["// Each time we reach the end, we slow down the playback by a factor of 10.",430],["videoPlayer.loopPointReached += EndReached;",430],["// Start playback. This means the Video Player may have to prepare (reserve",430],["// resources, pre-load a few frames, etc.). To better control the delays",430],["// associated with this preparation one can use videoPlayer.Prepare() along with",430],["// its prepareCompleted event.",430],["videoPlayer.Play();",430],["void EndReached(UnityEngine.Video.VideoPlayer vp)",430],["vp.playbackSpeed = vp.playbackSpeed / 10.0F;",430],["VideoPlayer",430],["Visual Effect",431],["The Visual Effect component contains basic controls to configure an instance of a Visual Effect in a Scene.",431],["This component only works when you install the Visual Effect Graph package. For information on how to install the Visual Effect Graph, see the packages documentation.",431],["For information on how to use the Visual Effect component, see the Visual Effect Graph package documentation.",431],["VisualEffect",431],["Visual Effect Graph Asset",432],["A Visual Effect Graph Asset contains all of the necessary data, such as the graph and shaders, that Unity requires to process an effect",432],["This Asset only works when you install the Visual Effect Graph package. For information on how to install the Visual Effect Graph, see the packages documentation.",432],["For information on how to use Visual Effect Graph Assets, see the Visual Effect Graph package documentation.",432],["VisualEffectAsset",432],["Block Subgraph",433],["A Subgraph is an Asset that contains part of a Visual Effect Graph. A Subgraph appears as a single Node that you can use in another Visual Effect Graph or Subgraph. A Block Subgraph is a Subgraph that contains a set of Operators and Blocks packaged together to use as a Block.",433],["This Asset only works when you install the Visual Effect Graph package. For information on how to install the Visual Effect Graph, see the packages documentation.",433],["For information on how to use Block Subgraphs, see the Visual Effect Graph package documentation.",433],["VisualEffectSubgraphBlock",433],["Operator Subgraph",434],["A Subgraph is an Asset that contains part of a Visual Effect Graph. A Subgraph appears as a single Node that you can use in another Visual Effect Graph or Subgraph. An Operator Subgraph is a Subgraph that specifically contains a set of Operators packaged together to use as an Operator.",434],["This Asset only works when you install the Visual Effect Graph package. For information on how to install the Visual Effect Graph, see the packages documentation.",434],["For information on how to use Operator Subgraphs, see the Visual Effect Graph package documentation.",434],["VisualEffectSubgraphOperator",434],["Wheel Collider component reference",435],["The Wheel Collider is a special collider for grounded vehicles. It has built-in collision detection, wheel physics, and a slip-based tire friction model. It can be used for objects other than wheels, but it is specifically designed for vehicles with wheels.",435],["For guidance on using the Wheel Collider, see the Unity Wheel Collider tutorial.",435],["Properties",435],["Property: Function: ",435],["Mass The Mass of the wheel. ",435],["Radius Radius of the wheel. ",435],["Wheel Damping Rate This is a value of damping applied to a wheel. ",435],["Suspension Distance Maximum extension distance of wheel suspension, measured in local space. Suspension always extends downwards through the local Y-axis. ",435],["Force App Point Distance This parameter defines the point where the wheel forces will applied. This is expected to be in metres from the base of the wheel at rest position along the suspension travel direction. When forceAppPointDistance = 0 the forces will be applied at the wheel base at rest. A better vehicle would have forces applied slightly below the vehicle centre of mass. ",435],["Center Center of the wheel in object local space. ",435],["Suspension Spring The suspension attempts to reach a Target Position by adding spring and damping forces. ",435],["        Spring Spring force attempts to reach the Target Position. A larger value makes the suspension reach the Target Position faster. ",435],["        Damper Dampens the suspension velocity. A larger value makes the Suspension Spring move slower. ",435],["        Target Position The suspension's rest distance along Suspension Distance. 1 maps to fully extended suspension, and 0 maps to fully compressed suspension. Default value is 0.5, which matches the behavior of a regular car's suspension. ",435],["Forward/Sideways Friction Properties of tire friction when the wheel is rolling forward and sideways. See the Wheel Friction Curves section below. ",435],["Details",435],["The wheel's collision detection is performed by casting a ray from Center downwards through the local Y-axis. The wheel has a Radius and can extend downwards according to the Suspension Distance. The vehicle is controlled from scripting using different properties: motorTorque, brakeTorque and steerAngle. See the Wheel Collider scripting reference for more information.",435],["The Wheel Collider computes friction separately from the rest of physics engine, using a slip-based friction model. This allows for more realistic behaviour but also causes Wheel Colliders to ignore standard Physic Material settings.",435],["Wheel collider setup",435],["You do not turn or roll WheelCollider objects to control the car - the objects that have the WheelCollider attached should always be fixed relative to the car itself. However, you might want to turn and roll the graphical wheel representations. The best way to do this is to setup separate objects for Wheel Colliders and visible wheels:",435],["Note that the gizmo graphic for the WheelCollider's position is not updated in playmode:",435],["Collision geometry",435],["Because cars can achieve large velocities, getting race track collision geometry right is very important. Specifically, the collision mesh should not have small bumps or dents that make up the visible models (e.g. fence poles). Usually a collision mesh for the race track is made separately from the visible mesh, making the collision mesh as smooth as possible. It also should not have thin objects - if you have a thin track border, make it wider in a collision mesh (or completely remove the other side if the car can never go there).",435],["Wheel Friction Curves",435],["Tire friction can be described by the Wheel Friction Curve shown below. There are separate curves for the wheel's forward (rolling) direction and sideways direction. In both directions it is first determined how much the tire is slipping (based on the speed difference between the tire's rubber and the road). Then this slip value is used to find out tire force exerted on the contact point.",435],["The curve takes a measure of tire slip as an input and gives a force as output. The curve is approximated by a two-piece spline. The first section goes from (0 , 0) to (ExtremumSlip , ExtremumValue), at which point the curve's tangent is zero. The second section goes from (ExtremumSlip , ExtremumValue) to (AsymptoteSlip , AsymptoteValue), where curve's tangent is again zero:",435],["The property of real tires is that for low slip they can exert high forces, since the rubber compensates for the slip by stretching. Later when the slip gets really high, the forces are reduced as the tire starts to slide or spin. Thus, tire friction curves have a shape like in the image above.",435],["Property: Function: ",435],["Extremum Slip/Value Curve's extremum point. ",435],["Asymptote Slip/Value Curve's asymptote point. ",435],["Stiffness Multiplier for the Extremum Value and Asymptote Value (default is 1). Changes the stiffness of the friction. Setting this to zero will completely disable all friction from the wheel. Usually you modify stiffness at runtime to simulate various ground materials from scripting. ",435],["Hints",435],["You might want to decrease physics timestep length in the Time window to get more stable car physics, especially if it's a racing car that can achieve high velocities.",435],["To keep a car from flipping over too easily you can lower its Rigidbody center of mass a bit from script, and apply \"down pressure\" force that depends on car velocity.",435],["WheelCollider",435],["Wheel Joint 2D",436],["Use the Wheel Joint 2D to simulate a rolling wheel, on which an object can move. You can apply motor power to the joint. The wheel uses a suspension spring to maintain its distance from the main body of the vehicle.",436],["Properties",436],["Property Function ",436],["Enable Collision Enable this property to enable collisions between the two connected GameObjects. ",436],["Connected Rigid Body Specify the other GameObject this joint connects to. If you leave this as None, the other end of the joint is fixed to a point in space defined by the Connected Anchor setting. Select the circle icon to the right to view a list of GameObjects to connect to. ",436],["Auto Configure Connected Anchor Enable this property to automatically set the anchor location for the other GameObject this Hinge Joint 2D connects to. You do not need to enter coordinates for the Connected Anchor property if you enable this property. ",436],["Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to this GameObject. ",436],["Connected Anchor Define where (in terms of x, y-coordinates on the Rigidbody 2D) the end point of the joint connects to the other GameObject. ",436],["Suspension Select this to expand this property's settings. ",436],["Damping Ratio Set the degree to suppress spring oscillation. In the range 0 to 1, the higher the value, the less movement. ",436],["Frequency Set the frequency at which the spring oscillates while the GameObjects are approaching the separation distance you want (measured in cycles per second). In the range 0 to 1,000,000 - the higher the value, the stiffer the spring. Note: Setting Frequency to zero will create the stiffest spring type joint possible. ",436],["Angle Set the world movement angle for the suspension. ",436],["Use Motor Enable this to apply motor force to the joint. ",436],["Motor Select this to expand this property's settings. ",436],["Motor Speed Target speed (degrees per second) for the motor to reach. ",436],["Maximum Motor Force Set the maximum torque (or rotation) the motor can apply when attempting to reach the target speed. ",436],["Break Action Set the action taken when either the force or torque threshold is exceeded. ",436],["Break Force Set the force threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",436],["Break Torque Set the torque threshold which if exceeded, will cause the joint to perform the selected Break Action. The default value is set to Infinity, which can never be exceeded and therefore the Break Action can never be taken while the threshold remains at this value. ",436],["Using this joint",436],["Use this joint to simulate wheels and suspension. The aim of the joint is to keep the position of two points on a line that extends to infinity, whilst at the same time making them overlap. Those two points can be two Rigidbody2D components or a Rigidbody2D component and a fixed position in the world. (Connect to a fixed position in the world by setting Connected Rigidbody to None).",436],["Wheel Joint 2D acts like a combination of a Slider Joint 2D (without its motor or limit constraints) and a Hinge Joint 2D (without its limit constraint).",436],["The joint applies a linear force to both connected rigid body objects to keep them on the line, an angular motor to rotate the objects on the line, and a spring to simulate wheel suspension.",436],["Set the Maximum Motor Speed and Maximum Motor Force (torque, in this joint) to control the angular motor speed, and make the two rigid body objects rotate.",436],["You can set the wheel suspension stiffness and movement in order to simulate different degrees of suspension. For example, to simulate a stiff, barely moving suspension:",436],["Set a high (1,000,000 is the highest) Frequency == stiff suspension.",436],["Set a high (1 is the highest) Damping Ratio == barely moving suspension.",436],["To simulate a looser and more freely moving suspension, you would use the following settings:",436],["Set a low Frequency == loose suspension.",436],["Set a low Damping Ratio == moving suspension.",436],["It has two simultaneous constraints:",436],["Maintain a zero relative linear distance away from a specified line between two anchor points on two rigid body objects.",436],["Maintain an angular speed between two anchor points on two rigid body objects. (Set the speed via the Maximum Motor Speed option and maximum torque via Maximum Motor Force.)",436],["You can use this joint to construct physical objects that need to react as if they are connected with a rotational pivot but cannot move away from a specified line. Such as:",436],["Simulating wheels with a motor to drive the wheels and a line defining the movement allowed for the suspension.",436],["Behavior difference to the Wheel Collider",436],["Unlike the Wheel Collider used with 3D physics, the Wheel Joint 2D uses a separate Rigidbody object for the wheel, which rotates when the force is applied. (The Wheel Collider, by contrast, simulates the suspension using a raycast and the wheel's rotation is purely a graphical effect). The wheel object will typically be a Circle Collider 2D with a Physics Material 2D that gives the right amount of traction for your gameplay.",436],["Additional resources",436],["\nRefer to Joints 2D for more information about other 2D Joints.\n",436],["WheelJoint2D",436],["Wind Zones",437],["To create the effect of wind on your Terrain and Particle Systems, you can add one or more GameObjects with Wind Zone components. Trees within a wind zone bend in a realistic animated fashion, and the wind itself moves in pulses to create natural patterns of movement among the trees.",437],["Using Wind Zones",437],["To create a Wind Zone GameObject directly, go to Unity's top menu and then go to GameObject > 3D Object > Wind Zone. You can add the Wind Zone component to any suitable GameObject already in the Scene (menu: Component > Miscellaneous > Wind Zone). The Inspector for the Wind Zone has a number of settings to control its behavior.",437],["You can set the Mode to Directional or Spherical.",437],["In Directional mode, the wind affects the whole Terrain at once. This is useful for creating effects like the natural movement of the trees.",437],["In Spherical mode, the wind blows outwards within a sphere defined by the Radius property. This is useful for creating special effects like explosions.",437],["The Main property determines the overall strength of the wind, and you can use Turbulence to give these some random variation.",437],["The wind blows over the trees in pulses to create a more natural effect. You can control the strength of the pulses with Pulse Magnitude, and the time interval between them with Pulse Frequency.",437],["Properties",437],["Property: Function: ",437],["Mode ",437],["        Spherical Wind zone only has an effect inside the radius, and has a falloff from the center towards the edge. ",437],["        Directional Wind zone affects the entire scene in one direction. ",437],["Radius Radius of the Spherical Wind Zone (only active if the mode is set to Spherical). ",437],["Main The primary force applied to all objects affected by the Wind Zone. ",437],["Turbulence The value represents the noise of the wind. A greater value creates higher variation in wind direction. ",437],["Pulse Magnitude Defines the strength multiplier of the wind pulses. ",437],["Pulse Frequency Defines the length and frequency of the wind pulses. ",437],["Particle Systems",437],["The main use of wind is to animate trees, but it can also affect particles in a Particle System if that Particle System uses the External Forces module module. See the Particle System reference page for further details.",437],["WindZone",437],["YAML Class ID Reference",438],["A reference of common class ID numbers used by the YAML file format is given below, both in numerical order of class IDs and alphabetical order of class names. Note that some ranges of numbers are intentionally omitted from the sequence - these may represent classes that have been removed from the API or may be reserved for future use. Classes defined from scripts will always have class ID 114 (MonoBehaviour).",438],["Classes Ordered by ID Number",438],["ID Class ",438],["0 Object ",438],["1 GameObject ",438],["2 Component ",438],["3 LevelGameManager ",438],["4 Transform ",438],["5 TimeManager ",438],["6 GlobalGameManager ",438],["8 Behaviour ",438],["9 GameManager ",438],["11 AudioManager ",438],["13 InputManager ",438],["18 EditorExtension ",438],["19 Physics2DSettings ",438],["20 Camera ",438],["21 Material ",438],["23 MeshRenderer ",438],["25 Renderer ",438],["27 Texture ",438],["28 Texture2D ",438],["29 OcclusionCullingSettings ",438],["30 GraphicsSettings ",438],["33 MeshFilter ",438],["41 OcclusionPortal ",438],["43 Mesh ",438],["45 Skybox ",438],["47 QualitySettings ",438],["48 Shader ",438],["49 TextAsset ",438],["50 Rigidbody2D ",438],["53 Collider2D ",438],["54 Rigidbody ",438],["55 PhysicsManager ",438],["56 Collider ",438],["57 Joint ",438],["58 CircleCollider2D ",438],["59 HingeJoint ",438],["60 PolygonCollider2D ",438],["61 BoxCollider2D ",438],["62 PhysicsMaterial2D ",438],["64 MeshCollider ",438],["65 BoxCollider ",438],["66 CompositeCollider2D ",438],["68 EdgeCollider2D ",438],["70 CapsuleCollider2D ",438],["72 ComputeShader ",438],["74 AnimationClip ",438],["75 ConstantForce ",438],["78 TagManager ",438],["81 AudioListener ",438],["82 AudioSource ",438],["83 AudioClip ",438],["84 RenderTexture ",438],["86 CustomRenderTexture ",438],["89 Cubemap ",438],["90 Avatar ",438],["91 AnimatorController ",438],["93 RuntimeAnimatorController ",438],["94 ScriptMapper ",438],["95 Animator ",438],["96 TrailRenderer ",438],["98 DelayedCallManager ",438],["102 TextMesh ",438],["104 RenderSettings ",438],["108 Light ",438],["109 CGProgram ",438],["110 BaseAnimationTrack ",438],["111 Animation ",438],["114 MonoBehaviour ",438],["115 MonoScript ",438],["116 MonoManager ",438],["117 Texture3D ",438],["118 NewAnimationTrack ",438],["119 Projector ",438],["120 LineRenderer ",438],["121 Flare ",438],["122 Halo ",438],["123 LensFlare ",438],["124 FlareLayer ",438],["125 HaloLayer ",438],["126 NavMeshProjectSettings ",438],["128 Font ",438],["129 PlayerSettings ",438],["130 NamedObject ",438],["134 PhysicMaterial ",438],["135 SphereCollider ",438],["136 CapsuleCollider ",438],["137 SkinnedMeshRenderer ",438],["138 FixedJoint ",438],["141 BuildSettings ",438],["142 AssetBundle ",438],["143 CharacterController ",438],["144 CharacterJoint ",438],["145 SpringJoint ",438],["146 WheelCollider ",438],["147 ResourceManager ",438],["150 PreloadData ",438],["153 ConfigurableJoint ",438],["154 TerrainCollider ",438],["156 TerrainData ",438],["157 LightmapSettings ",438],["158 WebCamTexture ",438],["159 EditorSettings ",438],["162 EditorUserSettings ",438],["164 AudioReverbFilter ",438],["165 AudioHighPassFilter ",438],["166 AudioChorusFilter ",438],["167 AudioReverbZone ",438],["168 AudioEchoFilter ",438],["169 AudioLowPassFilter ",438],["170 AudioDistortionFilter ",438],["171 SparseTexture ",438],["180 AudioBehaviour ",438],["181 AudioFilter ",438],["182 WindZone ",438],["183 Cloth ",438],["184 SubstanceArchive ",438],["185 ProceduralMaterial ",438],["186 ProceduralTexture ",438],["187 Texture2DArray ",438],["188 CubemapArray ",438],["191 OffMeshLink ",438],["192 OcclusionArea ",438],["193 Tree ",438],["195 NavMeshAgent ",438],["196 NavMeshSettings ",438],["198 ParticleSystem ",438],["199 ParticleSystemRenderer ",438],["200 ShaderVariantCollection ",438],["205 LODGroup ",438],["206 BlendTree ",438],["207 Motion ",438],["208 NavMeshObstacle ",438],["210 SortingGroup ",438],["212 SpriteRenderer ",438],["213 Sprite ",438],["214 CachedSpriteAtlas ",438],["215 ReflectionProbe ",438],["218 Terrain ",438],["220 LightProbeGroup ",438],["221 AnimatorOverrideController ",438],["222 CanvasRenderer ",438],["223 Canvas ",438],["224 RectTransform ",438],["225 CanvasGroup ",438],["226 BillboardAsset ",438],["227 BillboardRenderer ",438],["228 SpeedTreeWindAsset ",438],["229 AnchoredJoint2D ",438],["230 Joint2D ",438],["231 SpringJoint2D ",438],["232 DistanceJoint2D ",438],["233 HingeJoint2D ",438],["234 SliderJoint2D ",438],["235 WheelJoint2D ",438],["236 ClusterInputManager ",438],["237 BaseVideoTexture ",438],["238 NavMeshData ",438],["240 AudioMixer ",438],["241 AudioMixerController ",438],["243 AudioMixerGroupController ",438],["244 AudioMixerEffectController ",438],["245 AudioMixerSnapshotController ",438],["246 PhysicsUpdateBehaviour2D ",438],["247 ConstantForce2D ",438],["248 Effector2D ",438],["249 AreaEffector2D ",438],["250 PointEffector2D ",438],["251 PlatformEffector2D ",438],["252 SurfaceEffector2D ",438],["253 BuoyancyEffector2D ",438],["254 RelativeJoint2D ",438],["255 FixedJoint2D ",438],["256 FrictionJoint2D ",438],["257 TargetJoint2D ",438],["258 LightProbes ",438],["259 LightProbeProxyVolume ",438],["271 SampleClip ",438],["272 AudioMixerSnapshot ",438],["273 AudioMixerGroup ",438],["290 AssetBundleManifest ",438],["300 RuntimeInitializeOnLoadManager ",438],["310 UnityConnectSettings ",438],["319 AvatarMask ",438],["320 PlayableDirector ",438],["328 VideoPlayer ",438],["329 VideoClip ",438],["330 ParticleSystemForceField ",438],["331 SpriteMask ",438],["362 WorldAnchor ",438],["363 OcclusionCullingData ",438],["1001 PrefabInstance ",438],["1002 EditorExtensionImpl ",438],["1003 AssetImporter ",438],["1004 AssetDatabaseV1 ",438],["1005 Mesh3DSImporter ",438],["1006 TextureImporter ",438],["1007 ShaderImporter ",438],["1008 ComputeShaderImporter ",438],["1020 AudioImporter ",438],["1026 HierarchyState ",438],["1028 AssetMetaData ",438],["1029 DefaultAsset ",438],["1030 DefaultImporter ",438],["1031 TextScriptImporter ",438],["1032 SceneAsset ",438],["1034 NativeFormatImporter ",438],["1035 MonoImporter ",438],["1038 LibraryAssetImporter ",438],["1040 ModelImporter ",438],["1041 FBXImporter ",438],["1042 TrueTypeFontImporter ",438],["1045 EditorBuildSettings ",438],["1048 InspectorExpandedState ",438],["1049 AnnotationManager ",438],["1050 PluginImporter ",438],["1051 EditorUserBuildSettings ",438],["1055 IHVImageFormatImporter ",438],["1101 AnimatorStateTransition ",438],["1102 AnimatorState ",438],["1105 HumanTemplate ",438],["1107 AnimatorStateMachine ",438],["1108 PreviewAnimationClip ",438],["1109 AnimatorTransition ",438],["1110 SpeedTreeImporter ",438],["1111 AnimatorTransitionBase ",438],["1112 SubstanceImporter ",438],["1113 LightmapParameters ",438],["1120 LightingDataAsset ",438],["1124 SketchUpImporter ",438],["1125 BuildReport ",438],["1126 PackedAssets ",438],["1127 VideoClipImporter ",438],["100000 int ",438],["100001 bool ",438],["100002 float ",438],["100003 MonoObject ",438],["100004 Collision ",438],["100005 Vector3f ",438],["100006 RootMotionData ",438],["100007 Collision2D ",438],["100008 AudioMixerLiveUpdateFloat ",438],["100009 AudioMixerLiveUpdateBool ",438],["100010 Polygon2D ",438],["100011 void ",438],["19719996 TilemapCollider2D ",438],["41386430 AssetImporterLog ",438],["73398921 VFXRenderer ",438],["76251197 SerializableManagedRefTestClass ",438],["156049354 Grid ",438],["156483287 ScenesUsingAssets ",438],["171741748 ArticulationBody ",438],["181963792 Preset ",438],["277625683 EmptyObject ",438],["285090594 IConstraint ",438],["293259124 TestObjectWithSpecialLayoutOne ",438],["294290339 AssemblyDefinitionReferenceImporter ",438],["334799969 SiblingDerived ",438],["342846651 TestObjectWithSerializedMapStringNonAlignedStruct ",438],["367388927 SubDerived ",438],["369655926 AssetImportInProgressProxy ",438],["382020655 PluginBuildInfo ",438],["426301858 EditorProjectAccess ",438],["468431735 PrefabImporter ",438],["478637458 TestObjectWithSerializedArray ",438],["478637459 TestObjectWithSerializedAnimationCurve ",438],["483693784 TilemapRenderer ",438],["488575907 ScriptableCamera ",438],["612988286 SpriteAtlasAsset ",438],["638013454 SpriteAtlasDatabase ",438],["641289076 AudioBuildInfo ",438],["644342135 CachedSpriteAtlasRuntimeData ",438],["646504946 RendererFake ",438],["662584278 AssemblyDefinitionReferenceAsset ",438],["668709126 BuiltAssetBundleInfoSet ",438],["687078895 SpriteAtlas ",438],["747330370 RayTracingShaderImporter ",438],["825902497 RayTracingShader ",438],["850595691 LightingSettings ",438],["877146078 PlatformModuleSetup ",438],["890905787 VersionControlSettings ",438],["895512359 AimConstraint ",438],["937362698 VFXManager ",438],["994735392 VisualEffectSubgraph ",438],["994735403 VisualEffectSubgraphOperator ",438],["994735404 VisualEffectSubgraphBlock ",438],["1001480554 Prefab ",438],["1027052791 LocalizationImporter ",438],["1091556383 Derived ",438],["1111377672 PropertyModificationsTargetTestObject ",438],["1114811875 ReferencesArtifactGenerator ",438],["1152215463 AssemblyDefinitionAsset ",438],["1154873562 SceneVisibilityState ",438],["1183024399 LookAtConstraint ",438],["1210832254 SpriteAtlasImporter ",438],["1223240404 MultiArtifactTestImporter ",438],["1268269756 GameObjectRecorder ",438],["1325145578 LightingDataAssetParent ",438],["1386491679 PresetManager ",438],["1392443030 TestObjectWithSpecialLayoutTwo ",438],["1403656975 StreamingManager ",438],["1480428607 LowerResBlitTexture ",438],["1542919678 StreamingController ",438],["1628831178 TestObjectVectorPairStringBool ",438],["1742807556 GridLayout ",438],["1766753193 AssemblyDefinitionImporter ",438],["1773428102 ParentConstraint ",438],["1803986026 FakeComponent ",438],["1818360608 PositionConstraint ",438],["1818360609 RotationConstraint ",438],["1818360610 ScaleConstraint ",438],["1839735485 Tilemap ",438],["1896753125 PackageManifest ",438],["1896753126 PackageManifestImporter ",438],["1953259897 TerrainLayer ",438],["1971053207 SpriteShapeRenderer ",438],["1977754360 NativeObjectType ",438],["1981279845 TestObjectWithSerializedMapStringBool ",438],["1995898324 SerializableManagedHost ",438],["2058629509 VisualEffectAsset ",438],["2058629510 VisualEffectImporter ",438],["2058629511 VisualEffectResource ",438],["2059678085 VisualEffectObject ",438],["2083052967 VisualEffect ",438],["2083778819 LocalizationAsset ",438],["2089858483 ScriptedImporter ",438],["Classes Ordered Alphabetically",438],["ID Class ",438],["AimConstraint 895512359 ",438],["AnchoredJoint2D 229 ",438],["Animation 111 ",438],["AnimationClip 74 ",438],["Animator 95 ",438],["AnimatorController 91 ",438],["AnimatorOverrideController 221 ",438],["AnimatorState 1102 ",438],["AnimatorStateMachine 1107 ",438],["AnimatorStateTransition 1101 ",438],["AnimatorTransition 1109 ",438],["AnimatorTransitionBase 1111 ",438],["AnnotationManager 1049 ",438],["AreaEffector2D 249 ",438],["ArticulationBody 171741748 ",438],["AssemblyDefinitionAsset 1152215463 ",438],["AssemblyDefinitionImporter 1766753193 ",438],["AssemblyDefinitionReferenceAsset 662584278 ",438],["AssemblyDefinitionReferenceImporter 294290339 ",438],["AssetBundle 142 ",438],["AssetBundleManifest 290 ",438],["AssetDatabaseV1 1004 ",438],["AssetImporter 1003 ",438],["AssetImporterLog 41386430 ",438],["AssetImportInProgressProxy 369655926 ",438],["AssetMetaData 1028 ",438],["AudioBehaviour 180 ",438],["AudioBuildInfo 641289076 ",438],["AudioChorusFilter 166 ",438],["AudioClip 83 ",438],["AudioDistortionFilter 170 ",438],["AudioEchoFilter 168 ",438],["AudioFilter 181 ",438],["AudioHighPassFilter 165 ",438],["AudioImporter 1020 ",438],["AudioListener 81 ",438],["AudioLowPassFilter 169 ",438],["AudioManager 11 ",438],["AudioMixer 240 ",438],["AudioMixerController 241 ",438],["AudioMixerEffectController 244 ",438],["AudioMixerGroup 273 ",438],["AudioMixerGroupController 243 ",438],["AudioMixerLiveUpdateBool 100009 ",438],["AudioMixerLiveUpdateFloat 100008 ",438],["AudioMixerSnapshot 272 ",438],["AudioMixerSnapshotController 245 ",438],["AudioReverbFilter 164 ",438],["AudioReverbZone 167 ",438],["AudioSource 82 ",438],["Avatar 90 ",438],["AvatarMask 319 ",438],["BaseAnimationTrack 110 ",438],["BaseVideoTexture 237 ",438],["Behaviour 8 ",438],["BillboardAsset 226 ",438],["BillboardRenderer 227 ",438],["BlendTree 206 ",438],["bool 100001 ",438],["BoxCollider 65 ",438],["BoxCollider2D 61 ",438],["BuildReport 1125 ",438],["BuildSettings 141 ",438],["BuiltAssetBundleInfoSet 668709126 ",438],["BuoyancyEffector2D 253 ",438],["CachedSpriteAtlas 214 ",438],["CachedSpriteAtlasRuntimeData 644342135 ",438],["Camera 20 ",438],["Canvas 223 ",438],["CanvasGroup 225 ",438],["CanvasRenderer 222 ",438],["CapsuleCollider 136 ",438],["CapsuleCollider2D 70 ",438],["CGProgram 109 ",438],["CharacterController 143 ",438],["CharacterJoint 144 ",438],["CircleCollider2D 58 ",438],["Cloth 183 ",438],["ClusterInputManager 236 ",438],["Collider 56 ",438],["Collider2D 53 ",438],["Collision 100004 ",438],["Collision2D 100007 ",438],["Component 2 ",438],["CompositeCollider2D 66 ",438],["ComputeShader 72 ",438],["ComputeShaderImporter 1008 ",438],["ConfigurableJoint 153 ",438],["ConstantForce 75 ",438],["ConstantForce2D 247 ",438],["Cubemap 89 ",438],["CubemapArray 188 ",438],["CustomRenderTexture 86 ",438],["DefaultAsset 1029 ",438],["DefaultImporter 1030 ",438],["DelayedCallManager 98 ",438],["Derived 1091556383 ",438],["DistanceJoint2D 232 ",438],["EdgeCollider2D 68 ",438],["EditorBuildSettings 1045 ",438],["EditorExtension 18 ",438],["EditorExtensionImpl 1002 ",438],["EditorProjectAccess 426301858 ",438],["EditorSettings 159 ",438],["EditorUserBuildSettings 1051 ",438],["EditorUserSettings 162 ",438],["Effector2D 248 ",438],["EmptyObject 277625683 ",438],["FakeComponent 1803986026 ",438],["FBXImporter 1041 ",438],["FixedJoint 138 ",438],["FixedJoint2D 255 ",438],["Flare 121 ",438],["FlareLayer 124 ",438],["float 100002 ",438],["Font 128 ",438],["FrictionJoint2D 256 ",438],["GameManager 9 ",438],["GameObject 1 ",438],["GameObjectRecorder 1268269756 ",438],["GlobalGameManager 6 ",438],["GraphicsSettings 30 ",438],["Grid 156049354 ",438],["GridLayout 1742807556 ",438],["Halo 122 ",438],["HaloLayer 125 ",438],["HierarchyState 1026 ",438],["HingeJoint 59 ",438],["HingeJoint2D 233 ",438],["HumanTemplate 1105 ",438],["IConstraint 285090594 ",438],["IHVImageFormatImporter 1055 ",438],["InputManager 13 ",438],["InspectorExpandedState 1048 ",438],["int 100000 ",438],["Joint 57 ",438],["Joint2D 230 ",438],["LensFlare 123 ",438],["LevelGameManager 3 ",438],["LibraryAssetImporter 1038 ",438],["Light 108 ",438],["LightingDataAsset 1120 ",438],["LightingDataAssetParent 1325145578 ",438],["LightingSettings 850595691 ",438],["LightmapParameters 1113 ",438],["LightmapSettings 157 ",438],["LightProbeGroup 220 ",438],["LightProbeProxyVolume 259 ",438],["LightProbes 258 ",438],["LineRenderer 120 ",438],["LocalizationAsset 2083778819 ",438],["LocalizationImporter 1027052791 ",438],["LODGroup 205 ",438],["LookAtConstraint 1183024399 ",438],["LowerResBlitTexture 1480428607 ",438],["Material 21 ",438],["Mesh 43 ",438],["Mesh3DSImporter 1005 ",438],["MeshCollider 64 ",438],["MeshFilter 33 ",438],["MeshRenderer 23 ",438],["ModelImporter 1040 ",438],["MonoBehaviour 114 ",438],["MonoImporter 1035 ",438],["MonoManager 116 ",438],["MonoObject 100003 ",438],["MonoScript 115 ",438],["Motion 207 ",438],["MultiArtifactTestImporter 1223240404 ",438],["NamedObject 130 ",438],["NativeFormatImporter 1034 ",438],["NativeObjectType 1977754360 ",438],["NavMeshAgent 195 ",438],["NavMeshData 238 ",438],["NavMeshObstacle 208 ",438],["NavMeshProjectSettings 126 ",438],["NavMeshSettings 196 ",438],["NewAnimationTrack 118 ",438],["Object 0 ",438],["OcclusionArea 192 ",438],["OcclusionCullingData 363 ",438],["OcclusionCullingSettings 29 ",438],["OcclusionPortal 41 ",438],["OffMeshLink 191 ",438],["PackageManifest 1896753125 ",438],["PackageManifestImporter 1896753126 ",438],["PackedAssets 1126 ",438],["ParentConstraint 1773428102 ",438],["ParticleSystem 198 ",438],["ParticleSystemForceField 330 ",438],["ParticleSystemRenderer 199 ",438],["PhysicMaterial 134 ",438],["Physics2DSettings 19 ",438],["PhysicsManager 55 ",438],["PhysicsMaterial2D 62 ",438],["PhysicsUpdateBehaviour2D 246 ",438],["PlatformEffector2D 251 ",438],["PlatformModuleSetup 877146078 ",438],["PlayableDirector 320 ",438],["PlayerSettings 129 ",438],["PluginBuildInfo 382020655 ",438],["PluginImporter 1050 ",438],["PointEffector2D 250 ",438],["Polygon2D 100010 ",438],["PolygonCollider2D 60 ",438],["PositionConstraint 1818360608 ",438],["Prefab 1001480554 ",438],["PrefabImporter 468431735 ",438],["PrefabInstance 1001 ",438],["PreloadData 150 ",438],["Preset 181963792 ",438],["PresetManager 1386491679 ",438],["PreviewAnimationClip 1108 ",438],["ProceduralMaterial 185 ",438],["ProceduralTexture 186 ",438],["Projector 119 ",438],["PropertyModificationsTargetTestObject 1111377672 ",438],["QualitySettings 47 ",438],["RayTracingShader 825902497 ",438],["RayTracingShaderImporter 747330370 ",438],["RectTransform 224 ",438],["ReferencesArtifactGenerator 1114811875 ",438],["ReflectionProbe 215 ",438],["RelativeJoint2D 254 ",438],["Renderer 25 ",438],["RendererFake 646504946 ",438],["RenderSettings 104 ",438],["RenderTexture 84 ",438],["ResourceManager 147 ",438],["Rigidbody 54 ",438],["Rigidbody2D 50 ",438],["RootMotionData 100006 ",438],["RotationConstraint 1818360609 ",438],["RuntimeAnimatorController 93 ",438],["RuntimeInitializeOnLoadManager 300 ",438],["SampleClip 271 ",438],["ScaleConstraint 1818360610 ",438],["SceneAsset 1032 ",438],["ScenesUsingAssets 156483287 ",438],["SceneVisibilityState 1154873562 ",438],["ScriptableCamera 488575907 ",438],["ScriptedImporter 2089858483 ",438],["ScriptMapper 94 ",438],["SerializableManagedHost 1995898324 ",438],["SerializableManagedRefTestClass 76251197 ",438],["Shader 48 ",438],["ShaderImporter 1007 ",438],["ShaderVariantCollection 200 ",438],["SiblingDerived 334799969 ",438],["SketchUpImporter 1124 ",438],["SkinnedMeshRenderer 137 ",438],["Skybox 45 ",438],["SliderJoint2D 234 ",438],["SortingGroup 210 ",438],["SparseTexture 171 ",438],["SpeedTreeImporter 1110 ",438],["SpeedTreeWindAsset 228 ",438],["SphereCollider 135 ",438],["SpringJoint 145 ",438],["SpringJoint2D 231 ",438],["Sprite 213 ",438],["SpriteAtlas 687078895 ",438],["SpriteAtlasAsset 612988286 ",438],["SpriteAtlasDatabase 638013454 ",438],["SpriteAtlasImporter 1210832254 ",438],["SpriteMask 331 ",438],["SpriteRenderer 212 ",438],["SpriteShapeRenderer 1971053207 ",438],["StreamingController 1542919678 ",438],["StreamingManager 1403656975 ",438],["SubDerived 367388927 ",438],["SubstanceArchive 184 ",438],["SubstanceImporter 1112 ",438],["SurfaceEffector2D 252 ",438],["TagManager 78 ",438],["TargetJoint2D 257 ",438],["Terrain 218 ",438],["TerrainCollider 154 ",438],["TerrainData 156 ",438],["TerrainLayer 1953259897 ",438],["TestObjectVectorPairStringBool 1628831178 ",438],["TestObjectWithSerializedAnimationCurve 478637459 ",438],["TestObjectWithSerializedArray 478637458 ",438],["TestObjectWithSerializedMapStringBool 1981279845 ",438],["TestObjectWithSerializedMapStringNonAlignedStruct 342846651 ",438],["TestObjectWithSpecialLayoutOne 293259124 ",438],["TestObjectWithSpecialLayoutTwo 1392443030 ",438],["TextAsset 49 ",438],["TextMesh 102 ",438],["TextScriptImporter 1031 ",438],["Texture 27 ",438],["Texture2D 28 ",438],["Texture2DArray 187 ",438],["Texture3D 117 ",438],["TextureImporter 1006 ",438],["Tilemap 1839735485 ",438],["TilemapCollider2D 19719996 ",438],["TilemapRenderer 483693784 ",438],["TimeManager 5 ",438],["TrailRenderer 96 ",438],["Transform 4 ",438],["Tree 193 ",438],["TrueTypeFontImporter 1042 ",438],["UnityConnectSettings 310 ",438],["Vector3f 100005 ",438],["VersionControlSettings 890905787 ",438],["VFXManager 937362698 ",438],["VFXRenderer 73398921 ",438],["VideoClip 329 ",438],["VideoClipImporter 1127 ",438],["VideoPlayer 328 ",438],["VisualEffect 2083052967 ",438],["VisualEffectAsset 2058629509 ",438],["VisualEffectImporter 2058629510 ",438],["VisualEffectObject 2059678085 ",438],["VisualEffectResource 2058629511 ",438],["VisualEffectSubgraph 994735392 ",438],["VisualEffectSubgraphBlock 994735404 ",438],["VisualEffectSubgraphOperator 994735403 ",438],["void 100011 ",438],["WebCamTexture 158 ",438],["WheelCollider 146 ",438],["WheelJoint2D 235 ",438],["WindZone 182 ",438],["WorldAnchor 362 ",438],["Unused IDs:",438],["7, 10, 12, 14-17, 22, 24, 26, 31-32, 34-40, 42, 44, 46, 51-52, 63, 67, 69, 71, 73, 76-77, 79-80, 85, 87-88, 92, 97, 99-101, 103, 105-107, 112-113, 127, 131-133, 139-140, 148-149, 151, 155, 160-161, 163, 172-179, 189-190, 194, 197, 201-204, 209, 211, 216-217, 219, 239, 242, 260-270, 274-289, 291-299, 301-309, 311-318, 321-327, 332-361, 364-1000, 1009-1019, 1021-1025, 1027, 1033, 1036-1037, 1039, 1043-1044, 1046-1047, 1052-1054, 1056-1100, 1103-1104, 1106, 1114-1119, 1121-1123, 1128-99999, 100012-19719995, 19719997-41386429, 41386431-73398920, 73398922-76251196, 76251198-156049353, 156049355-156483286, 156483288-171741747, 171741749-181963791, 181963793-277625682, 277625684-285090593, 285090595-293259123, 293259125-294290338, 294290340-334799968, 334799970-342846650, 342846652-367388926, 367388928-369655925, 369655927-382020654, 382020656-426301857, 426301859-468431734, 468431736-478637457, 478637460-483693783, 483693785-488575906, 488575908-612988285, 612988287-638013453, 638013455-641289075, 641289077-644342134, 644342136-646504945, 646504947-662584277, 662584279-668709125, 668709127-687078894, 687078896-747330369, 747330371-825902496, 825902498-850595690, 850595692-877146077, 877146079-890905786, 890905788-895512358, 895512360-937362697, 937362699-994735391, 994735393-994735402, 994735405-1001480553, 1001480555-1027052790, 1027052792-1091556382, 1091556384-1111377671, 1111377673-1114811874, 1114811876-1152215462, 1152215464-1154873561, 1154873563-1183024398, 1183024400-1210832253, 1210832255-1223240403, 1223240405-1268269755, 1268269757-1325145577, 1325145579-1386491678, 1386491680-1392443029, 1392443031-1403656974, 1403656976-1480428606, 1480428608-1542919677, 1542919679-1628831177, 1628831179-1742807555, 1742807557-1766753192, 1766753194-1773428101, 1773428103-1803986025, 1803986027-1818360607, 1818360611-1839735484, 1839735486-1896753124, 1896753127-1953259896, 1953259898-1971053206, 1971053208-1977754359, 1977754361-1981279844, 1981279846-1995898323, 1995898325-2058629508, 2058629512-2059678084, 2059678086-2083052966, 2083052968-2083778818, 2083778820-2089858482, 2089858484-2147483647",438],["Batch mode and built-in coroutine compatibility",439],["This page describes the supported features when running the Unity Editor and Standalone Player in batch mode.",439],["When running Unity, the following built-in coroutine operators add functionality:",439],["The following table shows which of these operators Unity supports inside the Editor and Standalone Player, and when running each of them in batch mode using the -batchmode command line argument:",439],[" Editor Editor -batchmode Unity Standalone Player Unity Standalone Player -batchmode \n",439],["AsyncOperation Yes Yes Yes Yes ",439],["WaitForEndOfFrame Yes No* Yes Yes ",439],["WaitForFixedUpdate Yes Yes Yes Yes ",439],["WaitForSeconds Yes Yes Yes Yes ",439],["WaitForSecondsRealtime Yes Yes Yes Yes ",439],["WaitUntil Yes Yes Yes Yes ",439],["WaitWhile Yes Yes Yes Yes ",439],["* You cannot use WaitForEndOfFrame when running the Editor with -batchmode, because systems like animation, physics and timeline might not work correctly in the Editor. This is because Unity does not currently update these systems when using WaitForEndOfFrame.",439],["Running coroutines",439],["Inside the Editor",439],["In the Editor, press the \"Play\" button to run your code with coroutines.",439],["Editor in batch mode",439],["To run coroutines when launching the Editor in batch mode from the command line, enter:",439],["C:\\Program Files\\Unity\\Editor\\Unity.exe -projectPath PROJECT_PATH -batchMode",439],["Inside the Standalone Player",439],["Launch your Standalone Player to run your code. The Player loads and then waits for your coroutines to complete.",439],["Standalone Player in batch mode",439],["To run coroutines when launching the Player in batch mode from the command line, enter:",439],["PATH_TO_STANDALONE_BUILD -projectPath PROJECT_PATH -batchMode",439],["For example, on Windows:",439],["C:\\projects\\myproject\\builds\\myproject.exe _-batchMode _",439],["On Mac:",439],["~/UnityProjects/myproject/builds/myproject -batchMode",439],["Example coroutine scripts",439],["AsyncOperation",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_AsyncTests());",439],["public IEnumerator Example_AsyncTests()",439],["Debug.Log(\"Start of AsyncLoad Example\");",439],["var load = UnityEngine.Resources.LoadAsync(\"\");",439],["yield return load;",439],["yield return null;",439],["Debug.Log(\"End of AsyncLoad Example\");",439],["WaitForEndOfFrame",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_WaitForEndOfFrame_Coroutine());",439],["public IEnumerator Example_WaitForEndOfFrame_Coroutine()",439],["Debug.Log(\"Start of WaitForEndOfFrame Example\");",439],["yield return new WaitForEndOfFrame();",439],["Debug.Log(\"End of WaitForEndOfFrame Example\");",439],["WaitForFixedUpdate",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_WaitForFixedUpdate_Coroutine());",439],["public IEnumerator Example_WaitForFixedUpdate_Coroutine()",439],["Debug.Log(\"Start of WaitForFixedUpdate Example\");",439],["yield return new WaitForFixedUpdate();",439],["Debug.Log(\"End of WaitForFixedUpdate Example\");",439],["WaitForSeconds",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_WaitForSeconds_Coroutine());",439],["public IEnumerator Example_WaitForSeconds_Coroutine()",439],["Debug.Log(\"Start of WaitForSeconds Example\");",439],["yield return new WaitForSeconds(1.5f);",439],["Debug.Log(\"End of WaitForSeconds Example\");",439],["WaitForSecondsRealtime",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_WaitForSecondsRealtime_Coroutine());",439],["public IEnumerator Example_WaitForSecondsRealtime_Coroutine()",439],["Debug.Log(\"Start of WaitForSecondsRealtime Example\");",439],["yield return new WaitForSecondsRealtime(1.5f);",439],["Debug.Log(\"End of WaitForSecondsRealtime Example\");",439],["WaitUntil",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_WaitUntil_Coroutine());",439],["public IEnumerator Example_WaitUntil_Coroutine()",439],["Debug.Log(\"Start of WaitUntil Example\");",439],["yield return new WaitUntil(() => Time.time > 5.0f);",439],["Debug.Log(\"End of WaitUntil Example\");",439],["WaitWhile",439],["using System.Collections;",439],["using UnityEngine;",439],["[ExecuteInEditMode]",439],["public class ExampleClass : MonoBehaviour",439],["public void Start()",439],["StartCoroutine(Example_WaitWhile_Coroutine());",439],["public IEnumerator Example_WaitWhile_Coroutine()",439],["Debug.Log(\"Start of WaitWhile Example\");",439],["yield return new WaitWhile(() => Time.time < 5.0f);",439],["Debug.Log(\"End of WaitWhile Example\");",439],["2018-06-06 ",439],["Added advice on using batchmode and coroutines in 2017.4",439],["Code reloading in the Unity Editor",440],["This section contains information on how Unity reloads code in the Editor.",440],["Page Description ",440],["",440],["Configurable Enter Play Mode Information on Configurable Enter Play Mode, which you can use to enter Play Mode quickly. ",440],["Running Editor code on launch Information about how to run Editor script code as soon as Unity launches. ",440],["Collider 2D",441],["Collider 2D components define the shape of a 2D GameObject for the purposes of physical collisions. A collider, which is invisible, doesn't need to be the exact same shape as the GameObject's mesh; a rough approximation is often more efficient, with no noticeable difference in gameplay.",441],["Colliders for 2D GameObjects all have names ending with 2D. A collider that doesn't have 2D in its name can only be used on a 3D GameObject. You can’t use 3D GameObjects with 2D colliders, or 2D GameObjects with 3D colliders.",441],["Note:** On the Rigidbody 2D component, select the Use Auto Mass checkbox to automatically set the Rigidbody 2D's mass to the same value as the Collider 2D's mass. You can use this in conjunction with the Buoyancy Effector 2D.",441],["You can use the following Collider 2D types with Rigidbody 2D:",441],["Topic Description ",441],[":----------------------------------------------------- :------------------------------------------------------------ ",441],["Circle Collider 2D Use Circle Collider 2D for circular collision areas. ",441],["Box Collider 2D Use Box Collider 2D for square and rectangle collision areas. ",441],["Polygon Collider 2D Use Polygon Collider 2D for freeform collision areas. ",441],["Edge Collider 2D Use Edge Collider 2D freeform collision areas and areas which aren't fully enclosed (such as rounded convex corners). ",441],["Capsule Collider 2D Use Capsule Collider 2D for circular or lozenge-shaped collision areas. ",441],["Composite Collider 2D Use Composite Collider 2D for merging Box Collider 2Ds and Polygon Collider 2Ds. ",441],["Custom Collider 2D Use Custom Collider 2D for collision areas with customizable geometry. ",441],["Additional resources",441],["Introduction to collision",442],["Unity handles collision between GameObjects with colliders, which attach to GameObjects and define the shape of a GameObject for the purposes of physical collisions. A collider is invisible, and does not need to be the exact same shape as the GameObject's mesh. A rough approximation of the mesh is often more efficient and indistinguishable in gameplay.",442],["The simplest (and least processor-intensive) colliders are primitive collider types. In 3D, these are the Box Collider, Sphere Collider and Capsule Collider. In 2D, you can use the Box Collider 2D and Circle Collider 2D. You can add any number of these to a single GameObject to create compound colliders.",442],["",442],["Compound colliders",442],["Compound colliders approximate the shape of a GameObject while keeping a low processor overhead. To get further flexibility, you can add additional colliders on child GameObjects. For instance, you can rotate boxes relative to the local axes of the parent GameObject. When you create a compound collider like this, you should only use one Rigidbody component, placed on the root GameObject in the hierarchy.",442],["Primitive colliders do not work correctly with shear transforms. If you use a combination of rotations and non-uniform scales in the Transform hierarchy so that the resulting shape is no longer a primitive shape, the primitive collider cannot represent it correctly.",442],["Mesh colliders",442],["There are some cases, however, where even compound colliders are not accurate enough. In 3D, you can use Mesh Colliders to match the shape of the GameObject's mesh exactly. In 2D, the Polygon Collider 2D does not match the shape of the sprite graphic perfectly but you can refine the shape to any level of detail you like.",442],["These colliders are much more processor-intensive than primitive types, so use them sparingly to maintain good performance. Also, a mesh collider cannot collide with another mesh collider (i.e., nothing happens when they make contact). You can get around this in some cases by marking the mesh collider as Convex in the Inspector. This generates the collider shape as a \"convex hull\" which is like the original mesh but with any undercuts filled in.",442],["The benefit of this is that a convex mesh collider can collide with other mesh colliders so you can use this feature when you have a moving character with a suitable shape. However, a good rule is to use mesh colliders for scene geometry and approximate the shape of moving GameObjects using compound primitive colliders.",442],["Static colliders",442],["You can add colliders to a GameObject without a Rigidbody component to create floors, walls and other motionless elements of a Scene. These are referred to as static colliders. At the opposite, colliders on a GameObject that has a Rigidbody are known as dynamic colliders. Static colliders can interact with dynamic colliders but since they don't have a Rigidbody, they don't move in response to collisions.",442],["Physics materials",442],["When colliders interact, their surfaces need to simulate the properties of the material they are supposed to represent. For example, a sheet of ice will be slippery while a rubber ball will offer a lot of friction and be very bouncy. Although the shape of colliders is not deformed during collisions, their friction and bounce can be configured using Physics Materials. Getting the parameters just right can involve a bit of trial and error. A slippery material like ice, for example, has zero (or very low) friction. A grippy material like rubber has high friction and near-perfect bounciness. See the reference pages for Physic Material and Physics Material 2D for further details on the available parameters. Note that for historical reasons, the 3D asset is actually called Physic Material (without the S) but the 2D equivalent is called Physics Material 2D (with the S).",442],["",442],["Triggers",442],["The scripting system can detect when collisions occur and initiate actions using the OnCollisionEnter function. However, you can also use the physics engine simply to detect when one collider enters the space of another without creating a collision. A collider configured as a Trigger (using the Is Trigger property) does not behave as a solid object and will simply allow other colliders to pass through. When a collider enters its space, a trigger will call the OnTriggerEnter function on the trigger object's scripts.",442],["",442],["Collision callbacks for scripts",442],["When collisions occur, the physics engine calls functions with specific names on any scripts attached to the objects involved. You can place any code you like in these functions to respond to the collision event. For example, you might play a crash sound effect when a car bumps into an obstacle.",442],["On the first physics update where the collision is detected, the OnCollisionEnter function is called. During updates where contact is maintained, OnCollisionStay is called and finally, OnCollisionExit indicates that contact has been broken. Trigger colliders call the analogous OnTriggerEnter, OnTriggerStay and OnTriggerExit functions. Note that for 2D physics, there are equivalent functions with 2D appended to the name, eg, OnCollisionEnter2D. Full details of these functions and code samples can be found on the Script Reference page for the MonoBehaviour class.",442],["With normal, non-trigger collisions, there is an additional detail that at least one of the objects involved must have a non-kinematic Rigidbody (ie, Is Kinematic must be switched off). If both objects are kinematic Rigidbodies then OnCollisionEnter, etc, will not be called. With trigger collisions, this restriction doesn't apply and so both kinematic and non-kinematic Rigidbodies will prompt a call to OnTriggerEnter when they enter a trigger collider.",442],["Collider interactions",442],["Colliders interact with each other differently depending on how their Rigidbody components are configured. The three important configurations are the Static Collider (ie, no Rigidbody is attached at all), the Rigidbody Collider and the Kinematic Rigidbody Collider.",442],["Static Collider",442],["A static collider is a GameObject that has a Collider but no Rigidbody. Static colliders are mostly used for level geometry which always stays at the same place and never moves around. Incoming Rigidbody objects collide with static colliders but don't move them.",442],["In particular cases, the physics engine optimizes for static colliders that never move. For instance, a vehicle resting on top of a static collider remains asleep even if you move this static collider. You can enable, disable, or move static colliders in runtime without specially affecting the physics engine computation speed. Also, you can safely scale a static Mesh Collider as long as the scale is uniform (not skewed).",442],["Rigidbody Collider",442],["This is a GameObject with a Collider and a normal, non-kinematic Rigidbody attached. Rigidbody colliders are fully simulated by the physics engine and can react to collisions and forces applied from a script. They can collide with other objects (including static colliders) and are the most commonly used Collider configuration in games that use physics.",442],["Kinematic Rigidbody Collider",442],["This is a GameObject with a Collider and a kinematic Rigidbody attached (ie, the IsKinematic property of the Rigidbody is enabled). You can move a kinematic rigidbody object from a script by modifying its Transform Component but it will not respond to collisions and forces like a non-kinematic rigidbody. Kinematic rigidbodies should be used for colliders that can be moved or disabled/enabled occasionally but that should otherwise behave like static colliders. An example of this is a sliding door that should normally act as an immovable physical obstacle but can be opened when necessary. Unlike a static collider, a moving kinematic rigidbody will apply friction to other objects and will \"wake up\" other rigidbodies when they make contact.",442],["Even when immobile, kinematic rigidbody colliders have different behavior to static colliders. For example, if the collider is set to as a trigger then you also need to add a rigidbody to it in order to receive trigger events in your script. If you don't want the trigger to fall under gravity or otherwise be affected by physics then you can set the IsKinematic property on its rigidbody.",442],["A Rigidbody component can be switched between normal and kinematic behavior at any time using the IsKinematic property.",442],["A common example of this is the \"ragdoll\" effect where a character normally moves under animation but is thrown physically by an explosion or a heavy collision. The character's limbs can each be given their own Rigidbody component with IsKinematic enabled by default. The limbs move normally by animation until IsKinematic is switched off for all of them and they immediately behave as physics objects. At this point, a collision or explosion force will send the character flying with its limbs thrown in a convincing way.",442],["Collision action matrix",442],["When two objects collide, a number of different script events can occur depending on the configurations of the colliding objects' rigidbodies. The charts below give details of which event functions are called based on the components that are attached to the objects. Some of the combinations only cause one of the two objects to be affected by the collision, but the general rule is that physics will not be applied to an object that doesn't have a Rigidbody component attached.",442],["Collision detection occurs and messages are sent upon collision ",442],["Static Collider Rigidbody Collider Kinematic Rigidbody Collider Static Trigger Collider Rigidbody Trigger Collider Kinematic Rigidbody Trigger Collider ",442],["Static Collider   Y         ",442],["Rigidbody Collider Y Y Y       ",442],["Kinematic Rigidbody Collider   Y         ",442],["Static Trigger Collider             ",442],["Rigidbody Trigger Collider             ",442],["Kinematic Rigidbody Trigger Collider             ",442],["Trigger messages are sent upon collision ",442],["Static Collider Rigidbody Collider Kinematic Rigidbody Collider Static Trigger Collider Rigidbody Trigger Collider Kinematic Rigidbody Trigger Collider ",442],["Static Collider         Y Y ",442],["Rigidbody Collider       Y Y Y ",442],["Kinematic Rigidbody Collider       Y Y Y ",442],["Static Trigger Collider   Y Y   Y Y ",442],["Rigidbody Trigger Collider Y Y Y Y Y Y ",442],["Kinematic Rigidbody Trigger Collider Y Y Y Y Y Y ",442],["Collision",443],["To configure collision between GameObjects in Unity, you need to use Colliders. Colliders define the shape of a GameObject for the purposes of physical collisions. You can then use these Colliders to manage collision events.",443],["You can configure collisions via Collider components, or their corresponding C# class.",443],["Topic Description ",443],[":-------------------- :----------------------- ",443],["Introduction to Collision How collision works in Unity. ",443],["Continuous collision detection How to detect and handle collisions between fast-moving objects in Unity. ",443],["Physics Debug Visualization How to inspect the Collider geometry across your Scene, and profile common physics-based scenarios. ",443],["Configure wheel colliders for a vehicle A walkthrough tutorial for configuring wheel colliders on a four-wheel vehicle. ",443],["Box collider component reference Reference for the Box Collider component. ",443],["Capsule collider component reference Reference for the Capsule Collider component. ",443],["Terrain collider component reference Reference for the Terrain Collider component. ",443],["Wheel collider component reference Reference for the Wheel Collider component. ",443],["Mesh collider component reference Reference for the Mesh Collider component. ",443],["Sphere collider component reference Reference for the Sphere Collider component. ",443],["Physic Material component reference Reference for the Physic Material component. ",443],["Havok Physics for Unity",444],["",444],["Description",444],["Havok Physics for Unity is available to Pro, Enterprise, and Unity Industrial Collection users.Havok's award winning physics engine, applied to Unity’s Entity Component System (ECS) framework. Havok Physics for Unity augments the Unity Physics package, allowing physics scenes authored for ECS to be simulated using the Havok Physics engine.",444],["Version information",444],["Released for Unity",444],["Package version 1.0.16 is released for Unity Editor version 2022.3.",444],["Compatible with Unity",444],["These package versions are available in Unity version 2022.3:",444],["Documentation location: State Versions available: ",444],[":--- :--- :--- ",444],["[com.havok.physics@1.2][] compatible 1.2.0-exp.3, 1.2.0-pre.4 ",444],["[com.havok.physics@1.1][] compatible 1.1.0-exp.1, 1.1.0-pre.3 ",444],["[com.havok.physics@1.0][] released 1.0.0-pre.15, 1.0.0-pre.44, 1.0.0-pre.65, 1.0.8, 1.0.10, 1.0.11, 1.0.14, 1.0.16 ",444],["[com.havok.physics@0.51][] compatible 0.51.0-preview.32, 0.51.1-preview.21 ",444],["[com.havok.physics@0.50][] compatible 0.50.0-preview.24, 0.50.0-preview.37 ",444],["[com.havok.physics@0.6][] compatible 0.6.0-preview.3 ",444],["[com.havok.physics@0.4][] compatible 0.4.0-preview.1, 0.4.1-preview.2 ",444],["[com.havok.physics@0.3][] compatible 0.3.0-preview.1, 0.3.1-preview ",444],["[com.havok.physics@0.2][] compatible 0.2.0-preview, 0.2.1-preview, 0.2.2-preview ",444],["[com.havok.physics@0.1][] compatible 0.1.1-preview, 0.1.2-preview ",444],["Keywords",444],["[com.havok.physics]: https://docs.unity3d.com/Packages/com.havok.physics@1.0/manual/index.html target=\"_blank\"",444],["[com.havok.physics@1.2]: https://docs.unity3d.com/Packages/com.havok.physics@1.2/manual/index.html target=\"_blank\"",444],["[com.havok.physics@1.1]: https://docs.unity3d.com/Packages/com.havok.physics@1.1/manual/index.html target=\"_blank\"",444],["[com.havok.physics@1.0]: https://docs.unity3d.com/Packages/com.havok.physics@1.0/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.51]: https://docs.unity3d.com/Packages/com.havok.physics@0.51/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.50]: https://docs.unity3d.com/Packages/com.havok.physics@0.50/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.6]: https://docs.unity3d.com/Packages/com.havok.physics@0.6/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.4]: https://docs.unity3d.com/Packages/com.havok.physics@0.4/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.3]: https://docs.unity3d.com/Packages/com.havok.physics@0.3/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.2]: https://docs.unity3d.com/Packages/com.havok.physics@0.2/manual/index.html target=\"_blank\"",444],["[com.havok.physics@0.1]: https://docs.unity3d.com/Packages/com.havok.physics@0.1/manual/index.html target=\"_blank\"",444],["2D Animation",445],["",445],["Description",445],["2D Animation provides all the necessary tooling and runtime components for skeletal animation using Sprites.",445],["Version information",445],["Released for Unity",445],["Package version 9.0.4 is released for Unity Editor version 2022.3.",445],["Compatible with Unity",445],["These package versions are available in Unity version 2022.3:",445],["Documentation location: State Versions available: ",445],[":--- :--- :--- ",445],["[com.unity.2d.animation@9.0][] released 9.0.4 ",445],["Keywords",445],["[com.unity.2d.animation]: https://docs.unity3d.com/Packages/com.unity.2d.animation@9.0/manual/index.html target=\"_blank\"",445],["[com.unity.2d.animation@9.0]: https://docs.unity3d.com/Packages/com.unity.2d.animation@9.0/manual/index.html target=\"_blank\"",445],["2D Aseprite Importer",446],["",446],["Description",446],["2D Aseprite Importer is a package which enables the import of .aseprite files from the Pixel Art tool Aseprite.",446],["Version information",446],["Released for Unity",446],["Package version 1.0.1 is released for Unity Editor version 2022.3.",446],["Compatible with Unity",446],["These package versions are available in Unity version 2022.3:",446],["Documentation location: State Versions available: ",446],[":--- :--- :--- ",446],["[com.unity.2d.aseprite@1.1][] released 1.1.0 ",446],["[com.unity.2d.aseprite@1.0][] released 1.0.1 ",446],["Keywords",446],["[com.unity.2d.aseprite]: https://docs.unity3d.com/Packages/com.unity.2d.aseprite@1.1/manual/index.html target=\"_blank\"",446],["[com.unity.2d.aseprite@1.1]: https://docs.unity3d.com/Packages/com.unity.2d.aseprite@1.1/manual/index.html target=\"_blank\"",446],["[com.unity.2d.aseprite@1.0]: https://docs.unity3d.com/Packages/com.unity.2d.aseprite@1.0/manual/index.html target=\"_blank\"",446],["2D Pixel Perfect",447],["",447],["Description",447],["The 2D Pixel Perfect package contains the Pixel Perfect Camera component which ensures your pixel art remains crisp and clear at different resolutions, and stable in motion.It is a single component that makes all the calculations needed to scale the viewport with resolution changes, removing the hassle from the user. The user can adjust the definition of the pixel art rendered within the camera viewport through the component settings, as well preview any changes immediately in Game view by using the Run in Edit Mode feature.",447],["Version information",447],["Released for Unity",447],["Package version 5.0.3 is released for Unity Editor version 2022.3.",447],["Compatible with Unity",447],["These package versions are available in Unity version 2022.3:",447],["Documentation location: State Versions available: ",447],[":--- :--- :--- ",447],["[com.unity.2d.pixel-perfect@5.0][] released 5.0.3 ",447],["Keywords",447],["[com.unity.2d.pixel-perfect]: https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@5.0/manual/index.html target=\"_blank\"",447],["[com.unity.2d.pixel-perfect@5.0]: https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@5.0/manual/index.html target=\"_blank\"",447],["2D PSD Importer",448],["",448],["Description",448],["A ScriptedImporter for importing Adobe Photoshop PSB (Photoshop Big) file format. The ScriptedImporter is currently targeted for users who wants to create multi Sprite character animation using Unity 2D Animation Package.",448],["Version information",448],["Released for Unity",448],["Package version 8.0.3 is released for Unity Editor version 2022.3.",448],["Compatible with Unity",448],["These package versions are available in Unity version 2022.3:",448],["Documentation location: State Versions available: ",448],[":--- :--- :--- ",448],["[com.unity.2d.psdimporter@8.0][] released 8.0.3 ",448],["Keywords",448],["[com.unity.2d.psdimporter]: https://docs.unity3d.com/Packages/com.unity.2d.psdimporter@8.0/manual/index.html target=\"_blank\"",448],["[com.unity.2d.psdimporter@8.0]: https://docs.unity3d.com/Packages/com.unity.2d.psdimporter@8.0/manual/index.html target=\"_blank\"",448],["2D Sprite",449],["",449],["[com.unity.2d.sprite][]",449],["Description",449],["Use Unity Sprite Editor Window to create and edit Sprite asset properties like pivot, borders and Physics shape",449],["Version information",449],["Core packages are fixed to a single version matching the Editor version.",449],["[com.unity.2d.sprite]: https://docs.unity3d.com/Packages/com.unity.2d.sprite@1.0/manual/index.html target=\"_blank\"",449],["2D SpriteShape",450],["",450],["Description",450],["SpriteShape Runtime & Editor Package contains the tooling and the runtime component that allows you to create very organic looking spline based 2D worlds. It comes with intuitive configurator and a highly performant renderer.",450],["Version information",450],["Released for Unity",450],["Package version 9.0.2 is released for Unity Editor version 2022.3.",450],["Compatible with Unity",450],["These package versions are available in Unity version 2022.3:",450],["Documentation location: State Versions available: ",450],[":--- :--- :--- ",450],["[com.unity.2d.spriteshape@9.0][] released 9.0.2 ",450],["Keywords",450],["[com.unity.2d.spriteshape]: https://docs.unity3d.com/Packages/com.unity.2d.spriteshape@9.0/manual/index.html target=\"_blank\"",450],["[com.unity.2d.spriteshape@9.0]: https://docs.unity3d.com/Packages/com.unity.2d.spriteshape@9.0/manual/index.html target=\"_blank\"",450],["2D Tilemap Extras",451],["",451],["Description",451],["2D Tilemap Extras is a package that contains extra scripts for use with 2D Tilemap features in Unity. These include custom Tiles and Brushes for the Tilemap feature.The following are included in the package:Brushes: GameObject Brush, Group Brush, Line Brush, Random BrushTiles: Animated Tile, Rule Tile, Rule Override TileOther: Grid Information, Custom Rules for Rule Tile",451],["Version information",451],["Released for Unity",451],["Package version 3.1.2 is released for Unity Editor version 2022.3.",451],["Compatible with Unity",451],["These package versions are available in Unity version 2022.3:",451],["Documentation location: State Versions available: ",451],[":--- :--- :--- ",451],["[com.unity.2d.tilemap.extras@3.1][] released 3.1.2 ",451],["Keywords",451],["[com.unity.2d.tilemap.extras]: https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@3.1/manual/index.html target=\"_blank\"",451],["[com.unity.2d.tilemap.extras@3.1]: https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@3.1/manual/index.html target=\"_blank\"",451],["2D Tilemap Editor",452],["",452],["[com.unity.2d.tilemap][]",452],["Description",452],["2D Tilemap Editor is a package that contains editor functionalities for editing Tilemaps.",452],["Version information",452],["Core packages are fixed to a single version matching the Editor version.",452],["[com.unity.2d.tilemap]: https://docs.unity3d.com/Packages/com.unity.2d.tilemap@1.0/manual/index.html target=\"_blank\"",452],["Adaptive Performance",453],["",453],["Description",453],["The Adaptive Performance package provides an API to get feedback about the thermal and power state of mobile devices, enabling applications to make performance-relevant adaptions at runtime.For instruction on how to use samples, please read the documentation.By installing this package, you agree to the terms and conditions of the Unity End User License Agreement found under "View licenses" above.",453],["Version information",453],["Released for Unity",453],["Package version 4.0.1 is released for Unity Editor version 2022.3.",453],["Compatible with Unity",453],["These package versions are available in Unity version 2022.3:",453],["Documentation location: State Versions available: ",453],[":--- :--- :--- ",453],["[com.unity.adaptiveperformance@5.0][] released 5.0.0-pre.1, 5.0.0-pre.2, 5.0.0-pre.3, 5.0.0-pre.4, 5.0.0, 5.0.1, 5.0.2 ",453],["[com.unity.adaptiveperformance@4.0][] released 4.0.1 ",453],["Keywords",453],["[com.unity.adaptiveperformance]: https://docs.unity3d.com/Packages/com.unity.adaptiveperformance@5.0/manual/index.html target=\"_blank\"",453],["[com.unity.adaptiveperformance@5.0]: https://docs.unity3d.com/Packages/com.unity.adaptiveperformance@5.0/manual/index.html target=\"_blank\"",453],["[com.unity.adaptiveperformance@4.0]: https://docs.unity3d.com/Packages/com.unity.adaptiveperformance@4.0/manual/index.html target=\"_blank\"",453],["Addressables",454],["",454],["Description",454],["The Addressable Asset System allows the developer to ask for an asset via its address. Once an asset (e.g. a prefab) is marked "addressable", it generates an address which can be called from anywhere. Wherever the asset resides (local or remote), the system will locate it and its dependencies, then return it.Use 'Window->Asset Management->Addressables' to begin working with the system.Addressables use asynchronous loading to support loading from any location with any collection of dependencies. Whether you have been using direct references, traditional asset bundles, or Resource folders, addressables provide a simpler way to make your game more dynamic. Addressables simultaneously opens up the world of asset bundles while managing all the complexity.For usage samples, see github.com/Unity-Technologies/Addressables-Sample",454],["Version information",454],["Released for Unity",454],["Package version 1.21.19 is released for Unity Editor version 2022.3.",454],["Compatible with Unity",454],["These package versions are available in Unity version 2022.3:",454],["Documentation location: State Versions available: ",454],[":--- :--- :--- ",454],["[com.unity.addressables@1.21][] released 1.21.19 ",454],["Keywords",454],["[com.unity.addressables]: https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/index.html target=\"_blank\"",454],["[com.unity.addressables@1.21]: https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/index.html target=\"_blank\"",454],["iOS 14 Advertising Support",455],["",455],["Description",455],["Provides support for App Tracking Transparency and SkAdNetwork API newly introduced in Apple iOS 14.Includes a sample implementation of a customizable context screen to show before requesting tracking permission.",455],["Version information",455],["Released for Unity",455],["Package version 1.0.0 is released for Unity Editor version 2022.3.",455],["Compatible with Unity",455],["These package versions are available in Unity version 2022.3:",455],["Documentation location: State Versions available: ",455],[":--- :--- :--- ",455],["[com.unity.ads.ios-support@1.2][] released 1.2.0 ",455],["[com.unity.ads.ios-support@1.0][] released 1.0.0 ",455],["[com.unity.ads.ios-support]: https://docs.unity3d.com/Packages/com.unity.ads.ios-support@1.2/manual/index.html target=\"_blank\"",455],["[com.unity.ads.ios-support@1.2]: https://docs.unity3d.com/Packages/com.unity.ads.ios-support@1.2/manual/index.html target=\"_blank\"",455],["[com.unity.ads.ios-support@1.0]: https://docs.unity3d.com/Packages/com.unity.ads.ios-support@1.0/manual/index.html target=\"_blank\"",455],["Advertisement Legacy",456],["",456],["Description",456],["Connect your game to the Unity Ads Network for iOS and Android to quickly and effectively monetize your games.NOTE: Unity has joined forces with ironSource and recommends using Unity LevelPlay for ad mediation (instead of this package). This package will still be supported but no longer updated. To install Unity LevelPlay, use the Ads Mediation package (available below) or the LevelPlay plugin-in at https://developers.is.com/ironsource-mobile/unity/unity-plugin/.Supported platforms:- Android- iOS",456],["Version information",456],["Released for Unity",456],["Package version 4.4.2 is released for Unity Editor version 2022.3.",456],["Compatible with Unity",456],["These package versions are available in Unity version 2022.3:",456],["Documentation location: State Versions available: ",456],[":--- :--- :--- ",456],["[com.unity.ads@4.4][] released 4.4.2 ",456],["Keywords",456],["[com.unity.ads]: https://docs.unity3d.com/Packages/com.unity.ads@4.4/manual/index.html target=\"_blank\"",456],["[com.unity.ads@4.4]: https://docs.unity3d.com/Packages/com.unity.ads@4.4/manual/index.html target=\"_blank\"",456],["AI Navigation",457],["",457],["Description",457],["High-level NavMesh components for building and using NavMeshes at runtime and at edit time.",457],["Version information",457],["Released for Unity",457],["Package version 1.1.5 is released for Unity Editor version 2022.3.",457],["Compatible with Unity",457],["These package versions are available in Unity version 2022.3:",457],["Documentation location: State Versions available: ",457],[":--- :--- :--- ",457],["[com.unity.ai.navigation@1.1][] released 1.1.5 ",457],["[com.unity.ai.navigation]: https://docs.unity3d.com/Packages/com.unity.ai.navigation@1.1/manual/index.html target=\"_blank\"",457],["[com.unity.ai.navigation@1.1]: https://docs.unity3d.com/Packages/com.unity.ai.navigation@1.1/manual/index.html target=\"_blank\"",457],["Animation Rigging",458],["",458],["Description",458],["Animation Rigging toolkit using Unity's Animation C# Jobs",458],["Version information",458],["Released for Unity",458],["Package version 1.2.1 is released for Unity Editor version 2022.3.",458],["Compatible with Unity",458],["These package versions are available in Unity version 2022.3:",458],["Documentation location: State Versions available: ",458],[":--- :--- :--- ",458],["[com.unity.animation.rigging@1.3][] released 1.3.0 ",458],["[com.unity.animation.rigging@1.2][] released 1.2.1 ",458],["Keywords",458],["[com.unity.animation.rigging]: https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/index.html target=\"_blank\"",458],["[com.unity.animation.rigging@1.3]: https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/index.html target=\"_blank\"",458],["[com.unity.animation.rigging@1.2]: https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.2/manual/index.html target=\"_blank\"",458],["Burst",459],["",459],["Description",459],["Burst is a compiler that translates from IL/.NET bytecode to highly optimized native code using LLVM.",459],["Version information",459],["Released for Unity",459],["Package version 1.8.11 is released for Unity Editor version 2022.3.",459],["Compatible with Unity",459],["These package versions are available in Unity version 2022.3:",459],["Documentation location: State Versions available: ",459],[":--- :--- :--- ",459],["[com.unity.burst@1.8][] released 1.8.11 ",459],["[com.unity.burst]: https://docs.unity3d.com/Packages/com.unity.burst@1.8/manual/index.html target=\"_blank\"",459],["[com.unity.burst@1.8]: https://docs.unity3d.com/Packages/com.unity.burst@1.8/manual/index.html target=\"_blank\"",459],["Cinemachine",460],["",460],["Description",460],["Smart camera tools for passionate creators. Cinemachine 3.0 is a newer and better version of Cinemachine, but upgrading an existing project from 2.X will likely require some effort. If you're considering upgrading an older project, please see our upgrade guide in the user manual.",460],["Version information",460],["Released for Unity",460],["Package version 2.9.7 is released for Unity Editor version 2022.3.",460],["Compatible with Unity",460],["These package versions are available in Unity version 2022.3:",460],["Documentation location: State Versions available: ",460],[":--- :--- :--- ",460],["[com.unity.cinemachine@3.0][] released 3.0.0-pre.3, 3.0.0-pre.4, 3.0.0-pre.5, 3.0.0-pre.6, 3.0.0-pre.7, 3.0.0-pre.8, 3.0.0-pre.9, 3.0.1 ",460],["[com.unity.cinemachine@2.9][] released 2.9.5, 2.9.7 ",460],["Keywords",460],["[com.unity.cinemachine]: https://docs.unity3d.com/Packages/com.unity.cinemachine@3.0/manual/index.html target=\"_blank\"",460],["[com.unity.cinemachine@3.0]: https://docs.unity3d.com/Packages/com.unity.cinemachine@3.0/manual/index.html target=\"_blank\"",460],["[com.unity.cinemachine@2.9]: https://docs.unity3d.com/Packages/com.unity.cinemachine@2.9/manual/index.html target=\"_blank\"",460],["Version Control",461],["",461],["Description",461],["The package gives you the ability to use Unity Version Control in the Unity editor. To use Unity Version Control, a subscription is required. Learn more about how you can get started for free by visiting https://unity.com/solutions/version-control",461],["Version information",461],["Released for Unity",461],["Package version 2.2.0 is released for Unity Editor version 2022.3.",461],["Compatible with Unity",461],["These package versions are available in Unity version 2022.3:",461],["Documentation location: State Versions available: ",461],[":--- :--- :--- ",461],["[com.unity.collab-proxy@2.2][] released 2.2.0 ",461],["Keywords",461],["[com.unity.collab-proxy]: https://docs.unity3d.com/Packages/com.unity.collab-proxy@2.2/manual/index.html target=\"_blank\"",461],["[com.unity.collab-proxy@2.2]: https://docs.unity3d.com/Packages/com.unity.collab-proxy@2.2/manual/index.html target=\"_blank\"",461],["Collections",462],["",462],["Description",462],["A C# collections library providing data structures that can be used in jobs, and optimized by Burst compiler.",462],["Version information",462],["Released for Unity",462],["Package version 2.1.4 is released for Unity Editor version 2022.3.",462],["Compatible with Unity",462],["These package versions are available in Unity version 2022.3:",462],["Documentation location: State Versions available: ",462],[":--- :--- :--- ",462],["[com.unity.collections@2.4][] compatible 2.4.0-exp.2, 2.4.0-pre.2 ",462],["[com.unity.collections@2.3][] compatible 2.3.0-exp.1, 2.3.0-pre.3 ",462],["[com.unity.collections@2.2][] released 2.2.0, 2.2.1 ",462],["[com.unity.collections@2.1][] released 2.1.0-exp.4, 2.1.0-pre.2, 2.1.0-pre.6, 2.1.0-pre.11, 2.1.0-pre.18, 2.1.1, 2.1.4 ",462],["[com.unity.collections@1.5][] released 1.5.1 ",462],["[com.unity.collections@1.4][] released 1.4.0 ",462],["[com.unity.collections@1.3][] released 1.3.1 ",462],["[com.unity.collections@1.2][] released 1.2.4 ",462],["Keywords",462],["[com.unity.collections]: https://docs.unity3d.com/Packages/com.unity.collections@2.2/manual/index.html target=\"_blank\"",462],["[com.unity.collections@2.4]: https://docs.unity3d.com/Packages/com.unity.collections@2.4/manual/index.html target=\"_blank\"",462],["[com.unity.collections@2.3]: https://docs.unity3d.com/Packages/com.unity.collections@2.3/manual/index.html target=\"_blank\"",462],["[com.unity.collections@2.2]: https://docs.unity3d.com/Packages/com.unity.collections@2.2/manual/index.html target=\"_blank\"",462],["[com.unity.collections@2.1]: https://docs.unity3d.com/Packages/com.unity.collections@2.1/manual/index.html target=\"_blank\"",462],["[com.unity.collections@1.5]: https://docs.unity3d.com/Packages/com.unity.collections@1.5/manual/index.html target=\"_blank\"",462],["[com.unity.collections@1.4]: https://docs.unity3d.com/Packages/com.unity.collections@1.4/manual/index.html target=\"_blank\"",462],["[com.unity.collections@1.3]: https://docs.unity3d.com/Packages/com.unity.collections@1.3/manual/index.html target=\"_blank\"",462],["[com.unity.collections@1.2]: https://docs.unity3d.com/Packages/com.unity.collections@1.2/manual/index.html target=\"_blank\"",462],["WebGL Publisher",463],["",463],["Description",463],["This tool allows you to make a WebGL build of your current project and upload it to Unity's website, where it can be shared with others.",463],["Version information",463],["Released for Unity",463],["Package version 4.2.3 is released for Unity Editor version 2022.3.",463],["Compatible with Unity",463],["These package versions are available in Unity version 2022.3:",463],["Documentation location: State Versions available: ",463],[":--- :--- :--- ",463],["[com.unity.connect.share@4.2][] released 4.2.3 ",463],["Keywords",463],["[com.unity.connect.share]: https://docs.unity3d.com/Packages/com.unity.connect.share@4.2/manual/index.html target=\"_blank\"",463],["[com.unity.connect.share@4.2]: https://docs.unity3d.com/Packages/com.unity.connect.share@4.2/manual/index.html target=\"_blank\"",463],["Device Simulator Devices",464],["",464],["Description",464],["This package contains additional devices for the Device Simulator. Each device has a complete device definition and includes a device overlay. After you install this package, the additional devices are immediately available in the Device Simulator.",464],["Version information",464],["Released for Unity",464],["Package version 1.0.0 is released for Unity Editor version 2022.3.",464],["Compatible with Unity",464],["These package versions are available in Unity version 2022.3:",464],["Documentation location: State Versions available: ",464],[":--- :--- :--- ",464],["[com.unity.device-simulator.devices@1.0][] released 1.0.0 ",464],["[com.unity.device-simulator.devices]: https://docs.unity3d.com/Packages/com.unity.device-simulator.devices@1.0/manual/index.html target=\"_blank\"",464],["[com.unity.device-simulator.devices@1.0]: https://docs.unity3d.com/Packages/com.unity.device-simulator.devices@1.0/manual/index.html target=\"_blank\"",464],["Editor Coroutines",465],["",465],["Description",465],["The editor coroutines package allows developers to start constructs similar to Unity's monobehaviour based coroutines within the editor using abitrary objects.",465],["Version information",465],["Released for Unity",465],["Package version 1.0.0 is released for Unity Editor version 2022.3.",465],["Compatible with Unity",465],["These package versions are available in Unity version 2022.3:",465],["Documentation location: State Versions available: ",465],[":--- :--- :--- ",465],["[com.unity.editorcoroutines@1.0][] released 1.0.0 ",465],["Keywords",465],["[com.unity.editorcoroutines]: https://docs.unity3d.com/Packages/com.unity.editorcoroutines@1.0/manual/index.html target=\"_blank\"",465],["[com.unity.editorcoroutines@1.0]: https://docs.unity3d.com/Packages/com.unity.editorcoroutines@1.0/manual/index.html target=\"_blank\"",465],["Entities Graphics",466],["",466],["Description",466],["The Entities Graphics package provides systems and components for drawing meshes using DOTS, including support for instanced mesh rendering and LOD.",466],["Version information",466],["Released for Unity",466],["Package version 1.0.16 is released for Unity Editor version 2022.3.",466],["Compatible with Unity",466],["These package versions are available in Unity version 2022.3:",466],["Documentation location: State Versions available: ",466],[":--- :--- :--- ",466],["[com.unity.entities.graphics@1.2][] compatible 1.2.0-exp.3, 1.2.0-pre.4 ",466],["[com.unity.entities.graphics@1.1][] compatible 1.1.0-exp.1, 1.1.0-pre.3 ",466],["[com.unity.entities.graphics@1.0][] released 1.0.0-exp.8, 1.0.0-exp.14, 1.0.0-pre.15, 1.0.0-pre.44, 1.0.0-pre.65, 1.0.8, 1.0.10, 1.0.11, 1.0.14, 1.0.16 ",466],["Keywords",466],["[com.unity.entities.graphics]: https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/index.html target=\"_blank\"",466],["[com.unity.entities.graphics@1.2]: https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.2/manual/index.html target=\"_blank\"",466],["[com.unity.entities.graphics@1.1]: https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.1/manual/index.html target=\"_blank\"",466],["[com.unity.entities.graphics@1.0]: https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/index.html target=\"_blank\"",466],["Entities",467],["",467],["Description",467],["The Entities package provides a modern Entity Component System (ECS) implementation with a basic set of systems and components made for Unity.",467],["Version information",467],["Released for Unity",467],["Package version 1.0.16 is released for Unity Editor version 2022.3.",467],["Compatible with Unity",467],["These package versions are available in Unity version 2022.3:",467],["Documentation location: State Versions available: ",467],[":--- :--- :--- ",467],["[com.unity.entities@1.2][] compatible 1.2.0-exp.3, 1.2.0-pre.4 ",467],["[com.unity.entities@1.1][] compatible 1.1.0-exp.1, 1.1.0-pre.3 ",467],["[com.unity.entities@1.0][] released 1.0.0-exp.8, 1.0.0-exp.12, 1.0.0-pre.15, 1.0.0-pre.44, 1.0.0-pre.47, 1.0.0-pre.65, 1.0.8, 1.0.10, 1.0.11, 1.0.14, 1.0.16 ",467],["[com.unity.entities@0.51][] compatible 0.51.0-preview.32, 0.51.1-preview.21 ",467],["[com.unity.entities@0.50][] compatible 0.50.0-preview.24, 0.50.1-preview.2 ",467],["[com.unity.entities@0.17][] compatible 0.17.0-preview.41, 0.17.0-preview.42 ",467],["[com.unity.entities@0.16][] compatible 0.16.0-preview.21 ",467],["[com.unity.entities@0.14][] compatible 0.14.0-preview.18, 0.14.0-preview.19 ",467],["[com.unity.entities@0.13][] compatible 0.13.0-preview.24 ",467],["[com.unity.entities@0.11][] compatible 0.11.0-preview.7, 0.11.1-preview.4, 0.11.2-preview.1 ",467],["[com.unity.entities@0.10][] compatible 0.10.0-preview.6 ",467],["[com.unity.entities@0.9][] compatible 0.9.0-preview.6, 0.9.1-preview.15 ",467],["[com.unity.entities@0.8][] compatible 0.8.0-preview.8 ",467],["[com.unity.entities@0.7][] compatible 0.7.0-preview.19 ",467],["[com.unity.entities@0.6][] compatible 0.6.0-preview.24 ",467],["[com.unity.entities@0.5][] compatible 0.5.0-preview.17, 0.5.1-preview.11 ",467],["[com.unity.entities@0.4][] compatible 0.4.0-preview.10 ",467],["[com.unity.entities@0.3][] compatible 0.3.0-preview.4 ",467],["[com.unity.entities@0.2][] compatible 0.2.0-preview.18 ",467],["[com.unity.entities@0.1][] compatible 0.1.0-preview, 0.1.1-preview ",467],["[com.unity.entities@0.0][] compatible 0.0.12-preview.2, 0.0.12-preview.4, 0.0.12-preview.5, 0.0.12-preview.6, 0.0.12-preview.8, 0.0.12-preview.11, 0.0.12-preview.12, 0.0.12-preview.13, 0.0.12-preview.14, 0.0.12-preview.15, 0.0.12-preview.16, 0.0.12-preview.17, 0.0.12-preview.18, 0.0.12-preview.19, 0.0.12-preview.20, 0.0.12-preview.21, 0.0.12-preview.23, 0.0.12-preview.24, 0.0.12-preview.26, 0.0.12-preview.27, 0.0.12-preview.28, 0.0.12-preview.29, 0.0.12-preview.30, 0.0.12-preview.31, 0.0.12-preview.32, 0.0.12-preview.33 ",467],["Keywords",467],["[com.unity.entities]: https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html target=\"_blank\"",467],["[com.unity.entities@1.2]: https://docs.unity3d.com/Packages/com.unity.entities@1.2/manual/index.html target=\"_blank\"",467],["[com.unity.entities@1.1]: https://docs.unity3d.com/Packages/com.unity.entities@1.1/manual/index.html target=\"_blank\"",467],["[com.unity.entities@1.0]: https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.51]: https://docs.unity3d.com/Packages/com.unity.entities@0.51/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.50]: https://docs.unity3d.com/Packages/com.unity.entities@0.50/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.17]: https://docs.unity3d.com/Packages/com.unity.entities@0.17/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.16]: https://docs.unity3d.com/Packages/com.unity.entities@0.16/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.14]: https://docs.unity3d.com/Packages/com.unity.entities@0.14/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.13]: https://docs.unity3d.com/Packages/com.unity.entities@0.13/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.11]: https://docs.unity3d.com/Packages/com.unity.entities@0.11/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.10]: https://docs.unity3d.com/Packages/com.unity.entities@0.10/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.9]: https://docs.unity3d.com/Packages/com.unity.entities@0.9/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.8]: https://docs.unity3d.com/Packages/com.unity.entities@0.8/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.7]: https://docs.unity3d.com/Packages/com.unity.entities@0.7/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.6]: https://docs.unity3d.com/Packages/com.unity.entities@0.6/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.5]: https://docs.unity3d.com/Packages/com.unity.entities@0.5/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.4]: https://docs.unity3d.com/Packages/com.unity.entities@0.4/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.3]: https://docs.unity3d.com/Packages/com.unity.entities@0.3/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.2]: https://docs.unity3d.com/Packages/com.unity.entities@0.2/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.1]: https://docs.unity3d.com/Packages/com.unity.entities@0.1/manual/index.html target=\"_blank\"",467],["[com.unity.entities@0.0]: https://docs.unity3d.com/Packages/com.unity.entities@0.0/manual/index.html target=\"_blank\"",467],["Alembic",468],["",468],["Description",468],["Import and export Alembic files (.abc), record and stream animations in the Alembic format directly in Unity.NOTE: Supported build platforms: only Windows 64, macOS X, and Linux 64.The Alembic format is commonly used in animation to transfer facial, cloth, and other simulation between applications in the form of baked data.",468],["Version information",468],["Released for Unity",468],["Package version 2.3.4 is released for Unity Editor version 2022.3.",468],["Compatible with Unity",468],["These package versions are available in Unity version 2022.3:",468],["Documentation location: State Versions available: ",468],[":--- :--- :--- ",468],["[com.unity.formats.alembic@2.3][] released 2.3.2, 2.3.3, 2.3.4 ",468],["Keywords",468],["[com.unity.formats.alembic]: https://docs.unity3d.com/Packages/com.unity.formats.alembic@2.3/manual/index.html target=\"_blank\"",468],["[com.unity.formats.alembic@2.3]: https://docs.unity3d.com/Packages/com.unity.formats.alembic@2.3/manual/index.html target=\"_blank\"",468],["FBX Exporter",469],["",469],["Description",469],["The FBX Exporter package enables round-trip workflows between Unity and 3D modeling software. Send geometry, Lights, Cameras, and animation from Unity to Autodesk® Maya®, Autodesk® Maya LT™, or Autodesk® 3ds Max®, and back to Unity again, with minimal effort.",469],["Version information",469],["Released for Unity",469],["Package version 4.2.1 is released for Unity Editor version 2022.3.",469],["Compatible with Unity",469],["These package versions are available in Unity version 2022.3:",469],["Documentation location: State Versions available: ",469],[":--- :--- :--- ",469],["[com.unity.formats.fbx@5.1][] released 5.1.0-pre.1, 5.1.0 ",469],["[com.unity.formats.fbx@5.0][] released 5.0.0-pre.1, 5.0.0 ",469],["[com.unity.formats.fbx@4.2][] released 4.2.1 ",469],["Keywords",469],["[com.unity.formats.fbx]: https://docs.unity3d.com/Packages/com.unity.formats.fbx@5.1/manual/index.html target=\"_blank\"",469],["[com.unity.formats.fbx@5.1]: https://docs.unity3d.com/Packages/com.unity.formats.fbx@5.1/manual/index.html target=\"_blank\"",469],["[com.unity.formats.fbx@5.0]: https://docs.unity3d.com/Packages/com.unity.formats.fbx@5.0/manual/index.html target=\"_blank\"",469],["[com.unity.formats.fbx@4.2]: https://docs.unity3d.com/Packages/com.unity.formats.fbx@4.2/manual/index.html target=\"_blank\"",469],["JetBrains Rider Editor",470],["",470],["Description",470],["The JetBrains Rider Editor package provides an integration for using the JetBrains Rider IDE as a code editor for Unity. It adds support for generating .csproj files for code completion and auto-discovery of installations.",470],["Version information",470],["Released for Unity",470],["Package version 3.0.27 is released for Unity Editor version 2022.3.",470],["Compatible with Unity",470],["These package versions are available in Unity version 2022.3:",470],["Documentation location: State Versions available: ",470],[":--- :--- :--- ",470],["[com.unity.ide.rider@3.0][] released 3.0.27 ",470],["[com.unity.ide.rider]: https://docs.unity3d.com/Packages/com.unity.ide.rider@3.0/manual/index.html target=\"_blank\"",470],["[com.unity.ide.rider@3.0]: https://docs.unity3d.com/Packages/com.unity.ide.rider@3.0/manual/index.html target=\"_blank\"",470],["Visual Studio Editor",471],["",471],["Description",471],["Code editor integration for supporting Visual Studio as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.",471],["Version information",471],["Released for Unity",471],["Package version 2.0.22 is released for Unity Editor version 2022.3.",471],["Compatible with Unity",471],["These package versions are available in Unity version 2022.3:",471],["Documentation location: State Versions available: ",471],[":--- :--- :--- ",471],["[com.unity.ide.visualstudio@2.0][] released 2.0.22 ",471],["[com.unity.ide.visualstudio]: https://docs.unity3d.com/Packages/com.unity.ide.visualstudio@2.0/manual/index.html target=\"_blank\"",471],["[com.unity.ide.visualstudio@2.0]: https://docs.unity3d.com/Packages/com.unity.ide.visualstudio@2.0/manual/index.html target=\"_blank\"",471],["Visual Studio Code Editor",472],["",472],["Description",472],["Code editor integration for supporting Visual Studio Code as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.",472],["Version information",472],["Released for Unity",472],["Package version 1.2.5 is released for Unity Editor version 2022.3.",472],["Compatible with Unity",472],["These package versions are available in Unity version 2022.3:",472],["Documentation location: State Versions available: ",472],[":--- :--- :--- ",472],["[com.unity.ide.vscode@1.2][] released 1.2.5 ",472],["[com.unity.ide.vscode]: https://docs.unity3d.com/Packages/com.unity.ide.vscode@1.2/manual/index.html target=\"_blank\"",472],["[com.unity.ide.vscode@1.2]: https://docs.unity3d.com/Packages/com.unity.ide.vscode@1.2/manual/index.html target=\"_blank\"",472],["Input System",473],["",473],["Description",473],["A new input system which can be used as a more extensible and customizable alternative to Unity's classic input system in UnityEngine.Input.",473],["Version information",473],["Released for Unity",473],["Package version 1.7.0 is released for Unity Editor version 2022.3.",473],["Compatible with Unity",473],["These package versions are available in Unity version 2022.3:",473],["Documentation location: State Versions available: ",473],[":--- :--- :--- ",473],["[com.unity.inputsystem@1.8][] compatible 1.8.0-pre.1, 1.8.0-pre.2 ",473],["[com.unity.inputsystem@1.7][] released 1.7.0 ",473],["Keywords",473],["[com.unity.inputsystem]: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/manual/index.html target=\"_blank\"",473],["[com.unity.inputsystem@1.8]: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.8/manual/index.html target=\"_blank\"",473],["[com.unity.inputsystem@1.7]: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/manual/index.html target=\"_blank\"",473],["Tutorial Authoring Tools",474],["",474],["Description",474],["Authoring tools for In-Editor Tutorials. Required for authoring In-Editor Tutorial assets.",474],["Version information",474],["Released for Unity",474],["Package version 1.2.2 is released for Unity Editor version 2022.3.",474],["Compatible with Unity",474],["These package versions are available in Unity version 2022.3:",474],["Documentation location: State Versions available: ",474],[":--- :--- :--- ",474],["[com.unity.learn.iet-framework.authoring@1.2][] released 1.2.2 ",474],["Keywords",474],["[com.unity.learn.iet-framework.authoring]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework.authoring@1.2/manual/index.html target=\"_blank\"",474],["[com.unity.learn.iet-framework.authoring@1.2]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework.authoring@1.2/manual/index.html target=\"_blank\"",474],["Tutorial Framework",475],["",475],["Description",475],["This package is used to display interactive in-Editor tutorials in tutorial projects and project templates.",475],["Version information",475],["Released for Unity",475],["Package version 3.1.3 is released for Unity Editor version 2022.3.",475],["Compatible with Unity",475],["These package versions are available in Unity version 2022.3:",475],["Documentation location: State Versions available: ",475],[":--- :--- :--- ",475],["[com.unity.learn.iet-framework@3.1][] released 3.1.3 ",475],["Keywords",475],["[com.unity.learn.iet-framework]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework@3.1/manual/index.html target=\"_blank\"",475],["[com.unity.learn.iet-framework@3.1]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework@3.1/manual/index.html target=\"_blank\"",475],["Live Capture",476],["",476],["Description",476],["Capture data from physical devices to animate characters and cameras in real time within the Editor. Record the animations in the form of takes and iterate on the recordings. Genlock and synchronize devices for frame and timecode accuracy.",476],["Version information",476],["Released for Unity",476],["Package version 3.0.0 is released for Unity Editor version 2022.3.",476],["Compatible with Unity",476],["These package versions are available in Unity version 2022.3:",476],["Documentation location: State Versions available: ",476],[":--- :--- :--- ",476],["[com.unity.live-capture@4.0][] released 4.0.0-pre.1, 4.0.0-pre.2, 4.0.0-pre.3, 4.0.0-pre.4, 4.0.0-pre.5, 4.0.0 ",476],["[com.unity.live-capture@3.0][] released 3.0.0 ",476],["Keywords",476],["[com.unity.live-capture]: https://docs.unity3d.com/Packages/com.unity.live-capture@4.0/manual/index.html target=\"_blank\"",476],["[com.unity.live-capture@4.0]: https://docs.unity3d.com/Packages/com.unity.live-capture@4.0/manual/index.html target=\"_blank\"",476],["[com.unity.live-capture@3.0]: https://docs.unity3d.com/Packages/com.unity.live-capture@3.0/manual/index.html target=\"_blank\"",476],["Localization",477],["",477],["Description",477],["Use the Localization package to easily configure localization settings for your application.Add support for multiple languages and regional variants, including:• String localization: Set different strings to display based on locale. Use the Smart Strings feature to add logic to automatically replace specific strings, such as placeholders and plurals.• Asset localization: Use a different asset (such as a texture, model, or audio file) based on a locale.• Pseudo-localization: Test how your project will adapt to different localizations at an early stage, before adding your translations.• Import and export localization data to XLIFF, CSV and Google Sheets.Add localization to your projects using the Localization package to help make your applications more accessible to a wider audience.",477],["Version information",477],["Released for Unity",477],["Package version 1.4.5 is released for Unity Editor version 2022.3.",477],["Compatible with Unity",477],["These package versions are available in Unity version 2022.3:",477],["Documentation location: State Versions available: ",477],[":--- :--- :--- ",477],["[com.unity.localization@1.5][] compatible 1.5.0-pre.2, 1.5.0-pre.3, 1.5.0-pre.4, 1.5.0-pre.5 ",477],["[com.unity.localization@1.4][] released 1.4.4, 1.4.5 ",477],["Keywords",477],["[com.unity.localization]: https://docs.unity3d.com/Packages/com.unity.localization@1.4/manual/index.html target=\"_blank\"",477],["[com.unity.localization@1.5]: https://docs.unity3d.com/Packages/com.unity.localization@1.5/manual/index.html target=\"_blank\"",477],["[com.unity.localization@1.4]: https://docs.unity3d.com/Packages/com.unity.localization@1.4/manual/index.html target=\"_blank\"",477],["Unity Logging",478],["",478],["Description",478],["The Logging package provides interfaces for creating and processing runtime events and logging output.",478],["Version information",478],["Released for Unity",478],["Package version 1.0.16 is released for Unity Editor version 2022.3.",478],["Compatible with Unity",478],["These package versions are available in Unity version 2022.3:",478],["Documentation location: State Versions available: ",478],[":--- :--- :--- ",478],["[com.unity.logging@1.2][] compatible 1.2.0-exp.3, 1.2.0-pre.4 ",478],["[com.unity.logging@1.1][] compatible 1.1.0-exp.1, 1.1.0-pre.3 ",478],["[com.unity.logging@1.0][] released 1.0.0-exp.6, 1.0.0-exp.7, 1.0.0-pre.11, 1.0.0-pre.21, 1.0.0-pre.37, 1.0.8, 1.0.10, 1.0.11, 1.0.14, 1.0.16 ",478],["[com.unity.logging@0.51][] compatible 0.51.0-preview.32, 0.51.1-preview.21 ",478],["[com.unity.logging@0.50][] compatible 0.50.0-preview.13, 0.50.0-preview.32 ",478],["Keywords",478],["[com.unity.logging]: https://docs.unity3d.com/Packages/com.unity.logging@1.0/manual/index.html target=\"_blank\"",478],["[com.unity.logging@1.2]: https://docs.unity3d.com/Packages/com.unity.logging@1.2/manual/index.html target=\"_blank\"",478],["[com.unity.logging@1.1]: https://docs.unity3d.com/Packages/com.unity.logging@1.1/manual/index.html target=\"_blank\"",478],["[com.unity.logging@1.0]: https://docs.unity3d.com/Packages/com.unity.logging@1.0/manual/index.html target=\"_blank\"",478],["[com.unity.logging@0.51]: https://docs.unity3d.com/Packages/com.unity.logging@0.51/manual/index.html target=\"_blank\"",478],["[com.unity.logging@0.50]: https://docs.unity3d.com/Packages/com.unity.logging@0.50/manual/index.html target=\"_blank\"",478],["Mathematics",479],["",479],["Description",479],["Unity's C# SIMD math library providing vector types and math functions with a shader like syntax.",479],["Version information",479],["Released for Unity",479],["Package version 1.2.6 is released for Unity Editor version 2022.3.",479],["Compatible with Unity",479],["These package versions are available in Unity version 2022.3:",479],["Documentation location: State Versions available: ",479],[":--- :--- :--- ",479],["[com.unity.mathematics@1.3][] released 1.3.1 ",479],["[com.unity.mathematics@1.2][] released 1.2.6 ",479],["Keywords",479],["[com.unity.mathematics]: https://docs.unity3d.com/Packages/com.unity.mathematics@1.3/manual/index.html target=\"_blank\"",479],["[com.unity.mathematics@1.3]: https://docs.unity3d.com/Packages/com.unity.mathematics@1.3/manual/index.html target=\"_blank\"",479],["[com.unity.mathematics@1.2]: https://docs.unity3d.com/Packages/com.unity.mathematics@1.2/manual/index.html target=\"_blank\"",479],["Memory Profiler",480],["",480],["Description",480],["The Memory Profiler offers a unified solution allowing you to profile both small projects on mobile devices and big AAA projects on high end machines. It provides actionable information about allocations in the engine to allow developers to manage and reduce memory usage.",480],["Version information",480],["Released for Unity",480],["Package version 1.1.0 is released for Unity Editor version 2022.3.",480],["Compatible with Unity",480],["These package versions are available in Unity version 2022.3:",480],["Documentation location: State Versions available: ",480],[":--- :--- :--- ",480],["[com.unity.memoryprofiler@1.1][] released 1.1.0 ",480],["Keywords",480],["[com.unity.memoryprofiler]: https://docs.unity3d.com/Packages/com.unity.memoryprofiler@1.1/manual/index.html target=\"_blank\"",480],["[com.unity.memoryprofiler@1.1]: https://docs.unity3d.com/Packages/com.unity.memoryprofiler@1.1/manual/index.html target=\"_blank\"",480],["ML Agents",481],["",481],["Description",481],["Use state-of-the-art machine learning to create intelligent character behaviors in any Unity environment (games, robotics, film, etc.).",481],["Version information",481],["Released for Unity",481],["Package version 2.0.1 is released for Unity Editor version 2022.3.",481],["Compatible with Unity",481],["These package versions are available in Unity version 2022.3:",481],["Documentation location: State Versions available: ",481],[":--- :--- :--- ",481],["[com.unity.ml-agents@3.0][] compatible 3.0.0-exp.1 ",481],["[com.unity.ml-agents@2.3][] compatible 2.3.0-exp.2, 2.3.0-exp.3 ",481],["[com.unity.ml-agents@2.2][] compatible 2.2.1-exp.1 ",481],["[com.unity.ml-agents@2.1][] compatible 2.1.0-exp.1 ",481],["[com.unity.ml-agents@2.0][] released 2.0.1 ",481],["[com.unity.ml-agents]: https://docs.unity3d.com/Packages/com.unity.ml-agents@2.0/manual/index.html target=\"_blank\"",481],["[com.unity.ml-agents@3.0]: https://docs.unity3d.com/Packages/com.unity.ml-agents@3.0/manual/index.html target=\"_blank\"",481],["[com.unity.ml-agents@2.3]: https://docs.unity3d.com/Packages/com.unity.ml-agents@2.3/manual/index.html target=\"_blank\"",481],["[com.unity.ml-agents@2.2]: https://docs.unity3d.com/Packages/com.unity.ml-agents@2.2/manual/index.html target=\"_blank\"",481],["[com.unity.ml-agents@2.1]: https://docs.unity3d.com/Packages/com.unity.ml-agents@2.1/manual/index.html target=\"_blank\"",481],["[com.unity.ml-agents@2.0]: https://docs.unity3d.com/Packages/com.unity.ml-agents@2.0/manual/index.html target=\"_blank\"",481],["Android Logcat",482],["",482],["Description",482],["Android Logcat package provides support for: - Android log messages - Android application memory statistics - Input injection - Android Screen Capture - Android Screen Recorder - Stacktrace UtilityClick the 'View documentation' link above for more information.The window can be accessed in Unity Editor via 'Window > Analysis > Android Logcat', or simply by pressing 'Alt+6' on Windows or 'Option+6' on macOS. Make sure to have Android module loaded and switch to Android build target in 'Build Settings' window if the menu doesn't exist.",482],["Version information",482],["Released for Unity",482],["Package version 1.4.0 is released for Unity Editor version 2022.3.",482],["Compatible with Unity",482],["These package versions are available in Unity version 2022.3:",482],["Documentation location: State Versions available: ",482],[":--- :--- :--- ",482],["[com.unity.mobile.android-logcat@1.4][] released 1.4.0 ",482],["Keywords",482],["[com.unity.mobile.android-logcat]: https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@1.4/manual/index.html target=\"_blank\"",482],["[com.unity.mobile.android-logcat@1.4]: https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@1.4/manual/index.html target=\"_blank\"",482],["Mobile Notifications",483],["",483],["Description",483],["Mobile Notifications package adds support for scheduling local repeatable or one-time notifications on iOS and Android.On iOS receiving of push notifications is also supported.",483],["Version information",483],["Released for Unity",483],["Package version 2.3.0 is released for Unity Editor version 2022.3.",483],["Compatible with Unity",483],["These package versions are available in Unity version 2022.3:",483],["Documentation location: State Versions available: ",483],[":--- :--- :--- ",483],["[com.unity.mobile.notifications@2.3][] released 2.3.0 ",483],["Keywords",483],["[com.unity.mobile.notifications]: https://docs.unity3d.com/Packages/com.unity.mobile.notifications@2.3/manual/index.html target=\"_blank\"",483],["[com.unity.mobile.notifications@2.3]: https://docs.unity3d.com/Packages/com.unity.mobile.notifications@2.3/manual/index.html target=\"_blank\"",483],["AI",484],["",484],["[com.unity.modules.ai][]",484],["Description",484],["The AI module implements the path finding features in Unity.",484],["Version information",484],["Built-in packages are fixed to a single version matching the Editor version.",484],["[com.unity.modules.ai]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AIModule.html target=\"_blank\"",484],["Android JNI",485],["",485],["[com.unity.modules.androidjni][]",485],["Description",485],["AndroidJNI module allows you to call Java code.",485],["Version information",485],["Built-in packages are fixed to a single version matching the Editor version.",485],["[com.unity.modules.androidjni]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AndroidJNIModule.html target=\"_blank\"",485],["Animation",486],["",486],["[com.unity.modules.animation][]",486],["Description",486],["The Animation module implements Unity's animation system.",486],["Version information",486],["Built-in packages are fixed to a single version matching the Editor version.",486],["[com.unity.modules.animation]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AnimationModule.html target=\"_blank\"",486],["Asset Bundle",487],["",487],["[com.unity.modules.assetbundle][]",487],["Description",487],["The AssetBundle module implements the AssetBundle class and related APIs to load data from AssetBundles.",487],["Version information",487],["Built-in packages are fixed to a single version matching the Editor version.",487],["[com.unity.modules.assetbundle]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AssetBundleModule.html target=\"_blank\"",487],["Audio",488],["",488],["[com.unity.modules.audio][]",488],["Description",488],["The Audio module implements Unity's audio system.",488],["Version information",488],["Built-in packages are fixed to a single version matching the Editor version.",488],["[com.unity.modules.audio]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AudioModule.html target=\"_blank\"",488],["Cloth",489],["",489],["[com.unity.modules.cloth][]",489],["Description",489],["The Cloth module implements cloth physics simulation through the Cloth component.",489],["Version information",489],["Built-in packages are fixed to a single version matching the Editor version.",489],["[com.unity.modules.cloth]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ClothModule.html target=\"_blank\"",489],["Director",490],["",490],["[com.unity.modules.director][]",490],["Description",490],["The Director module implements the PlayableDirector class.",490],["Version information",490],["Built-in packages are fixed to a single version matching the Editor version.",490],["[com.unity.modules.director]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.DirectorModule.html target=\"_blank\"",490],["Image Conversion",491],["",491],["[com.unity.modules.imageconversion][]",491],["Description",491],["The ImageConversion module implements the ImageConversion class which provides helper methods to convert images from and to PNG, JPEG or EXR formats.",491],["Version information",491],["Built-in packages are fixed to a single version matching the Editor version.",491],["[com.unity.modules.imageconversion]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ImageConversionModule.html target=\"_blank\"",491],["IMGUI",492],["",492],["[com.unity.modules.imgui][]",492],["Description",492],["The IMGUI module provides Unity's immediate mode GUI solution for creating in-game and editor user interfaces.",492],["Version information",492],["Built-in packages are fixed to a single version matching the Editor version.",492],["[com.unity.modules.imgui]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.IMGUIModule.html target=\"_blank\"",492],["JSONSerialize",493],["",493],["[com.unity.modules.jsonserialize][]",493],["Description",493],["The JSONSerialize module provides the JsonUtility class which lets you serialize Unity Objects to JSON format.",493],["Version information",493],["Built-in packages are fixed to a single version matching the Editor version.",493],["[com.unity.modules.jsonserialize]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.JSONSerializeModule.html target=\"_blank\"",493],["NVIDIA",494],["",494],["[com.unity.modules.nvidia][]",494],["Description",494],["A module that contains API you can use to interact with NVIDIA graphics cards.",494],["Version information",494],["Built-in packages are fixed to a single version matching the Editor version.",494],["[com.unity.modules.nvidia]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.NVIDIAModule.html target=\"_blank\"",494],["Particle System",495],["",495],["[com.unity.modules.particlesystem][]",495],["Description",495],["The ParticleSystem module implements Unity's Particle System.",495],["Version information",495],["Built-in packages are fixed to a single version matching the Editor version.",495],["[com.unity.modules.particlesystem]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ParticleSystemModule.html target=\"_blank\"",495],["Physics",496],["",496],["[com.unity.modules.physics][]",496],["Description",496],["The Physics module implements 3D physics in Unity.",496],["Version information",496],["Built-in packages are fixed to a single version matching the Editor version.",496],["[com.unity.modules.physics]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.PhysicsModule.html target=\"_blank\"",496],["Physics 2D",497],["",497],["[com.unity.modules.physics2d][]",497],["Description",497],["The Physics2d module implements 2D physics in Unity.",497],["Version information",497],["Built-in packages are fixed to a single version matching the Editor version.",497],["[com.unity.modules.physics2d]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.Physics2DModule.html target=\"_blank\"",497],["Screen Capture",498],["",498],["[com.unity.modules.screencapture][]",498],["Description",498],["The ScreenCapture module provides functionality to take screen shots using the ScreenCapture class.",498],["Version information",498],["Built-in packages are fixed to a single version matching the Editor version.",498],["[com.unity.modules.screencapture]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ScreenCaptureModule.html target=\"_blank\"",498],["Terrain",499],["",499],["[com.unity.modules.terrain][]",499],["Description",499],["The Terrain module implements Unity's Terrain rendering engine available through the Terrain component.",499],["Version information",499],["Built-in packages are fixed to a single version matching the Editor version.",499],["[com.unity.modules.terrain]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.TerrainModule.html target=\"_blank\"",499],["Terrain Physics",500],["",500],["[com.unity.modules.terrainphysics][]",500],["Description",500],["The TerrainPhysics module connects the Terrain and Physics modules by implementing the TerrainCollider component.",500],["Version information",500],["Built-in packages are fixed to a single version matching the Editor version.",500],["[com.unity.modules.terrainphysics]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.TerrainPhysicsModule.html target=\"_blank\"",500],["Tilemap",501],["",501],["[com.unity.modules.tilemap][]",501],["Description",501],["The Tilemap module implements the Tilemap class.",501],["Version information",501],["Built-in packages are fixed to a single version matching the Editor version.",501],["[com.unity.modules.tilemap]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.TilemapModule.html target=\"_blank\"",501],["UI",502],["",502],["[com.unity.modules.ui][]",502],["Description",502],["The UI module implements basic components required for Unity's UI system",502],["Version information",502],["Built-in packages are fixed to a single version matching the Editor version.",502],["[com.unity.modules.ui]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UIModule.html target=\"_blank\"",502],["UIElements",503],["",503],["[com.unity.modules.uielements][]",503],["Description",503],["The UIElements module implements the UIElements retained mode UI framework.",503],["Version information",503],["Built-in packages are fixed to a single version matching the Editor version.",503],["[com.unity.modules.uielements]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UIElementsModule.html target=\"_blank\"",503],["Umbra",504],["",504],["[com.unity.modules.umbra][]",504],["Description",504],["The Umbra module implements Unity's occlusion culling system.",504],["Version information",504],["Built-in packages are fixed to a single version matching the Editor version.",504],["[com.unity.modules.umbra]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UmbraModule.html target=\"_blank\"",504],["Unity Analytics",505],["",505],["[com.unity.modules.unityanalytics][]",505],["Description",505],["The UnityAnalytics module implements APIs required to use Unity Analytics.",505],["Version information",505],["Built-in packages are fixed to a single version matching the Editor version.",505],["[com.unity.modules.unityanalytics]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityAnalyticsModule.html target=\"_blank\"",505],["Unity Web Request",506],["",506],["[com.unity.modules.unitywebrequest][]",506],["Description",506],["The UnityWebRequest module lets you communicate with http services.",506],["Version information",506],["Built-in packages are fixed to a single version matching the Editor version.",506],["[com.unity.modules.unitywebrequest]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestModule.html target=\"_blank\"",506],["Unity Web Request Asset Bundle",507],["",507],["[com.unity.modules.unitywebrequestassetbundle][]",507],["Description",507],["The UnityWebRequestAssetBundle module provides the DownloadHandlerAssetBundle class to use UnityWebRequest to download Asset Bundles.",507],["Version information",507],["Built-in packages are fixed to a single version matching the Editor version.",507],["[com.unity.modules.unitywebrequestassetbundle]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestAssetBundleModule.html target=\"_blank\"",507],["Unity Web Request Audio",508],["",508],["[com.unity.modules.unitywebrequestaudio][]",508],["Description",508],["The UnityWebRequestAudio module provides the DownloadHandlerAudioClip class to use UnityWebRequest to download AudioClips.",508],["Version information",508],["Built-in packages are fixed to a single version matching the Editor version.",508],["[com.unity.modules.unitywebrequestaudio]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestAudioModule.html target=\"_blank\"",508],["Unity Web Request Texture",509],["",509],["[com.unity.modules.unitywebrequesttexture][]",509],["Description",509],["The UnityWebRequestTexture module provides the DownloadHandlerTexture class to use UnityWebRequest to download Textures.",509],["Version information",509],["Built-in packages are fixed to a single version matching the Editor version.",509],["[com.unity.modules.unitywebrequesttexture]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestTextureModule.html target=\"_blank\"",509],["Unity Web Request WWW",510],["",510],["[com.unity.modules.unitywebrequestwww][]",510],["Description",510],["The UnityWebRequestWWW module implements the legacy WWW lets you communicate with http services.",510],["Version information",510],["Built-in packages are fixed to a single version matching the Editor version.",510],["[com.unity.modules.unitywebrequestwww]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestWWWModule.html target=\"_blank\"",510],["Vehicles",511],["",511],["[com.unity.modules.vehicles][]",511],["Description",511],["The Vehicles module implements vehicle physics simulation through the WheelCollider component.",511],["Version information",511],["Built-in packages are fixed to a single version matching the Editor version.",511],["[com.unity.modules.vehicles]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.VehiclesModule.html target=\"_blank\"",511],["Video",512],["",512],["[com.unity.modules.video][]",512],["Description",512],["The Video module lets you play back video files in your content.",512],["Version information",512],["Built-in packages are fixed to a single version matching the Editor version.",512],["[com.unity.modules.video]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.VideoModule.html target=\"_blank\"",512],["VR",513],["",513],["[com.unity.modules.vr][]",513],["Description",513],["The VR module implements support for virtual reality devices in Unity.",513],["Version information",513],["Built-in packages are fixed to a single version matching the Editor version.",513],["[com.unity.modules.vr]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.VRModule.html target=\"_blank\"",513],["Wind",514],["",514],["[com.unity.modules.wind][]",514],["Description",514],["The Wind module implements the WindZone component which can affect terrain rendering and particle simulations.",514],["Version information",514],["Built-in packages are fixed to a single version matching the Editor version.",514],["[com.unity.modules.wind]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.WindModule.html target=\"_blank\"",514],["XR",515],["",515],["[com.unity.modules.xr][]",515],["Description",515],["The XR module contains the VR and AR related platform support functionality.",515],["Version information",515],["Built-in packages are fixed to a single version matching the Editor version.",515],["[com.unity.modules.xr]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.XRModule.html target=\"_blank\"",515],["Multiplayer Tools",516],["",516],["Description",516],["Adds a suite of tools that improve workflows for multiplayer development",516],["Version information",516],["Released for Unity",516],["Package version 2.0.0-pre.5 is released for Unity Editor version 2022.3.",516],["Compatible with Unity",516],["These package versions are available in Unity version 2022.3:",516],["Documentation location: State Versions available: ",516],[":--- :--- :--- ",516],["[com.unity.multiplayer.tools@2.0][] compatible 2.0.0-pre.2, 2.0.0-pre.3, 2.0.0-pre.5 ",516],["[com.unity.multiplayer.tools@1.1][] released 1.1.0, 1.1.1 ",516],["[com.unity.multiplayer.tools@1.0][] released 1.0.0 ",516],["Keywords",516],["[com.unity.multiplayer.tools]: https://docs.unity3d.com/Packages/com.unity.multiplayer.tools@1.1/manual/index.html target=\"_blank\"",516],["[com.unity.multiplayer.tools@2.0]: https://docs.unity3d.com/Packages/com.unity.multiplayer.tools@2.0/manual/index.html target=\"_blank\"",516],["[com.unity.multiplayer.tools@1.1]: https://docs.unity3d.com/Packages/com.unity.multiplayer.tools@1.1/manual/index.html target=\"_blank\"",516],["[com.unity.multiplayer.tools@1.0]: https://docs.unity3d.com/Packages/com.unity.multiplayer.tools@1.0/manual/index.html target=\"_blank\"",516],["Netcode for GameObjects",517],["",517],["Description",517],["Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.",517],["Version information",517],["Released for Unity",517],["Package version 1.7.1 is released for Unity Editor version 2022.3.",517],["Compatible with Unity",517],["These package versions are available in Unity version 2022.3:",517],["Documentation location: State Versions available: ",517],[":--- :--- :--- ",517],["[com.unity.netcode.gameobjects@1.7][] released 1.7.1 ",517],["[com.unity.netcode.gameobjects]: https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@1.7/manual/index.html target=\"_blank\"",517],["[com.unity.netcode.gameobjects@1.7]: https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@1.7/manual/index.html target=\"_blank\"",517],["Netcode for Entities",518],["",518],["Description",518],["Unity's Data Oriented Technology Stack (DOTS) multiplayer netcode layer - a high level netcode system built on entities. This package provides a foundation for creating networked multiplayer applications within DOTS.",518],["Version information",518],["Released for Unity",518],["Package version 1.0.17 is released for Unity Editor version 2022.3.",518],["Compatible with Unity",518],["These package versions are available in Unity version 2022.3:",518],["Documentation location: State Versions available: ",518],[":--- :--- :--- ",518],["[com.unity.netcode@1.2][] compatible 1.2.0-exp.3, 1.2.0-pre.4 ",518],["[com.unity.netcode@1.1][] compatible 1.1.0-exp.1, 1.1.0-pre.3 ",518],["[com.unity.netcode@1.0][] released 1.0.0-exp.8, 1.0.0-exp.13, 1.0.0-pre.15, 1.0.0-pre.44, 1.0.0-pre.47, 1.0.0-pre.65, 1.0.8, 1.0.10, 1.0.11, 1.0.12, 1.0.15, 1.0.17 ",518],["[com.unity.netcode@0.51][] compatible 0.51.0-preview.32, 0.51.1-preview.21 ",518],["[com.unity.netcode@0.50][] compatible 0.50.0-preview.29, 0.50.1-preview.19 ",518],["[com.unity.netcode@0.6][] compatible 0.6.0-preview.7 ",518],["[com.unity.netcode@0.5][] compatible 0.5.0-preview.5 ",518],["[com.unity.netcode@0.4][] compatible 0.4.0-preview.1 ",518],["[com.unity.netcode@0.3][] compatible 0.3.0-preview.3 ",518],["[com.unity.netcode@0.2][] compatible 0.2.0-preview.5 ",518],["[com.unity.netcode@0.1][] compatible 0.1.0-preview.6 ",518],["[com.unity.netcode@0.0][] compatible 0.0.1-preview.6, 0.0.2-preview.1, 0.0.3-preview.2, 0.0.4-preview.0 ",518],["[com.unity.netcode]: https://docs.unity3d.com/Packages/com.unity.netcode@1.0/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@1.2]: https://docs.unity3d.com/Packages/com.unity.netcode@1.2/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@1.1]: https://docs.unity3d.com/Packages/com.unity.netcode@1.1/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@1.0]: https://docs.unity3d.com/Packages/com.unity.netcode@1.0/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.51]: https://docs.unity3d.com/Packages/com.unity.netcode@0.51/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.50]: https://docs.unity3d.com/Packages/com.unity.netcode@0.50/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.6]: https://docs.unity3d.com/Packages/com.unity.netcode@0.6/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.5]: https://docs.unity3d.com/Packages/com.unity.netcode@0.5/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.4]: https://docs.unity3d.com/Packages/com.unity.netcode@0.4/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.3]: https://docs.unity3d.com/Packages/com.unity.netcode@0.3/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.2]: https://docs.unity3d.com/Packages/com.unity.netcode@0.2/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.1]: https://docs.unity3d.com/Packages/com.unity.netcode@0.1/manual/index.html target=\"_blank\"",518],["[com.unity.netcode@0.0]: https://docs.unity3d.com/Packages/com.unity.netcode@0.0/manual/index.html target=\"_blank\"",518],["Profile Analyzer",519],["",519],["Description",519],["The Profile Analyzer tool supports the standard Unity Profiler. You can use it to analyze multiple frames and multiple data sets of the CPU data in the Profiler.Main features: • Multi-frame analysis of a single set of Profiler CPU data • Comparison of two multi-frame profile scans ",519],["Version information",519],["Released for Unity",519],["Package version 1.2.2 is released for Unity Editor version 2022.3.",519],["Compatible with Unity",519],["These package versions are available in Unity version 2022.3:",519],["Documentation location: State Versions available: ",519],[":--- :--- :--- ",519],["[com.unity.performance.profile-analyzer@1.2][] released 1.2.2 ",519],["[com.unity.performance.profile-analyzer]: https://docs.unity3d.com/Packages/com.unity.performance.profile-analyzer@1.2/manual/index.html target=\"_blank\"",519],["[com.unity.performance.profile-analyzer@1.2]: https://docs.unity3d.com/Packages/com.unity.performance.profile-analyzer@1.2/manual/index.html target=\"_blank\"",519],["Unity Physics",520],["",520],["Description",520],["Unity's C# stateless physics library.Built on top of the Unity C# DOTS framework, Unity Physics is network-ready, completely customizable, and built for performance out of the box. Whether you're building the next mobile hit or a new networked multiplayer console experience, Unity Physics leverages the Burst compiler and Job system to scale across a range of hardware.",520],["Version information",520],["Released for Unity",520],["Package version 1.0.16 is released for Unity Editor version 2022.3.",520],["Compatible with Unity",520],["These package versions are available in Unity version 2022.3:",520],["Documentation location: State Versions available: ",520],[":--- :--- :--- ",520],["[com.unity.physics@1.2][] compatible 1.2.0-exp.3, 1.2.0-pre.4 ",520],["[com.unity.physics@1.1][] compatible 1.1.0-exp.1, 1.1.0-pre.3 ",520],["[com.unity.physics@1.0][] released 1.0.0-exp.8, 1.0.0-exp.12, 1.0.0-pre.15, 1.0.0-pre.44, 1.0.0-pre.65, 1.0.8, 1.0.10, 1.0.11, 1.0.14, 1.0.16 ",520],["[com.unity.physics@0.51][] compatible 0.51.0-preview.32, 0.51.1-preview.21 ",520],["[com.unity.physics@0.50][] compatible 0.50.0-preview.24, 0.50.0-preview.43 ",520],["[com.unity.physics@0.6][] compatible 0.6.0-preview.3 ",520],["[com.unity.physics@0.5][] compatible 0.5.0-preview.1, 0.5.1-preview.2 ",520],["[com.unity.physics@0.4][] compatible 0.4.0-preview.5, 0.4.1-preview ",520],["[com.unity.physics@0.3][] compatible 0.3.0-preview.1, 0.3.1-preview, 0.3.2-preview ",520],["com.unity.physics@0.2 compatible 0.2.0-preview, 0.2.2-preview, 0.2.3-preview, 0.2.4-preview, 0.2.5-preview, 0.2.5-preview.1 ",520],["[com.unity.physics@0.1][] compatible 0.1.0-preview ",520],["[com.unity.physics@0.0][] compatible 0.0.1-preview.1, 0.0.2-preview.1 ",520],["Keywords",520],["[com.unity.physics]: https://docs.unity3d.com/Packages/com.unity.physics@1.0/manual/index.html target=\"_blank\"",520],["[com.unity.physics@1.2]: https://docs.unity3d.com/Packages/com.unity.physics@1.2/manual/index.html target=\"_blank\"",520],["[com.unity.physics@1.1]: https://docs.unity3d.com/Packages/com.unity.physics@1.1/manual/index.html target=\"_blank\"",520],["[com.unity.physics@1.0]: https://docs.unity3d.com/Packages/com.unity.physics@1.0/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.51]: https://docs.unity3d.com/Packages/com.unity.physics@0.51/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.50]: https://docs.unity3d.com/Packages/com.unity.physics@0.50/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.6]: https://docs.unity3d.com/Packages/com.unity.physics@0.6/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.5]: https://docs.unity3d.com/Packages/com.unity.physics@0.5/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.4]: https://docs.unity3d.com/Packages/com.unity.physics@0.4/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.3]: https://docs.unity3d.com/Packages/com.unity.physics@0.3/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.1]: https://docs.unity3d.com/Packages/com.unity.physics@0.1/manual/index.html target=\"_blank\"",520],["[com.unity.physics@0.0]: https://docs.unity3d.com/Packages/com.unity.physics@0.0/manual/index.html target=\"_blank\"",520],["Polybrush",521],["",521],["Description",521],["Mesh painting, sculpting, and geo-scattering tool for Unity.",521],["Version information",521],["Released for Unity",521],["Package version 1.1.5 is released for Unity Editor version 2022.3.",521],["Compatible with Unity",521],["These package versions are available in Unity version 2022.3:",521],["Documentation location: State Versions available: ",521],[":--- :--- :--- ",521],["[com.unity.polybrush@1.1][] released 1.1.5 ",521],["Keywords",521],["[com.unity.polybrush]: https://docs.unity3d.com/Packages/com.unity.polybrush@1.1/manual/index.html target=\"_blank\"",521],["[com.unity.polybrush@1.1]: https://docs.unity3d.com/Packages/com.unity.polybrush@1.1/manual/index.html target=\"_blank\"",521],["Post Processing",522],["",522],["Description",522],["The post-processing stack (v2) comes with a collection of effects and image filters you can apply to your cameras to improve the visuals of your games.",522],["Version information",522],["Released for Unity",522],["Package version 3.2.2 is released for Unity Editor version 2022.3.",522],["Compatible with Unity",522],["These package versions are available in Unity version 2022.3:",522],["Documentation location: State Versions available: ",522],[":--- :--- :--- ",522],["[com.unity.postprocessing@3.3][] released 3.3.0 ",522],["[com.unity.postprocessing@3.2][] released 3.2.2 ",522],["[com.unity.postprocessing]: https://docs.unity3d.com/Packages/com.unity.postprocessing@3.3/manual/index.html target=\"_blank\"",522],["[com.unity.postprocessing@3.3]: https://docs.unity3d.com/Packages/com.unity.postprocessing@3.3/manual/index.html target=\"_blank\"",522],["[com.unity.postprocessing@3.2]: https://docs.unity3d.com/Packages/com.unity.postprocessing@3.2/manual/index.html target=\"_blank\"",522],["ProBuilder",523],["",523],["Description",523],["Build, edit, and texture custom geometry in Unity. Use ProBuilder for in-scene level design, prototyping, collision meshes, all with on-the-fly play-testing.Advanced features include UV editing, vertex colors, parametric shapes, and texture blending. With ProBuilder's model export feature it's easy to tweak your levels in any external 3D modelling suite.If you are using URP/HDRP, be careful to also import the corresponding sample project in the section below to get the proper materials.",523],["Version information",523],["Released for Unity",523],["Package version 5.2.2 is released for Unity Editor version 2022.3.",523],["Compatible with Unity",523],["These package versions are available in Unity version 2022.3:",523],["Documentation location: State Versions available: ",523],[":--- :--- :--- ",523],["[com.unity.probuilder@5.2][] released 5.2.2 ",523],["Keywords",523],["[com.unity.probuilder]: https://docs.unity3d.com/Packages/com.unity.probuilder@5.2/manual/index.html target=\"_blank\"",523],["[com.unity.probuilder@5.2]: https://docs.unity3d.com/Packages/com.unity.probuilder@5.2/manual/index.html target=\"_blank\"",523],["Unity Profiling Core API",524],["",524],["Description",524],["The Unity Profiling Core package provides an API for code instrumentation markup, and for profiling statistic collection.",524],["Version information",524],["Released for Unity",524],["Package version 1.0.2 is released for Unity Editor version 2022.3.",524],["Compatible with Unity",524],["These package versions are available in Unity version 2022.3:",524],["Documentation location: State Versions available: ",524],[":--- :--- :--- ",524],["[com.unity.profiling.core@1.0][] released 1.0.2 ",524],["Keywords",524],["[com.unity.profiling.core]: https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/manual/index.html target=\"_blank\"",524],["[com.unity.profiling.core@1.0]: https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/manual/index.html target=\"_blank\"",524],["System Metrics Mali",525],["",525],["Description",525],["The System Metrics package provides access to low-level system or hardware performance metrics on ARM Mali devices. It enables applications to make performance-relevant measurements in development and runtime using ProfilerRecorder API.By installing this package, you agree to the terms and conditions of the Unity End User License Agreement found under "View licenses" above.",525],["Version information",525],["Released for Unity",525],["Package version 1.0.2 is released for Unity Editor version 2022.3.",525],["Compatible with Unity",525],["These package versions are available in Unity version 2022.3:",525],["Documentation location: State Versions available: ",525],[":--- :--- :--- ",525],["[com.unity.profiling.systemmetrics.mali@1.0][] released 1.0.2 ",525],["Keywords",525],["[com.unity.profiling.systemmetrics.mali]: https://docs.unity3d.com/Packages/com.unity.profiling.systemmetrics.mali@1.0/manual/index.html target=\"_blank\"",525],["[com.unity.profiling.systemmetrics.mali@1.0]: https://docs.unity3d.com/Packages/com.unity.profiling.systemmetrics.mali@1.0/manual/index.html target=\"_blank\"",525],["In App Purchasing",526],["",526],["Description",526],["IMPORTANT UPGRADE NOTES:If updating from Unity IAP (com.unity.purchasing + the Asset Store plugin) versions 2.x to version 3.x, complete the following actions in order to resolve compilation errors: 1. Move IAPProductCatalog.json and BillingMode.json FROM: Assets/Plugins/UnityPurchasing/Resources/ TO: Assets/Resources/. 2. Move AppleTangle.cs and GooglePlayTangle.cs FROM: Assets/Plugins/UnityPurchasing/generated TO: Assets/Scripts/UnityPurchasing/generated. 3. Remove all remaining Asset Store plugin folders and files in Assets/Plugins/UnityPurchasing from your project.PACKAGE DESCRIPTION:With Unity IAP, setting up in-app purchases for your game across multiple app stores has never been easier.This package provides: • One common API to access all stores for free so you can fully understand and optimize your in-game economy • Automatic coupling with Unity Analytics to enable monitoring and decision-making based on trends in your revenue and purchase data across multiple platforms • Support for iOS, Mac, tvOS, Google Play, Windows, and Amazon app stores(*). • Support to work with the Unity Distribution Portal to synchronize catalogs and transactions with other app stores • Client-side receipt validation for Apple App Store and Google PlayAfter installing this package, open the Services Window to enable In-App Purchasing to use these features.",526],["Version information",526],["Released for Unity",526],["Package version 4.10.0 is released for Unity Editor version 2022.3.",526],["Compatible with Unity",526],["These package versions are available in Unity version 2022.3:",526],["Documentation location: State Versions available: ",526],[":--- :--- :--- ",526],["[com.unity.purchasing@4.10][] released 4.10.0 ",526],["[com.unity.purchasing@4.9][] released 4.9.3, 4.9.4 ",526],["Keywords",526],["[com.unity.purchasing]: https://docs.unity3d.com/2022.3/Documentation/Manual/UnityIAP.html target=\"_blank\"",526],["[com.unity.purchasing@4.10]: https://docs.unity3d.com/2022.3/Documentation/Manual/UnityIAP.html target=\"_blank\"",526],["[com.unity.purchasing@4.9]: https://docs.unity3d.com/2022.3/Documentation/Manual/UnityIAP.html target=\"_blank\"",526],["Unity Distribution Portal",527],["",527],["Description",527],["This is the package for the Unity Distribution Portal, a platform that makes it easier to build for, and submit to multiple Android app stores.This package is for Android games only. It lets you implement a single set of methods that can address the In-App Purchases of all the app stores accessible via UDP. Please see our documentation for a more thorough overview of the package.Once your APK file is built with UDP, upload it to the UDP Console and submit your game to the app stores of your choice.",527],["Version information",527],["Released for Unity",527],["Package version 2.2.5 is released for Unity Editor version 2022.3.",527],["Compatible with Unity",527],["These package versions are available in Unity version 2022.3:",527],["Documentation location: State Versions available: ",527],[":--- :--- :--- ",527],["[com.unity.purchasing.udp@2.2][] released 2.2.5 ",527],["Keywords",527],["[com.unity.purchasing.udp]: https://docs.unity3d.com/Packages/com.unity.purchasing.udp@2.2/manual/index.html target=\"_blank\"",527],["[com.unity.purchasing.udp@2.2]: https://docs.unity3d.com/Packages/com.unity.purchasing.udp@2.2/manual/index.html target=\"_blank\"",527],["Recorder",528],["",528],["Description",528],["The Recorder allows you to capture and save data from the Unity Editor during Play mode: animations, videos, images, audio, arbitrary output variables (AOVs), and more.",528],["Version information",528],["Released for Unity",528],["Package version 4.0.2 is released for Unity Editor version 2022.3.",528],["Compatible with Unity",528],["These package versions are available in Unity version 2022.3:",528],["Documentation location: State Versions available: ",528],[":--- :--- :--- ",528],["[com.unity.recorder@4.0][] released 4.0.2 ",528],["Keywords",528],["[com.unity.recorder]: https://docs.unity3d.com/Packages/com.unity.recorder@4.0/manual/index.html target=\"_blank\"",528],["[com.unity.recorder@4.0]: https://docs.unity3d.com/Packages/com.unity.recorder@4.0/manual/index.html target=\"_blank\"",528],["Remote Config",529],["",529],["Description",529],["Remote Config is a cloud service that lets you tune and customize your app over the air without requiring an update to your game. You can use rules to enable or disable features, change the difficulty of your game or run special events to target specific audiences. Campaigns control when updates are applied and to whom, while Unity manages delivery of your game content with minimal performance impact. Remote Config can be configured via the editor or through our public API’s. Functionality includes: - Release new features without deploying code: - Feature flagging - Staged Rollouts - Kill switch functionality - Start & End Date - Enable & disable rules- Personalized real-time segmentation with custom attributes - Custom conditions for applying setting variants - Device, user, game and other arbitrary attributes supporting- Reporting - Tracing ID for decorating analytics events",529],["Version information",529],["Released for Unity",529],["Package version 3.3.2 is released for Unity Editor version 2022.3.",529],["Compatible with Unity",529],["These package versions are available in Unity version 2022.3:",529],["Documentation location: State Versions available: ",529],[":--- :--- :--- ",529],["[com.unity.remote-config@4.0][] released 4.0.0 ",529],["[com.unity.remote-config@3.3][] released 3.3.2 ",529],["Keywords",529],["[com.unity.remote-config]: https://docs.unity3d.com/Packages/com.unity.remote-config@4.0/manual/index.html target=\"_blank\"",529],["[com.unity.remote-config@4.0]: https://docs.unity3d.com/Packages/com.unity.remote-config@4.0/manual/index.html target=\"_blank\"",529],["[com.unity.remote-config@3.3]: https://docs.unity3d.com/Packages/com.unity.remote-config@3.3/manual/index.html target=\"_blank\"",529],["Core RP Library",530],["",530],["[com.unity.render-pipelines.core][]",530],["Description",530],["SRP Core makes it easier to create or customize a Scriptable Render Pipeline (SRP). SRP Core contains reusable code, including boilerplate code for working with platform-specific graphics APIs, utility functions for common rendering operations, and shader libraries. The code in SRP Core is use by the High Definition Render Pipeline (HDRP) and Universal Render Pipeline (URP). If you are creating a custom SRP from scratch or customizing a prebuilt SRP, using SRP Core will save you time.",530],["Version information",530],["Core packages are fixed to a single version matching the Editor version.",530],["[com.unity.render-pipelines.core]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@14.0/manual/index.html target=\"_blank\"",530],["High Definition RP",531],["",531],["[com.unity.render-pipelines.high-definition][]",531],["Description",531],["The High Definition Render Pipeline (HDRP) is a high-fidelity Scriptable Render Pipeline built by Unity to target modern (Compute Shader compatible) platforms. HDRP utilizes Physically-Based Lighting techniques, linear lighting, HDR lighting, and a configurable hybrid Tile/Cluster deferred/Forward lighting architecture and gives you the tools you need to create games, technical demos, animations, and more to a high graphical standard.",531],["Version information",531],["Core packages are fixed to a single version matching the Editor version.",531],["[com.unity.render-pipelines.high-definition]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@14.0/manual/index.html target=\"_blank\"",531],["Universal RP",532],["",532],["[com.unity.render-pipelines.universal][]",532],["Description",532],["The Universal Render Pipeline (URP) is a prebuilt Scriptable Render Pipeline, made by Unity. URP provides artist-friendly workflows that let you quickly and easily create optimized graphics across a range of platforms, from mobile to high-end consoles and PCs.",532],["Version information",532],["Core packages are fixed to a single version matching the Editor version.",532],["[com.unity.render-pipelines.universal]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html target=\"_blank\"",532],["Scriptable Build Pipeline",533],["",533],["Description",533],["The Scriptable Build Pipeline moves the asset bundle build pipeline to C#. Use the pre-defined build flows, or create your own using the divided up APIs. This system improves build time, fixes incremental build, and provides greater flexibility.",533],["Version information",533],["Released for Unity",533],["Package version 1.21.21 is released for Unity Editor version 2022.3.",533],["Compatible with Unity",533],["These package versions are available in Unity version 2022.3:",533],["Documentation location: State Versions available: ",533],[":--- :--- :--- ",533],["[com.unity.scriptablebuildpipeline@2.1][] released 2.1.0 ",533],["[com.unity.scriptablebuildpipeline@2.0][] released 2.0.1, 2.0.2 ",533],["[com.unity.scriptablebuildpipeline@1.21][] released 1.21.21 ",533],["Keywords",533],["[com.unity.scriptablebuildpipeline]: https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@2.1/manual/index.html target=\"_blank\"",533],["[com.unity.scriptablebuildpipeline@2.1]: https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@2.1/manual/index.html target=\"_blank\"",533],["[com.unity.scriptablebuildpipeline@2.0]: https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@2.0/manual/index.html target=\"_blank\"",533],["[com.unity.scriptablebuildpipeline@1.21]: https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@1.21/manual/index.html target=\"_blank\"",533],["Python Scripting",534],["",534],["Description",534],["Optimize Unity Editor workflows for your VFX/animation pipelines using Python scripting:- Automate repetitive tasks to speed up your artistic process.- Integrate your custom pipeline tools within Unity.- Increase interoperability with other software of your pipeline.This package includes and uses Python 3.10.6 and Python for .NET 3.0.0.0 and is Editor-only (not available in runtime builds).",534],["Version information",534],["Released for Unity",534],["Package version 6.0.1 is released for Unity Editor version 2022.3.",534],["Compatible with Unity",534],["These package versions are available in Unity version 2022.3:",534],["Documentation location: State Versions available: ",534],[":--- :--- :--- ",534],["[com.unity.scripting.python@7.0][] released 7.0.0-pre.1, 7.0.0, 7.0.1 ",534],["[com.unity.scripting.python@6.0][] released 6.0.0, 6.0.1 ",534],["Keywords",534],["[com.unity.scripting.python]: https://docs.unity3d.com/Packages/com.unity.scripting.python@7.0/manual/index.html target=\"_blank\"",534],["[com.unity.scripting.python@7.0]: https://docs.unity3d.com/Packages/com.unity.scripting.python@7.0/manual/index.html target=\"_blank\"",534],["[com.unity.scripting.python@6.0]: https://docs.unity3d.com/Packages/com.unity.scripting.python@6.0/manual/index.html target=\"_blank\"",534],["Sequences",535],["",535],["Description",535],["Efficiently create movies, game cinematics or any other linear content.Organize your project's editorial structure and your creative content, assemble the elements for easy authoring and collaboration, and try out new ideas in a non-destructive way.",535],["Version information",535],["Released for Unity",535],["Package version 2.0.1 is released for Unity Editor version 2022.3.",535],["Compatible with Unity",535],["These package versions are available in Unity version 2022.3:",535],["Documentation location: State Versions available: ",535],[":--- :--- :--- ",535],["[com.unity.sequences@2.1][] released 2.1.0-pre.1, 2.1.0, 2.1.1 ",535],["[com.unity.sequences@2.0][] released 2.0.1 ",535],["[com.unity.sequences]: https://docs.unity3d.com/Packages/com.unity.sequences@2.1/manual/index.html target=\"_blank\"",535],["[com.unity.sequences@2.1]: https://docs.unity3d.com/Packages/com.unity.sequences@2.1/manual/index.html target=\"_blank\"",535],["[com.unity.sequences@2.0]: https://docs.unity3d.com/Packages/com.unity.sequences@2.0/manual/index.html target=\"_blank\"",535],["Serialization",536],["",536],["Description",536],["Use Unity's Serialization to serialize and deserialize from/to JSON and Binary formats.",536],["Version information",536],["Released for Unity",536],["Package version 3.1.1 is released for Unity Editor version 2022.3.",536],["Compatible with Unity",536],["These package versions are available in Unity version 2022.3:",536],["Documentation location: State Versions available: ",536],[":--- :--- :--- ",536],["[com.unity.serialization@3.1][] released 3.1.1 ",536],["[com.unity.serialization@3.0][] compatible 3.0.0-pre.1, 3.0.0-pre.2, 3.0.0-pre.3 ",536],["[com.unity.serialization@2.1][] compatible 2.1.0-exp.1, 2.1.1-exp.1, 2.1.2-exp.1 ",536],["[com.unity.serialization@2.0][] compatible 2.0.0-exp.11, 2.0.0-exp.13 ",536],["Keywords",536],["[com.unity.serialization]: https://docs.unity3d.com/Packages/com.unity.serialization@3.1/manual/index.html target=\"_blank\"",536],["[com.unity.serialization@3.1]: https://docs.unity3d.com/Packages/com.unity.serialization@3.1/manual/index.html target=\"_blank\"",536],["[com.unity.serialization@3.0]: https://docs.unity3d.com/Packages/com.unity.serialization@3.0/manual/index.html target=\"_blank\"",536],["[com.unity.serialization@2.1]: https://docs.unity3d.com/Packages/com.unity.serialization@2.1/manual/index.html target=\"_blank\"",536],["[com.unity.serialization@2.0]: https://docs.unity3d.com/Packages/com.unity.serialization@2.0/manual/index.html target=\"_blank\"",536],["Analytics",537],["",537],["Description",537],["The Unity Analytics package automatically collects core events and user properties when someone uses your game or application, and enables you to track specific in-game actions your user performs by defining custom events. The data collected from this package is surfaced in the Unity dashboard where you can use it to gather user insights, segment your player base and make informed decisions around the optimization of your game.",537],["Version information",537],["Released for Unity",537],["Package version 5.0.2 is released for Unity Editor version 2022.3.",537],["Compatible with Unity",537],["These package versions are available in Unity version 2022.3:",537],["Documentation location: State Versions available: ",537],[":--- :--- :--- ",537],["[com.unity.services.analytics@5.0][] released 5.0.0, 5.0.1, 5.0.2 ",537],["[com.unity.services.analytics]: https://docs.unity.com/analytics/ target=\"_blank\"",537],["[com.unity.services.analytics@5.0]: https://docs.unity.com/analytics/ target=\"_blank\"",537],["Authentication",538],["",538],["Description",538],["Client SDK offering player identity management for Unity Gaming Services.Identity providers can be configured from the editor or the Unity Dashboard.Player management is available in the Unity Dashboard.",538],["Version information",538],["Released for Unity",538],["Package version 3.2.0 is released for Unity Editor version 2022.3.",538],["Compatible with Unity",538],["These package versions are available in Unity version 2022.3:",538],["Documentation location: State Versions available: ",538],[":--- :--- :--- ",538],["[com.unity.services.authentication@3.2][] released 3.2.0 ",538],["[com.unity.services.authentication@3.1][] released 3.1.0 ",538],["[com.unity.services.authentication@3.0][] released 3.0.0 ",538],["[com.unity.services.authentication@2.7][] released 2.7.2 ",538],["[com.unity.services.authentication]: https://docs.unity.com/authentication/ target=\"_blank\"",538],["[com.unity.services.authentication@3.2]: https://docs.unity.com/authentication/ target=\"_blank\"",538],["[com.unity.services.authentication@3.1]: https://docs.unity.com/authentication/ target=\"_blank\"",538],["[com.unity.services.authentication@3.0]: https://docs.unity.com/authentication/ target=\"_blank\"",538],["[com.unity.services.authentication@2.7]: https://docs.unity.com/authentication/ target=\"_blank\"",538],["CCD Management",539],["",539],["Description",539],["Cloud Content Delivery (CCD) is a managed cloud service that hosts and delivers live content to your application’s users worldwide. Note: The Addressables package (1.19.6+) contains features that utilize this SDK to manage CCD.",539],["Version information",539],["Released for Unity",539],["Package version 2.2.2 is released for Unity Editor version 2022.3.",539],["Compatible with Unity",539],["These package versions are available in Unity version 2022.3:",539],["Documentation location: State Versions available: ",539],[":--- :--- :--- ",539],["[com.unity.services.ccd.management@2.2][] released 2.2.2 ",539],["[com.unity.services.ccd.management]: https://docs.unity.com/ccd target=\"_blank\"",539],["[com.unity.services.ccd.management@2.2]: https://docs.unity.com/ccd target=\"_blank\"",539],["Build Automation",540],["",540],["Description",540],["Integrate with Unity Build Automation This package provides services to build and distribute your applications.",540],["Version information",540],["Released for Unity",540],["Package version 1.0.5 is released for Unity Editor version 2022.3.",540],["Compatible with Unity",540],["These package versions are available in Unity version 2022.3:",540],["Documentation location: State Versions available: ",540],[":--- :--- :--- ",540],["[com.unity.services.cloud-build@1.0][] released 1.0.5 ",540],["[com.unity.services.cloud-build]: https://docs.unity3d.com/Manual/UnityCloudBuild.html target=\"_blank\"",540],["[com.unity.services.cloud-build@1.0]: https://docs.unity3d.com/Manual/UnityCloudBuild.html target=\"_blank\"",540],["Cloud Diagnostics",541],["",541],["Description",541],["This package is a suite of cloud enabled tools that help you collect and identify issues that users encounter with your apps.",541],["Version information",541],["Released for Unity",541],["Package version 1.0.6 is released for Unity Editor version 2022.3.",541],["Compatible with Unity",541],["These package versions are available in Unity version 2022.3:",541],["Documentation location: State Versions available: ",541],[":--- :--- :--- ",541],["[com.unity.services.cloud-diagnostics@1.0][] released 1.0.6 ",541],["[com.unity.services.cloud-diagnostics]: https://docs.unity.com/cloud-diagnostics/ target=\"_blank\"",541],["[com.unity.services.cloud-diagnostics@1.0]: https://docs.unity.com/cloud-diagnostics/ target=\"_blank\"",541],["Cloud Code",542],["",542],["Description",542],["Run your game logic in the cloud as serverless functions and interact with other backend services.This package allows you to call out to Cloud Code from within your project as a secure player.Cloud Code can be used to: -Change game logic for all players without re-distributing your game -Grant timed rewards -Create randomized values",542],["Version information",542],["Released for Unity",542],["Package version 2.5.1 is released for Unity Editor version 2022.3.",542],["Compatible with Unity",542],["These package versions are available in Unity version 2022.3:",542],["Documentation location: State Versions available: ",542],[":--- :--- :--- ",542],["[com.unity.services.cloudcode@2.5][] released 2.5.0, 2.5.1 ",542],["[com.unity.services.cloudcode]: https://docs.unity.com/cloud-code target=\"_blank\"",542],["[com.unity.services.cloudcode@2.5]: https://docs.unity.com/cloud-code target=\"_blank\"",542],["Cloud Save",543],["",543],["Description",543],["Build better player experiences with seamless game data stored securely in the cloud.Use Cloud Save to store your players’ progress and preferences, by doing so you can share this data between all the players’ devices and any game backend services.",543],["Version information",543],["Released for Unity",543],["Package version 3.0.0 is released for Unity Editor version 2022.3.",543],["Compatible with Unity",543],["These package versions are available in Unity version 2022.3:",543],["Documentation location: State Versions available: ",543],[":--- :--- :--- ",543],["[com.unity.services.cloudsave@3.0][] released 3.0.0 ",543],["[com.unity.services.cloudsave@2.2][] released 2.2.1 ",543],["[com.unity.services.cloudsave]: https://docs.unity.com/cloud-save target=\"_blank\"",543],["[com.unity.services.cloudsave@3.0]: https://docs.unity.com/cloud-save target=\"_blank\"",543],["[com.unity.services.cloudsave@2.2]: https://docs.unity.com/cloud-save target=\"_blank\"",543],["Deployment",544],["",544],["Description",544],["The Deployment package allows for a cohesive interface for the deployment of assets and configurations for UGS services.It is not used on its own as UGS services will integrate with it.It provides the base tooling, such as the Deployment Window, so that UGS services have shared functionality surrounding the deployment of the service's configuration files.",544],["Version information",544],["Released for Unity",544],["Package version 1.2.1 is released for Unity Editor version 2022.3.",544],["Compatible with Unity",544],["These package versions are available in Unity version 2022.3:",544],["Documentation location: State Versions available: ",544],[":--- :--- :--- ",544],["[com.unity.services.deployment@1.2][] released 1.2.1 ",544],["[com.unity.services.deployment]: https://docs.unity3d.com/Packages/com.unity.services.deployment@1.2/manual/index.html target=\"_blank\"",544],["[com.unity.services.deployment@1.2]: https://docs.unity3d.com/Packages/com.unity.services.deployment@1.2/manual/index.html target=\"_blank\"",544],["Economy",545],["",545],["Description",545],["Economy is a cloud service that enables game developers to create their in-game economy and gives them seamless purchases, currency conversion, player inventory management, and more. By using Economy, you have the power to integrate a fully-featured marketplace into your game, and manage it through a streamlined dashboard. Economy can be configured through the Unity Dashboard. This package allows you to interact with your Economy configuration, player’s balances, inventories and purchases.",545],["Version information",545],["Released for Unity",545],["Package version 3.3.0 is released for Unity Editor version 2022.3.",545],["Compatible with Unity",545],["These package versions are available in Unity version 2022.3:",545],["Documentation location: State Versions available: ",545],[":--- :--- :--- ",545],["[com.unity.services.economy@3.3][] released 3.3.0 ",545],["[com.unity.services.economy@3.2][] released 3.2.1 ",545],["[com.unity.services.economy]: https://docs.unity.com/economy/ target=\"_blank\"",545],["[com.unity.services.economy@3.3]: https://docs.unity.com/economy/ target=\"_blank\"",545],["[com.unity.services.economy@3.2]: https://docs.unity.com/economy/ target=\"_blank\"",545],["Friends",546],["",546],["Description",546],["The Friends service allows you to boost player engagement by providing players with a social system that works well with other Unity services. With Friends, your players can send and receive friend requests, build and manage friends lists, and block and unblock other players.",546],["Version information",546],["Released for Unity",546],["Package version 1.0.0 is released for Unity Editor version 2022.3.",546],["Compatible with Unity",546],["These package versions are available in Unity version 2022.3:",546],["Documentation location: State Versions available: ",546],[":--- :--- :--- ",546],["[com.unity.services.friends@1.0][] released 1.0.0 ",546],["[com.unity.services.friends]: https://docs.unity.com/friends/ target=\"_blank\"",546],["[com.unity.services.friends@1.0]: https://docs.unity.com/friends/ target=\"_blank\"",546],["Leaderboards",547],["",547],["Description",547],["Add socio-competitive elements to your game by allowing users to compete on leaderboards. Use the Leaderboards service to store, sort, and rank player scores powered by Unity Gaming Services.",547],["Version information",547],["Compatible with Unity",547],["These package versions are available in Unity version 2022.3:",547],["Documentation location: State Versions available: ",547],[":--- :--- :--- ",547],["[com.unity.services.leaderboards@2.0][] pre-release 2.0.0 ",547],["[com.unity.services.leaderboards@1.0][] pre-release 1.0.0 ",547],["[com.unity.services.leaderboards]: https://docs.unity.com/leaderboards/ target=\"_blank\"",547],["[com.unity.services.leaderboards@2.0]: https://docs.unity.com/leaderboards/ target=\"_blank\"",547],["[com.unity.services.leaderboards@1.0]: https://docs.unity.com/leaderboards/ target=\"_blank\"",547],["Ads Mediation",548],["",548],["Description",548],["Note: Starting December 2022, we recommend that you use the Ads Mediation package instead of the Advertisement with Mediation and Advertisement Legacy packages.Use the Ads Mediation package to monetize your app with Unity LevelPlay, a monetization tool that allows multiple ad networks to compete for your impressions. This package includes a suite of growth solutions, such as in-app bidding, waterfall ad strategies, A/B testing, and cross promotion.To get started with Ads Mediation, select Install, and then follow the import process. For more information on how to use this package, see the Unity LevelPlay documentation: https://developers.is.com/monetization/Supported platforms:• Android• iOS",548],["Version information",548],["Released for Unity",548],["Package version 1.0.0 is released for Unity Editor version 2022.3.",548],["Compatible with Unity",548],["These package versions are available in Unity version 2022.3:",548],["Documentation location: State Versions available: ",548],[":--- :--- :--- ",548],["[com.unity.services.levelplay@1.0][] released 1.0.0 ",548],["[com.unity.services.levelplay]: https://docs.unity3d.com/Packages/com.unity.services.levelplay@1.0/manual/index.html target=\"_blank\"",548],["[com.unity.services.levelplay@1.0]: https://docs.unity3d.com/Packages/com.unity.services.levelplay@1.0/manual/index.html target=\"_blank\"",548],["Lobby",549],["",549],["Description",549],["Enable players to find, create, and join lobbies with Lobby. Add Lobby to your multiplayer game to empower players to create the gaming experiences they want. Features include Quick Join, Public Lobby, and Private Match to allow flexibility in how players want to game with each other.",549],["Version information",549],["Released for Unity",549],["Package version 1.1.1 is released for Unity Editor version 2022.3.",549],["Compatible with Unity",549],["These package versions are available in Unity version 2022.3:",549],["Documentation location: State Versions available: ",549],[":--- :--- :--- ",549],["[com.unity.services.lobby@1.1][] released 1.1.0, 1.1.1 ",549],["[com.unity.services.lobby]: https://docs.unity.com/lobby/ target=\"_blank\"",549],["[com.unity.services.lobby@1.1]: https://docs.unity.com/lobby/ target=\"_blank\"",549],["Matchmaker",550],["",550],["Description",550],["Unity Matchmaker is part of Unity's growing suite of multiplayer services that are designed to help you create and operate multiplayer games no matter what engine you're using.",550],["Version information",550],["Released for Unity",550],["Package version 1.1.2 is released for Unity Editor version 2022.3.",550],["Compatible with Unity",550],["These package versions are available in Unity version 2022.3:",550],["Documentation location: State Versions available: ",550],[":--- :--- :--- ",550],["[com.unity.services.matchmaker@1.1][] released 1.1.1, 1.1.2 ",550],["[com.unity.services.matchmaker]: https://docs.unity.com/matchmaker/ target=\"_blank\"",550],["[com.unity.services.matchmaker@1.1]: https://docs.unity.com/matchmaker/ target=\"_blank\"",550],["Moderation",551],["",551],["Description",551],["Unity Moderation aims to make toxicity-management accessible, impactful, and insightful – providing developers with the tools they need to grow and maintain healthy communities within their games..",551],["Version information",551],["Compatible with Unity",551],["These package versions are available in Unity version 2022.3:",551],["Documentation location: State Versions available: ",551],[":--- :--- :--- ",551],["[com.unity.services.moderation@1.0][] pre-release 1.0.0-pre.1, 1.0.0-pre.2 ",551],["[com.unity.services.moderation]: https://docs.unity.com/moderation/ target=\"_blank\"",551],["[com.unity.services.moderation@1.0]: https://docs.unity.com/moderation/ target=\"_blank\"",551],["Multiplay",552],["",552],["Description",552],["The Multiplay SDK provides functionality to facilitate Multiplay services.",552],["Version information",552],["Compatible with Unity",552],["These package versions are available in Unity version 2022.3:",552],["Documentation location: State Versions available: ",552],[":--- :--- :--- ",552],["[com.unity.services.multiplay@1.1][] pre-release 1.1.0, 1.1.1 ",552],["[com.unity.services.multiplay]: https://docs.unity.com/multiplay/ target=\"_blank\"",552],["[com.unity.services.multiplay@1.1]: https://docs.unity.com/multiplay/ target=\"_blank\"",552],["Player Accounts",553],["",553],["[com.unity.services.playeraccounts][]",553],["Description",553],["The Player Accounts package: Provides functionality to integrate Unity Player Accounts with Unity Gaming Services.",553],["Version information",553],["Compatible for Unity",553],["Package version 1.0.0-pre.2 is compatible for Unity Editor version 2022.3.",553],["Compatible with Unity",553],["These package versions are available in Unity version 2022.3:",553],["Documentation location: State Versions available: ",553],[":--- :--- :--- ",553],["[com.unity.services.playeraccounts@1.0][] compatible 1.0.0-pre.2 ",553],["[com.unity.services.playeraccounts]: https://docs.unity.com/playeraccounts/ target=\"_blank\"",553],["[com.unity.services.playeraccounts@1.0]: https://docs.unity.com/playeraccounts/ target=\"_blank\"",553],["Push Notifications",554],["",554],["[com.unity.services.push-notifications][]",554],["Description",554],["This package adds support for Push Notifications to your game. It allows sending rich push notifications with images, and provides analytics on the number of received push notifications.",554],["Version information",554],["Compatible for Unity",554],["Package version 4.0.0-pre.1 is compatible for Unity Editor version 2022.3.",554],["Compatible with Unity",554],["These package versions are available in Unity version 2022.3:",554],["Documentation location: State Versions available: ",554],[":--- :--- :--- ",554],["[com.unity.services.push-notifications@4.0][] compatible 4.0.0-pre.1 ",554],["[com.unity.services.push-notifications@3.0][] compatible 3.0.0-pre.1, 3.0.1-pre.1 ",554],["[com.unity.services.push-notifications@2.0][] compatible 2.0.0-pre.1, 2.0.0-pre.2 ",554],["[com.unity.services.push-notifications@1.1][] compatible 1.1.0-pre.1, 1.1.0-pre.2 ",554],["[com.unity.services.push-notifications@1.0][] compatible 1.0.0-pre.3, 1.0.0-pre.4 ",554],["[com.unity.services.push-notifications]: https://docs.unity.com/push-notifications/ target=\"_blank\"",554],["[com.unity.services.push-notifications@4.0]: https://docs.unity.com/push-notifications/ target=\"_blank\"",554],["[com.unity.services.push-notifications@3.0]: https://docs.unity.com/push-notifications/ target=\"_blank\"",554],["[com.unity.services.push-notifications@2.0]: https://docs.unity.com/push-notifications/ target=\"_blank\"",554],["[com.unity.services.push-notifications@1.1]: https://docs.unity.com/push-notifications/ target=\"_blank\"",554],["[com.unity.services.push-notifications@1.0]: https://docs.unity.com/push-notifications/ target=\"_blank\"",554],["Relay",555],["",555],["Description",555],["Connect the players of your peer-hosted games with Relay. Your games will also benefit from improved reliability, privacy and the ability to communicate across platforms. To get started, enable listen-server UDP networking for your project on the Unity Dashboard.Features include an allocation service to join game hosts via code, multi-region support, and more.",555],["Version information",555],["Released for Unity",555],["Package version 1.0.5 is released for Unity Editor version 2022.3.",555],["Compatible with Unity",555],["These package versions are available in Unity version 2022.3:",555],["Documentation location: State Versions available: ",555],[":--- :--- :--- ",555],["[com.unity.services.relay@1.0][] released 1.0.5 ",555],["[com.unity.services.relay]: https://docs.unity.com/relay/ target=\"_blank\"",555],["[com.unity.services.relay@1.0]: https://docs.unity.com/relay/ target=\"_blank\"",555],["User Generated Content Bridge",556],["",556],["Description",556],["The User-Generated Content (UGC) Bridge is a Unity package allowing users to upload UGC for a specific game from the Unity editor. It is a template Unity package provided to game studios developing UGC games, so they can modify it to suit their needs and designs, but functional by default without changing anything. The UGC Bridge aims to reduce the friction of the UGC integration in a game, leveraging the Unity editor itself as the base of the UGC editor, therefore also reducing the engineering cost of such integration.",556],["Version information",556],["Released for Unity",556],["Package version 3.0.0 is released for Unity Editor version 2022.3.",556],["Compatible with Unity",556],["These package versions are available in Unity version 2022.3:",556],["Documentation location: State Versions available: ",556],[":--- :--- :--- ",556],["[com.unity.services.ugc.bridge@3.0][] released 3.0.0 ",556],["[com.unity.services.ugc.bridge@2.0][] released 2.0.0 ",556],["[com.unity.services.ugc.bridge@1.0][] released 1.0.1 ",556],["[com.unity.services.ugc.bridge]: https://docs.unity.com/user-generated-content/ugc-bridge target=\"_blank\"",556],["[com.unity.services.ugc.bridge@3.0]: https://docs.unity.com/user-generated-content/ugc-bridge target=\"_blank\"",556],["[com.unity.services.ugc.bridge@2.0]: https://docs.unity.com/user-generated-content/ugc-bridge target=\"_blank\"",556],["[com.unity.services.ugc.bridge@1.0]: https://docs.unity.com/user-generated-content/ugc-bridge target=\"_blank\"",556],["User Generated Content",557],["",557],["Description",557],["The Unity User Generated Content package provides content management, moderation, and discovery features.",557],["Version information",557],["Released for Unity",557],["Package version 3.0.0 is released for Unity Editor version 2022.3.",557],["Compatible with Unity",557],["These package versions are available in Unity version 2022.3:",557],["Documentation location: State Versions available: ",557],[":--- :--- :--- ",557],["[com.unity.services.ugc@3.0][] released 3.0.0 ",557],["[com.unity.services.ugc@2.0][] released 2.0.0 ",557],["[com.unity.services.ugc@1.0][] compatible 1.0.0-pre.10 ",557],["[com.unity.services.ugc]: https://docs.unity.com/user-generated-content target=\"_blank\"",557],["[com.unity.services.ugc@3.0]: https://docs.unity.com/user-generated-content target=\"_blank\"",557],["[com.unity.services.ugc@2.0]: https://docs.unity.com/user-generated-content target=\"_blank\"",557],["[com.unity.services.ugc@1.0]: https://docs.unity.com/user-generated-content target=\"_blank\"",557],["User Reporting",558],["",558],["Description",558],["This package is a SDK toolset that helps you collect and identify issues that users or testers encounter with your apps.",558],["Version information",558],["Released for Unity",558],["Package version 2.0.6 is released for Unity Editor version 2022.3.",558],["Compatible with Unity",558],["These package versions are available in Unity version 2022.3:",558],["Documentation location: State Versions available: ",558],[":--- :--- :--- ",558],["[com.unity.services.user-reporting@2.0][] released 2.0.6 ",558],["[com.unity.services.user-reporting]: https://docs.unity.com/user-reporting/ target=\"_blank\"",558],["[com.unity.services.user-reporting@2.0]: https://docs.unity.com/user-reporting/ target=\"_blank\"",558],["Shader Graph",559],["",559],["[com.unity.shadergraph][]",559],["Description",559],["The Shader Graph package adds a visual Shader editing tool to Unity. You can use this tool to create Shaders in a visual way instead of writing code. Specific render pipelines can implement specific graph features. Currently, both the High Definition Rendering Pipeline and the Universal Rendering Pipeline support Shader Graph.",559],["Version information",559],["Core packages are fixed to a single version matching the Editor version.",559],["[com.unity.shadergraph]: https://docs.unity3d.com/Packages/com.unity.shadergraph@14.0/manual/index.html target=\"_blank\"",559],["Splines",560],["",560],["Description",560],["Work with curves and paths. Use the Splines package to generate objects and behaviors along paths, create trajectories, and draw shapes.",560],["Version information",560],["Released for Unity",560],["Package version 2.5.1 is released for Unity Editor version 2022.3.",560],["Compatible with Unity",560],["These package versions are available in Unity version 2022.3:",560],["Documentation location: State Versions available: ",560],[":--- :--- :--- ",560],["[com.unity.splines@2.5][] released 2.5.1 ",560],["Keywords",560],["[com.unity.splines]: https://docs.unity3d.com/Packages/com.unity.splines@2.5/manual/index.html target=\"_blank\"",560],["[com.unity.splines@2.5]: https://docs.unity3d.com/Packages/com.unity.splines@2.5/manual/index.html target=\"_blank\"",560],["Sysroot Linux x64",561],["",561],["Description",561],["Sysroot used to build unity player for linux x86_64",561],["Version information",561],["Released for Unity",561],["Package version 2.0.6 is released for Unity Editor version 2022.3.",561],["Compatible with Unity",561],["These package versions are available in Unity version 2022.3:",561],["Documentation location: State Versions available: ",561],[":--- :--- :--- ",561],["[com.unity.sysroot.linux-x86_64@2.0][] released 2.0.4, 2.0.5, 2.0.6 ",561],["Keywords",561],["[com.unity.sysroot.linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.sysroot.linux-x86_64@2.0/manual/index.html target=\"_blank\"",561],["[com.unity.sysroot.linux-x86_64@2.0]: https://docs.unity3d.com/Packages/com.unity.sysroot.linux-x86_64@2.0/manual/index.html target=\"_blank\"",561],["Sysroot Base",562],["",562],["Description",562],["This is the base sysroot package required by all sysroot and toolchain packages",562],["Version information",562],["Released for Unity",562],["Package version 2.0.7 is released for Unity Editor version 2022.3.",562],["Compatible with Unity",562],["These package versions are available in Unity version 2022.3:",562],["Documentation location: State Versions available: ",562],[":--- :--- :--- ",562],["[com.unity.sysroot@2.0][] released 2.0.5, 2.0.6, 2.0.7 ",562],["Keywords",562],["[com.unity.sysroot]: https://docs.unity3d.com/Packages/com.unity.sysroot@2.0/manual/index.html target=\"_blank\"",562],["[com.unity.sysroot@2.0]: https://docs.unity3d.com/Packages/com.unity.sysroot@2.0/manual/index.html target=\"_blank\"",562],["Terrain Tools",563],["",563],["Description",563],["The Terrain Tools package adds additional Terrain sculpting brushes and tools to Unity. This add-on toolset is suitable if you require more control over the appearance of your Terrain, and want to streamline Terrain workflows. It’s also useful when you want to make more complex-looking Terrain, or author Terrain Texture data in external digital content creation tools.",563],["Version information",563],["Released for Unity",563],["Package version 5.0.4 is released for Unity Editor version 2022.3.",563],["Compatible with Unity",563],["These package versions are available in Unity version 2022.3:",563],["Documentation location: State Versions available: ",563],[":--- :--- :--- ",563],["[com.unity.terrain-tools@5.0][] released 5.0.1, 5.0.2, 5.0.3, 5.0.4 ",563],["Keywords",563],["[com.unity.terrain-tools]: https://docs.unity3d.com/Packages/com.unity.terrain-tools@5.0/manual/index.html target=\"_blank\"",563],["[com.unity.terrain-tools@5.0]: https://docs.unity3d.com/Packages/com.unity.terrain-tools@5.0/manual/index.html target=\"_blank\"",563],["Test Framework",564],["",564],["Description",564],["Test framework for running Edit mode and Play mode tests in Unity.",564],["Version information",564],["Released for Unity",564],["Package version 1.1.33 is released for Unity Editor version 2022.3.",564],["Compatible with Unity",564],["These package versions are available in Unity version 2022.3:",564],["Documentation location: State Versions available: ",564],[":--- :--- :--- ",564],["[com.unity.test-framework@2.0][] compatible 2.0.1-exp.1, 2.0.1-exp.2, 2.0.1-pre.12, 2.0.1-pre.18 ",564],["[com.unity.test-framework@1.4][] released 1.4.0, 1.4.1 ",564],["[com.unity.test-framework@1.3][] released 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.7, 1.3.8, 1.3.9 ",564],["[com.unity.test-framework@1.1][] released 1.1.33 ",564],["Keywords",564],["[com.unity.test-framework]: https://docs.unity3d.com/Packages/com.unity.test-framework@1.4/manual/index.html target=\"_blank\"",564],["[com.unity.test-framework@2.0]: https://docs.unity3d.com/Packages/com.unity.test-framework@2.0/manual/index.html target=\"_blank\"",564],["[com.unity.test-framework@1.4]: https://docs.unity3d.com/Packages/com.unity.test-framework@1.4/manual/index.html target=\"_blank\"",564],["[com.unity.test-framework@1.3]: https://docs.unity3d.com/Packages/com.unity.test-framework@1.3/manual/index.html target=\"_blank\"",564],["[com.unity.test-framework@1.1]: https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/index.html target=\"_blank\"",564],["Code Coverage",565],["",565],["Description",565],["Use this package to export code coverage data and reports from your automated tests. Additionally, the Code Coverage package offers a Coverage Recording feature which allows capturing coverage data on demand, for manual testing or when there are no automated tests in the project.",565],["Version information",565],["Released for Unity",565],["Package version 1.2.4 is released for Unity Editor version 2022.3.",565],["Compatible with Unity",565],["These package versions are available in Unity version 2022.3:",565],["Documentation location: State Versions available: ",565],[":--- :--- :--- ",565],["[com.unity.testtools.codecoverage@1.2][] released 1.2.4 ",565],["Keywords",565],["[com.unity.testtools.codecoverage]: https://docs.unity3d.com/Packages/com.unity.testtools.codecoverage@1.2/manual/index.html target=\"_blank\"",565],["[com.unity.testtools.codecoverage@1.2]: https://docs.unity3d.com/Packages/com.unity.testtools.codecoverage@1.2/manual/index.html target=\"_blank\"",565],["TextMeshPro",566],["",566],["Description",566],["TextMeshPro is the ultimate text solution for Unity. It's the perfect replacement for Unity's UI Text and the legacy Text Mesh.Powerful and easy to use, TextMeshPro (also known as TMP) uses Advanced Text Rendering techniques along with a set of custom shaders; delivering substantial visual quality improvements while giving users incredible flexibility when it comes to text styling and texturing.TextMeshPro provides Improved Control over text formatting and layout with features like character, word, line and paragraph spacing, kerning, justified text, Links, over 30 Rich Text Tags available, support for Multi Font & Sprites, Custom Styles and more.Great performance. Since the geometry created by TextMeshPro uses two triangles per character just like Unity's text components, this improved visual quality and flexibility comes at no additional performance cost.",566],["Version information",566],["Released for Unity",566],["Package version 3.0.6 is released for Unity Editor version 2022.3.",566],["Compatible with Unity",566],["These package versions are available in Unity version 2022.3:",566],["Documentation location: State Versions available: ",566],[":--- :--- :--- ",566],["[com.unity.textmeshpro@4.0][] compatible 4.0.0-pre.1, 4.0.0-pre.2 ",566],["[com.unity.textmeshpro@3.2][] compatible 3.2.0-pre.1, 3.2.0-pre.2, 3.2.0-pre.3, 3.2.0-pre.4, 3.2.0-pre.5, 3.2.0-pre.6 ",566],["[com.unity.textmeshpro@3.0][] released 3.0.6 ",566],["Keywords",566],["[com.unity.textmeshpro]: https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.0/manual/index.html target=\"_blank\"",566],["[com.unity.textmeshpro@4.0]: https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/index.html target=\"_blank\"",566],["[com.unity.textmeshpro@3.2]: https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.2/manual/index.html target=\"_blank\"",566],["[com.unity.textmeshpro@3.0]: https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.0/manual/index.html target=\"_blank\"",566],["Timeline",567],["",567],["Description",567],["Use Unity Timeline to create cinematic content, game-play sequences, audio sequences, and complex particle effects.",567],["Version information",567],["Released for Unity",567],["Package version 1.7.6 is released for Unity Editor version 2022.3.",567],["Compatible with Unity",567],["These package versions are available in Unity version 2022.3:",567],["Documentation location: State Versions available: ",567],[":--- :--- :--- ",567],["[com.unity.timeline@1.8][] released 1.8.0, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6 ",567],["[com.unity.timeline@1.7][] released 1.7.6 ",567],["Keywords",567],["[com.unity.timeline]: https://docs.unity3d.com/Packages/com.unity.timeline@1.8/manual/index.html target=\"_blank\"",567],["[com.unity.timeline@1.8]: https://docs.unity3d.com/Packages/com.unity.timeline@1.8/manual/index.html target=\"_blank\"",567],["[com.unity.timeline@1.7]: https://docs.unity3d.com/Packages/com.unity.timeline@1.7/manual/index.html target=\"_blank\"",567],["Toolchain Linux x64",568],["",568],["Description",568],["Toolchain to build player target Linux x86_64 on host Linux x86_64",568],["Version information",568],["Released for Unity",568],["Package version 2.0.6 is released for Unity Editor version 2022.3.",568],["Compatible with Unity",568],["These package versions are available in Unity version 2022.3:",568],["Documentation location: State Versions available: ",568],[":--- :--- :--- ",568],["[com.unity.toolchain.linux-x86_64@2.0][] released 2.0.4, 2.0.5, 2.0.6 ",568],["Keywords",568],["[com.unity.toolchain.linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.toolchain.linux-x86_64@2.0/manual/index.html target=\"_blank\"",568],["[com.unity.toolchain.linux-x86_64@2.0]: https://docs.unity3d.com/Packages/com.unity.toolchain.linux-x86_64@2.0/manual/index.html target=\"_blank\"",568],["Toolchain MacOS Linux x64",569],["",569],["Description",569],["Cross-compilation toolchain to build player target Linux x86_64 on host Darwin x86_64",569],["Version information",569],["Released for Unity",569],["Package version 2.0.6 is released for Unity Editor version 2022.3.",569],["Compatible with Unity",569],["These package versions are available in Unity version 2022.3:",569],["Documentation location: State Versions available: ",569],[":--- :--- :--- ",569],["[com.unity.toolchain.macos-x86_64-linux-x86_64@2.0][] released 2.0.4, 2.0.5, 2.0.6 ",569],["Keywords",569],["[com.unity.toolchain.macos-x86_64-linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.toolchain.macos-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",569],["[com.unity.toolchain.macos-x86_64-linux-x86_64@2.0]: https://docs.unity3d.com/Packages/com.unity.toolchain.macos-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",569],["Toolchain Win Linux x64",570],["",570],["Description",570],["Cross-compilation toolchain to build player target Linux x86_64 on host Windows x86_64",570],["Version information",570],["Released for Unity",570],["Package version 2.0.6 is released for Unity Editor version 2022.3.",570],["Compatible with Unity",570],["These package versions are available in Unity version 2022.3:",570],["Documentation location: State Versions available: ",570],[":--- :--- :--- ",570],["[com.unity.toolchain.win-x86_64-linux-x86_64@2.0][] released 2.0.4, 2.0.5, 2.0.6 ",570],["Keywords",570],["[com.unity.toolchain.win-x86_64-linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.toolchain.win-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",570],["[com.unity.toolchain.win-x86_64-linux-x86_64@2.0]: https://docs.unity3d.com/Packages/com.unity.toolchain.win-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",570],["Unity Transport",571],["",571],["Description",571],["Unity network transport layer - the low-level interface for connecting and sending data through a network",571],["Version information",571],["Released for Unity",571],["Package version 2.1.0 is released for Unity Editor version 2022.3.",571],["Compatible with Unity",571],["These package versions are available in Unity version 2022.3:",571],["Documentation location: State Versions available: ",571],[":--- :--- :--- ",571],["[com.unity.transport@2.2][] released 2.2.1 ",571],["[com.unity.transport@2.1][] released 2.1.0 ",571],["[com.unity.transport@2.0][] released 2.0.0-exp.6, 2.0.0-exp.7, 2.0.0-exp.8, 2.0.0-pre.2, 2.0.0-pre.3, 2.0.0-pre.5, 2.0.0-pre.6, 2.0.0-pre.7, 2.0.0-pre.8, 2.0.1, 2.0.2 ",571],["[com.unity.transport@1.4][] released 1.4.1 ",571],["[com.unity.transport]: https://docs-multiplayer.unity3d.com/transport/current/about target=\"_blank\"",571],["[com.unity.transport@2.2]: https://docs-multiplayer.unity3d.com/transport/current/about target=\"_blank\"",571],["[com.unity.transport@2.1]: https://docs-multiplayer.unity3d.com/transport/current/about target=\"_blank\"",571],["[com.unity.transport@2.0]: https://docs-multiplayer.unity3d.com/transport/current/about target=\"_blank\"",571],["[com.unity.transport@1.4]: https://docs-multiplayer.unity3d.com/transport/current/about target=\"_blank\"",571],["Unity UI",572],["",572],["[com.unity.ugui][]",572],["Description",572],["Unity UI is a set of tools for developing user interfaces for games and applications. It is a GameObject-based UI system that uses Components and the Game View to arrange, position, and style user interfaces. ​ You cannot use Unity UI to create or change user interfaces in the Unity Editor.",572],["Version information",572],["Core packages are fixed to a single version matching the Editor version.",572],["[com.unity.ugui]: https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/index.html target=\"_blank\"",572],["Visual Effect Graph",573],["",573],["[com.unity.visualeffectgraph][]",573],["Description",573],["The Visual Effect Graph is a node based visual effect editor. It allows you to author next generation visual effects that Unity simulates directly on the GPU. The Visual Effect Graph is production-ready for the High Definition Render Pipeline and runs on all platforms supported by it. Full support for the Universal Render Pipeline and compatible mobile devices is still in development.",573],["Version information",573],["Core packages are fixed to a single version matching the Editor version.",573],["[com.unity.visualeffectgraph]: https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@14.0/manual/index.html target=\"_blank\"",573],["Visual Scripting",574],["",574],["Description",574],["Visual scripting is a workflow that uses visual, node-based graphs to design behaviors rather than write lines of C# script.Enabling artists, designers and programmers alike, visual scripting can be used to design final logic, quickly create prototypes, iterate on gameplay and create custom nodes to help streamline collaboration.Visual scripting is compatible with third-party APIs, including most packages, assets and custom libraries.",574],["Version information",574],["Released for Unity",574],["Package version 1.9.1 is released for Unity Editor version 2022.3.",574],["Compatible with Unity",574],["These package versions are available in Unity version 2022.3:",574],["Documentation location: State Versions available: ",574],[":--- :--- :--- ",574],["[com.unity.visualscripting@1.9][] released 1.9.1 ",574],["[com.unity.visualscripting]: https://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/manual/index.html target=\"_blank\"",574],["[com.unity.visualscripting@1.9]: https://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/manual/index.html target=\"_blank\"",574],["Google ARCore XR Plugin",575],["",575],["Description",575],["Provides native Google ARCore integration for use with Unity's multi-platform XR API.Supports the following features:-Efficient Background Rendering-Horizontal Planes-Depth Data-Anchors-Hit Testing-Occlusion",575],["Version information",575],["Released for Unity",575],["Package version 5.1.1 is released for Unity Editor version 2022.3.",575],["Compatible with Unity",575],["These package versions are available in Unity version 2022.3:",575],["Documentation location: State Versions available: ",575],[":--- :--- :--- ",575],["[com.unity.xr.arcore@5.1][] released 5.1.1 ",575],["Keywords",575],["[com.unity.xr.arcore]: https://docs.unity3d.com/Packages/com.unity.xr.arcore@5.1/manual/index.html target=\"_blank\"",575],["[com.unity.xr.arcore@5.1]: https://docs.unity3d.com/Packages/com.unity.xr.arcore@5.1/manual/index.html target=\"_blank\"",575],["AR Foundation",576],["",576],["Description",576],["A collection of Subsystems as well as MonoBehaviours and C# utilities for working with the Subsystems. Includes: • Definitions of Subsystems • GameObject menu items for creating an AR setup • MonoBehaviours that control AR session lifecycle and create GameObjects from detected, real-world trackable features • Scale handling • Face trackingSamples available at https://github.com/Unity-Technologies/arfoundation-samples",576],["Version information",576],["Released for Unity",576],["Package version 5.1.1 is released for Unity Editor version 2022.3.",576],["Compatible with Unity",576],["These package versions are available in Unity version 2022.3:",576],["Documentation location: State Versions available: ",576],[":--- :--- :--- ",576],["[com.unity.xr.arfoundation@5.1][] released 5.1.1 ",576],["Keywords",576],["[com.unity.xr.arfoundation]: https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.1/manual/index.html target=\"_blank\"",576],["[com.unity.xr.arfoundation@5.1]: https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.1/manual/index.html target=\"_blank\"",576],["Apple ARKit XR Plugin",577],["",577],["Description",577],["Provides native Apple ARKit integration for use with Unity's multi-platform XR API.Supports the following features:-Efficient Background Rendering-Horizontal Planes-Depth Data-Anchors-Hit Testing-Face Tracking-Environment Probes-Meshing-Occlusion* Apple and ARKit are trademarks of Apple Inc., registered in the U.S. and other countries and regions.",577],["Version information",577],["Released for Unity",577],["Package version 5.1.1 is released for Unity Editor version 2022.3.",577],["Compatible with Unity",577],["These package versions are available in Unity version 2022.3:",577],["Documentation location: State Versions available: ",577],[":--- :--- :--- ",577],["[com.unity.xr.arkit@5.1][] released 5.1.1 ",577],["Keywords",577],["[com.unity.xr.arkit]: https://docs.unity3d.com/Packages/com.unity.xr.arkit@5.1/manual/index.html target=\"_blank\"",577],["[com.unity.xr.arkit@5.1]: https://docs.unity3d.com/Packages/com.unity.xr.arkit@5.1/manual/index.html target=\"_blank\"",577],["XR Hands",578],["",578],["Description",578],["Surfaces the cross-platform subsystem API for hand-tracking. Implementations of providers will be found in the package for that platform.",578],["Version information",578],["Released for Unity",578],["Package version 1.3.0 is released for Unity Editor version 2022.3.",578],["Compatible with Unity",578],["These package versions are available in Unity version 2022.3:",578],["Documentation location: State Versions available: ",578],[":--- :--- :--- ",578],["[com.unity.xr.hands@1.4][] compatible 1.4.0-pre.1 ",578],["[com.unity.xr.hands@1.3][] released 1.3.0 ",578],["Keywords",578],["[com.unity.xr.hands]: https://docs.unity3d.com/Packages/com.unity.xr.hands@1.3/manual/index.html target=\"_blank\"",578],["[com.unity.xr.hands@1.4]: https://docs.unity3d.com/Packages/com.unity.xr.hands@1.4/manual/index.html target=\"_blank\"",578],["[com.unity.xr.hands@1.3]: https://docs.unity3d.com/Packages/com.unity.xr.hands@1.3/manual/index.html target=\"_blank\"",578],["XR Interaction Toolkit",579],["",579],["Description",579],["A high-level, component-based, interaction system for creating VR and AR experiences. It provides a framework that makes 3D and UI interactions available from Unity input events. The core of this system is a set of base Interactor and Interactable components, and an Interaction Manager that ties these two types of components together. It also contains components that you can use for locomotion and drawing visuals.",579],["Version information",579],["Released for Unity",579],["Package version 2.5.2 is released for Unity Editor version 2022.3.",579],["Compatible with Unity",579],["These package versions are available in Unity version 2022.3:",579],["Documentation location: State Versions available: ",579],[":--- :--- :--- ",579],["[com.unity.xr.interaction.toolkit@2.5][] released 2.5.2 ",579],["Keywords",579],["[com.unity.xr.interaction.toolkit]: https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.5/manual/index.html target=\"_blank\"",579],["[com.unity.xr.interaction.toolkit@2.5]: https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.5/manual/index.html target=\"_blank\"",579],["Magic Leap XR Plugin",580],["",580],["Description",580],["Provides rendering and spatial mapping support for Magic Leap 2.",580],["Version information",580],["Released for Unity",580],["Package version 7.0.0 is released for Unity Editor version 2022.3.",580],["Compatible with Unity",580],["These package versions are available in Unity version 2022.3:",580],["Documentation location: State Versions available: ",580],[":--- :--- :--- ",580],["[com.unity.xr.magicleap@7.0][] released 7.0.0 ",580],["Keywords",580],["[com.unity.xr.magicleap]: https://docs.unity3d.com/Packages/com.unity.xr.magicleap@7.0/manual/index.html target=\"_blank\"",580],["[com.unity.xr.magicleap@7.0]: https://docs.unity3d.com/Packages/com.unity.xr.magicleap@7.0/manual/index.html target=\"_blank\"",580],["XR Plugin Management",581],["",581],["Description",581],["Package that provides simple management of XR plug-ins. Manages and offers help with loading, initialization, settings, and build support for XR plug-ins.",581],["Version information",581],["Released for Unity",581],["Package version 4.4.0 is released for Unity Editor version 2022.3.",581],["Compatible with Unity",581],["These package versions are available in Unity version 2022.3:",581],["Documentation location: State Versions available: ",581],[":--- :--- :--- ",581],["[com.unity.xr.management@4.4][] released 4.4.0 ",581],["Keywords",581],["[com.unity.xr.management]: https://docs.unity3d.com/Packages/com.unity.xr.management@4.4/manual/index.html target=\"_blank\"",581],["[com.unity.xr.management@4.4]: https://docs.unity3d.com/Packages/com.unity.xr.management@4.4/manual/index.html target=\"_blank\"",581],["Unity OpenXR Meta",582],["",582],["Description",582],["Enables you to build mixed reality apps for Meta Quest devices by implementing support for Meta's OpenXR extensions.",582],["Version information",582],["Released for Unity",582],["Package version 1.0.1 is released for Unity Editor version 2022.3.",582],["Compatible with Unity",582],["These package versions are available in Unity version 2022.3:",582],["Documentation location: State Versions available: ",582],[":--- :--- :--- ",582],["[com.unity.xr.meta-openxr@1.0][] released 1.0.1 ",582],["Keywords",582],["[com.unity.xr.meta-openxr]: https://docs.unity3d.com/Packages/com.unity.xr.meta-openxr@1.0/manual/index.html target=\"_blank\"",582],["[com.unity.xr.meta-openxr@1.0]: https://docs.unity3d.com/Packages/com.unity.xr.meta-openxr@1.0/manual/index.html target=\"_blank\"",582],["Oculus XR Plugin",583],["",583],["Description",583],["Provides display and input support for Oculus devices.",583],["Version information",583],["Released for Unity",583],["Package version 4.1.2 is released for Unity Editor version 2022.3.",583],["Compatible with Unity",583],["These package versions are available in Unity version 2022.3:",583],["Documentation location: State Versions available: ",583],[":--- :--- :--- ",583],["[com.unity.xr.oculus@4.2][] compatible 4.2.0-exp-env-depth.1 ",583],["[com.unity.xr.oculus@4.1][] released 4.1.2 ",583],["Keywords",583],["[com.unity.xr.oculus]: https://docs.unity3d.com/Packages/com.unity.xr.oculus@4.1/manual/index.html target=\"_blank\"",583],["[com.unity.xr.oculus@4.2]: https://docs.unity3d.com/Packages/com.unity.xr.oculus@4.2/manual/index.html target=\"_blank\"",583],["[com.unity.xr.oculus@4.1]: https://docs.unity3d.com/Packages/com.unity.xr.oculus@4.1/manual/index.html target=\"_blank\"",583],["OpenXR Plugin",584],["",584],["Description",584],["OpenXR is an open, royalty-free standard developed by Khronos that aims to simplify AR/VR development by allowing developers to target a wide range of AR/VR devices. Use this plug-in to enable OpenXR in XR Plug-in Management.",584],["Version information",584],["Released for Unity",584],["Package version 1.9.1 is released for Unity Editor version 2022.3.",584],["Compatible with Unity",584],["These package versions are available in Unity version 2022.3:",584],["Documentation location: State Versions available: ",584],[":--- :--- :--- ",584],["[com.unity.xr.openxr@1.9][] released 1.9.1 ",584],["Keywords",584],["[com.unity.xr.openxr]: https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.9/manual/index.html target=\"_blank\"",584],["[com.unity.xr.openxr@1.9]: https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.9/manual/index.html target=\"_blank\"",584],["Manually combining meshes",585],["You can manually combine multiple meshes into a single mesh as a draw call optimization technique. Unity renders the combined mesh in a single draw call instead of one draw call per mesh. This technique can be a good alternative to draw call batching in cases where the meshes are close together and don't move relative to one another. For example, for a static cupboard with lots of drawers, it makes sense to combine everything into a single mesh.",585],["Warning**: Unity can't individually cull meshes you combine. This means that if one part of a combined mesh is onscreen, Unity draws the entire combined mesh. If the meshes are static and you want Unity to individually cull them, use static batching instead.",585],["There are two main ways to combine meshes:",585],["In your asset generation tool while authoring the mesh.",585],["In Unity using Mesh.CombineMeshes.",585],["Command-line arguments",586],["You can run the Unity Editor and standalone Player applications from the command line (from the macOS Terminal or the Windows Command Prompt).",586],["This section describes the command-line arguments you can use to change the behavior of the Unity Editor or Player when you launch from the command line.",586],["Unity Editor command-line arguments**: A list of arguments you can use when you launch a version of the Unity Editor from the command line.",586],["Unity standalone Player command-line arguments**: A list of arguments you can use when you launch a built Player application from the command line.",586],["Android Player command-line arguments**: How to pass command-line arguments when you launch an Android Player.",586],["CLIBatchmodeCoroutines**: How to use features that Unity supports when you launch the Unity Editor or a Standalone Player in batch mode.",586],["Animation Reference",587],["For a detailed explanation of the Unity Animation System, please see the Animation System Overview introduction.",587],["For information about importing Animation from your Model, see Model import workflows or the Animation tab reference page.",587],[" 2018-04-25 ",587],["Canvas Components",588],["All UI Components are placed within a Canvas.",588],["Project Settings",589],["Use the Project Settings window to define settings for your project. To open the Project Settings window, go to Edit > Project Settings.",589],[" The Search box lets you filter the list of settings categories on the left and highlight keywords in the details pane on the right.",589],[" All settings are organized by category, which appear in the category list on the left. When you select a category from the list, the details pane displays the associated settings.",589],[" The details pane displays all available settings for the selected category.",589],["The list below shows the default settings categories that are available in the Project Settings window.",589],["TextMesh Pro",589],["Timeline",589],["Version Control",589],["The Project Settings window can also display additional categories and settings, based on the packages you install. For more information on package-specific settings, see the corresponding package documentation.",589],["",589],["Finding settings",589],["When you need to find a setting, you can enter a keyword (either partial or whole) in the search box at the top of the Project Settings window.",589],["As you enter the keyword in the search box, the category list changes dynamically. In the above example, when the user enters the word mode, the category list shrinks to six matches. That means that Unity found that keyword in the Project settings for only six scope categories. At the same time, the details pane highlights any matching keywords.",589],["Tip:** You can use the same procedure for finding and filtering preferences.",589],["2018-09-28 ",589],["Mesh components",590],["This section contains information on components for working with meshes.",590],["Page Description ",590],["",590],["Mesh Renderer component Information about the Mesh Renderer component, which renders regular meshes. ",590],["Skinned Mesh Renderer component Information about the Skinned Mesh Renderer component, which renders deformable meshes. ",590],["Mesh Filter component Information about the Mesh Filter component, which provides a reference to a mesh asset. ",590],["Text Mesh component (legacy) Information about the legacy Text Mesh component, which generates meshes to display strings of text. ",590],["Auto Layout",591],["The auto layout system provides ways to place elements in nested layout groups such as horizontal groups, vertical groups, or grids. It also allows elements to automatically be sized according to the contained content.",591],["UI Effect Components",592],["The effects components allow adding simple effects to Text and Image graphics, such as shadow and outline.",592],["Interaction Components",593],["The interaction components in the UI system handle interaction, such as mouse or touch events and interaction using a keyboard or controller.",593],["Visual Components",594],["The visual components allow for ease of creation and GUI specific functionality.",594],["Introduction to components",595],["Components** are the functional pieces of every GameObject. Components contain properties which you can edit to define the behavior of a GameObject. For more information on the relationship between components and GameObjects, see GameObjects.",595],["To view a list of the components attached to a GameObject in the Inspector window, select a GameObject in either the Hierarchy window or the Scene view.",595],["You can attach many components to a GameObject, but every GameObject must have one and only one Transform component. This is because the Transform component dictates the GameObject's location, rotation, and scale. To create an empty GameObject, select GameObject > Create Empty. When you select the new GameObject, the Inspector displays the Transform component with default values.",595],["Configurable Enter Play Mode",596],["Play Mode is one of Unity's core features. It allows you to run your project directly inside the Editor, via the Play button in the Toolbar. When you enter Play Mode, your project starts and runs as it would in a build. Any changes you make in the Editor during Play Mode reset when you exit Play Mode.",596],["When you enter Play Mode in the Editor, Unity performs two significant actions to ensure your project starts in the Editor in the same way as it would in a build:",596],["\nIt resets the scripting state (this is also called a \"Domain Reload\")\n",596],["\nIt reloads the Scene\n",596],["These two actions take some time to perform, and the amount of time increases as your scripts and Scenes become more complex.",596],["The ability to quickly enter and exit Play Mode is an important factor while you are developing your game or app. The faster you can enter and exit Play Mode, the faster you can make and test changes.",596],["Because a rapid speed of iteration while developing is important, and because the time to reset the Scene and scripting state can become an obstacle to that, Unity offers the ability to configure what happens when you enter Play Mode, giving you the option to disable either, or both, of the “Domain Reload” and “Scene Reload” actions. These two options are provided by the Configurable Enter Play Mode feature.",596],["The diagram below shows the effects of disabling the Reload Domain and Reload Scene settings.",596],["How to configure Play Mode",596],["To configure the Enter Play Mode settings, go to Edit > Project Settings > Editor and enable Enter Play Mode Options. When you enable this, the options to reload domain and reload scene become available.",596],["Enable Reload Domain to enable Domain Reloading. Enable Reload Scene to enable Scene Reloading.",596],["Details of disabling Domain and Scene Reload",597],["What Unity skips when Domain Reload and Scene Reload is disabled",597],["From a high-level perspective, entering Play Mode consists of the following main stages:",597],["\nBackup current Scenes. This only happens when the Scene has been modified. Allows Unity to revert the Scenes when Play Mode is exited to the state they were in before Play Mode started.\n",597],["\nDomain Reload. Resets the scripting state, by reloading the scripting domain.\n",597],["\nScene Reload. Resets the Scene state, by reloading the Scene.\n",597],["\nUpdate Scene. This happens twice; once without rendering, and once with rendering.\n",597],["The combined tasks of Domain Reload and Scene Reload resets the scripting domain and simulates the startup behavior of your application as it would run in the player. Unity skips these steps when you disable them in your Project Settings.",597],["The diagram below provides detailed information about the exact events which Unity skips when Domain Reload and Scene Reload are disabled. Blue indicates the events Unity skips when Domain Reload is disabled, and green indicates the events Unity skips when Scene Reload is disabled.",597],["What Unity performs when Scene Reloading and Domain Reloading are both enabled",597],["With Scene Reloading and Domain Reloading enabled, this is the full list of all processes and events that Unity performs when entering Play Mode:",597],["The AssemblyReloadEvent beforeAssemblyReload event is raised.",597],["The C# domain is stopped:",597],["a. OnDisable() is called for all ScriptableObjects and MonoBehaviours.",597],["b. Unity waits for all async operations to finish.",597],["The state of all MonoBehaviours and ScriptableObjects is serialized.",597],["a. OnBeforeSerialize() is called.",597],["b. All public and private field values are serialized, except those marked with [NonSerialized].",597],["Managed wrappers are disconnected from native Unity objects.",597],["The Unity Child Domain is reloaded:",597],["a. Mono domain unload:",597],["i. The AppDomain.DomainUnload event is raised.",597],["ii. The Unity Child Domain is destroyed",597],["GC and finalizers are called.",597],["Threads are terminated.",597],["All JIT info is deleted.",597],["b. The new Unity Child Domain is created.",597],["The assemblies are loaded:",597],["a. System assemblies are loaded.",597],["b. Unity assemblies are loaded.",597],["c. User assemblies are loaded.",597],["The synchronization context is initialized.",597],["The scripting state is restored.",597],["a. The scriptable part of all Unity objects is recreated.",597],["i. Constructors are called, and statics are assigned their default values.",597],["b. The state of all Unity objects is deserialized:",597],["i. The serialized stated of all Unity objects are restored.",597],["The OnAfterDeserialize event is raised.",597],["ii. OnValidate() is called.",597],["iii. For scripts using the [ExecuteInEditMode] attribute:",597],["OnEnable() is called.",597],["OnDisable() is called.",597],["OnDestroy() is called.",597],["Methods with the InitializeOnLoad and InitializeOnLoadMethod are called.",597],["The AssemblyReloadEvent afterAssemblyReload is called.",597],["XR Project set up",598],["To set up a Unity project for XR:",598],["Use the XR Plug-in Management settings to enable and configure the plug-ins needed for the XR devices and platforms supported by the project",598],["Add XR support packages, such as AR Foundation and the XR Interaction Toolkit",598],["Add the components and GameObjects to your Scenes needed to support XR",598],["See the following topics for more information:",598],["Topic Description ",598],[":--- :--- ",598],["Choose XR provider plug-ins How to manage XR plug-ins and settings. ",598],["Create an XR project How to create a Unity project for XR development. ",598],["Set up an XR scene How to set up a scene for XR. ",598],["XR input options Describes the options for implementing user input in an XR project. ",598],["XR Origin Describes the available XR Origin configurations. ",598],["XR Plug-in Management settings Describes the settings and options provided by the XR Plug-in Management section of the Project Settings. ",598],["Note:** When you create a Unity project, you can use one of the XR templates available in the Unity Hub. These templates create the project with selected XR packages already added to the project. Even when you start with a template, you must configure the project as outlined in this section.",598],["Importing a model with humanoid animations",599],["This page contains guidance on importing a model for use with Unity's Animation System. For information on creating a model for use with the Animation System, see Creating models for animation.",599],["The Animation System works with two types of models:",599],["A Humanoid model is a specific structure, containing at least 15 bones organized in a way that loosely conforms to an actual human skeleton. This page contains guidance on importing this type of model.",599],["A Generic model is everything else. This might be anything from a teakettle to a dragon. For information on importing this type of model, see Importing a model with non-humanoid (generic) animations.",599],["For general importing guidance that is applicable to all types of models, see Importing a model.",599],["Overview",599],["When Unity imports Model files that contain Humanoid Rigs and Animation, it needs to reconcile the bone structure of the Model to its Animation. It does this by mapping each bone in the file to a Humanoid Avatar so that it can play the Animation properly. For this reason, it is important to carefully prepare your Model file before importing into Unity.",599],["Define the Rig type and create the Avatar.",599],["Correct or verify the Avatar's mapping.",599],["Once you are finished with the bone mapping, you can optionally click the Muscles & Settings tab to tweak the Avatar's muscle configuration.",599],["You can optionally save the mapping of your skeleton's bones to the Avatar as a Human Template (.ht) file.",599],["You can optionally limit the animation that gets imported on certain bones by defining an Avatar Mask.",599],["From the Animation tab, enable the Import Animation option and then set the other Asset-specific properties, .",599],["If the file consists of multiple animations or actions, you can define specific action ranges as Animation Clips.",599],["For each Animation Clip defined in the file, you can:",599],["Mirror the animation on both sides of the Humanoid skeleton.",599],["Add curves to the clip in order to animate the timings of other items",599],["Add events to the clip in order to trigger certain actions in time with the animation",599],["Discard part of the animation similar to using a runtime Avatar Mask but applied at import time",599],["Select a different Root Motion Node to drive the action from",599],["To save your changes, click the Apply button at the bottom of the Import Settings window or Revert to discard your changes.",599],["",599],["Set up the Avatar",599],["From the Rig tab of the Inspector window, set the Animation Type to Humanoid. By default, the Avatar Definition property is set to Create From This Model. If you keep this option, Unity attempts to map the set of bones defined in the file to a Humanoid Avatar.",599],["In some cases, you can change this option to Copy From Other Avatar to use an Avatar you already defined for another Model file. For example, if you create a Mesh (skin) in your 3D modeling application with several distinct animations, you can export the Mesh to one FBX file, and each animation to its own FBX file. When you import these files into Unity, you only need to create a single Avatar for the first file you import (usually the Mesh). As long as all the files use the same bone structure, you can re-use that Avatar for the rest of the files (for example, all the animations).",599],["If you enable this option, you must specify which Avatar you want to use by setting the Source property.",599],["You can also change the maximum number of bones that can influence a given vertex with the Skin Weights property. By default, this property limits influence to four bones, but you can specify a different value.",599],["When you click the Apply button, Unity tries to match up the existing bone structure to the Avatar bone structure. In many cases, it can do this automatically by analyzing the connections between bones in the rig.",599],["If the match succeeds, a check mark appears next to the Configure menu. Unity also adds an Avatar sub-Asset to the Model Asset, which you can find in the Project view.",599],["A successful match simply means that Unity was able to match all of the required bones. However, for better results, you also need to match the optional bones and set the model in a proper T-pose.",599],["If Unity can't create the Avatar, a cross appears next to the Configure button, and no Avatar sub-asset appears in the Project view.",599],["Since the Avatar is such an important aspect of the animation system, it is important to configure it properly for your Model.",599],["For this reason, whether or not the automatic Avatar creation succeeds, you should always check that your Avatar is valid and properly set up.",599],["",599],["Configure the Avatar",599],["If you want to check that Unity correctly mapped your model's bones to the Avatar, or if Unity failed to create the Avatar for your model, you can click the Configure ... button on the Rig tab to enter the Avatar configuration mode.",599],["If Unity successfully creates an Avatar, the Avatar appears as a sub-asset of the model Asset. You can select the Avatar asset in the Project window, and then click the \"Configure Avatar\" button in the Inspector to enter the Avatar configuration mode. This mode allows to check or adjust how Unity maps your model's bones to the Avatar layout.",599],["Once you have entered the Avatar configuration mode, the Avatar window appears in the Inspector displaying bone mapping.",599],["Make sure the bone mapping is correct and that you map any optional bones that Unity did not assign.",599],["Your skeleton needs to have at least the required bones in place for Unity to produce a valid match. In order to improve your chances for finding a match to the Avatar, name your bones in a way that reflects the body parts they represent. For example, \"LeftArm\" and \"RightForearm\" make it clear what these bones control.",599],["Mapping strategies",599],["If the model does not yield a valid match, you can use a similar process to the one that Unity uses internally:",599],["Choose Clear from the Mapping menu at the bottom of the Avatar window to reset any mapping that Unity attempted.Mapping drop-down menu at the bottom of the Avatar window\" />",599],["Choose Sample Bind-pose from the Pose menu at the bottom of the Avatar window to approximate the Model's initial modeling pose.Pose drop-down menu at the bottom of the Avatar window\" />",599],["Choose Mapping > Automap to create a bone-mapping from an initial pose.",599],["Choose Pose > Enforce T-Pose to set the Model back to to required T-pose.",599],["If automapping fails completely or partially, you can manually assign bones by either dragging them from the Scene view or from the Hierarchy view. If Unity thinks a bone fits, it appears in green in the Avatar Mapping tab; otherwise it appears in red.",599],["Resetting the pose",599],["The T-pose is the default pose required by Unity animation and is the recommended pose to model in your 3D modeling application. However, if you did not use the T-pose to model your character and the animation does not work as expected, you can select Reset from the Pose drop-down menu:",599],["If the bone assignment is correct, but the character is not in the correct pose, you will see the message \"Character not in T-Pose\". You can try to fix that by choosing Enforce T-Pose from the Pose menu. If the pose is still not correct, you can manually rotate the remaining bones into a T-pose.",599],["",599],["Creating an Avatar Mask",599],["Masking allows you to discard some of the animation data within a clip, allowing the clip to animate only parts of the object or character rather than the entire thing. For example, you may have a standard walking animation that includes both arm and leg motion, but if a character is carrying a large object with both hands then you wouldn't want their arms to swing to the side as they walk. However, you could still use the standard walking animation while carrying the object by using a mask to only play the upper body portion of the carrying animation over the top of the walking animation.",599],["You can apply masking to animation clips either during import time, or at runtime. Masking during import time is preferable, because it allows the discarded animation data to be omitted from your build, making the files smaller and therefore using less memory. It also makes for faster processing because there is less animation data to be blended at runtime. In some cases, import masking may not be suitable for your purposes. In that case, you can apply a mask at runtime by creating an Avatar Mask Asset, and using it in the layer settings of your Animator Controller.",599],["To create an empty Avatar Mask Asset, you can either:",599],["Choose Create > Avatar Mask from the Assets menu.",599],["Click the Model object you want to define the mask on in the Project view, and then right-click and choose Create > Avatar Mask.",599],["The new Asset appears in the Project view:",599],["You can now add portions of the body to the mask and then add the mask to either an Animation Layer or add a reference to it under the Mask section of the Animation tab.",599],["Console Window",600],["The Console Window displays errors, warnings, and other messages the Editor generates. These errors and warnings help you find issues in your project, such as script compilation errors. They also alert you to actions the Editor has taken automatically, such as replacing missing meta files, which could cause an issue somewhere else in your project.",600],["To help you debug your project, use the Debug class to print your own messages to the Console. For example, you can print the value of a variable at certain points in your script to see how they change.",600],["This page covers the options you can use when you work with the Console window, and how you can filter your messages by searching for specific keywords.",600],["Console window interface",600],["To open the Console, from Unity’s main menu go to Window > General > Console.",600],["A**. The Console toolbar has options for controlling how to display messages, and for searching and filtering messages.",600],["B**. The Console window menu has options for opening Log files, controlling how much of each message is visible in the list, and setting stack trace options.",600],["C**. The Console list displays an entry for each logged message. Select a message to display its entire text in the detail area. You can choose how many lines of each message to display here. See Adjusting the line count, below.",600],["D**. The detail area displays the full text of the selected message. If you enable stack trace, the detail area displays references to specific lines in code files as clickable links.",600],["Console toolbar options",600],["The toolbar of the Console window has options for controlling how to display messages, and for searching and filtering messages.",600],["Option: Function: ",600],["",600],["Clear Removes any messages generated from your code but retains compiler errors. Opens a dropdown menu with clearing options. ",600],[" Clear On Play Clears the Console automatically whenever you enter Play mode. \n",600],[" Clear on Build Clears the Console when you build the Project. \n",600],[" Clear on Recompile Clears the console when you recompile the Project. \n",600],["Collapse Displays only the first instance of recurring error messages. This is useful for run-time errors, such as null references, that are sometimes generated on each frame update. ",600],["Error Pause Pauses playback whenever you call Debug.LogError from a script. Use this to freeze playback at a specific point in the execution and inspect the Scene. This option doesn't pause playback when you call Debug.Log from a script. ",600],["[Attach-to-Player] Opens a drop-down menu with options for connecting to development builds that are running on remote devices, and displaying their Player logs in the Console. This option is labeled with the name of the target development build (which is the build of the log that's displayed in the Console window). If the Console isn't connected to a remote build, it's labeled Editor to show that the log displayed in the Console window is from the local Unity Editor. ",600],[" Player Logging If the Console is connected to a remote development build, this enables Player logging for the build. <br/><br/>Disabling this option suspends logging, but the Console remains connected to the target build. <br/><br/>Disabling this option also hides the rest of the options in this drop-down menu. <br/><br/>Select any build listed below **Player Logging** to display its log in the Console window. \n",600],[" Editor If the Console is connected to a remote **development build**, select this option to display the log from the local Unity Player instead of the log from the remote build. \n",600],[" `<Enter IP>` Opens the **Enter Player IP** dialog, where you can specify the IP address of a development build on a remote device. <br/><br/>To connect to the build, select **Connect** in the dialog, and add it to the list of development builds at the bottom of the drop-down menu. \n",600],[" [DEVELOPMENT BUILDS] Lists the available development builds. This includes autodetected builds, and those that you add using the **Enter IP** option. \n",600],[" Searching and filtering Console output",600],["You can search Console messages for specific keywords from the Console search bar. As you type a search term, the Console filters messages to display only those that contain matching text. The Console highlights only the first match in the message text, and only if it’s in the visible part of the message (see Adjusting the Line Count below).",600],["You can search for anything that appears in any Console message, including numerals and special characters. For example, you can search for the time the console logged a message.",600],["The search looks for exact matches of whatever you type in the search bar. You can't search for two different terms at once, or use common search engine operators.",600],["You can also filter Console messages by type. Click the buttons beside the search bar to toggle:",600],["Button Function ",600],["",600],[" Messages switch Displays the number of messages in the Console. Click to display or hide messages. ",600],[" Warnings switch Displays the number of warnings in the Console. Click to display or hide warnings. ",600],[" Errors switch Displays the number of errors in the Console. Click to display or hide errors. ",600],[" Adjusting the line count",600],["Each Console entry can be up to 10 lines long.",600],["To control how many lines of each entry are visible in the list, click the Console menu button, and select Log Entry > [X] Lines from the menu, where [X] is the number of lines to display for each entry.",600],["A larger line count displays more of the text of each entry, but reduces the number of entries visible at any given time. The line count doesn't affect the Console search function, which always searches the full message text. If the matching text is on a hidden line, the search returns the message in the results, but doesn't expand it to reveal or highlight the matching text. You can see the full message text in the detail area, but the matching text isn't highlighted there.",600],["Stack trace logging",600],["Unity Console messages and log files can include detailed stack trace information. You can control the amount of stack trace information using the stack trace logging settings.",600],[" Opening Log files from the Console",600],["Everything Unity or your code write to the Console Window is also written to a Log File. You can open Log files from the Console window menu. Select Open Player Log or Open Editor Log.",600],["Constraints",601],["A Constraint component links the position, rotation, or scale of a GameObject to another GameObject. A constrained GameObject moves, rotates, or scales like the GameObject it is linked to.",601],["Unity supports the following types of Constraint components:",601],["Aim: Rotate the constrained GameObject to face the linked GameObject.",601],["Look At: Rotate the constrained GameObject to the linked GameObject (simplified Aim Constraint).",601],["Parent: Move and rotate the constrained GameObject with the linked GameObject.",601],["Position: Move the constrained GameObject like the linked GameObject.",601],["Rotation: Rotate the constrained GameObject like the linked GameObject.",601],["Scale: Scale the constrained GameObject like the linked GameObject.",601],["Linking to GameObjects",601],["Use the Sources list in a Constraint component to specify the GameObjects to link to.",601],["For example, to make a crosshair follow the player’s spaceship in a 2D shooter, add a Position Constraint component to the crosshair. To link the crosshair to the spaceship, navigate to the Position Constraint component and add the spaceship GameObject to the Sources list. As the player moves the spaceship, the crosshair follows.",601],["A Constraint can link to several source GameObjects. In this case, the Constraint uses the averaged position, rotation, or scale of its source GameObjects. For example, to point a Light at a group of GameObjects, add an Aim Constraint component to the Light GameObject. Then, add the GameObjects to illuminate in the Sources list. The Aim Constraint orients the light to face the averaged position of its sources.",601],["Unity evaluates source GameObjects in the order that they appear in the Sources list. The order has no effect for the Position and Scale Constraints. However, order has an effect on Parent, Rotation, and Aim Constraints. To get the result you want, reorder the Sources list by dragging and dropping items.",601],["You can constrain a series of GameObjects. For example, you want ducklings to follow their mother in a row. You add a Position Constraint component to GameObject Duckling1. In the Sources list, you link to MotherDuck. You then add a Position Constraint to Duckling2 that links to Duckling1. As the MotherDuck GameObject moves in the Scene, Duckling1 follows MotherDuck, and Duckling2 follows Duckling1.",601],["Avoid creating a cycle of Constraints, because this causes unpredictable updates during gameplay.",601],["Setting Constraint properties",601],["Use the Inspector window to change common properties in a Constraint.",601],["Use Weight to vary the influence of a Constraint. A weight of 1 causes the Constraint to update a GameObject at the same rate as its source GameObjects. A weight of 0 removes the effect of the Constraint completely. Each source GameObject also has an individual weight.",601],["In Constraint Settings, use the At Rest properties to specify the X, Y, and Z values to use when Weight is 0 or when the corresponding property in Freeze Axes is not checked.",601],["Use the Offset properties in Constraint Settings to specify the X, Y, and Z values to use when constraining the GameObject.",601],["Use the Freeze Axes settings to toggle which axes the Constraint can actually modify.",601],["Activating and locking Constraints",601],["There are two aspects to working with Constraints: activating and locking.",601],["You activate a Constraint to allow it to evaluate the position, rotation, or scale of the constrained GameObject. Unity does not evaluate inactive Constraints.",601],["You lock a Constraint to allow it to move, rotate, or scale the GameObject. A locked Constraint takes control of the relevant parts of the Transform of the GameObject. You cannot manually move, rotate, or scale a GameObject with a locked Constraint. You also cannot edit the Constraint Settings.",601],["To manually edit the position, rotation, or scale of a GameObject, unlock its Constraint. If the Constraint is active while unlocked, the Constraint updates Constraint Settings for you as you move, rotate, or scale the constrained GameObject or its source GameObjects.",601],["When you add a Constraint component to a GameObject, the Constraint is inactive and unlocked by default. This lets you fine-tune the position, rotation, and scale of the constrained and source GameObjects before you activate and lock the Constraint.",601],["For convenience, the Activate and Zero buttons update Constraint Settings for you:",601],["Activate: Saves the current offset from the source GameObjects, then activates and locks the constrained GameObject__.__",601],["Zero: Resets the position, rotation, or scale to match the source GameObjects, then activates and locks the constrained GameObject.",601],["Animating and combining Constraints",601],["Use animation clips to modify the source GameObjects that your constrained GameObject links to. As the animation modifies the source GameObjects, the Constraint modifies your constrained GameObject.",601],["You can also animate properties in a Constraint component. For example, use a Parent Constraint to move a character’s sword from their hand to their back. First, add a Parent Constraint to the sword GameObject. In the Sources list, link the Constraint to the character’s hand and the character’s spine. To animate the sword, add keyframes for the weight of each source. To animate the sword moving from back to hand, add keyframes to change the weight of the hand from 0 to 1 with keyframes for the weight of the spine from 1 to 0.",601],["You can add more than one kind of Constraint component to the same GameObject. When updating the GameObject, Unity evaluates Constraint components from first to last as they appear in the Inspector window. A GameObject can only contain one Constraint component of the same kind. For example, you cannot add more than one Position Constraint.",601],["Importing Constraints",601],["When importing FBX files into the Unity Editor from Autodesk® Maya® and MotionBuilder®, you can include Constraints. Click the Animation tab of the Import Settings window and check Import Constraints:",601],["For every constraint in the FBX file, Unity automatically adds a corresponding Constraint component and links it to the correct GameObjects.",601],["Adding and editing Constraints",601],["To add a Constraint component:",601],["Select the GameObject to constrain.",601],["In the Inspector window, click Add Component search for the type of Constraint you want to add, and click it to add it.",601],["To add a source GameObject to your new Constraint, drag that GameObject from the Hierarchy (or from the Scene view) into the Sources list.",601],["Move, rotate, or scale the constrained GameObject and its source GameObjects.",601],["To activate the Constraint, click Activate or Zero, or check Is Active and Lock.",601],["To edit a Constraint component:",601],["Select the constrained GameObject in the Editor.",601],["To adjust the At Rest or Offset fields, use the Inspector window to expand Constraint Settings, uncheck Lock, then edit the values.",601],["To specify the axes that the Constraint updates, expand Constraint Settings, then check the properties in Freeze Axes.",601],["To add a source GameObject to the Constraint:",601],["If there are no empty slots in the Sources list, click + at the bottom of the list.",601],["Drag the GameObject you want to use as a Constraint source from your scene into the Sources list.",601],["To remove a source GameObject, select it in the Sources list and click the minus symbol (-) at the bottom of the list.",601],["To re-order the source GameObjects in the Sources list, click the double bar icon on the left side of each GameObject you want to move, and drag it up or down.",601],["Note: In the Sources list, order has no effect on the Position, Rotation, and Scale",601],["Constraints. However, order does affect how Parent and Aim Constraints move or rotate a",601],["GameObject.",601],["Check Is Active and Lock.",601],[" 2018-04-11 ",601],["Constraints added in 2018.1 NewIn20181",601],["ContentNamespaces",602],["A ContentNamespace can help you to organize content into separate categories.",602],["You can use the default ContentNamespace or create your own custom namespace with the ContentNamespace.GetOrCreateNamespace function.",602],["Note:** A ContentNamespace name must contain only alphanumeric characters and can't be longer than 16 characters.",602],["APIs that use ContentNamespaces:",602],["Continuous collision detection (CCD)",603],["Continuous collision detection (CCD) ensures that fast-moving bodies collide with objects instead of passing, or tunnelling, through those objects. Unity provides the following CCD methods:",603],["To use sweep-based CCD, select a RigidBody in the Inspector window and set Collision Detection to Continuous or Continuous Dynamic. For speculative CCD, set Collision Detection to Continuous Speculative.",603],["",603],["Sweep-based CCD",603],["Sweep-based CCD uses a Time Of Impact (TOI) algorithm to compute potential collisions for an object by sweeping its forward trajectory using its current velocity. If there are contacts along the object's moving direction, the algorithm computes the time of impact and moves the object until that time. The algorithm can perform sub steps from that time onwards, computing the velocity after TOI then re-sweep, at the expense of more CPU cycles.",603],["However, because this method relies on linear sweep, it ignores the body's angular motion, which can cause tunnelling effects when objects are rotating at speed. For example, the flipper in a pinball machine is fixed at one end and rotates around a fixed point. The flipper only has angular motion and no linear motion. Therefore, it can easily miss the collision with the pinball:",603],["Another issue with this method is performance. If you have a large number of high-speed objects with CCD in close proximity, the CCD overhead increases quickly because of the extra sweeping, and the physics engine has to perform more CCD sub-steps.",603],["",603],["Speculative CCD",603],["Speculative CCD works by increasing an object's broad-phase axis-aligned minimum bounding box (AABB), based on the object's linear and angular motion. The algorithm is speculative because it picks all potential contacts during the next physics step. All contacts are then fed into the solver, which makes sure that all contact constraints are satisfied so that an object does not tunnel through any collision.",603],["The following diagram shows how a sphere moving from t0 could have an expected position at t1 if there were no walls in its path. By inflating the AABB with its target pose, the speculative algorithm picks up two contacts with the n1 and n2 normals. The algorithm then tells the solver to respect those contacts so that the sphere doesn’t tunnel through the walls.",603],["Inflated AABB based on current velocity helps detect all potential contacts along the moving trajectory, which enables the solver to prevent tunnelling.",603],["Speculative CCD is generally cheaper than the sweep-based method because contacts are only computed during the collision detection phase, not during the solving and integrating phase. Also, because Speculative CCD expands the broad-phase AABB based on the object's linear and angular motion, it finds the contacts that sweep-based CCD can miss.",603],["However, speculative CCD can cause a ghost collision, where an object’s motion is affected by a speculative contact point when it shouldn’t be. This is because speculative CCD collects all potential contacts based on the closest point algorithm, so the contact normal is less accurate. This can often make high speed objects slide along tessellated collision features and jump up, even though they shouldn't. For example, in the following diagram, a sphere starts at t0 and moves horizontally towards the right, with a predicted position at t1 after integration. An inflated AABB overlaps the boxes b0 and b1, and the CCD yields two speculative contacts at c0 and c1. Because speculative CCD generates contacts using the closest point algorithm, c0 has a very inclined normal, which appears to be a ramp to the solver.",603],["Such a very inclined normal causes t1 to jump upward after integration, rather than moving straight forward:",603],["Speculative CCD can also cause tunneling because speculative contacts are only computed during the collision detection phase. During contact solving, if an object gains too much energy from the solver, it may end up outside the initial inflated AABB after integration. If there are collisions just outside the AABB, the object will tunnel right though.",603],["For example, the following diagram shows a sphere is moving left from t0 while a stick is rotating clockwise. If the sphere gains too much energy from the impact, it may end up exiting the inflated AABB (red dotted rectangle) at t1. If there are collisions just outside the AABB, as shown by the blue box below, the sphere may end up tunneling right through it. This is because the solver only computes contacts inside the inflated AABB, and collision detection isn’t performed during the solving and integrating phase.",603],["Speculative collision detection added in 2018.3 NewIn20183",603],["Cookies",604],["A cookie is a mask that you place on a Light to create a shadow with a specific shape or color, which changes the appearance and intensity of the Light. Cookies are an efficient way of simulating complex lighting effects with minimal or no runtime performance impact. Effects you can simulate with cookies include caustics, soft shadows, and light shapes.",604],["To apply a cookie to a Light in Unity, assign a texture to the Cookie field of a a Light component.",604],["Cookies may support different features depending on the render pipeline you are using. If you are using Universal Render Pipeline (URP) see the Light component reference for more information on using Cookies.",604],["Render pipeline compatibility",604],["See render pipeline feature comparison for more information about support for cookies across render pipelines.",604],["Enabling and disabling baked cookies",604],["For Projects created in Unity 2020.1 or above, baked cookies are enabled for Baked Lights and Mixed Lights in the Progressive Lightmapper by default. For Projects created in versions of Unity prior to 2020.1, baked cookies are disabled for Baked Lights and Mixed Lights in the Progressive Lightmapper by default. This is to provide backwards compatibility.",604],["You can toggle whether cookies are enabled for Baked Lights and Mixed Lights in the Progressive Lightmapper in the Editor settings window.",604],["Open the Project Settings window (Edit > Project Settings).",604],["Choose Editor to open the Editor settings.",604],["Navigate to the Graphics section.",604],["Toggle Enable baked cookies support.",604],["Additional information",604],["Support for baked light cookies added in 2020.1 NewIn20201",604],["Coroutines",605],["A coroutine allows you to spread tasks across several frames. In Unity, a coroutine is a method that can pause execution and return control to Unity but then continue where it left off on the following frame.",605],["In most situations, when you call a method, it runs to completion and then returns control to the calling method, plus any optional return values. This means that any action that takes place within a method must happen within a single frame update.",605],["In situations where you would like to use a method call to contain a procedural animation or a sequence of events over time, you can use a coroutine.",605],["However, it’s important to remember that coroutines aren't threads. Synchronous operations that run within a coroutine still execute on the main thread. If you want to reduce the amount of CPU time spent on the main thread, it's just as important to avoid blocking operations in coroutines as in any other script code. If you want to use multi-threaded code within Unity, consider the C# Job System.",605],["It’s best to use coroutines if you need to deal with long asynchronous operations, such as waiting for HTTP transfers, asset loads, or file I/O to complete.",605],["Coroutine example",605],["As an example, consider the task of gradually reducing an object’s alpha (opacity) value until it becomes invisible:",605],["```lang-csharp",605],["void Fade()",605],["Color c = renderer.material.color;",605],["for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)",605],["c.a = alpha;",605],["renderer.material.color = c;",605],["In this example, the Fade method doesn’t have the effect you might expect. To make the fading visible, you must reduce the alpha of the fade over a sequence of frames to display the intermediate values that Unity renders. However, this example method executes in its entirety within a single frame update. The intermediate values are never displayed, and the object disappears instantly.",605],["To work around this situation, you could add code to the Update function that executes the fade on a frame-by-frame basis. However, it can be more convenient to use a coroutine for this kind of task.",605],["In C#, you declare a coroutine like this:",605],["```lang-csharp",605],["IEnumerator Fade()",605],["Color c = renderer.material.color;",605],["for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)",605],["c.a = alpha;",605],["renderer.material.color = c;",605],["yield return null;",605],["A coroutine is a method that you declare with an IEnumerator return type and with a yield return statement included somewhere in the body. The yield return nullline is the point where execution pauses and resumes in the following frame. To set a coroutine running, you need to use the StartCoroutine function:",605],["```lang-csharp",605],["void Update()",605],["if (Input.GetKeyDown(\"f\"))",605],["StartCoroutine(Fade());",605],["The loop counter in the Fade function maintains its correct value over the lifetime of the coroutine, and any variable or parameter is preserved between yield statements.",605],["Coroutine time delay",605],["By default, Unity resumes a coroutine on the frame after a yield statement. If you want to introduce a time delay, use WaitForSeconds:",605],["```lang-csharp",605],["IEnumerator Fade()",605],["Color c = renderer.material.color;",605],["for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)",605],["c.a = alpha;",605],["renderer.material.color = c;",605],["yield return new WaitForSeconds(.1f);",605],["You can use WaitForSeconds to spread an effect over a period of time, and you can use it as an alternative to including the tasks in the Update method. Unity calls the Update method several times per second, so if you don’t need a task to be repeated quite so often, you can put it in a coroutine to get a regular update but not every single frame.",605],["For example, you might have an alarm in your application that warns the player if an enemy is nearby with the following code:",605],["```lang-csharp",605],["bool ProximityCheck()",605],["for (int i = 0; i < enemies.Length; i++)",605],["if (Vector3.Distance(transform.position, enemies[i].transform.position) < dangerDistance) {",605],["return true;",605],["return false;",605],["If there are a lot of enemies then calling this function every frame might introduce a significant overhead. However, you could use a coroutine to call it every tenth of a second:",605],["```lang-csharp",605],["IEnumerator DoCheck()",605],["for(;;)",605],["if (ProximityCheck())",605],["// Perform some action here",605],["yield return new WaitForSeconds(.1f);",605],["This reduces the number of checks that Unity carries out without any noticeable effect on gameplay.",605],["Stopping coroutines",605],["To stop a coroutine, use StopCoroutine and StopAllCoroutines. A coroutine also stops if you’ve set SetActive to false to disable the GameObject the coroutine is attached to. Calling Destroy(example) (where example is a MonoBehaviour instance) immediately triggers OnDisable and Unity processes the coroutine, effectively stopping it. Finally, OnDestroy is invoked at the end of the frame.",605],["Note:** If you’ve disabled a MonoBehaviour by setting enabled to false, Unity doesn't stop coroutines.",605],["Analyzing coroutines",605],["Coroutines execute differently from other script code. Most script code in Unity appears within a performance trace in a single location, beneath a specific callback invocation. However, the CPU code of coroutines always appears in two places in a trace.",605],["All the initial code in a coroutine, from the start of the coroutine method until the first yield statement, appears in the trace whenever Unity starts a coroutine. The initial code most often appears whenever the StartCoroutine method is called. Coroutines that Unity callbacks generate (such as Start callbacks that return an IEnumerator) first appear within their respective Unity callback.",605],["The rest of a coroutine’s code (from the first time it resumes until it finishes executing) appears within the DelayedCallManager line that’s inside Unity’s main loop.",605],["This happens because of the way that Unity executes coroutines. The C# compiler auto generates an instance of a class that backs coroutines. Unity then uses this object to track the state of the coroutine across multiple invocations of a single method. Because local-scope variables within the coroutine must persist across yield calls, Unity hoists the local-scope variables into the generated class, which remain allocated on the heap during the coroutine. This object also tracks the internal state of the coroutine: it remembers at which point in the code the coroutine must resume after yielding.",605],["Because of this, the memory pressure that happens when a coroutine starts is equal to a fixed overhead allocation plus the size of its local-scope variables.",605],["The code which starts a coroutine constructs and invokes an object, and then Unity’s DelayedCallManager invokes it again whenever the coroutine’s yield condition is satisfied. Because coroutines usually start outside of other coroutines, this splits their execution overhead between the yield call and DelayedCallManager.",605],["You can use the Unity Profiler to inspect and understand where Unity executes coroutines in your application. To do this, profile your application with Deep Profiling enabled, which profiles every part of your script code and records all function calls. You can then use the CPU Usage Profiler module to investigate the coroutines in your application.",605],["It’s best practice to condense a series of operations down to the fewest number of individual coroutines possible. Nested coroutines are useful for code clarity and maintenance, but they impose a higher memory overhead because the coroutine tracks objects.",605],["If a coroutine runs every frame and doesn't yield on long-running operations, it’s more performant to replace it with an Update or LateUpdate callback. This is useful if you have long-running or infinitely looping coroutines.",605],["Create functional layers in Unity",606],["Layers can help to organize the GameObjects in your scene. If you create a layer and assign GameObjects to it, you can edit how your GameObjects interact with other GameObjects, dependent on the layer.",606],["Add a new layer",606],["There are two ways you can create a new layer:",606],["Select the Tags and Layers window (main menu: Edit > Project Settings > Tags and Layers > Layers).",606],["Select a GameObject, select the Layer dropdown in the Inspector window, and select Add Layer from the menu.",606],["To remember the intended function for a layer, give it a descriptive name.",606],["Warning**: Layer 31 is used internally by the Editor’s Preview window mechanics. To prevent clashes, do not use this layer.",606],["Built-in layers",606],["When you open the layer menu, you can see that some layers are already named. Except for Default and Ignore Raycast, Unity no longer uses these built-in layers for many dedicated purposes; they exist mainly for backward compatibility:",606],["Layer number Layer name Description ",606],[":--------------- :------------------- :------------------- ",606],["1 TransparentFX Unity uses this layer in the flare system. ",606],["2 Ignore Raycast Physics ray cast APIs ignore this layer by default. ",606],["3 Water Unity's Standard Assets for Unity 2018.4 use this layer ",606],["4 UI The Unity UI uses this as the default layer for UI elements. ",606],["You can still use these layers, but you can't rename or delete them.",606],["Add GameObjects to a layer",606],["To assign a GameObject to a layer, select the GameObject, go to the Inspector window and select the dropdown next to Layer. This menu shows the layers that have names so you can select which one works best for your GameObject.",606],["You can only assign each GameObject to one layer, but you can add multiple GameObjects to one layer.",606],["Additional resources",606],["Creating cookies for the Built-in Render Pipeline",607],["The most convenient way to create a cookie for use with the Built-in Render Pipeline is to create a grayscale texture, import that texture to Unity, and then let Unity convert the texture's brightness to alpha.",607],["Note that in the Built-in Render Pipeline, cookies only use data from the alpha channel. This means that you can define a shape for a cookie, but not a color.",607],["To do this:",607],["Create a grayscale texture in the image editor of your choice. If you are creating a cookie to use with a Point Light, lay your texture out as a cubemap. If you are creating a cookie to use with a Spot Light or Directional Light, lay your texture out as a regular 2D texture.",607],["Place the texture in your Project's Asset folder to import the texture into Unity.",607],["In your Project view, select the Texture Asset that represents the texture. Unity displays the Texture import settings in the Inspector.",607],["In the Inspector, set the following values:",607],["Set Texture Type to Cookie",607],["Set Light Type to match the Type of the Light that you are creating the cookie for",607],["Set Alpha Source to From Gray Scale",607],["At the bottom of the Inspector, click Apply. Unity applies the updated import settings to the Texture Asset.",607],["Note that the pixels of a cookie does not need to be completely transparent or opaque, but can also incorporate any values in between. You can use in-between values to simulate dust or dirt in the path of the light, or to simulate caustic effects such as those produced by the ridges in a car's headlight.",607],["For more information on configuring the import settings for cookies in the Built-in Render Pipeline, see Texture Type: Cookie.",607],["Creating and Using Scripts",608],["The behavior of GameObjects is controlled by the Components that are attached to them. Although Unity's built-in Components can be very versatile, you will soon find you need to go beyond what they can provide to implement your own gameplay features. Unity allows you to create your own Components using scripts. These allow you to trigger game events, modify Component properties over time and respond to user input in any way you like.",608],["Unity supports the C# programming language natively. C# (pronounced C-sharp) is an industry-standard language similar to Java or C++.",608],["In addition to this, many other .NET languages can be used with Unity if they can compile a compatible DLL - see here for further details.",608],["Learning the art of programming and the use of these particular languages is beyond the scope of this introduction. However, there are many books, tutorials and other resources for learning how to program with Unity. See the Learning section of our website for further details.",608],["Creating Scripts",608],["Unlike most other assets, scripts are usually created within Unity directly. You can create a new script from the Create menu at the top left of the Project panel or by selecting Assets > Create > C# Script from the main menu.",608],["The new script will be created in whichever folder you have selected in the Project panel. The new script file's name will be selected, prompting you to enter a new name.",608],["It is a good idea to enter the name of the new script at this point rather than editing it later. The name that you enter will be used to create the initial text inside the file, as described below.",608],["Anatomy of a Script file",608],["When you double-click a script Asset in Unity, it will be opened in a text editor. By default, Unity will use Visual Studio, but you can select any editor you like from the External Tools panel in Unity's preferences (go to Unity > Preferences).",608],["The initial contents of the file will look something like this:",608],["using UnityEngine;",608],["using System.Collections;",608],["public class NewBehaviourScript : MonoBehaviour {",608],["// Use this for initialization",608],["void Start () {",608],["// Update is called once per frame",608],["void Update () {",608],["A script makes its connection with the internal workings of Unity by implementing a class which derives from the built-in class called MonoBehaviour. You can think of a class as a kind of blueprint for creating a new Component type that can be attached to GameObjects. Each time you attach a script component to a GameObject, it creates a new instance of the object defined by the blueprint. The name of the class is taken from the name you supplied when the file was created. The class name and file name must be the same to enable the script component to be attached to a GameObject.",608],["The main things to note, however, are the two functions defined inside the class. The Update function is the place to put code that will handle the frame update for the GameObject. This might include movement, triggering actions and responding to user input, basically anything that needs to be handled over time during gameplay. To enable the Update function to do its work, it is often useful to be able to set up variables, read preferences and make connections with other GameObjects before any game action takes place. The Start function will be called by Unity before gameplay begins (ie, before the Update function is called for the first time) and is an ideal place to do any initialization.",608],["Note to experienced programmers: you may be surprised that initialization of an object is not done using a constructor function. This is because the construction of objects is handled by the editor and does not take place at the start of gameplay as you might expect. If you attempt to define a constructor for a script component, it will interfere with the normal operation of Unity and can cause major problems with the project.",608],["Controlling a GameObject",608],["As noted above, a script only defines a blueprint for a Component and so none of its code will be activated until an instance of the script is attached to a GameObject. You can attach a script by dragging the script asset to a GameObject in the hierarchy panel or to the inspector of the GameObject that is currently selected. There is also a Scripts submenu on the Component menu which will contain all the scripts available in the project, including those you have created yourself. The script instance looks much like any other Component in the Inspector:",608],["Once attached, the script will start working when you press Play and run the game. You can check this by adding the following code in the Start function:-",608],["// Use this for initialization",608],["void Start ()",608],["Debug.Log(\"Hello world!\");",608],["Debug.Log** is a simple command that just prints a message to Unity's console output. If you press Play now, you should see the message at the bottom of the main Unity editor window and in the Console window (menu: Window > General > Console).",608],["2018-03-19  ",608],["MonoDevelop replaced by Visual Studio from 2018.1",608],["Create components with scripts",609],["Components add functionality to a GameObject. To customize and add to the components in the Editor, you can write your own scripts.",609],["To create a component with script, you need to write the script and then attach it to a GameObject. Scripts attached to a GameObject appear in the GameObject’s Inspector window because the Editor treats them as built-in components.",609],["For information on how to create a script, see Creating and Using Scripts.",609],["Additional Resources",609],["The Component Scripting API page.",609],["Use Components.",609],["Creating models outside of Unity",610],["This section contains information on creating models in external applications, and preparing them for import into Unity.",610],["Page Description ",610],["",610],["Model file formats Supported and recommended file formats for 3D models. ",610],["Support for proprietary model file formats Detailed information on Unity's support for proprietary model file formats. ",610],["Preparing your model files for export Best practices for preparing your model for export from your external application. ",610],["Creating models for optimal performance Best practices for creating models for optimal rendering and animation performance. ",610],["Creating models for animation How to create models for use with Unity's Animation System. ",610],["World building",611],["Unity provides a selection of tools that let you create environmental features such as landforms and vegetation.",611],["In this section, you can find information on:",611],["Page Description ",611],["",611],["Terrain Information on Unity's built-in Terrain features. These consist of tools that let you create and modify landscapes in the Unity Editor, and runtime features that optimize Terrain rendering. ",611],["Terrain Tools Information on the Terrain Tools package, which provides additional Editor tooling functionality on top of the built-in Terrain features. ",611],["Tree Editor Information on the Tree Editor tool, which lets you design Trees directly in the Editor. ",611],["Additional resources",611],["Create Gameplay",612],["You can use Unity to design and create games. There are some basic workflows and concepts in Unity that can help you use Unity.",612],["There are some core concepts you need in order to create gameplay mechanics, and you might need to write scripts. For more information on how to create a work with scripts, see the Scripting section.",612],["Topic Description ",612],[":-------------------- :----------------------- ",612],["Scenes Understand scenes and how to create and work with scenes in Unity. ",612],["GameObjects Understand GameObjects and how they work with components. ",612],["Prefabs Learn how to create and work with Prefabs in Unity. ",612],["Layers Understand and use layers and layermasks in Unity. ",612],["Constraints Learn different types of constraint components that you can attach to GameObjects. ",612],["Rotation and orientation in Unity Understand how Unity calculates and works with rotation and orientation. ",612],["Lights Understand the effect of lights on a scene. ",612],["Cameras Learn how you can use cameras in your game. ",612],["Cross-Platform Considerations Understand how different platforms can affect your game. ",612],["Publishing Builds Understand how to publish your builds. ",612],["Troubleshooting View solutions to some common problems that occur in Unity. ",612],["Additional Resources",612],["For a tutorial on how to get started with Unity, see the Unity Essentials pathway on Unity Learn.",612],["To see a list of templates you can use to create a game, see Templates.",612],["Creating Prefabs",613],["In Unity's Prefab system, Prefab Assets act as templates. You create Prefab Assets in the Editor, and they are saved as an Asset in the Project window. From Prefab Assets, you can create any number of Prefab instances. Prefab instances can either be created in the editor and saved as part of your Scenes, or instantiated at runtime.",613],["",613],["Creating Prefab Assets",613],["To create a Prefab Asset, drag a GameObject from the Hierarchy window into the Project window. The GameObject, and all its components and child GameObjects, becomes a new Asset in your Project window. Prefabs Assets in the Project window are shown with a thumbnail view of the GameObject, or the blue cube Prefab icon, depending on how you have set up your Project window.",613],["This process of creating the Prefab Asset also turns the original GameObject into a Prefab instance. It is now an instance of the newly created Prefab Asset. Prefab instances are shown in the Hierarchy in blue text, and the root GameObject of the Prefab is shown with the blue cube Prefab icon, instead of the red, green and blue GameObject icon.",613],["",613],["Creating multiple Prefab Assets",613],["To create multiple Prefab Assets at once, drag multiple GameObjects from the Hierarchy window into the Project window. This functionality is the same as in the above paragraph.",613],["If you drag multiple GameObjects that are not already Prefabs into the Project window, Unity creates new original Prefab Assets for each one without any additional steps.",613],["If any of the GameObjects you drag into the Project Window are existing Prefab variants or Model Variants, Unity displays a dialog box which asks you to confirm whether you want to create new Prefab Assets or new variants from the GameObjects. The content of this dialog box changes depending on the number and type of GameObjects you drag into the Project window.",613],["",613],["Creating Prefab instances",613],["You can create instances of the Prefab Asset in the Editor by dragging the Prefab Asset from the Project view to the Hierarchy or Scene view.",613],["You can also create instances of Prefabs at runtime using scripting. For more information, see Instantiating Prefabs.",613],["Replacing existing prefabs",613],["You can replace a Prefab by dragging a new GameObject from the Hierarchy window and dropping it on top of an existing Prefab asset in the Project window.",613],["If you are replacing an existing Prefab, Unity tries to preserve references to the Prefab itself and the individual parts of the Prefab such as child GameObjects and Components. To do this, it matches the names of GameObjects between the new Prefab and the existing Prefab that you are replacing.",613],["Note:* *Because this matching is done by name only, if there are multiple GameObjects with the same name in the Prefab's hierarchy, it is not possible to predict which will be matched. Therefore if you need to ensure your references are preserved when saving over an existing prefab, you must ensure all GameObjects within the Prefab have unique names.",613],["Also note:* *You may encounter a similar problem in the case of preserving references to existing Components when you save over an existing Prefab, if a single GameObject within the Prefab has more than one of the same Component type attached. In this case it is not possible to predict which of them will be matched to the existing references.",613],["2018-07-31 ",613],["Nested Prefabs and Prefab Variants added in 2018.3",613],["Scenes",614],["Scenes are where you work with content in Unity. They are assets that contain all or part of a game or application. For example, you might build a simple game in a single scene, while for a more complex game, you might use one scene per level, each with its own environments, characters, obstacles, decorations, and UI. You can create any number of scenes in a project.",614],["When you create a new project and open it for the first time, Unity opens a sample scene that contains only a Camera and a Light.",614],["For information about working with scenes, see Creating, loading, and saving scenes.",614],["Scene Templates",614],["Unity uses scene templates to create new scenes. Scene templates are assets that are stored in a project. They are similar to scenes, but are designed to be copied rather than used directly.",614],["For information about creating and using scene templates, see Scene templates.",614],["",614],["The New Scene dialog",614],["The New Scene dialog opens when you create a new scene from the File menu: (File > New Scene) or the Ctrl/Cmd + n shortcut. Use it to create new scenes from specific scene templates in your project, and get information about existing templates.",614],["The New Scene dialog",614],["Search field: find available scene templates by name.",614],["Templates: a list of all available templates in the project.",614],["Template details: displays information about the currently selected template.",614],["Command bar: provides commands and options for creating a new scene from the selected template.",614],["Creating a new scene",614],["To create a new scene from the New Scene dialog, select a template from the templates list, and click Create. For a detailed description of creating a scene this way, see Creating a new scene from the New Scene dialog.",614],["Pinning templates",614],["Pinned templates appear before other templates in the New Scene dialog's template list. The last template pinned appears at the top of the list.",614],["Click any template's pin icon to pin it.",614],["You can also pin a template when you edit its properties. In the scene template Inspector, enable the Pin in New Scene Dialog option.",614],["Locating and editing templates",614],["When you select a template in the New Scene dialog, the details pane displays the path to the template (1 in the image below).",614],["To highlight the template in the Project window, select the Locate link (2 in the image below).",614],["To open the template in an Inspector window and edit its properties, select the Edit link (3 in the image below).",614],["Multi-scene editing",614],["You can open multiple scenes for editing at the same time. For details, see Multi-scene editing.",614],["Cross-Platform Considerations",615],["Most of Unity's API and project structure is identical for all supported platforms and sometimes a project can be rebuilt to run on different devices. However, fundamental differences in the hardware and deployment methods mean that parts of a project may not port between platforms without change. This page lists some common cross-platform issues and suggestions for solving them.",615],["Input",615],["The best example of different behaviour between platforms is in the input methods offered by the hardware.",615],["Keyboard and joypad",615],["The Input.GetAxis function is convenient on desktop platforms to consolidate keyboard and joypad input. This function isn't suitable for mobile platforms that rely on touchscreen input. The standard desktop keyboard input is only suitable for porting typed text to mobile devices. You can add a layer of abstraction to your input code if you are considering porting to other platforms in the future. For example, if you are making a driving game, then you might create your own input class and wrap the Unity API calls in your own functions:",615],["// Returns values in the range -1.0 .. +1.0 (== left .. right).",615],["function Steering() {",615],["return Input.GetAxis(\"Horizontal\");",615],["// Returns values in the range -1.0 .. +1.0 (== accel .. brake).",615],["function Acceleration() {",615],["return Input.GetAxis(\"Vertical\");",615],["var currentGear: int;",615],["// Returns an integer corresponding to the selected gear.",615],["function Gears() {",615],["if (Input.GetKeyDown(\"p\"))",615],["currentGear++;",615],["else if (Input.GetKeyDown(\"l\"))",615],["currentGear--;",615],["return currentGear;",615],["Wrapping the API calls in a class puts them into a single source file and makes the calls easy to locate and replace. You should design your input functions according to the logical meaning of the inputs in your game. This helps isolate the rest of the game code from the specific method of input used with a particular platform.",615],["For example, you could modify the Gears function above so that the actual input comes from touches on the screen of a mobile device. You can use an integer to represent the chosen gear works for all platforms, but if you mix platform-specific API calls with the rest of the code, you could cause problems. You can also use platform dependent compilation to combine the different implementation of the input functions in the same source file and avoid manual swaps.",615],["Touches and clicks",615],["The Input.GetMouseButtonXXX functions are designed to have an obvious interpretation on mobile devices. The screen reports a simple touch as a left click and the Input.mousePosition property gives the position of the touch, as long as the finger is touching the screen. Games with simple mouse interactions can often work transparently between the desktop and mobile platforms.",615],["Conversion is often much less straightforward than this. For example, a desktop game can make use of more than one mouse button and a mobile game can detect multiple touches on the screen at a time.",615],["To help manage this, you can represent input with logical values that are then used by the rest of the game code.",615],["For example, you might replace a pinch gesture to zoom on a mobile device with a +/- keystroke on the desktop; the input function could return a float value that specifies the zoom factor. Likewise, it might be possible to use a two-finger tap on a mobile to replace a right button click on the desktop. However, if the properties of the input device are an integral part of the game then it may not be possible to remodel them on a different platform. This might mean that you can't port the game or that you need to modify the input or gameplay extensively.",615],["Accelerometer, compass, gyroscope and GPS",615],["These inputs derive from the mobility of handheld devices and so may not have any meaningful equivalent on the desktop. However, some use cases simply mirror standard game controls and are ported easily. For example, a driving game might implement the steering control from the tilt of a mobile device (determined by the accelerometer). In cases like this, the input API calls are usually easy to change, so you can replace the accelerometer input with keystrokes.",615],["However, it might be necessary to recalibrate inputs or vary the game difficulty to adjust to the different input method. Tilting a device is slower and more strenuous than pressing keys, which makes it harder to concentrate on the display. This might make the game more difficult to master on a mobile device, so it might be appropriate to slow down gameplay or allow more time per level. This requires designing the game code to adjust these factors.",615],["Memory, storage and CPU performance",615],["Mobile devices have less storage, memory and CPU power available than desktop machines and so a game may be difficult to port simply because its performance isn't acceptable on lower powered hardware. If you are pushing the limits of your desktop hardware, then the game probably isn't a good candidate for porting to a mobile platform.",615],["Storage requirements",615],["Video, audio, and textures can use a lot of storage space. You need to manage storage effectively if you want to port your game. Storage space (which often also corresponds to download time) is usually not an issue on desktop machines, but it can be limited on mobile devices. Mobile app stores often impose a limit on the maximum size of a submitted product. It might require some planning to address these concerns during your game development.",615],["For example, you may need to provide cut-down versions of assets for mobiles to save space. Another possibility is that the game may need to be designed so that large assets can be downloaded on demand rather than being part of the initial download of the application.",615],["Automatic memory management",615],["Unity automatically handles the recovery of unused memory from \"dead\" objects and often happens unnoticed on desktop machines. However, the lower memory and CPU power on mobile devices means that garbage collections can be more frequent, impacting performance and causing unwanted pauses in gameplay. Even if the game runs in the available memory, it might be necessary to optimize code to avoid garbage collection pauses.",615],["For more information, see the memory management page.",615],["CPU power",615],["A game that runs well on a desktop machine might experience poor framerate on a mobile device because the mobile CPU struggles with the game complexity. Pay attention to code efficiency when a project is ported to a mobile platform.",615],["C# compiler",616],["To compile C# source code in a Unity Project, the Unity Editor uses a C# compiler.",616],["C# compiler C# language version ",616],["",616],["Roslyn C# 9.0 ",616],["The Editor passes a default set of options to the C# compiler. To pass additional options in your project, see the documentation on Platform Dependent Compilation.",616],["Unsupported features",616],["C# 9.0",616],["Suppress emitting localsinit flag",616],["Covariant return types",616],["Module Initializers",616],["Extensible calling conventions for unmanaged function pointers",616],["Init only setters",616],["If you try to use unsupported features in your project, compilation generates errors.",616],["Record support",616],["C# 9 init and record support comes with a few caveats.",616],["The type System.Runtime.CompilerServices.IsExternalInit is required for full record support as it uses init only setters, but is only available in .NET 5 and later (which Unity doesn't support). Users can work around this issue by declaring the System.Runtime.CompilerServices.IsExternalInit type in their own projects.",616],["You shouldn't use C# records in serialized types because Unity's serialization system doesn't support C# records.",616],["Unmanaged function pointer support",616],["Unity supports unmanaged functions pointers as introduced in C# 9, but it doesn't support extensible calling conventions. The following example code provides more detailed information about how to correctly use unmanaged function pointers.",616],["The following example targets Windows platforms and requires the Allow 'unsafe' code to be enabled in the Player Settings menu. For more information about C#'s unsafe context, see Microsoft's unsafe (C# Reference) documentation or Microsoft's Unsafe code, pointer types, and function pointers documentation.",616],["```lang-csharp",616],["using System;",616],["using System.Runtime.InteropServices;",616],["using UnityEngine;",616],["public class UnmanagedFunctionPointers : MonoBehaviour",616],["[DllImport(\"kernel32.dll\")]",616],["static extern IntPtr LoadLibrary(string lpLibFileName);",616],["[DllImport(\"kernel32.dll\")]",616],["static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);",616],["// You must enable \"Allow 'unsafe' code\" in the Player Settings",616],["unsafe void Start()",616],["if UNITY_EDITOR_WIN UNITY_STANDALONE_WIN",616],["// This example is only valid on Windows",616],["// Get a pointer to an unmanaged function",616],["IntPtr kernel32 = LoadLibrary(\"kernel32.dll\");",616],["IntPtr getCurrentThreadId = GetProcAddress(kernel32, \"GetCurrentThreadId\");",616],["// The unmanaged calling convention",616],["delegate* unmanaged[Stdcall] getCurrentThreadIdUnmanagedStdcall = (delegate* unmanaged[Stdcall])getCurrentThreadId;",616],["Debug.Log(getCurrentThreadIdUnmanagedStdcall());",616],["endif",616],["CullingGroup API",617],["CullingGroup offers a way to integrate your own systems into Unity's culling and LOD pipeline. This can be used for many purposes; for example:",617],["Simulating a crowd of people, while only having full GameObjects for the characters that are actually visible right now",617],["Building a GPU particle system driven by Graphics.DrawProcedural, but skipping rendering particle systems that are behind a wall",617],["Tracking which spawn points are hidden from the camera in order to spawn enemies without the player seeing them 'pop' into view",617],["Switching characters from full-quality animation and AI calculations when close, to lower-quality cheaper behaviour at a distance",617],["Having 10,000 marker points in your scene and efficiently finding out when the player gets within 1m of any of them",617],["The API works by having you provide an array of bounding spheres. The visibility of these spheres relative to a particular camera is then calculated, along with a 'distance band' value that can be treated like a LOD level number.",617],["Getting Started with CullingGroup",617],["There are no components or visual tools for working with CullingGroups; they are purely accessible via script.",617],["A CullingGroup can be constructed using the 'new' operator:",617],["CullingGroup group = new CullingGroup();",617],["To have the CullingGroup perform visibility and/or distance calculations, specify the camera it should use:",617],["group.targetCamera = Camera.main;",617],["Create and populate an array of BoundingSphere structures with the positions and radii of your spheres, and pass it to SetBoundingSpheres along with the number of spheres that are actually in the array. The number of spheres does not need to be the same as the length of the array. Unity recommends that you create an array that is big enough to hold the most spheres you will ever have at one time, even if the initial number of spheres you actually have in the array is very low. Using a larger array allows you to add or remove spheres as needed without the computationally expensive process of resizing the array at runtime.",617],["BoundingSphere[] spheres = new BoundingSphere[1000];",617],["spheres[0] = new BoundingSphere(Vector3.zero, 1f);",617],["group.SetBoundingSpheres(spheres);",617],["group.SetBoundingSphereCount(1);",617],["At this point, the CullingGroup will begin computing the visibility of the single sphere each frame.",617],["To clean up the CullingGroup and free all memory it uses, dispose of the CullingGroup via the standard .NET IDisposable mechanism:",617],["group.Dispose();",617],["group = null;",617],["Receiving results via the onStateChanged callback",617],["The most efficient way to respond to spheres changing their visibility or distance state is to use the onStateChanged callback field. Set this to a function which takes a CullingGroupEvent structure as an argument; it will then be called after culling is complete, for each sphere that has changed state. The members of the CullingGroupEvent structure tell you about the previous and new states of the sphere.",617],["group.onStateChanged = StateChangedMethod;",617],["private void StateChangedMethod(CullingGroupEvent evt)",617],["if(evt.hasBecomeVisible)",617],["Debug.LogFormat(\"Sphere {0} has become visible!\", evt.index);",617],["if(evt.hasBecomeInvisible)",617],["Debug.LogFormat(\"Sphere {0} has become invisible!\", evt.index);",617],["Receiving results via the CullingGroup Query API",617],["In addition to the onStateChanged delegate, the CullingGroup provides an API for retrieving the latest visibility and distance results of any sphere in the bounding spheres array. To check the states of a single sphere, use the IsVisible and GetDistance methods:",617],["bool sphereIsVisible = group.IsVisible(0);",617],["int sphereDistanceBand = group.GetDistance(0);",617],["To check the states of multiple spheres, you can use the QueryIndices method. This method scans a continuous range of spheres to find ones that match a given visibility or distance state.",617],["// Allocate an array to hold the resulting sphere indices - the size of the array determines the maximum spheres checked per call",617],["int[] resultIndices = new int[1000];",617],["// Also set up an int for storing the actual number of results that have been placed into the array",617],["int numResults = 0;",617],["// Find all spheres that are visible",617],["numResults = group.QueryIndices(true, resultIndices, 0);",617],["// Find all spheres that are in distance band 1",617],["numResults = group.QueryIndices(1, resultIndices, 0);",617],["// Find all spheres that are hidden in distance band 2, skipping the first 100",617],["numResults = group.QueryIndices(false, 2, resultIndices, 100);",617],["Remember that the information retrieved by the query API is only updated when the camera used by the CullingGroup actually performs its culling.",617],["CullingGroup API Best Practices",617],["When considering how you might apply CullingGroup to your project, consider the following aspects of the CullingGroup design.",617],["Using visibility",617],["All the volumes for which CullingGroup computes visibility are defined by bounding spheres - in practice, a position (the center of the sphere) and a radius value. No other bounding shapes are supported, for performance reasons. In practice this means you will be defining a sphere that fully encloses the object you are interested in culling. If a tighter fit is needed, consider using multiple spheres to cover different parts of the object, and making decisions based on the visibility state of all of the spheres.",617],["In order to evaluate visibility, the CullingGroup needs to know which camera visibility should be computed from. Currently a single CullingGroup only supports a single camera. If you need to evaluate visibility to multiple cameras, you should use one CullingGroup per camera and combine the results.",617],["The CullingGroup will calculate visibility based on frustum culling and static occlusion culling only. It will not take dynamic objects into account as potential occluders.",617],["Using distance",617],["The CullingGroup is capable of calculating the distance between some reference point (for example, the position of the camera or player) and the closest point on each sphere. This distance value is not provided to you directly, but is instead quantized using a set of threshold values that you provide, in order to calculate a discrete 'distance band' integer result. The intention is that you interpret these distance bands as 'close range', 'medium range', 'far range', and so on.",617],["The CullingGroup will provide callbacks when an object moves from being in one band to being in another, giving you the opportunity to do things like change the behaviour of that object to something less CPU-intensive.",617],["Any spheres that are beyond the last distance band will be considered to be invisible, allowing you to easily construct a culling implementation that completely deactivates objects that are very far away. If you do not want this behaviour, simply set your final threshold value to be at an infinite distance away.",617],["Only a single reference point is supported per CullingGroup.",617],["Performance and design",617],["The CullingGroup API does not give you the ability to make changes to your scene and then immediately request the new visibility state of a bounding sphere. For performance reasons, the CullingGroup only calculates new visibility information during execution of culling for the camera as a whole; it's at this point that the information is available to you, either via a callback, or via the CullingGroup query API. In practice, this means you should approach CullingGroup in an asynchronous manner.",617],["The bounding spheres array you provide to the CullingGroup is referenced by the CullingGroup, rather than copied. This means you should keep a reference to the array that you pass to SetBoundingSpheres, and that you can modify the contents of this array without needing to call SetBoundingSpheres again. If you need multiple CullingGroups that calculate visibility and distances for the same set of spheres - for example, for multiple cameras - then it's efficient to have all the CullingGroups share the same bounding sphere array instance.",617],["Assembly definition and packages",618],["You must associate scripts inside a package to an assembly definition file (.asmdef). Assembly definition files are the Unity equivalent to a C# project in the .NET ecosystem. You must set explicit references in the assembly definition file to other assemblies (whether in the same package or in external packages). Refer to Assembly Definitions for more details.",618],["Use these conventions for naming and storing your assembly definition files to ensure that the compiled assembly filenames follow the .NET Framework Design Guidelines:",618],["Store Editor-specific code under a root editor assembly definition file:",618],["Editor/<company-name>.<package-name>.Editor.asmdef",618],["Store runtime-specific code under a root runtime assembly definition file:",618],["Runtime/<company-name>.<package-name>.asmdef",618],["Configure related test assemblies for your editor and runtime scripts:",618],["Tests/Editor/<company-name>.<package-name>.Editor.Tests.asmdef",618],["Tests/Runtime/<company-name>.<package-name>.Tests.asmdef",618],["To get a more general view of a recommended package folder layout, refer to Package layout.",618],["Example file",618],["In this example, the assembly definition file uses references to its own assemblies, and an assembly that's part of a package dependency (HDRP):",618],["```lang-json",618],["\"name\": \"MyCompany.MyPackageName\",",618],["\"references\": [",618],["\"MyCompany.MyPackageName.Tools\",",618],["\"MyCompany.MyPackageName.Planes\",",618],["\"Unity.RenderPipelines.HighDefinition.Runtime\"",618],["],",618],["\"includePlatforms\": [],",618],["\"excludePlatforms\": [],",618],["\"allowUnsafeCode\": false,",618],["\"overrideReferences\": false,",618],["\"precompiledReferences\": [],",618],["\"autoReferenced\": true,",618],["\"defineConstraints\": [],",618],["\"versionDefines\": [",618],["\"name\": \"com.unity.render-pipelines.high-definition\",",618],["\"expression\": \"7.1.0\",",618],["\"define\": \"HDRP_7_1_0_OR_NEWER\"",618],["},",618],["\"name\": \"com.unity.modules.particlesystem\",",618],["\"expression\": \"1.0.0\",",618],["\"define\": \"USING_PARTICLE_SYSTEM\"",618],["],",618],["\"noEngineReferences\": false",618],["For details about the structure of an assembly definition file, refer to Assembly Definition File Format.",618],["Additional resources",618],["Documenting your package",619],["Most packages need some form of explanation to help users have the best experience and optimize its use. This page provides some tips for how to structure the information and format the documentation.",619],["",619],["Structure of the information",619],["After the title of the package, you should give a basic overview of what the package does and/or what it contains. Following the overview, include instructions for installing, and any system requirements and/or limitations. You can also provide links for getting help and providing feedback, including public forums or knowledge bases, and helpdesk contacts.",619],["After this preliminary information, you can provide more in-depth workflows, description of the user interface or directory listings for samples, and then more advanced topics. It's best to provide reference pages near the end.",619],["Section Description ",619],["",619],["Overview Provide a brief, high-level explanation of the package. ",619],["Package contents Include the location of important files you want the user to know about. For example, if this is a sample package containing textures, models, and materials separated by sample group, you might want to provide the folder location of each group. ",619],["Installation instructions You can point to the official Package Manager installation instructions, but if you have any special installation requirements, such as installing samples, add them here. ",619],["Requirements This is a good place to add hardware or software requirements, including which versions of the Unity Editor this package is compatible with. ",619],["Limitations If your package has any known limitations, you can list them here. If not, or if the limitations are trivial, exclude this section. ",619],["Workflows Include a list of steps that the user can easily follow that demonstrates how to use the feature. You can include screenshots to help describe how to use the feature. ",619],["Advanced topics This is where you can provide detailed information about what you are providing to users. This is ideal if you don't want to overwhelm the user with too much information up front. ",619],["Reference If you have a user interface with a lot of properties, you can provide the details in a reference section. Using tables is a good way to provide quick access to specific property descriptions. ",619],["Samples For packages that include sample files, you can include detailed information on how the user can use these sample files in their projects and scenes. ",619],["Tutorials If you want to provide walkthroughs for complicated procedures, you can also add them here. Use step-by-step instructions and include images if they can help the user understand. ",619],["",619],["Documentation format",619],["Markdown is a lightweight format commonly used in packages. Many repository hosting services (such as GitHub and Bitbucket) support it for READMEs and documentation sites. You can provide an MD file in the Documentation~ folder under your package root so that if your package's user clicks the View documentation link in the details pane of Unity's Package Manager, the user's default MD viewer opens the file.",619],["Alternatively, you can use your own website to host your documentation. To set the location for the View documentation link to point to your own website, set it with the documentationUrl property in your package.json file.",619],["If you decide to use a Markdown file to document your package, you can find more information about how to write MD files from any number of help sites, such as:",619],["The Markdown Guide",619],["Package layout",620],["This is the package layout recommended for custom packages:",620],["",620],["├── package.json",620],["├── README.md",620],["├── CHANGELOG.md",620],["├── LICENSE.md",620],["├── Third Party Notices.md",620],["├── Editor",620],["│ ├── ..Editor.asmdef",620],["│ └── EditorExample.cs",620],["├── Runtime",620],["│ ├── ..asmdef",620],["│ └── RuntimeExample.cs",620],["├── Tests",620],["│ ├── Editor",620],["│ │ ├── ..Editor.Tests.asmdef",620],["│ │ └── EditorExampleTest.cs",620],["│ └── Runtime",620],["│ ├── ..Tests.asmdef",620],["│ └── RuntimeExampleTest.cs",620],["├── Samples~",620],["│ ├── SampleFolder1",620],["│ ├── SampleFolder2",620],["│ └── ...",620],["└── Documentation~",620],["└── .md",620],["Many official Unity packages also implement this structure.",620],["Location Description ",620],["---------------- ------------------------------------------------------------ ",620],["package.json The package manifest, which defines the package dependencies and other metadata. ",620],["README.md Developer package documentation. This is generally documentation to help developers who want to change the package or push a new change on the package's main branch. ",620],["CHANGELOG.md Description of package changes in reverse chronological order. It's good practice to use a standard format, like Keep a Changelog. ",620],["LICENSE.md Contains the package license text. Usually the Package Manager copies the text from the selected SPDX list website. ",620],["Third Party Notices.md Contains information that's required to meet legal requirements. ",620],["Editor/ Editor platform-specific Assets folder. Unlike Editor folders under Assets, this is only a convention and doesn't affect the Asset import pipeline. Refer to Assembly definition and packages to properly configure Editor-specific assemblies in this folder. ",620],["Runtime/ Runtime platform-specific Assets folder. This is only a convention and doesn't affect the Asset import pipeline. Refer to Assembly definition and packages to properly configure runtime assemblies in this folder. ",620],["Tests/ Folder to store any tests included in the package. ",620],["Tests/Editor/ Editor platform specific tests folder. Refer to Assembly definition and packages to properly configure Editor-specific test assemblies in this folder. ",620],["Tests/Runtime/ Runtime platform specific tests. Refer to Assembly definition and packages to properly configure runtime test assemblies in this folder. ",620],["Samples~/ Folder to store any samples included in the package. ",620],["Documentation~ Folder to store any documentation included in the package. ",620],["",620],["Unity ignores the contents of any folder name that ends with the ~ character, and doesn't track them with .meta files. However, you need to include .meta files for the Editor, Runtime, and Tests folders and their contents in order for them to work properly. For more information on .meta files and how Unity uses them for tracking, refer to Asset workflow.",620],["Meeting legal requirements",621],["You can use the Third Party Notices.md and LICENSE.md files to make sure your package meets any legal requirements. For example, here is a sample license file from the Unity Timeline package:",621],["```lang-markdown",621],["Unity Timeline copyright © 2017-2019 Unity Technologies ApS",621],["Licensed under the Unity Companion License for Unity-dependent projects--see Unity Companion License.",621],["Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions.",621],["Third Party Notices",621],["If your package has third-party elements, you can include the licenses in a Third Party Notices.md file. You can include a Component Name, License Type, Version Number, and Provide License Details section for each license you want to include. For example:",621],["```lang-markdown",621],["This package contains third-party software components governed by the license(s) indicated below:",621],["Component Name: Semver",621],["License Type: \"MIT\"",621],["Component Name: MyComponent",621],["License Type: \"MyLicense\"",621],["Note**: The URL in the Provide License Details section should point to a location that contains the reproduced license and the copyright information (if applicable). If the license governs a specific version of the component, give the URL of that version, if possible.",621],["Naming your package",622],["There are two names for a package: the official name you register the package with; and the user-facing display name that users can see in the Editor.",622],["The display name should be brief but provide some indication of what the package contains. Otherwise, the Unity Package Manager imposes no restrictions on the display name.",622],["The official name must conform to the Unity Package Manager naming convention, which uses reverse domain name notation. The name must:",622],["Start with <domain-name-extension>.<company-name> (for example, com.example or net.example), even if your company or website name begins with a digit.",622],["Be no more than 50 characters if you want it to be visible in the Editor. If the package name does not need to appear in the Editor, the Unity Package Manager imposes a limit of 214 characters or less.",622],["Contain only lowercase letters, digits, hyphens(-), underscores (_), and periods (.)",622],["To indicate nested namespaces, suffix the namespace with an additional period. For example, \"com.unity.2d.animation\" and \"com.unity.2d.ik\".",622],["For example, \"com.unity.2d.animation\" and \"com.unity.2d.ik\" are the names of two Unity 2D packages, but a custom package developer at https://example.net might create a package named \"net.example.physics\". Use your own company name in your package names. Do not use the “unity” prefix in your own package names.",622],["Note**: These naming restrictions apply only to the package names themselves and do not need to match the namespace in your code. For example, you could use Project3dBase as a namespace in a package called net.example.3d.base.",622],["",622],["Creating samples for packages",623],["As of 2019.1, you can add samples to a package. A sample might be a piece of example code, some shaders and textures, some animation, or any other files that you can usually find under the project's Assets folder.",623],["When a user opens the Package Manager window and selects a package containing samples, an Import button appears in the package's details pane for each sample in the package. When the user clicks the Import button, the Package Manager copies the whole subfolder structure for that sample under the project's Assets folder.",623],["To add samples to your package:",623],["Put the asset files or example C# code files under the Samples~ folder. You can have more than one sample in a package: each subfolder of the Samples~ folder contains one sample.",623],["Note**: The tilde character (~) tells Unity to ignore the contents the Samples~ folder. Such folders aren't tracked with .meta files.",623],["Add a JSON object for each sample under the samples array in your package.json manifest file.",623],["",623],["Location of sample files",623],["You can add your sample assets under subfolders of the Samples~ folder of your package. For example, a package with shader samples might look something like this:",623],["MyPackage",623],["├── package.json",623],["└── Samples~",623],["├── SamplesHDRP",623],["│ ├── Textures",623],["│ ├── MossyRock.bmp",623],["│ └── SandyRock.bmp",623],["│ └── Shader",623],["│ ├── Lit Texture Blend HDRP.ShaderGraph",623],["│ └── Lit Vertex Color HDRP.ShaderGraph",623],["└── SamplesStandard",623],["│ ├── Textures",623],["│ ├── MossyRock.bmp",623],["│ └── SandyRock.bmp",623],["│ └── Shader",623],["│ ├── StandardTextureBlend.shader",623],["│ └── StandardVertexColor.shader",623],["└── SamplesUniversalRP",623],["├── Textures",623],[" ├── MossyRock.bmp\n",623],[" └── SandyRock.bmp\n",623],["└── Shader",623],["├── Lit Texture Blend URP.ShaderGraph",623],["└── Lit Vertex Color URP.ShaderGraph",623],["",623],["Include your samples in the manifest",623],["Add a JSON array to the package.json file called samples. For each sample, add a JSON object containing at least the displayName and the path to the samples folder:",623],["Value: Description: ",623],["------------- ------------------------------------------------------------ ",623],["displayName The name of the sample as it appears in the package details on the Package Manager window. ",623],["description A brief description of what the sample demonstrates or contains. This is just for the package manifest. The description doesn't appear in the interface, even as a tooltip. ",623],["path The path from the Samples~ folder to the sample's root folder. ",623],["For example, using the same structure as the example for Location of sample files, the samples section would look similar to this:",623],["```lang-json",623],["\"samples\": [",623],["\"displayName\": \"HDRP Shaders\",",623],["\"description\": \"Contains sample shaders for the High Definition render pipeline\",",623],["\"path\": \"Samples~/SamplesHDRP\"",623],["},",623],["\"displayName\": \"URP Shaders\",",623],["\"description\": \"Contains sample shaders for the Universal render pipeline\",",623],["\"path\": \"Samples~/SamplesUniversalRP\"",623],["},",623],["\"displayName\": \"Standard RP Shaders\",",623],["\"description\": \"Contains sample shaders for the Standard render pipeline\",",623],["\"path\": \"Samples~/SamplesStandard\"",623],["Sharing your package",624],["You can set up your own package registry server if you want to control package access to a limited number of users, or if you need to set up package registry servers in a closed network organization.",624],["When you have finished developing your package and you want to share it with other users, you have several options:",624],["",624],["\n\n- \n\n",624],["Compressed file You can distribute a zip file to other Unity users. That way, they can decompress the zip file to a local folder on their own computer and install the package from disk. ",624],["Tarball You can distribute a tarball to other Unity users. That way, they can install the package from the local tarball directly. ",624],["Git URL You can distribute a link to your Git repository, using one of the supported protocols. Then users can install your package using its Git URL, because the Unity Package Manager can fetch packages from Git repository hosting services like GitHub and GitLab. ",624],["Scoped Registry You can set up a package registry server to host your package and then publish it to that registry using the npm publish command. Your package's consumers can then set up a scoped registry configuration in their project to fetch your custom packages from your own package registry.Unity Package Manager supports registries based on the npm protocol. Make sure that whatever registry server you choose implements the /-/v1/search or /-/all endpoints. Warning: When you set up your own package registry server, make sure you use only those features that are compatible with Unity's Scoped Registries. For example, Unity doesn't support namespaces using the @scope notation that npm supports.Most of the time, anonymous access within a local network is adequate to fulfill your security requirements. However, if you want more control over who accesses packages via scoped registries, you can enable npm authentication for specific users. Your package's customers can then configure their scoped registries to use their npm authentication tokens. ",624],["Additional resources",624],["Adding tests to a package",625],["As with any kind of development, it's good practice to add tests to your package. There are three things you must do to set up tests on your package:",625],["Create the C# test files and put them under the Tests folder.",625],["Create asmdef files for your tests.",625],["Enable tests for your package.",625],["",625],["Location of test files",625],["You can add your test files to the Tests folder of your package in the Editor and Runtime subfolders. For example, a simple package with tests might look something like this:",625],["",625],["├── package.json",625],["├── Editor",625],["│ ├── ..Editor.asmdef",625],["│ └── EditorExample.cs",625],["├── Runtime",625],["│ ├── ..asmdef",625],["│ └── RuntimeExample.cs",625],["└── Tests",625],["├── Editor",625],["│ ├── ..Editor.Tests.asmdef",625],["│ └── EditorExampleTest.cs",625],["└── Runtime",625],["├── ..Tests.asmdef",625],["└── RuntimeExampleTest.cs",625],["Each of those subfolders must contain an .asmdef file, which provides references to the Editor and Runtime assemblies. The assembly definition files also provide a reference to the test assembly files. For more information, refer to Assembly definition files for tests.",625],["",625],["Assembly definition files for tests",625],["You can edit assembly definition files directly. You need to make sure to add the following references:",625],["Attribute Type Description ",625],["--------------------------- ---------------- ------------------------------------------------------------ ",625],["name String The name of the assembly without the file extension. ",625],["references Array of Strings References to the Editor and Runtime assemblies. Assembly definition files require different references, depending on the test type: - For Editor tests, add a reference to the package’s Editor and Runtime assemblies. - For Runtime tests, add a reference to the package’s Runtime assembly only. ",625],["optionalUnityReferences Array of Strings This list of Unity references must include \"TestAssemblies\" to mark the assembly as a test assembly. This adds references to the nunit.framework.dll and UnityEngine.TestRunner.dll libraries to the Assembly Definition. ",625],["includePlatforms Array of Strings For the Editor test, this list of platforms must include the \"Editor\" platform. ",625],["Tip**: You can also edit the assembly definition files in the Inspector. Refer to Assembly Definitions for more information.",625],["Editor file example",625],["The editor test .asmdef file looks like this:",625],["```lang-json",625],["\"name\": \"MyCompany.MyPackage.Editor.Tests\",",625],["\"references\": [",625],["\"MyPackage.Editor\",",625],["\"MyPackage\"",625],["],",625],["\"optionalUnityReferences\": [",625],["\"TestAssemblies\"",625],["],",625],["\"includePlatforms\": [",625],["\"Editor\"",625],["],",625],["\"excludePlatforms\": []",625],["Runtime file example",625],["The runtime test .asmdef file looks like this:",625],["```lang-json",625],["\"name\": \"MyCompany.MyPackage.Tests\",",625],["\"references\": [",625],["\"MyPackage\"",625],["],",625],["\"optionalUnityReferences\": [",625],["\"TestAssemblies\"",625],["],",625],["\"includePlatforms\": [],",625],["\"excludePlatforms\": []",625],["",625],["Enabling tests for a package",625],["For embedded packages, you don't need to explicitly enable tests because embedded packages are in development.",625],["However, for other types of dependencies, you need to add the testables attribute to the Project manifest and add the names of packages that have tests you want to run. That includes direct and indirect dependencies of the Project. For example:",625],["```lang-json",625],["\"dependencies\": {",625],["\"com.unity.some-package\": \"1.0.0\",",625],["\"com.unity.other-package\": \"2.0.0\",",625],["\"com.unity.yet-another-package\": \"3.0.0\",",625],["},",625],["\"testables\": [\"com.unity.some-package\", \"com.unity.other-package\"]",625],["This example adds tests for the com.unity.some-package and com.unity.other-package packages in Unity's Test Framework package.",625],["Note**: You might need to import the package again, because the test framework doesn't always immediately pick up changes to the testables attribute.",625],["Customizing your workspace",626],["You can customize your Layout of Views by click-dragging the Tab of any View to one of several locations. Dropping a Tab in the Tab Area of an existing window will add the Tab beside any existing Tabs. Alternatively, dropping a Tab in any Dock Zone will add the View in a new window.",626],["Tabs can also be detached from the Main Editor Window and arranged into their own floating Editor Windows. Floating Windows can contain arrangements of Views and Tabs just like the Main Editor Window.",626],["Whenever you’re working in tabbed views, the “active” tab (the tab that has focus) has a thin blue stripe at the top:",626],["When you open more tabs than Unity can fit in a view’s tab area, small navigation arrows appear. Click them to scroll through the open tabs:",626],["At any time, you can right-click the tab of any view to view additional options like Maximize and Close Tab, or add a new tab to the same window. You can also middle-click an open tab to close it.",626],["Saving and Restoring Layouts",626],["When you've created a Layout of Editor Windows, you can Save the layout and restore it any time. You do this by expanding the Layout drop-down (found on the Toolbar) and choosing Save Layout.... Name your new layout and save it, then restore it by simply choosing it from the Layout drop-down.",626],["Active tab stripe and tab scroll arrows added in [2018.3] (https://docs.unity3d.com/2018.X/Documentation/Manual/30_search.html?q=newin2018X) NewIn2018X",626],["Creating custom packages",627],["The Unity Package Manager is the official package management system for Unity. It does the following:",627],["Allows Unity to distribute new features and update existing features quickly and easily.",627],["Provides a platform for users to discover and share reusable components.",627],["Promotes Unity as an extendable and open platform.",627],["You can use the Package Manager to define project dependencies, resolve package dependencies, download packages, add packages, and integrate content in your projects.",627],["For general information on what a package is and how the Unity Package Manager works, see the Packages documentation.",627],["Overview",627],["Packages can contain the following:",627],["C# scripts",627],["Assemblies",627],["Native plug-ins",627],["Models, Textures, animation and audio clips, and other assets.",627],["Note**: Package Manager doesn't support streaming assets in packages. Use the Addressables package instead.",627],["Each package also contains a Package manifest file that includes information such as the package name, its version, a list of its dependencies, and the URL to its repository.",627],["",627],["Procedure",627],["To create a new package:",627],["Create an empty shell for the package using one of these methods:",627],["Set up an embedded package.",627],["Set up a local package.",627],["Make sure the layout of your folder structure follows the package layout convention for Unity packages. For example, if you have Editor and Runtime libraries, make sure you store them under the Editor and Runtime folders.",627],["If your package includes code, make sure the package layout you created has the necessary assembly definition files. For information about creating and defining assembly definition files, see Assembly definition and packages. For additional information, see Assembly definitions.",627],["Note**: If the console window reports a warning after adding an assembly definition file, save your project, close it, then reopen it.",627],["Add your tools, libraries, and any assets your package requires.",627],["Add tests to your package. Tests are essential for ensuring that the package works as expected in different scenarios:",627],["Write all your Editor Tests in Tests/Editor.",627],["Write all your Play Mode Tests in Tests/Runtime.",627],["If you have samples for your package, add them to the proper samples subfolder.",627],["Note**: Packages can contain only samples, but you can also include samples as part of a tool or template package using the same layout and JSON structure.",627],["You can update the CHANGELOG.md file every time you publish a new version. Every new feature or bug fix should have a trace in this file. For more details on the chosen changelog format, see the Keep a Changelog documentation.",627],["This step is optional for packages that you don't share, but strongly recommended for shared packages, so that users know which version best suits their needs.",627],["Tip**: You can provide a link to an external web page where you host this package's changelog by setting the changelogUrl property in your package's package.json manifest file.",627],["You can include licenses and third-party notices in the LICENSE.md and THIRD PARTY NOTICES.md files.",627],["This step is optional for packages that you don't share, but strongly recommended for shared packages, so that your users don't misuse your packages or violate any third-party licenses.",627],["Tip**: You can provide a link to an external web page where you host this package's licensing and third-party notices by setting the licensesUrl property in your package's package.json manifest file.",627],["Document your package.",627],["Tip**: You can provide a link to an external web page where you host this package's documentation by setting the documentationUrl property in your package's package.json manifest file.",627],["Share your package.",627],["",627],["Creating a new embedded package",627],["Follow these instructions if you want to create a custom package inside your project folder.",627],["Note**: These instructions are part of the larger procedure for Creating custom packages.",627],["Open the Unity Hub, and create an empty project on your computer.",627],["You can also use an existing project on your computer, and embed the package under your project or install the package from a local folder. However, starting with a new project makes the package contents less prone to errors.",627],["Using your computer's file manager (for example the Windows File Explorer or the macOS Finder), navigate to your project folder and locate the Packages subdirectory.",627],["Create a new subdirectory for your package inside the Packages folder using a name that matches the package name and follows the naming conventions. For example, if your package name is com.example.mypackage, create a subdirectory called com.example.mypackage.",627],["Note**: This is particularly important if your package contains assets, because the AssetDatabase looks for an asset path that matches Packages/<your-package-name>/Assets, regardless of the actual folder name.",627],["Open your preferred text editor and create a JSON file called package.json in the root of the package folder.",627],["Fill out all required and recommended fields in the package.json file. You can use the package manifest example as a reference.",627],["When you reopen Unity, the new package appears in the Package Manager window and in the Project window, where you can view and modify the package contents. If you select the package.json file in the Project window, you can also modify its JSON values directly in the Inspector window.",627],["Return to the main procedure to complete the creation of your package.",627],["",627],["Creating a new local package",627],["Follow these instructions if you want to create a custom package outside your project folder.",627],["Note**: These instructions are part of the larger procedure for Creating custom packages.",627],["Using your computer's file manager (for example the Windows File Explorer or the macOS Finder), create a folder for your package.",627],["You can also use an existing location if you've already created some content for your package.",627],["Open your preferred text editor and create a JSON file called package.json in the root of the package folder.",627],["Fill out all required and recommended fields in the package.json file, making sure the name property follows the naming conventions. You can use the package manifest example as a reference.",627],["In Unity, create a new project or open an existing project.",627],["Open the Package Manager window and follow the instructions for installing a local package, using the package.json file you just created. This step is essential for ensuring the creation of the required .meta file.",627],["The new package appears in the Package Manager window and in the Project window, where you can view and modify the package contents. If you select the package.json file in the Project window, you can also modify its JSON values directly in the Inspector window.",627],["Return to the main procedure to complete the creation of your package.",627],["Sprite Editor: Custom Physics Shape",628],["Use the Sprite Editor’s Custom Physics Shape module to edit a Sprite’s Physics Shape, which defines the initial shape of the Sprite’s Collider 2D Mesh. You can further refine the Physics Shape through the Collider’s component settings.",628],["To open the Custom Physics Shape module, in the Project window, select the Sprite you want to edit. To open the Sprite in the Sprite Editor window, in the Sprite’s Inspector window, select the Sprite Editor button.",628],["To open the Custom Physics Shape editor, in the Sprite Editor window, open the upper-left drop-down menu and select the Custom Physics Shape module.",628],["The Custom Physics Shape editor",628],["Custom Physics Shape editor properties",628],["Property Function ",628],["--------------------- ------------------------------------------------------------ ",628],["Snap Snap control points to the nearest pixel. ",628],["Outline Tolerance Use this slider to control how tightly and accurately the generated outline follows the outline of the Sprite texture. At the minimum value (0), the Sprite Editor generates a basic outline around the Sprite. At the maximum value (1), the Sprite Editor generates an outline that follows the outline of the Sprite as closely as possible. ",628],["Generate When you click this button, Unity automatically creates a physics shape outline based on the Outline Tolerance value you set. ",628],["Copy After you have generated or set up a custom physics shape, click this Copy button to duplicate the custom physics shape. Leaving the Custom Physics Shape module or closing the Sprite Editor removes the copied physics shape from memory. ",628],["Paste Use this button to paste a copied physics shape to the currently selected Sprite. If you have not used the Copy function to copy a physics shape, this button is not available. To Paste a copied custom physics shape to another Sprite, in the Project window select the Sprite while the Custom Physics Shape editor window is open. Then click the Paste button to paste the copied physics shape to the new Sprite. When you paste the physics shape, if a point in the physics shape is larger than the Sprite’s frame, Unity clamps the point to be inside the Sprite’s frame. ",628],["Paste All Use this button to paste a copied physics shape to all Sprites in the Sprite Editor window, regardless of selection. If you have not used the Copy function to copy a physics shape, this button is not available. Use this function to apply the same physics shape to multiple Sprites in the same Texture (such as when a Texture has its Sprite Mode set to ‘Multiple’). When you paste the physics shape, if a point in the physics shape exceeds the Sprite’s frame, Unity clamps the point to be inside that Sprite’s frame. ",628],["Revert Undoes any unsaved recent changes made in the editor window. To save changes, click Apply first. ",628],["Apply Select this button to save all changes made in the editor window. ",628],["Using the Custom Physics Shape editor",628],["The Custom Physics Shape editor provides various functions to allow you to create or generate the physics shape of the Sprite. There are two ways to create a custom physics shape: have Unity automatically generate the shape, or manually creating and editing it in the editor window.",628],["Generating the physics shape ",628],["To have Unity automatically generate a physics shape that follows the shape of the original Sprite texture, and that also takes into account transparent areas in the texture, click the Generate button. However, you can adjust how tightly the generated physics shape follows the Sprite texture by adjusting the *Outline Tolerance *slider.",628],["Adjust the Outline Tolerance slider to refine the outline of the physics shape that Unity generates. Increasing the value increases how closely the outline follows the shape of the Sprite texture. Leaving the slider at 0 generates a physics shape that more loosely follows the Sprite texture.",628],["After adjusting the Outline Tolerance value, to have Unity automatically generate the physics shape based on the slider settings, click Generate. If you adjust the slider value after generating an outline, to regenerate the outline based on the updated slider value, click *Generate *again.",628],["Manually editing the physics shape ",628],["You can create your own custom physics shape and edit it in two ways. The first way is by automatically generating an outline, and then moving the control points of the generated outline to further refine it. Alternatively, click and drag over any space in the Custom Physics Shape editor window to create a rectangular outline with four control points and begin refining the outline by moving the control points or adding and removing them.",628],["Moving a control point",628],["To adjust the shape of the Mesh outline, click and drag the control points. When you hover over a control point, it turns blue to indicate that you can select it. Click and drag the control point to different positions to adjust the shape of the physics shape outline. You can select multiple control points at once by clicking and dragging the cursor over an area to select all control points within that area. You can then re-position or remove all selected control points.",628],["Adding/removing control points ",628],["To add a control point, place the cursor over the edge of the outline. A preview of the control point appears along the outline’s edge. Click to add a new control point at that location. To remove a control point, select it and press the Del/Command+Del keys.",628],[" ",628],["------------------------------------------------------------ ------------------------------------------------------------ ",628],["Fig.1: Transparent control point. Fig.2: Click to create a new control point. ",628],["Moving edges",628],["To select the edges of the physics shape instead of its control points, hold the Control/Ctrl key. Click and drag the highlighted edge to move it into new positions to affect the physics shape.",628],[" ",628],["----------------------------------------------------------- ----------------------------------------------------------- ",628],["Fig.1: Select the edge of the outline. Fig.2: Drag and move the edge freely once selected. ",628],["Working with multiple outlines",628],["A Sprite’s physics shape can contain multiple separate outlines. This is useful if only specific areas of a Sprite need a Collider 2D Mesh for collision. For example, you might want a character to only respond to collisions on specific areas of its Sprite as part of your game’s damage mechanic.",628],["To create a new rectangular outline with four control points, click and drag over any empty space in the Sprite Editor window. Repeat this step to create additional outlines. You can refine each outline in the same way you would for a single Physics Shape outline.",628],[" ",628],["------------------------------------------------------------ ------------------------------------------------------------ ",628],["Fig. 1: Click and drag to create a four-point box. Fig. 2: Box physics shape with four control points. ",628],[" ",628],["Fig. 3: Click and drag again for another box. Fig. 4: Repeat to create more separate outlines. ",628],["Additional tips",628],["If you have edited the outline of a Sprite that existing GameObjects already refer to, right-click the title of the Collider 2D component and select Reset. This updates the shape of the Collider 2D Meshes.",628],["Copy and Paste editor window functions added in 2020.1 NewIn20201",628],[" 2018-05-24 ",628],["Custom scripting symbols",629],["C# directives** allow you to selectively include or exclude code from compilation, based on whether certain scripting symbols are defined or not defined.",629],["In addition to the built-in scripting symbols (relating to Platform, the Editor Version, and other miscellaneous system environment scenarios), you can specify your own custom scripting symbols, either using the Editor UI, via scripting, or via an asset file.",629],["Setting scripting symbols via the Editor",629],["To set or remove define directives via the Editor, go to Edit > Project Settings > Player. Then in the Other Settings panel, scroll down to Script Compilation.",629],["You can add and remove your own custom scripting symbols to the Scripting Define Symbols list by using the + and - buttons, and typing the name of your new symbols into the fields. When you select Apply, your new scripting symbols are applied, and Unity recompiles the scripts in your project using these new symbols.",629],["The Copy Defines button copies the current set of custom scripting symbols from the list into your clipboard as a string of semicolon-separated values.",629],["Defining scripting symbols via script",629],["You can use the following API to define scripting symbols:",629],["Setting scripting symbols for Editor script compilation",629],["If you need to define scripting symbols via scripts in the Editor so that your Editor scripts are affected by the change, you must use PlayerSettings.SetScriptingDefineSymbolsForGroup. However, there are some important details to note about how this operates.",629],["Important:** this method does not take immediate effect. Calling this method from script does not immediately apply and recompile your scripts. For your directives to take effect based on a change in scripting symbols, you must allow control to be returned to the Editor, where it then asynchronously reloads the scripts and recompiles them based on your new symbols and the directives which act on them.",629],["So, for example, if you use this method in an Editor script, then immediately call BuildPipeline.BuildPlayer on the following line in the same script, at that point Unity is still running your Editor scripts with the old set of scripting symbols, because they have not yet been recompiled with the new symbols. This means if you have Editor scripts which run as part of your BuildPlayer execution, they run with the old scripting symbols and your player might not build as you expected.",629],["Setting scripting symbols in batch mode",629],["The asynchronous nature of Unity's compilation mentioned above is also important to understand if you are writing Editor scripts which will run in batch mode in the Unity Editor on a continuous integration (CI) server. This is because when the Editor runs in batch mode, it runs \"headless\", so there is no editor loop which would cause it to recompile with the new scripting symbols. Because of this, you should not use Editor scripts to set scripting symbols within a batch mode CI server because the scripts will not be recompiled, so they will not be applied.",629],["Instead, if you need specific symbols to be defined in an Editor running in batch mode, you must ensure the editor is launched with the correct symbols defined from the start. You can do this by specifying the symbols using a csc.rsp asset file instead of using editor scripts, as described below.",629],["Setting scripting symbols via an asset file",629],["You can set custom scripting symbols via a text asset in your project. To do this you must add a text file that defines the custom scripting symbols named csc.rsp in the root of your project’s Assets folder. This special file is read by Unity at startup and applied before any code is compiled.",629],["As an example, if you include the single line -define:UNITY_DEBUG in your csc.rsp file, the symbol UNITY_DEBUG is included as a globally defined scripting symbol for C# scripts, except for Editor scripts.",629],["Every time you make changes to .rsp files, you need to recompile in order for them to be effective. You can do this by updating or reimporting a single script file.",629],["Note:** If you want to modify only global scripting symbols, add them to the Scripting Define Symbols in the Editor via the Player Settings window (as described above), because this covers all the compilers. If you choose the .rsp files instead, you need to provide one file for every compiler Unity uses.",629],["Deactivate GameObjects",630],["To temporarily remove a GameObject from your scene, you can mark the GameObject as inactive.",630],["To do this, navigate to the Inspector window and clear the checkbox to the left of the GameObject's name. The names of deactivated GameObjects appear faded in the Hierarchy window.",630],["To deactivate a GameObject through script, use the SetActive method. To see if an object is active or inactive, check the activeSelf property.",630],["If you deactivate a GameObject, coroutines attached to it are stopped.",630],["Deactivate a parent GameObject",630],["If you deactivate a parent GameObject, you also deactivate all of its child GameObjects because the deactivation overrides the activeSelf setting on all child GameObjects. The child GameObjects return to their original state when you reactivate the parent.",630],["To know if a child GameObject is active in your scene, use the activeInHierarchy property.",630],["Note:** The activeSelf property is not always accurate if you check a child GameObject because even if it is set to active, you might have set one of its parent GameObjects to inactive.",630],["Debugging DirectX 12 shaders with PIX",631],["PIX is a performance tuning and debugging tool by Microsoft, for Windows developers. It offers a range of modes for analyzing an application’s performance, and includes the ability to capture frames of DirectX projects from an application for debugging.",631],["Use PIX to investigate issues in Windows 64-bit (x86_64) Standalone or Universal Windows Platform applications.",631],["To install PIX, download and run the Microsoft PIX installer and follow the instructions.",631],["For more information about PIX, see Microsoft’s PIX Introduction and PIX Documentation.",631],["Debugging DirectX shaders with PIX",631],["You should use a built version of your Unity application to capture frames, rather than a version running in the Unity Editor. This is because you need to launch the target application from within PIX to capture GPU frames.",631],["Using a development build adds additional information to PIX, which makes navigating the scene capture easier.",631],["Create a project with a debug-enabled Shader",631],["To debug the shader with source code in PIX, you need to insert the following pragma into the shader code: #pragma enable_d3d11_debug_symbols",631],["Example",631],["The following walkthrough uses a basic example to demonstrate the entire process.",631],["Create a basic project:",631],["Create a new Unity project (see the Hub documentation on Projects).",631],["In the top menu, go to Assets > Create > Shader > Standard Surface Shader. This creates a new shader file in your Project folder.",631],["Select the shader file, and in the Inspector window, click Open. This opens the shader file in your scripting editor. Insert #pragma enable_d3d11_debug_symbols into the shader code, underneath the other #pragma lines.",631],["Create a new Material (menu: Assets > Create > Material).",631],["In the Material’s Inspector window, select the Shader dropdown, go to Custom, and select the shader you just created.",631],["Create a 3D cube GameObject (menu: GameObject > 3D Object > Cube).",631],["Assign your new Material to your new GameObject. To do this, drag the Material from the Project window to the 3D cube.",631],["Capture a frame from a Windows Standalone application:",631],["Go to File > Build Settings, and under Platform, select Windows, Mac, Linux. Set the Target Platform to Windows, set the Architecture to Intel 64-bit, and click the Development Build checkbox.",631],["Click Build.",631],["Launch PIX.",631],["Click on Home, then Connect",631],["Select Computer localhost _to use your PC for capturing, and click _connect.",631],["In the Select Target Process box, select the Launch Win32 tab and use the Browse button to select your application’s executable file. Note that here, \"Win32\" means a non-UWP application; your application file must be a 64-bit binary file.",631],["Enable Launch for GPU Capture, then use the Launch button to start the application.",631],["Use your application as normal until you are ready to capture a frame. To capture a frame, press Print Screen on your keyboard, or click the camera icon on the GPU Capture Panel. A thumbnail of the capture appears in the panel. To open the capture, click the thumbnail.",631],["To start analysis on the capture, click the highlighted text or the small Play icon on the menu bar.",631],["Select the Pipeline tab and use the Events window to navigate to a draw call you are interested in.",631],["In the lower half of the Pipeline tab, select a render target from the OM (Output Merger) list to view the output of draw call. Select a pixel on the object you want to debug. Note that you can right-click a pixel to view the draw call history, as a way of finding draw calls you are interested in.",631],["Select Debug Pixel on the Pixel Details panel.",631],["On the debug panel, use the Shader Options to select which shader stage to debug.",631],["Use the toolbar or keyboard shortcuts to step through the code.",631],["For more information on debugging shaders with PIX, see Microsoft’s video series PIX on Windows, particularly Part 5 - Debug Tab.",631],["For more information on GPU capture in PIX, see Microsoft’s documentation on GPU Captures.",631],["2018-09-17 ",631],["Dedicated Server AssetBundles",632],["You can apply the Dedicated Server optimizations to AssetBundles starting in Unity Editor version 2023.1.0a21. You can build an AssetBundle through scripting. Refer to the section on AssetBundle for more information on building AssetBundles in general.",632],["To build an AssetBundle to undergo the same Dedicated Server optimizations as discussed for the Player, specify the subtarget field in the BuildAssetBundlesParameters struct to be StandaloneBuildSubtarget.Server when calling the BuildAssetBundle method. Refer to the following example:",632],["```csharp",632],["BuildAssetBundlesParameters serverAssetBundleParameters =",632],["outputPath = /some example asset path here, not entirely relevant/,",632],["options = BuildAssetBundleOptions.None,",632],["targetPlatform = BuildTarget.StandaloneWindows64, //alternately, the MacOS or Linux build targets, any desktop platform",632],["subtarget = StandaloneBuildSubtarget.Server",632],["};",632],["BuildPipeline.BuildAssetBundles(serverAssetBundleParameters);",632],["After you build the AssetBundle, you can load it by a Player at runtime. Refer to Using AssetBundles Natively.",632],["Warning**: While the AssetBundle loading process checks if the AssetBundle target platform matches the target platform of the player, it doesn't check the AssetBundle subtarget. Make sure to not load an AssetBundle built for a non-server standalone player. Don't try to load an AssetBundle that targets the Dedicated Server subtarget (or vice-versa).",632],["Build your application for Dedicated Server",633],["You can create a Dedicated Server build through either of the following ways:",633],["",633],["Unity Editor",633],["To create a Dedicated Server build through the Unity Editor:",633],["From the Unity Editor, select File > Build Settings.",633],["Select Dedicated Server.",633],["Tip**: You can further configure the Dedicated Server build through the Player settings.",633],["",633],["Scripting",633],["To create a Dedicated Server build through a script:",633],["Set buildPlayerOptions.subtarget to (int)StandaloneBuildSubtarget.Server. For example, refer to the following code snippet.",633],["```csharp",633],["buildPlayerOptions.target = BuildTarget.StandaloneWindows;",633],["// SubTarget expects an integer.",633],["buildPlayerOptions.subtarget = (int)StandaloneBuildSubtarget.Server;",633],["Refer to Creating and Using Scripts to learn more.",633],["",633],["Command line",633],["To create a Dedicated Server build through the command line, use the -standaloneBuildSubtarget Server argument. For example, refer to the following code snippet.",633],["```bash",633],["-buildTarget Linux64 -standaloneBuildSubtarget Server",633],["Get started with Dedicated Server",634],["Learn about the prerequisites to get started with building your application on Dedicated Server platform.",634],["Topic Description ",634],["Requirements Describes what you need to install before you proceed to build your application. ",634],["Player settings Lists the Player settings that aren't relevant for the Dedicated Server platform while also describing the settings that you can customize to suit your needs. ",634],["Optimizations Provides information about optimizing the build with default and manual optimizations to reduce resource utilization. ",634],["Additional resources",634],["Introduction to Dedicated Server",635],["Dedicated Server refers to a computer that's optimized to run server applications.",635],["The Dedicated Server build target is a sub-target of the three Desktop Platforms (Linux, macOS, and Windows) that’s optimized for running as a dedicated server. Using Dedicated Server build target, you can cut back on your server builds' CPU, memory, and disk space requirements.",635],["Server builds often contain unnecessary assets and compiled code for headless server processes. The build data might include artifacts such as audio files, textures, meshes, and shaders. In a multiplayer context, rendering and asset management processes occur unnecessarily when building and executing server runtimes.",635],["The goal of the Dedicated Server build target is to reduce the resource demand of server builds, including the disk size, the size in memory, and the CPU usage. Most of the optimizations take place through stripping code and assets that aren’t necessary for a server build.",635],["Additional resources",635],["Dedicated Server optimizations",636],["Dedicated Server build target performs optimizations for networked applications. The build target applies some optimizations automatically by default, while others are optional because their impact depends on the game’s implementation.",636],["Automatic optimizations",636],["By default, the Dedicated Server build target performs the following optimizations:",636],["",636],["Audio Subsystem",636],["The Dedicated Server build target deactivates the Audio Subsystem because builds don’t need audio support when running as a dedicated server. Disabling the Audio Subsystem reduces CPU load.",636],["",636],["Lighting threads",636],["The Dedicated Server build target removes process threads related to lighting because there’s no need to render lighting on a server build.",636],["",636],["Player loop callbacks",636],["The Dedicated Server build target disables the following PlayerLoop callbacks because they aren’t necessary for a server build.",636],["Player update loop registration of SendMouseEvents",636],["Player update loop registration of UpdateAllRenderers",636],["Player update loop registration of PlayerUpdateCanvases",636],["",636],["GPU-only assets",636],["The Dedicated Server build target removes GPU-only assets such as texture pixel data for textures and mesh vertex data, that the server doesn’t need. The build target preserves assets with CPU Read/Write access and assets in the Resource Folders.",636],["Textures and meshes imported with CPU Read/Write access disabled are only accessible by the GPU, whereas the CPU can't access them. Because the Dedicated Server build target doesn’t initialize a graphics device, there’s no need to include this data. Excluding this data reduces the memory usage of the executable.",636],["Refer to the following lists to learn more about which assets the Dedicated Server build target removes and preserves.",636],["Removed**:",636],["Textures with CPU Read/Write access disabled.",636],["Vertex data for meshes with CPU Read/Write access disabled.",636],["Preserved**:",636],["Textures with CPU Read/Write access enabled.",636],["Vertex data for meshes with CPU Read/Write access enabled.",636],["Assets in the protected Resource Folders.",636],["Texture metadata (such as the texture size value).",636],["Mesh data that internal systems that run on the CPU require (such as physics), even if CPU Read/Write is disabled.",636],["Note**: To learn more about CPU Read/Write access, refer to Texture.isReadable and Mesh.isReadable.",636],["Additional optimizations",636],["You also have an option to apply additional optimizations through Enable Dedicated Server Optimizations property in the Player Settings window. These optimizations remove assets such as Shaders. However, applying these optimizations may cause issues if the removed assets are referenced in the game’s implementation.",636],["Assets removed**:",636],["Shaders",636],["In addition to the automatic optimizations applied through the Dedicated Server build target, you can apply the following implementation-specific optimizations manually.",636],["Use conditional compilation to selectively include and exclude code depending on the build target.",636],["Separate player-specific and server-specific code through class implementations.",636],["Remove additional items from the PlayerLoop in server builds. Refer to PlayerLoop and PlayerLoopSystem.",636],["Additional resources",636],["Dedicated Server Player settings",637],["The Player settings for the Dedicated Server Player are a subset of the Desktop target Player settings. For a description of the general Player settings, refer to Player Settings.",637],["Due to the headless and server application nature of the Dedicated Server, only the options in the Other Settings section are applicable. You can find documentation for the same in the Other Settings section:",637],["The following options don't apply:",637],["Icon",637],["Resolution and Presentation",637],["Splash Image",637],["Publishing Settings",637],["",637],["Other Settings",637],["This section allows you to customize a range of options organized into the following groups:",637],["",637],["Configuration",637],["PropertyDescription",637],["",637],["",637],["IL2CPP Code Generation",637],["Defines how Unity manages IL2CPP code generation. This option is only available if you use the IL2CPP scripting backend.",637],["",637],["",637],["Faster runtime",637],["Generates code optimized for runtime performance. This setting is activated by default.",637],["",637],["",637],["Faster (smaller) builds",637],["Generates code optimized for build size and iteration. This setting generates less code and produces a smaller build, but can reduce runtime performance for generic code. Use this option when faster build times are important, such as when iterating on changes.",637],["",637],["",637],["IL2CPP Stacktrace Information",637],["Select the information to be included in a stack trace. For further details on the information types, refer to Managed stack traces with IL2CPP.",637],["",637],["",637],["Method Name ",637],["Include each managed method in the stack trace.",637],["",637],["",637],["Method Name, File Name, and Line Number",637],["Include each managed method with file and line number information in the stack trace.",637],["Note: Using this option can increase both the build time and final size of the built program.",637],["",637],["",637],["Target minimum macOS version",637],["Specifies the minimum supported macOS version which is 10.13.0",637],["",637],["",637],["",637],["",637],["API Compatibility Level",637],["You can choose your mono API compatibility level for all targets. Sometimes a third-party .NET library uses functionality that's outside of your .NET compatibility level. To understand what's going on in such cases, and how to best fix it, try following these suggestions:",637],["Install ILSpy for Windows.",637],["Drag the .NET assemblies for the API compatibility level that you are having issues with into ILSpy. You can find these under Frameworks/Mono/lib/mono/YOURSUBSET/.",637],["Drag in your third-party assembly.",637],["Right-click your third-party assembly and select Analyze.",637],["In the analysis report, inspect the Depends on section. The report highlights anything that the third-party assembly depends on, but that's not available in the .NET compatibility level of your choice in red.",637],["",637],["Shader Settings",637],["Property Description ",637],["Shader precision model Select the default precision of samplers used in shaders. Refer to Shader data types and precision for more details. ",637],["Strict shader variant matching Use the error shader if a shader variant is missing and display an error in the console. ",637],["Keep Loaded Shaders Alive Keep all loaded shaders alive and prevent unloading. ",637],["",637],["Shader Variant Loading Settings",637],["",637],["Script Compilation",637],["Property Description ",637],[":-------------------------------- :----------------------------------------------------------- ",637],["Scripting Define Symbols Sets custom compilation flags. For more details, refer to Platform dependent compilation. ",637],["Additional Compiler Arguments Adds entries to this list to pass additional arguments to the Roslyn compiler. Use one new entry for each additional argument.To create a new entry, click Add (+). To remove an entry, click Remove (-).When you have added all desired arguments, click Apply to include your additional arguments in future compilations. Click Revert to reset this list to the most recent applied state. ",637],["Suppress Common Warnings Indicates whether to display the C# warnings CS0169 and CS0649. ",637],["Allow 'unsafe' Code Activate support for compiling ‘unsafe’ C# code in a pre-defined assembly (for example, Assembly-CSharp.dll). For Assembly Definition Files (.asmdef), click on one of your .asmdef files and activate the option in the Inspector window that appears. ",637],["Use Deterministic Compilation Indicates whether to prevent compilation with the -deterministic C# flag. With this setting active, compiled assemblies are byte-for-byte the same each time they're compiled.For more information, refer to Microsoft’s deterministic compiler option. ",637],["",637],["Optimization",637],["PropertyDescription",637],["",637],["",637],["Enable Dedicated Server optimizations",637],["Activate this option to perform additional optimizations on the Dedicated Server build.",637],["",637],["",637],["",637],["Stack Trace",637],["Select your preferred logging type by enabling the option that corresponds to each Log Type.",637],["Property Description ",637],["",637],["None No logs are ever recorded. ",637],["ScriptOnly Logs only when running scripts. ",637],["Full Logs all the time. ",637],["Refer to stack trace logging for more information.",637],["",637],["Legacy",637],["Activate the Clamp BlendShapes (Deprecated) option to clamp the range of blend shape weights in SkinnedMeshRenderers.",637],["",637],["Capture Logs",637],["Activate the Capture Startup Logs option to capture the startup logs for later processing.",637],["Additional resources",637],["Dedicated Server requirements",638],["You must meet the following requirements to use the Dedicated Server build target.",638],["Download and install Unity Editor version 2021.3 LTS or later.",638],["Install the Dedicated Server module for the platform you’re planning to build your application on. For example, enable Linux Dedicated Server Build Support if you plan to build for Linux.",638],["Additional resources",638],["Dedicated Server",639],["Unity provides support for development of games and applications on the Dedicated Server platform. You can publish multiplayer games using Dedicated Server platform.",639],["Refer to the following sections to get started with development on Dedicated Server platform.",639],["Topic Description ",639],["Introduction to Dedicated Server Introduces key concepts that are useful to understand before you begin to develop an application for Dedicated Server. ",639],["Get started with Dedicated Server Provides information on the requirements, settings, and build target optimizations before you build an application for Dedicated Server platform. ",639],["Build your application for Dedicated Server Describes how to create a build for Dedicated Server platform. ",639],["Dedicated Server AssetBundles Describes how to create AssetBundles optimized for Dedicated Server builds. ",639],["Desktop headless mode Provides information about desktop headless mode while highlighting how it differs from the Dedicated Server platform. ",639],["Additional resources",639],["Deep learning super sampling",640],["NVIDIA Deep Learning Super Sampling (DLSS) is a rendering technology that uses artificial intelligence to increase graphics performance and quality. You can use it to:",640],["\nRun real-time ray traced worlds at high frame rates and resolutions.\n",640],["\nProvide a performance and quality boost for rasterized graphics. This is particularly useful for virtual reality applications to help them run at higher frame rates. This helps to remove disorientation, nausea, and other negative effects that occur at lower frame rates.\n",640],["For more information about DLSS, see the NVIDIA documentation.",640],["Requirements and compatibility",640],["This section includes information about the hardware requirements and render pipeline compatibility of DLSS.",640],["For information about hardware and driver requirements, see the NVIDIA documentation.",640],["Render pipeline compatibility",640],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Scriptable Render Pipeline (SRP) ",640],["----------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------ ",640],["DLSS No (1) No (1) Yes No (1) ",640],["Notes**:",640],["The low-level DLSS framework code is in core Unity, but HDRP is the only render pipeline that uses it to implement DLSS. For more information, see the API documentation.",640],["Supported platforms",640],["Unity supports DLSS on the following platforms:",640],["DirectX 11 on Windows 64 bit",640],["DirectX 12 on Windows 64 bit",640],["Vulkan on Windows 64 bit.",640],["Unity does not support DLSS for Metal, Linux, Windows using x86 architecture (Win32), or any other platform. To build your project for Windows, use x86_64 architecture (Win64).",640],["For information about the hardware requirements of DLSS, see NVIDIA'S DLSS requirements.",640],["Using DLSS",640],["For information on how to use DLSS in HDRP, see Deep learning super sampling in HDRP.",640],["\n The Spaceship Demo Project rendered with a screen percentage of 50 without DLSS. The image is blurry, especially around the spark visual effect.\n",640],["\n The Spaceship Demo Project rendered with a screen percentage of 50, but using DLSS. This image is less blurry than the previous image, especially around the spark visual effect.\n",640],["Quality modes",640],["The available quality modes are as follows:",640],["\nAuto: Selects the best DLSS mode for the current output resolution.\n",640],["\nBalance: Balances performance with image quality.\n",640],["\nQuality: Emphasizes image quality over performance.\n",640],["\nPerformance: Emphasizes performance and image quality.\n",640],["\nUltra Performance: Produces the highest performance and the lowest image quality. This mode is only suitable for 8k resolutions (7680 x 4320 pixels).\n",640],["Deep linking on Android",641],["Deep links are hyperlinks outside of your application that take a user to a specific location within the application rather than a website. When a user clicks a deep link, the application opens from the designated location, such as a specific scene in a Unity application. For more information about deep links and how to use them, refer to Deep linking.",641],["Enable deep linking for Android applications",641],["Use an intent filter to enable deep linking for Android applications. An intent filter overrides the standard Android App Manifest to include a specific intent filter section for Activity.",641],["To set up an intent filter, use the following steps:",641],["Navigate to Edit > Project Settings > Player.",641],["In the Android settings tab, expand the Publishing Settings section.",641],["In the Build section, enable Custom Main Manifest. This creates a new file called AndroidManifest.xml in Assets/Plugins/Android.",641],["In the Project window, go to Assets > Plugins > Android and open the AndroidManifest.xml file.",641],["Add the following code sample inside the <activity> element, and save the file.",641],["```lang-xml",641],["",641],["",641],["",641],["",641],["",641],["",641],["The built application now opens when the device processes any link that starts with unitydl://.",641],["Use deep linking on Android",641],["After you enable deep links for Android, the way that you use them is platform-agnostic. For information on how to handle deep links when your application opens, refer to Using deep links.",641],["Deep linking on iOS",642],["Deep links are hyperlinks outside of your application that take a user to a specific location within the application rather than a website. When a user clicks a deep link, the application opens from the designated location, such as a specific scene in a Unity application. For more information about deep links and how to use them, refer to Deep linking.",642],["There are two ways to enable deep links for iOS applications: URL schemes and universal links.",642],["For information on how to use deep links and handle them when your application opens, refer to Using deep links.",642],["URL schemes",642],["A URL scheme specifies a link structure that your iOS application refers to. The device opens the application when the user clicks a deep link that matches the URL scheme structure. To add a URL scheme, use the following steps:",642],["Go to Edit > Project Settings > Player > Other Settings > Configuration.",642],["Expand Supported URL schemes to set the following properties:",642],["Size** property to 1.",642],["Element 0** property to the URL scheme to use with your application. For example, use unitydl to open your application when the device processes a link that starts with unitydl://.",642],["Your iOS application now opens when the device processes any link that starts with unitydl://.",642],["Note**: To use multiple URL schemes in your project, increase the value of the Size property.",642],["Universal links",642],["Universal links are similar to deep links because they open a specific location within an application. However, if the application isn't installed, a universal link opens a URL in Safari. To enable universal links, refer to Apple's documentation on Allowing Apps and Websites to Link to Your Content.",642],["Additional resources",642],["Deep linking for macOS",643],["Deep links are hyperlinks that take a user to a specific location within an app rather than a website. When a user clicks a deep link, the application opens from the designated location, such as a specific scene in a Unity application. There are two ways to enable deep links for macOS applications: URL schemes and universal links.",643],["For information on how to use deep links and handle them when your application opens, refer to Using deep links.",643],["URL schemes",643],["A URL scheme specifies a link structure that your macOS application refers to. The device opens the application when the user clicks a deep link that matches the URL scheme structure. To add a URL scheme, use the following:",643],["Go to Edit > Project Settings > Player > Other Settings.",643],["In the Mac Configuration section, set the following properties:",643],["Size** property to 1.",643],["Element 0** property to the URL scheme to use with your application. For example, use unitydl to open your application when the device processes a link that starts with unitydl://.",643],["Note**: To use multiple URL schemes in your project, increase the value of the Size property.",643],["Universal links",643],["Universal links are similar to deep links because they open a specific location within an app. However, if the app isn't installed, a universal link opens a URL in Safari. To enable universal links, refer to Apple's documentation on Allowing Apps and Websites to Link to Your Content.",643],["Additional resources",643],["Use deep linking on UWP",644],["Deep links are URL links outside of your application that direct users to a location in your application. When the user clicks a deep link for an application, the operating system opens the Unity application at a specified place (for example, a specific scene). You can enable deep linking for Universal Windows Platform (UWP) applications. For more information about deep links and how to use them, refer to Deep links.",644],["Enable deep linking for UWP applications",644],["Before you can process deep links, you need to configure your application to react to them by adding a custom URI scheme.",644],["To add a custom URI scheme, perform the following steps:",644],["Go to Edit > Project Settings > Player Settings.",644],["Select UWP to open the UWP Player Settings window.",644],["Select Publishing Settings > Protocol.",644],["In the Name field, enter the URI to associate with your application. For example, unitydl.",644],["Your UWP application now opens when the device processes any link that starts with unitydl://.",644],["Use deep linking on UWP",644],["After you enable deep links for Universal Windows Platform, the way that you use them is platform-agnostic. For information on how to handle deep links when your application opens, refer to Using deep links.",644],["Deep linking",645],["Deep links are hyperlinks that take a user to a specific location within an application rather than a website. When a user selects a deep link, the application opens at the designated location, such as a specific scene in a Unity application. Unity uses the Application.absoluteURL property and Application.deepLinkActivated event to support deep linking.",645],["Enable deep linking",645],["Before you can process deep links, you need to configure your application to react to them. The process to configure an application to react to specific URLs is platform-specific. Unity supports deep links for the following platforms:",645],["",645],["Use deep links",645],["There are two ways to process a deep link that depend on the current state of the application:",645],["The application isn't running: The device opens the application and Application.absoluteURL stores the deep link URL that the device passes to the application.",645],["The application is running: The device passes the URL to the application and calls the Application.deepLinkActivated event using the deep link URL as a parameter. Application.absoluteURL updates at the same time.",645],["In both cases, use Application.absoluteURL to select the scene to open in the application.",645],["The following code sample shows you how to process a deep link depending on the current state of the application:",645],["```lang-csharp",645],["using UnityEngine;",645],["using UnityEngine.SceneManagement;",645],["public class ProcessDeepLinkMngr : MonoBehaviour",645],["public static ProcessDeepLinkMngr Instance { get; private set; }",645],["public string deeplinkURL;",645],["private void Awake()",645],["if (Instance == null)",645],["Instance = this;",645],["Application.deepLinkActivated += onDeepLinkActivated;",645],["if (!string.IsNullOrEmpty(Application.absoluteURL))",645],["// Cold start and Application.absoluteURL not null so process Deep Link.",645],["onDeepLinkActivated(Application.absoluteURL);",645],["// Initialize DeepLink Manager global variable.",645],["else deeplinkURL = \"[none]\";",645],["DontDestroyOnLoad(gameObject);",645],["else",645],["Destroy(gameObject);",645],["private void onDeepLinkActivated(string url)",645],["// Update DeepLink Manager global variable, so URL can be accessed from anywhere.",645],["deeplinkURL = url;",645],["// Decode the URL to determine action.",645],["// In this example, the application expects a link formatted like this:",645],["// unitydl://mylink?scene1",645],["string sceneName = url.Split('?')[1];",645],["bool validScene;",645],["switch (sceneName)",645],["case \"scene1\":",645],["validScene = true;",645],["break;",645],["case \"scene2\":",645],["validScene = true;",645],["break;",645],["default:",645],["validScene = false;",645],["break;",645],["if (validScene) SceneManager.LoadScene(sceneName);",645],["Test a deep link",645],["To test a deep link, use the following steps:",645],["Create a HTML file that includes the deep link to test.",645],["Host the HTML file on a local web server.",645],["Open the HTML file from a web browser on your device and click the deep link.",645],["",645],["Example HTML file",645],["This is an example HTML file that you can use to test deep links. To redirect the link, change the href attribute in one of the <a> elements.",645],["```lang-html",645],["",645],["",645],["",645],["",645],["",645],["My Deep Link Test page",645],["Launch",645],["Launch with Parameter",645],["",645],["",645],["Default Scene view overlay reference",646],["From the Overlays menu, you can control which overlays are in the Scene view and manage your overlay configurations. To display the Overlays menu in the Scene view, press the ` key. To restore the default overlay configuration, select the Default overlay configuration from the Overlays menu.",646],["By default, the following overlays display in the Scene view.",646],["Overlay Description ",646],["",646],["A: Tools Use the Tools overlay to select a tool context, use Transform tools, and, if they are available, component tools. ",646],["B: Tool Settings Use the Tool Settings overlay to display available settings for the tool you have selected. For example, if you select a Transform tool, use the Tool Settings overlay to select the location of any Transform tool Gizmo and the handles used to manipulate the Gizmo. ",646],["C: Grid and Snap Use the Grid and Snap overlay to control how GameObjects snap to the grid. ",646],["D: View Options Use the View Options overlay to select view options, control lighting, and control audio for the Scene view. These controls only affect the Scene view and do not affect the built game. ",646],["E: Orientation Use the Orientation overlay to view the Scene camera's current orientation and to change its viewing angle and projection mode. ",646],["Additional resources",646],["Applying default presets to Assets by folder",647],["For large projects, you might use several Presets for importing the same type of Asset. For example, for texture Assets, you might have a Preset for importing Default textures and another for Lightmap textures. In the Assets folder of your project, you have separate folders for each of these types of textures.",647],["The following script applies a Preset based on the folder that you add an Asset to. This script chooses the Preset that is in the same folder as the Asset. If there is no Preset in the folder, this script searches parent folders. If there are no Presets in parent folders, Unity uses the default Preset that the Preset window specifies.",647],["To use this script, create a new folder named Editor in the Project window, create a new C# Script in this folder, then copy and paste this script.",647],["using System.Collections.Generic;",647],["using System.IO;",647],["using System.Linq;",647],["using UnityEditor;",647],["using UnityEditor.Experimental;",647],["using UnityEditor.Presets;",647],["using UnityEngine;",647],["namespace PresetsPerFolder",647],["/// ",647],["/// This sample class applies Presets automatically to Assets in the folder containing the Preset and any subfolders.",647],["/// The code is divided into three parts that set up importer dependencies to make sure the importers of all Assets stay deterministic.",647],["///",647],["/// OnPreprocessAsset:",647],["/// This method goes from the root folder down to the Asset folder for each imported asset",647],["/// and registers a CustomDependency to each folder in case a Preset is added/removed at a later time.",647],["/// It then loads all Presets from that folder and tries to apply them to the Asset importer.",647],["/// If it is applied, the method adds a direct dependency to each Preset so that the Asset can be re-imported when the Preset values are changed.",647],["/// ",647],["public class EnforcePresetPostProcessor : AssetPostprocessor",647],["void OnPreprocessAsset()",647],["// The if(assetPath....) line ensures that the asset path starts with \"Assets/\" so that the AssetPostprocessor is not applied to Assets in a package.",647],["// The IsValidFolder ensures that we do not consider folders themselve in this process.",647],["// The Asset extension cannot end with .cs to avoid triggering a code compilation every time a Preset is created or removed.",647],["// The Asset extension cannot end with .preset so that Presets don't depend on themselves, which would cause an infinite import loop.",647],["// There may be more exceptions to add here depending on your project.",647],["if (assetPath.StartsWith(\"Assets/\") && !AssetDatabase.IsValidFolder(assetPath) && !assetPath.EndsWith(\".cs\") && !assetPath.EndsWith(\".preset\"))",647],["var path = Path.GetDirectoryName(assetPath);",647],["ApplyPresetsFromFolderRecursively(path);",647],["void ApplyPresetsFromFolderRecursively(string folder)",647],["// Apply Presets in order starting from the parent folder to the Asset so that the Preset closest to the Asset is applied last.",647],["var parentFolder = Path.GetDirectoryName(folder);",647],["if (!string.IsNullOrEmpty(parentFolder))",647],["ApplyPresetsFromFolderRecursively(parentFolder);",647],["// Add a dependency to the folder Preset custom key",647],["// so whenever a Preset is added to or removed from this folder, the Asset is re-imported.",647],["context.DependsOnCustomDependency($\"PresetPostProcessor_{folder}\");",647],["// Find all Preset Assets in this folder. Use the System.Directory method instead of the AssetDatabase",647],["// because the import may run in a separate process which prevents the AssetDatabase from performing a global search.",647],["var presetPaths =",647],["Directory.EnumerateFiles(folder, \"*.preset\", SearchOption.TopDirectoryOnly)",647],[".OrderBy(a => a);",647],["foreach (var presetPath in presetPaths)",647],["// Load the Preset and try to apply it to the importer.",647],["var preset = AssetDatabase.LoadAssetAtPath(presetPath);",647],["// The script adds a Presets dependency to an Asset in two cases:",647],["//1 If the Asset is imported before the Preset, the Preset will not load because it is not yet imported.",647],["//Adding a dependency between the Asset and the Preset allows the Asset to be re-imported so that Unity loads",647],["//the assigned Preset and can try to apply its values.",647],["//2 If the Preset loads successfully, the ApplyTo method returns true if the Preset applies to this Asset's import settings.",647],["//Adding the Preset as a dependency to the Asset ensures that any change in the Preset values will re-import the Asset using the new values.",647],["if (preset == null preset.ApplyTo(assetImporter))",647],["// Using DependsOnArtifact here because Presets are native assets and using DependsOnSourceAsset would not work.",647],["context.DependsOnArtifact(presetPath);",647],["/// ",647],["/// This method with the didDomainReload argument will be called every time the project is being loaded or the code is compiled.",647],["/// It is very important to set all of the hashes correctly at startup",647],["/// because Unity does not apply the OnPostprocessAllAssets method to previously imported Presets",647],["/// and the CustomDependencies are not saved between sessions and need to be rebuilt every time.",647],["/// ",647],["private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets,",647],["string[] movedFromAssetPaths, bool didDomainReload)",647],["if (didDomainReload)",647],["// AssetDatabase.FindAssets uses a glob filter to avoid importing all objects in the project.",647],["// This glob search only looks for .preset files.",647],["var allPaths = AssetDatabase.FindAssets(\"glob:\\\"**.preset\\\"\")",647],[".Select(AssetDatabase.GUIDToAssetPath)",647],[".OrderBy(a => a)",647],[".ToList();",647],["bool atLeastOnUpdate = false;",647],["string previousPath = string.Empty;",647],["Hash128 hash = new Hash128();",647],["for (var index = 0; index < allPaths.Count; index++)",647],["var path = allPaths[index];",647],["var folder = Path.GetDirectoryName(path);",647],["if (folder != previousPath)",647],["// When a new folder is found, create a new CustomDependency with the Preset name and the Preset type.",647],["if (previousPath != string.Empty)",647],["AssetDatabase.RegisterCustomDependency($\"PresetPostProcessor_{previousPath}\", hash);",647],["atLeastOnUpdate = true;",647],["hash = new Hash128();",647],["previousPath = folder;",647],["// Append both path and Preset type to make sure Assets get re-imported whenever a Preset type is changed.",647],["hash.Append(path);",647],["hash.Append(AssetDatabase.LoadAssetAtPath(path).GetTargetFullTypeName());",647],["// Register the last path.",647],["if (previousPath != string.Empty)",647],["AssetDatabase.RegisterCustomDependency($\"PresetPostProcessor_{previousPath}\", hash);",647],["atLeastOnUpdate = true;",647],["// Only trigger a Refresh if there is at least one dependency updated here.",647],["if (atLeastOnUpdate)",647],["AssetDatabase.Refresh();",647],["/// ",647],["/// InitPresetDependencies:",647],["/// This method is called when the project is loaded. It finds every imported Preset in the project.",647],["/// For each folder containing a Preset, create a CustomDependency from the folder name and a hash from the list of Preset names and types in the folder.",647],["///",647],["/// OnAssetsModified:",647],["/// Whenever a Preset is added, removed, or moved from a folder, the CustomDependency for this folder needs to be updated",647],["/// so Assets that may depend on those Presets are reimported.",647],["///",647],["/// TODO: Ideally each CustomDependency should also be dependent on the PresetType,",647],["/// so Textures are not re-imported by adding a new FBXImporterPreset in a folder.",647],["/// This makes the InitPresetDependencies and OnPostprocessAllAssets methods too complex for the purpose of this example.",647],["/// Unity suggests having the CustomDependency follow the form \"Preset_{presetType}_{folder}\",",647],["/// and the hash containing only Presets of the given presetType in that folder.",647],["/// ",647],["public class UpdateFolderPresetDependency : AssetsModifiedProcessor",647],["/// ",647],["/// The OnAssetsModified method is called whenever an Asset has been changed in the project.",647],["/// This methods determines if any Preset has been added, removed, or moved",647],["/// and updates the CustomDependency related to the changed folder.",647],["/// ",647],["protected override void OnAssetsModified(string[] changedAssets, string[] addedAssets, string[] deletedAssets, AssetMoveInfo[] movedAssets)",647],["HashSet folders = new HashSet();",647],["foreach (var asset in changedAssets)",647],["// A Preset has been changed, so the dependency for this folder must be updated in case the Preset type has been changed.",647],["if (asset.EndsWith(\".preset\"))",647],["folders.Add(Path.GetDirectoryName(asset));",647],["foreach (var asset in addedAssets)",647],["// A new Preset has been added, so the dependency for this folder must be updated.",647],["if (asset.EndsWith(\".preset\"))",647],["folders.Add(Path.GetDirectoryName(asset));",647],["foreach (var asset in deletedAssets)",647],["// A Preset has been removed, so the dependency for this folder must be updated.",647],["if (asset.EndsWith(\".preset\"))",647],["folders.Add(Path.GetDirectoryName(asset));",647],["foreach (var movedAsset in movedAssets)",647],["// A Preset has been moved, so the dependency for the previous and new folder must be updated.",647],["if (movedAsset.destinationAssetPath.EndsWith(\".preset\"))",647],["folders.Add(Path.GetDirectoryName(movedAsset.destinationAssetPath));",647],["if (movedAsset.sourceAssetPath.EndsWith(\".preset\"))",647],["folders.Add(Path.GetDirectoryName(movedAsset.sourceAssetPath));",647],["// Do not add a dependency update for no reason.",647],["if (folders.Count != 0)",647],["// The dependencies need to be updated outside of the AssetPostprocessor calls.",647],["// Register the method to the next Editor update.",647],["EditorApplication.delayCall += () =>",647],["DelayedDependencyRegistration(folders);",647],["};",647],["/// ",647],["/// This method loads all Presets in each of the given folder paths",647],["/// and updates the CustomDependency hash based on the Presets currently in that folder.",647],["/// ",647],["static void DelayedDependencyRegistration(HashSet folders)",647],["foreach (var folder in folders)",647],["var presetPaths =",647],["AssetDatabase.FindAssets(\"glob:\\\"**.preset\\\"\", new[] { folder })",647],[".Select(AssetDatabase.GUIDToAssetPath)",647],[".Where(presetPath => Path.GetDirectoryName(presetPath) == folder)",647],[".OrderBy(a => a);",647],["Hash128 hash = new Hash128();",647],["foreach (var presetPath in presetPaths)",647],["// Append both path and Preset type to make sure Assets get re-imported whenever a Preset type is changed.",647],["hash.Append(presetPath);",647],["hash.Append(AssetDatabase.LoadAssetAtPath(presetPath).GetTargetFullTypeName());",647],["AssetDatabase.RegisterCustomDependency($\"PresetPostProcessor_{folder}\", hash);",647],["// Manually trigger a Refresh",647],["// so that the AssetDatabase triggers a dependency check on the updated folder hash.",647],["AssetDatabase.Refresh();",647],["Install Unity offline without the Hub",648],["The Unity Download Assistant supports offline deployment. This allows you to download all the necessary files for installing Unity, and to generate a script for repeating the same installation on other computers without internet access.",648],["For more information about how to activate Unity manually, refer to the Unity Manual Activation Guide.",648],["Preparation",648],["Run the Download Assistant, and install Unity as normal on one computer. This computer must have enough free disk space to download all the files.",648],["Click the dropdown and select Custom, then choose the location you wish to download the files to.",648],["Check you have everything you need",648],["Open your PC's file manager, navigate to the custom location folder you specified earlier, and look for the .sh or .bat file inside that folder. Check the contents of this file. It should look similar to the following example:",648],["Deploying Unity to other computers",648],["Windows",648],["Copy the entire folder to the target Windows PC, and run the supplied .bat file.",648],["To avoid the Windows UAC prompt, run install.bat from the Administrator shell. In the Start menu, search for cmd.exe, right-click, and select Run as administrator.",648],["Navigate to the folder with the scripts. This will usually be in your Downloads folder (cd C:\\Users\\[YourName]\\Download\\UnityPackages).",648],["Mac",648],["Copy the entire folder to the target Mac OS X machine, and run the supplied .sh file.",648],["Run sudo install.sh.",648],["Navigate to the folder with the scripts. This will usually be in your Downloads folder (cd ~/Downloads/UnityPackages).",648],["You can repeat these instructions as many times as you need to for each computer you wish to install Unity on.",648],["Desktop headless mode",649],["The Dedicated Server build target is similar to the desktop headless mode. The only difference is that the Dedicated Server build target is optimized to increase memory and CPU performance when running as a networked application.",649],["Desktop headless mode allows you to run applications in batchmode on any desktop platform without initializing the graphics device. You can run desktop headless mode by passing the -batchmode and -nographics command line arguments when executing the Player. You can’t select headless mode from the Unity Editor Build Settings, but you can add the -batchmode and -nographics command line arguments to effectively create a headless build.",649],["Desktop headless mode doesn’t perform any optimizations for running a build as a dedicated server. Although the Dedicated Server build option performs additional optimizations, you might still want to use desktop headless mode for other purposes, such as automated testing on CI/CD platforms.",649],["Using the developer dashboard",650],["Use Unity’s developer dashboard to manage your Organizations, and configure Unity services for your projects.",650],["Develop",650],["Manage services that enhance the development of your projects, including:",650],["Operate",650],["Manage services that enhance operations of your live game, including:",650],["Acquire",650],["Acquire users for your game through Unity’s advertising campaign tools.",650],["Engineering feature set",651],["The Engineering feature set contains packages for integration of C# integrated development environments (IDE), unit testing, code coverage and performance analysis.",651],["Getting started",651],["Unity supports the following IDEs: Visual Studio (Windows, macOS), Visual Studio Code (Windows, macOS, Linux) and JetBrains Rider (Windows, macOS, Linux).",651],["To choose which IDE to use with the Unity Editor, open the Preferences window, then go to External Tools > External Script Editor.",651],["The Unity Test Framework (UTF) lets you test your code in both Edit Mode and Play Mode, and also on target platforms such as Standalone, Android and iOS.",651],["To access the Unity Test Framework (UTF) in the Unity Editor, go to Window > General > Test Runner.",651],["The Profile Analyzer aggregates and visualizes frame and marker data from a set of Unity Profiler frames to help you understand their behavior. You can use the Profile Analyzer to compare two sets of data side-by-side, which complements the single frame analysis already available in the Unity Profiler.",651],["To open the Profile Analyzer window, go to Window > Analysis > Profile Analyzer.",651],["Use the Code Coverage package with the Test Runner to gather and present test coverage information. Run your tests with code coverage enabled to see which lines of code are executed when the tests run, and whether the tests pass or fail.",651],["To open the Code Coverage window in the Unity Editor, go to Window > Analysis > Code Coverage.",651],["Use the Editor Coroutines package to start the execution of iterator methods within the Editor, similar to how we handle Coroutines inside MonoBehaviour scripts during runtime.",651],["Packages",651],["The Engineering feature set contains the following packages:",651],["Resources",651],["Related forums",651],["Public roadmap",651],["Find out about upcoming features in the Engineering roadmap.",651],["Adding a device",652],["To add a new device to the Device Simulator, you create a device definition and a device overlay.",652],["A device definition is a text file with the .device extension in your Unity project. It contains JSON that describes the properties of a device.",652],["A device overlay is an image that contains the border of the device screen, together with notches, punchouts, and any other additions to the screen rectangle. You can optionally use it with a device definition to visualize how hardware elements obstruct the device screen, and to determine when touch inputs fail as a result.",652],["Creating a device definition",652],["A device definition is a JSON file that represents the device. It has both required properties and some optional properties. If a device definition file contains any errors, the errors appear in the Inspector when you select the file.",652],["Schema",652],["Property Required Description ",652],["---------------- ------------ ------------------------------------------------------------ ",652],["friendlyName Yes The name to display in the UI for this device. ",652],["version Yes Indicates the version of the device definition file. Currently, the version is 1. ",652],["screens Yes A list of objects that each describe a screen to simulate the device for. This must contain at least one screen. For information about the schema of each screen object, see screen. ",652],["systemInfo Yes An object that describes the capabilities of the device. The values in this object map to SystemInfo. For information about the schema of the systemInfo object, see systemInfo. ",652],["",652],["screen",652],["Property Required Description ",652],["----------------------- ------------ ------------------------------------------------------------ ",652],["width Yes The width, in pixels, of the screen. ",652],["height Yes The height, in pixels, of the screen. ",652],["navigationBarHeight No The height, in pixels, of the on-screen Android navigation bar that appears on some devices when not in fullscreen. ",652],["dpi Yes The dpi of the screen. ",652],["orientations No A list of objects that each describe an orientation the screen can simulate. If you don't set a value for this property, the screen supports all orientations. For information about the schema of each orientation object, see orientation. ",652],["presentation No An object that describes the device overlay. For information about the schema of this object, see presentation. ",652],["",652],["orientation",652],["Properties Required Description ",652],["--------------- ------------ ------------------------------------------------------------ ",652],["orientation Yes The screen orientation. The value of this property is a number that maps to the ScreenOrientation enum. ",652],["safeArea No A Rect that determines the safe area of the screen. If you don't set a value for this property, the simulator assumes the entire screen is safe. ",652],["cutouts No A list of Rects that specify areas of the screen that aren't functional for displaying content. ",652],["",652],["presentation",652],["Property Required Description ",652],["--------------- ------------ ------------------------------------------------------------ ",652],["overlayPath No A relative path from the device definition file to an image to use as the device overlay. ",652],["borderSize No The distance, in pixels, from the overlay to where the screen begins. ",652],["",652],["systeminfo",652],["The properties in this object describe the capabilities and system information of the device. Since they describe the system information, many of them map to properties in SystemInfo.",652],["Property Required Description ",652],["--------------------------- ------------ ------------------------------------------------------------ ",652],["deviceModel No See Device.SystemInfo.deviceModel. ",652],["deviceType No See Device.SystemInfo.deviceType. ",652],["operatingSystem Yes See Device.SystemInfo.operatingSystem. ",652],["operatingSystemFamily No See Device.SystemInfo.operatingSystemFamily. ",652],["processorCount No See Device.SystemInfo.processorCount. ",652],["processorFrequency No See Device.SystemInfo.processorFrequency. ",652],["processorType No See Device.SystemInfo.processorType. ",652],["supportsAccelerometer No See Device.SystemInfo.supportsAccelerometer. ",652],["supportsAudio No See Device.SystemInfo.supportsAudio. ",652],["supportsGyroscope No See Device.SystemInfo.supportsGyroscope. ",652],["supportsLocationService No See Device.SystemInfo.supportsLocationService. ",652],["supportsVibration No See Device.SystemInfo.supportsVibration. ",652],["systemMemorySize No See Device.SystemInfo.systemMemorySize. ",652],["unsupportedIdentifier No See Device.SystemInfo.unsupportedIdentifier. ",652],["graphicsDependentData No A list of objects that each describe graphics APIs that the device supports. For information about the schema of each object, see graphicsDependentData. ",652],["",652],["graphicsDependentData",652],["The properties in the object describe a graphics API that the device supports.",652],["Property Required Description ",652],["--------------------------------------------------- ------------ ------------------------------------------------------------ ",652],["graphicsDeviceType Yes See Device.SystemInfo.graphicsDeviceType. ",652],["graphicsMemorySize No See Device.SystemInfo.graphicsMemorySize. ",652],["graphicsDeviceName No See Device.SystemInfo.graphicsDeviceName. ",652],["graphicsDeviceVendor No See Device.SystemInfo.graphicsDeviceVendor. ",652],["graphicsDeviceID No See Device.SystemInfo.graphicsDeviceID. ",652],["graphicsDeviceVendorID No See Device.SystemInfo.graphicsDeviceVendorID. ",652],["graphicsUVStartsAtTop No See Device.SystemInfo.graphicsUVStartsAtTop. ",652],["graphicsDeviceVersion No See Device.SystemInfo.graphicsDeviceVersion. ",652],["graphicsShaderLevel No See Device.SystemInfo.graphicsShaderLevel. ",652],["graphicsMultiThreaded No See Device.SystemInfo.graphicsMultiThreaded. ",652],["renderingThreadingMode No See Device.SystemInfo.renderingThreadingMode. ",652],["hasHiddenSurfaceRemovalOnGPU No See Device.SystemInfo.hasHiddenSurfaceRemovalOnGPU. ",652],["hasDynamicUniformArrayIndexingInFragmentShaders No See Device.SystemInfo.hasDynamicUniformArrayIndexingInFragmentShaders. ",652],["supportsShadows No See Device.SystemInfo.supportsShadows. ",652],["supportsRawShadowDepthSampling No See Device.SystemInfo.supportsRawShadowDepthSampling. ",652],["supportsMotionVectors No See Device.SystemInfo.supportsMotionVectors. ",652],["supports3DTextures No See Device.SystemInfo.supports3DTextures. ",652],["supports2DArrayTextures No See Device.SystemInfo.supports2DArrayTextures. ",652],["supports3DRenderTextures No See Device.SystemInfo.supports3DRenderTextures. ",652],["supportsCubemapArrayTextures No See Device.SystemInfo.supportsCubemapArrayTextures. ",652],["copyTextureSupport No See Device.SystemInfo.copyTextureSupport. ",652],["supportsComputeShaders No See Device.SystemInfo.supportsComputeShaders. ",652],["supportsGeometryShaders No See Device.SystemInfo.supportsGeometryShaders. ",652],["supportsTessellationShaders No See Device.SystemInfo.supportsTessellationShaders. ",652],["supportsInstancing No See Device.SystemInfo.supportsInstancing. ",652],["supportsHardwareQuadTopology No See Device.SystemInfo.supportsHardwareQuadTopology. ",652],["supports32bitsIndexBuffer No See Device.SystemInfo.supports32bitsIndexBuffer. ",652],["supportsSparseTextures No See Device.SystemInfo.supportsSparseTextures. ",652],["supportedRenderTargetCount No See Device.SystemInfo.supportedRenderTargetCount. ",652],["supportsSeparatedRenderTargetsBlend No See Device.SystemInfo.supportsSeparatedRenderTargetsBlend. ",652],["supportedRandomWriteTargetCount No See Device.SystemInfo.supportedRandomWriteTargetCount. ",652],["supportsMultisampledTextures No See Device.SystemInfo.supportsMultisampledTextures. ",652],["supportsMultisampleAutoResolve No See Device.SystemInfo.supportsMultisampleAutoResolve. ",652],["supportsTextureWrapMirrorOnce No See Device.SystemInfo.supportsTextureWrapMirrorOnce. ",652],["usesReversedZBuffer No See Device.SystemInfo.usesReversedZBuffer. ",652],["npotSupport No See Device.SystemInfo.npotSupport. ",652],["maxTextureSize No See Device.SystemInfo.maxTextureSize. ",652],["maxCubemapSize No See Device.SystemInfo.maxCubemapSize. ",652],["maxComputeBufferInputsVertex No See Device.SystemInfo.maxComputeBufferInputsVertex. ",652],["maxComputeBufferInputsFragment No See Device.SystemInfo.maxComputeBufferInputsFragment. ",652],["maxComputeBufferInputsGeometry No See Device.SystemInfo.maxComputeBufferInputsGeometry. ",652],["maxComputeBufferInputsDomain No See Device.SystemInfo.maxComputeBufferInputsDomain. ",652],["maxComputeBufferInputsHull No See Device.SystemInfo.maxComputeBufferInputsHull. ",652],["maxComputeBufferInputsCompute No See Device.SystemInfo.maxComputeBufferInputsCompute. ",652],["maxComputeWorkGroupSize No See Device.SystemInfo.maxComputeWorkGroupSize. ",652],["maxComputeWorkGroupSizeX No See Device.SystemInfo.maxComputeWorkGroupSizeX. ",652],["maxComputeWorkGroupSizeY No See Device.SystemInfo.maxComputeWorkGroupSizeY. ",652],["maxComputeWorkGroupSizeZ No See Device.SystemInfo.maxComputeWorkGroupSizeZ. ",652],["supportsAsyncCompute No See Device.SystemInfo.supportsAsyncCompute. ",652],["supportsGraphicsFence No See Device.SystemInfo.supportsGraphicsFence. ",652],["supportsAsyncGPUReadback No See Device.SystemInfo.supportsAsyncGPUReadback. ",652],["supportsRayTracing No See Device.SystemInfo.supportsRayTracing. ",652],["supportsSetConstantBuffer No See Device.SystemInfo.supportsSetConstantBuffer. ",652],["hasMipMaxLevel No See Device.SystemInfo.hasMipMaxLevel. ",652],["supportsMipStreaming No See Device.SystemInfo.supportsMipStreaming. ",652],["usesLoadStoreActions No See Device.SystemInfo.usesLoadStoreActions. ",652],["Minimal device definition",652],["The following device definition contains every required property and no optional properties. This is the minimum device definition you can have.",652],["Note**: This device definition doesn't provide orientation data, so the simulator assumes the device supports all orientations and that the safe area covers the entire screen.",652],["```lang-json",652],["\"friendlyName\": \"Minimal Device\",",652],["\"version\": 1,",652],["\"screens\": [",652],["\"width\": 1080,",652],["\"height\": 1920,",652],["\"dpi\": 450.0",652],["],",652],["\"systemInfo\": {",652],["\"operatingSystem\": \"Android\"",652],["Complete device definition",652],["The following device definition contains every required and optional property.",652],["```lang-json",652],["\"friendlyName\": \"Apple iPhone XR\",",652],["\"version\": 1,",652],["\"screens\": [",652],["\"width\": 828,",652],["\"height\": 1792,",652],["\"navigationBarHeight\": 0,",652],["\"dpi\": 326.0,",652],["\"orientations\": [",652],["\"orientation\": 1,",652],["\"safeArea\": {",652],["\"serializedVersion\": \"2\",",652],["\"x\": 0.0,",652],["\"y\": 68.0,",652],["\"width\": 828.0,",652],["\"height\": 1636.0",652],["},",652],["\"cutouts\": [",652],["\"serializedVersion\": \"2\",",652],["\"x\": 184.0,",652],["\"y\": 1726.0,",652],["\"width\": 460.0,",652],["\"height\": 66.0",652],["},",652],["\"orientation\": 3,",652],["\"safeArea\": {",652],["\"serializedVersion\": \"2\",",652],["\"x\": 88.0,",652],["\"y\": 42.0,",652],["\"width\": 1616.0,",652],["\"height\": 786.0",652],["},",652],["\"cutouts\": [",652],["\"serializedVersion\": \"2\",",652],["\"x\": 0.0,",652],["\"y\": 184.0,",652],["\"width\": 66.0,",652],["\"height\": 460.0",652],["},",652],["\"orientation\": 4,",652],["\"safeArea\": {",652],["\"serializedVersion\": \"2\",",652],["\"x\": 88.0,",652],["\"y\": 42.0,",652],["\"width\": 1616.0,",652],["\"height\": 786.0",652],["},",652],["\"cutouts\": [",652],["\"serializedVersion\": \"2\",",652],["\"x\": 1726.0,",652],["\"y\": 184.0,",652],["\"width\": 66.0,",652],["\"height\": 460.0",652],["],",652],["\"presentation\": {",652],["\"overlayPath\": \"Apple iPhone 11_Overlay.png\",",652],["\"borderSize\": {",652],["\"x\": 51.0,",652],["\"y\": 51.0,",652],["\"z\": 51.0,",652],["\"w\": 51.0",652],["],",652],["\"systemInfo\": {",652],["\"deviceModel\": \"iPhone11,8\",",652],["\"deviceType\": 1,",652],["\"operatingSystem\": \"iOS 12.0\",",652],["\"operatingSystemFamily\": 0,",652],["\"processorCount\": 6,",652],["\"processorFrequency\": 0,",652],["\"processorType\": \"arm64e\",",652],["\"supportsAccelerometer\": true,",652],["\"supportsAudio\": true,",652],["\"supportsGyroscope\": true,",652],["\"supportsLocationService\": true,",652],["\"supportsVibration\": true,",652],["\"systemMemorySize\": 2813,",652],["\"unsupportedIdentifier\": \"n/a\",",652],["\"graphicsDependentData\": [",652],["\"graphicsDeviceType\": 16,",652],["\"graphicsMemorySize\": 1024,",652],["\"graphicsDeviceName\": \"Apple A12 GPU\",",652],["\"graphicsDeviceVendor\": \"Apple\",",652],["\"graphicsDeviceID\": 0,",652],["\"graphicsDeviceVendorID\": 0,",652],["\"graphicsUVStartsAtTop\": true,",652],["\"graphicsDeviceVersion\": \"Metal\",",652],["\"graphicsShaderLevel\": 50,",652],["\"graphicsMultiThreaded\": true,",652],["\"renderingThreadingMode\": 0,",652],["\"hasHiddenSurfaceRemovalOnGPU\": true,",652],["\"hasDynamicUniformArrayIndexingInFragmentShaders\": true,",652],["\"supportsShadows\": true,",652],["\"supportsRawShadowDepthSampling\": true,",652],["\"supportsMotionVectors\": true,",652],["\"supports3DTextures\": true,",652],["\"supports2DArrayTextures\": true,",652],["\"supports3DRenderTextures\": true,",652],["\"supportsCubemapArrayTextures\": true,",652],["\"copyTextureSupport\": 31,",652],["\"supportsComputeShaders\": true,",652],["\"supportsGeometryShaders\": false,",652],["\"supportsTessellationShaders\": true,",652],["\"supportsInstancing\": true,",652],["\"supportsHardwareQuadTopology\": false,",652],["\"supports32bitsIndexBuffer\": true,",652],["\"supportsSparseTextures\": false,",652],["\"supportedRenderTargetCount\": 8,",652],["\"supportsSeparatedRenderTargetsBlend\": true,",652],["\"supportedRandomWriteTargetCount\": 8,",652],["\"supportsMultisampledTextures\": 1,",652],["\"supportsMultisampleAutoResolve\": false,",652],["\"supportsTextureWrapMirrorOnce\": 0,",652],["\"usesReversedZBuffer\": true,",652],["\"npotSupport\": 2,",652],["\"maxTextureSize\": 16384,",652],["\"maxCubemapSize\": 16384,",652],["\"maxComputeBufferInputsVertex\": 8,",652],["\"maxComputeBufferInputsFragment\": 8,",652],["\"maxComputeBufferInputsGeometry\": 0,",652],["\"maxComputeBufferInputsDomain\": 8,",652],["\"maxComputeBufferInputsHull\": 8,",652],["\"maxComputeBufferInputsCompute\": 8,",652],["\"maxComputeWorkGroupSize\": 1024,",652],["\"maxComputeWorkGroupSizeX\": 1024,",652],["\"maxComputeWorkGroupSizeY\": 1024,",652],["\"maxComputeWorkGroupSizeZ\": 1024,",652],["\"supportsAsyncCompute\": false,",652],["\"supportsGraphicsFence\": true,",652],["\"supportsAsyncGPUReadback\": true,",652],["\"supportsRayTracing\": false,",652],["\"supportsSetConstantBuffer\": true,",652],["\"hasMipMaxLevel\": true,",652],["\"supportsMipStreaming\": true,",652],["\"usesLoadStoreActions\": true,",652],["\"supportedTextureFormats\": [1, 2, 3, 4, 5],",652],["\"supportedRenderTextureFormats\": [1, 2, 3, 4, 5],",652],["\"ldrGraphicsFormat\": 59,",652],["\"hdrGraphicsFormat\": 74",652],["Creating a device overlay",652],["A device overlay is an image that contains the border of the device screen and other features such as notches, punchouts, and any other additions to the screen rectangle. You can optionally use it with a device definition to visualize how hardware elements obstruct the device screen, and to determine when touch inputs fail as a result.",652],["The Device Simulator interprets transparent pixels as areas of the screen you can tap, and opaque pixels of any other color as areas that the hardware obstructs. The texture itself can be any shape.",652],["The following examples show device overlays for two iPhone models.",652],["Note**: To mimic what you see when you use a device overlay, these examples display Unity's default skybox in the area of the screen where you can tab. In a real device overlay, these pixels should be transparent.",652],["Apple iPhone 8 Overlay Apple iPhone XS Overlay ",652],["--------------------------------------------------------- ---------------------------------------------------------- ",652],[" ",652],["Using a device overlay",652],["After you create a device overlay texture, to use it with a device definition you must first import the device overlay texture file into your project.",652],["Note**: When the Device Simulator loads a device overlay texture, it attempts to enable Read/Write for it. If this isn't possible, the Device Simulator displays the texture but can't use the texture to mask input. This means that if you click on notches and other areas of the screen that the device overlay should mask, the Device Simulator detects input. To ensure this doesn't happen, when you import the device overlay texture, enable Read/Write in the Texture Import Settings window.",652],["When the device overlay texture is in your project, open the device definition file and, in the object that defines a screen the device supports, add the presentation property. Here, set the path to the image file (overlayPath) and the size of the borders (borderSize). For an example of how to do this, see the following device definition file:",652],["```lang-json",652],["\"friendlyName\": \"Minimal Device with Overlay\",",652],["\"version\": 1,",652],["\"screens\": [",652],["\"width\": 1080,",652],["\"height\": 1920,",652],["\"dpi\": 450.0,",652],["\"presentation\": {",652],["\"overlayPath\": \"Overlays/MinimalDeviceOverlay.png\",",652],["\"borderSize\": {",652],["\"x\": 51.0,",652],["\"y\": 51.0,",652],["\"z\": 51.0,",652],["\"w\": 130.0",652],["],",652],["\"systemInfo\": {",652],["\"operatingSystem\": \"Android\"",652],["Note**: The path to the device overlay texture file can be relative to the device definition file, or relative to the directory that contains the Assets or Packages directory in your Unity project. For example, if the device definition file is in the Assets/Devices directory and the device overlay file is in the Assets/Devices/Overlays directory, the following file paths are both valid:",652],["Relative to the device definition file: Overlays/MinimalDeviceOverlay.png",652],["Relative to the directory that contains the Assets directory: Assets/Devices/Overlays/MinimalDeviceOverlay.png",652],["Device Simulator introduction",653],["The Device Simulator is a Unity Editor feature that simulates how your application appears and behaves on a mobile device.",653],["The Device Simulator consists of:",653],["The Simulator view: Views your application on a simulated mobile device.",653],["Simulated classes: Tests code that responds to device-specific behaviors.",653],["Device definitions: Describes the device to simulate.",653],["Device Simulator plugins: Configures the UI of the Simulator view.",653],["Controls in the Simulator view",653],["The Simulator view simulates many common features of mobile devices, including:",653],["Auto-rotation",653],["Screen safe area",653],["Touch input",653],["Player Settings",653],["The Device Simulator reacts to the following Player Settings in the same way that a real device does:",653],["Fullscreen Mode**",653],["Resolution Scaling**",653],["Default Orientation**",653],["Graphics API**",653],["Render outside safe area**",653],["Simulated touch input",653],["If you click on the simulated device screen with the mouse cursor, the device simulator creates touch events in the active input solution (either the Input Manager, the Input System, or both, depending on your project settings).",653],["Note**: The Device Simulator only simulates input when the Editor is in Play mode. The Device Simulator doesn't support multitouch; it can only simulate one finger touch.",653],["",653],["Limitations",653],["The main purpose of the Device Simulator is to view the layout of your application on a target device and test basic interactions. It doesn't provide an accurate representation of how your application runs on the device.",653],["The Simulator view does not simulate the following:",653],["The performance characteristics of a device, such as a device's processor speed or available memory.",653],["The rendering capabilities of a device.",653],["Native plugins that don't work in the Editor.",653],["Platform #define directives for the simulated device, like UNITY_IOS.",653],["Gyroscope rotation.",653],["Only one Simulator view can simulate at one time. This is the active Simulator view.",653],["If you have only one Simulator view open and no Game views open, the one Simulator view is active regardless of whether it's visible or not.",653],["If you have multiple Simulator views open and no Game views open, the last Simulator view that had focus is active.",653],["If you have a mix of Simulator views and Game views open, if you focus a Game view, Unity disables all simulators and if you focus a Simulator view, the Simulator view remains active while it has focus.",653],["The Device Simulator doesn't simulate all APIs in the simulated classes. For more information, see Simulated classes.",653],["Extending the device simulator",654],["The Device Simulator supports plugins to extend its functionality and change the UI of the Control Panel in the Simulator view.",654],["Creating a plugin",654],["To create a Device Simulator plugin, extend the DeviceSimulatorPlugin class.",654],["To insert UI into the Device Simulator view, your plugin must:",654],["Override the title property to return a non-empty string.",654],["Override the OnCreateUI method to return a VisualElement that contains the UI.",654],["If your plugin doesn't meet these conditions, the Device Simulator instantiates the plugin but doesn't display its UI in the Simulator view.",654],["The following example demonstrates how to create a plugin that overrides the title property and adds UI to the Simulator view.",654],["```lang-csharp",654],["public class TouchInfoPlugin : DeviceSimulatorPlugin",654],["public override string title => \"Touch Info\";",654],["private Label m_TouchCountLabel;",654],["private Label m_LastTouchEvent;",654],["private Button m_ResetCountButton;",654],["[SerializeField]",654],["private int m_TouchCount = 0;",654],["public override void OnCreate()",654],["deviceSimulator.touchScreenInput += touchEvent =>",654],["m_TouchCount += 1;",654],["UpdateTouchCounterText();",654],["m_LastTouchEvent.text = $\"Last touch event: {touchEvent.phase.ToString()}\";",654],["};",654],["public override VisualElement OnCreateUI()",654],["VisualElement root = new VisualElement();",654],["m_LastTouchEvent = new Label(\"Last touch event: None\");",654],["m_TouchCountLabel = new Label();",654],["UpdateTouchCounterText();",654],["m_ResetCountButton = new Button {text = \"Reset Count\" };",654],["m_ResetCountButton.clicked += () =>",654],["m_TouchCount = 0;",654],["UpdateTouchCounterText();",654],["};",654],["root.Add(m_LastTouchEvent);",654],["root.Add(m_TouchCountLabel);",654],["root.Add(m_ResetCountButton);",654],["return root;",654],["private void UpdateTouchCounterText()",654],["if (m_TouchCount > 0)",654],["m_TouchCountLabel.text = $\"Touches recorded: {m_TouchCount}\";",654],["else",654],["m_TouchCountLabel.text = \"No taps recorded\";",654],["Simulated classes",655],["The Device Simulator provides simulated classes, which you can use to test code that responds to device-specific behaviors in the Device Simulator.",655],["The following simulated classes are in the UnityEngine.Device namespace:",655],["These simulated classes have the same members as their regular UnityEngine namespace counterparts. You can use them anywhere in your codebase where you would normally use the regular classes. There is no performance impact, and you can use them in release builds.",655],["In the Editor, when the Device Simulator is active, the simulated classes mimic the platform-specific behaviors of the simulated device; for example, Device.SystemInfo.operatingSystem returns the Android or iOS version of the simulated device.",655],["In a built application, or when the Device Simulator isn't active, the simulated classes have the same behavior as their counterparts in the UnityEngine namespace.",655],["Although the simulated classes have the same members as the regular classes, the Device Simulator doesn't simulate every behavior. In the UnityEditor, members that the Device Simulator doesn't simulate have the same behavior as their UnityEngine equivalent, which isn't platform-dependent. For example, the Device Simulator doesn't simulate Device.Screen.brightness. This means this member has the same in-Editor behavior as UnityEngine.Screen.brightness, which always returns 1. For information on which members the Device Simulator simulates, see the API documentation for:",655],["Updating your scripts to use simulated classes",655],["If you want to convert existing code to use classes from the UnityEngine.Device namespace, it's best practice to use alias directives. For example:",655],["using Screen = UnityEngine.Device.Screen;",655],["using Application = UnityEngine.Device.Application;",655],["using SystemInfo = UnityEngine.Device.SystemInfo;",655],["This way you can change which class the entire file uses and not change every API call.",655],["The Simulator view",656],["The Simulator view displays your application on a simulated mobile device. Use it to see how your application appears with the screen shape, resolution, and orientation of that device.",656],["Using the Simulator view",656],["To open the Simulator view, do one of the following:",656],["In the Game view, in the top left corner, use the drop-down menu to switch between the Game view and the Simulator view.",656],["In the menu: Window > General > Device Simulator",656],["Unity simulates the device in the Simulator view. To control the simulation, use the toolbar and the Control Panel.",656],["",656],["Toolbar",656],["The toolbar is at the top of the Simulator view and contains options that, along with the Control Panel, control the simulation.",656],["Control Description ",656],["Game/Simulator view Use this drop-down menu to switch between the Simulator view and the Game view. ",656],["Device selection drop-down menu Choose the device to simulate from the available device definitions. ",656],["Scale Zoom in or out on the simulated screen. ",656],["Fit to Screen Scale the display to fit inside the window. ",656],["Rotate Simulates the physical rotation of the device. The image on the device screen rotates together with the device if you enable auto-rotation and if the device supports rotation. Otherwise, if you rotate the device it causes the image to be sideways or upside down. Note: The Device Simulator doesn't support gyroscope simulation. ",656],["Safe Area Indicates whether the view draws a line around the SafeArea of the current device screen. ",656],["Play Mode behavior This section describes the play mode behavior based on your selection below. ",656],["Focused Enable Focused to shift focus on the selected Game view while the Editor is in Play mode. Only one game view can be in focus when you enter the Play mode. Using Maximized or Fullscreen on Display mode implies focus on the Maximized Game view. Enabling Focussed on a Game view disables it on other Game views. ",656],["VSync (Game view only) Enable VSync (Game view only) to allow syncing, which is useful when recording a video, for example. Unity attempts to render the Game view at the monitor refresh rate, though this is not guaranteed. When this option is enabled, it is still useful to maximize the Game view in Play mode to hide other views and reduce the number of views that Unity renders. ",656],["Enter Play Mode: Choose from the options below to determine the settings for the Editor when it enters the Play mode. ",656],["Normally Select this to view the Game view without forcing focus or maximizing any views to full screen. ",656],["Maximized When this option is selected, Unity runs the Play mode with the Simulator view maximized to 100% of the Editor window. Note: This option doesn't create a Simulator view if you disable the Create Game View On Play Editor preference. ",656],["Control Panel Displays and hides the Control Panel. ",656],["",656],["Control Panel",656],["To open the Control Panel, click Control Panel in the top-right corner of the Toolbar. By default, the Control Panel contains settings for the Application simulated class.",656],["Property Description ",656],["------------------------- ------------------------------------------------------------ ",656],["System Language Specifies the value to receive from Device.Application.systemLanguage. ",656],["Internet Reachability Specifies the value to receive from Device.Application.internetReachability. ",656],["On Low Memory Calls the lowMemory event. ",656],["Device Simulator plugins can change the appearance of the control panel and add content and controls. Some packages, like the Adaptive Performance package, contain Device Simulator plugins. Their UI appears in the Control Panel if you install the package. For more information, see Device Simulator plugins.",656],["Device Simulator",657],["This section of the documentation contains information about Unity's Device Simulator.",657],["Page Description ",657],["------------------------------------------------------------ ------------------------------------------------------------ ",657],["Device Simulator introduction Introduces the Device Simulator and its capabilities. ",657],["The Simulator view Explains how to use the window that the Device Simulator uses to display the simulation. ",657],["Simulated classes Contains information on classes the Device Simulator provides so you can test code that responds to device-specific behavior. ",657],["Adding a device Explains how to define a new device to simulate and use it in the Device Simulator. ",657],["Extending the Device Simulator Explains how to create Device Simulator plugins to extend the functionality and user interface of the Simulator view. ",657],["Display or hide an overlay",658],["To customize your workspace, choose which overlays display in the Scene view.",658],["If you want to save your overlay configuration, refer to Create and manage overlay configurations.",658],["Display or hide an overlay",658],["To display or hide an overlay in the Scene view:",658],["In the Scene view, press the ` key to display the Overlays menu at your cursor.",658],["In the Overlays menu, select an overlay you want to display or hide in the Scene view. An overlay displayed in the Scene view has an eye icon next to it. If an overlay is hidden in the Scene view, the eye icon is crossed out.",658],["Note**: In the Overlays menu, hover over the name of an overlay to highlight its position in the Scene view.",658],["Hide all overlays",658],["To hide all overlays from the Scene view:",658],["In the Scene view, press the ` key to display the Overlays menu at your cursor.",658],["In the Overlays menu, clear the Overlays checkbox.",658],["Tip**: You can also press Shift+` to hide or display all overlays in the Scene view.",658],["Additional resources",658],["\nOverlays\n",658],["\nCreate and manage overlay configurations.\n",658],["Domain Reloading",659],["Domain Reloading resets your scripting state, and is enabled by default. It provides you with a completely fresh scripting state, and resets all static fields and registered handlers each time you enter Play Mode. This means each time you enter Play Mode in the Unity Editor, your Project begins playing in a very similar way to when it first starts up in a build.",659],["Domain Reloading takes time, and this time increases with the number and complexity of the scripts in your Project. When it takes a long time to enter Play Mode, it becomes harder to rapidly iterate on your Project. This is the reason Unity provides the option to turn off Domain Reloading.",659],["Disabling Domain Reloading",659],["To disable Domain Reloading:",659],["Go to Edit > Project Settings > Editor",659],["Make sure Enter Play Mode Options is enabled.",659],["Disable Reload Domain",659],["For more information, see How to configure Play Mode",659],["When Domain Reloading is disabled, entering Play Mode is faster, because Unity does not reset the scripting state each time. However, it is then up to you to ensure your scripting state resets when you enter Play Mode. To do this, you need to add code that resets your scripting state when Play Mode starts.",659],["When Domain Reloading is disabled, Unity still refreshes the scripting state when you update or re-import a script, based on your auto-refresh settings.",659],["Modifying your scripts to perform correctly when Domain Reload is disabled:",659],["To ensure your scripting states correctly reset at Play Mode, you need to make adjustments to static fields and static event handlers in your scripts.",659],["Static fields",659],["When Domain Reloading is disabled, the values of static fields in your code do not automatically reset to their original values. You need to add code that explicitly does this.",659],["The following code example has a static counter field which increments when the user presses the Jump button. When Domain Reloading is enabled, the counter automatically resets to zero when entering Play Mode. When Domain Reloading is disabled, the counter does not reset; it keeps its value in and out of Play Mode. This means that on a second run of your Project in the Editor, the counter might not be at zero if it changed in the previous run.",659],["using UnityEngine;",659],["public class StaticCounterExample : MonoBehaviour",659],["// this counter will not reset to zero when Domain Reloading is disabled",659],["static int counter = 0;",659],["// Update is called once per frame",659],["void Update()",659],["if (Input.GetButtonDown(\"Jump\"))",659],["counter++;",659],["Debug.Log(\"Counter: \" + counter);",659],["To make sure the counter resets even when Domain Reloading is disabled, you must use the [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] attribute, and reset the value explicitly:",659],["using UnityEngine;",659],["public class StaticCounterExampleFixed : MonoBehaviour",659],["static int counter = 0;",659],["[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]",659],["static void Init()",659],["Debug.Log(\"Counter reset.\");",659],["counter = 0;",659],["// Update is called once per frame",659],["void Update()",659],["if (Input.GetButtonDown(\"Jump\"))",659],["counter++;",659],["Debug.Log(\"Counter: \" + counter);",659],["Static event handlers",659],["With Domain Reloading disabled, Unity will not unregister methods from static event handlers when you exit Play Mode. This can lead to complications if you have code that registers methods with static event handlers. For example, on the first Play of your project in the editor, methods would be registered as normal. However on the second Play of your project, those methods would be registered a second time in addition to the first, causing those methods to be called twice when the event occurs.",659],["For example, this code registers a method with the static event handler Application.quitting With Domain Reloading enabled, Unity automatically resets the event handler when Play Mode starts, so the method is only ever registered once. However, with Domain Reloading disabled, the event handler is not cleared, so on the second run of your Project in the editor, the method is registered a second time, and is called twice when the event occurs - which is usually undesirable.",659],["using UnityEngine;",659],["public class StaticEventExample : MonoBehaviour",659],["void Start()",659],["Debug.Log(\"Registering quit function\");",659],["Application.quitting += Quit;",659],["static void Quit()",659],["Debug.Log(\"Quitting!\");",659],["When Domain Reloading is disabled, the above example adds the Quit method again each time you enter Play Mode. This results in an additional “Quitting” message each time you exit Play Mode.",659],["To ensure the event handler resets even when Domain Reloading is disabled, you must use the [RuntimeInitializeOnLoadMethod] attribute, and unregister the method explicitly so that it is not added twice.",659],["using UnityEngine;",659],["public class StaticEventExampleFixed : MonoBehaviour",659],["[RuntimeInitializeOnLoadMethod]",659],["static void RunOnStart()",659],["Debug.Log(\"Unregistering quit function\");",659],["Application.quitting -= Quit;",659],["void Start()",659],["Debug.Log(\"Registering quit function\");",659],["Application.quitting += Quit;",659],["static void Quit()",659],["Debug.Log(\"Quitting the Player\");",659],["For runtime scripts, you must use the [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] attribute to reset static fields and event handlers.",659],["For Editor scripts such as custom Editor windows or Inspectors that use statics, you must use the [InitializeOnEnterPlayMode] attribute to reset static fields and event handlers.",659],["Referencing additional class library assemblies",660],["If your Unity project uses a part of the .NET class library API that Unity doesn’t compile by default, you can provide the C# compiler with a list of additional assemblies to reference during compilation. The behavior depends on which .NET profile the project uses. For more information, see .NET Profile support.",660],[".NET Standard profile",660],["If your project uses the .NET Standard profile, all parts of the .NET class library API are referenced by default. You can’t reference additional assemblies. If part of the API seems to be missing, it might not be included with .NET Standard. Try using the .NET Framework profile instead. To avoid compilation problems when you change profiles, see Switching between profiles.",660],[".NET Framework profile",660],["By default, Unity references the following assemblies when you use the .NET Framework profile:",660],["mscorlib.dll",660],["System.dll",660],["System.Core.dll",660],["System.Runtime.Serialization.dll",660],["System.Xml.dll",660],["System.Xml.Linq.dll",660],["To reference any other class library assemblies, use a csc.rsp file: a response file that contains a list of command line arguments that you can pass to the C# compiler. To use a csc.rsp file, follow the below instructions:",660],["Create a file named csc.rsp in the Assets folder of your Unity project.",660],["Move any assembly files you want to reference into the Assets folder of your project, if they aren’t already in this folder.",660],["Populate the csc.rsp file with command line arguments for the assemblies you want to reference.",660],["For example, if your project uses the HttpClient class, which is defined in the System.Net.Http.dll assembly, the C# compiler might produce this initial error message if the assembly isn’t present:",660],["```lang-csharp",660],["The type HttpClient is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.",660],["To resolve this error, add a csc.rsp file that contains the following command line argument to the project:",660],["```lang-csharp",660],["-r:System.Net.Http.dll",660],["Add a new line with the appropriate command line argument for each assembly you want to reference.",660],["",660],["Switching between profiles",660],["When you use a csc.rsp file to reference class library assemblies and you change the .NET profile, you might experience compilation problems.",660],["If you change the .NET profile from .NET Framework to .NET Standard and your csc.rsp file references an assembly that doesn’t exist in the .NET Standard profile, then compilation fails. To solve the issue, edit the csc.rsp file to remove any references to assemblies that are exclusive to the .NET Framework profile before you change the .NET profile to .NET Standard.",660],["Stable scripting runtime: known limitations",661],["Unity supports a modern .NET runtime. You may encounter the following issues when using the .NET runtime:",661],["Code size",661],["The stable scripting runtime comes with a larger .NET class library API than the legacy scripting runtime. This means the code size is frequently larger. This size increase may be significant, especially on size-constrained and Ahead-of-Time (AOT) platforms.",661],["To mitigate code size increases:",661],["Choose the smallest .NET profile possible (see .NET profile support). The .NET Standard 2.0 profile is about half the size of the .NET 4.x profile, so use the .NET Standard 2.0 profile where possible.",661],["Enable Strip Engine Code in the Unity Editor Player settings (go to Edit > Project Settings, then select the Player category). This option statically analyzes the managed code in the Project, and removes any unused code.",661],["Note**: This option is only available with the IL2CPP scripting backend.",661],["2018-03-15 ",661],[".NET profile support",662],["Unity supports two .NET profiles: .NET Standard and .NET Framework. Each profile provides a different set of APIs so that C# code can interact with .NET class libraries.",662],["The Api Compatibility Level property has two settings:",662],[".NET Standard: .NET Standard 2.1, as published by the .NET Foundation.",662],[".NET Framework 4.8, as published by Microsoft, plus additional APIs in .NET Standard 2.1.",662],["By default, the Api compatibility Level is set to .NET Standard.",662],["To change the .NET profile, go to Edit > Project Settings > Player >Other settings. Under the Configuration heading, set Api Compatibility Level to the desired setting.",662],["Cross-platform compatibility",662],["If you need broad cross-platform compatibility, then set the Api Compatibility Level to .NET Standard. Where possible, Unity supports the APIs in the .NET Standard profile on all platforms. Although some platforms don’t fully support the .NET Standard profile, the .NET Framework profile is less suitable for cross-platform compatibility. The .NET Framework profile includes all APIs in the .NET Standard profile and additional APIs, some of which might work on few or no platforms.",662],["Managed plug-ins",662],["Managed plug-ins are .NET assemblies that are managed outside of Unity and compiled into dynamically linked libraries (DLLs). You can use managed plug-ins in Unity with either the .NET Standard profile or the .NET Framework profile.",662],["The .NET profile of your Unity project determines the level of support for managed plug-ins that are compiled for different versions of .NET. The following table indicates the configurations that Unity supports:",662],["Managed plug-in compilation target API Compatibility Level: ",662],[".NET Standard 2.1 .NET 4.x ",662],[".NET Standard (any version) Supported Supported ",662],[".NET Framework (any version) Limited support Supported ",662],[".NET Core (any version) Not Supported Not Supported ",662],["Support for managed plug-ins compiled for .NET Framework is limited when you use the .NET Standard profile in Unity. Any .NET Framework APIs that are also present in .NET Standard are supported. However, the .NET Framework API contains types and methods that are not available in the .NET Standard profile.",662],["Transport Layer Security (TLS) 1.2",662],["The UnityWebRequest API and all .NET Framework Web APIs fully support TLS 1.2 on all platforms except WebGL. WebGL uses the security settings from the browser the application runs in and the web server instead. The platform-specific local certificate store automatically verifies TLS certificates if available. If access to the certificate store isn’t possible, Unity uses an embedded root certificate store.",662],["2018-03-15 ",662],[".NET profile support added in 2018.1 NewIn20181",662],["DOTS Instancing shaders",663],["To render large instance counts efficiently, BRG uses a new shader instancing mode called DOTS Instancing. Every shader that BRG uses must support DOTS Instancing. In traditional instanced shaders, the shader is passed an array for each instanced property in a constant or uniform buffer, such that each element in each array contains the property value for a single instance in the draw. In DOTS Instanced shaders, Unity passes one 32-bit integer to the shader for each DOTS Instanced property. This 32-bit integer is called a metadata value. This integer can represent anything you want, but typically it represents an offset in the buffer from where the shader loads property data for the instance that the shader is rendering.",663],["DOTS Instancing has many advantages compared to traditional instancing, including the following:",663],["The instance data is stored in a GraphicsBuffer and remains persistent on the GPU, which means that Unity doesn't need to set it up again each time it renders the instance. Setting up data only when an instance actually changes can significantly improve performance in cases where instance data changes rarely or not at all. This is much more efficient than traditional instancing, which requires an engine to set up all data for every instance every frame.",663],["The process for setting up instance data is separate from setting up the draw call. This makes draw call setup lightweight and efficient. BRG makes this possible with a special fast path of the SRP Batcher that only does a minimal amount of work for each draw call. The responsibility for this work moves to you and gives you more control over what to render in each draw call.",663],["The size of a draw call is no longer limited by how much instance data can fit in a constant or uniform buffer. This makes it possible for BRG to render larger instance counts with a single draw call.",663],["Note: The number of instance indices still limits the draw call size, since each index still requires some data. However, an index consumes far less memory than a full set of instanced properties which means many more instances can fit inside a constant or uniform buffer. For example, each index requires 16 byes so if the memory limit for a buffer on a particular platform is 64kb, 4096 indices can fit in the buffer.",663],["If every instance uses the same value for a given property, it is possible to have all instances load the value from the same place in memory. This saves memory and the number of GPU cycles spent duplicating the value for each instance.",663],["Supporting DOTS Instancing",663],["To support DOTS Instancing, a shader needs to do the following:",663],["Use shader model 4.5 or newer. Specify #pragma target 4.5 or higher.",663],["Support the DOTS_INSTANCING_ON keyword. Declare this with #pragma multi_compile _ DOTS_INSTANCING_ON.",663],["Declare at least one block of DOTS Instanced properties each of which has least one property. For more information, see Declaring DOTS Instanced properties.",663],["Note**: Shader Graphs and shaders that Unity provides in URP and HDRP support DOTS Instancing.",663],["",663],["Declaring DOTS Instanced properties",663],["To load instance data, such as transform matrices, the shader needs to define DOTS Instanced properties. Below is an example of a simple DOTS Instanced property block:",663],["UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)",663],["UNITY_DOTS_INSTANCED_PROP(float4, Color)",663],["UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)",663],["To mark the beginning and end of the property block, use the UNITY_DOTS_INSTANCING_START and UNITY_DOTS_INSTANCING_END macros followed by the name of the block. The example uses the name MaterialPropertyMetadata. There are three allowed block names:",663],["BuiltinPropertyMetadata",663],["MaterialPropertyMetadata",663],["UserPropertyMetadata",663],["The shader can declare one of each, so a DOTS Instanced shader can have between zero and three of such blocks. Unity-defined shader code doesn't use UserPropertyMetadata so this name is guaranteed to be free for you to use. URP and HDRP define BuiltinPropertyMetadata for every shader they provide and define MaterialPropertyMetadata for most of them too, so it's best practice to use UserPropertyMetadata. Your custom shaders can use all three possible names, even all at once.",663],["The block can contain any number of DOTS Instanced property definitions formatted like:",663],["UNITY_DOTS_INSTANCED_PROP(PropertyType, PropertyName)",663],["PropertyType can be any HLSL built-in type (like uint, float4, float4x4, or int2x4) except a bool vector, and PropertyName is the name of the DOTS Instanced property. DOTS Instanced properties are completely separate from regular material properties, and you can give them the same name as another regular material property. This is possible because the UNITY_DOTS_INSTANCED_PROP macro generates special constant names which Unity recognizes that don't conflict with other property names. Shaders that Unity provides give DOTS Instanced properties the same names as regular material properties, but you don't need to follow this convention.",663],["Internally, Unity provides the shader with a 32-bit integer metadata value for every DOTS Instanced property the shader declares. Unity sets the metadata value when your code makes a BatchRendererGroup.AddBatch call to create the batch associated with the draw. The metadata value defaults to 0 if Unity doesn't set it. The shader also has access to ByteAddressBuffer unity_DOTSInstanceData which Unity sets to the GraphicsBuffer you pass as an argument to BatchRendererGroup.AddBatch. This buffer is typically where the shader loads the instance data from. Multiple batches can share a single GraphicsBuffer, but it is also possible for each batch to use its own separate GraphicsBuffer for unity_DOTSInstanceData.",663],["Note**: Unity doesn't provide any DOTS Instanced data automatically. It's your responsibility to make sure that the unity_DOTSInstanceData buffer of each batch contains the correct data. Instance data must include many properties that are Unity normally provides for GameObjects, such as transform matrices, light probe coefficients, and lightmap texture coordinates.",663],["",663],["Accessing DOTS Instanced properties",663],["To access DOTS Instanced properties, your shader can use one of the access macros that Unity provides. The access macros assume that instance data in unity_DOTSInstanceData uses the following layout:",663],["The 31 least significant bits of the metadata value contain the byte address of the first instance in the batch within the unity_DOTSInstanceData buffer.",663],["If the most significant bit of the metadata value is 0, every instance uses the value from instance index zero. This means each instance loads directly from the byte address in the metadata value. In this case, the buffer only needs to store a single value, instead of one value per instance.",663],["If the most significant bit of the metadata value is 1, the address should contain an array where you can find the value for instance index instanceID using AddressOfInstance0 + sizeof(PropertyType) * instanceID. In this case, you should ensure that every rendered instance index has valid data in buffer. Otherwise, out-of-bounds access and undefined behavior can occur.",663],["You can also set the the metadata value directly which is useful if you want to use a custom data source that doesn't use the above layout, such as a texture.",663],["Unity provides the following access macros:",663],["Access macro Description ",663],["------------------------------------------------------------ ------------------------------------------------------------ ",663],["UNITY_ACCESS_DOTS_INSTANCED_PROP(PropertyType, PropertyName) Returns the value loaded from unity_DOTSInstanceData using the layout described above. Shaders that Unity provides use this version for DOTS Instanced built-in properties that don’t have a default value to fall back on. ",663],["UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(PropertyType, PropertyName) Returns the same as UNITY_ACCESS_DOTS_INSTANCED_PROP, except if the most significant bit of the metadata value is zero, it returns a default value. The default value is the value of the regular material property with the same name as the DOTS Instanced property, which is why Shaders that Unity provides use the convention where DOTS Instanced properties have the same name as regular material properties. When using the default value, the access macro doesn't access unity_DOTSInstanceData at all. Shaders that Unity provides use this access macro for DOTS Instanced material properties, so the loads fall back to the value set on the material. ",663],["UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_CUSTOM_DEFAULT(PropertyType, PropertyName, DefaultValue) Returns the same as UNITY_ACCESS_DOTS_INSTANCED_PROP unless the most significant bit of the metadata value is zero, in which case this macroreturns DefaultValue instead, and doesn't access unity_DOTSInstanceData. ",663],["UNITY_DOTS_INSTANCED_METADATA_NAME(PropertyType, PropertyName) Returns the metadata value directly without accessing anything. This is useful for custom instance data loading schemes. ",663],["For an example of how to use these macros, see Access macro example.",663],["Alongside the access macros, Unity provides shader functions that load the values of constants directly from the draw command data. Shaders that Unity provides use these functions.",663],["Unity provides the following shader functions:",663],["Shader function Description ",663],["-------------------------------------------- ------------------------------------------------------------ ",663],["LoadDOTSInstancedData_RenderingLayer Returns the renderingLayerMask for the draw command. ",663],["LoadDOTSInstancedData_MotionVectorsParams Returns the motion vector generation mode for the draw command. This is formatted as a float4, which is what Unity shaders expect. ",663],["LoadDOTSInstancedData_WorldTransformParams Returns whether to draw the instance with a flipped triangle winding. See FlipWinding. ",663],["LoadDOTSInstancedData_LightData Returns whether the scene's main Directional Light is active for the instance. The main light can be deactivated for multiple reasons, for example if the light already included in light maps. ",663],["LoadDOTSInstancedData_LODFade Returns the 8 bit crossfade value you set if the LODCrossFade flag is set. If the flag is not set, the return value is undefined. ",663],["",663],["Access macro examples",663],["This section contains examples of the access macros that Unity provides and instructions for how to use these macros to access per-instance data and constant data.",663],["Per-instance",663],["In this example:",663],["The metadata value for Color is 0x80001000.",663],["The instance index is 5.",663],["Data for instance 0 starts at address 0x1000.",663],["Data for instance 5 is at address 0x1000 + 5 * sizeof(float4) = 0x1050",663],["Because the most significant bit is already set, the accessor macros don't load defaults. This means that c0, c1, and c2 will all have the same value, loaded from unity_DOTSInstanceData address 0x1050.",663],["void ExamplePerInstance()",663],["// rawMetadataValue will contain 0x80001000",663],["uint rawMetadataValue = UNITY_DOTS_INSTANCED_METADATA_NAME(float4, Color);",663],["float4 c0 = UNITY_ACCESS_DOTS_INSTANCED_PROP(float4, Color);",663],["float4 c1 = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4, Color);",663],["float4 c2 = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_CUSTOM_DEFAULT(float4, Color, float4(1, 2, 3, 4));",663],["Constant",663],["In this example:",663],["The metadata value for Color is 0x00001000.",663],["The instance index is 5.",663],["Data for instance 0 starts at address 0x1000.",663],["The most significant bit is not set so data for instance 5 is at the same address as instance 0.",663],["Because the most significant bit is not set, the accessor macros that fall back to defaults don't access unity_DOTSInstanceData. This means that:",663],["c0 will contain the value from unity_DOTSInstanceData address 0x1000.",663],["c1 will contain the value of the regular material property Color, and cause a compile error if the Color property doesn't exist.",663],["c2 will contain (1, 2, 3, 4) because that was passed as the explicit default value.",663],["void ExampleConstant()",663],["// rawMetadataValue will contain 0x00001000",663],["uint rawMetadataValue = UNITY_DOTS_INSTANCED_METADATA_NAME(float4, Color);",663],["float4 c0 = UNITY_ACCESS_DOTS_INSTANCED_PROP(float4, Color);",663],["float4 c1 = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4, Color);",663],["float4 c2 = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_CUSTOM_DEFAULT(float4, Color, float4(1, 2, 3, 4));",663],["Advanced DOTS Instanced properties usage",663],["The UNITY_DOTS_INSTANCED_PROP macro has 3 variants:",663],["UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED(PropertyType, PropertyName)",663],["UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(PropertyType, PropertyName)",663],["UNITY_DOTS_INSTANCED_PROP_OVERRIDE_REQUIRED(PropertyType, PropertyName)",663],["These macros allow you to specify if a property can be instanced or not at compile-time. It allows the access macros such as UNITY_ACCESS_DOTS_INSTANCED_PROP to expand to more optimal code and can have significant impact on low-end platforms.",663],["Here is an example of a DOTS Instanced property block using all the macro variants above:",663],["UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)",663],["UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float4, Color)",663],["UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED(float4, SpecColor)",663],["UNITY_DOTS_INSTANCED_PROP_OVERRIDE_REQUIRED(float4, EmissionColor)",663],["UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)",663],["Here is what this declaration means:",663],["\nThe Color property can either be instanced or not. The correct loading path is selected dynamically depending on the property metadata high-bit.\n",663],["\nThe SpecColor property is not instantiable. This declaration won't add an uint32 field in the constant buffer. It is equivalent to not declaring anything at all. It can be useful to quickly disable instancing on a property without the need to modify other parts of the code.\n",663],["\nThe EmissionColor property must be instanced. The property is always loaded from the unity_DOTSInstanceData buffer, and no dynamic branch is ever emitted when accessing the property.\n",663],["By default, UNITY_DOTS_INSTANCED_PROP is the same as UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED. This default behavior can be changed by uncommenting the define UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT in \"com.unity.render-pipelines.core\\ShaderLibrary\\UnityDOTSInstancing.hlsl\". When you do this, the define is enabled, and UNITY_DOTS_INSTANCED_PROP becomes the same as UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED.",663],["Note**: When uncommenting the define UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT, you might need to clear the Library folder to make sure the shaders are correctly recompiled.",663],["On low-end devices, instanced properties can have a significant performance cost. Loading from an SSBO for example, can be a lot slower than a normal constant buffer load. This is because on many low-end devices, this type of buffer load goes through texture samplers, whereas constant buffer loads uses faster hardware unless a dynamic index is used to access the buffer. Instanced properties are always loaded with dynamic indexing since it depends on the property metadata, this means they always go through the texture samplers on low-end devices.",663],["To better optimize your project for low-end devices, you can disable property instancing by default. To do this, enable the define UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT, this sets property instancing to be disabled as default. Once this is done, you can then enable property instancing manually only for the properties that require it.",663],["Details",663],["It is best practice to initialize the first 64 bytes of all unity_DOTSInstanceData buffers to zero and leave them unused. This is because the default metadata value that Unity uses for all metadata values not specified during batch creation is zero. Specifically, when a shader loads a zero metadata value from the UNITY_ACCESS_DOTS_INSTANCED_PROP macro, the shader loads this value from the address zero because the instance index will be disregarded. Ensuring that the first 64 bytes, which is the size of the largest value type (a float4x4 matrix), are zeroes guarantees that such loads predictably return a result of zero. Otherwise, the shader could load something unpredictable, depending on what happens to be located at address zero.",663],["When using DOTS Instancing, Shader Graphs and Shaders that Unity provides use a special convention for transform matrices. To save GPU memory and bandwidth, they store these matrices using only 12 floats instead of the full 16, because four floats are always constant. These shaders expect floats formatted in such a way that the x, y, and z of each column in the matrix are stored in order. In other words, the first three floats are the x, y, and z of the first column, the next three floats are the x, y, and z of the second column, and so on. The matrices don't store the w element of each column. The transform matrices this affects are:",663],["unity_ObjectToWorld",663],["unity_WorldToObject",663],["unity_MatrixPreviousM",663],["unity_MatrixPreviousMI",663],["The following code sample includes a struct that converts regular four-by-four matrices into the 12 floats convention.",663],["```c#",663],["struct PackedMatrix",663],["public float c0x;",663],["public float c0y;",663],["public float c0z;",663],["public float c1x;",663],["public float c1y;",663],["public float c1z;",663],["public float c2x;",663],["public float c2y;",663],["public float c2z;",663],["public float c3x;",663],["public float c3y;",663],["public float c3z;",663],["public PackedMatrix(Matrix4x4 m)",663],["c0x = m.m00;",663],["c0y = m.m10;",663],["c0z = m.m20;",663],["c1x = m.m01;",663],["c1y = m.m11;",663],["c1z = m.m21;",663],["c2x = m.m02;",663],["c2y = m.m12;",663],["c2z = m.m22;",663],["c3x = m.m03;",663],["c3y = m.m13;",663],["c3z = m.m23;",663],["Draw call batching",664],["Draw call batching is a draw call optimization method that combines meshes so that Unity can render them in fewer draw calls. Unity provides two built-in draw call batching methods:",664],["Static batching: For static GameObjects, Unity combines them and renders them together.",664],["Dynamic batching: For small enough meshes, this transforms their vertices on the CPU, groups similar vertices together, and renders them in one draw call.",664],["Unity's built-in draw call batching has several advantages over manually merging meshes; most notably, Unity can still cull meshes individually. However, it also has some downsides; static batching incurs memory and storage overhead, and dynamic batching incurs some CPU overhead.",664],["Requirements and compatibility",664],["This section includes information about the render pipeline compatibility of Unity's built-in draw call batching methods.",664],["Render pipeline compatibility",664],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",664],["-------------------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",664],["Static Batching Yes Yes Yes Yes ",664],["Dynamic Batching Yes Yes No Yes ",664],["",664],["Using draw call batching",664],["The following usage information is relevant for both static and dynamic batching. For information specific to each draw call batching method, such as how to enable and use each method, see Static batching and Dynamic batching.",664],["Mesh Renderers, Trail Renderers, Line Renderers, Particle Systems, and Sprite Renderers are supported for draw call batching. Other types of rendering components, including Skinned Mesh Renderers Cloth, are not supported. Unity only batches Renderers with other Renderers of the same type; for example, Mesh Renderers with Mesh Renderers.",664],["Unity batches draw calls of GameObjects that use the same material. This means to get the best results from draw call batching, share materials among as many GameObjects as possible. If you have two material assets that are identical apart from their textures, you can combine the textures into a single, larger texture. This process is called texture atlasing. For more information, see the Wikipedia article on texture atlasing. When textures are in the same atlas, you can use a single material asset instead.",664],["In the Built-in Render Pipeline, you can use a MaterialPropertyBlock to change material properties without breaking draw call batching. The CPU still needs to make some render-state changes, but using a MaterialPropertyBlock is faster than using multiple materials. If your project uses a Scriptable Render Pipeline, don't use a MaterialPropertyBlock because they remove SRP Batcher compatibility for the material.",664],["Transparent shaders often require Unity to render meshes in back-to-front order. To batch transparent meshes, Unity first orders them from back to front and then tries to batch them. Since Unity must render the meshes back-to-front, it often can't batch as many transparent meshes as opaque meshes.",664],["Unity can't apply dynamic batching to GameObjects that contain mirroring in their Transform component. For example, if one GameObject has a scale of 1 and another GameObject has a scale of -1, Unity can't batch them together.",664],["If you are not able to use draw call batching, manually combining meshes that are close to each other can be a good alternative. For more information on combining meshes, see Combining meshes.",664],["Warning**: When you access shared material properties from a C# script, make sure to use Renderer.sharedMaterial and not Renderer.material. Renderer.material creates a copy of the material and assigns the copy back to the Renderer. This stops Unity from batching the draw calls for that Renderer.",664],["2017-10-26 ",664],["Added note on dynamic batching being incompatible with graphics jobs in 2017.2",664],["Dynamic batching",665],["Dynamic batching is a draw call batching method that batches moving GameObjects to reduce draw calls. Dynamic batching works differently between meshes and geometries that Unity generates dynamically at runtime, such as particle systems. For information about the internal differences between meshes and dynamic geometries, see Dynamic batching for meshes and Dynamic batching for dynamically generated geometries.",665],["Note**: Dynamic batching for meshes was designed to optimize performance on old low-end devices. On modern consumer hardware, the work dynamic batching does on the CPU can be greater than the overhead of a draw call. This negatively affects performance. For more information, see Dynamic batching for meshes.",665],["Requirements and compatibility",665],["This section includes information about the render pipeline compatibility of dynamic batching.",665],["Render pipeline compatibility",665],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",665],["-------------------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",665],["Dynamic Batching Yes Yes No Yes ",665],["Using dynamic batching",665],["Unity always uses dynamic batching for dynamic geometry such as Particle Systems",665],["To use dynamic batching for meshes:",665],["Go to Edit > Project Settings > Player.",665],["In Other Settings, enable Dynamic Batching.",665],["Unity automatically batches moving meshes into the same draw call if they fulfill the criteria described in the common usage information.",665],["",665],["Dynamic batching for meshes",665],["Dynamic batching for meshes works by transforming all vertices into world space. on the CPU, rather than on the GPU. This means dynamic batching is only an optimization if the transformation work is less resource intensive than doing a draw call.",665],["The resource requirements of a draw call depend on many factors, primarily the graphics API. For example, on consoles or modern APIs like Apple Metal, the draw call overhead is generally much lower, and often dynamic batching doesn't produce a gain in performance. To determine whether it's beneficial to use dynamic batching in your application, profile your application with and without dynamic batching.",665],["Unity can use dynamic batching for shadows casters, even if their materials are different, as long as the material values Unity needs for the shadow pass are the same. For example, multiple crates can use materials that have different textures. Although the material assets are different, the difference is irrelevant for the shadow caster pass and Unity can batch shadows for the crate GameObjects in the shadow render step.",665],["Limitations",665],["In the following scenarios, Unity either can't use dynamic batching at all or can only apply dynamic batching to a limited extent:",665],["Unity can't apply dynamic batching to meshes that contain more than 900 vertex attributes and 300 vertices. This is because dynamic batching for meshes has an overhead per vertex. For example, if your shader uses vertex position, vertex normal, and a single UV, then Unity can batch up to 300 vertices. However, if your shader uses vertex position, vertex normal, UV0, UV1, and vertex tangent, then Unity can only batch 180 vertices.",665],["If GameObjects use different material instances, Unity can't batch them together, even if they are essentially the same. The only exception to this is shadow caster rendering.",665],["GameObjects with lightmaps have additional renderer parameters. This means that, if you want to batch lightmapped GameObjects, they must point to the same lightmap location.",665],["Unity can't fully apply dynamic batching to GameObjects that use multi-pass shaders.",665],["Almost all Unity shaders support several lights in forward rendering. To achieve this, they process an additional render pass for each light. Unity only batches the first render pass. It can't batch the draw calls for the additional per-pixel lights.",665],["",665],["Dynamic batching for dynamically generated geometries",665],["The following renderers dynamically generate geometries, such as particles and lines, that you can optimize using dynamic batching:",665],["Dynamic batching for dynamically generated geometries works differently than it does for meshes:",665],["For each renderer, Unity builds all dynamically batchable content into one large vertex buffer.",665],["The renderer sets up the material state for the batch.",665],["Unity then binds the vertex buffer to the GPU.",665],["For each Renderer in the batch, Unity updates the offset in the vertex buffer and submits a new draw call.",665],["This approach is similar to how Unity submits draw calls for static batching.",665],["Dynamic resolution",666],["Dynamic resolution is a Camera setting that allows you to dynamically scale individual render targets, to reduce workload on the GPU. In cases where the application’s frame rate reduces, you can gradually scale down the resolution to maintain a consistent frame rate instead. Unity triggers this scaling if performance data suggests that the frame rate is about to decrease as a result of the application being GPU-bound. You can also trigger the scaling manually by preempting a particularly GPU-intensive section of the application and controlling the scaling via a script. If scaled gradually, dynamic resolution can be almost unnoticeable.",666],["Render pipeline compatibility",666],["Dynamic resolution support depends on which render pipeline your project uses.",666],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",666],[":--------------------- :--------------------------- :---------------------------------- :----------------------------------------- ",666],["Dynamic resolution Yes (1) Yes (1) Yes (2) ",666],["Notes**:",666],["The Built-in Render Pipeline, and the Universal Render Pipeline (URP) both support dynamic resolution as described in this document.",666],["The High Definition Render Pipeline (HDRP) supports dynamic resolution, but you enable and use it in a different way. For information on dynamic resolution in HDRP, see Dynamic resoluton in HDRP.",666],["Supported platforms",666],["Unity supports dynamic resolution on iOS, macOS and tvOS (Metal only), Android (Vulkan only), Windows Standalone (DirectX 12 only), and UWP (DirectX 12 only).",666],["Impact on render targets",666],["With dynamic resolution, Unity does not re-allocate render targets. Conceptually, Unity scales the render target; however, in reality, Unity uses aliasing, and the scaled-down render target only uses a small portion of the original render target. Unity allocates the render targets at their full resolution, and then the dynamic resolution system scales them down and back up again, using a portion of the original target instead of re-allocating a new target.",666],["Scaling render targets",666],["With dynamic resolution, render targets have the DynamicallyScalable flag. You can set this to state whether Unity should scale this render texture as part of the dynamic resolution process or not. Cameras also have the allowDynamicResolution flag, which you can use to set up dynamic resolution so that there is no need to override the render target if you just want to apply dynamic resolution to a less complex Scene.",666],["MRT buffers",666],["When you enable Allow Dynamic Resolution on the Camera, Unity scales all of that Camera’s targets.",666],["Controlling the scaling",666],["You can control the scale through the ScalableBufferManager. The ScalableBufferManager gives you control of the dynamic width and height scale for all render targets you have marked for the dynamic resolution system to scale.",666],["As an example, assume your application is running at a desirable frame rate, but under some circumstances the GPU performance decreases, due to a combination of increased particles, post-effects and screen complexity. The Unity FrameTimingManager allows you to detect when the CPU or GPU performance start to decrease. So you can use the FrameTimingManager to calculate a new desired width and height scale to keep the frame rate within your desired range, and bring the scale down to that value to keep performance stable (either instantly or gradually over a set amount of frames). When the screen complexity reduces and the GPU is performing consistently, you may then raise the width and height scale back to a value that you’ve calculated the GPU can handle.",666],["Example",666],["This example script demonstrates basic use of the API. Add it to a Camera in your Scene, and check Allow Dynamic Resolution in the Camera settings. You also need to open the Player settings (menu: Edit > Project Settings, then select the Player category) and check the Enable Frame Timing Stats checkbox. For more information about the functionality behind the Enable Frame Timing Stats property, see FrameTimingManager.",666],["Clicking the mouse, or tapping the screen with one finger, lowers the height and width resolution by the amount in the scaleWidthIncrement and scaleHeightIncrement variables respectively. Tapping with two fingers raises the resolutions by the same increment.",666],["using System;",666],["using System.Collections;",666],["using System.Collections.Generic;",666],["using UnityEngine;",666],["using UnityEngine.UI;",666],["public class DynamicResolutionTest : MonoBehaviour",666],["public Text screenText;",666],["FrameTiming[] frameTimings = new FrameTiming[3];",666],["public float maxResolutionWidthScale = 1.0f;",666],["public float maxResolutionHeightScale = 1.0f;",666],["public float minResolutionWidthScale = 0.5f;",666],["public float minResolutionHeightScale = 0.5f;",666],["public float scaleWidthIncrement = 0.1f;",666],["public float scaleHeightIncrement = 0.1f;",666],["float m_widthScale = 1.0f;",666],["float m_heightScale = 1.0f;",666],["// Variables for dynamic resolution algorithm that persist across frames",666],["uint m_frameCount = 0;",666],["const uint kNumFrameTimings = 2;",666],["double m_gpuFrameTime;",666],["double m_cpuFrameTime;",666],["// Use this for initialization",666],["void Start()",666],["int rezWidth = (int)Mathf.Ceil(ScalableBufferManager.widthScaleFactor * Screen.currentResolution.width);",666],["int rezHeight = (int)Mathf.Ceil(ScalableBufferManager.heightScaleFactor * Screen.currentResolution.height);",666],["screenText.text = string.Format(\"Scale: {0:F3}x{1:F3}\\nResolution: {2}x{3}\\n\",",666],["m_widthScale,",666],["m_heightScale,",666],["rezWidth,",666],["rezHeight);",666],["// Update is called once per frame",666],["void Update()",666],["float oldWidthScale = m_widthScale;",666],["float oldHeightScale = m_heightScale;",666],["// One finger lowers the resolution",666],["if (Input.GetButtonDown(\"Fire1\"))",666],["m_heightScale = Mathf.Max(minResolutionHeightScale, m_heightScale - scaleHeightIncrement);",666],["m_widthScale = Mathf.Max(minResolutionWidthScale, m_widthScale - scaleWidthIncrement);",666],["// Two fingers raises the resolution",666],["if (Input.GetButtonDown(\"Fire2\"))",666],["m_heightScale = Mathf.Min(maxResolutionHeightScale, m_heightScale + scaleHeightIncrement);",666],["m_widthScale = Mathf.Min(maxResolutionWidthScale, m_widthScale + scaleWidthIncrement);",666],["if (m_widthScale != oldWidthScale m_heightScale != oldHeightScale)",666],["ScalableBufferManager.ResizeBuffers(m_widthScale, m_heightScale);",666],["DetermineResolution();",666],["int rezWidth = (int)Mathf.Ceil(ScalableBufferManager.widthScaleFactor * Screen.currentResolution.width);",666],["int rezHeight = (int)Mathf.Ceil(ScalableBufferManager.heightScaleFactor * Screen.currentResolution.height);",666],["screenText.text = string.Format(\"Scale: {0:F3}x{1:F3}\\nResolution: {2}x{3}\\nScaleFactor: {4:F3}x{5:F3}\\nGPU: {6:F3} CPU: {7:F3}\",",666],["m_widthScale,",666],["m_heightScale,",666],["rezWidth,",666],["rezHeight,",666],["ScalableBufferManager.widthScaleFactor,",666],["ScalableBufferManager.heightScaleFactor,",666],["m_gpuFrameTime,",666],["m_cpuFrameTime);",666],["// Estimate the next frame time and update the resolution scale if necessary.",666],["private void DetermineResolution()",666],["++m_frameCount;",666],["if (m_frameCount <= kNumFrameTimings)",666],["return;",666],["FrameTimingManager.CaptureFrameTimings();",666],["FrameTimingManager.GetLatestTimings(kNumFrameTimings, frameTimings);",666],["if (frameTimings.Length < kNumFrameTimings)",666],["Debug.LogFormat(\"Skipping frame {0}, didn't get enough frame timings.\",",666],["m_frameCount);",666],["return;",666],["m_gpuFrameTime = (double)frameTimings[0].gpuFrameTime;",666],["m_cpuFrameTime = (double)frameTimings[0].cpuFrameTime;",666],["See also",666],["FrameTimingManager API reference.",666],["FrameTimingManager User Manual documentation.",666],["ScalableBufferManager API reference.",666],["2018-09-20  ",666],["Documentation on dynamic resolution added in 2017.4",666],["Dynamic Resolution support for macOS (Metal only), Windows Standalone and UWP (DirectX 12 only) added in 2019.1",666],["Editing Curves",667],["There are several different features and windows in the Unity Editor which use Curves to display and edit data. The methods you can use to view and manipulate curves is largely the same across all these areas, although there are some exceptions.",667],["The Animation Window uses curves to display and edit the values of animated properties over time in an Animation Clip.",667],["Script components can have member variables of type Animation Curve that can be used for all kinds of things. Clicking on those in the Inspector will open up the Curve Editor.",667],["The Audio Source component uses curves to control roll-off and other properties as a function of distance to the Audio Source.",667],["The Particle System uses curves to vary particle properties over time.",667],["While these controls have subtle differences, the curves can be edited in exactly the same way in all of them. This page explains how to navigate and edit curves in those controls.",667],["Adding and Moving Keys on a Curve",667],["A key can be added to a curve by double-clicking on the curve at the point where the key should be placed. It is also possible to add a key by right-clicking on a curve and select Add Key from the context menu.",667],["Once placed, keys can be dragged around with the mouse:",667],["Click on a key to select it. Drag the selected key with the mouse.",667],["To snap the key to the grid while dragging it around, hold down Command on Mac / Control on Windows while dragging.",667],["It is also possible to select multiple keys at once:",667],["To select multiple keys at once, hold down Shift while clicking the keys.",667],["To deselect a selected key, click on it again while holding down Ctrl.",667],["To select all keys within a rectangular area, click on an empty spot and drag to form the rectangle selection.",667],["The rectangle selection can also be added to existing selected keys by holding down Shift.",667],["Keys can be deleted by selecting them and pressing Delete, or by right-clicking on them and selecting Delete Key from the context menu.",667],["Editing Keys",667],["Direct editing of key values in curve editors is a new feature in Unity 5.1. Use Enter/Return or context menu to start editing selected keys, Tab to switch between fields, Enter/Return to commit, and Escape to cancel editing.",667],["Navigating the Curve View",667],["When working with the Animation View you can easily zoom in on details of the curves you want to work with or zoom out to get the full picture.",667],["You can always press F to frame-select the shown curves or selected keys in their entirely.",667],["Zooming",667],["You can zoom the Curve View using the scroll-wheel of your mouse, the zoom functionality of your trackpad, or by holding Alt while right-dragging with your mouse.",667],["You can zoom on only the horizontal or vertical axis:",667],["zoom while holding down Command on Mac / Control on Windows to zoom horizontally.",667],["zoom while holding down Shift to zoom vertically.",667],["Furthermore, you can drag the end caps of the scrollbars to shrink or expand the area shown in the Curve View.",667],["Panning",667],["You can pan the Curve View by middle-dragging with your mouse or by holding Alt while left-dragging with your mouse.",667],["Editing Tangents",667],["A key has two tangents - one on the left for the incoming slope and one on the right for the outgoing slope. The tangents control the shape of the curve between the keys. You can select from a number of different tangent types to control how your curve leaves one key and arrives at the next key. Right-click a key to select the tangent type for that key.",667],["For animated values to change smoothly when passing a key, the left and right tangent must be co-linear. The following tangent types ensure smoothness:",667],["Clamped Auto: This is the default tangent mode. The tangents are automatically set to make the curve pass smoothly through the key. When editing the key's position or time, the tangent adjusts to prevent the curve from \"overshooting\" the target value. If you manually adjust the tangents of a key in Clamped Auto mode, it is switched to Free Smooth mode. In the example below, the tangent automatically goes into a slope and levels out while the key is being moved:",667],["Auto: This is a Legacy tangent mode, and remains an option to be backward compatible with older projects. Unless you have a specific reason to use this mode, use the default Clamped Auto. When a key is set to this mode, the tangents are automatically set to make the curve pass smoothly through the key. However, there are two differences compared with Clamped Auto mode:",667],["The tangents do not adjust automatically when the key's position or time is edited; they only adjust when initially setting the key to this mode.",667],["When Unity calculates the tangent, it does not take into account avoiding \"overshoot\" of the target value of the key.",667],["Free Smooth: Drag the tangent handles to freely set the tangents. They are locked to be co-linear to ensure smoothness.",667],["Flat: The tangents are set to be horizontal (this is a special case of Free Smooth).",667],["Sometimes you might not want the curve to be smooth when passing through a key. To create sharp changes in the curve, choose one of the Broken tangent modes.",667],["When using broken tangents, the left and right tangent can be set individually. Each of the left and right tangents can be set to one of the following types:",667],["Broken - Free: Drag the tangent handle to freely set the tangents.",667],["Broken - Linear: The tangent points towards the neighboring key. To make a linear curve segment, set the tangents at both ends to be Linear. In the example below, all three keys have been set to Broken - Linear, to achieve straight lines from key to key.",667],["Broken - Constant: The curve retains a constant value between two keys. The value of the left key determines the value of the curve segment.",667],["Editing a Prefab in Prefab Mode",668],["To edit a Prefab Asset, open it in Prefab Mode. Prefab Mode allows you to view and edit the contents of the Prefab Asset separately from any other GameObjects in your Scene. Changes that you make in Prefab Mode affect all instances of that Prefab.",668],["",668],["Entering and exiting Prefab Mode",668],["You can edit a Prefab Asset in isolation, or in context.",668],["In isolation:* When you edit a Prefab in isolation, Unity hides the rest of your current working Scene, and you only see the GameObjects that relate to the Prefab itself (plus, optionally, a pre-set editing environment *- see below).",668],["In context:** When you edit a Prefab in context, the rest of your current working Scene remains visible, but locked for editing.",668],["Editing in isolation",668],["You can begin to edit a Prefab in Prefab Mode in several ways. To open a Prefab Asset and edit it in isolation you can do it in the following ways:",668],["Double-click the Prefab Asset in the Project window",668],["Select a Prefab Asset in the Project window and click the Open Prefab button in the Inspector window",668],["When you enter Prefab Mode in isolation, Unity only shows the contents of that Prefab in the Scene view and the Hierarchy window. In the following image, the root of the Prefab is a regular GameObject - it doesn’t have the blue Prefab instance icon.",668],["In Prefab Mode, the Scene view displays a breadcrumb bar at the top. The rightmost entry is the currently open Prefab. Use the breadcrumb bar to navigate back to the main Scenes or other Prefab Assets that you might have opened.",668],["The Hierarchy window displays a Prefab header bar at the top which shows the currently open Prefab. You can use the back arrow in the header bar to navigate back one step, which is equivalent to clicking the previous breadcrumb in the breadcrumb bar in the Scene view.",668],["Editing in context",668],["Alternatively, you can open a Prefab Asset in Context via an instance of that Prefab. Ways of doing that include:",668],["Select a Prefab instance in the Hierarchy window and click the Open button in the Inspector window",668],["Select a Prefab instance in the Hierarchy window and press P on the keyboard. This is the default keyboard binding",668],["Use the arrow button next to the Prefab instance in the Hierarchy window",668],["By default, Unity displays the visual representation of the context in gray scale to visually distinguish it from the Prefab contents you edit. However, you can use the Context: control in the Prefab bar to set it to any of the following states:",668],["Normal** - Shows the context with its normal colors",668],["Gray** - Shows the context in gray scale",668],["Hidden** - Hides the context entirely so only the Prefab content is visible",668],["You cannot select the GameObjects that are part of the context, nor do they show in the Hierarchy. This is so you can focus on editing your Prefab without accidentally selecting other unrelated GameObjects, and without having a cluttered Hierarchy window. However, when you move GameObjects around that are part of the Prefab contents, you can use the snapping features in Unity to snap to GameObjects in the context, provided the context is not set to Hidden.",668],["In Prefab Mode in Context, Unity displays the Prefab contents at a position that matches that of the Prefab instance it was opened through. This means that you might preview the root Transform of the Prefab contents with different position and rotation values than the Prefab Asset actually has.",668],["You cannot edit these values in Prefab Mode in Context. If you need to edit them, you can either open the Prefab in isolation, or select the Prefab Asset in the Project window and edit the values in the Inspector.",668],["Apart from the root Transform properties, you can also override other properties of a Prefab instance, which might drastically change its appearance compared to the Prefab Asset it’s an instance of. To preview these overridden values from the Prefab instance, while in Prefab Mode in Context enable the Show Overrides toggle in the Prefab bar. While this setting is enabled, any properties that ayou override on the Prefab instance are previewed the same way on the Prefab contexts and you cannot edit them. To edit those properties, disable the Show Overrides toggle again.",668],["",668],["Auto Save",668],["Prefab Mode has an Auto Save setting in the top right corner of the Scene view. When it is enabled, Unity automatically saves any changes that you make to a Prefab to the Prefab Asset. Auto Save is on by default.",668],["If you want to make changes without automatically saving those changes to the Preset Asset, disable the Auto Save checkbox. In this case, Unity asks you if you want to save unsaved changes or not when you exit Prefab Mode for the current Prefab. If editing a Prefab in Prefab Mode seems slow, turning off Auto Save might help.",668],["Changing between isolation or in context mode",668],["When you open Prefab Mode via a Prefab Asset, Unity displays the contents of the Prefab in isolation. However, when you open Prefab Mode via a Prefab instance in the Hierarchy window, this opens Prefab Mode in Context.",668],["When you open Prefab Mode this way, you can see the context of the Prefab instance in the Scene view even though you are not editing the instance but rather the Prefab Asset itself. For example, if you open Prefab Mode in Context via a Prefab instance in a Scene, then you can see the surroundings in that Scene while you edit the Prefab. The Prefab is also shown with the same lighting conditions as in the Scene.",668],["If you have a Prefab instance that you do not want to open in context, but want to open in isolation, hold down the Alt key and click the Open button or the arrow button to open Prefab Mode. You can also set up a custom shortcut in the Shortcuts window for the command Stage > Edit Prefab in Isolation.",668],["",668],["Undo",668],["When you make changes to a Prefab Asset while in Prefab Mode, you can only undo those changes while still in Prefab Mode. Once you exit Prefab Mode for a given Prefab Asset, your edits relating to that Prefab Asset are no longer available in the undo history.",668],["",668],["Editing Environment",668],["You can assign a Scene as an editing environment to be used with Prefab Mode in Isolation. This allows you to edit your Prefab against a backdrop of your choosing rather than an empty Scene. This can be useful to see how your Prefab looks against a specific scenery of your choice. Unity only uses this editing environment when you open Prefab Mode in Isolation.",668],["You cannot select the GameObjects in the Scene that you assign as the editing environment when in Prefab Mode, nor do they show in the Hierarchy. This is so you can focus on editing your Prefab without accidentally selecting other unrelated GameObjects, and without having a cluttered Hierarchy window.",668],["To set a Scene as the editing environment, open the Editor window (top menu: Edit > Project Settings, then select the Editor category) and go to the Prefab Editing Environment section. Use the Regular Environment setting for \"non-UI\" Prefabs, and the UI Environment setting for UI Prefabs. UI Prefabs are those which have a Rect Transform component on the root, rather than a regular Transform component. “non-UI” Prefabs are those which have a regular Transform component.",668],["Editing a Prefab via its instances",669],["The Inspector for the root of a Prefab instance has three more controls than a normal GameObject: Open, Select and Overrides.",669],["The Open button opens the Prefab Asset that the instance is from in Prefab Mode, allowing you to edit the Prefab Asset and thereby change all of its instances. The Select button selects the Prefab Asset that this instance is from in the Project window. The Overrides button opens the overrides drop-down window.",669],["",669],["Overrides dropdown",669],["The Overrides drop-down window shows all the overrides on the Prefab instance. It also lets you apply overrides from the instance to the Prefab Asset, or revert overrides on the instance back to the values on the Prefab Asset. The Overrides drop-down button only appears for the root Prefab instance, not for Prefabs that are inside other Prefabs.",669],["The Overrides drop-down window allows you to apply or revert prefab overrides individually, or apply or revert all the prefab overrides in one go.",669],["Applying** an override modifies the Prefab Asset. This puts the override (which is currently only on your Prefab instance) onto the Asset. This means the Prefab Asset now has that modification, and the Prefab instance no longer has that modification as an override.",669],["Reverting** an override modifies the Prefab instance. This essentially discards your override and reverts it back to the state of the Prefab Asset.",669],["The drop-down window shows a list of changes on the instance in the form of modified, added and removed components, and added GameObjects (including other Prefabs).",669],["To inspect an entry, click it. This displays a floating view that shows the change and allows you to revert or apply that change.",669],["For components with modified values, the view displays a side-by-side comparison of the component’s values on the Prefab Asset and the modified component on the Prefab instance. This allows you to compare the original Prefab Asset values with the current overrides, so that you can decide whether you would like to revert or apply those values.",669],["In the example below, the \"GermOBlaster\" child GameObject exists on both the Prefab Asset and the Prefab instance, however its scale has been increased on the instance. This increase in scale is an instance override, and can be seen as a side-by-side comparison in the Overrides drop-down window.",669],["The Overrides drop-down window also has Revert All and Apply All buttons for reverting or applying all changes at once. If you have Prefabs inside other Prefabs, the Apply All button always applies to the outermost Prefab, which is the one that has the Overrides drop-down button on its root GameObject.",669],["If you select multiple entries at once, the Revert All and Apply All buttons are replaced by Revert Selected and Apply Selected buttons. You can use these to revert or apply multiple overrides at once. Similar to the Apply All button, the Apply Selected button always applies to the outermost Prefab.",669],["If there are unused overrides on any selected objects, the Overrides drop down displays an option that allows you to remove them.",669],["",669],["Context menus",669],["You can also revert and apply individual overrides using the context menu in the Inspector, instead of using the Overrides drop-down window.",669],["Overridden properties are shown in bold. They can be reverted or applied via a context menu:",669],["Modified components can be reverted or applied via the cog drop-down button or context menu of the component header:",669],["Added components have a plus badge that overlays the icon. They can be reverted or applied via the cog drop-down button or context menu of the component header:",669],["Removed components have a minus badge that overlays the icon. The removal can be reverted or applied via the cog drop-down button or context menu of the component header. Reverting the removal puts the component back, and applying the removal deletes it from the Prefab Asset as well:",669],["GameObjects (including other Prefabs) that are added as children to a Prefab instance have a plus badge that overlays the icon in the Hierarchy. They can be reverted or applied via the context menu on the object in the Hierarchy:",669],["2018-07-31 ",669],["Nested Prefabs and Prefab Variants added in 2018.3",669],["Editing properties",670],["Properties are settings and options for GameObject components and Assets. You edit properties in an Inspector window.",670],["Properties fall into the following major categories:",670],["\nReferences: links to other GameObjects and Assets.\n",670],["\nValues: numbers, colors, on/off settings, text, and so on.\n",670],["References",670],["Reference properties take compatible Project Assets or GameObjects in the Scene as inputs. For example, the Mesh Filter component refers to a Mesh Asset somewhere in the Project.",670],["When you create a component, its reference properties are unassigned.",670],["You assign references to properties by dragging and dropping objects and Assets onto reference property fields, or using an Object Picker window.",670],["Some reference properties accept specific types of components (for example, Transform). When you assign a GameObject to those properties, Unity locates the first component of the required type on the GameObject, and assigns it to the reference property. If the GameObject doesn't have any components of the right type, you cannot assign the GameObject to the property.",670],["",670],["Assigning references by dragging and dropping",670],["To assign a reference to a property, drag and drop a compatible GameObject or Asset onto the property field in the Inspector.",670],["",670],["Assigning references with the Object Picker window",670],["Use the Object Picker window to find and select a reference object to assign.",670],["Click the small circle icon to the right of the property in the Inspector to open an Object Picker window.",670],["Find the object or Asset you want to reference, and double click it to assign it to the property.",670],["Values",670],["You edit most value properties using simple controls. For example:",670],["Fields** where you enter text and numeric values.",670],["You can type numeric values directly in a property field, or click and drag the property label to increase and decrease the value.",670],["Some properties also have sliders for adjusting numeric values.",670],["Check boxes** where you toggle properties on and off.",670],["Drop-downs** and pop-ups where you choose one of multiple possible values.",670],["",670],["Numeric field expressions",670],["Numeric field input controls also accept mathematical expressions, for example entering 2+3 into a field will",670],["result in value 5. See ExpressionEvaluator C# class documentation for details on",670],["which expressions are supported.",670],["Numeric fields also support special functions that are useful when editing multiple selected objects at once:",670],["L(a,b) results in linear ramp between a and b. ",670],[" ",670],["Entering L(-6,6) into X coordinate distributes the ten selected capsules between -6 and 6.*",670],["R(a,b) results in a random value between a and b. ",670],[" ",670],["Entering R(-2,2) into Z coordinate sets the Z coordinate of the selected capsules to a random value between -2 and 2.*",670],["+=, -=, *=, /= expressions can be used to modify the current value, for example entering *=2 makes all",670],["the the field value twice as large. ",670],[" ",670],["Entering /=3 into Z coordinate makes all Z coordinates 3x smaller.*",670],["You can combine math expressions. For example, you could use the expression, L(0,2*pi), which produces a",670],["linear distribution of values between 0 and 2pi radians, as the argument of a trigonometric function.",670],["To illustrate, the following example uses this linear ramp function as the argument to sine and cosine functions",670],["in order to distribute a set of selected objects in a circle: ",670],[" ",670],["Entering cos(L(0,2*pi))*5 into X and sin(L(0,2*pi))*5 into Z coordinates places the ten selected capsules in a circle.*",670],["When writing custom inspectors, all EditorGUI.PropertyField",670],["and EditorGUILayout.PropertyField controls automatically get support for the",670],["numeric expressions.",670],["Some GameObjects and Assets have more complex properties that you edit with specialized controls or dedicated editors. The rest of this section describes how to set these complex properties.",670],["Note**: Constrain Proportions Scale does not support math expressions for multi-selection.",670],["",670],["Color values",670],["The Inspector window displays color properties as swatches.",670],["Click any swatch to open a color picker or an HDR color picker, depending on the context. For example, Unity displays the HDR Color Picker window when you edit the emission color property in the standard shader.",670],["You can also use the eyedropper tool to pick color values from anywhere on the screen.",670],["To pick a color, click the eyedropper button next to a color property, then click anywhere on the screen. Unity sets the color property to the color of the pixel you clicked.",670],["You can save the colors you set in reusable swatch libraries that you can share between projects.",670],["",670],["Gradient values",670],["A gradient is a visual representation of a color progression. They are useful for blending one color gradually into another, over space or time.",670],["In Unity, gradient values are used by the particle system, line renderer",670],["and a few other components. You can also have public Gradient class variables in your",670],["C# scripts, and the inspector will display a gradient editor for them.",670],["The gradient editor shows the main colors, called keys, and all the intermediate shades between them in the gradient bar (1).",670],["Upward-pointing arrows along the bottom of the gradient bar represent color keys (2).",670],["\nClick a key to select it. Unity displays its color value in the Color field.\n",670],["\nClick the color swatch (3) to edit the color using a standard color picker.\n",670],["\nYou can also use the eyedropper tool (4) to pick color values from anywhere on the screen. Click the eyedropper button then click anywhere on the screen. Unity sets the color property to the color of the pixel you clicked.\n",670],["\nClick an empty area under the gradient bar to add a key.\n",670],["\nClick and drag a key to move it.\n",670],["\nTo delete a key, select it and use the Ctrl/Cmd + Delete shortcut.\n",670],["Downward-pointing arrows above the gradient bar represent alpha keys (5) that control the gradient's transparency at a given point. You add and edit alpha keys the same way you edit color keys. When you select an alpha key, the gradient editor displays an Alpha slider instead of the Color field.",670],["By default, a gradient has two keys set to 100% alpha, which makes the gradient fully opaque. You can edit a key to adjust the transparency, and add additional keys as needed.",670],["A gradient can use several different color interpolation modes:",670],["\nBlend mode linearly interpolates between the color keys.\n",670],["\nBlend (Perceptual) mode interpolates between the color keys using a perceptually uniform \"Oklab\" color space.\n",670],["\nFixed mode does not interpolate the colors; the value of the color or alpha key is used until the next key.\n",670],["",670],["Curves",670],["A Curve is a line graph that shows the response (on the y axis) to the varying value of an input (on the x axis).",670],["Unity uses curves in a variety of different contexts, especially in animation. Curve editors have a number of different options and tools. For details, see Editing Curves.",670],["Bar sliders",670],["A bar slider is a specialized control that lets you allocate a particular resource visually. For example, the LOD Group component uses a bar slider to define transitions between GameObject LOD levels.",670],["You adjust the relative values of each segment in the bar by dragging the segment edges. Some bar sliders also have draggable handles.",670],["Arrays",670],["When a script exposes an array as a public variable, the Inspector displays a control that lets you edit both the number of items in the array (Size) and the values or references within it.",670],["When you decrease the Size value, Unity removes values from the end of the array.",670],["When you increase the Size value, Unity copies the current last value into all the new elements it adds.",670],["Tip: ",670],["\n - \n",670],["To set up an array whose values are mostly the same, add the first element and then change the size to copy its value to subsequent elements. ",670],["",670],["Creating swatch libraries",670],["Use swatch libraries to reuse, save, and share colors, gradients, and animation curves. You can save and choose swatches in the Color Picker, Gradient Editor, and Curve Editor.",670],["A swatch library is a collection of swatches that you save in a file. The Swatches section displays a single library at a time.",670],["To save a swatch:",670],["Open the Color Picker, Gradient Editor, or Curve Editor. For example, select Main Camera in the Hierarchy window.",670],["In the Inspector window, click Background Color.",670],["In the picker window, adjust the color, gradient, or curve to your liking.",670],["In Swatches, click the outlined box.",670],["If the view is in List mode, optionally type a name for the swatch.",670],["Drag and drop swatches to change their order. Right-click a swatch to move it to the top, replace it, rename it, or delete it. You can also delete a swatch by Alt/Option-clicking it.",670],["Use the drop-down menu in Swatches to:",670],["Choose List or Grid to change the view. The List view also displays the names of swatches.",670],["Choose a swatch library.",670],["Choose Create a Library to create a new swatch library and the location to save it in.",670],["Choose Reveal Current Library Location to view the current library in Windows Explorer/Mac OS Finder.",670],["By default, Unity saves swatch libraries in your user preferences. You can also save a swatch library in your Project. Unity saves Project swatch libraries in the Editor folder of the Assets folder. To share Project swatch libraries between users, or to include them in a package, add them to a revision control repository.",670],["To edit a Project swatch library:",670],["Select the swatch library in the Project window.",670],["In the Inspector window, click Edit.",670],["Reorganized Inspector section pages in Unity 2020.1",670],["Custom Editors",671],["Note**: It's strongly recommended to use the UI Toolkit to extend the Unity Editor, as it provides a more modern, flexible, and scalable solution than IMGUI.",671],["To speed up application development, create custom editors for components you commonly use. This page shows you how to create a simple script to make GameObjects always look at a point.",671],["Create a C# script and name it \"LookAtPoint\".",671],["Open the script and replace its contents with the code below.",671],["Attach the script to a GameObject in your Scene.",671],["//C# Example (LookAtPoint.cs)",671],["using UnityEngine;",671],["public class LookAtPoint : MonoBehaviour",671],["public Vector3 lookAtPoint = Vector3.zero;",671],["void Update()",671],["transform.LookAt(lookAtPoint);",671],["When you enter Play mode, the GameObject that you attached the script to now orientates itself towards the coordinates you set to the \"Look At Point\" property. When writing Editor scripts, it's often useful to make certain scripts execute during Edit mode, while your application is not running. To do this, add the ExecuteInEditMode attribute to the class, like this:",671],["//C# Example (LookAtPoint.cs)",671],["using UnityEngine;",671],["[ExecuteInEditMode]",671],["public class LookAtPoint : MonoBehaviour",671],["public Vector3 lookAtPoint = Vector3.zero;",671],["void Update()",671],["transform.LookAt(lookAtPoint);",671],["Now if you move the GameObject in the Editor, or change the values of \"Look At Point\" in the Inspector, the GameObject updates its rotation so that it looks at the target point in world space.",671],["Making a Custom Editor",671],["The above demonstrates how you can get simple scripts running during edit-time, however this alone does not allow you to create your own Editor tools. The next step is to create a Custom Editor for the script you just created.",671],["When you create a script in Unity, by default it inherits from MonoBehaviour, and therefore is a component that you can attach to a GameObject. When you place a component on a GameObject, the Inspector displays a default interface that you can use to view and edit every public variable, for example: an integer, a float, or a string.",671],["This is how the Inspector for the LookAtPoint component looks by default:",671],["A custom editor is a separate script which replaces this default layout with any editor controls that you choose.**",671],["To create the custom editor for the LookAtPoint script:",671],["Create a new C# script and name it \"LookAtPointEditor\".",671],["Open the script and replace its contents with the code below.",671],["//C# Example (LookAtPointEditor.cs)",671],["using UnityEngine;",671],["using UnityEditor;",671],["[CustomEditor(typeof(LookAtPoint))]",671],["[CanEditMultipleObjects]",671],["public class LookAtPointEditor : Editor",671],["SerializedProperty lookAtPoint;",671],["void OnEnable()",671],["lookAtPoint = serializedObject.FindProperty(\"lookAtPoint\");",671],["public override void OnInspectorGUI()",671],["serializedObject.Update();",671],["EditorGUILayout.PropertyField(lookAtPoint);",671],["serializedObject.ApplyModifiedProperties();",671],["This class must inherit from Editor. The CustomEditor attribute informs Unity which component it should act as an editor for. The CanEditMultipleObjects attribute tells Unity that you can select multiple objects with this editor and change them all at the same time.",671],["Unity executes the code in OnInspectorGUI it displays the editor in the Inspector. You can put any GUI code in here and it works in the same way as OnGUI does, but runs inside the Inspector. Editor defines the target property that you can use to access the GameObject you are inspecting.",671],["This is how the Inspector for the LookAtPoint component looks with the new editor:",671],["This looks very similar (although the \"Script\" field is now not present, because the editor script does not add any Inspector code to show it).",671],["However now that you have control over how the Inspector displays in an Editor script, you can use any code you like to lay out the Inspector fields, allow the user to adjust the values, and even display graphics or other visual elements. In fact all of the Inspectors you see within the Unity Editor including the more complex Inspectors such as the terrain system and animation import settings, are all made using the same API that you have access to when creating your own custom Editors.",671],["Here is a simple example which extends your editor script to display a message that indicates whether the target point is above or below the GameObject:",671],["//C# Example (LookAtPointEditor.cs)",671],["using UnityEngine;",671],["using UnityEditor;",671],["[CustomEditor(typeof(LookAtPoint))]",671],["[CanEditMultipleObjects]",671],["public class LookAtPointEditor : Editor",671],["SerializedProperty lookAtPoint;",671],["void OnEnable()",671],["lookAtPoint = serializedObject.FindProperty(\"lookAtPoint\");",671],["public override void OnInspectorGUI()",671],["serializedObject.Update();",671],["EditorGUILayout.PropertyField(lookAtPoint);",671],["serializedObject.ApplyModifiedProperties();",671],["if (lookAtPoint.vector3Value.y > (target as LookAtPoint).transform.position.y)",671],["EditorGUILayout.LabelField(\"(Above this object)\");",671],["if (lookAtPoint.vector3Value.y < (target as LookAtPoint).transform.position.y)",671],["EditorGUILayout.LabelField(\"(Below this object)\");",671],["This is how the Inspector for the LookAtPoint component looks with the message showing if the target point is above or below the GameObject.",671],["You have full access to all the IMGUI commands to draw any type of interface, including rendering Scenes using a Camera within Editor windows.",671],["Scene View Additions",671],["You can add extra code to the Scene View. To do this, implement OnSceneGUI in your custom editor.",671],["OnSceneGUI works just like OnInspectorGUI except it runs in the Scene view. To help you make your own editing controls, you can use the functions defined in the Handles class. All functions in there are designed for working in 3D Scene views.",671],["//C# Example (LookAtPointEditor.cs)",671],["using UnityEngine;",671],["using UnityEditor;",671],["[CustomEditor(typeof(LookAtPoint))]",671],["[CanEditMultipleObjects]",671],["public class LookAtPointEditor : Editor",671],["SerializedProperty lookAtPoint;",671],["void OnEnable()",671],["lookAtPoint = serializedObject.FindProperty(\"lookAtPoint\");",671],["public override void OnInspectorGUI()",671],["serializedObject.Update();",671],["EditorGUILayout.PropertyField(lookAtPoint);",671],["if (lookAtPoint.vector3Value.y > (target as LookAtPoint).transform.position.y)",671],["EditorGUILayout.LabelField(\"(Above this object)\");",671],["if (lookAtPoint.vector3Value.y < (target as LookAtPoint).transform.position.y)",671],["EditorGUILayout.LabelField(\"(Below this object)\");",671],["serializedObject.ApplyModifiedProperties();",671],["public void OnSceneGUI()",671],["var t = (target as LookAtPoint);",671],["EditorGUI.BeginChangeCheck();",671],["Vector3 pos = Handles.PositionHandle(t.lookAtPoint, Quaternion.identity);",671],["if (EditorGUI.EndChangeCheck())",671],["Undo.RecordObject(target, \"Move point\");",671],["t.lookAtPoint = pos;",671],["t.Update();",671],["If you want to add 2D GUI objects (for example: GUI or EditorGUI), you need to wrap them in calls to Handles.BeginGUI() and Handles.EndGUI().",671],["Editor Windows",672],["Note**: It's strongly recommended to use the UI Toolkit to extend the Unity Editor, as it provides a more modern, flexible, and scalable solution than IMGUI.",672],["You can create any number of custom windows in your app. These behave just like the Inspector, Scene or any other built-in ones. This is a great way to add a user interface to a sub-system for your game.",672],["Making a custom Editor Window involves the following simple steps:",672],["Create a script that derives from EditorWindow.",672],["Use code to trigger the window to display itself.",672],["Implement the GUI code for your tool.",672],["Derive From EditorWindow",672],["In order to make your Editor Window, your script must be stored inside a folder called \"Editor\". Make a class in this script that derives from EditorWindow. Then write your GUI controls in the inner OnGUI function.",672],["using UnityEngine;",672],["using UnityEditor;",672],["using System.Collections;",672],["public class Example : EditorWindow",672],["void OnGUI () {",672],["// The actual window code goes here",672],["MyWindow.cs - placed in a folder called 'Editor' within your project.",672],["Showing the window",672],["In order to show the window on screen, make a menu item that displays it. This is done by creating a function which is activated by the",672],["MenuItem property.",672],["The default behavior in Unity is to recycle windows, so selecting the menu item again would show existing windows. This is done by using the function EditorWindow.GetWindow Like this:",672],["using UnityEngine;",672],["using UnityEditor;",672],["using System.Collections;",672],["class MyWindow : EditorWindow {",672],["[MenuItem (\"Window/My Window\")]",672],["public static void ShowWindow () {",672],["EditorWindow.GetWindow(typeof(MyWindow));",672],["void OnGUI () {",672],["// The actual window code goes here",672],["Showing the MyWindow",672],["This will create a standard, dockable editor window that saves its position between invocations, can be used in custom layouts, etc. To have more control over what gets created, you can use GetWindowWithRect",672],["Implementing Your Window's GUI",672],["The actual contents of the window are rendered by implementing the OnGUI function. You can use the same UnityGUI classes you use for your ingame GUI (GUI and GUILayout). In addition we provide some additional GUI controls, located in the editor-only classes EditorGUI and EditorGUILayout. These classes add to the controls already available in the normal classes, so you can mix and match at will.",672],["The following C# code shows how you can add GUI elements to your custom EditorWindow:",672],["using UnityEditor;",672],["using UnityEngine;",672],["public class MyWindow : EditorWindow",672],["string myString = \"Hello World\";",672],["bool groupEnabled;",672],["bool myBool = true;",672],["float myFloat = 1.23f;",672],["// Add menu item named \"My Window\" to the Window menu",672],["[MenuItem(\"Window/My Window\")]",672],["public static void ShowWindow()",672],["//Show existing window instance. If one doesn't exist, make one.",672],["EditorWindow.GetWindow(typeof(MyWindow));",672],["void OnGUI()",672],["GUILayout.Label (\"Base Settings\", EditorStyles.boldLabel);",672],["myString = EditorGUILayout.TextField (\"Text Field\", myString);",672],["groupEnabled = EditorGUILayout.BeginToggleGroup (\"Optional Settings\", groupEnabled);",672],["myBool = EditorGUILayout.Toggle (\"Toggle\", myBool);",672],["myFloat = EditorGUILayout.Slider (\"Slider\", myFloat, -3, 3);",672],["EditorGUILayout.EndToggleGroup ();",672],["This example results in a window which looks like this:",672],["For more info, take a look at the example and documentation on the EditorWindow page.",672],["Property Drawers",673],["Note**: It's strongly recommended to use the UI Toolkit to extend the Unity Editor, as it provides a more modern, flexible, and scalable solution than IMGUI.",673],["Property Drawers can be used to customize the look of certain controls in the Inspector window by using attributes on your scripts, or by controlling how a specific Serializable class should look.",673],["Property Drawers have two uses:",673],["Customize the GUI of every instance of a Serializable class.",673],["Customize the GUI of script members with custom Property Attributes.",673],["Customize the GUI of a Serializable class",673],["If you have a custom Serializable class, you can use a Property Drawer to control how it looks in the Inspector. Consider the Serializable class Ingredient in the script examples below (Note: These are not editor scripts. Property attribute classes should be placed in a regular script file):",673],["C# (example)**:",673],["using System;",673],["using UnityEngine;",673],["enum IngredientUnit { Spoon, Cup, Bowl, Piece }",673],["// Custom serializable class",673],["[Serializable]",673],["public class Ingredient",673],["public string name;",673],["public int amount = 1;",673],["public IngredientUnit unit;",673],["public class Recipe : MonoBehaviour",673],["public Ingredient potionResult;",673],["public Ingredient[] potionIngredients;",673],["Using a custom Property Drawer, every appearance of the Ingredient class in the Inspector can be changed. Compare the look of the Ingredient properties in the Inspector without and with a custom Property Drawer:",673],["You can attach the Property Drawer to a Serializable class by using the CustomPropertyDrawer attribute and pass in the type of the Serializable class that it's a drawer for.",673],["C# (example)**:",673],["using UnityEditor;",673],["using UnityEngine;",673],["// IngredientDrawer",673],["[CustomPropertyDrawer(typeof(Ingredient))]",673],["public class IngredientDrawer : PropertyDrawer",673],["// Draw the property inside the given rect",673],["public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)",673],["// Using BeginProperty / EndProperty on the parent property means that",673],["// prefab override logic works on the entire property.",673],["EditorGUI.BeginProperty(position, label, property);",673],["// Draw label",673],["position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);",673],["// Don't make child fields be indented",673],["var indent = EditorGUI.indentLevel;",673],["EditorGUI.indentLevel = 0;",673],["// Calculate rects",673],["var amountRect = new Rect(position.x, position.y, 30, position.height);",673],["var unitRect = new Rect(position.x + 35, position.y, 50, position.height);",673],["var nameRect = new Rect(position.x + 90, position.y, position.width - 90, position.height);",673],["// Draw fields - pass GUIContent.none to each so they are drawn without labels",673],["EditorGUI.PropertyField(amountRect, property.FindPropertyRelative(\"amount\"), GUIContent.none);",673],["EditorGUI.PropertyField(unitRect, property.FindPropertyRelative(\"unit\"), GUIContent.none);",673],["EditorGUI.PropertyField(nameRect, property.FindPropertyRelative(\"name\"), GUIContent.none);",673],["// Set indent back to what it was",673],["EditorGUI.indentLevel = indent;",673],["EditorGUI.EndProperty();",673],["Customize the GUI of script members using Property Attributes",673],["The other use of Property Drawer is to alter the appearance of members in a script that have custom Property Attributes. Say you want to limit floats or integers in your script to a certain range and show them as sliders in the Inspector. Using the built-in PropertyAttribute called RangeAttribute you can do just that:",673],["C# (example)**:",673],["// Show this float in the Inspector as a slider between 0 and 10",673],["[Range(0f, 10f)]",673],["float myFloat = 0f;",673],["You can make your own PropertyAttribute as well. We'll use the code for the RangeAttribute as an example. The attribute must extend the PropertyAttribute class. If you want, your property can take parameters and store them as public member variables.",673],["C# (example)**:",673],["using UnityEngine;",673],["public class MyRangeAttribute : PropertyAttribute",673],["readonly float min;",673],["readonly float max;",673],["void MyRangeAttribute(float min, float max)",673],["this.min = min;",673],["this.max = max;",673],["Now that you have the attribute, you need to make a Property Drawer that draws properties that have that attribute. The drawer must extend the PropertyDrawer class, and it must have a CustomPropertyDrawer attribute to tell it which attribute it's a drawer for.",673],["The property drawer class should be placed in an editor script, inside a folder called Editor.",673],["C# (example)**:",673],["using UnityEditor;",673],["using UnityEngine;",673],["// Tell the MyRangeDrawer that it is a drawer for properties with the MyRangeAttribute.",673],["[CustomPropertyDrawer(typeof(MyRangeAttribute))]",673],["public class RangeDrawer : PropertyDrawer",673],["// Draw the property inside the given rect",673],["void OnGUI(Rect position, SerializedProperty property, GUIContent label)",673],["// First get the attribute since it contains the range for the slider",673],["MyRangeAttribute range = (MyRangeAttribute)attribute;",673],["// Now draw the property as a Slider or an IntSlider based on whether it's a float or integer.",673],["if (property.propertyType == SerializedPropertyType.Float)",673],["EditorGUI.Slider(position, property, range.min, range.max, label);",673],["else if (property.propertyType == SerializedPropertyType.Integer)",673],["EditorGUI.IntSlider(position, property, (int) range.min, (int) range.max, label);",673],["else",673],["EditorGUI.LabelField(position, label.text, \"Use MyRange with float or int.\");",673],["Note that for performance reasons, EditorGUILayout functions are not usable with Property Drawers.",673],["Editor Analytics",674],["The Unity Editor collects anonymous data. Unity uses this information to make informed decisions on how to improve features in the Editor. the features of the Editor. Unity collects the analytics using Google Analytics. The Unity Editor makes calls to a Uniform Resource Identifier (URI). The Uniform Resource Name (URN) part of the URI contains details that describe what Editor features or events users use.",674],["Examples of analytics",674],["The following are examples of some of the analytics that Unity collects:",674],["Menu item use: If some menu items are used rarely or not at all, Unity could simplify the menus by moving or hiding those items.",674],["Build times: By collecting data about how long builds take to compile, Unity can focus on optimizing the correct code.",674],["Lightmap baking: The length of time it takes for lightmaps to bake indicates how much effort Unity should spend on optimizing this area.",674],["Disabling Editor Analytics",674],["If you don't want to send anonymous data to Unity then you can disable Editor Analytics. There are two ways to do this, which depend on the type of license you use:",674],["If you use a Unity Pro license, go to Edit (MacOS: Unity) > Preferences > General and select Disable Editor Analytics (Pro only).",674],["If you use a Unity Personal license:",674],["Log in to your Unity ID",674],["Go to My Account > Privacy > Editor > Edit Your Privacy Settings",674],["Select Change Status.",674],["Unity Editor command line arguments",675],["Launching Unity",675],["On macOS, type the following into the Terminal to launch Unity:",675],["/Applications/Unity/Hub/Editor/<version>/Unity.app/Contents/MacOS/Unity -projectPath <project path>",675],["On Linux, type the following into the Terminal to launch Unity:",675],["/Applications/Unity/Hub/Editor/<version>/Unity.app/Contents/Linux/Unity -projectPath <project path>",675],["On Windows, type the following into the Command Prompt to launch Unity:",675],["\"C:\\Program Files\\Unity\\Hub\\Editor\\<version>\\Editor\\Unity.exe\" -projectPath \"<project path>\"",675],["When you launch Unity like this, it receives commands and information on startup, which can be useful for test suites, automated builds and other production tasks.",675],["Note**: The above instructions assume the relevant Unity Editor is installed in the default location through the Unity Hub. Adjust the path in the command if you use Unity Editor installed in a different location. For more information about how to find your Editor's location path, refer to Install and uninstall Editor versions.",675],["Configuration arguments",675],["You can run the Unity Editor and build Unity applications with additional commands and information on startup. This page lists the command line arguments you can use to launch and configure Unity Editor and Unity Player instances.",675],["Command Details: ",675],["-createProject <pathname> Create an empty project at the given path. ",675],["-disable-assembly-updater <assembly1 assembly2> Specify a space-separated list of assembly names as parameters for Unity to ignore on automatic updates.The space-separated list of assembly names is optional: pass the command line options without any assembly names to ignore all assemblies, as in example 1.Example 1unity.exe -disable-assembly-updaterExample 2unity.exe -disable-assembly-updater A1.dll subfolder/A2.dllExample 2 has two assembly names, one with a pathname. Example 2 ignores A1.dll, no matter what folder it is stored in, and ignores A2.dll only if it is stored under subfolder folder:If you list an assembly in the -disable-assembly-updater command line parameter (or if you don’t specify assemblies), Unity logs the following message to Editor.log:[Assembly Updater] warning: Ignoring assembly [assembly_path] as requested by command line parameter.”).Use this to avoid unnecessary API Updater overhead when you import assemblies.This argument is useful if you want to import assemblies that access a Unity API which doesn’t need updating. It’s also useful when you import assemblies which don’t access any Unity APIs (for example, if you have built some or all of your source code outside of Unity, and you want to import the resulting assemblies into your Unity project).Note: If you disable the update of any assembly that needs updating, you might get errors at compile time, run time, or both, that are hard to track. ",675],["-disable-gpu-skinning Disable Graphics Processing Unit (GPU) skinning at startup. ",675],["-executeMethod <ClassName.MethodName> or -executeMethod <NamespaceName.ClassName.MethodName> Execute the static method as soon as Unity opens the project, and after the optional Asset server update is complete. You can use this for tasks such as continuous integration, performing Unit Tests, making builds or preparing data.To return an error from the command line process, either throw an exception which causes Unity to exit with return code 1, or call EditorApplication.Exit with a non-zero return code.To pass parameters, add them to the command line and retrieve them inside the function using System.Environment.GetCommandLineArgs. To use -executeMethod, you need to place the enclosing script in an Editor folder. The method you execute must be defined as static. ",675],["-exportPackage <exportAssetPath1 exportAssetPath2 ExportAssetPath3 exportFileName> Export a package, given a path (or set of given paths). In this example, exportAssetPath is a folder (relative to the Unity project root) to export from the Unity project, and exportFileName is the package name. This option only exports whole folders at a time. You normally need to use this command with the -projectPath argument. ",675],["-importPackage <pathname> Import the given asset package. Unity doesn’t display any import dialog. ",675],["-job-worker-count <N> Specify the maximum thread count for the Unity JobQueue Job Worker Count. You can also set this value as job-worker-count=<N> in boot.config for the Unity Standalone Player. ",675],["-logFile <pathname> Specify where Unity writes the Editor or Windows/Linux/OSX standalone log file. To output to the console, specify - for the path name. On Windows, use -logfile - <pathname> to direct the output to stdout, which by default is not the console. ",675],["-noUpm Disables the Unity Package Manager. ",675],["-openfile <path> Open the project from a path to a scene or package file. Alternatively, you can use the -projectPath argument ",675],["-password <password> Enter a password into the log-in form during the activation of the Unity Editor. ",675],["-projectPath <pathname> Open the project at the given path. If the pathname contains spaces, enclose it in quotes. ",675],["-quit Quit the Unity Editor after other commands have finished executing. This can cause error messages to be hidden (but they still appear in the Editor.log file). ",675],["-releaseCodeOptimization Enables release code optimization mode, overriding the current default code optimization mode for the session. ",675],["-setDefaultPlatformTextureFormat (Android only) Set the default texture compression to the desired format before you import a texture or build the project. This is so you don’t have to import the texture again with the format you want. The available formats are dxt, pvrtc, atc, etc, etc2, and astc. ",675],["-silent-crashes Prevent Unity from displaying the dialog that appears when a Standalone Player crashes. This argument is useful when you want to run the Player in automated builds or tests, where you don’t want a dialog prompt to obstruct automation. ",675],["-username <username> Enter a username into the log-in form during the activation of the Unity Editor. ",675],["-vcsMode <mode> Set the version control mode. Available modes are \"Visible Meta Files\", \"Hidden Meta Files\", Perforce, and PlasticSCM. You can use additional flags to fill out the configuration fields for the given version control mode. These flags are based on the Provider.GetActiveConfigFields method. For example, you can use the -vcPerforceUsername, -vcPerforcePassword, -vcPerforceWorkspace and -vcPerforceServer to set the Perforce username, workspace and server fields.Note: <mode> arguments that contain spaces must be wrapped in double quotes (\"). ",675],["-vcsModeSession <mode> Set the version control mode for this session. Available modes are \"Visible Meta Files\", \"Hidden Meta Files\", Perforce, and PlasticSCM. You can use additional flags to fill out the configuration fields for the given version control mode. These flags are based on the Provider.GetActiveConfigFields method. For example, you can use the -vcPerforceUsername, -vcPerforcePassword, -vcPerforceWorkspace and -vcPerforceServer to set the Perforce username, workspace and server fields.Note: <mode> arguments that contain spaces must be wrapped in double quotes (\"). ",675],["-version Print the version number of the Unity Editor in the command line, without launching the Editor. ",675],["Batch mode arguments",675],["Use the following arguments to configure Unity’s batch mode. Batch mode enables Unity to run predefined tasks without additional input, which makes batch mode useful for automated tasks like testing. For more information, see Batch mode and built-in coroutine compatibility.",675],["Command Details: ",675],["-accept-apiupdate Use this command line option to specify that APIUpdater should run when Unity is launched in batch mode.Example:unity.exe -accept-apiupdate -batchmode [other params]The APIUpdater doesn’t run if you omit this command line argument when you launch Unity in batch mode. This might lead to compiler errors. ",675],["-batchmode Run Unity in batch mode. In batch mode, Unity runs command line arguments without the need for human interaction. It also suppresses pop-up windows that require human interaction (such as the Save Scene window); however, the Unity Editor itself opens as usual. You should always run Unity in batch mode when using command line arguments, because it allows automation to run without interruption.When an exception occurs during execution of the script code, the Asset server updates fail, or other operations fail, Unity immediately exits with return code 1.In batch mode, Unity sends a minimal version of its log output to the console. However, the Log Files still contain the full log information. You can’t open a project in batch mode while the Editor has the same project open; only a single instance of Unity can run at a time.To check whether the Editor or Standalone Player is running in batch mode, use the Application.isBatchMode operator.If the project has not yet been imported when using -batchmode, the target platform is the default one. To force a different platform, use the -buildTarget option. ",675],["‑ignorecompilererrors When you use this argument, Unity continues to start your application even if there are compilation errors. ",675],["-nographics When you run this in batch mode, Unity doesn't initialize the graphics device. You can then run automated workflows on machines that don’t have a GPU. Automated workflows only work when you have a window in focus, otherwise you can’t send simulated input commands. -nographics does not allow you to bake GI, because Enlighten requires a GPU for Meta Pass rendering. See the Meta Pass section of the Lightmapping and Shaders page for more information. Note: Output logs are turned off in this mode. To enable the creation of output logs, specify a file location using the command -logFile. ",675],["Build Arguments",675],["Use the following arguments to build players for various platforms from the command line. For more information about building players with command line arguments, see Unity Standalone Player command line arguments.",675],["Command Details: ",675],["-buildLinux64Player <pathname> Build a 64-bit standalone Linux player (for example, -buildLinux64Player path/to/your/build). ",675],["-buildOSXUniversalPlayer <pathname> Build a 64-bit standalone Mac OSX player (for example, -buildOSXUniversalPlayer path/to/your/build.app). ",675],["-buildTarget <name> Select an active build target before loading a project. Possible options are: • Standalone• Win• Win64• OSXUniversal• Linux64• iOS• Android• WebGL• WindowsStoreApps• tvOS ",675],["-standaloneBuildSubtarget <name> Select an active build sub-target for the Standalone platforms before loading a project. Possible options are: • Player• Server ",675],["-buildWindowsPlayer <pathname> Build a 32-bit standalone Windows player (for example, -buildWindowsPlayer path/to/your/build.exe). ",675],["-buildWindows64Player <pathname> Build a 64-bit standalone Windows player (for example, -buildWindows64Player path/to/your/build.exe). ",675],["Cache server arguments",675],["Use the following arguments to configure Unity’s use of the cache server. For more information, see Cache Server.",675],["Command Details: ",675],["-EnableCacheServer Tells Unity to use the newer Accelerator Cache Server. You must also use -cacheServerEndpoint to specify the address. ",675],["-cacheServerEndpoint Specifies the endpoint address if you are using the newer Accelerator Cache Server.Example: -cacheServerEndpoint 127.0.0.1:10080. This overrides any configuration stored in the Editor Preferences. Use this to connect multiple instances of Unity to different Cache Servers. ",675],["-cacheServerNamespacePrefix Set the namespace prefix for the newer Accelerator Cache Server. Used to group data together on the Cache Server.Example: -cacheServerNamespacePrefix MyProject ",675],["-cacheServerEnableDownload Enable downloading from the newer Accelerator Cache Server.Example:-cacheServerEnableDownload true ",675],["-cacheServerEnableUpload Enable uploading to the newer Accelerator Cache Server.Example:-cacheServerEnableUpload false ",675],["Debugging arguments",675],["Command Details: ",675],["-disableManagedDebugger Disables the debugger listen socket. ",675],["-diag-debug-shader-compiler Unity launches only one instance of the Shader Compiler, and forces its timeout to be one hour. Useful for debugging Shader Compiler issues. ",675],["-debugCodeOptimization Enables debug code optimization mode, overriding the current default code optimization mode for the session. ",675],["-enableCodeCoverage Enables code coverage and allows access to the Coverage API. ",675],["-force-d3d12-debug Enables the DX12 validation layer. This is useful for working on XR plugins or native plugins. ",675],["-force-d3d12-debug-gbv Enables the DX12 GPU-based validation. This is useful for working on XR plugins or native plugins. ",675],["-force-vulkan-layers Enables the Vulkan validation layer. This is useful for working on XR plugins or native plugins. ",675],["-stackTraceLogType Allow detailed debugging. All settings allow None, Script Only and Full to be selected (for example, -stackTraceLogType Full). ",675],["Graphics API arguments",675],["Use the following arguments to force the Unity Editor to use a specific graphics API.",675],["Command Details: ",675],["-force-d3d11 (Windows only) Make the Editor use Direct3D 11 for rendering. Normally the graphics API depends on Player Settings (typically defaults to D3D11). ",675],["-force-d3d12 (Windows only) Make the Editor use Direct3D 12 for rendering. Normally the graphics API depends on Player Settings. ",675],["-force-glcore Make the Editor use OpenGL 3/4 core profile for rendering. The Editor tries to use the best OpenGL version available and all OpenGL extensions exposed by the OpenGL drivers. If the platform isn’t supported, the editor uses Direct3D. ",675],["-force-glcoreXY Similar to-force-glcore, but requests a specific OpenGL context version. Accepted values for XY: 32, 33, 40, 41, 42, 43, 44 or 45. ",675],["-force-gles (Windows only) Make the Editor use OpenGL for Embedded Systems for rendering. The Editor tries to use the best OpenGL ES version available, and all OpenGL ES extensions exposed by the OpenGL drivers. ",675],["-force-glesXY (Windows only) Similar to -force-gles, but requests a specific OpenGL ES context version. Accepted values for XY: 30, 31 or 32. ",675],["-force-vulkan Make the Editor use Vulkan for rendering. Normally the graphics API depends on Player Settings. ",675],["-force-clamped Use this with -force-glcoreXY to prevent Unity from checking for additional OpenGL extensions, allowing it to run between platforms with the same code paths. ",675],["License arguments",675],["Use the following arguments to process a Unity license or run the Unity Editor with different license options.",675],["Command Details: ",675],["-createManualActivationFile Step one of a three-step process to manually activate a Unity license. For more information, see Generate a license activation file (.alf) from the command line. ",675],["-force-free Run the Editor as if there is a free Unity license on the machine, even if a Unity Pro license is installed. ",675],["-manualLicenseFile <yourulffile> Step three of a three-step process to manually activate a Unity license. For more information, see Generate a license activation file (.alf) from the command line. ",675],["-returnlicense Return the currently active serial-based license. Do not use -returnlicense to return a floating license. For more information, see Returning your license. ",675],["-serial <serial> Activate your Unity license with the specified serial number. For more information, see Activate a license from the command line.Note: When you use this argument, you must also use the -batchmode argument. It’s also good practice to specify the -quit argument. ",675],["Metal arguments (macOS only)",675],["Use the following arguments to configure Unity’s use of the Metal graphics API for Apple devices.",675],["Command Details: ",675],["-force-device-index When using Metal, make the Editor use a particular GPU device by passing it the index of that GPU (macOS only). ",675],["-force-low-power-device (macOS only) If you use Metal, make the Editor use a low power device. ",675],["-force-metal Make the Editor use Metal as the default graphics API (macOS only). ",675],["Profiler arguments",675],["Use the following arguments to configure Unity’s use of the Profiler.",675],["Command Details: ",675],["-deepprofiling Enable Deep Profiling option for the CPU profiler. ",675],["-profiler-enable Profile the start-up of a Player or the Editor. When you use this argument with a Player, it has the same effect as building the Player with the Autoconnect Profiler option enabled in Build Settings.When you use this argument with the Editor, it starts collecting and displaying Profiler information in the Profiler window on start-up of the Editor. ",675],["-profiler-log-file <Path/To/Log/File.raw> This argument sets up the Unity Profiler to stream the profile data to a .raw file on startup. It works for both Players and the Editor. ",675],["-profiler-capture-frame-count <NumberOfFrames> This argument sets how many frames the Profiler should capture in a profile when streaming to a .raw file on start-up. It only works on Players. ",675],["-profiler-maxusedmemory By default, maxUsedMemory for the Unity Profiler is 16MB for Players and 256MB for the Editor. You can use this argument to set the maxUsedMemory parameter to a custom size at start-up (for example, -profiler-maxusedmemory 16777216). The size is set in bytes. ",675],["Examples",675],["C# script in the project:*",675],["```lang-C#",675],["using UnityEditor;",675],["class MyEditorScript",675],["static void PerformBuild ()",675],["BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();",675],["buildPlayerOptions.scenes = new[] { \"Assets/Scene1.unity\", \"Assets/Scene2.unity\" };",675],["BuildPipeline.BuildPlayer(buildPlayerOptions);",675],["The following command executes Unity in batch mode, executes the MyEditorScript.PerformBuild method, and then quits upon completion.",675],["Windows:**",675],["\"C:\\Program Files\\Unity\\Editor\\Unity.exe\" -quit -batchmode -projectPath \"C:\\Users\\UserName\\Documents\\MyProject\" -executeMethod",675],["MyEditorScript.PerformBuild",675],["macOS:**",675],["/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath ~/UnityProjects/MyProject -executeMethod",675],["MyEditorScript.PerformBuild",675],["Unity Editor special command line arguments",675],["You should only use these under special circumstances, or when directed by Unity Support.",675],["Command Details: ",675],["-enableIncompatibleAssetDowngrade Use this when you have Assets made by a newer, incompatible version of Unity, that you want to downgrade to work with your current version of Unity. When you enable this, Unity presents you with a dialog asking for confirmation of this downgrade if you attempt to open a project that would require it.Note: This procedure is unsupported and highly risky, and should only be used as a last resort. ",675],["Extra Editor arguments from packages",675],["Additional Editor command line arguments are available when these packages are installed.",675],["Package Details: ",675],["Burst See Burst package documentation. ",675],["Test Framework See Unity Test Framework package documentation. ",675],["Code Coverage See Code Coverage package documentation. ",675],["Editor Features",676],["This section details some of the editor's basic features, which you will find useful in most projects - from choosing preferences, integrating with version control system, to preparing your project for a build.",676],["Effectors 2D",677],["Use Effector 2D components with Collider 2D components to direct the forces of physics when GameObject colliders come into contact with each other. You can use the following Effectors 2D components in Unity:",677],["Topic Description ",677],[":--------------------------------------------- :----------------------- ",677],["Area Effector 2D Use Area Effector 2D to arbitrarily vary force and angle magnitude. ",677],["Buoyancy Effector 2D Use Buoyancy Effector 2D to simulate buoyancy, fluid flow and fluid drag. ",677],["Point Effector 2D Use Point Effector 2D to attract or repulse against a given source point. ",677],["Platform Effector 2D Use Platform Effector 2D to create platform behavior, such as one-way collisions. ",677],["Surface Effector 2D Use Surface Effector 2D to create conveyor belts. ",677],["Additional resources",677],["Event Functions",678],["A script in Unity is not like the traditional idea of a program where the code runs continuously in a loop until it completes its task. Instead, Unity passes control to a script intermittently by calling certain functions that are declared within it. Once a function has finished executing, control is passed back to Unity. These functions are known as event functions since they are activated by Unity in response to events that occur during gameplay. Unity uses a naming scheme to identify which function to call for a particular event. For example, you will already have seen the Update function (called before a frame update occurs) and the Start function (called just before the object's first frame update). Many more event functions are available in Unity; the full list can be found in the script reference page for the MonoBehaviour class along with details of their usage. The following are some of the most common and important events.",678],["Regular Update Events",678],["A game is rather like an animation where the animation frames are generated on the fly. A key concept in games programming is that of making changes to position, state and behavior of objects in the game just before each frame is rendered. The Update function is the main place for this kind of code in Unity. Update is called before the frame is rendered and also before animations are calculated.",678],["void Update() {",678],["float distance = speed * Time.deltaTime * Input.GetAxis(\"Horizontal\");",678],["transform.Translate(Vector3.right * distance);",678],["The physics engine also updates in discrete time steps in a similar way to the frame rendering. A separate event function called FixedUpdate is called just before each physics update. Since the physics updates and frame updates do not occur with the same frequency, you will get more accurate results from physics code if you place it in the FixedUpdate function rather than Update.",678],["void FixedUpdate() {",678],["Vector3 force = transform.forward * driveForce * Input.GetAxis(\"Vertical\");",678],["rigidbody.AddForce(force);",678],["It is also useful sometimes to be able to make additional changes at a point after the Update and FixedUpdate functions have been called for all objects in the scene and after all animations have been calculated. An example is where a camera should remain trained on a target object; the adjustment to the camera's orientation must be made after the target object has moved. Another example is where the script code should override the effect of an animation (say, to make the character's head look towards a target object in the scene). The LateUpdate function can be used for these kinds of situations.",678],["void LateUpdate() {",678],["Camera.main.transform.LookAt(target.transform);",678],["Initialization Events",678],["It is often useful to be able to call initialization code in advance of any updates that occur during gameplay. The Start function is called before the first frame or physics update on an object. The Awake function is called for each object in the scene at the time when the scene loads. Note that although the various objects' Start and Awake functions are called in arbitrary order, all the Awakes will have finished before the first Start is called. This means that code in a Start function can make use of other initializations previously carried out in the Awake phase.",678],["GUI events",678],["Unity has a system for rendering GUI controls over the main action in the scene and responding to clicks on these controls. This code is handled somewhat differently from the normal frame update and so it should be placed in the OnGUI function, which will be called periodically.",678],["void OnGUI() {",678],["GUI.Label(labelRect, \"Game Over\");",678],["You can also detect mouse events that occur over a GameObject as it appears in the scene. This can be used for targeting weapons or displaying information about the character currently under the mouse pointer. A set of OnMouseXXX event functions (eg, OnMouseOver, OnMouseDown) is available to allow a script to react to user actions with the mouse. For example, if the mouse button is pressed while the pointer is over a particular object then an OnMouseDown function in that object's script will be called if it exists.",678],["Physics events",678],["The physics engine will report collisions against an object by calling event functions on that object's script. The OnCollisionEnter, OnCollisionStay and OnCollisionExit functions will be called as contact is made, held and broken. The corresponding OnTriggerEnter, OnTriggerStay and OnTriggerExit functions will be called when the object's collider is configured as a Trigger (ie, a collider that simply detects when something enters it rather than reacting physically). These functions may be called several times in succession if more than one contact is detected during the physics update and so a parameter is passed to the function giving details of the collision (position, identity of the incoming object, etc).",678],["void OnCollisionEnter(otherObj: Collision) {",678],["if (otherObj.tag == \"Arrow\") {",678],["ApplyDamage(10);",678],["Event System",679],["The Event System is a way of sending events to objects in the application based on input, be it keyboard, mouse, touch, or custom input. The Event System consists of a few components that work together to send events.",679],["When you add an Event System component to a GameObject you will notice that it does not have much functionality exposed, this is because the Event System itself is designed as a manager and facilitator of communication between Event System modules.",679],["The primary roles of the Event System are as follows:",679],["\nManage which GameObject is considered selected\n",679],["\nManage which Input Module is in use\n",679],["\nManage Raycasting (if required)\n",679],["\nUpdating all Input Modules as required\n",679],["Input Modules",679],["An Input Module is where the main logic of how you want the Event System to behave lives, they are used for:",679],["\nHandling Input\n",679],["\nManaging event state\n",679],["\nSending events to scene objects.\n",679],["Only one Input Module can be active in the Event System at a time, and they must be components on the same GameObject as the Event System component.",679],["If you want to write a custom Input Module, send events supported by existing UI components in Unity. To extend and write your own events, see the Messaging System documentation.",679],["Raycasters",679],["Raycasters are used for figuring out what the pointer is over. It is common for Input Modules to use the Raycasters configured in the Scene to calculate what the pointing device is over.",679],["There are 3 provided Raycasters that exist by default:",679],["\nGraphic Raycaster - Used for UI elements\n",679],["\nPhysics 2D Raycaster - Used for 2D physics elements\n",679],["\nPhysics Raycaster - Used for 3D physics elements\n",679],["If you have a 2d / 3d Raycaster configured in your Scene, it is easy to make non-UI elements receive messages from the Input Module. Simply attach a script that implements one of the event interfaces. For examples of this, see the IPointerEnterHandler and IPointerClickHandler Scripting Reference pages.",679],["Example: creating a quad",680],["To represent flat surfaces, Unity includes the Plane and Quad primitive GameObjects that you can instantiate in your Scenes. However, it is useful to understand how to use a script to construct a quadrilateral mesh yourself. This is essential for procedural mesh generation.",680],["Note: Unity processes and displays geometry in triangles, and not quads. This means that the Quad primitive consists of two triangles.",680],["Vertex array",680],["The first thing you need to do is set up the array of vertices that your shape uses.",680],["This example assumes that the quad lies on the x-axis and y-axis, and that your script contains the variables width and height.",680],["Vector3[] vertices = new Vector3[4]",680],["new Vector3(0, 0, 0),",680],["new Vector3(width, 0, 0),",680],["new Vector3(0, height, 0),",680],["new Vector3(width, height, 0)",680],["};",680],["mesh.vertices = vertices;",680],["This example supplies the vertices in the following order:",680],["Bottom-left",680],["Bottom-right",680],["Top-left",680],["Top-right",680],["Due to the way that Unity retrieves Mesh data properties, it is much more efficient to set up data in your own array and then assign the array to a property (for example, to Mesh.vertices or Mesh.normals), rather than access the property array via individual elements.",680],["Triangles",680],["Next, you need to set up the triangles. A quad consists of two triangles, each made up of three points in the vertex array you created earlier. To specify the points, you define each triangle as three indices of the the vertex array. For example, the lower left triangle for this quad uses index 0, 2, and 1 which corresponds to coordinates (0, 0, 0), (0, height, 0), and (width, 0, 0) from the vertex array. The ordering is important because you must order the corners clockwise. The upper right triangle uses index 2, 3, and 1.",680],["int[] tris = new int[6]",680],["// lower left triangle",680],["0, 2, 1,",680],["// upper right triangle",680],["2, 3, 1",680],["};",680],["mesh.triangles = tris;",680],["Normals",680],["A Mesh with vertices and triangles is visible in the Scene, but Unity does not shade it correctly because it has no normals yet. The normals for this example are simple because they are all identical. Every normal points in the negative z-axis direction in the quad's local space. When you add the normals, Unity correctly shades the quad, but you need a Light in the Scene to see the effect.",680],["Vector3[] normals = new Vector3[4]",680],["-Vector3.forward,",680],["-Vector3.forward,",680],["-Vector3.forward,",680],["-Vector3.forward",680],["};",680],["mesh.normals = normals;",680],["If you do not want to define the normals yourself, you can use Mesh.RecalculateNormals().",680],["Texture coordinates",680],["Finally, to display Textures on the Mesh's Material correctly, add texture coordinates to the Mesh. Texture coordinates are between 0 and 1. Each vertex in the Mesh has a texture coordinate which specifies where on the Material's Texture to sample from. To show the whole Texture across the quad, the texture coordinate values on each vertex should all be 0 or 1 so that each corner of the quad corresponds to a corner of the Texture.",680],["Vector2[] uv = new Vector2[4]",680],["new Vector2(0, 0),",680],["new Vector2(1, 0),",680],["new Vector2(0, 1),",680],["new Vector2(1, 1)",680],["};",680],["mesh.uv = uv;",680],["Final script",680],["The following script combines everything above to create a quad in your Scene. To use it:",680],["Create a new C# script (menu: Assets > Create > C# Script) and name it QuadCreator.",680],["Open the QuadCreator script, copy the example code into it, and save the script.",680],["Back in the Editor, create a new GameObject in your Scene (menu: GameObject > Create Empty).",680],["In the Inspector, select Add Component > Scripts > Quad Creator.",680],["Position the GameObject wherever you want in the Scene.",680],["Enter Play Mode. If you can not see the quad in the Scene or Game view, make sure you are viewing it from the correct side; Unity does not render the back face of this Mesh.",680],["using UnityEngine;",680],["public class QuadCreator : MonoBehaviour",680],["public float width = 1;",680],["public float height = 1;",680],["public void Start()",680],["MeshRenderer meshRenderer = gameObject.AddComponent();",680],["meshRenderer.sharedMaterial = new Material(Shader.Find(\"Standard\"));",680],["MeshFilter meshFilter = gameObject.AddComponent();",680],["Mesh mesh = new Mesh();",680],["Vector3[] vertices = new Vector3[4]",680],["new Vector3(0, 0, 0),",680],["new Vector3(width, 0, 0),",680],["new Vector3(0, height, 0),",680],["new Vector3(width, height, 0)",680],["};",680],["mesh.vertices = vertices;",680],["int[] tris = new int[6]",680],["// lower left triangle",680],["0, 2, 1,",680],["// upper right triangle",680],["2, 3, 1",680],["};",680],["mesh.triangles = tris;",680],["Vector3[] normals = new Vector3[4]",680],["-Vector3.forward,",680],["-Vector3.forward,",680],["-Vector3.forward,",680],["-Vector3.forward",680],["};",680],["mesh.normals = normals;",680],["Vector2[] uv = new Vector2[4]",680],["new Vector2(0, 0),",680],["new Vector2(1, 0),",680],["new Vector2(0, 1),",680],["new Vector2(1, 1)",680],["};",680],["mesh.uv = uv;",680],["meshFilter.mesh = mesh;",680],["Note: This example code is in the Start function, which means that it executes once when you enter Play Mode, and the Mesh does not change throughout the application. However, you can add code in the Update function to make the Mesh change each frame. Be aware that this greatly increases the resource intensity of the Mesh generation.",680],["Order of execution for event functions",681],["Running a Unity script executes a number of event functions in a predetermined order. This page describes those event functions and explains how they fit into the execution sequence.",681],["Script lifecycle overview",681],["The diagram below summarizes how Unity orders and repeats event functions over a script's lifetime.",681],["For more information about the various event functions, see the following sections:",681],["",681],["Script lifecycle flowchart",681],["Note**: Some browsers do not support SVG image files. If the image above does not display properly (for example, if you cannot see any text), please try another browser, such as Google Chrome or Mozilla Firefox.",681],["",681],["First Scene load",681],["These functions get called when a scene starts (once for each object in the scene).",681],["Awake:** This function is always called before any Start functions and also just after a prefab is instantiated. (If a GameObject is inactive during start up Awake is not called until it is made active.)",681],["OnEnable:** (only called if the Object is active): This function is called just after the object is enabled. This happens when a MonoBehaviour instance is created, such as when a level is loaded or a GameObject with the script component is instantiated.",681],["Note that for objects added to the scene, the Awake and OnEnable functions for all scripts will be called before Start, Update, etc are called for any of them. Naturally, this cannot be enforced when you instantiate an object during gameplay.",681],["",681],["Editor",681],["Reset:** Reset is called to initialize the script's properties when it is first attached to an object and also when the Reset command is used.",681],["OnValidate:** OnValidate is called whenever the script's properties are set, including when an object is deserialized, which can occur at various times, such as when you open a scene in the Editor and after a domain reload.",681],["",681],["Before the first frame update",681],["Start:** Start is called before the first frame update only if the script instance is enabled.",681],["For objects that are part of a scene asset, the Start function is called on all scripts before Update, etc is called for any of them. Naturally, this cannot be enforced when you instantiate an object during gameplay.",681],["",681],["In between frames",681],["OnApplicationPause:** This is called at the end of the frame where the pause is detected, effectively between the normal frame updates. One extra frame will be issued after OnApplicationPause is called to allow the game to show graphics that indicate the paused state.",681],["",681],["Update Order",681],["When you're keeping track of game logic and interactions, animations, camera positions, etc., there are a few different events you can use. The common pattern is to perform most tasks inside the Update function, but there are also other functions you can use.",681],["FixedUpdate:** FixedUpdate is often called more frequently than Update. It can be called multiple times per frame, if the frame rate is low and it may not be called between frames at all if the frame rate is high. All physics calculations and updates occur immediately after FixedUpdate. When applying movement calculations inside FixedUpdate, you do not need to multiply your values by Time.deltaTime. This is because FixedUpdate is called on a reliable timer, independent of the frame rate.",681],["Update:** Update is called once per frame. It is the main workhorse function for frame updates.",681],["LateUpdate:** LateUpdate is called once per frame, after Update has finished. Any calculations that are performed in Update will have completed when LateUpdate begins. A common use for LateUpdate would be a following third-person camera. If you make your character move and turn inside Update, you can perform all camera movement and rotation calculations in LateUpdate. This will ensure that the character has moved completely before the camera tracks its position.",681],["In general, you should not rely on the order in which the same event function is invoked for different GameObjects — except when the order is explicitly documented or settable. (If you need a more fine-grained control of the player loop, you can use the PlayerLoop API.)",681],["You cannot specify the order in which an event function is called for different instances of the same MonoBehaviour subclass. For example, the Update function of one MonoBehaviour might be called before or after the Update function for the same MonoBehaviour on another GameObject — including its own parent or child GameObjects.",681],["You can specify that the event functions of one MonoBehaviour subclass should be invoked before those of a different subclass (using the Script Execution Order panel of the Project Settings window). For example, if you had two scripts, EngineBehaviour and SteeringBehaviour, you could set the Script Execution Order such that EngineBehaviours always updates before SteeringBehaviours.",681],["",681],["Animation update loop",681],["These functions and Profiler Markers are called when Unity evaluates the Animation system.",681],["OnStateMachineEnter:** During the State Machine Update step, this callback is called on the first update frame when a controller’s state machine makes a transition that flows through an Entry state. It is not called for a transition to a StateMachine sub-state.This callback occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.",681],["Note:** Adding this callback to a StateMachineBehaviour component disables multithreaded state machine evaluation.",681],["OnStateMachineExit:** During the State Machine Update step, this callback is called on the last update frame when a controller’s state machine makes a transition that flows through an Exit state. It is not called for a transition to a StateMachine sub-state.This callback occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.Note: Adding this callback to a StateMachineBehaviour component disables multithreaded state machine evaluation.",681],["Fire Animation Events:** Calls all animation events from all clips sampled between the time of the last update and the time of the current update.",681],["StateMachineBehaviour (OnStateEnter/OnStateUpdate/OnStateExit):** A layer can have up to 3 active states: current state, interrupted state, and next state. This function is called for each active state with a StateMachineBehaviour component that defines the OnStateEnter, OnStateUpdate, or OnStateExit callback.The function is called for the current state first, then the interrupted state, and finally the next state.This step occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph..",681],["OnAnimatorMove:** Every update frame, this is called once for each Animator component to modify the Root Motion.",681],["StateMachineBehaviour(OnStateMove):** This is called on each active state with a StateMachineBehaviour that defines this callback.",681],["OnAnimatorIK:** Sets up animation IK. This is called once for each Animator Controller layer with IK pass enabled.This event executes only if you are using a Humanoid rig.",681],["StateMachineBehaviour(OnStateIK):** This is called on each active state with a StateMachineBehaviour component that defines this callback on a layer with IK pass enabled.",681],["WriteProperties:** Writes all other animated properties to the Scene from the main thread.",681],["Useful profile markers",681],["Some of the animation functions shown in the Script Lifecycle Flowchart are not Event functions that you can call; they are internal functions called when Unity processes your animation.",681],["These functions have Profiler Markers, so you can use the Profiler to see when in the frame Unity calls them. Knowing when Unity calls these functions can help you understand exactly when the Event functions you do call are executed.",681],["For example, suppose you call Animator.Play in the FireAnimationEvents callback. If you know that the FireAnimationEvents callback is fired only after the State Machine Update and Process Graph functions execute, you can anticipate that your animation clip will play on the next frame, and not right away.",681],["State Machine Update:** All state machines are evaluated at this step in the execution sequence. This step occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.Note: State machine evaluation is normally multithreaded, but adding certain callbacks (for example OnStateMachineEnter and OnStateMachineExit) disables multithreading. See Animation update loop above for details.",681],["ProcessGraph:** Evaluates all animation graphs. This includes sampling all animation clips that need to be evaluated, and computing Root Motion.",681],["ProcessAnimation:** Blends the results of the animation graph.",681],["WriteTransforms:** Writes all animated transforms to the scene from a worker thread.A Humanoid rig with multiple layers that have IK pass enabled can have multiple WriteTransforms passes (See the Script Lifecycle Flowchart.",681],["",681],["Rendering",681],["OnPreCull:** Called before the camera culls the scene. Culling determines which objects are visible to the camera. OnPreCull is called just before culling takes place.",681],["OnBecameVisible/OnBecameInvisible:** Called when an object becomes visible/invisible to any camera.",681],["OnWillRenderObject:** Called once for each camera if the object is visible.",681],["OnPreRender:** Called before the camera starts rendering the scene.",681],["OnRenderObject:** Called after all regular scene rendering is done. You can use GL class or Graphics.DrawMeshNow to draw custom geometry at this point.",681],["OnPostRender:** Called after a camera finishes rendering the scene.",681],["OnRenderImage:** Called after scene rendering is complete to allow post-processing of the image, see Post-processing Effects.",681],["OnGUI:** Called multiple times per frame in response to GUI events. The Layout and Repaint events are processed first, followed by a Layout and keyboard/mouse event for each input event.",681],["OnDrawGizmos** Used for drawing Gizmos in the scene view for visualisation purposes.",681],["Note:** These callbacks only work with the Built-in Render Pipeline.",681],["",681],["Coroutines",681],["Normal coroutine updates are run after the Update function returns. A coroutine is a function that can suspend its execution (yield) until the given YieldInstruction finishes.",681],["Different uses of Coroutines:",681],["yield** The coroutine will continue after all Update functions have been called on the next frame.",681],["yield WaitForSeconds** Continue after a specified time delay, after all Update functions have been called for the frame.",681],["yield WaitForFixedUpdate** Continue after all FixedUpdate has been called on all scripts. If the coroutine yielded before FixedUpdate, then it resumes after FixedUpdate in the current frame.",681],["yield WWW** Continue after a WWW download has completed.",681],["yield StartCoroutine** Chains the coroutine, and will wait for the MyFunc coroutine to complete first.",681],["",681],["When the Object is destroyed",681],["OnDestroy:** This function is called after all frame updates for the last frame of the object's existence (the object might be destroyed in response to Object.Destroy or at the closure of a scene).",681],["",681],["When quitting",681],["These functions get called on all the active objects in your scene:",681],["OnApplicationQuit:** This function is called on all game objects before the application is quit. In the editor it is called when the user stops playmode.",681],["OnDisable:** This function is called when the behaviour becomes disabled or inactive.",681],["2019-03-18 ",681],["Extending the Editor with IMGUI",682],["Note**: It's strongly recommended to use the UI Toolkit to extend the Unity Editor, as it provides a more modern, flexible, and scalable solution than IMGUI.",682],["Unity lets you extend the editor with your own custom inspectors and Editor Windows and you can define how properties are displayed in the inspector with custom Property Drawers. This section explains how to use these features.",682],["Materials tab",683],["You can use this tab to change how Unity deals with Materials and Textures when importing your model.",683],["When Unity imports a Model without any Material assigned, it uses the Unity diffuse Material. If the Model has Materials, Unity imports them as sub-Assets.",683],["If your Model has Textures, you can also extract them into your Project using the Extract Textures button.",683],["Property Function ",683],["Material Creation Mode Define how you want Unity to generate or import the Materials for your Model. When you choose None from this drop-down menu, the Inspector hides the rest of the settings on this tab. ",683],["None Do not use any Materials embedded within this Model. Use Unity's default diffuse Material instead. ",683],["Standard On import, Unity applies a set of default rules to generate Materials. If you want to customize how Unity generates Material via scripting, choose the Import via MaterialDescription (Experimental) mode instead. ",683],["Import via MaterialDescription (Experimental) On import, Unity uses the Material description embedded within the FBX file to generate the Materials. This method provides more accurate results than previous import methods, and supports a wider range of Material types, such as Arnold and Physical from Autodesk, as well as Unity's HDRP Materials. For more information, see the Material description section below. ",683],["sRGB Albedo Colors Enable this option to use Albedo colors in gamma space. This is enabled by default for legacy import methods. Disable this for Projects using linear color space.This property is not available if you choose Import via MaterialDescription (Experimental) from the Material Creation Mode drop-down menu. ",683],["Location Define how to access the Materials and Textures. Different properties are available depending on which of these options you choose. ",683],["Use Embedded Materials Keep the imported Materials inside the imported Asset. This is the default option from Unity 2017.2 onwards. ",683],["Use External Materials (Legacy) Extract imported Materials as external Assets. This is a Legacy way of handling Materials, and is intended for Projects created with 2017.1 or previous versions of Unity. ",683],["",683],["Use Embedded Materials",683],["When you choose Use Embedded Materials for the Location option, the following import options appear:",683],["",683],["(A)** Click the Extract Materials and Extract Textures buttons to extract all Materials and Textures that are embedded in your imported Asset. These are greyed out if there are no sub-Assets to extract. Below these buttons, Unity displays any messages about the import process.",683],["(B)** The On Demand Remap section provides the Naming and Search properties which allow you to customize how Unity maps imported Materials to the Model. Click the Search and Remap button to remap your imported Materials to existing Material Assets. Nothing changes if Unity can't find any Materials with the correct name.",683],["(C)** Unity displays all imported Materials found in the Asset in the Remapped Materials list. If Unity can't automatically match each Material to an existing Material Asset in your Project, you can set references to the Materials yourself in this list.",683],["",683],["Remapped Materials",683],["New imports or changes to the original Asset do not affect extracted Materials. If you want to re-import the Materials from the source Asset, you need to remove the references to the extracted Materials in the Remapped Materials list. To remove an item from the list, select it and press the Backspace key on your keyboard.",683],["",683],["Naming",683],["Define a naming strategy for the Materials.",683],["Property Function ",683],["By Base Texture Name Use the name of the diffuse Texture of the imported Material to name the Material. When you don't assign a diffuse Texture to the Material, Unity uses the name of the imported Material. ",683],["From Model’s Material Use the name of the imported Material to name the Material. ",683],["Model Name + Model’s Material Use the name of the Model file in combination with the name of the imported Material to name the Material. ",683],["",683],["Search",683],["Define where Unity tries to locate existing Materials when it uses the name defined by the Naming option.",683],["Property Function ",683],["Local Materials Folder Find existing Materials in the local Materials subfolder, which is in the same folder as the Model file). ",683],["Recursive-Up Find existing Materials in all Materials subfolders in all parent folders up to the Assets folder. ",683],["Project-Wide Find existing Materials in all Unity Project folders. ",683],["",683],["Material description",683],["Starting with version 2019.3, Unity introduced the ability to modify the Material mapping during import via scripting. Users can modify how Unity maps the imported Material properties from the data embedded in an FBX file to Unity Material properties. The Material description defines a name and several sets of values that describe the Material and any Textures it references. For more information about the structure of this description, see the MaterialDescription class reference page.",683],["When in ImportViaMaterialDescription mode, the Model importer delegates the creation of Materials to the AssetPostProcessor.OnPreprocessMaterialDescription callback.",683],["Unity provides default implementations of this Post Processor that handle the following Materials:",683],["FBX Standard Material, Arnold Standard, Autodesk Interactive and 3Ds Physical Material from FBX files",683],["Sketchup, Collada and 3DS Materials",683],["These default implementations handle importing Materials differently from the ImportStandard mode, including the following improvements:",683],["It supports more Material types, such as Autodesk's Arnold and Interactive, or Physical, as well as Unity's HDRP Materials.",683],["It supports Emissive Materials.",683],["If a diffuse Texture is set, it ignores the diffuse color (this matches how it works in Autodesk® Maya® and Autodesk® 3ds Max®).",683],["It takes the bump factor, the emissive color, and emissive factor into account.",683],["It imports emissive color animation when defined in the FBX file.",683],["Note**: 3ds Max does not export emissive color animation, so Unity cannot import it.",683],["It imports transparent Materials as fully transparent. The legacy system imports them as fully opaque.",683],["In addition, it imports all Autodesk Interactive Material property animations and no longer ignores the opacity when importing Materials from 3DS files.",683],["",683],["Use External Materials (Legacy)",683],["When you choose Use External Materials (Legacy) for the Location option, the following import options appear:",683],["This option extracts Materials and saves them externally instead of saving them inside your Model Asset. The Naming and Search properties help Unity find imported Materials to map to the Model.",683],["Before Unity version 2017.2, this was the default way of handling Materials.",683],["Materials tab added in 2017.2 NewIn20172",683],["Use Embedded Materials added in 2017.3 NewIn20173",683],["Import via Material Description added in 2019.3 NewIn20193",683],["Model tab",684],["The Import Settings for a Model file appear in the Model tab of the Inspector window when you select the Model. These settings affect various elements and properties stored inside the Model. Unity uses these settings to import each Asset, so you can adjust any settings to apply to different Assets in your Project.",684],["This section provides information about each of the sections on the Model tab:",684],["(A)** Scene-level properties, such as whether to import Lights and Cameras, and what scale factor to use.",684],["(B)** Properties specific to Meshes.",684],["(C)** Geometry-related properties, for dealing with topology, UVs, and normals.",684],["",684],["Scene",684],["Property Function ",684],["Scale Factor Set this value to apply a global scale on the imported Model whenever the original file scale (from the Model file) does not fit the intended scale in your Project. Unity's physics system expects 1 meter in the game world to be 1 unit in the imported file. ",684],["Convert Units Enable this option to convert the Model scaling defined in the Model file to Unity's scale. ",684],["Bake Axis Conversion Enable this property to bake the results of axis conversion directly into your application's asset data (for example, vertex or animation data) when you import a Model that uses a different axis system than Unity. Disable this property to compensate the Transform component of the root GameObject at runtime to simulate axis conversion. ",684],["Import BlendShapes Enable this property to allow Unity to import blend shapes with your Mesh. See Importing blend shapes below for details.Note: Importing blend shape normals requires smoothing groups in the FBX file. ",684],["Import Visibility Import the FBX settings that define whether or not MeshRenderer components are enabled (visible). See Importing Visibility below for details. ",684],["Import Cameras Import cameras from your .FBX file. See Importing Cameras below for details. ",684],["Import Lights Import lights from your .FBX file. See Importing Lights below for details. ",684],["Preserve Hierarchy Always create an explicit prefab root, even if this model only has a single root. Normally, the FBX Importer strips any empty root nodes from the model as an optimization strategy. However, if you have multiple FBX files with portions of the same hierarchy you can use this option to preserve the original hierarchy. For example, file1.fbx contains a rig and a Mesh and file2.fbx contains the same rig but only the animation for that rig. If you import file2.fbx without enabling this option, Unity strips the root node, the hierarchies don't match, and the animation breaks. ",684],["Sort Hierarchy By Name Enable this property to sort GameObjects by alphabetical order within the hierarchy. Disable this property to preserve the hierarchy order defined in the FBX file. ",684],["",684],["Importing blend shapes",684],["Unity supports blend shapes (morphing) and can import blend shapes from FBX and DAE files exported from 3D modeling applications. You can also import animation from FBX files. Unity supports vertex-level animation for blend shapes on vertices, normals and tangents.",684],["Skin and blend shapes can affect Meshes at the same time. When Unity imports Meshes containing blend shapes, it uses the SkinnedMeshRenderer component (instead of the MeshRenderer component), regardless of whether it has skin or not.",684],["Unity imports blend shape animation as part of regular animation: it animates blend shape weights on SkinnedMeshRenderers.",684],["Choose either of these methods to import blend shapes with normals:",684],["Set the Blend Shape Normals property to Import so that Unity uses the normals from the FBX file. For more information, see the documentation for the Blend Shape Normals property below.",684],["OR*",684],["Set the Blend Shape Normals property to Calculate so that Unity uses the same logic to calculate normals on a Mesh and blend shapes.",684],["Note:** If you want tangents on your blend shapes then set the Tangents import setting to Calculate.",684],["",684],["Importing visibility",684],["Unity can read visibility properties from FBX files with the Import Visibility property. Values and animation curves can enable or disable MeshRenderer components by controlling the Renderer.enabled property.",684],["Visibility inheritance is true by default but can be overridden. For example, if the visibility on a parent Mesh is set to 0, all of the renderers on its children are also disabled. In this case, one animation curve is created for each child's Renderer.enabled property.",684],["Some 3D modeling applications either do not support or have limitations regarding visibility properties. For more information, see:",684],["\nLimitations on importing Models into Unity from Autodesk® Maya®\n",684],["\nLimitations on importing Models into Unity from Blender\n",684],["",684],["Importing cameras",684],["Unity supports the following properties when importing Cameras from an .FBX file:",684],["Property: Function: ",684],["Projection mode Orthographic or perspective. Does not support animation. ",684],["Field of View Supports animation. ",684],["All Physical Camera properties If you import a Camera with Physical Properties (for example, from Maya), Unity creates a Camera with the Physical Camera property enabled and the Focal Length, Sensor Type, Sensor Size, Lens Shift, and Gate Fit values from the FBX file.Note: Not all 3D modeling applications have a concept of Gate Fit. When not supported by the 3D modeling application, the default value in Unity is None. ",684],["Near and Far Clipping Plane distance Unity does not import any animation on these properties. When exporting from 3ds Max, enable the Clip Manually setting; otherwise the default values are applied on import. ",684],["Target Cameras If you import a Target Camera, Unity creates a camera with a LookAt constraint using the target object as the source. ",684],["",684],["Importing lights",684],["The following Light types are supported:",684],["Omni",684],["Spot",684],["Directional",684],["Area",684],["The following Light properties are supported:",684],["Property: Function: ",684],["Range The FarAttenuationEndValue is used if UseFarAttenuation is enabled. FarAttenuationEndValue does not support animation. ",684],["Color Supports animation. ",684],["Intensity Supports animation. ",684],["Spot Angle Supports animation. Only available for Spot Lights. ",684],["Note**: In 3ds Max, the exported default value is the value of the property at the current selected frame. To avoid confusion, move the playhead to frame 0 when exporting.",684],["Limitations",684],["Some 3D modeling applications apply scaling on light properties. For instance, you can scale a Spot Light by its hierarchy and affect the light cone. Unity does not do this, which may cause lights to look different in Unity.",684],["The FBX format does not define the width and height of area lights. Some 3D modeling applications don't have this property and only allow you to use scaling to define the rectangle or disc area. Because of this, area lights always have a size of 1 when imported.",684],["Targeted light animations are not supported unless their animation is baked.",684],["",684],["Meshes property section",684],["Property Function ",684],["Mesh Compression Set the level of compression ratio to reduce the file size of the Mesh. Increasing the compression ratio lowers the precision of the Mesh by using the mesh bounds and a lower bit depth per component to compress the mesh data.It’s best to turn it up as high as possible without the Mesh looking too different from the uncompressed version. This is useful for optimizing game size. ",684],["Off Don't use compression. ",684],["Low Use a low compression ratio. ",684],["Medium Use a medium compression ratio. ",684],["High Use a high compression ratio. ",684],["Read/Write Enabled When you enable this option, Unity uploads the Mesh data to GPU-addressable memory, but also keeps it in CPU-addressable memory. This means that Unity can access the Mesh data at run time, and you can access it from your scripts. For example, you might want to do this if you're generating a Mesh procedurally, or if you want to copy some data from a Mesh. When this option is disabled, Unity uploads the Mesh data to GPU-addressable memory, and then removes it from CPU-addressable memory. By default, this option is disabled. In most cases, to save runtime memory usage, leave this option disabled. For information on when to enable Read/Write Enabled, see Mesh.isReadable. ",684],["Optimize Mesh Determine the order in which triangles are listed in the Mesh for better GPU performance. ",684],["Nothing No optimization. ",684],["Everything Let Unity reorder the vertices and indices for both polygons and vertices. This is the default. ",684],["Polygon Order Reorder only the polygons. ",684],["Vertex Order Reorder only the vertices. ",684],["Generate Colliders Enable to import your Meshes with Mesh Colliders automatically attached. This is useful for quickly generating a collision Mesh for environment geometry, but should be avoided for geometry you are moving. ",684],["",684],["Geometry properties section",684],["Property Function ",684],["Keep Quads Enable this to stop Unity from converting polygons that have four vertices to triangles. For example, if you are using Tessellation Shaders, you may want to enable this option because tessellating quads may be more efficient than tessellating polygons. Unity can import any type of polygon (triangle to N-gon). Polygons that have more than four vertices are always converted to triangles regardless of this setting. However, if a mesh has quads and triangles (or N-gons that get converted to triangles), Unity creates two submeshes to separate quads and triangles. Each submesh contains either triangles only or quads only. Tip: If you want to import quads into Unity from 3ds Max, you have to export it as an Editable Poly. ",684],["Weld Vertices Combine vertices that share the same position in space, provided that they share the same properties overall (including, UVs, Normals, Tangents, and VertexColor). This optimizes the vertex count on Meshes by reducing their overall number. This option is enabled by default. In some cases, you might need to switch this optimization off when importing your Meshes. For example, if you intentionally have duplicate vertices which occupy the same position in your Mesh, you may prefer to use scripting to read or manipulate the individual vertex and triangle data. ",684],["Index Format Define the size of the Mesh index buffer. Note: For bandwidth and memory storage size reasons, you generally want to keep 16 bit indices as default, and only use 32 bit when necessary, which is what the Auto option uses. ",684],["Auto Let Unity decide whether to use 16 or 32 bit indices when importing a Mesh, depending on the Mesh vertex count. This is the default for Assets added in Unity 2017.3 and onwards. ",684],["16 bit Use 16 bit indices when importing a Mesh. If the Mesh is larger, then it is split into <64k vertex chunks. This was the default setting for Projects made in Unity 2017.2 or previous. ",684],["32 bit Use 32 bit indices when importing a Mesh. If you are using GPU-based rendering pipelines (for example with compute shader triangle culling), using 32 bit indices ensures that all Meshes use the same index format. This reduces shader complexity, because they only need to handle one format. ",684],["Legacy Blend Shape Normals Enable this option to compute normals based on the Smoothing Angle value. ",684],["Normals Defines if and how normals should be calculated. This is useful for optimizing game size. ",684],["Import Import normals from the file. This is the default option. If the file doesn't contain normals, they will be calculated. ",684],["Calculate Calculate normals based on Normals Mode, Smoothness Source, and Smoothing Angle (below). ",684],["None Disable normals. Use this option if the Mesh is neither normal mapped nor affected by real-time lighting. ",684],["Blend Shape Normals Defines if and how Unity should calculate normals for blend shapes. This value should match the value for the Normals property.This property is only visible when Legacy Blend Shape Normals is disabled. ",684],["Import Import normals from the file. If the blend shape does not contain normals, the FBX SDK uses its own method to calculate normals, resulting in normal values that usually differ from the normal values that Unity creates with the Calculate option. ",684],["Calculate Calculate normals based on Normals Mode, Smoothness Source, and Smoothing Angle (below). ",684],["None The blend shape normals do not contribute to the base shape. ",684],["Normals Mode Define how the normals are calculated by Unity. This is only available when Normals is set to Calculate or Import. ",684],["Unweighted Legacy The legacy method of computing the normals (prior to version 2017.1). In some cases it gives slightly different results compared to the current implementation. It is the default for all FBX prefabs imported before the migration of the Project to the latest version of Unity. ",684],["Unweighted The normals are not weighted. ",684],["Area Weighted The normals are weighted by face area. ",684],["Angle Weighted The normals are weighted by the vertex angle on each face. ",684],["Area and Angle Weighted The normals are weighted by both the face area and the vertex angle on each face. This is the default option. ",684],["Smoothness Source Set how to determine the smoothing behavior (which edges should be smooth and which should be hard).This property is only visible when Legacy Blend Shape Normals is disabled. ",684],["Prefer Smoothing Groups Use smoothing groups from the Model file, where possible. ",684],["From Smoothing Groups Use smoothing groups from the Model file only. ",684],["From Angle Use the Smoothing Angle value to determine which edges should be smooth. ",684],["None Don't split any vertices at hard edges. ",684],["Smoothing Angle Control whether vertices are split for hard edges: typically higher values result in fewer vertices. Note: Use this setting only on very smooth organics or very high poly models. Otherwise, you are better off manually smoothing inside your 3D modeling software and then importing with the Normals option set to Import (above). Since Unity bases hard edges on a single angle and nothing else, you might end up with smoothing on some parts of the Model by mistake.Only available if Normals is set to Calculate. ",684],["Tangents Define how vertex tangents should be imported or calculated. This is only available when Normals is set to Calculate or Import. ",684],["Import Import vertex tangents from FBX files if Normals is set to Import. If the Mesh has no tangents, it won't work with normal-mapped shaders. ",684],["Calculate Tangent Space Calculate tangents using MikkTSpace. This is the default option if Normals is set to Calculate. ",684],["Calculate Legacy Calculate tangents with legacy algorithm. ",684],["Calculate Legacy - Split Tangent Calculate tangents with legacy algorithm, with splits across UV charts. Use this if normal map lighting is broken by seams on your Mesh. This usually only applies to characters. ",684],["None Don't import vertex tangents. The Mesh has no tangents, so this doesn't work with normal-mapped shaders. ",684],["Swap UVs Swap UV channels in your Meshes. Use this option if your diffuse Texture uses UVs from the lightmap. Unity supports up to eight UV channels but not all 3D modeling applications export more than two. ",684],["Generate Lightmap UVs Creates a second UV channel for Lightmapping. See documentation on generating lightmap UVs for more information. ",684],["Normals Mode, Light and Camera import options added in Unity 2017.1 NewIn20171",684],["Materials tab added in 2017.2 NewIn20172",684],["Index Format property added in 2017.3 NewIn20173",684],["Updated description of read/write enabled setting and reorganized properties table, to match improvements in Unity 2017.3 NewIn20173",684],["Added Legacy Blend Shape Normals and Sort Hierarchy By Name properties in Unity 2019.3 NewIn20193",684],["Rig tab",685],["The settings on the Rig tab define how Unity maps the deformers to the Mesh in the imported Model so that you can animate it. For Humanoid characters, this means assigning or creating an Avatar. For non-Humanoid (Generic) characters, this means identifying a Root bone in the skeleton.",685],["By default, when you select a Model in the Project view, Unity determines which Animation Type best matches the selected Model and displays it in the Rig tab. If Unity has never imported the file, the Animation Type is set to None:",685],["Property: Function: ",685],["Animation Type Specfiy the type of animation. ",685],["None No animation present ",685],["Legacy Use the Legacy Animation System. Import and use animations as with Unity version 3.x and earlier. ",685],["Generic Use the Generic Animation System if your rig is non-humanoid (quadruped or any entity to be animated). Unity picks a root node but you can identify another bone to use as the Root node instead. ",685],["Humanoid Use the Humanoid Animation System if your rig is humanoid (it has two legs, two arms and a head). Unity usually detects the skeleton and maps it to the Avatar correctly. In some cases, you may need to set a change the Avatar Definition and Configure the mapping manually. ",685],["",685],["Generic animation types",685],["Generic Animations do not use Avatars like Humanoid animations do. Since the skeleton can be arbitrary, you must specify which bone is the Root node. The Root node allows Unity to establish consistency between Animation clips for a generic model, and blend properly between Animations that have not been authored \"in place\" (that is, where the whole model moves its world position while animating).",685],["Specifying the root node helps Unity determine between movement of the bones relative to each other, and motion of the Root node in the world (controlled from OnAnimatorMove).",685],["Property: Function: ",685],["Avatar Definition Choose where to get the Avatar definition. ",685],["Create from this model Create an Avatar based on this model ",685],["Copy from Other Avatar Point to an Avatar set up on another model. ",685],["Root node Select the bone to use as a root node for this Avatar. This setting is only available if you set the Avatar Definition to Create From This Model. ",685],["Source Copy another Avatar with an identical rig to import its animation clips. This setting is only available if you set the Avatar Definition to Copy from Other Avatar. ",685],["Skin Weights Set the maximum number of bones that can influence a single vertex. ",685],["Standard (4 Bones) Use a maximum influence of four bones. This is the default, and is recommended for performance. ",685],["Custom Set your own maximum number of bones. When you select this option, the Max Bones/Vertex and Max Bone Weight properties appear. ",685],["Max Bones/Vertex Set the maximum number of bones per vertex to influence a given vertex. You can set between 1 and 32 bones per vertex, but the higher the number of bones you use to influence a vertex, the greater the performance cost.This setting is only available you set the Skin Weights property to Custom. ",685],["Max Bone Weight Set the bottom threshold for considering bone weights. The weighting calculation ignores anything smaller than this value, and Unity scales up the bone weights higher than this value to a total of 1.0.This setting is only available if the Skin Weights property is set to Custom. ",685],["Optimize Game Object Remove and store the GameObject Transform hierarchy of the imported character in the Avatar and Animator component. If enabled, the SkinnedMeshRenderers of the character use the Unity animation system's internal skeleton, which improves the performance of the animated characters. Only available if the Avatar Definition is set to Create From This Model. ",685],["Extra Transforms to Expose Specify which Transform paths you want Unity to ignore when Optimize Game Object is enabled. For more information, see Including extra Transforms.This section only appears when Optimize Game Object is enabled. ",685],["",685],["Humanoid animation types",685],["With rare exceptions, humanoid models have the same basic structure. This structure represents the major articulated parts of the body: the head and limbs. The first step to using Unity's Humanoid animation features is to set up and configure an Avatar. Unity uses the Avatar to map the simplified humanoid bone structure to the actual bones present in the Model's skeleton.",685],["Property: Function: ",685],["Avatar Definition Choose where to get the Avatar definition. ",685],["Create from this model Create an Avatar based on this model ",685],["Copy from Other Avatar Point to an Avatar set up on another model. ",685],["Source Copy another Avatar with an identical rig to import its animation clips. Only available if the Avatar Definition is set to Copy from Other Avatar. ",685],["Configure... Open the Avatar configuration. Only available if the Avatar Definition is set to Create From This Model. ",685],["Skin Weights This property is identical for both Humanoid and Generic Models. See the documentation on Skin Weights above for information about it. ",685],["Optimize Game Object Remove and store the GameObject Transform hierarchy of the imported character in the Avatar and Animator component. If enabled, the SkinnedMeshRenderers of the character use the Unity animation system's internal skeleton, which improves the performance of the animated characters. Only available if the Avatar Definition is set to Create From This Model. ",685],["Extra Transforms to Expose Specify which Transform paths you want Unity to ignore when Optimize Game Object is enabled. For more information, see Including extra Transforms.This section only appears when Optimize Game Object is enabled. ",685],["",685],["Including extra Transforms",685],["When you enable the Optimize Game Object property, Unity ignores any Transform which is part of the hierarchy but is not mapped in the Avatar, in order to improve CPU performance. However, you can mark specific nodes in the GameObject hierarchy to include in calculations using the Extra Transforms to Expose section:",685],["(A)** Enter the full or partial name in the search box to filter the list of Transforms. This makes it easier to navigate through characters with a large number of bones.",685],["(B)** Enable each Transform (bones of a skeleton) you want Unity to include in calculations.",685],["(C)** Use the buttons to help select specific Transforms. For example, the Toggle All button selects or deselects everything at once (regardless of the current selection, including filtered items).",685],["(D)** Use the Revert button to undo your selections or the Apply button to apply the exceptions to the Model.",685],["Note**: In optimized mode, skinned Mesh matrix extraction is multi-threaded.",685],["",685],["Legacy animation types",685],["Property: Function: ",685],["Generation Select the animation import method. ",685],["Don't Import Do not import animation ",685],["Store in Original Roots (Deprecated) Deprecated. Do not use. ",685],["Store in Nodes (Deprecated) Deprecated. Do not use. ",685],["Store in Root (Deprecated) Deprecated. Do not use. ",685],["Store in Root (New) Import the animation and store it in the Model's root node. This is the default setting. ",685],["Skin Weights See the documentation on Skin Weights above for information about this property. ",685],["For more information about legacy animation, see the documentation for Legacy Animation System.",685],["Skin Weights added in 2019.1 NewIn20191",685],["Materials tab added in 2017.2 NewIn20172",685],["Feature sets",686],["Feature sets are groups of packages that enable you to achieve specific results in Unity. For example, the 2D feature set provides all the functionality you need to create 2D games for various art styles.",686],["All the packages in a feature set are compatible with each other for that version of the feature set. You can install feature sets using the Package Manager.",686],["The following feature sets are available in this release of Unity:",686],["2D: Create 2D game worlds with animated characters and 2D physics.",686],["3D Characters and Animation: Animate characters and create cutscenes, sequences or movies.",686],["3D World Building: Use artist-friendly tools to create 3D, open-world environments that are believable and interactive.",686],["AR: Create augmented reality experiences that interact with the real world.",686],["Cinematic Studio: Create films, TV shows, and other animated linear content.",686],["Engineering: Enable support for integrated development environments, and use tools to test and analyze your project's performance.",686],["Gameplay and Storytelling: Create dynamic camera shots, and arrange cinematic content to create a story for your project.",686],["Mobile: Optimize your apps for mobile devices.",686],["VR: Add interactivity to your applications to create virtual reality experiences.",686],["For information about how to find what a specific feature set contains, see Features (detail) view.",686],["For information about how to install feature sets in the Package Manager, see Installing a feature set.",686],["Format of Text Serialized files",687],["Unity's Scene format uses a custom subset of the YAML data serialization language. YAML is an open format with documentation about it available on the YAML website. For more information about the YAML used in unity, read the documentation on UnityYAML.",687],["The file writes each Object in a Scene as a separate YAML document. The --- sequence introduces each Object in the file. In this context, the term \"Object\" refers to GameObjects, Components and other scene data collectively: each of these items needs its own YAML document in the scene file. The following example shows the basic structure of a serialized object:",687],["--- !u!1 &6",687],["GameObject:",687],["m_ObjectHideFlags: 0",687],["m_PrefabParentObject: {fileID: 0}",687],["m_PrefabInternal: {fileID: 0}",687],["importerVersion: 3",687],["m_Component:",687],["\n4: {fileID: 8}\n",687],["\n33: {fileID: 12}\n",687],["\n65: {fileID: 13}\n",687],["\n23: {fileID: 11}\n",687],["m_Layer: 0",687],["m_Name: Cube",687],["m_TagString: Untagged",687],["m_Icon: {fileID: 0}",687],["m_NavMeshLayer: 0",687],["m_StaticEditorFlags: 0",687],["m_IsActive: 1",687],["The first line contains the string !u!1 &6 after the document marker. The first number after !u! indicates the class of the object (in this case, it is a GameObject). The number following the ampersand is an object ID number unique within the file, although the number is assigned to each object arbitrarily. Each of the object's serializable properties is denoted by a line like the following:",687],["m_Name: Cube",687],["Properties are typically prefixed with m_ but otherwise follow the name of the property as defined in the script reference. The following example shows how a second object, defined further down in the file looks:",687],["--- !u!4 &8",687],["Transform:",687],["m_ObjectHideFlags: 0",687],["m_PrefabParentObject: {fileID: 0}",687],["m_PrefabInternal: {fileID: 0}",687],["m_GameObject: {fileID: 6}",687],["m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}",687],["m_LocalPosition: {x: -2.618721, y: 1.028581, z: 1.131627}",687],["m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}",687],["m_Children: []",687],["m_Father: {fileID: 0}",687],["The following example shows an attached Transform component to the GameObject defined by the YAML document above. {fileID:6} is used to represent the GameObject as the GameObject’s object ID within the file was 6.",687],["m_GameObject: {fileID: 6}",687],["...",687],["Decimal representation or hexadecimal numbers in IEEE 754 format (denoted by a 0x prefix) can be used to represent floating point numbers. Unity uses the IEEE 754 representation for lossless encoding of values and to write floating point values which don't have a short decimal representation. When Unity writes numbers in hexadecimal, it always writes the decimal format in parentheses for debugging purposes, but only the hex is actually parsed when loading the file. To edit these values manually, remove the hex and enter a decimal number. The following example shows a valid representation of floating point values (all representing the number one):",687],["myValue: 0x3F800000",687],["myValue: 1",687],["myValue: 1.000",687],["myValue: 0x3f800000(1)",687],["myValue: 0.1e1",687],["2018-05-13 ",687],["Frame Debugger Event Hierarchy",688],["The Event Hierarchy panel in the Frame Debugger window displays the sequence of rendering events that constitute the frame. The panel organizes the events into a hierarchy so you can see where each event originates from.",688],["To view information about an event, select the event in the Event Hierarchy. When you select an event:",688],["The Frame Debugger displays information about the event in the event information panel.",688],["Unity processes events up to and including the selected event and displays the result in the Game view.",688],["If there is a single GameObject associated with the event, you can double click or CTRL + click the event to highlight the GameObject in the Hierarchy. If the event represents a batch that contains multiple GameObjects, Unity doesn't highlight the GameObjects.",688],["For more information, see Frame Debugger.",688],["",688],["Hierarchy search bar",688],["The search bar at the top of the Event Hierarchy can filter events by name. Use it to quickly find specific events by name.",688],["Frame Debugger event information",689],["The Event Information Panel in the Frame Debugger window displays information about the event such as geometry details and the shader used for a draw call.",689],["Label Description ",689],["------------------------------------------------------------ ------------------------------------------------------------ ",689],[" Render target selector: When rendering into multiple render targets (such as multiple RenderTextures or when also rendering to depth), this specifies which render target to display in the Game view. This is useful for example to view individual render targets in a G-buffer. ",689],[" Color channel selector: Specifies which color channels of the render target to display. ",689],[" Levels: Controls the black and white intensity. Use this to isolate areas of the Game view based on light intensity. ",689],[" Output / Mesh Preview: Displays a preview of the selected event output as well as the mesh geometry in the event. For more information, see Preview. ",689],[" Event properties: Contains further information about the selected event. For more information, see Event properties. ",689],["",689],["Preview",689],["The preview section consists of two tabs:",689],["The Output tab displays a preview of the selected event output.",689],["The Mesh Preview tab displays the mesh geometry Unity rendered in the event.",689],["Label Description ",689],["------------------------------------------------------------ ------------------------------------------------------------ ",689],[" Preview: A preview of the mesh geometry Unity rendered during the event. ",689],[" Mesh name: The name of the mesh asset in the preview. Click on the mesh name to take see the mesh asset in the Project window. If the geometry was procedural and there is no mesh asset associated, this is empty (Unity displays -). ",689],[" Preview mode: Specifies how the preview renders the mesh. The options are:• Shaded: Renders the mesh using its material and a basic light.• UV Checker: Applies a checkerboard texture to the mesh to visualize how the mesh’s UV map applies textures..• UV Layout: Displays how the vertices of the mesh are organized in the unwrapped UV map. This view disables the Wireframe toggle.• Vertex Color: Visualizes any vertex colors that the vertices in this mesh have. If no vertices have a vertex color, this option is unavailable.• Normals: Visualizes the relative directions of the normals in the mesh with color.• Tangents: Visualizes the tangent data in the mesh with color.• Blendshapes: Visualizes blend shape deformations on the mesh. If the mesh has no blend shapes, this option is unavailable. ",689],[" Wireframe toggle: Toggles the mesh wireframe on and off. When enabled, the preview displays the mesh vertices and edges. ",689],["",689],["Event properties",689],["The event properties section contains properties and values for the selected event. It has a Details fold-out section that contains information about the event itself and then a fold-out section for each type of shader property. If the fold-out section is grayed-out, it means that the shader in the event didn't contain any properties of that type. For more information on the information that each section displays, see:",689],["Note**: When using OpenGL and GLSL shaders, this panel displays all shader properties as being part of the vertex stage.",689],["",689],["Details",689],["The Details section displays information about the rendering event, such as the number of draw calls as well as the meshes that Unity rendered and the shader it used to render them.",689],["Property Description ",689],["--------------------- ------------------------------------------------------------ ",689],["RenderTarget The name of the render target ",689],["Size The size of the render target. ",689],["Format The TextureFormat for the render target. ",689],["Color Actions Shows which actions to perform on the color target when:• The GPU first loads the color target. For more information, see RenderBufferLoadAction.• The GPU finishes rendering to the color target. For more information, see RenderBufferStoreAction. ",689],["Depth Actions Shows which actions to perform on the depth target when:• The GPU first loads the depth target. For more information, see RenderBufferLoadAction.• The GPU finishes rendering to the depth target. For more information, see RenderBufferStoreAction. ",689],["Memoryless The render texture memoryless mode mode. For more information, see memoryless. ",689],["ColorMask The color channel mask used for the render target. For more information, see ColorMask. ",689],["Blend Color The color blending method Unity used during the selected event. ",689],["Blend Alpha The alpha blending method Unity used during the selected event. ",689],["BlendOp Color The color blending operation Blend Color used. ",689],["BlendOp Alpha The alpha blending operation Blend Alpha used. ",689],["Draw Calls The number of draw calls Unity processed during the selected event. ",689],["Vertices The number of vertices Unity processed during the select event. ",689],["Indices The number of indices Unity processed during the select event. ",689],["Clear Color The color Unity used to clear the render target during the selected event. If Unity didn't clear the render target, the display doesn't show a color here. ",689],["Clear Depth The color Unity used to clear the depth buffer during the selected event. If Unity didn't clear the depth buffer, the display doesn't show a color here. ",689],["Clear Stencil The color Unity used to clear the stencil buffer during the selected event. If Unity didn't clear the stencil buffer, the display doesn't show a color here. ",689],["Batch cause The reason why the SRP Batcher was unable to batch the selected rendering event with the previous rendering event. This is only relevant if your application uses the SRP Batcher. ",689],["Meshes The list of meshes that Unity rendered during the selected event. ",689],["Pass The shader Pass Unity used. ",689],["LightMode The LightMode pass tag Unity used during the selected event. ",689],["Used Shader The shader asset Unity used during the selected event. This can sometimes be different than the original shader, for example when the original shader uses a fallback shader or USEPASS. ",689],["Original Shader The original shader Unity used with the pass. ",689],["ZClip The shader's depth clip mode. ",689],["ZTest The shader's depth test mode. ",689],["ZWrite The shader's depth clip mode. ",689],["Cull The shader's cull mode. ",689],["Conservative Indicates whether the shader used conservative rasterization. ",689],["Offset The depth bias on the GPU that Unity used during the selected event. ",689],["Stencil Indicates whether Stencil is enabled in the selected event. For more information, see Stencil. ",689],["Stencil Ref The stencil reference value. ",689],["Stencil ReadMask The stencil readmask value Unity used to perform the stencil test. ",689],["Stencil WriteMask The stencil writemask value Unity used to write to the stencil buffer. ",689],["Stencil Comp The operation that the GPU performed for the stencil test for all pixels. ",689],["Stencil Pass The operation that the GPU performed on the stencil buffer for pixels that passed both the stencil test and the depth test. ",689],["Stencil Fail The operation that the GPU performed on the stencil buffer for pixels that failed the stencil test. ",689],["Stencil ZFail The operation that the GPU performed on the stencil buffer for pixels that passed the stencil test but failed the depth test. ",689],["",689],["Keywords",689],["This section displays information about the enabled shader keywords Unity used in the rendering event.",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the shader keyword. ",689],["Stage The shader stage that Unity used the shader keyword in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Scope Indicates whether the scope of the keyword is global or local. For more information, see Declaring keywords. ",689],["Dynamic Indicates whether the keyword is dynamic or not. For more information, see Declaring and using shader keywords in HLSL. ",689],["",689],["Textures",689],["The Texture section displays information about the named textures Unity used during the rendering event.",689],["Property Description ",689],["------------------------ ------------------------------------------------------------ ",689],["Name The property name for the texture. ",689],["Stage The shader stage that Unity used the texture in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Size The size of the texture. This is the width and height for 2D textures and width, height, and depth for 3D textures, ",689],["Sampler Type Indicates type of a Texture (such as 2D Texture, cubemap, or 3D volume texture). ",689],["Color Format The color format that the texture uses. For more information on RenderTexture formats, see GraphicsFormat. For more information on formats for other texture types, see TextureFormat. ",689],["Depth Stencil Format The depth stencil format for the RenderTexture. For more information, see RenderTexture.depthStencilFormat. Note: If the texture isn't a RenderTexture, Unity doesn't display a graphics format here. ",689],["Texture The texture name. ",689],["",689],["Ints",689],["The Ints section displays information about the named int values Unity used during the rendering event.",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the int property in the shader. ",689],["Stage The shader stage that Unity used the int property in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Value The value of the int property. ",689],["",689],["Floats",689],["The Floats section displays information about the named float values Unity used during the rendering event.",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the float property in the shader. ",689],["Stage The shader stage that Unity used the float property in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Value The value of the float property. ",689],["",689],["Vectors",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the vector property in the shader. ",689],["Stage The shader stage that Unity used the vector property in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Value(R) The R component of the vector. ",689],["Value(G) The G component of the vector. ",689],["Value(B) The B component of the vector. ",689],["Value(A) The A component of the vector. ",689],["",689],["Matrices",689],["The Matrices section displays information about the named matrix values Unity used during the rendering event.",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the matrix property in the shader. ",689],["Stage The shader stage that Unity used the matrix property in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Column 0 The values in the first column of the matrix. ",689],["Column 1 The values in the second column of the matrix. ",689],["Column 2 The values in the third column of the matrix. ",689],["Column 3 The values in the fourth column of the matrix. ",689],["",689],["Buffers",689],["The Buffers section displays information about the named buffers Unity used during the rendering event.",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the buffer in the shader. ",689],["Stage The shader stage that Unity used the buffer in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["",689],["Constant Buffers",689],["This Constant Buffers section displays information about the named constant buffers Unity used during the rendering event.",689],["Property Description ",689],["------------ ------------------------------------------------------------ ",689],["Name The name of the constant buffer in the shader. ",689],["Stage The shader stage that Unity used the constant buffer in. The possible values are:• vs: Vertex Shader• fs: Fragment Shader• gs: Geometry Shader• hs: Hull Shader• ds: Domain Shader ",689],["Share event information",689],["To help you share information for a particular event, the Frame Debugger window can copy the information in the user interface to the clipboard. It can copy information for a single property, for all the properties in a properties section, or for an entire event. This means you don't need to take one or multiple screenshots to share the results of a frame capture.",689],["To copy a single property and its values to the clipboard, right-click the property and select Copy Property.",689],["To copy all the properties and their values from a properties section, right-click the properties section header and select Copy All <property type> Properties.",689],["To copy all the information from the rendering event, right-click the event header and select Copy Event Info.",689],["Frame Debugger window reference",690],["The Frame Debugger window is the user interface for Unity's Frame Debugger. It shows the rendering event information and controls the playback of the frame under construction.",690],["Label Description ",690],["------------------------------------------------------------ ------------------------------------------------------------ ",690],[" Enable/Disable: Enables or disables the Frame Debugger. ",690],[" Target selector: Specifies the process to attach the Frame Debugger to. This is the Unity Editor by default but you can use this to attach the Frame Debugger to built applications. For more information, see Attach the Frame Debugger to a built project. ",690],[" Event scrubber: A slider you can use to move through the rendering events in the current frame linearly. ",690],[" Previous event: Selects the event previous to the one currently selected. ",690],[" Next event: Selects the event after the one currently selected. ",690],[" Event Hierarchy: Lists the sequence of rendering events that constitute the frame. For more information, see Event Hierarchy. ",690],[" Event Information Panel: Displays information about the event such as geometry details and the shader used for a draw call. For more information, see Event Information Panel. ",690],["",690],["Debug a frame",690],["To debug a frame using the Frame Debugger:",690],["Open the Frame Debugger (menu: Window > Analysis > Frame Debugger).",690],["Use the target selector to select the process to attach the Frame Debugger to. If you want to debug a frame in the Unity Editor, set this to Editor. If you want to debug a frame in a built application, see Attach the Frame Debugger to a built project.",690],["Click Enable. When you do this, the Frame Debugger captures a frame. It populates the Event Hierarchy with the draw calls and other events that constitute the frame and renders the frame in the Game view.",690],["Note: If your application is running, the Frame Debugger pauses it.",690],["Select an event from the Event Hierarchy to view the scene as it appears up to and including that event. This also displays information about the event in the Event Information Panel. You can use the previous event and next event button, the arrow keys, or the event scrubber to move through the frame linearly. If you don't know which event Unity renders the geometry you want to debug in, these navigation tools are useful to move through the events linearly until you find it.",690],["When a draw call event corresponds to the geometry of a GameObject, Unity highlights that GameObject in the Hierarchy.",690],["If an event renders into a RenderTexture, Unity displays the contents of that RenderTexture in the Game view and Frame Debugger window. This is useful for inspecting how various off-screen render targets build up. For example:",690],["",690],["Attach the Frame Debugger to a built project",690],["You can change the Frame Debugger's target process to attach the Frame Debugger to a built Unity Player. To be compatible with the Frame Debugger, the Unity Player must:",690],["Use the Development Build Build Setting.",690],["Support multithreaded rendering. Every Unity platform except WebGL supports this.",690],["For desktop platforms, use the Run In Background Player Setting. Otherwise, when you focus the Frame Debugger window in the Unity Editor, the Unity Player loses focus and doesn't reflect any rendering changes.",690],["If the Unity Player fulfills the above requirements, when you next debug a frame, you can attach the Frame Debugger to the Unity Player.",690],["FrameTimingManager",691],["The FrameTimingManager is an API that captures detailed timing data about performance during individual frames in an application. You can use this data to assess those frames to understand why your application doesn't meet performance targets.",691],["Use the FrameTimingManager if:",691],["You need to debug at a frame-by-frame level.",691],["You want to use the Dynamic Resolution feature.",691],["You want to use the Adaptive Performance package.",691],["Frame timings don’t replace data from the Profiler; after you profile your application at a high level, use the FrameTimingManager to investigate specific details. The FrameTimingManager decreases performance when it records data, so it can’t produce an accurate measurement of how your application performs.",691],["How to enable the FrameTimingManager",691],["Tip**: FrameTimingManager is always active for Development Player builds.",691],["To enable the FrameTimingManage for Release builds and in the Unity Editor:",691],["Go to Edit > Project Settings > Player.",691],["In Other Settings, navigate to the Rendering heading.",691],["Enable the Frame Timing Stats property.",691],["If you use the OpenGL platform, you also need to enable the OpenGL: Profiler GPU Recorders property to measure GPU usage. To do this:",691],["Go to Edit > Project > Settings > Player.",691],["In Other Settings, navigate to the Rendering heading.",691],["Enable the OpenGL: Profiler GPU property.",691],["Note: In Unity versions 2021.2 and earlier, the OpenGL Profiler GPU Recorder disables the Frame Timing Stats property, so you can’t use them together.",691],["How to use the FrameTimingManager",691],["To access data that the FrameTimingManager records, use one of the following methods:",691],["View frame time data in a Custom Profiler module.",691],["Retrieve timestamp data from the FrameTimingManager C# API.",691],["",691],["View frame time data with a Custom Profiler module",691],["To view frame timing data in a Custom Profiler module:",691],["Create a custom profiler module according to the instructions on Creating a custom profiler module.",691],["In the *Profiler Module Editor *window, select your custom module.",691],["In the Available Counters panel, select Unity.",691],["Select Render to open the submenu that contains profiler counters related to memory usage, which includes those that the FrameTimingStats property enables. You can then click on the relevant counters in the submenu to add them to your custom module.",691],["The following table describes the purpose of each of the counters that become available when you enable Frame Timing Stats:",691],["Measurement Description ",691],[":--------------- :-------------------------- ",691],["CPU Total Frame Time (ms) The total CPU frame time, in milliseconds. Unity calculates this as the time between the ends of two frames, including any overheads or time spent waiting in between frames. ",691],["CPU Main Thread Frame Time (ms) The time between the start of the frame and the time when the Main Thread finished the work it performed during that frame, in milliseconds. ",691],["CPU Main Thread Present Wait Time (ms) The CPU time spent waiting for Present() during the frame. ",691],["CPU Render Thread Frame Time (ms) The time between the start of the work on the Render Thread and when Unity calls the Present() function, in milliseconds. ",691],["GPU Frame Time (ms) The time difference between the beginning and the end of the GPU rendering a single frame, in milliseconds. ",691],["",691],["Retrieve timestamp data from the FrameTimingManager C# API",691],["Use the FrameTimingManager API to access timestamp information. In each variable, the FrameTimingManager records the time a specific event happens during a frame.",691],["The following table shows the values available through the API, in the order that Unity executes them during a frame:",691],["Property Description ",691],[":--------------- :-------------------------- ",691],["frameStartTimestamp The CPU clock time when the frame begins. ",691],["firstSubmitTimestamp The CPU clock time when Unity submits the first job to the GPU during this frame. ",691],["cpuTimePresentCalled The CPU clock time when Unity calls the Present() function for the current frame. ",691],["cpuTimeFrameComplete The CPU clock time when the GPU finishes rendering the frame and interrupts the CPU. ",691],["",691],["Record data with specific profiler counters",691],["You can read FrameTimingManager values using the ProfilerRecorder API instead of the FrameTimingManager C# API. The benefit of this is that when you use the ProfilerRecorder API, the FrameTimingManager only records values when you attach a recorder to a specific counter. This behavior enables you to control which counters collect data and so, reduce the impact that the FrameTimingManager has on performance.",691],["The following example shows how to track only the CPU Main Thread Frame Time variable with the ProfilerRecordAPI:",691],["```csharp",691],["using Unity.Profiling;",691],["using UnityEngine;",691],["public class ExampleScript : MonoBehaviour",691],["string statsText;",691],["ProfilerRecorder mainThreadTimeRecorder;",691],["void OnEnable()",691],["mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, \"CPU Main Thread Frame Time\");",691],["void OnDisable()",691],["mainThreadTimeRecorder.Dispose();",691],["void Update()",691],["var frameTime = mainThreadTimeRecorder.LastValue;",691],["// Your code logic here",691],["How the FrameTimingManager works",691],["The FrameTimingManager provides results with a set delay of four frames. This is because timing results aren’t immediately available at the end of each frame, so the FrameTimingManager waits to get CPU and GPU data for the frame.",691],["The delay doesn’t guarantee accurate timing results, because the GPU may not have any available resources to return the results, or might fail to return them correctly.",691],["The FrameTimingManger changes how it produces a FrameTimeComplete timestamp under some circumstances:",691],["If the GPU supports GPU timestamps, the GPU provides a FrameTimeComplete timestamp.",691],["If the GPU doesn’t support GPU timestamps and returns GPU Time, the FrameTimingManager calculates a value for gpuFrameTime. The value is the sum of the reported GPU Time and the FirstSubmitTimestamp values.",691],["If the GPU doesn’t support GPU timestamps and doesn’t return GPU Time,the FrameTimingManager sets the value of PresentTimestamp as the value of FrameTimeComplete.",691],["Possible inaccuracy with tile-based deferred rendering GPUs",691],["For GPUs that use tile-based deferred rendering architecture, such as Metal GPUs in Apple devices, the reported GPU Time might be larger than the reported frame time.",691],["This can happen when the GPU is under heavy load, or when the GPU pipeline is full. In these cases, the GPU might defer execution of some rendering phases. Because the FrameTimingManager measures the time between the beginning and end of the frame rendering, any gaps between phases increase the reported GPU time.",691],["In the example below, no GPU resources are available, because the GPU passes a job from the Vertex queue to the Fragment queue. The GPU’s graphics API therefore defers the execution of the next phase. When this happens, the GPU time measurement includes phase work time and any gap in between. The result is that the FrameTimingManager reports a higher GPU time measurement than expected.",691],["Platform support",691],["Property Description Supported Comment ",691],[":--------------- :------ :------- :----------------------------- ",691],["Windows DirectX 11 Yes ",691],[" DirectX 12 Yes \n",691],[" OpenGL Yes \n",691],[" Vulkan Yes \n",691],["macOS Metal Yes Might report a larger GPU time measurement than the total frame time due to the behavior of tile-based deferred rendering GPUs. ",691],["Linux OpenGL Partial Doesn't support the GPU time measurement. ",691],[" Vulkan Yes \n",691],["Android OpenGL ES Yes ",691],[" Vulkan Yes \n",691],["iOS Metal Yes Might report a larger GPU time measurement than the total frame time due to the behavior of tile-based deferred rendering GPUs. ",691],["tvOS Metal Yes Might report a larger GPU time measurement than the total frame time due to the behavior of tile-based deferred rendering GPUs. ",691],["WebGL WebGL Partial Doesn't support the GPU time measurement. ",691],["Additional resources",691],["Debug frames in Unity",692],["Debug frames to help identify rendering artefacts and other issues. Unity includes a dedicated Frame Debugger that can pause the application on a particular frame and display the list of rendering events that constitute the frame. The Frame Debugger can step through each event and display the graphical state of the scene at that point in the rendering process. You can use this to find where graphical issues arise or to just see how Unity constructs the scene from graphical elements.",692],["Render Pipeline compatibility",692],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",692],["------------------ ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",692],["Frame Debugger Yes Yes Yes Yes ",692],["3rd-party frame debugging software",692],["If you need information about a frame that Unity's Frame Debugger doesn't provide, there are 3rd-party frame debugging programs that support Unity. The Unity Editor supports native launching and frame capturing for RenderDoc. You can also build a standalone Player and attach a supported frame debugger. For information about supported frame debugging software, see Profiling tools.",692],["The Size of the Frustum at a Given Distance from the Camera",693],["A cross-section of the view frustum at a certain distance from the camera defines a rectangle in world space that frames the visible area. It is sometimes useful to calculate the size of this rectangle at a given distance, or find the distance where the rectangle is a given size. For example, if a moving camera needs to keep an object (such as the player) completely in shot at all times then it must not get so close that part of that object is cut off.",693],["The height of the frustum at a given distance (both in world units) can be obtained with the following formula:",693],["var frustumHeight = 2.0f * distance * Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);",693],["...and the process can be reversed to calculate the distance required to give a specified frustum height:",693],["var distance = frustumHeight * 0.5f / Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);",693],["It is also possible to calculate the FOV angle when the height and distance are known:",693],["var cameraFieldOfView = 2.0f * Mathf.Atan(frustumHeight * 0.5f / distance) * Mathf.Rad2Deg;",693],["Each of these calculations involves the height of the frustum but this can be obtained from the width (and vice versa) very easily:",693],["var frustumWidth = frustumHeight * camera.aspect;",693],["var frustumHeight = frustumWidth / camera.aspect;",693],["Features (detail) view",694],["In the Package Manager window, when you select a feature set from the list on the left, the pane on the right displays details of the selected feature set. The details pane presents the contents of the feature set as a kind of miniature Package Manager window:",694],["(A)** When you select a feature set from the list view, its information appears in the details pane.",694],["(B)** The display name of the feature set. ",694],["(C)** The name of the feature set.",694],["(D)** A button to Install or Remove the feature set.",694],["(E)** A link to the QuickStart guide for this feature set, containing details of how you can use this set of packages together.",694],["(F)** Feature set details tabs:",694],["Description**: A brief overview of the feature set's purpose.",694],["Packages included**: This tab displays the following information:",694],["The list of included packages.",694],["The details of the selected package. The information shown includes the name of the package, the recommended or installed version for the feature set, and its description.",694],["A shortcut to load the package in the Package Manager window (replacing the feature set in the packages list and details view). When you access details from the package directly, the Package Manager provides more information than when you access them from inside the feature set (for example, the dependencies information or any samples a package contains).",694],["Package version overrides",694],["Feature sets are collections of packages that work well together for a specific version of Unity, which means the Package Manager installs specific package versions that your feature set requires. However, there are a couple of reasons why the Package Manager might actually install a different version (override the requested version):",694],["Another package or feature set required a different version of the same package and the Package Manager resolved the package version by overriding it. In this case, the Reset button is disabled because the Package Manager determined the best version to install.",694],["You requested a different package version and it didn't conflict with the version that the feature set requires. In this case, you can click the Reset button to return to the version that the feature set requires (recommended).",694],["Note**: The Reset button displays only when the major or minor number in the package version changes. The Reset button doesn't display when the patch number in the package version changes. For more information on semantic version schemes, see Versioning.",694],["If the Package Manager installs a different version for any reason, an information message explains the reason for the change.",694],["",694],["Package Manager's feature sets added in Unity 2021.2 NewIn20212",694],["",694],["Install a feature set from the Unity registry",695],["Installing a feature set is very much like installing a package from the Unity registry, except that you look for feature sets under the Features expander, rather than the Packages expander:",695],["Open the Package Manager window and select Unity Registry from the Packages drop-down menu.",695],["Select the feature set you want to install from the list of packages. The feature set information appears in the details view.",695],["From the details view, click the Install button.",695],["When the progress bar finishes, the feature set and all its packages are ready to use.",695],["Click the QuickStart link in the top right to discover more about this feature set and how you can use its packages together.",695],["Notes:**",695],["If you need to remove the feature set, open the details view and click the Remove button.",695],["You can install multiple feature sets with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",695],["",695],["Package Manager's feature sets added in Unity 2021.2 NewIn20212",695],["",695],["GameObjects",696],["The GameObject is the most important concept in the Unity Editor.",696],["Every object in your game is a GameObject, from characters and collectible items to lights, cameras and special effects. However, a GameObject can't do anything on its own; you need to give it properties before it can become a character, an environment, or a special effect.",696],["GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the functionality.",696],["To give a GameObject the properties it needs to become a light, or a tree, or a camera, you need to add components to it. Depending on what kind of object you want to create, you add different combinations of components to a GameObject.",696],["Unity has lots of different built-in component types, and you can also make your own components using the Unity Scripting API.",696],["For example, a Light object is created by attaching a Light component to a GameObject.",696],["A solid cube object has a Mesh Filter and Mesh Renderer component, to draw the surface of the cube, and a Box Collider component to represent the object's solid volume in terms of physics.",696],["Details",696],["A GameObject always has a Transform component attached (to represent position and orientation) and it is not possible to remove this. The other components that give the object its functionality can be added from the editor's Component menu or from a script. There are also many useful pre-constructed objects (primitive shapes, Cameras, etc) available on the GameObject > 3D Object menu, see Primitive Objects.",696],["Because GameObjects are an important part of Unity, there is a lot of manual content with extensive detail about them. See the following sections for more information on using GameObjects in Unity:",696],["You can find out more about controlling GameObjects from scripts on the GameObject scripting reference page.",696],["2017-08-01 ",696],["Gameplay and Storytelling feature set",697],["Bring your project to life with the easy-to-use story creation features provided in the Gameplay and Storytelling feature set.",697],["Arrange cinematic content and audiovisual sequences with Timeline. Leverage Cinemachine to quickly set up the right dynamic camera shots. Use Visual Scripting to connect it all together with intuitive, node-based graphs.",697],["Packages",697],["The Gameplay and Storytelling feature set contains the following packages:",697],["Related forums",697],["The Game view",698],["The Game view is rendered from the Camera(s) in your application. It shows how the final, built application looks. You need to use one or more Cameras to control what the player sees when they are using your application. For more information about Cameras, see the Camera Component page.",698],["Unity lets you switch between the Game view and the Simulator view. The Simulator view shows how your built application looks on a mobile device.",698],["Play mode",698],["The Play mode lets you run your project and see how it works as it would in a built application. Use the buttons in the Toolbar to control the Play mode. In Play mode, any changes you make are temporary, and are reset when you exit Play mode. When you enter the Play mode, Unity darkens parts of the interface outside the Game view.",698],["Using the Simulator view",698],["Use the Simulator view to preview how your built application looks on a mobile device.",698],["To switch between Game and Simulator views, in the Game/Simulator tab, select the appropriate option from the Game/Simulator menu.",698],["Alternatively, you can go to Window > General, and select Game or Device Simulator from the menu to open the required window. If there are no instances of Game or Simulator windows open, by default they'll open as a floating window. However, if one of the windows is already open somewhere in the interface, then trying to open it from the menu will bring it into focus.",698],["Game view Control Bar",698],["Button Function ",698],["Game/Simulator Use this menu to enable the Game or Simulator view. ",698],["Display If you have multiple Cameras in the Scene, select the appropriate option to switch between them. By default, this is set to Display 1. You can assign Displays to Cameras in the Camera module, under Target Display. ",698],["Aspect ratio Select from the available values to test how your game looks on monitors with different aspect ratios. By default, this is set to Free Aspect. ",698],["Low Resolution Aspect Ratios Enable Low Resolution Aspect Ratios to emulate the pixel density of older displays, which reduces the resolution of the Game view when an aspect ratio is selected. It is always enabled when the Game view is on a non-Retina display. ",698],["Scale slider Scroll right to zoom in and examine areas of the Game screen in more detail. This slider lets you zoom out to see the entire screen where the device resolution is higher than the Game view window size. You can also use the scroll wheel and middle mouse button to do this while the application is stopped or paused. ",698],["Play Mode behavior This section describes the play mode behavior based on your selection below. ",698],["Focused Enable Focused to shift focus on the selected Game view while the Editor is in Play mode. Only one Game view can be in focus when you enter the Play mode. Using Maximized mode implies focus on the Maximized Game view. Enabling Focused on a Game view disables it on other Game views. ",698],["VSync (Game view only) Enable VSync (Game view only) to allow syncing, which is useful when recording a video, for example. Unity attempts to render the Game view at the monitor refresh rate, though this is not guaranteed. When this option is enabled, it is still useful to maximize the Game view in Play mode to hide other views and reduce the number of views that Unity renders. ",698],["Enter Play Mode: Choose from the options below to determine the settings for the Editor when it enters the Play mode. ",698],["Normally Select this to view the Game view without forcing focus or maximizing any views to full screen. ",698],["Maximized When this option is selected, Unity runs the Play mode with the Game view maximized to 100% of the Editor window. ",698],["Mute audio Click to enable: use this to mute any in-application audio when you enter the Play mode. ",698],["Stats Click this to show or hide the Statistics overlay, which contains Rendering Statistics about your application's audio and graphics. The overlay lets you monitor the performance of your application while in Play mode. ",698],["Gizmos Click this to show or hide the visibility of Gizmos. To only show certain types of Gizmos in the Play mode, from the Gizmos menu, only enable the Gizmo types you want to see. ",698],["Gizmos menu",698],["The Gizmos menu contains options for how Unity displays gizmos for GameObjects and other items in the Scene view and Game view. This menu is available in both the Scene view and the Game view. For more information see Gizmos Menu.",698],["Advanced options",698],["Right-click the Game tab to display advanced Game view options.",698],["Warn if No Cameras Rendering: This option is enabled by default. It causes Unity to display a warning if no Cameras are rendering to the screen; e.g., for diagnosing problems such as accidentally deleting or disabling a Camera. Leave this enabled unless you are intentionally not using Cameras to render your application.",698],["Clear Every Frame in Edit Mode: This option is enabled by default. It causes Unity to clear the Game view from every frame when your application is not playing. This prevents smearing effects while you are configuring your application. Leave this enabled unless you are depending on the previous frame’s contents when not in the Play mode.",698],["Low Resolution Aspect Ratios Game view option available on Windows from 2018.2 NewIn20182",698],["Using meshes with C# scripts",699],["The Mesh class gives script access to an object's mesh geometry, allowing meshes to be created or modified at runtime. This technique is useful for graphical effects (eg, stretching or squashing an object) but can also be useful in level design and optimisation. The following sections pages feature an exploration of the API and an example.",699],["Using the Mesh Class.",699],["Importing a model with non-humanoid (generic) animations",700],["This page contains guidance on importing a model for use with Unity's Animation System. For information on creating a model for use with the Animation System, see Creating models for animation.",700],["The Animation System works with two types of models:",700],["A Humanoid model is a specific structure, containing at least 15 bones organized in a way that loosely conforms to an actual human skeleton. For information on importing this type of model, see Importing a model with humanoid animations.",700],["A Generic model is everything else. This might be anything from a teakettle to a dragon. This page contains guidance on importing this type of model.",700],["For general importing guidance that is applicable to all types of models, see Importing a model.",700],["Overview",700],["When Unity imports a Generic model, you must tell it which bone is the Root node. This effectively defines the model's center of mass.",700],["Since there is only one bone to map, Generic setups do not use the Humanoid Avatar window. As a result, preparing to import your non-Humanoid model file into Unity requires fewer steps than for Humanoid models.",700],["Set up your Rig as Generic.",700],["You can optionally limit the animation that gets imported on certain bones by defining an Avatar Mask.",700],["From the Animation tab, enable the Import Animation option and then set the other Asset-specific properties, .",700],["If the file consists of multiple animations or actions, you can define specific frame ranges as Animation Clips.",700],["For each Animation Clip defined in the file, you can:",700],["Add curves to the clip in order to animate the timings of other items",700],["Add events to the clip in order to trigger certain actions in time with the animation",700],["Discard part of the animation similar to using a runtime Avatar Mask but applied at import time",700],["Select a different Root Motion Node to drive the action from",700],["To save your changes, click the Apply button at the bottom of the Import Settings window or Revert to discard your changes.",700],["",700],["Setting up the Rig",700],["From the Rig tab of the Inspector window, set the Avatar (animation) type to Generic. By default, the Avatar Definition property is set to Create From This Model and the Root node option is set to None.",700],["In some cases, you can change the Avatar Definition option to Copy From Other Avatar to use an Avatar you already defined for another Model file. For example, if you create a Mesh (skin) in your 3D modeling application with several distinct animations, you can export the Mesh to one FBX file, and each animation to its own FBX file. When you import these files into Unity, you only need to create a single Avatar for the first file you import (usually the Mesh). As long as all the files use the same bone structure, you can re-use that Avatar for the rest of the files (for example, all the animations).",700],["If you keep the Create From This Model option, you must then choose a bone from the Root node property.",700],["If you decide to change the Avatar Definition option to Copy From Other Avatar, you need to specify which Avatar you want to use by setting the Source property.",700],["You can also change the maximum number of bones that can influence a given vertex with the Skin Weights property. By default, this property limits influence to four bones, but you can specify more or fewer.",700],["When you click the Apply button, Unity creates a Generic Avatar and adds an Avatar sub-Asset under the Model Asset, which you can find in the Project view.",700],["Note:** The Generic Avatar is not the same thing as the Humanoid Avatar, but it does appear in the Project view, and it does hold the Root node mapping. However, if you click on the Avatar icon in the Project view to display its properties in the Inspector, only its name appears and there is no Configure Avatar button.",700],["",700],["Creating an Avatar Mask",700],["You can apply masking to animation clips either during import time, or at runtime. Masking during import time is preferable, because it allows the discarded animation data to be omitted from your build, making the files smaller and therefore using less memory. It also makes for faster processing because there is less animation data to be blended at runtime. In some cases, import masking may not be suitable for your purposes. In that case, you can apply a mask at runtime by creating an Avatar Mask Asset, and using it in the layer settings of your Animator Controller.",700],["To create an empty Avatar Mask Asset, you can either:",700],["Choose Create > Avatar Mask from the Assets menu.",700],["Click the Model object you want to define the mask on in the Project view, and then right-click and choose Create > Avatar Mask.",700],["The new Asset appears in the Project view:",700],["You can now choose which bones to include or exclude from a Transform hierarchy and then add the mask to either an Animation Layer or add a reference to it under the Mask section of the Animation tab.",700],["Installing Unity",701],["The Hub is the primary way to install the Unity Editor, create projects, and manage your Unity experience. It provides a central location to manage your Editor installations, Accounts and Licenses, and Projects. For more information, see Installing Unity using the Hub.",701],["Other installation options",701],["You can also install the Unity Editor in the following ways:",701],["You can use the command line to install the Editor. If you subsequently choose to install the Hub, you can add it to the Hub at that time. For more information, see Installing Unity from the command line.",701],["You can install Unity offline without using the Hub. This allows you to download all the necessary files for installing Unity, and generate a script to install the Editor on computers without internet access. For more information, see Installing Unity offline without the Hub.",701],["Lightmapping using Enlighten Baked Global Illumination",702],["The Enlighten Baked Global Illumination lightmapping backend is deprecated and no longer visible in the user interface by default since 2022.2. It is no longer present from 2023.1 onwards.",702],["Enlighten Baked Global Illumination relies on precomputed real-time global illumination data to generate indirect lighting. This can be an advantage, because you can produce new lightmaps fairly quickly after changing the scene's lighting. However, Enlighten Baked Global Illumination imposes more UV layout limitations than the Progressive Lightmapper.",702],["Render pipeline support",702],["See render pipeline feature comparison for more information about support for Enlighten Baked Global Illumination across render pipelines.",702],["Using the Enlighten lightmapper",702],["To make the Enlighten Baked Global Illumination option visible in the user interface, open Edit > Project Settings > Editor. In the Graphics section of the Editor menu, activate the Enable Enlighten for Baked GI (Legacy) setting.",702],["After you make Enlighten Baked Global Illumination visible in the user interface, you can enable it in the Lighting window. Go to Window > Rendering > Lighting, navigate to Lightmapping Settings in the Lighting window, and set Lightmapper to Enlighten.",702],["You can perform many of the functions available in this window via scripts, using the LightingSettings API.",702],["The following properties are specific to Enlighten. To expose them, select Enlighten in the Lightmapper control.",702],["Property: Function: ",702],["Final Gather Calculates the final global illumination light bounce of at the same resolution as the baked lightmap. This improves visual quality, but requires additional time to bake the lighting. If Final Gather is enabled, it exposes the settings Ray Count and Denoising. ",702],["Indirect Resolution Use this to specify the number of samples the lightmapper uses for indirect lighting calculations. Higher values can improve the quality of the lightmaps, but increase the time it takes to bake them. ",702],["Ray Count Specifies the number of rays the lightmapper emits for every final gather point. ",702],["Denoising Applies a denoising filter to the final gather output. ",702],["Disabling the default environment contribution",702],["Unity automatically generates an ambient probe and a default Reflection Probe to ensure that environment lighting affects your scene and the GameObjects in it by default.",702],["To disable the environment contribution in the lighting result for a scene or GameObject that does not have manually created light maps and Light Probes, disable the default Reflection Probe and the ambient probe. For more information, see Disabling the SkyManager.",702],["GI cache",703],["The GI cache is an internal data cache that the Unity Editor uses to store intermediate files when precomputing lighting data for Baked Global Illumination and Enlighten Realtime Global Illumination. By storing this data in a cache, Unity can speed up subsequent precomputations.",703],["All Unity projects on the computer share the cache so that projects with similar content and the same lightmapping backend can use the same cached files. You can manage the size, location, and compression of the cache using the GI Cache preferences. For more information, see the Preferences documentation.",703],["Using the GI Cache",703],["The Unity Editor uses the GI Cache when it precomputes lighting data. To enable the GI Cache, open the Lighting window (Window > Lighting) and enable the Auto option. This makes lighting data precomputation automatic and stores output data in the GI Cache. If you prefer to store lighting data in a Lighting Data Asset instead, disable the Auto option. However, even when you disable Auto and store precomputed data in a Lighting Data Asset, the Editor stores intermediate results in the GI Cache.",703],["In the Lighting window, you can clear the baked data in a Scene (disable the Auto option and choose Clear Baked Data from the Build button drop-down menu). This only removes the data in the scene, it does not clear the GI Cache, because this would increase bake time afterwards. To clean the GICache, go to Preferences documentation. Cleaning the cache should only be done as a last resort and any issues forcing you do do so, should be reported via the bug reporter built into the Editor.",703],["You can copy the GiCache folder among different machines. This can make your lighting build faster, because the files are fetched from the GiCache folder instead of being recomputed.",703],["If you try to bake with more than one instance of the Editor running on the same computer, the Editor displays the following warning message: \"The GI Cache is using increasing amounts of space on your hard drive to support concurrent lightmap generation. To prevent failed bakes, close all other instances of the Unity Editor.",703],["Scene View Draw Modes for lighting",704],["The Scene view has a number of Draw Modes to help you understand and debug the lighting in your Scene.",704],["Use the Scene view control bar to select your desired Draw Mode.",704],["Shading Mode",704],["Shaded",704],["The default Shading Mode is Shaded. This shows the Scene fully lit according to the current lighting setup.",704],["Miscellaneous",704],["Shadow Cascades",704],["Uses color to show the parts of the Scene using different cascade levels. Use this to help you get the shadow distance, cascade count and cascade split ratios just right. Note that this visualization use the Scene view far plane, which is usually bigger than the shadow distance, so you might need to lower the Shadow distance if you want to match the in-game behavior of the Camera with a small far plane.",704],["Global Illumination",704],["Systems",704],["The precompute stage will automatically subdivide the scene into systems (i.e. groups of objects sharing the same real-time lightmap) based on proximity and Lightmap Parameters. This is done to allow multithreading and optimizations when updating indirect lighting. This visualization shows the systems with different colors.",704],["Clustering",704],["Enlighten calculates visibility information for geometry with Contribute GI enabled. It does this by making use of clusters generated during the Clustering step. This view displays those clusters, which should be larger than lightmap texels. The Cluster Resolution parameter in Lightmap Parameters determines this ratio. Converting geometry to clusters can be quite memory intensive if the scale of the geometry isn't correct. Large scenes can generate more clusters than Unity can store in your system's memory.",704],["If you are seeing high memory usage or long baking times it could be because the static geometry in your scene splits into many more clusters than necessary. The clustering scene view mode can help you identify the geometry in need of UVs or Indirect Resolution adjustments.",704],["Both Enlighten Baked Global Illumination (deprecated and no longer visible in the user interface by default) and Enlighten Realtime Global Illumination depend on these calculations to compute indirect lighting.",704],["See Lightmapping using Enlighten Baked Global Illumination for information about how to make Enlighten visible in the user interface as an option for light baking.",704],["Lit Clustering",704],["This is the Clustering view with Enlighten Realtime Global Illumination applied.",704],["UV Charts",704],["This shows the optimized UV layout used when calculating Enlighten Realtime Global Illumination. It is automatically generated during the precompute process. It is available as soon as the Instance precompute stage is completed. The UV Charts scene view mode can help you identify the geometry that needs to have UVs or scale adjusted (use the Resolution parameter in Lightmap Parameters to change scale). This view is also useful when adjusting the Indirect Resolution. Each chart has a different color.",704],["Contributors/Receivers",704],["This Draw Mode draws Mesh Renderers and Terrain in different colors based on whether ContributeGI is enabled in their Static Editor Flags, and the value of their ReceiveGI property.",704],["In the default colors:",704],["Yellow means that ContributeGI is not enabled in the GameObject's Static Editor Flags.",704],["Blue means that ContributeGI is enabled in the GameObject's Static Editor Flags, and the Renderer's ReceiveGI property is set to Lightmaps.",704],["Red means that ContributeGI is enabled in the GameObject's Static Editor Flags, and the Renderer's ReceiveGI property is set to Light Probes.",704],["You can customize the default colors in the Preferences window.",704],["Realtime Global Illumination",704],["Albedo",704],["Enabling Show lightmap resolution overlay in the Editor Manager settings indicates the albedo that lightmappers use to calculate Baked Global Illumination results. Unity calculates the albedo from the material information which can be customized fully by adding a custom meta pass.",704],["Emissive",704],["Shows the emission used when calculating the GI. It is generated from the material information and can be fully customized by adding a custom meta pass.",704],["Indirect",704],["The Indirect view displays indirect lighting as captured in the lightmaps that Enlighten Baked Global Illumination generates. Irradiance is a radiometric unit that describes how much power (radiant flux) a surface receives per unit area. Unity uses the irradiance texture to store indirect light data at runtime. If you disable Enlighten Baked Global Illumination, the Indirect view mode isn’t selectable.",704],["In the Indirect view mode, you can use a Lightmap Exposure control to help you assess HDR lightmaps more effectively.",704],["Default Exposure: The lightmap exposure slider at the default value of 0.",704],["Altered Exposure: Here the lightmap exposure slider is at a value of -1.",704],["Directionality",704],["This view shows the most dominant light direction vector. Please refer to the Directional Lightmapping page for more info.",704],["Baked Global Illumination",704],["Baked Lightmap",704],["The Baked Lightmap view displays baked lightmaps applied to the Scene geometry. In this mode, you can use a Lightmap Exposure control to help you assess HDR lightmaps more effectively.",704],["Scenes with high lighting intensities might require you to use exposure compensation to bring the Baked Lightmap Scene View into an easily readable range.",704],["Default Exposure: The lightmap exposure slider at the default value of 0.",704],["Altered Exposure: Here the lightmap exposure slider is at a value of 4.",704],["Shadowmask",704],["This displays the shadowmask texture occlusion values. It colors the mesh and the light gizmo in the same color so one can verify that the light occlusion factors have been baked as expected.",704],["Texel Validity",704],["This mode shows which texels are marked invalid because they mostly \"see\" backfaces. During lightmap baking, Unity emits rays from each texel. If a significant portion of a texel's rays are hitting backface geometry, this texel is marked invalid. This is because the texel should not be able to see the backfaces in the first place. Unity handles this by replacing invalid texels with valid neighbors. You can adjust this behaviour using the Backface Tolerance parameter (LightmapParameters > General GI).",704],["This view is not compatible with Enlighten Baked Global Illumination.",704],["UV Overlap",704],["If lightmap charts are too close together in UV space, the pixel values inside them might bleed into one another when the lightmap is sampled by the GPU. This can lead to unexpected artifacts. This mode allows you to identify texels that are too close to texels in other charts. This is useful when you want to troubleshoot your UV issues.",704],["This view is not compatible with Enlighten Baked Global Illumination.",704],["Light Overlap",704],["This mode allows you to see if all static lights have been baked to the shadowmask. If an area of the level is lit by more than four static lights, the exceeding lights will fallback to fully baked and be displayed in red. Relevant for this calculation is not the actual lit surface, but the intersection of the light sources’ volumes. So even though in the screenshot below it looks as if the colored spots on the mesh do not overlap, the cones of the four spot lights end up overlapping below the ground plane along with the directional light.",704],["[GI Contributors/Receivers Draw Mode] added in 2020.1 NewIn20201",704],["Gizmos and Handles",705],["The Gizmos and Handles classes allows you to draw lines and shapes in the Scene view and Game view, as well as interactive handles and controls. These two classes together provide a way for you to extend what is shown in these views and build interactive tools to edit your project in any way you like. For example, rather than entering numbers in the inspector, you could create a draggable circle radius gizmo around a non-player character in a game, which represents the area within which they can hear or see the player.",705],["This page provides a simple overview of the Gizmos and Handles classes. For full documentation and an exhaustive reference of every member of the Gizmos and Handles classes, see the script reference pages for Gizmos and Handles.",705],["Gizmos",705],["The Gizmos class allows you to draw lines, spheres, cubes, icons, textures and meshes into the Scene view to use as debugging, set-up aids, or tools while developing your project.",705],["For example, to draw a 10 unit yellow wire cube around a GameObject, you would use this code:",705],["using UnityEngine;",705],["public class GizmosExample : MonoBehaviour",705],["void OnDrawGizmosSelected()",705],["// Draw a yellow cube at the transform position",705],["Gizmos.color = Color.yellow;",705],["Gizmos.DrawWireCube(transform.position, new Vector3(10, 10, 10));",705],["And here is how that cube looks when placed on a Directional Light GameObject.",705],["See the Gizmos script reference page for the full documentation on how to use Gizmos.",705],["Handles",705],["Handles are similar to Gizmos, but provide more functionality in terms of interactivity and manipulation. The 3D controls that Unity itself provides to manipulate items in the Scene view are a combination of Gizmos and Handles. There are a number of built-in Handle GUIs, such as the familiar tools to position, scale and rotate an object via the Transform component. However, you can define your own Handle GUIs to use with custom component editors. Such GUIs can be a very useful way to edit procedurally-generated Scene content, \"invisible\" items and groups of related objects, such as waypoints and location markers.",705],["For example, here is how you could create an arc area with an arrowhead handle, allowing you to modify a \"shield area\" in the scene view:",705],["using UnityEditor;",705],["using UnityEngine;",705],["using System.Collections;",705],["//this class should exist somewhere in your project",705],["public class WireArcExample : MonoBehaviour",705],["public float shieldArea;",705],["// Create a 180 degrees wire arc with a ScaleValueHandle attached to the disc",705],["// that lets you modify the \"shieldArea\" value in the WireArcExample",705],["[CustomEditor(typeof(WireArcExample))]",705],["public class DrawWireArc : Editor",705],["void OnSceneGUI()",705],["Handles.color = Color.red;",705],["WireArcExample myObj = (WireArcExample)target;",705],["Handles.DrawWireArc(myObj.transform.position, myObj.transform.up, -myObj.transform.right, 180, myObj.shieldArea);",705],["myObj.shieldArea = (float)Handles.ScaleValueHandle(myObj.shieldArea, myObj.transform.position + myObj.transform.forward * myObj.shieldArea, myObj.transform.rotation, 1, Handles.ConeHandleCap, 1);",705],["See the Handles script reference page for the full documentation on how to use Handles.",705],["Gizmos menu",706],["The Scene view and the Game view both have a Gizmos menu. Click the Gizmos button in the toolbar of the Scene view or the Game view to access the Gizmos menu.",706],["Property Function ",706],["3D Icons The 3D Icons checkbox controls whether component icons (such as those for Lights and Cameras) are drawn by the Editor in 3D in the Scene view.When the 3D Icons checkbox is ticked, component icons are scaled by the Editor according to their distance from the Camera, and obscured by GameObjects in the Scene. Use the slider to control their apparent overall size. When the 3D Icons checkbox is not ticked, component icons are drawn at a fixed size, and are always drawn on top of any GameObjects in the Scene view.See Gizmos and Icons, below, for images and further information. ",706],["Fade Gizmos Fade out and stop rendering gizmos that are small on screen. ",706],["Selection Outline Check Selection Outline to display selected GameObjects with a colored outline, and their children with a different colored outline. By default, Unity highlights the selected GameObject in orange, and child GameObjects in blue.NOTE: This option is only available in the Scene view Gizmos menu; you cannot enable it in the Game view Gizmos menu. See Selection Outline and Selection Wire, below, for images and further information. ",706],["Selection Wire Check Selection Wire to show the selected GameObjects with their wireframe Mesh visible. To change the colour of the Selection Wire, go to Edit > Preferences (macOS: Unity > Settings) in the main menu, select Colors, and alter the Selected Wireframe setting.This option is only available in the Scene view Gizmos menu; you cannot enable it in the Game view Gizmos menu.See Selection Outline and Selection Wire, below, for images and further information. ",706],["Recently Changed Controls the visibility of the icons and gizmos for components and scripts that you modified recently.This section appears the first time you change one or more items, and updates after subsequent changes.For more information, see Built-in components, scripts, and recently changed items, below. ",706],["Scripts Controls the visibility of the icons and gizmos for scripts in the Scene.This section appears only when your Scene uses scripts that meet specific criteria.See Built-in components, scripts, and recently changed items, below, for further information. ",706],["Built-in Components Controls the visibility of the icons and gizmos for all component types that have an icon or gizmo.See Built-in components, scripts, and recently changed items, below, for further information. ",706],["",706],["Gizmos and Icons",706],["Gizmos",706],["Gizmos are graphics associated with GameObjects in the Scene. Some Gizmos are only drawn when the GameObject is selected, while other Gizmos are drawn by the Editor regardless of which GameObjects are selected. They are usually wireframes, drawn with code rather than bitmap graphics, and can be interactive. The Camera Gizmo and Light direction Gizmo (shown below) are both examples of built-in Gizmos; you can also create your own Gizmos using script. See documentation on Understanding Frustum for more information about the Camera.",706],["Some Gizmos are passive graphical overlays, shown for reference (such as the Light direction Gizmo, which shows the direction of the light). Other Gizmos are interactive, such as the AudioSource spherical range Gizmo, which you can click and drag to adjust the maximum range of the AudioSource.",706],["The Move, Scale, Rotate and Transform tools are also interactive Gizmos. See documentation on Positioning GameObjects to learn more about these tools.",706],["See the Script Reference page for the OnDrawGizmos function for further information about implementing custom Gizmos in your scripts.",706],["Icons",706],["You can display icons in the Game view or Scene view. They are flat, billboard-style overlays which you can use to clearly indicate a GameObject’s position while you work on your game. The Camera icon and Light icon are examples of built-in icons; you can also assign your own to GameObjects or individual scripts (see documentation on Assigning Icons to learn how to do this).",706],["",706],["Selection Outline and Selection Wire",706],["Selection Outline",706],["When Selection Outline is enabled, an outline appears around selected GameObjects and their child GameObjects. By default, Unity outlines selected GameObjects in orange, and child GameObjects in blue. You can change these colors in the Unity preferences (see Selection Colors, below).",706],["When you select a GameObject, Unity outlines all of its child GameObjects (and their child GameObjects, and so on), but does not outline parent GameObjects (or their parent GameObjects, and so on).",706],["If selected GameObjects extend beyond the edges of the Scene view, the selection outline runs along the edge of the window:",706],["Selection Wire",706],["When Selection Wire is enabled, then when you select a GameObject in the Scene view or Hierarchy window, the wireframe Mesh for that GameObject is made visible in the Scene view:",706],["",706],["Selection colors",706],["You can set custom colors for selection wireframes.",706],["Go to Unity > Preferences (macOS) or Edit > Preferences (Windows) to open the Preferences editor.",706],["On the colors tab, change one or more of the following colors:",706],["Selected Children Outline: outline color for selected GameObjects’ children.",706],["Selected Outline: outline color for selected GameObjects.",706],["Wireframe Selected: outline color for selected GameObjects’ wireframes.",706],["",706],["Built-in components, scripts, and recently changed items",706],["Use the list in the Gizmos menu to control the visibility of icons and gizmos for various components. The list is divided into sections:",706],["Recently Changed",706],["The Recently Changed section controls the visibility of the icons and gizmos for items that you’ve modified recently. It appears the first time you change one or more items. Unity updates the list after subsequent changes.",706],["Scripts",706],["The Scripts section controls the visibility of the icons and gizmos for scripts that:",706],["Have an icon assigned to them (see documentation on Assigning Icons).",706],["Implement the OnDrawGizmos function.",706],["Implement the OnDrawGizmosSelected function.",706],["This section appears when your Scene contains one or more scripts that meet the above criteria.",706],["Built-in Components",706],["The Built-in Components section controls the visibility of the icons and gizmos for all component types that have an icon or gizmo.",706],["Built-in component types that do not have an icon or gizmo shown in the Scene view (for example, Rigidbody) are not listed here.",706],["Toggling icon visibility",706],["The icon column shows or hides the icons for each component type. Full-color icons are displayed in the main Scene view window, faded icons are not.",706],["To toggle an icon’s visibility in the Scene view, click any icon in the icon column.",706],["Note:** If an item in the list has a gizmo but no icon, the icon column for that item is empty.",706],["Changing script icons",706],["Scripts with custom icons show a small drop-down menu arrow in the icon column. To change a custom icon, click the arrow to open the Select Icon menu.",706],["Toggling gizmo visibility",706],["To control whether the Editor draws gizmo graphics for a particular component type (for example, a Collider’s wireframe gizmo or a Camera’s view frustum gizmo) or script, use the checkboxes in the Gizmo column.",706],["When a checkbox is checked, the Editor draws gizmos for that component type.",706],["When a checkbox is cleared, the Editor does not draw gizmos for that component type.",706],["Note:** If an item in the list has an icon but no gizmo, the Gizmo column for that item is empty.",706],["To toggle gizmo visibility for an entire section (all Built-in Components, all Scripts, and so on), use the checkboxes next to the section names.",706],["The Built-in Components checkbox toggles gizmo visibility for every type of component listed in that section",706],["When the checkbox is toggled on, gizmo visibility is toggled on for one or more item types in the section.",706],["Selection outline for child GameObjects added in [2018.3] (https://docs.unity3d.com/2018.3/Documentation/Manual/30_search.html?q=newin20183) NewIn20183",706],["Gizmo menu option to toggle Gizmo visibility for all components in a section added in [2019.1] (https://docs.unity3d.com/2019.1/Documentation/Manual/30_search.html?q=newin20191) NewIn20191",706],["Glossary",707],["",707],["2D terms",707],["2D Object*:",707],["A 2D GameObject such as a tilemap or sprite. More info",707],["dimetric projection:",707],["A form of parallel projection where the dimensions of a 3D object are projected onto a 2D plane, and only two of the three angles between the axes are equal to each other. This form of projection is commonly used in isometric video games to simulate three-dimensional depth. More info",707],["isometric projection:",707],["A form of parallel projection where the dimensions of a 3D object are projected onto a 2D plane, and the angles between all three axes are equal to each other. This form of projection is commonly used in isometric video games to simulate three-dimensional depth. More info",707],["sprite atlas*:",707],["A texture that is composed of several smaller textures. Also referred to as a texture atlas, image sprite, sprite sheet or packed texture. More info",707],["",707],["",707],["2D physics terms",707],["Body Type*:",707],["Defines a fixed behavior for a 2D Rigidbody. Can be Dynamic (the body moves under simulation and is affected by forces like gravity), Kinematic (the body moves under simulation, but and isn't affected by forces like gravity) or Static (the body doesn't move under simulation). More info",707],["Fixed Joint 2D*:",707],["A 2D joint type which is completely constrained, allowing two objects to be held together. Implemented as a spring so some small motion may still occur. More info",707],["Physics Material 2D*:",707],["Use to adjust the friction and bounce that occurs between 2D physics objects when they collide More info",707],["Relative Joint 2D*:",707],["A 2D joint that allows two game objects controlled by Rigidbody physics to maintain in a position based on each other's location. Use this joint to keep two objects offset from each other, at a position and angle you decide More info",707],["",707],["",707],["AI terms",707],["NavMesh*:",707],["A mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation. More info",707],["",707],["",707],["Analytics terms",707],["Active Users:",707],["Players who recently played your game. Unity Analytics defines an active player as someone who has played within the last 90 calendar days. More info",707],["Ad ARP*:",707],["(Average Revenue Per User) Average Unity Ads revenue per player. More info",707],["Ad Revenue:",707],["Total Unity Ads revenue. More info",707],["Ad Starts:",707],["The number of video ads that started playing. More info",707],["Ads per DAU*:",707],["The number of ads started per active player on a given day. More info",707],["Age 14 and Under:",707],["By default, Unity does not breakout analytics data for players under the age of 14. See COPPA Compliance. More info",707],["All Spenders:",707],["Players who have made any verified or unverified in-app purchases in their lifetime. More info",707],["Analytics*:",707],["Abbreviation of Unity Analytics",707],["Analytics Events*:",707],["Events dispatched to the Analytics Service by instances of your applications. Analytics events contain the data that is processed and aggregated to provide insights into player behavior. More info",707],["Application version:",707],["Player segments based on application version or bundleid. More info",707],["ARPDAU*:",707],["(Average Revenue Per Daily Active User) The average revenue per user who played on a given day. More info",707],["ARPPU*:",707],["(Average Revenue Per Paying User) Average verified IAP revenue per user who completed a verified IAP transaction. More info",707],["Churn:",707],["The rate at which users are leaving your game during a specified period. Your user churn is important in estimating the lifetime value of your users. Mathematically, churn is the complement of retention (in other words: Churn + Retention = 100%). More info",707],["Cohort:",707],["A group of players with at least one similar characteristic. You can define and analyze different cohorts of your user base with segments. More info",707],["Conversion Rate:",707],["The percentage of users who complete an action or sequence of actions. More info",707],["COPPA*:",707],["(Children's Online Privacy Protection Act) COPPA is a US law that applies to apps that collect personal information and are targeted to children under the age of 14. More info",707],["Core Events:",707],["Core events are the basic events dispatched by the Unity Analytics code in your game. These events, and the analytics based on them, become available simply by turning on Unity Analytics for a project. Core events include: app running, app start, and device info. More info",707],["CTR*:",707],["(Click Through Rate) The percentage of players who click a link in an ad displayed in your game. More info",707],["Custom Events:",707],["Custom events are freeform events that you can dispatch when an appropriate standard event is not available. Custom events can have any name and up to ten parameters. Use standard events in preference to custom events where possible. More info",707],["Data Explorer*:",707],["A Unity Analytics Dashboard page that allows you to build, view and export reports on your Analytics metrics and events. You can also see how metrics and custom events change over time. More info",707],["DAU*:",707],["(Daily Active Users) The number of different players who started a session on a given day. DAU includes both new and returning players. More info",707],["DAU per MAU*:",707],["(DAU/MAU) The percentage of monthly active users who play on a given day. Also known as Sticky Factor in the analytics and game industries, this metric is often used as one estimate of player engagement. More info",707],["Day 1 Retention*:",707],["The percentage of players who returned to your game one day after playing the first time. More info",707],["Day 30 Retention*:",707],["The percentage of players who returned to your game thirty days after playing the first time. More info",707],["Day 7 Retention*:",707],["The percentage of players who returned to your game seven days after playing the first time. More info",707],["Demographics:",707],["Player segments based on reported demographics. More info",707],["Dolphins:",707],["Players who have spent between $5 and $19.99. More info",707],["eCPM*:",707],["(estimated Cost Per Mille) The estimated revenue for 1000 ad impressions for your app. More info",707],["Engagement:",707],["Engagement is a broad measure of how players enjoy, or are otherwise invested, in your game. Impossible to measure directly, the following metrics are frequently used to estimate engagement: Retention, DAU, MAU, DAU/MAU, number of sessions, and session length. More info",707],["F2P*:",707],["(Free to Play) A business model that offers users free access to a fully functional game and a significant portion of app content. Monetization strategies for these titles generally include microtransactions that allow users to access premium features and virtual goods. More info",707],["Fill Rate:",707],["The rate at which ads are available when you request one. More info",707],["Funnel:",707],["In Analytics, a funnel is a linear sequence of standard or custom events that you expect a player to complete in order. More info",707],["Geography:",707],["Player segments based on country. More info",707],["Heatmaps*:",707],["Heatmaps are a spatial visualization of analytics data. More info",707],["IAP:",707],["See In App Purchase",707],["In App Purchase*:",707],["Revenue from \"micro-transactions\" within a game. More info",707],["Impressions:",707],["The number of times ads are seen in your game. An impression is counted even if the ad is not completed. More info",707],["LTV*:",707],["(Lifetime Value) The estimated value of an average player over their lifetime with your application or game. More info",707],["MAU*:",707],["(Monthly Active Users) The number of players who started a session within the last 30 days. More info",707],["Minnow:",707],["A player who has spent less than $5 in their lifetime. More info",707],["Never Monetized:",707],["Players who have never spent real currency. More info",707],["New Users:",707],["Users who played your game for the first time. More info",707],["Number of Unverified Transactions*:",707],["The total number of IAP transactions, whether or not they have been verified. More info",707],["Number of Users:",707],["The cumulative number of unique players over the last 90 days. Users who have not played in more than 90 days are removed from the count. More info",707],["Number of Verified Transactions:",707],["IAP transactions that have been verified through the appropriate app store. IAP verification is currently supported by the Apple App Store and the Google Play Store. More info",707],["Percentage of Population:",707],["Your player population as a percentage. Typically only useful when combined with a segment. Calculated as the percentage of the Number of Users metric who are members of a specified segment. More info",707],["Remote Settings:",707],["Remote settings are game variables that you can set remotely on your Analytics Dashboard. More info",707],["Segment:",707],["Segments are subsets of your player base, split apart by key differentiators. Viewing metrics and events by segment can reveal differences in-game behavior between different groups. More info",707],["Session:",707],["A single play or usage period. A new session is counted when a player launches your game or brings a suspended game to the foreground after 30 minutes of inactivity. More info",707],["Sessions per User:",707],["The average number of sessions per person playing on a given day. Also known as Average Number of Sessions per DAU. More info",707],["Standard event*:",707],["Standard events are application-specific events that you dispatch in response to important player actions or milestones. Standard events have standardized names and defined parameter lists. More info",707],["Sticky Factor*:",707],["An estimate of how compelling a game is to its players. A high \"sticky factor\" means that players stick with an app over time. More info",707],["Total Daily Playing Time*:",707],["The cumulative playing time of all people playing on a given day. More info",707],["Total Daily Playing Time per Active User*:",707],["The average playing time of people playing on a given day. More info",707],["Total IAP Revenue*:",707],["The total IAP revenue, including revenue from both verified and unverified transactions. More info",707],["Total Sessions Today:",707],["The total number of sessions by all people playing on a given day. Also known as Total Sessions. More info",707],["Total Verified Revenue:",707],["Revenue from Unity Ads and verified IAP transactions. IAP verification is currently supported by the Apple App Store and the Google Play Store. More info",707],["Unity Analytics*:",707],["A data platform that provides analytics for your Unity game. More info",707],["Unity IAP*:",707],["Abbreviation of Unity In App Purchase",707],["Universal Windows Platform*:",707],["An IAP feature that supports Microsoft's In App Purchase simulator, which allows you to test IAP purchase flows on devices before publishing your application. More info",707],["Unknown Gender:",707],["Players to whom you have assigned Gender.Unknown. (Players whose gender has not been reported at all are not included in this segment.) More info",707],["Unverified IAP Revenue*:",707],["IAP revenue from sources that do not support verification and from transactions that failed verification. Transactions can fail verification because they are fraudulent or because of missing or malformed information. More info",707],["Verified IAP Revenue*:",707],["Revenue from verified IAP transactions. IAP verification is currently supported by the Apple App Store and the Google Play Store. More info",707],["Verified Paying Users:",707],["Players who made verified IAP purchases. IAP verification is currently supported by the Apple App Store and the Google Play Store. More info",707],["Whales:",707],["Players who have spent at least $20 in their lifetime. More info",707],["",707],["",707],["Animation terms",707],["1D Blend Tree*:",707],["A Blend Tree for 1D blending, which blends motion according to a single Animation Parameter. More info",707],["2D Blend Tree*:",707],["A Blend Tree for 2D blending, which blends motion according to two Animation Parameters. More info",707],["3D Object*:",707],["A 3D GameObject such as a cube, terrain or ragdoll. More info",707],["Animation Blend Shape*:",707],["Enables you to make an object change its form by blending between two separate meshes. More info",707],["Animation Blend Tree*:",707],["Used for continuous blending between similar Animation Clips based on float Animation Parameters. More info",707],["Animation Clip*:",707],["Animation data that can be used for animated characters or simple animations. It is a simple \"unit\" piece of motion, such as (one specific instance of) \"Idle\", \"Walk\" or \"Run\". More info",707],["Animation Clip Node*:",707],["A node in a Blend Tree graph that contains an animation clip, such as a run or walk animation. More info",707],["animation compression*:",707],["The method of compressing animation data to significantly reduce file sizes without causing a noticeable reduction in motion quality. Animation compression is a trade off between saving on memory and image quality. More info",707],["Animation Curves*:",707],["Allows you to add data to an imported clip so you can animate the timings of other items based on the state of an animator. For example, for a game set in icy conditions, you could use an extra animation curve to control the emission rate of a particle system to show the player's condensing breath in the cold air. More info",707],["Animation Event*:",707],["Allows you to add data to an imported clip which determines when certain actions should occur in time with the animation. For example, for an animated character you might want to add events to walk and run cycles to indicate when the footstep sounds should play. More info",707],["Animation Layer*:",707],["An Animation Layer contains an Animation State Machine that controls animations of a model or part of it. An example of this is if you have a full-body layer for walking or jumping and a higher layer for upper-body motions such as throwing an object or shooting. The higher layers take precedence for the body parts they control. More info",707],["Animation Parameters*:",707],["Used to communicate between scripting and the Animator Controller. Some parameters can be set in scripting and used by the controller, while other parameters are based on Custom Curves in Animation Clips and can be sampled using the scripting API. More info",707],["Animation State Machine*:",707],["A graph within an Animator Controller that controls the interaction of Animation States. Each state references an Animation Blend Tree or a single Animation Clip. More info",707],["Animation Transition*:",707],["Allows a state machine to switch or blend from one animation state to another. Transitions define how long a blend between states should take, and the conditions that activate them. More info",707],["Animator Component*:",707],["A component on a model that animates that model using the Animation system. The component has a reference to an Animator Controller asset that controls the animation. More info",707],["Animator Controller*:",707],["Controls animation through Animation Layers with Animation State Machines and Animation Blend Trees, controlled by Animation Parameters. The same Animator Controller can be referenced by multiple models with Animator components. More info",707],["Animator Override Controller*:",707],["Allows you to create multiple variants of an Animator Controller, with each variant using a different set of animations, while retaining the original Controller's structure, parameters and logic. More info",707],["Animator Window*:",707],["The window where the Animator Controller is visualized and edited. More info",707],["Avatar*:",707],["An interface for retargeting animation from one rig to another. More info",707],["Avatar Mask*:",707],["A specification for which body parts to include or exclude for an animation rig. Used in Animation Layers and in the importer. More info",707],["Bind-pose*:",707],["The pose at which the character was modelled.",707],["blend:",707],["Transition from one animation to another animation smoothly and seamlessly, such as blending a character's walking and running animations according to the character's speed.",707],["Blend Node*:",707],["A node in a Blend Tree graph that blends animation clip nodes. More info",707],["Body Transform:",707],["The mass center of the character. It is used in for animation retargeting and provides the most stable displacement model. More info",707],["Direct Blend Tree*:",707],["A Blend Tree that allows you to map animator parameters directly to the weight of a Blend Tree child. This is useful when you want to have exact control over the animations that are being blended rather than blend them indirectly using one or two parameters (in the case of 1D and 2D blend trees). More info",707],["forward kinematics*:",707],["A method of posing a skeleton for animation by rotating the joint angles to predetermined values. The position of a child joint changes according to the rotation of its parent and so the end point of a chain of joints can be determined from the angles and relative positions of the individual joints it contains.",707],["Human template*:",707],["A pre-defined bone-mapping. Used for matching bones from FBX files to the Avatar. More info",707],["Humanoid animation*:",707],["An animation using humanoid skeletons. Humanoid models generally have the same basic structure, representing the major articulate parts of the body, head and limbs. This makes it easy to map animations from one humanoid skeleton to another, allowing retargeting and inverse kinematics. More info",707],["inverse kinematics (IK)*:",707],["The automatic calculation of joint angles (eg. the shoulder and elbow joint of an arm) so that the end point (eg. the hand) reaches a desired point in space. In contrast to Forward Kinematics More info",707],["keyframe*:",707],["A frame that marks the start or end point of a transition in an animation. Frames in between the keyframes are called inbetweens.",707],["Keyframe Reduction*:",707],["A process that removes redundant keyframes. More info",707],["kinematics*:",707],["The geometry that describes the position and orientation of a character's joints and bodies. Used by inverse kinematics to control character movement.",707],["Loop Pose*:",707],["An animation clip setting that blends the end and start of an animation to create a seamless join. More info",707],["Muscle definition*:",707],["This allows you to have more intuitive control over the character's skeleton. When an Avatar is in place, the Animation system works in muscle space, which is more intuitive than bone space. More info",707],["Ping Pong:",707],["To repeatedly play an animation to the end, then in reverse back to the beginning, in a loop.",707],["Playable Graph*:",707],["An API for controlling Playables. Playable Graphs allow you to create, connect and destroy playables. More info",707],["Playables*:",707],["An API that provides a way to create tools, effects or other gameplay mechanisms by organizing and evaluating data sources in a tree-like structure known as the PlayableGraph. More info",707],["Retargeting*:",707],["Applying animations created for one model to another. More info",707],["Rigging*:",707],["The process of building a skeleton hierarchy of joints for your mesh. Performed with an external tool, such as Blender or Autodesk Maya. More info",707],["Root Motion*:",707],["Motion of character's root node, whether it's controlled by the animation itself or externally. More info",707],["Root node*:",707],["A transform in an animation hierarchy that allows Unity to establish consistency between Animation clips for a generic model. It also enables Unity to properly blend between Animations that have not been authored \"in place\" (that is, where the whole Model moves its world position while animating). More info",707],["Root Transform*:",707],["The Transform at the top of a hierarchy of Transforms. In a Prefab, the Root Transform is the topmost Transform in the Prefab. In an animated humanoid character, the Root Transform is a projection on the Y plane of the Body Transform and is computed at run time. At every frame, a change in the Root Transform is computed, and then this is applied to the GameObject to make it move. More info",707],["Scene*:",707],["A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info",707],["Skinning*:",707],["The process of binding bone joints to the vertices of a character's mesh or 'skin'. Performed with an external tool, such as Blender or Autodesk Maya. More info",707],["State Machine*:",707],["The set of states in an Animator Controller that a character or animated GameObject can be in, along with a set of transitions between those states and a variable to remember the current state. The states available will depend on the type of gameplay, but typical states include things like idling, walking, running and jumping. More info",707],["State Machine Behaviour*:",707],["A script that attaches to a state within a state machine to control what happens when the state machine enters, exits or remains within a state, such as play sounds as states are entered. More info",707],["T-pose*:",707],["The pose in which the character has their arms straight out to the sides, forming a \"T\". The required pose for the character to be in, in order to make an Avatar.",707],["Target matching:",707],["A scripting function that allows you to move characters in such a way that a hand or foot lands in a certain place at a certain time. For example, the character may need to jump across stepping stones or jump and grab an overhead beam. More info",707],["Transition:",707],["The blend from one state to another in a state machine, such as transitioning a character from a walk to a jog animation. Transitions define how long the blend between states should take, and the conditions that activate the blend. More info",707],["Translate DoF*:",707],["The three degrees-of-freedom associated with translation (movement in X,Y & Z) as opposed to rotation.",707],["",707],["",707],["Asset terms",707],["Asset:",707],["Any media or data that can be used in your game or project. An asset may come from a file created outside of Unity, such as a 3D Model, an audio file or an image. You can also create some asset types in Unity, such as an Animator Controller, an Audio Mixer or a Render Texture. More info",707],["Asset package*:",707],["A collection of files and data from Unity projects, or elements of projects, which are compressed and stored in one file, similar to Zip files, with the .unitypackage extension. Asset packages are a handy way of sharing and re-using Unity projects and collections of assets. More info",707],["Asset Server*:",707],["Legacy - An asset and version control system with a graphical user interface integrated into Unity. Enables team members to work together on a project on different computers.",707],["Asset Store*:",707],["A growing library of free and commercial assets created by Unity and members of the community. Offers a wide variety of assets, from textures, models and animations to whole project examples, tutorials and Editor extensions. More info",707],["Asset Store package:",707],["A bundled collection of assets available for purchase or download on the Unity Asset Store, compressed and stored in one file with the .unitypackage extension, like an asset package. You can manage your Asset Store packages either on the online store or through the Package Manager window. More info",707],["Model:",707],["A 3D model representation of an object, such as a character, a building, or a piece of furniture. More info",707],["Model file*:",707],["A file containing a 3D data, which may include definitions for meshes, bones, animation, materials and textures. More info",707],["Package:",707],["A container that stores various types of features and assets for Unity, including Editor or Runtime tools and libraries, Asset collections, and project templates. Packages are self-contained units that the Unity Package Manager can share across Unity projects. Most of the time these are called packages, but occasionally they are called Unity Package Manager (UPM) packages. More info",707],["Prefab*:",707],["An asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. More info",707],["Unity unit*:",707],["The unit size used in Unity projects. By default, 1 Unity unit is 1 meter. To use a different scale, set the Scale Factor in the Import Settings when importing assets.",707],["UPM package*:",707],["A Package managed by the Unity Package Manager.",707],["",707],["",707],["Audio terms",707],["Audio Clip*:",707],["A container for audio data in Unity. Unity supports mono, stereo and multichannel audio assets (up to eight channels). Unity can import .aif, .wav, .mp3, and .ogg audio file format, and .xm, .mod, .it, and .s3m tracker module formats. More info",707],["Audio Distortion Filter*:",707],["An audio filter that distorts the sound from an Audio Source or sounds reaching the Audio Listener by simulating the sound of a low quality radio transmission. More info",707],["Audio Effect*:",707],["Any effect that can modify the output of Audio Mixer components, such as filtering frequency ranges of a sound or applying reverb. More info",707],["Audio Filter*:",707],["Any audio filter that distorts the sound from an Audio Source or sounds reaching the Audio Listener. More info",707],["Audio High Pass Filter*:",707],["An audio filter that passes high frequencies of an AudioSource and cuts off signals with frequencies lower than the Cutoff Frequency. More info",707],["Audio Listener*:",707],["A component that acts like a microphone, receiving sound from Audio Sources in the scene and outputting to the computer speakers. More info",707],["Audio Low Pass Filter*:",707],["An audio filter that passes low frequencies of an Audio Source or all sound reaching an Audio Listener while removing frequencies higher than the Cutoff Frequency. More info",707],["Audio Source*:",707],["A component which plays back an Audio Clip in the scene to an audio listener or through an audio mixer. More info",707],["Audio Spatializer*:",707],["A plug-in that changes the way audio is transmitted from an audio source into the surrounding space. It takes the source and regulates the gains of the left and right ear contributions based on the distance and angle between the AudioListener and the AudioSource. More info",707],["Distortion Effect*:",707],["An audio effect that modifies the sound by squashing and clipping the waveform to produce a rough, harsh result. More info",707],["Doppler Factor*:",707],["An audio setting that allows you to control how much the velocity of an object (relative to the audio listener) affects the pitch of any audio sources attached to it. More info",707],["Dry Level:",707],["An audio setting that allows you to set the mix level of unprocessed signal in output in mB.",707],["Dry Mix:",707],["An audio setting that allows you to set the volume of the original signal to pass to output.",707],["FMOD:",707],["Audio in Unity is built on top of a middleware called FMOD. FMOD is integrated with the Unity engine for creating and playing back interactive audio.",707],["Play On Awake*:",707],["Set this to true to make an Audio Source start playing on awake More info",707],["",707],["",707],["Core terms",707],["build:",707],["The process of compiling your project into a format that is ready to run on a specific platform or platforms. More info",707],["Managed plug-in*:",707],["A managed .NET assembly that is created with tools like Visual Studio for use in Unity. More info",707],["Native plug-in*:",707],["A platform-specific native code library that is created outside of Unity for use in Unity. Allows you can access features like OS calls and third-party code libraries that would otherwise not be available to Unity. More info",707],["Perforce*:",707],["A version control system for file change management. More info",707],["Development Build*:",707],["A development build includes debug symbols and enables the Profiler. More info",707],["",707],["",707],["Editor terms",707],["Anchor:",707],["A UI layout tool that fixes a UI element to a parent element. Anchors are shown as four small triangular handles in the Scene View and anchor information is also shown in the Inspector. More info",707],["Console window*:",707],["A Unity Editor window that shows errors, warnings and other messages generated by Unity, or your own scripts. More info",707],["Flythrough mode*:",707],["A Scene view navigation mode that allows you to fly around the scene in first-person, similar to how you would navigate in many games. More info",707],["Input Manager*:",707],["Settings where you can define all the different input axes, buttons and controls for your project. More info",707],["Inspector*:",707],["A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info",707],["Player Settings*:",707],["Settings that let you set various player-specific options for the final game built by Unity. More info",707],["Project window*:",707],["A window that shows the contents of your Assets folder (Project tab) More info",707],["Property Drawer*:",707],["A Unity feature that allows you to customize the look of certain controls in the Inspector window by using attributes on your scripts, or by controlling how a specific Serializable class should look More info",707],["Scene View*:",707],["An interactive view into the world you are creating. You use the Scene View to select and position scenery, characters, cameras, lights, and all other types of Game Object. More info",707],["Time Manager*:",707],["A Unity Settings Manager that lets you set a number of properties that control timing within your game. More info",707],["zoom:",707],["A camera control that lets you scale the view on your screen. To zoom a camera in the Unity Editor, press Alt + right click and drag. More info",707],["",707],["",707],["General terms",707],["Animation Key*:",707],["The value of an animatable property, set at a specific point in time. Setting at least two keys for the same property creates an animation. More info",707],["category:",707],["A Profiler category identifies the workload data for a Unity subsystem (for example, Rendering, Scripting and Animation categories). Unity applies colour-coding to categories to help visually distinguish the types of data in the Profiler window. More info",707],["compression*:",707],["A method of storing data that reduces the amount of storage space it requires. See Texture Compression, Animation Compression, Audio Compression, Build Compression.",707],["console:",707],["Abbreviation of game console",707],["Deferred shading*:",707],["A rendering path in the Built-in Render Pipeline that places no limit on the number of Lights that can affect a GameObject. All Lights are evaluated per-pixel, which means that they all interact correctly with normal maps and so on. Additionally, all Lights can have cookies and shadows. More info",707],["Extrapolate:",707],["See Extrapolation",707],["Extrapolation:",707],["The process of storing the last few known values and using them to predict future values. Used in animation, physics and multiplayer.",707],["first person shooter*:",707],["A common game genre, featuring a first-person view of a 3D world, and gun-based combat with other players or NPCs.",707],["FBX:",707],["Autodesk's proprietary format that Unity uses to import and export Models, animation, and more. More info",707],["FPS*:",707],["See first person shooter, frames per second.",707],["game console*:",707],["A device that runs and displays video games.",707],["game controller*:",707],["A device to control objects and characters in a game.",707],["GameObject*:",707],["The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject's functionality is defined by the Components attached to it. More info",707],["Ignore file:",707],["A special file used in many Version Control Systems which specifies files to be excluded from being placed under version control. In Unity projects there are a number of files which could be excluded from version control, and using an Ignore File is the best way to achieve this.",707],["Input Key*:",707],["A key on a keyboard relating to the Input class. More info",707],["Interpolate:",707],["See Interpolation",707],["Interpolation:",707],["The process of calculating values in-between two defined values. Used in animation (between keyframes), physics (between physics time-steps), and multiplayer (between network updates)",707],["Joy Num:",707],["An Input Manager property that defines which joystick will be used. More info",707],["Layer Mask*:",707],["A value defining which layers to include or exclude from an operation, such as rendering, collision or your own code. More info",707],["marker:",707],["A Unity Profiler API structure that describes a CPU or GPU event, such as a button click. Each event marker appears as a vertical lines or label in the Profiler window. More info",707],["Mask:",707],["Can refer to a Sprite Mask, a UI Mask, or a Layer Mask More info",707],["Object:",707],["See GameObject.",707],["Packages:",707],["Packages are collections of assets to be shared and re-used in Unity. The Unity Package Manager (UPM) can display, add, and remove packages from your project. These packages are native to the Unity Package Manager and provide a fundamental method of delivering Unity functionality. However, the Unity Package Manager can also display Asset Store packages that you downloaded from the Asset Store. More info",707],["Parent:",707],["An object that contains child objects in a hierarchy. When a GameObject is a Parent of another GameObject, the Child GameObject will move, rotate, and scale exactly as its Parent does. You can think of parenting as being like the relationship between your arms and your body; whenever your body moves, your arms also move along with it. More info",707],["Profiler*:",707],["A window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating or in your game logic. More info",707],["Project:",707],["In Unity, you use a project to design and develop a game. A project stores all of the files that are related to a game, such as the asset and Scene files. More info",707],["Project Settings*:",707],["A broad collection of settings which allow you to configure how Physics, Audio, Networking, Graphics, Input and many other areas of your project behave. More info",707],["Plug-in*:",707],["A set of code created outside of Unity that creates functionality in Unity. There are two kinds of plug-ins you can use in Unity: Managed plug-ins (managed .NET assemblies created with tools like Visual Studio) and Native plug-ins (platform-specific native code libraries). More info",707],["Sprite Mask*:",707],["A texture which defines which areas of an underlying image to reveal or hide. More info",707],["Transform Component*:",707],["A Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform. More info",707],["Tree:",707],["A GameObject and associated Component that allows you to add tree assets to your Scene. You can add branch levels and leaves to trees in the Tree Inspector window. More info",707],["Velocity:",707],["A vector that defines the speed and direction of motion of a Rigidbody",707],["VSync*:",707],["Vertical synchronization (VSync) is a display setting that caps a game’s frame rate to match the refresh rate of a monitor, to prevent image tearing. More info",707],["Version Control*:",707],["A system for managing file changes. You can use Unity in conjunction with most common version control tools, including Perforce, Git, Mercurial and PlasticSCM. More info",707],["Viewport*:",707],["The user's visible area of an app on their screen.",707],["World:",707],["The area in your scene in which all objects reside. Often used to specify that coordinates are world-relative, as opposed to object-relative.",707],["",707],["",707],["Graphics terms",707],["Ambient light*:",707],["Light that doesn't come from any specific direction, and contributes equal light in all directions to the Scene. More info",707],["Ambient occlusion*:",707],["A method to approximate how much ambient light (light not coming from a specific direction) can hit a point on a surface.",707],["Aniso Level*:",707],["The anisotropic filtering (AF) level of a texture. Allows you to increase texture quality when viewing a texture at a steep angle. Good for floor and ground textures. More info",707],["Antialiasing*:",707],["A technique for decreasing artifacts, like jagged lines (jaggies), in images to make them appear smoother.",707],["Aspect Ratio*:",707],["The relationship of an image's proportional dimensions, such as its width and height.",707],["Baked Lights*:",707],["Light components whose Mode property is set to Baked. Unity pre-calculates the illumination from Baked Lights before runtime, and does not include them in any runtime lighting calculations. More info",707],["Billboard*:",707],["A textured 2D object that rotates so that it always faces the Camera. More info",707],["blit*:",707],["A shorthand term for \"bit block transfer\". A blit operation is the process of transferring blocks of data from one place in memory to another.",707],["Bloom:",707],["A post-processing effect used to reproduce an imaging artifact of real-world cameras. The effect produces fringes of light extending from the borders of bright areas in an image, contributing to the illusion of an extremely bright light overwhelming the camera or eye capturing the scene.",707],["Bump map*:",707],["An image texture used to represent geometric detail across the surface of a mesh, for example bumps and grooves. Can be represented as a heightmap or a normal map. More info",707],["Camera*:",707],["A component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info",707],["clipping plane*:",707],["A plane that limits how far or close a camera can see from its current position. A camera's viewable range is between the far and near clipping planes. See far clipping plane and near clipping plane. More info",707],["component:",707],["A functional part of a GameObject. A GameObject can contain any number of components. Unity has many built-in components, and you can create your own by writing scripts that inherit from MonoBehaviour. More info",707],["Cubemap*:",707],["A collection of six square textures that can represent the reflections in an environment or the skybox drawn behind your geometry. The six squares form the faces of an imaginary cube that surrounds an object; each face represents the view along the directions of the world axes (up, down, left, right, forward and back). More info",707],["Culling Mask*:",707],["Allows you to include or omit objects to be rendered by a Camera, by Layer.",707],["depth buffer*:",707],["A memory store that holds the z-value depth of each pixel in an image, where the z-value is the depth for each rendered pixel from the projection plane. More info",707],["Depth of Field*:",707],["A post-processing effect that simulates the focus properties of a camera lens. More info",707],["Distance Shadowmask*:",707],["A version of the Shadowmask lighting mode that includes high quality shadows cast from static GameObjects onto dynamic GameObjects. More info",707],["Dynamic Batching*:",707],["An automatic Unity process which attempts to render multiple meshes as if they were a single mesh for optimized graphics performance. The technique transforms all of the GameObject vertices on the CPU and groups many similar vertices together. More info",707],["dynamic resolution*:",707],["A Camera setting that allows you to dynamically scale individual render targets, to reduce workload on the GPU. More info",707],["Enlighten*:",707],["A lighting system by Geomerics used in Unity for lightmapping and for Enlighten Realtime Global Illumination. More info",707],["ETC:",707],["(Ericsson Texture Compression) A block-based texture format that compresses textures to significantly reduce file sizes without causing a noticable reduction in image quality. More info",707],["Exponential fog*:",707],["A fog model that emulates realistic fog behaviour by simulating light absorption over distance by a certain attenuation factor.",707],["Exposure value*:",707],["A value that represents a combination of a camera's shutter speed and f-number. It is essentially a measurement of exposure such that all combinations of shutter speed and f-number that yield the same level of exposure have the same EV.",707],["Extrude Edges*:",707],["A Texture property that enables you to define how much area to leave around a sprite in a generated mesh.",707],["Far clipping plane*:",707],["The maximum draw distance for a camera. Geometry beyond the plane defined by this value is not rendered. The plane is perpendicular to the camera's forward (Z) direction.",707],["Fog:",707],["A post-processing effect that overlays a color onto objects depending on the distance from the camera. Use this to simulate fog or mist in outdoor environments, or to hide clipping of objects near the camera's far clip plane. More info",707],["Forward Rendering*:",707],["A rendering path that renders each object in one or more passes, depending on lights that affect the object. Lights themselves are also treated differently by Forward Rendering, depending on their settings and intensity. More info",707],["frame:",707],["A single image from a sequence of images that represent moving graphics. While your game is running, the camera in your game renders frames to the screen as fast as possible. May also refer to a frame from a video clip, or sprite animation frames. See frames per second (FPS).",707],["frames per second*:",707],["The frequency at which consecutive frames are displayed in a running game. More info",707],["Fresnel Effect*:",707],["An effect representing the increase in reflectivity on objects when light hits at grazing angles.",707],["Frustum:",707],["The region of 3D space that a perspective camera can see and render. In the Scene view, the frustum is represented by a truncated rectangular pyramid with its top at the camera’s near clipping plane and its base at the camera’s far clipping plane. More info",707],["GI Cache*:",707],["The cached intermediate files used when Unity precomputes lighting data. Unity keeps this cache to speed up computation. More info",707],["Gizmo*:",707],["A graphic overlay associated with a GameObject in a Scene, and displayed in the Scene View. Built-in scene tools such as the move tool are Gizmos, and you can create custom Gizmos using textures or scripting. Some Gizmos are only drawn when the GameObject is selected, while other Gizmos are drawn by the Editor regardless of which GameObjects are selected. More info",707],["global illumination*:",707],["A group of techniques that model both direct and indirect lighting to provide realistic lighting results.",707],["Gravity Modifier*:",707],["A Particle System property that scales the gravity value set in the physics manager. A value of zero switches gravity off. More info",707],["Halo:",707],["The glowing light areas around light sources, used to give the impression of small dust particles in the air. More info",707],["Hard Shadows:",707],["A shadow property that produces shadows with a sharp edge. Hard shadows are not particularly realistic compared to Soft Shadows but they involve less processing, and are acceptable for many purposes.",707],["HDR*:",707],["high dynamic range",707],["HDRI*:",707],["high dynamic range image",707],["Heightmap*:",707],["A greyscale Texture that stores height data for an object. Each pixel stores the height difference perpendicular to the face that pixel represents.",707],["Irradiance Budget*:",707],["A lightmap property that determines the precision of the incoming light data used to light each texel in the lightmap More info",707],["Irradiance Quality*:",707],["A lightmap property that sets the number of rays that are cast and used to compute which clusters affect a given output lightmap texel. More info",707],["Layer:",707],["Layers in Unity can be used to selectively opt groups of GameObjects in or out of certain processes or calculations. This includes camera rendering, lighting, physics collisions, or custom calculations in your own code. More info",707],["Lens Flare*:",707],["A component that simulates the effect of lights refracting inside a camera lens. Use a Lens Flare to represent very bright lights or add atmosphere to your scene. More info",707],["level of detail*:",707],["The Level Of Detail (LOD) technique is an optimization that reduces the number of triangles that Unity has to render for a GameObject when its distance from the Camera increases. More info",707],["Light Mode*:",707],["A Light property that defines the use of the Light. Can be set to Realtime, Baked and Mixed. More info",707],["Light Probe*:",707],["Light probes store information about how light passes through space in your scene. A collection of light probes arranged within a given space can improve lighting on moving objects and static LOD scenery within that space. More info",707],["Light Probe Group*:",707],["A component that enables you to add Light Probes to GameObjects in your scene. More info",707],["Light Probe Proxy Volume*:",707],["A component that allows you to use more lighting information for large dynamic GameObjects that cannot use baked lightmaps (for example, large Particle Systems or skinned Meshes). More info",707],["Lightmap*:",707],["A pre-rendered texture that contains the effects of light sources on static objects in the scene. Lightmaps are overlaid on top of scene geometry to create the effect of lighting. More info",707],["Lightmapper*:",707],["A tool in Unity that bakes lightmaps according to the arrangement of lights and geometry in your scene. More info",707],["Line Renderer*:",707],["A component that takes an array of two or more points in 3D space and draws a straight line between each one. You can use a single Line Renderer component to draw anything from a simple straight line to a complex spiral. More info",707],["LOD*:",707],["See level of detail",707],["LOD Group*:",707],["A component to manage level of detail (LOD) for GameObjects. More info",707],["Material:",707],["An asset that defines how a surface should be rendered. More info",707],["Mesh*:",707],["The main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons. More info",707],["Mesh Filter*:",707],["A mesh component that takes a mesh from your assets and passes it to the Mesh Renderer for rendering on the screen. More info",707],["Mesh Renderer*:",707],["A mesh component that takes the geometry from the Mesh Filter and renders it at the position defined by the object's Transform component. More info",707],["Near clipping plane*:",707],["A plane that limits how close a camera can see from its current position. The plane is perpendicular to the camera's forward (Z) direction. More info",707],["Normal:",707],["The direction perpendicular to the surface of a mesh, represented by a Vector. Unity uses normals to determine object orientation and apply shading. More info",707],["Normal map*:",707],["A type of Bump Map texture that allows you to add surface detail such as bumps, grooves, and scratches to a model which catch the light as if they are represented by real geometry.",707],["Occlusion culling*:",707],["A that disables rendering of objects when they are not currently seen by the camera because they are obscured (occluded) by other objects. More info",707],["Orthographic 3D*:",707],["A common type of camera view used in games that give you a bird's-eye view of the action, and is sometimes called \"2.5D\". More info",707],["particle:",707],["A small, simple image or mesh that is emitted by a particle system. A particle system can display and move particles in great numbers to represent a fluid or amorphous entity. The effect of all the particles together creates the impression of the complete entity, such as smoke. More info",707],["particle system*:",707],["A component that simulates fluid entities such as liquids, clouds and flames by generating and animating large numbers of small 2D images in the scene. More info",707],["Physically Based Shading*:",707],["An advanced lighting model that simulates the interactions between materials and light in a way that mimics reality. More info",707],["pixel*:",707],["The smallest unit in a computer image. Pixel size depends on your screen resolution. Pixel lighting is calculated at every screen pixel. More info",707],["Player Log*:",707],["The .log file created by a Standalone Player that contains a record of events, such as script execution times, the compiler version, and AssetImport time. Log files can help diagnose problems. More info",707],["post-processing*:",707],["A process that improves product visuals by applying filters and effects before the image appears on screen. You can use post-processing effects to simulate physical camera and film properties, for example Bloom and Depth of Field. More info post processing, postprocessing, postprocess",707],["pseudo-depth:",707],["A visual simulation of three-dimensional characteristics on a two-dimensional object or environment. This effect is sometimes called \"2.5D\". More info",707],["Quad*:",707],["A primitive object that resembles a plane but its edges are only one unit long, it uses only 4 vertices, and the surface is oriented in the XY plane of the local coordinate space. More info",707],["Quaternion*:",707],["Unity's standard way of representing rotations as data. When writing code that deals with rotations, you should usually use the Quaternion class and its methods. More info",707],["Rasterization*:",707],["The process of generating an image by calculating pixels for each polygon or triangle in the geometry. This is an alternative to ray tracing.",707],["Ray tracing*:",707],["The process of generating an image by tracing out rays from the Camera through each pixel and recording the color contribution at the hit point. This is an alternative to rasterization. raytracing",707],["Realtime Lights*:",707],["Light components whose Mode property is set to Realtime. Unity calculates and updates the lighting of Realtime Lights every frame at runtime. No Realtime Lights are precomputed. More info",707],["Reflection Probe*:",707],["A rendering component that captures a spherical view of its surroundings in all directions, rather like a camera. The captured image is then stored as a Cubemap that can be used by objects with reflective materials. More info",707],["Render pipeline*:",707],["A series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info",707],["Render Texture*:",707],["A special type of Texture that is created and updated at runtime. To use them, first create a new Render Texture and designate one of your Cameras to render into it. Then you can use the Render Texture in a Material just like a regular Texture. More info",707],["Rendering Path*:",707],["The technique that a render pipeline uses to render graphics. Choosing a different rendering path affects how lighting and shading are calculated. Some rendering paths are more suited to different platforms and hardware than others. More info",707],["Shader*:",707],["A program that runs on the GPU. More info",707],["Shader object*:",707],["An instance of the Shader class, a Shader object is container for shader programs and GPU instructions, and information that tells Unity how to use them. Use them with materials to determine the appearance of your scene. More info",707],["Shader variant:",707],["A verion of a shader program that Unity generates according to a specific combination of shader keywords and their status. A Shader object can contain multiple shader variants. More info",707],["ShaderLab*:",707],["Unity's language for defining the structure of Shader objects. More info",707],["Shadowmask*:",707],["A Texture that shares the same UV layout and resolution with its corresponding lightmap. More info",707],["Skybox*:",707],["A special type of Material used to represent skies. Usually six-sided. More info",707],["Soft Shadows:",707],["A shadow property that produces shadows with a soft edge. Soft shadows are more realistic compared to Hard Shadows and tend to reduce the \"blocky\" aliasing effect from the shadow map, but they require more processing.",707],["Spatial Mapping*:",707],["The process of mapping real-world surfaces into the virtual world.",707],["specular color*:",707],["The color of a specular highlight.",707],["specular highlight",707],["A bright spot of light that appears on the surface of shiny objects when illuminated.",707],["Sprite*:",707],["A 2D graphic objects. If you are used to working in 3D, Sprites are essentially just standard textures but there are special techniques for combining and managing sprite textures for efficiency and convenience during development. More info",707],["Sprite Packer*:",707],["A facility that packs graphics from several sprite textures tightly together within a single texture known as an atlas. Unity provides a Sprite Packer utility to automate the process of generating atlases from the individual sprite textures. More info",707],["Sprite Renderer*:",707],["A component that lets you display images as Sprites for use in both 2D and 3D scenes. More info",707],["Static Batching*:",707],["A technique Unity uses to draw GameObjects on the screen that combines static (non-moving) GameObjects into big Meshes, and renders them in a faster way. More info",707],["Static receiver*:",707],["A static GameObject that is receiving a shadow from another static or dynamic GameObject More info",707],["stencil buffer*:",707],["A memory store that holds an 8-bit per-pixel value. In Unity, you can use a stencil buffer to flag pixels, and then only render to pixels that pass the stencil operation. More info",707],["Surface Shader*:",707],["A streamlined way of writing shaders for the Built-in Render Pipeline. More info",707],["Terrain*:",707],["The landscape in your scene. A Terrain GameObject adds a large flat plane to your scene and you can use the Terrain's Inspector window to create a detailed landscape. More info",707],["Text Mesh*:",707],["A Mesh component that displays a Text string More info",707],["texture:",707],["An image used when rendering a GameObject, Sprite, or UI element. Textures are often applied to the surface of a mesh to give it visual detail. More info",707],["Texture Compression*:",707],["3D Graphics hardware requires Textures to be compressed in specialized formats which are optimized for fast Texture sampling. More info",707],["Texture Import Inspector*:",707],["An Inspector that allows you to define how your images are imported from your project's Assets folder into the Unity Editor. More info",707],["Texture Overrides*:",707],["Platform-specific settings that allow you to set the resolution, file size with associated memory size requirements, pixel dimensions, and quality of your Textures for each target platform. More info",707],["Tile:",707],["A simple class that allows a sprite to be rendered on a Tilemap. More info",707],["Tilemap*:",707],["A GameObject that allows you to quickly create 2D levels using tiles and a grid overlay. More info",707],["Tonemapping*:",707],["The process of remapping HDR values of an image into a range suitable to be displayed on screen. More info",707],["Trail Renderer*:",707],["A visual effect that lets you to make trails behind GameObjects in the Scene as they move. More info",707],["vector field:",707],["A 3D texture, where each value represents a directional force that is applied to particles as they move through the field. A vector field is created in 3D animation software, such as Houdini. More info",707],["vertex shader*:",707],["A program that runs on each vertex of a 3D model when the model is being rendered. More info",707],["VideoCapture*:",707],["A Unity API that allows you to record videos directly to the file system in the MP4 format. More info",707],["Voxel*:",707],["A 3D pixel. More info",707],["WebGL*:",707],["A JavaScript API that renders 2D and 3D graphics in a web browser. The Unity WebGL build option allows Unity to publish content as JavaScript programs which use HTML5 technologies and the WebGL rendering API to run Unity content in a web browser. More info",707],["wind zone*:",707],["A GameObject that adds the effect of wind to your terrain. For instance, Trees within a wind zone will bend in a realistic animated fashion and the wind itself will move in pulses to create natural patterns of movement among the tree. More info",707],["",707],["",707],["Lighting terms",707],["Mixed Lights:",707],["Light components whose Mode property is set to Mixed. Some calculations for Mixed Lights are performed in advance, and some calculations for Mixed Lights are performed at runtime. The behavior of all Mixed Lights in a Scene is determined by the Scene's Lighting Mode. More info",707],["",707],["",707],["Multiplayer terms",707],["High Level API*:",707],["A system for building multiplayer capabilities for Unity games. It is built on top of the lower level transport real-time communication layer, and handles many of the common tasks that are required for multiplayer games. More info",707],["HLAPI:",707],["Abbreviation of High Level API",707],["Host:",707],["In a multiplayer network game without a dedicated server, one of the peers in the game acts as the center of authority for the game. This peer is called the \"host\". It runs a server and a \"local client\", while the other peers each run a \"remote client\". More info",707],["Player Object*:",707],["A High Level API (HPAPI) object that represents the player on the server and has the ability to run commands (which are secure client-to-server remote procedure calls) from the player's client. More info",707],["netId*:",707],["A unique identifier given to an object instance to track it between networked clients and the server. More info",707],["Network Manager*:",707],["A Networking component that manages the network state of a project. More info",707],["NetworkIdentity*:",707],["A Networking component that allows you to assign an identity to your GameObject for the network to recognize it as a Local Player GameObject or a Server Only GameObject. More info",707],["Networking*:",707],["The Unity system that enables multiplayer gaming across a computer network. More info",707],["NetworkManagerHUD*:",707],["A Networking component that creates a UI menu that allows you to control the network state of your game using your Network Manager. More info",707],["NetworkTransform*:",707],["A Networking component that allows you to synchronize the movements of GameObjects across the network. More info",707],["",707],["",707],["Package Manager terms",707],["Built-in package*:",707],["Built-in* packages allow users to toggle Unity features on or off through the Package Manager. Enabling or disabling a package reduces the run-time build size. For example, most projects don't use the legacy Particle System. By removing the abstracted package of this feature, the related code and resources are not part of the final built product. Typically, these packages contain only the package manifest and are bundled with Unity (rather than available on the package registry).",707],["Bundled package*:",707],["Unity stores bundled packages in the global cache when you install Unity. You can install these packages in your project even if you are completely offline (not currently connected to the internet or a local network).",707],["Default package*:",707],["Unity automatically pre-installs a select number of default packages (for example, the Analytics Library, Unity Timeline, etc.) when you create a new project. This differs from a bundled package because you don't need to install it and it differs from a built-in package because it extends Unity's features rather than being able to enable or disable them.",707],["Direct dependency*:",707],["A direct dependency occurs when your project \"requests\" a specific package version. To create a direct dependency, you add that package and version to the dependencies property in your project manifest (expressed in the form package_name@package_version). More info",707],["Embedded package*:",707],["An embedded package is a mutable package that you store under the Packages directory at the root of a Unity project. This differs from most packages which you download from a package server and are immutable. More info",707],["Feature set*:",707],["A feature set is a collection of related packages that you can use to achieve specific results in the Unity Editor. You can manage feature sets directly in Unity's Package Manager. More info",707],["Git dependency*:",707],["The Package Manager retrieves Git dependencies from a Git repository directly rather than from a package registry. Git dependencies use a Git URL reference instead of a version, and there's no guarantee about the package quality, stability, validity, or even whether the version stated in its package.json file respects Semantic Versioning rules with regards to officially published releases of this package. More info",707],["Immutable*:",707],["You cannot change the contents of an immutable (read-only) package. This is the opposite of mutable. Most packages are immutable, including packages downloaded from the package registry or by Git URL.",707],["Indirect dependency*:",707],["An indirect, or transitive dependency occurs when your project requests a package which itself \"depends on\" another package. For example, if your project depends on the alembic@1.0.7 package which in turn depends on the timeline@1.0.0 package, then your project has an direct dependency on Alembic and an indirect dependency on Timeline. More info",707],["Local package*:",707],["A local package already exists on the file system, usually outside the project folder. To install the package, notify the Package Manager of its location through the Packages window. More info",707],["Manifest:",707],["There are two types of manifest files: project manifests and package manifests.",707],["Mutable*:",707],["You can change the contents of a mutable package. This is the opposite of immutable. Only Local packages and Embedded packages are mutable.",707],["Package manifest*:",707],["Each package has a manifest, which provides information about the package to the Package Manager. The manifest contains information such as the name of the package, its version, a description for users, dependencies on other packages (if any), and other details. More info",707],["Preview package*:",707],["A preview package is in development and not yet ready for production. A package in preview might be at any stage of development, from the initial stages to near completion.",707],["Project manifest*:",707],["Each Unity project has a project manifest, which acts as an entry point for the Package Manager. This file must be available in the <project>/Packages directory. The Package Manager uses it to configure many things, including a list of dependencies for that project, as well as any package repository to query for packages. More info",707],["Verified package*:",707],["When a package passes release cycle testing for a specific version of Unity, it receives the Verified For designation. This means that these packages are guaranteed to work with the designated version of Unity.",707],["",707],["",707],["Performance terms",707],["Profiler category*:",707],["Identifies the workload data for a Unity subsystem (for example, Rendering, Scripting and Animation categories). Unity applies color-coding to categories to visually distinguish between the types of data in the Profiler window.",707],["Profiler marker*:",707],["Placed in code to describe a CPU or GPU event that is then displayed in the Unity Profiler window. Added to Unity code by default, or you can use ProfilerMarker API to add your own custom markers. More info",707],["Profiler counter*:",707],["Placed in code with the ProfilerCounter API to track metrics, such as the number of enemies spawned in your game. More info",707],["Profiler sample*:",707],["A set of data associated with a Profiler marker, that the Profiler has recorded and collected.",707],["Profiler:",707],["A window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating, or in your game logic. More info",707],["VSync*:",707],["Vertical synchronization (VSync) is a display setting that caps a game’s frame rate to match the refresh rate of a monitor, to prevent image tearing.",707],["VBlank*:",707],["Vertical blanking interval (VBlank) is the time between the end of the final visible line of a frame and the beginning of the first visible line of the next frame. This is the refresh interval as defined by a screen’s refresh rate.",707],["call stack:",707],["A list of methods that were called at run time, organized as a last-in-first-out stack.",707],["overhead:",707],["The amount of supporting code that the Profiler needs to run. This overhead might affect the performance of your application.",707],["",707],["",707],["Physics terms",707],["Bounding volume*:",707],["A closed shape representing the edges and faces of a collider or trigger.",707],["box collider*:",707],["A cube-shaped collider component that handles collisions for GameObjects like dice and ice cubes. More info",707],["broad-phase collision detection*:",707],["A collision detection phase that computes pairs of potentially overlapping objects by judging only their respective bounding volumes. More info",707],["capsule collider*:",707],["A capsule-shaped collider component that handles collisions for GameObjects like barrels and character limbs. More info",707],["Center of Mass*:",707],["Represents the average position of all mass in a Rigidbody for the purposes of physics calculations. By default it is computed from all colliders belonging to the Rigidbody, but can be modified via script. More info",707],["Character Controller*:",707],["A simple, capsule-shaped collider component with specialized features for behaving as a character in a game. Unlike true collider components, a Rigidbody is not needed and the momentum effects are not realistic. More info",707],["Character Joint*:",707],["An extended ball-socket joint which allows a joint to be limited on each axis. Mainly used for Ragdoll effects. More info",707],["Cloth:",707],["A component that works with the Skinned Mesh Renderer to provide a physics-based solution for simulating fabrics. More info",707],["Collider*:",707],["An invisible shape that is used to handle physical collisions for an object. A collider doesn't need to be exactly the same shape as the object's mesh - a rough approximation is often more efficient and indistinguishable in gameplay. More info",707],["Collision*:",707],["A collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, when at least one has a Rigidbody component and is in motion. More info",707],["Collision Detection*:",707],["An automatic process performed by Unity which determines whether a moving GameObject with a Rigidbody and collider component has come into contact with any other colliders. More info",707],["Configurable Joint*:",707],["An extremely customizable joint that other joint types are derived from. It can be used to create anything from adapted versions of existing joints to custom designed and highly specialized joints. More info",707],["Constant Force*:",707],["A simple component for adding a constant force or torque to game objects with a Rigidbody. More info",707],["Constraints:",707],["Settings on Joint components which limit movement or rotation. The type and number of constraints vary depending on the type of Joint. More info",707],["Contact Distance*:",707],["A joint limit property that sets the minimum distance tolerance between the joint position and the limit at which the limit will be enforced. More info",707],["continuous collision detection*:",707],["A collision detection method that calculates and resolves collisions over the entire physics simulation step. This can prevent fast-moving objects from tunnelling through walls during a simulation step. More info",707],["Damping Ratio*:",707],["A joint setting to control spring oscillation. A higher damping ratio means the spring will come to rest faster. More info",707],["discrete collision detection*:",707],["A collision detection method that calculates and resolves collisions based on the pose of objects at the end of each physics simulation step. More info",707],["Dynamic Friction*:",707],["A Physic Material property that defines the friction for a Rigidbody when it's in motion. Lower values mean less friction, so a setting of zero represents slipping on ice. More info",707],["Fixed Joint*:",707],["A joint type that is completely constrained, allowing two objects to be held together. Implemented as a spring so some motion may still occur. More info",707],["Fixed Timestep*:",707],["A customizable framerate-independent interval that dictates when physics calculations and FixedUpdate() events are performed. More info",707],["High Twist Limit*:",707],["The higher limit of a Character Joint. More info",707],["Hinge Joint*:",707],["A joint that groups together two Rigidbody components, constraining them to move like they are connected by a hinge. It is perfect for doors, but can also be used to model chains, pendulums and so on. More info",707],["joint*:",707],["A physics component allowing a dynamic connection between Rigidbody components, usually allowing some degree of movement such as a hinge. More info",707],["Low Twist Limit*:",707],["A joint property that sets the lower limit of a joint. More info",707],["Mesh Collider*:",707],["A free-form collider component which accepts a mesh reference to define its collision surface shape. More info",707],["narrow-phase collision detection*:",707],["A collision detection phase that determines whether the pairs of objects found in the broad phase will actually collide. It then computes the contact points for those pairs and gives them to the solver to use when solving collisions. More info",707],["Physic Material*:",707],["A physics asset for adjusting the friction and bouncing effects of colliding objects. More info",707],["Physics Engine*:",707],["A system that simulates aspects of physical systems so that objects can accelerate correctly and be affected by collisions, gravity and other forces. More info",707],["Rig:",707],["A skeletal hierarchy of joints for a mesh. More info",707],["Rigidbody*:",707],["A component that allows a GameObject to be affected by simulated gravity and other forces. More info",707],["Self Collision*:",707],["A cloth property that prevents cloth from penetrating itself. More info",707],["Soft Particles*:",707],["Particles that create semi-transparent effects like smoke, fog or fire. Soft particles fade out as they approach an opaque object, to prevent intersections with the geometry. More info",707],["speculative continuous collision detection*:",707],["A collision detection method that inflates broad-phase AABB of moving objects according to their velocities. This enables support for effects like rotations. More info",707],["Sphere Collider*:",707],["A sphere-shaped collider component that handles collisions for GameObjects like balls or other things that can be roughly approximated as a sphere for the purposes of physics. More info",707],["Spring Joint*:",707],["A joint type that connects two Rigidbody components together but allows the distance between them to change as though they were connected by a spring. More info",707],["Swing Axis*:",707],["A joint property that defines the axis around which the joint can swing. More info",707],["Swing Limit*:",707],["A joint property that limits the rotation around one element of the defined Swing Axis. More info",707],["Target Position*:",707],["A joint property to set the target position that the joint's drive force should move it to. More info",707],["Target Velocity*:",707],["A joint property to set the desired velocity with which the joint should move to the Target Position under the drive force. More info",707],["Terrain Collider*:",707],["A terrain-shaped collider component that handles collisions for collision surface with the same shape as the Terrain object it is attached to. More info",707],["Wheel Collider*:",707],["A special collider for grounded vehicles. It has built-in collision detection, wheel physics, and a slip-based tire friction model. It can be used for objects other than wheels, but it is specifically designed for vehicles with wheels. More info",707],["",707],["",707],["Platforms terms",707],["ADB*:",707],["An Android Debug Bridge (ADB). You can use an ADB to deploy an Android package (APK) manually after building. More info",707],["AOT Compilation*:",707],["Ahead of Time (AOT) compilation is an optimization method used by all platforms except iOS for optimizing the size of the built player. . More info",707],["APK*:",707],["The Android Package format output by Unity. An APK is automatically deployed to your device when you select File > Build & Run. More info",707],["AR*:",707],["Augmented Reality More info",707],["Augmented Reality*:",707],["Augmented Reality (AR) uses computer graphics or video composited on top of a live video feed to augment the view and create interaction with real and virtual objects. More info",707],["Closed platform*:",707],["Includes platforms that require confidentiality and legal agreements with the platform provider for using their developer tools and hardware. These platforms aren't open to development unless you have an established relationship with the provider. For example PlayStation®, Game Core for Xbox®, and Nintendo®.",707],["Emscripten:",707],["The toolchain that Unity uses to convert from C and C++ to WebAssembly. More info",707],["Gradle*:",707],["An Android build system that automates several build processes. This automation means that many common build errors are less likely to occur. More info",707],["Android Keystore*:",707],["An Android system that lets you store cryptographic key entries for enhanced device security. More info",707],["Mixed Reality*:",707],["Mixed Reality (MR) combines its own virtual environment with the user’s real-world environment and allows them to interact with each other.",707],["MR*:",707],["Mixed Reality",707],["ODR*:",707],["On-demand resources (ODR) is a feature available for the iOS and tvOS platforms, from version 9.0 of iOS and tvOS onwards. It allows you to reduce the size of your application by separating the core assets (those that are needed from application startup) from assets which may be optional, or which appear in later levels of your game. More info",707],["PhotoCapture*:",707],["An API that enables you to take photos from a HoloLens web camera and store them in memory or on disk. More info",707],["Progressive Web App*:",707],["A software application that's delivered through the web. It uses certain browser features to create a user experience on par with a native application. More info",707],["Razor*:",707],["A CPU/GPU chip set used in PlayStation® hardware. More info",707],["Unity Remote*:",707],["A downloadable app designed to help with Android, iOS and tvOS development. The app connects with Unity while you are running your project in Play Mode from the Unity Editor. More info",707],["Virtual Reality*:",707],["Virtual Reality (VR) immerses users in an artificial 3D world of realistic images and sounds, using a headset and motion tracking. More info",707],["VR*:",707],["Virtual Reality More info",707],["VR Trace*:",707],["A virtual reality diagnostic tool by Sony Interactive Entertainment for PlayStation®. More info",707],["XR*:",707],["An umbrella term encompassing Virtual Reality (VR), Augmented Reality (AR) and Mixed Reality (MR) applications. Devices supporting these forms of interactive applications can be referred to as XR devices. More info",707],["",707],["",707],["Scripting terms",707],["Cache API*:",707],["A Javascript API to store network request and response pairs in the browser cache. More info",707],["Event System*:",707],["A way of sending events to objects in the application based on input, be it keyboard, mouse, touch, or custom input. The Event System consists of a few components that work together to send events. More info",707],["IL2CPP*:",707],["A Unity-developed scripting back-end which you can use as an alternative to Mono when building projects for some platforms. More info",707],["mcs*:",707],["The Mono C# compiler file format. More info",707],["Mono:",707],["A scripting backend used in Unity. More info",707],["MonoDevelop*:",707],["An integrated development environment (IDE) supplied with Unity 2017.3 and previous versions. From Unity 2018.1 onwards, MonoDevelop is replaced by Visual Studio. More info",707],["Scripting Backend*:",707],["A framework that powers scripting in Unity. Unity supports three different scripting backends depending on target platform: Mono, .NET and IL2CPP. Universal Windows Platform, however, supports only two: .NET and IL2CPP. More info",707],["Scripting Event*:",707],["A way of allowing a user-driven callback to persist from edit time to run time without the need for additional programming and script configuration More info",707],["Scripts*:",707],["A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info",707],["Tag:",707],["A reference word which you can assign to one or more GameObjects to help you identify GameObjects for scripting purposes. For example, you might define and \"Edible\" Tag for any item the player can eat in your game. More info",707],["Test Framework,Test Runner*:",707],["The Test Framework package (formerly called the Test Runner) is a Unity tool that tests your code in both Edit mode and Play mode, and also on target platforms such as Standalone, Android, or iOS. More info",707],["Texture Format*:",707],["A file format for handling textures during real-time rendering by 3D graphics hardware, such as a graphics card or mobile device. More info",707],["",707],["",707],["Services terms",707],["Client RSA Public Key*:",707],["An optional security layer that Unity can use when communicating between Unity and Xiaomi servers. Use it to receive server callbacks for client-side receipt validation, or to integrate with Unity server APIs. More info",707],["Cloud Build*:",707],["A continuous integration service for Unity projects that automates the process of creating builds on Unity's servers. More info",707],["Services:",707],["A Unity facility that provides a growing range of complimentary services to help you make games and engage, retain and monetize audiences. More info",707],["Unity Cloud Build*:",707],["See Cloud Build",707],["Unity Cloud Diagnostics:",707],["A suite of cloud-enabled tools that help you collect and identify issues that users encounter with your apps. More info",707],["",707],["",707],["UI terms",707],["Canvas:",707],["The area that contains all UI elements in a scene. The Canvas area is shown as a rectangle in the Scene View. More info",707],["Canvas Group*:",707],["A group of UI elements within a Canvas. Use a Canvas Group to control a group of UI elements collectively without needing to handle them each individually. More info",707],["Canvas Renderer*:",707],["Renders a graphical UI object contained within a Canvas. More info",707],["Canvas Scaler*:",707],["Controls the overall scale and pixel density of all UI elements in the Canvas, including font sizes and image borders. More info",707],["Image control:",707],["An Image control displays a non-interactive image to the user, such as a decoration and icon. You can change the image from a script to reflect changes in other controls. More info",707],["Interactable:",707],["A UI component property that determines whether the component can accept input. More info",707],["UI Mask*:",707],["A visual component that lets you restrict images from view to only a small section of an image. For instance, you can apply a Mask to a Panel UI element to block all child images from view. More info",707],["Raw image:",707],["A Visual UI Component that displays a non-interactive image to the user. This can be used for decoration, icons, and so on, and the image can also be changed from a script to reflect changes in other controls. More info",707],["ScrollView*:",707],["A UI Control which displays a large set of Controls in a viewable area that you can see by using a scrollbar. More info",707],["Shadow:",707],["A UI component that adds a simple outline effect to graphic components such as Text or Image. It must be on the same GameObject as the graphic component. More info",707],["Text:",707],["A non-interactive piece of text to the user. This can be used to provide captions or labels for other GUI controls or to display instructions or other text. More info",707],["TextField control*:",707],["A TextField control displays a non-interactive piece of text to the user, such as a caption, label for other GUI controls, or instruction. More info",707],["Text Input Field*:",707],["A field that allows the user to input a Text string More info",707],["Toggle:",707],["A checkbox that allows the user to switch an option on or off. More info",707],["Toolbar*:",707],["A row of buttons and basic controls at the top of the Unity Editor that allows you to interact with the Editor in various ways (e.g. scaling, translation). More info",707],["UI*:",707],["(User Interface) Allows a user to interact with your application. Unity currently supports three UI systems. More info",707],["Visual Component*:",707],["A component that enables you to easily create GUI-specific functionality. More info",707],["Visual tree*:",707],["An object graph, made of lightweight nodes, that holds all the elements in a window or panel. It defines every UI you build with the UI Toolkit.",707],["Visual element*:",707],["A node of a visual tree that instantiates or derives from the C# VisualElement class. You can style the look, define the behaviour, and display it on screen as part of the UI. More info",707],["",707],["Creating shaders that support GPU instancing",708],["This page contains information on how to add GPU instancing support to a custom Unity shader. It first explains the shader keywords, variables, and functions custom Unity shaders require to support GPU instancing. Then it includes examples of how to add per-instance data to both surface shaders and vertex/fragment shaders.",708],["Render pipeline compatibility",708],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",708],["-------------------------------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",708],["Custom GPU instanced shaders Yes No No No ",708],["Shader modifications",708],["This section contains information about shader additions that relate to GPU instancing.",708],["Addition Description ",708],["------------------------------------------------------------ ------------------------------------------------------------ ",708],["#pragma multi_compile_instancing Generates instancing variants. This is required for fragment and vertex shaders. It is optional for Surface Shaders. ",708],["#pragma instancing_options Specifies options that Unity uses for instances. For information on the option switches available, see #pragma instancing_options. ",708],["UNITY_VERTEX_INPUT_INSTANCE_ID Defines an instance ID in the vertex shader input/output structure. To use this macro, enable the INSTANCING_ON shader keyword. Otherwise, Unity doesn't set up the instance ID.To access the instance ID, use vertexInput.instanceID inside an #ifdef INSTANCING_ON block. If you don't use this block, variants fail to compile. ",708],["UNITY_INSTANCING_BUFFER_START(bufferName) Declares the start of a per-instance constant buffer named bufferName. Use this macro with UNITY_INSTANCING_BUFFER_END to wrap declarations of the properties that you want to be unique to each instance. Declare properties inside the buffer using UNITY_DEFINE_INSTANCED_PROP. ",708],["UNITY_INSTANCING_BUFFER_END(bufferName) Declares the end of a per-instance constant buffer named bufferName. Use this macro with UNITY_INSTANCING_BUFFER_START to wrap declarations of the properties that you want to be unique to each instance. Declare properties inside the buffer using UNITY_DEFINE_INSTANCED_PROP. ",708],["UNITY_DEFINE_INSTANCED_PROP(type, propertyName) Defines a per-instance shader property with the specified type and name. In the examples below, the _Color property is unique. ",708],["UNITY_SETUP_INSTANCE_ID(v); Allows shader functions to access the instance ID. For vertex shaders, this macro is required at the beginning. For fragment shaders, this addition is optional. For an example, see Vertex and fragment shader. ",708],["UNITY_TRANSFER_INSTANCE_ID(v, o); Copies the instance ID from the input structure to the output structure in the vertex shader. Use this macro if you need to access per-instance data in the fragment shader. ",708],["UNITY_ACCESS_INSTANCED_PROP(bufferName, propertyName) Accesses a per-instance shader property in an instancing constant buffer. Unity uses the instance ID to index into the instance data array. bufferName must match the name of the constant buffer that contains the specified property. This macro compiles differently for INSTANCING_ON and non-instancing variants. ",708],["When you use multiple per-instance properties, you don’t need to fill all of them in MaterialPropertyBlock objects. Also, if one instance lacks a property, Unity takes the default value from the referenced material. If the material doesn't have a default value for the property, Unity sets the value to 0. Don't put non-instanced properties in the MaterialPropertyBlock, because this disables instancing. Instead, create different materials for them.",708],["",708],["Instancing_options switches",708],["The #pragma instancing_options directive can use the following switches:",708],["Switch Description ",708],["-------------------------------------------------- ------------------------------------------------------------ ",708],["forcemaxcount:batchSize and maxcount:batchSize On most platforms, Unity automatically calculates the instancing data array size. It divides the maximum constant buffer size on the target device with the size of the structure that contains all per-instance properties. Generally, you don’t need to worry about the batch size. However, some platforms require a fixed array size. To specify the batch size for those platforms, use the maxcount option. Other platforms ignore this option. If you want to force a batch size for all platforms, use forcemaxcount. This is useful when, for example, your project uses RenderMeshInstanced to issue draw calls with 256 instanced sprites. The default value for the two options is 500. ",708],["assumeuniformscaling Instructs Unity to assume that all the instances have uniform scalings (the same scale for all X, Y, and Z axes). ",708],["nolodfade Makes Unity not apply GPU instancing to LOD fade values. ",708],["nolightprobe Prevents Unity from applying GPU instancing to Light Probe values and their occlusion data. Setting this option to ON can improve performance if your project doesn't contain GameObjects that use both GPU instancing and Light Probes. ",708],["nolightmap Prevents Unity from applying GPU instancing to lightmap atlas information values. Setting this option to ON can improve performance if your project doesn't contain GameObjects that use both GPU instancing and lightmaps. ",708],["procedural:FunctionName Generates an additional variant for use with Graphics.RenderMeshIndirect. At the beginning of the vertex shader stage, Unity calls the function specified after the colon. To set up the instance data manually, add per-instance data to this function in the same way you would normally add per-instance data to a shader. Unity also calls this function at the beginning of a fragment shader if any of the fetched instance properties are included in the fragment shader. ",708],["Using shader variants with GPU instancing",708],["Unity generates Surface shaders with instancing variants by default, unless you specify noinstancing in the #pragma directive. Unity ignores uses of #pragma multi_compile_instancing in a surface shader.",708],["Unity’s Standard and StandardSpecular shaders have instancing support by default, but with no per-instance properties other than the transform.",708],["If your scene contains no GameObjects with GPU instancing enabled, then Unity strips instancing shader variants. To override the stripping behaviour:",708],["Open Project Settings (menu: Edit > Project Settings).",708],["Go to Graphics.",708],["In the Shader Stripping section, set Instancing Variants to Keep All.",708],["Adding per-instance properties to GPU instancing shaders",708],["By default, Unity GPU instances GameObjects with different Transforms in each instanced draw call. To add more variation to the instances, modify the shader to add per-instance properties such as color. You can do this both in surface shaders and in vertex/fragment shaders.",708],["Custom shaders don't need per-instance data, but they do require an instance ID because world matrices need one to function correctly. Surface shaders automatically set up an instance ID, but custom vertex and fragment shaders don't. To set up the ID for custom vertex and fragment shaders, use UNITY_SETUP_INSTANCE_ID at the beginning of the shader. For an example of how to do this, see Vertex and fragment shader.",708],["When you declare an instanced property, Unity gathers all the property values from the MaterialPropertyBlock objects set on GameObjects into a single draw call. For an example of how to use MaterialPropertyBlock objects to set per-instance data at runtime, see Changing per-instance data at runtime.",708],["When adding per-instance data to multi-pass shaders, keep the following in mind:",708],["If a multi-pass shader has more than two passes, Unity only instances the first pass. This is because Unity renders later passes together for each object, which forces material changes.",708],["If you use the Forward rendering path in the Built-in Render Pipeline, Unity can't efficiently instance objects that are affected by multiple lights. Unity can only use instancing effectively for the base pass, not for additional passes. For more information about lighting passes, see documentation on Forward Rendering and Pass Tags.",708],["Surface shader example",708],["The following example demonstrates how to create an instanced Surface Shader with different color values for each instance.",708],["Shader \"Custom/InstancedColorSurfaceShader\"",708],["Properties",708],["_Color (\"Color\", Color) = (1,1,1,1)",708],["_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {}",708],["_Glossiness (\"Smoothness\", Range(0,1)) = 0.5",708],["_Metallic (\"Metallic\", Range(0,1)) = 0.0",708],["SubShader",708],["Tags { \"RenderType\"=\"Opaque\" }",708],["LOD 200",708],["CGPROGRAM",708],["// Uses the physically based standard lighting model with shadows enabled for all light types.",708],["pragma surface surf Standard fullforwardshadows",708],["// Use Shader model 3.0 target",708],["pragma target 3.0",708],["sampler2D _MainTex;",708],["struct Input",708],["float2 uv_MainTex;",708],["};",708],["half _Glossiness;",708],["half _Metallic;",708],["UNITY_INSTANCING_BUFFER_START(Props)",708],["UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color)",708],["UNITY_INSTANCING_BUFFER_END(Props)",708],["void surf (Input IN, inout SurfaceOutputStandard o) {",708],["fixed4 c = tex2D (MainTex, IN.uvMainTex) * UNITY_ACCESS_INSTANCED_PROP(Props, _Color);",708],["o.Albedo = c.rgb;",708],["o.Metallic = _Metallic;",708],["o.Smoothness = _Glossiness;",708],["o.Alpha = c.a;",708],["ENDCG",708],["FallBack \"Diffuse\"",708],["",708],["Vertex and fragment shader example",708],["The following example demonstrates how to create an instanced vertex and fragment shader with different color values for each instance. Unlike the surface shader, when you create the vertex and fragment shader you must use UNITY_SETUP_INSTANCE_ID to manually set up an instance ID.",708],["Shader \"Custom/SimplestInstancedShader\"",708],["Properties",708],["_Color (\"Color\", Color) = (1, 1, 1, 1)",708],["SubShader",708],["Tags { \"RenderType\"=\"Opaque\" }",708],["LOD 100",708],["Pass",708],["CGPROGRAM",708],["pragma vertex vert",708],["pragma fragment frag",708],["pragma multi_compile_instancing",708],["include \"UnityCG.cginc\"",708],["struct appdata",708],["float4 vertex : POSITION;",708],["UNITY_VERTEX_INPUT_INSTANCE_ID",708],["};",708],["struct v2f",708],["float4 vertex : SV_POSITION;",708],["UNITY_VERTEX_INPUT_INSTANCE_ID // use this to access instanced properties in the fragment shader.",708],["};",708],["UNITY_INSTANCING_BUFFER_START(Props)",708],["UNITY_DEFINE_INSTANCED_PROP(float4, _Color)",708],["UNITY_INSTANCING_BUFFER_END(Props)",708],["v2f vert(appdata v)",708],["v2f o;",708],["UNITY_SETUP_INSTANCE_ID(v);",708],["UNITY_TRANSFER_INSTANCE_ID(v, o);",708],["o.vertex = UnityObjectToClipPos(v.vertex);",708],["return o;",708],["fixed4 frag(v2f i) : SV_Target",708],["UNITY_SETUP_INSTANCE_ID(i);",708],["return UNITY_ACCESS_INSTANCED_PROP(Props, _Color);",708],["ENDCG",708],["",708],["Changing per-instance data at runtime example",708],["The following example demonstrates how to use MaterialPropertyBlock objects to set per-instance data for a group of GameObjects at runtime. It sets the _Color property from the above shader examples to a random color.",708],["Important**: MaterialPropertyBlocks break SRP Batcher compatibility. For more information, see GPU instancing: Requirements and Compatibility.",708],["using UnityEngine;",708],["public class MaterialPropertyBlockExample : MonoBehaviour",708],["public GameObject[] objects;",708],["void Start()",708],["MaterialPropertyBlock props = new MaterialPropertyBlock();",708],["MeshRenderer renderer;",708],["foreach (GameObject obj in objects)",708],["float r = Random.Range(0.0f, 1.0f);",708],["float g = Random.Range(0.0f, 1.0f);",708],["float b = Random.Range(0.0f, 1.0f);",708],["props.SetColor(\"_Color\", new Color(r, g, b));",708],["renderer = obj.GetComponent();",708],["renderer.SetPropertyBlock(props);",708],["GPU instancing",709],["GPU instancing is a draw call optimization method that renders multiple copies of a mesh with the same material in a single draw call. Each copy of the mesh is called an instance. This is useful for drawing things that appear multiple times in a scene, for example, trees or bushes.",709],["GPU instancing renders identical meshes in the same draw call. To add variation and reduce the appearance of repetition, each instance can have different properties, such as Color or Scale. Draw calls that render multiple instances appear in the Frame Debugger as Render Mesh (instanced).",709],["",709],["Requirements and compatibility",709],["This section includes information about the platform, render pipeline, and SRP Batcher compatibility of GPU instancing.",709],["Platform compatibility",709],["GPU instancing is available on every platform except WebGL 1.0.",709],["Render pipeline compatibility",709],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",709],["------------------ ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",709],["GPU instancing Yes Yes (1) Yes (1) Yes (1) ",709],["Notes**:",709],["Only if the shader isn't compatible with the SRP Batcher.",709],["",709],["SRP Batcher",709],["GPU instancing isn't compatible with the SRP Batcher. The SRP Batcher takes priority over GPU instancing. If a GameObject is compatible with the SRP Batcher, Unity uses the SRP Batcher to render it, not GPU instancing. For more information about optimization method priority, see Optimization priority.",709],["If your project uses the SRP Batcher and you want to use GPU instancing for a GameObject, you can do one of the following:",709],["Use Graphics.RenderMeshInstanced. This API bypasses the use of GameObjects and uses the specified parameters to directly draw a mesh on screen.",709],["Manually remove SRP Batcher compatibility. For information on how to do this, see Intentionally removing compatibility.",709],["Using GPU instancing",709],["Unity uses GPU instancing for GameObjects that share the same mesh and material. To instance a mesh and material:",709],["The material's shader must support GPU instancing. Unity's Standard Shader supports GPU instancing, as do all surface shaders. To add GPU instancing support to any other shader, see Creating shaders that support GPU instancing.",709],["The mesh must come from one of the following sources, grouped by behavior:",709],["A MeshRenderer component or a Graphics.RenderMesh call.",709],["Behavior: Unity adds these meshes to a list and then checks to see which meshes it can instance.",709],["Unity does not support GPU instancing for SkinnedMeshRenderers or MeshRenderer components attached to GameObjects that are SRP Batcher compatible. For more information, see SRP Batcher compatibility.",709],["A Graphics.RenderMeshInstanced or Graphics.RenderMeshIndirect call. These methods render the same mesh multiple times using the same shader. Each call to these methods issues a separate draw call. Unity does not merge these draw calls.",709],["To use GPU instancing for a material, select the Enable GPU Instancing option in the Inspector.",709],["Lighting",709],["GPU instancing supports Unity's Baked Global Illumination system. Unity Standard Shaders and surface shaders support GPU instancing and Unity's Baked Global Illumination system by default.",709],["Each GPU instance supports global illumination from one of the following sources:",709],["Any number of Light Probes.",709],["One lightmap.",709],["Note: An instance can use multiple atlas regions in the lightmap.",709],["One Light Probe Proxy Volume(LPPV) component.",709],["Note: You must bake the LPPV for the space volume that contains all the instances.",709],["GPU instancing automatically works with:",709],["Dynamic Mesh Renderers affected by Light Probes.",709],["Static Mesh Renderers you bake to the same lightmap texture. A Mesh Renderer is static in this context if it includes Contribute GI in its Static Editor Flags.",709],["To enable Light Probe rendering for Graphics.RenderMeshInstanced, provide a MaterialPropertyBlock that includes the Probe data. For more information and code examples, see LightProbes.CalculateInterpolatedLightAndOcclusionProbes.",709],["Alternatively, you can pass an LPPV component reference and LightProbeUsage.UseProxyVolume to Graphics.RenderMeshInstanced. When you do this, all instances sample the volume for the L0 and L1 bands of the Light Probe data. If you want to supplement L2 data and occlusion data, use a MaterialPropertyBlock. For more information, see Light Probes: Technical Information.",709],["",709],["Performance implications",709],["Meshes that have a low number of vertices can’t be processed efficiently using GPU instancing because the GPU can’t distribute the work in a way that fully uses the GPU’s resources. This processing inefficiency can have a detrimental effect on performance. The threshold at which inefficiencies begin depends on the GPU, but as a general rule, don't use GPU instancing for meshes that have fewer than 256 vertices.",709],["If you want to render a mesh with a low number of vertices many times, best practice is to create a single buffer that contains all the mesh information and use that to draw the meshes.",709],["2017-10-24 ",709],["Enable instancing checkbox guidance, DrawMeshInstancedIndirect, #pragma multi-compile added in 5.6",709],["Shader warm up for GPU instancing added in 2017.3 NewIn20173",709],["Global Illumination (GI) support in GPU instancing added in 2018.1 NewIn20181",709],["The Progressive GPU Lightmapper (preview)",710],["Note:** This is a preview feature and is subject to change. If you have Scenes that use this feature, you might need to update them in a future release. Do not rely on this feature for full-scale production until it is officially released.",710],["The Progressive GPU Lightmapper is a backend for the Progressive Lightmapper which uses your computer's GPU and Dedicated Video Ram (VRAM) to generate baked lightmaps and Light Probes.",710],["Hardware and software requirements",710],["In order to use the Progressive GPU Lightmapper, your computer must meet these minimum specifications:",710],["At least one GPU with OpenCL 1.2 support",710],["At least 4GB of VRAM dedicated to that GPU",710],["A CPU that supports SSE4.1 instructions",710],["If the Scene you are baking requires more VRAM than is available on the designated GPU, bake times can significantly increase. See Performance for information to help you reduce the time it takes to bake your Scene.",710],["The Progressive GPU Lightmapper does not support CPU OpenCL devices.",710],["Performance",710],["The Progressive GPU Lightmapper bakes faster than the Progressive CPU Lightmapper, unless lightmapper tiling is active.",710],["However, the specifications of the GPU you use to bake and the amount of VRAM dedicated to that GPU both influence your experience of the lightmapper's performance.",710],["Other applications competing for GPU resources also have an impact on baking performance. Depending on your hardware vendor, reductions in the amount of VRAM available to Unity can slow down the bake, cause it to fail, or even result in the Progressive GPU Lightmapper falling back to the CPU if the GPU cannot meet minimum memory requirements. Closing other applications while you are working with this functionality can improve stability and performance.",710],["In order to achieve results of the same quality as the Progressive CPU Lightmapper, the Progressive GPU Lightmapper needs up to four times more indirect light samples. The Progressive CPU Lightmapper uses an approach called branched path tracing, which launches more light rays at each bounce. The branched path tracing approach is not suitable for GPUs.",710],["Unity provides a spreadsheet to help you determine how much memory the Progressive GPU Lightmapper needs to bake your scene. For more information see the Progressive GPU Lightmapper Memory Spreadsheet .",710],["Preventing baking speed slowdowns caused by lightmapper tiling",710],["The Progressive GPU Lightmapper includes a feature called lightmapper tiling. Lightmapper tiling prevents the Progressive GPU Lightmapper from falling back to the Progressive CPU Lightmapper when Unity has used up its GPU memory allocation. Instead, Unity allocates some temporary memory on the CPU, then bakes your lighting in tiles that are sized to match the amount of GPU memory available. Lightmapper tiling is active only when Unity can’t access enough GPU memory to bake the entire lightmap. The Progressive CPU Lightmapper does not include a tiling feature.",710],["When lightmapper tiling is active, progressive updates cease in the Scene view and the baking process. However, the Progressive updates setting in the Lighting window does not visibly deactivate. Baking a scene when lightmapper tiling is active is slower than baking the same scene without tiling.",710],["It is not possible to disable tiling. However, you can reduce the likelihood of its activation by using the following strategies:",710],["Increase the amount of GPU memory available for Unity to use.",710],["Disable ambient occlusion. Open the Lighting window (menu: Window > Rendering > Lighting). In the Lightmapping Settings interface, disable Ambient Occlusion.",710],["Bake only indirect light. Set all your light sources to Realtime or Mixed. Make sure that no light sources are set to Baked. If you use the mixed approach, set Lighting > Mixed Lighting > Lighting mode to Baked Indirect.",710],["Reduce the level of anti-aliasing in your project. Navigate to Project Settings > Quality and choose an option that takes fewer samples. For example, you might switch from 8x Multi Sampling to 2x Multi Sampling.",710],["Reduce the quality of your lightmaps in your Lightmap Parameters Asset. Open the Lighting window, expand Lightmapping settings, and select a lower-resolution option for Lightmap parameters.",710],["Reduce your lightmap resolution.",710],["Use a CPU-based denoiser. To choose a denoiser, open the Lighting window, expand Lightmapping settings, set Filtering to Advanced and then select the denoiser for each type of lightmap target (Direct and Indirect). Only OpenImageDenoise is CPU-based. RadeonPro and Optix are GPU-based, but RadeonPro uses a lot more GPU memory.",710],["Platform-specific limitations",710],["On macOS it is more difficult to determine how much memory is available. As a result, fallback to CPU is more likely on this platform and it is a best practice to follow instructions for optimizing your bake speed.",710],["How to optimize your bake speed",710],["There are several ways you can reduce bake times and avoid situations where bakes exceed the VRAM available to the GPU designated for baking.",710],["Close other GPU-accelerated applications.",710],["GPU-accelerated 2D image editing and 3D modelling software uses VRAM. Turn off accelerated graphics functionality or quit these applications.",710],["Switch to a CPU-based denoiser.",710],["GPU-based denoisers also use VRAM capacity. Switch to a CPU-based option, like Intel Open Image, which uses system RAM instead.",710],["Use Light Probes for smaller GameObjects.",710],["GameObjects such as debris or small props use up space in lightmaps but might not contribute significantly to the look of a scene. To optimize bake speed, disable Contribute Global Illumination for these GameObjects' Mesh Renderers and light them with Light Probes instead.",710],["Designate separate GPUs for rendering and baking.",710],["If your computer has more than one GPU, you can designate one for rendering and one for baking. See Configure GPU selection below.",710],["Use a lower number of Anti-aliasing samples.",710],["The default value for this setting in the Lightmap Parameters Asset is 8. When you increase it, Unity uses more VRAM. When you are using a lightmap size of 4096 or above, this can quickly exceed the memory of many consumer GPUs.",710],["Configure GPU selection ",710],["If you have at least two GPUs, you can specify one GPU for rendering the Scene and another for baking lighting. This might be desirable in cases where there is insufficient VRAM available for the default GPU to both render your scene and bake it using the Progressive GPU Lightmapper.",710],["",710],["To change which GPU Unity uses for baking: ",710],["Open the Lighting window (menu: Window > Rendering > Lighting).",710],["Navigate to the Workflow Settings section.",710],["Use the GPU Baking Device drop-down menu to select a GPU.",710],["Gradle templates",711],["Gradle templates configure how to build an Android application using Gradle. Each Gradle template represents a single Gradle project. Gradle projects can include, and depend on, other Gradle projects.",711],["Gradle template files",711],["A Gradle template consists of the following files:",711],["File Location Contains ",711],["---------------------------- ---------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ",711],["baseProjectTemplate.gradle In the exported project, root/build.gradle folder Configuration information that affects all modules in the final Gradle project. It specifies which Android Gradle Plugin version to use and locations of java plugins. The locations are a combination of online repositories and java plugins inside of this project. ",711],["launcherTemplate.gradle In the exported project, root/launcher/build.gradle folder Instructions on how to build the Android application. This includes bundling, signing, and whether to split the apk. It depends on the unityLibrary project and outputs either an .apk file or an app bundle. ",711],["mainTemplate.gradle In the exported project, root/unityLibrary/build.gradle folder Instructions on how to build Unity as a Library. This outputs an .aar file. You can override the Unity template with a custom template in the Unity Editor. Refer to the Providing a custom Gradle build template section on this page for more details. ",711],["libTemplate.gradle Varies If an Android Library Project plug-in doesn't include a build.gradle file, Unity uses the libTemplate.gradle file as a template to generate one. After Unity generates the build.gradle file, or if one already exists in the plug-in's directory, Unity copies the plug-in into the Gradle project. ",711],["settingsTemplate.gradle In the exported project, root/settings.gradle file Specifies the names of modules that the Gradle build system should include when it builds the project. You can override the Unity template with a custom template in the Unity Editor. Refer to the Providing a custom Gradle build template section on this page for more details. ",711],["gradleTemplate.properties In the exported project, root/gradle.properties file Configures the Gradle build system and specifies properties such as the size of the Java virtual machine (JVM) heap ",711],["",711],["Using a custom Gradle template",711],["To have more control over the Gradle project files that Unity produces, you can override Unity's default Gradle template files. To do this:",711],["Go to Edit > Project Settings to open the Project Settings window.",711],["Select the Player tab, then open Android Player Settings:",711],["In the Publishing Settings section, enable the checkbox that corresponds to the Gradle project file type you want to create a custom template for. This creates a Gradle project template file and displays the path to the file.",711],["Modify the template file to control the format and contents of the final Gradle project file.",711],["Template variables",711],["You can use the following variables in custom Gradle template files:",711],["Variable Description ",711],["--------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ",711],["DEPS The list of project dependencies. This is the list of libraries that the project uses. ",711],["APIVERSION The API version to build for. Unity sets the and TARGETSDKVERSION to the same value (Target API Level in the Android Player Settings). ",711],["MINSDKVERSION The minimum API version that supports the application. ",711],["BUILDTOOLS The SDK build tools to use. ",711],["TARGETSDKVERSION The API version to target. Unity sets the and APIVERSION to the same value (Target API Level in the Android Player Settings). ",711],["APPLICATIONID Android Application ID. For example, com.mycompany.myapp. ",711],["MINIFY_DEBUG Indicates whether to minify debug builds. ",711],["PROGUARD_DEBUG Indicates whether to use ProGuard for minification in debug builds. ",711],["MINIFY_RELEASE Indicates whether to minify release builds. ",711],["PROGUARD_RELEASE Indicates whether to use ProGuard for minification in release builds. ",711],["USER_PROGUARD Specifies a custom ProGuard file to use for minification. ",711],["SIGN Complete the signingConfigs section if this build is signed. ",711],["SIGNCONFIG Indicates whether the build is signed. If this property is set to signingConfig.release, the build is signed. ",711],["DIR_GRADLEPROJECT The directory where Unity creates the Gradle project. ",711],["DIR_UNITYPROJECT The directory of your Unity project. ",711],["PLAY_ASSET_PACKS Specifies the asset packs to include in your application. ",711],["Custom settingsTemplate.gradle files can also contain the following variables:",711],["Variable Description ",711],["------------ ---------------------------------------------------------------------- ",711],["INCLUDES The list of Android Library plug-ins to include in the Gradle project. ",711],["Custom gradleTemplate.properties files can also contain the following variables:",711],["Variable Description ",711],["------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ",711],["JVM_HEAP_SIZE The maximum size of the Java virtual machine (JVM) heap. ",711],["STREAMING_ASSETS The list of files in the Steaming Assets folder that Gradle shouldn't compress. ",711],["ADDITIONAL_PROPERTIES Contains additional properties for the application. This includes: • The Gradle template version.• The path to the Unity project.• If the application uses the Android App Bundle publishing format, a flag that indicates to keep native libraries compressed. ",711],["Modifying the exported Gradle project using C#",711],["To modify the Gradle project after Unity assembles it, create a class that inherits from IPostGenerateGradleAndroidProject and override the OnPostGenerateGradleAndroidProject function. This function receives the path to the unityLibrary module as a parameter and you can use it to reach the application's manifest and resources through C# scripting.",711],["Warning**: Unity now uses an incremental build pipeline which means Unity reuses the same Gradle project for consecutive builds. This means that any modifications you do using this API accumulate since Unity no longer creates a new Gradle project for every build. For example, if you use this API to add an additional file to the Gradle project, the first build works as expected, but during the second build the file already exists. A second example is if you use this API to add a permission to a particular file. Each successive build adds another entry for the permission. It is crucial to make sure that modifications you want to make aren't already present in the build.",711],["Color",712],["This section contains information on working with color in Unity.",712],["Page Description ",712],["",712],["Color spaces Working with linear and gamma color space in Unity. ",712],["High Dynamic Range (HDR) Working with HDR in Unity. ",712],["Graphics performance and profiling",713],["This section contains information on understanding and improving rendering performance.",713],["Page Description ",713],["",713],["Graphics performance fundamentals The fundamentals of understanding and improving rendering performance in Unity. ",713],["Optimizing draw calls An introduction to draw calls, and the different ways of reducing their performance impact. ",713],["The Rendering Statistics window How to use the Rendering Statistics window. ",713],["The Frame Debugger window How to use the Frame Debugger window. ",713],["Further resources",713],["Graphics tiers",714],["In the Built-in Render Pipeline, you can use graphics tiers to apply different graphics settings when your application runs on hardware with different capabilities. You can use Unity's built-in tier settings to configure common settings, or you can define custom behaviors in your own shader code or C# code.",714],["Note:** This feature is only supported in the Built-in Render Pipeline. In other render pipelines, Unity still examines the hardware on startup and stores its value in Graphics.activeTier; however, the value of this field has no effect, and Unity does not perform any other operations relating to graphics tiers.",714],["Graphics tiers overview",714],["When Unity first loads your application, it examines the hardware and graphics API and determines which graphics tier the current environment corresponds to.",714],["The graphics tiers are:",714],["Value Hardware Corresponding GraphicsTier enum value **Corresponding shader keyword",714],["",714],["",714],["1 Android: devices that only support OpenGL ES 2iOS: iPhones before iPhone 5S (not including 5S, but including 5C), iPods up to and including 5th generation, iPads up to 4th generation, iPad mini first generationDesktop: DirectX 9XR: HoloLens Tier1 UNITY_HARDWARE_TIER1 ",714],["2 Android: devices that support OpenGL ES 3, devices that support VulkaniOS: iPhones starting from iPhone 5S, iPad Air, iPad mini 2nd generation, iPod 6th generation, AppleTVWebGL: all devices Tier2 UNITY_HARDWARE_TIER2 ",714],["3 Desktop: OpenGL, Metal, Vulkan, DirectX 11+ Tier3 UNITY_HARDWARE_TIER3 ",714],["Using graphics tiers with C# scripts",714],["Unity stores the value of the current graphics tier in Graphics.activeTier, represented by a GraphicsTier enum. To add custom behavior based on the current graphics tier, you can test against this value.",714],["To override the value of Graphics.activeTier, set it directly. Note that you must do this before Unity loads any shaders that vary based on graphics tier. A good place to set this value is in a pre-loading scene, before you load your main scene.",714],["",714],["Tier settings",714],["In the Unity Editor, you can configure tier settings. Tier settings allow you to enable or disable graphics features for each tier.",714],["Tier settings work by changing #define preprocessor directives in Unity's internal shader code. These changes automatically affect prebuilt shaders for the Built-in Render Pipeline (such as the Standard Shader), and the internal shader library code for Surface Shaders. You can also add code to your own hand-coded shaders that changes their behavior based on tier settings. For more information, see Graphics tiers and shader variants.",714],["The default tier settings are suitable for most use cases. You should only change them if you are experiencing performance issues, or if you want to enable features on lower-end devices that are not enabled by default.",714],["You can configure different tier settings for each graphics tier of a given build target. You can change tier settings in the following ways:",714],["Use the Graphics Settings window, in the Tier Settings section.",714],["Use these APIs in an Editor script:",714],["You can test tier settings in the Editor. To do this, navigate to Edit > Graphics Tier and choose the tier that you want the Unity Editor to use.",714],["",714],["Graphics tiers and shader variants",714],["In the Built-in Render Pipeline, Unity can generate shader variants that correspond to graphics tiers.",714],["Note:** These tier shader variants work differently to regular shader variants. At runtime, when Unity loads a Shader object into CPU memory, it only loads the variants for the active tier; it does not load the variants for other tiers. This helps to reduce the runtime impact of tier variants.",714],["To generate tier shader variants, Unity adds this set of shader keywords to all graphics shaders:",714],["UNITY_HARDWARE_TIER1",714],["UNITY_HARDWARE_TIER2",714],["UNITY_HARDWARE_TIER3",714],["You can use these keywords in your HLSL code to write conditional behavior for lower or higher-end hardware, the same way that you would for any shader keywords. For example:",714],["if UNITY_HARDWARE_TIER1",714],["// Put code for tier 1 devices here",714],["else",714],["// Put code for other devices here",714],["endif",714],["For more information on working with shader keywords in HLSL code, see Declaring and using shader keywords in HLSL.",714],["Unity automatically generates tier shader variants based on the tier settings for the current build target, like this:",714],["If all settings for all tiers are identical, Unity does not generate any tier shader variants.",714],["If any of the settings for different tiers differ in any way, Unity generates all tier shader variants.",714],["After generating all tier shader variants, Unity identifies and deduplicates identical tier shader variants. This means that if the settings for two tiers are identical (for example, if tier 1 is different but tier 2 and tier 3 are identical to one another), then these variants do not add to the file size of your application, and the way that Unity loads tier variants means that they do not affect loading times or runtime memory usage. However, this still results in redundant compilation work.",714],["If you want to use different settings for different tiers, but you also know that this will result in redundant work - for example, if you know that your application will only ever run on tier 1 and tier 2 devices - you can use a script to strip unneeded tier variants from compilation, the same as for any other variants. For more information, see Shader variant stripping.",714],["In addition to the automatic behavior, you can also force Unity to generate tier shader variants on a per-shader basis. This is useful if you use these constants in your HLSL code and you want to be certain that Unity will compile the required variants, regardless of whether the tier settings for the current build differ from each other",714],["To manually force Unity to generate tier shader variants for a given shader, use the #pragma hardware_tier_variants preprocessor directive in your HLSL code, and specify the graphics APIs for which you want to generate per-tier variants:",714],["pragma hardware_tier_variants gles3",714],["For a list of valid graphics API names that you can use with this directive, see Targeting graphics APIs. For general information on #pragma directives, see pragma directives.",714],["Graphics",715],["Unity's graphics features let you control the appearance of your application and are highly customizable. You can use Unity’s graphics features to create beautiful, optimized graphics across a range of platforms, from mobile to high-end consoles and desktop.",715],["This section contains information on the following graphics features:",715],["\nRender pipelines\n",715],["\nCameras\n",715],["\nPost-processing\n",715],["\nLighting section\n",715],["\nMeshes, Materials, Textures, and Shaders\n",715],["\nParticle Systems\n",715],["\nCreating environments\n",715],["\nSky\n",715],["\nVisual Effects\n",715],["\nOptimizing Graphics Performance\n",715],["\nColor spaces\n",715],["More information**",715],["\nUnity Blog: How to create cinema-quality lighting in Unity\n",715],["\nUnite 2020: Evolving Game Graphics with the Universal Render Pipeline\n",715],["\nUnite 2020: Achieving high fidelity graphics for games with the HDRP \n",715],["\nCreating a Third Person Camera using Cinemachine in Unity\n",715],["\nUnity Learn Graphics tutorials\n",715],["\nUnity Support: Graphics and Shaders\n",715],["Graphics API support",716],["Unity supports DirectX, Metal, OpenGL, and Vulkan graphics APIs, depending on the availability of the API on a particular platform. Unity uses a built-in set of graphics APIs, or the graphics APIs that you select in the Editor.",716],["To use Unity’s default graphics APIs:",716],["Open the Player settings (menu: Edit > Project Settings, then select the Player category).",716],["Navigate to Other Settings and make sure Auto Graphics API is checked:",716],["When Auto Graphics API for a platform is checked, the Player build includes a set of built-in graphics APIs and uses the appropriate one at run time to produce a best case scenario.",716],["When Auto Graphics API for a platform is not checked, the Editor uses the first API in the list. So, for example, to see how your application runs on OpenGL in the Editor, move OpenGLCore to the top of the list and the Editor switches to use OpenGL rendering.",716],["To override the default graphics APIs and use an alternate graphics API for the Editor and Player, uncheck the relevant Auto Graphics API, click the plus (+) button and choose the graphics API from the drop-down menu.",716],["The graphics API at the top of the Auto Graphics API list is the default API. If the default API isn’t supported by the specific platform, Unity uses the next API in the Auto Graphics API list.",716],["For information on how graphics rendering behaves between the platforms and Shader language semantics, see Platform-specific rendering differences. Tessellation and geometry shaders are only supported by a subset of graphics APIs. This is controlled by the Shader Compilation Target level.",716],["For graphics API specific information, see documentation on Metal, DirectX and OpenGL.",716],["2018-06-02 ",716],["Extending the Built-in Render Pipeline with CommandBuffers",717],["This page contains information on using CommandBuffers in the Built-in Render Pipeline. For information on using CommandBuffers in render pipelines based on the Scriptable Rendering Pipeline, see Scheduling and executing rendering commands in the Scriptable Rendering Pipeline.",717],["CommandBuffer fundamentals",717],["A CommandBuffer holds a list of rendering commands (such as setting the render target, or drawing a given mesh). You can instruct Unity to schedule and execute those commands at various points in the Built-in Render Pipeline, which allows you to customize and extend Unity's rendering functionality.",717],["You can execute CommandBuffers immediately using the Graphics.ExecuteCommandBuffer API, or you can schedule them so that they occur at a given point in the render pipeline. To schedule them, use the Camera.AddCommandBuffer API with the CameraEvent enum, and the Light.AddCommandBuffer API with the LightEvent enum. To see when Unity executes CommandBuffers that you schedule in this way, see CameraEvent and LightEvent order of execution.",717],["For a full list of the commands that you can execute using CommandBuffers, see the CommandBuffer API documentation. Note that some commands are supported only on certain hardware; for example, the commands relating to ray tracing are supported only in DX12.",717],["Command Buffer examples",717],["The Unity blog post Extending Unity 5 rendering pipeline: Command Buffers introduces CommandBuffers in the Built-in Render Pipeline. It describes how to use CommandBuffers to achieve several different effects, and contains a sample project and example code. The project was created for an older version of Unity, but the principles are the same.",717],["",717],["CameraEvent and LightEvent event order of execution",717],["CameraEvent",717],["The order of execution for CameraEvents depends on the rendering path that your Project uses.",717],["Deferred rendering path",717],["Unity renders opaque geometry",717],["Unity resolves depth.",717],["Unity renders default reflections, and Reflection Probe reflections.",717],["Unity copies reflections to the Emissive channel of the G-buffer.",717],["Unity renders shadows. See LightEvent order of execution.",717],["Unity processes the final pass.",717],["Unity renders opaque geometry that cannot be rendered with deferred rendering.",717],["Unity renders the skybox.",717],["Unity renders halos.",717],["Unity applies opaque-only post-processing effects.",717],["Unity renders transparent geometry, and UI Canvases with a Rendering Mode of Screen Space - Camera.",717],["Unity renders lens flares.",717],["Unity applies post-processing effects.",717],["Unity renders UI Canvases with a Rendering Mode that is not Screen Space - Camera.",717],["Forward rendering path",717],["Unity renders depth for opaque geometry.",717],["Unity renders depth normals for opaque geometry.",717],["Unity renders shadows. See LightEvent order of execution.",717],["Unity renders opaque geometry.",717],["Unity renders the skybox.",717],["Unity renders halos.",717],["Unity applies opaque-only post-processing effects.",717],["Unity renders transparent geometry, and UI Canvases with a Rendering Mode of Screen Space - Camera.",717],["Unity renders lens flares.",717],["Unity applies post-processing effects.",717],["Unity renders UI Canvases with a Rendering Mode that is not Screen Space - Camera.",717],["",717],["LightEvent order of execution",717],["During the \"render shadows\" stage above, for each shadow-casting Light, Unity performs these steps:",717],["Unity renders all shadow casters for the current Pass",717],["Unity repeats the last three steps, for each Pass",717],["Unity gathers the shadow map into a screen space buffer and performs filtering",717],["Grid snapping",718],["Unity provides a visual grid in the Editor's Scene view window, which can help precisely align GameObjects by snapping (moving) them to the nearest grid location.",718],["You can snap a GameObject to a grid projected along the X, Y, or Z axes in several ways:",718],["Align selected GameObjects to the nearest grid point.",718],["Turn on grid snapping while you move, rotate, or scale a GameObject.",718],["You can also transform a GameObject in increments without aligning it with the gridlines. If you need to change how much you are moving, rotating, or scaling, you can change the increment snap values.",718],["By default, the grid is hidden, but you can make it visible and change which axis it appears along. You can customize the grid in appearance and behavior by changing the following:",718],["The size of the grid (adjust the distance between the lines).",718],["The color of the grid lines themselves.",718],["How transparent or opaque the grid lines appear.",718],["Many of these actions support keyboard shortcuts. You can see which key combinations are assigned to these actions and use the Shortcuts Manager to customize them.",718],["",718],["Grid and Snap toolbar Overlay",718],["Icon Actions ",718],["",718],[" Grid visibility Toggle grid on or offChange grid axis Change grid opacity Move grid to gizmo handle or back to origin ",718],[" Grid snapping Toggle grid snapping on or offChange grid size Align a GameObject to an axis ",718],[" Snap increment Change the default increment snap values ",718],["Note**: The settings on the Grid and Snap Overlay are global to all Scene views.",718],["Align, snap, and incremental movements",718],["This section provides information on how to perform these actions:",718],["",718],["Align (push) to the grid",718],["You can align a GameObject to either the closest grid point on a single axis, or on all axes at once.",718],["To align a GameObject to the closest point on a grid for a specific axis:",718],["In the Grid and Snap Overlays toolbar, open the grid snapping drop-down menu ().",718],["In the Align Selected section, click the X, Y, or Z button that matches the axis you want to push to.",718],["To align a GameObject on all axes at once:",718],["Select the GameObject(s) you want to align to the grid.",718],["Use the Ctrl+\\ (Windows) or Cmd+\\ (macOS) shortcut to push the GameObject(s) onto the grids on all axes.",718],["Alternatively, from the Grid and Snap Overlays toolbar, open the grid visibility drop-down menu () and in the Align Selected section, click All Axes.",718],["",718],["Activate auto-snapping",718],["To turn on automatic snapping to the grid:",718],["Activate the Move tool and make sure the handle orientation in the Tool Settings Overlay is set to Global ().",718],["Click the grid snapping icon () in the Grid and Snap toolbar Overlay. The icon is blue when activated.",718],["When you enable automatic grid snapping, the Move, Rotate, and Scale transform tools snap the selected GameObject(s) to the grid along the active gizmo axis. If you need the GameObject to move in smaller increments, you can also transform it incrementally.",718],["",718],["Move, rotate, and scale in increments",718],["To move, rotate, or scale by increment snap values:",718],["Hold down the Control key (Windows) or Command key (macOS) while using one of the transform gizmos.",718],["To change the default increment snap values:",718],["From the Grid and Snap Overlays toolbar, open the snap increment drop-down menu ().",718],["The Increment Snap section contains several properties that let you set the same value for all axes or different values:",718],["Move**: With the link icon selected, enter a uniform increment snap value for all axes, or unlink the axes and set different increment snap values in the X, Y, and Z axis properties.",718],["Rotate**: Enter a rotation increment value in degrees.",718],["Scale**: Enter a scale increment value as a scale factor. For example, if the Scale value is 2, the selected GameObject will scale at an increment of twice its original size.",718],["Customize the grid",718],["This section provides information on customizing the following:",718],["",718],["Show and hide grid lines",718],["Toggle grid visibility by clicking the grid visibility icon () on the Grid and Snap Overlay toolbar to display or hide the grid on any axis (X, Y, Z). If you are in orthographic mode (Iso), Unity chooses the view.",718],["",718],["Change the axis where the grid appears",718],["To change which axis the grid appears on:",718],["From the Grid and Snap Overlays toolbar, open the grid visibility drop-down menu ().",718],["From the Grid Plane section, select the axis you want to appear.",718],["",718],["Resize the grid",718],["You can set the size of the grid lines that display in the Scene view window. The size of the grid affects how your grid looks and how your GameObjects automatically snap to the grid, but doesn't affect how your GameObjects move, rotate, or scale in increments.",718],["If you set a size for all axes at once, a uniform, square-based, grid displays. However, you can also use different values on any of the three axes to display a non-uniform, rectangular-based, grid. By default, the grid is set to a uniform distance of 1 on all axes.",718],["To resize the grid:",718],["In the Grid and Snap overlay, select the arrow next to the Grid Snapping button to open the Grid Snapping menu.",718],["To enter a uniform value for the grid size and make all grid lines the same length:",718],["Select the link icon in the Size property.",718],["Enter a value for the X property to set the size of the grid lines on all axes.",718],["To enter non-uniform values for the grid size and specify the size of the grid lines on for each axis separately:",718],["Make sure that the link icon in the Size property is not selected.",718],["Enter a value for the X, Y, and Z properties to set the size of the grid lines on each axis.",718],["Tip**: Use these keyboard shortcuts to increase or decrease the size of the grid:",718],["To increase the grid size, press Ctrl+] (MacOS: Cmd+]).",718],["To decrease the grid size, press Ctrl+[ (MacOS: Cmd+[).",718],["",718],["Change the default color of the grid lines",718],["To change the color of the visible grid lines in the Scene view window:",718],["Open the Preferences window.",718],["Click on the Colors category from the list to see the Colors page.",718],["Select a new color using the Grid property's color picker.",718],["",718],["Change the opacity of the grid",718],["If the grid lines are too light or too dark, you can adjust them:",718],["From the Grid and Snap Overlays toolbar, open the grid visibility drop-down menu ().",718],["Adjust the Opacity using the slider.",718],["",718],["Move the grid to the handle of a GameObject",718],["From the grid visibility drop-down menu () in the Grid and Snap Overlay toolbar, use the Move To section to move the grid to the handle of the selected GameObject (Handle) or back to the default position (Origin).",718],["",718],["Reset values and settings to default",718],["To reset the grid axis and opacity settings to their defaults:",718],["From the Grid and Snap Overlays toolbar, open the grid visibility drop-down menu ().",718],["Click the More menu (⋮) and then click Reset.",718],["To reset the size of the grid to the default:",718],["From the Grid and Snap Overlays toolbar, open the grid snapping drop-down menu ().",718],["Click the More menu (⋮) and then click Reset.",718],["To reset the increment snap values to the default:",718],["From the Grid and Snap Overlays toolbar, open the snap increment drop-down menu ().",718],["Click the More menu (⋮) and then click Reset.",718],["Only the values under the Increment Snap section return to their original default values.",718],["",718],["Shortcut defaults",718],["You can perform the following actions with these default Unity shortcuts:",718],["Action Default shortcut ",718],["Increase Grid Size Ctrl+] (Windows) or Command+] (macOS) ",718],["Decrease Grid Size Ctrl+[ (Windows) or Command+[ (macOS) ",718],["Push to Grid (Align Selection to Grid) Ctrl+\\ (Windows) or Command+\\ (macOS) ",718],["Reset Grid (no shortcut by default) ",718],["To change these default keyboard shortcuts, use the Shortcuts Manager.",718],["Native grid improvements updated in [2019.3] (https://docs.unity3d.com/2019.3/Documentation/Manual/30_search.html?q=newin20193) NewIn20193",718],["Grid and snap moved to Overlays toolbar updated in [2021.2] (https://docs.unity3d.com/2021.2/Documentation/Manual/30_search.html?q=newin20212) NewIn20212",718],["IMGUI Basics",719],["This section will explain the bare necessities for scripting Controls with Unity's Immediate Mode GUI system (IMGUI).",719],["Making Controls with IMGUI",719],["Unity's IMGUI controls make use of a special function called OnGUI(). The OnGUI() function gets called every frame as long as the containing script is enabled - just like the Update() function.",719],["IMGUI controls themselves are very simple in structure. This structure is evident in the following example.",719],["/* Example level loader */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour {",719],["void OnGUI ()",719],["// Make a background box",719],["GUI.Box(new Rect(10,10,100,90), \"Loader Menu\");",719],["// Make the first button. If it is pressed, Application.Loadlevel (1) will be executed",719],["if(GUI.Button(new Rect(20,40,80,20), \"Level 1\"))",719],["Application.LoadLevel(1);",719],["// Make the second button.",719],["if(GUI.Button(new Rect(20,70,80,20), \"Level 2\"))",719],["Application.LoadLevel(2);",719],["This example is a complete, functional level loader. If you copy/paste this script and attach it a GameObject, you'll see the following menu appear in when you enter Play Mode:",719],["Let's take a look at the details of the example code:",719],["The first GUI line, GUI.Box (Rect (10,10,100,90), \"Loader Menu\"); displays a Box Control with the header text \"Loader Menu\". It follows the typical GUI Control declaration scheme which we'll explore momentarily.",719],["The next GUI line is a Button Control declaration. Notice that it is slightly different from the Box Control declaration. Specifically, the entire Button declaration is placed inside an if statement. When the game is running and the Button is clicked, this if statement returns true and any code inside the if block is executed.",719],["Since the OnGUI() code gets called every frame, you don't need to explicitly create or destroy GUI controls. The line that declares the Control is the same one that creates it. If you need to display Controls at specific times, you can use any kind of scripting logic to do so.",719],["/* Flashing button example */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["void OnGUI ()",719],["if (Time.time % 2 < 1)",719],["if (GUI.Button (new Rect (10,10,200,20), \"Meet the flashing button\"))",719],["print (\"You clicked me!\");",719],["Here, GUI.Button() only gets called every other second, so the button will appear and disappear. Naturally, the user can only click it when the button is visible.",719],["As you can see, you can use any desired logic to control when GUI Controls are displayed and functional. Now we will explore the details of each Control's declaration.",719],["Anatomy of a Control",719],["There are three key pieces of information required when declaring a GUI Control:",719],["Type (Position, Content)",719],["Observe that this structure is a function with two arguments. We'll explore the details of this structure now.",719],["Type",719],["Type is the Control Type, and is declared by calling a function in Unity's GUI class or the GUILayout class, which is discussed at length in the Layout Modes section of the Guide. For example, GUI.Label() will create a non-interactive label. All the different control types are explained later, in the Controls section of the Guide.",719],["Position",719],["The Position is the first argument in any GUI Control function. The argument itself is provided with a Rect() function. Rect() defines four properties: left-most position, top-most position, total width, total height. All of these values are provided in integers, which correspond to pixel values. All UnityGUI controls work in Screen Space, which is the resolution of the published player in pixels.",719],["The coordinate system is top-left based. Rect(10, 20, 300, 100) defines a Rectangle that starts at coordinates: 10,20 and ends at coordinates 310,120. It is worth repeating that the second pair of values in Rect() are total width and height, not the coordinates where the controls end. This is why the example mentioned above ends at 310,120 and not 300,100.",719],["You can use the Screen.width and Screen.height properties to get the total dimensions of the screen space available in the player. The following example may help clarify how this is done:",719],["/* Screen.width & Screen.height example */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["void OnGUI()",719],["GUI.Box (new Rect (0,0,100,50), \"Top-left\");",719],["GUI.Box (new Rect (Screen.width - 100,0,100,50), \"Top-right\");",719],["GUI.Box (new Rect (0,Screen.height - 50,100,50), \"Bottom-left\");",719],["GUI.Box (new Rect (Screen.width - 100,Screen.height - 50,100,50), \"Bottom-right\");",719],["Content",719],["The second argument for a GUI Control is the actual content to be displayed with the Control. Most often you will want to display some text or an image on your Control. To display text, pass a string as the Content argument like this:",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["void OnGUI ()",719],["GUI.Label (new Rect (0,0,100,50), \"This is the text string for a Label Control\");",719],["To display an image, declare a Texture2D public variable, and pass the variable name as the content argument like this:",719],["/* Texture2D Content example */",719],["public Texture2D controlTexture;",719],["...",719],["void OnGUI ()",719],["GUI.Label (new Rect (0,0,100,50), controlTexture);",719],["Here is an example closer to a real-world scenario:",719],["/* Button Content examples */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["public Texture2D icon;",719],["void OnGUI ()",719],["if (GUI.Button (new Rect (10,10, 100, 50), icon))",719],["print (\"you clicked the icon\");",719],["if (GUI.Button (new Rect (10,70, 100, 20), \"This is text\"))",719],["print (\"you clicked the text button\");",719],["There is a third option which allows you to display images and text together in a GUI Control. You can provide a GUIContent object as the Content argument, and define the string and image to be displayed within the GUIContent.",719],["/* Using GUIContent to display an image and a string */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["public Texture2D icon;",719],["void OnGUI ()",719],["GUI.Box (new Rect (10,10,100,50), new GUIContent(\"This is text\", icon));",719],["You can also define a Tooltip in the GUIContent, and display it elsewhere in the GUI when the mouse hovers over it.",719],["/* Using GUIContent to display a tooltip */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["void OnGUI ()",719],["// This line feeds \"This is the tooltip\" into GUI.tooltip",719],["GUI.Button (new Rect (10,10,100,20), new GUIContent (\"Click me\", \"This is the tooltip\"));",719],["// This line reads and displays the contents of GUI.tooltip",719],["GUI.Label (new Rect (10,40,100,20), GUI.tooltip);",719],["You can also use GUIContent to display a string, an icon, and a tooltip.",719],["/* Using GUIContent to display an image, a string, and a tooltip */",719],["using UnityEngine;",719],["using System.Collections;",719],["public class GUITest : MonoBehaviour",719],["public Texture2D icon;",719],["void OnGUI ()",719],["GUI.Button (new Rect (10,10,100,20), new GUIContent (\"Click me\", icon, \"This is the tooltip\"));",719],["GUI.Label (new Rect (10,40,100,20), GUI.tooltip);",719],["The script reference page for the GUIContent constructor has some examples of its use.",719],["Controls",720],["IMGUI Control Types",720],["There are a number of different IMGUI Controls that you can create. This section lists all of the available display and interactive Controls. There are other IMGUI functions that affect layout of Controls, which are described in the Layout section of the Guide.",720],["The Label is non-interactive. It is for display only. It cannot be clicked or otherwise moved. It is best for displaying information only.",720],["/* GUI.Label example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["void OnGUI ()",720],["GUI.Label (new Rect (25, 25, 100, 30), \"Label\");",720],["The Button is a typical interactive button. It will respond a single time when clicked, no matter how long the mouse remains depressed. The response occurs as soon as the mouse button is released.",720],["Basic Usage",720],["In UnityGUI, Buttons will return true when they are clicked. To execute some code when a Button is clicked, you wrap the the GUI.Button function in an if statement. Inside the if statement is the code that will be executed when the Button is clicked.",720],["/* GUI.Button example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["void OnGUI ()",720],["if (GUI.Button (new Rect (25, 25, 100, 30), \"Button\"))",720],["// This code is executed when the Button is clicked",720],["RepeatButton is a variation of the regular Button. The difference is, RepeatButton will respond every frame that the mouse button remains depressed. This allows you to create click-and-hold functionality.",720],["Basic Usage",720],["In UnityGUI, RepeatButtons will return true for every frame that they are clicked. To execute some code while the Button is being clicked, you wrap the the GUI.RepeatButton function in an if statement. Inside the if statement is the code that will be executed while the RepeatButton remains clicked.",720],["/* GUI.RepeatButton example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["void OnGUI ()",720],["if (GUI.RepeatButton (new Rect (25, 25, 100, 30), \"RepeatButton\"))",720],["// This code is executed every frame that the RepeatButton remains clicked",720],["The TextField Control is an interactive, editable single-line field containing a text string.",720],["Basic Usage",720],["The TextField will always display a string. You must provide the string to be displayed in the TextField. When edits are made to the string, the TextField function will return the edited string.",720],["/* GUI.TextField example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private string textFieldString = \"text field\";",720],["void OnGUI ()",720],["textFieldString = GUI.TextField (new Rect (25, 25, 100, 30), textFieldString);",720],["The TextArea Control is an interactive, editable multi-line area containing a text string.",720],["Basic Usage",720],["The TextArea will always display a string. You must provide the string to be displayed in the TextArea. When edits are made to the string, the TextArea function will return the edited string.",720],["/* GUI.TextArea example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private string textAreaString = \"text area\";",720],["void OnGUI ()",720],["textAreaString = GUI.TextArea (new Rect (25, 25, 100, 30), textAreaString);",720],["The Toggle Control creates a checkbox with a persistent on/off state. The user can change the state by clicking on it.",720],["Basic Usage",720],["The Toggle on/off state is represented by a true/false boolean. You must provide the boolean as a parameter to make the Toggle represent the actual state. The Toggle function will return a new boolean value if it is clicked. In order to capture this interactivity, you must assign the boolean to accept the return value of the Toggle function.",720],["/* GUI.Toggle example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private bool toggleBool = true;",720],["void OnGUI ()",720],["toggleBool = GUI.Toggle (new Rect (25, 25, 100, 30), toggleBool, \"Toggle\");",720],["The Toolbar Control is essentially a row of Buttons. Only one of the Buttons on the Toolbar can be active at a time, and it will remain active until a different Button is clicked. This behavior emulates the behavior of a typical Toolbar. You can define an arbitrary number of Buttons on the Toolbar.",720],["Basic Usage",720],["The active Button in the Toolbar is tracked through an integer. You must provide the integer as an argument in the function. To make the Toolbar interactive, you must assign the integer to the return value of the function. The number of elements in the content array that you provide will determine the number of Buttons that are shown in the Toolbar.",720],["/* GUI.Toolbar example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private int toolbarInt = 0;",720],["private string[] toolbarStrings = {\"Toolbar1\", \"Toolbar2\", \"Toolbar3\"};",720],["void OnGUI ()",720],["toolbarInt = GUI.Toolbar (new Rect (25, 25, 250, 30), toolbarInt, toolbarStrings);",720],["The SelectionGrid Control is a multi-row Toolbar. You can determine the number of columns and rows in the grid. Only one Button can be active at time.",720],["Basic Usage",720],["The active Button in the SelectionGrid is tracked through an integer. You must provide the integer as an argument in the function. To make the SelectionGrid interactive, you must assign the integer to the return value of the function. The number of elements in the content array that you provide will determine the number of Buttons that are shown in the SelectionGrid. You also can dictate the number of columns through the function arguments.",720],["/* GUI.SelectionGrid example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private int selectionGridInt = 0;",720],["private string[] selectionStrings = {\"Grid 1\", \"Grid 2\", \"Grid 3\", \"Grid 4\"};",720],["void OnGUI ()",720],["selectionGridInt = GUI.SelectionGrid (new Rect (25, 25, 300, 60), selectionGridInt, selectionStrings, 2);",720],["The HorizontalSlider Control is a typical horizontal sliding knob that can be dragged to change a value between predetermined min and max values.",720],["Basic Usage",720],["The position of the Slider knob is stored as a float. To display the position of the knob, you provide that float as one of the arguments in the function. There are two additional values that determine the minimum and maximum values. If you want the slider knob to be adjustable, assign the slider value float to be the return value of the Slider function.",720],["/* Horizontal Slider example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private float hSliderValue = 0.0f;",720],["void OnGUI ()",720],["hSliderValue = GUI.HorizontalSlider (new Rect (25, 25, 100, 30), hSliderValue, 0.0f, 10.0f);",720],["The VerticalSlider Control is a typical vertical sliding knob that can be dragged to change a value between predetermined min and max values.",720],["Basic Usage",720],["The position of the Slider knob is stored as a float. To display the position of the knob, you provide that float as one of the arguments in the function. There are two additional values that determine the minimum and maximum values. If you want the slider knob to be adjustable, assign the slider value float to be the return value of the Slider function.",720],["/* Vertical Slider example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private float vSliderValue = 0.0f;",720],["void OnGUI ()",720],["vSliderValue = GUI.VerticalSlider (new Rect (25, 25, 100, 30), vSliderValue, 10.0f, 0.0f);",720],["The HorizontalScrollbar Control is similar to a Slider Control, but visually similar to Scrolling elements for web browsers or word processors. This control is used to navigate the ScrollView Control.",720],["Basic Usage",720],["Horizontal Scrollbars are implemented identically to Horizontal Sliders with one exception: There is an additional argument which controls the width of the Scrollbar knob itself.",720],["/* Horizontal Scrollbar example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private float hScrollbarValue;",720],["void OnGUI ()",720],["hScrollbarValue = GUI.HorizontalScrollbar (new Rect (25, 25, 100, 30), hScrollbarValue, 1.0f, 0.0f, 10.0f);",720],["The VerticalScrollbar Control is similar to a Slider Control, but visually similar to Scrolling elements for web browsers or word processors. This control is used to navigate the ScrollView Control.",720],["Basic Usage",720],["Vertical Scrollbars are implemented identically to Vertical Sliders with one exception: There is an additional argument which controls the height of the Scrollbar knob itself.",720],["/* Vertical Scrollbar example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private float vScrollbarValue;",720],["void OnGUI ()",720],["vScrollbarValue = GUI. VerticalScrollbar (new Rect (25, 25, 100, 30), vScrollbarValue, 1.0f, 10.0f, 0.0f);",720],["ScrollViews are Controls that display a viewable area of a much larger set of Controls.",720],["Basic Usage",720],["ScrollViews require two Rects as arguments. The first Rect defines the location and size of the viewable ScrollView area on the screen. The second Rect defines the size of the space contained inside the viewable area. If the space inside the viewable area is larger than the viewable area, Scrollbars will appear as appropriate. You must also assign and provide a 2D Vector which stores the position of the viewable area that is displayed.",720],["/* ScrollView example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private Vector2 scrollViewVector = Vector2.zero;",720],["private string innerText = \"I am inside the ScrollView\";",720],["void OnGUI ()",720],["// Begin the ScrollView",720],["scrollViewVector = GUI.BeginScrollView (new Rect (25, 25, 100, 100), scrollViewVector, new Rect (0, 0, 400, 400));",720],["// Put something inside the ScrollView",720],["innerText = GUI.TextArea (new Rect (0, 0, 400, 400), innerText);",720],["// End the ScrollView",720],["GUI.EndScrollView();",720],["Windows are drag-able containers of Controls. They can receive and lose focus when clicked. Because of this, they are implemented slightly differently from the other Controls. Each Window has an id number, and its contents are declared inside a separate function that is called when the Window has focus.",720],["Basic Usage",720],["Windows are the only Control that require an additional function to work properly. You must provide an id number and a function name to be executed for the Window. Inside the Window function, you create your actual behaviors or contained Controls.",720],["/* Window example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private Rect windowRect = new Rect (20, 20, 120, 50);",720],["void OnGUI ()",720],["windowRect = GUI.Window (0, windowRect, WindowFunction, \"My Window\");",720],["void WindowFunction (int windowID)",720],["// Draw any Controls inside the window here",720],["To detect if the user did any action in the GUI (clicked a button, dragged a slider, etc), read the GUI.changed value from your script. This gets set to true when the user has done something, making it easy to validate the user input.",720],["A common scenario would be for a Toolbar, where you want to change a specific value based on which Button in the Toolbar was clicked. You don't want to assign the value in every call to OnGUI(), only when one of the Buttons has been clicked.",720],["/* GUI.changed example */",720],["using UnityEngine;",720],["using System.Collections;",720],["public class GUITest : MonoBehaviour",720],["private int selectedToolbar = 0;",720],["private string[] toolbarStrings = {\"One\", \"Two\"};",720],["void OnGUI ()",720],["// Determine which button is active, whether it was clicked this frame or not",720],["selectedToolbar = GUI.Toolbar (new Rect (50, 10, Screen.width - 100, 30), selectedToolbar, toolbarStrings);",720],["// If the user clicked a new Toolbar button this frame, we'll process their input",720],["if (GUI.changed)",720],["Debug.Log(\"The toolbar was clicked\");",720],["if (0 == selectedToolbar)",720],["Debug.Log(\"First button was clicked\");",720],["else",720],["Debug.Log(\"Second button was clicked\");",720],["GUI.changed will return true if any GUI Control placed before it was manipulated by the user.",720],["Customization",721],["Customizing your IMGUI Controls",721],["Although Unity's IMGUI system is mainly intended for creating developer tools and debugging interfaces, you can still customize and style them in many ways. In Unity's IMGUI system, you can fine-tune the appearance of your Controls with many details. Control appearances are dictated with GUIStyles. By default, when you create a Control without defining a GUIStyle, Unity's default GUIStyle is applied. This style is internal in Unity and can be used in published games for quick prototyping, or if you choose not to stylize your Controls.",721],["When you have a large number of different GUIStyles to work with, you can define them all within a single GUISkin. A GUISkin is no more than a collection of GUIStyles.",721],["How Styles change the look of your GUI Controls",721],["GUIStyles are designed to mimic Cascading Style Sheets (CSS) for web browsers. Many different CSS methodologies have been adapted, including differentiation of individual state properties for styling, and separation between the content and the appearance.",721],["Where the Control defines the content, the Style defines the appearance. This allows you to create combinations like a functional Toggle which looks like a normal Button.",721],["The difference between Skins and Styles",721],["As stated earlier, GUISkins are a collection of GUIStyles. Styles define the appearance of a GUI Control. You do not have to use a Skin if you want to use a Style.",721],["A single GUISkin shown in the Inspector - observe that it contains multiple GUIStyles",721],["Working with Styles",721],["All GUI Control functions have an optional last parameter: the GUIStyle to use for displaying the Control. If this is omitted, Unity's default GUIStyle will be used. This works internally by applying the name of the control type as a string, so GUI.Button() uses the \"button\" style, GUI.Toggle() uses the \"toggle\" style, etc. You can override the default GUIStyle for a control by specifying it as the last parameter.",721],["/* Override the default Control Style with a different style in the UnityGUI default Styles */",721],["// JavaScript",721],["function OnGUI () {",721],["// Make a label that uses the \"box\" GUIStyle.",721],["GUI.Label (Rect (0,0,200,100), \"Hi - I'm a label looking like a box\", \"box\");",721],["// Make a button that uses the \"toggle\" GUIStyle",721],["GUI.Button (Rect (10,140,180,20), \"This is a button\", \"toggle\");",721],["// C#",721],["using UnityEngine;",721],["using System.Collections;",721],["public class GUITest : MonoBehaviour {",721],["void OnGUI () {",721],["// Make a label that uses the \"box\" GUIStyle.",721],["GUI.Label (new Rect (0,0,200,100), \"Hi - I'm a label looking like a box\", \"box\");",721],["// Make a button that uses the \"toggle\" GUIStyle",721],["GUI.Button (new Rect (10,140,180,20), \"This is a button\", \"toggle\");",721],["Making a public variable GUIStyle",721],["When you declare a public GUIStyle variable, all elements of the Style will show up in the Inspector. You can edit all of the different values there.",721],["/* Overriding the default Control Style with one you've defined yourself */",721],["// JavaScript",721],["var customButton : GUIStyle;",721],["function OnGUI () {",721],["// Make a button. We pass in the GUIStyle defined above as the style to use",721],["GUI.Button (Rect (10,10,150,20), \"I am a Custom Button\", customButton);",721],["// C#",721],["using UnityEngine;",721],["using System.Collections;",721],["public class GUITest : MonoBehaviour {",721],["public GUIStyle customButton;",721],["void OnGUI () {",721],["// Make a button. We pass in the GUIStyle defined above as the style to use",721],["GUI.Button (new Rect (10,10,150,20), \"I am a Custom Button\", customButton);",721],["Changing the different style elements",721],["When you have declared a GUIStyle, you can modify that style in the Inspector. There are a great number of States you can define, and apply to any type of Control.",721],["Any Control State must be assigned a Background Color before the specified Text Color will be applied.",721],["For more information about individual GUIStyles, please read the GUIStyle Component Reference page.",721],["Working with Skins",721],["For more complicated GUI systems, it makes sense to keep a collection of styles in one place. This is what a GUISkin does. A GUISkin contains multiple different Styles, essentially providing a complete face-lift to all GUI Controls.",721],["Creating a new GUISkin",721],["To create a GUISkin, select Assets->Create->GUI Skin from the menu bar. This will create a GUI Skin in your Project Folder. Select it to see all GUIStyles defined by the Skin in the Inspector.",721],["Applying the skin to a GUI",721],["To use a skin you've created, assign it to GUI.skin in your OnGUI() function.",721],["/* Make a property containing a reference to the skin you want to use */",721],["// JavaScript",721],["var mySkin : GUISkin;",721],["function OnGUI () {",721],["// Assign the skin to be the one currently used.",721],["GUI.skin = mySkin;",721],["// Make a button. This will get the default \"button\" style from the skin assigned to mySkin.",721],["GUI.Button (Rect (10,10,150,20), \"Skinned Button\");",721],["// C#",721],["using UnityEngine;",721],["using System.Collections;",721],["public class GUITest : MonoBehaviour {",721],["public GUISkin mySkin;",721],["void OnGUI () {",721],["// Assign the skin to be the one currently used.",721],["GUI.skin = mySkin;",721],["// Make a button. This will get the default \"button\" style from the skin assigned to mySkin.",721],["GUI.Button (new Rect (10,10,150,20), \"Skinned Button\");",721],["You can switch skins as much as you like throughout a single OnGUI() call.",721],["/* Example of switching skins in the same OnGUI() call */",721],["// JavaScript",721],["var mySkin : GUISkin;",721],["var toggle = true;",721],["function OnGUI () {",721],["// Assign the skin to be the one currently used.",721],["GUI.skin = mySkin;",721],["// Make a toggle. This will get the \"button\" style from the skin assigned to mySkin.",721],["toggle = GUI.Toggle (Rect (10,10,150,20), toggle, \"Skinned Button\", \"button\");",721],["// Assign the currently skin to be Unity's default.",721],["GUI.skin = null;",721],["// Make a button. This will get the default \"button\" style from the built-in skin.",721],["GUI.Button (Rect (10,35,150,20), \"Built-in Button\");",721],["// C#",721],["using UnityEngine;",721],["using System.Collections;",721],["public class GUITest : MonoBehaviour {",721],["public GUISkin mySkin;",721],["private bool toggle = true;",721],["void OnGUI () {",721],["// Assign the skin to be the one currently used.",721],["GUI.skin = mySkin;",721],["// Make a toggle. This will get the \"button\" style from the skin assigned to mySkin.",721],["toggle = GUI.Toggle (new Rect (10,10,150,20), toggle, \"Skinned Button\", \"button\");",721],["// Assign the currently skin to be Unity's default.",721],["GUI.skin = null;",721],["// Make a button. This will get the default \"button\" style from the built-in skin.",721],["GUI.Button (new Rect (10,35,150,20), \"Built-in Button\");",721],["Changing GUI Font Size",721],["This example will show you how to dynamically change the font size through code.",721],["First create a new project in Unity. Then make a C# script called Fontsize.cs and paste the following code in:",721],["// C# example",721],["using UnityEngine;",721],["using System.Collections;",721],["public class Fontsize : MonoBehaviour",721],["void OnGUI ()",721],["//Set the GUIStyle style to be label",721],["GUIStyle style = GUI.skin.GetStyle (\"label\");",721],["//Set the style font size to increase and decrease over time",721],["style.fontSize = (int)(20.0f + 10.0f * Mathf.Sin (Time.time));",721],["//Create a label and display with the current settings",721],["GUI.Label (new Rect (10, 10, 200, 80), \"Hello World!\");",721],["Save the script and attach it to an empty GameObject, click play to see the font loop through increasing and decreasing in size over time. You may notice that the font does not smoothly change size, this is becauses there is not an infinite number of font sizes.",721],["This specific example requires that the default font (Arial) is loaded and marked as dynamic. You cannot change the size of any font that is not marked as dynamic.",721],["Extending IMGUI",722],["There are a number of ways to leverage and extend the IMGUI system to meet your needs. Controls can be mixed and created, and you have a lot of leverage in dictating how user input into the GUI is processed.",722],["Compound Controls",722],["There might be situations in your GUI where two types of Controls always appear together. For example, maybe you are creating a Character Creation screen, with several Horizontal Sliders. All of those Sliders need a Label to identify them, so the player knows what they are adjusting. In this case, you could partner every call to GUI.Label() with a call to GUI.HorizontalSlider(), or you could create a Compound Control which includes both a Label and a Slider together.",722],["/* Label and Slider Compound Control */",722],["// JavaScript",722],["var mySlider : float = 1.0;",722],["function OnGUI () {",722],["mySlider = LabelSlider (Rect (10, 100, 100, 20), mySlider, 5.0, \"Label text here\");",722],["function LabelSlider (screenRect : Rect, sliderValue : float, sliderMaxValue : float, labelText : String) : float {",722],["GUI.Label (screenRect, labelText);",722],["screenRect.x += screenRect.width; // <- Push the Slider to the end of the Label",722],["sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0, sliderMaxValue);",722],["return sliderValue;",722],["// C#",722],["using UnityEngine;",722],["using System.Collections;",722],["public class GUITest : MonoBehaviour {",722],["private float mySlider = 1.0f;",722],["void OnGUI () {",722],["mySlider = LabelSlider (new Rect (10, 100, 100, 20), mySlider, 5.0f, \"Label text here\");",722],["float LabelSlider (Rect screenRect, float sliderValue, float sliderMaxValue, string labelText) {",722],["GUI.Label (screenRect, labelText);",722],["// <- Push the Slider to the end of the Label",722],["screenRect.x += screenRect.width;",722],["sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);",722],["return sliderValue;",722],["In this example, calling LabelSlider() and passing the correct arguments will provide a Label paired with a Horizontal Slider. When writing Compound Controls, you have to remember to return the correct value at the end of the function to make it interactive.",722],["Static Compound Controls",722],["By using Static functions, you can create an entire collection of your own Compound Controls that are self-contained. This way, you do not have to declare your function in the same script you want to use it.",722],["/* This script is called CompoundControls */",722],["// JavaScript",722],["static function LabelSlider (screenRect : Rect, sliderValue : float, sliderMaxValue : float, labelText : String) : float {",722],["GUI.Label (screenRect, labelText);",722],["screenRect.x += screenRect.width; // <- Push the Slider to the end of the Label",722],["sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0, sliderMaxValue);",722],["return sliderValue;",722],["// C#",722],["using UnityEngine;",722],["using System.Collections;",722],["public class CompoundControls : MonoBehaviour {",722],["public static float LabelSlider (Rect screenRect, float sliderValue, float sliderMaxValue, string labelText) {",722],["GUI.Label (screenRect, labelText);",722],["// <- Push the Slider to the end of the Label",722],["screenRect.x += screenRect.width;",722],["sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);",722],["return sliderValue;",722],["By saving the above example in a script called CompoundControls, you can call the LabelSlider() function from any other script by simply typing CompoundControls.LabelSlider() and providing your arguments.",722],["Elaborate Compound Controls",722],["You can get very creative with Compound Controls. They can be arranged and grouped in any way you like. The following example creates a re-usable RGB Slider.",722],["/* RGB Slider Compound Control */",722],["// JavaScript",722],["var myColor : Color;",722],["function OnGUI () {",722],["myColor = RGBSlider (Rect (10,10,200,10), myColor);",722],["function RGBSlider (screenRect : Rect, rgb : Color) : Color {",722],["rgb.r = GUI.HorizontalSlider (screenRect, rgb.r, 0.0, 1.0);",722],["screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping",722],["rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0, 1.0);",722],["screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping",722],["rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0, 1.0);",722],["return rgb;",722],["// C#",722],["using UnityEngine;",722],["using System.Collections;",722],["public class GUITest : MonoBehaviour {",722],["public Color myColor;",722],["void OnGUI () {",722],["myColor = RGBSlider (new Rect (10,10,200,10), myColor);",722],["Color RGBSlider (Rect screenRect, Color rgb) {",722],["rgb.r = GUI.HorizontalSlider (screenRect, rgb.r, 0.0f, 1.0f);",722],["// <- Move the next control down a bit to avoid overlapping",722],["screenRect.y += 20;",722],["rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0f, 1.0f);",722],["// <- Move the next control down a bit to avoid overlapping",722],["screenRect.y += 20;",722],["rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0f, 1.0f);",722],["return rgb;",722],["Now let's build Compound Controls on top of each other, in order to demonstrate how Compound Controls can be used within other Compound Controls. To do this, we will create a new RGB Slider like the one above, but we will use the LabelSlider to do so. This way we'll always have a Label telling us which slider corresponds to which color.",722],["/* RGB Label Slider Compound Control */",722],["// JavaScript",722],["var myColor : Color;",722],["function OnGUI () {",722],["myColor = RGBLabelSlider (Rect (10,10,200,20), myColor);",722],["function RGBLabelSlider (screenRect : Rect, rgb : Color) : Color {",722],["rgb.r = CompoundControls.LabelSlider (screenRect, rgb.r, 1.0, \"Red\");",722],["screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping",722],["rgb.g = CompoundControls.LabelSlider (screenRect, rgb.g, 1.0, \"Green\");",722],["screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping",722],["rgb.b = CompoundControls.LabelSlider (screenRect, rgb.b, 1.0, \"Blue\");",722],["return rgb;",722],["// C#",722],["using UnityEngine;",722],["using System.Collections;",722],["public class GUITest : MonoBehaviour {",722],["public Color myColor;",722],["void OnGUI () {",722],["myColor = RGBSlider (new Rect (10,10,200,30), myColor);",722],["Color RGBSlider (Rect screenRect, Color rgb) {",722],["rgb.r = CompoundControls.LabelSlider (screenRect, rgb.r, 1.0f, \"Red\");",722],["// <- Move the next control down a bit to avoid overlapping",722],["screenRect.y += 20;",722],["rgb.g = CompoundControls.LabelSlider (screenRect, rgb.g, 1.0f, \"Green\");",722],["// <- Move the next control down a bit to avoid overlapping",722],["screenRect.y += 20;",722],["rgb.b = CompoundControls.LabelSlider (screenRect, rgb.b, 1.0f, \"Blue\");",722],["return rgb;",722],["IMGUI Layout Modes",723],["Fixed Layout vs Automatic Layout",723],["There are two different modes you can use to arrange and organize your UI when using the IMGUI system: Fixed and Automatic. Up until now, every IMGUI example provided in this guide has used Fixed Layout. To use Automatic Layout, write GUILayout instead of GUI when calling control functions. You do not have to use one Layout mode over the other, and you can use both modes at once in the same OnGUI() function.",723],["Fixed Layout makes sense to use when you have a pre-designed interface to work from. Automatic Layout makes sense to use when you don't know how many elements you need up front, or don't want to worry about hand-positioning each Control. For example, if you are creating a number of different buttons based on Save Game files, you don't know exactly how many buttons will be drawn. In this case Automatic Layout might make more sense. It is really dependent on the design of your game and how you want to present your interface.",723],["There are two key differences when using Automatic Layout:",723],["GUILayout is used instead of GUI",723],["No Rect() function is required for Automatic Layout Controls",723],["/* Two key differences when using Automatic Layout */",723],["// JavaScript",723],["function OnGUI () {",723],["// Fixed Layout",723],["GUI.Button (Rect (25,25,100,30), \"I am a Fixed Layout Button\");",723],["// Automatic Layout",723],["GUILayout.Button (\"I am an Automatic Layout Button\");",723],["// C#",723],["using UnityEngine;",723],["using System.Collections;",723],["public class GUITest : MonoBehaviour {",723],["void OnGUI () {",723],["// Fixed Layout",723],["GUI.Button (new Rect (25,25,100,30), \"I am a Fixed Layout Button\");",723],["// Automatic Layout",723],["GUILayout.Button (\"I am an Automatic Layout Button\");",723],["Arranging Controls",723],["Depending on which Layout Mode you're using, there are different hooks for controlling where your Controls are positioned and how they are grouped together. In Fixed Layout, you can put different Controls into Groups. In Automatic Layout, you can put different Controls into Areas, Horizontal Groups, and Vertical Groups",723],["Fixed Layout - Groups",723],["Groups are a convention available in Fixed Layout Mode. They allow you to define areas of the screen that contain multiple Controls. You define which Controls are inside a Group by using the GUI.BeginGroup() and GUI.EndGroup() functions. All Controls inside a Group will be positioned based on the Group's top-left corner instead of the screen's top-left corner. This way, if you reposition the group at runtime, the relative positions of all Controls in the group will be maintained.",723],["As an example, it's very easy to center multiple Controls on-screen.",723],["/* Center multiple Controls on the screen using Groups */",723],["// JavaScript",723],["function OnGUI () {",723],["// Make a group on the center of the screen",723],["GUI.BeginGroup (Rect (Screen.width / 2 - 50, Screen.height / 2 - 50, 100, 100));",723],["// All rectangles are now adjusted to the group. (0,0) is the topleft corner of the group.",723],["// We'll make a box so you can see where the group is on-screen.",723],["GUI.Box (Rect (0,0,100,100), \"Group is here\");",723],["GUI.Button (Rect (10,40,80,30), \"Click me\");",723],["// End the group we started above. This is very important to remember!",723],["GUI.EndGroup ();",723],["// C#",723],["using UnityEngine;",723],["using System.Collections;",723],["public class GUITest : MonoBehaviour {",723],["void OnGUI () {",723],["// Make a group on the center of the screen",723],["GUI.BeginGroup (new Rect (Screen.width / 2 - 50, Screen.height / 2 - 50, 100, 100));",723],["// All rectangles are now adjusted to the group. (0,0) is the topleft corner of the group.",723],["// We'll make a box so you can see where the group is on-screen.",723],["GUI.Box (new Rect (0,0,100,100), \"Group is here\");",723],["GUI.Button (new Rect (10,40,80,30), \"Click me\");",723],["// End the group we started above. This is very important to remember!",723],["GUI.EndGroup ();",723],["You can also nest multiple Groups inside each other. When you do this, each group has its contents clipped to its parent's space.",723],["/* Using multiple Groups to clip the displayed Contents */",723],["// JavaScript",723],["var bgImage : Texture2D; // background image that is 256 x 32",723],["var fgImage : Texture2D; // foreground image that is 256 x 32",723],["var playerEnergy = 1.0; // a float between 0.0 and 1.0",723],["function OnGUI () {",723],["// Create one Group to contain both images",723],["// Adjust the first 2 coordinates to place it somewhere else on-screen",723],["GUI.BeginGroup (Rect (0,0,256,32));",723],["// Draw the background image",723],["GUI.Box (Rect (0,0,256,32), bgImage);",723],["// Create a second Group which will be clipped",723],["// We want to clip the image and not scale it, which is why we need the second Group",723],["GUI.BeginGroup (Rect (0,0,playerEnergy * 256, 32));",723],["// Draw the foreground image",723],["GUI.Box (Rect (0,0,256,32), fgImage);",723],["// End both Groups",723],["GUI.EndGroup ();",723],["GUI.EndGroup ();",723],["// C#",723],["using UnityEngine;",723],["using System.Collections;",723],["public class GUITest : MonoBehaviour {",723],["// background image that is 256 x 32",723],["public Texture2D bgImage;",723],["// foreground image that is 256 x 32",723],["public Texture2D fgImage;",723],["// a float between 0.0 and 1.0",723],["public float playerEnergy = 1.0f;",723],["void OnGUI () {",723],["// Create one Group to contain both images",723],["// Adjust the first 2 coordinates to place it somewhere else on-screen",723],["GUI.BeginGroup (new Rect (0,0,256,32));",723],["// Draw the background image",723],["GUI.Box (new Rect (0,0,256,32), bgImage);",723],["// Create a second Group which will be clipped",723],["// We want to clip the image and not scale it, which is why we need the second Group",723],["GUI.BeginGroup (new Rect (0,0,playerEnergy * 256, 32));",723],["// Draw the foreground image",723],["GUI.Box (new Rect (0,0,256,32), fgImage);",723],["// End both Groups",723],["GUI.EndGroup ();",723],["GUI.EndGroup ();",723],["Automatic Layout - Areas",723],["Areas are used in Automatic Layout mode only. They are similar to Fixed Layout Groups in functionality, as they define a finite portion of the screen to contain GUILayout Controls. Because of the nature of Automatic Layout, you will nearly always use Areas.",723],["In Automatic Layout mode, you do not define the area of the screen where the Control will be drawn at the Control level. The Control will automatically be placed at the upper-leftmost point of its containing area. This might be the screen. You can also create manually-positioned Areas. GUILayout Controls inside an area will be placed at the upper-leftmost point of that area.",723],["/* A button placed in no area, and a button placed in an area halfway across the screen. */",723],["// JavaScript",723],["function OnGUI () {",723],["GUILayout.Button (\"I am not inside an Area\");",723],["GUILayout.BeginArea (Rect (Screen.width/2, Screen.height/2, 300, 300));",723],["GUILayout.Button (\"I am completely inside an Area\");",723],["GUILayout.EndArea ();",723],["// C#",723],["using UnityEngine;",723],["using System.Collections;",723],["public class GUITest : MonoBehaviour {",723],["void OnGUI () {",723],["GUILayout.Button (\"I am not inside an Area\");",723],["GUILayout.BeginArea (new Rect (Screen.width/2, Screen.height/2, 300, 300));",723],["GUILayout.Button (\"I am completely inside an Area\");",723],["GUILayout.EndArea ();",723],["Notice that inside an Area, Controls with visible elements like Buttons and Boxes will stretch their width to the full length of the Area.",723],["Automatic Layout - Horizontal and Vertical Groups",723],["When using Automatic Layout, Controls will by default appear one after another from top to bottom. There are plenty of occasions you will want finer level of control over where your Controls are placed and how they are arranged. If you are using the Automatic Layout mode, you have the option of Horizontal and Vertical Groups.",723],["Like the other layout Controls, you call separate functions to start or end these groups. The specific functions are GUILayout.BeginHorizontal(), GUILayout.EndHorizontal(), GUILayout.BeginVertical(), and GUILayout.EndVertical().",723],["Any Controls inside a Horizontal Group will always be laid out horizontally. Any Controls inside a Vertical Group will always be laid out vertically. This sounds plain until you start nesting groups inside each other. This allows you to arrange any number of controls in any imaginable configuration.",723],["/* Using nested Horizontal and Vertical Groups */",723],["// JavaScript",723],["var sliderValue = 1.0;",723],["var maxSliderValue = 10.0;",723],["function OnGUI()",723],["// Wrap everything in the designated GUI Area",723],["GUILayout.BeginArea (Rect (0,0,200,60));",723],["// Begin the singular Horizontal Group",723],["GUILayout.BeginHorizontal();",723],["// Place a Button normally",723],["if (GUILayout.RepeatButton (\"Increase max\\nSlider Value\"))",723],["maxSliderValue += 3.0 * Time.deltaTime;",723],["// Arrange two more Controls vertically beside the Button",723],["GUILayout.BeginVertical();",723],["GUILayout.Box(\"Slider Value: \" + Mathf.Round(sliderValue));",723],["sliderValue = GUILayout.HorizontalSlider (sliderValue, 0.0, maxSliderValue);",723],["// End the Groups and Area",723],["GUILayout.EndVertical();",723],["GUILayout.EndHorizontal();",723],["GUILayout.EndArea();",723],["// C#",723],["using UnityEngine;",723],["using System.Collections;",723],["public class GUITest : MonoBehaviour {",723],["private float sliderValue = 1.0f;",723],["private float maxSliderValue = 10.0f;",723],["void OnGUI()",723],["// Wrap everything in the designated GUI Area",723],["GUILayout.BeginArea (new Rect (0,0,200,60));",723],["// Begin the singular Horizontal Group",723],["GUILayout.BeginHorizontal();",723],["// Place a Button normally",723],["if (GUILayout.RepeatButton (\"Increase max\\nSlider Value\"))",723],["maxSliderValue += 3.0f * Time.deltaTime;",723],["// Arrange two more Controls vertically beside the Button",723],["GUILayout.BeginVertical();",723],["GUILayout.Box(\"Slider Value: \" + Mathf.Round(sliderValue));",723],["sliderValue = GUILayout.HorizontalSlider (sliderValue, 0.0f, maxSliderValue);",723],["// End the Groups and Area",723],["GUILayout.EndVertical();",723],["GUILayout.EndHorizontal();",723],["GUILayout.EndArea();",723],["Using GUILayoutOptions to define some controls",723],["You can use GUILayoutOptions to override some of the Automatic Layout parameters. You do this by providing the options as the final parameters of the GUILayout Control.",723],["Remember in the Areas example above, where the button stretches its width to 100% of the Area width? We can override that if we want to.",723],["/* Using GUILayoutOptions to override Automatic Layout Control properties */",723],["//JavaScript",723],["function OnGUI () {",723],["GUILayout.BeginArea (Rect (100, 50, Screen.width-200, Screen.height-100));",723],["GUILayout.Button (\"I am a regular Automatic Layout Button\");",723],["GUILayout.Button (\"My width has been overridden\", GUILayout.Width (95));",723],["GUILayout.EndArea ();",723],["// C#",723],["using UnityEngine;",723],["using System.Collections;",723],["public class GUITest : MonoBehaviour {",723],["void OnGUI () {",723],["GUILayout.BeginArea (new Rect (100, 50, Screen.width-200, Screen.height-100));",723],["GUILayout.Button (\"I am a regular Automatic Layout Button\");",723],["GUILayout.Button (\"My width has been overridden\", GUILayout.Width (95));",723],["GUILayout.EndArea ();",723],["For a full list of possible GUILayoutOptions, please read the GUILayoutOption Scripting Reference page.",723],["Immediate Mode GUI (IMGUI)",724],["The \"Immediate Mode\" GUI system (also known as IMGUI) is an entirely separate feature to Unity's main GameObject-based UI System. IMGUI is a code-driven GUI system, and is mainly intended as a tool for programmers. It is driven by calls to the OnGUI function on any script which implements it. For example, this code:",724],["```lang-csharp",724],["void OnGUI() {",724],["if (GUILayout.Button(\"Press Me\")){",724],["Debug.Log(\"Hello!\");",724],["Would result in a button displayed like so:",724],["The Immediate Mode GUI system is commonly used for:",724],["\nCreating in-game debugging displays and tools.\n",724],["\nCreating custom inspectors for script components.\n",724],["\nCreating new editor windows and tools to extend Unity itself.\n",724],["The IMGUI system is not generally intended to be used for normal in-game user interfaces that players might use and interact with. For that you should use Unity's main GameObject-based UI system, which offers a GameObject-based approach for editing and positioning UI elements, and has far better tools to work with the visual design and layout of the UI.",724],["\"Immediate Mode\" refers to the way the IMGUI is created and drawn. To create IMGUI elements, you must write code that goes into a special function named OnGUI. The code to display the interface is executed every frame, and drawn to the screen. There are no persistent gameobjects other than the object to which your OnGUI code is attached, or other types of objects in the hierarchy related to the visual elements that are drawn.",724],["IMGUI allows you to create a wide variety of functional GUIs using code. Rather than creating GameObjects, manually positioning them, and then writing a script that handles its functionality, you can do everything at once with just a few lines of code. The code produces GUI controls that are drawn and handled with a single function call.",724],["This section explains how to use IMGUI both in your game and in extensions to the Unity editor.",724],["Handling platform specific settings for IL2CPP additional arguments",725],["If your project has the additional IL2CPP arguments set, then compiling for more than one platform might not work as expected, especially when cross compiling for Linux.",725],["To find out if any additional IL2CPP arguments are already set, do one of the following:",725],["Check if the environment variable IL2CPP_ADDITIONAL_ARGS is set.",725],["In ProjectSettings/ProjectSettings.asset, check if the editor script has a value called additionalIl2CppArgs.",725],["Note that the methods for setting additional IL2CPP arguments are globally applied to all platforms, which can cause compilation issues if set for a platform other than the desired platform. Use the IPreprocessBuildWithReport hook (as shown below) to ensure IL2CPP arguments are set only for the platform that requires them.",725],["IPreprocessBuildWithReport hook",725],["Use the IPreprocessBuildWithReport hook to build scripts or the Build dialog to set the additional arguments:",725],["class MyCustomPreprocessBuild: IPreprocessBuildWithReport",725],["public int callbackOrder { get { return 0; } }",725],["public void OnPreprocessBuild(BuildReport report)",725],["string addlArgs = \"\";",725],["if (report.summary.platform == BuildTarget.StandaloneWindows report.summary.platform == BuildTarget.StandaloneWindows64)",725],["addlArgs = \"--compiler-flags=\\\"d2ssa-cfg-jt\\\"\";",725],["UnityEngine.Debug.Log($\"Setting Additional IL2CPP Args = \\\"{addlArgs}\\\" for platform {report.summary.platform}\");",725],["PlayerSettings.SetAdditionalIl2CppArgs(addlArgs);",725],["High dynamic range",726],["High dynamic range (HDR) is a technique that produces images with a greater dynamic range of luminosity than standard dynamic range (SDR) images, allowing for realistic depictions of color and brightness.",726],["How HDR works",726],["In standard rendering, the red, green, and blue values of a pixel are stored using an 8-bit value between 0 and 1, where 0 represents zero intensity and 1 represents the maximum intensity for the display device. This limited range of values doesn’t accurately reflect the way that we perceive light in real life and leads to unrealistic images when very bright or very dark elements are present.",726],["In HDR rendering, the pixel values are stored using floating point numbers. This allows for a much larger range of values, which more accurately represents the way that the human eye perceives color and brightness.",726],["HDR in Unity",726],["In Unity, you can use HDR images for internal rendering calculations. This feature is called HDR rendering. When HDR rendering is enabled, Unity renders the scene to an HDR image buffer, and performs rendering operations, such as post-processing effects, using that HDR image. This means that the calculations are carried out using realistic values, which can lead to more realistic results.",726],["On certain compatible platforms, Unity supports sending that HDR image to the display device. This feature is called HDR output.",726],["Advantages of using HDR**",726],["Colors are not lost in high intensity areas",726],["Better bloom and glow support",726],["Reduction of banding in low frequency lighting areas",726],["Disadvantages of using HDR**",726],["Increased VRAM usage",726],["Additional computational cost of tonemapping, when used",726],["Hardware anti-aliasing is not compatible with HDR rendering",726],["Render pipeline compatibility",726],["For information about support for HDR Rendering and HDR Output in the Scriptable Render Pipelines URP and HDRP, see the Render pipeline feature comparison.",726],["Tonemapping",726],["Tonemapping is the process of mapping color values from one range to another. When working with HDR, you must use tonemapping to convert the colors in the HDR image buffer so that the values are within a range that your display device can handle. If you do not use tonemapping, you can lose much of the detail and color information from the image, especially in very bright areas.",726],["When using HDR rendering with SDR output, you must use tonemapping to convert the HDR image buffer to an SDR image for display. Unity provides tonemapping post-processing effects that let you do this: the Post-Processing Stack V2 package, the URP integrated post-processing solution, and HDRP integrated post-processing solution all contain tonemapping effects.",726],["When using HDR rendering with HDR output, you can either:",726],["Create your own tonemapping solution that converts the HDR image buffer directly to a compatible HDR format for display",726],["Use Unity's tonemapping post-processing effects to convert the HDR buffer to an SDR image (as above), and then use Unity's automatic output tonemapping to convert that SDR image to a suitable output format. For more details of Unity's automatic output tonemapping, see the documentation for HDROutputSettings.automaticHDRTonemapping.",726],["Using HDR rendering in the Built-in Render Pipeline",726],["In the Forward rendering path, a Camera only supports HDR if you have a post-processing effect on the Camera. This is due to performance considerations. If you have no post-processing effect on the Camera, the scene will be rendered directly to the back buffer where HDR is not supported.",726],["In the Deferred Shading rendering path, when HDR is enabled for a Camera the lighting buffer is also allocated as a floating point buffer. This reduces banding in the lighting buffer.",726],["HDROutputSettings API added in 2020.1 NewIn20201",726],["HDR color picker",727],["The HDR Color picker looks similar to the ordinary color picker, but it contains additional controls for adjusting the color’s exposure.",727],["Property: Function: ",727],["Mode (default: RGB 0-255) When using HSV or RGB 0-255 mode, the color picker treats exposure adjustments independently from color channel data. However, the color channel data displayed in RBG (0-1.0) mode reflects the results of your exposure adjustment on the color data. Unlike the ordinary color picker, you can directly enter float values greater than 1.0 when editing color channels in RGB 0-1.0 mode. In this case, the color picker derives the Intensity value automatically from the value you set. ",727],["RGBA Use the slider or text box to define a RGBA value. The Hexadecimal value automatically updates to reflect the RGBA values. ",727],["Intensity Use the Intensity slider to overexpose or underexpose the color. Each positive step along the slider provides twice as much light as the previous slider position, and each negative step provides half as much light. Use the exposure swatches under the Intensity slider to preview what the current color value looks like within a range of two steps in either direction. To quickly adjust the color’s exposure, click a preview swatch. ",727],["Swatches Use the Swatches section to save colors to a swatch library. You can reuse, save, and share colors, gradients, and animation curves. ",727],["Note**: Whenever you close the HDR Color window and reopen it, the window derives the color channel and intensity values from the color you are editing. Because of this, you might see slightly different values for the color channels in HSV and RGB 0-255 mode or for the Intensity slider, even though the color channel values in RGB 0-1.0 mode are the same as the last time you edited the color.",727],["The Hierarchy window",728],["The Hierarchy window displays every GameObject in a Scene, such as models, Cameras, or Prefabs. You can use the Hierarchy window to sort and group the GameObjects you use in a Scene. When you add or remove GameObjects in the Scene view, you also add or remove them from the Hierarchy window.",728],["The Hierarchy window can also contain other Scenes, with each Scene containing their own GameObjects.",728],["Parenting",728],["Unity uses the concept of parent-child hierarchies, or parenting, to group GameObjects. An object can contain other GameObjects that inherit its properties.You can link GameObjects together to help move, scale, or transform a collection of GameObjects. When you move the top-level object, or parent GameObject, you also move all child GameObjects.",728],["You can also create nested parent-child GameObjects. All nested objects are still descendants of the original parent GameObject, or root GameObject.",728],["Child GameObjects inherit the movement and rotation of the parent GameObject. To learn more about this, see documentation on the Transform component.",728],["Organize GameObjects",728],["Create new GameObjects",728],["To create a new GameObject in the Hierarchy window:",728],["Right-click on empty space in the selected Scene.",728],["Select the GameObject you want to create.",728],["You can also press Ctrl+Shift+N (Windows) or Command+Shift+N (macOS) to create a new empty GameObject.",728],["Note**: New GameObjects are created in “rename” mode automatically. To disable this behavior, select the More (⋮) menu in the Hierarchy window and deselect Rename New Objects.",728],["Toggle child GameObject visibility",728],["To toggle the visibility of child GameObjects:",728],["Select the drop-down arrow (►) to the left of the parent GameObject.",728],["Press Alt while clicking the drop-down arrow (►) to toggle visibility of all descendant GameObjects of the root GameObject.",728],["Select the drop-down arrow again (▼) to collapse all descendant GameObjects.",728],["Create child GameObjects",728],["To create a child GameObject:",728],["\nDrag the GameObject onto the parent GameObject in the Hierarchy.\n",728],["Create parent GameObjects",728],["You can add a new GameObject into the Hierarchy view as the parent of existing GameObjects.",728],["To create a parent GameObject:",728],["Right-click a GameObject, or select multiple GameObjects on the same level and right-click.",728],["Select Create Empty Parent.",728],["You can also press Ctrl+Shift+G (Windows) or Command+Shift+G (macOS) to create a parent GameObject.",728],["Note**: If you have set a default parent GameObject, Create Empty Parent creates the new GameObject as a child of the default parent, not as the parent of the selected GameObjects.",728],["Create sibling GameObjects",728],["A sibling GameObject is a GameObject with the same hierarchy as another child GameObject. To create a sibling GameObject:",728],["Drag the GameObject above or below an existing GameObject.",728],["Use the horizontal blue line to determine the order of the GameObject.",728],["Duplicate GameObjects",728],["To duplicate GameObjects, right-click the target GameObject and select Duplicate.",728],["You can also press Ctrl+D (Windows) or Command+D (macOS) to duplicate the selected GameObject.",728],["Paste GameObjects as child",728],["You can cut or copy a selected GameObject and then paste it as a child of another GameObject. Pasted child GameObjects keep their world position.",728],["To paste a GameObject as child:",728],["Right-click the selected GameObject, and then select Cut or Copy.",728],["Right-click the intended parent GameObject, and then select Paste as Child.",728],["You can also press Ctrl+Shift+V (Windows) or Command+Shift+V (macOS) to paste a GameObject as a child.",728],["Organize GameObjects with default parent",728],["You can make any GameObject in the Hierarchy window a “default parent”. When you drag a GameObject into the Scene view, Unity automatically makes this GameObject the child of the GameObject you set as the default parent.",728],["To make a GameObject a default parent:",728],["In the Hierarchy window, right-click on the GameObject.",728],["Select Set as Default Parent.",728],["When you drag a GameObject into the Scene view, in the Hierarchy window, the child GameObject is indented below the default parent GameObject. The name of the default parent GameObject is bold.",728],["To remove default parent status from a GameObject:",728],["In the Hierarchy window, right-click on the GameObject.",728],["Select Clear Default Parent.",728],["The name of the GameObject that was previously the default parent is no longer bold. When you drag a GameObject into the Scene view, it appears at the top level in the Hierarchy window. In other words, Unity does not make this GameObject the child of the GameObject that was previously the default parent.",728],["You can only set one default parent per Scene. In the Hierarchy window, if you set a GameObject as the default parent, and then you make a different GameObject in the same Scene the default parent, only the second GameObject is the default parent.",728],["If you have multiple Scenes in the Hierarchy window, and you set default parents in each Scene, when you drag a GameObject into the Scene view, Unity makes the default parent GameObject in the active Scene the parent of the new GameObject.",728],["You can set a keyboard shortcut for the default parent setting in the Shortcuts manager. On the Shortcuts window, assign a keyboard shortcut to Hierarchy View > Set as Default Parent. If there is no default parent set, and in the Hierarchy window you select a GameObject, use the shortcut to make this GameObject the default parent. When a default parent is set, use the shortcut to remove default parent status from any GameObject that has it.",728],["Set Scene visibility and pickability",728],["Click the Scene visibility icon to hide and show GameObjects in the Scene view without changing their in-application visibility.",728],["Select the Scene picking icon to toggle the ability to select GameObjects in the Scene view while you are editing.",728],["These controls are useful for working with large or complex Scenes where it's difficult to view and select specific GameObjects.",728],["For more information, see the documentation on Scene visibility and Scene picking.",728],["Sort GameObjects",728],["By default, the Hierarchy window lists GameObjects in the order they're created. You can drag the selected GameObject up or down in the Scene to change the order of the GameObjects.",728],["Alphanumeric sorting",728],["To sort GameObjects in alphanumeric order:",728],["Select Edit > Preferences (macOS: Unity > Settings).",728],["Select Enable Alphanumeric Sorting.",728],["When selected, an icon appears in the Hierarchy window that allows you to toggle between Transform sorting (the default value) or Alphabetical sorting.",728],["Multi-Scene editing",728],["You can have more than one Scene open in the Hierarchy window at the same time. For more information, see the Multi Scene Editing page.",728],["",728],["Override indicator",728],["When you edit a Prefab instance in a Scene, Unity displays a indicator next to the parent GameObject in the hierarchy. This indicator highlights any Prefab that has non-default override values in any of its child GameObjects. To open the Overrides dropdown directly from the Hierarchy window click on the override indicator. The override indicator appears as a blue line in the left side of the margin and is identical to the instance override in the Inspector window. For more information, see Instance overrides.",728],["Toggling Scene visibility added in [2019.1] (https://docs.unity3d.com/2019.1/Documentation/Manual/30_search.html?q=newin20191) NewIn20191",728],["Toggling Scene pickability added in [2019.3] (https://docs.unity3d.com/2019.3/Documentation/Manual/30_search.html?q=newin20193) NewIn20193",728],["Using the High Definition Render Pipeline",729],["The High Definition Render Pipeline (HDRP) is a prebuilt Scriptable Render Pipeline, built by Unity. HDRP lets you create cutting-edge, high-fidelity graphics for high-end platforms.",729],["Use HDRP for AAA quality games, automotive demos, architectural applications and anything that requires high-fidelity graphics. HDRP uses physically-based lighting and materials, and supports both forward and deferred rendering. HDRP uses compute shader technology and therefore requires compatible GPU hardware.",729],["For information on how to use HDRP, see the HDRP documentation microsite.",729],["How Unity builds Android applications",730],["Unity uses Gradle to build Android applications so it is useful to understand the build process and how Unity interacts with Gradle. Gradle lets you use Player Settings and other Unity windows to configure most aspects of the final build, however for more control, you must overwrite manifest and template files, or export your project and edit it in Android Studio.",730],["",730],["The build process",730],["To build Android applications:",730],["Unity collects project resources, code libraries, plug-ins, Gradle templates, and manifest templates from your Unity project and uses them to create a valid Gradle project.",730],["Unity adds and updates values inside Gradle templates and manifest files based on the Unity project's Player Settings and Build Settings.",730],["If you chose to export the project and not build it, and use the IL2CPP scripting backend, Unity places C++ source files produced from your C# scripts into the Gradle project. Otherwise, if you chose to build the project, Unity places the libil2cpp.so library into the Gradle project.",730],["Unity calls OnPostGenerateGradleAndroidProject for all IPostGenerateGradleAndroidProject interfaces. You can use this callback to modify or move files before Gradle builds the application.",730],["Unity runs Gradle to build the application from the Gradle project. Gradle merges the Unity Library Manifest, Unity Launcher Manifest, and plug-in manifests into one Android App Manifest file.",730],["",730],["Incremental build pipeline",730],["Unity uses the incremental build pipeline when it builds the Player for Android. See the following Android-specific incremental build pipeline behaviors:",730],["Unity incrementally builds/generates:",730],["Uncompressed asset splits",730],["Unity incrementally copies:",730],["Player binaries",730],["Gradle resources",730],["The last step in the build process is to run Gradle. From this point, the build process doesn't use the incremental build pipeline and it's up to Gradle to track dependencies.",730],["If you implement callbacks that modify or move any Android file or asset that the incremental build pipeline uses, see Creating non-incremental builds.",730],["How Unity builds iOS applications",731],["Unity uses Xcode to build iOS applications so it's useful to understand the build process and how Unity interacts with Xcode. To configure most aspects of the final build, you can use Player Settings and other Unity windows, however for more control, Unity must build an Xcode project and you must modify Xcode project files directly.",731],["The build process",731],["Unity collects project resources, code libraries, and plug-ins from your Unity project and uses them to create a valid Xcode project.",731],["Unity updates the Xcode project based on the Unity project’s Player Settings and Build Settings. Depending on whether you use replace or append mode, Unity replaces or preserves previous changes you made. Append mode preserves changes you previously made and only overwrites certain values. Overwrite mode creates a new project which overwrites any changes you previously made.",731],["Unity generates C++ source files based on your C# scripts and places them in the generated Xcode project. Xcode then invokes the IL2CPP program which compiles the C++ source files into libraries called libGameAssembly.a and il2cpp.a.",731],["Xcode builds the project into a standalone application and deploys and launches it on a connected device or the Xcode simulator.",731],["",731],["Replace and append mode",731],["If you build a project in a directory that already contains another Xcode project, Unity displays an alert and gives you a choice on how to proceed. There are two options",731],["Replace**: Unity removes everything in the target Xcode project directory. It then generates the new Xcode project in the now empty directory.",731],["Append**: Unity removes all files in the target Xcode project root directory and in the Data and Libraries subdirectories. It then fills these directories with newly generated Xcode project content. Unity then updates the Xcode project file according to the latest Unity project changes. Unity only supports this mode for the existing Xcode projects generated with the same Unity iOS version.",731],["Note**: If you use Append mode, you can store custom native code in the Classes subfolder. Unity won't overwrite them, but it's best practice to make regular backups.",731],["Incremental build pipeline",731],["Unity uses the incremental build pipeline when it generates the Xcode project for iOS. This means that Unity incrementally builds/generates files such as Information Property List (plist) files and Entitlement files. If you implement callbacks that modify or move any iOS file or asset that the incremental build pipeline uses, see Creating non-incremental builds.",731],["Additional resources",731],["Support for proprietary model file formats",732],["Unity supports a number of proprietary model file formats. You should not use these file formats in production; instead, export to the .fbx format wherever possible. For more information, see Model file formats.",732],["Note:** This page contains guidance on using proprietary file formats that use FBX conversion. However, there are two file formats that do not use FBX as an intermediary: SketchUp and SpeedTree. For more information about limitations with these file formats, see SketchUp Settings and SpeedTree.",732],["When Unity imports a proprietary file, it launches the 3D modeling software in the background. Unity then communicates with that proprietary software to convert the native file into a format Unity can read.",732],["The first time you import a proprietary file into Unity, the 3D modeling software has to launch in a command-line process. This can take a while, but subsequent imports are very quick.",732],["Note:** As of Unity 2019.3, Unity no longer provides built-in support for Cinema4D files. To continue using Cinema4D files in Unity for versions 2019.3 and later, install Maxon’s Cinema4D importer. Alternatively, you can export an FBX file from Cinema4D instead.",732],["Requirements",732],["You need to have the 3D modeling software installed to import proprietary files directly into Unity. If you don't have the software installed, use the FBX format instead.",732],["For more information about importing FBX files, see Model Import Settings window.",732],["Application-specific issues",732],["You import files in the same way, regardless of whether they are generic or proprietary files. However, there are some differences between which features are supported. For more information on the limitations with a specific 3D application, see:",732],["",732],["Importing objects from Autodesk® Maya®",732],["Unity imports Autodesk® Maya® files (.mb and .ma) through the FBX format, supporting the following:",732],["All nodes with position, rotation and scale; pivot points and names are also imported",732],["Meshes with vertex colors, normals and up to 2 UV sets",732],["Materials with texture and diffuse color; multiple materials per mesh",732],["Animation",732],["Joints",732],["Blend shapes",732],["Lights and Cameras",732],["Visibilty",732],["Custom property animation",732],["Limitations",732],["Unity does not support Autodesk® Maya®'s Rotate Axis (pre-rotation).",732],["Joint limitations include:",732],["Joint Orient (joint only post-rotation)",732],["Segment Scale Compensate (joint only option)",732],["Unity imports and supports any Rotate Order you specify in Autodesk® Maya®; however, once imported, you cannot change that order again inside Unity.",732],["If you import a Model that uses a different rotation order from Unity's, Unity displays that rotation order in the Inspector beside the Rotation property.",732],["Tips and troubleshooting",732],["Keep your scene simple: only export the objects you need in Unity when exporting.",732],["Unity only supports polygons, so convert any patches or NURBS surfaces into polygons before exporting; see Autodesk® Maya® documentation for instructions.",732],["If your model did not export correctly, the node history in Autodesk® Maya® might be causing a problem. In Autodesk® Maya®, select Edit > Delete by Type > Non-Deformer History and then re-export the model.",732],["The Autodesk® Maya® FBX Exporter bakes un-supported complex animations constraints, such as Set Driven Keys, in order to import the animation into Unity properly. If you are using Set Driven Keys in Autodesk® Maya®, make sure to set keys on your drivers in order for the animation to be baked properly. For more information, see the Autodesk® Maya® documentation on Keyframe Animation.",732],["In Autodesk® Maya®, the visibility value is present on each shape but can't be animated and is not exported to the FBX file. Always set the visibility value on a node and not on a shape.",732],["",732],["Importing Objects From Autodesk® 3ds Max®",732],["Unity imports Autodesk® 3ds Max® files (.max) through the FBX format, supporting the following:",732],["All nodes with position, rotation and scale; pivot points and names are also imported",732],["Meshes with vertex colors, normals and one or more UV sets",732],["Materials with diffuse texture and color. Multiple materials per mesh",732],["Animations",732],["Bone-based animations",732],["Morph targets (blend shapes)",732],["Visibility",732],["",732],["Importing objects from Cheetah3D",732],["Unity imports Cheetah3D files (.jas) through the FBX format, supporting the following:",732],["All nodes with position, rotation and scale; pivot points and names are also imported",732],["Meshes with vertices, polygons, triangles, UVs, and normals",732],["Animations",732],["Materials with diffuse color and textures",732],["",732],["Importing objects from Modo",732],["Unity imports Modo files (.lxo) through the FBX format, supporting the following:",732],["All nodes with position, rotation and scale; pivot points and names are also imported",732],["Meshes with vertices, normals and UVs.",732],["Materials with Texture and diffuse color; multiple Materials per mesh",732],["Animations",732],["To get started, save your .lxo file in your Project's Assets folder. In Unity, the file appears in the Project View.",732],["Unity re-imports the Asset when it detects a change in the .lxo file.",732],["",732],["Importing objects from Lightwave",732],["Unity imports Lightwave files through the FBX format, supporting the following:",732],["All nodes with position, rotation and scale; pivot points and names are also imported",732],["Meshes with up to 2 UV channels",732],["Normals",732],["Materials with Texture and diffuse color; multiple materials per mesh",732],["Animations",732],["Bone-based animations",732],["You can also configure the Lightwave AppLink plug-in which automatically saves the FBX export settings you use the first time you import your Lightwave scene file into Unity.",732],["For more information, see the Lightwave Unity Interchange documentation.",732],["Limitations",732],["Bake your Lightwave-specific materials as textures so that Unity can read them. For information on doing this using a non-destructive pipeline, see Node system in Lightwave.",732],["Unity does not support splines or patches. Convert all splines and patches to polygons before saving and exporting to Unity. For more information, see Lightwave documentation.",732],["",732],["Importing objects from Blender",732],["Unity imports Blender (.blend) files through the FBX format, supporting the following:",732],["All nodes with position, rotation and scale; pivot points and names are also imported",732],["Meshes with vertices, polygons, triangles, UVs, and normals",732],["Bones",732],["Skinned Meshes",732],["Animations",732],["Limitations",732],["Textures and diffuse color are not assigned automatically. You can manually assign them by dragging the texture onto the mesh in the Scene View in Unity.",732],["Blender does not export the visibility value inside animations in the FBX file.",732],["Creating UI elements from scripting",733],["If you are creating a dynamic UI where UI elements appear, disappear, or change based on user actions or other actions in the game, you may need to make a script that instantiates new UI elements based on custom logic.",733],["Creating a prefab of the UI element",733],["In order to be able to easily instantiate UI elements dynamically, the first step is to create a prefab for the type of UI element that you want to be able to instantiate. Set up the UI element the way you want it to look in the Scene, and then drag the element into the Project View to make it into a prefab.",733],["For example, a prefab for a button could be a Game Object with a Image component and a Button component, and a child Game Object with a Text component. Your setup might be different depending on your needs.",733],["You might wonder why we don't have a API methods to create the various types of controls, including visuals and everything. The reason is that there are an infinite number of way e.g. a button could be setup. Does it use an image, text, or both? Maybe even multiple images? What is the text font, color, font size, and alignment? What sprite or sprites should the image use? By letting you make a prefab and instantiate that, you can set it up exactly the way you want. And if you later want to change the look and feel of your UI you can just change the prefab and then it will be reflected in your UI, including the dynamically created UI.",733],["Instantiating the UI element",733],["Prefabs of UI elements are instantiated as normal using the Instantiate method. When setting the parent of the instantiated UI element, it's recommended to do it using the Transform.SetParent method with the worldPositionStays parameter set to false.",733],["Positioning the UI element",733],["A UI Element is normally positioned using its Rect Transform. If the UI Element is a child of a Layout Group it will be automatically positioned and the positioning step can be skipped.",733],["When positioning a Rect Transform it's useful to first determine it has or should have any stretching behavior or not. Stretching behavior happens when the anchorMin and anchorMax properties are not identical.",733],["For a non-stretching Rect Transform, the position is set most easily by setting the anchoredPosition and the sizeDelta properties. The anchoredPosition specifies the position of the pivot relative to the anchors. The sizeDelta is just the same as the size when there's no stretching.",733],["For a stretching Rect Transform, it can be simpler to set the position using the offsetMin and offsetMax properties. The offsetMin property specifies the corner of the lower left corner of the rect relative to the lower left anchor. The offsetMax property specifies the corner of the upper right corner of the rect relative to the upper right anchor.",733],["Customizing the UI Element",733],["If you are instantiating multiple UI elements dynamically, it's unlikely that you'll want them all to look the same and do the same. Whether it's buttons in a menu, items in an inventory, or something else, you'll likely want the individual items to have different text or images and to do different things when interacted with.",733],["This is done by getting the various components and changing their properties. See the scripting reference for the Image and Text components, and for how to work with UnityEvents from scripting.",733],["Making UI elements fit the size of their content",734],["Normally when positioning a UI element with its Rect Transform, its position and size is specified manually (optionally including behavior to stretch with the parent Rect Transform).",734],["However, sometimes you may want the rectangle to be automatically sized to fit the content of the UI element. This can be done by adding a component called Content Size Fitter.",734],["Fit to size of Text",734],["In order to make a Rect Transform with a Text component on it fit the text content, add a Content Size Fitter component to the same Game Object which has the Text component. Then set both the Horizontal Fit and Vertical Fit dropdowns to the Preferred setting.",734],["How does it work?",734],["What happens here is that the Text component functions as a Layout Element that can provide information about how big its minimum and preferred size is. In a manual layout this information is not used. A Content Size Fitter is a type of Layout Controller, which listens to layout information provided by Layout Elements and control the size of the Rect Transform according to this.",734],["Remember the pivot",734],["When UI elements are automatically resized to fit their content, you should pay extra attention to the pivot of the Rect Transform. The pivot will stay in place when the element is resized, so by setting the pivot position you can control in which direction the element will expand or shrink. For example, if the pivot is in the center, then the element will expand equally in all directions, and if the pivot is in the upper left corner, then the element will expand to the right and down.",734],["Fit to size of UI element with child Text",734],["If you have a UI element, such as a Button, that has a background image and a child Game Object with a Text component on it, you probably want the whole UI element to fit the size of the text - maybe with some padding.",734],["In order to do this, first add a Horizontal Layout Group to the UI element, then add a Content Size Fitter too. Set the Horizontal Fit, the Vertical Fit, or both to the Preferred setting. You can add and tweak padding using the padding property in the Horizontal Layout Group.",734],["Why use a Horizontal Layout Group? Well, it could have been a Vertical Layout Group as well - as long as there is only a single child, they produce the same result.",734],["How does it work?",734],["The Horizontal (or Vertical) Layout Group functions both as a Layout Controller and as a Layout Element. First it listens to the layout information provided by the children in the group - in this case the child Text. Then it determines how large the group must be (at minimum, and preferably) in order to be able to contain all the children, and it functions as a Layout Element that provides this information about its minimum and preferred size.",734],["The Content Size Fitter listens to layout information provided by any Layout Element on the same Game Object - in this case provided by the Horizontal (or Vertical) Layout Group. Depending on its settings, it then controls the size of the Rect Transform based on this information.",734],["Once the size of the Rect Transform has been set, the Horizontal (or Vertical) Layout Group makes sure to position and size its children according to the available space. See the page about the Horizontal Layout Group for more information about how it controls the positions and sizes of its children.",734],["Make children of a Layout Group fit their respective sizes",734],["If you have a Layout Group (horizontal or vertical) and want each of the UI elements in the group to fit their respective content, what do you do?",734],["You can't put a Content Size Fitter on each child. The reason is that the Content Size Fitter wants control over its own Rect Transform, but the parent Layout Group also wants control over the child Rect Transform. This creates a conflict and the result is undefined behavior.",734],["However, it isn't necessary either. The parent Layout Group can already make each child fit the size of the content. What you need to do is to disable the Child Force Expand toggles on the Layout Group. If the children are themselves Layout Groups too, you may need to disable the Child Force Expand toggles on those too.",734],["Once the children no longer expand with flexible width, their alignment can be specified in the Layout Group using the Child Alignment setting.",734],["What if you want some of the children to expand to fill additional available space, but not the other children? You can easily control this by adding a Layout Element component to the children you want to expand and enabling the Flexible Width or Flexible Height properties on those Layout Elements. The parent Layout Group should still have the Child Force Expand toggles disabled, otherwise all the children will expand flexibly.",734],["How does it work?",734],["A Game Object can have multiple components that each provide layout information about minimum, preferred and flexible sizes. A priority system determines which values take effect over others. The Layout Element component has a higher priority than the Text, Image, and Layout Group components, so it can be used to override any layout information values they provide.",734],["When the Layout Group listens to the layout information provided by the children, it will take the overridden flexible sizes into account. Then, when controlling the sizes of the children, it will not make them any bigger than their preferred sizes. However, if the Layout Group has the Child Force Expand option enabled, it will always make the flexible sizes of all the children be at least 1.",734],["More information",734],["This page has explained solutions to a few common use cases. For a more in depth explanation of the auto layout system, see the UI Auto Layout page.",734],["Designing UI for Multiple Resolutions",735],["Modern games and applications often need to support a wide variety of different screen resolutions and particularly UI layouts need to be able to adapt to that. The UI System in Unity includes a variety of tools for this purpose that can be combined in various ways.",735],["In this how-to we're going to use a simple case study and look at and compare the different tools in the context of that. In our case study we have three buttons in the corners of the screen as shown below, and the goal is to adapt this layout to various resolutions.",735],["For this how-to we're going to consider four screen resolutions: Phone HD in portrait (640 x 960) and landscape (960 x 640) and Phone SD in portrait (320 x 480) and landscape (480 x 320). The layout is initially setup in the Phone HD Portrait resolution.",735],["Using anchors to adapt to different aspect ratios",735],["UI elements are by default anchored to the center of the parent rectangle. This means that they keep a constant offset from the center.",735],["If the resolution is changed to a landscape aspect ratio with this setup, the buttons may not even be inside the rectangle of the screen anymore.",735],["One way to keep the buttons inside the screen is to change the layout such that the locations of the buttons are tied to their respective corners of the screen. The anchors of the top left button can be set to the upper left corner using the Anchors Preset drop down in the Inspector, or by dragging the triangular anchor handles in the Scene View. It's best to do this while the current screen resolution set in the Game View is the one the layout is initially designed for, where the button placement looks correct. (See the UI Basic Layout page for more information on anchors.) Similarly, the anchors for the lower left and lower right buttons can be set to the lower left corner and lower right corner, respectively.",735],["Once the buttons have been anchored to their respective corners, they stick to them when changing the resolution to a different aspect ratio.",735],["When the screen size is changed to a larger or smaller resolution, the buttons will also remain anchored to their respective corners. However, since they keep their original size as specified in pixels, they may take up a larger or smaller proportion of the screen. This may or may not be desirable, depending on how you would like your layout to behave on screens of different resolutions.",735],["In this how-to, we know that the smaller resolutions of Phone SD Portrait and Landscape don't correspond to screens that are physically smaller, but rather just screens with a lower pixel density. On these lower-density screens the buttons shouldn't appear larger than on the high-density screens - they should instead appear with the same size.",735],["This means that the buttons should become smaller by the same percentage as the screen is smaller. In other words, the scale of the buttons should follow the screen size. This is where the Canvas Scaler component can help.",735],["Scaling with Screen Size",735],["The Canvas Scaler component can be added to a root Canvas - a Game Object with a Canvas component on it, which all the UI elements are children of. It is also added by default when creating a new Canvas through the GameObject menu.",735],["In the Canvas Scaler component, you can set its UI Scale Mode to Scale With Screen Size. With this scale mode you can specify a resolution to use as reference. If the current screen resolution is smaller or larger than this reference resolution, the scale factor of the Canvas is set accordingly, so all the UI elements are scaled up or down together with the screen resolution.",735],["In our case, we set the Canvas Scaler to be the Phone HD portrait resolution of 640 x 960. Now, when setting the screen resolution to the Phone SD portrait resolution of 320 x 480, the entire layout is scaled down so it appears proportionally the same as in full resolution. Everything is scaled down: The button sizes, their distances to the edges of the screen, the button graphics, and the text elements. This means that the layout will appear the same in the Phone SD portrait resolution as in Phone HD portrait; only with a lower pixel density.",735],["One thing to be aware of: After adding a Canvas Scaler component, it's important to also check how the layout looks at other aspect ratios. By setting the resolution back to Phone HD landscape, we can see that the buttons now appear bigger than they should (and used to).",735],["The reason for the larger buttons in landscape aspect ratio comes down to how the Canvas Scaler setting works. By default it compares the width or the current resolution with the width of the Canvas Scaler and the result is used as the scale factor to scale everything with. Since the current landscape resolution of 960 x 640 has a 1.5 times larger width than the portrait Canvas Scaler of 640 x 960, the layout is scaled up by 1.5.",735],["The component has a property called Match which can be 0 (Width), 1 (Height) or a value in between. By default it's set to 0, which compares the current screen width with the Canvas Scaler width as described.",735],["If the Match property is set to 0.5 instead, it will compare both the current width to the reference width and the current height to the reference height, and choose a scale factor that's in between the two. Since in this case the landscape resolution is 1.5 times wider but also 1.5 times shorter, those two factor even out and produce a final scale factor of 1, which means the buttons keep their original size.",735],["At this point the layout supports all the four screen resolutions using a combination of appropriate anchoring and the Canvas Scaler component on the Canvas.",735],["See the Canvas Scaler reference page for more information on different ways to scale UI elements in relation to different screen sizes.",735],["Creating Screen Transitions",736],["The need to transition between multiple UI screens is fairly common. In this page we will explore a simple way to create and manage those transitions using animation and State Machines to drive and control each screen.",736],["Overview",736],["The high-level idea is that each of our screens will have an Animator Controller with two states (Open and Closed) and a boolean Parameter (Open). To transition between screens you will only need to close the currently open Screen and open the desired one. To make this process easier we will create a small Class ScreenManager that will keep track and take care of closing any already open Screen for us. The button that triggers the transition will only have to ask the ScreenManager to open the desired screen.",736],["Thinking about Navigation",736],["If you plan to support controller/keyboard navigation of UI elements, then it's important to have a few things in mind. It's important to avoid having Selectable elements outside the screen since that would enable players to select offscreen elements, we can do that by deactivating any off-screen hierarchy. We also need to make sure when a new screen is shown we set a element from it as selected, otherwise the player would not be able to navigate to the new screen. We will take care of all that in the ScreenManager class below.",736],["Setting up the Animator Controller",736],["Let's take a look at the most common and minimal setup for the Animation Controller to do a Screen transition. The controller will need a boolean parameter (Open) and two states (Open and Closed), each state should have an animation with only one keyframe, this way we let the State Machine do the transition blending for us.",736],["Now we need to create the transition between both states, let's start with the transition from Open to Closed and let's set the condition properly, we want to go from Open to Closed when the parameter Open is set to false. Now we create the transition from Closed to Open and set the condition to go from Closed to Open when the parameter Open is true.",736],["Managing the screens",736],["With all the above set up, the only thing missing is for us to set the parameter Open to true on the screens Animator we want to transition to and Open to false on the currently open screens Animator. To do that, we will create a small script:",736],["using UnityEngine;",736],["using UnityEngine.UI;",736],["using UnityEngine.EventSystems;",736],["using System.Collections;",736],["using System.Collections.Generic;",736],["public class ScreenManager : MonoBehaviour {",736],["//Screen to open automatically at the start of the Scene",736],["public Animator initiallyOpen;",736],["//Currently Open Screen",736],["private Animator m_Open;",736],["//Hash of the parameter we use to control the transitions.",736],["private int m_OpenParameterId;",736],["//The GameObject Selected before we opened the current Screen.",736],["//Used when closing a Screen, so we can go back to the button that opened it.",736],["private GameObject m_PreviouslySelected;",736],["//Animator State and Transition names we need to check against.",736],["const string k_OpenTransitionName = \"Open\";",736],["const string k_ClosedStateName = \"Closed\";",736],["public void OnEnable()",736],["//We cache the Hash to the \"Open\" Parameter, so we can feed to Animator.SetBool.",736],["m_OpenParameterId = Animator.StringToHash (k_OpenTransitionName);",736],["//If set, open the initial Screen now.",736],["if (initiallyOpen == null)",736],["return;",736],["OpenPanel(initiallyOpen);",736],["//Closes the currently open panel and opens the provided one.",736],["//It also takes care of handling the navigation, setting the new Selected element.",736],["public void OpenPanel (Animator anim)",736],["if (m_Open == anim)",736],["return;",736],["//Activate the new Screen hierarchy so we can animate it.",736],["anim.gameObject.SetActive(true);",736],["//Save the currently selected button that was used to open this Screen. (CloseCurrent will modify it)",736],["var newPreviouslySelected = EventSystem.current.currentSelectedGameObject;",736],["//Move the Screen to front.",736],["anim.transform.SetAsLastSibling();",736],["CloseCurrent();",736],["m_PreviouslySelected = newPreviouslySelected;",736],["//Set the new Screen as then open one.",736],["m_Open = anim;",736],["//Start the open animation",736],["m_Open.SetBool(m_OpenParameterId, true);",736],["//Set an element in the new screen as the new Selected one.",736],["GameObject go = FindFirstEnabledSelectable(anim.gameObject);",736],["SetSelected(go);",736],["//Finds the first Selectable element in the providade hierarchy.",736],["static GameObject FindFirstEnabledSelectable (GameObject gameObject)",736],["GameObject go = null;",736],["var selectables = gameObject.GetComponentsInChildren (true);",736],["foreach (var selectable in selectables) {",736],["if (selectable.IsActive () && selectable.IsInteractable ()) {",736],["go = selectable.gameObject;",736],["break;",736],["return go;",736],["//Closes the currently open Screen",736],["//It also takes care of navigation.",736],["//Reverting selection to the Selectable used before opening the current screen.",736],["public void CloseCurrent()",736],["if (m_Open == null)",736],["return;",736],["//Start the close animation.",736],["m_Open.SetBool(m_OpenParameterId, false);",736],["//Reverting selection to the Selectable used before opening the current screen.",736],["SetSelected(m_PreviouslySelected);",736],["//Start Coroutine to disable the hierarchy when closing animation finishes.",736],["StartCoroutine(DisablePanelDeleyed(m_Open));",736],["//No screen open.",736],["m_Open = null;",736],["//Coroutine that will detect when the Closing animation is finished and it will deactivate the",736],["//hierarchy.",736],["IEnumerator DisablePanelDeleyed(Animator anim)",736],["bool closedStateReached = false;",736],["bool wantToClose = true;",736],["while (!closedStateReached && wantToClose)",736],["if (!anim.IsInTransition(0))",736],["closedStateReached = anim.GetCurrentAnimatorStateInfo(0).IsName(k_ClosedStateName);",736],["wantToClose = !anim.GetBool(m_OpenParameterId);",736],["yield return new WaitForEndOfFrame();",736],["if (wantToClose)",736],["anim.gameObject.SetActive(false);",736],["//Make the provided GameObject selected",736],["//When using the mouse/touch we actually want to set it as the previously selected and",736],["//set nothing as selected for now.",736],["private void SetSelected(GameObject go)",736],["//Select the GameObject.",736],["EventSystem.current.SetSelectedGameObject(go);",736],["//If we are using the keyboard right now, that's all we need to do.",736],["var standaloneInputModule = EventSystem.current.currentInputModule as StandaloneInputModule;",736],["if (standaloneInputModule != null)",736],["return;",736],["//Since we are using a pointer device, we don't want anything selected.",736],["//But if the user switches to the keyboard, we want to start the navigation from the provided game object.",736],["//So here we set the current Selected to null, so the provided gameObject becomes the Last Selected in the EventSystem.",736],["EventSystem.current.SetSelectedGameObject(null);",736],["Let's hook up this script, we do this by creating a new GameObject, we can rename it \"ScreenManager\" for instance, and add the component above to it. You can assign an initial screen to it, this screen will be open at the start of your scene.",736],["Now for the final part, let's make the UI buttons work. Select the button that should trigger the screen transition and add a new action under the On Click () list in the Inspector. Drag the ScreenManager GameObject we just created to the ObjectField, on the dropdown select ScreenManager->OpenPanel (Animator) and drag and drop the panel you want to open when the user clicks the button to the las ObjectField.",736],["Notes",736],["This technique only requires each screen to have an AnimatorController with an Open parameter and a Closed state to work - it doesn't matter how your screen or State Machine are constructed. This technique also works well with nested screens, meaning you only need one ScreenManager for each nested level.",736],["The State Machine we set up above has the default state of Closed, so all of the screens that use this controller start as closed. The ScreenManager provides an initiallyOpen property so you can specify which screen is shown first.",736],["Creating a World Space UI",737],["The UI system makes it easy to create UI that is positioned in the world among other 2D or 3D objects in the Scene.",737],["Start by creating a UI element (such as an Image) if you don't already have one in your scene by using GameObject > UI > Image. This will also create a Canvas for you.",737],["Set the Canvas to World Space",737],["Select your Canvas and change the Render Mode to World Space.",737],["Now your Canvas is already positioned in the World and can be seen by all cameras if they are pointed at it, but it is probably huge compared to other objects in your Scene. We'll get back to that.",737],["Decide on a resolution",737],["First you need to decide what the resolution of the Canvas should be. If it was an image, what should the pixel resolution of the image be? Something like 800x600 might be a good starting point. You enter the resolution in the Width and Height values of the Rect Transform of the Canvas. It's probably a good idea to set the position to 0,0 at the same time.",737],["Specify the size of the Canvas in the world",737],["Now you should consider how big the Canvas should be in the world. You can use the Scale tool to simply scale it down until it has a size that looks good, or you can decide how big it should be in meters.",737],["If you want it to have a specific width in meters, you can can calculate the needed scale by using meter_size / canvas_width. For example, if you want it to be 2 meters wide and the Canvas width is 800, you would have 2 / 800 = 0.0025. You then set the Scale property of the Rect Transform on the Canvas to 0.0025 for both X, Y, and Z in order to ensure that it's uniformly scaled.",737],["Another way to think of it is that you are controlling the size of one pixel in the Canvas. If the Canvas is scaled by 0.0025, then that is also the size in the world of each pixel in the Canvas.",737],["Position the Canvas",737],["Unlike a Canvas set to Screen Space, a World Space Canvas can be freely positioned and rotated in the Scene. You can put a Canvas on any wall, floor, ceiling, or slanted surface (or hanging freely in the air of course). Just use the normal Translate and Rotate tools in the toolbar.",737],["Create the UI",737],["Now you can begin setting up your UI elements and layouts the same way you would with a Screen Space Canvas.",737],["Managed stack traces with IL2CPP",738],["When an exception happens in managed code, the stack trace for the exception can help you understand the cause of the exception. This can often be found in the player log file. However, the managed stack trace might not appear the way you expect because the stack trace varies depending on the build configuration.​",738],["​",738],["C++ Compiler Configuration options",738],["Debug",738],["When the C++ Compiler Configuration is set to Debug, IL2CPP reports a reliable managed stack trace, and includes each managed method in the call stack. The stack trace doesn’t include line numbers from the original C# source code.",738],["​",738],["Release and master",738],["When the C++ Compiler Configuration is set to Release or Master, IL2CPP might produce a call stack that’s missing one or more managed methods. This is because the C++ compiler has inlined the missing methods. Method inlining is usually good for performance at run time, but it can make call stacks more difficult to understand. IL2CPP always provides at least one managed method on the call stack. For stack traces created from managed exceptions, this is the method where the exception occurred. It also includes other methods if they aren't inlined.​",738],["​",738],["Source code line numbers",738],["IL2CPP call stacks do not include source code line number information in the debug or release configurations.",738],["Windows Runtime support",739],["Unity includes Windows Runtime support for IL2CPP on Universal Windows Platform platform. Use Windows Runtime support to call into both native system Windows Runtime APIs as well as custom .winmd files directly from managed code (scripts and DLLs).",739],["To automatically enable Windows Runtime support in IL2CPP, go to the Player settings (Edit > Project Settings, then select the Player category), navigate to the Configuration section, and set the Api Compatibility Level to .NET 4.6 or .NET Standard 2.0.",739],["Unity automatically references Windows Runtime APIs (such as Windows.winmd on Universal Windows Platform) when it has Windows Runtime support enabled. To use custom .winmd files, import them (together with any accompanying DLLs) into your Unity project folder. Then use the Plugin Inspector to configure the files for your target platform.",739],["![Use the Plugin Inspector to configure custom .winmd files for specific platforms",739],["](../uploads/Main/IL2CPP-5.png)",739],["In your Unity project's scripts you can use the ENABLE_WINMD_SUPPORT #define directive to check that your project has Windows Runtime support enabled. Use this before a call to .winmd Windows APIs or custom .winmd scripts to ensure they can run and to ensure any scripts not relevant to Windows ignore them. Note, this is only supported in C# scripts. See the examples below.",739],["Examples**",739],["C#**",739],["void Start() {",739],["if ENABLE_WINMD_SUPPORT",739],["Debug.Log(\"Windows Runtime Support enabled\");",739],["// Put calls to your custom .winmd API here",739],["endif",739],["• 2017-05-16 ",739],["IL2CPP Overview",740],["The IL2CPP (Intermediate Language To C++) scripting backend is an alternative to the Mono backend. IL2CPP provides better support for applications across a wider range of platforms. The IL2CPP backend converts MSIL (Microsoft Intermediate Language) code (for example, C# code in scripts) into C++ code, then uses the C++ code to create a native binary file (for example, .exe, .apk, or .xap) for your chosen platform.",740],["This type of compilation, in which Unity compiles code specifically for a target platform when it builds the native binary, is called ahead-of-time (AOT) compilation. The Mono backend compiles code at runtime, with a technique called just-in-time compilation (JIT).",740],["On this page:",740],["Some platforms don’t support AOT compilation, so the IL2CPP backend doesn’t work on every platform. Other platforms support AOT and IL2CPP, but don’t allow JIT compilation, and so can’t support the Mono backend. When a platform can support both backends, Mono is the default. For more information, see Scripting restrictions.",740],["IL2CPP can improve performance across a variety of platforms, but the need to include machine code in built applications increases both the build time and the size of the final built application. For more information, see How IL2CPP works and the blog series An introduction to IL2CPP internals.",740],["IL2CPP supports the debugging of managed code in the same way as the Mono scripting backend. For more information, see Debugging C# code in Unity.",740],[" Building a project using IL2CPP",740],["To build a project with IL2CPP, you need to have the backend installed in your Unity installation. You can select IL2CPP as an optional module when you first install a version of Unity, or add IL2CPP support to an existing installation through the Unity Hub. For more information, see Installing the Unity Hub and Add modules to the Unity Editor.",740],["IL2CPP also requires some systems native to the target platform to generate the C++ code. This means that to use IL2CPP on a specific platform, you need to build the application on that platform. For example, to use IL2CPP with MacOS as a build target, you need to build the application on a machine that uses MacOS. For more information about system requirements for desktop platforms, including IL2CPP requirements for individual platforms, see the Desktop section of System Requirements for Unity.",740],["You can change the scripting backend Unity uses to build your application in one of two ways:",740],["Through the Player Settings menu in the Editor. Perform the following steps to change the scripting backend through the Player Settings menu:",740],["Go to Edit > Project Settings.",740],["Click on the Player Settings button to open the Player settings for the current platform in the Inspector.",740],["Navigate to the Configuration section heading under the Other Settings sub-menu.",740],["Click on the Scripting Backend dropdown menu, then select IL2CPP.",740],["You can also open the Player Settings menu from inside the Build Settings menu; go to File > Build Settings and click on the Player Settings button.",740],["Through the Editor scripting API. Use the PlayerSettings.SetScriptingBackend property to change the scripting backend that Unity uses.",740],["To start the build process, open the Build Settings window and click the Build button. Unity then converts your C# code and assemblies into C++ and finally produces a binary file for your target platform.",740],[" How IL2CPP works",740],["When you start a build using IL2CPP, Unity automatically performs the following steps:",740],["The Roslyn C# compiler compiles your application’s C# code and any required package code to .NET DLLs (managed assemblies).",740],["Unity applies managed bytecode stripping. This step can significantly reduce the size of a built application.",740],["The IL2CPP backend converts all managed assemblies into standard C++ code.",740],["The C++ compiler compiles the generated C++ code and the runtime part of IL2CPP with a native platform compiler.",740],["Unity creates either an executable file or a DLL, depending on the platform you target.",740],["Both IL2CPP and Mono provide a few useful options which you can control with attributes in your scripts. For more information, see Platform-dependent compilation.",740],["IL2CPP enables Unity to pre-compile code for specific platforms. The binary file Unity produces at the end of this process already contains necessary machine code for the target platform, while Mono has to compile this machine code at runtime during execution. AOT compilation does increase build time, but it also improves compatibility with the target platform and can improve performance.",740],["Both scripting backends require a new build for each platform you want to target. For example, to support both the Android and iOS platforms, you need to build your application twice and produce two binary files.",740],["The assembly stripping stage helps reduce the final binary size. Unity removes any bytecode that the final built application doesn’t use.",740],[" Optimizing IL2CPP build times",740],["Project build times when using IL2CPP can be significantly longer than when using Mono. However, you can do several things to reduce build time.",740],["Exclude your project from anti-malware software scans**",740],["You can exclude your Unity project folder and target build folders from anti-malware software scans before you build your project.",740],["Store your project and target build folder on a solid-state drive (SSD)**",740],["Solid-state drives (SSDs) have faster read/write speeds than traditional hard disk drives (HDD). Converting IL code to C++ and compiling it involves a large number of read/write operations, so a faster storage device speeds up this process.",740],["Change the IL2CPP Code Generation option in the Build Settings**",740],["To change how IL2CPP generates code, open the Build Settings and configure the IL2CPP Code Generation option By default, the Faster runtime option is enabled, which produces more machine code that reduces the impact of IL2CPP at runtime. To reduce build times, you can set this option to Faster (smaller) builds. This method produces and includes less machine code in the binary executable and so can reduce performance at runtime, but also significantly reduces build times and binary size.",740],[" Enabling runtime checks using Il2CppSetOption",740],["When you use the IL2CPP scripting backend, you can control how il2cpp.exe generates C++ code. You can use the Il2CppSetOption attribute to enable or disable the following runtime checks:",740],["Property: Description: Default: ",740],["Null checks If this option is enabled, the C++ code that IL2CPP generates contains null checks and throws managed NullReferenceException exceptions as necessary. If this option is disabled, IL2CPP doesn’t emit the null checks into the generated C++ code. For some projects, disabling this option might improve runtime performance.When this setting is disabled, Unity doesn’t prevent attempts to access null values in the generated code, which might lead to incorrect behavior. Your application is likely to crash soon after it dereferences the null value. Unity recommends that you don’t disable this option. Enabled ",740],["Array bounds checks If this option is enabled, the C++ code that IL2CPP generates contains array bounds checks and throws managed IndexOutOfRangeException exceptions as necessary. If this option is disabled, IL2CPP doesn’t emit the array bounds checks into the generated C++ code. For some projects, disabling this option might improve runtime performance. However, when this option is disabled, Unity doesn’t prevent attempts to access an array with invalid indices in the generated code, which might lead to incorrect behavior, including reading from or writing to arbitrary memory locations. In most cases, these memory accesses occur without any immediate side effects, and can corrupt the state of the application with no obvious warning signs. This can make debugging these errors extremely difficult. Unity recommends that you keep this option enabled. Enabled ",740],["Divide by zero checks If this option is enabled, C++ code generated by IL2CPP contains divide by zero checks for integer division and throw managed DivideByZeroException exceptions as necessary. If this option is disabled, IL2CPP doesn’t emit the divide by zero checks on integer division into the generated C++ code. These checks have an impact on performance at runtime. You should only enable this option if you need to run divide by zero checks; otherwise, leave it disabled. Disabled ",740],["To use the Il2CppSetOption attribute:",740],["In the directory where your Unity version is installed, navigate to the Data\\il2cpp directory on Windows, or the Contents/Frameworks/il2cpp directory on OS X.",740],["Find the Il2CppSetOptionAttribute.cs source file.",740],["Copy the source file into your project’s Assets directory.",740],["The below example describes how to use the Il2CppSetOption attribute:",740],["```lang-C#",740],["[Il2CppSetOption(Option.NullChecks, false)]",740],["public static string MethodWithNullChecksDisabled()",740],["var tmp = new object();",740],["return tmp.ToString();",740],["You can apply the Il2CppSetOption attribute to assemblies, types, methods, and properties. Unity uses the attribute from the most local scope.",740],["```lang-C#",740],["[Il2CppSetOption(Option.NullChecks, false)]",740],["public class TypeWithNullChecksDisabled",740],["public static string AnyMethod()",740],["// Unity doesn’t perform null checks in this method.",740],["var tmp = new object();",740],["return tmp.ToString();",740],["[Il2CppSetOption(Option.NullChecks, true)]",740],["public static string MethodWithNullChecksEnabled()",740],["// Unity performs null checks in this method.",740],["var tmp = new object();",740],["return tmp.ToString();",740],["public class SomeType",740],["[Il2CppSetOption(Option.NullChecks, false)]",740],["public string PropertyWithNullChecksDisabled",740],["get",740],["// Unity doesn’t perform null checks here.",740],["var tmp = new object();",740],["return tmp.ToString();",740],["set",740],["// Unity doesn’t perform null checks here.",740],["value.ToString();",740],["public string PropertyWithNullChecksDisabledOnGetterOnly",740],["[Il2CppSetOption(Option.NullChecks, false)]",740],["get",740],["// Unity doesn’t perform null checks here.",740],["var tmp = new object();",740],["return tmp.ToString();",740],["set",740],["// Unity performs null checks here.",740],["value.ToString();",740],["• 2018-05-15 ",740],["IME in Unity",741],["What is Input Method Editor (IME)?",741],["An input method is an operating system component or program that allows users to enter characters and symbols not found on their input device. For instance, on the computer, this allows the user of 'Western' keyboards to input Chinese, Japanese, Korean and Indic characters. On many hand-held devices, such as mobile phones, it enables using the numeric keypad to enter Latin alphabet characters.",741],["The term input method generally refers to a particular way to use the keyboard to input a particular language, for example the Cangjie method, the pinyin method, or the use of dead keys.",741],["IME and Unity",741],["Unity provides IME support, which means that you can write non-ASCII characters in all your graphical user interfaces.",741],["This Input Method is fully integrated with the engine so you do not need to do anything to activate it. In order to test it, just change your keyboard language to a non-ASCII language (e.g. Japanese) and just start writing your interface.",741],["For more info and optimization when writting non-ASCII characters, check the character option in the font properties.",741],["iOS",741],["This feature is not supported on iOS devices yet.",741],["Android",741],["This feature is not supported on Android devices yet.",741],["Import Activity window",742],["Overview",742],["The Import Activity window provides you with information about what happens when Unity imports your assets. You can use this information to identify which assets in your project were imported recently, how long each asset took to import, and why it was imported (or re-imported).",742],["This information allows you to analyse your project’s import activity, and make decisions about how to improve the time Unity takes to import your assets, or how to avoid unnecessary imports altogether. The Import Activity window therefore acts like a profiler for the import process.",742],["Accessing the Import Activity window",742],["To open the Import Activity window, go to Window > Analysis > Import Activity Window.",742],["You can also open the Import Activity window directly from an asset, which causes the window to immediately display the import details for the selected asset. This is useful if you already know which asset’s import data you want to analyse. There are two ways to do this:",742],["Right-click an asset in the Project window and, from the context menu, select View in Import Activity Window.",742],["View an asset in the Inspector, right-click the Inspector’s tab, and, from the context menu, select Open in Import Activity Window.",742],["Layout",742],["The Import Activity window has three sections: the toolbar at the top, the *asset list on the left, and the information *section on the right.",742],["Toolbar",742],["The toolbar at the top of the window has the following three features:",742],["Show overview button",742],["Options menu",742],["Search field",742],["Show Overview button",742],["When you click the Show Overview button, the information section on the right displays overview information, which includes general information about your asset imports. See Overview information, below.",742],["Options menu",742],["The Options dropdown allows you to adjust the information shown in the asset list. The following options are available:",742],["Use relative timestamps",742],["Controls whether the last import time is shown in relative format (eg. \"a few seconds ago\"), or absolute format, in the form: Day-Month-Year Hour:Minute:Second",742],["Show previous imports",742],["Controls whether previous imports are shown, or only the most recent import. Showing previous imports allows you to see how many revisions of an asset are currently being kept in the Library folder. This list is generally cleared when Artifact Garbage Collection runs, when you restart the Editor.",742],["When you enable this option, a second vertical list view appears alongside the asset list, showing all the currently stored import results for the selected asset.",742],["If you want to keep import results from previous Editor sessions to aid with debugging or analysis, you can turn off Artifact Garbage Collection by going to Project Settings > Editor > Remove unused Artifacts on Restart. You can also control this setting via script by using EditorUserSettings.artifactGarbageCollection.",742],["Include PreviewImporter",742],["Controls whether to include artifacts generated by the preview window. These are hidden by default, because they are not usually useful when examining your asset imports.",742],["Search field",742],["The search field on the right side of the toolbar allows you to quickly filter the asset list by name to find the specific assets you are interested in.",742],["Asset list",742],["The left-hand section of the window shows the list of all assets in your project. The columns are:",742],["Asset**: The asset name",742],["Last Import**: When the asset was last imported",742],["Duration**: The amount of time the Last Import took, in milliseconds.",742],["To change the sort order of the list, click on the column headings.",742],["The asset list, with results shown sorted by longest duration first.*",742],["Information panel",742],["The right-hand section of the window is the information panel, and has two modes:",742],["Overview information appears when there is no asset selected.",742],["Asset information appears when you select an asset from the list on the left, or if you open the window directly via an asset as described above.",742],["Overview information",742],["The Overview information displays a list of the assets with the most dependencies, and assets with the longest import duration. It is useful for quickly identifying which assets may be most significantly slowing down your import process. Assets with more dependencies are more likely to be regularly re-imported, because an asset is re-imported whenever any of its dependencies are modified.",742],["When you open the Import Activity window from the main menu, it displays the Overview information by default. If you are viewing asset information and you want to return to the Overview information, select the Show overview button in the toolbar .",742],["Asset information",742],["When you select an asset from the asset list, the information panel displays the asset information. This includes the following details about the asset and its most recent import.",742],["Title Description ",742],["Asset The name of the currently selected asset. You can click this field to locate the asset in the Project window. ",742],["GUID The unique GUID assigned to the asset. You can use this to track its references across your project. ",742],["Asset Size The size of the source file of the asset. ",742],["Path The file path of the asset, relative to the project’s root folder. ",742],["Editor Revision The version of the Editor that created this artifact. ",742],["Timestamp The time at which the Artifact file was created. This matches the timestamp value of the file in the Library folder. ",742],["Duration The time Unity took to import this asset in the most recent import, in milliseconds. ",742],["Reason for Import A description of the change (or changes) in your project which caused this asset’s most recent import, and details about the associated dependency type.The Reason for Import field has its own search bar, which allows you to search its text. This is useful in situations where an asset has many reasons for import (for example, a compute shader can have many dependencies that are modified when you switch platforms). ",742],["Produced Files / Artifacts The list of files present in the Library folder that Unity produced when it last imported this asset. Usually there is just one artifact per asset, although sometimes there can be multiple. For example, when Unity generates a preview of an asset.During a typical usage of the Editor, Unity might generate many versions of an asset’s import result (an artifact). For this reason, each artifact has an artifact ID for reference. This is different to the asset’s GUID.The currently selected revision is referred to as the current revision, which is selected by default when an asset in the Asset List is selected.Generally revisions are in chronological order with the current revision as the newest. However, if you undo an operation in Unity which changes an asset’s artifact, the current revision reverts back to a previously cached artifact and therefore would not be the most recently listed artifact. ",742],["Dependencies A list of Editor and project-specific variables which control the state of an asset, which, if changed, trigger the re-import of the asset.Dependencies are how the asset database tracks the state of an asset. This means that if an asset dependency changes, the import result will be different and a new revision of an artifact will be generated.Understanding your asset’s dependency types and what can cause them to change can help you get the most out of Unity’s asset database system, speed up your workflow, and avoid unnecessary import time.This field has its own search bar, which allows you to search the text contained in the Dependencies field.",742],["Importer Consistency",743],["Asset importers, including any scripted importers that you write, should produce consistent (deterministic) results. This means they should always produce the same output from the same input and set of dependencies.",743],["To verify that this is the case for your importers, the Asset Database has two ways that you can check the consistency of the import results of the assets currently in your project. The two ways to check consistency are:",743],["Manually reimport one or more assets in the Editor",743],["Use the -consistencyCheck command line argument to open the Editor",743],["Manual reimport consistency checks",743],["Manually reimporting an asset causes Unity to check whether a new import result matches the previous cached import results.",743],["To start a manual reimport, right-click on an asset and select Reimport from the context menu.",743],["Unity then checks the resulting import for consistency. If it detects inconsistent results, Unity prints a warning in the Console window with details about which importer caused the issue, such as:",743],["Importer(<name of importer>) generated inconsistent result for asset(guid:<guid of the asset>) \"<name of asset>\"",743],["When you reimport a root asset, Unity also reimports and performs the consistency check on its child assets.",743],["Command line consistency checks",743],["The second way of doing the consistency check is to open Unity with the -consistencyCheck command line argument. This performs a consistency check on all assets and importers in the project.",743],["Command line argument Description Example(s) ",743],["-consistencyCheck Tells the Editor to perform a consistency check on startup. By default it performs a \"local\" check (see below). -consistencyCheck ",743],["-consistencyCheckSourceMode string Sets the source for the consistency checker to check against when it compares the asset imports. There are two possible values: “local” or “cacheserver”.“local” means that it forces a reimport of all assets locally and checks if imports differ from the previous import.“cacheserver” means that it asks the cacheserver for the metadata for the assets and compares if the results locally match what is on the cacheserver. In this case reimporting all assets does not happen. -consistencyCheckSourceMode local -consistencyCheckSourceMode cacheserver ",743],["Any inconsistencies found during startup are logged to the Console, as well as the Editor log file.",743],["The consistency checker only checks asset imports that are cacheable. So if you disable caching for your ScriptedImporter then the consistency check for that import will also be disabled. See AssetImporters.ScriptedImporterAttribute for details on how to disable caching for a scripted importer.",743],["To use the cache server as validation source, see the Unity Accelerator documentation.",743],["Editor log",743],["When importer inconsistencies are detected, you can find more information about the issue in the Editor log. This includes:",743],["Which asset caused the failed consistency check",743],["The GUID of that asset",743],["The content hash for the asset import result",743],["How it compares to the previous revision of the asset",743],["The following is an example of an Editor log that shows importer inconsistencies:",743],["ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 07078a054d3f597b4c2cc47e8e4c0bde, producedFiles[0].extension: , producedFiles[0].contentHash: 8490a5ed35a4361d679e6055a386969e",743],["ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 07078a054d3f597b4c2cc47e8e4c0bde, producedFiles[1].extension: .info, producedFiles[1].contentHash: 4bd9140e19d2e44782f1131172e514ba",743],["ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 646d6432767729ea7d288c636183de97, producedFiles[0].extension: , producedFiles[0].contentHash: 5ca760170f85012ce16aa8c22e8d9ea1",743],["ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 646d6432767729ea7d288c636183de97, producedFiles[1].extension: .info, producedFiles[1].contentHash: 4bd9140e19d2e44782f1131172e514ba",743],["Importer(ScriptedImporter:Assembly-CSharp::RandomImporter) generated inconsistent result for asset(guid:a1945cd7aab67441ba89015f97494624) \"Assets/first.rand\"",743],["If the cache server is not available, the consistency checker prints out warnings in the Editor log.",743],["If a cache server hasn’t been set up for the project, the following message is printed.",743],["ConsistencyChecker - Cacheserver is not enabled",743],["If Unity cannot connect to the cache server, this message is printed.",743],["ConsistencyChecker - Not connected to accelerator/cacheserver",743],["Debugging",743],["You can use the tool ‘binary2text’, located in the Data/Tools folder in your Unity Editor installation, to examine the contents of the library folder to see exactly what the importer generated.",743],["For example:",743],["./Data/Tools/binary2text ./myProject/Library/Artifacts/84/8490a5ed35a4361d679e6055a386969e output_file",743],["The hash value is the asset’s content hash. To find the reported inconsistency and see what content was generated during the check, look at the Editor log.",743],["Importing LOD Meshes",744],["You can create meshes with different levels of detail in an external 3D application for use with Unity's LOD system. If you name these meshes correctly, Unity automatically creates and configures a GameObject with LOD group component for them when it imports the Model.",744],["To import a Model with LOD level into Unity, you must do the following:",744],["In your external 3D application, follow the application's process to create as many LOD meshes as you need.",744],["Name the meshes according to the following naming convention:",744],["ExampleMeshName_LOD0 for the first LOD level (i.e., the most detailed version)",744],["ExampleMeshName_LOD1",744],["ExampleMeshName_LOD2",744],["Export your Model as an FBX file. Alternatively, if you are using Maya, export the mesh group directly into Unity; to do this, go to File > Send to Unity > Selection.",744],["Import the FBX into Unity. Unity recognizes the grouped Meshes and naming convention, and automatically creates an LOD Group component with the appropriate settings.",744],["Additional information",744],["To learn more about importing models, see Importing models.",744],["To learn more about creating and exporting LOD Meshes in Maya, follow the Unity tutorial Creating LODs in Maya.",744],["Importing assets",745],["You can bring assets created outside of Unity into your Unity project. To do this, you can either export the file directly into the Assets folder for your project, or copy it into that folder. For many common formats, you can save your source file directly into your project's Assets folder and Unity can read it. Unity also detects when you save new changes to the file and re-imports files as necessary.",745],["When you create a Unity project, Unity creates a folder (named after your project) which contains the following subfolders:",745],["Temp",745],["Library",745],["Assets",745],["ProjectSettings",745],["Logs",745],["Packages",745],["You can save or copy files that you want to use in your project into the Assets folder, and you can use the Project window inside Unity to view the contents of your Assets folder. Therefore, if you save or copy a file to your Assets folder, Unity imports it and it then appears in your Project window.",745],["When you modify a file in Unity, Unity does not modify your original source file, even though you can often choose between various ways to compress, modify, or otherwise process the asset within Unity. Instead, the import process reads your source file, and creates a game-ready representation of your asset internally, matching your chosen import settings. If you modify the import settings for an asset, or make a change to the source file in the Assets folder, Unity re-imports the asset again to reflect your changes.",745],["Warning:** In most cases, the items that appear in your Project window represent actual files on your computer. If you delete them within the Unity Editor Project window, you also delete them from your computer.",745],["Unity automatically detects files as they are added to the Assets folder, or if they are modified. When you put any asset into your Assets folder, it appears in your Project window.",745],["If you drag a file from your computer's file browser into Unity's Project window, Unity makes a copy and places it into your Assets folder. You can then access this copy from the Project window.",745],["To bring collections of assets into your project from another Unity project, you can use Asset packages.",745],["",745],["Asset Import Settings",745],["The simplest way to safely move or rename your assets is to always do it from within Unity's project folder. This way, Unity automatically moves or renames the corresponding meta file. To read more about .meta files and the import process, see How Unity imports assets.",745],["Each type of asset that Unity supports has a set of Import Settings, which affect how the asset appears or behaves. To view an asset's import settings, select the asset in the Project View. The import settings for this asset will appear in the Inspector. The options that appear vary depending on the type of asset selected.",745],["For example, an image's import settings allow you to choose whether Unity imports it as a Texture, a 2D sprite, or a normal map. The import settings for an FBX file allow you to adjust the scale, generate normals or lightmap coordinates, and split & trim animation clips defined in the file.",745],["For other asset types, the import settings look different. The various settings you see relate to the type of asset selected. Here's an example of an Audio asset, with its related import settings shown in the inspector:",745],["If you are developing a cross-platform project, you can override the \"default\" settings and assign different import settings on a per-platform basis.",745],["",745],["Asset processing",745],["Unity reads and processes any files that you add to the Assets folder, and converts the contents of the file to internal game-ready data. The asset files themselves remain unchanged, and the internal data is stored in the project's Library folder. This data is part of the Unity Editor's Asset Database.",745],["Using internal formats for assets allows Unity to have internal versions of your assets ready to use at runtime in the Editor, and to keep your unmodified source files in the Assets folder. A distinction between the asset files and the internal versions means that you can quickly edit the asset file, and have the Editor pick up the changes automatically. For example, you can save .psd files directly into your Assets folder, but hardware such as mobile devices and PC graphics cards can't process that format directly in order to render them as textures. Instead, Unity can convert an internal version into a format that those platforms can process.",745],["Unity stores the internal representation of your assets in the Library folder, which behaves like a cache folder. As a user, you should never need to alter the Library folder manually; if you do, you might negatively affect your project in the Unity Editor. This also means that you should not include the Library folder under version control.",745],["Note:** If your project is not open in Unity, you can safely delete the Library folder, because Unity can regenerate all of its data from the Assets and ProjectSettings folders the next time you launch your project.",745],["Complex assets",745],["In some cases, Unity might create multiple assets while importing a single asset file. For example:",745],["When a 3D file (such as an FBX file) defines Materials or contains embedded Textures. To handle this, Unity extracts the Materials and embedded Textures as separate assets.",745],["When you want to import an image file as multiple 2D sprites. You should use the 2D Sprite Editor to define multiple sprites from a single graphic image. Unity displays each sprite defined in the Editor as a separate Sprite asset in the Project window.",745],["When a 3D file contains multiple animation timelines or multiple clips. To handle this, Unity automatically defines separate animation timelines or clips based on its animation import settings. The resulting multiple animation clips appear as separate Animation Clip assets in the Project window.",745],["See also",745],["Importing a model",746],["Model files can contain a variety of data, such as meshes, animation rigs and clips, materials and textures. Your file might not contain all of these elements, but you can follow any portion of the workflow that you need to:",746],["Select the file in the Project view to see the Import Settings window",746],["Set any Model-specific or general importer options",746],["Set up options for importing Rigs and Animation (not available for SpeedTree Models)",746],["Dealing with Materials and Textures",746],["Drag the file into Unity",746],["For guidelines on how to export Humanoid animation from your 3D modeling software, see Preparing Humanoid Models for export.",746],["Note:** Unity's primary support for Model files is the FBX format. However, you can save your 3D files from most common 3D modeling software in their native format (for example, .max, .blend, .mb, .ma). When Unity finds these file types in your Assets folder, it calls your 3D modeling software's FBX export plug-in, and imports the file. The 3D modeling software must be installed on the same computer as Unity, so in most cases it's best practice to directly export as FBX from your application into your Assets folder.",746],["",746],["Accessing the Import Settings window",746],["No matter what kind of data you want to extract from the Model file, you always start the same way:",746],["Open the Project window and the Inspector so that you can see both at once.",746],["Select the Model file you want to import from the Asset folder in the Project window.",746],["The Import Settings window opens in the Inspector showing the Model tab by default.",746],["",746],["Setting Model-specific and general importer options",746],["The options that are available for SpeedTree Models vs. other Models are very different. For example, the SpeedTree Model tab provides options mostly for setting up transitions between LOD levels.",746],["Character and animated Models provide more diverse options on their Model tab, which allow you to:",746],["Use the Scale Factor and Convert Units properties to adjust how Unity interprets units. For example, 3ds Max uses 1 unit to represent 10 centimeters, whereas Unity uses 1 unit to represent 1 meter.",746],["Use the Mesh Compression, Read/Write Enabled, Optimize Mesh, Keep Quads, Index Format, or Weld Vertices properties to reduce resources and save memory.",746],["You can enable the Import BlendShapes option if the Model file came from Maya or 3ds Max, or any other 3d modeling application that supports morph target animation.",746],["You can enable the Generate Colliders option for environment geometry.",746],["You can enable specific FBX settings, such as Import Visibility, or Import Cameras and Import Lights.",746],["For Model files that contain only Animation, you can enable the Preserve Hierarchy option to prevent hierarchy mismatch in your skeleton.",746],["You can set the Swap UVs and Generate Lightmap UVs if you are using a Lightmap.",746],["You can exercise control over how Unity handles the Normals and Tangents in your Model with the Normals, Normals Mode, Tangents, or Smoothing Angle options.",746],["",746],["Setting options for importing Rigs and Animation",746],["If your file contains Animation data, you can follow the guidelines for setting up the Rig using the Rig tab and then extracting or defining Animation Clips using the Animation tab. The workflow differs between Humanoid and Generic (non-Humanoid) animation types because Unity needs the Humanoid's bone structure to be very specific, but only needs to know which bone is the root node for the Generic type:",746],["\n Note: SpeedTree Models have neither a Rig nor an Animation tab.\n",746],["",746],["Dealing with Materials and Textures",746],["If your file contains materials and textures, you can define how you want to deal with them:",746],["Click the Materials tab in the Import Settings window.",746],["From the Material Creation Mode drop-down menu, choose how you want to import the Materials from the FBX file. Unless you chose None, several options appear in the Materials tab, including the Location option, whose value determines what the other options are.",746],["Choose the Use Embedded Materials option to keep the Materials inside the imported Asset.",746],["When you have finished setting the options, click the Apply button at the bottom of the Import Settings window to save them or click the Revert button to cancel.",746],["Finding textures",746],["Unity follows a specific search plan to automatically look for textures on import. First, the importer looks for a sub-folder called Textures within the same folder as the mesh, or in any parent folder. If this fails, Unity performs an exhaustive search of all textures in the project. Although slightly slower, the main disadvantage of the exhaustive search is that there could be two or more textures in the project with the same name. In this case, it is not guaranteed that Unity can find the right one.",746],["(A)** Possible places to find Textures",746],["(B)** Mesh being imported",746],["Normal maps",746],["If you have a character with a normal map that was generated from a high-polygon version of the Model, you should import the game-quality version with a Smoothing Angle of 180 degrees. This prevents odd-looking seams in lighting due to tangent splitting. If the seams are still present with these settings, choose Calculate Legacy With Split Tangents from the Tangents drop-down menu. If you are converting a greyscale image into a normal map, you don't need to worry about this.",746],["",746],["Drag the file into Unity",746],["Finally, you can import the file into your scene:",746],["If it contains a Mesh, drag the file into the Scene view to instantiate it as a Prefab for a GameObject.",746],["If it contains Animation Clips, you can drag the file into the Animator window to use in the State Machine. You can also drag the Animation take directly onto an instantiated Prefab in the Scene view. This automatically creates an Animation Controller and connects the animation to the Model.",746],["Importing Textures",747],["A texture is a bitmap image. You can create textures in a digital content creation application, such as Photoshop, and import them into Unity.",747],["In a 3D Project, Unity imports image and movie files in the Assets folder as Textures. In a 2D Project, Unity imports image and movie files in the Assets folder as Sprites.",747],["As long as the image meets the specified size requirements, Unity imports and optimizes it for game use. This extends to multi-layer Photoshop PSD or TIFF files.",747],["To import image and movie files as Textures and Sprites in Unity:",747],["Select the image file in the Project window.",747],["In the Inspector, set the Texture Import Settings.",747],["Click the Apply button to save the changes.",747],["To use the imported Assets in your Project:",747],["For 3D Projects, create a Material and assign the Texture to the new Material.",747],["For 2D Projects, use the Sprite Editor.",747],["Recommendations and limitations",747],["The following topics offer recommendations and detail any limitations on importing Textures:",747],["\nHDR Textures\n",747],["\nTexture dimension sizes\n",747],["\nNormal maps\n",747],["\nAlpha maps\n",747],["\nDetail maps\n",747],["\nReflections (cubemaps)\n",747],["\nAnisotropic filtering\n",747],["\nSupported file formats\n",747],["",747],["HDR Textures",747],["When importing from an EXR or HDR file containing HDR information, the Texture Importer automatically chooses the right HDR format for the output Texture. This format changes automatically depending on which platform you are building for.",747],["",747],["Texture dimension sizes",747],["Ideally, Texture dimension sizes should be powers of two on each side (that is, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 pixels (px), and so on). The Textures do not have to be square; the width can be different from height.",747],["It is possible to use NPOT (non-power of two) Texture sizes with Unity. However, NPOT Texture sizes generally take slightly more memory and might be slower for the GPU to sample, so it’s better for performance to use power of two sizes whenever you can.",747],["If the platform or GPU does not support NPOT Texture sizes, Unity scales and pads the Texture up to the next power of two size. This process uses more memory and makes loading slower (especially on older mobile devices). In general, you should only use NPOT sizes for GUI purposes.",747],["You can scale up NPOT Texture Assets at import time using the Non Power of 2 option in the Advanced section of the Texture Importer.",747],["Note:** Specific platforms may impose maximum Texture dimension sizes. For DirectX, the maximum Texture sizes for different feature levels are as follows:",747],["Graphics APIs / Feature levels Maximum 2D and Cubemap texture dimension size (px) ",747],["DX9 Shader Model 2 (PC GPUs before 2004) / OpenGL ES 2.0 2048 ",747],["DX9 Shader Model 3 (PC GPUs before 2006) / Windows Phone DX11 9.3 level / OpenGL ES 3.0 4096 ",747],["DX10 Shader Model 4 / GL3 (PC GPUs before 2007) / OpenGL ES 3.1 8192 ",747],["DX11 Shader Model 5 / GL4 (PC GPUs since 2008) 16384 ",747],["Notes:**",747],["The Texture Importer only allows you to choose dimension sizes up to 16384 (16384 × 16384 pixels).",747],["Most Mali GPUs support Texture dimension sizes up to 4K for cubemaps.",747],["",747],["Normal maps",747],["Normal maps are used by normal map Shaders to make low-polygon models look as if they contain more detail. Unity uses normal maps encoded as RGB images. You also have the option to generate a normal map from a grayscale height map image.",747],["",747],["Alpha maps",747],["An alpha map is a Texture that contains only alpha information. You can use an alpha map to apply varying levels of transparency to a Material.",747],["You can create an alpha map by creating a Texture with information in the alpha channel, or by creating a grayscale Texture and converting the grayscale values to alpha in Unity.",747],["See the documentation on Texture Import Settings for more information.",747],["",747],["Detail maps",747],["If you want to make a Terrain, you normally use your main Texture to show areas of terrain such as grass, rocks and sand. If your terrain is large, it may end up very blurry. Detail Textures hide this fact by fading in small details as your main Texture gets closer.",747],["When drawing Detail Textures, a neutral gray is invisible, white makes the main Texture twice as bright, and black makes the main Texture completely black.",747],["See documentation on Secondary Maps (Detail Maps) for more information.",747],["",747],["Reflections (cubemaps)",747],["To use a Texture for reflection maps (for example, in Reflection Probes or a cubemapped Skybox, set the Texture Shape to Cube. See documentation on Cubemap Textures for more information.",747],["",747],["Anisotropic filtering",747],["Anisotropic filtering increases Texture quality when viewed from a grazing angle. This rendering is resource-intensive on the graphics card. Increasing the level of anisotropy is usually a good idea for ground and floor Textures. Use Quality settings to force anisotropic filtering for all Textures or disable it completely. Although, if a texture has its Aniso level set to 0 in Texture Import Settings, forced anisotropic filtering does not appear on this texture.",747],["",747],["Supported file formats",747],["Unity can read the following file formats:",747],["BMP",747],["EXR",747],["GIF",747],["HDR",747],["IFF",747],["JPG",747],["PICT",747],["PNG",747],["PSD",747],["TGA",747],["TIFF",747],["Unity automatically flattens multi-layer Photoshop PSD or TIFF files on import so that there is no size penalty for your game. This flattening happens to the imported data in Unity, not to the file itself, so you can continue to save and import your PSD or TIFF files without losing any of your work when using these file types natively. This allows you to have one copy of each Texture which you can use in Photoshop, your 3D modelling application, and in Unity.",747],["Incremental build pipeline",748],["For faster iteration during development, Unity uses an incremental build pipeline that only rebuilds parts of the application if they have changed since the previous build. This includes build steps such as asset serialization, code compilation, data compression, and signing. By default, Unity uses the incremental builds pipeline for both release and development builds.",748],["The incremental build pipeline also automates the Scripts Only Build feature. Scripts Only Build is therefore only available in the Build Settings window for the platforms that do not use incremental builds.",748],["The incremental build pipeline works for both the Mono and IL2CPP scripting backend. Although, the output file structure changes depending on which scripting backend your project uses.",748],["Platform compatibility",748],["Unity supports the incremental build pipeline for the following platforms:",748],["Standalone (Windows, Mac and Linux)",748],["WebGL",748],["Xbox One",748],["Xbox Series X and Xbox Series S",748],["Android",748],["iOS",748],["tvOS",748],["",748],["Creating non-incremental builds",748],["In some scenarios, it can be useful or necessary to create builds that don't use the incremental build pipeline.",748],["To create a clean, non-incremental, build:",748],["Open the Build Settings window.",748],["Next to the Build button, select the drop-down.",748],["Select Clean Build.",748],["In general, if expected changes are not present after an incremental build and you think there is a problem with the incremental build pipeline, create a clean build. The most common reason for this is when you implement or make changes to build process callbacks that affect assets.",748],["Since the build process can't know how a callback you've implemented affects an asset, it can't determine how to rebuild the asset. Unity only regenerates files if the file's dependencies change. This means if the callback modifies a file that Unity generates, and the file's dependencies don't change, the callback can apply modifications to an already modified file. For example, if the callback adds new entries to an Android App Manifest, and the dependencies for the Android App Manifest don't change, the callback still adds the new entries, which results in an invalid file.",748],["If you change a callback or its input data and you want Unity to rebuild assets that the callback affects, create a clean build. Examples of callbacks include:",748],["Note**: If you make changes to an asset, Unity rebuilds that asset when it builds the application. This also includes processing any callback that affects it which means you don't need to create a clean build if you make changes to an asset, only if you make changes to a build process callback.",748],["Input",749],["Input allows the user to control your application using a device, touch, or gestures. You can program in-app elements, such as the graphic user interface (GUI) or a user avatar, to respond to user input in different ways.",749],["Unity supports input from many types of input devices, including:",749],["Keyboards and mice",749],["Joysticks",749],["Controllers",749],["Touch screens",749],["Movement-sensing capabilities of mobile devices, such as accelerometers or gyroscopes",749],["VR and AR controllers",749],["Unity supports input through two separate systems:",749],["The Input Manager is part of the core Unity platform and available by default.",749],["The Input System is a package that needs to be installed via the Package Manager before you can use it. It requires the .NET 4 runtime, and doesn't work in projects that use the old .NET 3.5 runtime.",749],["Input Modules",750],["An Input Module is where the main logic of an event system can be configured and customised. Out of the box there are two provided Input Modules, one designed for Standalone, and one designed for Touch input. Each module receives and dispatches events as you would expect on the given configuration.",750],["Input modules are where the 'business logic' of the Event System take place. When the Event System is enabled it looks at what Input Modules are attached and passes update handling to the specific module.",750],["Input modules are designed to be extended or modified based on the input systems that you wish to support. Their purpose is to map hardware specific input (such as touch, joystick, mouse, motion controller) into events that are sent via the messaging system.",750],["The built in Input Modules are designed to support common game configurations such as touch input, controller input, keyboard input, and mouse input. They send a variety of events to controls in the application, if you implement the specific interfaces on your MonoBehaviours. All of the UI components implement the interfaces that make sense for the given component.",750],["Focused Inspectors",751],["A focused Inspector is a dedicated Inspector window for a specific GameObject, Unity component, or Asset. It always displays the properties of the item you opened it for, even if you select something else in the Scene or Project.",751],["Focused Inspectors work just like regular Inspectors, except for the following differences:",751],["\nThey do not update to show the properties for the current selection.\n",751],["\nYou cannot lock them. Each focused Inspector shows a specific item’s properties, so there's no need.\n",751],["\nYou cannot toggle between Debug and Normal mode from a focused Inspector.\n",751],["You can open as many focused Inspectors as you want. Focused Inspectors open in floating windows that you can reposition, dock, and resize in the same way you can any other window.",751],["Unity saves any open focused Inspectors when you close a Project, and restores them when you reopen it.",751],["Open focused Inspectors",751],["There are several ways to open a focused Inspector, depending on what you're inspecting.",751],["Unity adds focused Inspectors to the list of open windows (Menu: Window > Panels > [LIST OF OPEN WINDOWS]).",751],["Select a focused Inspector from the list to bring it to the front.",751],["For GameObjects and Project Assets",751],["To open a focused Inspector for a single GameObject or Asset:",751],["Right-click a GameObject in the Hierarchy view, or an Asset in the Project view.",751],["From the context menu, select Properties.",751],["Alternatively, select the GameObject or Asset and do one of the following:",751],["\nFrom the main menu, select Assets > Properties.\n",751],["\nUse the Alt + P / Option + Shift + P shortcut.\n",751],["Unity opens the focused Inspector in a new window.",751],["To open focused Inspectors for multiple GameObjects and/or Assets:",751],["Select any combination of GameObjects in the Hierarchy view and Assets in the Project view.",751],["Do one of the following:",751],["\nRight-click one of the selected items, and from the context menu, select Properties.\n",751],["\nFrom the main menu, select Assets > Properties.\n",751],["\nUse the Alt + P / Option + Shift + P shortcut.\n",751],["Unity opens a new window with a focused Inspector tab for each selected item.",751],["The image below shows three selected items (left), two GameObjects and one Asset, and the window you get when you open a focused Inspector for them (right).",751],["For components",751],["To open a focused Inspector for one of a GameObject's components:",751],["Inspect the GameObject and locate the component you want to open a focused Inspector for.",751],["From the component's More items (⋮) menu, select Properties.",751],["This is useful for frequently edited properties. For example you may want to move a GameObject often, but leave the rest of its properties unchanged. In that case, you can open its Transform component.",751],["The image below shows a Camera open in a regular Inspector (1), and its Transform component open in a focused Inspector (2). Notice that the focused Inspector's tab header displays the name of the GameObject that the component belongs to.",751],["For reference properties",751],["When a GameObject has reference properties, you can open focused Inspectors for the GameObjects or Assets they reference.",751],["Inspect the GameObject and locate the property whose reference you want to open in a focused Inspector.",751],["Right-click the reference field and select Properties from the context menu.",751],["For hover items",751],["You can set up a shortcut to open a focused Inspector for whichever item in the Hierarchy view or Project view that you hover the pointer over.",751],["To assign a keyboard shortcut to the PropertyEditor > OpenMouseOver command, use the Shortcuts Manager.",751],["This is useful when you want to open a focused Inspector for an item without affecting the current selection.",751],["Locate a focused Inspector's source",751],["To locate the item whose properties are displayed in a focused Inspector, do one of the following:",751],["\nFrom the focused Inspector's More Items (⋮) menu, select Ping. Unity highlights the item in the Hierarchy view or the Project view.\n",751],["\nHover the pointer over the focused Inspector's tab header to display a tooltip that shows the full path to the item in the Scene Hierarchy or the Project.\n",751],["Working in the Inspector",752],["This page describes some options for controlling the Inspector window itself. For information about setting properties for GameObjects, scripts, and Assets, see Editing properties.",752],["",752],["Lock the Inspector",752],["Normally, the Inspector shows the properties of the currently selected GameObject, script, or Asset. But sometimes, it's useful to keep one item in the Inspector while you work with other items. In that case, you can lock an Inspector window to a specific item.",752],["To lock an Inspector window to an item, click the lock icon in the Inspector window. The lock icon changes to show that the Inspector is now locked to the selection.",752],["This is useful when you're editing one item's properties frequently. For example, if you're fine-tuning a Camera's position, you can lock an Inspector window to the Camera, and open a second Inspector window (More Items (⋮) menu: Add Tab > Inspector) to continue displaying the properties of the current selection.",752],["Note: ",752],["\n - \n",752],["Focused Inspectors are an alternative to locking the Inspector window. A focused Inspector only ever displays the properties of the item you open it for. ",752],["",752],["Reorder GameObject components",752],["You can reorder a GameObject's components in the Inspector window. The component order you apply in the Inspector is the same order that you need to use when you query components in your scripts.",752],["A GameObject's Transform component is always the topmost component. You cannot move it, or place other components above it.",752],["To reorder a GameObject's components in the Inspector window, do one of the following:",752],["\nDrag-and-drop component headers from one position to another. When you drag a component header, a blue insertion marker appears where Unity will place the component.\n",752],["\nRight-click a component to open the context menu, and select Move Up or Move Down.\n",752],["Reordering components for multiple GameObjects",752],["When you select multiple GameObjects, the Inspector displays all of the components that the selected GameObjects have in common. If you reorder these common components, the changes apply to all of the selected GameObjects.",752],["",752],["Assign icons",752],["You can assign custom icons to GameObjects, Prefabs, and scripts from the Inspector window. Custom icons appear in the Scene view in the same way as default icons for items such as Lights and Cameras.",752],["\nWhen you assign an icon to a GameObject, the icon appears in the Scene view over that GameObject, and any duplicates.\n",752],["\nWhen you assign an icon to a Prefab, the icon appears in the Scene view over any instances of that Prefab.\n",752],["\nWhen you assign an icon to a script, the icon appears in the Scene view over any GameObject that has the script attached.\n",752],["To control how Unity draws custom icons in the Scene view, use the Gizmos menu.",752],["NOTE ",752],["\n - \n",752],["When you change an Asset’s icon, Unity marks the Asset as modified, and version control systems register the change. ",752],["Assign custom icons to GameObjects, scripts, and Prefabs",752],["To assign a custom icon to a GameObject or a script:",752],["Open the item in an Inspector window.",752],["Click the Select icon button.",752],["Choose an icon from the Select icon menu (see below).",752],["To assign a custom icon to a Prefab, you must open the Prefab in Prefab Mode.",752],["Choose icons from the Select icon menu",752],["You assign custom Icons from the Select Icon menu.",752],["Icon type: Description: ",752],["\n\n- \n\n",752],["1 Label icons are colored capsules. In the Scene view, they display the names of the items they're assigned to.Click a label icon to assign it. ",752],["2 Image-only icons are colored divots. They're useful when you work with objects that may not have a visual representation. For example, you can assign image-only icons to navigation waypoints so you can see and select them in the Scene view. Click an image-only icon to assign it. ",752],["3 Asset icons are image Assets in your Scene that you use as custom icons. For example, you could use a skull and crossbones icon to indicate danger areas in a game level.Click the Other button to open an Object Picker window and select an image Asset to assign as an icon. ",752],["Toggle Debug Mode",752],["Normally, the Inspector window is configured as an editor for the selection's properties. But sometimes it's useful to only see the properties and their values. When you activate Debug mode, the Inspector shows only the properties and their values. If the selection has script components, Debug mode also displays private variables, although you can't edit their values.",752],["You can toggle Debug mode for each Inspector window individually.",752],["\nTo turn on Debug mode, click the More Items (⋮) button to open the context menu, and select Debug.\n",752],["\nTo return to Normal mode, click the More Items (⋮) button to open the context menu, and select Normal.\n",752],["Reorganized Inspector section pages in Unity 2020.1",752],["Installing Unity from the command line",753],["If you want to automate the deployment of Unity in an organization, you can install the Editor and other components from the command line. The components are normal installer executable programs and packages which you can use to automate the deployment of Unity.",753],["To download the components, you use the Unity installer to download the Unity components to a folder on your computer.",753],["Download and run the installer. Release versions of the installer are available from the Unity download archive. For pre-release versions of the installer, see the Beta programs page.",753],["In Choose Components, select all of the components for which you are automating deployment.",753],["In Choose Download and Install locations, click the Download to radio button.",753],["Enter a location in which to store the component installers.",753],["Finish the installation.",753],["Navigate to the download location you specified. In the folder, you will find the installer files for the components you selected and a script file (install.bat on Windows or install.sh on Linux or OS X) that you can run to install the components.",753],["To install Unity on another computer using the downloaded components, copy the contents of the folder to the destination computer and execute the install script.",753],["Installing individual Unity components on Windows from the command line",753],["Use the following options when installing the Editor and other components from the command line on Windows.",753],["Note**: Installer command line arguments are case-sensitive.",753],["Unity Editor install",753],["Command Details ",753],["/S Performs a silent (no questions asked) install. ",753],["/D=PATH Sets the default install directory. Useful when combined with the silent install option. The default folder is C:\\Program Files (x86)\\Unity (32-bit) or C:\\Program Files\\Unity (64-bit). ",753],["Example**:",753],["UnitySetup64.exe /S /D=E:\\Development\\Unity",753],["This example installs Unity silently to a E:\\Development\\Unity folder, which becomes the root of the Unity installation. In this case, the Editor executable is installed in E:\\Development\\Unity\\Editor\\Unity.exe. The default install directory must be the last argument on the command line. The supplied path must not be surrounded by quotes, even if the path contains spaces.",753],["Unity Editor uninstall",753],["To perform a silent uninstall, run Uninstall.exe /S from the command line or a script.",753],["Note**: Although the process finishes right away, there is a delay before the files are actually removed. This is because the uninstaller is copied to a temporary location to enable it to remove itself. Make sure that the working directory is not inside the Unity install location. If it is, the uninstaller is unable to remove the folder.",753],["Standard Assets install",753],["To silently install Standard Assets:",753],["UnityStandardAssetsSetup.exe /S /D=E:\\Development\\Unity",753],["Note**: If specifying a folder, use the Unity root folder (that is, the folder containing the Editor folder, and not the folder in which Unity.exe is installed.)",753],["Example Project install",753],["To silently install the Example Project, use:",753],["UnityExampleProjectSetup.exe /S /D=E:\\Development\\Unity",753],["Note**: The default folder is C:\\Users\\Public\\Documentation\\Unity Projects\\Standard Assets Example Project.",753],["Installing Unity on OS X from the command line",753],["The individual Unity installers are provided as .pkg files, which can be installed using the installer command, as described below.",753],["Unity Editor install",753],["To install the Editor into a /Applications/Unity folder on the specified target volume, enter:",753],["sudo installer [-dumplog] -package Unity.pkg -target /",753],["Standard Assets install",753],["To install the Standard Assets into a /Applications/Unity/Standard Assets folder on the specified volume, enter:",753],["sudo installer [-dumplog] -package StandardAssets.pkg -target /",753],["Example Project install",753],["To install the Example Project into a /Users/Shared/Unity/Standard-Assets folder on the specified volume, enter:",753],["sudo installer [-dumplog] -package Examples.pkg -target /",753],["",753],["Torrent download",753],["If you prefer to download Unity via a BitTorrent client, you can download get a torrent link from the Unity download archive page. Not all versions have a torrent download. If a version is available to download as a torrent, the option is presented as Torrent download (Win+Mac) in the Downloads dropdown menu.",753],["Installing several versions at once",753],["You can install multiple versions of Unity on the same computer.",753],["On a Mac, the installer creates a folder called Unity, and overwrites any existing folder with this name. To install more than one version of Unity on your Mac, rename the existing Unity folder before installing another version.",753],["On a PC, the install folder is always named Unity X.Y.Z[fp]W, where the f is for an official release, and p is used to mark a patch release.",753],["We strongly recommend that if you rename a Unity folder, you name the new folder logically (for example, add the version number to the end of the name). Any existing shortcuts, aliases and links to the offline docs might no longer point to the old version of Unity. This can be particularly confusing with the offline docs; if you suddenly find that browser bookmarks to the offline docs no longer work, then check that they have the right folder name in the URL.",753],["Installation advice updated in Unity 2017.2",753],["Installation advice updated in Unity 2017.4",753],["Instantiating Prefabs at run time",754],["Prefabs come in very handy when you want to instantiate complicated GameObjects or collections of GameObjects at run time. Compared with creating GameObjects from scratch using code, instantiating Prefabs using code has many advantages because you can:",754],["Instantiate a Prefab using one line of code. Creating equivalent GameObjects from scratch requires many more lines of code.",754],["Set up, test, and modify the Prefab quickly and easily using the Scene view, Hierarchy and Inspector.",754],["Change which Prefab is instantiated without changing the code. You can make a simple rocket into a super-charged rocket, without any code changes.",754],["Note**: You can download a Unity Project containing all the examples on this page, here:",754],["InstantiatingPrefabsExamples.zip**",754],["Basics of instantiating a Prefab",754],["To instantiate a Prefab at run time, your code needs a reference to that Prefab. You can make this reference by creating a public variable in your code to hold the Prefab reference. The public variable in your code appears as an assignable field in the Inspector. You can then assign the actual Prefab you want to use in the Inspector.",754],["The script example below has a single public variable, \"myPrefab\", that is a reference to a Prefab. It creates an instance of that Prefab in the Start() method.",754],["using UnityEngine;",754],["public class InstantiationExample : MonoBehaviour",754],["// Reference to the Prefab. Drag a Prefab into this field in the Inspector.",754],["public GameObject myPrefab;",754],["// This script will simply instantiate the Prefab when the game starts.",754],["void Start()",754],["// Instantiate at position (0, 0, 0) and zero rotation.",754],["Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);",754],["To use this example:",754],["Create a new C# script in your Project, and name it \"InstantiationExample\".",754],["Copy and paste in the script example above into your new script, and save it.",754],["Create an empty GameObject using the menu GameObject > Create Empty.",754],["Add the script to the new GameObject as a component by dragging it onto the empty GameObject.",754],["Create any Prefab, and drag it from the Project window into the My Prefab field in the script component.",754],["When you start Play Mode, you should see your Prefab instantiate at position (0, 0, 0) in the Scene.",754],["You can drag a different Prefab into the My Prefab field in the Inspector to change which Prefab is instantiated, without having to change the script.",754],["Because this first example is very simple, it may not seem to provide any advantage over just placing a Prefab into the Scene yourself. However, being able to instantiate Prefabs using code provides you with powerful abilities to dynamically create complex configurations of GameObjects while your game or app is running, as shown in the following examples.",754],["Common scenarios",754],["To illustrate the strength of instantiating Prefabs at run time, here are some basic situations where they are useful:",754],["Building a structure out of a single Prefab by replicating it multiple times in different positions, for example in a grid or circle formation.",754],["Firing a projectile Prefab from a launcher. The projectile Prefab could be a complex configuration containing a Mesh, Rigidbody, Collider, AudioSource, Dynamic Light, and a child GameObject with its own trail Particle System.",754],["A vehicle, building or character, for example a robot, breaking apart into many pieces. In this scenario, the example script deletes and replaces the complete, operational robot Prefab with a wrecked robot Prefab. This wrecked Prefab consists of separate broken parts of the robot, each set up with Rigidbodies and Particle Systems of their own. This technique allows you to blow up a robot into many pieces, with just one line of code, which replaces the original GameObject with a wrecked Prefab.",754],["The following sections show you how to implement these scenarios.",754],["Building a structure",754],["You can use code to create many copies of a Prefab in a particular configuration almost instantaneously. Using code to generate structures like this is called procedural generation. The example below creates a wall of block instances.",754],["To try this example, create the script below, name it Wall, and place it on an empty GameObject in your Scene.",754],["using UnityEngine;",754],["public class Wall : MonoBehaviour",754],["public GameObject block;",754],["public int width = 10;",754],["public int height = 4;",754],["void Start()",754],["for (int y=0; y",754],["for (int x=0; x",754],["Instantiate(block, new Vector3(x,y,0), Quaternion.identity);",754],["When you have done this, you should see the Block variable in the Inspector, with the word None in the field. A value of \"None\" means that no Prefab has been assigned to this variable yet.",754],["The example script above won’t work until you assign a Prefab to the Block variable. To create a simple block Prefab:",754],["Choose GameObject > 3D Object > Cube.",754],["Drag the cube from the Hierarchy w*indow into the Assets folder in the Project window. *This creates a Prefab Asset.",754],["Rename your Prefab to \"Block\".",754],["Now that your Block Prefab exists as an Asset, you can safely delete the cube from your Hierarchy.",754],["Now that you have created a Block Prefab, you can assign it to the Block variable. Select your original GameObject (the one with the \"Wall\" script attached to it). Then drag the “Block” Prefab from the Project window into the “Block” variable slot (where it says “None”).",754],["![The Block variable, with the Block Prefab assigned to it",754],["](../uploads/Main/InstantiatingWallBlockAssigned.png)",754],["When you have finished this set-up, click Play and you’ll see that Unity builds the wall using the Prefab:",754],["This is a flexible workflow pattern that you can use over and over again in Unity. Because you are using a Prefab in this script, you can easily replace or edit the Prefab to modify the properties of the bricks in the wall, without needing to touch the script. You can also use your Wall script on other GameObjects in your Scene with different Prefabs assigned to them to have various walls made from different types of Prefab.",754],["You can use code to place a GameObject in a grid, in circle pattern, randomly scattered, or any other configurations that you can think of to fit whatever game or app you are creating. Here’s another example showing how to place instances in a circular formation:",754],["using UnityEngine;",754],["public class CircleFormation : MonoBehaviour",754],["// Instantiates prefabs in a circle formation",754],["public GameObject prefab;",754],["public int numberOfObjects = 20;",754],["public float radius = 5f;",754],["void Start()",754],["for (int i = 0; i < numberOfObjects; i++)",754],["float angle = i * Mathf.PI * 2 / numberOfObjects;",754],["float x = Mathf.Cos(angle) * radius;",754],["float z = Mathf.Sin(angle) * radius;",754],["Vector3 pos = transform.position + new Vector3(x, 0, z);",754],["float angleDegrees = -angle*Mathf.Rad2Deg;",754],["Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);",754],["Instantiate(prefab, pos, rot);",754],["Instantiating projectiles & explosions",754],["In this scenario:",754],["A \"Launcher\" GameObject instantiates a projectile Prefab when the player presses the fire button. The Prefab contains a mesh, a Rigidbody, and a Collider, so it can fly through the air and detect when a collision occurs.",754],["The projectile collides with something and instantiates an explosion Prefab. The explosion Prefab contains a Particle System effect and a script that applies a force to surrounding GameObjects.",754],["In the same way as the Block Prefab above, you can instantiate the projectile in just one line of code, no matter how complex the projectile Prefab is. After instantiating the Prefab, you can also modify any properties of the instantiated GameObject. For example, you can set the velocity of the projectile’s Rigidbody.",754],["As well as being easier to use, you can modify the Prefab later on without touching the code. So if your projectile is a rocket, later on you could add a Particle System to it to make it leave a cloud trail. After you do this, all your instantiated rockets have particle trails.",754],["This script shows how to launch a projectile using the Instantiate() function.",754],["using UnityEngine;",754],["public class FireProjectile : MonoBehaviour",754],["public Rigidbody projectile;",754],["public float speed = 4;",754],["void Update()",754],["if (Input.GetButtonDown(\"Fire1\"))",754],["Rigidbody p = Instantiate(projectile, transform.position, transform.rotation);",754],["p.velocity = transform.forward * speed;",754],["In the code, the Prefab variable type is a Rigidbody, and not GameObject. This has two useful effects:",754],["Only GameObjects that have a Rigidbody component can be assigned to this variable. This is useful because it helps make sure you’re assigning the correct GameObject to the variable.",754],["The Instantiate method returns a reference to the Rigidbody component on the new instance. This is useful because it makes it simple to set the velocity of the Rigidbody immediately after instantiating it.",754],["When making a public Prefab variable, the variable type can be a GameObject, or it can be any valid Component type (either a built-in Unity component or one of your own MonoBehaviour script).",754],["For GameObject type variables, you can assign any GameObject to the variable, and the Instantiate function returns a reference to the new GameObject instance.",754],["For component type variables (such as Rigidbody, Collider, and Light), you can only assign GameObjects of that component type to the variable, and the Instantiate function returns a reference to that specific component on the new GameObject instance.",754],["The following script (placed on the projectile Prefab) performs the action of instantiating the explosion at the projectile’s current position and removing the projectile GameObject when the projectile collides with something.",754],["using UnityEngine;",754],["public class Projectile : MonoBehaviour",754],["public GameObject explosion;",754],["void OnCollisionEnter()",754],["Instantiate(explosion,transform.position,transform.rotation);",754],["Destroy(gameObject);",754],["Notice in the image above, which shows the scripts running in Play mode, the instantiated GameObjects appear in the Hierarchy, with the word \"(Clone)\" appended to the name.",754],["Replacing a character with a ragdoll or wreck",754],["Often in games, you might want to switch a character, vehicle, building or other Asset from an \"intact\" state to a “destroyed” state. Rather than trying to modify the intact version of the GameObject (such as removing scripts, adding Rigidbody components and so on), it’s often much more efficient and effective to delete the entire intact GameObject and replace it with an instantiated destroyed Prefab. This gives you a lot of flexibility. You could use a different Material for the destroyed version, attach completely different scripts, or instantiate a Prefab containing the GameObject broken into many pieces to simulate a wrecked and shattered version of the original GameObject. Any of these options can be achieved with a single call to Instantiate(), to bring your destroyed version into the Scene, while deleting the original.",754],["Most importantly, you can create the destroyed version which you Instantiate() with completely different GameObjects compared to the original. For example, to create a breakable robot, you would model two versions: one that consists of a single GameObject with Mesh Renderer",754],["and scripts for robot movement, and the other that consists of several skeletal parts that can be controlled individually by physics. Your game runs faster when using the model with just one GameObject, because the model contains fewer triangles and so it renders faster than the robot that has many small parts. Also while your robot is happily walking around, there is no reason to have it in separate parts.",754],["To build a wrecked robot Prefab, you could:",754],["Model your robot with lots of different skeletal parts in your favorite 3D modeling software, and export it into the Assets folder of your Unity Project.",754],["Create an empty Scene in the Unity Editor.",754],["Drag the model from the Project window into the empty Scene.",754],["Add Rigidbodies to all parts, by selecting all the parts and choosing Component > Physics > Rigidbody.",754],["Add Colliders to all parts by selecting all the parts and choosing Component > Physics > Mesh Collider (enable the Convex option for faster performance).",754],["Make sure you parent all the parts of your wrecked robot to a single root GameObject.",754],["For an extra special effect, add a smoke-like Particle System as a child GameObject to each of the parts.",754],["Now you have a robot with multiple explodable parts. The parts can fall to the ground because they are controlled by physics, and each part creates a Particle trail due to the attached Particle System.",754],["Click Play to preview how your model reacts, and make any necessary tweaks.",754],["Drag the root GameObject into the Assets *folder in the Project window *to create a new Prefab.",754],["The following example shows how you can model these steps in code.",754],["using UnityEngine;",754],["public class WreckOnCollision : MonoBehaviour",754],["public GameObject wreckedVersion;",754],["// Update is called once per frame",754],["void OnCollisionEnter()",754],["Destroy(gameObject);",754],["Instantiate(wreckedVersion,transform.position,transform.rotation);",754],["You can download a Project containing all these example, here:",754],["InstantiatingPrefabsExamples.zip**",754],["Inverse Kinematics",755],["Most animation is produced by rotating the angles of joints in a skeleton to predetermined values. The position of a child joint changes according to the rotation of its parent and so the end point of a chain of joints can be determined from the angles and relative positions of the individual joints it contains. This method of posing a skeleton is known as forward kinematics.",755],["However, it is often useful to look at the task of posing joints from the opposite point of view - given a chosen position in space, work backwards and find a valid way of orienting the joints so that the end point lands at that position. This can be useful when you want a character to touch an object at a point selected by the user or plant its feet convincingly on an uneven surface. This approach is known as Inverse Kinematics (IK) and is supported in Mecanim for any humanoid character with a correctly configured Avatar.",755],["To set up IK for a character, you typically have objects around the scene that a character interacts with, and then set up the IK through script, in particular, Animator functions like",755],["SetIKPositionWeight,",755],["SetIKRotationWeight,",755],["SetIKPosition,",755],["SetIKRotation,",755],["SetLookAtPosition,",755],["bodyPosition,",755],["In the illustration above, we show a character grabbing a cylindrical object. How do we make this happen?",755],["We start out with a character that has a valid Avatar.",755],["Next create an Animator Controller with containing at least one animation for the character. Then, in the Layers pane of the Animator window, click the cog settings icon of the Layer and enable the IK Pass checkbox in the context menu.",755],["Make sure the Animator Controller is assigned to the character's Animator Component:",755],["Next, attach to it a script that actually takes care of the IK, let's call it IKControl. This script sets the IK target for the character's right hand, and its look position to make it look at the object it is holding:",755],["using UnityEngine;",755],["using System;",755],["using System.Collections;",755],["[RequireComponent(typeof(Animator))]",755],["public class IKControl : MonoBehaviour {",755],["protected Animator animator;",755],["public bool ikActive = false;",755],["public Transform rightHandObj = null;",755],["public Transform lookObj = null;",755],["void Start ()",755],["animator = GetComponent();",755],["//a callback for calculating IK",755],["void OnAnimatorIK()",755],["if(animator) {",755],["//if the IK is active, set the position and rotation directly to the goal.",755],["if(ikActive) {",755],["// Set the look target position, if one has been assigned",755],["if(lookObj != null) {",755],["animator.SetLookAtWeight(1);",755],["animator.SetLookAtPosition(lookObj.position);",755],["// Set the right hand target position and rotation, if one has been assigned",755],["if(rightHandObj != null) {",755],["animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1);",755],["animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1);",755],["animator.SetIKPosition(AvatarIKGoal.RightHand,rightHandObj.position);",755],["animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);",755],["//if the IK is not active, set the position and rotation of the hand and head back to the original position",755],["else {",755],["animator.SetIKPositionWeight(AvatarIKGoal.RightHand,0);",755],["animator.SetIKRotationWeight(AvatarIKGoal.RightHand,0);",755],["animator.SetLookAtWeight(0);",755],["As we do not intend for the character's hand to reach inside the object to its centre (the cylinder's pivot point), we position an empty child object (in this case, named \"Cylinder Grab Handle\") where the hand should be on the cylinder, and rotate it accordingly. The hand then targets this child object.",755],["This \"grab handle\" Game Object should then be assigned as the \"Right Hand Obj\" property of the IKControl script",755],["In this example, we have the look target set to the cylinder itself, so the character looks directly towards the centre of the object even though the handle is near the bottom.",755],["Enter play mode, and you should see the IK come to life. Observe the character grabbing and ungrabbing the object as you click the IKActive checkbox, and try moving the cylinder around in playmode to see the arm and hand follow the object.",755],["iOS authorizations in Unity",756],["Apple’s operating system requires applications to request authorization before accessing sensitive information or device features. If your application requires access to features such as the device's camera, microphone, or location, the device user must grant access to your application.",756],["For more information on requesting authorizations on iOS devices, refer to the Apple documentation.",756],["To access the device features that your application requires, you must:",756],["Provide a feature usage description in the info.plist file.",756],["Send a request for authorization.",756],["Provide feature usage description",756],["A feature usage description or purpose string is a message that the iOS system displays when your application tries to access the device feature. It's best practice to add a clear description stating the reason for application access.",756],["You can enter the feature usage description in Configuration section of Player settings (menu: Edit > Project Settings > Player > Other Settings). When you add the usage description to Player settings, Unity also adds it as a key-value pair to the info.plist file. For example, if your application wants to access the device camera, add Camera usage description in the Player settings. The description you enter automatically appears as NSCameraUsageDescription key value in the info.plist file. For more information, refer to Apple-specific iOS Player Settings.",756],["Alternatively, you can directly add the required feature usage description key-value pairs in the info.plist file.",756],["Send a request for authorization",756],["After you add the feature usage description, send a request for camera or microphone access using Application.RequestUserAuthorization method. The system displays a dialog describing the request for authorization.",756],["For a code example that shows how to use this API, refer to Application.RequestUserAuthorization.",756],["For information about accessing device location, refer to LocationService API.",756],["You can check the authorization status of your request using Application.HasUserAuthorization method.",756],["Note**: The device user can modify the feature authorization through device settings at any given time. You can use Application.HasUserAuthorization method to verify the authorization status of a feature before accessing it.",756],["Building and delivering for iOS",757],["This section of the User Manual explains how to build and publish an iOS application.",757],["Topic Description ",757],["-------------------------------------- ------------------------------------------------------------ ",757],["iOS Build Settings Reference documentation for iOS Build Settings. ",757],["App Thinning Explains how to setup your application to use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. ",757],["Detect Game Controllers",758],["Unity includes the Game Controller framework in the project only if a script in the project references Input.GetJoystickNames. If it’s available, Unity iOS Runtime loads the framework dynamically.",758],["To get the list of all available controllers, call Input.GetJoystickNames. You can re-check this list at any time to detect if controllers have been attached or detached.",758],["You can call this API to detect the type of controller that's attached. Names follow the pattern: [$profile_type,$connection_type] joystick $number by $model. $profile_type can be either basic or extended, and $connection_type is either wired or wireless. When Unity detects at least one controller, you can either disable on-screen touch controls or amend them to supplement controller input.",758],["Example: Detect attached Game Controllers",758],["The following code sample checks to see if any controllers are connected to the device.",758],["using System.Collections;",758],["using UnityEngine;",758],["public class GameControllers : MonoBehaviour",758],["private bool connected = false;",758],["IEnumerator CheckForControllers() {",758],["while (true) {",758],["var controllers = Input.GetJoystickNames();",758],["if (!connected && controllers.Length > 0) {",758],["connected = true;",758],["Debug.Log(\"Connected\");",758],["} else if (connected && controllers.Length == 0) {",758],["connected = false;",758],["Debug.Log(\"Disconnected\");",758],["yield return new WaitForSeconds(1f);",758],["void Awake() {",758],["StartCoroutine(CheckForControllers());",758],["Additional resources:",758],["Developing for iOS",759],["This section of the User Manual contains iOS-specific development information on topics such as input, in-app purchases, and debugging.",759],["Topic Description ",759],["------------------------------------------------------------ ------------------------------------------------------------ ",759],["iOS mobile scripting Contains information about scripting for iOS. ",759],["Input for iOS devices Explains how to detect and handle user input on different types of iOS device. ",759],["Simulate an iOS device Simulate how your application will appear and behave on an iOS device. ",759],["Unity Remote Explains how to use Unity Remote to view your application on a device without creating a build. ",759],["Managed stack traces on iOS Explains how to interpret stack traces for iOS. ",759],["Optimizing Performance on iOS Contains information about performance and optimization on iOS devices ",759],["Create and use plug-ins in iOS Describes the plug-in types you can use in iOS and explains how to build and use them. ",759],["Integrating Unity into native iOS applications Explains how to integrate the Unity Runtime Library into iOS applications. ",759],["Deep linking for iOS Explains how to use deep linking on iOS devices. ",759],["iOS authorizations in Unity Explains how to request access to iOS device features for your application. ",759],["Prepare your application for In-App Purchases Explains how to setup a Unity application for downloadable content and in-app purchases. ",759],["Social API Explains how to use the Social API to interface with GameCenter. ",759],["Unity's Device Simulator for iOS",760],["Unity's Device Simulator can simulate the appearance and behavior of a variety of iOS devices. This helps you test basic interactions and view the layout of your application on iOS devices. This reduces costs, because you don't need to own a device to simulate it, and helps you to improve device coverage. Additionally, the Device Simulator doesn't require you to build your application which means you can debug layout issues and iterate quickly.",760],["The Device Simulator doesn't simulate the graphics backend of the target device and renders your application in the same way that the Editor does. This means that it doesn't impose limitations that the graphics backend of the target device might have. The Device Simulator also doesn't simulate the performance characteristics of the device, so to profile your application, you must create a build and run it directly on the device. For more information, refer to Profiling your application. For more information on the capabilities and limitations of the Device Simulator, refer to Device Simulator introduction.",760],["The device Simulator includes a variety of iOS devices, but you can also add other devices if necessary. For information on how to do this, refer to Add a device.",760],["Additional resources",760],["iOS environment setup",761],["To create a Unity application for iOS, you first need to set up your Unity project to support iOS. This information is also relevant to the iPadOS, macOS, and tvOS platforms. To support iOS and other Apple operating systems, a Unity project requires:",761],["The iOS Build Support module.",761],["Xcode or Unity Cloud Build.",761],["Before you get started, check Unity’s Requirements and compatibility documentation for iOS to make sure you’re aware of any limitations for developing a Unity application for this platform.",761],["Install dependencies",761],["Unity distributes dependencies as modules which means you use the Unity Hub to install them. The module you need is iOS Build Support. You can install it either when you install a new Unity Editor version, or add it to an existing Unity Editor install. To install modules:",761],["At install time, refer to Downloading and installing Editors and modules with the Unity Hub.",761],["To an existing install, refer to Add modules.",761],["Install Xcode or set up Unity Build Automation",761],["To build iOS applications, Unity generates an Xcode project and then Xcode builds this project into the final application. This means that if you want to build an application locally, you must install Xcode. Xcode is only available for macOS, so if your development machine doesn't run macOS, you can't build an application locally. However, Unity Cloud Build can build applications for you which makes it possible for you to develop an iOS application on a non-macOS machine.",761],["For information on how to install Xcode, refer to the Xcode documentation.",761],["For information on how to set up Unity Build Automation, refer to Unity Build Automation.",761],["Set up an Apple ID or join the Apple Developer Program",761],["To test your build on an iOS device, you need a free Apple ID. However, to distribute your app on the App Store, and to use services such as Game Center or In-App Purchases, you need to register with the Apple Developer Program. For more information about the differences between an Apple ID and Apple Developer Program membership, refer to the Apple's documentation on Choosing a Membership.",761],["Add your Apple ID to Xcode",761],["To add your Apple ID to Xcode, follow the steps in Apple's documentation on Adding an Apple ID account to Xcode.",761],["Additional resources",761],["Game Controller support",762],["Unity supports a standardized Game Controller Input API provided by Apple as part of the standard Unity Input API. You can use the Input class to enable the Game Controller capability in your application, so you can support users who use a a physical or virtual controller to interact with your application.",762],["Topic Description ",762],["----------------------------- --------------- ",762],["Detect Game Controllers Learn how to detect controllers in your application. ",762],["Handle Game Controller input Learn how to handle input from controllers in your application. ",762],["Additional resources:",762],["Handle Game Controller input",763],["The input scheme is dependent on the type of application you are developing. You can set up specific actions in Unity’s Input Manager settings. By default, the Unity Input Horizontal axis is mapped to the game controller D-pad and the left analog stick is mapped to extended profile controllers. See Input mapping for the KeyCodes and Axes that correspond to specific controller buttons.",763],["Example: Set up joystick button A for the Jump action",763],["Go to Edit > Project Settings.",763],["Select the Input Manager category.",763],["Open the Jump action.",763],["Set Positive Button to joystick button 14.",763],["This code example demonstrates the corresponding input handling:",763],["using UnityEngine;",763],["public class Jumping : MonoBehaviour",763],["Rigidbody2D rb;",763],["float jumpForce = 100f;",763],["void Start()",763],["rb = GetComponent();",763],["void Update()",763],["if (Input.GetButtonDown(\"Jump\"))",763],["rb.AddForce(new Vector2(0f, jumpForce));",763],["Example: Set up joystick button X for the Fire action",763],["Go to Edit > Project Settings.",763],["Select the Input Manager category.",763],["Open the Fire1 action.",763],["Set Positive Button to joystick button 15.",763],["This code example demonstrates the corresponding input handling:",763],["using UnityEngine;",763],["public class Shooting : MonoBehaviour",763],["float bulletSpeed = 500f;",763],["public Transform gun;",763],["public Rigidbody2D bullet;",763],["void Update()",763],["if (Input.GetButtonDown(\"Fire1\"))",763],["var bulletInstance = Instantiate(bullet, gun.position, gun.rotation);",763],["bulletInstance.AddForce(gun.up * bulletSpeed);",763],["",763],["Game Controller input mapping",763],["You can map controller input in the Unity Input settings using the following:",763],["Name KeyCode Axis ",763],["-------- ------------------ ---------------- ",763],["A joystick button 14 joystick axis 14 ",763],["B joystick button 13 joystick axis 13 ",763],["X joystick button 15 joystick axis 15 ",763],["Y joystick button 12 joystick axis 12 ",763],["Left Stick N/A Axis 1 (X) - Horizontal, Axis 2 (Y) - Vertical ",763],["Right Stick N/A Axis 3 - Horizontal, Axis 4 - Vertical ",763],["D-pad Up joystick button 4 Basic profile only: Axis 2 (Y) ",763],["D-pad Right joystick button 5 Basic profile only: Axis 1 (X) ",763],["D-pad Down joystick button 6 Basic profile only: Axis 2 (Y) ",763],["D-pad Left joystick button 7 Basic profile only: Axis 1 (X) ",763],["Pause joystick button 0 N/A ",763],["L1/R1 joystick button 8 / joystick button 9 joystick axis 8 / joystick axis 9 ",763],["L2/R2 joystick button 10 / joystick button 11 joystick axis 10 / joystick axis 11 ",763],["Additional resources:",763],["iOS input overview",764],["Unity uses the Input class to access input on all mobile devices.",764],["iOS keyboard",764],["iOS devices include a touchscreen keyboard. When you select editable UI elements such as Input Fields, Unity automatically activates the iOS touchscreen keyboard and handles input from it. For information on how to manually activate and configure the iOS touchscreen keyboard, refer to Mobile Keyboard.",764],["Additional resources:",764],["Input for iOS devices",765],["iOS applications target Apple mobile devices. For more information on mobile device input in Unity, see Mobile device input.",765],["Topic Description ",765],["------------------------------------------------------ -------------------------------------------------------------- ",765],["iOS input overview Understand how to detect and handle user input on iOS devices. ",765],["Game Controller support Learn how to use the Game Controller API in your application. ",765],["Additional resources:",765],["Introducing iOS",766],["iOS is the operating system that powers a variety of Apple's mobile devices. Unity includes native support for the iOS platform which means you can use Unity and its tools to create and deliver 2D and 3D applications for iOS.",766],["Before you begin to develop an iOS application in Unity, familiarize yourself with the key concepts, requirements, and workflows.",766],["For general information about developing iOS applications, refer to Apple's developer documentation.",766],["Topic Description ",766],["------------------------------------------------------------ ------------------------------------------------------------ ",766],["iOS requirements and compatibility Understand the requirements for iOS development in Unity and Unity feature compatibility on iOS devices. ",766],["How Unity builds iOS applications Understand the iOS application build process. ",766],["iOS XCode Project Structure Understand the structure of a Unity Xcode project. ",766],["iOS requirements and compatibility",767],["Learn about the system requirements and compatibility information for iOS to make sure you’re aware of any limitations for developing a Unity application for this platform.",767],["iOS version support",767],["Unity supports iOS 12 and above. For more information, refer to PlayerSettings.iOS-targetOSVersionString.",767],["Graphics API support",767],["iOS devices support Metal. For more information, refer to Metal Graphics API.",767],["Audio compression",767],["Unity supports importing a variety of source format sound files. However, when importing the sound files (except tracker files), they're always re-encoded to the build target format. By default, these files are in Vorbis format, but you can override them to other formats (such as ADPCM, MP3) for each platform, if required. Vorbis playback provides better compression and quality for iOS compared to MP3 playback.",767],["ASTC and PVRTC instead of DXT texture compression",767],["Unity iOS doesn't support DXT textures. Instead, iPhone/iPad devices natively supports ASTC, PVRTC, ETC2, and ETC texture compression formats. For more information about iOS texture formats, refer to texture import settings and texture compression format.",767],["Managed stack traces on iOS",768],["When an exception occurs in managed code, the stack trace for the exception can help you understand the cause of the exception. However, the managed stack trace might not appear as expected in some cases on iOS, as explained below. The stack trace also varies depending on the Xcode build configuration.",768],["Debug builds",768],["When you use the debug build configuration with iOS, IL2CPP should report a reliable managed stack trace, and include each managed method in the call stack. The stack trace does not include line numbers from the original C# source code.",768],["Release builds",768],["When you use a release build configuration, IL2CPP might produce a call stack that’s missing one or more managed methods. This is because the C++ compiler has inlined the missing methods. Method inlining is usually good for performance at run time, but it can make call stacks more difficult to understand. IL2CPP always provides at least one managed method on the call stack. This is the method where the exception occurred. It also includes other methods if they are not inlined.",768],["If you can reproduce an exception locally, use Xcode to determine which methods have been inlined. Run the application in Xcode using the release configuration and set an exception breakpoint. The native call stack view in Xcode should indicate which methods actually exist, and which have been inlined.",768],["Source code line numbers",768],["IL2CPP call stacks do not include source code line number information in the debug or release configurations.",768],[" 21 March 2018 ",768],["iOS Scripting",769],["Most features of the iOS devices are exposed through the Input and Handheld classes. For cross-platform projects, UNITY_IPHONE is defined for conditionally compiling iOS-specific C# code.",769],["Device properties",769],["There are a number of device-specific properties that you can access. See the script reference pages for:",769],["Anti-piracy check",769],["A common way of hacking an application is by removing the AppStore DRM protection and then redistributing it for free. Use Unity’s anti-piracy check to find out if your application was altered after it was submitted to the AppStore.",769],["Check if your application is genuine (not hacked) with the Application.genuine property. If the property returns false, you can warn users they are using a hacked app, or you can disable certain functions.",769],["Note:** Use Application.genuineCheckAvailable along with Application.genuine to verify application integrity. Because accessing the Application.genuine property is a resource-intensive operation, you shouldn’t perform it during frame updates or other time-critical code.",769],["Vibration support",769],["You can trigger a vibration by calling Handheld.Vibrate. Devices without vibration hardware ignore this call.",769],["Activity indicator",769],["Mobile operating systems have built-in activity indicators you can use during slow operations. See Handheld.StartActivityIndicator docs for examples.",769],["Screen orientation",769],["You can control the screen orientation of your application on both iOS and Android devices. By detecting a change in orientation or forcing a specific orientation, you can create app behaviors that depend on how the user holds the device.",769],["To retrieve device orientation, access the Screen.orientation property. Orientation can be one of the following:",769],["Orientation Behavior ",769],[":--------------------- :----------------------------------------------------------- ",769],["Portrait The device is in portrait mode, with the device held upright and the home button at the bottom. ",769],["PortraitUpsideDown The device is in portrait mode but upside down, with the device held upright and the home button at the top. ",769],["LandscapeLeft The device is in landscape mode, with the device held upright and the home button on the right side. ",769],["LandscapeRight The device is in landscape mode, with the device held upright and the home button on the left side. ",769],["Set Screen.orientation to one of the above orientations or use ScreenOrientation.AutoRotation to control the screen orientation. When you enable autorotation, you can still disable some orientations on a case-by-case basis.",769],["For more information, refer to the following API documentation:",769],["The screen orientation of your application may vary depending on the device orientation set by the user, regardless of your application’s default orientation setting.",769],["The following table shows the default screen orientation set for your application and the actual orientation the application loads in based on the device orientation.",769],["Default screen orientation: Autorotate Default screen orientation: Portrait Default screen orientation: Landscape ",769],["",769],["Device orientation: Autorotate The application screen loads in portrait and can rotate between portrait, landscape right, and landscape left orientations (excluding portrait upside down orientation).Note: On an iPad, the application screen loads in portrait or landscape orientation based on the device orientation. The screen can rotate between portrait, portrait upside down, landscape right, and landscape left orientations. The application screen loads and remains locked in portrait orientation. Although portrait upside down orientation is allowed, the screen doesn't rotate to that orientation.Note: On an iPad, the application screen loads in portrait and can rotate between portrait and portrait upside down orientations. The splash screen can load in landscape orientation if the device orientation is landscape on launch. The splash screen loads in the same orientation as the device orientation. The application screen loads in landscape when the scene loads and can rotate between landscape left or landscape right orientations. Note: On an iPad, the application screen loads in landscape, and can rotate between landscape left and landscape right orientations. The splash screen can load in portrait if the device orientation is portrait on launch. ",769],["Device orientation: Portrait lock The application screen loads and remains locked in portrait orientation. Note: Whilst in portrait orientation, if you set the ScreenOrientation.AutoRotation property for portrait to false, the application screen rotates to landscape orientation. If you now set the ScreenOrientation.AutoRotation property for landscape to false, the screen orientation remains unchanged. The application screen loads and remains locked in portrait orientation. The splash screen loads in portrait orientation, but the application screen loads in landscape when the scene loads. By default, the application screen remains locked in landscape left orientation. Note: On an iPad, the splash screen loads in portrait orientation and the scene loads in landscape orientation. The application screen remains locked in landscape orientation. ",769],["Device orientation: Landscape lock Not applicable as iPhones don't have landscape lock setting. If the user turns off the device autorotation setting whilst the application is in landscape, the application screen rotates to and remains locked in portrait orientation. Note: On an iPad, the application loads and remains locked in landscape orientation. Not applicable as iPhones don't have landscape lock setting. The application remains locked in portrait orientation. Note: On an iPad, the splash screen loads in landscape and the scene loads in portrait orientation. The application screen remains locked in portrait orientation. Not applicable as iPhones don't have landscape lock setting. The application screen loads in landscape and can remain locked in both landscape left or landscape right orientations when the application loads. Note: On an iPad, the application screen loads in landscape and remains locked in either landscape left or landscape right orientation depending on the device orientation. ",769],["Determining device generation",769],["Different device generations have varied performance and support different functionalities. Use the iOS.DeviceGeneration property to query the device’s generation.",769],["Display cutout",769],["On some displays, certain areas of the screen might be obscured or non-functional because of other hardware occupying that space. Use Screen.cutouts to return a list of bounding boxes surrounding each cutout.",769],["iOS devices don't provide a native API to get the display cutout information, so the cutouts are hardcoded in the Xcode project for each available iOS device. You can modify existing data or add additional devices in the Unity Xcode project ReportSafeAreaChangeForView function, which is in the UnityView.mm file.",769],["Recording a replay of your game",769],["You can use ReplayKit to record the audio and video of your game, along with audio and video commentary captured from the device's microphone and camera.",769],["Reporting crash bugs on iOS",770],["Before submitting a bug report, please check the iOS Troubleshooting page, where you will find solutions to common crashes and other problems.",770],["If your application crashes in the Xcode debugger then you can add valuable information to your bug report as follows:-",770],["Click Continue (Debug > Continue) twice",770],["Open the debugger console (View > Debug Area > Activate Console) and enter (in the console): thread backtrace all",770],["Copy all console output and send it together with your bug report.",770],["Similarly, when reporting app freezes, you can click Pause and do the above steps.",770],["If your application crashes on the iOS device, you should retrieve the crash report. For more information, see Acquiring Crash and Low Memory Reports on Apple's developer website. Please attach the crash report, your built application and console log to your bug report before submitting.",770],["Build for iOS",771],["This page contains instructions on how to build your Unity application for iOS. For information on the build process for iOS and the tools Unity uses, see How Unity builds iOS applications.",771],["At a high level, the iOS build process has two steps:",771],["Unity generates an Xcode project.",771],["Xcode builds the generated project into the application.",771],["Unity can perform step one on all operating systems that run the Unity Editor. However, since you can only install Xcode on a macOS device, Unity can only perform step two on a macOS device. This means to fully build an iOS application locally, your development machine must run macOS. If it doesn't, one alternative is to use Unity Cloud Build which can build your applications for you in the cloud. This makes it possible to develop iOS applications on a non-macOS machine. For information on how to set up Unity Cloud Build, see Unity Cloud Build.",771],["Build your application from the Editor",771],["To build your Unity application for iOS:",771],["Select File > Build Settings.",771],["From the list of platforms in the Platform panel, select iOS.Note: If iOS is greyed out, set up your project for iOS development.",771],["Click either Build or Build and Run.",771],["Select the destination for Unity to place the Xcode project. If you selected Build and Run and use a macOS device, Xcode builds the generated project into the application and installs the application on the iOS device connected to your computer.",771],["Click Save. If an Xcode project already exists in the target directory, Unity displays an alert and gives you a choice on how to proceed. For information on the options available, see .",771],["Tip**: After you specify the output path the first time, you can use the Cmd+B keyboard shortcut to build and run the application. Unity uses the Append mode to regenerate the Xcode project.",771],["Build a Unity Xcode project from the command line",771],["After Unity generates the Xcode project, you can build and run the application from the command line. To do this:",771],["Open the terminal and navigate to the Xcode project directory.",771],["Find the device ID of the device you want to run the application on. You can find this in Xcode under Window > Devices and Simulators.",771],["Enter the following command into the terminal where <device-id>is your device ID.unity$ xcodebuild test -destination \"platform=iOS,id=<device-id>\" -scheme Unity-iPhone.",771],["Additional resources",771],["Preparing your application for In-App Purchases (IAP)",772],["This chapter does not describe how to integrate your game with Apple's StoreKit API. It is assumed that you already have integration with StoreKit via a native code plugin.",772],["The Apple StoreKit documentation defines four kinds of products that can be sold via the In-App Purchase process:",772],["Content",772],["Functionality",772],["Services",772],["Subscriptions",772],["This chapter covers the first case only and focuses mainly on the downloadable content concept. AssetBundles are recommended for implementing downloadable content in Unity and both the creation and runtime usage of AssetBundles will be covered here.",772],["Exporting your assets for use on iOS",772],["It is sometimes useful to maintain separate projects for your main application and the downloadable AssetBundles that it will use. However, you should note that all scripts referenced by objects in the AssetBundle must be present in the main game executable. The project you use to create the AssetBundle must have iOS as the selected build target since the content of AssetBundle files is not compatible between iOS and other platforms.",772],["AssetBundles are created using editor scripts - a simple example is given below:",772],["using UnityEngine;",772],["using UnityEditor;",772],["public class ExportBundle : MonoBehaviour {",772],["[MenuItem (\"Assets/Build AssetBundle From Selection - Track dependencies\")]",772],["static void DoExport() {",772],["string str = EditorUtility.SaveFilePanel(\"Save Bundle...\", Application.dataPath, Selection.activeObject.name, \"assetbundle\");",772],["if (str.Length != 0) {",772],["BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, str, BuildAssetBundleOptions.CompleteAssets, BuildTarget.iPhone);",772],["You should save this code in a file called ExportBundle and place it inside a folder called Editor (you can just create this if it isn't already present in the project). The script will add a menu item entitled Build AssetBundle From Selection - Track dependencies on the Assets menu in the editor.",772],["The content you want to include in the bundle should be prepared in the form of prefabs. Select a prefab in the Project view and then select Assets > Build AssetBundle From Selection - Track dependencies (i.e. the menu item added by the ExportBundle script). This command will bring up a save dialog where you can choose the name and location of your AssetBundle file.",772],["Downloading your assets on iOS",772],["Note:** Apple may change the folder locations where you are permitted to write data. Always check the latest Apple documentation to be sure your application will be compliant. The following advice was correct as of early 2018.",772],["AssetBundles can be downloaded using the WWW class and once transfer is complete, the enclosed assets can be accessed. The recommended way to download an AssetBundle is to use LoadFromCacheOrDownload as shown in the following sample:",772],["IEnumerator GetAssetBundle() {",772],["WWW download;",772],["string url = \"https://somehost/somepath/someassetbundle.assetbundle\";",772],["while (!Caching.ready)",772],["yield return null;",772],["download = WWW.LoadFromCacheOrDownload(url, 0);",772],["yield return download;",772],["AssetBundle assetBundle = download.assetBundle;",772],["if (assetBundle != null) {",772],["// Alternatively you can also load an asset by name (assetBundle.Load(\"my asset name\"))",772],["Object go = assetBundle.mainAsset;",772],["if (go != null)",772],["Instantiate(go);",772],["else",772],["Debug.Log(\"Couldn't load resource\");",772],["} else {",772],["Debug.Log(\"Couldn't load resource\");",772],["The downloaded asset bundle files are stored in the Library folder of the iOS application sandbox and have the No Backup flag set on them. This means the OS won't delete these files accidentally and these files won't be backed up to iCloud.",772],["If you need to choose exactly where the AssetBundle file is stored, you can use a standard WWW download (i.e. just use the constructor instead of LoadFromCacheOrDownload) and then save the downloaded data on disk using the .NET file API. You can save required files to the Application.temporaryCachePath folder (stored in Library/Caches which is regularly \"cleaned out\" by the OS) or the Application.persistentDataPath folder (stored in Documents which is not cleaned out by the OS). You should set the No Backup flag on these files with iOS.Device.SetNoBackupFlag to prevent them being backed up to iCloud.",772],["Note:** If you don't set the No Backup flag, your app may be rejected when you submit it to the App Store.",772],["You can access saved files by creating a WWW object with a URL in the form file:///pathtoyourapplication/Library/savedassetbundle.assetbundle:-",772],["string cachedAssetBundle = Application.temporaryCachePath + \"/savedassetbundle.assetbundle\";",772],["System.IO.FileStream cache = new System.IO.FileStream(cachedAssetBundle, System.IO.FileMode.Create);",772],["cache.Write(download.bytes, 0, download.bytes.Length);",772],["cache.Close();",772],["iOS.Device.SetNoBackupFlag(cachedAssetBundle);",772],["Debug.Log(\"Cache saved: \" + cachedAssetBundle);",772],["Note:** You can test the reading of stored files in the Documents folder if you enable file sharing (setting UIFileSharingEnabled to true in your Info.plist allows you to access the Documents folder from iTunes). Note that the contents of the Documents folder are cached to iCloud, so you should not use this location to store AssetBundles in the final build to be shipped. See File System Basics in the Apple iOS documentation for further details.",772],["2018-06-14 ",772],["Getting started with iOS",773],["This section of the User Manual explains how to set up a project for iOS development and introduces iOS-specific tools and settings.",773],["Topic Description ",773],["----------------------------------------------------- ------------------------------------------------------------ ",773],["iOS environment setup Set up a Unity project for iOS development. ",773],["iOS Player Settings Reference documentation for iOS Player Settings. ",773],["Measuring performance with the built-in profiler",774],["Note:** The internal profiler is deprecated and will be retired in a future version of Unity. Use the Profiler window instead (menu: Window > Analysis > Profiler).",774],["Unity contains a built-in profiler for iOS and Android. Every 30 frames, the built-in profiler emits console messages from the app running on the device. These messages provide insight into how the app is running. In particular, they help you determine if your app is CPU or GPU-bound. If your app is CPU-bound, you can also determine whether script code or garbage collection are causing the bottleneck. This page details how to configure the built-in profiler.",774],["Here's an example of the built-in profiler's output:",774],["iPhone Unity internal profiler stats",774],["frametime> min: 32.5 max: 34.1 avg: 33.3",774],["cpu-player> min: 2.2 max: 4.4 avg: 3.7",774],["batches> min: 3 max: 3 avg: 3",774],["draw calls> min: 3 max: 3 avg: 3",774],["tris> min: 1704 max: 1704 avg: 1704",774],["verts> min: 5088 max: 5088 avg: 5088",774],["dynamic batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0",774],["static batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0",774],["player-detail> physx: 0.0 animation: 0.0 culling 0.0 skinning: 0.0 batching: 0.0 render: 0.0 fixed-update-count: 0 .. 0",774],["scripting-scripts> update: 0.0 fixedUpdate: 0.0 coroutines: 0.0",774],["scripting-memory> information not available on non-development player configuration",774],["All times are measured in milliseconds per frame. You can see the minimum, maximum, and average times over the last thirty frames.",774],["General CPU activity",774],["Property Function ",774],["cpu-player Displays the time your app spends executing code inside the Unity engine and executing scripts on the CPU. ",774],["cpu-ogles-drv (Android only) Displays the time spent executing OpenGL ES driver code on the CPU. These driver stats can be affected by several factors, including the number of draw calls, number of internal rendering state changes, rendering pipeline setup, and number of processed vertices. ",774],["cpu-present (Android only) The amount of time spent executing the presentRenderbuffer command in OpenGL ES. ",774],["frametime Represents the overall time of an app frame. Note that iOS hardware is locked at a 60Hz refresh rate, so this property will always return a time that's a multiple of 16.7ms (1000ms/60Hz = 16.7ms). ",774],["Rendering statistics",774],["Property Function ",774],["tris # Total number of triangles sent for rendering. ",774],["verts # Total number of vertices sent for rendering. You should keep this number below 10000 if your app uses only static geometry. If your app uses many instances of skinned geometry, this number should be much lower. ",774],["dynamic/static batching Number of draw-calls, triangles, and vertices that the engine automatically batched. Comparing these numbers with draw-call and triangle totals can give you an idea how well is your scene prepared for batching. Share as many materials as possible among your objects to improve batching. ",774],["Detailed Unity Player statistics",774],["The player-detail section provides a detailed breakdown of what's happening inside the engine:",774],["Property Function ",774],["physx Time spent on physics. ",774],["animation Time spent animating bones. ",774],["culling Time spent culling objects outside the camera frustum. ",774],["skinning Time spent applying animations to skinned meshes. ",774],["batching Time spent batching geometry. Batching dynamic geometry is considerably more resource-intensive than batching static geometry. ",774],["render Time spent rendering visible objects. ",774],["fixed-update-count Minimum and maximum number of FixedUpdates executed during this frame. Too many FixedUpdates will deteriorate performance considerably. ",774],["Detailed script statistics",774],["The scripting-scripts section provides a detailed breakdown of the time spent executing code in the Mono runtime:",774],["Property Function ",774],["update Total time spent executing all Update() methods in scripts. ",774],["fixedUpdate Total time spent executing all FixedUpdate() methods in scripts. ",774],["coroutines Time spent inside script coroutines. ",774],["Detailed statistics on memory allocated by scripts",774],["The scripting-memory section gives you an idea of how memory is being managed by the Mono garbage collector:",774],["Property: Function: ",774],["allocated heap Total amount of memory available for allocations. A garbage collection triggers if the heap doesn't have enough memory left for a given allocation. If this doesn't free enough memory, the allocated heap will grow in size. ",774],["used heap The portion of the allocated heap which is currently used up by objects. Every time you create a new class instance (not a struct), this number grows until the next garbage collection. ",774],["max number of collections Number of garbage collection passes during the last 30 frames. ",774],["collection total duration Total time (in milliseconds) of all garbage collection passes that happened during the last 30 frames. ",774],["Configuration",774],["On iOS, the internal profiler is disabled by default. To enable it, open the Unity-generated Xcode project, select the InternalProfiler.h file, and change the line",774],["define ENABLE_INTERNAL_PROFILER 0",774],["to",774],["define ENABLE_INTERNAL_PROFILER 1",774],["Alternatively, access the iOS Player Settings (menu: Edit > Project Settings > Player Settings, then select iOS). In the Debugging and crash reporting section, enable the Enable Internal Profiler (Deprecated) setting. Make sure Development Build is enabled in the Build Settings when you build your app.",774],["To display the output console (GDB), select View > Debug Area > Activate Console from Xcode's main menu, then run your project. Unity then outputs statistics to the console window every 30 frames.",774],["To enable the internal profiler on Android, access the Android Player Settings (menu: Edit > Project Settings > Player Settings, then select Android). In the Optimization section, enable the Enable Internal Profiler (Deprecated) setting. Make sure Development Build is enabled in the Build Settings when you build your app. Statistics will then display in logcat when your app runs on the device. To view logcat, ensure adb or the Android Debug Bridge is installed, and then run the shell command adb logcat.",774],["iOS-specific optimizations",775],["This page details optimizations that are unique to iOS deployment.",775],["Script call optimization",775],["Most of the functions in the UnityEngine namespace are implemented in C/C++. Calling a C/C++ function from a Mono script involves a performance overhead, so you can save about 1 to 4 milliseconds per frame using iOS Script Call Optimization setting.",775],["A good development practice on iOS is to never rely on exception handling (either internally or through the use of try/catch blocks). When using the default Slow and Safe option, Unity catches any exceptions that occur on the device and provides a stack trace. When using the Fast but no Exceptions option, any exceptions that occur will crash the game, and no stack trace will be provided. In addition, Unity raises the AppDomain.UnhandledException event to allow project-specific code access to the exception information.",775],["With the Mono scripting backend, the game runs faster since the processor is not diverting power to handle exceptions. There is no performance benefit with the Fast but no Exceptions option when using the IL2CPP scripting backend. However, when releasing your game to the world, it's best to publish with the Fast but no Exceptions option.",775],["Tuning accelerometer processing frequency",775],["If accelerometer input is processed too frequently then the overall performance of your game may suffer as a result. By default, a Unity iOS application samples the accelerometer 60 times per second. You may see some performance benefit by reducing the accelerometer sampling frequency and you can even set it to zero for games that don't use accelerometer input. You can change the Accelerometer Frequency setting under the Other Settings panel of the Player settings for the iOS platform.",775],["Incremental builds",775],["The C++ code generated by the IL2CPP scripting backend can be updated incrementally, allowing incremental C++ build systems to compile only the changes source files. This can significantly lower iteration times with the IL2CPP scripting backend.",775],["To use incremental builds, choose the Append option after selecting Build from the Build Settings dialog. The Replace option performs a clean build.",775],["Setting the frame rate",775],["Unity iOS allows you to change the frequency with which your application will try to execute its rendering loop, which is set to 30 frames per second by default. You can lower this number to save battery power but of course this saving will come at the expense of frame updates. Conversely, you can increase the framerate to give the rendering priority over other activities such as touch input and accelerometer processing. You will need to experiment with your choice of framerate to determine how it affects gameplay in your case.",775],["If your application involves heavy computation or rendering and can maintain only 15 frames per second, say, then setting the desired frame rate higher than fifteen wouldn't give any extra performance. The application has to be optimized sufficiently to allow for a higher framerate.",775],["To set the desired frame rate, change Application.targetFrameRate.",775],["2018-06-14 ",775],["Optimizing Physics Performance",776],["The NVIDIA PhysX physics engine used by Unity is available on iOS but the performance limits of the hardware will be reached more easily on mobile platforms than desktops.",776],["Here are some tips for tuning physics to get better performance on iOS:-",776],["You can adjust the Fixed Timestep setting (in the Time window) to reduce the time spent on physics updates. Increasing the timestep will reduce the CPU overhead at the expense of the accuracy of the physics. Often, lower accuracy is an acceptable tradeoff for increased speed.",776],["Set the Maximum Allowed Timestep in the Time window in the 8-10fps range to cap the time spent on physics in the worst case scenario.",776],["Mesh colliders have a much higher performance overhead than primitive colliders, so use them sparingly. It is often possible to approximate the shape of a mesh by using child objects with primitive colliders. The child colliders will be controlled collectively as a single compound collider by the rigidbody on the parent.",776],["While wheel colliders are not strictly colliders in the sense of solid objects, they nonetheless have a high CPU overhead.",776],["The total amount of physics calculation depends on the number of non-sleeping rigid bodies and colliders in the scene and the complexity of the colliders. You can keep track of how many physics objects there are in the scene using the internal profiler.",776],["Optimizing Performance on iOS",777],["This section covers optimizations which are unique to iOS devices.",777],["Topic Description ",777],["------------------------------------------------------------ ------------------------------------------------------------ ",777],["iOS-specific optimizations Details specific optimizations for iOS deployment. ",777],["Measuring performance with the built-in profiler Explains how to use and configure the built-in profiler for iOS. ",777],["Optimizing the size of the built iOS Player Explains how to reduce the size of the Player within Xcode. ",777],["Optimizing Physics Performance Explains how to tune physics for greater performance on iOS. ",777],["Optimizing the size of the built iOS Player",778],["The two main ways of reducing the size of the Player are by making a proper Release build within Xcode and by changing the Stripping Level within Unity.",778],["Building for distribution",778],["It is expected that final release builds are made using the Xcode command Product > Archive. Using this command ensures that build is made with release configuration and all the debug symbols are stripped.",778],["After issuing this command, Xcode switches to the Organizer window Archives tab. For guidelines on how to calculate app size and other size-reducing tips, see Apple’s Technical Q&A on [Reducing the size of my App] (https://developer.apple.com/library/content/qa/qa1795/_index.html).",778],["Note**: We recommend you have some small extra margin for error when aiming for an over-the-air download limit (which currently is 150MB).",778],["iOS stripping level",778],["Activate the size optimizations for Mono scripting backend builds by stripping work in the following way:",778],["Strip assemblies level: the scripts' bytecode is analyzed so that classes and methods that are not referenced from the scripts can be removed from the DLLs and thereby excluded from the AOT compilation phase. This optimization reduces the size of the main binary and accompanying DLLs and is safe as long as no reflection is used.",778],["Strip ByteCode level: any .NET DLLs (stored in the Data folder) are stripped down to metadata only. This is possible because all the code is already precompiled during the AOT phase and linked into the main binary.",778],["Use micro mscorlib level: a special, smaller version of mscorlib is used. Some components are removed from this library, for example, Security, Reflection.Emit, Remoting, non Gregorian calendars, etc. Also, interdependencies between internal components are minimized. This optimization reduces the main binary and mscorlib.dll size but it is not compatible with some System and System.Xml assembly classes, so use it with care.",778],["These levels are cumulative, so level 3 optimization implicitly includes levels 2 and 1, while level 2 optimization includes level 1.",778],["Note that Micro mscorlib is a heavily stripped-down version of the core library. Only those items that are required by the Mono runtime in Unity remain. Best practice for using micro mscorlib is not to use any classes or other features of .NET that are not required by your application. GUIDs are a good example of something you could omit; they can easily be replaced with custom made pseudo GUIDs and doing this would result in better performance and app size.",778],["Stripping with IL2CPP",778],["Refer to documentation on managed bytecode stripping with IL2CPP for more information",778],["Note:** It can sometimes be difficult to determine which classes are getting stripped in error even though the application requires them. You can often get useful information about this by running the stripped application on the simulator and checking the Xcode console for error messages.",778],["Simple checklist for making your distribution as small as possible",778],["Minimize your assets: enable compression for textures and reduce their resolution as far as possible. Also, minimize the number of uncompressed sounds. There are some additional tips for file size reduction here.",778],["On Mono, set the iOS Stripping Level to Use micro mscorlib, or on IL2CPP enable Strip Engine Code.",778],["Set the script call optimization level to Fast but no exceptions.",778],["Don't use anything that lives in System.dll or System.Xml.dll in your code. These libraries are not compatible with micro mscorlib.",778],["Remove unnecessary code dependencies.",778],["Set the API Compatibility Level to .Net 2.0 subset. Note that .Net 2.0 subset has limited compatibility with other libraries.",778],["Avoid generic containers in combination with value types, including structs.",778],["How small can an app be made with Unity?",778],["An empty project would take less than 22 MB in the App Store if all the size optimizations were turned off. With code stripping, the empty scene with just the main camera can be reduced to less than 12 MB in the App Store (zipped and DRM attached).",778],["Why did my app increase in size after being released to the App Store?",778],["When publishing your app, Apple App Store service first encrypts the binary file and then compresses it via zip. Encryption increases ''randomness' of the code segment and thus makes it worse for compression. Check \"Building for distribution\" chapter above how to estimate App Store size before submission.",778],["2018-06-14 ",778],["2017-14-06 - Upated Stripping with IL2CPP section",778],["iOS",779],["This section of the User Manual contains information on Unity development for iOS.",779],["Topic Description ",779],["------------------------------------------------------------ ------------------------------------------------------------ ",779],["Introducing iOS Introduces key concepts and workflows that are useful to understand before you begin to develop a Unity application for iOS. ",779],["Getting started with iOS Explains how to set up a project for iOS development and introduces iOS-specific tools and settings. ",779],["Developing for iOS Contains iOS-specific development information on topics such as input, in-app purchases, and debugging. ",779],["Building and delivering for iOS Explains how to build and publish an iOS application. ",779],["Copying NativeContainer structures",780],["Native containers are value types, which means that when they're assigned to a variable, Unity copies the NativeContainer structure, which contains pointers to where the native container's data is stored, including its AtomicSafetyHandle. It doesn’t copy the entire contents of the NativeContainer.",780],["This scenario means that there might be multiple copies of a NativeContainer structure which all reference the same region of memory, and all contain AtomicSafetyHandle objects which reference the same central record.",780],["The above diagram shows three different copies of a NativeArray structure that all represent the same actual container. Each copy points to the same stored data, and the same safety data as the original NativeArray. However, each copy of the NativeArray has different flags that indicate what a job is allowed to do with that copy. The pointer to the safety data, combined with the flags, make up the AtomicSafetyHandle.",780],["Version numbers",780],["If a NativeContainer is disposed of, all the copies of the NativeContainer structure must recognize that the original NativeContainer is invalid. Disposing of the original NativeContainer means that the block of memory that used to hold the data for the NativeContainer has been deallocated. In this situation, the pointer to the data which is stored in each copy of the NativeContainer is invalid, and might cause access violations if you use it.",780],["The AtomicSafetyHandle also points at a central record which becomes invalid for the NativeContainer instances. However, the safety system never deallocates the memory for the central record, so it avoids the risk of access violations.",780],["Instead, each record contains a version number. A copy of the version number is stored inside each AtomicSafetyHandle that references that record. When a NativeContainer is disposed of, Unity calls Release(), which increments the version number on the central record. After this, the record can be reused for other NativeContainer instances.",780],["Each remaining AtomicSafetyHandlecompares its stored version number against the version number in the central record to test whether the NativeContainer has been disposed of. Unity performs this test automatically as part of calls to methods such as CheckReadAndThrow, and CheckWriteAndThrow.",780],["Static views of dynamic native containers",780],["A dynamic native container is one which has a variable size that you can continue to add elements to, such as NativeList<T> (which is available in the Collections package). This is in contrast to a static native container like NativeArray<T>, which has a fixed size that you can’t change.",780],["When you use a dynamic native container, you can also directly access its data through another interface, called a view. A view allows you to alias a NativeContainer object’s data without copying or taking ownership of the data. Examples of views include enumerator objects, which you can use to access the data in a native container element-by-element, and methods such as NativeList<T>.AsArray, which you can use to treat a NativeList as if it were a NativeArray.",780],["Views aren’t typically thread safe if the size of the dynamic native container changes. This is because when the size of the native container changes, Unity relocates where the data is stored in memory, which causes any pointers that a view stores to become invalid.",780],["Secondary version numbers",780],["To support situations when the size of the dynamic native container changes, the safety system includes a secondary version number in an AtomicSafetyHandle. This mechanism is similar to the versioning mechanism, but uses a second version number stored in the central record which can be incremented independently of the first version number.",780],["To use a secondary version number, you can use UseSecondaryVersion to configure the views into the data stored in a NativeContainer. For operations that change the size of the native container, or otherwise make existing views invalid, use CheckWriteAndBumpSecondaryVersion instead of CheckWriteAndThrow. You also need to set SetBumpSecondaryVersionOnScheduleWrite on the NativeContainer to automatically invalidate views whenever a job is scheduled that writes to the native container.",780],["When you create a view and copy the AtomicSafetyHandle to it, use CheckGetSecondaryDataPointerAndThrow to confirm that it’s safe to copy the pointer to the native container's memory into the view.",780],["Special handles",780],["There are two special handles, which you can use when working with temporary native containers:",780],["GetTempMemoryHandle: Returns an AtomicSafetyHandle which you can use in native containers which are allocated with Allocator.Temp. Unity automatically invalidates this handle when the current temporary memory scope exits, so you don’t need to release it yourself. To test whether a particular AtomicSafetyHandle is the handle returned by GetTempMemoryHandle, use IsTempMemoryHandle.",780],["GetTempUnsafePtrSliceHandle: Returns a global handle you can use for temporary native containers which are backed by unsafe memory. For example, a NativeSlice constructed from stack memory. You can’t pass containers that use this handle into jobs.",780],["Custom NativeContainer example",781],["The following is a complete example of a custom NativeContainer as an append-only list. It demonstrates basic protection of read and write operations, as well as creating and invalidating aliasing views. For another example, see the NativeContainerAttribute API documentation.",781],["```lang-cs",781],["using System;",781],["using System.Runtime.InteropServices;",781],["using Unity.Collections.LowLevel.Unsafe;",781],["using Unity.Collections;",781],["// Marks the struct as a NativeContainer. This tells the job system that it contains an AtomicSafetyHandle.",781],["[NativeContainer]",781],["public unsafe struct NativeAppendOnlyList : IDisposable where T : unmanaged",781],["// Raw pointers aren't usually allowed inside structures that are passed to jobs, but because it's protected",781],["// with the safety system, you can disable that restriction for it",781],["[NativeDisableUnsafePtrRestriction]",781],["internal void* m_Buffer;",781],["internal int m_Length;",781],["internal Allocator m_AllocatorLabel;",781],["// You should only declare and use safety system members with the ENABLE_UNITY_COLLECTIONS_CHECKS define.",781],["// In final builds of projects, the safety system is disabled for performance reasons, so these APIs aren't",781],["// available in those builds.",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// The AtomicSafetyHandle field must be named exactly 'm_Safety'.",781],["internal AtomicSafetyHandle m_Safety;",781],["// Statically register this type with the safety system, using a name derived from the type itself",781],["internal static readonly int s_staticSafetyId = AtomicSafetyHandle.NewStaticSafetyId>();",781],["endif",781],["public NativeAppendOnlyList(Allocator allocator, params T[] initialItems)",781],["m_Length = initialItems.Length;",781],["m_AllocatorLabel = allocator;",781],["// Calculate the size of the initial buffer in bytes, and allocate it",781],["int totalSize = UnsafeUtility.SizeOf() * m_Length;",781],["m_Buffer = UnsafeUtility.MallocTracked(totalSize, UnsafeUtility.AlignOf(), m_AllocatorLabel, 1);",781],["// Copy the data from the array into the buffer",781],["var handle = GCHandle.Alloc(initialItems, GCHandleType.Pinned);",781],["try",781],["UnsafeUtility.MemCpy(m_Buffer, handle.AddrOfPinnedObject().ToPointer(), totalSize);",781],["finally",781],["handle.Free();",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Create the AtomicSafetyHandle and DisposeSentinel",781],["m_Safety = AtomicSafetyHandle.Create();",781],["// Set the safety ID on the AtomicSafetyHandle so that error messages describe this container type properly.",781],["AtomicSafetyHandle.SetStaticSafetyId(ref m_Safety, s_staticSafetyId);",781],["// Automatically bump the secondary version any time this container is scheduled for writing in a job",781],["AtomicSafetyHandle.SetBumpSecondaryVersionOnScheduleWrite(m_Safety, true);",781],["// Check if this is a nested container, and if so, set the nested container flag",781],["if (UnsafeUtility.IsNativeContainerType())",781],["AtomicSafetyHandle.SetNestedContainer(m_Safety, true);",781],["endif",781],["public int Length",781],["get",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Check that you are allowed to read information about the container",781],["// This throws InvalidOperationException if you aren't allowed to read from the native container,",781],["// or if the native container has been disposed",781],["AtomicSafetyHandle.CheckReadAndThrow(m_Safety);",781],["endif",781],["return m_Length;",781],["public T this[int index]",781],["get",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Check that you can read from the native container right now.",781],["AtomicSafetyHandle.CheckReadAndThrow(m_Safety);",781],["endif",781],["// Read from the buffer and return the value",781],["return UnsafeUtility.ReadArrayElement(m_Buffer, index);",781],["set",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Check that you can write to the native container right now.",781],["AtomicSafetyHandle.CheckWriteAndThrow(m_Safety);",781],["endif",781],["// Write the value into the buffer",781],["UnsafeUtility.WriteArrayElement(m_Buffer, index, value);",781],["public void Add(T value)",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Check that you can modify (write to) the native container right now, and if so, bump the secondary version so that",781],["// any views are invalidated, because you are going to change the size and pointer to the buffer",781],["AtomicSafetyHandle.CheckWriteAndBumpSecondaryVersion(m_Safety);",781],["endif",781],["// Replace the current buffer with a new one that has space for an extra element",781],["int newTotalSize = (m_Length + 1) * UnsafeUtility.SizeOf();",781],["void* newBuffer = UnsafeUtility.MallocTracked(newTotalSize, UnsafeUtility.AlignOf(), m_AllocatorLabel, 1);",781],["UnsafeUtility.MemCpy(newBuffer, m_Buffer, m_Length * UnsafeUtility.SizeOf());",781],["UnsafeUtility.FreeTracked(m_Buffer, m_AllocatorLabel);",781],["m_Buffer = newBuffer;",781],["// Put the new element at the end of the buffer and increase the length",781],["UnsafeUtility.WriteArrayElement(m_Buffer, m_Length++, value);",781],["public NativeArray AsArray()",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Check that it's safe for you to use the buffer pointer to construct a view right now.",781],["AtomicSafetyHandle.CheckGetSecondaryDataPointerAndThrow(m_Safety);",781],["// Make a copy of the AtomicSafetyHandle, and mark the copy to use the secondary version instead of the primary",781],["AtomicSafetyHandle handleForArray = m_Safety;",781],["AtomicSafetyHandle.UseSecondaryVersion(ref handleForArray);",781],["endif",781],["// Create a new NativeArray which aliases the buffer, using the current size. This doesn't allocate or copy",781],["// any data, it just sets up a NativeArray which points at the m_Buffer.",781],["var array = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(m_Buffer, m_Length, Allocator.None);",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["// Set the AtomicSafetyHandle on the newly created NativeArray to be the one that you copied from your handle",781],["// and made to use the secondary version.",781],["NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref array, handleForArray);",781],["endif",781],["return array;",781],["public void Dispose()",781],["if ENABLE_UNITY_COLLECTIONS_CHECKS",781],["AtomicSafetyHandle.CheckDeallocateAndThrow(m_Safety);",781],["AtomicSafetyHandle.Release(m_Safety);",781],["endif",781],["// Free the buffer",781],["UnsafeUtility.FreeTracked(m_Buffer, m_AllocatorLabel);",781],["m_Buffer = null;",781],["m_Length = 0;",781],["Additional resources",781],["Implement a custom native container",782],["To implement a custom native container, you must annotate your type with the the NativeContainer attribute. You should also understand how native containers are integrated with the safety system.",782],["There are two major elements to implement:",782],["Usage tracking:** Allows Unity to keep track of scheduled jobs that use a NativeContainer instance, so that it can detect and prevent potential conflicts, such as two jobs writing to the same native container at the same time.",782],["Leak tracking:** Detects when a NativeContainer isn’t disposed of properly. In this situation, a memory leak happens, where the memory allocated to the NativeContainer becomes unavailable for the entire remaining lifetime of the program.",782],["Implement usage tracking",782],["To access usage tracking in your code, use the AtomicSafetyHandle class. AtomicSafetyHandle holds a reference to the central information that the safety system stores for a given native container, and is the main way that the methods of a NativeContainer interact with the safety system. Because of this, every NativeContainer instance must contain an AtomicSafetyHandle field named m_Safety.",782],["Each AtomicSafetyHandle stores a set of flags that indicate what types of operation can be performed on the native container in the current context. When a job contains a NativeContainer instance, the job system automatically configures the flags in the AtomicSafetyHandle to reflect the way that the native container can be used in that job.",782],["When a job tries to read from a NativeContainer instance, the job system calls the CheckReadAndThrow method before reading, to confirm that the job has read access to the native container. Similarly, when a job tries to write to a native container, the job system calls CheckWriteAndThrow before writing, to check that the job has write access to the native container. Two jobs that have been assigned the same NativeContainer instance have separate AtomicSafetyHandle objects for that native container, so although they both reference the same set of central information, they can each hold separate flags that indicate what read and write access each job has to the native container.",782],["Implement leak tracking",782],["Unity's native code primarily implements leak tracking. It uses the UnsafeUtility.MallocTracked method to allocate the memory needed to store NativeContainer data, and then uses UnsafeUtility.FreeTracked to dispose of it.",782],["In earlier versions of Unity the DisposeSentinel class provides leak tracking. Unity reports a memory leak when the garbage collector collects the DisposeSentinel object. To create a DisposeSentinel, use the Create method, which also initializes the AtomicSafetyHandle at the same time. When you use this method, you don’t need to initialize the AtomicSafetyHandle. When the NativeContainer is disposed of, the Dispose method disposes of both the DisposeSentinel and the AtomicSafetyHandle in a single call.",782],["To identify where the leaked NativeContainer was created, you can capture the stack trace of where the memory was originally allocated. To do this, use the NativeLeakDetection.Mode property. You can also access this property in the Editor. To do this, go to Preferences > Jobs > Leak Detection Level and choose the leak detection level you need.",782],["Nested native containers",782],["The safety system doesn’t support nested native containers in jobs, because the job system can't correctly configure the AtomicSafetyHandle for each individual NativeContainer inside the larger NativeContainer instance.",782],["To prevent scheduling jobs that use nested native containers, use SetNestedContainer, which flags a NativeContainer as nested when they contain other NativeContainer instances.",782],["Safety IDs and error messages",782],["The safety system provides error messages that indicate when your code doesn't adhere to safety constraints. To help make the error messages clearer, you can register a NativeContainer object's name with the safety system.",782],["To register a name, use NewStaticSafetyId, which returns a safety ID that you can pass to SetStaticSafetyId. Once you create a safety ID, you can reuse it for all instances of the NativeContainer, so a common pattern is to store it in a static member of the container class.",782],["You can also override the error messages for specific safety constraint violations with SetCustomErrorMessage.",782],["Additional resources",782],["Jobs overview",783],["A job is a small unit of work that does one specific task. A job receives parameters and operates on data, similar to how a method call behaves. Jobs can be self-contained, or they can depend on other jobs to complete before they can run. In Unity, a job refers to any struct that implements the IJob interface.",783],["Only the main thread can schedule and complete jobs. It can’t access the content of any running jobs, and two jobs can’t access the contents of a job at the same time. To ensure efficient running of jobs, you can make them dependent on each other. Unity’s job system allows you to create complex dependency chains to ensure that your jobs complete in the correct order.",783],["Job types",783],["IJob: Runs a single task on a job thread.",783],["IJobParallelFor: Runs a task in parallel. Each worker thread that runs in parallel has an exclusive index to access shared data between worker threads safely.",783],["IJobParallelForTransform: Runs a task in parallel. Each worker thread running in parallel has an exclusive Transform from the transform hierarchy to operate on.",783],["IJobFor: The same as IJobParallelFor, but allows you to schedule the job so that it doesn’t run in parallel.",783],["Job system",784],["The job system lets you write simple and safe multithreaded code so that your application can use all available CPU cores to execute your code. This can help improve the performance of your application.",784],["Topic Description ",784],["",784],["Job system overview Understand Unity's job system. ",784],["Jobs overview Understand the type of jobs available. ",784],["Thread safe types Understand thread safe types, such as NativeContainer objects. ",784],["Implement a custom NativeContainer Implement custom native containers. ",784],["Copying NativeContainer structures Copy and reference multiple native containers. ",784],["Custom NativeContainer example Use a real world custom NativeContainer example. ",784],["Create a job Create and schedule a job. ",784],["Job dependencies Understand job dependencies. ",784],["Parallel jobs Use parallel jobs to schedule multiple jobs at once. ",784],["C# Job System",784],["job system",784],["Create and run a job",785],["To create and successfully run a job, you must do the following:",785],["Create a job: Implement the IJob interface.",785],["Schedule the job: Call the Schedule method on the job.",785],["Wait for the job to complete: It returns immediately if the job is already complete, and you can call the Complete method on the job when you want to access the data.",785],["Create a job",785],["To create a job in Unity, implement the IJob interface. You can use your IJob implementation to schedule a single job that runs in parallel to any other jobs that are running.",785],["IJob has one required method: Execute, which Unity invokes whenever a worker thread runs the job.",785],["When you create a job, you can also create a JobHandle for it, which other methods need to use to reference the job.",785],["Important:** There’s no protection against accessing non-readonly or mutable static data from within a job. Accessing this kind of data circumvents all safety systems and might crash your application or the Unity Editor.",785],["When Unity runs, the job system makes a copy of scheduled job data, which prevents more than one thread from reading or writing the same data. Only data written to a NativeContainer can be accessed after the job finishes. This is because both the copy of the NativeContainer that the job uses and the original NativeContainer object point to the same memory. For more information, see the documentation on Thread safe types.",785],["When the job system picks up a job from its job queue, it runs the Execute method once on a single thread. Typically, the job system runs jobs on background threads, but it can choose the main thread if it becomes idle. For this reason, you should design your jobs to complete in under a frame.",785],["",785],["Schedule a job",785],["To schedule a job, call Schedule. This puts the job into the job queue, and the job system begins executing the job once all its dependencies, if any, complete. Once scheduled, you can't interrupt a job. You can only call Schedule from the main thread.",785],["Tip:** Jobs have a Run method that you can use in place of Schedule to immediately execute the job on the main thread. You can use this for debugging purposes.",785],["Complete the job",785],["Once you call Schedule and the job system has executed a job, you can call the Complete method on the JobHandle to access the data in the job. It's best practice to call Complete as late as possible in your code. When you call Complete, the main thread can safely access the NativeContainer instance that the job was using. Calling Complete also cleans up the state in the safety system. Not doing so introduces a memory leak.",785],["Job examples",785],["The following is an example of a job that adds two floating point values together. It implements IJob, uses a NativeArray to get the results of the job, and uses the Execute method with the implementation of the job inside it:",785],["```lang-cs",785],["using UnityEngine;",785],["using Unity.Collections;",785],["using Unity.Jobs;",785],["// Job adding two floating point values together",785],["public struct MyJob : IJob",785],["public float a;",785],["public float b;",785],["public NativeArray result;",785],["public void Execute()",785],["result[0] = a + b;",785],["The following example builds on the MyJob job to schedule a job on the main thread:",785],["```lang-cs",785],["using UnityEngine;",785],["using Unity.Collections;",785],["using Unity.Jobs;",785],["public class MyScheduledJob : MonoBehaviour",785],["// Create a native array of a single float to store the result. Using a",785],["// NativeArray is the only way you can get the results of the job, whether",785],["// you're getting one value or an array of values.",785],["NativeArray result;",785],["// Create a JobHandle for the job",785],["JobHandle handle;",785],["// Set up the job",785],["public struct MyJob : IJob",785],["public float a;",785],["public float b;",785],["public NativeArray result;",785],["public void Execute()",785],["result[0] = a + b;",785],["// Update is called once per frame",785],["void Update()",785],["// Set up the job data",785],["result = new NativeArray(1, Allocator.TempJob);",785],["MyJob jobData = new MyJob",785],["a = 10,",785],["b = 10,",785],["result = result",785],["};",785],["// Schedule the job",785],["handle = jobData.Schedule();",785],["private void LateUpdate()",785],["// Sometime later in the frame, wait for the job to complete before accessing the results.",785],["handle.Complete();",785],["// All copies of the NativeArray point to the same memory, you can access the result in \"your\" copy of the NativeArray",785],["// float aPlusB = result[0];",785],["// Free the memory allocated by the result array",785],["result.Dispose();",785],["Schedule and Complete best practices",785],["It’s best practice to call Schedule on a job as soon as you have the data it needs, and don’t call Complete on it until you need the results.",785],["You can schedule less important jobs in a part of the frame where they aren’t competing with more important jobs.",785],["For example, if there is a period between the end of one frame and the beginning of the next frame where no jobs are running, and a one frame latency is acceptable, you can schedule the job towards the end of a frame and use its results in the following frame. Alternatively, if your application saturates that changeover period with other jobs, and there's an under-utilized period somewhere else in the frame, it's more efficient to schedule your job there instead.",785],["You can also use the Profiler to see where Unity is waiting for jobs to complete. The marker WaitForJobGroupID on the main thread indicates this. This marker might mean that you've introduced a data dependency somewhere that you should resolve. Look for JobHandle.Complete to track down where you have data dependencies that are forcing the main thread to wait.",785],["Avoid using long running jobs",785],["Unlike threads, jobs don't yield execution. Once a job starts, that job worker thread commits to completing the job before running any other job. As such, it's best practice to break up long running jobs into smaller jobs that depend on one another, instead of submitting jobs that take a long time to complete relative to other jobs in the system.",785],["The job system usually runs multiple chains of job dependencies, so if you break up long running tasks into multiple pieces there is a chance for multiple job chains to progress. If instead the job system is filled with long running jobs, they might completely consume all worker threads and block independent jobs from executing. This might push out the completion time of important jobs that the main thread explicitly waits for, resulting in stalls on the main thread that otherwise wouldn't exist.",785],["In particular, long running IJobParallelFor jobs impact negatively on the job system because these job types intentionally try to run on as many worker threads as possible for the job batch size. If you can't break up long parallel jobs, consider increasing the batch size of your job when scheduling it to limit how many workers pick up the long running job.",785],["```lang-csharp",785],["MyParallelJob jobData = new MyParallelJob();",785],["jobData.Data = someData;",785],["jobData.Result = someArray;",785],["// Use half the available worker threads, clamped to a minimum of 1 worker thread",785],["const int numBatches = Math.Max(1, JobsUtility.JobWorkerCount / 2);",785],["const int totalItems = someArray.Length;",785],["const int batchSize = totalItems / numBatches;",785],["// Schedule the job with one Execute per index in the results array and batchSize items per processing batch",785],["JobHandle handle = jobData.Schedule(result.Length, totalItems, batchSize);",785],["Additional resources",785],["Job dependencies",786],["Often, one job depends on the results of another job. For example, Job A might write to a NativeArray that job B uses as input. You must tell the job system about such a dependency when you schedule a dependent job. The job system won't run the dependent job until the job it depends upon is finished. One job can depend on more than one job.",786],["You can also have a chain of jobs in which each job depends on the previous one. However, dependencies delay job execution because you must wait for any dependencies of a job to complete before it can run. Completing a dependent job must first complete any job it depends on, and any jobs those jobs depend on.",786],["When you call the Schedule method of a job it returns a JobHandle. You can use a JobHandle as a dependency for other jobs. If a job depends on the results of another job, you can pass the first job’s JobHandle as a parameter to the second job’s Schedule method, like so:",786],["```lang-cs",786],["JobHandle firstJobHandle = firstJob.Schedule();",786],["secondJob.Schedule(firstJobHandle);",786],["Combining dependencies",786],["If a job has a lot of dependencies, you can use the method JobHandle.CombineDependencies to merge them. CombineDependencies allows you to pass dependencies onto the Schedule method.",786],["```lang-cs",786],["NativeArray handles = new NativeArray(numJobs, Allocator.TempJob);",786],["// Populate handles with JobHandles from multiple scheduled jobs...",786],["JobHandle jh = JobHandle.CombineDependencies(handles);",786],["An example of multiple jobs and dependencies",786],["The following is an example of multiple jobs that have multiple dependencies. It's best practice to put the job code (MyJob and AddOneJob) in a separate file to the Update and LateUpdate code, but for the purposes of clarity, this example is one file:",786],["```lang-cs",786],["using UnityEngine;",786],["using Unity.Collections;",786],["using Unity.Jobs;",786],["public class MyDependentJob : MonoBehaviour",786],["// Create a native array of a single float to store the result. This example waits for the job to complete.",786],["NativeArray result;",786],["// Create a JobHandle to access the results",786],["JobHandle secondHandle;",786],["// Set up the first job",786],["public struct MyJob : IJob",786],["public float a;",786],["public float b;",786],["public NativeArray result;",786],["public void Execute()",786],["result[0] = a + b;",786],["// Set up the second job, which adds one to a value",786],["public struct AddOneJob : IJob",786],["public NativeArray result;",786],["public void Execute()",786],["result[0] = result[0] + 1;",786],["// Update is called once per frame",786],["void Update()",786],["// Set up the job data for the first job",786],["result = new NativeArray(1, Allocator.TempJob);",786],["MyJob jobData = new MyJob",786],["a = 10,",786],["b = 10,",786],["result = result",786],["};",786],["// Schedule the first job",786],["JobHandle firstHandle = jobData.Schedule();",786],["// Setup the data for the second job",786],["AddOneJob incJobData = new AddOneJob",786],["result = result",786],["};",786],["// Schedule the second job",786],["secondHandle = incJobData.Schedule(firstHandle);",786],["private void LateUpdate()",786],["// Sometime later in the frame, wait for the job to complete before accessing the results.",786],["secondHandle.Complete();",786],["// All copies of the NativeArray point to the same memory, you can access the result in \"your\" copy of the NativeArray",786],["// float aPlusBPlusOne = result[0];",786],["// Free the memory allocated by the result array",786],["result.Dispose();",786],["Thread safe types",787],["The job system works best when you use it with the Burst compiler. Because Burst doesn’t support managed objects, you need to use unmanaged types to access the data in jobs. You can do this with blittable types, or use Unity’s built-in NativeContainer objects, which are a thread-safe C# wrapper for native memory. NativeContainer objects also allow a job to access data shared with the main thread rather than working with a copy.",787],["Types of NativeContainers",787],["The Unity.Collections namespace contains the following built-in NativeContainer objects:",787],["NativeArray: An unmanaged array which exposes a buffer of native memory to managed code",787],["NativeSlice: Gets a subset of a NativeArray from a particular position to a certain length.",787],["Note:** The Collections package contains additional NativeContainers. For a full list of the additional types, see the Collections documentation on Collection types.",787],["Read and write access",787],["By default, when a job has access to a NativeContainer instance, it has both read and write access. This configuration can slow performance. This is because the job system doesn’t allow you to schedule a job that has write access to a NativeContainer instance at the same time as another job that’s writing to it.",787],["However, If a job doesn’t need to write to a NativeContainer instance, you can mark the NativeContainer with the [ReadOnly] attribute, like so:",787],["```lang-cs",787],["[ReadOnly]",787],["public NativeArray input;",787],["In the above example, you can execute the job at the same time as other jobs that also have read-only access to the first NativeArray.",787],["Memory allocators",787],["When you create a NativeContainerinstance, you must specify the memory allocation type that you need. The allocation type you use depends on how long you would like to keep the native container available for. This way you can tailor the allocation to get the best performance possible in each situation.",787],["There are three Allocator types for NativeContainer memory allocation and release. You must specify the appropriate one when instantiating a NativeContainer instance:",787],["Allocator.Temp: The fastest allocation. Use it for allocations with a lifespan of one frame or fewer. You can’t use Temp to pass allocations to NativeContainer instances stored in a job's member field.",787],["Allocator.TempJob: A slower allocation than Temp but faster than Persistent. Use it for thread-safe allocations within a lifespan of four frames. Important: You must Dispose of this allocation type within four frames, or the console prints a warning, generated from the native code. Most small jobs use this allocation type.",787],["Allocator.Persistent: The slowest allocation but can last as long as you need it to, and if necessary, throughout the application’s lifetime. It’s a wrapper for a direct call to malloc. Longer jobs can use this NativeContainer allocation type. Don’t use Persistent where performance is essential.",787],["For example:",787],["```lang-cs",787],["NativeArray result = new NativeArray(1, Allocator.TempJob);",787],["Note:** The number 1 in the example above indicates the size of the NativeArray. In this case, it has only one array element because it only stores one piece of data in its result.",787],["",787],["NativeContainer safety system",787],["The safety system is built into all NativeContainer instances. It tracks what reads or writes to any NativeContainer instance, and uses that information to enforce certain rules on the use of NativeContainers that makes them behave in a deterministic way across multiple jobs and threads.",787],["For example, if two independent scheduled jobs write to the same NativeArray, this is unsafe because you can’t predict which job executes first. This means that you won’t know which of the jobs will overwrite data from the other. The safety system throws an exception with a clear error message that explains why and how to solve the problem, when you schedule the second job.",787],["If you want to schedule two jobs that write to the same NativeContainer instance, you can schedule the jobs with a dependency. The first job writes to the NativeContainer, and once it has finished executing, the next job safely reads and writes to that same NativeContainer. Introducing the dependency guarantees that the jobs always execute in a consistent order and that the resulting data in the NativeContainer is deterministic.",787],["The safety system allows multiple jobs to read from the same data in parallel.",787],["These read and write restrictions also apply when accessing data from the main thread. For example, if you try to read the contents of a NativeContainer before the job that writes to it has completed, the safety system throws an error. Likewise, if you try to write to a NativeContainer while there are still pending jobs that read or write to it, then the safety system also throws an error.",787],["Also, because NativeContainers don’t implement ref return, you can’t directly change the contents of a NativeContainer. For example, nativeArray[0]++; is the same as writing var temp = nativeArray[0]; temp++; which doesn’t update the value in nativeArray.",787],["Instead, you must copy the data from the index into a local temporary copy, modify that copy, and save it back. For example:",787],["```lang-cs",787],["MyStruct temp = myNativeArray[i];",787],["temp.memberVariable = 0;",787],["myNativeArray[i] = temp;",787],["Additional resources",787],["Job system overview",788],["Unity’s job system lets you create multithreaded code so that your application can use all available CPU cores to execute your code. This provides improved performance because your application uses the capacity of all the CPU cores it’s running on more efficiently, rather than running all code on one CPU core.",788],["You can use the job system by itself, but for improved performance, you should also use the Burst compiler, which is specifically designed to compile jobs for Unity’s job system. The Burst compiler has improved code generation, which results in increased performance and a reduction of battery consumption on mobile devices.",788],["You can also use the job system with Unity’s Entity Component System to create high performance data-oriented code.",788],["",788],["Multithreading",788],["Unity uses its own native job system to process its own native code over multiple worker threads, which are dependent on the number of CPU cores available on the device your application runs on. Usually Unity executes your code on one thread which runs by default at the start of the program, called the main thread. However, when you use the job system, Unity executes your code over the worker threads, which is called multithreading.",788],["Multithreading takes advantage of a CPU’s capability to process a lot of threads at the same time across multiple cores. Instead of tasks or instructions executing one after another, they run simultaneously. The worker threads run in parallel to one another, and synchronize their results with the main thread once completed.",788],["The job system ensures that there are only enough threads to match the capacity of the CPU cores, which means that you can schedule as many tasks as you need without specifically needing to know how many CPU cores are available. This differs from other job systems that rely on techniques such as thread pooling, where it’s easier to inefficiently create more threads than CPU cores.",788],["",788],["Work stealing",788],["The job system uses work stealing as part of its scheduling strategy to even out the amount of tasks shared across worker threads. Worker threads might process tasks faster than others, so once a worker thread has finished processing all of its tasks, it looks at the other worker threads’ queues and then processes tasks assigned to another worker thread.",788],["",788],["Safety system",788],["To make it easier to write multithreaded code, the job system has a safety system that detects all potential race conditions and protects you from the bugs they can cause. A race condition happens when the output of one operation depends on the timing of another process outside of its control.",788],["For example, if the job system sends a reference to data from your code in the main thread to a job, it can’t verify whether the main thread is reading the data at the same time the job is writing to it. This scenario creates a race condition.",788],["To solve this problem, the job system sends each job a copy of the data it needs to operate on rather than a reference to the data in the main thread. This copy isolates the data, which eliminates the race condition.",788],["The way that the job system copies data means that a job can only access blittable data types. These types don’t need conversion when passed between managed and native code.",788],["The job system uses memcpy to copy blittable types and transfer the data between the managed and native parts of Unity. It uses memcpy to put data into native memory when scheduling jobs and gives the managed side access to that copy when executing jobs. For more information, see Scheduling jobs.",788],["Collections package",788],["In addition to the job system provided in the core Unity engine, the Collections package extends many of the job types and native containers. For more information, see the Collections documentation.",788],["Additional resources",788],["Parallel jobs",789],["When you schedule a job there can only be one job doing one task. However, there will be times where you need to perform the same operation on a lot of objects. To do this, use a ParallelFor job type, which inherits from IJobParallelFor.",789],["A ParallelFor job uses a NativeArray of data to act on as its data source. ParallelFor jobs run across multiple CPU cores. There’s one job per core, with each handling a subset of the workload.",789],["IJobParallelFor behaves like IJob, but instead of a single Execute method, it invokes the Execute method once per item in the data source. There’s also an integer parameter index in the Execute method, which you can use to access and operate on a single element of the data source within the job implementation.",789],["The following is an example of a ParallelFor job definition:",789],["```lang-cs",789],["struct IncrementByDeltaTimeJob: IJobParallelFor",789],["public NativeArray values;",789],["public float deltaTime;",789],["public void Execute (int index)",789],["float temp = values[index];",789],["temp += deltaTime;",789],["values[index] = temp;",789],["Schedule a ParallelFor job",789],["To schedule a ParallelFor job, you must specify the length of the NativeArray data source that you want to split. The job system doesn’t know which NativeArray you want to use as the data source if there are several in the struct. The length also tells the job system how many Execute methods to expect.",789],["In Unity's native code, the scheduling of ParallelFor jobs is more complicated. When Unity schedules a ParallelFor job, the job system divides the work into batches to distribute between cores. Each batch contains a subset of Execute methods. The job system then schedules one job in Unity’s native job system per CPU core and passes that native job to the batches to complete.",789],["When a native job completes its batches before others, it steals remaining batches from the other native jobs. It only steals half of a native job’s remaining batches at a time, to ensure cache locality.",789],["To optimize the process, you need to specify a batch count. The batch count controls how many jobs you get, and how fine-grained the redistribution of work between threads is. Having a low batch count, such as 1, gives you an even distribution of work between threads. However, it comes with some overhead, so sometimes it's better to increase the batch count. Starting at 1 and increasing the batch count until there are negligible performance gains is a good strategy.",789],["The following is an example of scheduling a ParallelFor job",789],["Job code:",789],["```lang-cs",789],["// Job adding two floating point values together",789],["public struct MyParallelJob : IJobParallelFor",789],["[ReadOnly]",789],["public NativeArray a;",789],["[ReadOnly]",789],["public NativeArray b;",789],["public NativeArray result;",789],["public void Execute(int i)",789],["result[i] = a[i] + b[i];",789],["Main thread code:",789],["```lang-cs",789],["NativeArray a = new NativeArray(2, Allocator.TempJob);",789],["NativeArray b = new NativeArray(2, Allocator.TempJob);",789],["NativeArray result = new NativeArray(2, Allocator.TempJob);",789],["a[0] = 1.1;",789],["b[0] = 2.2;",789],["a[1] = 3.3;",789],["b[1] = 4.4;",789],["MyParallelJob jobData = new MyParallelJob();",789],["jobData.a = a;",789],["jobData.b = b;",789],["jobData.result = result;",789],["// Schedule the job with one Execute per index in the results array and only 1 item per processing batch",789],["JobHandle handle = jobData.Schedule(result.Length, 1);",789],["// Wait for the job to complete",789],["handle.Complete();",789],["// Free the memory allocated by the arrays",789],["a.Dispose();",789],["b.Dispose();",789],["result.Dispose();",789],["ParallelForTransform jobs",789],["A ParallelForTransform job is another type of ParallelFor job designed specifically for operating on Transforms. It's useful for working on Transform operations from jobs efficiently. For more information, see the ParallelForTransform API documentation.",789],["Joints",790],["A Joint connects a Rigidbody to another Rigidbody, or to a fixed point in space. Joints can apply forces that move rigid bodies, and joint limits can restrict that movement.",790],["You can configure Joints via the Joint class, or the corresponding Joint component.",790],["Topic Description ",790],[":-------------------- :----------------------- ",790],["Introduction to joints Overview of the concepts and behaviours of physics joints in Unity. ",790],["Character Joint component reference Reference for the Character Joint component. ",790],["Fixed Joint component reference Reference for the Fixed Joint component. ",790],["Hinge Joint component reference Reference for the Hinge Joint component. ",790],["Spring Joint component reference Reference for the Spring Joint component. ",790],["Introduction to joints",791],["A joint connects a Rigidbody to another Rigidbody or a fixed point in space. Joints apply forces that move rigid bodies, and joint limits restrict that movement. Joints give Rigidbodies the following degrees of freedom:",791],["Unity's provides the following joint components that apply different forces and limits to Rigidbody components, and give those bodies different motion:",791],["Property: Function: ",791],["Character Joint Emulates a ball and socket joint, like a hip or shoulder. Constrains rigid body movement along all linear degrees of freedom, and enables all angular freedoms. Rigidbodies attached to a Character Joint orient around each axis and pivot from a shared origin. ",791],["Configurable Joint Emulates any skeletal joint, like those in a ragdoll. You can configure this joint to force and restrict rigid body movement in any degree of freedom. ",791],["Fixed Joint Restricts the movement of a rigid body to follow the movement of the rigid body it is attached to. This is useful when you need rigid bodies that easily break apart from each other, or you want to connect the movement of two rigid bodies without parenting in a Transform hierarchy. ",791],["Hinge Joint Attaches a rigid body to another rigid body or a point in space at a shared origin and allows the rigid bodies to rotate around a specific axis from that origin. Useful for emulating doors and finger joints. ",791],["Spring Joint Keeps rigid bodies apart from each other but lets the distance between them stretch slightly. The spring acts like a piece of elastic that tries to pull the two anchor points together to the exact same position. ",791],["2D joints have 2D at the end of the name (for example, Hinge Joint 2D). For a summary of the 2D joints , see Joints 2D documentation.",791],["Joints also have other options that you can enable for specific effects. For example, you can set a joint to break when a Rigidbody applies a force to it that exceeds a certain threshold. Some joints allow a drive force to occur between the connected Rigidbodies to set them in motion automatically.",791],["Note:** If you want to build kinematic chains in the context of an industrial application, for example to simulate a robotic arm with realistic physics behavior, you should use physics articulations instead of the regular joints hereby described.",791],["Constraints of 2D joints",792],["A constraint is a rule which a joint will try to ensure isn’t permanently broken. There are different types of constraints, and all joints provide at least one constraint that apply to and govern the Rigidbody 2D behavior. Some constraints limit behavior such as ensuring a Rigidbody stays on a line, or in a certain position. Some are ‘driving’ constraints which actively compel a Rigidbody GameObject to behave in a certain way, such as trying to make a GameObject maintain a certain speed.",792],["Temporarily breaking constraints",792],["Unity's physics system expects that constraints can be temporarily broken, such as when the objects move further apart than their set distance constraint or move faster than their set speed constraint. When a constraint isn’t broken, the joint doesn’t apply any forces. When a constraint is broken, the joint applies forces to fix the constraint.",792],["For example, with ‘driving’ constraints, the joint applies forces to maintain the distance or ensure the speed set by the constraint. While this application of force is typically performed quickly, it doesn’t always instantly fix the constraint and instead it fixes the constraint gradually over time. This can lead to joints appearing to stretch or appear less rigid. The lag happens because the physics system is trying to apply joint forces to fix constraints, while other physics forces are simultaneously still acting to break those same constraints. In addition to the conflicting forces acting on GameObjects, some joints are more stable and react faster than others.",792],["Whatever constraints the joint provides, the joint only uses forces to fix the constraint. These are either a linear (straight line) force or angular (torque) force.",792],["Tip:** It’s recommended to be cautious when applying large forces to Rigidbody objects that have joints attached, especially those with large masses, due to the conflicting forces acting on joints.",792],["Permanently breaking joints",792],["All joints are able to monitor the force or torque that they’re applying to stay within its own constraints. Some joints monitor both force and torque while others monitor only force. This informs you of when a joint exceeds a specific force or torque in trying to maintain its constraints, and you can specify these thresholds as Joint2D.breakForce and Joint2D.breakTorque. When a joint exceeds these thresholds, it’s known as joint breaking.",792],["You can specify the action to be taken when a joint breaks with Joint2D.breakAction. The default break action is to destroy the Joint2D component, and you can refer to JointBreakAction2D for other available fixed actions.",792],["Additional resources",792],["2D joints",793],["2D joints are the 2D counterparts of the 3D joint physics components, and are made to work only with 2D GameObjects. You can only attach 2D joints to GameObjects which have an attached Rigidbody 2D component, or to a fixed position in world space. A 2D joint connects a Rigidbody 2D GameObject to another Rigidbody 2D GameObject. 2D joints can apply forces that move Rigidbody GameObjects, and joint limits can restrict that movement.",793],["You can tell a 2D joint from its 3D counterpart in the Component browser by its name ending in ‘2D'.",793],["There are many different types of 2D joints available. Refer to each joint's respective page for detailed information about their properties and uses.",793],["Topic Description ",793],[":---------------------------------------------- :------------------------------------------------------------ ",793],["Constraints of 2D joints Understand the constraints of using 2D joints. ",793],["Distance Joint 2D Attach two GameObjects controlled by Rigidbody physics together while keeping them a set distance apart. ",793],["Fixed Joint 2D Keep two objects in a certain position relative to each other, so that the objects are always offset at a set position and angle. This is useful for objects that need to react as if they're rigidly connected. You can also use this joint to create a less rigid connection with some flexibility. ",793],["Friction Joint 2D Reduce both the linear and angular velocities between two GameObjects controlled by Rigidbody physics to zero (i.e. it slows them down and stops them). For example, use this joint to create a rotating platform that still resists the rotation. ",793],["Hinge Joint 2D Allow a GameObject controlled by Rigidbody physics to be attached to a point in space around which it can rotate. For example, use this joint as the pivot on a pair of scissors. ",793],["Relative Joint 2D Allow two GameObjects controlled by Rigidbody physics to maintain a position based on each other's location. Use this joint to keep two objects at a certain offset from each other. For example, use this joint to attach two additional guns to a spaceship which follows its position. ",793],["Slider Joint 2D Allow a GameObject controlled by Rigidbody physics to slide along a line in space. For example, use this joint to create a sliding door object. ",793],["Spring Joint 2D Allow two GameObjects controlled by Rigidbody physics to react as if they were attached together by a spring. ",793],["Target Joint 2D connects to a specified target, rather than another Rigidbody object, as other joints do. It's a spring type joint, which you could use for picking up and moving an object acting under gravity, for example. ",793],["Wheel Joint 2D simulates the behavior of a rolling wheel, with a suspension 'spring' maintaining its distance from the main body of the 'vehicle'.",793],["Additional resources",793],["Late Binding",794],["Late Binding is the name of a process in which you load or swap in the desired Sprite Atlas at run time via the Sprite Atlas API. This is necessary when the build doesn't automatically load a prepared Sprite Atlas at run time (for example, when no Sprite Atlases are included in the build.",794],["Sprites enumeration at run time",794],["To retrieve the contents of a Sprite Atlas at run time, follow these steps:",794],["Create a custom component that takes SpriteAtlas as a public variable.",794],["Assign a Sprite Atlas to the field.",794],["Enter the Editor's Play Mode.",794],["Access the variable and call the property .GetSprites to retrieve the array of Sprites packed in the selected Atlas.",794],["Layer-based collision detection",795],["Layer-based collision detection is a way to make a GameObject collide with another GameObject that is set up to a specific Layer or Layers.",795],["The image above shows six GameObjects (3 planes, 3 cubes) in the Scene view, and the Layer Collision Matrix in the window to the right. The Layer Collision Matrix defines which GameObjects can collide with which Layers.",795],["In the example, the Layer Collision Matrix is set up so that only GameObjects that belong to the same layer can collide:",795],["Layer 1 is checked for Layer 1 only",795],["Layer 2 is checked for Layer 2 only",795],["Layer 3 is checked for Layer 3 only",795],["Change this to suit your needs: if, for example, you want Layer 1 to collide with Layer 2 and 3, but not with Layer 1, find the row for Layer 1, then check the boxes for the Layer 2 and Layer 3 colums, and leave the Layer 1 column checkbox blank.",795],["Setting up layer-based collision detection",795],["To select a Layer for your GameObjects to belong to, select the GameObject, navigate to the Inspector window, select the Layer dropdown at the top, and either choose a Layer or add a new Layer. Repeat for each GameObject until you have finished assigning your GameObjects to Layers.",795],["In the Unity menu bar, go to Edit > Project Settings, then select the Physics category to open the Physics window.",795],["Select which layers on the Collision Matrix will interact with the other layers by checking them.",795],["Add a layer to a layerMask",796],["To add a layer to a layermask, use the logical OR operator on the original layermask and the layer to add.",796],["```c#",796],["originalLayerMask = (1 << layerToAdd);",796],["Additional resources",796],["Remove a layer from a layerMask",797],["To remove a layer from a layermask, use the logical AND operator on the original layermask and the bitwise complement of the layer to remove it.",797],["```c#",797],["originalLayerMask &= ~(1 << layerToRemove);",797],["Additional resources",797],["Set a layerMask",798],["This page explains how to set up a layerMask correctly so you can use it in API calls that use a serialized layerMask property.",798],["Use a serialized layerMask property",798],["The simplest way to set a layermask in the Unity Editor is to create a property that uses Unity's LayerMask class. If the property is public or uses the SerializeField attribute, Unity provides an interface in the Inspector that you can use to select which layers the layermask represents.",798],["```c#",798],["using UnityEngine;",798],["public class LayerMaskExample : MonoBehaviour",798],["[SerializeField] private LayerMask layermask;",798],["Convert from a layer",798],["If you want to convert a layer to a layermask in a script at runtime, use the binary left-shift operator to left-shift 1 by the layer. The result is a layermask that represents the single layer.",798],["```c#",798],["using UnityEngine;",798],["public class LayerExample : MonoBehaviour",798],["[SerializeField] private int layer = 10;",798],["private int layerAsLayerMask;",798],["private void Start()",798],["layerAsLayerMask = (1 << layer);",798],["Additional resources",798],["Layers and layerMasks",799],["Every GameObject exists on a single layer, but Unity APIs that let you set which layers the API affect don't directly use layers. Instead, they use layerMasks.",799],["A layer is a standard integer, but a layerMask is an integer formatted as a bitmask where every 1 represents a layer to include and every 0 represents a layer to exclude. This means that you can pass a layer to an API that expects a layerMasks and the script will still compile because layers and layerMasks use the same underlying type. However, the API call won't produce the behavior you expect.",799],["For example, if you want to perform a RayCast against GameObjects on layer 9, if you pass 9 into the Physics.Raycast call as the layerMask, Unity actually performs the ray cast against GameObjects on layers 3 and 0. This is because the binary representation of 9 is 00001001 and if you interpret this as a mask, the 1s are in the place of layers 3 and 0.",799],["For information on how to set up a layermask to use in an API call, see Set a layermask.",799],["Additional resources",799],["Layers",800],["Layers are a tool that allows you to separate GameObjects in your scenes. You can use layers through the UI and with scripts to edit how GameObjects within your scene interact with each other.",800],["Topic Description ",800],[":--------------- :-------------------------- ",800],["Uses of layers in Unity Understand common applications of layers in Unity. ",800],["Create layers in Unity How to create layers and assign GameObjects to layers in Unity. ",800],["Layers and layermasks Understand the difference between layers and layermasks. ",800],["Set a layermask How to correctly setup a layermask to use in API calls. ",800],["Add a layer to a layermask How to programmatically add a new layer to a layermask. ",800],["Remove a layer from a layermask How to programmatically remove a layer from a layermask. ",800],["Additional resources",800],["Level of Detail (LOD) for meshes",801],["This page contains information on level of detail (LOD) for meshes. For information on LOD for shaders, see SubShader LOD value.",801],["Level of detail (LOD) is a technique that reduces the number of GPU operations that Unity requires to render distant meshes.",801],["When a GameObject in the Scene is far away from the Camera, you see less detail compared to when the GameObject is close to the Camera. However, by default, Unity uses the same number of triangles to render it at both distances. This can result in wasted GPU operations, which can impact performance in your Scene.",801],["The LOD technique allows Unity to reduce the number of triangles it renders for a GameObject based on its distance from the Camera. To use it, a GameObject must have a number of meshes with decreasing levels of detail in its geometry. These meshes are called LOD levels. The farther a GameObject is from the Camera, the lower-detail LOD level Unity renders. This technique reduces the load on the hardware for these distant GameObjects, and can therefore improve rendering performance.",801],["To understand how to use LOD in Unity, you must first understand what LOD levels are, and how they work.",801],["LOD levels",801],["A LOD level is a mesh that defines the level of detail Unity renders for a GameObject’s geometry. When a GameObject uses LOD, Unity displays the appropriate LOD level for that GameObject based on the GameObject's distance from the Camera.",801],["Each LOD level exists in a separate GameObject, each of which has a Mesh Renderer component that displays that LOD level. For the very lowest level of detail, you can use a Billboard Asset, which Unity displays instead of a 3D mesh. Unity shows and hides these GameObjects as required. LOD levels must be child GameObjects to the GameObject they relate to.",801],["The images below demonstrate how the LOD levels change according to distance from the Camera.",801],["Set up LOD in Unity",801],["To use LOD, you must have a GameObject with a LOD Group component. The LOD Group component provides controls to define how LOD behaves on this GameObject, and references the GameObjects that Unity shows or hides for each LOD level. See LOD Group for details on the properties in this component.",801],["You can set up LOD in Unity two ways:",801],["You can configure LOD levels in your external 3D modeling application, and Unity can automatically create and configure the required GameObjects and components for you. See Importing LOD Meshes for details on the correct configuration.",801],["You can manually create a GameObject with a LOD Group component, and configure the LOD levels manually.",801],["Configuring LOD levels",801],["To manually configure the distance from the camera at which Unity displays each LOD level, use the LOD Group component’s selection bar.",801],["The LOD Group component accepts a maximum of eight LOD levels. LOD 0 is the closest to the Camera, and therefore the most detailed LOD level.",801],["Project-wide LOD settings",801],["In the Quality settings window, you can configure LOD settings that affect all GameObjects in your Project.",801],["There are two LOD settings you can configure:",801],["Maximum LOD Level**: Exclude meshes above a specified LOD level from your build.",801],["LOD Bias**: Determine whether to favor higher or lower LOD levels at threshold distances.",801],["License activation methods",802],["You can choose from several methods to activate your Unity license.",802],["Method When to use this method ",802],["",802],["Unity Hub The Unity Hub is the primary method for all license management operations. It's a comprehensive application that lets you manage your Unity projects, Editor installations, and licenses. If you can install the Unity Hub and you have an internet connection, use the Unity Hub to manage your licenses. ",802],["Command line Scenarios where you might use the command line to activate or return your license include:You have internet access, but you use Unity in headless mode (without a GUI) for automated tasks, such as builds and tests.You have internet access, but you’re unable or unwilling to install the Unity Hub. ",802],["Manual license activation Use the manual license activation method when you have limited internet access, such as a closed network environment or an air gapped network. Manual license activation is a 3-step process where you need internet access for only one of the steps, and you can do that step on any computer, not necessarily the computer where you plan to use Unity. This method isn't supported for Unity licenses under a Personal plan. You can use this method to activate your license, not to return it. ",802],["Additional resources",802],["\nUnity Hub documentation\n",802],["\nLicenses and activation\n",802],["Licenses and activation",803],["To use Unity, you need an activated license. To learn about Unity's plans and prices, go to the Unity Store.",803],["Topic Description ",803],["",803],["License activation methods Understand the different methods you can use to activate your license and decide which method is best for you. ",803],["Manage your license through the command line Use the command line to activate or return your license. ",803],["Manual license activation Manually activate your license, by following a 3-step process to submit a license request. ",803],["License troubleshooting Troubleshoot your license management issues. ",803],["Additional resources",803],["If you have a complex project or a large organization, you might consider entitlement-based licensing, rather than standard user licenses. Unity’s entitlement-based solution is a floating licensing server. For information, refer to Unity Licensing Server.",803],["Unity Support article, Licenses.",803],["Light Probes and Scene loading",804],["Unity updates its Light Probe data differently depending on how you load or unload Scenes.",804],["Unity uses a LightProbes C# object to store Light Probe data for all currently loaded Scenes. The LightProbes object contains an internal data structure called a tetrahedral tessellation. Unity uses the tetrahedral tessellation in its calculations to determine how Light Probes light GameObjects.",804],["When you load or unload a Scene, Unity automatically updates the LightProbes object to contain the positions and coefficients of all Light Probes in all currently loaded Scenes. However, whether Unity updates the tetrahedral tessellation depends on how you load or unload the Scene.",804],["When you load a Scene with LoadSceneMode.Single, Unity updates the tetrahedral tessellation automatically as part of the load process, because the new light probe data completely replaces the previous light probe data.",804],["When you load a Scene with LoadSceneMode.Additive, or unload a Scene with UnloadSceneAsync, Unity does not automatically update the tetrahedral tessellation, because the new or removed light probe data needs to be recalculated - which is a computationally expensive operation, and there may be subsequent scenes to be loaded or unloaded after this operation.",804],["Therefore Unity provides you with the needsRetetrahedralization event to allow you to decide when to retetrahedralize the new light probe data. For example, if you are additively loading five new scenes, you would not want to retetrahedralize the data five times, once after each scene loads. Instead, you would only want to retetrahedralize the data after all five scenes have loaded and all the new light probe data is ready.",804],["If Unity performs calculations using an out-of-date tetrahedral tessellation, the results do not take into account any newly loaded or unloaded Light Probes. This means that Light Probes might not light GameObjects as expected, and calls to LightProbes.CalculateInterpolatedLightAndOcclusionProbes() or LightProbes.GetInterpolatedProbe() might return unexpected results.",804],["To force Unity to update the tetrahedral tessellation, you can call LightProbes.Tetrahedralize or LightProbes.TetrahedralizeAsync(). These functions cause Unity to update the tetrahedral tessellation with data from all Light Probes for all currently loaded Scenes.",804],["Updating the tetrahedral tessellation is CPU-intensive, and the CPU impact increases with the number of Light Probes. If you are loading and unloading multiple Scenes, and you experience a performance impact from updating the tetrahedral tessellation, then it might be beneficial to delay the update until you have loaded or unloaded a certain amount of content, or until a time when the CPU impact is not likely to affect the performance of your application.",804],["Light Explorer extension",805],["The Light Explorer extension allows you to create your own version of the Light Explorer window. You can use this to adapt the functionality of the Light Explorer window so that it works with a custom Scriptable Render Pipeline (SRP), or with the High Definition Render Pipeline's custom Lights.",805],["The Light Explorer Window lets you see every Light in your Scene and edit their properties. With this extension, you can extend the current window in multiple ways. For example, you can:",805],["Change the tabs, from simply changing the tab name to adding your own custom tabs that display lists of different types of GameObject. This is useful if you want to display property information for your own custom Reflection Probes, for example.",805],["Change the columns on a tab, again from changing the name to adding your own custom columns. Adding columns is useful if you want to view extra Light properties.",805],["Extending the Light Explorer",805],["To extend the Light Explorer, you can either inherit from the:",805],["ILightingExplorerExtension interface and override the GetContentTabs method.",805],["DefaultLightingExplorerExtension class, which inherits from ILightingExplorerExtension. This class provides you with all of the content that is already in the window. Use this if you only want to override the number of tabs, the titles of each tab, or which Lights to display. To find out how you can extend the Light Explorer this way, see the example below.",805],["Example code",805],["The examples in this section show you how to extend the default Light Explorer class to only show the Name column for Lights, and change the number of tabs. In your own implementation, you can override as many or as few methods as you want.",805],["The following example only shows the name column for Lights:",805],["```lang-C#",805],["using UnityEngine;",805],["using UnityEditor;",805],["[LightingExplorerExtensionAttribute(typeof(ExampleRenderPipelineAsset))]",805],["public class SimpleExplorerExtension : DefaultLightingExplorerExtension",805],["private static class Styles",805],["public static readonly GUIContent Name = EditorGUIUtility.TrTextContent(\"Name\");",805],["protected override LightingExplorerTableColumn[] GetLightColumns()",805],["return new[]",805],["new LightingExplorerTableColumn(LightingExplorerTableColumn.DataType.Name, Styles.Name, null, 200), // 0: Name",805],["};",805],["The following example only shows the name and enabled status for Lights, and hides the Emissive Materials tab (only shows 3 tabs instead of 4)",805],["```lang-C#",805],["using UnityEngine;",805],["using UnityEditor;",805],["[LightingExplorerExtensionAttribute(typeof(ExampleRenderPipelineAsset))]",805],["public class ComplexLightExplorerExtension : DefaultLightingExplorerExtension",805],["private static class Styles",805],["public static readonly GUIContent Name = EditorGUIUtility.TrTextContent(\"Name\");",805],["public static readonly GUIContent Enabled = EditorGUIUtility.TrTextContent(\"Enabled\");",805],["protected override UnityEngine.Object[] GetLights()",805],["return Resources.FindObjectsOfTypeAll();",805],["protected override LightingExplorerTableColumn[] GetLightColumns()",805],["return new[]",805],["new LightingExplorerTableColumn(LightingExplorerTableColumn.DataType.Name, Styles.Name, null, 200), // 0: Name",805],["new LightingExplorerTableColumn(LightingExplorerTableColumn.DataType.Checkbox, Styles.Enabled, \"m_Enabled\", 25), // 1: Enabled",805],["};",805],["public override LightingExplorerTab[] GetContentTabs()",805],["return new[]",805],["new LightingExplorerTab(\"Lights\", GetLights, GetLightColumns, true),",805],["new LightingExplorerTab(\"2D Lights\", Get2DLights, Get2DLightColumns, true),",805],["new LightingExplorerTab(\"Reflection Probes\", GetReflectionProbes, GetReflectionProbeColumns, true),",805],["new LightingExplorerTab(\"Light Probes\", GetLightProbes, GetLightProbeColumns, true),",805],["new LightingExplorerTab(\"Static Emissives\", GetEmissives, GetEmissivesColumns, false),",805],["};",805],["Useful classes and methods",805],["Here is a list of classes and methods that you can use to extend the Light Explorer:",805],["ILightingExplorerExtension:",805],["public virtual LightingExplorerTab[] GetContentTabs();",805],["public virtual void OnEnable() {}",805],["public virtual void OnDisable() {}",805],["DefaultLightingExplorerExtension (inherit from ILightingExplorerExtension):",805],["public virtual LightingExplorerTab[] GetContentTabs();",805],["public virtual void OnEnable() {}",805],["public virtual void OnDisable() {}",805],["protected virtual UnityEngine.Object[] GetLights();",805],["protected virtual LightingExplorerTableColumn[] GetLightColumns();",805],["protected virtual UnityEngine.Object[] GetReflectionProbes();",805],["protected virtual LightingExplorerTableColumn[] GetReflectionProbeColumns();",805],["protected virtual UnityEngine.Object[] GetLightProbes();",805],["protected virtual LightingExplorerTableColumn[] GetLightProbeColumns();",805],["protected virtual UnityEngine.Object[] GetEmissives();",805],["protected virtual LightingExplorerTableColumn[] GetEmissivesColumns();",805],["2019-08-13 ",805],["Light Explorer extension added in [2018.3] (https://docs.unity3d.com/2018.3/Documentation/Manual/30_search.html?q=newin20183) NewIn20183",805],["Ambient light",806],["Ambient light, also known as diffuse environmental light, is light that is present all around the Scene and doesn’t come from any specific source object. It can be an important contributor to the overall look and brightness of a scene.",806],["Ambient light can be useful in a number of cases, depending upon your chosen art style. An example would be bright, cartoon-style rendering where dark shadows may be undesirable or where lighting is perhaps hand-painted into textures. Ambient light can also be useful if you need to increase the overall brightness of a scene without adjusting individual lights.",806],["Ambient light settings can be found in the Lighting window.",806],["Emissive materials",807],["Like area lights, emissive materials emit light across their surface area. They contribute to bounced light in your scene and associated properties such as color and intensity can be changed during gameplay. Whilst area lights are not supported by Enlighten Realtime Global Illumination, similar soft lighting effects in real-time are still possible using emissive materials.",807],["‘Emission’ is a property of the Standard Shader which allows static objects in our scene to emit light. By default the value of ‘Emission’ is set to zero. This means no light will be emitted by objects assigned materials using the Standard Shader.",807],["There is no range value for emissive materials but light emitted will again falloff at a quadratic rate. Emission will only be received by objects marked as ‘Static’ or “Lightmap Static’ from the Inspector. Similarly, emissive materials applied to non-static, or dynamic geometry such as characters will not contribute to scene lighting.",807],["However, materials with an emission above zero will still appear to glow brightly on-screen even if they are not contributing to scene lighting. This effect can also be produced by selecting ‘None’ from the Standard Shader’s ‘Global Illumination’ Inspector property. Self-illuminating materials like these are a useful way to create effects such as neons or other visible light sources.",807],["Emissive materials only directly affect static geometry in your scene. If you need dynamic, or non-static geometry - such as characters, to pick up light from emissive materials, Light Probes must be used.",807],["Light sources",808],["In order to calculate the shading of a GameObject that is affected by lighting, Unity needs to know the intensity, direction, and color of the light that falls on it. This information is provided by light sources.",808],["This section contains information on the following light sources in Unity:",808],["Lighting Mode",809],["This section describes the effect of the Lighting Mode property of a Lighting Settings Asset.",809],["The Lighting Mode determines the behavior of all Mixed Lights in all Scenes that use the Lighting Settings Asset. The available modes are:",809],["Baked Indirect combines real-time direct lighting with baked indirect lighting. This mode provides real-time shadows with real-time shadowmaps. This Lighting Mode offers realistic lighting and reasonable shadow fidelity, and is suitable for mid-range hardware.",809],["Shadowmask combines real-time direct lighting with baked indirect lighting. It supports baked shadows for distant GameObjects (with Shadow masks) and blends them automatically with real-time shadows (Shadow maps). Shadowmask Lighting Mode is the most realistic and the most resource-intensive Lighting Mode. You can use Quality Settings to configure its performance and visual fidelity. This Lighting Mode is suitable for high-end or mid-range hardware.",809],["Subtractive provides baked direct and indirect lighting. It renders direct real-time shadows for one Directional Light only. This Lighting Mode doesn't provide particularly realistic lighting results, and is suitable for stylized art or low-end hardware.",809],["Setting a Scene's Lighting Mode",809],["Select the Lighting Settings Asset for the Scene.",809],["In the Inspector, navigate to Mixed Lighting.",809],["Use the drop-down menu to set the Lighting Mode.",809],["Precomputed lighting data",810],["Precomputed lighting data and baked lighting are not the same.",810],["Baked lighting data is static. For example, the appearance of a GameObject can change as it moves around a Light Probe (if that GameObject has Contribute Global Illumination enabled). However, the data in the Light Probe itself does not change.",810],["Unity can store baked lighting data in lightmaps, Light Probes, and Reflection Probes.",810],["Enlighten Realtime Global Illumination does not rely on baked lighting. Instead, it uses precomputed visibility data to speed up the process of determining how a light moving in real-time affects the surfaces that its rays can reach.",810],["This section contains information on the following topics:",810],["The Lighting window",811],["The Lighting window (menu: Window > Rendering > Lighting) is the main control point for Unity’s lighting features. You can use the Lighting window to adjust settings related to the lighting in your Scene, and to optimise your precomputed lighting data for quality, bake time, and storage space.",811],["Related APIs",811],["You can perform many of the functions available in the Lighting window in scripts, using the LightingSettings and Lightmapping APIs.",811],["Lighting window layout",811],["The Lighting window contains the following elements:",811],["The Scene tab",811],["The Environment tab",811],["The Realtime Lightmaps tab",811],["The Baked Lightmaps tab",811],["The control area, at the bottom of the window",811],[" ",811],["The Scene tab",811],["The Scene tab displays information about the Lighting Settings Asset that is assigned to the active Scene. If no Lighting Settings Asset is assigned to the active Scene, it displays information about the default LightingSettings object.",811],["The Scene tab is divided into several sections:",811],["Lighting settings - Realtime Lighting, Mixed Lighting and Lightmapping settings",811],["",811],["Lighting Settings Asset controls",811],["Use the controls in this section to assign a Lighting Settings Asset to the active Scene, or to create a new Lighting Settings Asset.",811],["Property: Function: ",811],["Lighting Settings The Lighting Settings Asset assigned to the active Scene. ",811],["New Lighting Settings Click this button to generate a new Lighting Settings Asset in your Project, and automatically assign the new Lighting Settings Asset to the active Scene. ",811],["",811],["Lighting Settings",811],["Use this section to view and edit the properties of the Lighting Settings Asset or LightingSettings object assigned to the current Scene. See Lighting Settings Asset.",811],[" ",811],["Workflow settings",811],["This section contains settings that help you debug your Scene.",811],["Property: Function: ",811],["GPU Baking Device Use this to change the GPU that Unity uses for precomputing lighting data. This property is visible only when you use the GPU Progressive Lightmapper backend. ",811],["Light Probe Visualization Use this to filter which Light Probes are visualized in the Scene view. The default value is Only Probes Used By Selection. ",811],["Only Probes Used By Selection Only Light Probes that affect the current selection are visualized in the Scene view. ",811],["All Probes No Cells All Light Probes are visualized in the Scene view. ",811],["All Probes With Cells All Light Probes are visualized in the Scene view, and the tetrahedrons that are used for interpolation of Light Probe data are also displayed. ",811],["None No Light Probes are visualized in the Scene view. ",811],["Display Weights When enabled, Unity draws a line from the Light Probe used for the active selection to the positions on the tetrahedra used for interpolation. This is a way to debug probe interpolation and placement problems. ",811],["Display Occlusion When enabled, Unity displays occlusion data for Light Probes if the Lighting Mode is set to Shadowmask. ",811],["Highlight Invalid Cells Enable to highlight tetrahedrons that Unity can't use for indirect lighting. For example if the Light Probes are very close together. ",811],["Recalculate Environment Lighting When enabled, Unity automatically calculates environment lighting using the SkyManager for all open scenes, if you haven't generated precomputed lighting data. ",811],[" ",811],["The Environment tab",811],["The Environment tab contains settings related to environmental lighting effects for the current Scene. The contents depend on the render pipeline that your Project uses.",811],["The Environment tab is divided into two sections:",811],["",811],["Environment",811],["The Environment section contains lighting-related settings and controls that apply to the environmental lighting in the current scene, such as the Skybox, diffuse lighting and reflections.",811],["Property: Function: ",811],["Skybox Material A Skybox is a Material that appears behind everything else in the Scene to simulate the sky or other distant background. Use this property to choose the Skybox you want to use for the Scene. The default value is the built-in Default Skybox. ",811],["Sun Source Select a Light to use as the sun in your Scene. Unity uses this Light to simulate the effect of sun position and intensity on the Skybox and your Scene. If you set this to None, Unity considers the brightest directional light in the Scene the sun. Lights whose Render Mode property is set to Not Important do not affect the Skybox. For more information about the Render Mode setting, see the Additional settings section of Lights.",811],["Realtime Shadow Color Define the color that Unity uses to render real-time shadows in Subtractive Lighting Mode. ",811],["Environment Lighting This section contains settings that affect ambient light in the current Scene. ",811],["Source Use this to define a source color for ambient light in the Scene. The default value is Skybox. ",811],["Skybox Use the colors of the Skybox set in Skybox Material to determine the ambient light coming from different angles. This allows for more precise effects than Gradient. ",811],["Gradient Choose separate colors for ambient light from the sky, horizon and ground, and blend smoothly between them. ",811],["Color Use a flat color for all ambient light. ",811],["Intensity Multiplier Use this to set the brightness of the ambient light in the Scene, defined as a value between 0 and 8. The default value is 1. ",811],["Environment Reflections This section contains global settings for Reflection Probe baking, and settings that affect global reflections. ",811],["Source Use this setting to specify whether you want to use the Skybox for reflection effects, or a Cubemap of your choice. The default value is Skybox. ",811],["Skybox Select this to use the Skybox as the reflection source. ",811],["Custom Select this to use either a Cubemap asset or a RenderTexture of type cube for reflections. ",811],["Resolution Use this to set the resolution of the Skybox for reflection purposes. This property is visible only when Source is set to Skybox. ",811],["Cubemap Use this to specify the Cubemap to use for reflection purposes. This property is visible only when Source is set to Cubemap. ",811],["Compression Use this to define whether or not reflection textures are compressed. The default setting is Auto. ",811],["Auto The reflection texture is compressed if the compression format is suitable. ",811],["Uncompressed The reflection texture is stored in memory uncompressed. ",811],["Compressed The texture is compressed. ",811],["Intensity Multiplier The degree to which the reflection source is visible in reflective objects. ",811],["Bounces A reflection bounce occurs when a reflection from one object is then reflected by another object. Use this property to set how many times the Reflection Probes evaluate bounces back and forth between objects. If this is set to 1, then Unity only takes the initial reflection (from the skybox or cube map specified in the Reflection Source property) into account. ",811],["",811],["Other Settings",811],["The Other Settings section contains settings for fog, Halos, Flares and Cookies.",811],[" Property: Function: \n",811],["Fog Enables or disables fog in the Scene. Note that fog is not available with the Deferred rendering path. ",811],["Color Use the color picker to set the color Unity uses to draw fog in the Scene. ",811],["Mode Define the way in which the fogging accumulates with distance from the camera. ",811],["__Linear__ Fog density increases linearly with distance. \n",811],[" Start Set the distance from the Camera at which the fog starts. \n",811],[" End Set the distance from the Camera at which the fog completely obscures Scene GameObjects. \n",811],["__Exponential__ Fog density increases exponentially with distance. \n",811],[" Density Use this to control the density of the fog. The fog appears more dense as the __Density__ increases. \n",811],["__Exponential Squared__ Fog density increases faster with distance (exponentially and squared). \n",811],[" Density Use this to control the density of the fog. The fog appears more dense as the __Density__ increases. \n",811],["Halo Texture Set the Texture you want to use for drawing a Halo around lights. ",811],["Halo Strength Define the visibility of Halos around Lights, from a value between 0 and 1. ",811],["Flare Fade Speed Define the time (in seconds) over which lens flares fade from view after initially appearing. This is set to 3 by default. ",811],["Flare Strength Define the visibility of lens flares from lights, from a value between 0 and 1. ",811],["Spot Cookie Set the Cookie texture you want to use for Spot Lights. The default is 'Soft'. To revert to 'Soft', select None. ",811],["",811],["The Realtime Lightmaps tab",811],["The Realtime Lightmaps tab shows a list of all lightmaps generated by the Enlighten Realtime Global Illumination system in the current Scene. If Enlighten Realtime Global Illumination is not enabled in your Project, this tab will be empty.",811],["",811],["The Baked Lightmaps tab",811],["This tab shows a list of all lightmaps generated by lightmapper for the current Scene, along with the Lighting Data Asset. If Baked Global Illumination is not enabled in your Project, this tab will be empty.",811],["",811],["Control area",811],["Controls for precomputing lighting data are at the bottom of the Lighting window.",811],["Property: Function: ",811],["Auto Generate If Auto Generate is enabled, Unity precomputes lighting data automatically when you make changes to the Scene.This data includes lightmaps for the Baked Global Illumination system, lightmaps for the Enlighten Realtime Global Illumination system, Light Probes, and Reflection Probes.Unity usually begins the bake a few seconds after you make a change to the Scene. If Auto Generate is disabled, you must manually invoke a bake yourself, using the Generate Lighting button in the Lighting window, or the Lightmapping.Bake or Lightmapping.BakeAsync APIs.When you precompute lighting data using Auto Generate, Unity does not store the Scene's precomputed lighting data as Assets in your Project. Instead, Unity stores this data in memory and serializes it as part of the Scene.This property is only available if the active Scene has a Lighting Settings Asset assigned to it.Note: From Unity Editor version 2022.2, Auto Generate mode is unavailable when the Entities package is installed. When you generate lighting in a project where you have installed the Entities package, the Unity Editor opens all loaded subscenes, which may slow down Editor performance. ",811],["Generate Lighting Click the Generate Lighting button to precompute lighting data for all open Scenes. This data includes lightmaps for the Baked Global Illumination system, lightmaps for the Enlighten Realtime Global Illumination system, Light Probes, and Reflection Probes. Click the dropdown menu on the right hand side of the Generate Lighting and then click Bake Reflection Probes to bake only the Reflection Probes for all open Scenes.Click the dropdown menu on the right hand side of the Generate Lighting and then click Clear Baked Data to clear all precomputed lighting data from all open Scenes without clearing the GI Cache.This button is enabled only if Auto Generate is disabled. ",811],["[Lighting Settings Asset] added in 2020.1 NewIn20201",811],["Types of light",812],["This page describes the effects of the Type property on a Light component.",812],["You can use the Type property to choose how the Light behaves. The available values are:",812],["Point Light, a Light that's located at a point in the Scene and emits light in all directions equally ",812],["Spot Light, a Light that's located at a point in the Scene and emits light in a cone shape ",812],["Directional Light, a Light that's located infinitely far away and emits light in one direction only ",812],["Area Light, a Light that's defined by a rectangle or disc in the Scene, and emits light in all directions uniformly across its surface area but only from one side of the rectangle or disc",812],["Point Lights",812],["A Point Light is located at a point in space and sends light out in all directions equally. The direction of light hitting a surface is the line from the point of contact back to the center of the light object. The intensity diminishes with distance from the light, reaching zero at a specified range. Light intensity is inversely proportional to the square of the distance from the source. This is known as ‘inverse square law’ and is similar to how light behaves in the real world.",812],["Point lights are useful for simulating lamps and other local sources of light in a scene. You can also use them to make a spark or explosion illuminate its surroundings in a convincing way.",812],["Spot Lights",812],["Like a Point Light, a Spot Light has a specified location and range over which the light falls off. However, a Spot Light is constrained to an angle, resulting in a cone-shaped region of illumination. The center of the cone points in the forward (Z) direction of the light object. Light also diminishes at the edges of a Spot Light’s cone. Widening the angle increases the width of the cone and with it increases the size of this fade, known as the ‘penumbra’.",812],["Spot lights are generally used for artificial light sources such as flashlights, car headlights and searchlights. With the direction controlled from a script or animation, a moving spot light will illuminate just a small area of the scene and create dramatic lighting effects.",812],["Directional Lights",812],["Directional Lights are useful for creating effects such as sunlight in your scenes. Behaving in many ways like the sun, directional lights can be thought of as distant light sources which exist infinitely far away. A Directional Light doesn't have any identifiable source position and so the light object can be placed anywhere in the scene. All objects in the scene are illuminated as if the light is always from the same direction. The distance of the light from the target object isn't defined and so the light doesn't diminish.",812],["Directional lights represent large, distant sources that come from a position outside the range of the game world. In a realistic scene, they can be used to simulate the sun or moon. In an abstract game world, they can be a useful way to add convincing shading to objects without exactly specifying where the light is coming from.",812],["By default, every new Unity scene contains a Directional Light. This is linked to the procedural sky system defined in the Environment Lighting section of the Lighting Panel (Lighting>Scene>Skybox). You can change this behaviour by deleting the default Directional Light and creating a new light or simply by specifying a different GameObject from the ‘Sun’ parameter (Lighting>Scene>Sun).",812],["Rotating the default Directional Light (or ‘Sun’) causes the ‘Skybox’ to update. With the light angled to the side, parallel to the ground, sunset effects can be achieved. Additionally, pointing the light upwards causes the sky to turn black, as if it were nighttime. With the light angled from above, the sky will resemble daylight.",812],["If the Skybox is selected as the ambient source, Ambient Lighting will change in relation to these colors.",812],["Area Lights",812],["You can define an Area Light by one of two shapes in space: a rectangle or a disc. An Area Light emits light from one side of that shape. The emitted light spreads uniformly in all directions across that shape's surface area. The Range property determines the size of that shape. The intensity of the illumination provided by an Area Light diminishes at a rate determined by the inverse square of the distance from the light source (see inverse square law). Because this lighting calculation is quite processor-intensive, Area Lights aren't available at runtime and can only be baked into lightmaps.",812],["Since an area light illuminates an object from several different directions at once, the shading tends to be more soft and subtle than the other light types. You might use it to create a realistic street light or a bank of lights close to the player. A small area light can simulate smaller sources of light (such as interior house lighting) but with a more realistic effect than a point light.",812],["Ambient occlusion",813],["Ambient occlusion (AO) is a feature that simulates the soft shadows that occur in creases, holes, and surfaces that are close to each another. These areas occlude (block out) ambient light, so they appear darker.",813],["It works by approximating how much ambient light can hit a point on a surface. It then darkens creases, holes and surfaces that are close to each other.",813],["You can use ambient occlusion to add realism to your lighting.",813],["Baked Ambient Occlusion",813],["If Baked Global Illumination is enabled in your Scene, Unity can bake ambient occlusion into the lightmaps. This is known as Baked Ambient Occlusion.",813],["To enable baked ambient occlusion in your Scene:",813],["Open the Lighting window (menu: Window > Rendering > Lighting)",813],["Navigate to the Mixed Lighting section",813],["Enable Baked Global Illumination",813],["Navigate to the Lightmapping Settings section",813],["Enable Ambient Occlusion",813],["Realtime ambient occlusion",813],["If Global Illumination is not enabled in your Scene but you still want the effect of ambient occlusion, you can use a post-processing effect to apply real-time ambient occlusion to your Scene.",813],["If Enlighten Realtime Global Illumination is enabled in your Scene, the resolution for indirect lighting does not capture fine details or dynamic objects. We recommend using a real-time ambient occlusion post-processing effect, which has much more detail and results in higher quality lighting.",813],["For information on real-time ambient occlusion post-processing effects, see post-processing effects.",813],["Additional resources",813],["To learn more about AO, see Wikipedia: Ambient Occlusion.",813],["The Light Explorer window",814],["The Light Explorer window allows you to select and edit light sources. To open the Light Explorer window from the menu, navigate to Window > Rendering > Light Explorer.",814],["Use the four tabs at the top of the panel to view settings for the Lights, 2D Lights, Reflection Probes, Light Probes, and Static Emissives in the current Scene. The editable parameters are the most commonly-used fields for each component type.",814],["Use the search field to filter each table for names. You can also select the lights you want to work on, then tick the Lock Selection checkbox. Only the lights that were selected when the checkbox was ticked remain listed in the Light Explorer, even if you select a different Light in the Scene.",814],["Generating lightmap UVs",815],["Unity can calculate the UVs for baked lightmaps when you import a model, or you can provide your own data.",815],["This page contains the following information:",815],["",815],["How to provide your own lightmap UVs",815],["You can author your own lightmap UVs in the content creation software of your choice. Unity uses these UVs as input for its calculations.",815],["Where you put this data depends on whether you are providing UVs for baked lightmaps, real-time lightmaps, or both:",815],["For baked lightmaps, you must place lightmap UVs in the Mesh.uv2. This channel is also called \"UV1\".",815],["For real-time lightmaps:",815],["If you already have baked lightmap UVs in the Mesh.uv2 of your mesh, and you want to use the same UVs as input for the real-time lightmaps, you do not need to do anything. Unity falls back to sharing the baked lightmap UVs.",815],["If you already have baked lightmap UVs in Mesh.uv2, and you want to provide different UVs as input for your real-time lightmaps, place the real-time lightmap UVs in Mesh.uv3, also called \"UV2\".",815],["If you do not already have baked lightmap UVs in the second channel of your mesh, it's your choice whether you use Mesh.uv2 or Mesh.uv3 for real-time lightmap UVs.",815],["A good UV set for lightmaps should adhere to the following rules:",815],["It should be within the [0,1] x [0,1] UV space.",815],["It should have a wide enough margin between individual charts. For more information, see UV overlap feedback.",815],["It should not have any overlapping faces.",815],["There should be a low difference between the angles in the UV and the angles in the original geometry.",815],["There should be a low difference between the relative scale of triangles in the UV and the relative scale of the triangles in the original geometry), unless you want some areas to have a higher lightmap resolution.",815],["",815],["How to automatically generate lightmap UVs",815],["You can tell Unity to automatically generate lightmap UVs for a Model, using the Model Import Settings.",815],["Select the Model in your Project view. Unity opens the Model Import Settings in the Inspector.",815],["In the Model Import Settings, navigate to the Model tab, and then the Geometry section.",815],["Tick the Generate Lightmap UVs checkbox. The Lightmap UVs settings section appears below the Generate Lightmap UVs checkbox.",815],["Optional: Configure the settings in the Lightmap UVs settings section. See Settings for more information.",815],["Click the Apply button. Unity generates lightmap UVs into the Mesh.uv2 channel.",815],["",815],["Automatic lightmap UV generation settings",815],["These are the settings that appear in the Model tab of the Model Import Settings, when you enable Generate Lightmap UVs.",815],["Property: Function: ",815],["Hard Angle The angle between neighboring triangles (in degrees) after which Unity considers it a hard edge and creates a seam. You can set this to a value between 0 and 180. This is set to 88 degrees by default.If you set this to 180 degrees, Unity considers all edges smooth, which is realistic for organic models. The default value (88 degrees) is realistic for mechanical models. ",815],["Angle Error The maximum possible deviation of UV angles from the angles in the source geometry (as a percentage from 0-100). This is set to 8% by default.This controls how different the triangles in UV space can be to the triangles in the original geometry. Usually this should be fairly low, to avoid artifacts when applying the lightmap. ",815],["Area Error The maximum possible deviation of UV areas from the areas in the source geometry (as a percentage from 0-100). This is set to 15% by default.This controls how well Unity preserves the relative triangle areas. Increasing the value allows you to create fewer charts. However, increasing the value can change the resolution of the triangles, so make sure the resulting distortion does not deteriorate the lightmap quality. ",815],["Margin Method Whether you specify the Pack Margin manually, or whether Unity automatically calculates it. ",815],["Manual You specify the Pack Margin manually. ",815],["Calculate Based on expected lightmap resolution and object scale, Unity calculates a Pack Margin just large enough to avoid UV overlaps. ",815],["Pack Margin The margin between neighboring charts (in pixels), assuming the Mesh takes up the entire 1024x1024 lightmap. You can set this to a value between 1 and 64. A larger value increases the margin, but also increases the amount of space the chart needs. This is set to 4 pixels by default.For more information, see Pack Margin.This property is only visible when Margin Method is set to Manual. ",815],["Min Lightmap Resolution The minimum lightmap resolution (in texels per unit) of the MeshRenderers that use this Mesh, across all Scenes. The lightmap resolution of a MeshRenderer is a combination of the MeshRenderer's Scale in Lightmap property, and the Lightmap Resolution property of the Lighting Settings Asset of the Scene it appears in.For more information, see Min Lightmap Resolution and Min Object Scale.Unity uses this information to calculate pack margin. This property is only visible when Margin Method is set to Calculate. ",815],["Min Object Scale The minimum transform scale that of the GameObjects that use this Mesh, across all Scenes.For more information, see Min Lightmap Resolution and Min Object Scale.Unity uses this information to calculate pack margin. This property is only visible when Margin Method is set to Calculate. ",815],["",815],["Troubleshooting automatically generated lightmap UVs",815],["",815],["Pack Margin",815],["To allow filtering, the lightmap contains lighting information in texels near the chart border, so always include some margin between charts to avoid light bleeding when applying the lightmap.",815],["The lightmap resolution defines the texel resolution of your lightmaps. Lightmappers dilate some chart texels in the lightmap to avoid black edges, so the UV charts of your Mesh need to be at least two full texels apart from each other to avoid light bleeding. Use the Pack Margin setting to ensure you have enough margin between the UV charts of your geometry.",815],["In lightmap UV space, the padding between charts need to be at least two full texels in order to avoid UV overlapping and accidental light bleeding. In this image, the black space represents the space between charts.",815],["",815],["Min Lightmap Resolution and Min Object Scale",815],["Placing UV charts too close together may cause cross-chart texel bleeding in the final lightmap. Placing charts too far away from each other wastes memory. The ideal packing margin of an object depends on how many lightmap texels are allotted to it.",815],["The number of texels that Unity uses for a MeshRenderer depends on the MeshRenderer's lightmap resolution and transform scale. To calculate a good margin, Unity needs to know the expected minimum values for these properties.",815],["A MeshRenderer's lightmap resolution is a combination of the Lightmap Resolution property of the Lighting Settings Asset for the Scene that the MeshRenderer appears in, and the Scale in Lightmap property of the MeshRenderer. Note that this means that the same MeshRenderer can have a different lightmap resolution in different Scenes.",815],["You can use the Inspector to view the lightmap resolution of a MeshRenderer in a given Scene:",815],["In the Scene view or Hierarchy, select the GameObject that has the MeshRenderer component.",815],["In the Inspector, navigate to the MeshRenderer component's Lightmapping section.",815],["Open the Baked Lightmap fold-out. Unity displays the MeshRenderer's lightmap resolution in the baked lightmap with the label Lightmap Resolution, and its transform scale in the baked lightmap with the label Lightmap Object Scale.",815],["Angle distortion",815],["The following screenshots demonstrate equal resolution, but with different UVs. The first image has a high Angle Error, and the result contains unintended artifacts. The second image has the default Angle Error (8%). In Meshes with more triangles, angle distortion can significantly distort the shape.",815],["Area distortion",815],["In the image below, two spot lights with the same parameters light the sides of a cylinder. The right-hand side of the cylinder has a higher Area Error value, which distorts the triangles and leads to a lower resolution, creating artifacts in the light.",815],["Visualizing lightmap UVs",816],["It is important to be able to view the lightmap UVs that are being used, and Unity has a visualization tool to help you with this. First, open the Lighting window (menu: Window > Rendering > Lighting) and tick the Auto checkbox at the bottom. This ensures that your bake and precompute are up-to-date, and outputs the data that is needed to view the UVs. Wait for the process to finish (this can take some time for large or complex Scenes).",816],["Visualizing real-time lightmap UVs",816],["To see the UVs for the Realtime Global Illumination system:",816],["Select a GameObject with a Mesh Renderer in your Scene",816],["Open the Lighting window and select the Object tab",816],["In the Preview area, select Charting from the drop-down.",816],["This displays the UV layout for the real-time lightmap of the selected instance of this Mesh.",816],["The charts are indicated by the different colored areas in the Preview (show in the image above on the right-hand side).",816],["The UVs of the selected instance are laid over the charts, as a wireframe representation of the GameObject’s Mesh.",816],["Dark gray texels show unused areas of the lightmap.",816],["Multiple instances can be packed into a real-time lightmap, so some of the charts you see might actually belong to other GameObjects.",816],["Visualizing baked lightmap UVs",816],["To see the UVs for the Baked Global Illumination system:",816],["Select an instance.",816],["Open the Lighting window (menu: Window > Rendering > Lighting) and select the _Object _tab.",816],["In the Preview area, select Baked Intensity from the dropdown.",816],["As you can see, the baked UVs are very different to the precomputed real-time UVs. This is because the requirements for baked and precomputed real-time UVs are different.",816],["Lightmap UVs introduction",817],["Both the Realtime Global Illumination system and the Baked Global Illumination system use lightmaps, and therefore need lightmap UVs.",817],["Unity uses separate sets of lightmap UVs for the Realtime Global Illumination system and the Baked Global Illumination system. There are two reasons for this:",817],["There is no direct correspondence in the grouping of instances between real-time and baked lightmaps; instances that are in the same real-time lightmap may be in two different baked lightmaps, and vice versa.",817],["Meshes that appear at different scales share lightmap UVs in baked lightmaps, but do not share UVs in real-time lightmaps.",817],["Baked lightmap UVs",817],["Baked lightmap UVs are per-mesh: all instances of the same mesh share the same baked lightmap UVs. Unity can calculate the UVs for baked lightmaps when you import a model, or you can provide your own data.",817],["Unity stores baked lightmap UVs in its mesh in the Mesh.uv2 channel. This channel maps to the TEXCOORD1 shader semantic, and is commonly called \"UV1\".",817],["If Baked Global Illumination is enabled and a given MeshRenderer receives its global illumination from lightmaps, Unity uses the data in the Mesh.uv2 channel to correctly map the baked lightmaps to the mesh.",817],["Note:** If you want to use Mesh.uv2 for another purpose in a given mesh, you must ensure that all MeshRenderer components that use the mesh receive global illumination from Light Probes rather than lightmaps. Change this with the Mesh Renderer component Inspector, or the MeshRenderer.receiveGI API.",817],["For more information, see Generating lightmap UVs.",817],["Real-time lightmap UVs",817],["Real-time lightmap UVs are per-Mesh Renderer: all instances of the same mesh share the same input data, but different instances of Mesh Renderers can use different real-time lightmap UVs at runtime. Unity calculates the UVs for the Realtime Global Illumination system during the precompute stage. This calculation takes per-mesh UVs as its input, and uses that data to create per-Mesh Renderer UVs. Unity can generate the input per-mesh UVs when you import a model, or you can provide your own data.",817],["This works as follows:",817],["Unity can use data in the Mesh.uv3 channel as input for the real-time lightmap UV calculations. Mesh.uv3 maps to the TEXCOORD2 shader semantic, and is commonly called \"UV2\".",817],["If there is no data in Mesh.uv3 but there is data in Mesh.uv2 , Unity falls back to using the data in Mesh.uv2 as input for the real-time lightmap UV calculations. Mesh.uv2 is used for baked lightmap UVs. It is common to use the baked lightmap UVs as input data for the real-time lightmap UVs.",817],["The results of the calculations are stored per-MeshRenderer, in MeshRenderer.enlightenVertexStream. If Realtime Global Illumination is enabled and a given MeshRenderer component contributes to global illumination and receives its global illumination from lightmaps, Unity automatically passes the data in MeshRenderer.enlightenVertexStream to TEXCOORD2 in shaders, instead of the data in Mesh.uv3.",817],["Note:** If you want to use Mesh.uv3 for another purpose in a mesh that uses Realtime Global Illumination, you must ensure that all MeshRenderer components that use the mesh receive global illumination from Light Probes rather than lightmaps. Change this with the Mesh Renderer component Inspector, or the MeshRenderer.receiveGI API.",817],["For more information, see Generating lightmap UVs.",817],["How Unity calculates real-time lightmap UVs",817],["This is what happens when Unity takes the per-mesh input UVs and processes them into per-Mesh Renderer output UVs.",817],["Packing",817],["Unity repacks real-time lightmap UVs to ensure that each chart's boundary falls on a texel center in all directions, and then adds a half-texel of padding around each chart's boundary. This ensures that all charts have a full texel of space between them.",817],["This is because the resolution of real-time lightmaps is intentionally low, to make it feasible to update them in real-time. The low resolution doesn’t affect the graphical quality because these lightmaps only store low-frequency indirect lighting, but it can lead to bleeding when charts share texels. Repacking ensures that charts never share texels. It avoids this problem, and also allows Unity to efficiently pack charts next to each other.",817],["Note:** This packing technique means that the calculated UVs are dependent on the scale and lightmap resolution of the instance, which is why real-time lightmap UVs are per-Mesh Renderer; however, Unity automatically optimizes this where possible and Mesh Renderers that use the same mesh with the same scale and lightmap resolution share the same UVs.",817],["Merging",817],["Optionally, you can instruct Unity to merge UV charts where possible during this process. This reduces the size of the lightmaps, and can improve runtime memory usage and performance.",817],["You can enable this optimization on any GameObject with a Mesh Renderer component. In the Mesh Renderer Inspector, navigate to the Lightmapping section and Optimize Realtime UVs.",817],["Note:** This feature sometimes makes mistakes about discontinuities in the original UV mapping. For example, an intentionally sharp edge may be misinterpreted as a continuous surface. If this happens, disable this feature.",817],["Introduction to lighting",818],["This page introduces you to how lighting works in Unity.",818],["Lighting in Unity works by approximating how light behaves in the real world. Unity uses detailed models of how light works for a more realistic result, or simplified models for a more stylized result.",818],["Direct and indirect lighting",818],["Direct light is light that is emitted, hits a surface once, and is then reflected directly into a sensor (for example, the eye’s retina or a camera). Indirect light is all other light that is ultimately reflected into a sensor, including light that hits surfaces several times, and sky light. To achieve realistic lighting results, you need to simulate both direct and indirect light.",818],["Unity can calculate direct lighting, indirect lighting, or both direct and indirect lighting. The lighting techniques that Unity uses depends on how you configure your Project.",818],["Real-time and baked lighting",818],["Real-time lighting is when Unity calculates lighting at runtime. Baked lighting is when Unity performs lighting calculations in advance and saves the results as lighting data, which is then applied at runtime. In Unity, your Project can use real-time lighting, baked lighting, or a mix of the two (called mixed lighting).",818],["For information on configuring Light components to contribute real-time, baked, or mixed lighting, see Light Modes.",818],["",818],["Global illumination",818],["Global illumination is a group of techniques that model both direct and indirect lighting to provide realistic lighting results. Unity has two global illumination systems, which combine direct and indirect lighting.",818],["The Baked Global Illumination system consists of lightmaps, Light Probes, and Reflection Probes. You can bake with the Progressive Lightmapper (CPU or GPU) or Enlighten Baked Global Illumination. However, Enlighten Baked Global Illumination is deprecated and no longer visible in the user interface by default. See Lightmapping using Enlighten Baked Global Illumination for more information.",818],["The real-time Global Illumination system is Enlighten Realtime Global Illumination.",818],["See render pipeline feature comparison for more information about support for Lighting features across render pipelines.",818],["Lighting",819],["With Unity, you can achieve realistic lighting that is suitable for a range of art styles.",819],["This section contains information on:",819],["Lightmapping",820],["Lightmapping is the process of pre-calculating the brightness of surfaces in a Scene, and storing the result in a Texture called a lightmap for later use.",820],["Lightmaps can include both direct and indirect light. This lighting texture can be used together with surface information like color (albedo) and relief (normals) by the Shader associated with an object’s material.",820],["The data baked into lightmaps cannot change at runtime. Real-time lights can be overlaid and used additively on top of a lightmapped scene, but cannot interactively change the lightmaps themselves.",820],["With this approach, we trade the ability to move our lights at gameplay for a potential increase in performance, suiting less powerful hardware such as mobile platforms.",820],["Unity provides the following lightmappers for generating lightmaps:",820],["For advice on setting up a lightmapper, see Lightmapping: Getting started.",820],["Lightmap seam stitching",821],["Seam stitching is a feature that smooths unwanted hard edges in GameObjects rendered with baked lightmaps generated by the Progressive Lightmapper.",821],["When Unity bakes lightmaps, it identifies mesh faces that are close together but separate from each other as being separate in lightmap space; the edges of these meshes are called \"seams\". Ideally, seams are invisible; however, they can sometimes appear to have hard edges. This is because the GPU cannot blend texel values between charts that are separated in the lightmap.",821],["Seam stitching fixes this issue. When you enable seam stitching, Unity does extra computations to amend the lightmap to improve each seam's appearance. Stitching is not perfect, but it often improves the final result substantially. Seam stitching takes extra time during baking due to extra calculations Unity makes, so Unity disables it by default.",821],["When you enable seam stitching, the lightmapper identifies the pair of edges that it should stitch together, and produces illumination which is as smooth as possible across the seam. This applies only to straight edges which run horizontally or vertically along chart boundaries in the atlas, and is designed to work with rectangles which are axis-aligned in UV space.",821],["Limitations of seam stiching",821],["Seam stitching works with the Progressive Lightmapper. Seam stitching only works on single GameObjects; multiple GameObjects cannot be smoothly stitched together.",821],["Using seam stitching",821],["You can enable seam stitching on any GameObject with a Mesh Renderer component. In the Mesh Renderer Inspector, navigate to the Lightmapping section and Stitch Seams.",821],["Alternatively, you can use the MeshRenderer.stitchLightmapSeams API.",821],["Lightmapping: Getting started",822],["Preparing the Scene and baking the lightmaps",822],["Select Window > Rendering > Lighting from the Unity Editor menu to open the Lighting window. Make sure any Mesh you want to apply a lightmap to has proper UVs for lightmapping. The easiest way to do this is to open the Mesh import settings and enable the Generate Lightmap UVs setting.",822],["Next, to control the resolution of the lightmaps, go to the Lightmapping Settings section and adjust the Lightmap Resolution value.",822],["To be included in your lightmap, Renderers must meet the following criteria:",822],["Have a Mesh Renderer or Terrain component",822],["Be marked as Contribute GI",822],["Use a built-in Unity Material, the Standard Shader, or a Shader with a Meta Pass",822],["You can adjust settings for Lights in the Light Explorer. To open the Light Explorer, go to Window > Rendering > Light Explorer.",822],["To generate lightmaps for your Scene:",822],["Open the Lighting window (menu: Window > Rendering > Lighting)",822],["At the bottom of the Scene tab on the Lighting window, select Generate Lighting (or ensure that Auto Generate is enabled).",822],["A progress bar appears in Unity Editor’s status bar, in the bottom-right corner.",822],["When lightmapping is complete, Unity’s Scene and Game views update automatically and you can view the resulting lightmaps by going to the Baked Lightmaps tab in the Lighting Window.",822],["When you manually generate lighting, Unity adds Lighting Data Assets, baked lightmaps and Reflection Probes to the Assets folder.",822],["Progressive Lightmapper added in 2018.1 NewIn20181",822],["Directional Mode",823],["There are two Directional Modes for lightmaps: Directional and Non-Directional. Both modes are compatible with real-time lightmaps from Unity’s Enlighten Realtime Global Illumination system, and baked lightmaps from Unity’s Progressive Lightmapper. The default mode is Directional.",823],["When you bake a Directional lightmap, Unity generates two lightmap textures. One texture stores information about the intensity and color of the lighting received across the target surface. This is identical to the Non-Directional lightmap. The other texture stores the dominant light direction, along with a factor describing how much of the total light received comes from that dominant direction.",823],["The barrels in this image have baked Non-directional lightmaps.",823],["The barrels in this image have baked Directional lightmaps.",823],["Performance",823],["Directional mode lightmaps consist of two textures, and shaders sample both textures during rendering. The additional texture increases video memory requirements. Generating the additional directionality texture also has an impact on baking performance.",823],["Non-Directional mode lightmaps only include a single texture. As a result, they require less video memory and less storage than Directional maps, and are faster to decode in shaders. These optimizations reduce visual quality.",823],["Setting your lightmap mode",823],["To set the mode in your Lighting Settings Asset, open the Lighting window (Window > Lighting > Settings), click Scene, navigate to the Lightmapping Settings, and select Directional Mode.",823],["You can set the lightmap mode for an instance of the Lighting Settings asset which can apply to one or more Scenes. You cannot set the lightmap mode for individual lightmaps.",823],["Using Directional Mode with additive loading",823],["Unity can load Scenes additively. This means you can use Multi-Scene editing, for example.",823],["When you load Scenes additively, all of them must use the same Directional Mode. This includes Scenes that are not baked, such as UI elements or loading screens. Using the same Lightmap Parameters asset for all of the Scenes in your project can help you avoid settings conflicts.",823],["Lightmaps: Technical information",824],["Unity stores lightmaps with different compressions and encoding schemes, depending on the target platform and the compression setting in the Lighting Window.",824],["Encoding schemes",824],["Unity projects can use two techniques to encode baked light intensity ranges into low dynamic range textures when this is needed:",824],["RGBM encoding**. RGBM encoding stores a color in the RGB channels and a multiplier (M) in the alpha channel. The range of RGBM lightmaps goes from 0 to 34.49(52.2) in linear space, and from 0 to 5 in gamma space.",824],["Double Low Dynamic Range (dLDR) encoding**. dLDR encoding is used on mobile platforms by simply mapping a range of [0, 2] to [0, 1]. Baked light intensities that are above a value of 2 will be clamped. The decoding value is computed by multiplying the value from the lightmap texture by 2 when gamma space is used, or 4.59482(22.2) when linear space is used. Some platforms store lightmaps as dLDR because their hardware compression produces poor-looking artifacts when using RGBM.",824],["When Linear Color Space is used, the lightmap texture is marked as sRGB and the final value used by the shaders (after sampling and decoding) will be in Linear Color Space. When Gamma Color Space is used, the final value will be in Gamma Color Space.",824],["Note**: When encoding is used, the values stored in the lightmaps (GPU texture memory) are always in Gamma Color Space.",824],["The Decode Lightmap shader function from the UnityCG.cginc shader include file handles the decoding of lightmap values after the value is read from the lightmap texture in a shader.",824],["HDR lightmap support",824],["You can use HDR lightmaps on Windows, Mac, Linux, iOS, tvOS, and Android. To control the encoding/compression of the lightmaps for these platforms, go to Edit > Project Settings > Player > Other Settings > Lightmap Encoding.",824],["Choosing High Quality will enable HDR lightmap support, whereas Normal Quality will switch to using RGBM encoding.",824],["Low Quality will switch to dLDR encoding on mobile platforms, on other platforms it's equivalent to Normal Quality.",824],["When lightmap Compression is enabled in the Lighting Window, the lightmaps will be compressed using the BC6H compression format on desktop and console platforms. For mobile platforms, Unity selects the HDR format according to the table below.",824],["Advantages of High Quality (BC6H) lightmaps",824],["HDR lightmaps don’t use any encoding scheme to encode lightmap values, so the supported range is only limited by the 16-bit floating point texture format that goes from 0 to 65504.",824],["BC6H format quality is superior to DXT5 + RGBM format encoding, and it doesn’t produce any of the color banding artifacts that RGBM encoding has.",824],["Shaders that need to sample HDR lightmaps are a few ALU instructions shorter because there is no need to decode the sampled values.",824],["BC6H format has the same GPU memory requirements as DXT5.",824],["Here is the list of encoding schemes and their texture compression formats per target platform:",824],["Target platform Encoding Compression - size (bits per pixel) ",824],["Standalone(PC, Mac, Linux) RGBM / HDR DXT5 / BC6H - 8 bpp ",824],["WebGL 1.0 / 2.0 RGBM DXT5 - 8 bpp ",824],["iOS ASTC (1) dLDR / RGBM / HDR ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp ",824],["iOS PVRTC dLDR / RGBM / HDR PVRTC RGB - 4 bpp / ETC2 RGBA - 8 bpp / RGB9E5 - 32 bpp ",824],["tvOS dLDR / RGBM / HDR ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp ",824],["Android ASTC (2) dLDR / RGBM / HDR ASTC - 3.56 bpp / ASTC - 3.56 bpp / ASTC HDR - 3.56 bpp ",824],["Android ETC2 dLDR / RGBM / HDR ETC2 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp ",824],["Android ETC dLDR / RGBM / HDR ETC1 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp ",824],["[1] The texture compression format used for lightmaps on iOS depends on the Texture compression format setting in the Player Settings.",824],["[2] The texture compression format used for lightmaps on Android depends on Player Settings and Build Settings. See Texture compression settings for more details on how these settings interact.",824],["Precomputed real-time Global Illumination (GI)",824],["The inputs to the GI system have a different range and encoding to the output. Surface albedo is 8-bit unsigned integer RGB in gamma space and emission is 16-bit floating point RGB in linear space. For advice on providing custom inputs using a meta pass, see documentation on Lightmapping and shaders.",824],["The irradiance output texture is stored using the RGB9E5 shared exponent floating point format if the graphics hardware supports it, or RGBM with a range of 5 as fallback. The range of RGB9E5 lightmaps is [0, 65408]. For details on the RGB9E5 format, see Khronos.org: EXT_texture_shared_exponent.",824],["See also:",824],["2019-04-26 ",824],["Baked lightmaps added in Unity 2017.2 NewIn20172",824],["HDR lightmap support added in Unity 2017.3 NewIn20173",824],["Lightmap encoding settings for mobile platform added in Unity 2019.1 NewIn20191",824],["Update lightmap texture compression formats for Android and iOS",824],["Lighting Data Asset",825],["A Lighting Data Asset stores precomputed lighting data for a Scene in the Unity Editor. Lighting Data Assets exist as separate files in your Project for workflow reasons; storing precomputed lighting data in a separate file means that changes to the precomputed lighting data do not result in changes to the Scene file. Lighting Data Assets are not intended for users to edit.",825],["Unity stores precomputed lighting data in a Lighting Data Asset when you manually invoke a lighting precompute, either by using the Generate Lighting button in the Lighting window, or by using the Lightmapping.Bake or Lightmapping.BakeAsync APIs.",825],["The Lighting Data Asset contains global illumination data and all the supporting files needed to recreate the lighting for a scene. This asset references the renderers, the real-time lightmaps, the baked lightmaps, light probes, reflection probes and a data structure which stores the relationships between these elements. It also includes all the precomputed Enlighten Realtime Global Illumination data needed to update how real-time global illumination looks in the Player.",825],["When you change the scene, for instance by breaking a prefab connection on a GameObject that is marked as Contribute GI, the asset data will get out of date and has to be rebuilt.",825],["The intermediate files that are generated during the lighting build process, but is not needed for generating a Player build is not part of the asset, they are stored in the GI Cache instead.",825],["The build time for the Lighting Data Asset can vary. If your GI Cache is fully populated i.e. you have done a bake on the machine before (with the scene in its current state) it will be fast. If you are pulling the scene to a machine with a blank cache or the cache data needed has been removed due to the cache size limit, the cache will have to be populated with the intermediate files first which requires the precompute and bake processes to run. These steps can take some time.",825],["Light Mode: Baked",826],["This page describes the behavior of a Light component when you set its Mode property to Baked. These are also known as Baked Lights.",826],["Unity performs the calculations for Baked Lights in the Unity Editor, and saves the results to disk as lighting data. This process is called baking. At runtime, Unity loads the baked lighting data, and uses it to light the Scene. Because the complex calculations are performed in advance, Baked Lights reduce shading cost at runtime, and reduce the rendering cost of shadows.",826],["Baked Lights are useful for lighting things that won't change at runtime, such as scenery.",826],["Baked Light behavior",826],["Unity bakes both direct lighting and indirect lighting from Baked Lights into lightmaps. For more information on using lightmaps, see lightmapping.",826],["Unity bakes both direct and indirect lighting from Baked Lights into Light Probes. For more information on using Light Probes, see Light Probes.",826],["Limitations of Baked Lights",826],["You cannot change the properties of Baked Lights at runtime.",826],["Baked Lights do not contribute to specular lighting.",826],["Dynamic GameObjects do not receive light or shadow from Baked Lights.",826],["Note that if you disable Baked Global Illumination in your Scene, Unity forces Baked Lights to behave as though you set their Mode to Realtime. When this happens, Unity displays a warning on the Light component Inspector.",826],["Lighting Mode: Baked Indirect",827],["This page describes the behavior of all Mixed Lights in a Scene, when that Scene uses a Lighting Settings Asset with its Lighting Mode property set to Baked Indirect.",827],["When you set a Scene's Lighting Mode to Baked Indirect, Mixed Lights behave like Realtime Lights, with the additional benefit of baking indirect lighting into lightmaps. GameObjects lit by Mixed Lights cast real-time shadows up to the Shadow Distance you define in the Project.",827],["Render pipeline support",827],["See render pipeline feature comparison for more information about support for Baked Indirect Lighting Mode across render pipelines.",827],["Mixed Light behavior",827],["When you set a Scene's Lighting Mode to Baked Indirect, Mixed Lights behave as follows:",827],["Dynamic GameObjects lit by Mixed Lights receive:",827],["Real-time direct lighting.",827],["Baked indirect lighting, using Light Probes.",827],["Shadows from dynamic GameObjects, using the shadow map, up to the Shadow Distance.",827],["Real-time shadows from static GameObjects, using the shadow map, up to the Shadow Distance.",827],["Static GameObjects lit by Mixed Lights receive:",827],["Real-time direct lighting.",827],["Baked indirect lighting, using lightmaps.",827],["Real-time shadows from static GameObjects, using the shadow map, up to the Shadow Distance.",827],["Real-time shadows from dynamic GameObjects, using the shadow map, up to the Shadow Distance.",827],["Setting your Scene's Lighting Mode to Baked Indirect",827],["Select the Lighting Settings Asset for the Scene.",827],["In the Inspector, navigate to Mixed Lighting.",827],["Use the drop-down menu to set the Lighting Mode to Baked Indirect.",827],["Shadows and runtime performance",827],["Because all shadows from Mixed Lights are real-time in Baked Indirect Lighting Mode, this can impact performance. You can reduce this impact by using the Shadow Distance property to limit the distance up to which Unity draws real-time shadows.",827],["Changing Light properties at runtime",827],["In the Baked Indirect Lighting Mode, you can subtly change the properties of a Mixed Light at runtime. Changes affect the real-time direct lighting that the Mixed Light contributes to the Scene, without affecting the baked indirect lighting that the Mixed Light contributes to the Scene. This allows you to combine the benefits of baked indirect lighting with some of the dynamic capabilities of a Realtime Light. This works especially well in Baked Indirect Lighting Mode, due to the lack of precomputed shadows.",827],["You must be careful with runtime changes to Light properties, and only make small changes that don't cause unrealistic combinations of real-time direct and baked indirect lighting. For example, if you bake a red Mixed Light into a lightmap and then change its color to green at runtime, the direct lighting is green but the indirect lighting baked into the lightmap remains red. The same applies to moving a Mixed Light at runtime: direct lighting follows the Light's new position, but indirect lighting remains at the position at which the Light was baked.",827],["This video shows an example of how to slightly modify a Mixed Light without causing noticeable inconsistencies in the indirect lighting: https://youtu.be/XN6ya31gm1I",827],["Lighting Mode: Shadowmask",828],["This page describes the behavior of all Mixed Lights in a Scene, when that Scene uses a Lighting Settings Asset with its Lighting Mode property set to Shadowmask.",828],["Similar to Baked Indirect Lighting Mode, Shadowmask Lighting Mode combines real-time direct lighting with baked indirect lighting. However, Shadowmask Lighting Mode differs from Baked Indirect Lighting Mode in the way that it renders shadows. Shadowmask Lighting Mode makes it possible for Unity to combine baked and real-time shadows at runtime and render shadows in the far distance. It does this by using an additional lightmap texture known as a shadow mask, and by storing additional information in Light Probes. Unity generates Shadow masks and Light Probe occlusion data for baked shadows.",828],["Shadowmask Lighting Mode provides the highest fidelity shadows among all the Lighting Modes, but has the highest performance cost and memory requirements. It's suitable for rendering realistic scenes where distant GameObjects are visible, such as open worlds, on high-end or mid-range hardware.",828],["Render pipeline support",828],["See render pipeline feature comparison for more information about support for Shadowmask Lighting Mode across render pipelines.",828],["Shadowmask quality settings",828],["Use the Quality Settings panel to set the Shadowmask Mode Unity uses at runtime.",828],["Distance Shadowmask** provides greater fidelity shadows at a higher performance cost.",828],["Shadowmask** provides lower fidelity shadows at a lower performance cost.",828],["Mixed Light behavior",828],["With the Distance Shadowmask quality setting",828],["When you set a Scene's Lighting Mode to Shadowmask and your Project uses the Distance Shadowmask quality setting, Mixed Lights behave as follows.",828],["Dynamic GameObjects lit by Mixed Lights receive:",828],["Real-time direct lighting.",828],["Baked indirect lighting, using Light Probes.",828],["Real-time shadows from dynamic GameObjects, using the shadow map, up to the Shadow Distance.",828],["Real-time shadows from static GameObjects, using the shadow map, up to the Shadow Distance.",828],["Baked shadows from static GameObjects using Light Probes, beyond the Shadow Distance.",828],["Static GameObjects lit by Mixed Lights receive:",828],["Real-time direct lighting.",828],["Baked indirect lighting, using lightmaps.",828],["Real-time shadows from dynamic GameObjects, using the shadow map, up to the Shadow Distance.",828],["Real-time shadows from static GameObjects, using the shadow map, up to the Shadow Distance.",828],["Baked shadows from static GameObjects, using the shadow mask, beyond the Shadow Distance.",828],["With the Shadowmask quality setting",828],["When you set a Scene's Lighting Mode to Shadowmask and your Project uses the Shadowmask quality setting, Mixed Lights behave as follows.",828],["Dynamic GameObjects lit by Mixed Lights receive:",828],["Real-time direct lighting.",828],["Baked indirect lighting, using Light Probes.",828],["Real-time shadows from dynamic GameObjects, using the shadow map, up to the Shadow Distance.",828],["Baked shadows from static GameObjects using Light Probes, up to and beyond the Shadow Distance.",828],["Static GameObjects lit by Mixed Lights receive:",828],["Real-time direct lighting.",828],["Baked indirect lighting, using lightmaps.",828],["Real-time shadows from dynamic GameObjects, using the shadow map, up to the Shadow Distance.",828],["Baked shadows from static GameObjects, using the shadow mask, up to and beyond the Shadow Distance.",828],["Setting your Scene's Lighting Mode to Shadowmask",828],["In the Built-in Render Pipeline:",828],["Select the Lighting Settings Asset for the Scene.",828],["In the Inspector, navigate to Mixed Lighting.",828],["Use the drop-down menu to set the Lighting Mode to Shadowmask.",828],["Open the Quality Settings (menu: Edit > Project Settings, then select the Quality category).",828],["Use the Shadowmask Mode drop-down menu to select either Shadowmask or Shadowmask Distance.",828],["In HDRP:",828],["Follow the instructions in the HDRP Shadowmask Lighting Mode documentation.",828],["Shadows and runtime performance",828],["You can use the Shadow Distance property to limit the distance up to which Unity draws real-time shadows.",828],["Shadowmask implementation details",828],["At runtime, Unity uses the shadow mask to determine whether a pixel is in shadow or not. The shadow mask Texture contains occlusion information about baked lights. It shares the same UV layout and resolution with its corresponding lightmap. It contains occlusion information for up to four lights per texel, stored in RGBA format.",828],["If more than four lights overlap, any additional lights fall back to Baked Lighting. The baking system determines which lights fall back to Baked Lighting, and this stays consistent across bakes, unless you modify one of the overlapping lights. Light Probes also receive the same information for up to four lights.",828],["Unity computes light overlapping independently of shadow receiving objects. So, an object can get the influence of ten different mixed lights all from the same Shadowmask/Probe channel, as long as those light bounding volumes don’t overlap at any point in space. If some lights overlap then Unity uses more channels. And, if a light does overlap while all four channels are already in use, that light falls back to fully baked.",828],["Lighting Mode: Subtractive",829],["This page describes the behavior of all Mixed Lights in a Scene, when that Scene uses a Lighting Settings Asset with its Lighting Mode property set to Subtractive.",829],["In Subtractive Lighting Mode, all Mixed Lights in your Scene provide baked direct and indirect lighting. Unity bakes shadows cast by static GameObjects into the lightmaps. In addition to the baked shadows, one Directional Light, known as the Main Directional Light, provides real-time shadows for dynamic GameObjects.",829],["Because shadows are baked into the lightmaps, Unity doesn't have the information it needs to accurately combine baked and real-time shadows at runtime. Instead, Unity provides a Realtime Shadow Color for reducing the contribution from the lightmap to create the illusion of a correct blend between baked and real-time shadows. You can also tweak the color to achieve a certain artistic style.",829],["Subtractive Lighting Mode is useful on low-end hardware where performance is a concern, and where you need only one real-time shadow casting light. It doesn't provide particularly realistic lighting effects, and is more suitable for stylized aesthetics, such as cel shading.",829],["Render pipeline support",829],["See render pipeline feature comparison for more information about support for Subtractive Lighting Mode across render pipelines.",829],["Mixed Light behavior",829],["When you set a Scene's Lighting Mode to Subtractive, Mixed Lights behave as follows.",829],["Dynamic GameObjects lit by Mixed Lights receive:",829],["real-time direct lighting",829],["baked indirect lighting, using Light Probes",829],["real-time shadows from dynamic GameObjects that are lit by the Main Directional Light, using the shadow map, up to the Shadow Distance",829],["shadows from static GameObjects, using Light Probes",829],["Static GameObjects lit by Mixed Lights receive:",829],["baked direct lighting, using lightmaps",829],["baked indirect lighting, using lightmaps",829],["baked shadows from static GameObjects, using lightmaps",829],["real-time shadows from dynamic GameObjects that are lit by the Main Directional Light, using the shadow map, up to the Shadow Distance",829],["Setting your Scene's Lighting Mode to Subtractive",829],["Select the Lighting Settings Asset for the Scene.",829],["In the Inspector, navigate to Mixed Lighting..",829],["Use the drop-down menu to set the Lighting Mode to Subtractive.",829],["Changing the shadow color",829],["When you set a Scene's Lighting Mode to Subtractive, Unity displays the Realtime Shadow Color property in the Lighting window. Unity uses this color when it combines real-time shadows with baked shadows. Change this value to approximate the color of the indirect lighting in your Scene, to better match the real-time shadows with the baked shadows.",829],["The Main Directional Light",829],["Unity automatically chooses the Directional Light in your Scene with the highest intensity value to be the Main Directional Light.",829],["Light Mode: Mixed",830],["This page describes the behavior of a Light component when you set its Mode property to Mixed. These are also known as Mixed Lights.",830],["Mixed Lights combine elements of both real-time and baked lighting. You can use Mixed Lights to combine dynamic shadows with baked lighting from the same light source, or when you want a light to contribute direct real-time lighting and baked indirect lighting.",830],["To use Mixed Lights, you must first understand the benefits and limitations of Realtime Lights and Baked Lights.",830],["Mixed Light behavior",830],["The behavior of all Mixed Lights in a Scene depends on the Lighting Mode setting in the Lighting window. The different Lighting Modes have very different performance characteristics, and different levels of visual fidelity. For more information, see Lighting Modes.",830],["You can change properties of Mixed Lights at runtime. This updates their real-time lighting but not their baked lighting. When doing this, take care to avoid unwanted visual effects.",830],["Limitations of Mixed Lights",830],["The performance cost of Mixed Lights differs considerably, depending on the Lighting Mode. However, because Mixed Lights always combine at least some real-time and some baked lighting, Mixed Lights always involve more runtime calculations than fully baked lighting, and higher memory usage than fully real-time lighting.",830],["Note that if you disable Baked Global Illumination in your Scene, Unity forces Mixed Lights to behave as though you set their Mode to Realtime. When this happens, Unity displays a warning on the Light component Inspector.",830],["Light Mode: Realtime",831],["This page describes the behavior of a Light component when you set its Mode property to Realtime. These are also known as Realtime Lights.",831],["Unity performs the lighting calculations for Realtime Lights at runtime, once per frame. You can change the properties of Realtime Lights at runtime to create effects such as flickering light bulbs, or a torch being carried through a dark room.",831],["Realtime Lights are useful for lighting and casting shadows on characters or moveable geometry.",831],["Realtime Light behavior",831],["Realtime Lights cast shadows up to the Shadow Distance.",831],["By default, Realtime Lights contribute only realtime direct lighting to a Scene. If you're using the Built-in Render Pipeline and you enable Enlighten Realtime Global Illumination in your Project, Realtime Lights also contribute realtime indirect lighting to your Scene.",831],["Limitations of Realtime Lights",831],["Performing runtime calculations for Realtime Lights might be costly, especially in complex scenes or on low-end hardware.",831],["Because Realtime Lights only contribute direct lighting to the Scene by default, shadows appear completely black and there aren't any indirect lighting effects, such as color bounce. This might cause unrealistic lighting in the Scene.",831],["Light Modes",832],["This page contains information about the Mode property of a Light component. The Mode property of a Light defines its intended use.",832],["The Modes are:",832],["Baked: Unity pre-calculates the illumination from Baked Lights before runtime, and does not include them in any runtime lighting calculations. For more information, see Baked Lights.",832],["Realtime: Unity calculates and updates the lighting of Realtime Lights every frame at runtime. Unity does not precompute any calculations for Realtime Lights. For more information, see Realtime Lights.",832],["Mixed: Unity performs some calculations for Mixed Lights in advance, and some calculations at runtime. For more information, see Mixed Lights.",832],["Setting the Mode property of a Light",832],["To assign a Mode, select the Light in your Scene and, in the Light Inspector window, select Mode.",832],["Light Probes and the Mesh Renderer",833],["To use Light Probes on your moving GameObjects, the Mesh Renderer component on the moving GameObject must be set correctly. The Mesh Renderer component has a Light Probes setting which is set to Blend Probes by default. This means that by default, all GameObjects will use light probes and will blend between the nearest probes as it changes position in your scene.",833],["You can change this setting to either \"off\" or “use proxy volume”. Switching the light probes setting to off will disable the light probe’s effect on this GameObject.",833],["Light Probe Proxy Volumes are a special setting which you can use for situations where a large moving object might be too big to be sensibly lit by the results of a single tetrahedron from the light probe group, and instead needs to be lit by multiple groups of light probes across the length of the model. See Light Probe Proxy Volumes for more information.",833],["The other setting in the Mesh Renderer inspector which relates to light probes is the Anchor Override setting. As described previously, when a GameObject moves through your scene, Unity calculates which tetrahedron the GameObject falls within from the volume defined by the light probe groups. By default this is calculated from the centre point of the Mesh’s bounding box, however you can override the point that is used by assigning a different GameObject to the Anchor Override field.",833],["If you assign a different GameObject to this field, it is up to you to move that GameObject in a way that suits the lighting you want on your mesh.",833],["The anchor override may be useful when a GameObject contains two separate adjoining meshes; if both meshes are lit individually according to their bounding box positions then the lighting will be discontinuous at the place where they join. This can be prevented by using the same Transform (for example the parent or a child object) as the interpolation point for both Mesh Renderers or by using a Light Probe Proxy Volume.",833],[" 2017-06-08 ",833],["Light Probes updated in 5.6",833],["Light Probes for moving objects",834],["Lightmapping adds greatly to the realism of a scene by capturing realistic bounced light as textures which are \"baked\" onto the surface of _static _objects. However, due to the nature of lightmapping, it can only be applied to non-moving objects marked as Contribute GI.",834],["While realtime and mixed mode lights can cast *direct *light on moving objects, moving objects do not receive bounced light from your static environment unless you use light probes. Light probes store information about how light is bouncing around in your scene. Therefore as objects move through the spaces in your game environment, they can use the information stored in your light probes to show an approximation of the bounced light at their current position.",834],["In the above scene, as the directional light hits the red and green buildings, which are static scenery, *bounced light *is cast into the scene. The bounced light is visible as a red and green tint on the ground directly in front of each building. Because all these models are static, all this lighting is stored in lightmaps.",834],["When you introduce moving objects into your scene, they do not automatically receive bounced light. In the below image, you can see the ambulance (a dynamic moving object) is not affected by the bounced red light coming off the building. Instead, its side is a flat grey color. This is because the ambulance is a dynamic object which can move around in the game, and therefore cannot use lightmaps, because they are static by nature. The scene needs Light Probes so that the moving ambulance can receive bounced light.",834],["To use the light probe feature to cast bounced light onto dynamic moving objects, you must position light probes throughout your scene, so that they cover the areas of space that moving objects in your game might pass through.",834],["The probes you place in your scene define a 3D volume. The lighting at any position within this volume is then approximated on moving objects by interpolating between the information baked into the nearest probes.",834],["Once you have added probes, and baked the light in your scene, your dynamic moving objects will receive bounced light based on the nearest probes in the scene. Using the same example as above, the dynamic object (the ambulance) now receives bounced light from the static scenery, giving the side of the vehicle a red tint, because it is in front of the red building which is casting bounced light.",834],["When a dynamic object is selected, the Scene view will draw a visualisation of which light probes are being used for the interpolated bounced light. The nearest probes to the dynamic object are used to form a tetrahedral volume, and the dynamic object’s light is interpolated from the four points of this tetrahedron.",834],["As an object passes through the scene, it moves from one tetrahedral volume to another, and the lighting is calculated based on its position within the current tetrahedron.",834],[" 2017-06-08 ",834],["Light Probes updated in 5.6",834],["Placing Light Probes using scripting",835],["Placing Light Probes over large levels by hand can be time consuming. You can automate the placing of light probes by writing your own editor scripts. Your script can create a new GameObject with a LightProbeGroup component, and you can add probe positions individually according to any rules that you choose to program.",835],["For example, this script can place Light Probes in a circle or a ring.",835],["using UnityEngine;",835],["using System.Collections.Generic;",835],["[RequireComponent (typeof (LightProbeGroup))]",835],["public class LightProbesTetrahedralGrid : MonoBehaviour",835],["// Common",835],["public float m_Side = 1.0f;",835],["public float m_Radius = 5.0f;",835],["public float m_InnerRadius = 0.1f;",835],["public float m_Height = 2.0f;",835],["public uint m_Levels = 3;",835],["const float kMinSide = 0.05f;",835],["const float kMinHeight = 0.05f;",835],["const float kMinInnerRadius = 0.1f;",835],["const uint kMinIterations = 4;",835],["public void OnValidate ()",835],["m_Side = Mathf.Max (kMinSide, m_Side);",835],["m_Height = Mathf.Max (kMinHeight, m_Height);",835],["if (m_InnerRadius < kMinInnerRadius)",835],["TriangleProps props = new TriangleProps (m_Side);",835],["m_Radius = Mathf.Max (props.circumscribedCircleRadius + 0.01f, m_Radius);",835],["else",835],["m_Radius = Mathf.Max (0.1f, m_Radius);",835],["m_InnerRadius = Mathf.Min (m_Radius, m_InnerRadius);",835],["struct TriangleProps",835],["public TriangleProps (float triangleSide)",835],["side = triangleSide;",835],["halfSide = side / 2.0f;",835],["height = Mathf.Sqrt (3.0f) * side / 2.0f;",835],["inscribedCircleRadius = Mathf.Sqrt (3.0f) * side / 6.0f;",835],["circumscribedCircleRadius = 2.0f * height / 3.0f;",835],["public float side;",835],["public float halfSide;",835],["public float height;",835],["public float inscribedCircleRadius;",835],["public float circumscribedCircleRadius;",835],["};",835],["private TriangleProps m_TriangleProps;",835],["public void Generate ()",835],["LightProbeGroup lightProbeGroup = GetComponent ();",835],["List positions = new List ();",835],["m_TriangleProps = new TriangleProps (m_Side);",835],["if (m_InnerRadius < kMinInnerRadius)",835],["GenerateCylinder (m_TriangleProps, m_Radius, m_Height, m_Levels, positions);",835],["else",835],["GenerateRing (m_TriangleProps, m_Radius, m_InnerRadius, m_Height, m_Levels, positions);",835],["lightProbeGroup.probePositions = positions.ToArray ();",835],["static void AttemptAdding (Vector3 position, Vector3 center, float distanceCutoffSquared, List outPositions)",835],["if ((position - center).sqrMagnitude < distanceCutoffSquared)",835],["outPositions.Add (position);",835],["uint CalculateCylinderIterations (TriangleProps props, float radius)",835],["int iterations = Mathf.CeilToInt ((radius + props.height - props.inscribedCircleRadius) / props.height);",835],["if (iterations > 0)",835],["return (uint)iterations;",835],["return 0;",835],["void GenerateCylinder (TriangleProps props, float radius, float height, uint levels, List outPositions)",835],["uint iterations = CalculateCylinderIterations (props, radius);",835],["float distanceCutoff = radius;",835],["float distanceCutoffSquared = distanceCutoff * distanceCutoff;",835],["Vector3 up = new Vector3 (props.circumscribedCircleRadius, 0.0f, 0.0f);",835],["Vector3 leftDown = new Vector3 (-props.inscribedCircleRadius, 0.0f, -props.halfSide);",835],["Vector3 rightDown = new Vector3 (-props.inscribedCircleRadius, 0.0f, props.halfSide);",835],["for (uint l = 0; l < levels; l++)",835],["float tLevel = levels == 1 ? 0 : (float)l / (float)(levels - 1);",835],["Vector3 center = new Vector3 (0.0f, tLevel * height, 0.0f);",835],["if (l % 2 == 0)",835],["for (uint i = 0; i < iterations; i++)",835],["Vector3 upCorner = center + up + (float)i * up * 2.0f * 3.0f / 2.0f;",835],["Vector3 leftDownCorner = center + leftDown + (float)i * leftDown * 2.0f * 3.0f / 2.0f;",835],["Vector3 rightDownCorner = center + rightDown + (float)i * rightDown * 2.0f * 3.0f / 2.0f;",835],["AttemptAdding (upCorner, center, distanceCutoffSquared, outPositions);",835],["AttemptAdding (leftDownCorner, center, distanceCutoffSquared, outPositions);",835],["AttemptAdding (rightDownCorner, center, distanceCutoffSquared, outPositions);",835],["Vector3 leftDownUp = upCorner - leftDownCorner;",835],["Vector3 upRightDown = rightDownCorner - upCorner;",835],["Vector3 rightDownLeftDown = leftDownCorner - rightDownCorner;",835],["uint subdiv = 3 * i + 1;",835],["for (uint s = 1; s < subdiv; s++)",835],["Vector3 leftDownUpSubdiv = leftDownCorner + leftDownUp * (float)s / (float)subdiv;",835],["AttemptAdding (leftDownUpSubdiv, center, distanceCutoffSquared, outPositions);",835],["Vector3 upRightDownSubdiv = upCorner + upRightDown * (float)s / (float)subdiv;",835],["AttemptAdding (upRightDownSubdiv, center, distanceCutoffSquared, outPositions);",835],["Vector3 rightDownLeftDownSubdiv = rightDownCorner + rightDownLeftDown * (float)s / (float)subdiv;",835],["AttemptAdding (rightDownLeftDownSubdiv, center, distanceCutoffSquared, outPositions);",835],["else",835],["for (uint i = 0; i < iterations; i++)",835],["Vector3 upCorner = center + (float)i * (2.0f * up * 3.0f / 2.0f);",835],["Vector3 leftDownCorner = center + (float)i * (2.0f * leftDown * 3.0f / 2.0f);",835],["Vector3 rightDownCorner = center + (float)i * (2.0f * rightDown * 3.0f / 2.0f);",835],["AttemptAdding (upCorner, center, distanceCutoffSquared, outPositions);",835],["AttemptAdding (leftDownCorner, center, distanceCutoffSquared, outPositions);",835],["AttemptAdding (rightDownCorner, center, distanceCutoffSquared, outPositions);",835],["Vector3 leftDownUp = upCorner - leftDownCorner;",835],["Vector3 upRightDown = rightDownCorner - upCorner;",835],["Vector3 rightDownLeftDown = leftDownCorner - rightDownCorner;",835],["uint subdiv = 3 * i;",835],["for (uint s = 1; s < subdiv; s++)",835],["Vector3 leftDownUpSubdiv = leftDownCorner + leftDownUp * (float)s / (float)subdiv;",835],["AttemptAdding (leftDownUpSubdiv, center, distanceCutoffSquared, outPositions);",835],["Vector3 upRightDownSubdiv = upCorner + upRightDown * (float)s / (float)subdiv;",835],["AttemptAdding (upRightDownSubdiv, center, distanceCutoffSquared, outPositions);",835],["Vector3 rightDownLeftDownSubdiv = rightDownCorner + rightDownLeftDown * (float)s / (float)subdiv;",835],["AttemptAdding (rightDownLeftDownSubdiv, center, distanceCutoffSquared, outPositions);",835],["void GenerateRing (TriangleProps props, float radius, float innerRadius, float height, uint levels, List outPositions)",835],["float chordLength = props.side;",835],["float angle = Mathf.Clamp (2.0f * Mathf.Asin (chordLength / (2.0f * radius)), 0.01f, 2.0f * Mathf.PI);",835],["uint slicesAtRadius = (uint)Mathf.FloorToInt (2.0f * Mathf.PI / angle);",835],["uint layers = (uint)Mathf.Max (Mathf.Ceil ((radius - innerRadius) / props.height), 0.0f);",835],["for (uint level = 0; level < levels; level++)",835],["float tLevel = levels == 1 ? 0 : (float)level / (float)(levels - 1);",835],["float y = height * tLevel;",835],["float iterationOffset0 = level % 2 == 0 ? 0.0f : 0.5f;",835],["for (uint layer = 0; layer < layers; layer++)",835],["float tLayer = layers == 1 ? 1.0f : (float)layer / (float)(layers - 1);",835],["float tIterations = (tLayer * (radius - innerRadius) + innerRadius - kMinInnerRadius) / (radius - kMinInnerRadius);",835],["uint slices = (uint)Mathf.CeilToInt (Mathf.Lerp (kMinIterations, slicesAtRadius, tIterations));",835],["float x = innerRadius + (radius - innerRadius) * tLayer;",835],["Vector3 position = new Vector3 (x, y, 0.0f);",835],["float layerSliceOffset = layer % 2 == 0 ? 0.0f : 0.5f;",835],["for (uint slice = 0; slice < slices; slice++)",835],["Quaternion rotation = Quaternion.Euler (0.0f, (slice + iterationOffset0 + layerSliceOffset) * 360.0f / (float)slices, 0.0f);",835],["outPositions.Add (rotation * position);",835],[" 2017-06-08 ",835],["Light Probes updated in 5.6",835],["Light Probes: Technical information",836],["The lighting information in the light probes are encoded as Spherical Harmonics basis functions. We use third order polynomials, also known as L2 Spherical Harmonics. These are stored using 27 floating point values, 9 for each color channel.",836],["The Enlighten Global Illumination implementation in Unity uses a different spherical harmonics approach than Geomerics, the feature's original developer, namely the notation and reconstruction method from Peter-Pike Sloan's paper, Stupid Spherical Harmonics (SH) Tricks. Geomerics' original approach was based on the notation and reconstruction method from Ramamoorthi/Hanrahan's paper, An Efficient Representation for Irradiance Environment Maps.",836],["The shader code for reconstruction is found in UnityCG.cginc and is using the method from Appendix A10 Shader/CPU code for Irradiance Environment Maps from Peter-Pikes paper.",836],["The data is internally ordered like this:",836],["[L00: DC]",836],["[L1-1: y] [L10: z] [L11: x]",836],["[L2-2: xy] [L2-1: yz] [L20: zz] [L21: xz] [L22: xx - yy]",836],["The 9 coefficients for R, G and B are ordered like this:",836],["L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22, // red channel",836],["L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22, // blue channel",836],["L00, L1-1, L10, L11, L2-2, L2-1, L20, L21, L22 // green channel",836],["For more \"under-the-hood\" information about Unity’s light probe system, you can read Robert Cupisz’s talk from GDC 2012, Light Probe Interpolation Using Tetrahedral Tessellations”, GDC 2012",836],[" 2017-06-08 ",836],["Light Probes updated in 5.6",836],["Light Probes",837],["Light Probes provide a way to capture and use information about light that is passing through the empty space in your scene.",837],["Similar to lightmaps, light probes store \"baked\" information about lighting in your scene. The difference is that while lightmaps store lighting information about light hitting the surfaces in your scene, light probes store information about light passing through empty space in your scene.",837],["Light Probes are positions in the scene where the light is measured (probed) during the bake. At runtime, the indirect light that hits dynamic GameObjects is approximated using the values from the nearest Light Probes to that object.",837],["Light Probes have two main uses:",837],["The primary use of light probes is to provide high quality lighting (including indirect bounced light) on moving objects in your scene.",837],["The secondary use of light probes is to provide the lighting information for static scenery when that scenery is using Unity’s LOD system.",837],["When using light probes for either of these two distinct purposes, many of the techniques you need to use are the same. It’s important to understand how light probes work so that you can choose where to place your probes in the scene.",837],["Lights",838],["Lights are an essential part of every scene. While meshes and textures define the shape and look of a scene, lights define the color and mood of your 3D environment. You'll likely work with more than one light in each scene. Making them work together requires a little practice but the results can be quite amazing.",838],["Lights can be added to your scene from the GameObject->Light menu. You will choose the light format that you want from the sub-menu that appears. Once a light has been added, you can manipulate it like any other GameObject. Additionally, you can add a Light Component to any selected GameObject by using Component->Rendering->Light.",838],["There are many different options within the Light Component in the Inspector.",838],["By simply changing the Color of a light, you can give a whole different mood to the scene.",838],["Rendering paths",838],["Unity supports different Rendering Paths. These paths affect mainly Lights and Shadows, so choosing the correct rendering path depending on your game requirements can improve your project's performance.",838],["For more info about rendering paths you can visit the Rendering paths section.",838],["More information",838],["For more information on how lights work see the Lighting Overview page. For more information about using the Light Component, check the Lighting Reference.",838],["Color space",839],["The Unity Editor allows you to work in traditional gamma color space as well as linear color space. While gamma color space is the historically standard format, linear color space rendering gives more precise results.",839],["For further reading, see documentation on:",839],["Linear or gamma workflow for information on selecting to work in linear or gamma color space.",839],["Gamma Textures with linear rendering for information on gamma Textures in a linear workflow.",839],["Linear Textures for information on working with linear Textures.",839],["Linear and gamma color space",839],["The human eye doesn't have a linear response to light intensity. We see some brightnesses of light more easily than others - a gradient that proceeds in a linear fashion from black to white would not look like a linear gradient to our eyes.",839],["For historical reasons, monitors and displays have the same characteristic. Sending a monitor a linear signal results in something that looks like the gradient to the right in the illustration above, and simply looks wrong to our eyes. To compensate for this, a corrected signal is sent to make sure the monitor shows an image that looks natural. This correction is known as gamma correction.",839],["The reason both gamma and linear color spaces exist is because lighting calculations should be done in linear space in order to be mathematically correct, but the result should be presented in gamma space to look correct to our eyes.",839],["When calculating lighting on older hardware restricted to 8 bits per channel for the framebuffer format, using a gamma curve provides more precision in the human-perceivable range. More bits are used in the range where the human eye is the most sensitive.",839],["Even though monitors today are digital, they still take a gamma-encoded signal as input. Image files and video files are explicitly encoded to be in gamma space (meaning they carry gamma-encoded values, not linear intensities). This is the standard; everything is in gamma space.",839],["The accepted standard for gamma space is called sRGB (see Wikipedia). This standard defines a mapping to linear space that allows our eyes to make the most of the 8 bits per channel of precision.",839],["Linear rendering refers to the process of rendering a Scene with all inputs linear - that is to say, not gamma corrected for viewing with human eyes or for output to a display.",839],["Gamma Textures with linear rendering",840],["The Unity Editor allows you to work with traditional gamma color space as well as linear color space. You can work in linear colour space even if your Textures are in gamma color space.",840],["For further reading, see documentation on:",840],["Linear rendering overview for background information on linear and gamma color space.",840],["Linear or gamma workflow for information on selecting to work in linear or gamma color space.",840],["Linear Textures for information on working with linear Textures.",840],["Note:** If your Textures are in linear color space, you need to disable sRGB sampling. See documentation on Linear Textures for more information.",840],["Linear rendering gives a different look to the rendered Scene. When you have authored a project to look good when rendering in gamma space, it is unlikely to look great when you change to linear rendering. Because of this, if you move to linear rendering from gamma rendering it may take some time to tweak the project so that it looks as good as before. However, the switch ultimately enables more consistent and realistic rendering and so may be worth the time spent on it. You are likely to have to tweak Textures, Materials and Lights.",840],["Lightmapping",840],["The lighting calculations in the lightmapper are always done in linear space (see Color space for more information). The lightmaps are always stored in gamma space. This means that the lightmap textures are identical no matter whether you're in gamma or linear color space.",840],["When you are in linear color space, the texture sample gets converted from gamma to linear space when sampling the texture. When you're in gamma color space, no conversion is needed. Therefore, when you change the color space setting, you must rebake lightmaps: This happens automatically when Unity’s lighting is set to auto bake (which is the default).",840],["Importing lightmaps",840],["The data in lightmap EXR files created by Unity is in linear space. It gets converted to gamma space during import. When bringing in lightmaps from an external lightmapper, mark the lightmaps as Texture Type: Lightmap in the Texture Importer. This setting makes sure sRGB sampling is bypassed on import.",840],["Linear supported platforms",840],["Linear rendering is not supported on all platforms. The build targets that support the feature are:",840],["Windows, Mac OS X and Linux (Standalone)",840],["Android",840],["iOS",840],["WebGL",840],["There is no fallback to gamma when linear rendering is not supported by the device. In this situation, the Player quits. You can check the active color space from a script by looking at QualitySettings.activeColorSpace.",840],["On Android, linear rendering requires at least OpenGL ES 3.0 graphics API and Android 4.3.",840],["On iOS, linear rendering requires the Metal graphics API.",840],["On WebGL, linear rendering requires at least WebGL 2.0 graphics API.",840],["Until the minimum requirements are satisfied, the Editor prevents you from building a Player and shows a notification. This is to avoid games that would render incorrectly on user devices being deployed to digital stores.",840],["Linear color space and HDR",840],["When using HDR, rendering is performed in linear space into floating point buffers. These buffers have enough precision not to require conversion to and from gamma space whenever the buffer is accessed. This means that when rendering in linear mode, the framebuffers you use store the colors in linear space. Therefore, all blending and post process effects are implicitly performed in linear space. When the final backbuffer is written to, gamma correction is applied.",840],["Linear color space and non-HDR",840],["When linear color space is enabled and HDR is not enabled, a special framebuffer type is used that supports sRGB read and sRGB write (convert from gamma to linear when reading, convert from linear to gamma when writing). When this framebuffer is used for blending or it is bound as a Texture, the values are converted to linear space before being used. When these buffers are written to, the value that is being written is converted from linear space to gamma space. If you are rendering in linear mode and non-HDR mode, all post-process effects have their source and target buffers created with sRGB read and write enabled so that post-processing and post-process blending occur in linear space.",840],[" 2017-06-19 ",840],["Linear rendering for WebGL added in 2017.2 NewIn20172",840],["Linear or gamma workflow",841],["The Unity Editor offers both linear and gamma workflows. The linear workflow has a color space crossover where Textures that were authored in gamma color space can be correctly and precisely rendered in linear color space. See documentation on Linear rendering overview for more information about gamma and linear color space.",841],["For further reading, see documentation on:",841],["Linear rendering overview for background information on linear and gamma color space.",841],["Gamma Textures with linear rendering for information on gamma Textures in a linear workflow.",841],["Linear Textures for information on working with linear Textures.",841],["Textures tend to be saved in gamma color space, while Shaders expect linear color space. As such, when Textures are sampled in Shaders, the gamma-based values lead to inaccurate results. To overcome this, you can set Unity to use an RGB sampler to cross over from gamma to linear sampling. This ensures a linear workflow with all inputs and outputs of a Shader in the correct color space, resulting in a correct outcome.",841],["To specify a gamma or linear workflow, go to Edit > Project Settings, then select the Player category, navigate to the Other Settings, open the Rendering section, and change the Color Space to Linear or Gamma, depending on your preference.",841],["Gamma color space workflow",841],["While a linear workflow ensures more precise rendering, sometimes you may want a gamma workflow (for example, on some platforms the hardware only supports the gamma format).",841],["To do this, set Color Space to Gamma in the Player settings (menu: Edit > Project Settings, then select the Player category). Unity uses the gamma color space for color calculations, and keeps imported textures in the gamma color space. Unity also makes sure shaders keep textures in gamma color space, calculate in gamma color space, and write to a framebuffer that doesn't reapply gamma correction.",841],["Texture Import Settings might show textures as being in linear format, because this avoids shaders recognising the textures as being in gamma color space and automatically removing the gamma correction.",841],["Note that you can choose to bypass sRGB sampling in Color Space: Gamma mode by unchecking the sRGB (Color Texture) checkbox in the Inspector window for the Texture.",841],["Linear color space workflow",841],["Working in linear color space gives more accurate rendering than working in gamma color space.",841],["To do this, set Color Space to Linear in the Player settings (menu: Edit > Project Settings, then select the Player category).",841],["You can work in linear color space if your Textures were created in linear or gamma color space. Gamma color space Texture inputs to the linear color space Shader program are supplied to the Shader with gamma correction removed from them.",841],["Note**: The Texture preview window in Texture Import Settings displays Textures using gamma blending even if you are working in linear color space.",841],["Linear Textures",841],["Selecting Color Space: Linear assumes your Textures are in gamma color space. Unity uses your GPU’s sRGB sampler by default to crossover from gamma to linear color space. If your Textures are authored in linear color space, you need to bypass the sRGB sampling. See documentation on Working with linear Textures for more information.",841],["Gamma Textures",841],["Crossing over from gamma color space to linear color space requires some tweaking. See documentation on Gamma Textures with linear rendering for more information.",841],["Notes",841],["For colors, this conversion is applied implicitly, because the Unity Editor already converts the values to floating point before passing them to the GPU as constants. When sampling Textures, the GPU automatically removes the gamma correction, converting the result to linear space.",841],["These inputs are then passed to the Shader, with lighting calculations taking place in linear space as they normally do. When writing the resulting value to a framebuffer, it is either gamma-corrected straight away or left in linear space for later gamma correction - this depends on the current rendering configuration. For example, in high dynamic range (HDR), rendering results are left in linear space and gamma corrected later.",841],["Differences between linear and gamma color space",841],["When using linear rendering, input values to the lighting equations are different to those in gamma space. This means differing results depending on the color space. For example, light striking surfaces has differing response curves, and Image Effects behave differently.",841],["Light fall-off",841],["The fall-off from distance and normal-based lighting differs in two ways:",841],["When rendering in linear mode, the additional gamma correction that is performed makes a light’s radius appear larger.",841],["Lighting edges also appear more clearly. This more correctly models lighting intensity fall-off on surfaces.",841],["Linear intensity response",841],["When you are using gamma rendering, the colors and Textures that are supplied to a Shader already have gamma correction applied to them. When they are used in a Shader, the colors of high luminance are actually brighter than they should be compared to linear lighting. This means that as light intensity increases, the surface gets brighter in a nonlinear way. This leads to lighting that can be too bright in many places. It can also give models and scenes a washed-out feel. When you are using linear rendering, the response from the surface remains linear as the light intensity increases. This leads to much more realistic surface shading and a much nicer color response from the surface.",841],["The Infinite 3D Head Scan image below demonstrates different light intensities on a human head model under linear lighting and gamma lighting.",841],["Linear and gamma blending",841],["When blending into a framebuffer, the blending occurs in the color space of the framebuffer.",841],["When you use gamma space rendering, nonlinear colors get blended together. This is not the mathematically correct way to blend colors, and can give unexpected results, but it is the only way to do a blend on some graphics hardware.",841],["When you use linear space rendering, blending occurs in linear color space: This is mathematically correct and gives precise results.",841],["The image below demonstrates the different types of blending:",841],["Working with linear Textures",842],["sRGB sampling allows the Unity Editor to render Shaders in linear color space when Textures are in gamma color space. When you select to work in linear color space, the Editor defaults to using sRGB sampling. If your Textures are in linear color space, you need to work in linear color space and disable sRGB sampling for each Texture. To learn how to do this, see Disabling sRGB sampling, below.",842],["For further reading, see documentation on:",842],["Linear rendering overview for background information on linear and gamma color space.",842],["Linear or gamma workflow for information on selecting to work in linear or gamma color space.",842],["Gamma Textures with linear rendering for information on gamma Textures in a linear workflow.",842],["Legacy GUI",842],["Rendering of elements of the Legacy GUI System is always done in gamma space. This means that for the legacy GUI system, Textures with their Texture Type set to Editor GUI and Legacy GUI do not have their gamma removed on import.",842],["Linear authored Textures",842],["It is also important that lookup Textures, masks, and other textures with RGB values that mean something specific and have no gamma correction applied to them bypass sRGB sampling. This prevents values from the sampled Texture having non-existent gamma correction removed before they are used in the Shader, with calculations made with the same value as is stored on disk. Unity assumes that GUI textures and normal map textures are authored in a linear space.",842],[" ",842],["Disabling sRGB sampling",842],["To ensure a Texture is imported as a linear color space image, in the Inspector window for the Texture:",842],["Select the appropriate Texture Type for the Texture’s intended use.",842],["Uncheck sRGB (Color Texture) if it is shown.",842],["Troubleshooting the Linux Editor issues",843],["This page lists the known issues for the Linux Unity Editor and provides tested solutions.",843],["Unity Editor crashes with Pipe error ! message",843],["Opening projects with large number of assets crashes the Editor and logs a Pipe error ! message. The error message appears in the terminal if you opened the Editor via the terminal, otherwise it's logged in the Editor.log file located in ~/.config/unity3d directory.",843],["Cause",843],["The error message is logged when the project reaches the maximum number of open files limit.",843],["Solution",843],["Increase the maximum open file limit in the Unity Editor session in one of the following ways:",843],["",843],["Increase the maximum open file limit current Editor session",843],["If you're using a terminal to open the Editor, then you can increase the maximum open file limit in the current Editor session by following these steps:",843],["In the terminal window, check the current maximum open file limit by using following command:",843],["ulimit -a",843],["This increases the soft limit of the maximum number of open files and the value of the soft limit can't exceed the hard limit.",843],["Check the hard limit to make sure you're not exceeding the hard limit by using the following command:",843],["ulimit -Hn",843],["Once you know the hard limit, increase the soft limit using following command such that it doesn't exceed the hard limit:",843],["ulimit -n ",843],["For example, to increase the soft limit to 4096, use the following command:",843],["ulimt -n 4096",843],["Confirm the soft limit change by using either ulimit -a or ulimit -Sn command, and then use the same terminal to launch the Unity Editor.",843],["",843],["Increase the maximum open file limit system wide",843],["To increase the maximum open file limit system wide, follow these steps:",843],["Locate the limits configuration file in the following location: /etc/security/limits.conf.",843],["Modify the following line:",843],["[UserName] soft nofile [Desired soft open file limit]",843],["where [UserName] can be the username of the desired user, root, or * to include all the users excluding root. You can also increase the hard limit in this file, but make sure that you don't exceed the hard limit set by the system.",843],["Following is an example of how the limits.conf file located in /etc/security/limits.conf looks after adding the soft and hard limit values to increase the open file count.",843],["soft nofile 4096",843],["hard nofile 4096",843],["Reboot the system.",843],["Confirm that the values have actually changed by running the following commands.",843],["Soft open file limit:",843],["ulimit -Sn",843],["Hard open file limit:",843],["ulimit -Hn",843],["Launch the Unity Editor.",843],["Additional resources:",843],["Linux IL2CPP cross-compiler",844],["The Linux IL2CPP cross-compiler is a set of sysroot and toolchain packages that allow you to build Linux IL2CPP Players on any Standalone platform without needing to use the Linux Unity Editor or rely on Mono.",844],["If you meet the prerequisites, Unity automatically installs these packages for you when you choose the Linux build target. If you want to opt out of this process and use your own sysroot and toolchain packages, go to Edit > Project Settings > Toolchain Management and disable the Install Toolchain package automatically checkbox. If you already have these installed, you also need to remove them from the package manager.",844],["Warning:** Setting additional IL2CPP arguments might affect your project compilation. For more information, see Handling IL2CPP additional arguments.",844],["Prerequisites",844],["Unity needs the following to install the IL2CPP cross-compiler packages:",844],["Unity 2019.4 or above.",844],["Enough available disk space for your chosen Linux toolchain package. For further information, refer to the Required disk space for Linux toolchain packages.",844],["Scripting backend set to IL2CPP. To set the scripting backend to IL2CPP: Go to Edit > Project Setting > Player Settings > Setting for PC, Mac and Linux Standalone > Other Settings > Configuration. Set the Scripting Backend to IL2CPP.",844],["IL2CPP module. For information on how to install the IL2CPP module, follow the steps documented on Adding modules.",844],["Linux sysroot package",844],["A Linux sysroot package is a directory which includes all the headers and libraries you need to build for Linux.",844],["Every operating system (OS) has its own build systems which vary from one to another. If you build using the headers and libraries of a particular OS, the built Player might not run on other operating systems. To address this, Unity provides a sysroot to build with which works on all supported Linux platforms.",844],["Linux toolchain packages",844],["Unity provides toolchain packages for macOS, Windows, and Linux. Each of these platforms builds for Linux in a unique way.",844],["A Linux toolchain package is a set of tools (including the compiler and linker) that Unity needs to build for Linux from each of these operating systems.",844],["Required disk space for Linux toolchain packages ",844],["Make sure you have enough disk space to account for the package download, decompression, and use.",844],["In the rare instances where you are unsure whether you have enough space, define a UNITY_SYSROOT_CACHE environment variable and use it to store the uncompressed sysroots and toolchain packages. An environment variable is a variable that you set outside of Unity which is available for Unity to reference. In this case, you set a cache that Unity can reference when decompressing the sysroot and toolchain packages. Environment variables are specific to your operating system, so you need to follow your system's guidelines to set them.",844],["The table below shows the total disk space requirements for each toolchain package.",844],["Toolchain package Required disk space ",844],["com.unity.toolchain.linux-x86_64 462MB ",844],["com.unity.toolchain.macos-x86_64-linux-x86_64 2GB ",844],["com.unity.toolchain.win-x86_64-linux-x86_64 2GB ",844],["Using the Linux IL2CPP cross-compiler",844],["If you meet all the prerequisites on this page, you can build your project as a Linux Player. Unity automatically uses the Linux IL2CPP cross-compiler at build time.",844],["To build a Linux Player, follow these steps:",844],["Open the Build Settings (menu: File > Build Settings).",844],["Select the Windows, Mac, Linux option.",844],["Set the Build Target option to Linux.",844],["Click the Switch Platform button.",844],["Build your Player. From Unity's main menu, go to File and select either Build or Build and Run.",844],["Additional resources",844],["Linux Build Settings platform docs.",844],["Linux",845],["Unity provides support for developing applications on Linux. You can build your application as a standalone executable and run it on Linux systems that support the same architecture that Unity supports. You can also build your application as a library and use it as a plug-in in other applications.",845],["Topic Description ",845],["Linux Player Settings Use Player Settings to set the different options required for the final game built by Unity applicable for the Linux platform. For a description of the general Player Settings, refer to Player Settings. ",845],["Linux Build Settings Use Build Settings to set up and begin the build process for your application on Linux. It contains settings to create development builds and for publishing your final build. ",845],["Troubleshooting Linux Editor issues Lists workaround for the known issues with the Linux Editor. ",845],["Additional resources:",845],["Loading Resources at Runtime",846],["In some situations, it is useful to make an asset available to a project without loading it in as part of a scene. For example, there may be a character or other object that can appear in any scene of the game but which will only be used infrequently (this might be a \"secret\" feature, an error message or a highscore alert, say). Furthermore, you may even want to load assets from a separate file or URL to reduce initial download time or allow for interchangeable game content.",846],["Unity supports Resource Folders in the project to allow content to be supplied in the main game file yet not be loaded until requested. You can also create Asset Bundles. These are files completely separate from the main game file which contain assets to be accessed by the game on demand from a file or URL.",846],["Asset Bundles",846],["An Asset Bundle is an external collection of assets. You can have many Asset Bundles and therefore many different external collections of assets. These files exist outside of the built Unity player, usually sitting on a web server for end-users to access dynamically.",846],["To build an Asset Bundle, you call BuildPipeline.BuildAssetBundles() from inside an Editor script. In the arguments, you specify an array of Objects to be included in the built file, along with some other options. This will build a file that you can later load dynamically in the runtime by using AssetBundle.LoadAsset().",846],["Resource Folders",846],["Resource Folders are collections of assets that are included in the built Unity player, but are not necessarily linked to any GameObject in the Inspector.",846],["To put anything into a Resource Folder, you simply create a new folder inside the Project View, and name the folder \"Resources\". You can have multiple Resource Folders organized differently in your Project. Whenever you want to load an asset from one of these folders, you call Resources.Load().",846],["Note:",846],["All assets found in the Resources folders and their dependencies are stored in a file called resources.assets. If an asset is already used by another level it is stored in the .sharedAssets file for that level.",846],["Only assets that are in the Resources folder can be accessed through Resources.Load(). However many more assets might end up in the \"resources.assets\" file since they are dependencies. (For example a Material in the Resources folder might reference a Texture outside of the Resources folder)",846],["Resource Unloading",846],["You can unload resources of an AssetBundle by calling AssetBundle.Unload() or AssetBundle.UnloadAsync(bool). If you pass true for the unloadAllLoadedObjects parameter, both the objects held internally by the AssetBundle and the ones loaded from the AssetBundle using AssetBundle.LoadAsset() will be destroyed and memory used by the bundle will be released.",846],["Sometimes you may prefer to load an AssetBundle, instantiate the objects desired and release the memory used up by the bundle while keeping the objects around. The benefit is that you free up memory for other tasks, for instance loading another AssetBundle. In this scenario you would pass false as the parameter. After the bundle is destroyed you will not be able to load objects from it any more.",846],["If you want to destroy scene objects loaded using Resources.Load() prior to loading another level, call Object.Destroy() on them. To release assets, use Resources.UnloadUnusedAssets().",846],["Loading texture and mesh data",847],["Unity can load texture and mesh data from disk and upload it to the GPU in two different ways: synchronously or asynchronously. These two processes are called the synchronous upload pipeline and the asynchronous upload pipeline.",847],["When Unity uses the synchronous upload pipeline, it cannot perform other tasks while it loads and uploads the data. This can cause visible pauses in your application. When Unity uses the asynchronous upload pipeline, it can perform other tasks while it loads and uploads the data in the background.",847],["If a texture or mesh is eligible for the asynchronous upload pipeline, Unity uses the asynchronous upload pipeline automatically. If a texture or mesh is ineligible for the asynchronous upload pipeline, Unity uses the synchronous upload pipeline automatically.",847],["How it works",847],["The main difference between the synchronous and asynchronous upload pipelines is where Unity saves the data at build time, which affects how Unity loads it at runtime.",847],["In the synchronous upload pipeline, Unity must load both the metadata (header data) and the texel or vertex data (binary data) for the texture or mesh in a single frame. In the asynchronous upload pipeline, Unity must load only the header data in a single frame, and it can stream the binary data to the GPU over subsequent frames.",847],["In the synchronous upload pipeline:",847],["At build time, Unity writes both the header and the binary data for the mesh or texture to the same .res file.",847],["At runtime, when the application needs the texture or mesh, Unity loads both the header data and binary data for that texture or mesh from the .res file into memory. When all of the data is in memory, Unity then uploads the binary data from memory to the GPU. The loading and uploading operations occur mainly on the main thread, in a single frame.",847],["In the asynchronous upload pipeline:",847],["At build time, Unity writes the header data to a .res file and the binary data to a separate .resS file.",847],["At runtime, when the application needs the texture or mesh, Unity loads the header from the .res file into memory. When the header is in memory, Unity then streams the binary data from the .resS file to the GPU using a fixed-sized ring buffer. Unity streams the binary data using multiple threads, over the course of several frames. Note that on some console platforms where Unity already knows the GPU hardware, Unity skips the ring buffer and loads straight into the GPU memory.",847],["Texture and mesh data eligibility",847],["A texture is eligible for the asynchronous upload pipeline if the following conditions are met:",847],["The texture is not read/write enabled.",847],["The texture is not in the Resources folder.",847],["If the build target is Android, LZ4 compression is enabled in the Project's Build Settings.",847],["Note that if you load a texture using LoadImage(byte[] data), this forces Unity to use the synchronous upload pipeline, even if the above conditions are met.",847],["A mesh is eligible for the asynchronous upload pipeline if the following conditions are met:",847],["The mesh is not read/write enabled.",847],["The mesh is not in the Resources folder.",847],["The mesh has no BlendShapes.",847],["Unity has not applied Dynamic Batching to the mesh, either because the mesh is ineligible for Dynamic Batching or because Dynamic Batching is disabled. For more information on Dynamic Batching, see Draw call batching.",847],["The mesh vertex/index data is not needed by a Particle System, a Terrain, or a Mesh Collider.",847],["The mesh has no bone weights.",847],["The mesh topology is not quads.",847],["The meshCompression for the mesh asset is set to Off.",847],["If the build target is Android, LZ4 compression is enabled in the Project's Build Settings.",847],["In all other circumstances, Unity loads textures and meshes synchronously.",847],["How to identify which upload pipeline Unity is using",847],["You can use the Profiler or another profiling tool to identify when Unity is using the asynchronous upload pipeline, by observing thread activity and profiler markers.",847],["The following indicate that Unity is using the asynchronous upload pipeline to upload textures or meshes:",847],["The AsyncUploadManager.ScheduleAsyncRead, AsyncReadManager.ReadFile, and Async.DirectTextureLoadBegin profiler markers.",847],["Activity on the AsyncRead thread.",847],["If you do not see this activity, then Unity is not using the asynchronous upload pipeline.",847],["Note that the following profiler markers do not indicate that Unity is using the asynchronous upload pipeline; Unity calls them to check whether any asynchronous upload work needs to occur:",847],["Initialization.AsyncUploadTimeSlicedUpdate",847],["AsyncUploadManager.AsyncResourceUpload",847],["AsyncUploadManager.ScheduleAsyncCommands",847],["Configuring the asynchronous upload pipeline",847],["You can configure these settings for the asynchronous upload pipeline. Note that you cannot configure settings for the synchronous upload pipeline.",847],["Async Upload Buffer",847],["Unity re-uses a single ring buffer to stream texture and mesh data to the GPU. This reduces the number of memory allocations required.",847],["The Async Upload Buffer determines the size of this ring buffer. It has a minimum size of 2 megabytes, and a maximum size of 2047 megabytes.",847],["Unity automatically resizes the buffer to fit the largest texture or mesh that is currently loading. This can be a slow operation, especially if Unity has to perform it more than once; for example, if you are loading many textures that are larger than the default buffer size. To reduce the number of times that Unity must resize the buffer, set this value to fit the largest value that you expect to load. This is usually the largest texture in the Scene.",847],["You can configure this value in the Quality settings window, or using the QualitySettings.asyncUploadBufferSize API.",847],["Async Upload Time Slice",847],["Async Upload Time Slice** is the amount of time the CPU spends uploading texture or mesh data to the GPU, in milliseconds per frame.",847],["A larger value means the data will be ready on the GPU sooner, but the CPU will spend more time on upload operations during those frames. Note that Unity only uses this time for uploading if there is data waiting in the buffer to be uploaded to the GPU; if there is no data waiting, Unity can use this time for other operations.",847],["You can configure this value in the Quality settings window, or using the QualitySettings.asyncUploadTimeSlice API.",847],["Further information",847],["For more information on uploading texture and mesh data asynchronously, see the Unity blog post Optimizing loading performance: Understanding the Async Upload Pipeline.",847],["Lightmaps and LOD",848],["This page provides advice on baking light into models that use Unity's LOD (level of detail) system.",848],["When you use the Progressive Lightmapper, there is no need to place Light Probes around an LOD Group to generate baked indirect lighting.",848],["Enlighten Baked Global Illumination can only compute direct lighting for lower LODs, and the LOD system must rely on Light Probes to sample indirect lighting.",848],["Enlighten Baked Global Illumination is deprecated and no longer visible in the user interface by default. See Lightmapping using Enlighten Baked Global Illumination for more information.",848],["If you do not place Light Probes, your lower LOD models may appear visually incorrect because they only receive direct light.",848],["To set up LOD models correctly for baked lighting, mark the LOD GameObjects as Contribute GI. To do this, select the GameObject, and at the top of the Inspector window, select the drop-down menu next to the Static checkbox:",848],["Use the Light Probes component to place Light Probes around the LOD GameObjects.",848],["Note**: Only the most detailed model affects the lighting on the surrounding geometry (for example, shadows or bounced light on surrounding buildings). In most cases this should not be a problem, because your lower level-of-detail models should closely resemble the highest level-of-detail model.",848],["LOD and Enlighten Realtime Global Illumination",849],["Objects with Receive Global Illumination set to Lightmaps have a lighting solution with lightmaps for baked direct and indirect lighting, and lightmaps for Enlighten Realtime Global Illumination. For more information about Receive Global Illumination, see the Mesh Renderer settings and the script reference for ReceiveGI.",849],["When you use Unity’s LOD system in a Scene where you have enabled Baked Global Illumination and Enlighten Realtime Global Illumination, the system lights the most detailed model out of the LOD Group as if it has the Contribute Global Illumination setting enabled and isn't part of the LOD group.\"",849],["Enlighten can only compute direct lighting for lower LODs and the LOD system must rely on Light Probes to sample indirect lighting.",849],["To enable the Editor to produce lightmaps with Enlighten, select the GameObject you want to affect, view its Renderer component in the Inspector window, and ensure that Contribute Global Illumination is enabled.",849],["For lower LODs in a LOD Group, you can only combine baked lightmaps with Enlighten Realtime Global Illumination from Light Probes or Light Probe Proxy Volumes, which you must place around the LOD Group.",849],["Log files",850],["Unity produces log files for the Editor, package manager, licensing, development players, and Hub. You can use these log files to understand where any problems happened in your application.",850],["Unity adds all messages, warnings, and errors from the Console window to the log files. To add your own messages to the Console window, and the logs, use the Debug class.",850],["Each operating system stores the log files in different locations. The default locations are outlined on this page, but you can also use certain command line arguments to control when and where Unity generates log files. For more information, see the Command line arguments documentation.",850],["Note:** Not all platforms support this feature. See platform specific documentation for further information.",850],["Editor-related log locations",850],["You can access the Editor logs from the console window. To do this, open a Console Window (menu: Window > General > Console) and select Open Editor Log from the Console window menu.",850],["You can access the other logs by using your operating system’s file manager application.",850],["Linux",850],["Log type Log location ",850],["",850],["Editor ~/.config/unity3d/Editor.log ",850],["Package manager ~/.config/unity3d/upm.log ",850],["Licensing client ~/.config/unity3d/Unity/Unity.Licensing.Client.log ",850],["Licensing audits ~/.config/unity3d/Unity/Unity.Entitlements.Audit.log ",850],["macOS",850],["On macOS, you can also access Unity’s logs via the Console.app utility",850],["Log type Log location ",850],["",850],["Editor ~/Library/Logs/Unity/Editor.log ",850],["Package manager ~/Library/Logs/Unity/upm.log ",850],["Licensing client ~/Library/Logs/Unity/Unity.Licensing.Client.log ",850],["Licensing audits ~/Library/Logs/Unity/Unity.Entitlements.Audit.log ",850],["Windows",850],["On Windows, the Package Manager and Editor logs are placed in folders which aren't shown in the Windows Explorer by default. To view the AppData folder, you must enable the Hidden Items setting on Windows. For more information on how to do this, see Microsoft’s documentation on View hidden files and folders in Windows.",850],["On Windows, a standard out stream doesn’t exist by default, so you must launch the Editor with a valid configured stdout stream, as a child process from a CI system. If you specify - to send outputto stdout, then you won’t see the output in the console window.",850],["Log type Log location ",850],["",850],["Editor %LOCALAPPDATA%\\Unity\\Editor\\Editor.log ",850],["Package manager User account: %LOCALAPPDATA%\\Unity\\Editor\\upm.log SYSTEM account: %ALLUSERSPROFILE%\\Unity\\Editor\\upm.log ",850],["Licensing client %LOCALAPPDATA%\\Unity\\Unity.Licensing.Client.log ",850],["Licensing audits %LOCALAPPDATA%\\Unity\\Unity.Entitlements.Audit.log ",850],["Crash files %TMP%\\CompanyName\\ProductName\\Crashes Note: You can overwrite the location of the folder location with the -crash-report-folder command line argument. ",850],["Player-related log locations",850],["To view the Player log, open a Console Window (menu: Window > General > Console) and select Open Player Log from the Console window menu. You can also navigate to the following folder:",850],["Operating system Player log location ",850],["",850],["Android To access the Player log for an Android application, use Android logcat. For more information, see View Android logs. ",850],["iOS Use the GDB console, or the Organizer Console through XCode to access iOS device logs. For more information on device logs, see Apple’s documentation. ",850],["Linux ~/.config/unity3d/CompanyName/ProductName/Player.log ",850],["macOS ~/Library/Logs/Company Name/Product Name/Player.logNote: You can also use the Console.app utility to find the log file. ",850],["Universal Windows Platform %USERPROFILE%\\AppData\\Local\\Packages\\<productname>\\TempState\\UnityPlayer.log ",850],["WebGL Unity writes the log output to your browser’s JavaScript console. ",850],["Windows %USERPROFILE%\\AppData\\LocalLow\\CompanyName\\ProductName\\Player.log ",850],["Unity Hub log locations",850],["You can access the Hub logs by using your operating system’s file manager application. You can also access these logs from within the Hub. For more information, see Hub documentation.",850],["Operating system Player log location ",850],["",850],["Linux ~/.config/UnityHub/logs/info-log.json ",850],["macOS ~/Library/Application\\ Support/UnityHub/logs/info-log.json ",850],["Windows %UserProfile%\\AppData\\Roaming\\UnityHub\\logs\\info-log.json ",850],["Loop optimization on Animation clips",851],["A common operation for people working with animations is to make sure they loop properly. For example, if a character is walking down a path, the walking motion comes from an Animation clip. The motion might last for only 10 frames but that motion plays in a continuous loop. In order to make the walking motion seamless, it must begin and end in a similar pose. This ensures there is no foot sliding or strange jerky motions.",851],["Animation clips can loop on pose, rotation, and position. Using the example of the walk cycle, you want the start and end points for Root Transform Rotation and Root Transform Position in Y to match. You don't want to match the start and end points for the Root Transform Position in XZ, because your character would never get anywhere if its feet keep returning to their horizontal pose.",851],["Unity provides match indicators and a set of special loop optimization graphs under the clip-specific import settings on the Animation tab. These provide visual cues to help you optimize where to clip the motion for each value.",851],["To optimize whether the looping motion begins and ends optimally, you can view and edit the looping match curves.",851],["",851],["Viewing loop optimization graphs",851],["In this example, the looping motion displays bad matches for the clip ranges, shown by the red and yellow indicators:",851],["To see the loop optimization graphs, click and hold either the start or end indicator on the timeline. The Based Upon and Offset values disappear and one curve for each loop basis appears:",851],["",851],["Optimizing looping matches",851],["Click and drag the start or end point of the Animation Clip until the point appears on the graph where the property is green. Unity draws the graph in green where it is more likely that the clip can loop properly.",851],["When you let go of the mouse button, the graphs disappear but the indicators remain:",851],["IUnityMemoryManager API reference",852],["This pages provides the API reference for the IUnityMemoryManager interface.",852],["CreateAllocator",852],["Declaration",852],["UnityAllocator* (UNITY_INTERFACE_API * CreateAllocator)(const char* areaName, const char* objectName);",852],["Parameters",852],["Parameter Description ",852],[":--------------- :-------------------------- ",852],["const char* areaName The name for the broad category for this allocator. ",852],["const char* objectName The name for this specific allocator. ",852],["Description",852],["Creates a new Allocator object which can allocate blocks of memory.",852],["DestroyAllocator",852],["Declaration",852],["void(UNITY_INTERFACE_API * DestroyAllocator)(UnityAllocator * allocator);",852],["Parameters",852],["Parameter Description ",852],[":--------------- :-------------------------- ",852],["UnityAllocator * allocator The allocator to delete. ",852],["Description",852],["Deletes an existing Allocator object.",852],["Allocate",852],["Declaration",852],["void* (UNITY_INTERFACE_API * Allocate)(UnityAllocator * allocator, size_t size, size_t align, const char* file, int32_t line);",852],["Parameters",852],["Parameter Description ",852],[":--------------- :-------------------------- ",852],["UnityAllocator * allocator The allocator to use for allocation. ",852],["size_t size How much memory to allocate, in bytes. ",852],["size_t align The alignment of the memory address for the resulting pointer. ",852],["const char* file The path to the source file where the call to make this allocation came from. Use the predefined macro FILE here. ",852],["int32_t line The line number in the source file where the call to make this allocation came from. Use the predefined macro LINE here. ",852],["Description",852],["Allocates a block of memory using an existing allocator. This method returns a pointer to the newly allocated memory.",852],["Deallocate",852],["Declaration",852],["void(UNITY_INTERFACE_API * Deallocate)(UnityAllocator * allocator, void* ptr, const char* file, int32_t line);",852],["Parameters",852],["Parameter Description ",852],[":--------------- :-------------------------- ",852],["UnityAllocator * allocator The allocator to use for deallocation. ",852],["void* ptr The pointer to the memory to be deallocated. ",852],["const char* file The path to the source file where the call to make this deallocation came from. Use the predefined macro FILE here. ",852],["int32_t line The line number in the source file where the call to make this deallocation came from. Use the predefined macro LINE here. ",852],["Description",852],["Deallocates the memory that the specified pointer points to. This doesn’t set the pointer to NULL.",852],["Reallocate",852],["Declaration",852],["void* (UNITY_INTERFACE_API * Reallocate)(UnityAllocator * allocator, void* ptr, size_t size, size_t align, const char* file, int32_t line);",852],["Parameters",852],["Parameter Description ",852],[":--------------- :-------------------------- ",852],["UnityAllocator * allocator The allocator to use for the reallocation operation. ",852],["void* ptr The pointer to the memory to be deallocated. ",852],["size_t size How much memory to allocate, in bytes. ",852],["size_t align The alignment of the memory address for the resulting pointer. ",852],["const char* file The path to the source file where the call to make this reallocation came from. Use the predefined macro FILE here. ",852],["int32_t line The line number in the source file where the call to make this reallocation came from. Use the predefined macro LINE here. ",852],["Description",852],["Reallocates an existing pointer to point to a different block of memory.",852],["Implementation example",852],["Below is an example implementation of the IUnityMemoryManager interface.",852],["```lang-csharp",852],["include \"IUnityInterface.h\"",852],["include \"IUnityMemoryManager.h\"",852],["include ",852],["static IUnityMemoryManager* s_MemoryManager = NULL;",852],["static UnityAllocator* s_Alloc = NULL;",852],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces * unityInterfaces)",852],["s_MemoryManager = unityInterfaces->Get();",852],["if (s_MemoryManager == NULL)",852],["return;",852],["// Create an allocator. This allows you to see the allocation root in the profiler when taking snapshots. Under NativePlugins - Plugin Backend Allocator",852],["// All memory allocated here also goes under kMemNativePlugin",852],["s_Alloc = s_MemoryManager->CreateAllocator(\"NativePlugins\", \"Plugin Backend Allocator\");",852],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()",852],["//Free allocator",852],["s_MemoryManager->DestroyAllocator(s_Alloc);",852],["s_Alloc = NULL;",852],["s_MemoryManager = NULL;",852],["void DoMemoryOperations()",852],["// Allocate 1KB memory",852],["void* mem = s_MemoryManager->Allocate(s_Alloc, 1 * 1024, 16, FILE, LINE);",852],["// Reallocate the same pointer with 2KB",852],["mem = s_MemManager->Reallocate(s_Alloc, mem, 2 * 1024, 16, FILE, LINE);",852],["// Delete allocated memory",852],["s_MemoryManager->Deallocate(s_Alloc, mem, FILE, LINE);",852],["Memory Manager API for low-level native plug-ins",853],["The IUnityMemoryManager memory manager API is a C++ interface that allows you to use Unity's memory management and memory profiling in native plug-ins.",853],["This API enables you to:",853],["Access Unity’s memory manager through a memory allocator.",853],["Track your plug-in’s memory use through Unity’s Memory Profiler package.",853],["These features make it easier to manage and profile your plug-in’s memory allocations when compared to the equivalent C++ memory management methods.",853],["The plug-in API is provided by the IUnityMemoryManager interface, which is declared in the IUnityMemoryManager.h header. The full reference for the API is available in this file. To find the header file:",853],["On Windows, Unity stores the header in the <UnityInstallPath>\\Editor\\Data\\PluginAPI folder of your Unity installation.",853],["On macOS, right-click on the Unity application, and select Show Package Contents. The header is in Contents\\PluginAPI.",853],["You should be familiar with the following concepts to use this API effectively:",853],["Track memory use in Unity",853],["To track your plug-in’s memory usage, use the Memory Profiler package to take a snapshot, then open the snapshot in the All Of Memory tab. When you use the IUnityMemoryManager to allocate memory, the Memory Profiler displays the plug-in's memory allocations under the area and object name you assigned when you created each allocator.",853],["The below screenshot shows the Memory Profiler package window displaying memory used by a native plug-in with memory allocated with the IUnityMemoryManager API. In this example, the method CreateAllocator was called, with \"MyNativePlugin\" as the areaName parameter, and \"MyPluginAllocator\" as the objectName parameter. For more information, see CreateAllocator.",853],["For more information, see Snapshots.",853],["Memory management limitations",853],["This API enables you to use Unity’s memory management system when you develop native plug-ins. This has major benefits as described above, but there are still limitations. Unity’s memory management system:",853],["Isn’t automatically managed; you need to allocate and deallocate the memory yourself.",853],["Isn’t tracked and cleaned up by a garbage collector.",853],["Since memory in native C++ isn’t managed, you need to keep track of any memory requirements your application has. This includes choosing the correct amount of memory to allocate and making sure you deallocate it when it’s no longer needed.",853],["The IUnityMemoryManager API impacts performance because each allocation requires a virtual call. To minimize this performance impact, use the API to allocate larger blocks of memory less frequently. To handle smaller and more frequent allocations, use this API to allocate a single larger block, then write your own code to manage the memory within this block. Don’t use this API for frequent small allocations.",853],["Additional resources",853],["Native Plug-in interface - Explains the base interface that this API inherits from.",853],["Native plug-ins - Explains what a native plug-in is.",853],["Memory allocator customization - Explains how to customize Unity's internal memory allocators.",853],["Low-level native plug-in Profiler API",854],["The Unity Profiler is a tool that you can use to analyze and improve the performance of your application. The Profiler carries out frame time analysis of function calls in native Unity code and managed code in your application. You can use the ProfilerMarker API to insert timing markers into your own code to get a better understanding of the performance of specific areas of your application.",854],["You can use the low-level native plug-in profiler API to extend the Profiler and profile the performance of native plug-in code, or to prepare profiling data to send to third-party profiling tools such as Razor (PS4), PIX (Xbox, Windows), Chrome Tracing, ETW, ITT, Vtune, or Telemetry. The low-level native plug-in Profiler APIs provide the following interfaces for communication between the Unity Profiler and external tooling:",854],["IUnityProfiler**: Use this interface to add instrumentation events to the Unity Profiler from C/C++ native plug-in code.",854],["IUnityProfilerCallbacks**: Use this interface to intercept Unity Profiler events and store or redirect them to other tools.",854],["IUnityProfiler API",854],["Use the IUnityProfiler plug-in API to add instrumentation to the C/C++ code of your native plug-ins.",854],["The plug-in API is represented by IUnityProfiler interface, which is declared in the IUnityProfiler.h header. Unity stores the header in the <UnityInstallPath>\\Editor\\Data\\PluginAPI folder of your Unity installation. (On macOS, right-click on the Unity application, and select Show Package Contents. The header is in Contents\\PluginAPI).",854],["Method Description ",854],["",854],["CreateMarker Creates a Profiler marker which represents a named instrumentation scope, which you can then use to generate instrumentation samples. ",854],["SetMarkerMetadataName Specifies custom parameter names which can be passed along with an instrumentation sample for a Profiler marker. ",854],["BeginSample Begins an instrumentation section of a code named after the Profiler marker. ",854],["EndSample Ends an instrumentation section. ",854],["EmitEvent Emits generic events with metadata. ",854],["IsEnabled Returns 1 if the Profiler is capturing the data. ",854],["IsAvailable Returns 1 for Editor or Development Players where the Profiler is available, and 0 for Release Players. ",854],["RegisterThread Registers the current thread under the specified name. ",854],["UnregisterThread Unregisters the current thread from Profiler.\\",854],["Usage example",854],["This example generates Profiler events that are then shown in the Profiler Window.",854],["```lang-csharp",854],["include ",854],["include ",854],["static IUnityProfiler* s_UnityProfiler = NULL;",854],["static const UnityProfilerMarkerDesc* s_MyPluginMarker = NULL;",854],["static bool s_IsDevelopmentBuild = false;",854],["static void MyPluginWorkMethod()",854],["if (s_IsDevelopmentBuild)",854],["s_UnityProfiler->BeginSample(s_MyPluginMarker);",854],["// Code I want to see in Unity Profiler as \"MyPluginMethod\".",854],["// ...",854],["if (s_IsDevelopmentBuild)",854],["s_UnityProfiler->EndSample(s_MyPluginMarker);",854],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces)",854],["s_UnityProfiler = unityInterfaces->Get();",854],["if (s_UnityProfiler == NULL)",854],["return;",854],["s_IsDevelopmentBuild = s_UnityProfiler->IsAvailable() != 0;",854],["s_UnityProfiler->CreateMarker(&s_MyPluginMarker, \"MyPluginMethod\", kUnityProfilerCategoryOther, kUnityProfilerMarkerFlagDefault, 0);",854],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()",854],["s_UnityProfiler = NULL;",854],["IUnityProfilerCallbacks API callbacks",854],["The native Profiler plug-in API provides an interface between Unity’s subsystems and third-party profiling APIs so you can use an external profiling tool to profile your Unity application. The IUnityProfilerCallbacks header exposes the API, which Unity stores in the <UnityInstallPath>\\Editor\\Data\\PluginAPI folder of your Unity installation. (On macOS, right-click on the Unity application, and select Show Package Contents. The header is in Contents\\PluginAPI).",854],["The following Unity Profiler features help capture instrumentation data so you can analyze the performance of your application.",854],["Profiler feature Description ",854],["",854],["Categories Unity groups profile data into categories (such as Rendering, Scripting and Animation), and assigns a color to each category. Color-coded categories help you visually distinguish the types of data in the Profiler window. The Profiler native plug-in API retrieves these colors so you can use them in an external profiling tool. ",854],["Usage flags Usage flags act as a filter that reduce the amount of data that Unity sends to an external profiling tool. You can use usage flags to remove unnecessary information from the profiling data before Unity sends it to the external tool. The Profiler applies the following usage flags to event markers so that you can filter the data:Availability flagsthat flag whether a marker is available in the Unity Editor, a development player, or a release player.Verbosity levels that correlate to the type of the task you are doing in the Editor, and the level of information that task requires (for example, internal, debug, or user level). ",854],["Frame events You can use the Profiler native plug-in API to perform frame-time analysis in an external profiling tool. ",854],["Thread profiling Unity does a significant amount of work on threads (for example, the main thread, render thread and job system worker thread). You can use the Profiler native plug-in API to enable profiling on any thread. ",854],["To use the instrumentation data that the Unity Profiler generates in an external profiler, you can use these minimal set of callbacks in your C/C++ plug-in code that integrates the third-party profiler:",854],["Callback Function ",854],["",854],["RegisterCreateCategoryCallback Registers a IUnityProfilerCreateCategoryCallback callback to get the Profiler category name and color whenever Unity creates a category. ",854],["RegisterCreateMarkerCallback Registers a IUnityProfilerCreateMarkerCallback callback which is called whenever Unity creates a marker. Use it to get the name, Profiler category, and usage flags of a marker. The const UnityProfilerMarkerDesc* markerDesc parameter of the callback function represents a persistent pointer to the marker description which you can use to filter markers in RegisterMarkerEventCallback. ",854],["RegisterMarkerEventCallback Registers a IUnityProfilerMarkerEventCallback callback that Unity invokes when single-shot, scoped, memory allocation, or garbage collection events happen. You can then use this callback to invoke the relevant functions in an external profiling tool. Note: Unity represents memory allocation events with the GC.Alloc marker, and garbage collection events with the GC.Collect markers. ",854],["RegisterFrameCallback Encapsulates samples into logical frames so external profiling tools that don’t use frames can use these samples. Also registers a callback that the Unity Profiler runs when Unity starts the next logical CPU frame. ",854],["RegisterCreateThreadCallback Registers a callback to get the internal thread name whenever Unity registers a thread for profiling. ",854],["Usage example",854],["This example shows you how to pass Unity Profiler events to another profiler which has push/pop semantics. It provides two functions:",854],["void MyProfilerPushMarker(const char* name) - pushes a named marker.",854],["void MyProfilerPopMarker() - pops instrumentation marker.",854],["The following example provides the minimal implementation required to pass begin and end instrumentation events from the Unity Profiler to the external profiler:",854],["```lang-csharp",854],["include ",854],["include ",854],["static IUnityProfilerCallbacks* s_UnityProfilerCallbacks = NULL;",854],["static void UNITY_INTERFACE_API MyProfilerEventCallback(const UnityProfilerMarkerDesc* markerDesc, UnityProfilerMarkerEventType eventType, unsigned short eventDataCount, const UnityProfilerMarkerData* eventData, void* userData)",854],["switch (eventType)",854],["case kUnityProfilerMarkerEventTypeBegin:",854],["MyProfilerPushMarker(markerDesc->name);",854],["break;",854],["case kUnityProfilerMarkerEventTypeEnd:",854],["MyProfilerPopMarker();",854],["break;",854],["static void UNITY_INTERFACE_API MyProfilerCreateMarkerCallback(const UnityProfilerMarkerDesc* markerDesc, void* userData)",854],["s_UnityProfilerCallbacks->RegisterMarkerEventCallback(markerDesc, MyProfilerEventCallback, NULL);",854],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces)",854],["s_UnityProfilerCallbacks = unityInterfaces->Get();",854],["s_UnityProfilerCallbacks->RegisterCreateMarkerCallback(&MyProfilerCreateMarkerCallback, NULL);",854],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()",854],["s_UnityProfilerCallbacks->UnregisterCreateMarkerCallback(&MyProfilerCreateMarkerCallback, NULL);",854],["s_UnityProfilerCallbacks->UnregisterMarkerEventCallback(NULL, &MyProfilerEventCallback, NULL);",854],["Note:** To unregister the given callback from all markers, run UnregisterEventCallback with the first parameter set to null.",854],["UnitySystracePlugin example",854],["You can register and unregister marker callbacks dynamically, once every frame. The following example minimizes profiling overhead by enabling and disabling callbacks, depending on a third party profile state.",854],["```lang-csharp",854],["static void UNITY_INTERFACE_API SystraceFrameCallback(void* userData)",854],["bool isCapturing = ATrace_isEnabled();",854],["if (isCapturing != s_isCapturing)",854],["s_isCapturing = isCapturing;",854],["if (isCapturing)",854],["s_UnityProfilerCallbacks->",854],["RegisterCreateMarkerCallback(SystraceCreateEventCallback, NULL);",854],["else",854],["s_UnityProfilerCallbacks->",854],["UnregisterCreateMarkerCallback(SystraceCreateEventCallback, NULL);",854],["s_UnityProfilerCallbacks->",854],["UnregisterMarkerEventCallback(NULL, SystraceEventCallback, NULL);",854],["Note:** To unregister the given callback from all markers, run UnregisterEventCallback with the first parameter set to null.",854],["Special markers",854],["Unity has the following special markers that contain useful metadata:",854],["Profiler.DefaultMarker",854],["GC.Alloc",854],["Profiler.DefaultMarker",854],["The Profiler.DefaultMarker is a marker that Unity reserves for Profiler.BeginSample and Profiler.EndSample events.",854],["In the example above, kUnityProfilerMarkerEventTypeBegin eventType corresponds to the Profiler.BeginSample event and has the following data:",854],["Int32: The UnityEngine.Object instance ID. This is 0 if the object is not specified.",854],["UInt16 array: The UTF16 string that is passed to Profiler.BeginSample. The size is in bytes.",854],["UInt32: The category index.",854],["GC.Alloc",854],["GC.Alloc is a marker that corresponds to garbage collection allocation. It has the following data:",854],["Int64: The size of the allocation.",854],["Low-level native plug-in rendering extensions",855],["On top of the low-level native plug-in interface, Unity also supports low level rendering extensions that can receive callbacks when certain events happen. This is mostly used to implement and control low-level rendering in your plug-in and enable it to work with Unity’s multithreaded rendering.",855],["Due to the low-level nature of this extension the plug-in might need to be preloaded before the devices get created. Currently the convention is name-based; the plug-in name must begin GfxPlugin (for example: GfxPluginMyNativePlugin).",855],["The rendering extension definition exposed by Unity is in the file IUnityRenderingExtensions.h, provided with the Editor (see file path Unity\\Editor\\Data\\PluginAPI).",855],["All platforms supporting native plug-ins support these extensions.",855],["Rendering extensions API",855],["To take advantage of the rendering extension, a plug-in should export UnityRenderingExtEvent and optionally UnityRenderingExtQuery. There is a lot of documentation provided inside the include file.",855],["plug-in callbacks on the rendering thread",855],["A plug-in gets called via UnityRenderingExtEvent whenever Unity triggers one of the built-in events. The callbacks can also be added to CommandBuffers via CommandBuffer.IssuePluginEventAndData or CommandBuffer.IssuePluginCustomBlit from scripts.",855],["New feature in Unity 2017.1 NewIn20171",855],["2017-07-04 ",855],["Low-level native plug-in Shader compiler access",856],["On top of the low-level native plug-in interface, Unity also supports low level access to the shader compiler, allowing the user to inject different variants into a shader. It is also an event driven approach in which the plug-in will receive callbacks when certain builtin events happen.",856],["The shader compiler access extension definition exposed by Unity is to be found in IUnityShaderCompilerAccess.h and it’s provided with the editor.",856],["These extensions are supported for now only on D3D11. Support for more platforms will follow.",856],["Shader compiler access extension API",856],["In order to take advantage of the rendering extension, a plug-in should export UnityShaderCompilerExtEvent. There is a lot of documentation provided inside the include file.",856],["A plug-in will get called via UnityShaderCompilerExtEvent whenever one of the builtin events is triggered by Unity. The callbacks can also be added to CommandBuffers via CommandBuffer.IssuePluginEventAndData or CommandBuffer.IssuePluginCustomBlit command from scripts.",856],["In addition to the basic script interface, Native Code plug-ins in Unity can receive callbacks when certain events happen. This is mostly used to implement low-level rendering in your plug-in and enable it to work with Unity’s multithreaded rendering.",856],["Headers defining interfaces exposed by Unity are provided with the editor.",856],["Shader compiler access configuration interface",856],["Unity provides an interface (IUnityShaderCompilerExtPluginConfigure) to which the shader compiler access is configured. This interface is used by the plug-in to reserve its own keyword(s) and configure shader program and gpu program compiler masks ( For what types for shader or GPU programs the plug-in should be invoked )",856],["New feature in Unity 2017.1 NewIn20171",856],["2017-07-04 ",856],["Code sign and notarize your macOS application",857],["This section has information on code signing and notarization for your macOS application.",857],["Topic Description ",857],["",857],["Code signing your application Describes the steps required to code sign your macOS application. ",857],["Notarize with Xcode and command-line tools Explains the process of notarizing your macOS application with Xcode and command line tools. ",857],["Notarize with altool Explains the process of notarizing your macOS application with altool. ",857],["Build a macOS application",858],["This page has instructions and considerations on building your Unity application for macOS.",858],["Target architecture",858],["Before you build an application for macOS, be aware of the chipset differences between Apple devices. Some Apple devices use Intel chipsets and others use Apple silicon. You can use Unity to create both architecture-specific builds and builds that target both Intel and Apple silicon. The available target architectures are:",858],["Architecture Description ",858],["",858],["Intel 64-bit Use Intel 64-bit to build for Apple devices with Intel chipsets. ",858],["Apple silicon Select Apple silicon to build for Apple devices that use the silicon architecture. ",858],["Intel 64-bit + Apple silicon Use Intel 64-bit + Apple silicon to generate a macOS build that works on both Intel chipsets and Apple silicon.Note: This results in a build that's larger than the individual architecture-specific builds, impacting the application size. ",858],["You can set the target architecture for your application from the macOS build settings window.",858],["",858],["Build the application",858],["To build your Unity application:",858],["Open the Build Settings window (menu: File > Build Settings).",858],["In the Platforms list, select PC, Mac & Linux Standalone.",858],["Set Target Platform to macOS. If macOS isn't an option, add the Mac Build Support module to your Unity Editor install. For information on how to install modules, refer to Add modules.",858],["Set Architecture to the architecture type you want Unity to build your application for.",858],["If you want to create an Xcode project for your application, enable Create Xcode Project.",858],["Click Build.",858],["Note**: If building a macOS application on Windows, you must set the executable flag for the binary before opening the application on macOS.",858],["",858],["Information property list file",858],["macOS applications require an information property list file called Info.plist that has metadata and configuration information for the application. The file holds a list of key-value pairs.",858],["When Unity builds your application, it creates the Info.plist file. Unity stores this file at ApplicationName.app > Contents > Info.plist. Unity displays required Info.plist configuration properties in the Player Settings window that you can set before building the application. These properties are in the Other Settings > Mac App Store Options section.",858],["There are additional keys that you can add to your Info.plist file. To add them, build the application and use a text editor to edit the file. For information about the available keys, refer to About Info.plist Keys and Values.",858],["",858],["Entitlements",858],["macOS applications require entitlements to specify permissions and restrictions that control specific actions of your application. Your application must include entitlements that result in a Hardened Runtime. These entitlements protect your application from code injection, hijacking of dynamically linked libraries, and memory tampering.",858],["To define entitlements, macOS applications use an XML file with the .entitlements file extension. macOS applications then use a process called code signing to bind the entitlements to an application.",858],["If your application uses plug-ins that perform macOS platform-specific actions, you might need to add entitlements to enable those actions. For more information on what actions require entitlements, refer to Apple Developer Entitlements.",858],["",858],["",858],["Code signing & notarization",858],["Code signing is the process of creating a code signature for an application. This signature guarantees the integrity of applications and safeguards from any tampering. Apple devices use an application’s code signature to detect changes made after the developer created the code signature. If an application doesn’t have a code signature, the device warns the end user before they open the application. Unity automatically code signs any application it builds for macOS.",858],["Notarization is the process Apple uses to check that Developer ID-signed applications don’t contain malicious content. Digital distribution services often require you to notarize your application before you can share it on their platform. The Mac App Store has a content validation system that's similar to notarization, which means that applications distributed through the store don't require prior notarization.",858],["Refer to Code sign and notarize your macOS application for more information.",858],["Additional resources",858],["Build and distribute a macOS application",859],["This section has information about how to build and publish your macOS application.",859],["Topic Description ",859],["",859],["Build a macOS application Build a Unity application for macOS. ",859],["macOS build settings Reference documentation for macOS build settings. ",859],["Code sign and notarize your macOS application Details the process of code signing and notarization for macOS applications. ",859],["Deliver macOS applications to the Mac App Store Explains Mac App Store specific delivery requirements and considerations. ",859],["Deliver applications to the Mac App Store",860],["This page has information about Mac App Store delivery requirements.",860],["Delivery requirements",860],["If you want to distribute your application to the Mac App Store, then the upload process includes a similar content validation to notarization, which means that you don't have to notarize your application. However, when you build your macOS application, the Mac App Store has additional requirements.",860],["Validation",860],["Before you build your application, enable the Mac App Store Validation property. To do this:",860],["Open Project Settings (menu: Edit > Project Settings).",860],["Go to Player > Other Settings > Mac App Store Options.",860],["Enable Mac App Store Validation.",860],["Enabling the Mac App Store Validation option means that your application only runs when it holds a valid receipt from the Mac App Store. It prevents people from running the application on a different computer than the one they purchased.",860],["Signing identity",860],["To distribute your application via the Mac App Store, Apple requires you to use one of the following signing identities when you code sign your application:",860],["Signing Identity Format ",860],["",860],["Mac App Distribution 3rd Party Mac Developer Application: TTT ",860],["Apple Distribution Apple Distribution: TTT ",860],["Note**: Replace TTT with your team identity.",860],["Submit a macOS application",860],["For information on how to submit your application to the Mac App Store, refer to the",860],["Submit and promote section in Submitting apps to the Mac App Store.",860],["Additional resources",860],["macOS build settings",861],["Use the macOS build settings to configure and build your application for macOS.",861],["The macOS build settings are part of the Build Settings window. To view the settings:",861],["Select File > Build Settings.",861],["From the list of platforms in the Platform panel, choose Windows, Mac, Linux.",861],["In the Target Platform list, choose macOS",861],["Note**: If the Build button isn’t visible and Build And Run is unavailable, select Switch Platform.",861],["Use these settings to configure how Unity builds your application.",861],["Setting Function ",861],["",861],["Target platform Select your desired build platform. ",861],["Architecture Select the CPU to build for (only applies to Build And Run). ",861],["Intel 64-bit Use Intel/AMD 64-bit CPU architecture. ",861],["Apple Silicon Use Apple's Silicon Architecture. ",861],["Intel 64-bit + Apple Silicon Use both architectures. ",861],["Create Xcode Project Create an Xcode project when building your Unity project. ",861],["Run in Xcode as Select whether Xcode runs your Project as a Release or Debug build. ",861],["Release Build an optimized version of your app. ",861],["Debug Build a testing version of your app that has additional code that helps with debugging. ",861],["Development Build Include scripting debug symbols and the Profiler in your build. Use this setting when you want to test your application.When you select this option, Unity sets the DEVELOPMENT_BUILD scripting define. Your build then includes preprocessor directives that set DEVELOPMENT_BUILD as a condition (refer to Platform-dependent compilations). ",861],["Autoconnect Profiler Automatically connect the Unity Profiler to your build.Note: This option is only available if you selected Development Build. ",861],["Deep Profiling Support Enable Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application so it returns more detailed profiling data. This option might slow down script execution.Note: This option is only available if you selected Development Build. ",861],["Script Debugging Enable debugging for the application’s script code.Note: This option is only available if you selected Development Build. ",861],["Wait for Managed Debugger Indicates whether the application waits for a debugger to attach before it runs any script code.Note: This option is only available if you selected Script Debugging. ",861],["Compression Method Compress the data in your Project when you build the Player. This includes Assets, Scenes, Player settings, and GI data. ",861],["Default On PC, Mac, Linux Standalone, and iOS, there is no default compression. ",861],["LZ4 A fast compression format that's useful for development builds. For more information, refer to BuildOptions.CompressWithLz4. ",861],["LZ4HC A high compression variant of LZ4 that's slower to build but produces better results for release builds. For more information, refer to BuildOptions.CompressWithLz4HC. ",861],["Asset import overrides",861],["Use Asset Import Overrides to locally override all texture import settings to speed up import and platform switching time. Avoid shipping your final build with any import overrides. Use this setting during development to speed up iteration time if assets such as low resolution textures aren't of any concern.",861],["Setting Function ",861],["",861],["Max Texture Size Override the maximum imported texture size. Unity imports textures in the lower of two values: this value, or the Max Size value specified in Texture import settings. The time it takes to import a texture is proportional to the amount of pixels it has; reducing maximum allowed texture size can speed up the import times. As this setting might result in lower resolution textures, use it only for development purposes. ",861],["Texture Compression Override the texture compression options set in Texture import settings. This only affects textures imported into one of the compressed texture formats. ",861],["Force Fast Compressor Use a faster yet lower quality texture compression mode for formats where this is applicable (BC7, BC6H, ASTC, ETC, ETC2). Typically, this results in more compression artifacts, but for many formats the compression itself is many times faster (2 to 20 times faster). This setting also disables the Crunch texture compression format on any textures that have it. The effect is the same as if all textures had their Compressor Quality set to Fast setting in their platform's Texture import settings. ",861],["Force Uncompressed Don't compress the textures; use uncompressed formats instead. Note that while this is faster to import because it skips the whole texture compression process, the resulting textures take up more memory, game data size, and can impact rendering performance. Texture import settings. This option has the same effect as all textures that have their Compression set to None in their platforms' Texture Import settings. ",861],["You can also set Asset import override settings using -overrideMaxTextureSize and -overrideTextureCompression command line arguments to change any initial application import.",861],["Code sign your application",862],["Code signing is the process of creating a code signature for an application. This signature guarantees the integrity of applications and safeguards from any tampering. Apple devices use an application’s code signature to detect changes made after the developer created the code signature. If an application doesn’t have a code signature, the device warns the user before they open it.",862],["Note**: You must code sign your application to notarize it with the Xcode command-line or Unity Build Automation.",862],["",862],["Create a signing identity",862],["Unity adds a code signature to every macOS build it produces, known as a Signing Identity. To notarize an application, Apple requires the code signature to include a cryptographic signature, such as a Developer ID certificate, that identifies the developer.",862],["To create a new Developer ID certificate, use the following steps:",862],["Go to Create a New Certificate.",862],["Follow the prompts to create a private key and upload a Certificate Signing Request.",862],["Download your Developer ID certificate. The file format for this certificate is .cer.",862],["Click on the certificate to add it to your Keychain. Within the Keychain, it appears with a name formatted like: Developer ID Application : XXX (YYY).",862],["",862],["Locate the application identifier",862],["To notarize your application, Apple needs to identify it using an application identifier. There are two ways to get an application identifier: in Unity, or in the application's information property list file.",862],["In Unity:",862],["Go to Edit > Project Settings > Player.",862],["Expand the Other Settings section",862],["Navigate to Mac App Store Options.",862],["The Bundle Identifier property is your application identifier.",862],["In the information property list file:",862],["In the Finder, go to your built application.",862],["Right-click on the application and select Show Package Contents.",862],["Go to Contents and",862],["Open Info.plist.",862],["The key that represents the application identifier is CFBundleIdentifier.",862],["When you have your application identifier, you can register it with Apple. To do this, use the following steps:",862],["Sign in to your Apple Developer account.",862],["Select Certificates, IDs & Profiles.",862],["Select Identifiers",862],["Enter your bundle ID.",862],["",862],["Create entitlements",862],["Entitlements are permissions or restrictions your code signature includes that control the actions your application can take.",862],["To set entitlements for your application, use the following steps:",862],["In the same directory as your built application, create a file with the same name as your application with the .entitlements file extension. For example, if you name your application MyProject, create a file called MyProject.entitlements.",862],["Open the file with a text editor and copy in the following content:",862],["",862],["",862],["",862],["",862],["com.apple.security.cs.disable-library-validation",862],["",862],["com.apple.security.cs.disable-executable-page-protection",862],["",862],["",862],["",862],["These entitlements are the minimum entitlements a macOS application requires to have a Hardened Runtime. If your application requires any more entitlements, add them to this list.",862],["Code sign the application",862],["To code sign your application you need to use the command line. On your machine, open Terminal and navigate to the directory that the application is in.",862],["To ensure that you have the necessary read permissions to process code signing, run the following command where \"application_name.app\" is the name of your application:",862],["chmod -R a+xr \"application_name.app\"",862],["To code sign your application, run the following command where:",862],["\"application_name.app\" is your built application.",862],["\"application_name.entitlements\" is the name of the entitlements file.",862],["\"Developer ID Application : XXX (YYY)\" is your signing identity.",862],["codesign",862],["--deep",862],["--force",862],["--verify",862],["--verbose",862],["--timestamp",862],["--options runtime",862],["--entitlements \"application_name.entitlements\"",862],["--sign \"Developer ID Application : XXX (YYY)\" \"application_name.app\"",862],["This command works through the application bundle folder, signs all files, adds a secure timestamp, and embeds the entitlements you’ve set into the signature.",862],["Using the --deep option might cause issues with your code signature. This is because:",862],["It applies the same code signing options and entitlements to all the code that it signs.",862],["It only signs code files that it finds. If there are code files in a place where the system expects to find data, using --deep doesn't sign these code files.",862],["For more information about the --deep option and how to resolve issues with it, refer to Sign your code.",862],["Additional resources",862],["macOS development",863],["This section of the User Manual has macOS-specific development information.",863],["Topic Description ",863],["",863],["Deep linking for macOS Explains how to use deep linking on macOS. ",863],["Use IL2CPP with macOS Describes the use of plug-ins for macOS applications using IL2CPP. ",863],["Use IL2CPP with macOS",864],["Describes the use of plug-ins for macOS applications using Intermediate Language To C++ (IL2CPP).",864],["IL2CPP is a fully supported scripting back end that you can use as an alternative to Mono when building projects for macOS Player.",864],["When you use IL2CPP to build a project, Unity converts Intermediate Language (IL) code from scripts and assemblies to C++ before creating a native binary. Refer to IL2CPP for more information.",864],["C++ source code plug-ins for IL2CPP",864],["You can add C++ (.cpp) code files directly into a Unity Project when using the IL2CPP scripting back end. These C++ files act as plug-ins within the Inspector. If you configure the C++ files to be compatible with macOS Player, Unity compiles them together with C++ code that gets generated from managed assemblies. Refer to Import and configure plug-ins for more information on plug-in configuration.",864],["Generated C++ code links the functions together, removing the need for a separate Dynamic Link Library (DLL). Instead of using the DLL name, use the \"__Internal\" keyword to make the C++ linker responsible for resolving functions rather than loading them at runtime. For example:",864],["```lang-cpp",864],["[DllImport(\"__Internal\")]",864],["private static extern int",864],["CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);",864],["You can define this kind of function in NativeFunctions.cpp as follows:",864],["```lang-cpp",864],["extern \"C\" declspec(dllexport) int _stdcall CountLettersInString(wchart* str)",864],["int length = 0;",864],["while (*str++ != nullptr)",864],["length++;",864],["return length;",864],["When the linker resolves the function call, errors in the function declaration on the managed side result in a linker error rather than a runtime error. This means that no dynamic loading needs to happen during runtime, with the function called directly from C#. This decreases the performance overhead of a P/Invoke call.",864],["Additional resources",864],["Notarize with Xcode and command-line tools",865],["You must notarize your application to distribute it outside of the Mac App Store. The process verifies your application, ensuring it has a Developer ID code signature and doesn't contain malicious content. You can notarize your application with Xcode, Xcode command-line tools, or Unity Build Automation.",865],["Unity can create an Xcode project that represents your Unity project during the build process. You can use this Xcode project to notarize your application. Follow the macOS application build steps to create an Xcode project from your Unity project. For information on notarizing the Xcode project, refer to Notarizing macOS Software Before Distribution.",865],["Note**: Notarization isn't required to distribute your application through the Mac App Store. The Mac App Store’s upload process includes content validation similar to notarization. Refer to Delivering to the Mac App Store for more information.",865],["Use Xcode command-line tools",865],["If you can't notarize your application in the Xcode environment or want to control notarization manually, you can use Xcode's command-line tools.",865],["To do this, you need the following:",865],["An Apple ID.",865],["An Apple device that runs macOS 10.15 Catalina or later.",865],["Xcode 11 or later. This installs the required command-line tools.",865],["An Apple Developer Program membership. If you don't have an Apple Developer membership, sign up at Apple Developer.",865],["",865],["Compress the application",865],["Apple requires that you compress your application before you upload it for notarization. To do this, use the following steps:",865],["Open Terminal and navigate to the directory the application is in.",865],["Run the following command where:",865],["\"application_name.app\" is your built application.",865],["\"application_name.zip\" is the name of the compressed file to generate.",865],["ditto -c -k",865],["--sequesterRsrc",865],["--keepParent \"application_name.app\" \"application_name.zip\"",865],["This compresses your application and outputs the compressed file to the same directory as your application.",865],["",865],["Generate an application password",865],["To notarize an application, Apple requires a unique password in a particular format. For information on how to generate an application password, refer to How to generate an app-specific password. The password you generate uses the following format: xxxx-xxxx-xxxx-xxxx.",865],["Notarize your application",865],["If you are using Xcode 13 or later, use Apple's notarytool to upload and notarize your application. For more information, refer to Customizing the Notarization Workflow and Enable notarization on an older version of macOS.",865],["Note**: As of November 1st 2023, Apple have deprecated the use of altool for notarization. You must update your workflow to use notarytool to notarize your macOS applications. For more information, refer to Migrating to the latest notarization tool.",865],["",865],["Staple the application",865],["After notarizing your application, any device that runs it can verify that it has a code signature and has no malicious content. However, the device can only perform this verification online. To let a device verify your application without an internet connection, you must staple the application. For information about stapling, refer to Staple the Ticket to Your Distribution.",865],["To staple your application,",865],["Open Terminal and navigate to the directory the application is in.",865],["Run the following command where \"ApplicationName.app\" is the name of your application:",865],["xcrun stapler staple \"ApplicationName.app\"",865],["Additional resources",865],["Notarize with altool",866],["As of November 1st 2023, Apple have deprecated the use of altool for notarization. You must update your workflow to use notarytool to notarize your macOS applications.",866],["For more information, refer to Migrating to the latest notarization tool and Enable notarization on an older version of macOS.",866],["Additional resources",866],["Create and manage overlay configurations",867],["Save overlay configurations as presets that you can reuse and share.",867],["Save an overlay configuration",867],["Saved overlay presets are available in any Unity project on your computer.",867],["Overlay configurations are also saved when you save your Editor layout.",867],["To save your overlay configuration as a preset:",867],["In the Scene view, press the ` key to display the Overlays menu.",867],["In the dropdown in the Overlays menu, select Save Preset.",867],["In the Save Window Preset window, name your overlay preset.",867],["Click Save.",867],["",867],["Switch overlay configuration",867],["To switch your overlay configuration:",867],["In the Scene view, press the ` key to display the Overlays menu.",867],["In the dropdown in the Overlays menu, select an overlay preset.",867],["Export an overlay preset",867],["To export an overlay configuration, save it as a file and then import it into another project:",867],["In the Scene view, press the ` key to display the Overlays menu.",867],["In the dropdown in the Overlays menu, select Save Preset To File.",867],["Choose a location to save the preset to.",867],["Name your overlay preset.",867],["Click Save.",867],["Import an overlay preset",867],["To import an overlay preset into your project:",867],["In the Scene view, press the ` key to display the Overlays menu.",867],["In the dropdown in the Overlays menu, select Load Preset From File.",867],["Select an overlay preset file you want to import and click Open.",867],["Additional resources",867],["\nOverlays\n",867],["\nCustomizing your workspace\n",867],["Manage overlay layouts",868],["You can set an overlay to display in one of the following layouts:",868],["Collapsed**: Displays only the overlay's icon and a downward facing arrow. Click the arrow to display the content of the overlay. If the overlay has no icon, the icon of the collapsed container is the first two letters of the overlay's label. You can expand collapsed overlays.",868],["Panel**: Displays all the overlay's content and its label. You can't set overlays that are docked to the edges of the Scene view to Panel.",868],["Horizontal**: Displays the overlay's content in a horizontal container. An overlay set to the Horizontal layout doesn't display its label.",868],["Vertical**: Displays the overlay's content in a vertical container. An overlay set to the Vertical layout doesn't display its label.",868],["If you want to save your overlay configuration, refer to Create and manage overlay configurations.",868],["Change the layout of an overlay",868],["Overlays that are not toolbars, such as the Orientation overlay, cannot use the Horizontal or Vertical layouts.",868],["To change the layout of an overlay:",868],["Right-click the handle (=) of an overlay.",868],["Select a layout:",868],["If the overlay is not docked to an edge of the Scene view, you can select any layout.",868],["If the overlay is docked to an edge of the Scene view, you can only expand or collapse the overlay.",868],["",868],["Expand a collapsed overlay",868],["Overlays that aren't toolbars, such as the Orientation overlay, collapse when they are docked to an edge of the Scene view and can't be expanded.",868],["To expand an overlay, right-click the handle (=) of a collapsed overlay and select Expand.",868],["Additional resources",868],["\nOverlays\n",868],["\nPosition overlays\n",868],["\nCreate and manage overlay configurations.\n",868],["Debug C# code in Unity",869],["You can use a debugger to inspect your source code while your application is running. Unity supports the following code editors to debug C# code:",869],["Visual Studio (with the Visual Studio Tools for Unity plug-in)",869],["Visual Studio for Mac",869],["Jetbrains Rider",869],["Visual Studio Code (experimental)",869],["Although these code editors vary slightly in the debugging features they support, they all provide basic functionality such as break points, single stepping, and variable inspection. You can attach these code editors to the Unity Editor or Unity Player to debug your code.",869],["Managed code debugging in Unity works on all platforms except WebGL. It works with both the Mono and IL2CPP scripting backends.",869],[" Configure the code editor",869],["Visual Studio (Windows)",869],["The Unity Editor installer includes an option to install Visual Studio with the Visual Studio Tools for Unity plug-in. This is the recommended way to set up Visual Studio for debugging with Unity.",869],["If Visual Studio is already installed on your computer, open it and go to Tools > Get Tools and Features… to locate and install the Visual Studio Tools for Unity plug-in.",869],["Visual Studio for Mac",869],["The Unity Editor installer includes an option to install Visual Studio for Mac. This is the recommended way to set up Visual Studio for Mac for debugging with Unity.",869],["If Visual Studio for Mac is already installed on your computer, open it and go to Visual Studio > Extensions > Install from file... to locate and install the Visual Studio Tools for Unity plug-in.",869],["JetBrains Rider",869],["You can use the default installation of JetBrains Rider to debug code in Unity on Windows or Mac. Visit the JetBrains website to install it.",869],["Visual Studio Code",869],["To debug in Unity using Visual Studio Code, you need to install an extension. See Visual Studio Code’s documentation to configure Visual Studio Code as the code editor for your Unity project. Follow Visual Studio Code’s instructions specific to the Debugger for Unity extension to install it. Unity’s support for Visual Studio Code is experimental as Unity does not officially support the Debugger for Unity extension.",869],["Specify the External Script Editor in Unity",869],["Once you’ve installed a code editor, open Unity, go to Preferences > External Tools and set the External Script Editor to your code editor.",869],["Breakpoints",869],["Breakpoints allow you to specify points in your code where you want to pause its execution. In your external code editor, you can set a breakpoint on a line of code where you want the debugger to stop. While the code editor is at a breakpoint, you can view the contents of variables step by step.",869],["If you have attached your code editor to the Unity Editor (see Attach your code editor to the Unity Editor), the Unity Editor becomes unresponsive until you choose the continue option in your code editor, or stop debugging mode.",869],["To see how you can set breakpoints in Visual Studio see Set breakpoints in Visual Studio.",869],[" Debug in the Unity Editor",869],["You can debug C# code as it runs in the Unity Editor while the Unity Editor is in Play Mode.",869],["To debug in the Editor, you need to set the Editor’s Code Optimization mode to Debug Mode, then you can attach a code editor with a debugging feature.",869],["To change the Code Optimization mode, select the Debug Button in the bottom right of the Unity Editor Status Bar.",869],["Unity’s Code Optimization setting has two modes:",869],["Debug Mode**, which you can use to attach external debugger software, but gives slower C# performance when you run your Project in Play Mode in the Editor.",869],["Release Mode**, which gives faster C# performance when you run your Project in Play Mode in the Editor, but you cannot attach any external debuggers.",869],["When you click the Debug button in the status bar, a small pop-up window opens which contains a button you can use to switch modes. The window also displays information about the current mode, and describes what happens if you switch modes.",869],["To change which mode the Unity Editor starts up in, go to Edit (macOS: Unity) > Preferences > General > Code Optimization On Startup.",869],["To control these settings using a script, use the following API:",869],["You can also override the mode that the Editor starts up in, or turn off the debugger listen socket. To do this, use the following command line arguments when you launch the Editor:",869],["-releaseCodeOptimization. Starts the Editor in Release code optimization mode.",869],["-debugCodeOptimization. Starts the Editor in Debug code optimization mode.",869],["-disableManagedDebugger. Starts the Editor with the debugger listen socket disabled.",869],[" Attach your code editor to the Unity Editor",869],["The way to attach your code editor to the Unity Editor depends on what code editor you use, and is often a different option from your code editor’s normal debugging process. Some code editors allow you to select an instance of Unity to debug. For instructions specific to your code editor, see Code editor external documentation. To see how you can do this in Visual Studio, see Attach Visual Studio to the Unity Editor.",869],["When you have attached the code editor to the Unity Editor and you are ready to begin debugging, return to the Unity Editor and enter Play Mode.",869],[" Debug in the Unity Player",869],["To compile a Unity Player for you to debug:",869],["Go to File > Build Settings.",869],["Enable the Development Build and Script Debugging options before you build the Player. You could also enable the Wait For Managed Debugger option to make the Player wait for a debugger to be attached before the Player executes any script code.",869],["Select Build And Run.",869],["Attach your code editor to the Unity Player",869],["To attach your code editor to the Unity Player, in your code editor, select the IP address (or machine name) and port of your Player. For an example of where to find this in Visual Studio, see Attach Visual Studio to the Unity Editor.",869],["Note**: Your code editor will show all instances of Unity that are available to debug. Make sure you attach the code editor to the correct instance of the Unity Player, and not to the Unity Editor if both are running.",869],["When you have attached the debugger, you can begin debugging normally. For instructions on how to attach the Unity Player to your specific code editor, see Code editor external documentation. For an example of how to attach a Unity Player that runs on a mobile device to Visual Studio, see Debug Android and iOS devices with Visual Studio.",869],[" Set breakpoints in Visual Studio",869],["To set a breakpoint in Visual Studio, click on the column to the left of your code, on the line you want to stop the debugger. A red circle appears next to the line number and the line is highlighted.",869],[" Attach Visual Studio to the Unity Editor",869],["To attach the Unity Editor to your Visual Studio script, open Visual Studio, go to Debug > Attach Unity Debugger and select the instance of the Unity Editor you would like to debug.",869],["In the following example image, there is one instance of Unity running in the Editor and one instance of Unity running as an Android Player",869],[" Debug Android and iOS devices with Visual Studio",869],["Android",869],["To debug a Unity Player running on an Android device, connect to the device using USB or TCP. For example, to connect to an Android device in Visual Studio, select Debug > Attach Unity Debugger option. A list of devices running a Player instance appears.",869],["In this example, the android device is connected using USB and Wi-Fi on the same network as the workstation running the Unity Editor and Visual Studio.",869],["Android on ChromeOS",869],["Unity can’t automatically discover ChromeOS devices. To initiate a connection, connect to the device through Android Debug Bridge (adb). For more information about how to use adb, refer to the Android Studio User Guide.",869],["iOS",869],["To debug a Unity Player running on an iOS device, connect to the device using TCP. For example, to connect to an iOS device in Visual Studio for Mac, select Debug > Attach Unity Debugger. A list of devices running a Player instance appears.",869],["Ensure that the device only has one active network interface (Wi-Fi recommended, turn off cellular data) and that there is no firewall between the IDE and the device blocking the TCP port (port number 56000 in the above screenshot).",869],["Important**: iOS doesn't support debugging over USB.",869],["Troubleshoot the debugger",869],["Most problems with the debugger occur because the code editor is unable to locate the Unity Editor or the Unity Player. This means that the Unity Editor or Player can’t attach the debugger properly. Because the debugger uses a TCP connection to the Editor or Player, connection issues are often caused by the network. Below are a few steps you can take to troubleshoot basic connection issues.",869],["Ensure you attach the debugger to the correct Unity instance",869],["You can attach your code editor to any instance of the Unity Editor or Unity Player on the local network that has debugging enabled. When you attach the debugger, ensure that you attach it to the correct Unity instance. If you know the IP address or machine name of the device on which you are running the Unity Player, this helps to locate the correct instance.",869],["Verify the network connection to the Unity instance",869],["The code editor uses the same mechanism to locate a Unity instance to debug as the Unity Profiler. If the code editor can’t find the Unity instance you expect, try to attach the Unity Profiler to that instance. If the Unity Profiler cannot find the Unity instance either, there might be a firewall on the machine you are running the code editor or Unity instance on. If a firewall is in place, see Check the firewall settings.",869],["Ensure the device only has one active network interface",869],["Many devices have multiple network interfaces. For example, a mobile phone might have both an active cellular connection and an active Wi-Fi connection. To properly connect the debugger to the Unity instance using TCP, the IDE needs to make a network connection to the correct interface on the device. If you plan to debug over Wi-Fi, for example, make sure you put the device in airplane mode to disable all other interfaces, then enable Wi-Fi.",869],["You can determine which IP address the Unity Player tells the IDE to use by looking in the Player Log. Look for a part of the log like this:",869],["Multi-casting \"[IP] 10.0.1.152 [Port] 55000 [Flags] 3 [Guid] 2575380029 [EditorId] 4264788666 [Version] 1048832 [Id] iPhonePlayer(Example-iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer\" to [225.0.0.222:54997]...",869],["This message indicates the IDE will try to use the IP address 10.0.1.152 and port 56000 to connect to the device. This IP address and port must be reachable from the computer running the IDE.",869],[" Check the firewall settings",869],["The Unity instance communicates with the code editor using a TCP connection. On most Unity platforms, this TCP connection occurs on an arbitrarily chosen port. Normally, you shouldn’t need to know this port, as the code editor should detect it automatically. If that doesn’t work, use a network analysis tool to determine which ports might be blocked either on the machine where you are running the code editor, or the machine or device where you are running the Unity instance. When you find the ports, make sure that your firewall allows access to the port on both the machine running the code editor, and the machine running the Unity instance.",869],["Verify the managed debugging information is available",869],["If the debugger attaches to the Unity instance but breakpoints don’t load, the debugger might not be able to locate the managed debugging information for the code. Managed code debugging information is stored in files named .pdb, next to the managed assembly (.dll file) on the disk.",869],["When you enable the correct preferences and build options (see Configure the code editor), Unity generates this debugging information automatically. However, Unity cannot generate debugging information for managed plugins in your project. You can only debug code from managed plugins if the associated .pdb files are next to the managed plugins in the Unity project on disk.",869],["Prevent the device from locking",869],["Disable any screen locks on the device you are using to debug your application. Screen locks cause the debugger to disconnect, and prevent it from re-connecting. Don’t lock the screen during managed code debugging. If the screen locks, restart the application on the device so the debugger can connect again.",869],["Memory and thread leaks due to the debugger",869],["The implementation of the managed debugger will leak some OS-level thread handles and some memory related to threads in order to handle some race conditions related to thread startup and shutdown. In practice these leaks are small, and should not impact the resource usage of an application. However, when many threads are created and destroyed, the leaks can be noticeable. This behavior can also make it difficult to track down actual memory leaks, so we recommend disabling scripting debugging when troubleshooting memory leaks.",869],[" Code editor external documentation",869],["Visual Studio - Using Visual Studio Tools for Unity (Windows)",869],["Visual Studio for Mac - Using Visual Studio Tools for Unity (macOS)",869],["Jetbrains Rider - Debug Unity Applications",869],["Managed code stripping",870],["During the build process, Unity removes unused or unreachable code through a process called managed code stripping, which can significantly decrease your application’s final size. Managed code stripping removes code from managed assemblies, including assemblies built from the C# scripts in your project, assemblies that are part of packages and plugins, and assemblies in .NET Framework.",870],["Unity uses a tool called the Unity linker to perform a static analysis of the code in your project’s assemblies. The static analysis identifies any classes, portions of classes, functions, or portions of functions that can’t be reached during execution. This analysis only includes code that exists at build time because runtime generated code doesn’t exist when Unity performs the static analysis.",870],["You can configure the level of code stripping Unity performs for your project using the Managed Stripping Level setting. To prevent Unity removing specific parts of your code, use annotations to indicate which parts of your code base the Unity linker should preserve. For more information, see Unity linker.",870],["Configure managed code stripping",870],["The Managed Stripping Level property determines the set of rules that the Unity linker follows when it analyzes and strips your application’s code. As you increase the setting from Minimal to High, the rules enable the linker to search through more assemblies for unreachable code. The Unity linker removes more code at the higher settings which reduces the final size of your build, though the expanded search means that each build takes longer to produce.",870],["To change the Managed Stripping Level property:",870],["Go to Edit > Project Settings > Player.",870],["In Other Settings, navigate to the Optimization heading.",870],["Set the Managed Stripping Level property to the desired value.",870],["Property: Function: ",870],["Disabled Unity doesn’t remove any code.This setting is visible only and is the default setting if you use the Mono scripting backend. ",870],["Minimal Unity searches only the UnityEngine and the .NET class libraries for unused code. Unity doesn’t remove any user-written code. This setting is the least likely to cause any unexpected runtime behavior.This setting is useful for projects where usability is of higher priority than build size.This is the default setting if you use the IL2CPP scripting backend. ",870],["Low Unity searches some user-written assemblies and all UnityEngine and .NET class libraries for unused code. This setting applies a set of rules that removes some unused code but minimizes the likelihood of unintended consequences, such as changes in behavior of runtime code that uses reflection. ",870],["Medium Unity partially searches all assemblies to find unreachable code. This setting applies a set of rules that strips more types of code patterns to reduce the build size. Although Unity doesn’t strip all possible unreachable code, this setting does increase the risk of undesirable or unexpected behavior changes. ",870],["High Unity performs an extensive search of all assemblies to find unreachable code. At this setting, Unity prioritizes size reduction more than code stability and removes as much code as possible.This search can take much longer than for lower stripping levels. Use this setting only for projects where a compact build size is extremely important. Test your application thoroughly and make careful use of [Preserve] attributes and link.xml files to ensure that the Unity linker doesn’t strip vital code. ",870],["",870],["Preserve code using annotations",870],["You can use annotations to prevent the Unity linker from stripping specific sections of your code. This is helpful if your application produces runtime code which doesn’t exist when Unity performs the static analysis; for example, through reflection. Annotations either provide general guidance to the Unity linker about which code patterns it shouldn’t strip, or instructions not to strip a specific, defined section of code.",870],["There are two broad approaches you can use to annotate your code to preserve it from the managed code stripping process:",870],["Root annotations identify parts of your code as roots. The Unity linker doesn’t strip any code that is marked as a root. Root annotations are less complicated to use but can also lead to the Unity linker preserving some code that it should strip.",870],["Dependency annotations define the connections between code elements. Dependency annotations can reduce the amount of over preservation of code compared to root annotations.",870],["Each of these techniques provides more control over the amount of code that the Unity linker strips at higher stripping levels and reduces the chance of vital code being stripped. Annotations are especially useful when your code references other code through reflection, because the Unity linker can’t always detect uses of reflection.",870],["Preserve code that uses reflection or generates other code at runtime to significantly reduce the likelihood of unexpected behavior when your application is executed. For examples of reflection patterns that the Unity linker can recognize, see the Unity Intermediate Language Linker reflection test suite.",870],["",870],["Root annotations",870],["Root annotations force the Unity linker to treat code elements as roots, which aren’t stripped in the code stripping process. There are two types of root annotations you can use, depending on whether you need to preserve individual types with their constructors or assemblies:",870],["Preserve Attribute: Annotates individual types as roots to preserve them.",870],["Link.xml: Annotates assemblies and any types or other code entities within those assemblies as roots to preserve them.",870],["",870],["Annotate roots using the Preserve attribute",870],["Use the Preserve attribute to individually exclude specific sections of your code from the Unity linker’s static analysis. To annotate a piece of code with this attribute, add [Preserve] immediately before the first part of the code you want to preserve. The following list describes what entities the Unity linker preserves when you annotate different code elements with the [Preserve] attribute:",870],["Assembly**: Preserves all types that are used and defined in the assembly. To assign the [Preserve] attribute to an assembly, place the attribute declaration in any C# file included in the assembly, before any namespace declarations.",870],["Type**: Preserves a class or type and its default constructor.",870],["Method**: Preserves the method, the type that declares the method, the type the method returns, and the types of all of its arguments.",870],["Property**: Preserves the property, the type that declares the property, the value type of the property, and methods that get and set the property value.",870],["Field**: Preserves the field, the field type, and the type that declares the field.",870],["Event**: Preserves the event, the type that declares the event, type, the type the event returns, the [add] accessor, and the [remove] accessor.",870],["Delegate**: Preserves the delegate type and all methods that the delegate invokes.",870],["Use the [Preserve] attribute when you want to preserve both a type and its default constructor. If you want to keep one or the other but not both, use a link.xml file.",870],["You can define the [Preserve] attribute in any assembly and in any namespace. You can use the UnityEngine.Scripting.PreserveAttribute class, create a subclass of UnityEngine.Scripting.PreserveAttribute, or create your own PreserveAttribute class. For example:",870],["```csharp",870],["class Foo",870],["[Preserve]",870],["public void PreservedMethod(){}",870],["",870],["Annotate roots using a Link XML file",870],["You can include a .xml file entitled link.xml in your project to preserve a list of specific assemblies or parts of assemblies. The link.xml file must be present in the Assets folder or a subdirectory of the Assets folder in your project and must include the <linker> tag in the file. The Unity linker treats any assembly, type, or member preserved in a link.xml file as a root type.",870],["You can use any number of link.xml files in your project. As a result, you can provide separate preservation declarations for each plug-in. You can't include a link.xml file in a package, but you can reference package assemblies from non-package link.xml files.",870],["The following examples illustrate the different ways that you can declare the root types of a project’s assemblies using a link.xml file:",870],["```xml-doc",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["getter, and setter methods-->",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["The next example shows how you can declare entire assemblies:",870],["```xml-doc",870],["",870],["",870],["",870],["",870],["",870],["",870],["This example shows how to preserve either nested or generic types:",870],["```xml-doc",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["",870],["Additional Assembly XML attributes",870],["The <assembly> element of the link.xml file has three special-purpose attributes that you can enable for more control over the annotations.",870],["ignoreIfMissing: Use this attribute if you need to declare preservations for an assembly that doesn't exist during all Player builds.",870],["```xml-doc",870],["",870],["",870],["",870],["",870],["",870],["ignoreIfUnreferenced: In some cases, you might want to preserve entities in an assembly only when that assembly is referenced by another assembly. Use this attribute to preserve the entities in an assembly only when at least one type is referenced in an assembly.",870],["```xml-doc",870],["",870],["",870],["",870],["",870],["",870],["windowsruntime: When you define preservations for a Windows Runtime Metadata (.winmd) assembly, you must add the windowsruntime attribute to the <assembly> element in the link.xml file:",870],["```xml-doc",870],["",870],["",870],["",870],["",870],["",870],["",870],["Dependency annotations",870],["Dependency annotations define dependencies between various code elements. These annotations are useful for preserving code patterns that the Unity linker can’t statically analyze, such as reflection. These annotations also ensure that these code elements aren’t erroneously preserved when no root element uses them. There are two methods you can use to change how the Unity linker processes code elements:",870],["Annotation attributes: these attributes indicate that the Unity linker should preserve a particular code pattern, such as any type that derives from the annotated type.",870],["AlwaysLinkAssemblyAttribute: use this attribute to indicate that the Unity linker should process an assembly even if it’s not referenced by any other assemblies in your Project.",870],["",870],["Annotation attributes",870],["The [Preserve] attribute is useful for situations when an API is always needed. Other attributes can be useful for more general preservations. For example, you can preserve all types that implement a particular interface by annotating the interface with the RequireImplementorsAttribute.",870],["To annotate specific coding patterns, use one or more of the following attributes:",870],["RequireImplementorsAttribute: marks all types that implement this interface as dependencies.",870],["RequireDerivedAttribute: marks all types that derive from this type as dependencies.",870],["RequiredInterfaceAttribute: marks interface implementations on types as dependencies.",870],["RequiredMemberAttribute: marks all members of a type as dependencies.",870],["RequireAttributeUsagesAttribute: marks custom attributes as dependencies.",870],["You can combine these attributes in various ways to more precisely control how the Unity linker preserves your code.",870],["",870],["AlwaysLinkAssembly attribute",870],["The [assembly: UnityEngine.Scripting.AlwaysLinkAssembly] attribute forces the Unity linker to search an assembly regardless of whether or not the assembly is referenced by another assembly that is included in the build. You can apply the AlwaysLinkAssembly attribute only to an assembly.",870],["The attribute doesn’t directly preserve code within the assembly. Instead, this attribute instructs the Unity linker to apply the root marking rules to the assembly. If no code elements match the root marking rules for the assembly, the Unity linker still removes the assembly from the build.",870],["Use this attribute on precompiled or package assemblies that contain one or more methods with the [RuntimeInitializeOnLoadMethod] attribute, but which might not contain types used directly or indirectly in any Scenes in a project.",870],["If an assembly defines [assembly: AlwaysLinkAssembly] and is also referenced by another assembly included in the build, the attribute has no effect on the output.",870],["Manage your license through the command line",871],["To use Unity, you need an activated license. For Unity Plus and Unity Pro licenses, you need to get a serial number. For a Unity Personal license, you don't need a serial number.",871],["The primary license activation method for Unity Plus, Unity Pro, and Unity Personal is the Unity Hub. For information about activating a Unity Industry license, refer to the Unity Support article, How to activate or return a Unity Industry license.",871],["The following information covers an alternate method to Unity Hub for activating and returning a license for Unity Plus or Unity Pro, by using the command line. You might consider this method in situations such as:",871],["You have internet access, but you use Unity in headless mode (without a GUI) for automated tasks, such as builds and tests.",871],["You have internet access, but you’re unable or unwilling to install the Unity Hub.",871],["If you don’t know your Unity license information, speak to the Owner of your license. Owners can assign a seat to you via the Organization, or you can contact Unity Customer Service.",871],["",871],["Activate a license from the command line",871],["Before activating your Unity license by using the command line, make sure that the license file folder exists. Refer to \"where is my Unity license file stored\" in License troubleshooting. Also make sure that you have write permission to this folder.",871],["Note**: The command line procedure only works for Unity Plus and Unity Pro licenses, because Personal licenses don't have serial numbers associated with them. Use the Unity Hub to activate Personal licenses. If you have another operating system, you can manage your license through the Hub.",871],["macOS",871],["Enter the following command into the Terminal to launch Unity and activate your license:",871],["````lang-shell",871],[" -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username 'name@example.com' -password 'XXXXXXXXXXXXX'",871],["Replace <unity-command-location> with the full path to your Unity Editor application, concatenated with /Contents/MacOS/Unity. For example, if you installed a 2022.2.0b4 Editor to the default location, <unity-command-location> is:",871],["````lang-shell",871],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity",871],["",871],["macOS example",871],["````lang-shell",871],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username 'name@example.com' -password 'XXXXXXXXXXXXX'",871],["Tip**: If you use continuous integration (CI) tools like Jenkins to activate via the command line, add the -nographics flag to prevent a WindowServer error.",871],["Windows",871],["Enter the following command into the Command Prompt to launch Unity and activate your license:",871],["````lang-powershell",871],["\"\" -batchmode -username name@example.com -password XXXXXXXXXXXXX -serial E3-XXXX-XXXX-XXXX-XXXX-XXXX -quit",871],["Replace <editor-installation-location> with the full path to your Editor application. For example, if you installed a 2022.2.0b4 Editor to the default location, <editor-installation-location> is:",871],["````lang-shell",871],["C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe",871],["",871],["Windows example",871],["````lang-powershell",871],["\"C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe\" -batchmode -username name@example.com -password XXXXXXXXXXXXX -serial E3-XXXX-XXXX-XXXX-XXXX-XXXX -quit",871],["",871],["Next steps and troubleshooting",871],["Wait several seconds after running this command to give Unity enough time to communicate with the license server. If activation fails, you can open the Editor.log for information. For any activation errors, check Activation issues to find a solution for your issue.",871],["",871],["Returning the license through the command line",871],["macOS",871],["Enter the following command into the Terminal to return the license:",871],["````lang-shell",871],[" -quit -batchmode -returnlicense -username 'name@example.com' -password 'XXXXXXXXXXXXX'",871],["Replace <unity-command-location> with the full path to your Editor application, concatenated with /Contents/MacOS/Unity. For example, if you installed a 2022.2.0b4 Editor to the default location, <unity-command-location> is:",871],["````lang-shell",871],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity",871],["",871],["macOS example",871],["````lang-shell",871],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -quit -batchmode -returnlicense -username 'name@example.com' -password 'XXXXXXXXXXXXX'",871],["",871],["Windows",871],["Enter the following into the Command Prompt to return the license",871],["````lang-powershell",871],["\"\" -quit -batchmode -returnlicense -username name@example.com -password XXXXXXXXXXXXX",871],["Replace <editor-installation-location> with the full path to your Editor application. For example, if you installed a 2022.2.0b4 Editor to the default location, <editor-installation-location> is:",871],["````lang-shell",871],["C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe",871],["",871],["Windows example",871],["````lang-powershell",871],["\"C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe\" -quit -batchmode -returnlicense -username name@example.com -password XXXXXXXXXXXXX",871],["",871],["Next steps and troubleshooting",871],["Wait a few seconds after running this command to give Unity enough time to communicate with the license server. You can use the Hub to confirm that you returned your license by opening the Preferences menu () and selecting Licenses. If you experience issues, refer Troubleshooting.",871],["Additional resources",871],["Submit a license request from a command line and browser (macOS, Linux)",872],["Submit a license request from the command line to manually activate your license if you’re unable to use the other activation methods.",872],["The default installation paths for the Unity Editor are:",872],["macOS: /Applications/Unity/Hub/Editor/<version>/Unity.app",872],["Linux: /Applications/Unity/Hub/Editor/<version>/Unity.app",872],["",872],["Create a license request file from the command line",872],["Make sure you know the installation location of your Unity Editor (ending with Unity.app), described earlier. On macOS, you'll add /Contents/MacOS/Unity to this path for this procedure.",872],["Note**: On macOS, although you don't need Finder for this step, this latter subdirectory structure isn't visible in Finder, unless you right-click the Unity application (Unity.app) and select Show Package Contents.",872],["For example, for a 2022.2.0b4 Editor, the complete path to the Unity command on macOS is:",872],["```lang-shell",872],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity",872],["Open a Terminal session (macOS) or the command line (Linux), and make sure you're aware which directory you're in. The directory you run the command from is the same directory where the .alf file is output. You can use the pwd command to determine your directory.",872],["Run the following command, replacing <editor-command-location> with the complete path to the Unity command from Step 1:",872],["```lang-shell",872],[" -batchmode -createManualActivationFile -logfile",872],["Note:** This command doesn't return output to the Terminal or command line window. When the command completes, it returns control to the command prompt.",872],["When the command completes, check the directory where you ran the command to make sure it created an activation license file, such as Unity_v2022.2.0b4.alf. If you experience issues, see Troubleshooting.",872],["Example (macOS)",872],["Assuming you installed a 2022.2.0b4 Editor at /Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app, the command for this step is:",872],["```lang-shell",872],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -batchmode -createManualActivationFile -logfile",872],["",872],["",872],["Generate a Unity license file",872],["",872],["Activate your license from the command line",872],["Make sure you know the following paths:",872],["<editor-command-location> is the same value as the path described in the create a license request file step.",872],["<yourUlfFile> is the full path of the .ulf file you generated in the generate a Unity license file step.",872],["Open a Terminal session (macOS) or the command line (Linux), and run the following command, replacing <editor-command-location> and <yourUlfFile> with the actual full paths:",872],["```lang-shell",872],[" -batchmode -manualLicenseFile -logfile",872],["Note:** This command doesn't return output to the Terminal or command line window. When the command completes, it returns control to the command prompt.",872],["When the command completes, you can view your active license in the Hub by opening the Preferences menu () and selecting Licenses. If you experience issues, see Troubleshooting.",872],["Example (macOS)",872],["This example assumes that you:",872],["Installed a 2022.2.0b4 Editor at /Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app",872],["Generated a .ulf file and stored it at /Users/myAccount/Downloads/Unity_v2017.x.ulf",872],["```lang-shell",872],["/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -batchmode -manualLicenseFile /Users/myAccount/Downloads/Unity_v2017.x.ulf -logfile",872],["",872],["",872],["Troubleshooting",872],["Submit a license request from a command line and browser (Windows)",873],["Submit a license request from the command line to manually activate your license if you’re unable to use the other activation methods.",873],["The default installation path for the Unity Editor is \"C:\\Program Files\\Unity\\Hub\\Editor\\<version>\\Editor\\Unity.exe\".",873],["",873],["Create a license request file from the command line",873],["Open a Command Prompt as an administrator. If you lack administrator privilege, make sure you run this procedure's command from within your user profile folder.",873],["Make sure you're aware which directory you're in. The directory you run the command from is the same directory where the .alf file is output.",873],["Enter the following command, replacing <editor-installation-location> with the actual full path to Unity.exe:",873],["```lang-powershell",873],["\"\" -batchmode -createManualActivationFile -logfile",873],["Note:** This command doesn't return output to the Command Prompt. When the command completes, it returns control to the command prompt.",873],["When the command completes, check the directory where you ran the command to make sure it created an activation license file, such as Unity_v2022.2.0b4.alf. If you experience issues, see Troubleshooting.",873],["Example",873],["Assuming you installed a 2022.2.0b4 Editor at \"C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe\", the command for this step is:",873],["```lang-powershell",873],["\"C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe\" -batchmode -createManualActivationFile -logfile",873],["",873],["",873],["Generate a Unity license file",873],["",873],["Activate your license from the command line",873],["Make sure you know the following paths:",873],["<editor-installation-location> is the actual full path to Unity.exe.",873],["<yourUlfFile> is the full path of the .ulf file you generated in the generate a Unity license file step.",873],["Open a Command Prompt as an administrator. If you lack administrator privilege, make sure you run this procedure's command from within your user profile folder.",873],["Run the following command, replacing <editor-installation-location> and <yourUlfFile> with the actual full paths:",873],["```lang-powershell",873],["\"\" -batchmode -manualLicenseFile -logfile",873],["Note:** This command doesn't return output to the Command Prompt. When the command completes, it returns control to the command prompt.",873],["When the command completes, you can view your active license in the Hub by opening the Preferences menu () and selecting Licenses. If you experience issues, see Troubleshooting.",873],["Example",873],["This example assumes that you:",873],["Installed a 2022.2.0b4 Editor at \"C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe\"",873],["Generated a .ulf file and stored it at \"C:\\Users\\myAccount\\Downloads\\Unity_v2017.x.ulf\"",873],["```lang-powershell",873],["\"C:\\Program Files\\Unity\\Hub\\Editor\\2022.2.0b4\\Editor\\Unity.exe\" -batchmode -manualLicenseFile \"C:\\Users\\myAccount\\Downloads\\Unity_v2017.x.ulf\" -logfile",873],["",873],["Troubleshooting",873],["Manual license activation",874],["Manually activate your Unity license if you're unable to activate it using the other methods.",874],["Important**: Manual license activation requires internet connectivity. However, the manual activation method requires internet connectivity for only one part of the process, and you can do that part on any connected computer; not necessarily the same computer where you’ll use Unity.",874],["There are two options for manually activating a license:",874],["Submit a license request using the command line and browser:",874],["Returning a manually activated license",874],["If you manually activate a license, you can’t return it by using the other license management methods; you’ll need to contact support to assist with the return.",874],["Additional resources",874],["Unity Hub documentation",874],["Submit a license request from the Hub",875],["Submit a license request from the Unity Hub to manually activate your license if you’re unable to use the other activation methods.",875],["Although you can submit a license request from the computer where you plan to use Unity, the following procedure shows a workaround if that computer can't connect to the internet. The following procedure assumes you have access to two computers, as follows:",875],["The first computer is the computer where you installed Unity, but the computer can't connect to the internet.",875],["The second computer is any computer that can connect to the internet.",875],["Procedure",875],["On the first computer, open the Unity Hub.",875],["Open the Preferences menu: ",875],["Select Licenses from the side menu.",875],["Select Add.",875],["Select Activate with license request.",875],["Follow the Download license request step on-screen. This step creates an .alf file on the first computer. Don’t close the Unity Hub, since you’ll be returning to it in a later step.",875],["Copy the .alf file from the previous step to a second computer that has internet access.",875],["Use the second computer to go to license.unity3d.com/manual and follow the instructions there. This step generates a .ulf file. If you experience issues accessing the website:",875],["Go to id.unity.com and make sure you're signed in to your Unity ID. You need a valid login to request a Unity license file.",875],["Try pasting https://license.unity3d.com/manual into your browser's address bar.",875],["Copy the .ulf license file from the second computer to the first computer.",875],["From the first computer, follow Unity Hub's Activate with license file on-screen. This step doesn't need internet access.",875],["After completing the process, you can view your active license in the Hub by opening the Preferences menu () and selecting Licenses.",875],["Documentation versions",876],["The Unity documentation is the Unity User Manual and Unity Scripting API Reference.",876],["As we continually improve Unity (that is; the Editor and the engine), we add new features, improve existing features, and sometimes remove old features.",876],["With each Unity release, the Unity documentation changes to reflect this, so make sure you use the correct version of the User Manual and Scripting API Reference to match the version of Unity you're using.",876],["The version of the documentation which accompanies the current full release of Unity is always available online at docs.unity3d.com.",876],["Installer (offline) documentation",876],["As well as using the online documentation, you can install a local copy of the documentation (offline) when you install the Unity software, using:",876],["The Unity Download Assistant",876],["The Unity Hub",876],["Documentation updates",876],["We republish the online documentation for the current full release version of Unity regularly with corrections and missing content regularly. (You can see the publish version of the documentation at the bottom of every page.)",876],["If there is a current Unity beta release, we also update the current public beta release documentation with corrections, missing content, and feature updates regularly.",876],["However, note that we do not update and re-publish:",876],["the installer (offline) documentation.",876],["legacy documentation, that is; documentation for Unity versions which are no longer a current beta or full release of Unity.",876],["If you need the latest publish of the documentation offline, you can download it outside of the installer. See the Offline Documentation page for details.",876],["Which documentation version to use",876],["Most people use the latest full release version of Unity and so use the documentation at docs.unity3d.com.",876],["Some people need to use older versions of Unity. This might be the case for you if you are maintaining or in long-term development of a project which uses an older version of Unity.",876],["If you are using an older version of Unity, the installer (offline) documentation matches that version of Unity. However if you chose not to install local documentation, or want to ensure you can access the latest publish of the documentation, you can access older versions of the Unity documentation online. (See list below.)",876],["Legacy documentation",876],["Documentation for Unity versions which are no longer the current full release or beta release version of Unity.",876],["This documentation is frozen - we do not correct, update or republish it. However Long-term support versions may be supported for a longer time.*",876],["Unity 2017 documentation",876],["Version 2017.4 (Long-term Support): docs.unity3d.com/2017.4",876],["Version 2017.3: docs.unity3d.com/2017.3",876],["Version 2017.2: docs.unity3d.com/2017.2",876],["Version 2017.1: docs.unity3d.com/2017.1",876],["Unity 5 documentation",876],["Version 5.6: docs.unity3d.com/560",876],["Version 5.5: docs.unity3d.com/550",876],["Version 5.4: docs.unity3d.com/540",876],["Version 5.3: docs.unity3d.com/530",876],["Version 5.2: docs.unity3d.com/520",876],["Version 5.1: docs.unity3d.com/510",876],["Version 5.0: docs.unity3d.com/500",876],["Unity 4 documentation",876],["Version 4.6: docs.unity3d.com/460",876],["Version 4.5: docs.unity3d.com/450",876],["Version 4.3: docs.unity3d.com/430",876],["Version 4.2: docs.unity3d.com/420",876],["Version 4.1: docs.unity3d.com/410",876],["Version 4.0: docs.unity3d.com/400",876],["Unity 3 documentation",876],["Version 3.5.5: docs.unity3d.com/355",876],["Version 3.5.3: docs.unity3d.com/353",876],["Version 3.5.2: docs.unity3d.com/352",876],["Version 3.5.1: docs.unity3d.com/351",876],["Master and Variant Sprite Atlases",877],["The Type property defines whether a Sprite Atlas is a 'Master' or a 'Variant'. Sprite Atlases are created as Master types by default. Set their Type to 'Variant' to create a Variant Atlas.",877],["A Variant Atlas requires a Master type Sprite Atlas to be set in its Master Atlas property. The Variant Atlas receives a copy of the Master Atlas’s contents to use as its own. Refer to documentation on Variant Sprite Atlas for more details about how to create and use Variant Sprite Atlases.",877],["When the Sprite Atlas Type is set to 'Variant', the following properties appear:",877],["Property Description ",877],["-------------------- ------------------------------------------------------------ ",877],["Type Set the Atlas’s Type to Variant to reveal the following properties. ",877],["Master Atlas A Variant Atlas receives a copy of its Master Atlas’ contents to use as its own. Assign a Sprite Atlas to this property to make it the Master Atlas of the currently selected Variant Atlas. The Master Atlas cannot be a Variant Atlas itself. ",877],["Include in Build Check this box to include the Sprite Atlas in the current build. This option is enabled by default. ",877],["Scale Set the scale factor of the Variant Sprite Atlas that can range from 0.1 to 1. The size of the Variant Atlas Texture is the result of the Master Atlas’ Texture multiplied by the Scale value. The default and maximum Scale value is 1, where the Variant Atlas Texture remains identical to its Master Atlas’ Texture. ",877],["Materials introduction",878],["To draw something in Unity, you must provide information that describes its shape, and information that describes the appearance of its surface. You use meshes to describe shapes, and materials to describe the appearance of surfaces.",878],["Materials and shaders are closely linked; you always use materials with shaders.",878],["This page contains the following information:",878],["Render pipeline compatibility",878],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",878],["Materials Yes Yes Yes Yes ",878],["",878],["Material fundamentals",878],["A material contains a reference to a Shader object. If that Shader object defines material properties, then the material can also contain data such as colors or references to textures.",878],["The Material class represents a material in C# code. For information, see Using Materials with C# scripts.",878],["A material asset is a file with the .mat extension. It represents a material in your Unity project. For information on viewing and editing a material asset using the Inspector window, see Material Inspector reference.",878],["",878],["Creating a material asset, and assigning a shader to it",878],["To create a new material asset in your project, from the main menu or the Project View context menu, select Assets > Create > Material.",878],["To assign a shader to the material asset, in the Inspector window use the Shader drop-down menu.",878],["",878],["Assigning a material asset to a GameObject",878],["To render a GameObject using a material:",878],["Add a component that inherits from Renderer. MeshRenderer is the most common and is suitable for most use cases, but SkinnedMeshRenderer, LineRenderer, or TrailRenderer might be more suitable if your GameObject has special requirements.",878],["Assign the material asset to the component's Material property.",878],["To render a particle system in the Built-in Particle System using a material:",878],["Add a Renderer Module to the Particle System.",878],["Assign the material asset to the Renderer Module's Material property.",878],["Material Variants",878],["Unity supports functionality for creating variants of Materials. To learn more about this functionality, see Material Variants.",878],["Materials",879],["In Unity, you use materials and shaders together to define the appearance of your scene.",879],["This section contains the following information on materials:",879],["Using materials with C# scripts",880],["All the parameters of a material asset that you see in the Inspector window are accessible via script, giving you the power to change or animate how a material works at runtime.",880],["This allows you to modify numeric values on the material, change colours, and swap textures dynamically during gameplay. Some of the most commonly used methods to do this are:",880],["Method Name Use",880],["",880],["SetInteger Set an integer value in the material",880],["SetTexture Assign a new texture to the material",880],["The full set of methods available for manipulating materials via script can be found on the Material class scripting reference.",880],["One important note is that these methods only set properties that are available for the current Shader object on the material. This means that if you have a shader that doesn't use any textures, or if you have no shader bound at all, calling SetTexture will have no effect. This is true even if you later set a shader that needs the texture. For this reason it is recommended to set the shader you want before setting any properties. However, after you have set the shader you can switch from one shader to another that use the same textures or properties and values will be preserved.",880],["These methods work as you would expect for all simple shaders such as the legacy shaders, and the built-in shaders other than the Standard Shader (for example, the particle, sprite, UI and unlit shaders). For a material using the Standard Shader however, there are some further requirements which you must be aware of before being able to fully modify the material.",880],["Physically Based Rendering Material Validator",881],["The Physically Based Rendering Material Validator is a draw mode in the Scene View. It allows you to make sure your materials use values which fall within the recommended reference values for physically-based shaders. If pixel values in a particular material fall outside of the reference ranges, the Material Validator highlights the pixels in different colors to indicate failure.",881],["To use the Material Validator, select the Scene View’s draw mode drop-down menu, which is is usually set to Shaded by default.",881],["Navigate to the Material Validation section. The Material Validator has two modes: Validate Albedo and Validate Metal Specular.",881],["Note**: You can also check the recommended values with Unity’s Material Charts. You still need to use these charts when authoring Materials to decide your albedo and metal specular values. However, the Material Validator provides you with a visual, in-editor way of quickly checking whether your Materials’ values are valid once your Assets are in the Scene.",881],["Also note**: The validator only works in Linear color space. Physically Based Rendering is not intended for use with Gamma color space, so if you are using Physically Based Rendering and the PBR Material Validator, you should also be using Linear color space.",881],["Validate Albedo mode",881],["The PBR Validation Settings that appear in the Scene view when you set Material Validation to Validate Albedo.",881],["Property: Function: ",881],["Check Pure Metals Enable this checkbox if you want the Material Validator to highlight in yellow any pixels it finds which Unity defines as metallic, but which have a non-zero albedo value. See Pure Metals, below, for more details. By default, this is not enabled. ",881],["Luminance Validation Use the drop-down to select a preset configuration for the Material Validator. If you select any option other than Default Luminance, you can also adjust the Hue Tolerance and Saturation Tolerance. The color bar underneath the name of the property indicates the albedo color of the configuration. The Luminance value underneath the drop-down indicates the minimum and maximum luminance value. The Material Validator highlights any pixels with a luminance value outside of these values. This is set to Default Luminance by default. ",881],["Hue Tolerance When checking the albedo color values of your material, this slider allows you to control the amount of error allowed between the hue of your material, and the hue in the validation configuration. ",881],["Saturation Tolerance When checking the albedo color values of your material, this slider allows you to control the amount of error allowed between the saturation of your material, and the saturation in the validation configuration. ",881],["Color Legend These colors correspond to the colours that the Material Validator displays in the Scene view when the pixels for that Material are outside the defined values. ",881],["Red Below Minimum Luminance Value The Material Validator highlights in red any pixels which are below the minimum luminance value defined in Luminance Validation (meaning that they are too dark). ",881],["Blue Above Maximum Luminance Value The Material Validator highlights in blue any pixels which are above the maximum luminance value defined in Luminance Validation (meaning that they are too bright). ",881],["Yellow Not A Pure Metal If you have Check Pure Metals enabled, the Material Validator highlights in yellow any pixels which Unity defines as metallic, but which have a non-zero albedo value. See Pure Metals, below, for more details. ",881],["Unity’s Material charts define the standard luminance range as 50-243 sRGB for non-metals, and 186-255 sRGB for metals. Validate Albedo mode colors any pixels outside of these ranges with different colors to indicate that the value is too low or too high.",881],["In the example below, the first texture is below the minimum luminance value, and therefore too dark. The fourth texture is above the maximum luminance value, and therefore too bright.",881],["The material charts provide albedo values for common Materials. The brightness of albedo values has a dramatic impact on the amount of diffuse bounce light generated, so it is important for Global Illumination baking to make sure that your different Material types are within the correct luminance ranges, in proportion with each other. To help you get these values right, you can select from the presets in the Luminance Validation drop-down, which provides common Material albedo values to verify the luminance ranges of particular Material types.",881],["Overriding the default luminance values",881],["Depending on the art style of your project, you might want the luminance values of Materials to differ from the preset luminance ranges. In this case, you can override the built-in albedo values used by the Material Validator with your own values. To override the preset luminance ranges, assign an array of AlbedoSwatchInfo values for each desired Material type to the property EditorGraphicsSettings.albedoSwatches.",881],["Validate Metal Specular mode",881],["The PBR Validation Settings that appear in the Scene view when you set Material Validation to Validate Metal Specular.",881],["Property: Function: ",881],["Check Pure Metals Enable this checkbox if you want the Material Validator to highlight in yellow any pixels it finds which Unity defines as metallic, but which have a non-zero albedo value. See Pure Metals, below, for more details. By default, this is not enabled. ",881],["Color Legend These colors correspond to the colours that the Material Validator displays in the Scene view when the pixels for that Material are invalide - meaning their specular value falls outside the valid range for that type of material (metallic or non-metallic). See below this table for the valid ranges. ",881],["Blue Below Minimum Specular Value The Material Validator highlights in red any pixels which are below the minimum specular value. (40 for non-metallic, or 155 for metallic). ",881],["Red Above Maximum Specular Value The Material Validator highlights in blue any pixels which are above the maximum specular value. (75 for non-metallic, or 255 for metallic). ",881],["Yellow Not A Pure Metal If you have Check Pure Metals enabled, the Material Validator highlights in yellow any pixels which Unity defines as metallic, but which have a non-zero albedo value. See Pure Metals, below, for more details. ",881],["Unity’s Material charts define two separate specular color ranges:",881],["Non-metallic materials: 40-75 sRGB",881],["Metallic materials: 155 - 255 sRGB",881],["In Unity, all non-metallic Materials have a constant specular color that always falls within the correct range. However, it is common for metallic Materials to have specular values that are too low. To help you identify metallic Materials with this issue, the Material Validator’s Validate Metal Specular mode colors all pixels that have a specular color value that is too low. This includes all non-metallic materials by definition.",881],["In the example below, the left material is below the minimum specular value, and therefore too dark. This also applies to the Scene’s background. The right material has specular values with in the valid range.",881],["",881],["Pure Metals",881],["Unity defines physically-based shading materials with a specular color greater than 155 sRGB as metallic. For Unity to define a metallic Material as a pure metal",881],["If a non-metallic surface has a specular color value that is too high, but has a non-zero albedo value, this is often due to an authoring error. The Material Validator also has an option called Check Pure Metals. When you enable this option, the Material Validator colors in yellow any Material that Unity defines as metallic but which has a non-zero albedo value. An example of this can be seen in the images below. It shows three materials, the left and right materials are pure metals, but the middle material is not, so the Material Validator colors it yellow:",881],["In the second image above, the background is red because the Materials in the background are below the minimum specular value for the Material Validator’s Validate Metal Specular mode.",881],["For complex materials that combine metallic and non-metallic properties, the pure metal checker is likely to pick up some invalid pixels, but if a Material is totally invalid, it’s usually a sign of an authoring error.",881],["Implementation",881],["The Material Validator works with any Materials that use Unity’s Standard shader or surface shaders. However, custom shaders require a pass named “META”. Most custom shaders that support lightmapping already have this pass defined. See documentation on Lightmapping and shaders for more details.",881],["Carry out the following steps to make your custom shader compatible with the Material Validator:",881],["Add the following pragma to the meta pass: #pragma shader_feature EDITOR_VISUALIZATION",881],["In the UnityMetaInput structure, assign the specular color of the Material to the field called SpecularColor, as shown in the code example below.",881],["Here is an example of a custom meta pass:",881],["Pass",881],["Name \"META\"",881],["Tags { \"LightMode\"=\"Meta\" }",881],["Cull Off",881],["CGPROGRAM",881],["pragma vertex vert_meta",881],["pragma fragment frag_meta",881],["pragma shader_feature _EMISSION",881],["pragma shader_feature _METALLICGLOSSMAP",881],["pragma shader_feature _ SMOOTHNESSTEXTURE_ALBEDO_CHANNEL_A",881],["pragma shader_feature _ DETAILMULX2",881],["pragma shader_feature EDITOR_VISUALIZATION",881],["float4 frag_meta(v2f_meta i) : SV_TARGET",881],["UnityMetaInput input;",881],["UNITY_INITIALIZE_OUTPUT(UnityMetaInput, input);",881],["float4 materialSpecularColor = float4(1.0f, 0.0f, 0.0f, 1.0f);",881],["float4 materialAlbedo = float4(0.0f, 1.0f, 0.0f, 1.0f);",881],["input.SpecularColor = materialSpecularColor;",881],["input.Albedo = materialAlbedo;",881],["return UnityMetaFragment(input);",881],["2018-03-28 ",881],["Material Validator updated in Unity 2017.3",881],["Material Variant benefits and limitations",882],["How Material Variants help artists",882],["Many of the materials in a game may be variations on a source---outfits with a variety of color schemes, damaged and undamaged versions of scenery, shiny and weathered instances of props. To help you manage and maintain these materials, Material Variants address specific shortcomings of copied materials, as illustrated in this table.",882],["Copied material Material Variant ",882],["",882],["Does not automatically change if its source material changes. Automatically changes if its parent changes. ",882],["To replicate a change to a copy in its source material, you must manually adjust the source material. You can copy changes from a child material to its parent with two mouse clicks. ",882],["You can’t limit changes to the Properties of copies. You can lock one or more Properties on a Material or Material Variant to prevent modifications to those Properties in its children. ",882],["You can’t associate a copy with a different source. You can reparent Material Variants. ",882],["Create, convert, or reparent Material Variants",882],["You can create Material Variants from both Materials and other Material Variants. It is also possible to convert Material Variants into Materials. To use the Override(s) in a variant with a variety of different Materials, you can change the parent of that variant.",882],["",882],["See Create, modify, and apply Material Variants for information about how to create and convert Material Variants.",882],["",882],["See Material Variant inheritance for an explanation of the Material Variant hierarchy.",882],["Variant sources",882],["It is possible to create a Material Variant from any Material, including one you make with Shader Graph or download from the Asset Store. See Create, modify, and apply Material Variants for detailed information about how to create Material Variants from shaders.",882],["Identify and revert changes",882],["An Override is a change you make to a Material Variant's Properties. You can revert one Override at a time or all Overrides at once. Unity does not handle reverts through the Undo stack, which means that you can revert an Override without undoing any other changes.",882],["",882],["See Create, modify, and apply Material Variants for detailed information about how to identify and revert Overrides.",882],["Unity prevents inheritance issues",882],["Unity protects against ancestor deletion and circular dependencies. If you attempt to delete the parent of a Material Variant, Unity warns you to select a new parent for the child or reparent it.",882],["",882],["See Material Variant inheritance for detailed information about Material Variant hierarchies and inheritance error messages.",882],["Scripts",882],["You can use the Material Variant API to access Material Variant functionality for complex or large operations.",882],["",882],["See the Material and MaterialEditor API documentation for information about how to work with Material Variants in scripts.",882],["Similarities to Prefab Variants",882],["Prefab Variants and Material Variants have much the same functionality, foundational concepts, and workflow. There are two key differences between them:",882],["You can reparent a Material Variant.",882],["You can lock Material Variant Properties.",882],["Prerequisites and limitations",882],["Material Variants are not designed to address optimization and scalability concerns.",882],["In addition, it is not possible to use Material Variants to alter Materials at runtime in the Player.",882],["Additional resources",882],["Material Variant inheritance",883],["Terminology",883],["Action Explanation ",883],["",883],["Reparent To change the parent of a Material Variant. ",883],["Override A change to a Property of a Material Variant. Multiple changes to one Property constitute one Override. ",883],["How inheritance works",883],["The effect of a change to a Material or Material Variant depends on its place in the hierarchy.",883],["Action Recipient(s) What happens ",883],["",883],["Change a parent Child Any change or Override revert to a parent automatically propagates to a child. ",883],["Change an ancestor Child A change to an ancestor automatically propagates to a child. ",883],["Lock a property on a parent Child If you lock a Property on a parent, Unity removes all Overrides to the same Property on the child. You can no longer change that Property on the child.If you unlock the Property on the parent, Unity reapplies the Overrides it removed from the child. ",883],["Change a child No effect A change to a child does not automatically propagate to its parent or ancestors. ",883],["Change a descendant No effect A change to a descendant does not automatically propagate to its ancestors. ",883],["Apply as Override In Variant and Apply to Material [Name] [Name] Parent or ancestor Material Variant You can apply an Override upward in the hierarchy. The corresponding Property of the parent or ancestor automatically changes. You can only apply one Override at a time. ",883],["Apply to Material [Name] Parent or ancestor Material or Material Variant You can apply an Override upward in the hierarchy. The corresponding Property of the parent or ancestor automatically changes. You can only apply one Override at a time. ",883],["Revert an Override applied upward in the hierarchy or Revert all Overrides that are applied upward in the hierarchy Child or descendant The only way to revert an Override applied upward in the hierarchy is to revert this Override on the recipient parent or ancestor. ",883],["The Material Variant Hierarchy dialog",883],["Here are three illustrations of the Material Variant Hierarchy dialog indicating the control that opens the dialog and the appearance of the different hierarchy levels.",883],["",883],["Prevent the creation of circular dependencies or orphans",883],["Unity prevents circular dependencies between Material Variants and provides a warning when you delete a parent.",883],["Error messages**",883],["Material** [name] is an ancestor of [name]. Hierarchy cannot contain circular dependencies.",883],["Material** [name] has a missing parent with GUID: [######]",883],["Material Variants",884],["Teams of artists may create hundreds of materials for a single game. Controlling and coordinating changes to these materials is labor-intensive, but Material Variants can make it easier.",884],["Topic Description ",884],["",884],["Material Variant benefits and limitations The purpose of Material Variants, and what artists can do with them. ",884],["Material variant inheritance How to visualize and understand relationships between parent and child Materials and Material Variants. ",884],["Create, modify, and apply Material Variants How to work with Material Variants. ",884],["",884],["Additional resources",884],["Create, modify, and apply Material Variants",885],["These instructions explain how to work with Material Variants.",885],["Programmers should consult the Material and MaterialEditor API documentation for information about how to work with Material Variants in scripts.",885],["Differences between Prefab Variants and Material Variants",885],["The Material Variant workflow is mostly the same as the Prefab Variant workflow. There are two key differences:",885],["You can lock one or more Properties of a Material Variant so that no one can edit these Properties in its children",885],["It is possible to change the parent of a Material Variant",885],["Create a Material Variant",885],["There are two ways to create a Material Variant.",885],["Right-click on a Material in the Project window",885],["Select a Material in the Project window.",885],["Right-click on that Material.",885],["Select Create > Material Variant.",885],["Select in the Material Hierarchy",885],["Open the Material Hierarchy dialog.",885],["Select the material type dropdown.",885],["Select Material Variant.",885],["Assign a material to the parent field",885],["Identify the new Material Variant",885],["When you create a new Material Variant, it has the name [Material Name] Variant (Material Variant) in the Material Inspector. When Unity begins to load a new Material Variant, the Material Variant has a striped icon in the Project window. After Unity finishes loading the new Material Variant, the normal Material preview replaces the striped icon in the Project window.",885],["Add an Override on a Material Variant",885],["Select a Material Variant.",885],["Modify one of its Properties in the Material Inspector.",885],["",885],["Revert one or more Overrides on a Material Variant",885],["Right-click on an Override.",885],["Select Revert to revert this specific Override, or select Revert all Overrides to revert every Override on this variant. If this Override originated from a child, reverting also applies to that child.",885],["For a detailed explanation of how inheritance determines the effect of reverting changes, see Material Variant inheritance or Revert an Override applied upward.",885],["Apply an Override upward in the hierarchy",885],["You can apply an Override upward to any ancestor in the hierarchy.",885],["Apply the Override to the parent",885],["To apply an Override to a parent, right-click on an Override and select Apply to [name of parent] in the dropdown.",885],["Apply the Override to an ancestor",885],["To apply an Override to an ancestor, right-click on an Override and select Apply to [name of ancestor] in the dropdown.",885],["",885],["Revert one or more Overrides applied upward",885],["Once an Override is applied upward, you can no longer revert it on the child that originated it. Instead, you must revert it on the recipient parent or ancestor; see the instructions in Revert one or more Overrides on a Material Variant.",885],["",885],["Delete a Material Variant",885],["Select the Material Variant in the Project window.",885],["Press the Delete key.",885],["The next step depends on whether the Material Variant has children.",885],["If the Material Variant has no children, click Delete in the warning dialog to delete the variant.",885],["If the Material Variant has one or more children, a warning dialog appears that says One or more of these Material(s) has one or more children. Would you like you reparent all of these children to their closest remaining ancestor?",885],["The warning dialog provides three options:",885],["Delete and reparent children**: This option causes Unity to automatically assign this parent's children to their closest ancestor; this new parent can be either a Material Variant or a Material, or no parent if the Material to be deleted is the root of the hierarchy.",885],["Delete only** Note: A Material with a missing parent is in an invalid state and will not load correctly at runtime.",885],["Cancel**",885],["See Inheritance error messages for information about orphan Material Variants.",885],["Reparent a Material Variant",885],["There are two ways to reparent a Material Variant.",885],["In the Material Inspector",885],["Select the variant you want to reparent in the Project window.",885],["Select the bullseye next to the Parent Property and choose a new parent in the Select Material dialog.",885],["In the Project window",885],["Drag the new parent Material or Material Variant onto the target child.",885],["Lock a Property",885],["Right-click on a Property.",885],["Select Lock in children in the dropdown.",885],["A padlock icon appears next to the locked Property.",885],["To unlock the property, click Lock in children again.",885],["Convert a Material Variant to a Material",885],["There are two ways to convert a Material Variant to a Material.",885],["From the Hierarchy View",885],["Select the Material Variant in the Project window.",885],["Expand the Hierarchy dialog in the Material Inspector.",885],["Select Material in the Material type dropdown.",885],["From the Settings dropdown",885],["Click the Settings dropdown in the Material Inspector.",885],["Select Flatten Material Variant in the dropdown.",885],["Additional resources",885],["Animation FAQ",886],["General questions",886],["What's the difference between the Animation window and the Animator window?**",886],["The Animation Window allows you to create and edit animation clips within Unity. You can use it to animate almost every property that you can edit in the inspector, from a Game Object's position, a material color, a light's brightness, a sound's volume, and even arbitrary values in your own scripts.",886],["The Animator Window allows you to organize your existing animation clip assets into a flowchart-like system called a state machine.",886],["Both of these windows are part of Unity's animation system, and not the Legacy Animation system.",886],["We use the Legacy Animation system for character animations. Should we use Unity's animation system (Mecanim) instead?**",886],["Generally, yes you should since most character animations are more complex.",886],["Import",886],["Why does my imported mesh have an animator component attached to it?**",886],["When Unity detects that an imported file has animation in its timeline, it will add an animation component on import. You can modify this in the asset's import settings by setting the \"Animation Type\" to None in the import settings under the Rig tab. If necessary you can do this with several files at once.",886],["Layers",886],["Does the ordering of the layers matter?**",886],["Yes. Layers are evaluated from top to bottom in order. Layers set to override will always override the previous layers (based on their mask, if they have a mask).",886],["Should the weight value of the base layer always be set to one or should the weight be zero when using another layer?**",886],["The base layer weight is always 1 and override layers will completely override the base layer.",886],["Is there any way to get a variable value from the controller without using the name string?**",886],["You can use integers to identify the states and parameters. Use the Animator.StringToHash function to get the integer identifier values. For example:",886],["runState = Animator.StringToHash(\"Base Layer.Run\");",886],["animator.SetBool(runState, false);",886],["What happens if a state on a Sync layer has a different length compared to the corresponding state in the base layer?**",886],["If layers are of different lengths, they will become unsynchronized. Enable the Timing option to force the timing of the states on the current layer, on the source layer.",886],["Avatar Masks",886],["Is there a way to create AvatarIKGoals other than LeftFoot, RightFoot, LeftHand, RightHand?**",886],["Yes, knee and elbow IK is supported.",886],["Is there a way to define what transforms are part of the Avatar Mask?**",886],["Yes, for Generic clips you can define which transform animation is imported or not. For Humanoid clips, all human transforms are always imported and extra transforms can be defined.",886],["Animations curves",886],["How do animations that have Curves blend with those that don't?**",886],["When you have an animation with a curve and another animation without a curve, Unity will use the default value of the parameter connected to the curve to do blending.",886],["You can set default values for your parameters, so when blending takes place between a State that has a Curve Parameter and one that does not have one, it will blend between the curve value and the default parameter value.",886],["To set a default value for a Parameter, simply set its value in the Animator Tool window while not in LiveLink.",886],["Performance and optimization",887],["This page contains some tips to help you obtain the best performance in Unity, covering the animation system and run-time optimizations.",887],["Note:** For tips on modeling your character in a 3d application for best performance in Unity, see Modeling characters for optimal performance.",887],["",887],["Animation system",887],["Controllers",887],["The Animator doesn't spend time processing when a Controller is not set to it.",887],["Simple animation",887],["Playing a single Animation Clip with no blending can make Unity slower than the legacy animation system. The old system is very direct, sampling the curve and directly writing into the transform. Unity's current animation system has temporary buffers it uses for blending, and there is additional copying of the sampled curve and other data. The current system layout is optimized for animation blending and more complex setups.",887],["Scale curves",887],["Animating scale curves is more expensive than animating translation and rotation curves. To improve performance, avoid scale animations.",887],["Note:** This does not apply to constant curves (curves that have the same value for the length of the animation clip). Constant curves are optimized, and are less expensive than normal curves. Constant curves that have the same values as the default scene values do not write to the scene every frame.",887],["Layers",887],["Most of the time Unity is evaluating animations, and keeps the overhead for animation layers and Animation State Machines to the minimum. The cost of adding another layer to the animator, synchronized or not, depends on what animations and blend trees are played by the layer. When the weight of the layer is zero, Unity skips the layer update.",887],["Humanoid vs. Generic animation types",887],["These are tips to help you decide between these types:",887],["When importing Humanoid animation use an Avatar Mask (class-AvatarMask) to remove IK Goals or finger animation if you don't need them.",887],["When you use Generic, using root motion is more expensive than not using it. If your animations don't use root motion, make sure that you have not specified a root bone.",887],["Scene-level optimization",887],["There are many optimizations that can be made, some useful tips include:",887],["Use hashes instead of strings to query the Animator.",887],["Implement a small AI Layer to control the Animator. You can make it provide simple callbacks for OnStateChange, OnTransitionBegin, and other events.",887],["Use State Tags to easily match your AI state machine to the Unity state machine.",887],["Use additional curves to simulate events.",887],["Use additional curves to mark up your animations; for example, in conjunction with target matching.",887],["",887],["Runtime Optimizations",887],["Visibility and updates",887],["Always optimize animations by setting the animators's Culling Mode to Based on Renderers, and disable the skinned mesh renderer's Update When Offscreen property. This saves Unity from updating animations when the character is not visible.",887],["Memory allocator customization",888],["When you are optimizing your application’s performance, one important factor to consider is the allocation of memory. Use this page for information on Unity’s native memory allocator types, and to learn about scenarios where you can customize the allocators to improve performance. Unity recommends that you have a general understanding of allocators.",888],["For a full reference of allocator types and their default values, see Customizing allocators.",888],["Note:** Not all platforms support this feature. See platform specific documentation for further information.",888],["An application uses memory allocators to balance performance and available memory space. If an application has a lot of spare memory, it can favour faster, memory-heavy allocators when it loads scenes and frames. However, if the application has limited memory, it needs to use that memory efficiently, even if that means using slower allocators. To help you get the best performance for different projects, you can customize Unity’s allocators to fit the size and requirements of each application.",888],["Unity has five allocator types. Each type has a different algorithm for fitting allocations into blocks of memory, and is therefore useful for different allocations. The important difference between allocations is usually persistence, or allocation lifespan, which determines where an allocation should go. For example, a long-live (persistent) allocation goes to the heap and bucket allocators, while short-lived allocations go to the threadsafe linear and TLS allocators.",888],["This table lists the algorithm and uses of each allocator type:",888],["Allocator type Algorithm Used for ",888],["Dynamic heap Two Level Segregated Fit (TLSF) • Main allocator• Gfx allocator• Typetree allocator• File cache allocator• Profiler allocator• Editor Profiler allocator (on Editor only) ",888],["Bucket Fixed size lock-free allocator As a shared allocator for small allocations for:• Main allocator• Gfx allocator• Typetree allocator• File cache allocator ",888],["Dual thread Redirects allocations based on size and thread ID • Main allocator• Gfx allocator• Typetree allocator• File cache allocator ",888],["Thread Local Storage (TLS) stack LIFO stack Temporary allocations ",888],["Threadsafe linear Round robin FIFO Buffers for passing data to jobs ",888],["Note**: The examples in this documentation use the memory usage reports that are written to the log when you close the player or Editor. To find your log files, follow the instructions on the log files page.",888],["Dynamic heap, bucket, and dual thread allocators",888],["This section reviews the functionality and customization scenarios for the dynamic heap, bucket and dual thread allocators.",888],["Overview",888],["The dual thread allocator is a wrapper that combines dynamic and bucket allocators. More specifically, it combines:",888],["Two dynamic heap allocators: A lock-free allocator for the main thread, and an allocator that is shared by all other threads, which locks on allocation and deallocation. Unity uses these allocators for allocations that are too large for the bucket allocator.",888],["The dynamic heap allocator uses memory blocks. Allocations that are equal to or greater than half a block go to the virtual memory system instead of the dynamic heap allocator.",888],["A bucket allocator for small allocations.",888],["If the bucket allocator is full, allocation spills over into the dynamic heap allocator.",888],["Dynamic heap allocator",888],["The main heap allocator is the dynamic heap allocator. It applies the algorithm Two Level Segregated Fit (TLSF) to blocks of memory.",888],["Each platform has a default block size, which you can customize. An allocation must be smaller than half a block. If an allocation is equal to or greater than half a block, it is too large for the dynamic heap allocator; instead, Unity uses the virtual memory API to make the allocation.",888],["An example usage report for the dynamic heap allocator:",888],["[ALLOC_DEFAULT_MAIN]",888],["Peak usage frame count: [16.0 MB-32.0 MB]: 497 frames, [32.0 MB-64.0 MB]: 1 frames",888],["Requested Block Size 16.0 MB",888],["Peak Block count 2",888],["Peak Allocated memory 54.2 MB",888],["Peak Large allocation bytes 40.2 MB",888],["In this example, the TLSF block size is set to 16 MB, and Unity has allocated two blocks. The peak usage of the allocator was 54.2MB. Of those 52.4MB, 40.2MB were not allocated in the TLSF block, and instead fell back to virtual memory. Most frames had 16-32MB of allocated memory, while one frame - likely the loading frame - peaked at 32-64MB of memory.",888],["If you increased the block size the large allocation would stay in the dynamic heap rather than fall back into virtual memory. However, that block size could lead to memory waste, because the blocks might not be fully used.",888],["To avoid using the typetree and cache allocators, set their size to 0. Allocations that would have used typetree and cache will instead fall back to the main allocator. This can cause more fragmentation, but saves the memory of those allocators’ memory blocks.",888],[" Bucket allocator",888],["The bucket allocator is a fast lock-free allocator that performs small allocations. Usually, the bucket allocator is used as a first step to speed up small allocations, before they go to the heap allocator.",888],["The allocator reserves blocks of memory for allocations. Each block is divided into subsections of 16KB. This is not configurable, and does not appear in the user interface. Each subsection is divided into allocations. The allocation size is a multiple of a configured fixed size, called granularity.",888],["The following example setup demonstrates the process of reserving blocks for allocations:",888],["In this setup, the total block size (Bucket Allocator Block Size) is 4MB, and the granularity of allocations (Bucket Allocator Granularity) is 16B. The first allocation is 16B, the second is 32B (2*16), then 48B, 64B, 80B, 96B, 112B, and 128B, for a total of eight buckets (Bucket Allocator BucketCount).",888],["Each subsection contains a different number of buckets. To calculate the number of buckets in a subsection, divide the subsection size (16KB) by the granularity size. For example:",888],["When the allocation granularity is 64B, 256 buckets fit in a subsection.",888],["When the allocation granularity is 16B, 1,024 buckets fit in a subsection.",888],["Bucket allocators produce different usage reports for a development build and a release build, because a development build, each allocation has a header of an additional 40B. The following diagram demonstrates the difference between development and release builds for 16B and 64B allocations:",888],["The header is also the reason the allocator reports it is full after allocating only 2MB of its 4MB:",888],["[ALLOC_BUCKET]",888],["Large Block size 4.0 MB",888],["Used Block count 1",888],["Peak Allocated bytes 2.0 MB",888],["Failed Allocations. Bucket layout:",888],["16B: 64 Subsections = 18724 buckets. Failed count: 3889",888],["32B: 17 Subsections = 3868 buckets. Failed count: 169583",888],["48B: 31 Subsections = 5771 buckets. Failed count: 39674",888],["64B: 28 Subsections = 4411 buckets. Failed count: 9981",888],["80B: 17 Subsections = 2321 buckets. Failed count: 14299",888],["96B: 6 Subsections = 722 buckets. Failed count: 9384",888],["112B: 44 Subsections = 4742 buckets. Failed count: 5909",888],["128B: 49 Subsections = 4778 buckets. Failed count: 8715",888],["In a release build for the same project, the allocator block size is enough:",888],["[ALLOC_BUCKET]",888],["Large Block size 4.0 MB",888],["Used Block count 1",888],["Peak Allocated bytes 3.3 MB",888],["If the bucket allocator is full, the allocation falls back to another allocator. The usage report displays usage statistics, including how many allocations failed. If the report displays a fail count that increases linearly, it is likely that the failed allocations happen when calculating the frames, not the load. Fallback allocations are not a problem for a scene load, but they can impact performance if they happen when calculating frames.",888],["To prevent these fallback allocations, increase the block size, and limit the new block size to match the frames’ peak usage, rather than the scene load peak usage. This prevents the block from becoming so large that it reserves a lot of memory that is then not available at runtime.",888],["Tip**: The Profiler allocators share an instance of a bucket allocator. You can customize this shared instance in the Shared Profiler Bucket Allocator.",888],["Dual thread allocator",888],["The dual thread allocator wraps a shared bucket allocator for small allocations, and two instances of the dynamic heap allocator: a lock-free allocator for the main thread, and an allocator that is shared by all other threads, but locks on allocation and deallocation.",888],["You can customize the block sizes of the two dynamic heap allocators:",888],["The usage report contains information for all three parts of the allocator. For example:",888],["[ALLOC_DEFAULT] Dual Thread Allocator",888],["Peak main deferred allocation count 135",888],["[ALLOC_BUCKET]",888],["Large Block size 4.0 MB",888],["Used Block count 1",888],["Peak Allocated bytes 3.3 MB",888],["[ALLOC_DEFAULT_MAIN]",888],["Peak usage frame count: [16.0 MB-32.0 MB]: 8283 frames, [32.0 MB-64.0 MB]: 1 frames",888],["Requested Block Size 16.0 MB",888],["Peak Block count 2",888],["Peak Allocated memory 53.3 MB",888],["Peak Large allocation bytes 40.2 MB",888],["[ALLOC_DEFAULT_THREAD]",888],["Peak usage frame count: [64.0 MB-128.0 MB]: 8284 frames",888],["Requested Block Size 16.0 MB",888],["Peak Block count 2",888],["Peak Allocated memory 78.3 MB",888],["Peak Large allocation bytes 47.3 MB",888],["Note**: The Peak main deferred allocation count is the number of items in a deletion queue. The main thread must delete any allocation it made. If another thread deletes an allocation, that allocation is added to a queue. The allocation waits in the queue for the main thread to delete it. It is then counted as a deferred allocation.",888],[" TLS and threadsafe linear allocators",888],["This section describes the functionality and customization scenarios for the Thread Local Storage (TLS) and threadsafe linear allocators.",888],["Overview",888],["Unity has two allocators that work outside the dual thread allocator:",888],["Thread Local Storage (TLS): A stack-based allocator for fast temporary allocations. This is the fastest allocator because it has almost no overhead. It also prevents fragmentation. It is Last In, First Out (LIFO)-based.",888],["Threadsafe linear: A First In, First Out (FIFO) round-robin allocator that the temporary job allocation uses to pass short-lived memory between worker threads).",888],["Thread Local Storage (TLS) stack allocator",888],["Each thread uses its own fast stack allocator for temporary allocations. These allocations are very fast, with a lifespan of less than a frame.",888],["The default block size for the temporary allocator is 4MB for the platforms and 16MB for the Unity Editor. You can customize these values.",888],["Note**: If the allocator use exceeds the configured block size, Unity increases the block size. The limit for this increase is twice the original size.",888],["If a thread’s stack allocator is full, allocations fall back to the threadsafe linear job allocator. A few overflow allocations are fine: 1 to 10 in a frame, or a few hundred during load. However, if the numbers grow on every frame, you can increase the block sizes.",888],["The information in the usage report can help you select a block size that is appropriate for your application. For example, in the following main thread usage report, the load peaks at 2.7MB, but the remaining frames are below 64KB. You can reduce the block size from 4MB to 64KB and allow the loading frame to spill over the allocations:",888],["[ALLOC_TEMP_TLS] TLS Allocator",888],["StackAllocators :",888],["[ALLOC_TEMP_MAIN]",888],["Peak usage frame count: [16.0 KB-32.0 KB]: 802 frames, [32.0 KB-64.0 KB]: 424 frames, [2.0 MB-4.0 MB]: 1 frames",888],["Initial Block Size 4.0 MB",888],["Current Block Size 4.0 MB",888],["Peak Allocated Bytes 2.7 MB",888],["Overflow Count 0",888],["[ALLOC_TEMP_Job.Worker 18]",888],["In this second example, the worker thread is not used for large temporary allocations. To save memory, you can reduce the worker’s block size to 32KB. This is especially useful on a multi-core machine, where each worker thread has its own stack:",888],["[ALLOC_TEMP_Job.Worker 14]",888],["Initial Block Size 256.0 KB",888],["Current Block Size 256.0 KB",888],["Peak Allocated Bytes 18.6 KB",888],["Overflow Count 0",888],["Threadsafe linear allocator",888],["The worker threads in Unity use a round robin first-in-first-out (FIFO) algorithm for fast, lock-free allocations of work buffers for jobs. The jobs dispose of the buffers when done.",888],["This allocator allocates blocks of memory, then linearly allocates memory within those blocks. Available blocks are held in a pool. When one block is full, the allocator fetches a new block from the pool. When the allocator no longer needs the memory in a block, it clears the block, and the block returns to the pool of available blocks. It is important to clear allocations quickly to make blocks available again, so a job should not stay allocated for more than a few frames.",888],["You can customize the block size. The allocator allocates up to 64 blocks, as needed.",888],["If all blocks are in use, or an allocation is too big for a block, the allocation falls back to the main heap allocator, which is much slower than the job allocator. A few overflow allocations are fine: 1 to 10 in a frame, or a few hundred, especially during load. If the overflow count grows with every frame, you can increase the block size to avoid fallback allocations. However, if you increase the block size too much (for example, to match peak use in events such as scene loading), you might leave a lot of memory unavailable during play.",888],["For example:",888],["[ALLOC_TEMP_JOB_4_FRAMES (JobTemp)]",888],["Initial Block Size 0.5 MB",888],["Used Block Count 64",888],["Overflow Count (too large) 0",888],["Overflow Count (full) 50408",888],["In this example usage report, the 0.5MB block size was too small to accommodate the job memory that the application needed, and the full allocator caused a large number of allocations to overflow.",888],["To check whether your build's frame overflow is sufficient, run it for a short time and then for a longer time. If the overflow count remains steady, the overflow is a high watermark that occurs during load. If the overflow count increases with a longer run, the build is processing a per-frame overflow. In both cases, you can increase the blocksize to reduce the overflow, but the overflow is less critical during load than per frame.",888],[" Customizing allocators",888],["To customize allocator settings, do one of the following:",888],["Use the Editor:",888],["Select Project Settings > Memory Settings.",888],["Select the lock icon next to the value you want to edit.",888],["Use command line arguments.",888],["To find the name of the allocator parameters you want to change, check the list of allocator settings the Editor and players print when they start up.",888],["For example, to change the block size of the main heap allocators, use -memorysetup-main-allocator-block-size=<new_value>",888],["The allocator parameter names and their default values:",888],["Allocator Description Parameter name Default value ",888],["Main Allocators The allocators Unity uses for most allocations. ",888],["Main Allocator The primary allocator Unity uses for most allocations. ",888],[" Main Thread Block Size Block size of dedicated main thread allocator. `memorysetup-main-allocator-block-size` `16777216` \n",888],[" Shared Thread Block Size Block size of shared thread allocator. `memorysetup-thread-allocator-block-size` `16777216` \n",888],["Gfx Allocator The allocator Unity uses for CPU allocations related to the Gfx system. ",888],[" Main Thread Block Size Block size of the dedicated main thread Gfx allocator. `memorysetup-gfx-main-allocator-block-size` `16777216` \n",888],[" Shared Thread Block Size Block size of the shared thread Gfx allocator. `memorysetup-gfx-thread-allocator-block-size` `16777216` \n",888],["Other Allocators \n",888],[" File Cache Block Size The file cache has its own allocator to avoid fragmentation. This is its block size. `memorysetup-cache-allocator-block-size` `4194304` \n",888],[" Type Tree Block Size The type treess have their own allocator to avoid fragmentation due to many small allocations. This is its block size. `memorysetup-typetree-allocator-block-size` `2097152` \n",888],["Shared Bucket Allocator The bucket allocator that is shared between the main allocators. \n",888],[" Bucket Allocator Granularity Step size for buckets in the shared allocator. `memorysetup-bucket-allocator-granularity` `16` \n",888],[" Bucket Allocator BucketCount Number of bucket sizes. `memorysetup-bucket-allocator-bucket-count` `8` \n",888],[" Bucket Allocator Block Size Size of memory blocks used for buckets. `memorysetup-bucket-allocator-block-size` `Editor: 8388608`<br/>`Player: 4194304` \n",888],[" Bucket Allocator Block Count Maximum number of blocks to be allocated. `memorysetup-bucket-allocator-block-count` `Editor: 8`<br/>`Player: 1` \n",888],["Fast Per Thread Temporary Allocators The Thread Local Storage (TLS) allocator that handles very short-lived allocations. ",888],["Main Thread Block Size The initial size for the main thread stack. memorysetup-temp-allocator-size-main Editor: 16777216Player: 4194304 ",888],["Job Worker Block Size Size of each job worker in the Unity job system. memorysetup-temp-allocator-size-job-worker E262144 ",888],["Background Job Worker Block Size Size for each background worker. memorysetup-temp-allocator-size-background-worker 32768 ",888],["Preload Block Size The preload manager stack size. memorysetup-temp-allocator-size-preload-manager Editor: 33554432Player: 262144 ",888],["Audio Worker Block Size Each audio worker thread’s stack size. memorysetup-temp-allocator-size-audio-worker 65536 ",888],["Cloud Worker Block Size Cloud worker threads stack size. memorysetup-temp-allocator-size-cloud-worker 32768 ",888],["Gfx Thread Blocksize The main render threads stack size. memorysetup-temp-allocator-size-gfx 262144 ",888],["GI Baking Blocksize Each GI worker thread’s stack size. memorysetup-temp-allocator-size-gi-baking-worker 262144 ",888],["NavMesh Worker Block Size Nav mesh worker threads stack size. memorysetup-temp-allocator-size-nav-mesh-worker 65536 ",888],["Fast Thread Shared Temporary Allocators Fast linear allocator for short lived allocations shared between threads. ",888],["Job Allocator Block Size The round robin linear thread allocator Unity mainly uses for the job worker threads. memorysetup-job-temp-allocator-block-size 2097152 ",888],["Background Job Allocator Block Size The linear allocator for the background workers that allows longer lived allocations. memorysetup-job-temp-allocator-block-size-background 21048576 ",888],["Job Allocator Block Size on low memory platforms Platforms with less than 2GB memory use this size for both the job workers and the background jobs. memorysetup-job-temp-allocator-reduction-small-platforms 262144 ",888],["Profiler Allocators Allocators that Unity uses exclusively for the Profiler so that they don’t interfere with the application’s allocation patterns. ",888],["Profiler Block Size The block size for the main part of the Profiler. memorysetup-profiler-allocator-block-size 16777216 ",888],["Editor Profiler Block Size Block size for the Editor part of the Profiler. This is not present on players. memorysetup-profiler-editor-allocator-block-size 1048576 ",888],["Shared Profiler Bucket Allocator Shared bucket allocator for the Profiler and Editor Profiler allocators.Not present on low memory platforms. ",888],[" Bucket Allocator Granularity Step size for buckets in the shared allocator. `memorysetup-profiler-bucket-allocator-granularity` `16` \n",888],[" Bucket Allocator BucketCount Number of bucket sizes. For example, if the value is 4, the sizes are 16, 32, 48 and 64. `memorysetup-profiler-bucket-allocator-bucket-count` `8` \n",888],[" Bucket Allocator Block Size Size of memory blocks used for buckets. `memorysetup-profiler-bucket-allocator-block-size` `Editor: 33554432`<br/>`Player: 4194304` \n",888],[" Bucket Allocator Block Count Maximum number of blocks to be allocated. `memorysetup-profiler-bucket-allocator-block-count` `Editor: 8`<br/>`Player: 1` \n",888],["Tip**: To ensure your settings improve performance, profile the application before and after making changes. See the Profiler overview page for more information. You can also check the memory usage reports. They are available in the log when you close the player or Editor. To find your log files, follow the instructions on the log files page.",888],["Storing and reading the settings",888],["Unity stores allocator settings in MemorySettings.asset, which populates the boot.config file with the modified settings at build time. This means new settings take effect at every build.",888],["In the Editor, the boot.config is in the ProjectSettings folder. It gets updated every time Unity imports or changes MemorySettings.asset. New values for the Editor only take effect on the next Editor startup.",888],["Compressing mesh data",889],["You can compress mesh data in Unity to reduce its size, which can improve performance. Unity provides two ways of compressing meshes. They work differently, and affect different aspects of performance:",889],["Vertex Compression is a setting that affects every mesh in your project. It allows you to use lower precision data formats in your meshes. This reduces the size of mesh data in memory, slightly reduces file size, and might improve GPU performance. The potential downside is a loss of precision.",889],["Mesh Compression is a setting that affects individual meshes. It compresses the mesh data on disk, which reduces file size. The potential downsides are increased loading times, increased temporary memory usage when loading, and the possibility of compression artifacts.",889],["You can use both compression methods in the same project, but not on the same mesh. If you apply Mesh Compression to a mesh, Unity doesn’t apply Vertex Compression to that mesh.",889],["Note:** Unity's default settings for Vertex Compression and Mesh Compression are suitable for most projects. You should change these settings only if you have a problem, and assess the results to make sure that the changes have helped.",889],["",889],["Vertex Compression",889],["The Vertex Compression setting allows you to use lower precision data formats for all the meshes in your project. You do this by configuring the data type for specific data channels.",889],["You can change the data type for a given channel from an FP32 (Floating Point32, a 32-bit floating point number) to an FP16 (Floating Point16, also known as a half-precision float). The FP16 format stores numbers with fewer places after the decimal point than FP32 numbers, which means that it takes up less space but offers slightly less precision.",889],["Data converted from FP32 to FP16 takes up less space in memory, and slightly less space on disk. On the GPU, the data uses less memory bandwidth, which might slightly improve GPU performance.",889],["The vertex compression technique compresses a mesh by a ratio that varies depending on how many vertex attributes you choose to compress. The compression ratio is usually around 1.45x when you compress normals, tangents, color, and three sets of UV coordinates.",889],["Limitations of Vertex Compression",889],["The mesh must meet the following requirements to use vertex compression:",889],["The mesh must have its Read/Write Enabled property disabled. You can change this property in the Model tab of the Model Import Settings window.",889],["The mesh must not be a skinned mesh.",889],["The target platform must support FP16 values.",889],["The model that contains the mesh must have its Mesh Compression value set to “Off”.",889],["The mesh is not eligible for dynamic batching or dynamic batching is turned off in the player settings.",889],["If a mesh fails to meet any of these requirements, then Unity does not apply vertex compression to that mesh and all data channels on the mesh use FP32 precision numbers.",889],["Configuring Vertex Compression",889],["To change the Vertex Compression settings:",889],["Open the Player settings (menu: Edit > Project Settings > Player).",889],["Open the Other Settings submenu and navigate to the Optimization heading.",889],["Select the Vertex Compression dropdown and select any channel to enable or disable compression for that channel. You can also select None to disable compression for all channels, or select Everything to enable compression for all channels.",889],["By default, Vertex Compression is set to Mixed, which Unity displays when multiple selections are active in the dropdown. By default, Unity uses Vertex Compression for the following channels:",889],["Normal",889],["Tangent",889],["Tex Coord 0",889],["Tex Coord 2",889],["Tex Coord 3",889],["Unity compresses these channels by default because in most cases this combination of settings provides a good mixture of saved memory without significant changes to how the mesh looks. Unity doesn’t compress the other settings, Position and Tex Coord 1, by default because these are more likely to affect the appearance of the mesh, and do not offer significant reduction in memory use. If you intend to enable Vertex Compression for the Position and Tex Coord 1 channels, you should test the settings to ensure they don’t cause artifacts in your meshes.",889],["",889],["Mesh Compression",889],["You can use the Mesh Compression setting to compress the mesh data for a given model asset on disk. The Mesh Compression algorithm is more aggressive than the Vertex Compression technique, which results in higher compression ratios and therefore smaller file sizes. However, it also has more downsides.",889],["When you apply this setting, Unity uses an algorithm to replace the explicit values for each compression channel with a range between the maximum and minimum, where a fixed number of bits represents where each value falls in that range. This reduces the size of the mesh data on disk. When Unity loads the mesh into memory, it decompresses the data, which means it converts this range back into the original values. After this, performance isn’t affected.",889],["This technique can be useful if you need to reduce your final build size or the size of the AssetBundle the mesh is in as much as possible, and if the reduction in performance from the runtime decompression is acceptable.",889],["Limitations of Mesh Compression",889],["At runtime, mesh decompression uses additional CPU resources; this means that loading mesh data takes longer. Unity also uses more temporary memory when decompressing meshes.",889],["Additionally, the relatively high compression ratio means that unwanted artifacts can appear when Unity decompresses the mesh. To avoid these artifacts, you should test each option for the mesh you want to compress and check that it appears correctly.",889],["Configuring Mesh Compression",889],["To use the Mesh Compression setting:",889],["Select a Model in your project’s Assets folder to open the Model tab of the Import Settings window.",889],["Navigate to the Meshes heading and find the Mesh Compression setting.",889],["Select the dropdown menu to choose a level for all meshes in that Model. You can also change this setting in code with the ModelImporterMeshCompression enumeration.",889],["Available values are High, Medium, Low, or Off. The following table shows typical compression ratios for each of these settings:",889],["Value Vertices Normals Tangents UVs Color ",889],["-- -- -- -- -- -- ",889],["Off 1.0 1.0 1.0 1.0 1.0 ",889],["Low 1.6 4.6 4.4 2.0 1.0 ",889],["Medium 2.0 5.6 5.3 3.2 1.3 ",889],["High 3.2 7.4 6.7 4.0 2.0 ",889],["Compression ratios for the mesh compression technique",889],["Note: The “Color” column in the above table shows ratios for a mesh that uses the UNorm8 format. For a mesh that uses the FP32 format for vertex colors, the ratios are 4.0 on the Low setting, 5.3 on the Medium setting, and 8.0 on the High setting.",889],["Meshes introduction",890],["A mesh is a collection of data that describes a shape. In Unity, you use meshes in the following ways:",890],["In graphics, you use meshes together with materials; meshes describe the shape of an object that the GPU renders, and materials describe the appearance of its surface.",890],["In physics, you can use a mesh to determine the shape of a collider.",890],["",890],["Deformable meshes",890],["In addition to regular meshes, Unity also supports deformable meshes.",890],["Deformable meshes fall into the following categories:",890],["Skinned meshes: These meshes work with additional data called bones. Bones form a structure called a skeleton (also called a rig, or joint hierarchy), and the skinned mesh contains data that allows it to deform in a realistic way when the skeleton moves. You usually use skinned meshes for skeletal animation with Unity's Animation features, but you can also use them with Rigidbody components to create “ragdoll” effects.",890],["Meshes with blend shapes: These meshes contain data called blend shapes. Blend shapes describe versions of the mesh that are deformed into different shapes, which Unity interpolates between. You use blend shapes for morph target animation, which is a common technique for facial animation.",890],["Meshes that work with a Cloth component component for realistic fabric simulation.",890],["",890],["Creating meshes",890],["You can add meshes to a Unity project in the following ways:",890],["Create a mesh as part of a model in a 3D modeling program, then import it. Unity creates a mesh asset as a part of the model hierarchy when you import a model. For more information, see Importing Models.",890],["Create a mesh directly with in-Editor tools. Unity has built-in primitive shapes such as spheres and capsules that you can place directly into a Scene. You can also use a package like ProBuilder to model a custom mesh in the Editor.",890],["Create meshes with code, either at runtime or in the Editor.",890],["",890],["Working with meshes",890],["Unity stores meshes in your project as mesh assets, and represents them in C# code with the Mesh class.",890],["Depending on how you use meshes, they work with different components:",890],["In graphics, Unity renders regular meshes with Mesh Renderer components, and deformable meshes with Skinned Mesh Renderer components.",890],["In physics, Unity uses the Mesh Collider component to determine the shape of a collider.",890],["For detailed information about the data that a mesh contains and how Unity represents that data, see Mesh data.",890],["Meshes",891],["This section contains information on working with meshes in Unity.",891],["Page Description ",891],["",891],["Meshes introduction Introductory information about meshes, and key terminology. ",891],["Mesh data Information about the data that a mesh contains, and how Unity stores that data. ",891],["Mesh asset Information about mesh assets, and what the Inspector shows when you select a mesh asset. ",891],["Mesh components Information about components that render meshes. ",891],["Using meshes with C# scripts How to work with meshes in C# scripts. ",891],["Level of detail (LOD) for meshes Information about a feature that can reduce the number of GPU operations that Unity requires to render distant meshes. ",891],["Compressing mesh data How to compress mesh data to reduce its size, which can improve performance. ",891],["Loading texture and mesh data How Unity loads mesh and texture data at runtime. ",891],["Messaging System",892],["The new UI system uses a messaging system designed to replace SendMessage. The system is pure C# and aims to address some of the issues present with SendMessage. The system works using custom interfaces that can be implemented on a MonoBehaviour to indicate that the component is capable of receiving a callback from the messaging system. When the call is made a target GameObject is specified; the call will be issued on all components of the GameObject that implement the specified interface that the call is to be issued against. The messaging system allows for custom user data to be passed, as well as how far through the GameObject hierarchy the event should propagate; that is should it just execute for the specified GameObject, or should it also execute on children and parents. In addition to this the messaging framework provides helper functions to search for and find GameObjects that implement a given messaging interface.",892],["The messaging system is generic and designed for use not just by the UI system but also by general game code. It is relatively trivial to add custom messaging events and they will work using the same framework that the UI system uses for all event handling.",892],["How Do I Define A Custom Message?",892],["If you wish to define a custom message it is relatively simple. In the UnityEngine.EventSystems namespace there is a base interface called 'IEventSystemHandler'. Anything that extends from this can be considered as a target for receiving events via the messaging system.",892],["public interface ICustomMessageTarget : IEventSystemHandler",892],["// functions that can be called via the messaging system",892],["void Message1();",892],["void Message2();",892],["Once this interface is defined then it can be implemented by a MonoBehaviour. When implemented it defines the functions that will be executed if the given message is issued against this MonoBehaviours GameObject.",892],["public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget",892],["public void Message1()",892],["Debug.Log (\"Message 1 received\");",892],["public void Message2()",892],["Debug.Log (\"Message 2 received\");",892],["Now that a script exists that can receive the message we need to issue the message. Normally this would be in response to some loosely coupled event that occurs. For example, in the UI system we issue events for such things as PointerEnter and PointerExit, as well as a variety of other things that can happen in response to user input into the application.",892],["To send a message a static helper class exists to do this. As arguments it requires a target object for the message, some user specific data, and a functor that maps to the specific function in the message interface you wish to target.",892],["ExecuteEvents.Execute(target, null, (x,y)=>x.Message1());",892],["This code will execute the function Message1 on any components on the GameObject target that implement the ICustomMessageTarget interface. The scripting documentation for the ExecuteEvents class covers other forms of the Execute functions, such as Executing in children or in parents.",892],["Debug Metal graphics",893],["Unity's Frame Debugger supports Metal and should be the first tool you use to debug graphics issues in a Unity application that uses Metal. For more in-depth, Metal-specific graphics issues, Xcode provides graphics debugging tools such as API Validation and Shader Validation. For more information, see Diagnose Metal Programming Issues Early and Viewing Your GPU Workload with the Metal Debugger.",893],["Note**: Enabling validation increases CPU resource intensity, so only enable it for debugging purposes.",893],["Introduction to Metal",894],["Metal is the standard graphics API for Apple platforms. It's optimized for Apple devices and thus provides a low-overhead API for the platforms it supports.",894],["Unity uses Metal graphics for Apple platforms by default so there is no need to perform steps to enable it.",894],["Important**: Apple deprecated support for OpenGL and OpenGL ES, and you can't submit applications that use OpenGL/OpenGL ES to the App Store. You should only use Metal to support Unity applications that run on Apple platforms.",894],["Additional resources",894],["Optimize Metal graphics",895],["Metal supports multiple optimizations that you can use to increase the performance of your application.",895],["Use memoryless render targets",895],["Metal supports memoryless render targets which enables you to render to a RenderTexture without backing it up in system memory. Unity only stores the contents temporarily in the on-tile memory during rendering.",895],["Metal supports memoryless render targets on mobile devices from iOS and tvOS 10.0, and desktop devices (including Apple silicon) from macOS 11.",895],["For more information, see RenderTexture.memorylessMode.",895],["Metal requirements and compatibility",896],["This page lists the requirements for using Metal as well as the features that Metal is compatible with.",896],["Platform compatibility",896],["Unity supports Metal for the Unity Player on iOS, tvOS, and macOS. Unity also supports Metal for the Unity Editor on macOS.",896],["Hardware compatibility",896],["Unity supports Metal for all Apple devices that Unity supports.",896],["Render pipeline compatibility",896],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",896],["----------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",896],["Metal Yes Yes Yes (macOS only) Yes ",896],["Shader compatibility",896],["Metal supports shaders that have a minimum shader compilation target of 3.5.",896],["Metal doesn't support geometry shaders.",896],["Shader data types support",896],["Some Metal devices don't support the 16-bit half data type. On these devices, Unity shaders represent half as a 32-bit float. Similarly, Unity shaders represent the real data type as a half on mobile devices and as a float on desktop platforms. This section of the documentation is relevant if you want to use the half data type and want to deploy your application to a device that doesn't support half.",896],["Using half in the correct places can speed up operations, save memory, and save battery power on mobile devices. It's best practice to use half for values that don't need high precision and use the information in this section of the documentation to make sure your code handles devices that don't support half.",896],["For more information about shader data types and the precision they support, see Shader data types and precision.",896],["Support implications",896],["16-bit floating point numbers have low precision compared to 32-bit floating point numbers. If you use half and test your application on a device that supports it, you can often see any issues caused by low precision and then fix them. However, if you test your application on a device that doesn't support half (and substitutes float for half), this can hide precision issues which will appear later when the application runs on a device that supports half.",896],["If you want to deploy your Unity application to devices that don't support half, make sure that your code works when float is substituted for half. Metal GPUs that support half, also expect buffers, including constant buffers, to contain 16-bit values. GPUs that don't support half expect these buffers to contain 32-bit values. Your CPU-side code needs to consider this when you write values to buffers.",896],["Metal",897],["Metal is one of the graphics API that Unity supports.",897],["Topic Description ",897],["------------------------------------------------------------ ------------------------------------------------------------ ",897],["Introduction to Metal Understand the Metal graphics API, its benefits and drawbacks. ",897],["Metal requirements and compatibility Understand system requirements and feature compatibility for Metal. ",897],["Debug Metal graphics Debug Metal-specific graphics issues that arise in your project. ",897],["Optimize Metal graphics Use Metal-specific graphics optimizations to improve the performance of your application. ",897],["Additional resources",897],["Lightmapping and shaders",898],["This page contains information about how to make shaders compatible with Unity's lightmappers.",898],["The Meta Pass",898],["A Meta Pass is a Shader pass that provides albedo and emission values to the Global Illumination system. These values are separate from those used in real-time rendering, meaning that you can use the Meta Pass to control how a GameObject looks from the point of view of the lighting baking system without affecting its appearance at runtime.",898],["An example of when this would be useful is if you wanted the green moss on a cliff to generate exaggerated green indirect light in your lightmaps, but you didn't want to recolor the terrain in the real-time pass of shader.",898],["All of Unity's built-in Materials have a Meta Pass, and the Standard Shader contains a Meta pass. If you are using these, you do not need to do anything to enable the Meta Pass. If you are using a custom Shader, you can add your own Meta Pass.",898],[" Example Shader with a Meta pass",898],["The Shader below allows you to specify an albedo color and albedo Texture that are used only by the lighting baking system, without affecting the appearance of the Material at runtime. In this example, emission is taken from the UVs; but any value could be used to control it.",898],["Shader \"Custom/metaPassShader\"{",898],["Properties {",898],["_Color (\"Color\", Color)=(1,1,1,1)",898],["_MainTex (\"Albedo (RGB)\",2D)=\"white\"{}",898],["_Glossiness (\"Smoothness\", Range(0,1))=0.5",898],["_Metallic (\"Metallic\", Range(0,1))=0.0",898],["_GIAlbedoColor (\"Color Albedo (GI)\", Color)=(1,1,1,1)",898],["_GIAlbedoTex (\"Albedo (GI)\",2D)=\"white\"{}",898],["SubShader {",898],["// ------------------------------------------------------------------",898],["// Extracts information for lightmapping, GI (emission, albedo, ...)",898],["// This pass is not used during regular rendering.",898],["Pass",898],["Name \"META\"",898],["Tags {\"LightMode\"=\"Meta\"}",898],["Cull Off",898],["CGPROGRAM",898],["include\"UnityStandardMeta.cginc\"",898],["sampler2D _GIAlbedoTex;",898],["fixed4 _GIAlbedoColor;",898],["float4 frag_meta2 (v2f_meta i): SV_Target",898],["// We're interested in diffuse & specular colors",898],["// and surface roughness to produce final albedo.",898],["FragmentCommonData data = UNITY_SETUP_BRDF_INPUT (i.uv);",898],["UnityMetaInput o;",898],["UNITY_INITIALIZE_OUTPUT(UnityMetaInput, o);",898],["fixed4 c = tex2D (_GIAlbedoTex, i.uv);",898],["o.Albedo = fixed3(c.rgb * _GIAlbedoColor.rgb);",898],["o.Emission = Emission(i.uv.xy);",898],["return UnityMetaFragment(o);",898],["pragma vertex vert_meta",898],["pragma fragment frag_meta2",898],["pragma shader_feature _EMISSION",898],["pragma shader_feature _METALLICGLOSSMAP",898],["pragma shader_feature _ DETAILMULX2",898],["ENDCG",898],["Tags {\"RenderType\"=\"Opaque\"}",898],["LOD 200",898],["CGPROGRAM",898],["// Physically-based Standard lighting model, and enable shadows on all light types",898],["pragma surface surf Standard fullforwardshadows nometa",898],["// Use Shader model 3.0 target, to get nicer looking lighting",898],["pragma target 3.0",898],["sampler2D _MainTex;",898],["struct Input {",898],["float2 uv_MainTex;",898],["};",898],["half _Glossiness;",898],["half _Metallic;",898],["fixed4 _Color;",898],["void surf (Input IN,inout SurfaceOutputStandard o){",898],["// Albedo comes from a texture tinted by color",898],["fixed4 c = tex2D (MainTex, IN.uvMainTex)* _Color;",898],["o.Albedo = c.rgb;",898],["// Metallic and smoothness come from slider variables",898],["o.Metallic = _Metallic;",898],["o.Smoothness = _Glossiness;",898],["o.Alpha = c.a;",898],["ENDCG",898],["FallBack \"Diffuse\"",898],["Meta Pass technical information",898],["Enlighten Realtime Global Illumination and lightmapping use Unity's Meta Pass to extract albedo values from surfaces and handle diffuse transport themselves by using surface albedo on each bounce.",898],["Metallic surfaces with a black (or almost black) albedo bounce very little light diffusely. Because the lightmappers handle only diffuse light transport, this means that you may see very little bounced light from these types of surfaces. Unity's built-in Meta Passes account for this by providing a boosted version of the metal hue color instead of a physically correct albedo. This means that you get some bounce even from metallic materials. If you want a different behaviour, you can create a custom meta pass.",898],["The built-in Meta Passes do not handle spectral specular reflectance.",898],["Note: If you are using Enlighten Realtime Global Illumination, the Meta pass in the Player is not as fast as DynamicGI.SetEmissive, but it is more flexible because you are not limited to a single color.",898],["Custom RGB transparency",898],["By default, shaders in Unity use monochrome transparency. This means that Unity uses the alpha channel of the material color or albedo texture to evaluate light transmission through the material.",898],["During lightmapping, you can use custom RGB transparency instead. This means that Unity uses the values of a given texture to evaluate light transmission through the material. This is useful when you want color-based transparency that is independent of the material color or albedo texture; for example, if you want to bake lighting that simulates the behavior of a light shining through a stained glass window.",898],["To use custom RGB transparency during lightmapping, add the following line to your ShaderLab code:",898],["_TransparencyLM (\"Transmissive Texture\", 2D) = \"white\" {}",898],["This creates a material property that appears in the Material Inspector with the name \"Transmissive Texture\". Assign the desired texture to this field.",898],["Methods of distribution",899],["After you prepare the Sprite Atlases for distribution, there are several methods to distribute the Atlases. Each method is more suitable for different Project needs or characteristics, such as the size of the Atlas Assets or the target platform of the Project.",899],["The following are the two main methods to consider when you distribute Sprite Atlases:",899],["Place the Sprite Atlases into the build's Resources folder.",899],["Distribute them as downloadable AssetBundles.",899],["Method A: Resources folder",899],["Unity can distribute Sprite Atlases in the final build, as long as it is within the size limits of their chosen target platform. To distribute Sprite Atlases together with the final build, place them in the Project’s Resource folder, which includes Sprite Atlases in the exported build when users download the application. Unity then loads these Atlases from the Resource folder via script). Refer to documentation on the Resources API for more information.",899],["Method B: Downloadable AssetBundles",899],["Sprite Atlases that are large in size can cause inconvenience for the application user if Unity includes them with the exported build’s download, because they require a lot of bandwidth and device storage. To avoid problems, distribute large Sprite Atlases in AssetBundles, so that the player can download each AssetBundle individually at their discretion. Unity then loads the Sprite Atlases during run time via script. Refer to the AssetBundle Workflow for more information.",899],["Mobile feature set",900],["Use the Mobile feature set to optimize your apps for mobile devices and provide a performant experience for your users. This feature set includes utilities for debugging on device and support for notifications.",900],["Getting started",900],["To get started with the Mobile feature set, the following setup is required:",900],["Enable data provider subsystems to work with Adaptive Performance. See Provider Installation.",900],["Verify the Project settings for Adaptive performance.",900],["Packages",900],["The Mobile feature set contains the following packages:",900],["Samples",900],["The following packages have package samples:",900],["Related forums",900],["Public roadmap",900],["Find out about upcoming features for Mobile development in the Platforms roadmap.",900],["Mobile device input",901],["On mobile devices, the Input class offers access to touchscreen, accelerometer and geographical/location input.",901],["Access to keyboard on mobile devices is provided via the Mobile keyboard.",901],["Multi-touch screen",901],["The iPhone, iPad and iPod Touch devices are capable of tracking up to five fingers touching the screen simultaneously. You can retrieve the status of each finger touching the screen during the last frame by accessing the Input.touches property array.",901],["Android devices don't have a unified limit on how many fingers they track. Instead, it varies from device to device and can be anything from two-touch on older devices to five fingers on some newer devices.",901],["Each finger touch is represented by an Input.Touch data structure:",901],["Property: Description: ",901],["fingerId The unique index for a touch. ",901],["position The screen position of the touch. ",901],["deltaPosition The screen position change since the last frame. ",901],["deltaTime Amount of time that has passed since the last state change. ",901],["tapCount The iPhone/iPad screen is able to distinguish quick finger taps by the user. This counter will let you know how many times the user has tapped the screen without moving a finger to the sides. Android devices do not count number of taps, this field is always 1. ",901],["phase Describes the state of the touch, which can help you determine whether the user has just started to touch screen, just moved their finger or just lifted their finger. ",901],["Began A finger just touched the screen. ",901],["Moved A finger moved on the screen. ",901],["Stationary A finger is touching the screen but hasn't moved since the last frame. ",901],["Ended A finger was lifted from the screen. This is the final phase of a touch. ",901],["Canceled The system cancelled tracking for the touch, as when (for example) the user puts the device to their face or more than five touches happened simultaneously. This is the final phase of a touch. ",901],["Here's an example script that shoots a ray whenever the user taps on the screen:",901],["using UnityEngine;",901],["public class TouchInput : MonoBehaviour",901],["GameObject particle;",901],["void Update()",901],["foreach(Touch touch in Input.touches)",901],["if (touch.phase == TouchPhase.Began)",901],["// Construct a ray from the current touch coordinates",901],["Ray ray = Camera.main.ScreenPointToRay(touch.position);",901],["if (Physics.Raycast(ray))",901],["// Create a particle if hit",901],["Instantiate(particle, transform.position, transform.rotation);",901],["Mouse simulation",901],["On top of native touch support Unity iOS/Android provides a mouse simulation. You can use mouse functionality from the standard Input class. Note that iOS/Android devices are designed to support multiple finger touch. Using the mouse functionality will support just a single finger touch. Also, finger touch on mobile devices can move from one area to another with no movement between them. Mouse simulation on mobile devices will provide movement, so is very different compared to touch input. The recommendation is to use the mouse simulation during early development but to use touch input as soon as possible.",901],["Accelerometer",901],["As the mobile device moves, a built-in accelerometer reports linear acceleration",901],["changes along the three primary axes in three-dimensional space. Acceleration",901],["along each axis is reported directly by the hardware as G-force values. A value",901],["of 1.0 represents a load of about +1g along a given axis while a value of -1.0",901],["represents -1g. If you hold the device upright (with the home button at the",901],["bottom) in front of you, the X axis is positive along the right, the Y axis is",901],["positive directly up, and the Z axis is positive pointing toward you.",901],["You can retrieve the accelerometer value by accessing the Input.acceleration property.",901],["The following is an example script which will move an object using the accelerometer:",901],["using UnityEngine;",901],["public class Accelerometer : MonoBehaviour",901],["float speed = 10.0f;",901],["void Update()",901],["Vector3 dir = Vector3.zero;",901],["// we assume that the device is held parallel to the ground",901],["// and the Home button is in the right hand",901],["// remap the device acceleration axis to game coordinates:",901],["// 1) XY plane of the device is mapped onto XZ plane",901],["// 2) rotated 90 degrees around Y axis",901],["dir.x = -Input.acceleration.y;",901],["dir.z = Input.acceleration.x;",901],["// clamp acceleration vector to the unit sphere",901],["if (dir.sqrMagnitude > 1)",901],["dir.Normalize();",901],["// Make it move 10 meters per second instead of 10 meters per frame...",901],["dir *= Time.deltaTime;",901],["// Move object",901],["transform.Translate(dir * speed);",901],["Low-Pass Filter",901],["Accelerometer readings can be jerky and noisy. Applying low-pass filtering on the signal allows you to smooth it and get rid of high frequency noise.",901],["The following script shows you how to apply low-pass filtering to accelerometer readings:",901],["using UnityEngine;",901],["public class LowPassFilterExample : MonoBehaviour",901],["float accelerometerUpdateInterval = 1.0f / 60.0f;",901],["float lowPassKernelWidthInSeconds = 1.0f;",901],["private float lowPassFilterFactor;",901],["private Vector3 lowPassValue = Vector3.zero;",901],["void Start()",901],["lowPassFilterFactor = accelerometerUpdateInterval / lowPassKernelWidthInSeconds;",901],["lowPassValue = Input.acceleration;",901],["private void Update()",901],["lowPassValue = LowPassFilterAccelerometer(lowPassValue);",901],["Vector3 LowPassFilterAccelerometer(Vector3 prevValue)",901],["Vector3 newValue = Vector3.Lerp(prevValue, Input.acceleration, lowPassFilterFactor);",901],["return newValue;",901],["The greater the value of LowPassKernelWidthInSeconds, the slower the filtered value will converge towards the current input sample (and vice versa).",901],["I'd like as much precision as possible when reading the accelerometer. What should I do?",901],["Reading the Input.acceleration variable does not equal sampling the hardware. Put simply, Unity samples the hardware at a frequency of 60Hz and stores the result into the variable. In reality, things are a little bit more complicated -- accelerometer sampling doesn't occur at consistent time intervals, if under significant CPU loads. As a result, the system might report 2 samples during one frame, then 1 sample during the next frame.",901],["You can access all measurements executed by accelerometer during the frame. The following code will illustrate a simple average of all the accelerometer events that were collected within the last frame:",901],["public class AccelerationEvents : MonoBehaviour",901],["void Update()",901],["GetAccelerometerValue();",901],["Vector3 GetAccelerometerValue()",901],["Vector3 acc = Vector3.zero;",901],["float period = 0.0f;",901],["foreach(AccelerationEvent evnt in Input.accelerationEvents)",901],["acc += evnt.acceleration * evnt.deltaTime;",901],["period += evnt.deltaTime;",901],["if (period > 0)",901],["acc *= 1.0f / period;",901],["return acc;",901],["Mobile Keyboard",902],["In most cases, Unity will handle keyboard input automatically for GUI elements but it is also easy to show the keyboard on demand from a script.",902],["GUI Elements",902],["The keyboard will appear automatically when a user taps on editable GUI elements. Currently, GUI.TextField, GUI.TextArea and GUI.PasswordField will display the keyboard; see the GUI class documentation for further details.",902],["Manual Keyboard Handling",902],["Use the TouchScreenKeyboard.Open() function to open the keyboard. Please see the TouchScreenKeyboard scripting reference for the parameters that this function takes.",902],["Keyboard Layout Options",902],["The Keyboard supports the following options:-",902],["Property: Function: ",902],["TouchScreenKeyboardType.Default Letters. Can be switched to keyboard with numbers and punctuation. ",902],["TouchScreenKeyboardType.ASCIICapable Letters. Can be switched to keyboard with numbers and punctuation. ",902],["TouchScreenKeyboardType.NumbersAndPunctuation Numbers and punctuation. Can be switched to keyboard with letters. ",902],["TouchScreenKeyboardType.URL Letters with slash and .com buttons. Can be switched to keyboard with numbers and punctuation. ",902],["TouchScreenKeyboardType.NumberPad Only numbers from 0 to 9. ",902],["TouchScreenKeyboardType.PhonePad Keyboard used to enter phone numbers. ",902],["TouchScreenKeyboardType.NamePhonePad Letters. Can be switched to phone keyboard. ",902],["TouchScreenKeyboardType.EmailAddress Letters with @ sign. Can be switched to keyboard with numbers and punctuation. ",902],["Text Preview",902],["By default, an edit box will be created and placed on top of the keyboard after it appears. This works as preview of the text that user is typing, so the text is always visible for the user. However, you can disable text preview by setting TouchScreenKeyboard.hideInput to true. Note that this works only for certain keyboard types and input modes. For example, it will not work for phone keypads and multi-line text input. In such cases, the edit box will always appear. TouchScreenKeyboard.hideInput is a global variable and will affect all keyboards.",902],["Visibility and Keyboard Size",902],["There are three keyboard properties in TouchScreenKeyboard that determine keyboard visibility status and size on the screen.",902],["Property: Function: ",902],["visible Returns true if the keyboard is fully visible on the screen and can be used to enter characters. ",902],["area Returns the position and dimensions of the keyboard. ",902],["active Returns true if the keyboard is activated. This property is not static property. You must have a keyboard instance to use this property. ",902],["Note that TouchScreenKeyboard.area will return a Rect with position and size set to 0 until the keyboard is fully visible on the screen. You should not query this value immediately after TouchScreenKeyboard.Open(). The sequence of keyboard events is as follows:",902],["TouchScreenKeyboard.Open() is called. TouchScreenKeyboard.active returns true. TouchScreenKeyboard.visible returns false. TouchScreenKeyboard.area returns (0, 0, 0, 0).",902],["Keyboard slides out into the screen. All properties remain the same.",902],["Keyboard stops sliding. TouchScreenKeyboard.active returns true. TouchScreenKeyboard.visible returns true. TouchScreenKeyboard.area returns real position and size of the keyboard.",902],["Secure Text Input",902],["It is possible to configure the keyboard to hide symbols when typing. This is useful when users are required to enter sensitive information (such as passwords). To manually open keyboard with secure text input enabled, use the following code:",902],["TouchScreenKeyboard.Open(\"\", TouchScreenKeyboardType.Default, false, false, true);",902],["Alert keyboard",902],["To display the keyboard with a black semi-transparent background instead of the classic opaque, call TouchScreenKeyboard.Open() as follows:",902],["TouchScreenKeyboard.Open(\"\", TouchScreenKeyboardType.Default, false, false, true, true);",902],["Creating models for optimal performance",903],["Here are a few tips for creating models for optimal performance. Some of these tips apply to all models, and some apply only to animated models:",903],["Using these techniques might help increase the animation and rendering speed of your models, but be aware that they might also reduce the visual fidelity and realistic effects you are trying to achieve. There is no single answer for every situation that can produce a perfect balance between better performance and visual realism. You have to find the perfect balance according to the complexity of your characters and your scene, vs. the overall appearance and realism that you require.",903],["",903],["Minimize the polygon count",903],["The number of polygons you should use depends on the visual quality you require and the platform you are targeting. These two competing facts are equally true:",903],["The fewer the polygons you use in your meshes, the faster your application runs. This is because every vertex, edge, or face requires computing resources.",903],["The more polygons you use in your Meshes, the more detailed and organic your GameObjects look, because smaller polygons give you more control over the shape.",903],["Also consider what else is competing for rendering resources. If you have a lot of GameObjects or Terrain objects on screen at the same time, consider reducing the polygon count per meshes.",903],["Note that the actual number of vertices that graphics hardware has to process is usually not the same as the number reported by a modelling application. Modeling applications usually display the number of distinct corner points that make up a model (known as the geometric vertex count). For a graphics card, however, some geometric vertices need to be split into two or more logical vertices for rendering purposes: for example, a vertex must be split if it has multiple normals, UV coordinates or vertex colors. Consequently, the vertex count in Unity is usually higher than the count given by the 3D application.",903],["",903],["Use as few materials as possible",903],["Keep the number of materials on each model as low as possible. Only use more than one material on a character when you need to use different shaders for different parts; for example, you might use a special shaders for the eyes on a character model.",903],["",903],["Use a single skinned mesh",903],["For animated character models that use a Skinned Mesh Renderer, you should use only one of these components per character. Unity's animation system optimizes animation using visibility culling and bounding volume updates. It only activates these optimizations if you use one Animation component and one Skinned Mesh Renderer on a model.",903],["Using two skinned meshes in place of a single one could roughly double the rendering time for a model, and there is seldom any practical advantage in using multiple meshes.",903],["",903],["Use as few bones as possible",903],["In general, the fewer bones you use, the better the performance is. However, sometimes you need to create character models with a large number of bones: for example, when you want a lot of customizable attachments. These extra bones increase the size of the build, and may have a relative processing cost for each additional bone. For example, 15 additional bones on a rig that already has 30 bones takes Unity 50% more operations to solve in Generic mode, which might impact the time it takes to solve.",903],["Note that you can have additional bones for Generic and Humanoid types. When you have no animations playing using the additional bones, the processing cost should be negligible. This cost is even lower if their attachments are non-existent or hidden.",903],["For performance reasons, use linear blend skinning with a maximum of four influences per vertex. However, some 3D modeling applications allow more than four bones to influence vertices, so you have to weigh the performance cost against greater control.",903],["",903],["Keep forward and inverse kinematics separate",903],["When Unity imports animations, it bakes a Model's inverse kinematic (IK) nodes into forward kinematics (FK), and so Unity doesn't need the IK nodes at all. However, if they are left in the model, then Unity still includes them in calculations, even though they don't affect the animation. You can either delete the redundant IK nodes in Unity or in your 3D modeling application. To facilitate removing the IK nodes, keep separate IK and FK hierarchies while modeling.",903],["Importing models into Unity",904],["This section contains information on importing models that you create in an external application into Unity.",904],["Page Description ",904],["",904],["Importing a model How to import any type of model. ",904],["Importing a model with humanoid animations How to import a humanoid model for use with Unity's Animation System. ",904],["Importing a model with non-humanoid (generic) animations How to import a non-humanoid model for use with Unity's Animation System. ",904],["Model Import Settings window Information on the Model Import Settings window, used for importing all models other than SketchUp and SpeedTree models. ",904],["SketchUp Import Settings window Information on the SketchUp Import Settings window, used for importing SketchUp models. ",904],["SpeedTree Import Settings window Information on the SpeedTree Import Settings window, used for importing SpeedTree models. ",904],["Preparing your model files for export",905],["",905],["Scaling factors",905],["Unity's physics and lighting systems expect 1 meter in the game world to be 1 unit in the imported Model file.",905],["The defaults for different 3D packages are as follows:",905],[".fbx, .max, .jas = 0.01",905],[".3ds = 0.1",905],[".mb, .ma, .lxo, .dxf, .blend, .dae = 1",905],["When importing Model files into Unity from a 3D modeling application with a different scaling factor, you can convert the file units to use the Unity scale by enabling the Convert Units option.",905],["",905],["Optimizing your files",905],["Before you import your files into Unity, there are a number of steps you should follow to ensure that your files are optimized in the best way.",905],["Think about what you want to export: some scene objects are essential but others might be unnecessary, so you can optimize the data in Unity by keeping only the essential objects. This helps remove unwanted data from your scene, and also means you can use a preset or custom scene exporter to automate or simplify the export process.",905],["Preparing what you need to include",905],["The following table outlines special considerations you should make for each asset type to work most optimally in Unity:",905],["Object Preparations ",905],["",905],["Meshes All NURBS, NURMS, splines, patches, and subdiv surfaces must be converted to polygons (triangulation or quadrangulation) ",905],["Bake deformers Make sure that you bake deformers onto the models in your application before exporting to the .fbx file format. For example, if you want to export a complex rig from Maya, you can bake the deformation onto skin weights before you export the Model to .fbx. ",905],["Textures Make sure the textures in your application are either sourced from your Unity Project, or copy them into a folder called Textures inside your Unity Project. Note: Don’t use the Embed Media option to embed textures into the .fbx file. Because Unity has to extract the textures before it uses them, embedding them enlarges your project and slows the import process. ",905],["Smoothing If you want to import blend shape normals, you must have smoothing groups in the .fbx file. ",905],["Setting the .fbx export options",905],["Before you export the .fbx file, make sure that you use the latest .fbx exporter version that your 3D modeling application supports. When you export to .fbx, make a note of each setting in the export dialog of your 3D modeling application so that you can match up the .fbx import settings in Unity. Most .fbx exporters allow you to enable or disable exporting of certain animations, cameras, and lighting effects, so if anything is missing when you import it into Unity, check to see if it was exported.",905],["Verifying and importing into Unity",905],["Before importing your .fbx file into Unity, verify the size of your exported file. Perform a sanity check on the file size (for example, to see if it is larger than 10KB). Re-import your .fbx file back into the 3D modeling software you used to generate it (for example, into a new scene). Check to make sure it is what you expected.",905],["To import your file into Unity, follow the instructions for Importing, keeping in mind how you set the export options in your 3D modeling software.",905],["Models",906],["Models are files that contain data about the shape and appearance of 3D objects, such as characters, terrain, or environment objects.",906],["Model files can contain a variety of data, including meshes, materials, and textures. They can also contain animation data, for animated characters.",906],["You usually create models in an external application, and then import them into Unity.",906],["This section contains the following information:",906],["Page Description ",906],["",906],["Creating models outside of Unity Creating models in external applications, and exporting them for use with Unity. ",906],["Importing models Importing model files that were created in external applications into Unity. ",906],["Modifying Source Assets Through Scripting",907],["Automatic Instantiation",907],["Usually when you want to make a modification to any sort of game asset, you want it to happen at runtime and you want it to be temporary. For example, if your character picks up an invincibility power-up, you might want to change the shader of the material for the player character to visually demonstrate the invincible state. This action involves modifying the material that's being used. This modification is not permanent because we don't want the material to have a different shader when we exit Play Mode.",907],["However, it is possible in Unity to write scripts that will permanently modify a source asset. Let's use the above material example as a starting point.",907],["To temporarily change the material's shader, we change the shader property of the material component.",907],["private var invincibleShader = Shader.Find (\"Specular\");",907],["function StartInvincibility {",907],["renderer.material.shader = invincibleShader;",907],["When using this script and exiting Play Mode, the state of the material will be reset to whatever it was before entering Play Mode initially. This happens because whenever renderer.material is accessed, the material is automatically instantiated and the instance is returned. This instance is simultaneously and automatically applied to the renderer. So you can make any changes that your heart desires without fear of permanence.",907],["Direct Modification",907],["IMPORTANT NOTE",907],["The method presented below will modify actual source asset files used within Unity. These modifications are not undoable. Use them with caution.",907],["Now let's say that we don't want the material to reset when we exit play mode. For this, you can use renderer.sharedMaterial. The sharedMaterial property will return the actual asset used by this renderer (and maybe others).",907],["The code below will permanently change the material to use the Specular shader. It will not reset the material to the state it was in before Play Mode.",907],["private var invincibleShader = Shader.Find (\"Specular\");",907],["function StartInvincibility {",907],["renderer.sharedMaterial.shader = invincibleShader;",907],["As you can see, making any changes to a sharedMaterial can be both useful and risky. Any change made to a sharedMaterial will be permanent, and not undoable.",907],["Applicable Class Members",907],["The same formula described above can be applied to more than just materials. The full list of assets that follow this convention is as follows:",907],["Materials: renderer.material and renderer.sharedMaterial",907],["Meshes: meshFilter.mesh and meshFilter.sharedMesh",907],["Physic Materials: collider.material and collider.sharedMaterial",907],["Direct Assignment",907],["If you declare a public variable of any above class: Material, Mesh, or Physic Material, and make modifications to the asset using that variable instead of using the relevant class member, you will not receive the benefits of automatic instantiation before the modifications are applied.",907],["Assets that are not automatically instantiated",907],["There are two different assets that are never automatically instantiated when modifying them.",907],["Any modifications made to these assets through scripting are always permanent, and never undoable. So if you're changing your terrain's heightmap through scripting, you'll need to account for instantiating and assigning values on your own. Same goes for Textures. If you change the pixels of a texture file, the change is permanent.",907],["iOS and Android Notes",907],["Texture2D assets are never automatically instantiated when modifying them in iOS and Android projects. Any modifications made to these assets through scripting are always permanent, and never undoable. So if you change the pixels of a texture file, the change is permanent.",907],["Mono overview",908],["The Mono scripting backend compiles code at runtime, with a technique called just-in-time compilation (JIT). Unity uses a fork of the open source Mono project.",908],["Some platforms don’t support JIT compilation, so the Mono backend doesn’t work on every platform. Other platforms support JIT and Mono but not ahead-of-time compilation (AOT), and so can’t support the IL2CPP backend. When a platform can support both backends, Mono is the default. For more information, see Scripting restrictions.",908],["Mono supports the debugging of managed code. For more information, see Debugging C# code in Unity.",908],["Building a project using Mono",908],["You can change the scripting backend Unity uses to build your application in one of two ways:",908],["Through the Player Settings menu in the Editor. Perform the following steps to change the scripting backend through the Player settings menu:",908],["Go to Edit > Project Settings.",908],["Select Player to open the Player settings for the current platform in the Inspector.",908],["Under the Other Settings sub-menu, navigate to Configuration > Scripting Backend.",908],["Select Mono.",908],["Through the Editor scripting API. Use the PlayerSettings.SetScriptingBackend property to change the scripting backend that Unity uses.",908],["To start the build process, open the Build Settings window (Menu: File > Build Settings) and select Build.",908],["Both the Mono and IL2CPP scripting backends require a new build for each platform you want to target. For example, to support both the Android and iOS platforms, you need to build your application twice and produce two binary files, one for Android and one for iOS.",908],["Multi-display",909],["You can use multi-display to display up to eight different Camera views of your application on up to eight different monitors at the same time. You can use this for setups such as PC games, arcade game machines, or public display installations.",909],["Unity supports multi-display on:",909],["Desktop platforms (Windows, macOS X, and Linux)",909],["Android (OpenGL ES and Vulkan)",909],["iOS",909],["Some features work only on some platforms. See the Display, Screen and FullScreenMode APIs for more information about compatibility.",909],["Activating multi-display support",909],["Unity's default display mode is one monitor only. When you run your application, you need use Display.Activate() to explicitly activate additional displays. Once you activate a display, you can't deactivate it.",909],["The best time to activate additional displays is when your application creates a new Scene. A good way to do this is to attach a script component to the default Camera. Make sure you call Display.Activate() only once during startup. As a best practice, you might find it helpful to create a small initial Scene to test your script.",909],["Example script",909],["using UnityEngine;",909],["using System.Collections;",909],["public class ActivateAllDisplays : MonoBehaviour",909],["void Start ()",909],["Debug.Log (\"displays connected: \" + Display.displays.Length);",909],["// Display.displays[0] is the primary, default display and is always ON, so start at index 1.",909],["// Check if additional displays are available and activate each.",909],["for (int i = 1; i < Display.displays.Length; i++)",909],["Display.displays[i].Activate();",909],["void Update()",909],["Previewing multiple displays in your Project",909],["To preview different Camera views, follow these steps:",909],["In the Camera's Inspector, select a Target Display for that Camera.",909],["Make sure you're in the Game view.",909],["From the Display menu in the top-left corner, select the Display to Preview.",909],["API support",909],["Unity supports the following UnityEngine.Display API methods:",909],["Method Description ",909],["public void Activate() Activates a specific display on the current monitor's width and height. This call must be made once on starting a new Scene. It can be called from a user script attached to a Camera or dummy GameObject in a new Scene. ",909],["public void Activate(int width, int height, int refreshRate) Windows only. Activates a specific display of custom width and height. On Linux and macOS X, secondary displays always use the display's current resolution, if available. ",909],["Controlling monitor display positions",909],["By default, the user's computer sorts the relative positions of its display monitors based on its x, y virtual desktop. To override this so that your application displays without any sorting, start your application from the command line and use the -multidisplay command line flag.",909],["Support for Vulkan on Android added in Unity 2020.1",909],["Using more than one camera",910],["When created, a Unity scene contains just a single camera and this is all you need for most situations. However, you can have as many cameras in a scene as you like and their views can be combined in different ways, as described below.",910],["Switching cameras",910],["By default, a camera renders its view to cover the whole screen and so only one camera view can be seen at a time (the visible camera is the one that has the highest value for its depth property). By disabling one camera and enabling another from a script, you can \"cut\" from one camera to another to give different views of a scene. You might do this, for example, to switch between an overhead map view and a first-person view.",910],["using UnityEngine;",910],["public class ExampleScript : MonoBehaviour {",910],["public Camera firstPersonCamera;",910],["public Camera overheadCamera;",910],["// Call this function to disable FPS camera,",910],["// and enable overhead camera.",910],["public void ShowOverheadView() {",910],["firstPersonCamera.enabled = false;",910],["overheadCamera.enabled = true;",910],["// Call this function to enable FPS camera,",910],["// and disable overhead camera.",910],["public void ShowFirstPersonView() {",910],["firstPersonCamera.enabled = true;",910],["overheadCamera.enabled = false;",910],["Rendering a small camera view inside a larger one",910],["Usually, you want at least one camera view covering the whole screen (the default setting) but it is often useful to show another view inside a small area of the screen. For example, you might show a rear view mirror in a driving game or show an overhead mini-map in the corner of the screen while the main view is first-person. You can set the size of a camera's onscreen rectangle using its Viewport Rect property.",910],["The coordinates of the viewport rectangle are \"normalized\" with respect to the screen. The bottom and left edges are at the 0.0 coordinate, while the top and right edges are at 1.0. A coordinate value of 0.5 is halfway across. In addition to the viewport size, you should also set the depth property of the camera with the smaller view to a higher value than the background camera. The exact value does not matter but the rule is that a camera with a higher depth value is rendered over one with a lower value.",910],["Work with multiple scenes in Unity",911],["If you need to create large streaming worlds or want to effectively manage multiple scenes at runtime, you can open and edit multiple scenes in the Unity Editor simultaneously. Having multiple scenes open at once also lets you improve the workflow, especially if you often have to edit scenes collaboratively.",911],["Topic Description ",911],[":--------------- :-------------------------- ",911],["Setup multiple scenes How to setup, view, and edit settings with multiple scenes in your project. ",911],["Bake data in multiple scenes How to bake lightmaps, NavMesh data, and occlusion culling data in multiple scenes simultaneously. ",911],["Use scripts to edit multiple scenes How to edit multiple scenes with scripts, through the Editor or at runtime. ",911],["Additional resources",911],["Avatar Muscle & Settings tab",912],["Unity's animation system allows you to control the range of motion of different bones using Muscles.",912],["Once the Avatar has been properly configured, the animation system \"understands\" the bone structure and allows you to start using the Muscles & Settings tab of the Avatar's Inspector. Use the Muscles & Settings tab to tweak the character's range of motion and ensure the character deforms in a convincing way, free from visual artifacts or self-overlaps.",912],["The areas of the Muscle & Settings tab include:",912],["(A)** Buttons to toggle between the Mapping and Muscles & Settings tabs. You must Apply or Revert any changes made before switching between tabs.",912],["(B)** Use the Muscle Group Preview area to manipulate the character using predefined deformations. These affect several bones at once.",912],["(C)** Use the Per-Muscle Settings area to adjust individual bones in the body. You can expand the muscle settings to change the range limits of each settings. For example, by default, Unity gives the Head-Nod and Head-Tilt settings a possible range of -40 to 40 degrees but you can decrease these ranges even further to add stiffness to these movements.",912],["(D)** Use the Additional Settings to adjust specific effects in the body.",912],["(E)** The Muscles menu provides a Reset tool to return all muscle settings to their default values.",912],["(F)** Buttons to accept any changes made (Accept), discard any changes (Revert), and leave the Avatar window (Done). You must Apply or Revert any changes made before leaving the Avatar window.",912],["Previewing changes",912],["For the settings in the Muscle Group Preview and Per-Muscle Settings areas, you can preview the changes right in the Scene view. You can drag the sliders left and right to see the range of movement for each setting applied to your character:",912],["You can see the bones of the skeleton through the Mesh.",912],["Translate Degree of Freedom (DoF)",912],["You can enable the Translate DoF option in the Additional Settings to enable translation animations for the humanoid. If this option is disabled, Unity animates the bones using only rotations. Translation DoF is available for Chest, UpperChest, Neck, LeftUpperLeg, RightUpperLeg, LeftShoulder and RightShoulder muscles.",912],["Note:** Enabling Translate DoF can increase performance requirements, because the animation system needs to perform an extra step to retarget humanoid animation. For this reason, you should only enable this option if you know your animation contains animated translations of some of the bones in your character.",912],["Namespaces",913],["As projects become larger and the number of scripts increases, the likelihood of having clashes between script class names grows ever greater. This is especially true when several programmers are working on different aspects of the game separately and will eventually combine their efforts in one project. For example, one programmer may be writing the code to control the main player character while another writes the equivalent code for the enemy. Both programmers may choose to call their main script class Controller, but this will cause a clash when their projects are combined.",913],["To some extent, this problem can be avoided by adopting a naming convention or by renaming classes whenever a clash is discovered (eg, the classes above could be given names like PlayerController and EnemyController). However, this is troublesome when there are several classes with clashing names or when variables are declared using those names - each mention of the old class name must be replaced for the code to compile.",913],["The C# language offers a feature called namespaces that solves this problem in a robust way. A namespace is simply a collection of classes that are referred to using a chosen prefix on the class name. See Microsoft’s documentation on namespaces for more information.",913],["In the example below, the classes Controller1 and Controller2 are members of a namespace called Enemy:",913],["namespace Enemy {",913],["public class Controller1 : MonoBehaviour {",913],["...",913],["public class Controller2 : MonoBehaviour {",913],["...",913],["In code, these classes are referred to as Enemy.Controller1 and Enemy.Controller2, respectively. This is better than renaming the classes insofar as the namespace declaration can be bracketed around existing class declarations (ie, it is not necessary to change the names of all the classes individually). Furthermore, you can use multiple bracketed namespace sections around classes wherever they occur, even if those classes are in different source files.",913],["You can avoid having to type the namespace prefix repeatedly by adding a using directive at the top of the file.",913],["using Enemy;",913],["This line indicates that where the class names Controller1 and Controller2 are found, they should be taken to mean Enemy.Controller1 and Enemy.Controller2, respectively. If the script also needs to refer to classes with the same name from a different namespace (one called Player, say), then the prefix can still be used. If two namespaces that contain clashing class names are imported with using directives at the same time, the compiler will report an error.",913],["Note:** Unity has a specific limitation relating to namespaces and MonoBehaviour or ScriptableObject classes. If your file contains a definition for a MonoBehaviour or ScriptableObject class, you cannot use multiple namespaces within that file.",913],["Unity gives the following warning in the console:",913],["Class MyClass can not exist in multiple namespaces in the same file, even if one is excluded with preprocessor directives. Please move these to separate files if this is the case.",913],["This means if you have a file which defines a MonoBehaviour in one namespace, and other classes in a different namespace within the same file, Unity will not recognize the MonoBehaviour class and you will not be able to use it on GameObjects. This limitation was introduced in Unity 2020.1 to improve import and compilation speed, and therefore some older asset store packages written before this limitation was introduced may function incorrectly as a result. To fix problems relating to this issue, separate out the code for the classes in each namespace to separate files.",913],["Low-level native plug-in interface",914],["Native Plug-ins in Unity can receive callbacks when certain events happen. You can use this to implement low-level rendering in your plug-in so it can work with Unity’s multithreaded rendering.",914],["Interface Registry",914],["To handle main Unity events, a plug-in must export UnityPluginLoad and UnityPluginUnload functions. IUnityInterfaces enables the plug-in to access these functions, which you can find in IUnityInterface.h in the plug-in API:",914],["include \"IUnityInterface.h\"",914],["include \"IUnityGraphics.h\"",914],["// Unity plugin load event",914],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API",914],["UnityPluginLoad(IUnityInterfaces* unityInterfaces)",914],["IUnityGraphics* graphics = unityInterfaces->Get();",914],["Access to the graphics device",914],["Use the IUnityGraphics interface, which you can find in IUnityGraphics.h, to give a plug-in access to generic graphics device functionality. This script demonstrates how you can use the IUnityGraphics interface to register a callback:",914],["include \"IUnityInterface.h\"",914],["include \"IUnityGraphics.h\"",914],["static IUnityInterfaces* s_UnityInterfaces = NULL;",914],["static IUnityGraphics* s_Graphics = NULL;",914],["static UnityGfxRenderer s_RendererType = kUnityGfxRendererNull;",914],["// Unity plugin load event",914],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API",914],["UnityPluginLoad(IUnityInterfaces* unityInterfaces)",914],["s_UnityInterfaces = unityInterfaces;",914],["s_Graphics = unityInterfaces->Get();",914],["s_Graphics->RegisterDeviceEventCallback(OnGraphicsDeviceEvent);",914],["// Run OnGraphicsDeviceEvent(initialize) manually on plugin load",914],["// to not miss the event in case the graphics device is already initialized",914],["OnGraphicsDeviceEvent(kUnityGfxDeviceEventInitialize);",914],["// Unity plugin unload event",914],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API",914],["UnityPluginUnload()",914],["s_Graphics->UnregisterDeviceEventCallback(OnGraphicsDeviceEvent);",914],["static void UNITY_INTERFACE_API",914],["OnGraphicsDeviceEvent(UnityGfxDeviceEventType eventType)",914],["switch (eventType)",914],["case kUnityGfxDeviceEventInitialize:",914],["s_RendererType = s_Graphics->GetRenderer();",914],["//TODO: user initialization code",914],["break;",914],["case kUnityGfxDeviceEventShutdown:",914],["s_RendererType = kUnityGfxRendererNull;",914],["//TODO: user shutdown code",914],["break;",914],["case kUnityGfxDeviceEventBeforeReset:",914],["//TODO: user Direct3D 9 code",914],["break;",914],["case kUnityGfxDeviceEventAfterReset:",914],["//TODO: user Direct3D 9 code",914],["break;",914],["};",914],["Plug-in callbacks on the rendering thread",914],["You can use multithreading to render in Unity, if the platform and number of available CPUs allows for it.",914],["Note**: When you use multithreaded rendering, the rendering API commands happen on a thread that is completely separate from the thread that runs MonoBehaviour scripts. The communication between the main thread and the render thread means that your plug-in might not start rendering immediately, depending on how much work the main thread has pushed to the render thread.",914],["To render from the plug-in, call GL.IssuePluginEvent from your managed plug-in script. This causes Unity’s rendering pipeline to call the native function from the render thread, as demonstrated in the code example below. For example, if you call GL.IssuePluginEvent from the Camera’s OnPostRender function, the function will call a plug-in callback immediately after the camera has finished rendering.",914],["Native plugin code:",914],["// Plugin function to handle a specific rendering event",914],["static void UNITY_INTERFACE_API OnRenderEvent(int eventID)",914],["// User rendering code",914],["// Freely defined function to pass a callback to plugin-specific scripts",914],["extern \"C\" UnityRenderingEvent UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API",914],["GetRenderEventFunc()",914],["return OnRenderEvent;",914],["Managed plug-in code:",914],["if UNITY_IPHONE && !UNITY_EDITOR",914],["[DllImport (\"__Internal\")]",914],["else",914],["[DllImport(\"RenderingPlugin\")]",914],["endif",914],["private static extern IntPtr GetRenderEventFunc();",914],["// Queue a specific callback to be called on the render thread",914],["GL.IssuePluginEvent(GetRenderEventFunc(), 1);",914],["The signature for the UnityRenderingEvent callback is provided in IUnityGraphics.h in the Native Rendering Plugin sample.",914],["Plug-in using the OpenGL graphics API",914],["There are two kinds of OpenGL objects:",914],["Objects shared across OpenGL contexts**, such as texture, buffer, renderbuffer, samplers, query, shader, and program objects.",914],["Per-OpenGL context objects**, such as vertex array, framebuffer, program pipeline, transform feedback, and sync objects.",914],["Unity uses multiple OpenGL contexts. When initializing and closing the Editor and the Player, Unity relies on a master context, but when rendering it uses dedicated contexts. This means you can’t create per-context objects during kUnityGfxDeviceEventInitialize and kUnityGfxDeviceEventShutdown events.",914],["• 2017-05-16 ",914],["Native plug-ins",915],["Unity supports native plug-ins, which are libraries of native code you can write in languages such as C, C++, and Objective-C. Plug-ins allow the code you write in C# to call functions from these libraries. This feature allows Unity to integrate with middleware libraries or existing C/C++ code.",915],["The native plug-in provides a simple C interface, which the C# script then exposes to your other scripts. Unity can also call functions that the native plug-in exports when certain low-level rendering events happen (for example, when you create a graphics device). See Low-level native plug-in interface for more information.",915],["For an example of a native plugin, see Native Renderer Plugin.",915],["Using a native plug-in",915],["To use a native plug-in:",915],["Write functions in a C-based language to access the features you need.",915],["Compile them into a library.",915],["In Unity, create a C# script that calls functions in the native library.",915],["You build native plug-ins with native code compilers on the target platform. Because plug-in functions use a C-based call interface, you must declare the functions with C linkage to avoid name mangling issues.",915],["Example",915],["A simple native library with a single function might have code that looks like this:",915],["float ExamplePluginFunction () { return 5.0F; }",915],["To access this code from within Unity, use the following C# script:",915],["```lang-C#",915],["using UnityEngine;",915],["using System.Runtime.InteropServices;",915],["class ExampleScript : MonoBehaviour {",915],["if UNITY_IPHONE",915],["// On iOS plugins are statically linked into",915],["// the executable, so we have to use __Internal as the",915],["// library name.",915],["[DllImport (\"__Internal\")]",915],["else",915],["// Other platforms load plugins dynamically, so pass the",915],["// name of the plugin's dynamic library.",915],["[DllImport (\"PluginName\")]",915],["endif",915],["private static extern float ExamplePluginFunction ();",915],["void Awake () {",915],["// Calls the ExamplePluginFunction inside the plugin",915],["// And prints 5 to the console",915],["print (ExamplePluginFunction ());",915],["Further information",915],["You can learn more about using native plugins to interact with third-party code libraries, including how you can implement rendering in your plug-in, with the following pages:",915],["Nested Prefabs",916],["You can include Prefab instances inside other Prefabs. This is called nesting Prefabs. Nested Prefabs retain their links to their own Prefab Assets, while also forming part of another Prefab Asset.",916],["",916],["Adding a nested Prefab in Prefab Mode",916],["In Prefab Mode, you can add and work with Prefab instances just like you would do in Scenes. You can drag a Prefab Asset from the Project window to the Hierarchy window or Scene view to create a Prefab instance from that Asset inside the Prefab you have open.",916],["Note**: The root GameObject of the Prefab that is open in Prefab Mode is not shown with the blue cube Prefab icon, however any instances of other Prefabs are. You can also add overrides to these Prefab instances, just like with Prefab instances in scenes.",916],["",916],["Nesting Prefabs via their instances",916],["You can also add a Prefab instance as a child to another Prefab instance in the Scene without going into Prefab Mode, just like you can add any other GameObject. Such an added Prefab instance has a plus badge overlayed on the icon in the Hierarchy which indicates that it's an override on that specific instance of the outer Prefab.",916],["The added Prefab can be reverted or applied to the outer Prefab in the same way as other overrides (either via the Overrides drop-down window, or via the context menu on the GameObject in the Hierarchy), as described in Editing a Prefab via its instances. The Overrides drop-down button is only on the outer Prefab. Once applied, the Prefab no longer shows the plus badge, since it is no longer an override, but is nested in the outer Prefab Asset itself. It does however retain its blue cube icon because it is a Prefab instance in its own right, and retains its connection to its own Prefab Asset.",916],["2018-07-31 ",916],["Nested Prefabs and Prefab Variants added in 2018.3",916],["Sub-State Machines",917],["It is common for a character to have complex actions that consist of a number of stages. Rather than handle the entire action with a single state, it makes sense to identify the separate stages and use a separate state for each. For example, a character may have an action called \"Trickshot\" where it crouches to take a steady aim, shoots and then stands up again.",917],["Although this is useful for control purposes, the downside is that the state machine will become large and unwieldy as more of these complex actions are added. You can simplify things somewhat just by separating the groups of states visually with empty space in the editor. However, Mecanim goes a step further than this by allowing you to collapse a group of states into a single named item in the state machine diagram. These collapsed groups of states are called Sub-state machines.",917],["You can create a sub-state machine by right clicking on an empty space within the Animator Controller window and selecting Create Sub-State Machine from the context menu. A sub-state machine is represented in the editor by an elongated hexagon to distinguish it from normal states.",917],["When you double-click the hexagon, the editor is cleared to let you edit the sub-state machine as though it were a completely separate state machine in its own right. The bar at the top of the window shows a \"breadcrumb trail\" to show which sub-state machine is currently being edited (and note that you can create sub-state machines within other sub-state machines, and so on). Clicking an item in the trail will focus the editor on that particular sub-state machine.",917],["External transitions",917],["As noted above, a sub-state machine is just a way of visually collapsing a group of states in the editor, so when you make a transition to a sub-state machine, you have to choose which of its states you want to connect to.",917],["You will notice an extra state in the sub-state machine whose name begins with Up.",917],["The Up state represents the \"outside world\", the state machine that encloses the sub-state machine in the view. If you add a transition from a state in sub-state machine to the Up state, you will be prompted to choose one of the states of the enclosing machine to connect to.",917],["Social API",918],["Social API is Unity's point of access to social features, such as:",918],["User profiles",918],["Friends lists",918],["Achievements",918],["Statistics / Leaderboards",918],["It provides a unified interface to different social back-ends, such as GameCenter, and is meant to be used primarily by programmers on the game project.",918],["The Social API is mainly an asynchronous API, and the typical way to use it is by making a function call and registering for a callback to when that function completes. The asynchronous function may have side effects, such as populating certain state variables in the API, and the callback could contain data from the server to be processed.",918],["The Social class resides in the UnityEngine namespace and so is always available but the other Social API classes are kept in their own namespace, UnityEngine.SocialPlatforms. Furthermore, implementations of the Social API are in a sub-namespace, like SocialPlatforms.GameCenter.",918],["Here is an example of how to use the Social API:",918],["using UnityEngine;",918],["using UnityEngine.SocialPlatforms;",918],["public class SocialExample : MonoBehaviour {",918],["void Start () {",918],["// Authenticate and register a ProcessAuthentication callback",918],["// This call needs to be made before we can proceed to other calls in the Social API",918],["Social.localUser.Authenticate (ProcessAuthentication);",918],["// This function gets called when Authenticate completes",918],["// Note that if the operation is successful, Social.localUser will contain data from the server.",918],["void ProcessAuthentication (bool success) {",918],["if (success) {",918],["Debug.Log (\"Authenticated, checking achievements\");",918],["// Request loaded achievements, and register a callback for processing them",918],["Social.LoadAchievements (ProcessLoadedAchievements);",918],["else",918],["Debug.Log (\"Failed to authenticate\");",918],["// This function gets called when the LoadAchievement call completes",918],["void ProcessLoadedAchievements (IAchievement[] achievements) {",918],["if (achievements.Length == 0)",918],["Debug.Log (\"Error: no achievements found\");",918],["else",918],["Debug.Log (\"Got \" + achievements.Length + \" achievements\");",918],["// You can also call into the functions like this",918],["Social.ReportProgress (\"Achievement01\", 100.0, result => {",918],["if (result)",918],["Debug.Log (\"Successfully reported achievement progress\");",918],["else",918],["Debug.Log (\"Failed to report achievement\");",918],["});",918],["For more info on the Social API, see Social API Scripting Reference",918],["Null Reference Exceptions",919],["A NullReferenceException happens when you try to access a reference variable that isn't referencing any object. If a reference variable isn't referencing an object, then it'll be treated as null. The run-time will tell you that you are trying to access an object, when the variable is null by issuing a NullReferenceException.",919],["Reference variables in c# and JavaScript are similar in concept to pointers in C and C++. Reference types default to null to indicate that they are not referencing any object. Hence, if you try and access the object that is being referenced and there isn't one, you will get a NullReferenceException.",919],["When you get a NullReferenceException in your code it means that you have forgotten to set a variable before using it. The error message will look something like:",919],["NullReferenceException: Object reference not set to an instance of an object",919],["at Example.Start () [0x0000b] in /Unity/projects/nre/Assets/Example.cs:10",919],["This error message says that a NullReferenceException happened on line 10 of the script file Example.cs. Also, the message says that the exception happened inside the Start() function. This makes the Null Reference Exception easy to find and fix. In this example, the code is:",919],["//c# example",919],["using UnityEngine;",919],["using System.Collections;",919],["public class Example : MonoBehaviour {",919],["// Use this for initialization",919],["void Start () {",919],["GameObject go = GameObject.Find(\"wibble\");",919],["Debug.Log(go.name);",919],["The code simply looks for a game object called \"wibble\". In this example there is no game object with that name, so the Find() function returns null. On the next line (line 9) we use the go variable and try and print out the name of the game object it references. Because we are accessing a game object that doesn't exist the run-time gives us a NullReferenceException",919],["Null Checks",919],["Although it can be frustrating when this happens it just means the script needs to be more careful. The solution in this simple example is to change the code like this:",919],["using UnityEngine;",919],["using System.Collections;",919],["public class Example : MonoBehaviour {",919],["void Start () {",919],["GameObject go = GameObject.Find(\"wibble\");",919],["if (go) {",919],["Debug.Log(go.name);",919],["} else {",919],["Debug.Log(\"No game object called wibble found\");",919],["Now, before we try and do anything with the go variable, we check to see that it is not null. If it is null, then we display a message.",919],["Try/Catch Blocks",919],["Another cause for NullReferenceException is to use a variable that should be initialised in the Inspector. If you forget to do this, then the variable will be null. A different way to deal with NullReferenceException is to use try/catch block. For example, this code:",919],["using UnityEngine;",919],["using System;",919],["using System.Collections;",919],["public class Example2 : MonoBehaviour {",919],["public Light myLight; // set in the inspector",919],["void Start () {",919],["try {",919],["myLight.color = Color.yellow;",919],["catch (NullReferenceException ex) {",919],["Debug.Log(\"myLight was not set in the inspector\");",919],["In this code example, the variable called myLight is a Light which should be set in the Inspector window. If this variable is not set, then it will default to null. Attempting to change the color of the light in the try block causes a NullReferenceException which is picked up by the catch block. The catch block displays a message which might be more helpful to artists and game designers, and reminds them to set the light in the inspector.",919],["Summary",919],["NullReferenceException happens when your script code tries to use a variable which isn't set (referencing) and object.",919],["The error message that appears tells you a great deal about where in the code the problem happens.",919],["NullReferenceException can be avoided by writing code that checks for null before accessing an object, or uses try/catch blocks.",919],["Using an oblique frustum",920],["By default, the view frustum is arranged symmetrically around the camera's center line, but it doesn't necessarily need to be. You can make the frustum oblique, which means that one side is at a smaller angle to the centre line than the opposite side.",920],["This makes the perspective on one side of the image seem more condensed, giving the impression that the viewer is very close to the object visible at that edge. An example of how this can be used is a car racing game; if the frustum is flattened at its bottom edge, it appears to the viewer that they are closer to the road, accentuating the feeling of speed.",920],["In the Built-in Render Pipeline, a Camera that uses an oblique frustum can only use the Forward rendering path. If your Camera is set to use the Deferred Shading rendering path and you make its frustum oblique, Unity forces that Camera to use the Forward rendering path.",920],["Setting frustum obliqueness",920],["Although the Camera component does not have functions specifically for setting the obliqueness of the frustum, you can do it by either enabling the camera’s Physical Camera properties and applying a Lens Shift, or by adding a script to alter the camera’s projection matrix.",920],["Setting Frustum Obliqueness with a Lens Shift",920],["Enable a camera’s Physical Camera properties to expose the Lens Shift options. You can use these to offset the camera’s focal center along the X and Y axes in a way that minimizes distortion of the rendered image.",920],["Shifting the lens reduces the frustum angle on the side opposite the direction of the shift. For example, as you shift the lens up, the angle between the bottom of the frustum and the camera’s center line gets smaller.",920],["![Normally a camera’s frustum is symmetrical (left), meaning the angles on either side of the center line are equal. Shifting the lens (right) makes the frustum oblique, meaning the angle is smaller on one side than on the other.",920],["](../uploads/Main/ObliqueFrustum_LensShift.png)",920],["For further information about the Physical Camera options, see documentation on Physical Cameras.",920],["For further information about setting individual Physical Camera properties, see the Camera Component reference.",920],["Setting frustum obliqueness using a script",920],["The following script example shows how to quickly achieve an oblique frustum by altering the camera’s projection matrix. Note that you can only see the effect of the script while the game is running Play mode.",920],["using UnityEngine;",920],["using System.Collections;",920],["public class ExampleScript : MonoBehaviour {",920],["void SetObliqueness(float horizObl, float vertObl) {",920],["Matrix4x4 mat = Camera.main.projectionMatrix;",920],["mat[0, 2] = horizObl;",920],["mat[1, 2] = vertObl;",920],["Camera.main.projectionMatrix = mat;",920],["C# script example",920],["It is not necessary to understand how the projection matrix works to make use of this. The horizObl and vertObl values set the amount of horizontal and vertical obliqueness, respectively. A value of zero indicates no obliqueness. A positive value shifts the frustum rightwards or upwards, thereby flattening the left or bottom side. A negative value shifts leftwards or downwards and consequently flattens the right or top side of the frustum. The effect can be seen directly if this script is added to a camera and the game is switched to the scene view while the game runs; the wireframe depiction of the camera's frustum will change as you vary the values of horizObl and vertObl in the inspector. A value of 1 or -1 in either variable indicates that one side of the frustum is completely flat against the centreline. It is possible although seldom necessary to use values outside this range.",920],["Occlusion culling additional resources",921],["Unity uses the Umbra library to perform occlusion culling. Further information on Umbra, including information about the bake process, the data structures inside the occlusion culling data, and the runtime operations that Umbra performs, can be found in the following articles:",921],["This Gamasutra article by Umbra goes into detail about how Umbra works: Next Generation Occlusion Culling by Umbra",921],["This Unity blog series contains guidance on optimising Umbra. It relates to an older version of Unity, and the user interface has changed since then, but the core principles are still the same:",921],["Using occlusion culling with dynamic GameObjects",922],["GameObjects can be static, or dynamic (not static). Static GameObjects and dynamic GameObjects behave differently in Unity's occlusion culling system:",922],["Unity can bake static GameObjects into the occlusion culling data as a Static Occluder and/or a Static Occludee.",922],["Unity cannot bake dynamic GameObjects into the occlusion culling data. A dynamic GameObject can be an occludee at runtime, but it cannot be an occluder.",922],["To determine whether a dynamic GameObject acts as a occludee, you can set the Dynamic Occlusion property on any type of Renderer component. When Dynamic Occlusion is enabled, Unity culls the Renderer when a Static Occluder blocks it from a Camera's view. When Dynamic Occlusion is disabled, Unity does not cull the Renderer when a Static Occluder blocks it from a Camera's view.",922],["Dynamic Occlusion is enabled by default. You might want to disable Dynamic Occlusion to achieve specific effects, such as drawing an outline around a character who is behind a wall.",922],["If you are certain that Unity should never apply occlusion culling to a particular GameObject, you can disable Dynamic Occlusion to save on runtime calculations and reduce CPU usage. The per-GameObject impact of these calculations is very small, but at sufficient scale this might benefit performance.",922],["Getting started with occlusion culling",923],["This page describes how to set up your Scene for occlusion culling, bake your occlusion culling data, and visualize the results.",923],["Setting up your Scene",923],["Before you begin, identify all of the GameObjects in your Scene that you would like to be Static Occluders (GameObjects that do not move, and that block the view of GameObjects that are behind them) and Static Occludees (GameObjects that do not move, and are occluded by Static Occluders). A GameObject can be both a Static Occluder and a Static Occludee.",923],["Good candidates for Static Occluders are medium to large solid GameObjects, such as a wall or a building. To be a Static Occluder, a GameObject must:",923],["Have a Terrain or Mesh Renderer component",923],["Be opaque",923],["Not move at runtime",923],["Note that if you are using LOD groups, Unity uses the base level GameObject (LOD0) of a Static Occluder to determine what it occludes. If the silhouette of a GameObject varies considerably between LOD0 and other LOD levels, it might not be a good candidate for a Static Occluder.",923],["Any GameObject that is likely to be occluded at runtime is a good candidate to be a Static Occludee, including small or transparent GameObjects. To be a Static Occludee, a GameObject must:",923],["Have any type of Renderer component",923],["Not move at runtime",923],["When you have identified the GameObjects that you would like to be Static Occluders and Static Occludees, you can set up your Scene.",923],["Select all of the GameObjects that you would like to be Static Occluders.",923],["In the Inspector window, open the Static Editor Flags drop-down menu and select Occluder Static.",923],["Select all of the GameObjects that you would like to be Static Occludees.",923],["In the Inspector window, open the Static Editor Flags drop-down menu and select Occludee Static.",923],["Add a Camera to your Scene and select it, or select an existing Camera.",923],["In the Inspector window, ensure that the Camera's Occlusion Culling property is enabled.",923],["Baking the data",923],["In the top menu, select Window > Rendering > Occlusion Culling to open the Occlusion Culling window.",923],["Select the Bake tab.",923],["In the bottom right hand corner of the Inspector window, press the Bake button. Unity generates the occlusion culling data, saves the data as an asset in your Project, and links the asset with the current Scene(s).",923],["Visualizing the results",923],["Ensure that the Occlusion Culling window and the Scene view are both visible. When the Occlusion Culling window is visible, Unity displays occlusion culling data and the Occlusion Culling popup in the Scene view.",923],["Select a Camera in the Scene.",923],["Move the Camera around, and observe the Scene view. You should see GameObjects disappear from view when the Camera cannot see them, due to either frustum culling or occlusion culling.",923],["Use the Occlusion Culling popup in the Scene view to configure the visualization.",923],["If required, tweak the bake settings in the Bake tab of the Occlusion Culling window, and repeat the baking process.",923],["If you are using the Built-in Render Pipeline, you can use the Overdraw_ Scene View Mode to see the amount of overdraw that is occuring, and the Stats panel in the Game view to see the number of triangles, verts, and batches that Unity is rendering.",923],["Occlusion culling and Scene loading",924],["At runtime, Unity loads only one occlusion culling data asset at a time, no matter how many Scenes are open. You must therefore prepare your occlusion culling data differently depending on whether you plan to load one Scene at a time, or multiple Scenes at a time.",924],["Loading one Scene at a time",924],["If you load one Scene at a time with LoadSceneMode.Single, you must bake the occlusion culling data for each Scene separately, like this:",924],["In the Unity Editor, open a single Scene that you want to bake occlusion culling data for.",924],["Bake the data for the Scene. Unity generates the data and saves it as Assets/[Scene name]/OcclusionCullingData.asset. Unity adds a reference to this asset to the open Scene.",924],["Save the Scene.",924],["Repeat steps 1, 2, and 3 for each Scene.",924],["At runtime, load your Scenes like this:",924],["Load a Scene as the default Scene of your Project, or using LoadSceneMode.Single. Unity unloads the active Scene if there is one, along with its occlusion data asset if it has one. Unity then loads your Scene along with its occlusion data asset.",924],["Loading more than one Scene at a time",924],["If you load multiple Scenes at a time with LoadSceneMode.Additive, you must bake the data for those Scenes together, like this:",924],["In the Unity Editor, open the first Scene of the group that Unity will load at runtime. This becomes the active Scene.",924],["Additively open the other Scenes in the group, so that all of them are open in the Unity Editor at the same time.",924],["Bake the data for all Scenes. Unity generates the data for all of the open Scenes, and saves it as Assets/[active Scene name]/OcclusionCullingData.asset. Unity adds a reference to this asset to all of the open Scenes.",924],["Save the Scenes.",924],["At runtime, load your Scenes like this:",924],["Load the first Scene of the group as the default Scene of your Project, or using LoadSceneMode.Single. Unity unloads the active Scene if there is one, along with its occlusion data asset if it has one. Unity then loads your Scene along with the shared occlusion data asset.",924],["Load other Scenes as required with LoadSceneMode.Additive. If Unity finds that the the occlusion data of an additively loaded Scene is the same as that of the active Scene, occlusion culling works as intended.",924],["Note that the shared occlusion data asset has a larger file size. There is no additional runtime CPU impact to using a larger occlusion data asset.",924],["For further information on working with multiple Scenes in the Unity Editor, see the documentation on multi-Scene editing.",924],["The Occlusion Culling window",925],["Open the Occlusion Culling window by navigating to the top menu and selecting Window > Rendering > Occlusion Culling.",925],["The Occlusion Culling window has 3 tabs: Object, Bake, and Visualization. In addition to this, when both the Occlusion Culling window and the Scene view are visible, the Occlusion Culling popup is visible in the Scene view.",925],["",925],["Object tab",925],["In the Object tab, you can click the All, Renderers, and Occlusion Areas buttons to filter the contents of the Hierarchy window.",925],["When the Renderers filter is active, select a Renderer in the Hierarchy window or Scene view to view and change its occlusion culling settings in the Occlusion Culling window.",925],["When the Occlusion Areas filter is active, you can select an Occlusion Area in the Hierarchy window or Scene view to view and change its Is View Volume setting in the Occlusion Culling window. You can also click Create New Occlusion Area to create a new Occlusion Area in the Scene.",925],["",925],["Bake tab",925],["In the Bake tab, you can fine-tune the parameters of the Occlusion Culling bake process. Configure these settings to find a balance between bake times, data size at runtime, and visual results.",925],["The Set Default Parameters button resets the parameters to the default values.",925],["Setting Description ",925],["",925],["Smallest Occluder The size of the smallest GameObject that can occlude other GameObjects, in metres. In general, for the smallest file size and fastest bake times, you should choose the highest value that gives good results in your Scene. ",925],["Smallest Hole The diameter of the smallest gap through which a Camera can see, in metres. In general, for the smallest file size and fastest bake times, you should choose the highest value that gives good results in your Scene. ",925],["Backface Threshold If you need to reduce the size of the baked data, Unity can sample the Scene as it bakes, and exclude parts of the Scene where the visible occluder geometry consists of more than a given percentage of backfaces. An area with a high percentage of backfaces is likely to be underneath or inside geometry, and therefore not likely somewhere the Camera is at runtime. The default value of 100 never removes areas from the data. Lower values result in a smaller file size, but can lead to visual artifacts. ",925],["For detailed tips on configuring these values, see the articles linked on the Additional resources page.",925],["At the bottom of the Bake tab are the Bake and Clear buttons. Click the Bake button to bake occlusion culling data. Click the Clear button to remove previously baked data.",925],["",925],["Visualization tab",925],["When you select a Camera in the Scene view or Hierarchy window while the Visualization tab is visible, Unity updates the Scene view to show the effects of occlusion culling from the perspective of the selected Camera. You can use the Occlusion Culling popup in the Scene view to configure the visualization.",925],["",925],["Occlusion Culling popup in the Scene view",925],["The Occlusion Culling popup has two modes: Edit, and Visualization. You can switch between them using the drop-down menu.",925],["Edit mode",925],["Setting Description ",925],["",925],["View Volumes When this is enabled, the Scene view contains blue lines that show the cells in the occlusion culling data. The cell size is affected by the Smallest Occluder setting: a lower value results in more, smaller cells, which in turn results in increased precision, and a larger file size. ",925],["Visualize mode",925],["Visualize mode allows you to preview the results of occlusion culling from the perspective of a given Camera. If you have a Camera selected, the preview relates to that Camera. Otherwise, the preview relates to the last Camera that you selected while in Visualize mode.",925],["Setting Description ",925],["",925],["Camera Volumes When this is enabled, you can see yellow lines that indicate the area of the Scene for which Unity has generated occlusion culling data. This is determined based on Scene geometry, and on any View Volumes that you have defined in your Scene using Occlusion Areas. When the Camera is outside of the yellow lines, Unity does not perform occlusion culling.You can also see grey lines that indicate the cell in the occlusion culling data that the Camera's current position corresponds to, and the subdivisions within the current cell. The Smallest Hole setting defines the minimum size of the subdivisions within cells: a lower value results in more, smaller subdivisions per cells, which in turn results in increased precision, and a larger file size. ",925],["Visibility Lines When this is enabled, you can see green lines that indicate what the currently selected Camera can see. ",925],["Portals When this is enabled, you can see lines that represent connections between cells in the occlusion data. The currently visible portals are the ones that the currently selected Camera can see. ",925],["Occlusion culling",926],["Occlusion culling is a process which prevents Unity from performing rendering calculations for GameObjects that are completely hidden from view (occluded) by other GameObjects.",926],["Every frame, Cameras perform culling operations that examine the Renderers in the Scene and exclude (cull) those that do not need to be drawn. By default, Cameras perform frustum culling, which excludes all Renderers that do not fall within the Camera's view frustum. However, frustum culling does not check whether a Renderer is occluded by other GameObjects, and so Unity can still waste CPU and GPU time on rendering operations for Renderers that are not visible in the final frame. Occlusion culling stops Unity from performing these wasted operations.",926],["When to use occlusion culling",926],["To determine whether occlusion culling is likely to improve the runtime performance of your Project, consider the following:",926],["Preventing wasted rendering operations can save on both CPU and GPU time. Unity's built-in occlusion culling performs runtime calculations on the CPU, which can offset the CPU time that it saves. Occlusion culling is therefore most likely to result in performance improvements when a Project is GPU-bound due to overdraw.",926],["Unity loads occlusion culling data into memory at runtime. You must ensure that you have sufficient memory to load this data.",926],["Occlusion culling works best in Scenes where small, well-defined areas are clearly separated from one another by solid GameObjects. A common example is rooms connected by corridors.",926],["You can use occlusion culling to occlude Dynamic GameObjects, but Dynamic GameObjects cannot occlude other GameObjects. If your Project generates Scene geometry at runtime, then Unity's built-in occlusion culling is not suitable for your Project.",926],["How occlusion culling works",926],["Occlusion culling generates data about your Scene in the Unity Editor, and then uses that data at runtime to determine what a Camera can see. The process of generating data is known as baking.",926],["When you bake occlusion culling data, Unity divides the Scene into cells and generates data that describes the geometry within cells, and the visibility between adjacent cells. Unity then merges cells where possible, to reduce the size of the generated data. To configure the baking process, you can change parameters in the Occlusion Culling window, and use Occlusion Areas in your Scene.",926],["At runtime, Unity loads this baked data into memory, and for each Camera that has its Occlusion Culling property enabled, it performs queries against the data to determine what that Camera can see. Note that when occlusion culling is enabled, Cameras perform both frustum culling and occlusion culling.",926],["Additional resources",926],["Unity uses the Umbra library to perform occlusion culling. For links to articles with more information on Umbra, see the Additional resources page.",926],["Offline documentation",927],["You can download the Unity Documentation as a zip file for offline use. To download the current version of the Unity Documentation, click the link below.",927],["The zip file contains the most up-to-date version of the Unity Manual and Unity Scripting API.",927],["OpenGL Core",928],["OpenGL Core is a back-end capable of supporting the latest OpenGL features on Windows, MacOS X and Linux. This scales from OpenGL 3.2 to OpenGL 4.5, depending on the OpenGL driver support.",928],["Enabling OpenGL Core",928],["To set OpenGL Core as your default Graphics API in the Editor or Standalone Player, go to the Player settings (menu: Edit > Project Settings, then select the Player category), and navigate to Other Settings. Disable the Auto Graphics API for Windows property, and choose OpenGLCore from the list. For more details, see Graphics API support.",928],["OpenGL requirements",928],["OpenGL Core has the following minimum requirements:",928],["Mac OS X 10.8 (OpenGL 3.2), MacOSX 10.9 (OpenGL 3.2 to 4.1)",928],["Windows with NVIDIA since 2006 (GeForce 8), AMD since 2006 (Radeon HD 2000), Intel since 2012 (HD 4000 / IvyBridge) (OpenGL 3.2 to OpenGL 4.5)",928],["Linux (OpenGL 3.2 to OpenGL 4.5)",928],["macOS OpenGL driver limitations",928],["The macOS OpenGL backend for the Editor and Standalone supports OpenGL 3.x and 4.x features such as tessellation and geometry shaders.",928],["However, as Apple restricts the OpenGL version on OS X desktop to 4.1 at most, it does not support all DirectX 11 features (such as Unordered Access Views or Compute Shaders). This means that all shaders that are configured to target Shader Level 5.0 (with #pragma target 50) will fail to load on OS X.",928],["Therefore a new shader target level is introduced: #pragma target gl4.1. This target level requires at least OpenGL 4.1 or DirectX 11.0 Shader Level 5 on desktop, or OpenGL ES 3.1 + Android Extension Pack on mobiles.",928],["OpenGL Core features",928],["The new OpenGL back-end introduces many new features (previously mostly DX11/GLES3 only):",928],["\nCompute shaders (as well as ComputeBuffers and “random write” render textures)\n",928],["\nTessellation and Geometry shaders\n",928],["\nIndirect draw (Graphics.DrawProcedural and Graphics.DrawProceduralIndirect)\n",928],["\nAdvanced blend modes\n",928],["Shader changes",928],["When using the existing #pragma targets, they map to following GL levels:",928],["\n#pragma target 4.0 // OpenGL ES 3.1, desktop OpenGL 3.x, DX Shader Model 4.0\n",928],["\n#pragma target gl4.1 // Desktop OpenGL 4.1, SM 4.0 + tessellation to match MacOSX 10.9 capabilities\n",928],["\n#pragma target 5.0 // OpenGL ES 3.1 + Android Extension Pack, desktop OpenGL >= 4.2, DX Shader Model 5.0\n",928],["For including and excluding shader platforms from using a specific shaders, the following #pragma only_renderers / exclude_renderers targets can be used:",928],["\n#pragma only_renderers glcore: Only compile for the desktop GL. Like the ES 3 target, this also scales up to contain all desktop GL versions, where basic shaders will support GL 2.x while shaders requiring SM5.0 features require OpenGL 4.2+.\n",928],["OpenGL core profile command line arguments",928],["It’s possible to start the editor or the player with OpenGL using the command line arguments:",928],["\n-force-opengl: To use the legacy OpenGL back-end\n",928],["\n-force-glcore: To use the new OpenGL back-end. With this argument, Unity will detect all the features the platform support to run with the best OpenGL version possible and all available OpenGL extensions\n",928],["\n-force-glcoreXY: XY can be 32, 33, 40, 41, 42, 43, 44 or 45; each number representing a specific version of OpenGL. If the platform doesn’t support a specific version of OpenGL, Unity will fallback to a supported version\n",928],["\n-force-clamped: Request that Unity doesn’t use OpenGL extensions which guarantees that multiple platforms will execute the same code path. This is an approach to test if an issue is platform specific (a driver bug for example).\n",928],["Native OpenGL ES on desktop command line arguments",928],["OpenGL ES graphics API is available on Windows machines with Intel or NVIDIA GPUs with drivers supporting OpenGL ES.",928],["\n-force-gles: To use the new OpenGL back-end in OpenGL ES mode. With this argument, Unity will detect all the features the platform support to run with the best OpenGL ES version possible and all available OpenGL ES extensions\n",928],["\n-force-glesXY: XY can be 20, 30, 31, 31aep or 3.2; each number representing a specific version of OpenGL ES. If the platform doesn’t support a specific version of OpenGL ES, Unity will fallback to a supported version. If the platform doesn’t support OpenGL ES, Unity will fallback to another graphics API.\n",928],["\n-force-clamped: Request that Unity doesn’t use OpenGL extensions which guarantees that multiple platforms will execute the same code path. This is an approach to test if an issue is platform specific (a driver bug for example).\n",928],["2018-06-02 ",928],["Optimizing draw calls",929],["To draw geometry on the screen, Unity issues draw calls to the graphics API. A draw call tells the graphics API what to draw and how to draw it. Each draw call contains all the information the graphics API needs to draw on the screen, such as information about textures, shaders, and buffers. Draw calls can be resource intensive, but often the preparation for a draw call is more resource intensive than the draw call itself.",929],["To prepare for a draw call, the CPU sets up resources and changes internal settings on the GPU. These settings are collectively called the render state. Changes to the render state, such as switching to a different material, are the most resource-intensive operations the graphics API performs.",929],["Because render-state changes are resource intensive, it is important to optimize them. The main way to optimize render-state changes is to reduce the number of them. There are two ways to do this:",929],["Reduce the total number of draw calls. When you decrease the number of draw calls, you also decrease the number of render-state changes between them.",929],["Organize draw calls in a way that reduces the number of changes to the render state. If the graphics API can use the same render state to perform multiple draw calls, it can group draw calls together and not need to perform as many render-state changes.",929],["Optimizing draw calls and render-state changes has a number of benefits for your application. Mainly, it improves frame times, but it also:",929],["Reduces the amount of electricity your application requires. For battery-powered devices, this reduces the rate at which batteries run out. It also reduces the amount of heat a device produces when running your application.",929],["Improves maintainability of future development on your application. When you optimize draw calls and render-state changes earlier and maintain them at an optimized level, you can add more GameObjects to your scene without producing large performance overheads.",929],["There are several methods you can use in Unity to optimize and reduce draw calls and render-state changes. Some methods are more suited for certain scenes than others. The following methods are available in Unity:",929],["GPU instancing: Render multiple copies of the same mesh at the same time. GPU instancing is useful for drawing geometry that appears multiple times in a scene, for example, trees or bushes.",929],["Draw call batching: Combine meshes to reduce draw calls. Unity provides the following types of built-in draw call batching:",929],["Static batching: Combine meshes of static GameObjects in advance. Unity sends the combined data to the GPU, but renders each mesh in the combination individually. Unity can still cull the meshes individually but each draw call is less resource-intensive since the state of the data never changes.",929],["Dynamic batching: Transforms mesh vertices on the CPU, groups vertices that share the same configuration, and renders them in one draw call. Vertices share the same configuration if they store the same number and type of attributes. For example, position and normal.",929],["Manually combining meshes: Manually combine multiple meshes into a single mesh, using the Mesh.CombineMeshes function. Unity renders the combined mesh in a single draw call instead of one draw call per mesh.",929],["SRP Batcher: If your Project uses a Scriptable Render Pipeline (SRP), use the SRP Batcher to reduce the CPU time Unity requires to prepare and dispatch draw calls for materials that use the same shader variant.",929],["",929],["Optimization priority",929],["You can use multiple draw call optimization methods in the same scene but be aware that Unity prioritizes draw call optimization methods in a particular order. If you mark a GameObject to use more than one draw call optimization method, Unity uses the highest priority method. The only exception to this is the SRP Batcher. When you use the SRP Batcher, Unity also supports static batching for GameObjects that are SRP Batcher compatible. Unity prioritizes draw call optimizations in the following order:",929],["SRP Batcher and static batching",929],["GPU instancing",929],["Dynamic batching",929],["If you mark a GameObject for static batching and Unity successfully batches it, Unity disables GPU instancing for that GameObject, even if the renderer uses an instancing shader. When this happens, the Inspector window displays a warning message that suggests that you disable static batching. Similarly, if Unity can use GPU instancing for a mesh, Unity disables dynamic batching for that mesh.",929],["Graphics performance fundamentals",930],["This page contains some simple guidelines for optimzing rendering performance in your application.",930],["Before you begin: locate and understand the problem",930],["Before you make any changes, you must profile your application to identify the cause of the problem. If you attempt to solve a performance problem before you understand its cause, you might waste your time or make the problem worse. Additionally, rendering-related performance problems can occur on the CPU or the GPU. Strategies for fixing these problems are quite different, so it's important to understand where your problem is before taking any action.",930],["The following article on the Unity Learn site is a comprehensive introduction to graphics performance, and contains information on identifying and fixing problems: Fixing performance problems. If you are not yet familiar with this subject, read the article before following any of the advice on this page.",930],["",930],["Reducing the CPU cost of rendering",930],["Usually, the greatest contributor to CPU rendering time is the cost of sending rendering commands to the GPU. Rendering commands include draw calls (commands to draw geometry), and commands to change the settings on the GPU before drawing the geometry. If this is the case, consider these options:",930],["You can reduce the number of objects that Unity renders.",930],["Consider reducing the overall number of objects in the scene: for example, use a skybox to create the effect of distant geometry.",930],["Perform more rigorous culling, so that Unity draws fewer objects. Consider using occlusion culling to prevent Unity from drawing objects that are hidden behind other objects, reducing the far clip plane of a Camera so that more distant objects fall outside its frustum, or, for a more fine-grained approach, putting objects into separate layers and setting up per-layer cull distances with Camera.layerCullDistances.",930],["You can reduce the number of times that Unity renders each object.",930],["Use lightmapping to \"bake\" (pre-compute) lighting and shadows where appropriate. This increases build time, runtime memory usage and storage space, but can improve runtime performance.",930],["If your application uses Forward rendering, reduce the number of per-pixel real-time lights that affect objects. For more information, see Forward rendering path.",930],["Real-time shadows can be very resource-intensive, so use them sparingly and efficiently. For more information, see Shadow troubleshooting: Shadow performance.",930],["If your application uses Reflection Probes, ensure that you optimize their usage. For more information, see Reflection Probe performance",930],["You can reduce the amount of work that Unity must do to prepare and send rendering commands, usually by sending them to the GPU in more efficient \"batches\". There are a few different ways to achieve this: for more information, see Optimizing draw calls.",930],["Many of these approaches will also reduce the work required on the GPU; for example, reducing the overall number of objects that Unity renders in a frame will result in a reduced workload for both the CPU and the GPU.",930],["Reducing the GPU cost of rendering",930],["There are three main reasons why the GPU might fail to complete its work in time to render a frame.",930],["If an application is limited by fill rate, the GPU is trying to draw more pixels per frame than it can handle. If this is the case, consider these options:",930],["Identify and reduce overdraw in your application. The most common contributors to overdraw are overlapping transparent elements, such as UI, particles and sprites. In the Unity Editor, use the Overdraw Draw mode to identify areas where this is a problem.",930],["Reduce the execution cost of fragment shaders. For information about shader performance, see the Shader Performance page.",930],["If you're using Unity's built-in shaders, pick ones from the Mobile or Unlit categories. They work on non-mobile platforms as well, but are simplified and approximated versions of the more complex shaders.",930],["Dynamic Resolution is a Unity feature that allows you to dynamically scale individual render targets.",930],["If an application is limited by memory bandwidth, the GPU is trying to read and write more data to its dedicated memory than it can handle in a frame. This usually means that that there are too many or textures, or that textures are too large. If this is the case, consider these options:",930],["Enable mipmaps for textures whose distance from the camera varies at runtime (for example, most textures used in a 3D scene). This increases memory usage and storage space for these textures, but can improve runtime GPU performance.",930],["Use suitable compression formats to decrease the size of your textures in memory. This can result in faster load times, a smaller memory footprint, and improved GPU rendering performance. Compressed textures only use a fraction of the memory bandwidth needed for uncompressed textures.",930],["If an appliction is limited by vertex processing, this means that the GPU is trying to process more vertices than it can handle in a frame. If this is the case, consider these options:",930],["Reduce the execution cost of vertex shaders. For information about shader performance, see the Shader Performance page.",930],["Optimize your geometry: don't use any more triangles than necessary, and try to keep the number of UV mapping seams and hard edges (doubled-up vertices) as low as possible. For more information, see Creating models for optimal performance.",930],["Use the Level Of Detail system.",930],["Reducing the frequency of rendering",930],["Sometimes, it might benefit your application to reduce the rendering frame rate. This doesn't reduce the CPU or GPU cost of rendering a single frame, but it reduces the frequency with which Unity does so without affecting the frequency of other operations (such as script execution).",930],["You can reduce the rendering frame rate for parts of your application, or for the whole application. Reducing the rendering frame rate to prevents unnecessary power usage, prolongs battery life, and prevent device temperature from rising to a point where the CPU frequency may be throttled. This is particularly useful on handheld devices.",930],["If profiling reveals that rendering consumes a significant proportion of the resources for your application, consider which parts of your application might benefit from this. Common use cases include menus or pause screens, turn based games where the game is awaiting input, and applications where the content is mostly static, such as automotive UI.",930],["To prevent input lag, you can temporarily increase the rendering frame rate for the duration of the input so that it still feels responsive.",930],["To adjust the rendering frame rate, use the OnDemandRendering API. The API works particularly well with the Adaptive Performance package.",930],["Note:* VR applications don't support On Demand Rendering. Not rendering every frame causes the visuals to be out of sync with head movement and might increase the risk of motion sickness.",930],["Managing your Organization",931],["To create or manage Organizations, sign in to the Unity ID dashboard and select Organizations from the left navigation bar.",931],["Creating Organizations",931],["You can use Organizations to segregate your Projects by the entity for which they are being developed. You can create as many Organizations as you like. To keep your activities for different companies or personal use separate, use a separate Organization for each entity.",931],["Separating your activities through Organizations also facilitates seamless personnel changes. For example, if an employee leaves the company, you can reallocate their seat because the subscription is tied to the Organization instead of the user.",931],["To create a new Organization:",931],["Sign in to the Unity ID dashboard.",931],["In the left navigation bar, click Organizations.",931],["In the Organizations pane, click the Add new button.",931],["In the Organization Name text field, enter the name of your Organization, and then click the Create button.",931],["The following sections describe the information and tasks available for your Organizations from the Unity ID dashboard.",931],["",931],["Members & Groups",931],["With an Organization selected, click Members & Groups from the left navigation bar to view or add members and groups within that Organization, or assign user roles.",931],["Adding users",931],["To work with other users, you must give them access to your Project(s). To do this, either:",931],["Add the user to your Organization. This allows the user to view all of the Projects within the Organization. If the user needs to modify information about your subscription, you can assign them an Owner or Manager role.",931],["Or:",931],["Add the user directly to an individual Project. This gives the user access to one Project, with no access to Organization and subscription information.",931],["Adding a user to an Organization or a Project allows them to view information about a Project. For example, they can view Project Analytics and the results of Performance Reporting.",931],["For the user to work on Projects, as opposed to just viewing information, they must have a seat tier that matches the Organization’s subscription tier. If they do not have one of their own, you must assign them one. For more information, see Subscription Seats.",931],["",931],["Organization roles",931],["You can assign different administrative roles to members of your Organization. Each role grants access to certain functions within the Organization.",931],["To assign a team member to a role:",931],["Sign in to the Unity ID dashboard.",931],["Click Organizations on the left navigation bar. The Organizations page contains a list of the Organization names associated to your account.",931],["Click the cog icon next to the name of the Organization.",931],["Click Members & Groups in the left navigation bar. This page contains all members associated with the Organization.",931],["Find the name of the member whose role you want to change, and then click the pencil icon.",931],["Choose the member's role from the drop-down menu titled Organization Role. Once you've selected the new role, click Save.",931],["Note**: Organization Managers can also assign member roles. However, they can only assign the role of User or Guest.",931],["Owners can access all settings in any of their Organizations' subscriptions, across all Projects. Owners are the only users with access to payment instruments, invoices and billing data for the Organization.",931],["Managers can access most settings in any of their Organizations' subscriptions, across all Projects. Managers can add users, access monetization data, and do almost everything an Owner can do. However, they cannot see billing and credit card information for the Organization.",931],["Users can read and view all Organization and Services data, except Monetization data. They cannot edit Organization and Services data.",931],["Guests are members of your Organization that have no permissions to view data within the Organization. The Guest role allows you to assign vendors and contractors a Teams Advanced seat in the Organization that allows them to use the Collaboration service. Guests only have permission to access the specific project to which they are assigned.",931],["All Organization members can access all of the Organization's Projects.",931],["To assign a member a different role for a specific Project:",931],["Sign in to the Unity Services Dashboard.",931],["Select the relevant Project.",931],["In the left navigation column, click Settings, then click Users.",931],["Click the Add a person or group field.",931],["Select a Organization user from the displayed list or enter the email address of a user who has not been added to the Organisation.",931],["If the specified user does not have a Unity Teams seat, Unity assigns them a seat automatically. If you do not want the user to collaborate on the Project using Unity Teams, uncheck the Also assign a Unity Teams Seat to this user checkbox. For more information on Unity Teams, see Working with Unity Teams.",931],["For information on allowing Organization members to work a Project, see Adding team members to your Unity Project.",931],["Note**: Because Services are enabled on a per Project basis, and each Project is tied to an Organization, only that Organization's Owner can enable and disable Services for its associated Projects. Regardless of your subscription tier or seat, you need certain roles or permissions within an Organization to use Services features or view related data on the Unity Services Dashboard.",931],["",931],["Subscriptions & Services",931],["With an Organization selected, click Subscriptions & Services from the left navigation bar to manage your Editor and Unity Teams subscriptions.",931],["To view the status of a subscription, select the subscription you wish to view from the list. The subscription details page allows you to add and assign seats for that Subscription. It also allows you to extend or upgrade your subscriptions.",931],["Service Usage",931],["With an Organization selected, click Service Usage from the left navigation bar to view your Unity Teams cloud storage allocation and usage.",931],["Unity Teams includes some cloud storage, which you can adjust on a month-to-month basis. Click Manage storage to add or subtract space. For more information on managing storage, see How Do I Get More Cloud Storage In the knowledge base.",931],["Edit Organization",931],["With an Organization selected, click Edit Organization from the left navigation bar to change the Organization’s name and contact information. Only the Owner can change these settings.",931],["Payment Methods",931],["With an Organization selected, click Payment Methods from the left navigation bar to manage the credit cards that Unity stores for the Organization. Valid payment methods are required to purchase subscriptions or cloud storage.",931],["Transaction History and Payouts",931],["With an Organization selected, click Transaction History from the left navigation bar to view records of your purchases and payouts. Select a date range to query, then click Apply to view records for that period.",931],["The Purchases tab reports purchases you’ve made during the specified period. The Payouts tab reports payments you received from Unity for ads revenue. To receive payouts, you must set up a payment profile by clicking Payment Profile in the left navigation bar. For more information on Unity Ads revenue and payment, see Finance.",931],["2018-04-25 ",931],["Managing your Organization’s Projects",932],["When you create a new Project, it is assigned to an Organization. If you have not created any additional Organizations, it is automatically assigned to your default Organization. If multiple Organizations are available to your account, you can choose which one to use. As such, Projects inherit their Organization’s role settings. However, if users need access to certain tools or information, you can give them different roles that are unique to each Project, without granting visibility across the entire Organization’s portfolio of Projects. For more information, see Members & Groups in Managing your Organization.",932],["As the Organization Owner, you also have the following tools to manage your Projects:",932],["Archiving and restoring Projects",932],["Projects cannot be deleted which can lead to clutter on your dashboard. To reduce clutter, you can archive Projects you no longer use. Archiving a Project prevents it from displaying in your Projects list.",932],["",932],["To archive a Project:",932],["Sign in to the Unity Dashboard.",932],["Select the Project to archive.",932],["In the left navigation pane, click Settings > General.",932],["In the Project pane, click the Archive my project for ALL Unity services button.",932],["In the Project archive pop-up window, enter the name of the Project to confirm that you want to archive the Project, then click the Yes, archive it button.",932],["To view your archived Projects and reactivate them:",932],["Sign in to the Unity Services Dashboard.",932],["Click View Archived Projects on top right of the page.",932],["Locate the Project to reactivate and the click the Unarchive button.",932],["Changing the name of a Project",932],["",932],["To change the name of a Project:",932],["Sign in to the Unity Services Dashboard.",932],["Select the Project to rename.",932],["In the left navigation pane, click Settings > General.",932],["In the Rename this project textbox, enter a new name for the Project, then click the Rename button.",932],["2018-04-25 ",932],["Subscriptions and seats",933],["To use the Unity Editor and Services, you must create a Unity Developer Network (UDN) account.",933],["When you create an account, you get:",933],["A default Organization",933],["A Unity Personal subscription (license) in the Organization",933],["An Editor seat for the license in the subscription",933],["If you are not eligible to use a Personal subscription, you must upgrade to either the Unity Plus or Pro subscription. When you subscribe to Plus or Pro, you get:",933],["A subscription (license) attached to an Organization of your choice to your account.",933],["An Editor seat for the license in the subscription",933],["You can purchase additional Subscriptions through an Organization, on the Unity ID dashboard. If you are part of a company, this lets you organize your licenses under a company Organization while keeping your other activities in Unity separate. For more information, see Managing your Organization.",933],["",933],["Subscription seats",933],["A subscription seat represents a single user license, and lets users work together on Projects in the Editor. If your Organization uses a Pro or Plus subscription, all users working on your Organization’s Projects must have an Editor seat at the same tier or higher. If a user has a lower tier subscription, you must assign them a seat from your license.",933],["Note**: You must be an Owner or Manager in the Organization to assign seats, see Organization roles.",933],["To assign seats:",933],["Sign in to the Unity ID dashboard.",933],["In the left navigation bar, click Organizations.",933],["Select the Organization.",933],["In the left navigation pane, click Subscriptions & Services.",933],["Select the subscription from which you are assigning the seat.",933],["Click the Manage seats button, then select the Organization member that you want to assign a seat to.",933],["Click the Assign Seat(s) button.",933],["The selected member receives an email with information on how to activate Unity.",933],["Assigning a seat gives the user access to Editor features at the Organization’s subscription level. When users are assigned a paid seat, they are issued a license which shows their highest subscription level. If users want to activate the Editor with a paid subscription, they must enter the license assigned to them.",933],["You can purchase additional seats for your subscription at any time on Unity’s website. For information on activating a Unity license using the Unity Hub, see Hub documentation. For information on activating a Unity license using the command line, Activate a license from the command line.",933],["",933],["Working with individuals outside of your Organization",933],["If you want to collaborate with individuals outside your Organization without giving them access to your Organization’s sensitive information, add the user directly to a specific Project. If the contributor has their own Plus or Pro Editor Seat that matches the Organization’s subscription tier, you do not need to assign them one of yours.",933],["To add a user to a specific Project:",933],["Sign in to the Unity Services Dashboard.",933],["Select the Project that you want to add a user to.",933],["In the left navigation column, click Settings, then click Users.",933],["In the Add a person or group field, enter the user’s email address.",933],["Unity Organizations",934],["Unity Organizations are the containers for your Projects and subscriptions. If you are an individual game developer, you might not need to work with the features provided by an Organization. However, to work with other team members, you must understand how to use accounts, Organizations, subscriptions, and seats.",934],["Organizations are one way in which a collection of users can collaborate on Unity projects. An Organization can consist of a single user, and expand to include multiple users at a later time. You can associate multiple Organizations with your account.",934],["A subscription defines the software license level available to an Organization. There are three subscription tiers: Personal, Plus, or Pro. For more information on requirements for each of the Unity subscription tiers, see the Tier Eligibility section of Unity Pro, Unity Plus and Unity Personal Software Additional Terms.",934],["A seat represents an individual license to use Unity. When purchasing a Pro or Plus subscription, select the number of seats to purchase in that tier and then assign the seats to users in your Organization. You can also assign seats at a Project level to users who are not members of your Organization.",934],["2018-04-25 ",934],["Additional windows",935],["In addition to the main windows of the Unity interface, there are several other windows described in other areas of the guide:",935],["Documentation for this window: Area or Topic: ",935],["----------------- ------------------------------------------------------------ ",935],["The Console window shows logs of messages, warnings, and errors. Scripting ",935],["The Animation window lets you animate GameObjects in the Scene. Animation ",935],["The Profiler window can be used to investigate and find the performance bottle-necks in your game. Analysis ",935],["The Lighting window can be used to manage the lighting in your Scene. Lighting ",935],["The Occlusion Culling window can be used to manage Occlusion Culling for improved performance. Camera ",935],["Create your own overlay",936],["You can create custom panel overlays and toolbar overlays for the Scene view window.",936],["Tip**: For information about creating UIElements, refer to the UI Elements Developer Guide.",936],["Understand EditorToolbarElement",936],["A toolbar element can contain text, an icon, or a combination of both.",936],["Use EditorToolbarElement(Identifier, EditorWindowType) to register toolbar elements to use in ToolbarOverlay implementations.",936],["You can inherit from any VisualElement type and create styling yourself, but toolbar elements require specific styling. It is preferable to inherit from one of these predefined EditorToolbar types:",936],["EditorToolbarButton: Based on UnityEditor.UIElements.ToolbarButton",936],["EditorToolbarToggle: Based on UnityEditor.UIElements.ToolbarToggle",936],["EditorToolbarDropdown: Based on EditorToolbarButton",936],["EditorToolbarDropdownToggle: Based on UnityEngine.UIElements.BaseField",936],["Tip:** If a toolbar is docked horizontally or vertically, its text might not be visible or clipped. You can specify an icon for each toolbar to avoid text clipping.",936],["",936],["Create a panel overlay",936],["All overlays must inherit from the Overlay base class and implement the CreatePanelContent method. This creates a basic panel that you can use and that you can add toolbar elements to.",936],["To create a panel overlay:",936],["Create a new C# script in the Editor folder and name it.",936],["Open the script you created.",936],["Remove the default content from the script.",936],["Implement the Overlay class from the UnityEditor.Overlays namespace.",936],["Override the CreatePanelContent function and add your content to the visual element.",936],["Add the OverlayAttribute attribute to the class.",936],["In the OverlayAttribute, specify which type of window you want this overlay to be in:",936],["If you want the overlay to be available in all Editor windows, specify EditorWindow as the type.",936],["If you want the overlay to only be available in the Scene view, specify SceneView as the type.",936],["In the OverlayAttribute, add a name, ID, and display name to the overlay.",936],["To add an icon that displays when your overlay is collapsed, add the Icon attribute to the Overlay class and specify an icon. If the overlay has no icon, then by default the system uses the first two letters of the overlay name or the first two initial letters of the first two words.",936],["Example",936],["```lang-cs",936],["using UnityEditor;",936],["using UnityEditor.Overlays;",936],["using UnityEngine.UIElements;",936],["[Overlay(typeof(SceneView), \"Panel Overlay Example\", true)]",936],["public class MyToolButtonOverlay : Overlay",936],["public override VisualElement CreatePanelContent()",936],["var root = new VisualElement() { name = \"My Toolbar Root\" };",936],["root.Add(new Label() { text = \"Hello\" });",936],["return root;",936],["",936],["Create a toolbar overlay",936],["Toolbar overlays are containers that hold toolbar items and are composed of collections of EditorToolbarElement.",936],["Toolbar overlays have built-in horizontal, vertical, and panel layouts. ToolbarOverlay implements a parameterless constructor that passes the EditorToolbarElementAttribute ID. Unlike panel overlays, the contents are defined as standalone pieces that are collected to form a strip of elements.",936],["When you create toolbar overlays:",936],["Use EditorToolbarElement(Identifier, EditorWindowType) to register toolbar elements to use in the ToolbarOverlay implementation.",936],["Tag all overlays with OverlayAttribute.",936],["Make sure that toolbar overlays inherit ToolbarOverlay and implement a parameterless constructor.",936],["Make sure that the contents of a toolbar are populated with string IDs, which are passed to the base constructor.",936],["Make sure that IDs are defined by EditorToolbarElementAttribute.",936],["Use the Icon attribute to add icon an icon to your overlay. The icon is visible when an overlay is collapsed. If the overlay does not have an icon, the first two letters of the overlay name (or the first two initial letters of the first two words) are shown when the overlay is collapsed.",936],["When you implement elements specific to ToolbarOverlay in an overlay:",936],["Use the IAccessContainerWindow interface for toolbars only. The element is not aware of its context. In the DropdownToggleExample, if you toggle the element it won’t do anything.",936],["Use UIElement styling for visuals. The toolbar element won’t have its styling in an overlay.",936],["To create a toolbar overlay:",936],["Create a new C# script in the Editor folder and name it.",936],["Open the script you created.",936],["Remove the default content from the script.",936],["Add toolbar elements to the script.",936],["Add toolbar elements to the overlay constructor.",936],["Add the panel overlay and implement the toolbar elements.",936],["Example",936],["This example is of an overlay named Element Toolbars Example that demonstrates these toolbar elements:",936],["EditorToolbarButton",936],["EditorToolbarToggle",936],["EditorToolbarDropdown",936],["EditorToolbarDropdownToggle",936],["Each toolbar element is created as a standalone class and then added to the overlay panel.",936],["This overlay:",936],["Can be arranged as a panel, horizontally, and vertically.",936],["Has buttons that include text and tooltips.",936],["Has toolbar icons defined by the Icon attribute. This icon displays when the overlay is collapsed.",936],["```lang-cs",936],["using System.Collections;",936],["using System.Collections.Generic;",936],["using System.Text;",936],["using UnityEngine;",936],["using UnityEditor.EditorTools;",936],["using UnityEditor.Toolbars;",936],["using UnityEditor.Overlays;",936],["using UnityEngine.UIElements;",936],["using UnityEditor;",936],["// Use [EditorToolbarElement(Identifier, EditorWindowType)] to register toolbar elements for use in ToolbarOverlay implementation.",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class DropdownExample : EditorToolbarDropdown",936],["public const string id = \"ExampleToolbar/Dropdown\";",936],["static string dropChoice = null;",936],["public DropdownExample()",936],["text = \"Axis\";",936],["clicked += ShowDropdown;",936],["void ShowDropdown()",936],["var menu = new GenericMenu();",936],["menu.AddItem(new GUIContent(\"X\"), dropChoice == \"X\", () => { text = \"X\"; dropChoice = \"X\"; });",936],["menu.AddItem(new GUIContent(\"Y\"), dropChoice == \"Y\", () => { text = \"Y\"; dropChoice = \"Y\"; });",936],["menu.AddItem(new GUIContent(\"Z\"), dropChoice == \"Z\", () => { text = \"Z\"; dropChoice = \"Z\"; });",936],["menu.ShowAsContext();",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class ToggleExample : EditorToolbarToggle",936],["public const string id = \"ExampleToolbar/Toggle\";",936],["public ToggleExample()",936],["text = \"Toggle OFF\";",936],["this.RegisterValueChangedCallback(Test);",936],["void Test(ChangeEvent evt)",936],["if (evt.newValue)",936],["Debug.Log(\"ON\");",936],["text = \"Toggle ON\";",936],["else",936],["Debug.Log(\"OFF\");",936],["text = \"Toggle OFF\";",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class DropdownToggleExample : EditorToolbarDropdownToggle, IAccessContainerWindow",936],["public const string id = \"ExampleToolbar/DropdownToggle\";",936],["// This property is specified by IAccessContainerWindow and is used to access the Overlay's EditorWindow.",936],["public EditorWindow containerWindow { get; set; }",936],["static int colorIndex = 0;",936],["static readonly Color[] colors = new Color[] { Color.red, Color.green, Color.cyan };",936],["public DropdownToggleExample()",936],["text = \"Color Bar\";",936],["tooltip = \"Display a color rectangle in the top left of the Scene view. Toggle on or off, and open the dropdown\" +",936],["\"to change the color.\";",936],["// When the dropdown is opened, ShowColorMenu is invoked and we can create a popup menu.",936],["dropdownClicked += ShowColorMenu;",936],["// Subscribe to the Scene view OnGUI callback so that we can draw our color swatch.",936],["SceneView.duringSceneGui += DrawColorSwatch;",936],["void DrawColorSwatch(SceneView view)",936],["// Test that this callback is for the Scene View that we're interested in, and also check if the toggle is on",936],["// or off (value).",936],["if (view != containerWindow !value)",936],["return;",936],["Handles.BeginGUI();",936],["GUI.color = colors[colorIndex];",936],["GUI.DrawTexture(new Rect(8, 8, 120, 24), Texture2D.whiteTexture);",936],["GUI.color = Color.white;",936],["Handles.EndGUI();",936],["// When the dropdown button is clicked, this method will create a popup menu at the mouse cursor position.",936],["void ShowColorMenu()",936],["var menu = new GenericMenu();",936],["menu.AddItem(new GUIContent(\"Red\"), colorIndex == 0, () => colorIndex = 0);",936],["menu.AddItem(new GUIContent(\"Green\"), colorIndex == 1, () => colorIndex = 1);",936],["menu.AddItem(new GUIContent(\"Blue\"), colorIndex == 2, () => colorIndex = 2);",936],["menu.ShowAsContext();",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class CreateCube : EditorToolbarButton//, IAccessContainerWindow",936],["// This ID is used to populate toolbar elements.",936],["public const string id = \"ExampleToolbar/Button\";",936],["// IAccessContainerWindow provides a way for toolbar elements to access the EditorWindow in which they exist.",936],["// Here we use containerWindow to focus the camera on our newly instantiated objects after creation.",936],["//public EditorWindow containerWindow { get; set; }",936],["// Because this is a VisualElement, it is appropriate to place initialization logic in the constructor.",936],["// In this method you can also register to any additional events as required. In this example there is a tooltip, an icon, and an action.",936],["public CreateCube()",936],["// A toolbar element can be either text, icon, or a combination of the two. Keep in mind that if a toolbar is",936],["// docked horizontally the text will be clipped, so usually it's a good idea to specify an icon.",936],["text = \"Create Cube\";",936],["icon = AssetDatabase.LoadAssetAtPath(\"Assets/CreateCubeIcon.png\");",936],["tooltip = \"Instantiate a cube in the scene.\";",936],["clicked += OnClick;",936],["// This method will be invoked when the Create Cube button is clicked.",936],["void OnClick()",936],["var newObj = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;",936],["// When writing editor tools don't forget to be a good citizen and implement Undo!",936],["Undo.RegisterCreatedObjectUndo(newObj.gameObject, \"Create Cube\");",936],["//if (containerWindow is SceneView view)",936],["// view.FrameSelected();",936],["// All Overlays must be tagged with the OverlayAttribute",936],["[Overlay(typeof(SceneView), \"ElementToolbars Example\")]",936],["// IconAttribute provides a way to define an icon for when an Overlay is in collapsed form. If not provided, the name initials are used.",936],["[Icon(\"Assets/unity.png\")]",936],["// Toolbar Overlays must inherit ToolbarOverlay and implement a parameter-less constructor. The contents of a toolbar are populated with string IDs, which are passed to the base constructor. IDs are defined by EditorToolbarElementAttribute.",936],["public class EditorToolbarExample : ToolbarOverlay",936],["// ToolbarOverlay implements a parameterless constructor, passing the EditorToolbarElementAttribute ID.",936],["// This is the only code required to implement a toolbar Overlay. Unlike panel Overlays, the contents are defined",936],["// as standalone pieces that will be collected to form a strip of elements.",936],["EditorToolbarExample() : base(",936],["CreateCube.id,",936],["ToggleExample.id,",936],["DropdownExample.id,",936],["DropdownToggleExample.id",936],["{ }",936],["Toolbar elements implementations",936],["The controls for toolbar elements are the same as their equivalent in UIToolkit, but they inherit some toolbar functionalities and specific styling.",936],["This section has examples of the following toolbar elements:",936],["\nEditorToolbarButton\n",936],["\nEditorToolbarToggle\n",936],["\nEditorToolbarDropdown\n",936],["\nEditorToolbarDropdownToggle\n",936],["",936],["EditorToolbarButton",936],["EditorToolbarButton is a standalone class that contains the logic of the element. This example creates a button that generates a cube when you click it:",936],["```lang-cs",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class CreateCube : EditorToolbarButton",936],["// This ID is used to populate toolbar elements.",936],["public const string id = \"ExampleToolbar/Button\";",936],["// Because this is a VisualElement, it is appropriate to place initialization logic in the constructor.",936],["// In this method you can also register to any additional events as required. In this example there is a tooltip, an icon, and an action.",936],["public CreateCube()",936],["// A toolbar element can be either text, icon, or a combination of the two. Keep in mind that if a toolbar is docked horizontally the text will be clipped, so it's a good idea to specify an icon.",936],["text = \"Create Cube\";",936],["icon = AssetDatabase.LoadAssetAtPath(\"Assets/CreateCubeIcon.png\");",936],["tooltip = \"Instantiate a cube in the scene.\";",936],["clicked += OnClick;",936],["void OnClick()",936],["var newObj = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;",936],["// When writing editor tools, don't forget to be a good citizen and implement Undo.",936],["Undo.RegisterCreatedObjectUndo(newObj.gameObject, \"Create Cube\");",936],["// Note: Using ObjectFactory class instead of GameObject(like in this example) will register the undo entry automatically removing the need to register manually.",936],["Add the element’s ID to the Overlay constructor:",936],["```lang-cs",936],["[Overlay(typeof(SceneView), \"ElementToolbar Example\")]",936],["[Icon(\"Assets/unity.png\")]",936],["public class EditorToolbarExample : ToolbarOverlay",936],["EditorToolbarExample() : base(CreateCube.id) { }",936],["",936],["EditorToolbarToggle",936],["Create a standalone class that contains all the logic of the element. This example creates a toggle that prints its state in the console and updates its text in the element:",936],["```lang-cs",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class ToggleExample : EditorToolbarToggle",936],["public const string id = \"ExampleToolbar/Toggle\";",936],["public ToggleExample()",936],["text = \"Toggle OFF\";",936],["// Register the class to a callback for when the toggle’s state changes",936],["this.RegisterValueChangedCallback(OnStateChange);",936],["void OnStateChange(ChangeEvent evt)",936],["if (evt.newValue)",936],["// Put logic for when the state is ON here",936],["Debug.Log(\"Toggle State -> ON\");",936],["text = \"Toggle ON\";",936],["else",936],["// Put logic for when the state is OFF here",936],["Debug.Log(\"Toggle State -> OFF\");",936],["text = \"Toggle OFF\";",936],["Add the element’s ID to the Overlay constructor:",936],["```lang-cs",936],["[[Overlay(typeof(SceneView), \"ElementToolbar Example\")]",936],["[Icon(\"Assets/unity.png\")]",936],["public class EditorToolbarExample : ToolbarOverlay",936],["EditorToolbarExample() : base(",936],["ToggleExample.id",936],[") { }",936],["",936],["EditorToolbarDropdown",936],["Create a standalone class that contains all the logic of the element. Here is a simple example of a dropdown that adjusts its text with the drop-down selection.",936],["```lang-cs",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class DropdownExample : EditorToolbarDropdown",936],["public const string id = \"ExampleToolbar/Dropdown\";",936],["static string dropChoice = null;",936],["public DropdownExample()",936],["text = \"Axis\";",936],["clicked += ShowDropdown;",936],["void ShowDropdown()",936],["// A simple GenericMenu to populate the dropdown content",936],["var menu = new GenericMenu();",936],["menu.AddItem(new GUIContent(\"X\"), dropChoice == \"X\", () => { text = \"X\"; dropChoice = \"X\"; });",936],["menu.AddItem(new GUIContent(\"Y\"), dropChoice == \"Y\", () => { text = \"Y\"; dropChoice = \"Y\"; });",936],["menu.AddItem(new GUIContent(\"Z\"), dropChoice == \"Z\", () => { text = \"Z\"; dropChoice = \"Z\"; });",936],["menu.ShowAsContext();",936],["Add the element’s ID to the Overlay constructor:",936],["```lang-cs",936],["[Overlay(typeof(SceneView), \"ElementToolbar Example\")]",936],["[Icon(\"Assets/unity.png\")]",936],["public class EditorToolbarExample : ToolbarOverlay",936],["EditorToolbarExample() : base(",936],["DropdownExample.id",936],[") { }",936],["",936],["EditorToolbarDropdownToggle",936],["Create a standalone class that contains all the logic of the element. A dropdown toggle is a dropdown that can toggled like the Gizmo menu in the Scene view. This example creates a rectangle in the corner of the Scene view whos color you can choose from a dropdown in the overlay.",936],["```lang-cs",936],["[EditorToolbarElement(id, typeof(SceneView))]",936],["class DropdownToggleExample : EditorToolbarDropdownToggle, IAccessContainerWindow",936],["public const string id = \"ExampleToolbar/DropdownToggle\";",936],["// This property is specified by IAccessContainerWindow and is used to access the Overlay's EditorWindow.",936],["public EditorWindow containerWindow { get; set; }",936],["static int colorIndex = 0;",936],["static readonly Color[] colors = new Color[] { Color.red, Color.green, Color.cyan };",936],["public DropdownToggleExample()",936],["text = \"Color Bar\";",936],["tooltip = \"Display a color rectangle in the top left of the Scene view. Toggle on or off, and open the dropdown\" +",936],["\"to change the color.\";",936],["// When the dropdown is opened, ShowColorMenu is invoked and you can create a pop-up menu.",936],["dropdownClicked += ShowColorMenu;",936],["// Subscribe to the Scene view OnGUI callback to draw a color swatch.",936],["SceneView.duringSceneGui += DrawColorSwatch;",936],["void DrawColorSwatch(SceneView view)",936],["// Test that this callback is for the correct Scene view, and check if the toggle is on",936],["// or off (value).",936],["if (view != containerWindow !value)",936],["return;",936],["Handles.BeginGUI();",936],["GUI.color = colors[colorIndex];",936],["GUI.DrawTexture(new Rect(8, 8, 120, 24), Texture2D.whiteTexture);",936],["GUI.color = Color.white;",936],["Handles.EndGUI();",936],["// When the drop-down button is clicked, this method creates a pop-up menu at the mouse cursor position.",936],["void ShowColorMenu()",936],["var menu = new GenericMenu();",936],["menu.AddItem(new GUIContent(\"Red\"), colorIndex == 0, () => colorIndex = 0);",936],["menu.AddItem(new GUIContent(\"Green\"), colorIndex == 1, () => colorIndex = 1);",936],["menu.AddItem(new GUIContent(\"Blue\"), colorIndex == 2, () => colorIndex = 2);",936],["menu.ShowAsContext();",936],["Add the element’s ID to the Overlay constructor:",936],["```lang-cs",936],["[Overlay(typeof(SceneView), \"ElementToolbar Example\")]",936],["[Icon(\"Assets/unity.png\")]",936],["public class EditorToolbarExample : ToolbarOverlay",936],["EditorToolbarExample() : base(",936],["DropdownToggleExample.id",936],[") { }",936],["Overlays",937],["In the Scene view, authoring tools are available as persistent, customizable panels and toolbars called overlays. Overlays can also display contextual information about your selection.",937],["To improve your workflow, you can position overlays, select which overlays to display or hide, and save, import, or export overlay configurations.",937],["‍To see what overlays are available in the Scene view, press the ` key to open the overlay menu.",937],["Topic Description ",937],[":-------------------- :----------------------- ",937],["Default Scene view overlay reference Understand the default overlay panels and toolbars in the Scene view. ",937],["Display or hide an overlay Choose which overlays display in the Scene view. ",937],["Position an overlay Move and dock an overlay. ",937],["Change the layout of an overlay Change the orientation of an overlay to panel, horizontal, or vertical. ",937],["Create and manage overlay configurations Save, switch, import, and export overlay configurations. ",937],["Create custom overlays Create custom overlays for the Scene view. ",937],["Additional resources",937],["\nPosition GameObjects\n",937],["\nCreate custom Editor tools\n",937],["Override the Android App Manifest",938],["Gradle generates the Android App Manifest for your application during the build process. You can override this Android App Manifest with your own content in one of the following ways:",938],["\nCreate a template Unity Library Manifest file that Unity uses to structure the Unity Library Manifest it produces. For more information, see Creating a template Unity Library Manifest file.\n",938],["\nExport the Unity project and modify the final Android App Manifest file directly in Android Studio. For more information, see Editing the Android App Manifest in Android Studio.\n",938],["",938],["Create a template Unity Library Manifest file",938],["To have some control over the format and contents of the Android App Manifest file, override the default Unity Library Manifest file with a custom template. To do this:",938],["Go to Edit > Project Settings to open the Project Settings window.",938],["Select the Player tab, then open Android Player Settings:",938],["In the Publishing Settings section, enable Custom Main Manifest. This creates a Unity Library Manifest file and displays the path to the file. For information on the settings that the Unity Library Manifest controls, refer to Unity Library Manifest.",938],["Gradle merges the manifests from your Android libraries into this main manifest and makes sure that the final configuration is correct.",938],["",938],["Editing the Android App Manifest in Android Studio",938],["To have full control over the Android App Manifest file, export your Unity project and edit the Android App Manifest in Android Studio. For more information, see Exporting an Android Project.",938],["Overview of .NET in Unity",939],["Unity uses the open-source .NET platform to ensure that applications you make with Unity can run on a wide variety of different hardware configurations. The .NET platform supports a range of languages and API libraries.",939],["Scripting backends",939],["Unity has two scripting backends; Mono, and IL2CPP (Intermediate Language To C++), each of which uses a different compilation technique:",939],["Mono uses just-in-time (JIT) compilation and compiles code on demand at runtime.",939],["IL2CPP uses ahead-of-time (AOT) compilation and compiles your entire application before it runs.",939],["The benefit of using a JIT-based scripting backend is that the compilation time is typically much faster than AOT.",939],["By default, Unity uses the Mono backend on platforms that support Mono. When you build a player for your application, you can choose which scripting backend to use. To do this through the Editor, go to Edit > Project Settings > Player, open the Other Settings panel, then click on the Scripting Backend dropdown and select which backend you want. For more information, see Scripting backends.",939],["Managed code stripping",939],["When you build an application, Unity compiles and then searches the assemblies (.DLLs) in your project to detect and remove unused code. This process of stripping code reduces the final binary size of your build, but increases build time.",939],["Code stripping is disabled by default when you use Mono but code stripping can't be disabled for IL2CPP. You can control how much code Unity strips with the Managed Stripping Level property.",939],["To change this property, go to Edit > Project Settings > Player, open the Other Settings panel, then click on the Managed Stripping Level dropdown and select a stripping level.",939],["As you increase the Managed Stripping Level, Unity removes more code. This increases the risk that Unity might remove code that your application relies on, especially if you use reflection or generate code at runtime.",939],["You can use annotations on certain elements of your code to prevent Unity from stripping it. For more information, see Managed Code Stripping.",939],["Garbage collection",939],["Unity uses the Boehm garbage collector for both the Mono and IL2CPP backends. Unity uses the Incremental mode by default. You can disable the Incremental mode to use stop-the-world garbage collection, although Unity recommends the Incremental mode.",939],["To toggle between Incremental mode and stop-the-world, go to Edit > Project Settings > Player, open the Other Settings panel and click on the Use incremental GC checkbox. In Incremental mode, Unity’s garbage collector only runs for a limited period of time and doesn’t necessarily collect all objects in one pass. This spreads the time it takes to collect objects over multiple frames and reduces stuttering and CPU spikes. For more information, see Managed memory.",939],["To check the number of allocations and possible CPU spikes in your application, use the Unity Profiler. You can also use the GarbageCollector API to completely disable garbage collection in Players. When the collector is disabled, be careful to avoid allocating excess memory.",939],[".NET system libraries",939],["Unity supports many platforms and might use different scripting backends depending on the platform. The .NET system libraries require platform-specific implementations to work correctly in some cases. While Unity tries its best to support as much of the .NET ecosystem as possible, there are some exceptions to parts of the .NET system libraries that Unity explicitly doesn’t support.",939],["Unity makes no performance or allocation guarantees for the .NET system libraries across Unity versions. Generally, Unity doesn’t fix any performance regressions in the .NET system libraries.",939],["Unity doesn’t support the System.Drawing library and it isn’t guaranteed to work on all platforms.",939],["The JIT compilation that the Mono scripting backend uses enables you to emit dynamic C#/.NET Intermediate Language (IL) code generation during the runtime of your application. The AOT compilation that the IL2CPP scripting backend uses doesn’t support dynamic code generation.",939],["This is important to consider when you use third-party libraries, because they might have different code paths for JIT and AOT, or they might use code paths that rely on dynamically generated code. For more information on how to generate code at runtime, see Microsoft’s ModuleBuilder documentation.",939],["Although Unity supports multiple .NET API profiles, you should use the .NET Standard API Compatibility Level for all new projects for the following reasons:",939],[".NET Standard is a smaller API surface and so has a smaller implementation. This reduces the size of your final executable file.",939],[".NET Standard has better cross-platform support, so your code is more likely to work across all platforms.",939],["All .NET runtimes support .NET Standard, so your code works across more VM/runtime environments (for example, .NET Framework. .NET Core, Xamarin, Unity) when you use .NET Standard.",939],[".NET Standard moves more errors to compile time. A number of APIs in .NET Framework are available at compile time, but have implementations on some platforms that throw an exception at runtime.",939],["Other profiles can be useful if, for example, you need to provide support for an older existing application. To change the Api Compatibility Level setting, go to Edit > Project Settings > Player. Under the Other Settings heading, set the Api Compatibility Level to the desired setting.",939],["For more information, see .NET Profile Support.",939],["Using third-party .NET libraries",939],["You should only use third-party .NET libraries that have been extensively tested on a wide range of Unity configurations and platforms.",939],["The performance characteristics of JIT and AOT code paths in third-party libraries might be significantly different. AOT generally reduces startup times and is suited to larger applications for this reason but increases the binary file size to accommodate the compiled code. AOT also takes longer to build during development.",939],["JIT adjusts at runtime based on the platform it’s running on, which can increase running performance at the cost of a potentially longer application startup time. As such, you should profile your application in both the Editor, and on your target platform. For more information, see Profiler overview.",939],["You should profile the usage of your .NET system libraries on all target platforms because their performance characteristics might vary depending on the scripting backends, .NET versions, and profiles you use.",939],["When you review a third-party library, consider the following areas:",939],["Compatibility: Third-party libraries might not be compatible with some Unity platforms and scripting backends.",939],["Performance: Third-party libraries might have vastly different performance characteristics in Unity compared to other .NET runtimes.",939],["AOT binary size: Third-party libraries might increase AOT binary size significantly because of the number of dependencies the library uses.",939],["C# reflection overhead",939],["Mono and IL2CPP internally cache all C# reflection (System.Reflection) objects and by design, Unity doesn't garbage collect them. The result of this behavior is that the garbage collector continuously scans the cached C# reflection objects during the lifetime of your application, which causes unnecessary and potentially significant garbage collector overhead.",939],["To minimize the garbage collector overhead, avoid methods such as Assembly.GetTypes and Type.GetMethods() in your application, which create a lot of C# reflection objects at runtime. Instead, you should scan assemblies in the Editor for the required data and serialize and/or codegen it for use at runtime.",939],["UnityEngine.Object special behavior",939],["UnityEngine.Object is a special type of C# object in Unity, because it's linked to a native C++ counterpart object. For example, when you use a Camera component, Unity stores the state of the object on the object’s native C++ counterpart, not on the C# object itself.",939],["Unity doesn’t currently support the use of the C# WeakReference class with instances of UnityEngine.Object. For this reason, you shouldn’t use a WeakReference to reference a loaded asset. See Microsoft’s WeakReference documentation for more information on the WeakReference class.",939],["Unity C# and Unity C++ share UnityEngine Objects",939],["When you use a method such as Object.Destroy or Object.DestroyImmediate to destroy a UnityEngine.Object derived object, Unity destroys (unloads) the native counter object. You can’t destroy the C# object with an explicit call, because the garbage collector manages the memory. Once there are no longer any references to the managed object, the garbage collector collects and destroys it.",939],["If your application tries to access a destroyed UnityEngine.Object again, Unity recreates the native counterpart object for most types. Two exceptions to this recreation behavior are MonoBehaviour and ScriptableObject: Unity never reloads them once they have been destroyed.",939],["MonoBehaviour and ScriptableObject override the equality (==) and inequality (!=) operators. If you compare a destroyed MonoBehaviour or ScriptableObject against null, the operators return true when the managed object still exists and hasn't yet been garbage collected.",939],["Because you can’t overload the ?? and ?. operators, they aren’t compatible with objects that derive from UnityEngine.Object. The operators don’t return the same results as the equality and inequality operators when you use them on a destroyed MonoBehaviour or ScriptableObject while the managed object still exists.",939],["Limitations of async and await tasks",939],["The Unity API isn't thread safe and therefore, you should only use async and await tasks from inside the UnitySynchronizationContext. Async tasks often allocate objects when invoked, which might cause performance issues if you overuse them.",939],["Unity overwrites the default SynchronizationContext with a custom UnitySynchronizationContext and runs all the tasks on the main thread in both Edit and Play modes by default. To use async tasks, you must manually create and handle your own threads with the Task.Run API, and use the default SynchronizationContext instead of the Unity version.",939],["Unity doesn't automatically stop async tasks that run on managed threads when you exit Play mode. To listen for enter and exit Play mode events to stop the tasks manually, use EditorApplication.playModeStateChanged. If you take this approach, most of the Unity scripting APIs aren’t available to use unless you migrate the context back to the UnitySynchronizationContext.",939],["In development builds, Unity displays the following error message if you try to use Unity APIs in multithreaded code:",939],["```lang-csharp",939],["UnityException: Internal_CreateGameObject can only be called from the main thread. \\",939],["Constructors and field initializers will be executed from the loading thread when loading a scene. \\",939],["Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.",939],["For performance reasons, Unity doesn't perform checks for multithreaded behavior in non-development builds and doesn't display this error in live builds. This means that while Unity doesn't prevent execution of multithreaded code on live builds, random crashes and other unpredictable errors are likely if you do use multiple threads.",939],["For this reason, you shouldn't use your own multithreading and instead use Unity's job system. The job system uses multiple threads safely to execute jobs in parallel and achieve the performance benefits of multithreading. For more information, see Job system overview.",939],["Built-in packages",940],["",940],["Built-in packages allow users to toggle Unity features on or off through the Package Manager. Enabling or disabling a package reduces the run-time build size. For example, most Projects don’t use the legacy Particle System.",940],["When you remove a built-in package of this feature, Unity does not include the related code and resources when you build your final application. Typically, these built-in packages contain only the package manifest and are bundled with Unity (rather than available on the package registry).",940],["Click on any of the following links to see the documentation for the package:",940],["AI: [com.unity.modules.ai][]",940],["Android JNI: [com.unity.modules.androidjni][]",940],["Animation: [com.unity.modules.animation][]",940],["Asset Bundle: [com.unity.modules.assetbundle][]",940],["Audio: [com.unity.modules.audio][]",940],["Cloth: [com.unity.modules.cloth][]",940],["Director: [com.unity.modules.director][]",940],["Image Conversion: [com.unity.modules.imageconversion][]",940],["IMGUI: [com.unity.modules.imgui][]",940],["JSONSerialize: [com.unity.modules.jsonserialize][]",940],["NVIDIA: [com.unity.modules.nvidia][]",940],["Particle System: [com.unity.modules.particlesystem][]",940],["Physics: [com.unity.modules.physics][]",940],["Physics 2D: [com.unity.modules.physics2d][]",940],["Screen Capture: [com.unity.modules.screencapture][]",940],["Terrain: [com.unity.modules.terrain][]",940],["Terrain Physics: [com.unity.modules.terrainphysics][]",940],["Tilemap: [com.unity.modules.tilemap][]",940],["UI: [com.unity.modules.ui][]",940],["UIElements: [com.unity.modules.uielements][]",940],["Umbra: [com.unity.modules.umbra][]",940],["Unity Analytics: [com.unity.modules.unityanalytics][]",940],["Unity Web Request: [com.unity.modules.unitywebrequest][]",940],["Unity Web Request Asset Bundle: [com.unity.modules.unitywebrequestassetbundle][]",940],["Unity Web Request Audio: [com.unity.modules.unitywebrequestaudio][]",940],["Unity Web Request Texture: [com.unity.modules.unitywebrequesttexture][]",940],["Unity Web Request WWW: [com.unity.modules.unitywebrequestwww][]",940],["Vehicles: [com.unity.modules.vehicles][]",940],["Video: [com.unity.modules.video][]",940],["VR: [com.unity.modules.vr][]",940],["Wind: [com.unity.modules.wind][]",940],["XR: [com.unity.modules.xr][]",940],["[com.unity.modules.ai]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AIModule.html target=\"_blank\"",940],["[com.unity.modules.androidjni]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AndroidJNIModule.html target=\"_blank\"",940],["[com.unity.modules.animation]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AnimationModule.html target=\"_blank\"",940],["[com.unity.modules.assetbundle]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AssetBundleModule.html target=\"_blank\"",940],["[com.unity.modules.audio]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.AudioModule.html target=\"_blank\"",940],["[com.unity.modules.cloth]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ClothModule.html target=\"_blank\"",940],["[com.unity.modules.director]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.DirectorModule.html target=\"_blank\"",940],["[com.unity.modules.imageconversion]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ImageConversionModule.html target=\"_blank\"",940],["[com.unity.modules.imgui]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.IMGUIModule.html target=\"_blank\"",940],["[com.unity.modules.jsonserialize]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.JSONSerializeModule.html target=\"_blank\"",940],["[com.unity.modules.nvidia]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.NVIDIAModule.html target=\"_blank\"",940],["[com.unity.modules.particlesystem]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ParticleSystemModule.html target=\"_blank\"",940],["[com.unity.modules.physics]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.PhysicsModule.html target=\"_blank\"",940],["[com.unity.modules.physics2d]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.Physics2DModule.html target=\"_blank\"",940],["[com.unity.modules.screencapture]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.ScreenCaptureModule.html target=\"_blank\"",940],["[com.unity.modules.terrain]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.TerrainModule.html target=\"_blank\"",940],["[com.unity.modules.terrainphysics]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.TerrainPhysicsModule.html target=\"_blank\"",940],["[com.unity.modules.tilemap]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.TilemapModule.html target=\"_blank\"",940],["[com.unity.modules.ui]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UIModule.html target=\"_blank\"",940],["[com.unity.modules.uielements]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UIElementsModule.html target=\"_blank\"",940],["[com.unity.modules.umbra]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UmbraModule.html target=\"_blank\"",940],["[com.unity.modules.unityanalytics]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityAnalyticsModule.html target=\"_blank\"",940],["[com.unity.modules.unitywebrequest]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestModule.html target=\"_blank\"",940],["[com.unity.modules.unitywebrequestassetbundle]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestAssetBundleModule.html target=\"_blank\"",940],["[com.unity.modules.unitywebrequestaudio]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestAudioModule.html target=\"_blank\"",940],["[com.unity.modules.unitywebrequesttexture]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestTextureModule.html target=\"_blank\"",940],["[com.unity.modules.unitywebrequestwww]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.UnityWebRequestWWWModule.html target=\"_blank\"",940],["[com.unity.modules.vehicles]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.VehiclesModule.html target=\"_blank\"",940],["[com.unity.modules.video]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.VideoModule.html target=\"_blank\"",940],["[com.unity.modules.vr]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.VRModule.html target=\"_blank\"",940],["[com.unity.modules.wind]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.WindModule.html target=\"_blank\"",940],["[com.unity.modules.xr]: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/UnityEngine.XRModule.html target=\"_blank\"",940],["Core packages",941],["",941],["Core packages are similar to other released Unity packages, but have the following differences:",941],["Core packages are distributed alongside each version of the Unity Editor.",941],["You can't pick different versions of core packages for your version of the Unity Editor by using the Package Manager window or API.",941],["Click on any of the following links to see the documentation for the package:",941],["2D Sprite: [com.unity.2d.sprite][]",941],["2D Tilemap Editor: [com.unity.2d.tilemap][]",941],["Core RP Library: [com.unity.render-pipelines.core][]",941],["High Definition RP: [com.unity.render-pipelines.high-definition][]",941],["Shader Graph: [com.unity.shadergraph][]",941],["Unity UI: [com.unity.ugui][]",941],["Universal RP: [com.unity.render-pipelines.universal][]",941],["Visual Effect Graph: [com.unity.visualeffectgraph][]",941],["[com.unity.2d.sprite]: https://docs.unity3d.com/Packages/com.unity.2d.sprite@1.0/manual/index.html target=\"_blank\"",941],["[com.unity.2d.tilemap]: https://docs.unity3d.com/Packages/com.unity.2d.tilemap@1.0/manual/index.html target=\"_blank\"",941],["[com.unity.render-pipelines.core]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@14.0/manual/index.html target=\"_blank\"",941],["[com.unity.render-pipelines.high-definition]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@14.0/manual/index.html target=\"_blank\"",941],["[com.unity.shadergraph]: https://docs.unity3d.com/Packages/com.unity.shadergraph@14.0/manual/index.html target=\"_blank\"",941],["[com.unity.ugui]: https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/index.html target=\"_blank\"",941],["[com.unity.render-pipelines.universal]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html target=\"_blank\"",941],["[com.unity.visualeffectgraph]: https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@14.0/manual/index.html target=\"_blank\"",941],["Experimental packages",942],["",942],["Experimental packages are new packages or experimental modifications made to mature packages. Unity doesn't support Experimental packages because they're in the early stages of development.",942],["Note:** Before Unity Editor version 2021.1, the Package Manager used the \"Preview\" state to describe packages that are experimental or risky but otherwise mature. The Package Manager used the \"Preview\" state to describe packages that had not yet been fully validated as safe to use in production. Starting with 2021.1, the \"Preview\" state no longer exists, and packages can either be \"Experimental\" or \"Pre-release.\" This provides a clearer distinction between packages that are mature but risky to use, and packages that are almost fully mature.",942],["Experimental packages can go through many changes before they're ready for release in a specific version of Unity. At some point in the future, they might pass the verification requirements but they might also become deprecated instead. Because there is no guarantee for future support, you shouldn't use experimental packages in production.",942],["Packages in experimental state don't usually appear in the Unity Registry context of the Package Manager, even though they're on Unity's official package registry server. These packages aren't discoverable in the Package Manager window because:",942],["They're too risky to use in production. Some of these packages require a lot of training and expertise and are recommended only in specific circumstances.",942],["They provide shared or additional functionality to existing packages. You shouldn't use them on their own because they're \"support\" packages only.",942],["Experimental packages that aren't discoverable can still appear in the Package Manager window if you already installed them in your project or installed them as dependencies of supported packages. However, they're hidden so that you don't discover them by accident and use them without realizing the risks. If they do appear in the Editor, they're always marked with the label, and the following menu appears as a warning in the Editor:",942],["You can open the Experimental Packages In Use menu and select Dismiss if you don’t want to see this warning for this project. You can also open the menu and select Show Experimental Packages to open the Package Manager with a filtered list of the experimental packages in your project.",942],["For a list of stable packages verified for this release, see Released packages.",942],["For more information about package states, see Package states and lifecycle.",942],["Packages by keywords",943],["",943],["Packages contain the following keywords:",943],["Keyword: Matching packages: ",943],[" 2d [2D Sprite][] [2D Tilemap Editor][] ",943],[" 2D [2D Pixel Perfect][] ",943],[" 3d [ProBuilder][] ",943],[" abc [Alembic][] ",943],[" adapt [Remote Config][] ",943],[" adaptive [Adaptive Performance][] ",943],[" ads [Advertisement Legacy][] ",943],[" aim [Cinemachine][] ",943],[" alembic [Alembic][] ",943],[" Android [Android Logcat][] [Mobile Notifications][] ",943],[" android [Unity Distribution Portal][] ",943],[" animation [2D Animation][] [Alembic][] [FBX Exporter][] [Recorder][] [Timeline][] ",943],[" Animation [Animation Rigging][] ",943],[" AOV [Recorder][] ",943],[" ap [Adaptive Performance][] ",943],[" api [Unity Profiling Core API][] ",943],[" app update [Remote Config][] ",943],[" ar [AR Foundation][] [Apple ARKit XR Plugin][] [Google ARCore XR Plugin][] [Magic Leap XR Plugin][] [XR Plugin Management][] ",943],[" arcore [Google ARCore XR Plugin][] ",943],[" arfoundation [Unity OpenXR Meta][] ",943],[" arkit [Apple ARKit XR Plugin][] ",943],[" arm [System Metrics Mali][] ",943],[" arsimulation [AR Foundation][] ",943],[" Art [2D Aseprite Importer][] ",943],[" Aseprite [2D Aseprite Importer][] ",943],[" asset [Addressables][] ",943],[" assetbundles [Addressables][] [Scriptable Build Pipeline][] ",943],[" assetimporter [2D Aseprite Importer][] [2D PSD Importer][] ",943],[" augmented [AR Foundation][] [Apple ARKit XR Plugin][] [Google ARCore XR Plugin][] [Magic Leap XR Plugin][] ",943],[" backup [Version Control][] ",943],[" binary [Serialization][] ",943],[" blender [ProBuilder][] ",943],[" block [ProBuilder][] ",943],[" boost [Adaptive Performance][] ",943],[" Brush [Terrain Tools][] ",943],[" build [Scriptable Build Pipeline][] [XR Plugin Management][] ",943],[" bundle [Addressables][] [Scriptable Build Pipeline][] ",943],[" bundles [Addressables][] [Scriptable Build Pipeline][] ",943],[" cache [Scriptable Build Pipeline][] ",943],[" camera [Cinemachine][] ",943],[" Canvas [Unity UI][] ",943],[" capture [Recorder][] ",943],[" cinemachine [Cinemachine][] ",943],[" cinematic [Cinemachine][] ",943],[" cinematography [Cinemachine][] ",943],[" clay [Polybrush][] ",943],[" clearshot [Cinemachine][] ",943],[" clip [Recorder][] ",943],[" cloth [Alembic][] ",943],[" cloud [Version Control][] ",943],[" cluster [Adaptive Performance][] ",943],[" clusterinfo [Adaptive Performance][] ",943],[" collab [Version Control][] ",943],[" collaborate [Version Control][] ",943],[" collaboration [Version Control][] ",943],[" collections [Collections][] ",943],[" collision [Cinemachine][] ",943],[" compose [Cinemachine][] ",943],[" composition [Cinemachine][] ",943],[" conditional [Remote Config][] ",943],[" conditions [Remote Config][] ",943],[" config [Remote Config][] ",943],[" configuration [Remote Config][] ",943],[" connect [WebGL Publisher][] ",943],[" Constraints [Animation Rigging][] ",943],[" continuous delivery [Remote Config][] ",943],[" control [Version Control][] ",943],[" core [AR Foundation][] [Adaptive Performance][] [Google ARCore XR Plugin][] ",943],[" coroutine [Editor Coroutines][] ",943],[" coroutines [Editor Coroutines][] ",943],[" coverage [Code Coverage][] ",943],[" cross-compilation [Toolchain MacOS Linux x64][] [Toolchain Win Linux x64][] ",943],[" cube [ProBuilder][] ",943],[" curve [Splines][] ",943],[" cutscene [Cinemachine][] ",943],[" darwin [Toolchain MacOS Linux x64][] ",943],[" deploy [Remote Config][] ",943],[" design [ProBuilder][] ",943],[" devops [Version Control][] ",943],[" dolly [Cinemachine][] ",943],[" dots [Collections][] [Entities][] [Entities Graphics][] [Unity Logging][] ",943],[" editor [Editor Coroutines][] [Timeline][] ",943],[" effect [Visual Effect Graph][] ",943],[" entities [Entities][] ",943],[" events [Input System][] ",943],[" experiment [Remote Config][] ",943],[" experimentation [Remote Config][] ",943],[" facial [Alembic][] ",943],[" fbx [FBX Exporter][] [ProBuilder][] ",943],[" feature flagging [Remote Config][] ",943],[" Filter [Terrain Tools][] ",943],[" firebase [Remote Config][] ",943],[" follow [Cinemachine][] ",943],[" foundation [AR Foundation][] ",943],[" fps [Cinemachine][] ",943],[" framing [Cinemachine][] ",943],[" freelook [Cinemachine][] ",943],[" GameObjects [Multiplayer Tools][] ",943],[" gamepad [Input System][] ",943],[" geometry [ProBuilder][] ",943],[" graph [Visual Effect Graph][] ",943],[" graphics [High Definition RP][] [Universal RP][] ",943],[" graybox [ProBuilder][] ",943],[" greybox [ProBuilder][] ",943],[" hand [XR Hands][] ",943],[" handheld [Cinemachine][] ",943],[" hands [XR Hands][] ",943],[" havok [Havok Physics for Unity][] ",943],[" hybrid [Entities Graphics][] ",943],[" iap [In App Purchasing][] [Unity Distribution Portal][] ",943],[" images [Recorder][] ",943],[" impulse [Cinemachine][] ",943],[" indexer [Adaptive Performance][] ",943],[" input [Input System][] ",943],[" interaction [XR Interaction Toolkit][] ",943],[" iOS [Mobile Notifications][] ",943],[" json [Serialization][] ",943],[" keyboard [Input System][] ",943],[" language [Localization][] ",943],[" layer [Recorder][] ",943],[" lens [Cinemachine][] ",943],[" level [ProBuilder][] ",943],[" linux [Sysroot Base][] [Sysroot Linux x64][] [Toolchain Linux x64][] [Toolchain MacOS Linux x64][] [Toolchain Win Linux x64][] ",943],[" live capture [Live Capture][] ",943],[" locale [Localization][] ",943],[" localization [Localization][] ",943],[" Logcat [Android Logcat][] ",943],[" logging [Unity Logging][] ",943],[" macos [Toolchain MacOS Linux x64][] ",943],[" magicleap [Magic Leap XR Plugin][] ",943],[" management [XR Plugin Management][] ",943],[" Mask [Terrain Tools][] ",943],[" max [FBX Exporter][] [ProBuilder][] ",943],[" maya [FBX Exporter][] [ProBuilder][] ",943],[" memory [Memory Profiler][] ",943],[" memoryprofiler [Memory Profiler][] ",943],[" mesh [ProBuilder][] ",943],[" meta [Unity OpenXR Meta][] ",943],[" mobile [Universal RP][] ",943],[" Mobile [Android Logcat][] [Mobile Notifications][] ",943],[" model [ProBuilder][] ",943],[" modeling [FBX Exporter][] [Polybrush][] [ProBuilder][] ",943],[" mouse [Input System][] ",943],[" mr [Unity OpenXR Meta][] ",943],[" Multiplayer [Multiplayer Tools][] ",943],[" Netcode [Multiplayer Tools][] ",943],[" noise [Cinemachine][] ",943],[" Noise [Terrain Tools][] ",943],[" Notifications [Mobile Notifications][] ",943],[" obj [ProBuilder][] ",943],[" oculus [Oculus XR Plugin][] [Unity OpenXR Meta][] ",943],[" opencover [Code Coverage][] ",943],[" openxr [OpenXR Plugin][] [Unity OpenXR Meta][] ",943],[" orbit [Cinemachine][] ",943],[" override [Remote Config][] ",943],[" parameter [Remote Config][] ",943],[" particles [Visual Effect Graph][] ",943],[" pass [Recorder][] ",943],[" path [Splines][] ",943],[" perfect [2D Pixel Perfect][] ",943],[" performance [High Definition RP][] [Universal RP][] ",943],[" physics [Havok Physics for Unity][] [Unity Physics][] ",943],[" pipeline [High Definition RP][] [Universal RP][] ",943],[" Pixel [2D Aseprite Importer][] ",943],[" pixel [2D Pixel Perfect][] ",943],[" plastic [Version Control][] ",943],[" plasticscm [Version Control][] ",943],[" plugin [XR Plugin Management][] ",943],[" probuilder [ProBuilder][] ",943],[" profiler [Memory Profiler][] [System Metrics Mali][] [Unity Profiling Core API][] ",943],[" profiles [Adaptive Performance][] ",943],[" profiling [Memory Profiler][] [System Metrics Mali][] [Unity Profiling Core API][] ",943],[" prototype [ProBuilder][] ",943],[" provider [Adaptive Performance][] ",943],[" psdimporter [2D PSD Importer][] ",943],[" purchasing [In App Purchasing][] [Unity Distribution Portal][] ",943],[" push [Polybrush][] ",943],[" python [Python Scripting][] ",943],[" python.net [Python Scripting][] ",943],[" quest [Oculus XR Plugin][] [Unity OpenXR Meta][] ",943],[" reality [AR Foundation][] [Apple ARKit XR Plugin][] [Google ARCore XR Plugin][] [Magic Leap XR Plugin][] [OpenXR Plugin][] [Unity OpenXR Meta][] [XR Hands][] ",943],[" recorder [Recorder][] ",943],[" recording [Recorder][] ",943],[" remote [Remote Config][] ",943],[" remote config [Remote Config][] ",943],[" remote settings [Remote Config][] ",943],[" render [High Definition RP][] [Universal RP][] ",943],[" rendering [High Definition RP][] [Universal RP][] ",943],[" resources [Addressables][] ",943],[" rift [Oculus XR Plugin][] [Unity OpenXR Meta][] ",943],[" rig [Cinemachine][] ",943],[" Rigging [Animation Rigging][] ",943],[" roll-out [Remote Config][] ",943],[" rules [Remote Config][] ",943],[" samsung [Adaptive Performance][] ",943],[" scaler [Adaptive Performance][] ",943],[" sculpting [Polybrush][] ",943],[" SDF [TextMeshPro][] ",943],[" sdk [XR Plugin Management][] ",943],[" segment [Remote Config][] ",943],[" segmentation [Remote Config][] ",943],[" segmenting [Remote Config][] ",943],[" serialization [Serialization][] ",943],[" server [Scriptable Build Pipeline][] ",943],[" settings [Remote Config][] ",943],[" shape [2D SpriteShape][] [ProBuilder][] ",943],[" share [WebGL Publisher][] ",943],[" simulation [Alembic][] ",943],[" smartsprite [2D SpriteShape][] ",943],[" snapshot [Memory Profiler][] ",943],[" source [Version Control][] ",943],[" spline [2D SpriteShape][] [Splines][] ",943],[" sprite [2D Sprite][] ",943],[" sprite editor window [2D Sprite][] ",943],[" spriteshape [2D SpriteShape][] ",943],[" staged rollouts [Remote Config][] ",943],[" subsystem [AR Foundation][] [Adaptive Performance][] [XR Hands][] ",943],[" sysroot [Sysroot Base][] [Sysroot Linux x64][] ",943],[" tailor [Remote Config][] ",943],[" target [Remote Config][] ",943],[" targeting [Remote Config][] ",943],[" team [Version Control][] ",943],[" teams [Version Control][] ",943],[" terrain [Polybrush][] ",943],[" Terrain [Terrain Tools][] ",943],[" terrain2d [2D SpriteShape][] ",943],[" test [Code Coverage][] [Remote Config][] ",943],[" Test [Test Framework][] ",943],[" TestFramework [Test Framework][] ",943],[" testing [Code Coverage][] ",943],[" Text [TextMeshPro][] ",943],[" TextMesh Pro [TextMeshPro][] ",943],[" TextMeshPro [TextMeshPro][] ",943],[" Tilemap [2D Tilemap Editor][] ",943],[" timeline [Timeline][] ",943],[" TMP [TextMeshPro][] ",943],[" tool [Memory Profiler][] ",943],[" Toolbox [Terrain Tools][] ",943],[" toolchain [Toolchain Linux x64][] [Toolchain MacOS Linux x64][] [Toolchain Win Linux x64][] ",943],[" toolkit [XR Interaction Toolkit][] ",943],[" Tools [Multiplayer Tools][] ",943],[" tools [Timeline][] ",943],[" touch [Input System][] ",943],[" track [Cinemachine][] ",943],[" tracking [XR Hands][] ",943],[" tune [Remote Config][] ",943],[" tutorials [Tutorial Authoring Tools][] [Tutorial Framework][] ",943],[" ugui [Unity UI][] ",943],[" UI [Unity UI][] ",943],[" unity [Advertisement Legacy][] [Collections][] [Entities][] [Entities Graphics][] [In App Purchasing][] [Mathematics][] [Recorder][] [Serialization][] [Sysroot Base][] [Sysroot Linux x64][] [Timeline][] [Unity Logging][] [Unity Physics][] ",943],[" Unity UI [Unity UI][] ",943],[" utilities [AR Foundation][] [Adaptive Performance][] ",943],[" utility [AR Foundation][] [Adaptive Performance][] ",943],[" variants [Remote Config][] ",943],[" variation [Remote Config][] ",943],[" vcam [Live Capture][] ",943],[" vcs [Version Control][] ",943],[" version [Version Control][] ",943],[" vfx [Visual Effect Graph][] ",943],[" video [Recorder][] ",943],[" virtual [Oculus XR Plugin][] [Unity OpenXR Meta][] [XR Hands][] ",943],[" virtual camera [Live Capture][] ",943],[" virtual production [Live Capture][] ",943],[" visualeffect [Visual Effect Graph][] ",943],[" vr [Input System][] [Oculus XR Plugin][] [Unity OpenXR Meta][] [XR Hands][] [XR Plugin Management][] ",943],[" VR [XR Interaction Toolkit][] ",943],[" vrr [Adaptive Performance][] ",943],[" webgl [WebGL Publisher][] ",943],[" whitebox [ProBuilder][] ",943],[" windows [Toolchain Win Linux x64][] ",943],[" xr [AR Foundation][] [Apple ARKit XR Plugin][] [Google ARCore XR Plugin][] [Input System][] [Magic Leap XR Plugin][] [Oculus XR Plugin][] [OpenXR Plugin][] [Unity OpenXR Meta][] [XR Hands][] [XR Plugin Management][] ",943],[" XR [XR Interaction Toolkit][] ",943],[" xreditorsubsystem [AR Foundation][] [Magic Leap XR Plugin][] [Oculus XR Plugin][] [OpenXR Plugin][] ",943],["[2D Sprite]: https://docs.unity3d.com/Packages/com.unity.2d.sprite@1.0/manual/index.html target=\"_blank\"",943],["[2D Tilemap Editor]: https://docs.unity3d.com/Packages/com.unity.2d.tilemap@1.0/manual/index.html target=\"_blank\"",943],["[2D Pixel Perfect]: https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@5.0/manual/index.html target=\"_blank\"",943],["[ProBuilder]: https://docs.unity3d.com/Packages/com.unity.probuilder@5.2/manual/index.html target=\"_blank\"",943],["[Alembic]: https://docs.unity3d.com/Packages/com.unity.formats.alembic@2.3/manual/index.html target=\"_blank\"",943],["[Remote Config]: https://docs.unity3d.com/Packages/com.unity.remote-config@4.0/manual/index.html target=\"_blank\"",943],["[Adaptive Performance]: https://docs.unity3d.com/Packages/com.unity.adaptiveperformance@5.0/manual/index.html target=\"_blank\"",943],["[Advertisement Legacy]: https://docs.unity3d.com/Packages/com.unity.ads@4.4/manual/index.html target=\"_blank\"",943],["[Cinemachine]: https://docs.unity3d.com/Packages/com.unity.cinemachine@3.0/manual/index.html target=\"_blank\"",943],["[Android Logcat]: https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@1.4/manual/index.html target=\"_blank\"",943],["[Mobile Notifications]: https://docs.unity3d.com/Packages/com.unity.mobile.notifications@2.3/manual/index.html target=\"_blank\"",943],["[Unity Distribution Portal]: https://docs.unity3d.com/Packages/com.unity.purchasing.udp@2.2/manual/index.html target=\"_blank\"",943],["[2D Animation]: https://docs.unity3d.com/Packages/com.unity.2d.animation@9.0/manual/index.html target=\"_blank\"",943],["[FBX Exporter]: https://docs.unity3d.com/Packages/com.unity.formats.fbx@5.1/manual/index.html target=\"_blank\"",943],["[Recorder]: https://docs.unity3d.com/Packages/com.unity.recorder@4.0/manual/index.html target=\"_blank\"",943],["[Timeline]: https://docs.unity3d.com/Packages/com.unity.timeline@1.8/manual/index.html target=\"_blank\"",943],["[Animation Rigging]: https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/index.html target=\"_blank\"",943],["[Unity Profiling Core API]: https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/manual/index.html target=\"_blank\"",943],["[AR Foundation]: https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.1/manual/index.html target=\"_blank\"",943],["[Apple ARKit XR Plugin]: https://docs.unity3d.com/Packages/com.unity.xr.arkit@5.1/manual/index.html target=\"_blank\"",943],["[Google ARCore XR Plugin]: https://docs.unity3d.com/Packages/com.unity.xr.arcore@5.1/manual/index.html target=\"_blank\"",943],["[Magic Leap XR Plugin]: https://docs.unity3d.com/Packages/com.unity.xr.magicleap@7.0/manual/index.html target=\"_blank\"",943],["[XR Plugin Management]: https://docs.unity3d.com/Packages/com.unity.xr.management@4.4/manual/index.html target=\"_blank\"",943],["[Unity OpenXR Meta]: https://docs.unity3d.com/Packages/com.unity.xr.meta-openxr@1.0/manual/index.html target=\"_blank\"",943],["[System Metrics Mali]: https://docs.unity3d.com/Packages/com.unity.profiling.systemmetrics.mali@1.0/manual/index.html target=\"_blank\"",943],["[2D Aseprite Importer]: https://docs.unity3d.com/Packages/com.unity.2d.aseprite@1.1/manual/index.html target=\"_blank\"",943],["[Addressables]: https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/index.html target=\"_blank\"",943],["[Scriptable Build Pipeline]: https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@2.1/manual/index.html target=\"_blank\"",943],["[2D PSD Importer]: https://docs.unity3d.com/Packages/com.unity.2d.psdimporter@8.0/manual/index.html target=\"_blank\"",943],["[Version Control]: https://docs.unity3d.com/Packages/com.unity.collab-proxy@2.2/manual/index.html target=\"_blank\"",943],["[Serialization]: https://docs.unity3d.com/Packages/com.unity.serialization@3.1/manual/index.html target=\"_blank\"",943],["[Terrain Tools]: https://docs.unity3d.com/Packages/com.unity.terrain-tools@5.0/manual/index.html target=\"_blank\"",943],["[Unity UI]: https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/index.html target=\"_blank\"",943],["[Polybrush]: https://docs.unity3d.com/Packages/com.unity.polybrush@1.1/manual/index.html target=\"_blank\"",943],["[Collections]: https://docs.unity3d.com/Packages/com.unity.collections@2.2/manual/index.html target=\"_blank\"",943],["[WebGL Publisher]: https://docs.unity3d.com/Packages/com.unity.connect.share@4.2/manual/index.html target=\"_blank\"",943],["[Editor Coroutines]: https://docs.unity3d.com/Packages/com.unity.editorcoroutines@1.0/manual/index.html target=\"_blank\"",943],["[Code Coverage]: https://docs.unity3d.com/Packages/com.unity.testtools.codecoverage@1.2/manual/index.html target=\"_blank\"",943],["[Toolchain MacOS Linux x64]: https://docs.unity3d.com/Packages/com.unity.toolchain.macos-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",943],["[Toolchain Win Linux x64]: https://docs.unity3d.com/Packages/com.unity.toolchain.win-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",943],["[Splines]: https://docs.unity3d.com/Packages/com.unity.splines@2.5/manual/index.html target=\"_blank\"",943],["[Entities]: https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html target=\"_blank\"",943],["[Entities Graphics]: https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/index.html target=\"_blank\"",943],["[Unity Logging]: https://docs.unity3d.com/Packages/com.unity.logging@1.0/manual/index.html target=\"_blank\"",943],["[Visual Effect Graph]: https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@14.0/manual/index.html target=\"_blank\"",943],["[Input System]: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/manual/index.html target=\"_blank\"",943],["[Multiplayer Tools]: https://docs.unity3d.com/Packages/com.unity.multiplayer.tools@1.1/manual/index.html target=\"_blank\"",943],["[High Definition RP]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@14.0/manual/index.html target=\"_blank\"",943],["[Universal RP]: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html target=\"_blank\"",943],["[XR Hands]: https://docs.unity3d.com/Packages/com.unity.xr.hands@1.3/manual/index.html target=\"_blank\"",943],["[Havok Physics for Unity]: https://docs.unity3d.com/Packages/com.havok.physics@1.0/manual/index.html target=\"_blank\"",943],["[In App Purchasing]: https://docs.unity3d.com/2022.3/Documentation/Manual/UnityIAP.html target=\"_blank\"",943],["[XR Interaction Toolkit]: https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.5/manual/index.html target=\"_blank\"",943],["[Localization]: https://docs.unity3d.com/Packages/com.unity.localization@1.4/manual/index.html target=\"_blank\"",943],["[Sysroot Base]: https://docs.unity3d.com/Packages/com.unity.sysroot@2.0/manual/index.html target=\"_blank\"",943],["[Sysroot Linux x64]: https://docs.unity3d.com/Packages/com.unity.sysroot.linux-x86_64@2.0/manual/index.html target=\"_blank\"",943],["[Toolchain Linux x64]: https://docs.unity3d.com/Packages/com.unity.toolchain.linux-x86_64@2.0/manual/index.html target=\"_blank\"",943],["[Live Capture]: https://docs.unity3d.com/Packages/com.unity.live-capture@4.0/manual/index.html target=\"_blank\"",943],["[Memory Profiler]: https://docs.unity3d.com/Packages/com.unity.memoryprofiler@1.1/manual/index.html target=\"_blank\"",943],["[Oculus XR Plugin]: https://docs.unity3d.com/Packages/com.unity.xr.oculus@4.1/manual/index.html target=\"_blank\"",943],["[OpenXR Plugin]: https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.9/manual/index.html target=\"_blank\"",943],["[Unity Physics]: https://docs.unity3d.com/Packages/com.unity.physics@1.0/manual/index.html target=\"_blank\"",943],["[Python Scripting]: https://docs.unity3d.com/Packages/com.unity.scripting.python@7.0/manual/index.html target=\"_blank\"",943],["[TextMeshPro]: https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.0/manual/index.html target=\"_blank\"",943],["[2D SpriteShape]: https://docs.unity3d.com/Packages/com.unity.2d.spriteshape@9.0/manual/index.html target=\"_blank\"",943],["[Test Framework]: https://docs.unity3d.com/Packages/com.unity.test-framework@1.4/manual/index.html target=\"_blank\"",943],["[Tutorial Authoring Tools]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework.authoring@1.2/manual/index.html target=\"_blank\"",943],["[Tutorial Framework]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework@3.1/manual/index.html target=\"_blank\"",943],["[Mathematics]: https://docs.unity3d.com/Packages/com.unity.mathematics@1.3/manual/index.html target=\"_blank\"",943],["Pre-release packages",944],["",944],["When a package is ready for testing, a Unity package developer makes sure there is some basic test coverage, and that the package passes internal testing. The package also needs at least preliminary documentation, an updated changelog, and licensing.",944],["Pre-release packages are partially tested and verified to use safely with the current version of the Unity Editor. Be aware that Unity supports any package that appears with the indicator. These packages will be guaranteed to be fully validated for use in production by the time the Editor reaches the long term support (LTS) phase of the current cycle. For more information about the pre-release state and the lifecycle of packages, refer to package states and lifecycle.",944],["By default, pre-release packages don't appear in the list of packages you can install. However, you can force the Package Manager to display them by enabling the Enable Pre-release Packages project setting.",944],["Note:** Prior to Unity Editor version 2021.1, the Package Manager used the \"Preview\" state to describe packages that are experimental or risky but otherwise mature, as well as packages that haven't yet been fully validated as safe to use in production. Starting with 2021.1, the \"Preview\" state no longer exists, and packages can either be \"Experimental\" or \"Pre-release\". This provides a clearer distinction between packages that are mature but risky to use, and packages that are almost fully mature.",944],["For a list of stable packages released for this version of the Editor, refer to Released packages.",944],["Click on any of the following links to see the documentation for the package:",944],["Leaderboards: [com.unity.services.leaderboards][] ",944],["Moderation: [com.unity.services.moderation][] ",944],["Multiplay: [com.unity.services.multiplay][] ",944],["[com.unity.services.leaderboards]: https://docs.unity.com/leaderboards/ target=\"_blank\"",944],["[com.unity.services.moderation]: https://docs.unity.com/moderation/ target=\"_blank\"",944],["[com.unity.services.multiplay]: https://docs.unity.com/multiplay/ target=\"_blank\"",944],["Release Candidates",945],["",945],["In the alpha and beta versions of the Editor, Pre-release packages will transition to the \"Release Candidate\" state if they are strong candidates for official release. When a package reaches the Release Candidate state, Unity guarantees that it will transition to the Released state during the next stage of the release cycle (either TECH or LTS).",945],["Packages that are Release Candidates appear in the list of Released packages, but the Package Manager displays the label in the details pane and the label in the list pane until those packages fully transition to the Released state.",945],["For a list of stable packages, including both release candidates and packages that are officially released for this version, see Released packages.",945],["For more information about package states, see Package states and lifecycle.",945],["Released packages",946],["",946],["\"Released\" packages are packages that have undergone testing with a specific version of the Unity Editor, and all other packages released for that version. The package also has complete and accurate documentation, an updated changelog, and valid licensing.",946],["Packages that Unity has verified to work with this version of the Unity Editor display the indicator in the details view. The Package Manager window also displays the indicator beside released packages in its list view. For more information about the lifecycle of packages, refer to package states and lifecycle.",946],["Also refer to core packages, which Unity publishes as released packages that are bound to the Unity Editor version.",946],["The packages that appear in this list are safe to use in production because Unity supports them by testing them thoroughly and providing bug fixes.",946],["Click on any of the following links to see the documentation for the package:",946],["2D Animation: [com.unity.2d.animation][] ",946],["2D Aseprite Importer: [com.unity.2d.aseprite][] ",946],["2D Pixel Perfect: [com.unity.2d.pixel-perfect][] ",946],["2D PSD Importer: [com.unity.2d.psdimporter][] ",946],["2D SpriteShape: [com.unity.2d.spriteshape][] ",946],["2D Tilemap Extras: [com.unity.2d.tilemap.extras][] ",946],["Adaptive Performance: [com.unity.adaptiveperformance][] ",946],["Addressables: [com.unity.addressables][] ",946],["Ads Mediation: [com.unity.services.levelplay][] ",946],["Advertisement Legacy: [com.unity.ads][] ",946],["AI Navigation: [com.unity.ai.navigation][] ",946],["Alembic: [com.unity.formats.alembic][] ",946],["Analytics: [com.unity.services.analytics][] ",946],["Android Logcat: [com.unity.mobile.android-logcat][] ",946],["Animation Rigging: [com.unity.animation.rigging][] ",946],["Apple ARKit XR Plugin: [com.unity.xr.arkit][] ",946],["AR Foundation: [com.unity.xr.arfoundation][] ",946],["Authentication: [com.unity.services.authentication][] ",946],["Build Automation: [com.unity.services.cloud-build][] ",946],["Burst: [com.unity.burst][] ",946],["CCD Management: [com.unity.services.ccd.management][] ",946],["Cinemachine: [com.unity.cinemachine][] ",946],["Cloud Code: [com.unity.services.cloudcode][] ",946],["Cloud Diagnostics: [com.unity.services.cloud-diagnostics][] ",946],["Cloud Save: [com.unity.services.cloudsave][] ",946],["Code Coverage: [com.unity.testtools.codecoverage][] ",946],["Collections: [com.unity.collections][] ",946],["Deployment: [com.unity.services.deployment][] ",946],["Device Simulator Devices: [com.unity.device-simulator.devices][] ",946],["Economy: [com.unity.services.economy][] ",946],["Editor Coroutines: [com.unity.editorcoroutines][] ",946],["Entities: [com.unity.entities][] ",946],["Entities Graphics: [com.unity.entities.graphics][] ",946],["FBX Exporter: [com.unity.formats.fbx][] ",946],["Friends: [com.unity.services.friends][] ",946],["Google ARCore XR Plugin: [com.unity.xr.arcore][] ",946],["Havok Physics for Unity: [com.havok.physics][] ",946],["In App Purchasing: [com.unity.purchasing][] ",946],["Input System: [com.unity.inputsystem][] ",946],["iOS 14 Advertising Support: [com.unity.ads.ios-support][] ",946],["JetBrains Rider Editor: [com.unity.ide.rider][] ",946],["Live Capture: [com.unity.live-capture][] ",946],["Lobby: [com.unity.services.lobby][] ",946],["Localization: [com.unity.localization][] ",946],["Magic Leap XR Plugin: [com.unity.xr.magicleap][] ",946],["Matchmaker: [com.unity.services.matchmaker][] ",946],["Mathematics: [com.unity.mathematics][] ",946],["Memory Profiler: [com.unity.memoryprofiler][] ",946],["ML Agents: [com.unity.ml-agents][] ",946],["Mobile Notifications: [com.unity.mobile.notifications][] ",946],["Multiplayer Tools: [com.unity.multiplayer.tools][] ",946],["Netcode for Entities: [com.unity.netcode][] ",946],["Netcode for GameObjects: [com.unity.netcode.gameobjects][] ",946],["Oculus XR Plugin: [com.unity.xr.oculus][] ",946],["OpenXR Plugin: [com.unity.xr.openxr][] ",946],["Player Accounts: [com.unity.services.playeraccounts][]",946],["Polybrush: [com.unity.polybrush][] ",946],["Post Processing: [com.unity.postprocessing][] ",946],["ProBuilder: [com.unity.probuilder][] ",946],["Profile Analyzer: [com.unity.performance.profile-analyzer][] ",946],["Push Notifications: [com.unity.services.push-notifications][]",946],["Python Scripting: [com.unity.scripting.python][] ",946],["Recorder: [com.unity.recorder][] ",946],["Relay: [com.unity.services.relay][] ",946],["Remote Config: [com.unity.remote-config][] ",946],["Scriptable Build Pipeline: [com.unity.scriptablebuildpipeline][] ",946],["Sequences: [com.unity.sequences][] ",946],["Serialization: [com.unity.serialization][] ",946],["Splines: [com.unity.splines][] ",946],["Sysroot Base: [com.unity.sysroot][] ",946],["Sysroot Linux x64: [com.unity.sysroot.linux-x86_64][] ",946],["System Metrics Mali: [com.unity.profiling.systemmetrics.mali][] ",946],["Terrain Tools: [com.unity.terrain-tools][] ",946],["Test Framework: [com.unity.test-framework][] ",946],["TextMeshPro: [com.unity.textmeshpro][] ",946],["Timeline: [com.unity.timeline][] ",946],["Toolchain Linux x64: [com.unity.toolchain.linux-x86_64][] ",946],["Toolchain MacOS Linux x64: [com.unity.toolchain.macos-x86_64-linux-x86_64][] ",946],["Toolchain Win Linux x64: [com.unity.toolchain.win-x86_64-linux-x86_64][] ",946],["Tutorial Authoring Tools: [com.unity.learn.iet-framework.authoring][] ",946],["Tutorial Framework: [com.unity.learn.iet-framework][] ",946],["Unity Distribution Portal: [com.unity.purchasing.udp][] ",946],["Unity Logging: [com.unity.logging][] ",946],["Unity OpenXR Meta: [com.unity.xr.meta-openxr][] ",946],["Unity Physics: [com.unity.physics][] ",946],["Unity Profiling Core API: [com.unity.profiling.core][] ",946],["Unity Transport: [com.unity.transport][] ",946],["User Generated Content: [com.unity.services.ugc][] ",946],["User Generated Content Bridge: [com.unity.services.ugc.bridge][] ",946],["User Reporting: [com.unity.services.user-reporting][] ",946],["Version Control: [com.unity.collab-proxy][] ",946],["Visual Scripting: [com.unity.visualscripting][] ",946],["Visual Studio Code Editor: [com.unity.ide.vscode][] ",946],["Visual Studio Editor: [com.unity.ide.visualstudio][] ",946],["WebGL Publisher: [com.unity.connect.share][] ",946],["XR Hands: [com.unity.xr.hands][] ",946],["XR Interaction Toolkit: [com.unity.xr.interaction.toolkit][] ",946],["XR Plugin Management: [com.unity.xr.management][] ",946],["[com.unity.2d.animation]: https://docs.unity3d.com/Packages/com.unity.2d.animation@9.0/manual/index.html target=\"_blank\"",946],["[com.unity.2d.aseprite]: https://docs.unity3d.com/Packages/com.unity.2d.aseprite@1.1/manual/index.html target=\"_blank\"",946],["[com.unity.2d.pixel-perfect]: https://docs.unity3d.com/Packages/com.unity.2d.pixel-perfect@5.0/manual/index.html target=\"_blank\"",946],["[com.unity.2d.psdimporter]: https://docs.unity3d.com/Packages/com.unity.2d.psdimporter@8.0/manual/index.html target=\"_blank\"",946],["[com.unity.2d.spriteshape]: https://docs.unity3d.com/Packages/com.unity.2d.spriteshape@9.0/manual/index.html target=\"_blank\"",946],["[com.unity.2d.tilemap.extras]: https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@3.1/manual/index.html target=\"_blank\"",946],["[com.unity.adaptiveperformance]: https://docs.unity3d.com/Packages/com.unity.adaptiveperformance@5.0/manual/index.html target=\"_blank\"",946],["[com.unity.addressables]: https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/index.html target=\"_blank\"",946],["[com.unity.services.levelplay]: https://docs.unity3d.com/Packages/com.unity.services.levelplay@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.ads]: https://docs.unity3d.com/Packages/com.unity.ads@4.4/manual/index.html target=\"_blank\"",946],["[com.unity.ai.navigation]: https://docs.unity3d.com/Packages/com.unity.ai.navigation@1.1/manual/index.html target=\"_blank\"",946],["[com.unity.formats.alembic]: https://docs.unity3d.com/Packages/com.unity.formats.alembic@2.3/manual/index.html target=\"_blank\"",946],["[com.unity.services.analytics]: https://docs.unity.com/analytics/ target=\"_blank\"",946],["[com.unity.mobile.android-logcat]: https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@1.4/manual/index.html target=\"_blank\"",946],["[com.unity.animation.rigging]: https://docs.unity3d.com/Packages/com.unity.animation.rigging@1.3/manual/index.html target=\"_blank\"",946],["[com.unity.xr.arkit]: https://docs.unity3d.com/Packages/com.unity.xr.arkit@5.1/manual/index.html target=\"_blank\"",946],["[com.unity.xr.arfoundation]: https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.1/manual/index.html target=\"_blank\"",946],["[com.unity.services.authentication]: https://docs.unity.com/authentication/ target=\"_blank\"",946],["[com.unity.services.cloud-build]: https://docs.unity3d.com/Manual/UnityCloudBuild.html target=\"_blank\"",946],["[com.unity.burst]: https://docs.unity3d.com/Packages/com.unity.burst@1.8/manual/index.html target=\"_blank\"",946],["[com.unity.services.ccd.management]: https://docs.unity.com/ccd target=\"_blank\"",946],["[com.unity.cinemachine]: https://docs.unity3d.com/Packages/com.unity.cinemachine@3.0/manual/index.html target=\"_blank\"",946],["[com.unity.services.cloudcode]: https://docs.unity.com/cloud-code target=\"_blank\"",946],["[com.unity.services.cloud-diagnostics]: https://docs.unity.com/cloud-diagnostics/ target=\"_blank\"",946],["[com.unity.services.cloudsave]: https://docs.unity.com/cloud-save target=\"_blank\"",946],["[com.unity.testtools.codecoverage]: https://docs.unity3d.com/Packages/com.unity.testtools.codecoverage@1.2/manual/index.html target=\"_blank\"",946],["[com.unity.collections]: https://docs.unity3d.com/Packages/com.unity.collections@2.2/manual/index.html target=\"_blank\"",946],["[com.unity.services.deployment]: https://docs.unity3d.com/Packages/com.unity.services.deployment@1.2/manual/index.html target=\"_blank\"",946],["[com.unity.device-simulator.devices]: https://docs.unity3d.com/Packages/com.unity.device-simulator.devices@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.services.economy]: https://docs.unity.com/economy/ target=\"_blank\"",946],["[com.unity.editorcoroutines]: https://docs.unity3d.com/Packages/com.unity.editorcoroutines@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.entities]: https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.entities.graphics]: https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.formats.fbx]: https://docs.unity3d.com/Packages/com.unity.formats.fbx@5.1/manual/index.html target=\"_blank\"",946],["[com.unity.services.friends]: https://docs.unity.com/friends/ target=\"_blank\"",946],["[com.unity.xr.arcore]: https://docs.unity3d.com/Packages/com.unity.xr.arcore@5.1/manual/index.html target=\"_blank\"",946],["[com.havok.physics]: https://docs.unity3d.com/Packages/com.havok.physics@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.purchasing]: https://docs.unity3d.com/2022.3/Documentation/Manual/UnityIAP.html target=\"_blank\"",946],["[com.unity.inputsystem]: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/manual/index.html target=\"_blank\"",946],["[com.unity.ads.ios-support]: https://docs.unity3d.com/Packages/com.unity.ads.ios-support@1.2/manual/index.html target=\"_blank\"",946],["[com.unity.ide.rider]: https://docs.unity3d.com/Packages/com.unity.ide.rider@3.0/manual/index.html target=\"_blank\"",946],["[com.unity.live-capture]: https://docs.unity3d.com/Packages/com.unity.live-capture@4.0/manual/index.html target=\"_blank\"",946],["[com.unity.services.lobby]: https://docs.unity.com/lobby/ target=\"_blank\"",946],["[com.unity.localization]: https://docs.unity3d.com/Packages/com.unity.localization@1.4/manual/index.html target=\"_blank\"",946],["[com.unity.xr.magicleap]: https://docs.unity3d.com/Packages/com.unity.xr.magicleap@7.0/manual/index.html target=\"_blank\"",946],["[com.unity.services.matchmaker]: https://docs.unity.com/matchmaker/ target=\"_blank\"",946],["[com.unity.mathematics]: https://docs.unity3d.com/Packages/com.unity.mathematics@1.3/manual/index.html target=\"_blank\"",946],["[com.unity.memoryprofiler]: https://docs.unity3d.com/Packages/com.unity.memoryprofiler@1.1/manual/index.html target=\"_blank\"",946],["[com.unity.ml-agents]: https://docs.unity3d.com/Packages/com.unity.ml-agents@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.mobile.notifications]: https://docs.unity3d.com/Packages/com.unity.mobile.notifications@2.3/manual/index.html target=\"_blank\"",946],["[com.unity.multiplayer.tools]: https://docs.unity3d.com/Packages/com.unity.multiplayer.tools@1.1/manual/index.html target=\"_blank\"",946],["[com.unity.netcode]: https://docs.unity3d.com/Packages/com.unity.netcode@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.netcode.gameobjects]: https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@1.7/manual/index.html target=\"_blank\"",946],["[com.unity.xr.oculus]: https://docs.unity3d.com/Packages/com.unity.xr.oculus@4.1/manual/index.html target=\"_blank\"",946],["[com.unity.xr.openxr]: https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.9/manual/index.html target=\"_blank\"",946],["[com.unity.services.playeraccounts]: https://docs.unity.com/playeraccounts/ target=\"_blank\"",946],["[com.unity.polybrush]: https://docs.unity3d.com/Packages/com.unity.polybrush@1.1/manual/index.html target=\"_blank\"",946],["[com.unity.postprocessing]: https://docs.unity3d.com/Packages/com.unity.postprocessing@3.3/manual/index.html target=\"_blank\"",946],["[com.unity.probuilder]: https://docs.unity3d.com/Packages/com.unity.probuilder@5.2/manual/index.html target=\"_blank\"",946],["[com.unity.performance.profile-analyzer]: https://docs.unity3d.com/Packages/com.unity.performance.profile-analyzer@1.2/manual/index.html target=\"_blank\"",946],["[com.unity.services.push-notifications]: https://docs.unity.com/push-notifications/ target=\"_blank\"",946],["[com.unity.scripting.python]: https://docs.unity3d.com/Packages/com.unity.scripting.python@7.0/manual/index.html target=\"_blank\"",946],["[com.unity.recorder]: https://docs.unity3d.com/Packages/com.unity.recorder@4.0/manual/index.html target=\"_blank\"",946],["[com.unity.services.relay]: https://docs.unity.com/relay/ target=\"_blank\"",946],["[com.unity.remote-config]: https://docs.unity3d.com/Packages/com.unity.remote-config@4.0/manual/index.html target=\"_blank\"",946],["[com.unity.scriptablebuildpipeline]: https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@2.1/manual/index.html target=\"_blank\"",946],["[com.unity.sequences]: https://docs.unity3d.com/Packages/com.unity.sequences@2.1/manual/index.html target=\"_blank\"",946],["[com.unity.serialization]: https://docs.unity3d.com/Packages/com.unity.serialization@3.1/manual/index.html target=\"_blank\"",946],["[com.unity.splines]: https://docs.unity3d.com/Packages/com.unity.splines@2.5/manual/index.html target=\"_blank\"",946],["[com.unity.sysroot]: https://docs.unity3d.com/Packages/com.unity.sysroot@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.sysroot.linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.sysroot.linux-x86_64@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.profiling.systemmetrics.mali]: https://docs.unity3d.com/Packages/com.unity.profiling.systemmetrics.mali@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.terrain-tools]: https://docs.unity3d.com/Packages/com.unity.terrain-tools@5.0/manual/index.html target=\"_blank\"",946],["[com.unity.test-framework]: https://docs.unity3d.com/Packages/com.unity.test-framework@1.4/manual/index.html target=\"_blank\"",946],["[com.unity.textmeshpro]: https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.0/manual/index.html target=\"_blank\"",946],["[com.unity.timeline]: https://docs.unity3d.com/Packages/com.unity.timeline@1.8/manual/index.html target=\"_blank\"",946],["[com.unity.toolchain.linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.toolchain.linux-x86_64@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.toolchain.macos-x86_64-linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.toolchain.macos-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.toolchain.win-x86_64-linux-x86_64]: https://docs.unity3d.com/Packages/com.unity.toolchain.win-x86_64-linux-x86_64@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.learn.iet-framework.authoring]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework.authoring@1.2/manual/index.html target=\"_blank\"",946],["[com.unity.learn.iet-framework]: https://docs.unity3d.com/Packages/com.unity.learn.iet-framework@3.1/manual/index.html target=\"_blank\"",946],["[com.unity.purchasing.udp]: https://docs.unity3d.com/Packages/com.unity.purchasing.udp@2.2/manual/index.html target=\"_blank\"",946],["[com.unity.logging]: https://docs.unity3d.com/Packages/com.unity.logging@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.xr.meta-openxr]: https://docs.unity3d.com/Packages/com.unity.xr.meta-openxr@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.physics]: https://docs.unity3d.com/Packages/com.unity.physics@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.profiling.core]: https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/manual/index.html target=\"_blank\"",946],["[com.unity.transport]: https://docs-multiplayer.unity3d.com/transport/current/about target=\"_blank\"",946],["[com.unity.services.ugc]: https://docs.unity.com/user-generated-content target=\"_blank\"",946],["[com.unity.services.ugc.bridge]: https://docs.unity.com/user-generated-content/ugc-bridge target=\"_blank\"",946],["[com.unity.services.user-reporting]: https://docs.unity.com/user-reporting/ target=\"_blank\"",946],["[com.unity.collab-proxy]: https://docs.unity3d.com/Packages/com.unity.collab-proxy@2.2/manual/index.html target=\"_blank\"",946],["[com.unity.visualscripting]: https://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/manual/index.html target=\"_blank\"",946],["[com.unity.ide.vscode]: https://docs.unity3d.com/Packages/com.unity.ide.vscode@1.2/manual/index.html target=\"_blank\"",946],["[com.unity.ide.visualstudio]: https://docs.unity3d.com/Packages/com.unity.ide.visualstudio@2.0/manual/index.html target=\"_blank\"",946],["[com.unity.connect.share]: https://docs.unity3d.com/Packages/com.unity.connect.share@4.2/manual/index.html target=\"_blank\"",946],["[com.unity.xr.hands]: https://docs.unity3d.com/Packages/com.unity.xr.hands@1.3/manual/index.html target=\"_blank\"",946],["[com.unity.xr.interaction.toolkit]: https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.5/manual/index.html target=\"_blank\"",946],["[com.unity.xr.management]: https://docs.unity3d.com/Packages/com.unity.xr.management@4.4/manual/index.html target=\"_blank\"",946],["Unity's Package Manager",947],["A package is a container that stores various types of features or assets, such as:",947],["Editor tools and libraries, such as a text editor, an animation viewer, or test frameworks.",947],["Runtime tools and libraries, such as the Physics API or a Graphics pipeline.",947],["Asset collections, such as Textures or animations.",947],["Project templates to share common project types with others.",947],["Packages deliver a wide range of enhancements to Unity through the Package Manager. To help find and use these packages, the Package Manager window provides collections of packages that you can use together, called feature sets.",947],["In the Editor, you can access the Package Manager window through this menu: Window > Package Manager.",947],["The Package Manager also supports management of packages you download or import from the Unity Asset Store.",947],["Unity provides three Package Manager interfaces: Package Manager window, Scripting API, and manifest files. The following table contains introductions to each interface, and more.",947],["Topic Description ",947],[":-------------------- :----------------------- ",947],["How Unity works with packages Get an overview of Unity's Package Manager. ",947],["Concepts Learn the principles and features of the Package Manager, including concepts like versions, manifests, registries, states, sources, the package lifecycle, and dependency and resolution. ",947],["Package Manager window Find packages and manage them in your project, and resolve conflicts in package dependencies. The Package Manager provides a user interface that makes changes to the Project manifest directly. ",947],["Scripting API for packages Use the Scripting API to interact with the Package Manager using C# scripts. View samples to see how to query the package registry, install, embed, and remove packages, and list packages using a variety of criteria. ",947],["Project manifest Learn about the file that the Unity Package Manager reads so it can compute a list of packages to retrieve and load. See also Package manifest. ",947],["Inspecting packages Use a dedicated Inspector window to view any package manifest. Use this window to directly edit package manifests for embedded or local packages. ",947],["Scoped Registries Learn how to set up or access a custom registry server. Use this registry server to host and distribute (or consume) custom packages, in addition to the registry that Unity provides. ",947],["Configuration Learn how configure scoped registry authentication, solve network issues, customize cache locations, and more. ",947],["Resolution and conflict Learn how the Package Manager determines the direct and indirect dependencies of a project and evaluates all the requested package versions before retrieving the best version from the registry. ",947],["Troubleshooting Match a symptom to a possible solution if any of your project’s packages, including the Package Manager window itself, fails to load. ",947],["Additional resources",947],["Packages and feature sets",948],["A package contains features to fit the various needs of your project. This can include any core Unity features included during the Editor installation, or other packages that you can install as needed.",948],["Topic Description ",948],[":-------------------- :----------------------- ",948],["Released packages,Pre-release packages View the lists of supported packages for this version of the Unity Editor, and learn about the criteria a package must meet to be in these states. ",948],["Release candidates Learn about the criteria a package must meet for being a Release candidate. ",948],["Core packages View the list of packages that are bound to this version of the Unity Editor. ",948],["Built-in packages View the list of built-in packages, which you can enable or disable to adjust the runtime build size. ",948],["Experimental packages Learn about unsupported packages that are in the early stages of development. ",948],["Packages by keywords View a list of packages, which you can locate by keyword. ",948],["Unity’s Package Manager Learn about the different ways you can interact with Unity’s Package Manager, to do things like finding and adding or removing packages, resolving package conflicts, and much more. ",948],["Creating custom packages Build and share your own packages, by learning about custom package requirements, working with manifest files, and more. ",948],["Feature sets Learn about bundles of related packages that you can use for a specific task, such as building environments or optimizing specific platforms, or to find all the development tools you need in one place. Also view a list of feature sets that are available in this version of the Editor. ",948],["Additional resources",948],["Importing assets simultaneously",949],["By default, Unity imports assets one after another sequentially on the main Editor process. However, Unity also supports parallel importing for some types of asset. Parallel importing uses multiple processes to import assets simultaneously, which is faster than the default sequential method of importing.",949],["To enable parallel importing, go to Edit > Project Settings > Editor, then under the Asset Pipeline section, enable the Parallel Import checkbox.",949],["The scope of parallel imports",949],["Unity’s Parallel Import feature supports only certain types of asset. It applies only when the Editor is performing its standard asset database refresh, which occurs when it detects new or modified assets in the Project folder and automatically imports them.",949],["The specific types of asset which Unity can import in parallel are:",949],["Image file types imported by the Texture Importer",949],["Model file types imported by the Model Importer",949],["Other types of asset are always imported sequentially during an asset database refresh.",949],["Some Asset Database API methods also respect this setting, if you use them to import, refresh, or create Texture or Model assets. These are:",949],["Implications for scripted importers",949],["Because parallel imports operate on separate processes, any side effects of your scripted importer code also take effect in that process rather than the main Editor process. Side effects that run on separate processes can cause unexpected problems. For example, if you modify a static variable on a C# class during import on a worker thread, that modification is not automatically visible to code running on the Editor’s main thread.",949],["Any code that you write for importing should always be self-contained, deterministic, and shouldn’t change the context it's running in (for example, it shouldn't change the Editor settings or create new assets on disk). Following these rules helps your importer code avoid parallel threading issues. It also ensures that your import results are always consistent, and that the Editor always uses cached artifacts instead of unnecessarily reimporting your assets.",949],["Controlling the import worker processes",949],["In the Asset Pipeline settings, there are three settings that allow you to control the behaviour of the import worker processes. These settings are project-specific.",949],["The import worker process controls, in the Project Settings window.*",949],["",949],["Setting Name Description ",949],["Desired Import Worker Count The number of import worker processes that the import pipeline considers the optimal number to run in parallel. ",949],["Standby Import Worker Count The minimum number of worker processes to keep, even if they’re idle.If there are more worker processes than this, Unity shuts down import workers that have been idle for some time, to free up system resources. This property allows you to manage how Unity balances system resources when some processes are idle, compared with the time it takes to start up new import worker processes.You might see an improvement in import performance by increasing this value if you are frequently iterating on model, animation or texture work, and are therefore frequently importing batches of models or image files. ",949],["Idle Import Worker Shutdown Delay The amount of time in seconds to wait before shutting down an idle worker. ",949],["You can also control the default values that Unity sets the Desired Import Worker Count for new projects. To do this, go to Preferences > Asset Pipeline > Import Worker Count %.",949],["When you create a new project, Unity uses the Import Worker Count % value to assign your project’s Desired Import Worker Count value to the percentage of the number of logical cores available on your system.",949],["For example, if your system has 16 logical cores and this preference is set to 25%, the Desired Import Worker Count for new projects is 4. If you set this value too high, your import worker processes need to compete over other processes and system resources such as reading and writing files. The default value of 25% is suitable for most situations.",949],["Particle System C# Job System integration",950],["A Particle System can use Unity's C# Job System to apply custom behaviors to particles.",950],["Unity distributes work from the C# Job System across worker threads, and can make use of the Burst Compiler. The GetParticles() and SetParticles() methods offer similar functionality, but run on the main thread and cannot make use of Unity’s Burst Compiler.",950],["By default, a Particle System job only has access to one or more particles belonging to that Particle System. Unity passes this data to the job using a ParticleSystemJobData struct. You must pass any other data that the job requires as additional parameters.",950],["To access particle data, Unity supports the following job types:",950],["This job type executes a single job on a single worker thread. The job has access to every particle belonging to the Particle System. For example code on this job type, see the IJobParticleSystem.Execute() Scripting reference.",950],["This job type executes multiple jobs across multiple worker threads. Each job can only access the particle at the index specified by the job’s Execute() function. For example code on this job type, see the IJobParticleSystemParallelFor.Execute() Scripting reference.",950],["This job type executes multiple jobs across multiple worker threads. Each job can only access the particles within the range specified by the job’s Execute() function. For example code on this job type, see the IJobParticleSystemParallelForBatch.Execute() Scripting reference.",950],["Burst",950],["As with any other C# job, you can use the Burst Compiler to compile your particle jobs into highly optimized Burst jobs. For more information, see the Burst Compiler documentation.",950],["New feature in Unity 2019.3",950],["Particle System modules",951],["The Particle System component has a powerful set of properties that are organized into modules for ease of use. This section of the manual covers each of the modules in detail. The list of modules is as follows:",951],["Particle systems",952],["A particle system simulates and renders many small images or Meshes, called particles, to produce a visual effect. Each particle in a system represents an individual graphical element in the effect. The system simulates every particle collectively to create the impression of the complete effect.",952],["Particle systems are useful when you want to create dynamic objects like fire, smoke, or liquids because it is difficult to depict this kind of object with a Mesh (3D) or Sprite (2D). Meshes and Sprites are better at depicting solid objects such as a house or a car.",952],["This section contains information on:",952],["\nWhich particle system solution to use for your Project.\n",952],["\nThe Built-in Particle System.\n",952],["\nThe Visual Effect Graph.\n",952],["Collision module",953],["This module controls how particles collide with GameObjects in the Scene. Use the first drop-down to define whether your collision settings apply to Planes or to the World. If you choose World, use the Collision Mode drop-down to define whether your collision settings apply for a 2D or 3D world.",953],["Using the Collision module",953],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Collision module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",953],["Click GameObject > Effects > Particle System.",953],["In the Inspector, find the Particle System component.",953],["In the Particle System component, find the Collision module fold-out.",953],["To the left of the fold-out header, enable the checkbox.",953],["API",953],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Collision module API documentation.",953],["Planes module properties",953],["Property Function ",953],["Planes popup Select Planes mode. ",953],["Planes An expandable list of Transforms that define collision planes. ",953],["Visualization Selects whether the collision plane Gizmos will be shown in the Scene view as wireframe grids or solid planes. ",953],["Scale Plane Size of planes used for visualization. ",953],["Dampen The fraction of a particle's speed that it loses after a collision. ",953],["Bounce The fraction of a particle's speed that rebounds from a surface after a collision. ",953],["Lifetime Loss The fraction of a particle's total lifetime that it loses if it collides. ",953],["Min Kill Speed Particles travelling below this speed after a collision will be removed from the system. ",953],["Max Kill Speed Particles travelling above this speed after a collision will be removed from the system. ",953],["Radius Scale Allows you to adjust the radius of the particle collision spheres so it more closely fits the visual edges of the particle graphic. ",953],["Send Collision Messages If enabled, particle collisions can be detected from scripts by the OnParticleCollision function. ",953],["Visualize Bounds Renders the collision bounds of each particle as a wireframe shape in the Scene view. ",953],["World module properties",953],["Property Function ",953],["World popup Select World mode. ",953],["Collision Mode 3D or 2D. ",953],["Dampen The fraction of a particle's speed that it loses after a collision. ",953],["Bounce The fraction of a particle's speed that rebounds from a surface after a collision. ",953],["Lifetime Loss The fraction of a particle's total lifetime that it loses if it collides. ",953],["Min Kill Speed Particles travelling below this speed after a collision will be removed from the system. ",953],["Max Kill Speed Particles travelling above this speed after a collision will be removed from the system. ",953],["Radius Scale Setting for 2D or 3D. ",953],["Collision Quality Use the drop-down to set the quality of particle collisions. This affects how many particles can pass through a collider. At lower quality levels, particles can sometimes pass through colliders, but are less resource-intensive to calculate. ",953],["    High When Collision Quality is set to High, collisions always use the physics system for detecting the collision results. This is the most resource-intensive option, but also the most accurate. ",953],["    Medium (Static Colliders) When Collision Quality is set to Medium (Static Colliders), collisions use a grid of voxels to cache previous collisions, for faster re-use in later frames. See World collisions, below, to learn more about this cache. The only difference between Medium and Low is how many times per frame the Particle System queries the physics system. Medium makes more queries per frame than Low. Note that this setting is only suitable for static colliders that never move. ",953],["    Low (Static Colliders) When Collision Quality is set to Low (Static Colliders), collisions use a grid of voxels to cache previous collisions, for faster re-use in later frames. See World collisions, below, to learn more about this cache. The only difference between Medium and Low is how many times per frame the Particle System queries the physics system. Medium makes more queries per frame than Low. Note that this setting is only suitable for static colliders that never move. ",953],["Collides With Particles will only collide with objects on the selected layers. ",953],["Max Collision Shapes How many collision shapes can be considered for particle collisions. Excess shapes are ignored, and terrains take priority. ",953],["Enable Dynamic Colliders Dynamic colliders are any collider not configured as Kinematic (see documentation on colliders for further information on collider types). Check this option to include these collider types in the set of objects that the particles respond to in collisions. If you uncheck this option, the particles only respond to collisions against static colliders. ",953],["Voxel Size A voxel represents a value on a regular grid in three-dimensional space. When using Medium or Low quality collisions, Unity caches collisions in a grid structure. This setting controls the grid size. Smaller values give more accuracy, but cost more memory, and are less efficient. Note: You can only access this property when Collision Quality is set to Medium or Low. ",953],["Collider Force Apply a force to Physics Colliders after a Particle collision. This is useful for pushing colliders with particles. ",953],["Multiply by Collision Angle When applying forces to Colliders, scale the strength of the force based on the collision angle between the particle and the collider. Grazing angles will generate less force than a head-on collision. ",953],["Multiply by Particle Speed When applying forces to Colliders, scale the strength of the force based on the speed of the particle. Fast-moving particles will generate more force than slower ones. ",953],["Multiply by Particle Size When applying forces to Colliders, scale the strength of the force based on the size of the particle. Larger particles will generate more force than smaller ones. ",953],["Send Collision Messages Check this to be able to detect particle collisions from scripts by the OnParticleCollision function. ",953],["Visualize Bounds Preview the collision spheres for each particle in the Scene view. ",953],["Details",953],["When other objects surround a Particle System, the effect is often more convincing when the particles interact with those objects. For example, water or debris should be obstructed by a solid wall rather than simply passing through it. With the Collision module enabled, particles can collide with objects in the Scene.",953],["A Particle System can be set so its particles collide with any Collider in the scene by selecting World mode from the pop-up. Colliders can also be disabled according to the layer they are on by using the Collides With property. The pop-up also has a Planes mode option which allows you to add a set of planes to the Scene that don’t need to have Colliders. This option is useful for simple floors, walls and similar objects, and has a lower processor overhead than World mode.",953],["When Planes mode is enabled, a list of transforms (typically empty GameObjects) can be added via the Planes property. The planes extend infinitely in the objects’ local XZ planes, with the positive Y axis indicating the planes’ normal vectors. To assist with development, the planes will be shown as Gizmos in the Scene, regardless of whether or not the objects have any visible Mesh themselves. The Gizmos can be shown as a wireframe grid or a solid plane, and can also be scaled. However, the scaling only applies to the visualization - the collision planes themselves extend infinitely through the Scene.",953],["When collisions are enabled, the size of a particle is sometimes a problem because its graphic can be clipped as it makes contact with a surface. This can result in a particle appearing to \"sink\" partway into a surface before stopping or bouncing. The Radius Scale property addresses this issue by defining an approximate circular radius for the particles, as a percentage of its actual size. This size information is used to prevent clipping and avoid the sinking-in effect.",953],["The Dampen and Bounce properties are useful for when the particles represent solid objects. For example, gravel will tend to bounce off a hard surface when thrown but a snowball's particles might lose speed during a collision. Lifetime Loss and Min Kill Speed can help to reduce the effects of residual particles following a collision. For example, a fireball might last for a few seconds while flying through the air but after colliding, the separate fire particles should dissipate quickly.",953],["You can also detect particle collisions from a script if Send Collision Messages is enabled. The script can be attached to the object with the particle system, or the one with the Collider, or both. By detecting collisions, you can use particles as active objects in gameplay, for example as projectiles, magic spells and power-ups. See the script reference page for MonoBehaviour.OnParticleCollision for further details and examples.",953],[" ",953],["World Collision Quality",953],["The World Collision module has a Collision Quality property, which you can set to High, Medium or Low. When Collision Quality is set to Medium (Static Colliders) or Low (Static Colliders), collisions use a grid of voxels (values on a 3D grid) to cache previous collisions, for fast re-use in later frames.",953],["This cache consists of a plane in each voxel, where the plane represents the collision surface at that location. On each frame, Unity checks the cache for a plane at the position of the particle, and if there is one, Unity uses it for collision detection. Otherwise, it asks the physics system. If a collision is returned, it is added to the cache for fast querying on subsequent frames.",953],["This is an approximation, so some missed collisions might occur. You can reduce the Voxel Size value to help with this; however, doing so uses extra memory, and is less efficient.",953],["The only difference between Medium and Low is how many times per frame the system is allowed to query the physics system. Low makes fewer queries per frame than Medium. Once the per-frame budget has been exceeded, only the cache is used for any remaining particles. This can lead to an increase in missed collisions, until the cache has been more comprehensively populated.",953],[" 2017-05-30 ",953],["Functionality of Collision module changed in Unity 2017.1 NewIn20171",953],["Color by Speed module",954],["The color of a particle can be set here to change according to its speed in distance units per second.",954],["Using the Color by Speed module",954],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Color by Speed module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",954],["Click GameObject > Effects > Particle System.",954],["In the Inspector, find the Particle System component.",954],["In the Particle System component, find the Color by Speed module fold-out.",954],["To the left of the fold-out header, enable the checkbox.",954],["API",954],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Color by Speed module API documentation.",954],["Properties",954],["Property Function ",954],["Color The color gradient of a particle defined over a speed range. ",954],["Speed Range The low and high ends of the speed range to which the color gradient is mapped (speeds outside the range will map to the end points of the gradient). ",954],["Details",954],["Burning or glowing particles (such as sparks) tend to burn more brightly when they move quickly through the air (for example, when sparks are exposed to more oxygen), but then dim slightly as they slow down. To simulate this, you might use Color By Speed with a gradient that has white at the upper end of the speed range, and red at the lower end (in the spark example, faster particles will appear white while slower particles are red).",954],["Color over Lifetime module",955],["This module specifies how a particle's color and transparency changes over its lifetime.",955],["Using the Color over Lifetime module",955],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Color over Lifetime module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",955],["Click GameObject > Effects > Particle System.",955],["In the Inspector, find the Particle System component.",955],["In the Particle System component, find the Color over Lifetime module fold-out.",955],["To the left of the fold-out header, enable the checkbox.",955],["API",955],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Color over Lifetime module API documentation.",955],["Properties",955],["Property: Function: ",955],["Color The color gradient of a particle over its lifetime. The very left-hand point of the gradient bar indicates the beginning of the particle's life, and the very right-hand side of the gradient bar indicates the end of the particle's life. In the image above, the particle starts off orange, fades in opacity over time, and is invisible by the time its life ends. ",955],["Details",955],["Many types of natural and fantastical particles vary in color over time, and so this property has many uses. For example, white hot sparks will cool as they pass through the air and a magic spell might burst into a rainbow of colors. Equally important, though, is the variation of alpha (transparency). It is very common for particles to burn out, fade or dissipate as they reach the end of their lifetime (for example, hot sparks, fireworks and smoke particles) and a simple diminishing gradient produces this effect.",955],["When also using the Start Color property, this module multiples the 2 colors together, to get the final particle color.",955],["Custom Data module",956],["The Custom Data module allows you to define custom data formats in the Editor to be attached to particles. You can also set this in a script. See documentation on Particle System vertex streams for more information on how to set custom data from a script and feed that data into your shaders.",956],["Data can be in the form of a Vector, with up to 4 MinMaxCurve components, or a Color, which is an HDR-enabled MinMaxGradient. Use this data to drive custom logic in your scripts and Shaders.",956],["The default labels for each curve/gradient can be customized by clicking on them and typing in a contextual name. When passing custom data to shaders, it is useful to know how that data is used inside the shader. For example, a curve may be used for custom alpha testing, or a gradient may be used to add a secondary color to particles. By editing the labels, it is simple to keep a record in the UI of the purpose of each custom data entry.",956],["Using the Custom Data module",956],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Custom Data module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",956],["Click GameObject > Effects > Particle System.",956],["In the Inspector, find the Particle System component.",956],["In the Particle System component, find the Custom Data module fold-out.",956],["To the left of the fold-out header, enable the checkbox.",956],["API",956],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Custom Data module API documentation.",956],["2017-09-04 ",956],["Editable custom data labels added in Unity 2017.2 NewIn20172",956],["Emission module",957],["The properties in this module affect the rate and timing of Particle System emissions.",957],["Using the Emission module",957],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Emission module to the Particle System. By default, Unity enables this module. To create a new Particle System and enable this module:",957],["Click GameObject > Effects > Particle System.",957],["In the Inspector, find the Particle System component.",957],["In the Particle System component, find the Emission module fold-out.",957],["To the left of the fold-out header, enable the checkbox.",957],["API",957],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Emission module API documentation.",957],["Properties",957],["Property Function ",957],["Rate over Time The number of particles emitted per unit of time. ",957],["Rate over Distance The number of particles emitted per unit of distance moved. ",957],["Bursts A burst is an event which spawns particles. These settings allow particles to be emitted at specified times. ",957],["    Time Set the time (in seconds, after the Particle System begins playing) at which to emit the burst. ",957],["    Count Set a value for the number of particles that may be emitted. ",957],["    Cycles Set a value for how many times to play the burst. ",957],["    Interval Set a value for the time (in seconds) between when each cycle of the burst is triggered. ",957],["    Probability Controls how likely it is that each burst event spawns particles. A higher value makes the system produce more particles, and a value of 1 guarantees that the system produces particles. ",957],["Details",957],["The rate of emission can be constant or can vary over the lifetime of the system according to a curve. If Rate over Distance mode is active, a certain number of particles are released per unit of distance moved by the parent object. This is very useful for simulating particles that are actually created by the motion of the object (for example, dust from a car’s wheels on a dirt track).",957],["If Rate over Time is active, then the desired number of particles are emitted each second regardless of how the parent object moves. Additionally, you can add bursts of extra particles that appear at specific times (for example, a steam train chimney that produces puffs of smoke).",957],[" 2018-10-19 ",957],["Burst probability added to Particle System Emission module in Unity 2018.3 NewIn20183",957],["External Forces module",958],["This property modifies the effect of wind zones and Particle System Force Fields on particles emitted by the system.",958],["Using the External Forces module",958],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the External Forces module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",958],["Click GameObject > Effects > Particle System.",958],["In the Inspector, find the Particle System component.",958],["In the Particle System component, find the External Forces module fold-out.",958],["To the left of the fold-out header, enable the checkbox.",958],["API",958],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the External Forces module API documentation.",958],["Properties",958],["Property Function ",958],["Multiplier Scale value applied to wind zone forces. ",958],["Influence Filter Choose whether to include Force Fields based on a Layer Mask, or via an explicit List. ",958],["List Define an explicit list of Force Fields that can affect this Particle System. This appears when the Influence Filter is set to List. ",958],["Influence Mask Use a Layer Mask to determine which Force Fields affect this Particle System. This appears when the Influence Filter is set to Layer Mask. This is set to Everything by default, but you can enable or disable the following options individually:- Nothing (automatically unticks all other options, turning them off)- Everything (automatically ticks all other options, turning them on)- Default - TransparentFX - Ignore Raycast - Water - UI - PostProcessing ",958],["Details",958],["To get the best results out of this feature, create separate GameObjects with ParticleSystemForceFields components.",958],["A Terrain can incorporate wind zones which affect the movement of trees on the landscape. Enabling this section allows the wind zones to blow particles from the system. The Multiplier value lets you scale the effect of the wind on the particles, since they will often be blown more strongly than tree branches.",958],[" 2018-10-19 ",958],["Influence Filter and Influence Mask added to Particle System in 2018.3 NewIn20183",958],["Force over Lifetime module",959],["Particles can be accelerated by forces (such as wind or attraction) that are specified in this module.",959],["Using the Force over Lifetime module",959],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an existing GameObject, Unity adds the Force over Lifetime module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",959],["Click GameObject > Effects > Particle System.",959],["In the Inspector, find the Particle System component.",959],["In the Particle System component, find the Force over Lifetime module fold-out.",959],["To the left of the fold-out header, enable the checkbox.",959],["API",959],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Force over Lifetime module API documentation.",959],["Properties",959],["Property Function ",959],["X, Y, Z Force applied to each particle in the X, Y and Z axes. ",959],["Space Selects whether the force is applied in local or world space. ",959],["Randomize When using the Two Constants or Two Curves modes, this causes a new force direction to be chosen on each frame within the defined ranges. This causes more turbulent, erratic movement. ",959],["Details",959],["Fluids are often affected by forces as they move. For example, smoke will accelerate slightly as it rises from a fire, carried up by the hot air around it. Subtle effects can be achieved by using curves to control the force over the particles' lifetimes. Using the previous example, smoke will initially accelerate upward but as the rising air gradually cools, the force will diminish. Thick smoke from a fire might initially accelerate, then slow down as it spreads and perhaps even start to fall to earth if it persists for a long time.",959],["Inherit Velocity module",960],["Use this module on subemitters. Each particle in the parent system can spawn particles in the subemitter. This module reads the velocity from the parent particle and controls how the speed of the subemitter particles reacts to that velocity over time.",960],["Using the Inherit Velocity module",960],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Inherit Velocity module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",960],["Click GameObject > Effects > Particle System.",960],["In the Inspector, find the Particle System component.",960],["In the Particle System component, find the Inherit Velocity module fold-out.",960],["To the left of the fold-out header, enable the checkbox.",960],["API",960],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Inherit Velocity module API documentation.",960],["Properties",960],["Property Function ",960],["Mode Specifies how the emitter velocity is applied to particles ",960],["    Current The emitter’s current velocity will be applied to all particles on every frame. For example, if the emitter slows down, all particles will also slow down. ",960],["    Initial The emitter’s velocity will be applied once, when each particle is born. Any changes to the emitter’s velocity made after a particle is born will not affect that particle. ",960],["Multiplier The proportion of the emitter’s velocity that the particle should inherit. ",960],["Details",960],["This effect is very useful for emitting particles from a moving object, such as dust clouds from a car, smoke from a rocket, steam from a steam train’s chimney, or any situation where the particles should initially be moving at a percentage of the speed of the object they appear to come from. This module only has an effect on the particles when Simulation Space is set to World in the Main module.",960],["It is also possible to use curves to influence the effect over time. For example, you could apply a strong attraction to newly created particles, which reduces over time. This could be useful for steam train smoke, which would drift off slowly over time and stop following the train it was emitted from.",960],["Unity calculates the emitter's velocity in one of two ways:",960],["Based on the velocity of an attached Rigidbody component",960],["Based on how far the Particle System's Transform component travelled during the current frame",960],["To specify the method Unity uses, see the Main module's Emitter Velocity property:",960],["Particle System GPU Instancing",961],["GPU instancing offers a large performance boost compared with CPU rendering. You can use it if you want your particle system to render Mesh particles (as opposed to the default rendering mode of rendering billboard particles).",961],["To be able to use GPU instancing with your particle systems:",961],["Set your Particle System’s renderer mode to Mesh",961],["Use a shader for the renderer material that supports GPU Instancing",961],["Run your project on a platform that supports GPU instancing",961],["To enable GPU instancing for a particle system, you must enable the Enable GPU Instancing checkbox in the Renderer module of your particle system.",961],["Unity comes with a built-in particle shader that supports GPU instancing, but the default particle material does not use it, so you must change this to use GPU instancing. The particle shader that supports GPU instancing is called Particles/Standard Surface. To use it, you must create your own new material, and set the material’s shader to Particles/Standard Surface. You must then assign this new material to the material field in the Particle System renderer module.",961],["If you are using a different shader for your particles, it must use ‘#pragma target 4.5’ or higher. See Shader Compile Targets for more details. This requirement is higher than regular GPU Instancing in Unity because the Particle System writes all its instance data to a single large buffer, rather than breaking up the instancing into multiple draw calls.",961],["Custom shader examples",961],["You can also write custom shaders that make use of GPU Instancing. See the following sections for more information:",961],["",961],["Particle system GPU Instancing in a Surface Shader",961],["Here is a complete working example of Surface Shader using Particle System GPU Instancing:",961],["Shader \"Instanced/ParticleMeshesSurface\" {",961],["Properties {",961],["_Color (\"Color\", Color) = (1,1,1,1)",961],["_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {}",961],["_Glossiness (\"Smoothness\", Range(0,1)) = 0.5",961],["_Metallic (\"Metallic\", Range(0,1)) = 0.0",961],["SubShader {",961],["Tags { \"RenderType\"=\"Opaque\" }",961],["LOD 200",961],["CGPROGRAM",961],["// Physically based Standard lighting model, and enable shadows on all light types",961],["// And generate the shadow pass with instancing support",961],["pragma surface surf Standard nolightmap nometa noforwardadd keepalpha fullforwardshadows addshadow vertex:vert",961],["// Enable instancing for this shader",961],["pragma multi_compile_instancing",961],["pragma instancing_options procedural:vertInstancingSetup",961],["pragma exclude_renderers gles",961],["include \"UnityStandardParticleInstancing.cginc\"",961],["sampler2D _MainTex;",961],["struct Input {",961],["float2 uv_MainTex;",961],["fixed4 vertexColor;",961],["};",961],["fixed4 _Color;",961],["half _Glossiness;",961],["half _Metallic;",961],["void vert (inout appdata_full v, out Input o)",961],["UNITY_INITIALIZE_OUTPUT(Input, o);",961],["vertInstancingColor(o.vertexColor);",961],["vertInstancingUVs(v.texcoord, o.uv_MainTex);",961],["void surf (Input IN, inout SurfaceOutputStandard o) {",961],["// Albedo comes from a texture tinted by color",961],["fixed4 c = tex2D (MainTex, IN.uvMainTex) * IN.vertexColor * _Color;",961],["o.Albedo = c.rgb;",961],["// Metallic and smoothness come from slider variables",961],["o.Metallic = _Metallic;",961],["o.Smoothness = _Glossiness;",961],["o.Alpha = c.a;",961],["ENDCG",961],["FallBack \"Diffuse\"",961],["There are a number of small differences to a regular Surface Shader in the above example, which make it work with particle instancing.",961],["Firstly, you must add the following two lines to enable Procedural Instancing, and specify the built-in vertex setup function. This function lives in UnityStandardParticleInstancing.cginc, and loads the per-instance (per-particle) positional data:",961],["pragma instancing_options procedural:vertInstancingSetup",961],["include \"UnityStandardParticleInstancing.cginc\"",961],["The other modification in the example is to the Vertex function, which has two extra lines that apply per-instance attributes, specifically, particle colors and Texture Sheet Animation texture coordinates:",961],["vertInstancingColor(o.vertexColor);",961],["vertInstancingUVs(v.texcoord, o.uv_MainTex);",961],["",961],["Particle System GPU Instancing in a Custom Shader",961],["Here is a complete working example of a Custom Shader using particle system GPU instancing. This custom shader adds a feature which the standard particle shader does not have - a fade between the individual frames of a texture sheet animation.",961],["Shader \"Instanced/ParticleMeshesCustom\"",961],["Properties",961],["_MainTex(\"Albedo\", 2D) = \"white\" {}",961],["[Toggle(TSANIMBLENDING)] _TSAnimBlending(\"Texture Sheet Animation Blending\", Int) = 0",961],["SubShader",961],["Tags{ \"RenderType\" = \"Opaque\" }",961],["LOD 100",961],["Pass",961],["CGPROGRAM",961],["pragma vertex vert",961],["pragma fragment frag",961],["pragma multi_compile _ _TSANIMBLENDING",961],["pragma multi_compile_instancing",961],["pragma instancing_options procedural:vertInstancingSetup",961],["include \"UnityCG.cginc\"",961],["include \"UnityStandardParticleInstancing.cginc\"",961],["struct appdata",961],["float4 vertex : POSITION;",961],["fixed4 color : COLOR;",961],["float2 texcoord : TEXCOORD0;",961],["UNITY_VERTEX_INPUT_INSTANCE_ID",961],["};",961],["struct v2f",961],["float4 vertex : SV_POSITION;",961],["fixed4 color : COLOR;",961],["float2 texcoord : TEXCOORD0;",961],["ifdef TSANIMBLENDING",961],["float3 texcoord2AndBlend : TEXCOORD1;",961],["endif",961],["};",961],["sampler2D _MainTex;",961],["float4 MainTexST;",961],["fixed4 readTexture(sampler2D tex, v2f IN)",961],["fixed4 color = tex2D(tex, IN.texcoord);",961],["ifdef TSANIMBLENDING",961],["fixed4 color2 = tex2D(tex, IN.texcoord2AndBlend.xy);",961],["color = lerp(color, color2, IN.texcoord2AndBlend.z);",961],["endif",961],["return color;",961],["v2f vert(appdata v)",961],["v2f o;",961],["UNITY_SETUP_INSTANCE_ID(v);",961],["o.color = v.color;",961],["o.texcoord = v.texcoord;",961],["vertInstancingColor(o.color);",961],["ifdef TSANIMBLENDING",961],["vertInstancingUVs(v.texcoord, o.texcoord, o.texcoord2AndBlend);",961],["else",961],["vertInstancingUVs(v.texcoord, o.texcoord);",961],["endif",961],["o.vertex = UnityObjectToClipPos(v.vertex);",961],["return o;",961],["fixed4 frag(v2f i) : SV_Target",961],["half4 albedo = readTexture(_MainTex, i);",961],["return i.color * albedo;",961],["ENDCG",961],["This example contains the same set-up code as the Surface Shader for loading the positional data:",961],["pragma instancing_options procedural:vertInstancingSetup",961],["include \"UnityStandardParticleInstancing.cginc\"",961],["The modification to the vertex function is very similar to the Surface Shader too:",961],["vertInstancingColor(o.color);",961],["ifdef TSANIMBLENDING",961],["vertInstancingUVs(v.texcoord, o.texcoord, o.texcoord2AndBlend);",961],["else",961],["vertInstancingUVs(v.texcoord, o.texcoord);",961],["endif",961],["The only difference here, compared with the first example above, is the texture sheet animation blending. This means that the shader requires an extra set of texture coordinates to read two frames of the texture sheet animation instead of just one, and blends them together.",961],["Finally, the fragment shader reads the textures and calculates the final color.",961],["",961],["Particle system GPU Instancing with custom vertex streams",961],["The examples above only use the default vertex stream setup for particles. This includes a position, a normal, a color, and one UV. However, by using custom vertex streams, you can send other data to the shader, such as velocities, rotations and sizes.",961],["In this next example, the shader is designed to display a special effect, which makes faster particles appear brighter, and slower particles dimmer. There is some extra code that brightens particles according to their speed, using the Speed Vertex Stream. Also, because this shader assumes the effect will not be using texture sheet animation, it is omitted from the custom stream struct.",961],["Here is the full Shader:",961],["Shader \"Instanced/ParticleMeshesCustomStreams\"",961],["Properties",961],["_MainTex(\"Albedo\", 2D) = \"white\" {}",961],["SubShader",961],["Tags{ \"RenderType\" = \"Opaque\" }",961],["LOD 100",961],["Pass",961],["CGPROGRAM",961],["pragma exclude_renderers gles",961],["pragma vertex vert",961],["pragma fragment frag",961],["pragma multi_compile_instancing",961],["pragma instancing_options procedural:vertInstancingSetup",961],["define UNITY_PARTICLE_INSTANCE_DATA MyParticleInstanceData",961],["define UNITY_PARTICLE_INSTANCE_DATA_NO_ANIM_FRAME",961],["struct MyParticleInstanceData",961],["float3x4 transform;",961],["uint color;",961],["float speed;",961],["};",961],["include \"UnityCG.cginc\"",961],["include \"UnityStandardParticleInstancing.cginc\"",961],["struct appdata",961],["float4 vertex : POSITION;",961],["fixed4 color : COLOR;",961],["float2 texcoord : TEXCOORD0;",961],["UNITY_VERTEX_INPUT_INSTANCE_ID",961],["};",961],["struct v2f",961],["float4 vertex : SV_POSITION;",961],["fixed4 color : COLOR;",961],["float2 texcoord : TEXCOORD0;",961],["};",961],["sampler2D _MainTex;",961],["float4 MainTexST;",961],["v2f vert(appdata v)",961],["v2f o;",961],["UNITY_SETUP_INSTANCE_ID(v);",961],["o.color = v.color;",961],["o.texcoord = v.texcoord;",961],["vertInstancingColor(o.color);",961],["vertInstancingUVs(v.texcoord, o.texcoord);",961],["if defined(UNITY_PARTICLE_INSTANCING_ENABLED)",961],["UNITY_PARTICLE_INSTANCE_DATA data = unity_ParticleInstanceData[unity_InstanceID];",961],["o.color.rgb += data.speed;",961],["endif",961],["o.vertex = UnityObjectToClipPos(v.vertex);",961],["return o;",961],["fixed4 frag(v2f i) : SV_Target",961],["half4 albedo = tex2D(_MainTex, i.texcoord);",961],["return i.color * albedo;",961],["ENDCG",961],["The shader includes UnityStandardParticleInstancing.cginc, which contains the default instancing data layout for when Custom Vertex Streams are not being used. So, when using custom streams, you must override some of the defaults defined in that header. These overrides must come before the include. The example above sets the following custom overrides:",961],["Firstly, there is a line that tells Unity to use a custom struct called ‘MyParticleInstanceData’ for the custom stream data, using the UNITY_PARTICLE_INSTANCE_DATA macro:",961],["define UNITY_PARTICLE_INSTANCE_DATA MyParticleInstanceData",961],["Next, another define tells the instancing system that the Anim Frame Stream is not required in this shader, because the effect in this example is not intended for use with texture sheet animation:",961],["define UNITY_PARTICLE_INSTANCE_DATA_NO_ANIM_FRAME",961],["Thirdly, the struct for the custom stream data is declared:",961],["struct MyParticleInstanceData",961],["float3x4 transform;",961],["uint color;",961],["float speed;",961],["};",961],["These overrides all come before UnityStandardParticleInstancing.cginc is included, so the shader does not use its own defaults for those defines.",961],["When writing your struct, the variables must match the vertex streams listed in the Inspector in the Particle System renderer module. This means you must choose the streams you want to use in the Renderer module UI, and add them to variable definitions in your custom stream data struct in the same order, so that they match:",961],["The first item (Position) is mandatory, so you cannot remove it. You can freely add/remove other entries using the plus and minus buttons to customize your vertex stream data.",961],["Entries in the list that are followed by INSTANCED contain instance data, so you must include them in your particle instance data struct. The number directly appended to the word INSTANCED (for example zero in INSTANCED0 and one in INSTANCED1) indicates the order in which the variables must appear in your struct, after the initial \"transform\" variable. The trailing letters (.x .xy .xyz or .xyzw) indicate the variable’s type and map to float, float2, float3 and float4 variable types in your shader code.",961],["You can omit any other vertex stream data that appears in the list, but that does *not *have the word INSTANCED after it, from the particle instance data struct, because it is not instanced data to be processed by the shader. This data belongs to the source mesh, for example UV’s, Normals and Tangents.",961],["The final step to complete our example is to apply the speed to the particle color inside the Vertex Shader:",961],["if defined(UNITY_PARTICLE_INSTANCING_ENABLED)",961],["UNITY_PARTICLE_INSTANCE_DATA data = unity_ParticleInstanceData[unity_InstanceID];",961],["o.color.rgb += data.speed;",961],["endif",961],["You must wrap all the instancing code inside the check for UNITY_PARTICLE_INSTANCING_ENABLED, so that it can compile when instancing is not being used.",961],["At this point, if you want to pass the data to the Fragment Shader instead, you can write the data into the v2f struct, like you would with any other shader data.",961],["This example describes how to modify a Custom Shader for use with Custom Vertex Streams, but you can apply exactly the same approach to a Surface Shader to achieve the same functionality.",961],["2018-03-28 ",961],["Particle System GPU instancing added in Unity 2018.1 NewIn20181",961],["Lifetime by Emitter Speed module",962],["This module controls the initial lifetime of each particle based on the speed of the emitter when the particle spawns. It multiplies the start lifetime of particles by a value that depends on the speed of the object that spawned them. For most Particle Systems, this is the GameObject velocity, but for sub-emitters, the velocity comes from the parent particle that the sub-emitter particle originated from.",962],["Using the Lifetime by Emitter Speed module",962],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Lifetime by Emitter Speed module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",962],["Click GameObject > Effects > Particle System.",962],["In the Inspector, find the Particle System component.",962],["In the Particle System component, find the Lifetime by Emitter Speed module fold-out.",962],["To the left of the fold-out header, enable the checkbox.",962],["API",962],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Lifetime by Emitter Speed module API documentation.",962],["Properties",962],["Property Function ",962],["--------------- ------------------------------------------------------------ ",962],["Multiplier The multiplier to apply to the particle's initial lifetime. The module uses this value differently depending on the curve mode you set. The curve modes are:• Constant: Uses the constant multiplier value you set for this property. Using this curve mode ignores the Speed Range property.• Curve: Takes the emitter's speed, maps it to a value between 0 and 1 based on the Speed Range, then uses the normalized value to sample the curve.• Random Between Two Constants: Sets a random multiplier for each particle between the two values you set for this property. Using this curve mode ignores the Speed Range property.• Random Between Two Curves: Takes the emitter's speed, maps it to a value between 0 and 1 based on the Speed Range, then uses the normalized value to sample each curve. For each particle, the module sets the multiplier to a random value between the two samples. ",962],["Speed Range The minimum and maximum emitter speeds the Particle System maps to a value along the Multiplier curve. If the emitter's speed is equal to the first value, the multiplier is the value at the start of the curve. If the emitter's speed is equal to the second value, the multiplier is the value at the end of the curve.This property is only relevant if the curve mode for Multiplier is set to Curve or Random Between Two Curves. ",962],["Lights module",963],["Add real-time lights to a percentage of your particles using this module.",963],["Using the Lights module",963],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Lights module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",963],["Click GameObject > Effects > Particle System.",963],["In the Inspector, find the Particle System component.",963],["In the Particle System component, find the Lights module fold-out.",963],["To the left of the fold-out header, enable the checkbox.",963],["API",963],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Lights module API documentation.",963],["Properties",963],["Property Function ",963],["Light Assign a Light Prefab describing how your particle lights should look. ",963],["Ratio A value between 0 and 1 describing the proportion of particles that will receive a light. ",963],["Random Distribution Choose whether lights are assigned randomly or periodically. When set to true, every particle has a random chance of receiving a light based on the Ratio. Higher values increase the probability of a particle having a light. When set to false, the Ratio controls how often a newly created particle receives a light (for example, every Nth particle will receive a light). ",963],["Use Particle Color When set to True, the final color of the Light will be modulated by the color of the particle it is attached to. If set to False, the Light color is used without any modification. ",963],["Size Affects Range When enabled, the Range specified in the Light will be multiplied by the size of the particle. ",963],["Alpha Affects Intensity When enabled, the Intensity of the light is multiplied by the particle alpha value. ",963],["Range Multiplier Apply a custom multiplier to the Range of the light over the lifetime of the particle using this curve. ",963],["Intensity Multiplier Apply a custom multiplier to the Intensity of the light over the lifetime of the particle using this curve. ",963],["Maximum Lights Use this setting to avoid accidentally creating an enormous number of lights, which could make the Editor unresponsive or make your application run very slowly. ",963],["Details",963],["The Lights module is a fast way to add real-time lighting to your particle effects. It can be used to make systems cast light onto their surroundings, for example for a fire, fireworks or lightning. It also allows you to have the lights inherit a variety of properties from the particles they are attached to. This can make it more believable that the particle effect itself is emitting light. For example, this can be achieved by making the lights fade out with their particles and having them share the same colors.",963],["This module makes it easy to create a lot of real-time lights very quickly, and real-time lights have a high performance cost, especially in Forward Rendering mode. If the lights also cast shadows, the performance cost is even higher. To help guard against an accidental tweak to the emission rate and thus causing thousands of real-time lights to be created, the Maximum Lights property should be used. Creating more lights than your target hardware is able to manage can cause slowdowns and unresponsiveness.",963],["Limit Velocity over Lifetime module",964],["This module controls how the speed of particles is reduced over their lifetime.",964],["Using the Limit Velocity over Lifetime module",964],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Limit Velocity over Lifetime module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",964],["Click GameObject > Effects > Particle System.",964],["In the Inspector, find the Particle System component.",964],["In the Particle System component, find the Limit Velocity over Lifetime module fold-out.",964],["To the left of the fold-out header, enable the checkbox.",964],["API",964],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Limit Velocity over Lifetime module API documentation.",964],["Properties",964],["Property Function ",964],["Separate Axes Splits the axes up into separate X, Y and Z components. ",964],["Speed Sets the speed limit of the particles. ",964],["Space Selects whether the speed limitation refers to local or world space. This option is only available when Separate Axes is enabled. ",964],["Dampen The fraction by which a particle's speed is reduced when it exceeds the speed limit. ",964],["Drag Applies linear drag to the particle velocities. ",964],["Multiply by Size When enabled, larger particles are affected more by the drag coefficient. ",964],["Multiply by Velocity When enabled, faster particles are affected more by the drag coefficient. ",964],["Details",964],["This module is very useful for simulating air resistance that slows the particles, especially when a decreasing curve is used to lower the speed limit over time. For example, an explosion or firework initially bursts at great speed but the particles emitted from it rapidly slow down as they pass through the air.",964],["The Drag option offers a more physically accurate simulation of air resistance by offering options to apply varying amounts of resistance based on the size and speed of the particles.",964],["2017-09-05 ",964],["Drag, Multiple by Size, Multiply by Velocity added in Unity 2017.2NewIn20172",964],["Main module",965],["The Particle System module contains global properties that affect the whole system. Most of these properties control the initial state of newly created particles. To expand and collapse the main module, click the Particle System bar in the Inspector window.",965],["The name of the module appears in the inspector as the name of the GameObject that the Particle System component is attached to.",965],["Using the Main module",965],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity embeds the Main module in the Particle System. To create a new Particle System:",965],["Click GameObject > Effects > Particle System.",965],["In the Inspector, find the Particle System component.",965],["The main module properties appear at the top of the Particle System component.",965],["API",965],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Main module API documentation.",965],["Properties",965],["Property Function ",965],["Duration The length of time the system runs. ",965],["Looping If enabled, the system starts again at the end of its duration time and continues to repeat the cycle. ",965],["Prewarm If enabled, the system is initialized as though it had already completed a full cycle (only works if Looping is also enabled). ",965],["Start Delay Delay in seconds before the system starts emitting once enabled. ",965],["Start Lifetime The initial lifetime for particles. ",965],["Start Speed The initial speed of each particle in the appropriate direction. ",965],["3D Start Size Enable this if you want to control the size of each axis separately. ",965],["Start Size The initial size of each particle. ",965],["3D Start Rotation Enable this if you want to control the rotation of each axis separately. ",965],["Start Rotation The initial rotation angle of each particle. ",965],["Flip Rotation Causes some particles to spin in the opposite direction. ",965],["Start Color The initial color of each particle. ",965],["Gravity Modifier Scales the gravity value set in the Physics window. A value of zero switches gravity off. ",965],["Simulation Space Controls whether particles are animated in the parent object’s local space (therefore moving with the parent object), in the world space, or relative to a custom object (moving with a custom object of your choosing). ",965],["Simulation Speed Adjust the speed at which the entire system updates. ",965],["Delta Time Choose between Scaled and Unscaled, where Scaled uses the Time Scale value in the Time window, and Unscaled ignores it. This is useful for Particle Systems that appear on a Pause Menu, for example. ",965],["Scaling Mode Choose how to use the scale from the transform. Set to Hierarchy, Local or Shape. Local applies only the Particle System transform scale, ignoring any parents. Shape mode applies the scale to the start positions of the particles, but does not affect their size. ",965],["Play on Awake If enabled, the Particle System starts automatically when the object is created. ",965],["Emitter Velocity Choose how the Particle System calculates the velocity used by the Inherit Velocity and Emission modules. The system can calculate the velocity using a Rigidbody component, if one exists, or by tracking the movement of the Transform component. If no Rigidbody component exists, the system uses its Transform component by default. ",965],["Max Particles The maximum number of particles in the system at once. If the limit is reached, some particles are removed. ",965],["Auto Random Seed If enabled, the Particle System looks different each time it is played. When set to false, the system is exactly the same every time it is played. ",965],["Random Seed When disabling the automatic random seed, this value is used to create a unique repeatable effect. ",965],["Stop Action When all the particles belonging to the system have finished, it is possible to make the system perform an action. A system is determined to have stopped when all its particles have died, and its age has exceeded its Duration. For looping systems, this only happens if the system is stopped via script. ",965],["    Disable The GameObject is disabled. ",965],["    Destroy The GameObject is destroyed. ",965],["    Callback The OnParticleSystemStopped callback is sent to any scripts attached to the GameObject. ",965],["Culling Mode Choose whether to pause Particle System simulation when particles are offscreen. Culling when offscreen is most efficient, but you may want to continue simulation for off-one effects. ",965],["    Automatic Looping systems use Pause, and all other system use Always Simulate. ",965],["    Pause And Catch-up The system stops simulating while offscreen. When re-entering the view, the simulation performs a large step to reach the point where it would have been had it not paused. In complex systems, this option can cause performance spikes. ",965],["    Pause The system stops simulating while offscreen. ",965],["    Always Simulate The system processes its simulation on each frame, regardless of whether it is on screen or not. This can be useful for one-shot effects such as fireworks, where during the simulation would be obvious. ",965],["Ring Buffer Mode Keeps particles alive until they reach the Max Particles count, at which point new particles recycle the oldest ones, instead of removing particles when their lifetimes elapse. ",965],["    Disabled Disable Ring Buffer Mode, so the system removes particles when their lifetime elapses. ",965],["    Pause Until Replaced Pauses old particles at the end of their lifetime until the Max Particle limit is reached, at which point the system recycles them, so they reappear as new particles. ",965],["    Loop Until Replaced At the end of their lifetime, particles rewind back to the specified proportion of their lifetime until the Max Particle limit is reached, at which point the system recycles them, so they reappear as new particles. ",965],["Property details",965],["The system emits particles for a specific duration, and can be set to emit continuously using the Looped property. This allows you to set particles to be emitted intermittently or continuously; for example, an object may emit smoke in short puffs or in a steady stream.",965],["The Start properties (lifetime, speed, size, rotation and color) specify the state of a particle on emission. You can specify a particle’s width, height and depth independently, using the 3D Start Size property (see Non-uniform particle scaling, below).",965],["All Particle Systems use the same gravity vector specified in the Physics settings. The Gravity Multiplier value can be used to scale the gravity, or switch it off if set to zero.",965],["",965],["Non-uniform particle scaling",965],["The 3D Start Size property allows you to specify a particle’s width, height and depth independently. In the Particle System Main module, check the 3D Start Size checkbox, and enter the values for the initial x (width), y (height) and z (depth) of the particle. Note that z (depth) only applies to 3D Mesh particles. You can also set randomised values for these properties, in a range between two constants or curves.",965],["You can set the particle’s initial size in the Particle System Main module, and its size over the particle’s lifetime using the Separate Axes option in the Size over Lifetime module. You can also set the particle’s size in relation to its speed using the Separate Axes option in the Size by Speed module.",965],["Simulation Space",965],["The Simulation Space property determines whether the particles move with the Particle System parent object, a custom object, or independently in the game world. For example, systems like clouds, hoses and flamethrowers need to be set independently of their parent GameObject, as they tend to leave trails that persist in the world space even if the object producing them moves around. On the other hand, if particles are used to create a spark between two electrodes, the particles should move along with the parent object. For more advanced control over how particles follow their Transform, see documentation on the Inherit Velocity module.",965],["When set to Custom, particles no longer move relative to their own Transform component. Instead, they all move relative to the movement of the specified Transform component. The Particle System uses the Custom Transform to calculate emitter velocity, which the Inherit Velocity module and Rate over Distance property of the Emission module use to control particle velocity and emission.",965],["",965],["2018-11-02 ",965],["Simulation Speed, Delta Time and Emitter Velocity added in Unity 2017.1 NewIn20171",965],["Stop Action particle system property added in Unity 2017.2 NewIn20172",965],["Culling Mode and Ring Buffer Mode properties added to Particle System in 2018.3 NewIn20183",965],["Noise module",966],["Add turbulence to particle movement using this module.",966],["Using the Noise module",966],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Noise module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",966],["Click GameObject > Effects > Particle System.",966],["In the Inspector, find the Particle System component.",966],["In the Particle System component, find the Noise module fold-out.",966],["To the left of the fold-out header, enable the checkbox.",966],["API",966],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Noise module API documentation.",966],["Properties",966],["Property Function ",966],["Separate Axes Control the strength and remapping independently on each axis. ",966],["Strength A curve that defines how strong the noise effect is on a particle over its lifetime. Higher values will make particles move faster and further. ",966],["Frequency Low values create soft, smooth noise, and high values create rapidly changing noise. This controls how often the particles change their direction of travel, and how abrupt those changes of direction are. ",966],["Scroll Speed Move the noise field over time to cause more unpredictable and erratic particle movement. ",966],["Damping When enabled, strength is proportional to frequency. Tying these values together means the noise field can be scaled while maintaining the same behaviour, but at a different size. ",966],["Octaves Specify how many layers of overlapping noise are combined to produce the final noise values. Using more layers gives richer, more interesting noise, but significantly adds to the performance cost. ",966],["Octave Multiplier For each additional noise layer, reduce the strength by this proportion. ",966],["Octave Scale For each additional noise layer, adjust the frequency by this multiplier. ",966],["Quality Lower quality settings reduce the performance cost significantly, but also affect how interesting the noise looks. Use the lowest quality that gives you the desired behavior for maximum performance. ",966],["Remap Remap the final noise values into a different range. ",966],["Remap Curve The curve that describes how the final noise values are transformed. For example, you could use this to pick out the lower ranges of the noise field and ignore the higher ranges by creating a curve that starts high and ends at zero. ",966],["Position Amount A multiplier to control how much the noise affects particle positions. ",966],["Rotation Amount A multiplier to control how much the noise affects particle rotations, in degrees per second. ",966],["Size Amount A multiplier to control how much the noise affects particle sizes. ",966],["Details",966],["Adding noise to your particles is a simple and effective way to create interesting patterns and effects. For example, imagine how embers from a fire move around, or how smoke swirls as it moves. Strong, high frequency noise could be used to simulate the fire embers, while soft, low frequency noise would be better suited to modeling a smoke effect.",966],["For maximum control over the noise, you can enable the Separate Axes option. This allows you to control the strength and remapping on each axis independently.",966],["The noise algorithm used is based on a technique called Curl Noise, which internally uses multiple samples of Perlin Noise to create the final noise field.",966],["The settings on the Quality window control how many unique noise samples are generated. When using Medium and Low, less samples of Perlin Noise are used, and those samples are re-used across multiple axes but combined in a way to try and hide the re-use. This means that the noise may look less dynamic and diverse when using lower quality settings. However, there is a significant performance benefit when using lower quality settings.",966],["2017-09-05 ",966],["Position Amount, Rotation Amount, Size Amount added in Unity 2017.1 NewIn20171",966],["Strength, Frequency, noise algorithm and quality settings added in Unity 2017.2 NewIn20172",966],["Components and Modules",967],["This section contains reference information for the Particle System component, the Particle System Force Field component, and each of the Built-in Particle System Modules.",967],["Renderer module",968],["The Renderer module’s settings determine how a particle’s image or Mesh is transformed, shaded and overdrawn by other particles.",968],["Using the Renderer module",968],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an existing GameObject, Unity adds the Renderer module to the Particle System. Unity enables this module by default.",968],["To create a new Particle System, go to GameObject > Effects and click on the Particle System option. Unity then creates a new Particle System GameObject and selects it in the Hierarchy window. In the Inspector window, the Particle System component contains all settings and modules related to the Particle System. Select the Renderer module to display options for this module.",968],["API",968],["Because this module is part of the Particle System component, you access it through the ParticleSystem class. For more information on how to access this class and change values at runtime, see Renderer module.",968],["Properties",968],["Property: Function: ",968],["Render Mode How Unity produces the rendered image from the graphic image (or Mesh). For more information, see Render Mode and Billboard render modes. ",968],["Billboard Unity renders the particles as billboards and they face the direction you specify in Render Alignment. ",968],["Stretched Billboard The particles face the Camera with various possible scaling options applied. ",968],[" Camera Scale This setting is only available when you use the **Stretched Billboard** Render mode.<br/><br/>Stretches particles according to Camera movement. Set this to zero to disable Camera movement stretching. \n",968],[" Velocity Scale This setting is only available when you use the Stretched Billboard Render mode.<br/><br/>Stretches particles proportionally to their speed. Set this to zero to disable stretching based on speed. \n",968],[" Length Scale This setting is only available when you use the Stretched Billboard Render mode.<br/><br/>Stretches particles proportionally to their current size along the direction of their velocity. Setting this to zero makes the particles disappear, having effectively zero length. \n",968],[" Freeform Stretching This setting is only available when you use the Stretched Billboard Render mode.<br/><br/>Indicates whether particles should use freeform stretching. With this stretching behavior, particles don't become thin when you view them head-on. \n",968],[" Rotate With Stretch This setting is only available when you use the Stretched Billboard Render mode.<br/><br/>Indicates whether to rotate particles based on the direction they stretch in. This is added on top of other particle rotation. This property only has an effect when you enable **Freeform Stretching**. If you disable **Freeform Stretching**, particles always rotate based on the direction they stretch in, even if **Rotate With Stretch** is disabled. \n",968],["Horizontal Billboard The particle plane is parallel to the XZ \"floor\" plane. ",968],["Vertical Billboard The particle is upright on the world Y-axis, but turns to face the Camera. ",968],["Mesh Unity renders the particle from a 3D Mesh instead of a Billboard. For more information on the specific settings for the Mesh Render mode, see the Details section below. ",968],[" Mesh Distribution Specifies the method that Unity uses to randomly assign meshes to particles.<br/><br/>This setting is only available when you use the **Mesh** Render mode. \n",968],[" Uniform Random Unity randomly assigns meshes to particles with an even weighting. The Particle System as a whole should contain a roughly equal number of each possible mesh at any given moment.<br/><br/>This setting is only available when you use the **Mesh** Render mode. \n",968],[" Non-uniform Random Unity randomly assigns meshes to particles with user-defined weights for each mesh.<br/><br/>When this setting is enabled, the Renderer module Inspector window displays a Meshes list and a Mesh Weightings field for each mesh in the list. You can use the Mesh Weightings field to control how often Unity assigns each mesh to a particle.<br/><br/>This setting is only available when you use the **Mesh** Render mode. \n",968],[" Mesh Weightings Controls how likely Unity is to assign this mesh to a particle. The weights work relative to each other; Unity is twice as likely to assign a mesh with double the weight of another mesh, regardless of their absolute value. For more information, see [Mesh Distribution: Non-uniform random](#non-uniform-random) in the Details section below.<br/><br/>This setting is only available when you use the **Mesh** Render mode and the **Mesh Distribution** property is set to \"Non-uniform Random\". \n",968],["None Unity doesn't render any particles. This can be useful alongside the Trails module, if you want to only render the trails and hide any default particle rendering. ",968],["Normal Direction Specifies how to calculate lighting for the billboard. A value of 0 means Unity calculates lighting as though the billboard was a sphere. This results in the billboard looking more like a sphere. A value of 1 means Unity calculates lighting for the billboard as a flat quad.This property is only available when using one of the Billboard rendering modes: Billboard, Stretched Billboard, Horizontal Billboard or Vertical Billboard. ",968],["Material The material Unity uses to render the particles. ",968],["Trail Material The material Unity uses to render particle trails.This option is only available when the Trails module is enabled. ",968],["Sort Mode The order in which Unity draws and overlays particles with a Particle System. ",968],["None When this setting is enabled, Unity doesn't sort particles. ",968],["By Distance Sorts particles in the system based on distance to the active Camera. Unity renders particles closer to the Camera on top of those that are further away. The order of particles doesn't change when you rotate the camera with the setting. ",968],["Oldest in Front Unity renders particles that have existed the longest at the front of the Particle System. ",968],["Youngest in Front Unity renders particles that have existed for the shortest time at the front of the Particle System. ",968],["By Depth Unity renders particles based on their distance from the camera's near plane. The order of particles can change when you rotate the camera with this setting. ",968],["Sorting Fudge The bias of the Particle System sort ordering. Lower values increase the relative chance that Unity draws Particle Systems over other transparent GameObjects, including other Particle Systems. This setting only affects Particle Systems as a whole that appear in the scene - it does not perform sorting on individual particles within a system. ",968],["Min Particle Size The smallest particle size (regardless of other settings), expressed as a fraction of viewport size.This property is only available when using one of the Billboard rendering modes: Billboard, Stretched Billboard, Horizontal Billboard or Vertical Billboard. ",968],["Max Particle Size The largest particle size (regardless of other settings), expressed as a fraction of viewport size. This property is only available when using one of the Billboard rendering modes: Billboard, Stretched Billboard, Horizontal Billboard or Vertical Billboard. ",968],["Render Alignment This property determines the direction that particle billboards face. ",968],["View Particles face the Camera plane. ",968],["World Particles align with the world axes. ",968],["Local Particles align to the Transform component of their GameObject. ",968],["Facing Particles face the direct position defined by the Transform component in the GameObject of the active Camera. ",968],["Velocity Particles face in the same direction as their velocity vector. ",968],["Enable Mesh GPU Instancing This property is only available when using the Mesh render mode.This property controls whether Unity renders the Particle System using GPU Instancing. This requires the use of a compatible shader. For more information, see Particle Mesh GPU Instancing. ",968],["Flip Mirror a proportion of the particles across the specified axes. A higher value flips more particles. ",968],["Allow Roll Controls whether camera-facing particles can rotate around the Z-axis of the camera. Disabling this can be particularly useful for VR applications, where HMD (Head-Mounted Display) roll can cause undesirable particle rotation for Particle Systems. ",968],["Pivot Modify the central pivot point for rotating particles. The value is a multiplier of the particle size. ",968],["Visualize Pivot Preview the particle pivot points in the Scene View. ",968],["Masking Set how the particles rendered by the Particle System behave when they interact with a Sprite Mask. ",968],["No Masking The Particle System does not interact with any Sprite Masks in the Scene. This is the default option. ",968],["Visible Inside Mask The particles are visible where the Sprite Mask overlays them, but not outside of it. ",968],["Visible Outside Mask The particles are visible outside of the Sprite Mask, but not inside it. The Sprite Mask hides the sections of the particles it overlays. ",968],["Apply Active Color Space When rendering in Linear Color Space, the system converts particle colors from Gamma Space before it uploads them to the GPU. ",968],["Custom Vertex Streams Configure which particle properties are available in the Vertex Shader of your Material. For more information, see Particle System vertex streams and Standard Shader support. ",968],["Cast Shadows If this property is enabled, the Particle System creates shadows when a shadow-casting Light shines on it. ",968],["On Enables shadows for this Particle System. ",968],["Off Disables shadows for this Particle System. ",968],["Two-Sided Select Two Sided to allow shadows to be cast from either side of the Mesh. Backface culling is not taken into account when this property is enabled. ",968],["Shadows Only Select Shadows Only to make it so that the shadows are visible, but the Mesh itself is not. ",968],["Shadow Bias Move the shadows along the direction of the light. This removes shadowing artifacts caused by approximating volumes with billboards. ",968],["Motion Vectors Set whether to use motion vectors to track the per-pixel, screen-space motion of this Particle System's Transform component from one frame to the next.Note: Not all platforms support motion vectors. See SystemInfo.supportsMotionVectors for more information. ",968],["Camera Motion Only Use only Camera movement to track motion. ",968],["Per Object Motion Use a specific pass to track motion for this Renderer. ",968],["Force No Motion Do not track motion. ",968],["Receive Shadows Dictates whether particles in this system can receive shadows from other sources. Only opaque materials can receive shadows. ",968],["Sorting Layer ID The name of the Renderer's sorting layer. ",968],["Order in Layer This Renderer's order within a sorting layer. ",968],["Light Probes Probe-based lighting interpolation mode. ",968],["Reflection Probes If enabled, and if reflection probes are present in the Scene, Unity assigns a reflection texture from the nearest reflection probe to this GameObject and sets the texture as a built-in Shader uniform variable. ",968],["Anchor Override A Transform that determines the interpolation position when you use the Light Probe or Reflection Probe systems. ",968],[" Details",968],[" Render Mode",968],["Use Render Mode to choose between several 2D Billboard graphic modes and a Mesh mode. 3D Meshes give particles extra authenticity when they represent solid GameObjects, such as rocks, and can also improve the sense of volume for clouds, fireballs and liquids.",968],["Meshes must be read/write enabled to work in the Particle System’s Mesh Render Mode. When you assign meshes to a Particle System (using the Meshes list in the Inspector window), Unity automatically enables the read/write enabled setting for those meshes.",968],[" Billboard render modes",968],["When you use 2D billboard graphics, the different render modes can produce a variety of results that make them suitable for specific uses:",968],["Billboard mode is useful for particles that represent volumes that look similar from any direction (such as clouds).",968],["Horizontal Billboard mode is useful when the particles cover the ground (such as target indicators and magic spell effects) or when they are flat objects that fly or float parallel to the ground.",968],["Vertical Billboard mode keeps each particle upright and perpendicular to the XZ plane, but allows it to rotate around its y-axis. This can be helpful when you are using an orthographic Camera and want particle sizes to stay consistent.",968],["Stretched Billboard mode accentuates the apparent speed of particles in a similar way to the “stretch and squash” techniques used by traditional animators. Note that in Stretched Billboard mode, particles are aligned to face the Camera and also aligned to their velocity. This alignment occurs regardless of the Velocity Scale value - even if Velocity Scale is set to 0, particles in this mode still align to the velocity.",968],["When you use Billboard render modes, you can use the Normal Direction to create spherical shading on the flat rectangular billboards. This can help create the illusion of 3D particles if you use a Material that applies lighting to your particles.",968],[" Mesh Distribution: Non-uniform Random",968],["When Mesh Distribution is set to Non-uniform Random, you can customize how often Unity randomly assigns specific meshes to particles. To do this, you use the Meshes list and the Mesh Weighting field.",968],["In the Meshes list, the field on the left contains the mesh you want the Particle System to use, and the field on the right (highlighted in the image above) contains the Mesh Weighting for that mesh. Use the Mesh Weighting field for each mesh to control how often Unity assigns that mesh to a particle, relative to every other mesh. This is set to 1 by default, which results in the likelihood that Unity assigns a mesh being equal.",968],["To add a mesh to the Meshes list, select the Add (+) icon. To remove a mesh from the Meshes list, select the mesh, then select the Remove (-) icon.",968],["2018-10-16 ",968],["GPU instancing added in Unity 2018.1",968],["New particle system options added to Renderer module in [2018.3] (https://docs.unity3d.com/2018.3/Documentation/Manual/30_search.html?q=newin20183) NewIn20183",968],["Rotation by Speed module",969],["The rotation of a particle can be set here to change according to its speed in distance units per second.",969],["Using the Rotation by Speed module",969],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Rotation by Speed module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",969],["Click GameObject > Effects > Particle System.",969],["In the Inspector, find the Particle System component.",969],["In the Particle System component, find the Rotation by Speed module fold-out.",969],["To the left of the fold-out header, enable the checkbox.",969],["API",969],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Rotation by Speed module API documentation.",969],["Properties",969],["Property Function ",969],["Separate Axes Control rotation independently for each axis of rotation. ",969],["Angular Velocity Rotation velocity in degrees per second. ",969],["Speed Range The low and high ends of the speed range to which the size curve is mapped (speeds outside the range will map to the end points of the curve). ",969],["Details",969],["This property can be used when the particles represent solid objects moving over the ground such as rocks from a landslide. The rotation of the particles can be set in proportion to the speed so that they roll over the surface convincingly.",969],["The Speed Range is only applied when the velocity is in one of the curve modes. Fast particles will rotate using the values at the right end of the curve, while slower particles will use values from the left side of the curve.",969],["Rotation over Lifetime module",970],["Here, you can configure particles to rotate as they move.",970],["Using the Rotation over Lifetime module",970],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Rotation over Lifetime module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",970],["Click GameObject > Effects > Particle System.",970],["In the Inspector, find the Particle System component.",970],["In the Particle System component, find the Rotation over Lifetime module fold-out.",970],["To the left of the fold-out header, enable the checkbox.",970],["API",970],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Rotation over Lifetime module API documentation.",970],["Properties",970],["Property Function ",970],["Separate Axes Allow rotation to be specified per axis. When this is enabled, the option to set a rotation for each of X, Y and Z is presented. ",970],["Angular Velocity Rotation velocity in degrees per second. See below for more information. ",970],["Details",970],["This setting is useful when particles represent small solid objects, such as pieces of debris from an explosion. Assigning random values of rotation will make the effect more realistic than having the particles remain upright as they fly. The random rotations will also help to break up the regularity of similarly shaped particles (the same texture repeated many times can be very noticeable).",970],["Options",970],["The angular velocity option can be changed from the default constant speed. The drop-down to the right of the velocity can provide:",970],["Property Function ",970],["Constant The velocity for particle rotation in degrees per second. ",970],["Curve The angular velocity can be set to change over the lifetime of the particle. A curve editor appears at the bottom of the Inspector which allows you to control how the velocity changes throughout the lifetime of the particle (see Image A below). If the Separate Axes box is ticked, each of the X, Y and Z axes can be given curved velocity values. ",970],["Random Between Two Constants The angular velocity properties has two angles allowing a rotation between them. ",970],["Random Between Two Curves The angular velocity can be set to change over the lifetime of the particle specified by a curve. In this mode, two curves are editable, and each particle will pick a random curve between the range of these two curves that you define (see Image B below). ",970],["Image A: Z-axis angular velocity",970],["Image B: Angular velocity between two curves",970],["Shape module",971],["This module defines the the volume or surface from which particles can be emitted, and the direction of the start velocity. The Shape property defines the shape of the emission volume, and the rest of the module properties vary depending on the Shape you choose.",971],["All shapes (except Mesh) have properties that define their dimensions, such as the Radius property. To edit these, drag the handles on the wireframe emitter shape in the Scene view. The choice of shape affects the region from which particles can be launched, but also the initial direction of the particles. For example, a Sphere emits particles outward in all directions, a Cone emits a diverging stream of particles, and a Mesh emits particles in directions that are normal to the surface.",971],["Using the Shape module",971],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Shape module to the Particle System. By default, Unity enables this module. To create a new Particle System and enable this module:",971],["Click GameObject > Effects > Particle System.",971],["In the Inspector, find the Particle System component.",971],["In the Particle System component, find the Shape module fold-out.",971],["To the left of the fold-out header, enable the checkbox.",971],["API",971],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Shape module API documentation.",971],["Shapes in the Shape module",971],["This section details the properties for each Shape.",971],["Sphere, Hemisphere",971],["Note**: Sphere and Hemisphere have the same properties.",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Sphere__ Uniform particle emission in all directions. \n",971],[" __Hemisphere__ Uniform particle emission in all directions on one side of a plane. \n",971],["Radius The radius of the circular aspect of the shape. ",971],["Radius Thickness The proportion of the volume that emits particles. A value of 0 emits particles from the outer surface of the shape. A value of 1 emits particles from the entire volume. Values in between will use a proportion of the volume. ",971],["Texture A texture to use for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to use for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color affects Particles Multiply particle colors by the texture color. ",971],["Alpha affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Cone",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Cone__ Emit particles from the base or body of a cone. The particles diverge in proportion to their distance from the cone’s center line. \n",971],["Angle The angle of the cone at its point. An angle of 0 produces a cylinder while an angle of 90 gives a flat disc. ",971],["Radius The radius of the circular aspect of the shape. ",971],["Radius Thickness The proportion of the volume that emits particles.A value of 0 emits particles from the outer surface of the shape. A value of 1 emits particles from the entire volume. Values in between will use a proportion of the volume. ",971],["Arc The angular portion of a full circle that forms the emitter’s shape. ",971],[" __Mode__ Define how Unity generates particles around the arc of the shape. When set to __Random__, Unity generates particles randomly around the arc. If using __Loop__, Unity generates particles sequentially around the arc of the shape, and loops back to the start at the end of each cycle. __Ping-Pong__ is the same as __Loop__, except each consecutive loop happens in the opposite direction to the last. Finally, __Burst Spread__ mode distributes particle generation evenly around the shape. This can give you an even spread of particles, compared to the default randomized behavior, where particles may clump together unevenly. __Burst Spread__ is best used with burst emissions. \n",971],[" __Spread__ The discrete intervals around the arc where particles may be generated. For example, a value of 0 allows particles to spawn anywhere around the arc, and a value of 0.1 only spawns particles at 10% intervals around the shape. \n",971],[" __Speed__ The speed the emission position moves around the arc. Using the small black drop-down menu next to the value field, set this to __Constant__ for the value to always remain the same, or __Curve__ for the value to change over time. This option is only available if __Mode__ is set to something other than __Random__ \n",971],["Length The length of the cone. This only applies when the Emit from: property is set to Volume. ",971],["Emit from: The part of the cone to emit particles from: Base or Volume. ",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color affects Particles Multiply particle colors by the texture color. ",971],["Alpha affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. The amount of randomization is multiplied by the Scale property. ",971],["Box",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Box__ Emit particles from the edge, surface, or body of a box shape. The particles move in the emitter object’s forward (Z) direction. \n",971],["Emit from: Select the part of the box to emit from: Edge, Shell, or Volume. ",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color affects Particles Multiply particle colors by the texture color. ",971],["Alpha affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Mesh, MeshRenderer, SkinnedMeshRenderer",971],["Mesh, MeshRenderer and SkinnedMeshRenderer have the same properties.",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Mesh__ Emits particles from any arbitrary Mesh shape supplied via the Inspector. \n",971],[" __MeshRenderer__ Emits particles from a reference to a GameObject’s Mesh Renderer. \n",971],[" __SkinnedMeshRenderer__ Emits particles from a reference to a GameObject’s Skinned Mesh Renderer. \n",971],["Type Where particles are emitted from. Select Vertex for the particles to emit from the vertices, Edge for the particles to emit from the edges, or Triangle for the particles to emit from the triangles. This is set to Vertex by default. ",971],["Mode How the position on the mesh is chosen for each new particle. Select Random for the particles to choose a random position Loop for each new particle to be emitted from the next vertex in the mesh, or Ping-Pong to behave similarly to Loop mode, but to alternate the direction along the mesh vertices after each cycle. This is set to Random by default. ",971],["Mesh The Mesh that provides the emitter’s shape. ",971],["Single Material Specify whether to emit particles from a particular sub-Mesh (identified by the material index number). If enabled, a numeric field appears, which allows you to specify the material index number. ",971],["Use Mesh Colors Modulate particle color with Mesh vertex colors, or, if they don't exist, use the shader color property \"Color\" or \"TintColor\" from the material. ",971],["Normal Offset Distance away from the surface of the Mesh to emit particles (in the direction of the surface normal) ",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color Affects Particles Multiply particle colors by the texture color. ",971],["Alpha Affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["UV Channel Choose which UV channel on the source mesh to use for sampling the texture. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Mesh details",971],["You can choose to only emit particles from a particular material (sub-Mesh) by checking the Single Material property and you can offset the emission position along the Mesh’s normals by checking the Normal Offset property.",971],["To ignore the color of the Mesh, check the Use Mesh Colors property. To read the texture colors from a mesh, assign the Texture you wish to read to the Texture property.",971],["Meshes must be read/write enabled to work on the Particle System. If you assign them in the Editor, Unity handles this for you. But if you want to assign different meshes at run time, you need to check the Read/Write Enabled setting in the Import Settings.",971],["The Mode property allows the Particle System to emit particles in a predictable order on the surface of a Mesh. When emitting from Vertices, this property allows you to emit each new particle from the next vertex in the array of vertices in the Mesh. When emitting from Edges, the Particle System can emit particles smoothly along the edges of the Mesh’s triangles/lines.",971],["Sprite and Sprite Renderer",971],["Sprite and SpriteRenderer have the same properties.",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Sprite__ Emits particles from a Sprite shape supplied via the Inspector. \n",971],[" __SpriteRenderer__ Emits particles from a reference to a GameObject’s Sprite Renderer. \n",971],["Type Where particles are emitted from. Select Vertex to emit particles from the vertices, Edge to emit particles from the edges, or Triangle to emit particles from the triangles. This is set to Vertex by default. ",971],["Sprite The Sprite that defines the particle emitter’s shape. ",971],["Normal Offset Distance away from the surface of the Sprite to emit particles (in the direction of the surface normal) ",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color Affects Particles Multiply particle colors by the texture color. ",971],["Alpha Affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Circle",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Circle__ Uniform particle emission from the center or edge of a circle. The particles move only in the plane of the circle. \n",971],["Radius The radius of the circular aspect of the shape. ",971],["Radius Thickness The proportion of the volume that emits particles. A value of 0 emits particles from the outer edge of the circle. A value of 1 emits particles from the entire area. Values in between will use a proportion of the area. ",971],["Arc The angular portion of a full circle that forms the emitter’s shape. ",971],[" __Mode__ Define how Unity generates particles around the arc of the shape. When set to __Random__, Unity generates particles randomly around the arc. If using __Loop__, Unity generates particles sequentially around the arc of the shape, and loops back to the start at the end of each cycle. __Ping-Pong__ is the same as __Loop__, except each consecutive loop happens in the opposite direction to the last. Finally, __Burst Spread__ mode distributes particle generation evenly around the shape. This can be used to give you an even spread of particles, compared to the default randomized behavior, where particles may clump together unevenly. Burst Spread is best used with burst emissions. \n",971],[" __Spread__ Control the discrete intervals around the arc where particles may be generated. For example, a value of 0 will allow particles to spawn anywhere around the arc, and a value of 0.1 will only spawn particles at 10% intervals around the shape. \n",971],[" __Speed__ Set a value for the speed the emission position moves around the arc. Using the small black drop-down next to the value field, set this to __Constant__ for the value to always remain the same, or __Curve__ for the value to change over time. \n",971],["Texture Choose a texture to be used for tinting and discarding particles. ",971],["Clip Channel Select a channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color Affects Particles Multiply particle colors by the texture color. ",971],["Alpha Affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples, for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Use this checkbox to orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Edge",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Edge__ Emit particles from a line segment. The particles move in the emitter object’s upward (Y) direction. \n",971],["Radius The radius property is used to define the length of the edge. ",971],[" __Mode__ Define how Unity generates particles along the radius of the shape. When set to __Random__, Unity generates particles randomly along the radius. If using __Loop__, Unity generates particles sequentially along the radius of the shape, and loops back to the start at the end of each cycle. __Ping-Pong__ is the same as __Loop__, except each consecutive loop happens in the opposite direction to the last. Finally, __Burst Spread__ mode distributes particle generation evenly along the radius. This can be used to give you an even spread of particles, compared to the default randomized behavior, where particles may clump together unevenly. Burst Spread is best used with burst emissions. \n",971],[" __Spread__ T the discrete intervals along the radius where particles may be generated. For example, a value of 0 will allow particles to spawn anywhere along the radius, and a value of 0.1 will only spawn particles at 10% intervals along the radius. \n",971],[" __Speed__ The speed the emission position moves along the radius. Using the small black drop-down next to the value field, set this to __Constant__ for the value to always remain the same, or __Curve__ for the value to change over time. \n",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color Affects Particles Multiply particle colors by the texture color. ",971],["Alpha Affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align to Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Donut",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Donut__ Emit particles from a torus. The particles move outwards from the ring of the Torus. \n",971],["Radius The radius of the main donut ring. ",971],["Donus Radius The thickness of the outer donut ring. ",971],["Radius Thickness The proportion of the volume that emits particles. A value of 0 emits particles from the outer edge of the circle. A value of 1 emits particles from the entire area. Values in between will use a proportion of the area. ",971],["Arc The angular portion of a full circle that forms the emitter’s shape. ",971],[" Mode Define how Unity generates particles around the arc of the shape. When set to __Random__, Unity generates particles randomly around the arc. If using __Loop__, Unity generates particles sequentially around the arc of the shape, and loops back to the start at the end of each cycle. __Ping-Pong__ is the same as __Loop__, except each consecutive loop happens in the opposite direction to the last. Finally, __Burst Spread__ mode distributes particle generation evenly around the shape. This can be used to give you an even spread of particles, compared to the default randomized behavior, where particles may clump together unevenly. Burst Spread is best used with burst emissions. \n",971],[" Spread The discrete intervals around the arc where particles may be generated. For example, a value of 0 will allow particles to spawn anywhere around the arc, and a value of 0.1 will only spawn particles at 10% intervals around the shape. \n",971],[" Speed The speed the emission position moves around the arc. Using the small black drop-down next to the value field, set this to __Constant__ for the value to always remain the same, or __Curve__ for the value to change over time. \n",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color Affects Particles Multiply particle colors by the texture color. ",971],["Alpha Affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align To Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["Rectangle",971],["Property Function ",971],["Shape The shape of the emission volume. ",971],[" __Rectangle__ Emits particles from a rectangle. The particles move up from the rectangle. \n",971],["Texture A texture to be used for tinting and discarding particles. ",971],["Clip Channel A channel from the texture to be used for discarding particles. ",971],["Clip Threshold When mapping particles to positions on the texture, discard any whose pixel color falls below this threshold. ",971],["Color Affects Particles Multiply particle colors by the texture color. ",971],["Alpha Affects Particles Multiply particle alphas by the texture alpha. ",971],["Bilinear Filtering When reading the texture, combine 4 neighboring samples for smoother changes in particle color, regardless of the texture dimensions. ",971],["Position Apply an offset to the emitter shape used for spawning particles. ",971],["Rotation Rotate the emitter shape used for spawning particles. ",971],["Scale Change the size of the emitter shape used for spawning particles. ",971],["Align To Direction Orient particles based on their initial direction of travel. This can be useful if you want to simulate, for example, chunks of car paint flying off a car’s bodywork during a collision. If the orientation is not satisfactory, you can also override it by applying a Start Rotation value in the Main module. ",971],["Randomize Direction Blend particle directions towards a random direction. When set to 0, this setting has no effect. When set to 1, the particle direction is completely random. ",971],["Spherize Direction Blend particle directions towards a spherical direction, where they travel outwards from the center of their Transform. When set to 0, this setting has no effect. When set to 1, the particle direction points outwards from the center (behaving identically to when the Shape is set to Sphere). ",971],["Randomize Position Move particles by a random amount, up to the specified value. When this is set to 0, this setting has no effect. Any other value will apply some randomness to the spawning positions of the particles. ",971],["",971],["2018-11-02 ",971],["Functionality of Shape Module updated in Unity 2017.1 NewIn20171",971],["Texture tinting and selective discarding features (Clip Channel, Clip Threshold, Color affects particles, Alpha affects particles, Bilinear filtering) added to Shape Module in 2018.1 NewIn20181",971],["Rectangle emission shape added to Shape Module in 2018.1 NewIn20181",971],["Sprite and Sprite Renderer emission shape added to Particle System Shape Module in 2018.3 NewIn20183",971],["Size by Speed module",972],["This module allows you to create particles that change size according to their speed in distance units per second.",972],["Using the Size by Speed module",972],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Size by Speed module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",972],["Click GameObject > Effects > Particle System.",972],["In the Inspector, find the Particle System component.",972],["In the Particle System component, find the Size by Speed module fold-out.",972],["To the left of the fold-out header, enable the checkbox.",972],["API",972],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Size by Speed module API documentation.",972],["Properties",972],["Property Function ",972],["Separate Axes Control the particle size independently on each axis. ",972],["Size A curve defining the particle's size over a speed range. ",972],["Speed Range The low and high ends of the speed range to which the size curve is mapped (speeds outside the range will map to the end points of the curve). ",972],["Details",972],["Some situations will require particles which vary in size depending on their speed. For example, you would expect small pieces of debris to be accelerated more by an explosion than larger pieces. You can achieve effects like this using Size By Speed with a simple ramp curve that proportionally increases the speed as the size of the particle decreases. Note that this should not be used with the Limit Velocity Over Lifetime module, unless you want particles to change their size as they slow down.",972],["Speed Range specifies the range of values that the X (width), Y (height) and Z (depth) shapes apply to. The Speed Range is only applied when the size is in one of the curve modes. Fast particles will scale using the values at the right end of the curve, while slower particles will use values from the left side of the curve. For example, if you specify a Speed Range between 10 and 100:",972],["Speeds below 10 will set the Particle size corresponding with the left-most edge of the curve.",972],["Speeds above 100 will set the Particle size corresponding with the right-most edge of the curve.",972],["Speeds between 10 and 100 will set the Particle size determined by the point along the curve corresponding to the Speed. In this example, a Speed of 55 would set the size according to the midpoint of the curve.",972],["Non-uniform particle scaling",972],["You can specify how a particle’s width, height and depth size changes by speed independently. In the Size by Speed module, check the Separate Axes checkbox, then choose how the X (width), Y (height) and Z (depth) of the particle is affected by the speed of the particle. Remember that Z will only be used for Mesh particles.",972],["Size over Lifetime module",973],["Many effects involve a particle changing size according to a curve, which can be set in this module.",973],["Using the Size over Lifetime module",973],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Size over Lifetime module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",973],["Click GameObject > Effects > Particle System.",973],["In the Inspector, find the Particle System component.",973],["In the Particle System component, find the Size over Lifetime module fold-out.",973],["To the left of the fold-out header, enable the checkbox.",973],["API",973],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Size over Lifetime module API documentation.",973],["Properties",973],["Property Function ",973],["Separate Axes Control the particle size independently on each axis. ",973],["Size A curve which defines how the particle's size changes over its lifetime. ",973],["Details",973],["Some particles will typically change in size as they move away from the point of emission, such as those that represent gases, flames or smoke. For example, smoke will tend to disperse and occupy a larger volume over time. You can achieve this by setting the curve for the smoke particle to an upward ramp, increasing with the particle's age. You can also further enhance this effect using the Color Over Lifetime module to fade the smoke as it spreads.",973],["For fireballs created by burning fuel, the flame particles will tend to expand after emission but then fade and shrink as the fuel is used up and the flame dissipates. In this case, the curve would have a rising \"hump\" that rises and then falls back down to a smaller size.",973],["The values specified in the curves are multiplied by the Start Size to get the final particle size.",973],["Non-uniform particle scaling",973],["You can specify how a particle’s width, height and depth changes over lifetime independently. In the Size over Lifetime module, check the Separate Axes checkbox, then change the X (width), Y (height) and Z (depth). Remember that Z will only be used for Mesh particles.",973],["Sub Emitters module",974],["This module allows you to set up sub-emitters. These are additional particle emitters that are created at a particle's position at certain stages of its lifetime.",974],["Using the Sub Emitters module",974],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Sub Emitters module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",974],["Click GameObject > Effects > Particle System.",974],["In the Inspector, find the Particle System component.",974],["In the Particle System component, find the Sub Emitters module fold-out.",974],["To the left of the fold-out header, enable the checkbox.",974],["API",974],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Sub Emitters module API documentation.",974],["Properties",974],["Property Function ",974],["Sub Emitters Configure a list of sub-emitters and select their trigger condition as well as what properties they inherit from their parent particles. ",974],["Details",974],["Many types of particles produce effects at different stages of their lifetimes that can also be implemented using Particle Systems. For example, a bullet might be accompanied by a puff of smoke powder as it leaves the gun barrel, and a fireball might explode on impact. You can use sub-emitters to create effects like these.",974],["Sub-emitters are ordinary Particle System objects created in the Scene or from Prefabs. This means that sub-emitters can have sub-emitters of their own (this type of arrangement can be useful for complex effects like fireworks). However, it is very easy to generate an enormous number of particles using sub-emitters, which can be resource intensive.",974],["To trigger a sub-emitter, you can use these are the conditions:",974],["Birth: When the particles are created.",974],["Collision: When the particles collide with an object.",974],["Death: When the particles are destroyed.",974],["Trigger: When the particles interact with a Trigger collider.",974],["Manual: Only triggered when requested via script. See ParticleSystem.TriggerSubEmitter.",974],["Note that the Collision, Trigger, Death and Manual events can only use burst emission in the Emission module.",974],["Additionally, you can transfer properties from the parent particle to each newly created particle using the Inherit options. The transferrable properties are size, rotation, color and lifetime. To control how velocity is inherited, configure the Inherit Velocity module on the sub-emitter system.",974],["It is also possible to configure a probability that a sub-emitter event will trigger, by setting the Emit Probability property. A value of 1 guarantees that the event will trigger, whereas lower values reduce the probability.",974],["2018-03-28 ",974],["\"Trigger” and \"Manual” conditions added to conditions list in Sub Emitters Module in 2018.1 NewIn20181",974],["Emit Probabilily property added to particle Sub Emitters Module in 2018.3 NewIn20183",974],["Texture Sheet Animation module",975],["A particle’s graphic need not be a still image. This module lets you treat the Texture as a grid of separate sub-images that can be played back as frames of animation.",975],["Using the Texture Sheet Animation module",975],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Texture Sheet Animation module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",975],["Click GameObject > Effects > Particle System.",975],["In the Inspector, find the Particle System component.",975],["In the Particle System component, find the Texture Sheet Animation module fold-out.",975],["To the left of the fold-out header, enable the checkbox.",975],["API",975],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Texture Sheet Animation module API documentation.",975],["Grid mode properties",975],["Property Function ",975],["Mode popup Select Grid mode. ",975],["Tiles The number of tiles the Texture is divided into in the X (horizontal) and Y (vertical) directions. ",975],["Animation The Animation mode can be set to Whole Sheet or Single Row (that is, each row of the sheet represents a separate Animation sequence). ",975],["Time Mode Choose how the Particle System samples frames in the animation. ",975],["    Lifetime Sample frames using an Animation Curve over the lifetime of the particle. ",975],["    Speed Sample frames based on the speed of the particle. A speed range specifies the minimum and maximum speed range for the frame selection. ",975],["    FPS Sample frames based on the specified frames-per-second value. ",975],["Row Mode Make the Particle System choose a row from the Texture sheet to produce the animation. This property is only available when the Animation mode is set to Single Row. ",975],["    Custom Use a specific row of the Texture sheet for the animation. ",975],["    Random Randomly select a row for each particle when producing the animation. ",975],["    Mesh Index Select a row based on the Mesh index assigned to a particle. This is useful when you want to ensure that a particle using a particular Mesh also uses the same Texture. ",975],["Random Row Chooses a row from the sheet at random to produce the animation. This option is only available when Single Row is selected as the Animation mode. ",975],["Row Selects a particular row from the sheet to produce the animation This option is only available when Single Row mode is selected and Random Row is disabled. ",975],["Frame over Time A curve that specifies how the frame of animation increases as time progresses. ",975],["Start Frame Allows you to specify which frame the particle animation should start on (useful for randomly phasing the animation on each particle). ",975],["Cycles The number of times the animation sequence repeats over the particle’s lifetime. ",975],["Affected UV Channels Allows you to specify exactly which UV streams are affected by the Particle System. ",975],["Sprite mode properties",975],["Property Function ",975],["Mode popup Select Sprites mode. ",975],["Frame over Time A curve that specifies how the frame of animation increases as time progresses. ",975],["Start Frame Allows you to specify which frame the particle animation should start on (useful for randomly phasing the animation on each particle). ",975],["Cycles The number of times the animation sequence repeats over the particle’s lifetime. ",975],["Enabled UV Channels Allows you to specify exactly which UV streams are affected by the Particle System. ",975],["Details",975],["Particle animations are typically simpler and less detailed than character animations. In systems where the particles are visible individually, animations can be used to convey actions or movements. For example, flames may flicker and insects in a swarm might vibrate or shudder as if flapping their wings. In cases where the particles form a single, continuous entity like a cloud, animated particles can help add to the impression of energy and movement.",975],["You can use the Single Row mode to create separate animation sequences for particles and switch between animations from a script. This can be useful for creating variation or switching to a different animation after a collision. The Random Row option is highly effective as a way to break up conspicuous regularity in a particle system (for example, a group of flame objects that are all repeating the exact same flickering animation over and over again). This option can also be used with a single frame per row as a way to generate particles with random graphics. This can be used to break up regularity in a object like a cloud or to produce different types of debris or other objects from a single system. For example, a blunderbuss might fire out a cluster of nails, bolts, balls and other projectiles, or a car crash effect may result in springs, car paint, screws and other bits of metal being emitted.",975],["Use the Row Mode property to break up conspicuous regularity in a Particle System (for example, a group of GameObjects that all repeat an identical flickering animation over and over again). To generate particles with random graphics, use this property with a single frame per row. This is useful for breaking up regularity in a single system, such as cloud, or to produce different types of debris. For example, a gun might fire out a cluster of nails, bolts and other projectiles, or a car crash effect could emit springs, car paint, screws and other bits of metal.",975],["UV flipping is a great way to add more visual variety to your effects without needing to author additional textures.",975],["Selecting the Sprites option from the Mode dropdown allows you to define a list of Sprites to be displayed for each particle, instead of using a regular grid of frames on a texture. Using this mode allows you to take advantage of many of the features of Sprites, such as the Sprite Packer, custom pivots and different sizes per Sprite frame. The Sprite Packer can help you share materials between different Particle Systems, by atlasing your textures, which in turn can improve performance via Dynamic Batching. There are some limitations to be aware of with this mode. Most importantly, all Sprites attached to a Particle System must share the same texture. This can be achieved by using a Multiple Mode Sprite, or by using the Sprite Packer. If using custom pivot points for each Sprite, please note that you cannot blend between their frames, because the geometry will be different between each frame. Only simple Sprites are supported, not 9 slice. Also be aware that Mesh particles do not support custom pivots or varying Sprite sizes.",975],["",975],[" 2019-04-16 ",975],["Functionality of Texture Sheet Animation module changed in Unity 2017.1 NewIn20171",975],["Time Mode added to Particle System in Unity 2018.3 NewIn20183",975],["Row Mode added to Particle System in Unity 2019.1 NewIn20191",975],["Trails module",976],["Add trails to a percentage of your particles using this module. This module shares a number of properties with the Trail Renderer component, but offers the ability to easily attach Trails to particles, and to inherit various properties from the particles. Trails can be useful for a variety of effects, such as bullets, smoke, and magic visuals.",976],["Using the Trails module",976],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Trails module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",976],["Click GameObject > Effects > Particle System.",976],["In the Inspector, find the Particle System component.",976],["In the Particle System component, find the Trails module fold-out.",976],["To the left of the fold-out header, enable the checkbox.",976],["API",976],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Trails module API documentation.",976],["Properties",976],["Property: Function: ",976],["Mode Choose how trails are generated for the Particle System. - Particle mode creates an effect where each particle leaves a stationary trail in its path. - Ribbon mode create a ribbon of trails connecting each particle based on its age. ",976],["Ratio A value between 0 and 1, describing the proportion of particles that have a Trail assigned to them. Unity assigns trails randomly, so this value represents a probability. ",976],["Lifetime The lifetime of each vertex in the Trail, expressed as a multiplier of the lifetime of the particle it belongs to. When each new vertex is added to the Trail, it disappears after it has been in existence longer than its total lifetime. ",976],["Minimum Vertex Distance Define the distance a particle must travel before its Trail receives a new vertex. ",976],["World Space When enabled, Trail vertices do not move relative to the Particle System’s GameObject, even if using Local Simulation Space. Instead, the Trail vertices are dropped in the world, and ignore any movement of the Particle System. ",976],["Die With Particles If this box is checked, Trails vanish instantly when their particles die. If this box is not checked, the remaining Trail expires naturally based on its own remaining lifetime. ",976],["Ribbon Count Choose how many ribbons to render throughout the Particle System. A value of 1 creates a single ribbon connecting each particle. However, a value higher than 1 creates ribbons that connect every Nth particle. For example, when using a value of 2, there will be one ribbon connecting particles 1, 3, 5, and another ribbon connecting particles 2, 4, 6, and so on. The ordering of the particles is decided based on their age. ",976],["Split Sub Emitter Ribbons When enabled on a system that is being used as a sub-emitter, particles that were spawned from the same parent system particle share a ribbon. ",976],["Texture Mode Choose how textures are applied to Particle Trails. - Stretch mode stretches the texture along the entire length of the trail. - Tile repeats the texture every N units of distance. The repeat rate is controlled based on the Tiling parameters in the Material. - Repeat per Segment mode repeats the texture along the trail, repeating at a rate of once per trail segment. The repeat rate is controlled based on the Tiling parameters in the Material. - Distribute per Segment mode maps the texture once along the entire length of the trail, and assumes that all vertices are evenly spaced. ",976],["Size affects Width If enabled (the box is checked), the Trail width is multiplied by the particle size. ",976],["Size affects Lifetime If enabled (the box is checked), the Trail lifetime is multiplied by the particle size. ",976],["Inherit Particle Color If enabled (the box is checked), the Trail color is modulated by the particle color. ",976],["Color over Lifetime A curve to control the color of the entire Trail over the lifetime of the particle it is attached to. ",976],["Width over Trail A curve to control the width of the Trail over its length. ",976],["Color over Trail A curve to control the color of the Trail over its length. ",976],["Generate Lighting Data Enable this (check the box), to build the Trail geometry with Normals and Tangents included. This allows them to use Materials that use the scene lighting, for example via the Standard Shader, or by using a custom shader. ",976],["Shadow Bias Move the shadows along the direction of the light. This removes shadowing artifacts caused by approximating volumes with billboarded trail geometry. ",976],["Tips",976],["Use the Renderer Module to specify the Trail Material.",976],["Unity samples colors from the Color Gradient at each vertex, and linearly interpolates colors between each vertex,. Add more vertices to your Line Renderer to get a closer approximation of a detailed Color Gradient.",976],["2017-10-26 ",976],["Size affects Width, Size affects Lifetime, Color over Lifetime, Width over Trail, Color over Trail, and Generate Lighting Data added in Unity 2017.1NewIn20171",976],["Particle mode added in Unity 2017.3NewIn20173",976],["Triggers module",977],["The Built-in Particle System's Triggers module allows you to access and modify particles based on their interaction with one or more Colliders in the Scene. When you enable this module, the Particle System calls the OnParticleTrigger() callback on attached scripts, which you can use to access lists of particles depending on where they are in respect to the Colliders in the Scene.",977],["Using the Triggers module",977],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Triggers module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",977],["Click GameObject > Effects > Particle System.",977],["In the Inspector, find the Particle System component.",977],["In the Particle System component, find the Triggers module fold-out.",977],["To the left of the fold-out header, enable the checkbox.",977],["To begin, specify which Colliders in the Scene the particles can interact with. To do this, assign one or more Colliders to the Colliders list property. To increase the number of Colliders in the list, click the Add (+) button beneath the list of Colliders. To remove a Collider from the list, select the Collider and click the Remove (-) button. If you have not yet assigned a Collider to an index of the list, you can use the smaller Add (+) button, to the right of the empty entry, to create and assign a new Collider. This creates a new GameObject as a child of the Particle System and attaches a Sphere Collider to it, then assigns the Collider to the empty entry.",977],["After you add the Colliders, you can then specify what a particle does when it meets the criteria for passing a particular trigger event type. There are four event types that describe how a particle can interact with a Collider. They are:",977],["\nInside: A particle is inside a Collider's bounds.\n",977],["\nOutside: A particle is outside a Collider's bounds.\n",977],["\nEnter: A particle enters a Collider's bounds.\n",977],["\nExit: A particle exits a Collider's bounds.\n",977],["In the Inspector, there is a drop-down for each of these event types that lets you select what should happen to a particle if it passes the trigger event's conditions. The options are:",977],["\nCallback: Allows you to access the particle in the OnParticleTrigger() callback function.\n",977],["\nKill: Destroys the particle. You can not access the particle in the OnParticleTrigger() callback function.\n",977],["\nIgnore: Ignores the particle. You can not access the particle in the OnParticleTrigger() callback function.\n",977],["API",977],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Triggers module API documentation.",977],["Accessing particles within OnParticleTrigger()",977],["If you select Callback as the reaction to one of the trigger events, you can access the particles that fulfill the event condition from an attached script. To do this, you first need to add the OnParticleTrigger() function to an attached script. Inside this function, call the ParticlePhysicsExtensions.GetTriggerParticles() function to get the list of particles that fulfill the trigger event's criteria. This function takes a ParticleSystemTriggerEventType, which specifies the trigger event you want to get the particles for (Inside, Outside, Enter, or Exit), and a list of Particles which the function populates with the result. From the list, you can access, modify, or destroy any particle. The function can also take an optional parameter which outputs collision information, such as which Collider each particle triggered. The Collider Query Mode property controls what information is available through this parameter.",977],["For more information on the API and how to use it, see the below example.",977],["Properties",977],["Property Description ",977],["Inside Specifies the action the Particle System takes for particles every frame they are inside a Collider. The options are:• Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback• Kill: Destroys the particle.• Ignore: Ignores the particle. ",977],["Outside Specifies the action the Particle System takes for particles every frame they are outside a Collider. The options are:• Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback• Kill: Destroys the particle.• Ignore: Ignores the particle. ",977],["Enter Specifies the action the Particle System takes for particles in the frame they enter a Collider. The options are:• Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback• Kill: Destroys the particle.• Ignore: Ignores the particle. ",977],["Exit Specifies the action the Particle System takes for particles in the frame they exit a Collider. The options are:• Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback• Kill: Destroys the particle.• Ignore: Ignores the particle. ",977],["Collider Query Mode Specifies the method this Particle System uses to get information about the Colliders that particles interact with. This increases the resource intensity of processing the Triggers module so, if you do not need any extra collision information, set this property to Disabled. The options are:• Disabled: Does not get any information about which Collider each particle interacts with.• One: Gets information about the first Collider each particle interacts. If a particle interacts with multiple Colliders in the frame, this returns the first Collider in the Collider list the particle interacted with.• All: Gets information about every Collider each particle interacts with. ",977],["Radius Scale The particle’s Collider bounds. This allows you to match the particle's Collider bounds to the visual appearance of the particle more closely. This is useful if a particle is circular with a fade in its texture because the default particle Collider would be inside the trigger before the particle visually looks to be. Note that this setting does not change when the event actually triggers, but can delay or advance the visual effect of the trigger. • Enter 1 to keep the particle Colliders the same size and for the event to appear to happen as a particle touches the Collider.• Enter a value less than 1 to make the particle Colliders smaller and for the trigger to appear to happen after a particle penetrates the Collider • Enter a value greater than 1 to make the particle Colliders larger and for the trigger to appear to happen before a particle penetrates the Collider ",977],["Visualize Bounds Indicates whether to display the Collider bounds of each particle in the Scene view. Enable this property to display the Collider bounds and disable it to hide the Collider bounds. ",977],["",977],["Examples",977],["Interaction with a collider",977],["The example below causes particles to turn red as they enter the Collider's bounds, then turn green as they leave the Collider’s bounds.",977],["using UnityEngine;",977],["using System.Collections;",977],["using System.Collections.Generic;",977],["[ExecuteInEditMode]",977],["public class TriggerScript : MonoBehaviour",977],["ParticleSystem ps;",977],["// these lists are used to contain the particles which match",977],["// the trigger conditions each frame.",977],["List enter = new List();",977],["List exit = new List();",977],["void OnEnable()",977],["ps = GetComponent();",977],["void OnParticleTrigger()",977],["// get the particles which matched the trigger conditions this frame",977],["int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);",977],["int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);",977],["// iterate through the particles which entered the trigger and make them red",977],["for (int i = 0; i < numEnter; i++)",977],["ParticleSystem.Particle p = enter[i];",977],["p.startColor = new Color32(255, 0, 0, 255);",977],["enter[i] = p;",977],["// iterate through the particles which exited the trigger and make them green",977],["for (int i = 0; i < numExit; i++)",977],["ParticleSystem.Particle p = exit[i];",977],["p.startColor = new Color32(0, 255, 0, 255);",977],["exit[i] = p;",977],["// re-assign the modified particles back into the particle system",977],["ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);",977],["ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);",977],["See the images below for the result of this example:",977],["Interaction with multiple colliders",977],["The following example takes advantage of the additional collision data you can extract from the GetTriggerParticles() function. It causes particles inside the first Collider's bounds to turn red, inside the second Collider's bounds to turn blue, or inside both Colliders to turn green. It also turns particles white if they are not inside a Collider. For this example, Collider Query Mode is set to All.",977],["using UnityEngine;",977],["using System.Collections;",977],["using System.Collections.Generic;",977],["[ExecuteInEditMode]",977],["public class TriggerScript : MonoBehaviour",977],["void OnParticleTrigger()",977],["ParticleSystem ps = GetComponent();",977],["// particles",977],["List inside = new List();",977],["List exit = new List();",977],["// get",977],["int numInside = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside, out var insideData);",977],["int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);",977],["// iterate",977],["for (int i = 0; i < numInside; i++)",977],["ParticleSystem.Particle p = inside[i];",977],["if (insideData.GetColliderCount(i) == 1)",977],["if (insideData.GetCollider(i, 0) == ps.trigger.GetCollider(0))",977],["p.startColor = new Color32(255, 0, 0, 255);",977],["else",977],["p.startColor = new Color32(0, 0, 255, 255);",977],["else if (insideData.GetColliderCount(i) == 2)",977],["p.startColor = new Color32(0, 255, 0, 255);",977],["inside[i] = p;",977],["for (int i = 0; i < numExit; i++)",977],["ParticleSystem.Particle p = exit[i];",977],["p.startColor = new Color32(1, 1, 1, 255);",977],["exit[i] = p;",977],["// set",977],["ps.SetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);",977],["ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);",977],["See the following image for the result of this example:",977],["Using the Built-in Particle System",978],["The Built-in Particle System uses a component, so placing a Particle System in a Scene is a matter of adding a pre-made GameObject (menu: GameObject > Effects > Particle System) or adding the component to an existing GameObject (menu: Component > Effects > Particle System). Because the component is quite complicated, the Inspector is divided into a number of collapsible sub-sections or modules that each contain a group of related properties. Additionally, you can edit one or more systems at the same time using a separate Editor window accessed via the Open Editor button in the Inspector. See documentation on the Particle System component and individual Particle System modules to learn more.",978],["When a GameObject with a Particle System is selected, the Scene view contains a small Particle Effect panel, with some simple controls that are useful for visualising changes you make to the system's settings.",978],["The Playback Speed allows you to speed up or slow down the particle simulation, so you can quickly see how it looks at an advanced state. The Playback Time indicates the time elapsed since the system was started; this may be faster or slower than real time depending on the playback speed. The Particle Count indicates how many particles are currently in the system. The playback time can be moved backwards and forwards by clicking on the Playback Time label and dragging the mouse left and right. The buttons at the top of the panel can be used to pause and resume the simulation, or to stop it and reset to the initial state.",978],["",978],["Varying properties over time",978],["Many of the numeric properties of particles or even the whole Particle System can vary over time. Unity provides several different methods of specifying how this variation happens:",978],["Constant: The property's value is fixed throughout its lifetime.",978],["Curve: The value is specified by a curve/graph.",978],["Random Between Two Constants: Two constant values define the upper and lower bounds for the value; the actual value varies randomly over time between those bounds.",978],["Random Between Two Curves: Two curves define the upper and lower bounds of the value at a given point in its lifetime; the current value varies randomly between those bounds.",978],["When you set a property to Curve or Random Between Two Curves, the Particle System Curves editor appears at the bottom of the Inspector:",978],["To edit a curve, click and drag an end point or key to reshape the curve:",978],["Particle System curves are similar to Animation curves. For information on using curves, see the documentation on Editing Curves.",978],["The Particle System Curves editor has the following buttons:",978],["Optimize: Fits the curve into four or fewer keys to build a fast evaluator called a Polynomial, which is more efficient than reading the unoptimized curve.",978],["Remove: Deletes the selected curve.",978],["To edit the way in which the Particle System plays curves, click the cog next to a selected key and choose one of the following options:",978],["Loop: Plays the curve the specified number times over a particle's life. For example, if you make a curve that scales a particle's size up and down, you can tell it to loop multiple times, which causes the \"up and down\" animation to happen multiple times before the particle dies, instead of just once.",978],["Ping Pong: Similar to Loop, but plays the curve forwards then backwards in a continuous oscillation.",978],["Clamp: Limits particle queries that fall outside the curve time range to the first or last value of the curve.",978],["The Start Color property in the main module has the following options:",978],["Color: All particles start with this color throughout the lifetime of the Particle System. Particles can still change color during their lifetime.",978],["Gradient: The Particle System emits particles which start with the colour at the beginning of the gradient, and end at the colour at the end of the gradient. The gradient line represents the lifetime of the Particle System; the Particle System picks a color from the gradient at the point corresponding to the current age of the Particle System.",978],["Random Between Two Colors: The Particle System chooses a starting particle color from a random linear interpolation between the two given colors.",978],["Random Between Two Gradients: The Particle System chooses a color from each of the given gradients at the point corresponding to the current age of the system. The starting particle color is chosen as a random linear interpolation between the two chosen colors.",978],["Random Color: Similar to Gradient mode, where particles take their initial color from the defined Gradient. However, in this mode, the Particle System does not choose samples based on the age of the Particle System, but instead it selects them at random. This mode also works well with the Fixed Gradient Mode, which is inside the Gradient Editor. When enabled, you can select a predefined list of precise starting colors, and apply a probability to each color.",978],["Other color properties, such as Color over Lifetime, can use the Gradient or Random Between Two Gradients modes.",978],["To calculate the final particle color result, the Particle System multiplies color properties in various modules together per channel.",978],["When you set the Gradient color for particles, the Gradient Editor appears:",978],["Mode: Determines whether the particle color settings are blended or not.",978],["Color: Displays the color of the currently selected key in the Gradient. Use this to edit the color at that position of the Gradient.",978],["Location: Shows how far along on the Gradient the currently selected key is.",978],["Presets: Allows you to save Gradient settings. Click New to make the current set of values a Gradient preset.",978],["Color properties in various modules are multiplied together per channel to calculate the final particle color result.",978],["Animation bindings",978],["All particle properties are accessible by the Animation system, meaning you can keyframe them in and control them from your animations.",978],["To access the Particle System’s properties, there must be an Animator component attached to the Particle System’s GameObject. An Animation Controller and an Animation are also required.",978],["To animate a Particle System property, open the Animation Window with the GameObject containing the Animator and Particle System selected. Click Add Property to add properties.",978],["Scroll to the right to reveal the add controls.",978],["Note that for curves, you can only keyframe the overall curve multiplier, which can be found next to the curve editor in the Inspector.",978],["2019-04-16 ",978],["GameObject menu changed in Unity 4.6",978],["Particle System loop/ping-pong curve playing added in [2018.3] (https://docs.unity3d.com/2018.3/Documentation/Manual/30_search.html?q=newin20183) NewIn20183",978],["Velocity over Lifetime module",979],["The Velocity over Lifetime module allows you to control the velocity of particles over their lifetime.",979],["Using the Velocity over Lifetime module",979],["This module is part of the Particle System component. When you create a new Particle System GameObject, or add a Particle System component to an exiting GameObject, Unity adds the Velocity over Lifetime module to the Particle System. By default, Unity disables this module. To create a new Particle System and enable this module:",979],["Click GameObject > Effects > Particle System.",979],["In the Inspector, find the Particle System component.",979],["In the Particle System component, find the Velocity over Lifetime module fold-out.",979],["To the left of the fold-out header, enable the checkbox.",979],["API",979],["Since this module is part of the Particle System component, you access it through the ParticleSystem class. For information on how to access it and change values at runtime, see the Velocity over Lifetime module API documentation.",979],["Properties",979],["Property Function ",979],["Linear X, Y, Z Linear velocity of particles in the X, Y and Z axes. ",979],["Space Specifies whether the Linear X, Y, Z axes refer to local or world space. ",979],["Orbital X, Y, Z Orbital velocity of particles around the X, Y and Z axes. ",979],["Offset X, Y, Z The position of the center of orbit, for orbiting particles. ",979],["Radial Radial velocity of particles away from/towards the center position. ",979],["Speed Modifier Applies a multiplier to the speed of particles, along/around their current direction of travel. ",979],["Details",979],["To create particles that drift in a particular direction, use the Linear X, Y and Z curves.",979],["To create effects with particles that spin around a center position, use the Orbital velocity values. Additionally, you can propel particles towards or away from a center position using the Radial velocity values. You can define a custom center of rotation for each particle by using the Offset value.",979],["You can also use this module to adjust the speed of the particles in the Particle System without affecting their direction, by leaving all the above values at zero and only modifying the Speed Modifier value.",979],["2018-03-28 ",979],["Speed Modifier property added to Velocity over Lifetime module in 2017.3 NewIn20173",979],["Orbital XYZ, Offset XYZ and Radial properties added to Velocity over Lifetime module in 2018.1 NewIn20181",979],["Particle System vertex streams and Standard Shader support",980],["If you are comfortable writing your own Shaders, use this addition to the Renderer Module to configure your Particle Systems to pass a wider range of data into your custom Shaders.",980],["There are a number of built-in data streams to choose from, such as velocity, size and center position. Aside from the ability to create powerful custom Shaders, these streams allow a number of more general benefits:",980],["Use the Tangent stream to support normal mapped particles.",980],["You can remove Color and then add the Tangent UV2 and AnimBlend streams to use the Standard Shader on particles.",980],["To easily perform linear texture blending of flipbooks, add the UV2 and AnimBlend streams, and attach the Particles/Anim Alpha Blended Shader (see example screenshot below to see how to set this up).",980],["There are also two completely custom per-particle data streams (ParticleSystemVertexStreams.Custom1 and ParticleSystemVertexStreams.Custom2), which can be populated from script. Call SetCustomParticleData and GetCustomParticleData with your array of data to use them. There are two ways of using this:",980],["To drive custom behavior in scripts by attaching your own data to particles; for example, attaching a “health” value to each particle.",980],["To pass this data into a Shader by adding one of the two custom streams, in the same way you would send any other stream to your Shader (see ParticleSystemRenderer.EnableVertexStreams). To elaborate on the first example, maybe your custom health attribute could now also drive some kind of visual effect, as well as driving script-based game logic.",980],["When adding vertex streams, Unity will provide you with some information in brackets, next to each item, to help you read the correct data in your shader:",980],["Each item in brackets corresponds to a Vertex Shader input, which you should specify in your Shader. Here is the correct input structure for this configuration.",980],["struct appdata_t {",980],["float4 vertex : POSITION;",980],["float3 normal : NORMAL;",980],["fixed4 color : COLOR;",980],["float4 texcoords : TEXCOORD0;",980],["float texcoordBlend : TEXCOORD1;",980],["};",980],["Notice that both UV and UV2 are passed in different parts of TEXCOORD0, so we use a single declaration for both. To access each one in your shader, you would use the xy and zw swizzles. This allows you to pack your vertex data efficiently.",980],["Here is an example of an animated flip-book Shader. It uses the default inputs (Position, Normal, Color, UV), but also uses two additional streams for the second UV stream (UV2) and the flip-book frame information (AnimBlend).",980],["Shader \"Particles/Anim Alpha Blended\" {",980],["Properties {",980],["_TintColor (\"Tint Color\", Color) = (0.5,0.5,0.5,0.5)",980],["_MainTex (\"Particle Texture\", 2D) = \"white\" {}",980],["_InvFade (\"Soft Particles Factor\", Range(0.01,3.0)) = 1.0",980],["Category {",980],["Tags { \"Queue\"=\"Transparent\" \"IgnoreProjector\"=\"True\" \"RenderType\"=\"Transparent\" \"PreviewType\"=\"Plane\" }",980],["Blend SrcAlpha OneMinusSrcAlpha",980],["ColorMask RGB",980],["Cull Off Lighting Off ZWrite Off",980],["SubShader {",980],["Pass {",980],["CGPROGRAM",980],["pragma vertex vert",980],["pragma fragment frag",980],["pragma target 2.0",980],["pragma multi_compile_particles",980],["pragma multi_compile_fog",980],["include \"UnityCG.cginc\"",980],["sampler2D _MainTex;",980],["fixed4 _TintColor;",980],["struct appdata_t {",980],["float4 vertex : POSITION;",980],["fixed4 color : COLOR;",980],["float4 texcoords : TEXCOORD0;",980],["float texcoordBlend : TEXCOORD1;",980],["UNITY_VERTEX_INPUT_INSTANCE_ID",980],["};",980],["struct v2f {",980],["float4 vertex : SV_POSITION;",980],["fixed4 color : COLOR;",980],["float2 texcoord : TEXCOORD0;",980],["float2 texcoord2 : TEXCOORD1;",980],["fixed blend : TEXCOORD2;",980],["UNITY_FOG_COORDS(3)",980],["ifdef SOFTPARTICLES_ON",980],["float4 projPos : TEXCOORD4;",980],["endif",980],["UNITY_VERTEX_OUTPUT_STEREO",980],["};",980],["float4 MainTexST;",980],["v2f vert (appdata_t v)",980],["v2f o;",980],["UNITY_SETUP_INSTANCE_ID(v);",980],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);",980],["o.vertex = UnityObjectToClipPos(v.vertex);",980],["ifdef SOFTPARTICLES_ON",980],["o.projPos = ComputeScreenPos (o.vertex);",980],["COMPUTE_EYEDEPTH(o.projPos.z);",980],["endif",980],["o.color = v.color * _TintColor;",980],["o.texcoord = TRANSFORM_TEX(v.texcoords.xy,_MainTex);",980],["o.texcoord2 = TRANSFORM_TEX(v.texcoords.zw,_MainTex);",980],["o.blend = v.texcoordBlend;",980],["UNITY_TRANSFER_FOG(o,o.vertex);",980],["return o;",980],["sampler2D_float _CameraDepthTexture;",980],["float _InvFade;",980],["fixed4 frag (v2f i) : SV_Target",980],["ifdef SOFTPARTICLES_ON",980],["float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(CameraDepthTexture, UNITYPROJ_COORD(i.projPos)));",980],["float partZ = i.projPos.z;",980],["float fade = saturate (_InvFade * (sceneZ-partZ));",980],["i.color.a *= fade;",980],["endif",980],["fixed4 colA = tex2D(_MainTex, i.texcoord);",980],["fixed4 colB = tex2D(_MainTex, i.texcoord2);",980],["fixed4 col = 2.0f * i.color * lerp(colA, colB, i.blend);",980],["UNITY_APPLY_FOG(i.fogCoord, col);",980],["return col;",980],["ENDCG",980],["It’s also possible to use Surface Shaders with this system, although there are some extra things to be aware of:",980],["The input structure to your surface function is not the same as the input structure to the vertex Shader. You need to provide your own vertex Shader input structure. See below for an example, where it is called appdata_particles.",980],["When surface Shaders are built, there is automatic handling of variables whose names begin with certain tokens. The most notable one is uv. To prevent the automatic handling from causing problems here, be sure to give your UV inputs different names (for example, “texcoord”).",980],["Here is the same functionality as the first example, but in a Surface Shader:",980],["Shader \"Particles/Anim Alpha Blend Surface\" {",980],["Properties {",980],["_Color (\"Color\", Color) = (1,1,1,1)",980],["_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {}",980],["_Glossiness (\"Smoothness\", Range(0,1)) = 0.5",980],["_Metallic (\"Metallic\", Range(0,1)) = 0.0",980],["SubShader {",980],["Tags {\"Queue\"=\"Transparent\" \"RenderType\"=\"Transparent\"}",980],["Blend SrcAlpha OneMinusSrcAlpha",980],["ZWrite off",980],["LOD 200",980],["CGPROGRAM",980],["// Physically based Standard lighting model, and enable shadows on all light types",980],["pragma surface surf Standard alpha vertex:vert",980],["// Use shader model 3.0 target, to get nicer looking lighting",980],["pragma target 3.0",980],["sampler2D _MainTex;",980],["struct appdata_particles {",980],["float4 vertex : POSITION;",980],["float3 normal : NORMAL;",980],["float4 color : COLOR;",980],["float4 texcoords : TEXCOORD0;",980],["float texcoordBlend : TEXCOORD1;",980],["};",980],["struct Input {",980],["float2 uv_MainTex;",980],["float2 texcoord1;",980],["float blend;",980],["float4 color;",980],["};",980],["void vert(inout appdata_particles v, out Input o) {",980],["UNITY_INITIALIZE_OUTPUT(Input,o);",980],["o.uv_MainTex = v.texcoords.xy;",980],["o.texcoord1 = v.texcoords.zw;",980],["o.blend = v.texcoordBlend;",980],["o.color = v.color;",980],["half _Glossiness;",980],["half _Metallic;",980],["fixed4 _Color;",980],["void surf (Input IN, inout SurfaceOutputStandard o) {",980],["fixed4 colA = tex2D(MainTex, IN.uvMainTex);",980],["fixed4 colB = tex2D(_MainTex, IN.texcoord1);",980],["fixed4 c = 2.0f * IN.color * lerp(colA, colB, IN.blend) * _Color;",980],["o.Albedo = c.rgb;",980],["// Metallic and smoothness come from slider variables",980],["o.Metallic = _Metallic;",980],["o.Smoothness = _Glossiness;",980],["o.Alpha = c.a;",980],["ENDCG",980],["FallBack \"Diffuse\"",980],["2017-05-15 ",980],["Perforce Integration",981],["For more information on Perforce, visit www.perforce.com.",981],["Setting up Perforce",981],["Follow the setup process described in the Version Control documentation. See Perforce documentation if you encounter any problems.",981],["Note: If your Perforce workspace has multi-factor authentication enabled you will first need to login through the command line using p4 login2 or by using a visual client like P4V to be able to login in the Unity Editor as well.",981],["Working offline with Perforce",981],["Only use this if you know how to work offline in Perforce without a Sandbox. Refer to the Perforce documentation for further information.",981],["Troubleshooting",981],["If Unity cannot commit your changes to Perforce (for example, if the server is down, or you experience licensing issues), your changes are stored in a separate changeset. If the console doesn't list any info about the issue, you can use the P4V client for Perforce to submit this changeset to see the exact error message.",981],["You cannot submit changes if you are sharing a workspace with another user. A workspace should be dedicated to one user only.",981],["Automatic revert of unchanged files on submit",981],["It's possible to configure Perforce to revert unchanged files on submit. To do this in P4V, select Connection > Edit Current Workspace, view the Advanced tab and set the value of On submit to Revert unchanged files.",981],["Disabling garbage collection",982],["You can use the GarbageCollector.GCMode to disable garbage collection at run time. This prevents CPU spikes, but the memory usage of your application never decreases, because the garbage collector doesn't collect objects that no longer have any references.",982],["Warning:** Disabling the garbage collector requires careful memory management. If you don't manage memory carefully, the managed heap continuously expands until your application runs out of memory, and the operating system shuts it down.",982],["You can use the following APIs to fine-tune control over the automatic garbage collector:",982],["System.GC.Collect: Performs a full, blocking garbage collection.",982],["GarbageCollector.Mode.Disabled: Fully disables the garbage collector. Using System.Gc.Collect in this mode has no effect.",982],["GarbageCollector.Mode.Manual: Disables automatic invocations of the garbage collector, but you can still use System.GC.Collect to run a full collection.",982],["GarbageCollection.CollectIncremental: Runs the garbage collector incrementally.",982],["You should only disable garbage collection during short, performance-critical parts of your application, when you are able to calculate and control how much memory you need to allocate. You should immediately enable the garbage collector afterward, and profile your project often to ensure that you don’t trigger additional managed allocation which might cause the managed heap to get too big.",982],["When you disable the garbage collector, it doesn't stop your application to perform a garbage collection. Calling System.GC.Collect has no effect and doesn't start a collection. To avoid increased memory usage over time, you must take care when managing memory. Ideally, you should allocate all memory before you disable the garbage collector and avoid additional allocations while it is disabled.",982],["It’s best practice to only disable the garbage collector for long-lived allocations. For example, you might want to allocate all required memory for a level of your game before it loads, and then disable the garbage collector to avoid performance overhead during the level. After the level is completed and all memory is released, you can then enable the garbage collector again and use System.GC.Collect to reclaim memory before loading the next level.",982],["For more details on how to enable and disable garbage collection at run time, see the GarbageCollector Scripting API page.",982],["Garbage collection best practices",983],["Garbage collection is automatic, but the process requires a significant amount of CPU time.",983],["C#’s automatic memory management reduces the risk of memory leaks and other programming errors, in comparison to other programming languages like C++, where you must manually track and free all the memory you allocate.",983],["Automatic memory management allows you to write code quickly and easily, and with few errors. However, this convenience might have performance implications. To optimize your code for performance, you must avoid situations where your application triggers the garbage collector a lot. This section outlines some common issues and workflows that affect when your application triggers the garbage collector.",983],["",983],["Temporary allocations",983],["It's common for an application to allocate temporary data to the managed heap in each frame; however, this can affect the performance of the application. For example:",983],["If a program allocates one kilobyte (1KB) of temporary memory each frame, and it runs at 60 frames per second, then it must allocate 60 kilobytes of temporary memory per second. Over the course of a minute, this adds up to 3.6 megabytes of memory available to the garbage collector.",983],["Invoking the garbage collector once per second has a negative effect on performance. If the garbage collector only runs once per minute, it has to clean up 3.6 megabytes spread across thousands of individual allocations, which might result in significant garbage collection times.",983],["Loading operations have an impact on performance. If your application generates a lot of temporary objects during a heavy asset-loading operation, and Unity references those objects until the operation completes, then the garbage collector can't release those temporary objects. This means that the managed heap needs to expand, even though Unity releases a lot of the objects that it contains a short time later.",983],["To get around this, you should try to reduce the amount of frequently managed heap allocations as possible: ideally to 0 bytes per frame, or as close to zero as you can get.",983],["",983],["Reusable object pools",983],["There are a lot of cases where you can reduce the number of times that your application creates and destroys objects, to avoid generating garbage. There are certain types of objects in games, such as projectiles, which might appear over and over again even though only a small number are ever in play at once. In cases like this, you can reuse the objects, rather than destroy old ones and replace them with new ones.",983],["For example, it’s not optimal to instantiate a new projectile object from a Prefab every time one is fired. Instead, you can calculate the maximum number of projectiles that could ever exist simultaneously during gameplay, and instantiate an array of objects of the correct size when the game first enters the gameplay scene. To do this:",983],["Start with all the projectile GameObjects set to being inactive.",983],["When a projectile is fired, search through the array to find the first inactive projectile in the array, move it to the required position and set the GameObject to be active.",983],["When the projectile is destroyed, set the GameObject to inactive again.",983],["You can use the ObjectPool class, which provides an implementation of this reusable object pool technique.",983],["The code below shows a simple implementation of a stack-based object pool. You might find it useful to refer to if you’re using an older version of Unity which doesn’t contain the ObjectPool API, or if you’d like to see an example of how a custom object pool might be implemented.",983],["```lang-csharp",983],["using System.Collections.Generic;",983],["using UnityEngine;",983],["public class ExampleObjectPool : MonoBehaviour {",983],["public GameObject PrefabToPool;",983],["public int MaxPoolSize = 10;",983],["private Stack inactiveObjects = new Stack();",983],["void Start() {",983],["if (PrefabToPool != null) {",983],["for (int i = 0; i < MaxPoolSize; ++i) {",983],["var newObj = Instantiate(PrefabToPool);",983],["newObj.SetActive(false);",983],["inactiveObjects.Push(newObj);",983],["public GameObject GetObjectFromPool() {",983],["while (inactiveObjects.Count > 0) {",983],["var obj = inactiveObjects.Pop();",983],["if (obj != null) {",983],["obj.SetActive(true);",983],["return obj;",983],["else {",983],["Debug.LogWarning(\"Found a null object in the pool. Has some code outside the pool destroyed it?\");",983],["Debug.LogError(\"All pooled objects are already in use or have been destroyed\");",983],["return null;",983],["public void ReturnObjectToPool(GameObject objectToDeactivate) {",983],["if (objectToDeactivate != null) {",983],["objectToDeactivate.SetActive(false);",983],["inactiveObjects.Push(objectToDeactivate);",983],["",983],["Repeated string concatenation",983],["Strings in C# are immutable reference types. A reference type means that Unity allocates them on the managed heap and are subject to garbage collection. Immutable means that once a string has been created, it can’t be changed; any attempt to modify the string results in an entirely new string. For this reason, you should avoid creating temporary strings wherever possible.",983],["Consider the following example code, which combines an array of strings into a single string. Every time a new string is added inside the loop, the previous contents of the result variable become redundant, and the code allocates a whole new string.",983],["```lang-csharp",983],["// Bad C# script example: repeated string concatenations create lots of",983],["// temporary strings.",983],["using UnityEngine;",983],["public class ExampleScript : MonoBehaviour {",983],["string ConcatExample(string[] stringArray) {",983],["string result = \"\";",983],["for (int i = 0; i < stringArray.Length; i++) {",983],["result += stringArray[i];",983],["return result;",983],["If the input stringArray contains { “A”, “B”, “C”, “D”, “E” }, this method generates storage on the heap for the following strings:",983],["“A”",983],["“AB”",983],["“ABC”",983],["“ABCD”",983],["“ABCDE”",983],["In this example, you only need the final string, and the others are redundant allocations. The more items that there are in the input array, the more strings this method generates, each longer than the last.",983],["If you need to concatenate a lot of strings together then you should use Mono library’s System.Text.StringBuilder class. An improved version of the script above looks like this:",983],["```lang-csharp",983],["// Good C# script example: StringBuilder avoids creating temporary strings,",983],["// and only allocates heap memory for the final result string.",983],["using UnityEngine;",983],["using System.Text;",983],["public class ExampleScript : MonoBehaviour {",983],["private StringBuilder _sb = new StringBuilder(16);",983],["string ConcatExample(string[] stringArray) {",983],["_sb.Clear();",983],["for (int i = 0; i < stringArray.Length; i++) {",983],["_sb.Append(stringArray[i]);",983],["return _sb.ToString();",983],["A repeated concatenation doesn’t decrease performance too much unless it's called frequently, like on every frame update. The following example allocates new strings each time Update is called, and generates a continuous stream of objects that garbage collector must handle:",983],["```lang-csharp",983],["// Bad C# script example: Converting the score value to a string every frame",983],["// and concatenating it with “Score: “ generates strings every frame.",983],["using UnityEngine;",983],["using UnityEngine.UI;",983],["public class ExampleScript : MonoBehaviour {",983],["public Text scoreBoard;",983],["public int score;",983],["void Update() {",983],["string scoreText = \"Score: \" + score.ToString();",983],["scoreBoard.text = scoreText;",983],["To prevent this continuous requirement for garbage collection, you can configure the code so that the text only updates when the score changes:",983],["```lang-csharp",983],["// Better C# script example: the score conversion is only performed when the",983],["// score has changed",983],["using UnityEngine;",983],["using UnityEngine.UI;",983],["public class ExampleScript : MonoBehaviour {",983],["public Text scoreBoard;",983],["public string scoreText;",983],["public int score;",983],["public int oldScore;",983],["void Update() {",983],["if (score != oldScore) {",983],["scoreText = \"Score: \" + score.ToString();",983],["scoreBoard.text = scoreText;",983],["oldScore = score;",983],["To improve this further, you can store the score title (the part that says “Score: ”) and the score display in two different UI.Text objects, which means that there is no need for string concatenation. The code must still convert the score value into a string, but this is an improvement on the previous versions:",983],["```lang-csharp",983],["// Best C# script example: the score conversion is only performed when the",983],["// score has changed, and the string concatenation has been removed",983],["using UnityEngine;",983],["using UnityEngine.UI;",983],["public class ExampleScript : MonoBehaviour {",983],["public Text scoreBoardTitle;",983],["public Text scoreBoardDisplay;",983],["public string scoreText;",983],["public int score;",983],["public int oldScore;",983],["void Start() {",983],["scoreBoardTitle.text = \"Score: \";",983],["void Update() {",983],["if (score != oldScore) {",983],["scoreText = score.ToString();",983],["scoreBoardDisplay.text = scoreText;",983],["oldScore = score;",983],["",983],["Method returning an array value",983],["Sometimes it might be convenient to write a method that creates a new array, fills the array with values and then returns it. However, if this method is called repeatedly, then new memory gets allocated each time.",983],["The following example code shows an example of a method which creates an array every time it’s called:",983],["```lang-csharp",983],["// Bad C# script example: Every time the RandomList method is called it",983],["// allocates a new array",983],["using UnityEngine;",983],["using System.Collections;",983],["public class ExampleScript : MonoBehaviour {",983],["float[] RandomList(int numElements) {",983],["var result = new float[numElements];",983],["for (int i = 0; i < numElements; i++) {",983],["result[i] = Random.value;",983],["return result;",983],["One way you can avoid allocating memory every time is to make use of the fact that an array is a reference type. You can modify an array that's passed into a method as a parameter, and the results remain after the method returns. To do this, you can configure the example code as follows:",983],["```lang-csharp",983],["// Good C# script example: This version of method is passed an array to fill",983],["// with random values. The array can be cached and re-used to avoid repeated",983],["// temporary allocations",983],["using UnityEngine;",983],["using System.Collections;",983],["public class ExampleScript : MonoBehaviour {",983],["void RandomList(float[] arrayToFill) {",983],["for (int i = 0; i < arrayToFill.Length; i++) {",983],["arrayToFill[i] = Random.value;",983],["This code replaces the existing contents of the array with new values. This workflow requires the calling code to do the initial allocation of the array, but the function doesn't generate any new garbage when it's called. The array can then be re-used and re-filled with random numbers the next time this method is called without any new allocations on the managed heap.",983],["",983],["Collection and array reuse",983],["When you use arrays or classes from the System.Collection namespace (for example, Lists or Dictionaries), it’s efficient to reuse or pool the allocated collection or array. Collection classes expose a Clear method, which eliminates a collection’s values but doesn't release the memory allocated to the collection.",983],["This is useful if you want to allocate temporary “helper” collections for complex computations. The following code example demonstrates this:",983],["```lang-csharp",983],["// Bad C# script example. This Update method allocates a new List every frame.",983],["void Update() {",983],["List nearestNeighbors = new List();",983],["findDistancesToNearestNeighbors(nearestNeighbors);",983],["nearestNeighbors.Sort();",983],["// … use the sorted list somehow …",983],["This example code allocates the nearestNeighbors List once per frame to collect a set of data points.",983],["You can hoist this List out of the method and into the containing class, so that your code doesn’t need to allocate a new List each frame:",983],["```lang-csharp",983],["// Good C# script example. This method re-uses the same List every frame.",983],["List m_NearestNeighbors = new List();",983],["void Update() {",983],["m_NearestNeighbors.Clear();",983],["findDistancesToNearestNeighbors(NearestNeighbors);",983],["m_NearestNeighbors.Sort();",983],["// … use the sorted list somehow …",983],["This example code retains and reuses the List’s memory across multiple frames. The code only allocates new memory when the List needs to expand.",983],["",983],["Closures and anonymous methods",983],["In general, you should avoid closures in C# whenever possible. You should minimize the use of anonymous methods and method references in performance-sensitive code, and especially in code that executes on a per-frame basis.",983],["Method references in C# are reference types, so they're allocated on the heap. This means that if you pass a method reference as an argument, it's easy to create temporary allocations. This allocation happens regardless of whether the method you pass is an anonymous method or a predefined one.",983],["Also, when you convert an anonymous method to a closure, the amount of memory required to pass the closure to a method increases a lot.",983],["Here’s a code sample in which a list of randomized numbers need to be sorted in a particular order. This uses an anonymous method to control the sorting order of the list, and the sorting doesn’t create any allocations.",983],["```lang-csharp",983],["// Good C# script example: using an anonymous method to sort a list.",983],["// This sorting method doesn’t create garbage",983],["List listOfNumbers = getListOfRandomNumbers();",983],["listOfNumbers.Sort( (x, y) =>",983],["(int)x.CompareTo((int)(y/2))",983],[");",983],["To make this snippet reusable, you might substitute the constant 2 for a variable in local scope:",983],["```lang-csharp",983],["// Bad C# script example: the anonymous method has become a closure,",983],["// and now allocates memory to store the value of desiredDivisor",983],["// every time it is called.",983],["List listOfNumbers = getListOfRandomNumbers();",983],["int desiredDivisor = getDesiredDivisor();",983],["listOfNumbers.Sort( (x, y) =>",983],["(int)x.CompareTo((int)(y/desiredDivisor))",983],[");",983],["The anonymous method now needs to access the state of a variable which is outside of its scope, and so the method has become a closure. The desiredDivisor variable must be passed into the closure so that the closure’s code can use it.",983],["To ensure that the correct values are passed in to the closure, C# generates an anonymous class that can retain the externally scoped variables that the closure needs. A copy of this class is instantiated when the closure is passed to the Sort method, and the copy is initialized with the value of the desiredDivisor integer.",983],["Executing the closure requires instantiating a copy of its generated class, and all classes are reference types in C#. For this reason, executing the closure requires allocation of an object on the managed heap.",983],["",983],["Boxing",983],["Boxing is one of the most common sources of unintended temporary memory allocations found in Unity projects. It happens when a value-typed variable gets automatically converted to a reference type. This most often happens when passing primitive value-typed variables (such as int and float) to object-typed methods. You should avoid boxing when writing C# code for Unity.",983],["In this example, the integer in x is boxed so that it can be passed to the object.Equals method, because the Equals method on an object requires that an object is passed to it.",983],["```lang-csharp",983],["int x = 1;",983],["object y = new object();",983],["y.Equals(x);",983],["C# IDEs and compilers don't issue warnings about boxing, even though boxing leads to unintended memory allocations. This is because C# assumes that small temporary allocations are efficiently handled by generational garbage collectors and allocation-size-sensitive memory pools.",983],["While Unity’s allocator does use different memory pools for small and large allocations, Unity’s garbage collector isn't generational, so it can't efficiently sweep out the small, frequent temporary allocations that boxing generates.",983],["Identifying boxing",983],["Boxing appears in CPU traces as calls to one of a few methods, depending on the scripting back end in use. These take one of the following forms, where <example class> is the name of a class or struct, and … is a number of arguments:",983],["```lang-csharp",983],["::Box(…)",983],["Box(…)",983],["_Box(…)",983],["To find boxing, you can also search the output of a decompiler or IL viewer, such as the IL viewer tool built into ReSharper or the dotPeek decompiler. The IL instruction is box.",983],["",983],["Array-valued Unity APIs",983],["A subtle cause of unintended allocation array is the repeated accessing of Unity APIs that return arrays. All Unity APIs that return arrays create a new copy of the array each time they're accessed. If your code accesses an array-valued Unity API more often than necessary, there is likely to be a detrimental impact on performance.",983],["As an example, the following code unnecessarily creates four copies of the vertices array per loop iteration. The allocations happen each time the .vertices property is accessed.",983],["```lang-csharp",983],["// Bad C# script example: this loop create 4 copies of the vertices array per iteration",983],["void Update() {",983],["for(int i = 0; i < mesh.vertices.Length; i++) {",983],["float x, y, z;",983],["x = mesh.vertices[i].x;",983],["y = mesh.vertices[i].y;",983],["z = mesh.vertices[i].z;",983],["// ...",983],["DoSomething(x, y, z);",983],["You can refactor this code into a single array allocation, regardless of the number of loop iterations. To do this, configure your code to capture the vertices array before the loop:",983],["```lang-csharp",983],["// Better C# script example: create one copy of the vertices array",983],["// and work with that",983],["void Update() {",983],["var vertices = mesh.vertices;",983],["for(int i = 0; i < vertices.Length; i++) {",983],["float x, y, z;",983],["x = vertices[i].x;",983],["y = vertices[i].y;",983],["z = vertices[i].z;",983],["// ...",983],["DoSomething(x, y, z);",983],["A better way of doing this is to maintain a List of vertices which is cached and re-used between frames, and then use Mesh.GetVertices to populate it when required.",983],["```lang-csharp",983],["// Best C# script example: create one copy of the vertices array",983],["// and work with that.",983],["List m_vertices = new List();",983],["void Update() {",983],["mesh.GetVertices(m_vertices);",983],["for(int i = 0; i < m_vertices.Length; i++) {",983],["float x, y, z;",983],["x = m_vertices[i].x;",983],["y = m_vertices[i].y;",983],["z = m_vertices[i].z;",983],["// ...",983],["DoSomething(x, y, z);",983],["While the CPU performance implications of accessing a property once isn't high, repeated accesses within tight loops create CPU performance hotspots. Repeated accesses expand the managed heap.",983],["This problem is common on mobile devices, because the Input.touches API behaves similarly to the above. It's also common for projects to contain code similar to the following, where an allocation occurs each time the .touches property is accessed.",983],["```lang-csharp",983],["// Bad C# script example: Input.touches returns an array every time it’s accessed",983],["for ( int i = 0; i < Input.touches.Length; i++ ) {",983],["Touch touch = Input.touches[i];",983],["// …",983],["To improve this, you can configure your code to hoist the array allocation out of the loop condition:",983],["```lang-csharp",983],["// Better C# script example: Input.touches is only accessed once here",983],["Touch[] touches = Input.touches;",983],["for ( int i = 0; i < touches.Length; i++ ) {",983],["Touch touch = touches[i];",983],["// …",983],["The following code example converts the previous example to the allocation-free Touch API:",983],["```lang-csharp",983],["// BEST C# script example: Input.touchCount and Input.GetTouch don’t allocate at all.",983],["int touchCount = Input.touchCount;",983],["for ( int i = 0; i < touchCount; i++ ) {",983],["Touch touch = Input.GetTouch(i);",983],["// …",983],["Note:** The property access (Input.touchCount) remains outside the loop condition, to save the CPU impact of invoking the property’s get method.",983],["Alternative non-allocating APIs",983],["Some Unity APIs have alternative versions that don't cause memory allocations. You should use these when possible. The following table shows a small selection of common allocating APIs and their non-allocating alternatives. The list isn't exhaustive, but should indicate the kind of APIs to watch out for.",983],["Allocating API Non-allocating API alternative ",983],["",983],["Physics.RaycastAll Physics.RaycastNonAlloc ",983],["Animator.parameters Animator.parameterCount and Animator.GetParameter ",983],["Renderer.sharedMaterials Renderer.GetSharedMaterials ",983],["",983],["Empty array reuse",983],["Some development teams prefer to return empty arrays instead of null when an array-valued method needs to return an empty set. This coding pattern is common in a lot of managed languages, particularly C# and Java.",983],["In general, when returning a zero-length array from a method, it's more efficient to return a pre-allocated static instance of the zero-length array than to repeatedly create empty arrays.",983],["Further resources",983],["Garbage collector overview",984],["Unity uses a garbage collector to reclaim memory from objects that your application and Unity are no longer using. When a script tries to make an allocation on the managed heap but there isn’t enough free heap memory to accommodate the allocation, Unity runs the garbage collector. When the garbage collector runs, it examines all objects in the heap, and marks for deletion any objects that your application no longer references. Unity then deletes the unreferenced objects, which frees up memory.",984],["The garbage collector handles subsequent requests in the same way until there is no free area large enough to allocate the required block size. In this situation, it’s unlikely that all allocated memory is still in use. Unity's scripting backends can only access a reference item on the heap as long as there are still reference variables that can locate it. If all references to a memory block are missing (if the reference variables have been reassigned or if they're local variables that are now out of scope) then the garbage collector can reallocate the memory it occupied.",984],["To determine which heap blocks are no longer in use, the garbage collector searches through all active reference variables and marks the blocks of memory that they refer to as “live.” At the end of the search, the garbage collector considers any space between the “live” blocks empty and marks them for use for subsequent allocations. The process of locating and freeing up unused memory is called garbage collection (GC).",984],["Note:** The garbage collector works differently in WebGL. For more information, refer to Garbage collection considerations.",984],["In Unity, the garbage collector has the following modes:",984],["Incremental garbage collection: Enabled by default (Project Settings > Player > Configuration), this mode spreads out the process of garbage collection over multiple frames.",984],["Incremental garbage collection disabled: If you disable the Incremental GC Player Setting, the garbage collector stops running your application to inspect and process objects on the heap.",984],["Disable automatic garbage collection: Use the GarbageCollector.GCMode API to take full control of when Unity should run the garbage collector.",984],["Tracking allocations",984],["Unity has the following tools to keep track of memory allocations:",984],["Unity Profiler’s CPU Usage module: Provides details of the GC Alloc per frame",984],["Unity Profiler’s Memory module: Provides high-level memory usage frame by frame",984],["The Memory Profiler package: A separate Unity package which provides detailed information about memory usage during specific frames in your application",984],["In the CPU Usage module, the Hierarchy view contains a GC Alloc column. This column displays the number of bytes that Unity allocated on the managed heap in a specific frame. It also displays the amount of memory that the garbage collector managed, and it includes memory that Unity might have allocated and reused in subsequent frames. This means that the sum of the GC Alloc over all frames doesn't total how much the managed memory grew in that time.",984],["To get the most accurate information, you should always profile your application on a development build on the target platform or device you want to build to. The Unity Editor works in a different way to a build, and this affects the profiling data; for example, the GetComponent method always allocates memory when it's executed in the Editor, but not in a built project.",984],["You can also use the Call Stacks mode in the Profiler to determine which method the allocations happen in. You can enable the full call stack traces for GC.Alloc samples, which then helps you determine where and when the garbage collector ran.",984],["Incremental garbage collection",985],["Incremental garbage collection (GC) spreads out the process of garbage collection over multiple frames. This is the default garbage collection behavior in Unity.",985],["Unity’s garbage collector uses the Boehm–Demers–Weiser garbage collector. By default, Unity uses it in incremental mode, which means that the garbage collector splits up its workload over multiple frames, instead of stopping the main CPU thread (stop-the-world garbage collection) to process all objects on the managed heap. This means that Unity makes shorter interruptions to your application’s execution, instead of one long interruption to let the garbage collector process the objects on the managed heap.",985],["Incremental mode doesn't make garbage collection faster overall, but because it distributes the workload over multiple frames, GC-related performance spikes are reduced. These interruptions are called GC spikes because they appear as large spikes in the Profiler window’s frame time graph.",985],["If you disable incremental mode (menu: Edit > Project Settings > Player > Other Settings > Configuration > Use Incremental GC), the garbage collector must examine the entire heap when it performs a collection pass. This is known as stop-the-world garbage collection, because whenever the garbage collector runs, it stops the main CPU thread. It only resumes execution once it has processed all objects on the managed heap, which might lead to GC spikes affecting the performance of your application. The garbage collector is also non-compacting, which means that Unity doesn't redistribute any objects in memory to close the gaps between objects.",985],["Important:** The WebGL platform doesn't support incremental garbage collection.",985],["When incremental garbage collection is disabled, a GC spike happens when Unity stops running your program code to perform garbage collection. This delay might last for hundreds of milliseconds, depending on how many allocations the garbage collector needs to process, and the platform that your application is running on.",985],["This is problematic for real-time applications such as games, because it's difficult for your application to sustain the consistent frame rate that smooth animation requires when the garbage collector suspends your application’s execution.",985],["Incremental garbage collection example",985],["The following screenshots from the Profiler illustrate how incremental garbage collection reduces frame rate problems:",985],["In the top profiling session, Incremental GC is enabled. The application has a consistent 60fps frame rate, because the garbage collector distributes the garbage collection operation over several frames, and uses a small time slice of each frame (the darker green fringe just above the yellow VSync trace).",985],["The bottom profiling session has Incremental GC disabled, and there is a clear GC spike visible. This spike interrupts the otherwise smooth 60fps frame rate, and pushes the frame in which garbage collection happens over the 16 millisecond limit required to maintain 60fps.",985],["If your application uses VSync or Application.targetFrameRate, Unity adjusts the time it allocates to garbage collection based on the remaining available frame time. This way, Unity can run the garbage collection in the time it would otherwise spend waiting, and can carry out garbage collection with a minimal performance impact.",985],["Note:** If you set the VSync Count to anything other than Don’t Sync (in your project’s Quality settings or with the Application.VSync property) or you enable the Application.targetFrameRate property, Unity automatically uses any idle time left at the end of a given frame for incremental garbage collection.",985],["To get more precise control over incremental garbage collection behavior, you can use the Scripting.GarbageCollector class. For example, if you don't want to use VSync or a target frame rate, you can calculate the amount of time available before the end of a frame yourself, and provide that time to the garbage collector to use.",985],["",985],["Disabling incremental garbage collection",985],["Incremental garbage collection might be problematic for your application, because when the garbage collector divides its work in this mode, it also divides the marking phase. The marking phase is the phase in which the garbage collector scans all managed objects to determine which objects are still in use, and which objects it can clean up.",985],["Dividing up the marking phase works well when most of the references between objects don’t change between slices of work. However, when an object reference changes, the garbage collector must scan those objects again in the next iteration. This means that too many changes can overwhelm the incremental garbage collector and create a situation where the marking phase never finishes because it always has more work to do. If this happens, the garbage collector falls back to doing a full, non-incremental collection.",985],["When Unity uses incremental garbage collection, it generates additional code (known as write barriers) to inform the garbage collector whenever a reference changes, so that it knows if it needs to rescan an object. This adds some overhead when changing references, which has a performance impact in managed code.",985],["To disable Incremental Garbage Collection, open the Player Settings window (Edit > Project Settings > Player > Configuration) and disable Use Incremental GC. Most Unity projects benefit from incremental garbage collection, especially if they suffer from garbage collection spikes, but you should always use the Profiler to verify that your application performs as you expect.",985],["Managed memory",986],["Unity’s managed memory system is a C# scripting environment based on the Mono or IL2CPP Virtual Machines (VMs). The benefit of the managed memory system is that it manages the release of memory, so you don’t need to manually request the release of memory through your code.",986],["Unity’s managed memory system uses a garbage collector and a managed heap to automatically free memory allocations when your scripts no longer hold any references to those allocations. This helps safeguard against memory leaks. Memory leaks occur when memory is allocated, the reference to it is lost, and then the memory is never freed because it needs a reference to it to free it.",986],["This memory management system also guards memory access, which means that you can’t access memory that has been freed, or that was never valid for your code to access. However, this memory management process impacts runtime performance, because allocating managed memory is time-consuming for the CPU. Garbage collection might also stop the CPU from doing other work until it completes.",986],["",986],["Value and reference types",986],["When a method is called, the scripting back end copies the values of its parameters to an area of memory reserved for that specific call, in a data structure called a call stack. The scripting back end can quickly copy data types that occupy a few bytes. However, it's common for objects, strings, and arrays to be much larger, and it's inefficient for the scripting back end to copy these types of data on a regular basis.",986],["All non-null reference-type objects and all boxed value-typed objects in managed code must be allocated on the managed heap.",986],["It’s important that you are familiar with value and reference types, so that you can effectively manage your code. For more information, see Microsoft’s documentation on value types, and reference types.",986],["Automatic memory management",986],["When an object is created, Unity allocates the memory required to store it from a central pool called the heap, which is a section of memory that your Unity project’s selected scripting runtime (Mono or IL2CPP) automatically manages. When an object is no longer in use, the memory it once occupied can be reclaimed and used for something else.",986],["Unity’s scripting back ends use a garbage collector to automatically manage your application’s memory, so that you don't need to allocate and release these blocks of memory with explicit method calls. Automatic memory management requires less coding effort than explicit allocation/release and reduces the potential for memory leaks.",986],["",986],["Managed heap overview",986],["The managed heap is a section of memory that your Unity project’s selected scripting runtime (Mono or IL2CPP) automatically manages.",986],["In the above diagram, the blue box represents a quantity of memory that Unity allocates to the managed heap. The white boxes within it represent data values that Unity stores within the managed heap’s memory space. When additional data values are needed, Unity allocates them free space from the managed heap (annotated A).",986],["Memory fragmentation and heap expansion",986],["The above diagram shows an example of memory fragmentation. When Unity releases an object, the memory that the object occupied is freed up. However, the free space doesn't become part of a single large pool of “free memory.”",986],["The objects on either side of the released object might still be in use. Because of this, the freed space is a “gap” between other segments of memory. Unity can only use this gap to store data of identical or lesser size than the released object.",986],["This situation is called memory fragmentation. This happens when there is a large amount of memory available in the heap, but it is only available in the “gaps” between objects. This means that even though there is enough total space for a large memory allocation, the managed heap can't find a large enough single block of contiguous memory to assign to the allocation.",986],["If a large object is allocated and there is insufficient contiguous free space to accommodate it, as illustrated above, the Unity memory manager performs two operations:",986],["First, the garbage collector runs, if it hasn't already done so. This attempts to free up enough space to fulfill the allocation request.",986],["If, after the garbage collector runs, there is still not enough contiguous space to fit the requested amount of memory, the heap must expand. The specific amount that the heap expands is platform-dependent; however, on most platforms, when the heap expands, it expands by double the amount of the previous expansion.",986],["Managed heap expansion considerations",986],["The unexpected expansion of the heap can be problematic. Unity’s garbage collection strategy tends to fragment memory more often. You should be aware of the following:",986],["Unity doesn't release the memory allocated to the managed heap when it expands regularly; instead, it retains the expanded heap, even if a large section of it is empty. This is to prevent the need to re-expand the heap if further large allocations occur.",986],["On most platforms, Unity eventually releases the memory that the empty portions of the managed heap uses back to the operating system. The interval at which this happens isn't guaranteed and is unreliable.",986],["Memory in Unity",987],["To ensure your application runs with no performance issues, it’s important to understand how Unity uses and allocates memory. This section of the documentation explains how memory works in Unity, and is intended for readers who want to understand how they can improve the memory performance of their application.",987],["Unity uses three memory management layers to handle memory in your application:",987],["Managed memory: A controlled memory layer that uses a managed heap and a garbage collector to automatically allocate and assign memory.",987],["C# unmanaged memory: A layer of memory management that you can use in conjunction with the Unity Collections namespace and package. This memory type is called \"unmanaged\" because it doesn't use a garbage collector to manage unused parts of memory.",987],["Native memory: C++ memory that Unity uses to run the engine. In most situations, this memory is inaccessible to Unity users, but it's useful to be aware of it if you want to fine-tune certain aspects of the performance of your application.",987],["",987],["Managed memory",987],["Mono and IL2CPP’s scripting virtual machines (VMs) implement the managed memory system, which is sometimes referred to as the scripting memory system. These VMs offer a controlled memory environment divided into the following different types:",987],["The managed heap**: A section of memory that the VM automatically controls with a garbage collector (GC). Because of this, the memory allocated on the managed heap is referred to as GC Allocation. The Profiler records any occurrence of such an allocation as a GC.Alloc sample.",987],["The scripting stack:** This is built up and unwound as your application steps into and out of any code scopes.",987],["Native VM memory:** Contains memory related to Unity’s scripting layer. Most of the time, you won’t need to manipulate the native VM memory, but it’s useful to know that it includes memory related to the executable code that your code generates, in particular around the use of generics, type meta data that Reflection uses, and the memory required to run the VM.",987],["Because the managed memory system uses VMs, it has a controlled environment that automatically tracks the references of allocations to manage their lifetime. This means that it's less likely for your application to release memory too early, while other code is trying to access it. It also means that you have some safeguard against memory leaks that happen when memory is inaccessible from code, or from unused memory piling up.",987],["Using managed memory in Unity is the easiest way to manage the memory in your application; but it has some disadvantages. The garbage collector is convenient to use, but it's also unpredictable in how it releases and allocates memory, which might lead to performance issues such as stuttering, which happens when the garbage collector has to stop to release and allocate memory. To work around this unpredictability, you can use the C# unmanaged memory layer.",987],["For more information on how managed memory works see the documentation on Managed memory.",987],["",987],["C# unmanaged memory",987],["The C# unmanaged memory layer allows you to access the native memory layer to fine-tune memory allocations, with the convenience of writing C# code.",987],["You can use the Unity.Collectionsnamespace (including NativeArray) in the Unity core API, and the data structures in the Unity Collections package to access C# unmanaged memory. If you use Unity’s C# Job system, or Burst, you must use C# unmanaged memory. For more information about this, see the documentation on the Job system and Burst.",987],["",987],["Native memory",987],["The Unity engine’s internal C/C++ core has its own memory management system, which is referred to as native memory. In most situations, you can't directly access or modify this memory type.",987],["Unity stores the scenes in your project, assets, graphics APIs, graphics drivers, subsystem and plug-in buffers, and allocations inside native memory, which means that you can indirectly access the native memory via Unity’s C# API. This means that you can manipulate the data for your application in a safe and easy way, without losing the benefits of the native and performant code that's at Unity’s native core.",987],["Most of the time, you won’t need to interact with Unity’s native memory, but you can see how it affects the performance of your application whenever you use the Profiler, through Profiler markers.",987],["Analyzing profiler traces",988],["When you profile your application, there are some common issues that you might come across. This page outlines how to investigate the cause of some common performance issues.",988],["Dissecting startup traces",988],["When looking at a trace of start-up times, there are two key methods to inspect: UnityInitApplicationGraphics and UnityLoadApplication. These two methods are the primary places where the configuration, assets, and code of a project can impact start-up time.",988],["Note:** The start-up time of your application differs from platform to platform. On most platforms, start up happens while the splash screen appears.",988],["In the above screenshot from an Instruments trace of an example Unity project running on an iOS device, in the platform-specific startUnity method, note the UnityInitApplicationGraphics and UnityLoadApplication methods.",988],["UnityInitApplicationGraphics performs a lot of internal work, such as setting up the graphics device and initializing a lot of Unity’s internal systems. It also initializes the Resources system by loading an index of all the files contained in the Resources system.",988],["Unity's Resource system includes every asset file in its data that's in the Resources folder in the Assets folder of your project. This includes any files in the Resources folder's children folders. As such, the time required to initialize the Resources system increases in correlation with the number of files within the Resources folders in your application's project.",988],["UnityLoadApplication contains methods that load and initialize the first Scene in the project. This includes deserializing and instantiating the data necessary to display the first Scene, such as compiling Shaders, uploading Textures and instantiating GameObjects. Also, Unity executes the Awake callbacks of all MonoBehaviours in the first Scene.",988],["These processes mean that if there is any long-running code in an Awake callback in the first Scene of a project, that code could be responsible for slowing down the project’s initial start-up time. Resolving this involves either eliminating the slow code, or executing it elsewhere in the application’s lifecycle.",988],["Dissecting run time traces",988],["For profiling traces captured after the initial startup time, the primary place of interest is the method PlayerLoop. This is Unity’s main loop, and the code within it runs once per frame.",988],["The above screenshot illustrates several of the most performance-impacting methods within PlayerLoop. Note: The names of methods within the PlayerLoop might vary between Unity versions.",988],["PlayerRender is the method that runs Unity’s rendering system. This includes culling objects, calculating dynamic batches, and submitting drawing instructions to the GPU. Any Image Effects or rendering-based script callbacks (OnWillRenderObject, for example) also run here. In general, this should be the top consumer of CPU time while the project is interactive.",988],["BaseBehaviourManager calls three templated versions of CommonUpdate. These invoke certain callbacks within the MonoBehaviours attached to active GameObjects in the current Scene:",988],["CommonUpdate<UpdateManager> calls Update callbacks",988],["CommonUpdate<LateUpdateManager> calls LateUpdate callbacks",988],["CommonUpdate<FixedUpdateManager> calls FixedUpdate if the physics system has ticked",988],["In general, BaseBehaviourManager::CommonUpdate<UpdateManager> is the most useful method family to inspect, because it's the entry point for most of the script code running within a Unity project.",988],["There are several other methods that are useful to inspect:",988],["UI::CanvasManager invokes several different callbacks if a project uses the UGUI system. This includes Unity UI’s batch computation and layout updates; the two operations that most often cause CanvasManager to appear in the Profiler.",988],["DelayedCallManager::Update runs coroutines.",988],["PhysicsManager::FixedUpdate runs the PhysX physics system. This primarily involves running PhysX’s internal code. The number of physics objects in the current Scene, such as Rigidbody and Collider influence PhysX's internal code. Physics-based callbacks also appear here: in particular, OnTriggerStay and OnCollisionStay.",988],["If the project is using 2D physics, that appears as a similar set of calls under Physics2DManager::FixedUpdate.",988],["Dissecting a script method",988],["When scripts are invoked on platforms cross-compiled with IL2CPP, look for trace lines that contain a ScriptingInvocation object. This is the point where Unity’s internal native code transitions into the script runtime to execute script code. Note: Technically, after Unity runs your C# code through IL2CPP, it also becomes native code. However, this cross-compiled code primarily executes methods via the IL2CPP runtime framework and doesn't resemble handwritten C++.",988],["In the above screenshot, the methods nested beneath the RuntimeInvoker_Void line are part of cross-compiled C# scripts that Unity executed once per frame.",988],["The trace lines' names are the name of the original class followed by an underscore and the name of the original method. In this example trace, you can see EventSystem.Update, PlayerShooting.Update and several other Update methods. These are the standard Unity Update callbacks found in most MonoBehaviours.",988],["You can expand these methods to see which methods within them consumed CPU time. This includes other script methods within the project, Unity APIs, and C# library code.",988],["The above trace shows that the StandaloneInputModule.Process method was ray casting through the entire UI once per frame. This method detects whether any touch events were hovering over, or activating any UI elements. The method iterating over all the UI elements, and testing whether the mouse’s position is within their bounding rectangle is resource-intensive.",988],["Asset loading",988],["You can also identify asset loading in CPU traces. The main method that indicates an Asset load is SerializedFile::ReadObject. This method connects a binary data stream from a file to Unity’s serialization system, which operates via a method named Transfer. The Transfer method is on all Asset types, such as Textures, MonoBehaviours and Particle Systems.",988],["The above screenshot is a trace of Unity loading a Scene. When it loads a Scene, Unity reads and deserializes all the Assets within the Scene, as denoted by the calls to various Transfer methods beneath SerializedFile::ReadObject.",988],["If you see a performance stutter during runtime and the performance trace shows that SerializedFile::ReadObject used a significant amount of time, it means that Asset loads reduced the frame rate. Note: SerializedFile::ReadObject usually appears on the main thread when the SceneManager, Resources or AssetBundle APIs request synchronous Asset loads.",988],["To resolve this performance stutter can you can make Asset loading asynchronous (which moves the heavy ReadObject call to a worker thread), or preload certain heavy Assets.",988],["Transfer calls also appear when Unity clones objects (denoted by the CloneObject method in a trace). If a call to Transfer appears beneath a CloneObject call, then Unity isn't loading the Asset from storage. Instead, Unity transfers the old object’s data to the new object. To do this, Unity serializes the old object and deserializes the resulting data as the new object.",988],["Profiling tools",989],["Profiling your application is the best way to measure its performance. You can use a variety of profiling tools to understand where there might be any issues with elements of your application including memory usage, CPU performance, GPU performance, and your custom scripts.",989],["Unity's profiling tools",989],["Unity has several profiling tools that you can use to measure the performance of your application:",989],["Unity Profiler: Measure the performance of the Unity Editor, your application in Play mode, or connect to a device running your application in development mode.",989],["Profiling Core package: Provides APIs that you can use to add contextual information to Unity Profiler captures",989],["Memory Profiler: A tool that provides in-depth memory performance analysis",989],["Profile Analyzer: Compare two profiling datasets together to analyze how your changes affect your application's performance.",989],["Frame Debugger: A tool that provides a way to measure the graphical performance of your application.",989],["Third party profiling tools",989],["Alongside the Unity Profiler, use platform-specific profilers to ensure that your application runs as expected. The following list provides some examples of available profiling tools. You can also use Unity's low level native plug-in Profiler API to export profiling data to third-party profiling tools.",989],["Android:**",989],["General Android GPU profiling: Google’s Android GPU Inspector, if you have a device that supports it.",989],["Arm CPU: Streamline from Arm Mobile Studio.",989],["Arm Mali GPU: Use the tools from Arm Mobile Studio for GPU and system profiling.",989],["Imagination PowerVR GPU: PVRTune for GPU profiling.",989],["Qualcomm chips: Snapdragon Profiler for GPU and system profiling.",989],["macOS and iOS**:",989],["PC:**",989],["These tools have the most utility on platforms that can use IL2CPP to produce a C++ version of the project. These native-code versions provide transparent call stacks and high-resolution method timings that are unavailable when running under Mono.",989],["Using Physical Cameras",990],["The camera component’s Physical Camera properties simulate real-world camera formats on a Unity camera. This is useful for importing camera information from 3D modeling applications that also mimic real-world cameras.",990],["Unity provides the same settings as those in most 3D modeling application’s physical camera settings. The two main properties that control what the camera sees are Focal Length and Sensor Size.",990],["\nFocal Length: The distance between the sensor and the camera lens. This determines the vertical field of view. When a Unity camera is in Physical Camera mode, changing the Focal Length also changes the field of view accordingly. Smaller focal lengths result in a larger field of view, and vice versa.\n",990],["\nSensor Size: The width and height of the sensor that captures the image. These determine the physical camera’s aspect ratio. You can choose from several preset sensor sizes that correspond to real-world camera formats, or set a custom size. When the sensor aspect ratio is different to the rendered aspect ratio, as set in the Game view, you can control how Unity fits the camera image to the rendered image (see information on Gate Fit, below).\n",990],["",990],["Lens Shifts",990],["Lens Shift** offsets the camera’s lens from its sensor horizontally and vertically. This allows you to change the focal center, and reposition a subject in the rendered frame, with little or no distortion.",990],["This technique is common in architectural photography. For example, if you want to capture a tall building, you could rotate the camera. But that distorts the image, making parallel lines appear to converge.",990],["If you shift the lens up instead of rotating the camera, you can change the composition of the image to include the top of the building, but parallel lines stay straight.",990],["Similarly, you can use a horizontal lens shift to capture wide objects without the distortion you might get by rotating the camera.",990],["Lens shifts and frustum obliqueness",990],["One side effect of a lens shift is that it makes the camera’s view frustum oblique. That means the angle between the camera’s center line and its frustum is smaller on one side than on the other.",990],["You can use this to create visual effects based on perspective. For example, in a racing game, you might want to keep the perspective low to the ground. A lens shift is a way of achieving an oblique frustum without scripting.",990],["For further information, see documentation on Using an Oblique Frustum.",990],[" ",990],["Gate Fit",990],["The Camera component’s Gate Fit property determines what happens when the Game view and the physical camera sensor have different aspect ratios.",990],["In Physical Camera mode, a camera has two “gates.”",990],["\nThe area rendered in the Game view, according to the resolution you set in the Aspect drop-down menu, is called the “resolution gate”.\n",990],["\nThe area that the camera actually sees, as defined by the Sensor Size properties, is called the “film gate”.\n",990],["When the two gates have different aspect ratios, Unity “fits” the resolution gate to the film gate. There are several fit modes, but they all yield one of three results.",990],["\nCropping: When the film gate exceeds the resolution gate after fitting, the Game view renders as much of the camera image as fits within its aspect ratio, and cuts off the rest.\n",990],["\nOverscanning: When the film gate exceeds the resolution gate after fitting, the Game view still performs rendering calculations for parts of the Scene that fall outside the camera's field of view.\n",990],["\nStretching: The Game view renders the full camera image, stretched either horizontally or vertically to fit its aspect ratio.\n",990],["To view the gates in the Scene view, and see how they fit together, select the camera and look at its view frustum. The resolution gate is the camera’s far clipping plane. The film gate is the second rectangle at the base of the frustum.",990],["Gate Fit Modes",990],["The Gate Fit mode you choose determines how Unity resizes the resolution gate (and consequently, the camera’s view frustum). The film gate always stays the same size.",990],["The following sections provide more details on each Gate Fit mode.",990],["Vertical",990],["When Gate Fit is set to Vertical, Unity fits the resolution gate to the height (Y axis) of the film gate. Any change you make to the sensor width (Sensor Size > X) has no effect on the rendered image.",990],["If the sensor aspect ratio is larger than the game view aspect ratio, Unity crops the rendered image at the sides:",990],["If the sensor aspect ratio is smaller than the game view aspect ratio, Unity overscans the rendered image at the sides:",990],["Horizontal",990],["When Gate Fit is set to Horizontal, Unity fits the resolution gate to the width (X axis) of the film gate. Any change you make to the sensor height (Sensor Size > Y) has no effect on the rendered image.",990],["If the sensor aspect ratio is larger than the Game view aspect ratio, Unity overscans the rendered image on the top and bottom:",990],["If the sensor aspect ratio is smaller than the game view aspect ratio, the rendered image is cropped on the top and bottom.",990],["None",990],["When Gate Fit is set to None, Unity fits the resolution gate to the width and height (X and Y axes) of the film gate. Unity stretches the rendered image to fit the Game view aspect ratio.",990],["Fill and Overscan",990],["When Gate Fit is set to Fill or Overscan, Unity automatically performs either a vertical or horizontal fit, depending on the resolution gate and film gate aspect ratios.",990],["\nFill fits the resolution gate to the film gate’s smaller axis, and crops the rest of the camera image.\n",990],["\nOverscan fits the resolution gate to the film gate’s larger axis and overscans the area outside of the camera image’s boundaries.\n",990],["2018-10-05 ",990],["Physical Camera options added in [2018.2] (https://docs.unity3d.com/2018.2/Documentation/Manual/30_search.html?q=newin20182) NewIn20182",990],["Gate Fit options added in Unity 2018.3",990],["Introduction to physics articulations",991],["A physics articulation is a set of Articulation Bodies organized in a logical tree, in which each parent-child relationship reflects mutually constrained relative motion.",991],["The main purpose of physics articulations is to provide a realistic physics behavior for commercial and industrial non-gaming applications that involve joints. For example, they make it a lot easier than the regular Joints to simulate robotic arms and kinematic chains.",991],["Articulation setup vs. regular joints",991],["In the most basic scenario to get two physical bodies linked with a single joint, you can either build an articulation or use regular joints, as described in the following table.",991],[" **Articulation setup** **Setup with regular joint** \n",991],["",991],["Hierarchy • GameObject + Articulation Body   • GameObject + Articulation Body • GameObject + Rigid Body• GameObject + Rigid Body + Joint ",991],["Relationship The GameObjects have a hierarchical relationship (parent-child).Note: The physics engine uses the Unity transform hierarchy to express the parent-child relationship. The GameObjects don’t necessarily have a hierarchical relationship.Note: In more advanced scenarios, you can freely simulate kinematic loops. ",991],["Physical bodies Both GameObjects have an Articulation Body component, which defines physical body properties (among others). Both GameObjects have a RigidBody component, which defines physical body properties (among others). ",991],["Joint The Articulation Body of the child GameObject holds the joint properties, where you can select the joint type. One of the GameObjects also has a Joint component. The joint properties depend on the type of Joint component that you add. ",991],["However, the overall resulting behavior is not the same in both cases, especially if you extend this principle to multiple physical bodies and joints.",991],["If you try to use regular joints to model kinematic chains such as in a rag doll, robotic arm, or mechanism with several concurrent hinges, the physics engine might encounter unsolvable scenarios and leave certain constraints unsatisfied. This might result in stuttery and unrealistic motion. Not only would the joints look peculiar, but it would also be impossible to use them for simulating a real device, impeding efforts to model or prototype industrial designs.",991],["Building an Articulation in Unity",991],["To build a physics articulation in Unity, you must add an Articulation Body component to each GameObject that the articulation consists of. Each Articulation Body component allows you to configure in one single place:",991],["\nThe physical body properties of the corresponding GameObject. Basically, its mass and the way it responds to the physics environment.\n",991],["\nThe type and properties of the joint that links the GameObject to its parent GameObject (except for the root of the articulation).\n",991],["The example below shows a simple physics articulation that involves 3 physical bodies and 2 joints:",991],["To build such an articulation in Unity:",991],["Create a linear hierarchy of 3 GameObjects.",991],["Add an Articulation Body component to each of these 3 GameObjects.",991],["Configure each Articulation Body component (according to the above graphic):",991],["GameObject Articulation Body component configuration ",991],["",991],["A (root) You can only define physical body properties for GameObject A. ",991],["B You can define:• Physical body properties for GameObject B.• The type and properties of the joint with GameObject A. ",991],["C You can define:• Physical body properties for GameObject C.• The type and properties of the joint with GameObject B. ",991],["Note:** By definition, an articulation can only have one root and is not allowed to have kinematic loops. If you need kinematic loops, use regular joints.",991],["Limitation:** If you want to build very long articulation chains, you must still be aware that Unity supports a maximum hierarchy depth of 64 GameObjects.",991],["Articulation Joint types and degrees of freedom",991],["There are four types of articulation joints that you can select and configure",991],["through an Articulation Body:",991],["\nFixed joint: sets a rigid, unbreakable and unstretchable link between bodies.\n",991],["\nPrismatic joint: prevents all motion except sliding along a particular axis.\n",991],["\nRevolute joint: allows rotation around a particular axis (like a hinge).\n",991],["\nSpherical joint: anatomical joint, which allows two swings and one twist.\n",991],["All locked degrees of freedom in an articulation are unbreakable and unstretchable by design. To achieve this, the physics engine uses the reduced coordinate space, where bodies only have coordinates about unlocked axes of motion.",991],["In contrast, for the regular iterative joints, the physics engine enforces the maximal coordinate space, which only guarantees the satisfaction of constraints if the solver is able to converge after a set of iterations.",991],["Physics articulation demo",991],["Check out Unity’s robotics demo project to experiment with a serial link robot arm with articulation joints.",991],["Multi-scene physics",992],["You can use multiple physics Scenes to manage or work around complex physics contexts. In particular, you can create and set up independent Scenes with physics properties that are different from those of the main scene.",992],["Use case examples",992],["You can instantiate multiple physics Scenes based on the main Scene in order to predict GameObject collisions and trajectories (as depicted above).",992],["You can isolate a very detailed character in its own physics Scene to more easily filter its collisions with elements of other physics Scenes.",992],["You can create pre-populated physics Scenes to be able to entirely destroy and reload them in order to improve determinism in your physics environment.",992],["Creating and using independent physics Scenes",992],["You can use Multi-Scene editing to create multiple Scenes in general (although you can also instantiate them by script). However, you have to use the Unity scripting API to use independent physics Scenes in runtime.",992],["More precisely, to get the expected physics results, you must write a script that takes care at least of the following tasks for each separate physics Scene:",992],["Load the Scene so that it’s independent from the main Scene.",992],["Get the Scene physics to set up the physics properties that you want to make different from the main Scene.",992],["Enable the Scene’s physics simulation – as it cannot auto-simulate.",992],["Physics 2D Reference",993],["Unity's physics system lets you handle 2D physics to make use of optimizations available with 2D. You can use the following physics 2D components with Unity:",993],["Topic Description ",993],[":-------------------- :----------------------- ",993],["Rigidbody 2D Learn how Rigidbody 2D works. ",993],["Collider 2D Understand the types of Collider 2D components available to use with Rigidbody 2D. ",993],["Physics Material 2D Control the friction and bounce between colliding 2D physics objects. ",993],["2D Joints Understand the types of 2D Joints available to use with 2D GameObjects. ",993],["Constant Force 2D Add constant forces to a Rigidbody 2D. ",993],["Effectors 2D Direct the forces of physics when GameObject colliders are in contact. ",993],["Additional resources:",993],["\nPhysics 2D Manager\n",993],["\nPhysics section\n",993],["Physics Debug window reference",994],["Use the Physics Debug window to configure and generate visual representations of 3D physics activity in a scene. These visualizations appear in the Scene view.",994],["To open the Physics Debug window in the Unity Editor, go to Window > Analysis > Physics Debugger.",994],["Physics Debugger inserts a Physics debug panel in the Scene view, and opens a Physics Debug window that contains the following tabs:",994],["Info**: Track Rigidbody and Articulation Body information. Center of Mass and Inertia Tensor visualization can also be found here.",994],["Filtering**: Determine which physics objects should be shown.",994],["Rendering**: Settings that define how Unity renders and displays the physics visualization.",994],["Contacts**: Select whether or not contacts should be visualized.",994],["Queries**: Select whether or not queries should be visualized.",994],["To revert the Physics Debug window back to its default settings, select Reset.",994],["For more information on improving physics performance in your project, see documentation on the Physics Profiler.",994],["",994],["Physics debug panel",994],["When the Physics Debug window is open in Unity, the Physics Debug panel appears in the Scene view. By default, it appears in the bottom-right corner of the Scene view; however, you can click and drag to move it around.",994],["Property Description ",994],["Collision Geometry Enable Collision Geometry to visualize collision information in the Scene view. Disable Collision Geometry to hide collision information in the Scene view. ",994],["Mouse Select Enable Mouse Select to enable mouse-over highlighting and mouse selection. This is useful if you have large GameObjects that obstruct each other in the visualization. ",994],["",994],["Info",994],["The Info tab contains data about any selected Rigidbody or ArticulationBody GameObjects. You can use this data to monitor the physics body’s behavior. You cannot edit the property values in this tab. You can modify them via script, but it is not recommended; in most cases, you should apply forces via the physics system to change these values instead.",994],["To keep a specific GameObject permanently docked in the Info tab, enable Lock for that GameObject. You can lock an infinite number of GameObjects. Use the Number of items per row property to arrange the Info tab in a way that is easiest for you to navigate.",994],["The Info tab always displays the following properties.",994],["Property Description ",994],["Number of items per row Define how many selected GameObjects to display horizontally in the top row of the Info tab. By default, if you select or lock multiple GameObjects, Unity displays them all vertically. However, you can arrange them horizontally instead. Use Number of items per row to define how many GameObjects to display next to each other on one horizontal row, up to a maximum of 10. If the number of selected or locked GameObjects exceeds this number, the more recently selected GameObjects appear on a new row underneath the first.GameObjects always appear in the Info tab in the order of selection. The default value for this property is 1. ",994],["Tracked objects Displays the total number of unique GameObjects that currently appear in the Info tab. This includes selected GameObjects and locked GameObjects. It does not include duplicates. ",994],["Clear locked objects Select Clear locked objects to disable Lock for all GameObjects. This removes any GameObjects from the Info tab that are not already selected in the Hierarchy window. ",994],["The Info tab displays the following properties when you select a GameObject in the Hierarchy that has a physics body (that is, a Rigidbody or an ArticulationBody).",994],["Property Description ",994],["GameObject Displays the name of the selected or locked GameObject that the following properties refer to. ",994],["Draw Gizmos for Select which physics property the Physics Debug should display a gizmo for. ",994],["\nCenter of Mass Display a gizmo that indicates the location of the physics body’s global center of mass (see World Center of Mass). \n",994],["\nInertia Tensor Display a gizmo that indicates the rotation and scale of the physics body’s Inertia Tensor (see Inertia Tensor). \n",994],["Lock Enable Lock to keep the GameObject in the Info tab even when it is not selected in the Hierarchy window. ",994],["Speed The speed at which the physics body is moving, measured in meters per second (m/s). ",994],["Velocity The velocity of the physics body along each vector, measured in meters per second (m/s). ",994],["Angular Velocity The velocity of the physics body along each vector, measured in degrees per second. ",994],["Inertia Tensor The inertia tensor of this physics body. Like mass, an inertia tensor defines how much force or torque is required to make a physics body move; however, while mass affects linear movement, inertia tensor affects rotational movement. The higher the Inertia Tensor value is, the more torque is required to make the physics body rotate on its axis. ",994],["Inertia Tensor Rotation The rotation of the inertia tensor. By default, Unity calculates inertia tensor rotation automatically, based on all of the colliders attached to the physics body. ",994],["Local Center of Mass The local location of the physics body’s center of mass along each vector. To change the center of mass via script, use centerOfMass. Unity can also change it based on collider placement. ",994],["World Center of Mass The global location of the physics body’s center of mass along each vector. To change the center of mass via script, use worldCenterOfMass. Unity can also change it based on collider placement. ",994],["Sleep State The sleep state of the physics body. Displays Awake if the physics body is awake and included in physics calculations. Displays Asleep if the physics body is asleep, and not included in physics calculations. ",994],["Sleep Threshold The energy threshold for the physics body, below which the physics engine stops including the body in physics updates. By default, this is the Sleep Threshold value defined in the global Physics settings. ",994],["Max Linear Velocity The maximum linear velocity the physics body can reach, defined by maxLinearVelocity. ",994],["Max Angular Velocity The maximum rotational velocity the physics body can reach, defined by maxAngularVelocity. ",994],["Solver Iterations The number of iterations that the physics system solver needs to perform on this physics body. ",994],["Solver Velocity Iteration The number of velocity iterations that the physics system solver needs to perform on this physics body. These bring the exit velocity of overlapping GameObjects closer to the correct value, taking into account the contact bounciness. ",994],["Body Index The Articulation Body index in the tree. This property only appears for Articulation Bodies. ",994],["",994],["Filtering",994],["The Filtering tab contains properties to configure which physics elements appear in the Physics Debug visualization.",994],["Property Description ",994],["Show Physics Scene Select which Physics Scenes to include in the visualization, if you have multiple physics scenes loaded at once. ",994],["Show Unity Scene Select which Unity Scenes to include in the visualization, if you have multiple scenes loaded at once. ",994],["Show Layers Select which Layers to display in the visualization. ",994],["Show Static Colliders Enable Show Static Colliders to display visualization for Colliders that have no Rigidbody component. Disable Show Static Colliders to remove visualization for Colliders that have no Rigidbody component. ",994],["Show Triggers Enable Show Triggers to display visualization for Colliders that are Triggers. Disable Show Triggers to remove visualization for Colliders that are Triggers. ",994],["Show Rigidbodies Enable Show Rigidbodies to display visualization for Rigidbody components. Disable Show Rigidbodies to remove visualization for Rigidbody components. ",994],["Show Kinematic Bodies Enable Show Kinematic Bodies to display visualization for Colliders that have Kinematic Rigidbody components. Disable Show Kinematic Bodies to remove visualization for Colliders that have Kinematic Rigidbody components. ",994],["Show Articulation Bodies Enable Show Articulation Bodies to display visualization for ArticulationBody components. Disable Show Articulation Bodies to remove visualization for ArticulationBody components. ",994],["Show Sleeping Bodies Enable Show Sleeping Bodies to display visualization for Colliders that have Sleeping Rigidbody components. Disable Show Sleeping Bodies to remove visualization for Colliders that have Sleeping Rigidbody components. ",994],["Collider Types Use these options to show specific Collider types in the physics visualization. ",994],["\nShow BoxColliders Enable Show BoxColliders to display visualization for Box Colliders. Disable Show BoxColliders to remove visualization for Box Colliders. \n",994],["\nShow SphereColliders Enable Show SphereColliders to display visualization for Sphere Colliders. Disable Show SphereColliders to remove visualization for Sphere Colliders. \n",994],["\nShow CapsuleColliders Enable Show CapsuleColliders to display visualization for Capsule Colliders. Disable Show CapsuleColliders to remove visualization for Capsule Colliders. \n",994],["\nShow MeshColliders (convex) Enable Show MeshColliders (convex) to display visualization for Mesh Colliders that have their Is Convex property enabled. Disable Show MeshColliders (convex) to remove visualization for Mesh Colliders that have their Is Convex property enabled. \n",994],["\nShow MeshColliders (concave) Enable Show MeshColliders (concave) to display visualization for Mesh Colliders that have their Is Convex property disabled. Disable Show MeshColliders (concave) to remove visualization for Mesh Colliders that have their Is Convex property disabled. \n",994],["\nShow TerrainColliders Enable Show TerrainColliders to display visualization for Terrain Colliders. Disable Show TerrainColliders to remove visualization for Terrain Colliders. \n",994],["\nShow None Select Show None to clear all filtering criteria and remove all Colliders from the visualization. \n",994],["\nShow All Select Show All to enable all filters and display visualization for all Colliders. \n",994],["",994],["Rendering",994],["The Rendering tab contains properties to configure how Unity renders and displays the physics visualization.",994],["Property Description ",994],["Static Colliders Select a color to represent static Colliders (Colliders with no Rigidbody component) in the visualization. ",994],["Triggers Select a color to represent Colliders that are also Triggers in the visualization. ",994],["Rigidbodies Select a color to represent Rigidbody components in the visualization. ",994],["Kinematic Bodies Select a color to represent kinematic Rigidbody components from the visualization. The physics system does not control kinematic Rigidbody components. ",994],["Articulation Bodies Select a color to represent Articulation Body components in the visualization. ",994],["Sleeping Bodies Select a color to represent Sleeping Rigidbody components (which are not currently engaging with the physics engine) from the visualization. ",994],["Variation Define to what extent the selected colors blend with a random color. Use this to visually separate Colliders by color, and to see the structure of the GameObjects. The value is between 0 and 1, and is set to 0.15 by default. ",994],["Transparency Set the transparency of drawn collision geometry in the visualization. The value is between 0 and 1, and is set to 0.5 by default. ",994],["Force Overdraw Enable Force Overdraw to display collider geometry on top of render geometry in the visualization. This is useful if render geometry is obscuring collider visualizations. Disable Force Overdraw to display collider geometry as it appears in relation to the camera. ",994],["View Distance Set the view distance of the visualization. This is set to 1000 by default. The value is measured in units, which are assumed to be 1m by default in Unity. ",994],["Terrain Tiles Max Set the maximum number of Terrain tiles in the visualization. This is set to 60 by default. ",994],["Gizmos settings Configure the Physics Debug gizmos that the Info tab controls. ",994],["\nConstant screen size Enable Constant screen size to make Physics Debug gizmos appear the same size on the screen at any distance from the camera. Disable Constant screen size to make the gizmos’ size scale with perspective. \n",994],["\nInertia Tensor scale Define the value by which to multiply the Inertia Tensor vector 3. This is useful if the Inertia Tensor is especially large; for example, if you need to visualize and observe the ratio of the vector's components. \n",994],["",994],["Contacts",994],["The Contacts tab contains properties to configure which contact data appears in the Physics Debug visualization, and the colors used for different types of contact.",994],["Property Description ",994],["Show Contacts Enable Show Contacts to display visualization for contacts. ",994],["\nShow All Contacts Enable Show All Contacts to display visualization for all collision contact data in the Physics Debug visualization. Disable Show All Contacts to limit the contact data that appears in the Physics Debug visualization. When Show All Contacts is disabled, only the following contacts appear in the visualization: - Colliders with MonoBehaviour scripts that receive messages from OnCollisionEnter, OnCollisionSay, or OnCollisionExit - Colliders that have the providesContact property set to true. \n",994],["\nShow Impulse Enable Show Impulse to display an arrow in the visualization that represents the contact point impulse. Disable Show Impulse to remove impulse visualization. \n",994],["\nShow Separation Enable Show Separation to display a segment and disc in the visualization that represents contact point separation. Disable Show Separation to remove separation visualization. \n",994],["\nUse Filtering settings Enable Use Filtering settings to use the settings in the Filtering tab to filter incoming contact visualization. Disable Use filtering settings to use only the settings in the Contacts tab. \n",994],["Contact colors Select the colors Unity should use in the visualization to indicate collision contact data. ",994],["Use varied colors Enable Use varied colors to use random colors for each contacting Collider pair. Disable Use varied colors to use the three colors defined in the following properties (Contact color, Contact separation color, and Contact impulse color). ",994],["Contact color Select a color to represent the contact. This appears in the visualization as an arrow that starts in the contact point and faces the contact normal. ",994],["Contact separation color Select a color to represent the contact separation. This appears in the visualization as a segment and disc. ",994],["Contact impulse color Select a color to represent the contact impulse. This appears in the visualization as an arrow that points in the normal direction, with a length equal to the length of the impulse. ",994],["",994],["Queries",994],["The Queries tab contains properties to configure which query types appear in the Physics Debug visualization, and how they appear. For information on PhysX queries, see the NVIDIA PhysX documentation on Scene Queries and Geometry Queries.",994],["Property Description ",994],["Show queries Enable Show queries to display visualization for physics queries. ",994],["Query color Select the color Unity should use in the visualization to indicate physics queries. ",994],["Show shapes Choose which query shapes to display in the Physics Debug visualization. Enable a query shape to display queries of that shape in the visualization. Disable a query shape to remove queries of that shape from the visualization. The options are: - Box-shape queries - Capsule-shape queries - Collider-shape queries - Ray-shape queries ",994],["Show types Choose which query types to display in the visualization. Enable a query type to display queries of that type in the visualization. Disable a query type to remove queries of that type from the visualization. For information on PhysX query types, see the NVIDIA PhysX documentation on Geometry Queries. The options are: - Overlap queries - Check queries - Cast queries ",994],["Max Queries Define the maximum number of queries that Physics Debug can visualize at once. This is set to 100 by default. ",994],["Show None Select Show None to clear all filtering criteria and hide all query shapes and types from the visualization. ",994],["Show All Select Show All to enable all filters and show all query shapes and types in the visualization. ",994],["Built-in 3D Physics",995],["Unity's built-in 3D physics engine is an integration of the Nvidia PhysX engine. You can use this engine in object-oriented 3D projects.",995],["This section includes the following topics.",995],["Topic Description ",995],[":-------------------- :----------------------- ",995],["Character control Configure physics-based character control for first-person and third-person characters. ",995],["Rigidbody physics Apply physics-based behavior to GameObjects. ",995],["Collision Use colliders to configure collisions between GameObjects. ",995],["Joints Apply and configure joints that connect GameObjects and simulate physical forces for pivoting, movement, and restriction. ",995],["Articulations Configure complex systems of rigid bodies and joints. ",995],["Ragdoll physics Configure ragdoll physics for characters. ",995],["Cloth Simulate fabric movement for character clothing and other in-application textiles. ",995],["Multi-scene physics Manage different physics contexts in one project with multiple dedicated physics scenes. ",995],["Physics",996],["Unity helps you simulate physics in your Project to ensure that the objects correctly accelerate and respond to collisions, gravity, and various other forces. Unity provides different physics engine implementations which you can use according to your Project needs: 3D, 2D, object-oriented, or data-oriented. This page provides the links to their documentation.",996],["You can achieve some basic physics goals with the user interface, but for more control over the simulation, you need some familiarity with C#. To develop your C# skills, see the Unity Learn Junior Programmer course.",996],["Built-in physics engines for object-oriented projects",996],["If your project is object-oriented, use the Unity's built-in physics engine that corresponds to your needs:",996],["Physics engine packages for data-oriented projects",996],["If your project uses Unity's Data-Oriented Technology Stack (DOTS), you need to install a dedicated DOTS physics package. The available packages are:",996],["Unity Physics package: the DOTS physics engine you need to install by default to simulate physics in any data-oriented project.",996],["Havok Physics for Unity package: an implementation of the Havok physics engine for Unity, to use as an extension of the Unity Physics package. Note that this package is subject to a specific licensing scheme.",996],["Additional information resources",996],["Physics tutorials",996],["Performance optimization tips: Physics in Unity (video)",996],["Conditional compilation",997],["Unity’s support for the C# language includes the use of directives, which allow you to selectively include or exclude code from compilation, based on whether certain scripting symbols are defined or not defined.",997],["You can read more broadly about how these directives work in C# in Microsoft's user documentation on C# preprocessor directives.",997],["Unity has a range of built-in scripting symbols which represent options that you can use in your scripts to selectively include or exclude portions of code from compilation.",997],["For example, the built-in scripting symbol that's set when a player is built for Windows standalone platform is UNITY_STANDALONE_WIN. You can check whether this symbol is defined using a special type of if statement using the following query:",997],["if UNITY_STANDALONE_WIN",997],["Debug.Log(\"Standalone Windows\");",997],["endif",997],["The hash (#) character in front of the if and endif indicates that these statements are \"directives\", and they're handled during the compilation process, rather than at runtime.",997],["In the above example, the Debug line is only included for compilation in the Windows standalone build of the project. When compiled in the Unity Editor or in other target builds, it's omitted entirely. This is different to using a regular if .. then .. else structure, which might only bypass the execution of certain part of code at runtime.",997],["There are a number of built-in scripting symbols which allow you to selectively compile or omit code based on the selected Platform, the Editor Version, and other miscellaneous system environment scenarios. These built-in scripting symbols are listed below.",997],["In addition, you can define your own scripting symbols either using the Unity Editor UI, via scripting, or via an asset file, which allows you to control compilation of portions of your code based on arbitrary definitions. For more information, check Custom scripting symbols.",997],["Note: Scripting symbols are sometimes referred to as define symbols,preprocessor defines, or just defines.",997],["",997],["Platform scripting symbols",997],["Unity automatically defines certain scripting symbols based on the authoring and build target platform. These are as follows:",997],["Define Function ",997],["UNITY_EDITOR Scripting symbol to call Unity Editor scripts from your game code. ",997],["UNITY_EDITOR_WIN Scripting symbol for Editor code on Windows. ",997],["UNITY_EDITOR_OSX Scripting symbol for Editor code in macOS. ",997],["UNITY_EDITOR_LINUX Scripting symbol for Editor code on Linux. ",997],["UNITY_EMBEDDED_LINUX Scripting symbol for embedded Linux. ",997],["UNITY_QNX Scripting symbol for QNX. ",997],["UNITY_STANDALONE_OSX Scripting symbol to compile or execute code specifically for macOS (including Universal, PPC and Intel architectures). ",997],["UNITY_STANDALONE_WIN Scripting symbol for compiling/executing code specifically for Windows standalone applications. ",997],["UNITY_STANDALONE_LINUX Scripting symbol for compiling/executing code specifically for Linux standalone applications. ",997],["UNITY_SERVER Scripting symbol for compiling/executing code for a dedicated server (macOS, Windows or Linux). ",997],["UNITY_IOS Scripting symbol for compiling/executing code for the iOS platform. ",997],["UNITY_IPHONE Deprecated. Use UNITY_IOS instead. ",997],["UNITY_ANDROID Scripting symbol for the Android platform. ",997],["UNITY_TVOS Scripting symbol for the Apple TV platform. ",997],["UNITY_WSA Scripting symbol for Universal Windows Platform. Additionally, NETFX_CORE is defined when compiling C# files against .NET Core and using .NET scripting backend. ",997],["UNITY_WSA_10_0 Scripting symbol for Universal Windows Platform. Additionally WINDOWS_UWP is defined when compiling C# files against .NET Core. ",997],["UNITY_WEBGL Scripting symbol for WebGL. ",997],["UNITY_ANALYTICS Scripting symbol for calling Unity Analytics methods from your game code. Version 5.2 and above. ",997],["UNITY_ASSERTIONS Scripting symbol for assertions control process. ",997],["UNITY_64 Scripting symbol for 64-bit platforms. ",997],["",997],["Editor version Scripting symbols",997],["Unity automatically defines certain scripting symbols based on the version of the Unity Editor that you're currently using.",997],["Given a version number X.Y.Z (for example, 2019.4.14), Unity exposes three global scripting symbols in the following formats: UNITY_X, UNITY_X_Y and UNITY_X_Y_Z.",997],["Here is an example of scripting symbols exposed in Unity 2019.4.14:",997],["Define Function ",997],["UNITY_2019 Scripting symbol for the release version of Unity 2019, exposed in every 2019.Y.Z release. ",997],["UNITY_2019_4 Scripting symbol for the major version of Unity 2019.4, exposed in every 2019.4.Z release. ",997],["UNITY_2019_4_14 Scripting symbol for the minor version of Unity 2019.4.14. ",997],["You can also compile code selectively based on the earliest version of Unity required to compile or execute",997],["a section of code snippet. Following the same version format as above (X.Y), Unity exposes one global #define in the format UNITY_X_Y_OR_NEWER, that you can use for this purpose.",997],["",997],["Other scripting symbols",997],["The other scripting symbols Unity defines are:",997],["Define Function ",997],["CSHARP_7_3_OR_NEWER Defined when building scripts with support for C# 7.3 or newer. ",997],["ENABLE_MONO Scripting backend #define for Mono. ",997],["ENABLE_IL2CPP Scripting backend #define for IL2CPP. ",997],["ENABLE_VR Defined when the target build platform supports VR. Doesn't imply that VR is currently enabled or that the necessary plug-ins and packages needed to support VR are installed. ",997],["NET_2_0 Defined when building scripts against .NET 2.0 API compatibility level on Mono and IL2CPP. ",997],["NET_2_0_SUBSET Defined when building scripts against .NET 2.0 Subset API compatibility level on Mono and IL2CPP. ",997],["NET_LEGACY Defined when building scripts against .NET 2.0 or .NET 2.0 Subset API compatibility level on Mono and IL2CPP. ",997],["NET_4_6 Defined when building scripts against .NET 4.x API compatibility level on Mono and IL2CPP. ",997],["NET_STANDARD_2_0 Defined when building scripts against .NET Standard 2.0 API compatibility level on Mono and IL2CPP. ",997],["NET_STANDARD_2_1 Defined when building scripts against .NET Standard 2.1 API compatibility level on Mono and IL2CPP. ",997],["NET_STANDARD Defined when building scripts against .NET Standard 2.1 API compatibility level on Mono and IL2CPP. ",997],["NETSTANDARD2_1 Defined when building scripts against .NET Standard 2.1 API compatibility level on Mono and IL2CPP. ",997],["NETSTANDARD Defined when building scripts against .NET Standard 2.1 API compatibility level on Mono and IL2CPP. ",997],["ENABLE_WINMD_SUPPORT Defined when Windows Runtime support is enabled on IL2CPP. For more information, refer to Windows Runtime Support. ",997],["ENABLE_INPUT_SYSTEM Defined when the Input System package is enabled in Player Settings. ",997],["ENABLE_LEGACY_INPUT_MANAGER Defined when the legacy Input Manager is enabled in Player Settings. ",997],["UNITY_SERVER Defined when the Server Build setting is enabled in Build Settings ",997],["DEVELOPMENT_BUILD Defined when your script is running in a Player which was built with the Development Build option enabled.This define only reflects whether the development build option was enabled at the time of the build. To know whether your script is running in the development build mode, use Debug.isDebugBuild. __DEVELOPMENT\\_BUILD__ isn't sufficient to determine whether you're currently running in a development build because most platforms allow changing between development and non-development build without rebuilding the project. However, on some platforms, Unity doesn't support switching between development and non-development builds in the Editor and requires you to switch after the build is complete. For example, on Windows, you can choose the Create Visual Studio solution option to choose whether you want a development or non-development build in Visual Studio. Switching in Visual Studio doesn't recompile your scripts and therefore, it will not reevaluate scripting defines. You can also switch from the final game build to a development build by swapping UnityPlayer.dll in the game build with the one from a development build for debugging live game builds. ",997],["Test precompiled code",997],["The following example shows how to test your precompiled code. It also prints a message based on the platform you've selected for your target build.",997],["To test the compiled code:",997],["Open the Build Settings window (menu: File > Build Settings).",997],["Choose the target platform you want to test your code against and click Switch Platform.",997],["Create a script and copy/paste the following code:",997],["using UnityEngine;",997],["using System.Collections;",997],["public class PlatformDefines : MonoBehaviour {",997],["void Start () {",997],["if UNITY_EDITOR",997],["Debug.Log(\"Unity Editor\");",997],["endif",997],["if UNITY_IOS",997],["Debug.Log(\"iOS\");",997],["endif",997],["if UNITY_STANDALONE_OSX",997],["Debug.Log(\"Standalone OSX\");",997],["endif",997],["if UNITY_STANDALONE_WIN",997],["Debug.Log(\"Standalone Windows\");",997],["endif",997],["To test the code, click Play Mode. Confirm that the code works by checking for the relevant messages in the Unity console, depending on the platform you selected. For example, if you choose iOS, the messages Unity Editor and Unity iOS will appear in the console.",997],["Note:** In C# you can use a CONDITIONAL attribute which is a more clean, less error-prone way of stripping out functions. For more information, refer to ConditionalAttribute Class. Common Unity callbacks such as Start(), Update(), LateUpdate(), FixedUpdate(), Awake() aren't affected by this attribute because they're called directly from the engine and, for performance reasons, it doesn't take them into account.",997],["In addition to the basic #if compiler directive, you can also use a multiway test in C#:",997],["if UNITY_EDITOR",997],["Debug.Log(\"Unity Editor\");",997],["elif UNITY_IOS",997],["Debug.Log(\"Unity iOS\");",997],["else",997],["Debug.Log(\"Any other platform\");",997],["endif",997],["Additional resources",997],["Platform development",998],["Before starting out with the Unity Editor, you might want to familiarize yourself with the platforms that you can create your projects in. Unity supports most of the leading desktop, web, and mobile platforms:",998],["Standalone platforms: macOS, Windows, and Linux",998],["Note:** If you are a developer with access to Closed platforms, you might have more platform options after you download and register your preferred platform setup. For more information, visit the Platform Module Installation page.",998],["For a full list of platforms that Unity supports and to know the minimum system requirements for these platforms, refer to System Requirements.",998],["Additional resources:",998],["Play Asset Delivery",999],["Play Asset Delivery (PAD) is the asset splitting solution for the Android App Bundle (AAB) publishing format. PAD uses asset packs to store additional assets such as textures, sounds, and meshes. Google hosts and serves asset packs on Google Play, which means you don’t need to create a content delivery network to send application resources to users. For more information about PAD, see Android’s Play Asset Delivery documentation.",999],["PAD is only available for Google Play and enables applications to be larger than the Google Play application size limit of 150MB.",999],["Important**: If you have a large application and want to publish it to digital distribution services that don't support the AAB publishing format, you must use the APK publishing format and APK expansion files.",999],["Topic Description ",999],["------------------------------------------------------------ ------------------------------------------------------------ ",999],["Asset packs in Unity Learn how asset packs work in Unity. ",999],["Set up Play Asset Delivery Configure your Unity project to produce an AAB that contains asset packs. ",999],["Create a custom asset pack Create a custom asset pack to store additional assets for an application. ",999],["Manage asset packs at runtime Download and access asset packs at runtime. ",999],["Notes:**",999],["All versions of Unity from 2021.3 support Play Asset Delivery. Support was also added for previous Unity versions in the following patch releases:",999],["2019.4.29f1",999],["2020.3.15f2",999],["2021.1.16f1",999],["2021.2.0f1",999],["Unity doesn't support Play Feature Delivery.",999],["Additional resources",999],["Playables Examples",1000],["PlayableGraph Visualizer",1000],["All of the examples in this document use the PlayableGraph Visualizer (Pictured below) to illustrate the trees and nodes created by the Playables API. The Playable graph Visualizer is a tool available through GitHub.",1000],["To use the PlayableGraph Visualizer:",1000],["Download the PlayableGraph Visualizer that corresponds with your version of Unity from the GitHub repository",1000],["Open the tool by selecting Window > PlayableGraph Visualizer",1000],["Register your graph using GraphVisualizerClient.Show(PlayableGraph graph, string name).",1000],["Playables in the graph are represented by colored nodes. Wire color intensity indicates the weight of the blending. See GitHub for more information on this tool.",1000],["Playing a single animation clip on a GameObject",1000],["This example demonstrates a simple PlayableGraph with a single playable output that is linked to a single playable node. The playable node plays a single animation clip (clip). An AnimationClipPlayable must wrap the animation clip to make it compatible with the Playables API.",1000],["using UnityEngine;",1000],["using UnityEngine.Playables;",1000],["using UnityEngine.Animations;",1000],["[RequireComponent(typeof(Animator))]",1000],["public class PlayAnimationSample : MonoBehaviour",1000],["public AnimationClip clip;",1000],["PlayableGraph playableGraph;",1000],["void Start()",1000],["playableGraph = PlayableGraph.Create();",1000],["playableGraph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);",1000],["var playableOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["// Wrap the clip in a playable",1000],["var clipPlayable = AnimationClipPlayable.Create(playableGraph, clip);",1000],["// Connect the Playable to an output",1000],["playableOutput.SetSourcePlayable(clipPlayable);",1000],["// Plays the Graph.",1000],["playableGraph.Play();",1000],["void OnDisable()",1000],["// Destroys all Playables and PlayableOutputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Use AnimationPlayableUtilities to simplify the creation and playback of animation playables, as shown in the following example:__",1000],["__",1000],["using UnityEngine;",1000],["using UnityEngine.Playables;",1000],["using UnityEngine.Animations;",1000],["[RequireComponent(typeof(Animator))]",1000],["public class PlayAnimationUtilitiesSample : MonoBehaviour",1000],["public AnimationClip clip;",1000],["PlayableGraph playableGraph;",1000],["void Start()",1000],["AnimationPlayableUtilities.PlayClip(GetComponent(), clip, out playableGraph);",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Creating an animation blend tree",1000],["This example demonstrates how to use the AnimationMixerPlayable to blend two animation clips. Before blending the animation clips, they must be wrapped by playables. To do this, an AnimationClipPlayable (clipPlayable0 and clipPlayable1) wraps each AnimationClip (clip0 and clip1). The SetInputWeight() method dynamically adjusts the blend weight of each playable.",1000],["Although not shown in this example, you can also use AnimationMixerPlayable to blend playable mixers and other playables.",1000],["using UnityEngine;",1000],["using UnityEngine.Playables;",1000],["using UnityEngine.Animations;",1000],["[RequireComponent(typeof(Animator))]",1000],["public class MixAnimationSample : MonoBehaviour",1000],["public AnimationClip clip0;",1000],["public AnimationClip clip1;",1000],["public float weight;",1000],["PlayableGraph playableGraph;",1000],["AnimationMixerPlayable mixerPlayable;",1000],["void Start()",1000],["// Creates the graph, the mixer and binds them to the Animator.",1000],["playableGraph = PlayableGraph.Create();",1000],["var playableOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["mixerPlayable = AnimationMixerPlayable.Create(playableGraph, 2);",1000],["playableOutput.SetSourcePlayable(mixerPlayable);",1000],["// Creates AnimationClipPlayable and connects them to the mixer.",1000],["var clipPlayable0 = AnimationClipPlayable.Create(playableGraph, clip0);",1000],["var clipPlayable1 = AnimationClipPlayable.Create(playableGraph, clip1);",1000],["playableGraph.Connect(clipPlayable0, 0, mixerPlayable, 0);",1000],["playableGraph.Connect(clipPlayable1, 0, mixerPlayable, 1);",1000],["// Plays the Graph.",1000],["playableGraph.Play();",1000],["void Update()",1000],["weight = Mathf.Clamp01(weight);",1000],["mixerPlayable.SetInputWeight(0, 1.0f-weight);",1000],["mixerPlayable.SetInputWeight(1, weight);",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Blending an AnimationClip and AnimatorController",1000],["This example demonstrates how to use an AnimationMixerPlayable to blend an AnimationClip with an AnimatorController.",1000],["Before blending the AnimationClip and AnimatorController, they must be wrapped by playables. To do this, an AnimationClipPlayable (clipPlayable) wraps the AnimationClip (clip) and an AnimatorControllerPlayable (ctrlPlayable) wraps the RuntimeAnimatorController (controller). The SetInputWeight() method dynamically adjusts the blend weight of each playable.",1000],["using UnityEngine;",1000],["using UnityEngine.Playables;",1000],["using UnityEngine.Animations;",1000],["[RequireComponent(typeof(Animator))]",1000],["public class RuntimeControllerSample : MonoBehaviour",1000],["public AnimationClip clip;",1000],["public RuntimeAnimatorController controller;",1000],["public float weight;",1000],["PlayableGraph playableGraph;",1000],["AnimationMixerPlayable mixerPlayable;",1000],["void Start()",1000],["// Creates the graph, the mixer and binds them to the Animator.",1000],["playableGraph = PlayableGraph.Create();",1000],["var playableOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["mixerPlayable = AnimationMixerPlayable.Create(playableGraph, 2);",1000],["playableOutput.SetSourcePlayable(mixerPlayable);",1000],["// Creates AnimationClipPlayable and connects them to the mixer.",1000],["var clipPlayable = AnimationClipPlayable.Create(playableGraph, clip);",1000],["var ctrlPlayable = AnimatorControllerPlayable.Create(playableGraph, controller);",1000],["playableGraph.Connect(clipPlayable, 0, mixerPlayable, 0);",1000],["playableGraph.Connect(ctrlPlayable, 0, mixerPlayable, 1);",1000],["// Plays the Graph.",1000],["playableGraph.Play();",1000],["void Update()",1000],["weight = Mathf.Clamp01(weight);",1000],["mixerPlayable.SetInputWeight(0, 1.0f-weight);",1000],["mixerPlayable.SetInputWeight(1, weight);",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Creating a PlayableGraph with several outputs",1000],["This example demonstrates how to create a PlayableGraph with two different playable output types: an AudioPlayableOutput and an AnimationPlayableOutput. A PlayableGraph can have many playable outputs of different types.",1000],["This example also demonstrates how to play an AudioClip through an AudioClipPlayable that is connected to an AudioPlayableOutput.",1000],["using UnityEngine;",1000],["using UnityEngine.Animations;",1000],["using UnityEngine.Audio;",1000],["using UnityEngine.Playables;",1000],["[RequireComponent(typeof(Animator))]",1000],["[RequireComponent(typeof(AudioSource))]",1000],["public class MultiOutputSample : MonoBehaviour",1000],["public AnimationClip animationClip;",1000],["public AudioClip audioClip;",1000],["PlayableGraph playableGraph;",1000],["void Start()",1000],["playableGraph = PlayableGraph.Create();",1000],["// Create the outputs.",1000],["var animationOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["var audioOutput = AudioPlayableOutput.Create(playableGraph, \"Audio\", GetComponent());",1000],["// Create the playables.",1000],["var animationClipPlayable = AnimationClipPlayable.Create(playableGraph, animationClip);",1000],["var audioClipPlayable = AudioClipPlayable.Create(playableGraph, audioClip, true);",1000],["// Connect the playables to an output",1000],["animationOutput.SetSourcePlayable(animationClipPlayable);",1000],["audioOutput.SetSourcePlayable(audioClipPlayable);",1000],["// Plays the Graph.",1000],["playableGraph.Play();",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Controlling the play state of the tree",1000],["This example demonstrates how to use the Playable.SetPlayState() method to control the play state of node on the PlayableGraph tree. The SetPlayState method controls the play state of the entire tree, one of its branches, or a single node.",1000],["When setting the play state of a node, the state propagates to all its children, regardless of their play states. For example, if a child node is explicitly paused, setting a parent node to \"playing\" also sets all its child nodes to \"playing.\"",1000],["In this example, the PlayableGraph contains a mixer that blends two animation clips. An AnimationClipPlayable wraps each animation clip and the SetPlayState() method explicitly pauses the second playable. The second AnimationClipPlayable is explicitly paused, so its internal time does not advance and outputs the same value. The exact value depends on the specific time when the AnimationClipPlayable was paused.",1000],["using UnityEngine;",1000],["using UnityEngine.Playables;",1000],["using UnityEngine.Animations;",1000],["[RequireComponent(typeof(Animator))]",1000],["public class PauseSubGraphAnimationSample : MonoBehaviour",1000],["public AnimationClip clip0;",1000],["public AnimationClip clip1;",1000],["PlayableGraph playableGraph;",1000],["AnimationMixerPlayable mixerPlayable;",1000],["void Start()",1000],["// Creates the graph, the mixer and binds them to the Animator.",1000],["playableGraph = PlayableGraph.Create();",1000],["var playableOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["mixerPlayable = AnimationMixerPlayable.Create(playableGraph, 2);",1000],["playableOutput.SetSourcePlayable(mixerPlayable);",1000],["// Creates AnimationClipPlayable and connects them to the mixer.",1000],["var clipPlayable0 = AnimationClipPlayable.Create(playableGraph, clip0);",1000],["var clipPlayable1 = AnimationClipPlayable.Create(playableGraph, clip1);",1000],["playableGraph.Connect(clipPlayable0, 0, mixerPlayable, 0);",1000],["playableGraph.Connect(clipPlayable1, 0, mixerPlayable, 1);",1000],["mixerPlayable.SetInputWeight(0, 1.0f);",1000],["mixerPlayable.SetInputWeight(1, 1.0f);",1000],["clipPlayable1.SetPlayState(PlayState.Paused);",1000],["// Plays the Graph.",1000],["playableGraph.Play();",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Controlling the timing of the tree",1000],["This example demonstrates how to use the Play() method to play a PlayableGraph, how to use the SetPlayState() method to pause a playable, and how to use the SetTime() method to manually set the local time of a playable with a variable.",1000],["using UnityEngine;",1000],["using UnityEngine.Playables;",1000],["using UnityEngine.Animations;",1000],["[RequireComponent(typeof(Animator))]",1000],["public class PlayWithTimeControlSample : MonoBehaviour",1000],["public AnimationClip clip;",1000],["public float time;",1000],["PlayableGraph playableGraph;",1000],["AnimationClipPlayable playableClip;",1000],["void Start()",1000],["playableGraph = PlayableGraph.Create();",1000],["var playableOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["// Wrap the clip in a playable",1000],["playableClip = AnimationClipPlayable.Create(playableGraph, clip);",1000],["// Connect the Playable to an output",1000],["playableOutput.SetSourcePlayable(playableClip);",1000],["// Plays the Graph.",1000],["playableGraph.Play();",1000],["// Stops time from progressing automatically.",1000],["playableClip.SetPlayState(PlayState.Paused);",1000],["void Update ()",1000],["// Control the time manually",1000],["playableClip.SetTime(time);",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["Creating PlayableBehaviour",1000],["This example demonstrates how to create custom playables with the PlayableBehaviour public class. This example also demonstrate how to override the PrepareFrame() virtual method to control nodes on the PlayableGraph. Custom playables can override any of the other virtual methods of the PlayableBehaviour class.",1000],["In this example, the nodes being controlled are a series of animation clips (clipsToPlay). The SetInputMethod() modifies the blend weight of each animation clip, ensuring that only one clip plays at a time, and the SetTime() method adjusts the local time so playback starts at the moment the animation clip is activated.",1000],["using UnityEngine;",1000],["using UnityEngine.Animations;",1000],["using UnityEngine.Playables;",1000],["public class PlayQueuePlayable : PlayableBehaviour",1000],["private int m_CurrentClipIndex = -1;",1000],["private float m_TimeToNextClip;",1000],["private Playable mixer;",1000],["public void Initialize(AnimationClip[] clipsToPlay, Playable owner, PlayableGraph graph)",1000],["owner.SetInputCount(1);",1000],["mixer = AnimationMixerPlayable.Create(graph, clipsToPlay.Length);",1000],["graph.Connect(mixer, 0, owner, 0);",1000],["owner.SetInputWeight(0, 1);",1000],["for (int clipIndex = 0 ; clipIndex < mixer.GetInputCount() ; ++clipIndex)",1000],["graph.Connect(AnimationClipPlayable.Create(graph, clipsToPlay[clipIndex]), 0, mixer, clipIndex);",1000],["mixer.SetInputWeight(clipIndex, 1.0f);",1000],["override public void PrepareFrame(Playable owner, FrameData info)",1000],["if (mixer.GetInputCount() == 0)",1000],["return;",1000],["// Advance to next clip if necessary",1000],["m_TimeToNextClip -= (float)info.deltaTime;",1000],["if (m_TimeToNextClip <= 0.0f)",1000],["m_CurrentClipIndex++;",1000],["if (m_CurrentClipIndex >= mixer.GetInputCount())",1000],["m_CurrentClipIndex = 0;",1000],["var currentClip = (AnimationClipPlayable)mixer.GetInput(m_CurrentClipIndex);",1000],["// Reset the time so that the next clip starts at the correct position",1000],["currentClip.SetTime(0);",1000],["m_TimeToNextClip = currentClip.GetAnimationClip().length;",1000],["// Adjust the weight of the inputs",1000],["for (int clipIndex = 0 ; clipIndex < mixer.GetInputCount(); ++clipIndex)",1000],["if (clipIndex == m_CurrentClipIndex)",1000],["mixer.SetInputWeight(clipIndex, 1.0f);",1000],["else",1000],["mixer.SetInputWeight(clipIndex, 0.0f);",1000],["[RequireComponent(typeof (Animator))]",1000],["public class PlayQueueSample : MonoBehaviour",1000],["public AnimationClip[] clipsToPlay;",1000],["PlayableGraph playableGraph;",1000],["void Start()",1000],["playableGraph = PlayableGraph.Create();",1000],["var playQueuePlayable = ScriptPlayable.Create(playableGraph);",1000],["var playQueue = playQueuePlayable.GetBehaviour();",1000],["playQueue.Initialize(clipsToPlay, playQueuePlayable, playableGraph);",1000],["var playableOutput = AnimationPlayableOutput.Create(playableGraph, \"Animation\", GetComponent());",1000],["playableOutput.SetSourcePlayable(playQueuePlayable);",1000],["playableOutput.SetSourceInputPort(0);",1000],["playableGraph.Play();",1000],["void OnDisable()",1000],["// Destroys all Playables and Outputs created by the graph.",1000],["playableGraph.Destroy();",1000],["2017-07-04 ",1000],["New in Unity 2017.1 NewIn20171",1000],["The PlayableGraph",1001],["The PlayableGraph defines a set of playable outputs that are bound to a GameObject or component. The PlayableGraph also defines a set of playables and their relationships. Figure 1 provides an example.",1001],["The PlayableGraph is responsible for the life cycle of its playables and their outputs. Use the PlayableGraph to create, connect, and destroy playables.",1001],["In Figure 1, when displaying a PlayableGraph, the term \"Playable\" is removed from the names of graph nodes to make it more compact. For example, the node named \"AnimationClipPlayable\" is shown as \"AnimationClip.\"",1001],["A playable is a C# struct that implements the IPlayable interface. It is used to define its relationship with other playables. Likewise, a playable output is a C# struct that implements IPlayableOutput and is used to define the output of a PlayableGraph.",1001],["Figure 2 shows the most common core playable types. Figure 3 shows the core playable output types.",1001],["The playable core types and playable output types are implemented as C# structs to avoid allocating memory for garbage collection.",1001],["‘Playable’ is the base type for all playables, meaning that you can always implicitly cast a playable to it. The opposite is not true, and an exception will be thrown if a ‘Playable’ is explicitly casted into an incompatible type. It also defines all the basic methods that can be executed on a playable. To access type-specific methods, you need to cast our playable to the appropriate type.",1001],["The same thing is true for ‘PlayableOutput’, it is the base type for all playable outputs and it defines the basic methods.",1001],["Note: Playable and PlayableOutput do not expose a lot of methods. Instead, the 'PlayableExtensions’ and ‘PlayableOutputExtensions' static classes provide extension methods.",1001],["All non-abstract playables have a public static method Create() that creates a playable of the corresponding type. The 'Create()' method always takes a PlayableGraph as its first parameter, and that graph owns the newly created playable. Additional parameters may be required for some type of playables. Non-abstract playable outputs also expose a Create() method.",1001],["A valid playable output should be linked to a playable. If a playable output is not linked to a playable, the playable output does nothing. To link a playable output to a playable, use the PlayableOutput.SetSourcePlayable() method. The linked playable acts as the root of the playable tree, for that specific playable output.",1001],["To connect two playables together, use the PlayableGraph.Connect() method. Note that some playables cannot have inputs.",1001],["Use the PlayableGraph.Create() static method to create a PlayableGraph.",1001],["Play a PlayableGraph with the PlayableGraph.Play() method.",1001],["Stop a playing PlayableGraph with thePlayableGraph.Stop() method.",1001],["Evaluate the state of a PlayableGraph, at a specific time, with the PlayableGraph.Evaluate() method.",1001],["Destroy a PlayableGraph manually with the PlayableGraph.Destroy() method. This method automatically destroys all playables and playable outputs that were created by the PlayableGraph. You must manually call this destroy method to destroy a PlayableGraph, otherwise Unity issues an error message.",1001],["2017-07-04 ",1001],["New in Unity 2017.1 NewIn20171",1001],["ScriptPlayable and PlayableBehaviour",1002],["To create your own custom playable, it must be inherited from the PlayableBehaviour base class.",1002],["public class MyCustomPlayableBehaviour : PlayableBehaviour",1002],["// Implementation of the custom playable behaviour",1002],["// Override PlayableBehaviour methods as needed",1002],["To use a PlayableBehaviour as a custom playable, it also must be encapsulated within a ScriptPlayable<> object. If you don’t have an instance of your custom playable, you can create a ScriptPlayable<> for your object by calling:",1002],["ScriptPlayable.Create(playableGraph);",1002],["If you already have an instance of your custom playable, you can wrap it with a ScriptPlayable<> by calling:",1002],["MyCustomPlayableBehaviour myPlayable = new MyCustomPlayableBehaviour();",1002],["ScriptPlayable.Create(playableGraph, myPlayable);",1002],["In this case, the instance is cloned before it is assigned to the ScriptPlayable<>. As it is, this code does exactly the same as the previous code; the difference is that myPlayable can be a public property that would be configured in the inspector, and you can then set up your behaviour for each instance of your script.",1002],["You can get the PlayableBehaviour object from the ScriptPlayable<> by using the ScriptPlayable<T> .GetBehaviour() method.",1002],["New in Unity 2017.1 NewIn20171",1002],["Playables API",1003],["The Playables API provides a way to create tools, effects or other gameplay mechanisms by organizing and evaluating data sources in a tree-like structure known as the PlayableGraph. The PlayableGraph allows you to mix, blend, and modify multiple data sources, and play them through a single output.",1003],["The Playables API supports animation, audio and scripts. The Playables API also provides the capacity to interact with the animation system and audio system through scripting.",1003],["Although the Playables API is currently limited to animation, audio, and scripts, it is a generic API that will eventually be used by video and other systems.",1003],["Playable vs Animation",1003],["The animation system already has a graph editing tool, it's a state machine system that is restricted to playing animation. The Playables API is designed to be more flexible and to support other systems. The Playables API also allows for the creation of graphs not possible with the state machine. These graphs represent a flow of data, indicating what each node produces and consumes. In addition, a single graph is not limited to a single system. A single graph may contain nodes for animation, audio, and scripts.",1003],["Advantages of using the Playables API",1003],["The Playables API allows for dynamic animation blending. This means that objects in the scenes could provide their own animations. For example, animations for weapons, chests, and traps could be dynamically added to the PlayableGraph and used for a certain duration.",1003],["The Playables API allows you to easily play a single animation without the overhead involved in creating and managing an AnimatorController asset.",1003],["The Playables API allows users to dynamically create blending graphs and control the blending weights directly frame by frame.",1003],["A PlayableGraph can be created at runtime, adding playable node as needed, based on conditions. Instead of having a huge “one-size-fit-all” graph where nodes are enabled and disabled, the PlayableGraph can be tailored to fit the requirements of the current situation.",1003],["2017-07-04 ",1003],["2017-07-04 New in Unity 2017.1 NewIn20171",1003],["Unity Standalone Player command line arguments",1004],["You can launch Unity Players from the command line and pass in arguments to change how the Player executes. These arguments work on any standalone platform unless this page specifies other platform requirements.",1004],["Command Details: ",1004],["-batchmode Run the application in “headless” mode. In this mode, the application doesn’t display anything or accept user input. This is useful for running servers for networked applications. ",1004],["-disable-gpu-skinning Disables Graphics Processing Unit (GPU) skinning at startup. ",1004],["-force-clamped Use this together with -force-glcoreXY to prevent checks for additional OpenGL extensions, allowing the application to run between platforms with the same code paths. ",1004],["-force-d3d11-singlethreaded Force DirectX 11.0 to be created with a D3D11_CREATE_DEVICE_SINGLETHREADED flag. ",1004],["-force-device-index Make the Standalone Player use a specific GPU device by passing it the index of that GPU. This option is supported for D3D11, D3D12, Metal, and Vulkan graphics APIs, but isn’t supported for OpenGL. ",1004],["-force-gfx-direct Force single threaded rendering. ",1004],["-force-glcore Force the application to use the OpenGL core profile for rendering. The Editor tries to use the most recent OpenGL version available, and all OpenGL extensions exposed by the OpenGL drivers. Unity uses Direct3D if the platform doesn’t support OpenGL. ",1004],["-force-glcoreXY Similar to -force-glcore, but requests a specific OpenGL context version. Accepted values for XY: 32, 33, 40, 41, 42, 43, 44, or 45. ",1004],["-force-vulkan Force the application to use Vulkan for rendering. ",1004],["-max-async-pso-job-count Set the number of parallel threads Unity uses to create pipeline state objects (PSOs) when you use Experimental.Rendering.ShaderWarmup to prewarm shader variants. This only has an effect if your application runs on a platform that uses the DirectX 12, Metal, or Vulkan graphics API. ",1004],["-monitor N Run Standalone Player on the specified monitor, indicated by a 1-based index number. ",1004],["-nographics When you use this argument in batch mode, Unity doesn’t initialize a graphics device. This makes it possible to run your automated workflows on machines that don’t have a GPU. Note: Output logs are turned off in this mode. To enable the creation of output logs, specify a file location using the command -logFile. ",1004],["-nolog Do not produce an output log. When you don’t use this argument, Unity writes the output_log.txt in the Log Files folder, where the Debug.Log output is printed. ",1004],["-no-stereo-rendering Turn off stereo rendering. ",1004],["-popupwindow Create the window as a pop-up window, without a frame. This command isn’t supported on macOS. ",1004],["-screen-fullscreen Override the default full-screen state. This must be 0 or 1. ",1004],["-screen-height Override the default screen height. This must be an integer from a supported resolution. ",1004],["-screen-width Override the default screen width. This width value must be an integer from a supported resolution. ",1004],["-screen-quality Override the default screen quality. Example usage would be: /path/to/myGame -screen-quality Beautiful. The supported options match the Quality Settings names. ",1004],["-dontConnectAcceleratorEvent (UWP only) Disable connecting to AcceleratorKeyEvent. This may help if you have issues with input in XAML elements. Note: Unity cannot handle some keyboard keys, such as F10, Ctrl, Alt, and Tab. ",1004],["-force-d3d11 (Windows only) Force the application to use Direct3D 11 for rendering. ",1004],["-force-d3d12 (Windows only) Force the application to use Direct3D 12 for rendering. ",1004],["-force-d3d11-bitblt-model (Windows only) Force the application to use DXGI BitBlt model swapchain when using Direct3D 11. For more information, see PlayerSettings.useFlipModelSwapchain. ",1004],["-force-d3d11-flip-model (Windows only) Force the application to use DXGI flip model swapchain when using Direct3D 11. For more information, see PlayerSettings.useFlipModelSwapchain. ",1004],["-force-d3d11-no-singlethreaded (Windows and UWP only) Force DirectX 11.0 to be created without a D3D11_CREATE_DEVICE_SINGLETHREADED flag. ",1004],["-force-d3d11-singlethreaded (Windows and UWP only) Force DirectX 11.0 to be created with a D3D11_CREATE_DEVICE_SINGLETHREADED flag. ",1004],["-force-driver-type-warp (Windows and UWP only) Force the DirectX 11.0 driver type WARP device. For more information, see Microsoft’s documentation on Windows Advanced Rasterization Platform. ",1004],["-force-feature-level-10-0 (Windows and UWP only) Force DirectX 11.0 feature level 10.0. ",1004],["-force-feature-level-10-1 (Windows and UWP only) Force DirectX 11.0 feature level 10.1. ",1004],["-force-feature-level-11-0 (Windows and UWP only) Force DirectX 11.0 feature level 11.0. ",1004],["-force-low-power-device (macOS only) Make the Standalone Player use a low power device. ",1004],["-force-metal (macOS only) Make the Standalone Player use Metal as the default graphics API. ",1004],["-forceTextBoxBasedKeyboard (UWP only) Use TextBox-based implementation for TouchScreenKeyboard. This implementation allows switching to different implementations, in case there are issues with the default. Note: This implementation has an effect only on UWP XAML applications. ",1004],["-force-wayland (Linux only) Activate experimental Wayland support when running a Linux player. ",1004],["--parentHWND <HWND> delayed (Windows only) Embed the Windows Standalone application into another application. When you use this argument, you need to pass the parent application’s window handle (‘HWND’) to the Windows Standalone application.When you pass -parentHWND 'HWND' delayed, the Unity application is hidden while it runs. You must also call SetParent from the Microsoft Developer library for Unity in the application. Microsoft’s SetParent embeds the Unity window. When it creates Unity processes, the Unity window respects the position and size provided as part of Microsoft's STARTUPINFO structure.To resize the Unity window, check its GWLP_USERDATA in Microsoft’s GetWindowLongPtr function. Its lowest bit is set to 1 when the graphics initialize and it’s safe to resize. Its second lowest bit is set to 1 after the Unity splash screen finishes displaying.For more information, see this downloadable example: EmbeddedWindow.zip ",1004],["-single-instance (Linux and Windows only) Run only one instance of the application at the time. If another instance is already running then launching the application again with -single-instance focuses the existing one. ",1004],["-window-mode (Windows only) Override fullscreen windowed mode. Accepted values are exclusive or borderless. For more information, see Player settings. ",1004],["Linux Player settings",1005],["This page details the Player settings for the Linux platform. For a description of the general Player settings, see Player Settings.",1005],["You can find documentation for the properties in the following sections:",1005],["",1005],["Icon",1005],["Enable the Override for Windows, Mac, Linux setting to assign a custom icon for your desktop game. You can upload different sizes of the icon to fit each of the squares provided.",1005],["",1005],["Resolution and Presentation",1005],["Use the Resolution and Presentation section to customize aspects of the screen's appearance in the Resolution and Standalone Player Options sections.",1005],["",1005],["Resolution section",1005],["This section allows you to customize the screen mode and default size.",1005],["",1005],["Standalone Player Options section",1005],["Use this section to specify the settings to customize the screen. For example, you can set options for users to resize the screen and specify how many instances can run concurrently.",1005],["Property Function ",1005],["Capture Single Screen Enable this option to ensure desktop games in Fullscreen Mode don't darken the secondary monitor in multi-monitor setups. This isn't supported on macOS X. ",1005],["Use Player Log Enable this option to write a log file with debugging information. Defaults to enabled.Warning: If you plan to submit your application to the Mac App Store, leave this option disabled. For more information, see Publishing to the Mac App Store. ",1005],["Resizable Window Enable this option to allow resizing of the player window.Note: If you disable this option, your application can't use the Windowed Fullscreen Mode. ",1005],["Visible in Background Enable this option to display the application in the background if the Windowed Fullscreen Mode option is used (in Windows). ",1005],["Allow Fullscreen Switch Enable this option to allow default OS full-screen key presses to toggle between full-screen and windowed modes. ",1005],["Force Single Instance Enable this option to restrict desktop players to a single concurrent running instance. ",1005],["",1005],["Splash Image",1005],["Use the Virtual Reality Splash Image setting to select a custom splash image for Virtual Reality displays. For information on common Splash Screen settings, see Splash Screen.",1005],["",1005],["Other Settings",1005],["This section allows you to customize a range of options organized into the following groups:",1005],["",1005],["Rendering",1005],["Use these settings to customize how Unity renders your game for desktop (Windows, Mac, Linux) platforms.",1005],["Setting Function ",1005],["Color Space Choose which color space should be used for rendering: Gamma or Linear. See the Linear rendering overview for an explanation of the difference between the two. ",1005],["Auto Graphics API Enable this option to use the best Graphics API on the Linux machine it runs on. Disable it to add and remove supported Graphics APIs. ",1005],["Color Gamut You can add or remove color gamuts for the iOS platform to use for rendering. Click the plus (+) icon to see a list of available gamuts. A color gamut defines a possible range of colors available for a given device (such as a monitor or screen). The sRGB gamut is the default (and required) gamut.When targeting recent tvOS devices with wide color gamut displays, use DisplayP3 to use full display capabilities. Use Metal Editor Support as a fallback for older devices. ",1005],["Multithreaded Rendering Enable this option to use multithreaded rendering. This is only supported on Metal. ",1005],["Static Batching Enable this option to use Static batching. ",1005],["Dynamic Batching Check this box to use Dynamic Batching on your build (enabled by default). ",1005],["Compute Skinning Enable this option to use DX11/DX12/ES3 GPU compute skinning, which frees up CPU resources. ",1005],["Graphics Jobs (Experimental) Enable this option to instruct Unity to offload graphics tasks (render loops) to worker threads running on other CPU cores. This is to reduce the time spent in Camera.Render on the main thread, which is often a bottleneck. Note: This feature is experimental. It may not deliver a performance improvement for your project, and may introduce new crashes. ",1005],["Texture compression format Choose between ASTC, ETC2 and ETC (ETC1 for RGB, ETC2 for RGBA). See texture compression format overview for more information on how to pick the right format.See Texture compression settings for more details on how this interacts with the texture compression setting in the Build Settings. ",1005],["Normal Map Encoding Choose XYZ or DXT5nm-style to set the normal map encoding. This setting affects the encoding scheme and compression format used for normal maps. DXT5nm-style normal maps are of higher quality, but more expensive to decode in shaders. ",1005],["Lightmap Encoding Choose Low Quality, Normal Quality, or High Quality to set the lightmap encoding. This setting affects the encoding scheme and compression format of the lightmaps. ",1005],["HDR Cubemap Encoding Choose Low Quality, Normal Quality, or High Quality to set the HDR Cubemap encoding. This setting affects the encoding scheme and compression format of the HDR Cubemaps. ",1005],["Lightmap Streaming Enabled Whether to use Mipmap Streaming for lightmaps. Unity applies this setting to all lightmaps when it generates them.Note: To use this setting, you must enable the Texture Streaming Quality setting. ",1005],["Streaming Priority Set the priority for all lightmaps in the Mipmap Streaming system. Unity applies this setting to all lightmaps when it generates them.Positive numbers give higher priority. Valid values range from -128 to 127. ",1005],["Enable Frame Timing Stats Enable this option to gather CPU/GPU frame timing statistics. ",1005],["Swap Chain Bit Depth Select the number of bits in each color channel for swap chain buffers. Only available if HDR Mode is enabled. ",1005],["Bit Depth 10 Unity will use the R10G10B10A2 buffer format and Rec2020 primaries with ST2084 PQ encoding. ",1005],["Bit Depth 16 Unity will use the R16G16B16A16 buffer format and Rec709 primaries with linear color (no encoding). ",1005],["Virtual Texturing Indicates whether to enable Virtual Texturing.Note: Virtual Texturing isn't compatible with Android. ",1005],["Shader precision model Controls the default precision of samplers used in shaders. See Shader data types and precision for more details. ",1005],["360 Stereo Capture Indicates whether Unity can capture stereoscopic 360 images and videos. When enabled, Unity compiles additional shader variants to support 360 capture (currently only on Windows/OSX). When enabled, enable360_capture_ keyword is added during the Stereo RenderCubemap call. Note that this keyword is not triggered outside the Stereo RenderCubemap function. For more information, see Stereo 360 Image and Video Capture. ",1005],["Load/Store Action Debug Mode Highlights undefined pixels that might cause rendering problems in your built application. The highlighting appears only in the Game view, and your built application if you select Development Build in Build Settings. See LoadStoreActionDebugModeSettings. ",1005],["Editor Only Highlights undefined pixels in the Game view, but not in your built application. ",1005],["",1005],["Vulkan Settings",1005],["",1005],["Mac App Store Options",1005],["The properties in this section are only relevant to macOS. For more information, see macOS Player Settings.",1005],["",1005],["Configuration",1005],["",1005],["Shader Variant Loading",1005],["",1005],["API Compatibility Level",1005],["You can choose your mono API compatibility level for all targets. Sometimes a 3rd-party .NET library uses functionality that is outside of your .NET compatibility level. To understand what's going on in such cases, and how to best fix it, try following these suggestions:",1005],["Install ILSpy for Windows.",1005],["Drag the .NET assemblies for the API compatilibity level you are having issues with into ILSpy. You can find these under Frameworks/Mono/lib/mono/YOURSUBSET/.",1005],["Drag in your 3rd-party assembly.",1005],["Right-click your 3rd-party assembly and select Analyze.",1005],["In the analysis report, inspect the Depends on section. The report highlights anything that the 3rd-party assembly depends on, but that is not available in the .NET compatibility level of your choice in red.",1005],["",1005],["Script Compilation",1005],["",1005],["Optimization",1005],["",1005],["Logging",1005],["Select what type of logging to allow in specific contexts.",1005],["",1005],["Legacy",1005],["Property Function ",1005],["Clamp BlendShapes (Deprecated) Enable the option to clamp the range of blend shape weights in SkinnedMeshRenderers. ",1005],["macOS player settings",1006],["This page details the Player settings specific to macOS. For a description of the general Player settings, refer to Player Settings.",1006],["You can find documentation for the properties in the following sections:",1006],["",1006],["Icon",1006],["Activate the Override for Windows, Mac, Linux setting to assign a custom icon for your desktop game. You can upload different sizes of the icon to fit each of the squares provided.",1006],["",1006],["Resolution and presentation",1006],["Use the Resolution and Presentation section to customize aspects of the screen's appearance.",1006],["Resolution",1006],["This section allows you to customize the screen mode and default size.",1006],["Standalone Player Options",1006],["Use this section to specify the settings to customize the screen. For example, you can set options for users to resize the screen and specify the number of instances that can run concurrently.",1006],["Property Description ",1006],["Capture Single Screen Activate this option so that standalone games in Fullscreen Mode don't darken the secondary monitor in multi-monitor setups. This option isn't supported on macOS. ",1006],["Use Player Log Activate this option to write a log file with debugging information.Warning: If you plan to submit your application to the Mac App Store, leave this option deactivated. For more information, refer to Publishing to the Mac App Store. ",1006],["Resizable Window Activate this option to allow resizing of the desktop player window.Note: If you deactivate this option, your application can't use the Windowed Fullscreen Mode. ",1006],["Visible in Background Activate this option to display the application in the background when using Windowed Fullscreen Mode. This option isn't supported on macOS. ",1006],["Allow Fullscreen Switch Activate this option to allow default OS full-screen key presses to toggle between full-screen and windowed modes. ",1006],["Force Single Instance Activate this option to restrict desktop players to a single concurrent running instance. ",1006],["Use DXGI flip model swap chain for D3D11 Using the flip model ensures the best performance. This setting affects the D3D11 graphics API. Deactivate this option to fall back to the Windows 7-style BitBlt model. For more information, refer to PlayerSettings.useFlipModelSwapchain. ",1006],["",1006],["Splash Image",1006],["Use the Virtual Reality Splash Image setting to select a custom splash image for Virtual Reality displays. For information on common Splash Screen settings, refer to Splash Screen.",1006],["",1006],["Other Settings",1006],["",1006],["Rendering",1006],["Use these settings to customize how Unity renders your game for desktop platforms.",1006],["",1006],["",1006],["",1006],["Property",1006],["Description",1006],["",1006],["",1006],["",1006],["Color SpaceChoose which color space to use for rendering: Gamma or Linear. For more information, refer to Linear rendering overview.",1006],["GammaGamma color space is typically used for calculating lighting on older hardware restricted to 8 bits per channel for the framebuffer format. Even though monitors today are digital, they might still take a gamma-encoded signal as input.",1006],["LinearLinear color space rendering gives more precise results. When you select to work in linear color space, the Editor defaults to using [sRGB] (https://en.wikipedia.org/wiki/SRGB) sampling. If your Textures are in linear color space, you need to work in linear color space and deactivate sRGB sampling for each Texture.",1006],["",1006],["",1006],["",1006],["Vulkan Settings",1006],["",1006],["Mac App Store Options",1006],["Property Description ",1006],[":------------------------------------- :----------------------------------------------------------- ------------------------------------------------------------ ",1006],["Override Default Bundle Identifier Indicates whether you can manually set the bundle identifier.Note: This setting affects macOS, iOS, tvOS, and Android. ",1006],["Bundle Identifier Enter the Bundle Identifier of your application. This appears as CFBundleIdentifier in the associated info.plist file. The Bundle Identifier must follow the convention com.YourCompanyName.YourProductName and must contain only alphanumeric and hyphen characters. For more information, refer to CFBundleIdentifier.Important: Unity automatically replaces any invalid characters you type with a hyphen. ",1006],["Build Enter the build number for this version of your app. This appears as CFBundleVersion in the associated info.plist file. For more information, refer to CFBundleVersion. ",1006],["Category Enter the string corresponding to the app’s type. The App Store uses this string to select the appropriate categorization for the app. By default, this is public.app-category.games. For more information, refer to LSApplicationCategoryType. ",1006],["Mac App Store Validation Activate this so that your app only runs when it has a valid receipt from the Mac App Store. This prevents people from running the game on a different device. Only deactivate this setting if you have implemented your own receipt validation. ",1006],["Publishing to the Mac App Store",1006],["The Use Player Log property creates a log file with debugging information, helping to investigate any problems with your game. Deactivate this when publishing games for Apple's Mac App Store, as Apple can reject your submission if activated. For more information, refer to Log Files.",1006],["The Use Mac App Store Validation property activates receipt validation for the Mac App Store. If activated, your game only runs when it has a valid receipt from the Mac App Store. Use this when submitting games to Apple for publishing on the App Store. This prevents people from running the game on a different computer.",1006],["Note**: This feature doesn't implement any strong copy protection. In particular, any potential crack for one Unity game can work for any other Unity content. For this reason, it's recommended that you implement your own receipt validation code on top of this, using Unity's plug-in feature. Because Apple requires plug-in validation to initially happen before showing the screen setup dialog, it's recommended to activate this property to avoid Apple rejecting your submission.",1006],["",1006],["Configuration",1006],["PropertyDescription",1006],["",1006],["",1006],["Target minimum macOS Version",1006],["Enter the minimum version of macOS that the application will run on.",1006],["",1006],["",1006],["",1006],["",1006],["API compatibility level",1006],["You can choose your mono API compatibility level for all targets. Sometimes a third-party .NET library uses functionality that's outside of your .NET compatibility level. To understand what's going on in such cases, and how to best fix it, try following these suggestions:",1006],["Install ILSpy for Windows.",1006],["Drag the .NET assemblies for the API compatibility level that you are having issues with into ILSpy. You can find these under Frameworks/Mono/lib/mono/YOURSUBSET/.",1006],["Drag in your third-party assembly.",1006],["Right-click your third-party assembly and select Analyze.",1006],["In the analysis report, inspect the Depends on section. The report highlights anything that the third-party assembly depends on, but that's not available in the .NET compatibility level of your choice in red.",1006],["",1006],["Mac Configuration",1006],["PropertyDescription",1006],["",1006],["",1006],["Bluetooth Usage Description",1006],["Enter the reason for accessing the device's Bluetooth connection. ",1006],["",1006],["",1006],["Supported URL schemes",1006],["A list of supported URL schemes. To add new schemes, increase the value of the Size property, then set a reference to the Asset to load in the new Element box that appears.",1006],["",1006],["",1006],["",1006],["",1006],["Shader Settings",1006],["Property Description ",1006],["Shader precision model Select the default precision of samplers used in shaders. For more information, refer to Shader data types and precision. ",1006],["Strict shader variant matching Use the error shader if a shader variant is missing and display an error in the console. ",1006],["Keep Loaded Shaders Alive Keep all loaded shaders alive and prevent unloading. ",1006],["",1006],["Shader Variant Loading Settings",1006],["",1006],["Script compilation",1006],["Property Description ",1006],[":-------------------------------- :----------------------------------------------------------- ",1006],["Scripting Define Symbols Sets custom compilation flags. For more information, refer to Platform dependent compilation. ",1006],["Additional Compiler Arguments Adds entries to this list to pass additional arguments to the Roslyn compiler. Use one new entry for each additional argument.To create a new entry, click Add (+). To remove an entry, click Remove (-).When you have added all desired arguments, click Apply to include your additional arguments in future compilations. Click Revert to reset this list to the most recent applied state. ",1006],["Suppress Common Warnings Indicates whether to display the C# warnings CS0169 and CS0649. ",1006],["Allow 'unsafe' Code Activate support for compiling ‘unsafe’ C# code in a pre-defined assembly (for example, Assembly-CSharp.dll). For Assembly Definition Files (.asmdef), click on one of your .asmdef files and activate the option in the Inspector window that appears. ",1006],["Use Deterministic Compilation Indicates whether to prevent compilation with the -deterministic C# flag. With this setting active, compiled assemblies are byte-for-byte the same each time they're compiled.For more information, refer to Microsoft’s deterministic compiler option. ",1006],["",1006],["Optimization",1006],["PropertyDescription",1006],["",1006],["",1006],["",1006],["Stack Trace",1006],["Select your preferred logging type by enabling the option that corresponds to each Log Type.",1006],["Property Description ",1006],["",1006],["None No logs are ever recorded. ",1006],["ScriptOnly Logs only when running scripts. ",1006],["Full Logs all the time. ",1006],["For more information, refer to stack trace logging.",1006],["",1006],["Legacy",1006],["Property Description ",1006],["Clamp BlendShapes (Deprecated) Activate the option to clamp the range of blend shape weights in SkinnedMeshRenderers. ",1006],["Windows Player settings",1007],["This page details the Player settings specific to Windows. For a description of the general Player settings, see Player Settings.",1007],["You can find documentation for the properties in the following sections:",1007],["",1007],["Icon",1007],["Enable the Override for Windows, Mac, Linux setting to assign a custom icon for your desktop game. You can upload different sizes of the icon to fit each of the squares provided.",1007],["",1007],["Resolution and Presentation",1007],["Use the Resolution and Presentation section to customize aspects of the screen's appearance in the Resolution and Standalone Player Options sections.",1007],["",1007],["Resolution",1007],["This section allows you to customize the screen mode and default size.",1007],["",1007],["Standalone Player Options",1007],["This section allows you to specify how the user can customize the screen. For example, you can determine whether the user can resize the screen and how many instances can run concurrently.",1007],["Property Function ",1007],["Capture Single Screen Enable this option to ensure standalone games in Fullscreen Mode do not darken the secondary monitor in multi-monitor setups. ",1007],["Use Player Log Enable this option to write a log file with debugging information. Defaults to enabled. ",1007],["Resizable Window Enable this option to allow resizing of the desktop player window.Note: If you disable this option, your application can't use the Windowed Fullscreen Mode. ",1007],["Visible in Background Enable this option to display the application in the background if Windowed Fullscreen Mode is used. Note: This will prevent keyboard shortcuts that minimize the app window, for example, Alt+Tab and Windows+M, from functioning. For more information, refer to PlayerSettings.visibleInBackground. ",1007],["Allow Fullscreen Switch Enable this option to allow default OS full-screen key presses to toggle between full-screen and windowed modes. ",1007],["Force Single Instance Enable this option to restrict desktop players to a single concurrent running instance. ",1007],["Use DXGI flip model swap chain for D3D11 Using the flip model ensures the best performance. This setting affects the D3D11 graphics API. Disable this option to fall back to the Windows 7-style BitBlt model. For more information, see PlayerSettings.useFlipModelSwapchain. ",1007],["",1007],["Splash Image",1007],["Use the Virtual Reality Splash Image setting to select a custom splash image for Virtual Reality displays. For information on common Splash Screen settings, see Splash Screen.",1007],["",1007],["Other Settings",1007],["This section allows you to customize a range of options organized into the following groups:",1007],["",1007],["Rendering",1007],["Use these settings to customize how Unity renders your game for desktop platforms.",1007],["Property Function ",1007],["Color Space Choose which color space to use for rendering: Gamma or Linear. Refer to the Linear rendering overview for an explanation of the difference between the two. ",1007],["Auto Graphics API for Windows Enable this option to use the best Graphics API on the Windows machine the game is running on. Disable it to add and remove supported Graphics APIs. ",1007],["Auto Graphics API for Mac Enable this option to use the best Graphics API on the Mac the game is running on. Disable it to add and remove supported Graphics APIs. Windows doesn't support this property. ",1007],["Auto Graphics API for Linux Enable this option to use the best Graphics API on the Linux machine it runs on. Disable it to add and remove supported Graphics APIs. ",1007],["Color Gamut for Mac You can add or remove color gamuts for the Mac platform to use for rendering. Click the plus (+) icon to see a list of available gamuts. A color gamut defines a possible range of colors available for a given device (such as a monitor or screen). The sRGB gamut is the default (and required) gamut. Windows doesn't support this property. ",1007],["Metal Write-Only Backbuffer Allow improved performance in non-default device orientation. This sets the frameBufferOnly flag on the back buffer, which prevents readback from the back buffer but enables some driver optimization. ",1007],["Memoryless Depth Choose when to use memoryless render textures. Memoryless render textures are temporarily stored in the on-tile memory when rendered, not in CPU or GPU memory. This reduces memory usage of your app but you cannot read or write to these render textures.Note: Memoryless render textures are only supported on iOS, tvOS 10.0+, Metal, and Vulkan. Render textures are read/write protected and stored in CPU or GPU memory on other platforms. ",1007],["Unused Never use memoryless framebuffer depth. ",1007],["Forced Always use memoryless framebuffer depth. ",1007],["Automatic Let Unity decide when to use memoryless framebuffer depth. ",1007],["Static Batching Enable this option to use Static batching. ",1007],["Dynamic Batching Enable this option to use Dynamic Batching on your build (enabled by default).Note: Dynamic batching has no effect when a Scriptable Render Pipeline is active, so this setting is only visible when nothing is set in the Scriptable Render Pipeline Asset Graphics setting. ",1007],["Compute Skinning Enable this option to enable DX11/DX12/ES3 GPU compute skinning, freeing up CPU resources. ",1007],["Graphics Jobs Enable this option to instruct Unity to offload graphics tasks (render loops) to worker threads running on other CPU cores. This is intended to reduce the time spent in Camera.Render on the main thread, which is often a bottleneck. ",1007],["Lightmap Encoding Choose Normal Quality or High Quality to set the lightmap encoding. This setting affects the encoding scheme and compression format of the lightmaps. ",1007],["HDR Cubemap Encoding Choose Low Quality, Normal Quality, or High Quality to set the HDR Cubemap encoding. This setting affects the encoding scheme and compression format of the HDR Cubemaps. ",1007],["Lightmap Streaming Whether to use Mipmap Streaming for lightmaps. Unity applies this setting to all lightmaps when it generates them.Note: To use this setting, you must enable the Texture Streaming Quality setting. ",1007],["Streaming Priority Set the priority for all lightmaps in the Mipmap Streaming system. Unity applies this setting to all lightmaps when it generates them.Positive numbers give higher priority. Valid values range from -128 to 127. ",1007],["Frame Timing Stats Enable this property to gather CPU and GPU frame time statistics. Use this together with the Dynamic Resolution camera setting to determine if your application is CPU or GPU bound. ",1007],["Use Display In HDR Mode (Windows Only) Enable this checkbox to make the game automatically switch to HDR mode output when it runs. This only works on displays that support this feature. If the display doesn't support HDR mode, the game runs in standard mode. ",1007],["Swap Chain Bit Depth Select the number of bits in each color channel for swap chain buffers. Only available if HDR Mode is enabled. ",1007],["Bit Depth 10 Unity uses the R10G10B10A2 buffer format and Rec2020 primaries with ST2084 PQ encoding. ",1007],["Bit Depth 16 Unity uses the R16G16B16A16 buffer format and Rec709 primaries with linear color (no encoding). ",1007],["Load/Store Action Debug Mode Highlights any undefined pixels that might cause rendering problems in your built application. The highlighting appears only in the Game view, and your built application if you select Development Build in Build Settings. For more information, refer to LoadStoreActionDebugModeSettings. ",1007],["Editor Only Highlights the undefined pixels in the Game view, but not in your built application. ",1007],["",1007],["Vulkan Settings",1007],["",1007],["Configuration",1007],["",1007],["API Compatibility Level",1007],["You can choose your mono API compatibility level for all targets. Sometimes a 3rd-party .NET library uses functionality that is outside of your .NET compatibility level. In order to understand what is going on in such cases, and how to best fix it, try following these suggestions:",1007],["Install ILSpy for Windows.",1007],["Drag the .NET assemblies for the API compatilibity level that you are having issues with into ILSpy. You can find these under Frameworks/Mono/lib/mono/YOURSUBSET/.",1007],["Drag in your 3rd-party assembly.",1007],["Right-click your 3rd-party assembly and select Analyze.",1007],["In the analysis report, inspect the Depends on section. The report highlights anything that the 3rd-party assembly depends on, but that is not available in the .NET compatibility level of your choice in red.",1007],["",1007],["Shader Variant Loading",1007],["",1007],["Script Compilation",1007],["Setting Function ",1007],["Scripting Define Symbols Set custom compilation flags. For more details, refer to Platform dependent compilation. ",1007],["Additional Compiler Arguments Add entries to this list to pass additional arguments to the Roslyn compiler. Use one new entry for each additional argument.To create a new entry, press the ‘+’ button. To remove an entry, press the ‘-’ button.When you have added all desired arguments, click the Apply button to include your additional arguments in future compilations. The Revert button resets this list to the most recent applied state. ",1007],["Suppress Common Warnings Disable this setting to display the C# warnings CS0169 and CS0649. ",1007],["Allow 'unsafe' Code Enable support for compiling ‘unsafe’ C# code in a pre-defined assembly (for example, Assembly-CSharp.dll). For Assembly Definition Files (.asmdef), click on one of your .asmdef files and enable the option in the Inspector window that appears. ",1007],["Use Deterministic Compilation Disable this setting to prevent compilation with the -deterministic C# flag. With this setting enabled, compiled assemblies are byte-for-byte identical each time they're compiled.For more information, refer to Microsoft’s deterministic compiler option documentation. ",1007],["",1007],["Optimization",1007],["",1007],["Logging",1007],["",1007],["Legacy",1007],["Property Function ",1007],["Clamp BlendShapes (Deprecated) Enable the option to clamp the range of blend shape weights in SkinnedMeshRenderers. ",1007],["Import and configure plug-ins",1008],["If you have a managed plug-in or a native plug-in, you can import it into Unity, then configure it. Within the Editor, a plug-in is treated as an asset, similar to a script, and you can configure it in an Inspector window.",1008],["You can use the plug-in configurations to specify where a plug-in runs; which platforms and which platform configurations, as well as under which conditions",1008],["Import a plug-in",1008],["The simplest way to import a plug-in to your project is to click and drag the plug-in to the Assets folder or one of its subfolders. Unity recognizes specific file and folder types as plug-ins. It can also apply default settings that match the plug-in’s intended platform.",1008],["Supported plug-in file and folder types",1008],["Unity treats files with the following extensions as a plug-in:",1008],["a",1008],[".aar",1008],[".bc",1008],[".c",1008],[".cc",1008],[".cpp",1008],[".dll",1008],[".def",1008],[".dylib",1008],[".h",1008],[".jar",1008],[".jslib",1008],[".jspre",1008],[".m",1008],[".mm",1008],[".prx",1008],[".rpl",1008],[".so",1008],[".sprx",1008],[".suprx",1008],[".swift",1008],[".winmd",1008],[".xex",1008],[".xib",1008],["Unity also treats certain folders as bundled plug-ins. Unity doesn’t look for additional plug-in files within these folders, so everything within the folder is considered a single plug-in. Unity treats folders with the following extensions as a bundled plug-in:",1008],[".androidlib",1008],[".bundle",1008],[".framework",1008],[".plugin",1008],["Plug-in default settings",1008],["Unity automatically applies platform-specific default settings to the plug-in if the plug-in’s path within the Assets folder matches a platform-specific pattern. If the path doesn’t match any pattern, Unity applies the Editor platform default settings to the plug-in.",1008],["The following table shows the path patterns Unity recognizes. Portions of the path that appear in brackets are optional. When the path includes double dots, it can include more folders.",1008],["Folder path patterns Default settings ",1008],["Assets/../Editor/(x86 or x86_64 or x64) Platform: Editor onlyCPU (optional): Based on the subfolder, if present. ",1008],["Assets/../Plugins/(x86_64 or x86 or x64) Platform: Windows, Linux and macOSCPU (optional): Based on the subfolder, if present. ",1008],["Assets/Plugins/iOS Platform: iOS ",1008],["Assets/Plugins/WSA/(SDK80 or SDK81 or PhoneSDK81)/(x86 or ARM) Platform: Universal Windows PlatformSDK (optional): Based on the subfolder, if present. For compatibility reasons, SDK81 is Win81, PhoneSDK81 is WindowsPhone81.CPU (optional): Based on the subfolder, if presentNote: You can use the keyword Metro instead of WSA. ",1008],["Change plug-in settings",1008],["In Unity, plug-ins are either managed or native. The following table shows which settings are relevant for each type of plug-in:",1008],["Setting Managed Native ",1008],["Select platforms for plugin x x",1008],["Platform settings x x ",1008],["Asset Labels x x ",1008],["Asset Bundles x x ",1008],["General x ",1008],["Define Constraints x ",1008],["Plugin load settings x ",1008],["To view and change plug-in settings in the Inspector, select the plug-in file in the Project window.",1008],[" Common plug-in settings",1008],["Select platform for plugin** and Platform settings specify in which builds Unity includes the plug-in.",1008],["The following table describes the common settings.",1008],["Setting Options Notes ",1008],["Select platforms for plugin • Editor: For play mode and for any scripts that run at edit time.• Standalone: Windows, Linux and macOS.• Any platform included in your Unity installation, such as Android, iOS and WebGL. To allow the plug-in to work with platforms that aren’t included in Unity yet, check Any Platform. You can exclude individual platforms if you do not support them.When you import a plug-in, Unity loads it into memory. A native plug-in cannot be unloaded; it remains loaded in a Unity session even after you change its settings. To unload the plug-in, you must restart Unity. ",1008],["Platform settings For each platform you’ve selected, you can specify additional conditions, such as CPU architecture and dependencies. Unity shows only settings that apply to your platforms and, where possible, to your specific plug-in type on that platform. For example, a native plug-in file with a .dll extension can run only on Windows, so Unity shows only Windows settings. ",1008],["Editor • CPU architecture• OS Most managed plug-ins are compatible with any CPU and OS.Most native plug-ins are only compatible with a single OS and, depending on how they were compiled, might be compatible with only a single CPU architecture. ",1008],["Windows, Linux and macOS • CPU architecture• OS Managed libraries are typically compatible with any OS and CPU architecture, unless they access specific system APIs.Native libraries are only compatible with a single OS, but can be compatible with the 32-bit, the 64-bit, or both CPU architectures. ",1008],["Universal Windows Platform See Universal Windows Platform: Plugins on IL2CPP Scripting Backend. ",1008],["Android CPU architecture The CPU architecture must match the architecture that the library was compiled for. Unity does not validate your settings.See also: AAR plug-ins and Android Libraries. ",1008],["iOS and tvOS • Framework dependencies• Add to Embedded Binaries• Compile flags When you select Add to Embedded Binaries option, Unity sets the Xcode project options to copy the plug-in file into the final application package. Do this for:• Dynamically loaded libraries.• Bundles and frameworks containing dynamically loaded libraries.• Any assets and resources that need to be loaded at run time.In the Compile Flags field, set the compile flags for plug-in source code files that Unity must compile as part of the build. ",1008],["Tip**: For information on the other common settings, see Asset Bundles and Searching in the Editor.",1008],["Managed plug-in settings",1008],["Managed plug-ins can be third-party libraries or user-compiled assemblies that you want to include in the project.",1008],["General - Auto Reference",1008],["The Auto Reference setting controls how assembly definitions in the project reference a plug-in file. When you enable Auto Reference, all predefined assemblies and assembly definitions automatically reference the plug-in file.",1008],["Auto Reference** is enabled by default.",1008],["To limit the scope in which a plug-in can be referenced, disable Auto Reference. You then need to explicitly declare all references to that plug-in. You might want to do this if:",1008],["You want to prevent scripts from mistakenly using the plug-in.",1008],["You are iterating on the plug-in and want to reduce compilation time. If you explicitly declare a plug-in, Unity recompiles only the dependent assemblies, not your entire project.",1008],["You want to prevent plug-ins used in an Asset Store package from conflicting with other code in a project into which the package is imported.",1008],["When you disable Auto Reference Unity cannot reference a plug-in from the predefined assemblies it creates for your project. These predefined assemblies contain all the scripts in your project that you have not assigned to another assembly using an assembly definition file. To reference classes, functions, or other resources from a plug-in that has the Auto Reference property disabled, the referencing code must be in an assembly created with an assembly definition file. For example, if a set of scripts in your project uses a plug-in, you must create an assembly definition file for those scripts, and add an explicit reference to the plug-in in the definition file.",1008],["More than one assembly can use the plug-in, but all assemblies must explicitly declare the dependency. To learn more about assembly definitions in Unity, see Assembly definitions.",1008],["Note**: The Auto Reference option has no effect on whether a file is included in the build. To control Build Settings for plug-ins use Platform settings.",1008],["General - Validate References",1008],["Unity can check that your plug-in’s references are available in the project. If you don’t perform this validation, users can encounter runtime errors when the application tries to use a missing reference.",1008],["Enable the Validate References option to check:",1008],["Whether the plug-in's references exist. For example, if your plug-in references the plug-in Newtonsoft.Json.dll, and Unity cannot find Newtonsoft.Json.dll, Unity displays an error.",1008],["Whether strong named references will be able to load. This is important because strong named references need to match the version. For example, if you compile a plug-in with a reference to \"b.dll\" version 2.0.0, that version must be in the project.",1008],["If you don’t want to check strong named references, but still want to check that references exist:",1008],["In the Plugin inspector, enable Validate References.",1008],["In Project Settings > Player > Other Settings > disable Assembly Version Validation.",1008],["Define Constraints",1008],["You can specify conditions under which Unity loads the plug-in to memory and references it. These conditions are symbols that must be satisfied, which means either defined or undefined.",1008],["Constraints work like the #if preprocessor directive in C#, but on the assembly level instead of the script level. You can learn more about constraints in Assembly Definition properties.",1008],["You can use any of Unity’s built-in define symbols, or add symbols in Project Settings > Player > Other Settings > Script Compilation > Scripting Define Symbols. The symbols you add are platform-specific, so you need to define them for each relevant platform. See Platform dependent compilation for more information, including a list of the built-in symbols.",1008],["Tip**: To specify that a symbol must be undefined, prefix it with a negating ! (exclamation mark) symbol.",1008],["In the following example, we want Unity to load and reference the plug-in only on non-IL2CPP scripting runtimes for Unity 2018.3 or newer. We define two constraints, and both must be met:",1008],["ENABLE_IL2CPP is not defined",1008],["UNITY_2018_3_OR_NEWER is defined",1008],["Plugin load settings - Load on startup",1008],["You can start executing native code that is independent of graphics initialization, scripts, asset loading, scenes, and so on. This is different to the default way a player loads a native plug-in, which is to wait until the first call to one of the plug-in’s functions, usually performed by a script.",1008],["To load plug-ins before the application executes any scripts:",1008],["Implement UnityPluginLoad in the plug-in. See Low-level native plug-in interface.",1008],["In the Editor, select Plugin load settings > Load on startup.",1008],["Tip**: For an example of a C# script calling plug-in functions, see Manual: Native plug-ins.",1008],["Plug-ins",1009],["In Unity, you normally use scripts to create functionality, but you can also include code created outside Unity in the form of a plug-in. You can use two different kinds of plug-in in Unity:",1009],["Managed plug-ins**: managed .NET assemblies you can create with tools like Visual Studio. They only contain .NET code, which means they can’t access any features that the .NET libraries do not support. For more information, see Microsoft’s documentation of managed code.",1009],["Native plug-ins**: platform-specific native code libraries. They can access features like operating system calls and third-party code libraries that would otherwise be unavailable to Unity.",1009],["Managed code is accessible to the standard .NET tools that Unity uses to compile scripts. The only difference between managed plug-in code and Unity script code is that the plug-ins are compiled outside of Unity and so Unity might not be able to access the source. When using native plug-ins, Unity’s tools can’t access third-party code libraries in the same way that they can access the managed libraries. For example, if you forget to add a managed plug-in file to the project, you will get standard compiler error messages. Whereas, if you forget to add a native plug-in file to the project, you will only see an error report when you try to run the project.",1009],["The following pages explain how to create and use plug-ins in your Unity Projects:",1009],["2018-03-19  ",1009],["MonoDevelop replaced by Visual Studio from 2018.1",1009],["Create and use plug-ins in Android",1010],["You can use plug-ins to deliver resources and call Java and C++ code created outside of Unity from your C# scripts. They enable you to access features, like third-party code libraries and operating systems calls, that would otherwise not be available to Unity. For more information about plug-ins with Unity, see Plug-ins.",1010],["This section describes how to create your own plug-ins and use them in Android projects. The information on these pages assumes you already know how to create native plug-ins for Unity. For more information about native plug-ins and their uses, see Native plug-ins.",1010],["Topic Description ",1010],["------------------------------------------------------------ ------------------------------------------------------------ ",1010],["Android plug-in types Understand the different plug-in types available for Unity Android applications. ",1010],["Call Java and Kotlin plug-in code from C# scripts Interact with Java and Kotlin plug-in code from your C# scripts. ",1010],["Extend the default Unity activity Override basic interactions between the Android operating system and the Unity Android application. ",1010],["Unity as a Library",1010],["If you upgrade your project to Unity 2019.4 or above, the introduction of Unity as a Library might require you to adapt your native and managed plug-ins to work properly for Android.",1010],["Building plug-ins for desktop platforms",1011],["Plug-ins for desktop platforms are libraries of native code you can write in C, C++ and Objective C. This page describes plug-ins for macOS, Windows, and Linux. For more information, refer to Native plug-ins.",1011],["macOS plug-ins",1011],["You can deploy macOS plug-ins as bundles or, if you are using the IL2CPP scripting backend, loose C++ files, which you can invoke with [DllImport(\"__Internal\")] syntax. For further information on loose C++ plug-ins refer to C++ source code plugins for IL2CPP.",1011],["To create the bundle project with Xcode:",1011],["Open Xcode.",1011],["Select File > New > Project > macOS > Framework & Library > Bundle.",1011],["For more information about working with Xcode, refer to Apple’s documentation on Xcode.",1011],["Requirements",1011],["You can build your plug-in as a universal binary that's compatible with 64-bit architectures. Alternatively, you can provide separate dylib files.",1011],["If you are using C++ (.cpp) or Objective-C (.mm) to implement the plug-in, declare the functions with C linkage to avoid name mangling issues:",1011],["extern \"C\"",1011],["float ExamplePluginFunction ();",1011],["Windows plug-ins",1011],["Plug-ins on Windows are either .dll files with exported functions, or loose C++ files if you are using IL2CPP. You can use most languages and development environments that can create .dll files to create plug-ins. You must declare any C++ functions with C linkage to avoid name mangling issues.",1011],["Linux plug-ins",1011],["Plug-ins on Linux are .so files with exported functions. Although these libraries are usually in C or C++, you can use any language. You must declare any C++ functions with C linkage to avoid name mangling issues.",1011],["When you build the native plug-ins for Linux, if the built library has dependencies on another native plug-in, you must specify the rpath for that library while compiling it.",1011],["Add the linker flag -Wl, -rpath=$ORIGIN to specify the runtime search path. The linker flag instructs the loader to find its dependencies in the current directory of the library besides searching the system search path. You can add other linker flags along with -Wl, -rpath=$ORIGIN, however, Unity doesn’t control them. For example, /usr/bin/g++ -o binary.c.o -Wl,-rpath=$ORIGIN.",1011],["Alternatively, you can set LD_LIBRARY_PATH=dependency path in the environment to instruct the loader to search that path for dependencies. Linux doesn’t automatically search the current directory for dependencies. Make sure to set the correct dependency search path because incorrect path causes missing library errors in the Unity Editor.",1011],["Managing plug-ins inside Unity",1011],["In Unity, the Plugin Inspector manages your plug-ins. To access the Plugin Inspector, select a plug-in file in the Project window. For Standalone platforms you can choose the CPU architecture with which the library is compatible. For cross-platform plug-ins you must include the .bundle file (for macOS), the .dll file(for Windows), and the .so file (for Linux). Unity automatically picks the right plug-in for the target platform and includes it with the player. For further information, refer to Import and configure plug-ins.",1011],["Invoking your plug-in from a C# script",1011],["Place your built plug-in in the Assets folder or the appropriate architecture-specific sub-directory in your Unity Project. Unity then finds it by name when you invoke it from a C# script. For example: [DllImport (\"PluginName\")] private static extern float ExamplePluginFunction ();",1011],["Note**: Don't include the library prefix or file extension in thePluginName value. For example, if the actual name of the plug-in file is PluginName.dll on Windows or libPluginName on Linux, the value should be PluginName in both cases.",1011],["Example plug-ins",1011],["You can download and use these projects to learn how to implement plug-ins in Unity.",1011],["Simplest Plugin Example: This project implements basic operations (for example, print a number, print a string, add two floats and add two integers). This project includes Windows, macOS and Linux project files.",1011],["Native Renderer Plugin: This is a low-level rendering plug-in that renders a rotating triangle from C++ code after all regular rendering is done and fills a procedural texture from C++ code, using Texture.GetNativeTexturePtr to access it. This project includes Windows, UWP, macOS, WebGL and Android files.",1011],["Building plug-ins for iOS",1012],["This page describes how to build native code plug-ins for the iOS platform.",1012],["Building an application with a native plug-in for iOS",1012],["To build an application with a native plug-in for iOS, follow these steps:",1012],["For each native function you want to call, define an extern method in the C# file as follows:",1012],["```csharp",1012],["[DllImport (\"__Internal\")]",1012],["private static extern float FooPluginFunction();",1012],["Add your native code source files to the Unity Project.",1012],["Customize the plug-in's settings in the Plugin Inspector window. For example, if your native code is iOS-specific, make sure the plug-in is only enabled for iOS.",1012],["Note:** If you are using C++ (.cpp) or Objective-C++ (.mm) to implement the plug-in, you must declare functions with C linkage to avoid issues with name mangling:",1012],["extern \"C\" {",1012],["float FooPluginFunction();",1012],["Plug-ins written in C or Objective-C don't need this, because these languages don't use name mangling.",1012],["Using your plug-in from C#",1012],["Your app can only call iOS native plug-ins when it's deployed on an actual device, so you should wrap all native code methods with an additional C# code layer. This code should either use UNITY_IOS && !UNITY_EDITOR conditional compilation, or check Application.platform and only calll native methods when the app is running on a device. A simple way to implement this is:",1012],["```csharp",1012],["void MyMethod()",1012],["if UNITY_IOS && !UNITY_EDITOR",1012],["CallNativeMethodImplementation();",1012],["else",1012],["CallEditorMethodImplementation();",1012],["endif",1012],["For a more detailed implementation, download the Bonjour Browser sample below.",1012],["Calling C# back from native code",1012],["Unity iOS supports limited native-to-managed callback functionality. You can do this in one of two ways:",1012],["Using UnitySendMessage",1012],["Via delegates",1012],["Using UnitySendMessage",1012],["This option is simpler, but has some limitations. It looks like this:",1012],["UnitySendMessage(\"GameObjectName1\", \"MethodName1\", \"Message to send\");",1012],["There are three parameters:",1012],["The name of the target GameObject",1012],["The script method to call on that object",1012],["The message string to pass to the called method",1012],["Using UnitySendMessage has the following limitations:",1012],["From native code, you can only call script methods that correspond to the following signature: void MethodName(string message);.",1012],["Calls to UnitySendMessage are asynchronous and have a delay of one frame.",1012],["If two or more GameObjects have the same name, this can cause conflicts when you use UnitySendMessage.",1012],["Using delegates",1012],["This is the more complex option. When you use delegates, the method on the C# side must be static and be marked with the MonoPInvokeCallback attribute. You must pass the method as a delegate to the extern method which is implemented in native code as a function that takes a pointer to function with the corresponding signature. The function pointer in the native code then leads back to the C# static method.",1012],["The C# code for this method looks like this:",1012],["```csharp",1012],["delegate void MyFuncType();",1012],["[AOT.MonoPInvokeCallback(typeof(MyFuncType))]",1012],["static void MyFunction() { }",1012],["static extern void RegisterCallback(MyFuncType func);",1012],["The C code that accepts the callback then looks like this:",1012],["```c",1012],["typedef void (*MyFuncType)();",1012],["void RegisterCallback(MyFuncType func) {}",1012],["Automated plug-in integration",1012],["Unity supports automated plug-in integration and copies all files with the following extensions to the generated Xcode project if you enable them for iOS in the Plugin Inspector window: .a, .m , .mm, .c, .cpp, .h. If any files with these extensions are located in the Assets/Plugins/iOS folder, Unity only enables them for the iOS platform.",1012],["Note:** After the files are copied to the generated Xcode project, they're no longer linked to their counterparts in your Unity Project. If you change these files in Xcode, you must copy them back into your Unity Project. Otherwise, Unity will overwrite them the next time you build your Project.",1012],["Tips for iOS:",1012],["Managed-to-unmanaged calls are quite processor-intensive on iOS. Try to avoid calling multiple native methods per frame.",1012],["Wrap your native methods with an additional C# layer that calls native code on the device and returns dummy values in the Editor.",1012],["String values returned from a native method should be UTF--8 encoded and allocated on the heap. Mono marshalling calls free for strings like this.",1012],["Bonjour Browser sample",1012],["You can download a simple example of how to use a native code plug-in here: Bonjour Browser Sample.",1012],["This example demonstrates how you can invoke Objective-C code from a Unity iOS application. This application implements a simple Bonjour client and consists of:",1012],["A Unity iOS Project where Plugins\\Bonjour.cs is the C# interface to the native code, and BonjourTest.cs is the script that implements the application logic",1012],["Native code (located in Assets/Plugins/iOS) that should be added to the built Xcode project as described in the Automated plug-in integration section above",1012],["Position an overlay",1013],["Move overlays in the Scene view to organize your workspace.",1013],["Overlays can float or dock to the edges or corners of the Scene view.",1013],["If you want to save your overlay configuration, refer to Create and manage overlay configurations.",1013],["Move overlays",1013],["Put overlays anywhere in the Scene view.",1013],["To move an overlay in the Scene view:",1013],["Click and hold the handle (=) of the overlay you want to move.",1013],["Drag the overlay to move it.",1013],["Note:** Overlays that float in the Scene view can overlap each other. Select an overlay to bring it to the front.",1013],["Dock overlays",1013],["Overlays can dock to the top, bottom, sides, and corners of the Scene view.",1013],["You can dock more than one overlay to the same edge or corner of the Scene view. However, multiple overlays docked to the same edge or corner are not connected with each other. If you move a docked overlay, other overlays docked to the same location do not move.",1013],["Expanded overlays that dock to the top or bottom of the Scene view display in the horizontal layout. Expanded overlays that dock to sides of the Scene view display in the vertical layout.",1013],["Overlays that aren't toolbars collapse when they dock to an edge of the Scene view. For example, the Orientation overlay collapses when it docks. Click the down arrow to access a collapsed overlay's options.",1013],["To dock an overlay in the Scene view:",1013],["Click and hold the handle (=) of the overlay you want to dock.",1013],["Drag the overlay to a corner or edge of the Scene view. If the overlay can dock, the corner or edge highlights in blue.",1013],["Release the overlay.",1013],["Additional resources",1013],["\nOverlays\n",1013],["\nChange the layout of an overlay\n",1013],["\nCreate and manage overlay configurations\n",1013],["Position GameObjects",1014],["To alter the Transform component of the GameObject, use the mouse to manipulate any Gizmo axis, or type values directly into the number fields of the Transform component in the Inspector.",1014],["Alternatively, you can select each of the five Transform modes from the Scene view's Tools Overlay or with a hotkey:",1014],["W for Move",1014],["E for Rotate",1014],["R for Scale",1014],["T for RectTransform",1014],["Y for Transform",1014],["Move",1014],["At the center of the Move Gizmo, there are three small squares you can use to drag the GameObject within a single plane (meaning you can move two axes at once while the third keeps still).",1014],["If you hold shift while clicking and dragging in the center of the Move Gizmo, the center of the Gizmo changes to a flat square. The flat square indicates that you can move the GameObject around on a plane relative to the direction the Scene view Camera is facing.",1014],["Rotate",1014],["With the Rotate tool selected, change the GameObject's rotation by clicking and dragging the axes of the wireframe sphere Gizmo that appears around it. As with the Move Gizmo, the last axis you changed will be colored yellow. Think of the red, green and blue circles as performing rotation around the red, green and blue axes that appear in the Move mode (red is the x-axis, green in the y-axis, and blue is the z-axis). Finally, use the outermost circle to rotate the GameObject around the Scene view z-axis. Think of this as rotating in screen space.",1014],["Scale",1014],["The Scale tool lets you rescale the GameObject evenly on all axes at once by clicking and dragging on the cube at the center of the Gizmo. You can also scale the axes individually, but you should take care if you do this when there are child GameObjects, because the effect can look quite strange.",1014],["RectTransform",1014],["The RectTransform is commonly used for positioning 2D elements such as Sprites or UI elements, but it can also be useful for manipulating 3D GameObjects. It combines moving, scaling and rotation into a single Gizmo:",1014],["Click and drag within the rectangular Gizmo to move the GameObject.",1014],["Click and drag any corner or edge of the rectangular Gizmo to scale the GameObject.",1014],["Drag an edge to scale the GameObject along one axis.",1014],["Drag a corner to scale the GameObject on two axes.",1014],["To rotate the GameObject, position your cursor just beyond a corner of the rectangle. The cursor changes to display a rotation icon. Click and drag from this area to rotate the GameObject.",1014],["Note that in 2D mode, you can't change the z-axis in the Scene using the Gizmos. However, it is useful for certain scripting techniques to use the z-axis for other purposes, so you can still set the z-axis using the Transform component in the Inspector.",1014],["For more information on transforming GameObjects, see documentation on the Transform Component.",1014],["Transform",1014],["The Transform tool combines the Move, Rotate and Scale tools. Its Gizmo provides handles for movement and rotation. When the Tool Handle Rotation is set to Local (see below), the Transform tool also provides handles for scaling the selected GameObject.",1014],["",1014],["Gizmo handle position toggles",1014],["The Gizmo handle position toggles found in the Tool Settings Overlay are used to define the location of any Transform tool Gizmo, and the handles used to manipulate the Gizmo itself.",1014],["For position",1014],["Use the dropdown menu to switch between Pivot and Center.",1014],["Pivot positions the Gizmo at the actual pivot point of the GameObject, as defined by the Transform component.",1014],["Center positions the Gizmo at a center position based on the selected GameObjects.",1014],["For rotation",1014],["Use the dropdown menu to switch between Local and Global.",1014],["Local keeps the Gizmo's rotation relative to the GameObject's.",1014],["Global clamps the Gizmo to world space orientation.",1014],["Snapping",1014],["Unity provides three types of snapping:",1014],["World grid snapping: Snap a GameObject to a grid projected along the X, Y, or Z axes or transform a GameObject in increments along the X, Y, or Z axes. This is only available while using the World, or Global, handle orientation.",1014],["Surface snapping: Snap the GameObject to the intersection of any Collider.",1014],["Vertex snapping: Snap any vertex from a given Mesh to the position of another Mesh's vertex or surface. You can snap vertex to vertex, vertex to surface, and pivot to vertex.",1014],["When you drag a Prefab into a scene, Unity places them at the cursor position by default. You can preserve any offsets in the Prefab in relation to the cursor position by holding the Alt key while dragging a Prefab.",1014],["",1014],["Surface snapping",1014],["To snap a GameObject to the intersection of a Collider, do the following:",1014],["Make sure the Move tool is active.",1014],["Hold Shift+Ctrl (macOS: Shift+Command), then click and hold a GameObject's tool handle.",1014],["Drag the GameObject on to another GameObject with a Collider.",1014],["",1014],["Vertex snapping",1014],["Use vertex snapping to quickly assemble your Scenes: take any vertex from a given Mesh and place that vertex in the same position as any vertex from any other Mesh you choose. For example, use vertex snapping to align road sections precisely in a racing game, or to position power-up items at the vertices of a Mesh.",1014],["Follow the steps below to use vertex snapping:",1014],["Select the Mesh you want to manipulate and make sure the Move tool is active.",1014],["Press and hold the V key to activate the vertex snapping mode.",1014],["Move your cursor over the vertex on your Mesh that you want to use as the pivot point.",1014],["Hold down the left mouse button once your cursor is over the vertex you want and drag your Mesh next to any other vertex on another Mesh.",1014],["To snap a vertex to a surface on another Mesh, add and hold Shift+Ctrl (macOS: Shift+Command) while you move over the surface you want to snap to.",1014],["To snap the pivot to a vertex on another Mesh, add and hold Ctrl (macOS: Command) while you move the cursor to the vertex you want to snap to.",1014],["Release the mouse button and the V key when you are happy with the results (Shift+V acts as a toggle of this functionality).",1014],["Rotate a GameObject towards a point on a collider",1014],["Use look-at rotation to rotate a GameObject towards a point on the surface of a collider. This is useful to orient GameObjects towards a target, such as a camera or player.",1014],["To use look-at rotation:",1014],["In the Scene view, select the GameObject you want to rotate.",1014],["In the Tools overlay, select the Rotate tool or press E.",1014],["Click the rotate Gizmo handle to select it.",1014],["Hold Shift+Ctrl (macOS: Shift+Command) and move your mouse over the surface of a collider you want to rotate the selected GameObject towards.",1014],["Screen Space Transform",1014],["While using the Transform tool, hold down the Shift key to enable Screen Space mode. This mode allows you to move, rotate and scale GameObjects as they appear on the screen, rather than in the Scene.",1014],["Additional resources",1014],["Post-processing and full-screen effects",1015],["Unity provides a number of post-processing effects and full-screen effects that can greatly improve the appearance of your application with little set-up time. You can use these effects to simulate physical camera and film properties, or to create stylised visuals.",1015],["This page contains the following information:",1015],["The images below demonstrate a Scene with and without post-processing.",1015],["",1015],["Render pipeline compatibility",1015],["Which post-processing effects are available and how you apply them depend on which render pipeline you are using. A post-processing solution from one render pipeline is not compatible with other render pipelines.",1015],["This table contains information about which of Unity's post-processing solutions are compatible with each of Unity's render pipelines.",1015],["Render pipeline Post-processing support ",1015],["",1015],["Built-in Render Pipeline The Built-in Render Pipeline does not include a post-processing solution by default. To use post-processing effects with the Built-in Render Pipeline, download the Post-Processing Version 2 package. For information on using post-processing effects in the Built-in Render Pipeline, see the Post-Processing Version 2 documentation. ",1015],["Universal Render Pipeline (URP) URP includes its own post-processing solution, which Unity installs when you create a Project using a URP Template. For information on using post-processing effects in URP, see the URP post-processing documentation. ",1015],["High Definition Render Pipeline (HDRP) HDRP includes its own post-processing solution, which Unity installs when you create a Project using an HDRP Template. For information on using post-processing effects in HDRP, see the HDRP post-processing documentation. ",1015],["Note:** Post processing stack version 1 is now deprecated and should not be used.",1015],["",1015],["Effect availability and location",1015],["This table contains information on which post-processing effects and full-screen effects are available in Unity's different post-processing solutions, how to find those effects, and what other effects you can use to achieve a similar result.",1015],["In previous versions of Unity, you applied all post-processing effects and full-screen effects in the same way; by adding components to a Camera. In more recent versions of Unity, you can apply these effects in different ways.",1015],["Note that Unity implements effects differently depending on the package you are using. This means that effects vary in terms of performance, appearance, and configuration between packages.",1015],["Effect Name Description Available in URP integrated solution? Available in HDRP integrated solution? Available in PPv2 package? ",1015],["---------- :-------------- :-------------- :-------------- :-------------- ",1015],["Ambient Occlusion The Ambient Occlusion effect darkens the areas in your scene that are not exposed to ambient lighting. Yes See Universal Render Pipeline: Ambient Occlusion You can also apply Ambient Occlusion as part of your baked lighting. For more information, see Baked Ambient Occlusion Yes Choose from SSAO using a Volume Override, or Ray-Traced Ambient Occlusion You can also apply per-Material Ambient Occlusion You can also apply Ambient Occlusion as part of your baked lighting. For more information, see Baked Ambient Occlusion Yes See Post Processing: Ambient Occlusion You can also apply Ambient Occlusion as part of your baked lighting. For more information, see Baked Ambient Occlusion ",1015],["Anti-aliasing The Anti-aliasing effect softens the appearance of edges in your scene. Depending on your render pipeline, you can use MSAA (hardware anti-aliasing), or FXAA, SMAA, or TAA (anti-aliasing post-processing effects) Yes FXAA and SMAA can be enabled in the Camera component You can also configure MSAA (hardware anti-aliasing) in Quality Settings Yes FXAA, SMAA, and TAA are implemented in Project Settings > Frame Settings > HDRP Default Settings; see Anti-aliasing in the High Definition Render PipelineYou can also configure MSAA (hardware anti-aliasing) in the HDRP Asset - see Anti-aliasing in the High Definition Render Pipeline. Yes For FXAA, SMAA, and TAA, see Post Processing: Anti-aliasing You can also configure MSAA (hardware anti-aliasing) in Quality Settings ",1015],["Auto Exposure The Auto Exposure effect dynamically adjusts the exposure of an image to match its mid-tone. No Yes In High Definition Render Pipeline: Exposure Volume Override, when Mode is set to Automatic Yes See Post Processing:Auto Exposure ",1015],["Bloom The Bloom effect makes bright areas in your image glow.Note that Bloom works differently in each package, and requires different settings; read the documentation for a given package for more information. Yes See Universal Render Pipeline: Bloom Yes See High Definition Render Pipeline: Bloom YesSee Post Processing: Bloom ",1015],["Channel Mixer The Channel mixer lets you adjust the balance of each input color. YesSee Universal Render Pipeline: Channel Mixer YesSee High Definition Render Pipeline: Channel Mixer YesSee Channel Mixer in Post Processing: Color Grading ",1015],["Chromatic Aberration The Chromatic Aberration effect disperses colors along the boundaries between dark and light areas of the image. YesSee Universal Render Pipeline: Chromatic Aberration YesSee High Definition Render Pipeline: Chromatic Aberration YesSee Post Processing: Chromatic Aberration ",1015],["Color Adjustments The Color Adjustments effect lets you change the overall tone, brightness, and contrast of the final rendered image. YesSee Universal Render Pipeline: Color Adjustments YesSee High Definition Render Pipeline: Color Adjustments YesSee Tone in Post Processing: Color Grading ",1015],["Color Curves The Color Curves effect lets you adjust specific ranges in hue, saturation, or luminosity. YesSee Universal Render Pipeline: Color Curves YesSee High Definition Render Pipeline: Color Curves YesSee Grading Curves in Post Processing: Color Grading ",1015],["Fog The Fog effect simulates the look of fog or mist in outdoor environments. No YesSee High Definition Render Pipeline: Fog Volume Override (note that this is not implemented as a full-screen effect or post-processing effect) YesSee Post Processing: Deferred Fog ",1015],["Depth of Field The Depth of Field effect blurs the background of your image while the objects in the foreground stay in focus. YesSee Universal Render Pipeline: Depth of Field YesSee High Definition Render Pipeline: Depth of Field YesSee Post Processing: Depth of Field ",1015],["Grain The Grain effect overlays film noise onto your image. YesSee Universal Render Pipeline: Film Grain YesSee High Definition Render Pipeline: Film Grain YesSee Post Processing: Grain ",1015],["Lens Distortion The Lens Distortion effect simulates distortion caused by the shape of a real-world camera lens. YesSee Universal Render Pipeline: Lens Distortion YesSee High Definition Render Pipeline: Lens Distortion Yes See Post Processing: Lens Distortion ",1015],["Lift, Gamma, Gain The Lift, Gamma, Gain effect allows you to perform three-way color grading. Yes See Universal Render Pipeline: Lift, Gamma, Gain Yes See High Definition Render Pipeline: Lift, Gamma, Gain YesSee Trackballs in Post Processing: Color Grading ",1015],["Motion Blur The Motion Blur effect blurs the image in the direction of the camera’s movement Yes See Universal Render Pipeline: Motion Blur YesSee High Definition Render Pipeline: Motion Blur YesSee Post Processing: Motion Blur ",1015],["Panini Projection The Panini Projection effect corrects distortion at the edge of an image caused by a wide field of view. Yes See Universal Render Pipeline: Panini Projection Yes See High Definition Render Pipeline: Panini Projection No ",1015],["Screen Space Reflection The Screen Space Reflection effect creates subtle reflections that simulate wet floor surfaces or puddles. No Yes See High Definition Render Pipeline: Screen Space Reflection YesSee Post Processing: Screen Space Reflection ",1015],["Shadows Midtones Highlights The Shadows Midtones Highlights effect separately controls the tint and brightness of the shadows, midtones, and highlights in your image YesSee Universal Render Pipeline: Shadows, Midtones, Highlights YesSee High Definition Render Pipeline: Shadows Midtones Highlights No ",1015],["Split Toning The Split Toning effect maps two different tones in your image to two specific colors. Yes See Universal Render Pipeline: Split Toning YesSee High Definition Render Pipeline: Split Toning No ",1015],["Tonemapping The Tonemapping effect remaps the values of an image to high dynamic range (HDR) colors YesSee Universal Render Pipeline: Tonemapping YesSee High Definition Render Pipeline: Tonemapping YesSee Tonemapping in Post Processing: Color Grading ",1015],["Vignette The Vignette effect darkens the edges of an image YesSee Universal Render Pipeline: Vignette YesSee High Definition Render Pipeline:Vignette YesSee Post Processing: Vignette ",1015],["White Balance The White Balance effect preserves the white areas in your image and balances other tones around the white areas YesSee Universal Render Pipeline: White Balance YesSee High Definition Render Pipeline: White Balance YesSee White balance in Post Processing: Color Grading ",1015],["Instance overrides",1016],["Instance overrides allow you to create variations between Prefab instances, while still linking those instances to the same Prefab Asset.",1016],["When you modify a Prefab Asset, the changes are reflected in all of its instances. However, you can also make modifications directly to an individual instance. Doing this creates an instance override on that particular instance.",1016],["An example would be if you had a Prefab Asset \"Robot\", which you placed in multiple levels in your game. However, each instance of the \"Robot\" has a different speed value, and a different audio clip assigned.",1016],["There are four different types of instance override:",1016],["Overriding the value of a property",1016],["Adding a component",1016],["Removing a component",1016],["Adding a child GameObject",1016],["There are some limitations with Prefab instances: you cannot reparent a GameObject that is part of a Prefab, and you cannot remove a GameObject that is part of the Prefab. You can, however, deactivate a GameObject, which is a good substitute for removing a GameObject (this counts as a property override).",1016],["In the Inspector window, instance overrides are shown with their name label in bold, and with a blue line in the left margin. When you add a new component a Prefab instance, the blue line in the margin spans the entire component.",1016],["Added and removed components also have plus and minus badges on their icons in the Inspector, and added GameObjects have a plus badge on their icon in the Hierarchy.",1016],["In the Hierarchy window, Prefab instances with overridden or non-default values have an override indicator to show that they have been edited, which Unity displays with a blue line in the left margin with the same appearance as the lines for instance overrides in the Inspector window. For more information, see Hierarchy.",1016],["",1016],["Overrides take precedence",1016],["An overridden property value on a Prefab instance always takes precedence over the value from the Prefab Asset. This means that if you change a property on a Prefab Asset, it doesn’t have any effect on instances where that property is overridden.",1016],["If you make a change to a Prefab Asset, and it does not update all instances as expected, you should check whether that property is overridden on the instance. It is best to only use instance overrides when strictly necessary, because if you have a large number of instance overrides throughout your Project, it can be difficult to tell whether your changes to the Prefab Asset will or won’t have an effect on all of the instances.",1016],["",1016],["Alignment is specific to Prefab instance",1016],["The alignment of a Prefab instance is a special case, and is handled differently to other properties. The alignment values are never carried across from the Prefab Asset to the Prefab instances. This means they can always differ from the Prefab Asset’s alignment without it being an explicit instance override. Specifically, the alignment means the Position and Rotation properties on the root Transform of the Prefab instance, and for a Rect Transform this also includes the Width, Height, Margins, Anchors and Pivot properties.",1016],["This is because it is extremely rare to require multiple instances of a Prefab to take on the same position and rotation. More commonly, you will want your prefab instances to be at different positions and rotations, so Unity does not count these as Prefab overrides.",1016],["Unused Overrides",1016],["The data representing the values of your instance overrides can become unused if the script which declares them is modified or deleted. If this occurs, you can remove the unused override data.",1016],["Overrides at multiple levels",1017],["When you work with Prefabs inside other Prefabs, or with Prefab Variants, overrides can exist at multiple levels, and the same overrides can have multiple different Prefabs they can be applied to.",1017],["",1017],["Choice of apply target",1017],["When you have a Prefab instance which has nested Prefabs inside it, or which is a Prefab Variant, you might have a choice of which Prefab an override should be applied to.",1017],["Consider a Prefab \"Vase\" which is nested inside a Prefab “Table”, and the scene contains an instance of the “Table” Prefab.",1017],["If on this instance, a property on \"Vase\" is overridden, there are multiple Prefabs this override could be applied to: the “Vase” or the “Table”.",1017],["The Apply All button in the Overrides drop-down window only allows applying the override to the outer Prefab - the \"Table\" in this case. But a choice of apply target is available when applying either via the context menu, or via the comparison view for individual components in the Overrides drop-down window.",1017],["In this example, if you choose Apply to Prefab 'Vase', the value is applied to the ‘Vase’ Prefab Asset and is used for all instances of the ‘Vase’ Prefab.",1017],["And, if you choose Apply as Override in Prefab 'Table', the value becomes an override on the instance of ‘Vase’ that is inside the ‘Table’ Prefab. The property is no longer marked as an override on the instance in the Scene, but if you open the ‘Table’ Prefab in Prefab Mode, the property on the ‘Vase’ Prefab instance is marked as an override there.",1017],["The ‘Vase’ Prefab Asset itself is not affected at all when overriding as an override in the 'Table' Prefab Asset. This means that all instances of the ‘Table’ Prefab now have the new value on their ‘Vase’ Prefab instance, but other instances of the ‘Vase’ Prefab that are not part of the ‘Table’ Prefab are not affected.",1017],["If the property on the ‘Vase’ Prefab itself is later changed, it will affect all instances of the ‘Vase’ Prefab, except where that property is overridden. Since it’s overridden on the ‘Vase’ instance inside the ‘Table’ Prefab, the change won’t affect any of the ‘Vase’ instances that are part of ‘Table’ instances.",1017],["",1017],["Applying to inner Prefabs may affect outer Prefabs too",1017],["Applying one or more properties to an inner Prefab Asset can sometimes modify outer Prefab Assets as well, because those properties get their overrides reverted in the outer Prefabs.",1017],["In our example, if Apply to Prefab ‘Vase’ is chosen and the 'Table' Prefab has an override of the value, this override in the 'Table' Prefab is reverted at the same time so that the property on the instance retains the value that was just applied. If this was not the case, the value on the instance would change right after being applied.",1017],["2018-07-31 ",1017],["Nested Prefabs and Prefab Variants added in 2018.3",1017],["Prefabs",1018],["Unity’s Prefab system allows you to create, configure, and store a GameObject complete with all its components, property values, and child GameObjects as a reusable Asset. The Prefab Asset acts as a template from which you can create new Prefab instances in the Scene.",1018],["When you want to reuse a GameObject configured in a particular way – like a non-player character (NPC), prop or piece of scenery – in multiple places in your Scene, or across multiple Scenes in your Project, you should convert it to a Prefab. This is better than simply copying and pasting the GameObject, because the Prefab system allows you to automatically keep all the copies in sync.",1018],["Any edits that you make to a Prefab Asset are automatically reflected in the instances of that Prefab, allowing you to easily make broad changes across your whole Project without having to repeatedly make the same edit to every copy of the Asset.",1018],["You can nest Prefabs inside other Prefabs to create complex hierarchies of objects that are easy to edit at multiple levels.",1018],["However, this does not mean all Prefab instances have to be identical. You can override settings on individual prefab instances if you want some instances of a Prefab to differ from others. You can also create variants of Prefabs which allow you to group a set of overrides together into a meaningful variation of a Prefab.",1018],["You should also use Prefabs when you want to instantiate GameObjects at runtime that did not exist in your Scene at the start - for example, to make powerups, special effects, projectiles, or NPCs appear at the right moments during gameplay.",1018],["Some common examples of Prefab use include:",1018],["Environmental Assets - for example a certain type of tree used multiple times around a level (as seen in the screenshot above).",1018],["Non-player characters (NPCs) - for example a certain type of robot may appear in your game multiple times, across multiple levels. They may differ (using overrides) in the speed they move, or the sound they make.",1018],["Projectiles - for example a pirate’s cannon might instantiate a cannonball Prefab each time it is fired.",1018],["The player’s main character - the player prefab might be placed at the starting point on each level (separate Scenes) of your game.",1018],["Prefab Inspector previews",1018],["When you select a Prefab and view it in the Inspector, the Asset Preview pane in the Inspector shows a preview of the Prefab. If the size of the Prefab is less than 8MB, the Asset Preview pane shows an interactive preview of the Prefab, which allows you to rotate the Prefab inside the Asset Preview pane.",1018],["If the size of the Prefab is greater than 8MB, by default the Asset Preview shows a static preview of the Prefab. To view an interactive preview of a Prefab that is greater than 8MB, click anywhere inside the Asset Preview pane.",1018],["Prefab Variants",1019],["Prefab Variants are useful when you want to have a set of predefined variations of a Prefab.",1019],["For example, you might want to have several different types of GermSlimeTargets in your game, which are all based on the same basic GermSlimeTarget Prefab. However you may want some GermSlimeTargets to carry items, some to move at different speeds, or some to emit extra sound effects.",1019],["To do this, you could set up your initial GermSlimeTarget Prefab to perform all the basic actions you want all GermSlimeTarget to share, then you could create several Prefab Variants to:",1019],["Make a GermSlimeTarget move faster by using a property override on a script to change its speed.",1019],["Make a GermSlimeTarget carry an item by attaching an additional GameObject to its arm.",1019],["Give GermSlimeTarget a slug-like squelch by adding an AudioSource component that plays a squelching sound.",1019],["A Prefab Variant inherits the properties of another Prefab, called the base. Overrides made to the Prefab Variant take precedent over the base Prefab’s values. A Prefab Variant can have any other Prefab as its base, including Model Prefabs or other Prefab Variants.",1019],["",1019],["Creating a Prefab Variant",1019],["There are multiple ways to create a Prefab Variant based on another Prefab.",1019],["You can right-click on a Prefab in the Project view and select Create > Prefab Variant. This creates a variant of the selected Prefab, which initially doesn’t have any overrides. You can open the Prefab Variant in Prefab Mode to begin adding overrides to it.",1019],["You can also drag a Prefab instance in the Hierarchy into the Project window. When you do this, a dialog asks if you want to create a new Original Prefab or a Prefab Variant. If you choose Prefab Variant you get a new Prefab Variant based on the Prefab instance you dragged. Any overrides you had on that instance are now inside the new Prefab Variant. You can open it in Prefab Mode to add additional overrides or edit or remove overrides.",1019],["Prefab Variants are shown with the blue Prefab icon decorated with arrows.",1019],["",1019],["Editing a Prefab Variant",1019],["When a Prefab Variant is opened in Prefab Mode, the root appears as a Prefab instance with the blue Prefab icon. This Prefab instance represents the base Prefab that the Prefab Variant inherits from; it doesn’t represent the Prefab Variant itself. Any edits you make to the Prefab Variant become overrides to this base that exists in the Variant.",1019],["In the screenshot above, if you were to select the GermSlimeTarget With GermOBlaster root GameObject and click the Select button in the Inspector, it will select the base Prefab GermSlimeTarget and not the Variant GermSlimeTarget With GermOBlaster because the Prefab instance is an instance of the base Prefab GermSlimeTarget and the Select button always selects the Prefab Asset that an instance comes from.",1019],["As with any Prefab instance, you can use prefab overrides in a Prefab Variant, such as modified property values, added components, removed components, and added child GameObjects. There are also the same limitations: you cannot reparent GameObjects in the Prefab Variant which come from its base Prefab. You also cannot remove a GameObject from a Prefab Variant which exists in its base Prefab. You can, however, deactivate GameObjects (as a property override) to achieve the same effect as removing a GameObject.",1019],["Note**: When editing a Prefab Variant in Prefab Mode, you should understand that applying these overrides (via the Overrides drop-down window or context menus) will cause your variant’s variations to be applied to the base Prefab Asset. This is often not what you want. The point of a Prefab Variant is to provide a convenient way to store a meaningful and reusable collection of overrides, which is why they should normally remain as overrides and not get applied to the base Prefab Asset. To illustrate this point, if you were to apply the additional GermOBlaster GameObject to the base Prefab Asset (the “GermSlimeTarget”), then the Prefab Asset would also have the GermOBlaster. The whole point of the GermSlimeTarget With GermOBlaster variant is that only this variation carries an GermOBlaster, so the added GermOBlaster GameObject should be left as an override inside the Prefab Variant.",1019],["When you open the Overrides drop-down window, you can always see in its header which object the overrides are to, and in which context the overrides exist. For a Prefab Variant, the header will say that the overrides are to the base Prefab and exist in the Prefab Variant. To make it extra clear, the Apply All button also says Apply All to Base.",1019],["2018-07-31 ",1019],["Nested Prefabs and Prefab Variants added in 2018.3",1019],["Preferences",1020],["Use preferences to customize the behavior of the Unity Editor.",1020],["To open the Preferences window, go to Edit > Preferences (macOS: Unity > Settings) in the main menu.",1020],["To navigate the Preferences window, use the search box to filter the list of settings categories and highlight keywords in the details pane on the right of the Preferences window.",1020],["The following preference categories are available:",1020],["\nGeneral\n",1020],["\n2D\n",1020],["\nAnalysis\n",1020],["\nAsset Pipeline\n",1020],["\nColors\n",1020],["\nDiagnostics\n",1020],["\nExternal Tools\n",1020],["\nJobs\n",1020],["\nGI Cache\n",1020],["\nPackage Manager\n",1020],["\nScene view\n",1020],["\nSearch\n",1020],["\nCustom package preferences\n",1020],["",1020],["General",1020],["General** preferences let you customize the overall behavior for working in Unity.",1020],["Property Function ",1020],["Load Previous Project on Startup Enable this setting to always load the previous Project at startup. ",1020],["Disable Editor Analytics (Pro only) Enable this setting to stop the Editor automatically sending information back to Unity. ",1020],["Script Changes While Playing Choose Unity’s behavior when scripts change while your game is running in the Editor. ",1020],["Recompile And Continue Playing Recompile your scripts and keep running the Scene. This is the default behavior, but you might want to change it if your scripts rely on any non-serializable data. ",1020],["Recompile After Finished Playing Defer recompilation until you manually stop your Scene, avoiding any interruption. ",1020],["Stop Playing And Recompile Immediately stops your Scene for recompilation, allowing you to quickly restart testing. ",1020],["Code Optimization On Startup Choose whether to set code optimization mode to Debug or Release when the Unity Editor starts. Debug mode allows you to attach external debugger software, but gives slower C# performance when you run your Project in Play mode in the Editor. Release mode gives faster C# performance when you run your Project in Play mode in the Editor, but you can't attach any external debuggers. For more information, see Code Optimization Mode. ",1020],["Editor Theme Choose the background to use in the Unity Editor. ",1020],["Light Applies the light grey background with black text. ",1020],["Dark Applies the dark theme with white text. ",1020],["Editor Font Select which font to display in the Unity Editor. The default font is Inter. ",1020],["Enable Alpha Numeric Sorting Enable this setting to display a button in the top-right corner of the Hierarchy window, which toggles between Transform sort (the default) and Alphanumeric sort. ",1020],["Interaction Mode Specifies how long the Editor can idle before it updates. After one frame finishes, the Editor waits up to the specified amount of time before the next frame begins.This allows you to throttle Editor performance, and reduce consumption of CPU resources and power.For example, if you want to test the Editor's performance, set this property to No Throttling. If you want to conserve power (for example, to prolong battery life on a laptop computer), set this property to one of the throttled modes.In throttled modes, the Editor stops idling if you interact with it (for example, by panning in the Scene view).Note: In Play mode, Unity ignores any throttling that you apply using this preference. The editor updates as fast as possible unless you enable the VSync option in the Game view, or set Application.targetFrameRate to a value other than -1. ",1020],["Default The Editor idles up to 4 ms each tick. If a frame takes 5 ms or more, the Editor doesn't idle at all, and the next frame starts automatically. ",1020],["No Throttling Each time a frame finishes, the next frame begins immediately. The Editor never waits, and updates as fast as possible.This mode consumes a lot of CPU resources. If you are using a laptop computer, it can cause the battery to drain quickly. ",1020],["Monitor Refresh Rate The Editor idles up to the monitor's update rate in milliseconds. For most monitors, this is 16 ms. ",1020],["Custom You specify the maximum amount of time application can be idle.When you select this option the Frame Throttling (milliseconds) property appears. ",1020],["Frame Throttling (milliseconds) When Interaction Mode is set to Custom, this property specifies how long the Editor can idle between frames. The value can be between 0 and 33 ms. 0 is equivalent to setting Interaction Mode to No Throttling. ",1020],["Package Manager Log Level Choose the level of detail you want the Package Manager logs to report. The options are: ",1020],["Error Unexpected errors and failures only. ",1020],["Warn Unusual situations that can cause issues. ",1020],["Info High-level informational-only messages. ",1020],["Verbose Detailed informational messages. ",1020],["Debug High-level debugging messages. ",1020],["Silly Detailed debugging messages. ",1020],["Enable extended Dynamic hints Select this to enable extended dynamic hints, which displays more information when a property, object, or tool is hovered for enough time, or when a dynamic hint appears. ",1020],["Perform Bump Map Check Select this to enable bump map checks upon material imports, which helps check that textures used in a normal map material slot are actually defined as normal maps. ",1020],["",1020],["2D",1020],["The 2D preference settings allow you to define the settings of 2D-related features and packages. When you install 2D related packages (such as the Tilemap Editor package) into your Project, their preference settings will appear in this section.",1020],["Physics",1020],["Use the Physics preferences to configure the 2D physics settings, such as the colors used in the UI.",1020],["Property Function ",1020],["Colliders Set the colors for the following UI elements. ",1020],["Awake Color (Outline) Set the color of the Collider 2D Gizmo's outline when the Rigidbody 2D it's attached to is Awake. ",1020],["Awake Color (Filled) Set the color of the Collider 2D Gizmo's interior fill when the Rigidbody 2D it's attached to is Awake. ",1020],["Asleep Color (Outline) Set the color of the Collider 2D Gizmo's outline when the Rigidbody 2D it's attached to is Asleep. ",1020],["Asleep Color (Filled) Set the color of the Collider 2D Gizmo's interior fill when the Rigidbody 2D it's attached to is Asleep. ",1020],["Bounds Color Set the color of the bounds for all PhysicsShape2D that a Collider 2D creates. ",1020],["Contacts Set the colors used for the following UI elements. ",1020],["Contact Color Set the color of the Collider 2D Gizmo's contacts which are displayed as a directional arrow starting at the contact point in the direction of the contact normal. ",1020],["Contact Arrow Scale Set the scale of the Collider 2D contacts arrow. Larger values draw the arrow larger. ",1020],["",1020],["Analysis",1020],["The Analysis preferences let you define settings for the Profiler.",1020],["Property Function ",1020],["Frame count Set the maximum number of frames for the Profiler to capture. You can set this number between 300 and 2,000. ",1020],["Show stats for 'current frame' By default, when you select the Current Frame button and enter Current Frame mode, the frame indicator line doesn't have annotations with the stats for the current frame. This is because the stats annotations might make it difficult to view data in real-time. To display the annotations, enable this setting. ",1020],["Default recording state Select which recording state the Profiler should open in. Choose from Enabled, Disabled, or Remember. Enabled keeps the Record button enabled between sessions, while Disbled disables it, regardless of whether you turn it on or off during your profiling session. The Remember state remembers whether you have enabled or disabled the Record button during your session and keeps it at its last state next time you open the Profiler window. ",1020],["Default editor target mode Select what mode the Attach to Player dropdown should target by default. Choose from either Playmode or Editor. ",1020],["Custom connection ID Enter the connection name that you want to use for the device that's running your application in the Attach to Player drop down in the Profiler Window or Console Window. ",1020],["",1020],["Asset Pipeline",1020],["Property Function ",1020],["Auto Refresh Enable this setting to import Assets automatically as they change. ",1020],["Import Worker Count % Enter your Desired Import Worker Count for new projects in percentage of available logical CPU cores. For example, if your system has 16 logical cores and this preference is set to 25%, the Desired Import Worker Count for new projects is set to 4. If you set this value too high, your import worker processes need to compete over other processes and system resources such as reading and writing files. The default value of 25% is suitable for most situations. ",1020],["Directory Monitoring (available only on Windows) Enable this setting to monitor directories instead of scanning all project files to detect asset changes. ",1020],["Compress Textures on Import Disable this setting to skip texture compression during import. Textures are typically imported into uncompressed formats. ",1020],["Verify Saving Assets Enable this setting to verify which Assets to save individually. A dialog is shown any time Unity saves any assets. ",1020],["Unity Accelerator (Cache Server) ",1020],["Default Mode Define the default setting for the Cache Server, whether to enable or disable it by default. You can override this per Project in the Unity Editor settings. For more information, see Unity Accelerator. ",1020],["Default IP address Set the default IP address for the Cache Server to use. You can override this per Project in the Unity Editor settings. ",1020],["Check Connection Click this button to attempt to connect to the remote Cache Server. ",1020],["",1020],["Colors",1020],["The Colors preferences let you pick colors for various user interface elements in the Unity Editor.",1020],["Property Function ",1020],["Animation Use this setting to customize color preferences for animated properties. ",1020],[" **Property Animated** The color to indicate a property that's currently being animated. \n",1020],[" **Property Candidate** The color to indicate the animated property that you modified recently. \n",1020],[" **Property Recorded** The color to indicate that an animated property automatically records changes in the animation clip. \n",1020],["General Use this setting to customize color preferences for General settings. ",1020],["Playmode Tint The color to tint the editor to for ease of identifying when you're in Play mode. Unity tints the whole editor with the color you pick here when you enter Play mode. Some operations in the Editor aren't available when in Play mode, and you can reset some edited values when exiting the Play mode. ",1020],["Scene Use this setting to customize preferences for a Scene. ",1020],[" **Background** Set the color for the scene camera to clear to when the Scene FX skybox setting is turned off. \n",1020],[" **Background for Prefabs** Set the color for the scene camera to clear to when the Scene FX skybox setting is turned off. \n",1020],[" **Contribute GI: Off / Receive GI: Light Probes** Set the color to display when **ContributeGI** is disabled in the GameObject’s Static Editor Flags. \n",1020],[" **Contribute GI: On / Receive GI: Light Probes** Set the color to display when **ContributorGI** is enabled in the GameObject’s Static Editor Flags, and the Renderer’s ReceiveGI property is set to **Lightmaps**. \n",1020],[" **Contribute GI: On / Receive GI: Lightmaps** Set the color to display when **ContributeGI** is enabled in the GameObject’s Static Editor Flags, and the Renderer’s ReceiveGI property is set to **Light Probes**. \n",1020],[" **Grid** Set the color of the grid in the Scene view. \n",1020],[" **Guide Line** Set the color of the Guide Line in the Scene view. \n",1020],[" **Material Validator Pure Metal** Set the color for the **Validate Albedo/Metal Specular debug render mode** to indicate the material properties. \n",1020],[" **Material Validator Value Too High** Set the color for the **Validate Albedo/Metal Specular debug render mode** to indicate when the material value is too high. \n",1020],[" **Material Validator Value Too Low** Set the color for the **Validate Albedo/Metal Specular debug render mode** to indicate when the material value is too low. \n",1020],[" **Selected Axis** Set the color for the selected handle to show highlighted in, when Move, Rotate, or the Scale tool is engaged. \n",1020],[" **Selected Children Outline** Set the outline color for the children of the selected objects. \n",1020],[" **Selected Material Highlight** Set the outline color that shows when clicking on a mesh in the MeshRenderer to ping the submesh in the Scene view. \n",1020],[" **Selected Outline** Set the outline color for the selected GameObjects. \n",1020],[" **UI Collider Handle** Set the color to use for the Unity UI's padding visualization. \n",1020],[" **Volume Gizmo** Set the color to indicate the audio source in Gizmo. \n",1020],[" **Wireframe** Set the color of the wireframe when the wireframe render mode is active. \n",1020],[" **Wireframe Overlay** Set the color of the wireframe when the textured wireframe render mode is active. \n",1020],[" **Wireframe Selected** If you've enabled **Selection Wire** in the Gizmo options, then the selected wireframes appear in the color that you set here. \n",1020],[" **X Axis** The color that you set here is indicated for any built-in transform tool handle affecting x-axis. \n",1020],[" **Y Axis** The color that you set here is indicated for any built-in transform tool handle affecting y-axis. \n",1020],[" **Z Axis** The color that you set here is indicated for any built-in transform tool handle affecting z-axis. \n",1020],["",1020],["Diagnostics",1020],["When you report a problem to Unity, the Unity Support Team might need you to enable diagnostic switches to help identify the cause. Running diagnostics on an application, whether in the Editor or a player, impacts performance and user experience. You should only run diagnostics when the Unity Support Team requires them.",1020],["If diagnostic switches are active in your application, Unity shows a warning in the console. To reset switches, in the Diagnostics tab, click Reset all.",1020],["If an active diagnostic switch prevents the Unity Editor from opening, use the --reset-diagnostic-switches parameter to reset all switches from the command line. For more information on using command line arguments at launch, see Command line arguments.",1020],["",1020],["External Tools",1020],["Use the External Tools preferences to set up external applications for scripting, working with images, and source control.",1020],["Property Function ",1020],["External Script Editor Choose which application Unity should use to open script files. Unity automatically passes the correct arguments to script editors it has built-in support for. Unity has built-in support for Visual Studio Community, Visual Studio Code (VSCode) and JetBrains Rider. The Open by file extension option uses your device’s default application for the relevant file type when you open a file. If no default application is available, your device opens a window that prompts you to choose an application to use to open the file. ",1020],["External Script Editor Args This field controls parameters that Unity can send to your code editor when you open a file. The $(File), $(Line) and $(Column) arguments pass the filename, line number and column number to your external code editor. Your code editor uses these arguments to open the correct file with the cursor at the correct position. For example, if you double click an error message in the Unity Console, Unity passes these arguments from that error message to the external editor, which then opens the right file at the position where that error occurred.You can manually edit this field to customize the arguments Unity sends to your external code editor. Click the Reset argument button to reset this field to its default setting. ",1020],["Generate all .csproj files Enable this setting to generate all .csproj files. Code editors use .sln and .csproj files to access data about your Project. .csproj files store descriptive data or metadata in an XML format. This data might include versioning information, platform requirements, build files, or database settings.When these files are present, code editors can use the data they contain to provide useful features like highlighting potential compilation errors. Enable this setting to instruct Unity to create .csproj files wherever possible in your Project. ",1020],["Extensions handled(Only available if you select either Rider or Visual Studio Code as your External Script Editor) This field determines which file types the External Script Editor opens. The field is pre-populated with a list of files that the script editor opens by default. To add other file types to this list, type in the file extension and separate each extension with a semicolon. ",1020],["Image application Choose which application you want Unity to use to open image files. ",1020],["Revision Control Diff/Merge Choose which application you want Unity to use to resolve file differences in your source control repository. Unity detects these tools in their default installation locations. On Windows, Unity checks registry keys for TortoiseMerge, WinMerge, PlasticSCM Merge, and Beyond Compare 4.For more information, see the Revision Control Diff/Merge section below. ",1020],["",1020],["Revision Control Diff/Merge",1020],["Unity currently supports these tools:",1020],["SourceGear DiffMerge",1020],["TkDiff",1020],["P4Merge",1020],["TortoiseMerge",1020],["WinMerge",1020],["PlasticSCM Merge",1020],["Beyond Compare 4",1020],["Note: As these are third-party tools that Unity doesn't include by default, you might want to download and install them separately.",1020],["To set up a custom revision tool, follow these steps:",1020],["From the Revision Control Diff/Merge dropdown list, select Custom Tool.",1020],["Enter the path to the custom tool's installation folder. On Mac, this should point to the Contents / MacOS folder in the tool's installation folder.",1020],["Enter the arguments for two-way diffs, three-way diffs, and merges.",1020],["To specify file layout in the revision tool, use these arguments:",1020],["Property Function ",1020],["#LTITLE Left title ",1020],["#RTITLE Right title ",1020],["#ATITLE Ancestor title ",1020],["#LEFT Left file ",1020],["#RIGHT Right file ",1020],["#ANCESTOR Ancestor file ",1020],["#OUTPUT Output file ",1020],["#ABSLEFT Absolute path to the left file ",1020],["#ABSRIGHT Absolute path to the right file ",1020],["#ABSANCESTOR Absolute path to the ancestor file ",1020],["#ABSOUTPUT Absolute path to the output file ",1020],["Examples:",1020],["",1020],["GI Cache",1020],["The Global Illumination (GI) system uses a cache on each computer to store intermediate files used to pre-compute real-time Global Illumination. All projects on the computer share the cache.",1020],["Property Function ",1020],["Maximum Cache Size (GB) Use the slider to set the maximum GI cache folder size. Unity keeps the GI cache folder size below this number whenever possible. Unity periodically deletes unused files to create more space (deleting the oldest files first). This is an automatic process, and doesn't require you to do anything. Note: If the current Scene is using all the files in the GI cache, increase your cache size. Otherwise, resource-intensive recomputation occurs when baking. This can happen when the Scene is large or the cache size is too small. ",1020],["Custom cache location Enable this option to allow a custom location for the GI cache folder. By default, the GI cache is stored in the Caches folder. All Projects share the cache folder.Tip: Storing the GI Cache on an SSD drive can speed up baking in cases where the baking process is I/O bound. ",1020],["Cache Folder Location Click the Browse button to specify a location for the cache. ",1020],["Cache compression This option enables Unity to compress datafiles in the GI cache to use less hard drive space. The datafiles are LZ4-compressed by default, and the naming scheme is a hash and a file extension. Unity computes the hashes based on the inputs to the lighting system, so changing any of the following settings, properties or assets can lead to lighting recomputation:- Materials (Textures, Albedo, Emission)- Lights- Geometry- Static flags- Light Probe groups- Reflection probes- Lightmap ParametersTip: If you need to access the raw Enlighten Realtime Global Illumination data, disable Cache Compression and clear the cache. ",1020],["Clean Cache Use this button to clear the cache directory. It's not safe to delete the GI Cache directory manually while the Editor is running. This is because the Editor creates the GiCache folder when it starts and maintains a set of references to those files. The Clean Cache button ensures that the Editor releases all references to the files on disk before they're deleted. ",1020],["Cache size is Displays the current size of the cache. ",1020],["Cache Folder Location Displays the current cache folder location. ",1020],["",1020],["Jobs",1020],["Use the job system to write simple and safe multithreaded code so that your application can use all its available CPU cores to execute code. The job system can improve the performance of your application.",1020],["Property Function ",1020],["Use Job Threads Disable Use Job Threads to run all jobs on the main thread. If you're debugging and want to simplify the problem space and remove all parallelism, you can disable Use Job Threads to run all jobs immediately on the main thread when they are scheduled. Disabling Use Job Threads has the same effect as if you set JobsUtility.JobWorkerCount to 0. Use Job Threads is enabled by default when the Editor restarts. ",1020],["Enable Jobs Debugger Disable Enable Jobs Debugger to remove the job system safety system checks which detect potential race conditions and prevent the bugs they can cause. Disable Enable Jobs Debugger if you want to monitor performance without the overhead of job system safety checks. Enable Jobs Debugger is enabled by default when the Editor restarts. ",1020],["Leak Detection Level Select a mode for leak detection. Leak detection checks if allocations that are made with MallocTracked are freed with FreeTracked. If you do not free unmanaged memory, you will cause memory leaks which have a negative effect on memory usage and reduce performance. Memory leaks persist across domain reloads in the Editor. In the Editor and development builds, Enabled is selected by default. In non-development builds, Disabled is the default mode for Leak Detection Level. ",1020],["Disabled Do not detect unmanaged memory leaks. ",1020],["Enabled Perform a lightweight count of all memory leaks for each leak category. This option only prints the number of leaks as part of the domain unload process. Use the Enabled With Stack Trace leak detection mode to find detected leaks. ",1020],["Enabled With Stack Trace Leak Detection reports the callstack of any MallocTracked allocation that is not deallocated with FreeTracked. Enabled With Stack Trace can add a performance cost to allocations. Only use Enabled With Stack Trace to intentionally track native memory leaks. Enabled With Stack Trace, like Enabled, reports leaks as part of the domain unload process. You can only select Enabled With Stack Trace in the Editor and in development builds. ",1020],["",1020],["Package Manager",1020],["Use the Package Manager preferences to change the default cache location for the following packages:",1020],["Packages installed from the Unity Registry",1020],["Packages downloaded from the Asset Store",1020],["Property Function ",1020],["Packages Set the cache location that determines where packages installed from the Unity Registry are stored. For more information, see Customizing the global cache location. ",1020],["My Assets Set the cache location that determines where packages downloaded from the Asset Store are stored. For more information, see Customize the Asset Store cache location. ",1020],["",1020],["Scene View",1020],["Use the Scene View preferences to customize object placement and visibility while editing.",1020],["Property Function ",1020],["Create Objects at Origin Enable to create new objects at origin (as opposed to the Scene pivot). Disabled by default. ",1020],["Create Objects with Constrained Proportions Enable to define the default behavior for Scale in the Transform component.If enabled, when you adjust the value of a scale axis, the other values adjust proportionately. ",1020],["Line Thickness Set the line thickness of your transform tools. ",1020],["Enable filtering while searching Enable to gray out any non-matching items in the Scene view. Enabled by default. ",1020],["Enable filtering while editing LOD groups Enable to gray out other objects in the scene while editing level of detail (LOD) groups. Enabled by default. ",1020],["",1020],["Search",1020],["Use the Search preferences to set your search preferences for the Editor.",1020],["\n Tip: You can also access the Search preferences in one of the following ways:\n",1020],["\n \n Enter ? (question mark) in the search field and select Open Search Preferences from the results.\n \n",1020],[">",1020],["\n \n From More Options (:) in the top-left of the Search window, select Preferences.\n \n",1020],["Search Preferences",1020],["Setting Function ",1020],["",1020],["Track the current selection in the search Enable this setting to execute the SearchProvider.trackSelection callback each time the Search selection changes.The callback pings Assets in the Project window or Hierarchy window, which can slow Search navigation in large Projects. ",1020],["Generate an asset preview thumbnail for found items Enable this setting to display thumbnails for items that are currently visible in the results pane of the Search window.When you disable this setting, Search displays a generic icon. This is useful in large Projects, where generating icons can slow Search navigation. ",1020],["Select the typing debounce threshold (ms) The debouncing threshold is the time the system waits for the user to finish typing before executing the search. ",1020],["Provider Settings ",1020],[" **A** _[Provider Toggles]_ Enable and disable providers. When you disable a provider, Search ignores it when executing searches. \n",1020],[" **B** _[Provider Order]_ Use these settings to modify the order in which search items are shown on the screen. All items of a given provider priority appear before any lower priority items. \n",1020],[" **C** _[Default Actions]_ Use these settings to choose the default actions to execute when you select (for example, double-click) an item in the search results. \n",1020],["Reset Priorities Resets all providers to their default on/off state and priority. ",1020],["Search Engines Set the search fields in the Object Selector, Project, and Scene to one of the available search engines. Classic - The original search functionality. Advanced - The latest version of Search for Unity (formerly QuickSearch). ",1020],["",1020],["Indexing",1020],["Set the Custom index pages by selecting them or deselecting them from the Custom Indexers dropdown list.",1020],["",1020],["Custom package preferences",1020],["Some Asset Store or Unity packages add their own custom preferences to the Preferences window. Typically, these use the package name as the preferences category. In this example, you can see the Cinemachine package preferences:",1020],["For information about a specific package's preferences, see the documentation for that package. This section contains documentation for standard Unity preferences only.",1020],["Presets",1021],["Presets are assets that you can use to save and apply identical property settings across multiple components, assets, or Project Settings windows. You can also use Presets to specify default settings for new components and default import settings for assets in the Preset Manager",1021],["The Preset Manager supports any importers, components, or scriptable objects you add to the Unity Editor.",1021],["You can only apply Presets in the Editor. Presets have no effect at runtime. You can use scripting to support presets in your own Monobehaviour, ScriptableObject or ScriptedImporter classes.",1021],["Saving and applying Presets",1021],["Presets allow you to save the property configuration of a component, asset, or Project Settings window as a Preset asset. You can then use this Preset asset to apply the same settings to a different component, asset, or Project Settings window.",1021],["For example, you could edit the properties of a Rigidbody component, save these settings to a Preset asset, then apply that Preset asset to Rigidbody components in other GameObjects. The other components in the GameObjects are not affected; the Preset only applies its settings to the Rigidbody component.",1021],["You can store Presets in the Assets folder of your project. Use the Project window to view and select Presets to edit in the Inspector.",1021],["Saving property settings to a Preset",1021],["To save property settings to a Preset asset, follow the instructions below. You can save property settings while in Edit mode or in Play mode.",1021],["Select the GameObject, Asset import settings, or Project Settings window from which you want to reuse settings. When you select it, it appears in the Inspector window.",1021],["In the Inspector window, configure the properties as you want to save them.",1021],["Click the Preset selector (the slider icon) at the top-right of the Inspector window. ",1021],["In the Select Preset window, click Save current to. A File Save dialog appears.",1021],["Choose the location of your new Preset, enter its name, and click Save.",1021],["Applying settings from a Preset",1021],["There are two ways to apply a Preset: the Select Preset window, or for component Presets, you can also drag and drop a Preset from the Project window onto the GameObject that contains that component.",1021],["Note:** Applying a Preset copies properties from the Preset to the item. It doesn’t link the Preset to the item. Changes you make to the Preset do not affect the items you have previously applied the Preset to.",1021],["To apply a Preset via the Select Preset window:",1021],["For GameObjects or assets you want to apply a Preset to, select them so that they appear in the Inspector window. For Project Settings that you want to apply a Preset to, open them in the Project Settings window.",1021],["In the Inspector, click the Preset selector (the slider icon).",1021],["In the Select Preset window, search for and select the Preset to apply.",1021],["Unity applies this Preset to the component, asset, or Project Settings window.",1021],["Close the Select Preset window.",1021],["If you apply a component Preset via drag-and-drop, Unity’s behavior depends on the state of your GameObject:",1021],["If you drop the Preset on an existing GameObject in the Hierarchy window, Unity adds a new component and copies properties from the Preset.",1021],["If you drop the Preset on an empty area in the Hierarchy window, Unity creates a new, empty GameObject and adds a component with properties copied from the Preset.",1021],["If you drop the Preset on the Inspector window onto the title of an existing component, Unity copies properties from the Preset.",1021],["If you drop the Preset on an empty area in the Inspector window, Unity adds a new component and copies properties from the Preset.",1021],["Applying partial Presets",1021],["You can choose to only apply some properties from a Preset and exclude others. To do this:",1021],["Select your Preset in the Project window.",1021],["In the Inspector, right-click a property and choose Exclude Property. The window displays a red horizontal line next to excluded properties.",1021],["Apply the Preset to the target component, asset, or Project settings.",1021],["Note: To select all or clear all checkboxes in a Preset, select the More items menu (⋮) or right-click the Preset name, and select Include all properties or Exclude all properties. You can still adjust individual properties if you need to.",1021],["You can also use the Exclude option for Presets that you then set as the default configuration for components and asset importers. See Preset Manager for more details on how to do this.",1021],["Editing a Preset",1021],["To edit a Preset asset, select it from the Project window and view it in the Inspector window.",1021],["Note:** When you change the properties in a Preset, your changes do not affect items you have already applied the Preset to. For example, if you apply a Preset for a Rigidbody component to a GameObject, and then edit the Preset, the settings in the Rigidbody component do not change.",1021],["Importing Assets using Presets by folder",1021],["You can use a script to apply a Preset to an Asset based on the location of the Asset in the Project window.",1021],["Exporting Preset Assets",1021],["Use Presets to streamline your team’s workflows. You can even use Presets to specify settings for Project Settings windows, including the Preset settings themselves. Use this feature to configure a project then export it as a custom asset package. Your team members can import this asset package into their projects.",1021],["In the Project window, select the Presets you want to export .",1021],["In the Unity menu, go to Assets > Export Package, or right-click inside the Project window and choose Export Package.",1021],["The Exporting package window displays the items to export.",1021],["If your Presets contain references to assets you want to include in the package, enable Include dependencies.",1021],["Click Export.",1021],["Choose where you want to store the package, enter a filename, and click Save. Unity saves the package as a .unitypackage file.",1021],["Using Presets for transitions of Animation State nodes",1021],["You can save and apply Presets for Animation State nodes. However, the transitions in the Preset are shared among Presets and the nodes that you apply the Preset to. For example, you apply a Preset to two different nodes in the Animator window. In the Inspector window, you edit the settings for one of the transitions in the first node. Your change also appears in the other node and in the Preset.",1021],[" 2017-03-27 ",1021],["New feature in 2018.1 NewIn20181",1021],["Primitive and placeholder objects",1022],["In the Unity Editor, you can work with 3D models of any shape that you can create with modeling software. You can create several object types in the Editor, for example, the:",1022],["Cube",1022],["Sphere",1022],["Capsule",1022],["Cylinder",1022],["Plane",1022],["Quad",1022],["To add a primitive to a scene, select GameObject > 3D Object and select the required primitive. This adds the default primitive to your local coordinate space, and you can change the size and position of the object in the Inspector window with transforms.",1022],["These objects can be useful to model specific items or you can use them to create placeholders and prototypes for testing. This page details common uses of each primitive object, but you can use the objects in the way that suits your project best.",1022],["Cube",1022],["The default Cube primitive is a white cube with six sides, which are 1 x 1 units. The cube is textured so the image repeats on each side. Cubes are often used to construct walls, posts, boxes, steps and other similar objects or as a useful placeholder during development. For example, because the cube's edges are one unit long, you can check the proportions of a mesh imported into your scene if you add a cube close to it and compare the size.",1022],["Sphere",1022],["The default sphere primitive has a diameter of one unit (that is, 0.5 unit radius). The sphere is textured with standard spherical UV mapping so that the image wraps around the sphere and the top and bottom edges pinch together at each pole. Spheres are useful for representing balls, planets, and projectiles. You can make GUI device for representing the radius of an effect using a semi-transparent sphere.",1022],["Cylinder",1022],["The default cylinder primitive is two units high and one unit in diameter. The cylinder is textured so that the image wraps once around the tube shape of the body and repeats separately on the two flat ends. Cylinders are useful if you want to create posts, rods, and wheels. The default shape of a Collider is a capsule (there is no primitive cylinder collider in Unity). To get an accurate cylindrical physics Collider, create a mesh of a cylinder shape in a modeling program and attach a mesh Collider.",1022],["Capsule",1022],["The capsule primitive is a cylinder with hemispherical caps at each end. The default capsule is one unit in diameter and two units high (the body is one unit, and each cap is 0.5 units). It is textured so the image wraps around once and the edges pinch together at the apex of each hemisphere. The capsule is a useful placeholder for prototypes because the physics of a rounded object are more suited to certain tasks than those of a box.",1022],["Quad",1022],["The default quad primitive is a square with edges one unit long, divided into two triangles, and is oriented in the xy plane of the local coordinate space. You can use a quad as a display screen for an image or movie. You can also use quads to implement simple GUI and information displays, particles, sprites, and imposter images as substitutes for solid objects views at a distance.",1022],["Plane",1022],["The default plane primitive is a flat square with edges ten units long, divided into 200 triangles, and is oriented in the xz plane of the local coordinate space. The square is textured so that the complete image appears once within the square.",1022],["Planes are useful for most flat surfaces, such as floors and walls. You can use a plane to show special effects and images or movies in GUI, but it might be easier to use a quad primitive.",1022],["A plane's texture only renders from above. If you are below the plane, the plane's texture is transparent.",1022],["Physics 2D Profiler module",1023],["The Physics 2D Profiler module displays information about the physics that the physics system has processed in your project’s scene. This information can help you diagnose and resolve performance issues or unexpected discrepancies related to the physics in your project’s scene.",1023],["Chart categories",1023],["The Physics 2D Profiler module’s chart tracks different statistics related to the physics that the physics system processes in the project’s scene, divided into the following chart categories. Click on the frame chart window or select a captured frame in the chart graph to track selected categories. To change the order of the categories in the chart, drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display. Refer to the module details pane for more information about the selected statistics.",1023],["Chart Description ",1023],["Total Contacts The total number of contacts that were present in this frame. This includes both Collision and Trigger contacts. Processing and solving contacts can be time consuming therefore they should be kept to a minimum. ",1023],["Total Shapes The total number of physics shapes that were present in this frame. Different Collider2D produce different amounts of physics shapes ranging from one to unlimited. You can get the shape count and retrieve the physics shapes to determine this for any Collider2D. ",1023],["Total Queries The total number of queries that were called this frame. This includes queries such as Physics2D.Raycast, Physics2D.OverlapPoint etc. ",1023],["Total Callbacks The total number of OnCollisionEnter2D, OnCollisionStay2D, OnCollisionExit2D, OnTriggerEnter2D, OnTriggerStay2D and OnTriggerExit2D callbacks that were called in this frame. ",1023],["Total Joints The total number of any Joint2D that were present in this frame. ",1023],["Total Bodies The total number of Rigidbody2D that were present in this frame. ",1023],["Awake Bodies The total number of Rigidbody2D that were both awake (not sleeping) and were present in this frame. ",1023],["Dynamic Bodies The total number of Rigidbody2D with a Dynamic body type that were present in this frame. Dynamic bodies take the most processing of all body types therefore they should be kept to a minimum. ",1023],["Continuous Bodies The total number of Rigidbody2D with a Continuous collision detection mode that were present in this frame. Continuous bodies are much more expensive than when using Discrete collision detection mode therefore they should be kept to a minimum. ",1023],["Physics Used Memory The total amount of persistent memory used exclusively by the 2D physics system. This includes both the core engine and the memory used by each physics component, but does not include the temporary memory used in this frame. ",1023],["Module details pane ",1023],["When you select a frame in the Physics 2D Profiler module, the details pane displays detailed information about the physics in your project’s scene. The details pane is sorted by category, where each category exists on a single line.",1023],["The following reference table describes the statistics available, plus its corresponding profiler counter, and availability in Release builds. The profiler counters are always available in the Editor and Development builds. This information is also available via the ProfilerRecorder API and in the Profiler Module Editor so you can add them to a custom Profiler module.",1023],["Physics Used Memory",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players?",1023],["",1023],["Total** The total amount of persistent memory used exclusively by the 2D physics system. This includes both the core engine and the memory used by each physics component, but does not include temporary memory used in this frame. Physics Used Memory 2D No",1023],["Relative** The relative percentage of memory used by the 2D physics system compared to the overall memory usage of Unity. N/A N/A",1023],["Bodies",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Total The total number of Rigidbody2D that were present in this frame. Total Bodies No ",1023],["Awake The number of Rigidbody2D that were both awake (not sleeping) and were present in this frame. Note that a Rigidbody2D with a Static body type is always asleep. Awake Bodies No ",1023],["Asleep The number of Rigidbody2D that were both sleeping (not awake) and were present in this frame. Note that a Rigidbody2D with a Static body type is always asleep. Asleep Bodies No ",1023],["Dynamic The number of Rigidbody2D with a Dynamic body type that were present in this frame. Dynamic bodies take the most processing of all body types therefore they should be kept to a minimum. Dynamic Bodies No ",1023],["Kinematic The number of Rigidbody2D with a Kinematic body type that were present in this frame. Kinematic bodies have minimal processing therefore they should be used when explicit movement is required but reaction to external forces is not. Kinematic Bodies No ",1023],["Static The number of Rigidbody2D with a Static body type that were present in this frame. Static bodies take the least processing of all body types therefore they should be used when possible where no movement is required. Static Bodies No ",1023],["Discrete The number of Rigidbody2D with a Discrete collision detection mode that were present in this frame. Discrete bodies are far less expensive than when using Continuous collision detection mode therefore they should be used where possible. Discrete Bodies No ",1023],["Continuous The number of Rigidbody2D with a Continuous collision detection mode that were present in this frame. Continuous bodies are much more expensive than when using Discrete collision detection mode therefore they should be kept to a minimum. Continuous Bodies No ",1023],["Shapes",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Total The total number of physics shapes that were present in this frame.. Different Collider2D produce different amounts of physics shapes ranging from one to unlimited. You can get the shape count and retrieve the physics shapes to determine this for any Collider2D. Total Shapes No ",1023],["Awake A physics shape is awake if it is attached to a Rigidbody2D that is awake. This is the number of physics shapes that were both awake (not sleeping) and were present in this frame. Awake Shapes No ",1023],["Asleep A physics shape is asleep if it is attached to a Rigidbody2D that is asleep. This is the number of physics shapes that were both sleeping (not awake) and were present in this frame. Asleep Shapes No ",1023],["Dynamic A physics shape is Dynamic if it is attached to a Rigidbody2D with a Dynamic body type. This is the number of physics shapes that were both Dynamic and were present in this frame. Dynamic Shapes No ",1023],["Kinematic A physics shape is Dynamic if it is attached to a Rigidbody2D with a Kinematic body type. This is the number of physics shapes that were both Kinematic and were present in this frame. Kinematic Shapes No ",1023],["Static A physics shape is Dynamic if it is attached to a Rigidbody2D with a Static body type. This is the number of physics shapes that were both Static and were present in this frame. Static Shapes No ",1023],["Queries",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Total The total number of queries that were called this frame. This includes queries such as Physics2D.Raycast, and Physics2D.OverlapPoint. Total Queries No ",1023],["Raycast The number of ray or line based queries that were called this frame. This includes queries such as Physics2D.Raycast and Physics2D.Linecast. Raycast Queries No ",1023],["Shapecast The number of shape swept queries that were called this frame. This includes queries such as Physics2D.BoxCast, Physics2D.CircleCast, and Collider2D.Cast. Shapecast Queries No ",1023],["Overlap The number of overlap queries that were called this frame. This includes queries such as Physics2D.OverlapPoint, Physics2D.OverlapCircle, and Collider2D.OverlapCollider. Overlap Queries No ",1023],["IsTouching The number of contact touching queries that were called this frame. This includes queries such as Physics2D.IsTouching, Collider2D.IsTouching, Rigidbody2D.IsTouching etc. IsTouching Queries No ",1023],["GetContacts The number of contact retrieval queries that were called this frame. This includes queries such as Physics2D.GetContacts, Collider2D.GetContacts, and Rigidbody2D.GetContacts. Note that this does not include Collision2D.GetContacts which is not a physics query. GetContacts Queries No ",1023],["Particle The number of queries that were called by the particle system in this frame. This is used when the particle system module is configured to contact 2D physics Colliders and is entirely controlled by the particle system. Note that this can become quite high but is also very efficient to process. Particle Queries No ",1023],["Contacts",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Total The total number of contacts that were present in this frame. This includes both Collision and Trigger contacts. Processing and solving contacts can be time consuming therefore they should be kept to a minimum. Total Contacts No ",1023],["Added The number of contacts that were added in this frame. This includes both Collision and Trigger contacts. Adding too many contacts in a single frame can cause performance spikes therefore this should be kept to a minimum. Added Contacts No ",1023],["Removed The number of contacts that were removed in this frame. This includes both Collision and Trigger contacts. Removing contacts is fast and has minimum impact on performance. Removed Contacts No ",1023],["Broadphase Updates The number of broadphase updates that were processed in this frame. A broadphase update occurs when physics shapes are added, removed or change in size. Broadphase updates are used to detect contact changes when two physics shapes potentially overlap and can result in a broadphase pair (see below) being created. Broadphase Updates No ",1023],["Broadphase Pairs The number of broadphase pairs that were processed in this frame. A broadphase pair is created when a broadphase update results in a potential overlap of two physics shapes. A broadphase pair is then processed and the result will be a new contact or it will be ignored if the physics shapes are not configured to contact each other. Broadphase Pairs No ",1023],["Callbacks",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Total The total number of OnCollisionEnter2D, OnCollisionStay2D, OnCollisionExit2D, OnTriggerEnter2D, OnTriggerStay2D and OnTriggerExit2D callbacks that were called in this frame. Total Callbacks No ",1023],["Collision Enter The number of OnCollisionEnter2D callbacks that were called in this frame. Collision Enter No ",1023],["Collision Stay The number of OnCollisionStay2D callbacks that were called in this frame. Collision Stay No ",1023],["Collision Exit The number of OnCollisionExit2D callbacks that were called in this frame. Collision Exit No ",1023],["Trigger Enter The number of OnTriggerEnter2D callbacks that were called in this frame. Trigger Enter No ",1023],["Trigger Stay The number of OnTriggerStay2D callbacks that were called in this frame. Trigger Stay No ",1023],["Trigger Exit The number of OnTriggerExit2D callbacks that were called in this frame. Trigger Exit No ",1023],["Solver",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["World Count The total number of physics scene that were present in this frame. Each physics scene contains a physics world that can be simulated independently of any other physics world. Having a large number of worlds is not in of itself a performance issue because it will only occupy memory and not perform any work unless it is simulated. Solver World Count No ",1023],["Simulation Count The number of times all physics scene were simulated either by Unity automatically, by calling Physics2D.Simulate or by directly calling PhysicsScene2D.Simulate. Solver Simulation Count No ",1023],["Discrete Islands An island is a connected graph of bodies connected via mutual joints or mutual contacts. Note that Static body types do not connect islands. The number of contact islands solved when handling the discrete solving step. Solver Discrete Islands No ",1023],["Continuous Islands An island is a connected graph of bodies connected via mutual joints or mutual contacts. Note that Static body types do not connect islands. This is the number of islands solved when handling the continuous solving step. Solving continuous islands is an extremely expensive process and involves multiple iterations that require islands to be regenerated and reprocessed so this should be kept to a minimum. Only a Rigidbody2D with a Continuous collision detection mode will result in this additional continuous island being formed and processed. Solver Continuous Islands No ",1023],["Transform Sync",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Sync Calls The total number of Transform sync calls that were called in this frame. A Transform sync (known as a Transform Read) involves checking to see if any Transforms have changed and if so, the Transform poses are read and cause any Rigidbody2D or Collider2D to be updated. Transforms should not be changed when using physics components however sometimes this is necessary but should be avoided due to potential performance issues if performing too many. Any movements should be performed by using the Rigidbody2D API.The physics system will perform a single Transform sync as the first part of performing a simulation step so this will always be at least one if a simulation occurred (see Simulation Count above). The physics system will also perform a single Transform sync per-frame if it is handling any Rigidbody2D interpolation.Additional calls are shown if either Physics2D.AutoSyncTransforms is active (inactive by default) or if Physics2D.SyncTransforms is called although both of these should be avoided as they can both have a severe impact on performance. Total Transform Sync Calls No ",1023],["Sync Bodies The number of Rigidbody2D that were affected by a Transform sync. This should be kept to a minimum, preferably zero. Transform Sync Bodies No ",1023],["Sync Colliders The number of Collider2D that were affected by a Transform sync. This should be kept to a minimum, preferably zero. Transform Sync Colliders No ",1023],["Parent Sync Bodies The number of Rigidbody2D that were affected by a Transform sync caused by reparenting a Transform.. This should be kept to a minimum, preferably zero. Transform Parent Sync Bodies No ",1023],["Parent Sync Colliders The number of Collider2D that were affected by a Transform sync caused by reparenting a Transform. This should be kept to a minimum, preferably zero. Transform Parent Sync Colliders No ",1023],["Joints",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Total The total number of any Joint2D that were present in this frame. Solving joints can become expensive so these should be kept to a minimum. Total Joints No ",1023],["Timings",1023],["Note**: All timings are summed over all physics worlds (see World Count). The number of times any timing was sampled is shown in square brackets after the timing itself. Effectively the timing can be divided by the World Count value to give an average time.",1023],["Statistic Description Corresponding Profiler Counter (exact name) Available in Release Players? ",1023],["--- --- --- --- ",1023],["Sim The total amount of time spent handling a full simulation step. This can be called by Unity automatically, by calling Physics2D.Simulate or by directly calling PhysicsScene2D.Simulate. This time includes all the stages involved in completing a simulation step including Transform Sync (read), Calculating Contacts, Integration, Solving Contacts and Joints, Transform Write and Contact Callbacks. N/A N/A ",1023],["Sync The total amount of time spent processing Transform Sync (see Sync Calls). N/A N/A ",1023],["Step The total amount of time spent processing simulation steps. This time includes only the core stages involved in completing a simulation step including Calculating Contacts, Integration, Solving Contacts and Joints. N/A N/A ",1023],["Write The total amount of time spent processing Transform write. This happens during the end of the simulation step where body poses are read and written back to the Transform system. N/A N/A ",1023],["Callbacks The total amount of time spent processing all callbacks (see Total Callbacks). N/A N/A ",1023],["Legacy Physics Profiler",1023],["You can switch to the Legacy mode to see the older version of the Physics 2D Profiler module, which was the default module in older versions of Unity. To do this, select Legacy from the dropdown menu at the upper-right of the Profiler module’s details pane.",1023],["In this mode, you can load and inspect Profiler data that was saved in an older version of Unity. If you switch to this mode to inspect data captured in a newer version of Unity, then the data displayed may be unreliable and inaccurate. It is recommended to always use the Current mode to inspect Physics 2D Profiler data in current versions of Unity.",1023],["Asset Loading Profiler module",1024],["The Asset Loading Profiler module displays information about how your application loads assets, including a breakdown of read operations by area. The details pane provides an insight into each of the asset loading markers captured during the profile. You can use this information to determine how efficiently your application loads assets, and to identify any specific issues.",1024],["This module is not enabled by default. To enable the Asset Loading Profiler module, open the Profiler window, select the Profiler Modules dropdown menu, and toggle the Asset Loading checkbox.",1024],["Chart categories",1024],["The Asset Loading Profiler module’s chart is divided into seven categories. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display. For more information on how to use the Profiler window, see Getting started with the Profiler window.",1024],["Chart Description ",1024],["Other Reads The number of bytes requested from the AsyncReadManager for an unspecified subsystem. ",1024],["Texture Reads The number of bytes requested from the AsyncReadManager for a texture load. ",1024],["Virtual Texture Reads The number of bytes requested from the AsyncReadManager for Virtual Texturing. ",1024],["Mesh Reads The number of bytes requested from the AsyncReadManager for a mesh load. ",1024],["Audio Reads The number of bytes requested from the AsyncReadManager for an audio load. ",1024],["Scripting Reads The number of bytes requested from the AsyncReadManager via the scripting API. ",1024],["Entities Reads The number of bytes requested from the AsyncReadManager by scripts in the Entities package. ",1024],["Module details pane",1024],["When you select a frame in the Asset Loading Profiler module, the module details pane displays detailed information about how and when assets were loaded during the capture. This module can display information for either a single selected frame, or for all frames in the capture. Use the dropdown menu at the top-left of the details pane to choose between a single frame or all frames. This module doesn’t populate the details pane automatically. Instead, you need to select the Analyze Markers button at the top of the details pane to populate the view with data.",1024],["The Asset Markers view displays selected markers related to asset loading during the capture. Some rows have child markers that create a hierarchy, which is initially contained within a single expandable row. Select the dropdown arrow next to the marker’s name to expand the row and display all child markers.",1024],["The below table explains all of the possible columns that the Asset Markers view can display. Not all of these columns are enabled by default. To enable or disable a column, right-click anywhere in the row that contains the column names to open the column toggles sub-menu. Select any of the column names in this menu to either enable or disable that column. You can enter text into the search bar next to the Analyze Markers button to filter the results based on the Source column.",1024],["Heading Description Enabled by default ",1024],["Index An ID number representing the order of execution of the asset loading markers. Yes ",1024],["Source The origin of the asset Unity is loading. This can be either a file path, an AssetBundle name, or a Scene. Hover your cursor over any entry in this column to show the full source file path for that entry. Yes ",1024],["Asset Name The name of the asset Unity is loading (if applicable and available in the Profiler’s metadata for the marker). Yes ",1024],["Thread The thread that this marker occurred on. Yes ",1024],["Type The type of the Asset. Yes ",1024],["Size The size of the load recorded by this marker.Note:This size may not include child markers, depending on the marker type. Yes ",1024],["Marker Type The type of marker recorded. Yes ",1024],["Marker Length (ms) The index of the currently selected frame, followed by the total number of frames the marker spans. Yes ",1024],["Frame Count The index of the currently selected frame, followed by the total number of frames the marker spans. Yes ",1024],["Timestamp (ms) The time this marker started, relative to the start of the profiler capture. No ",1024],["First Frame Index The frame this marker started on. No ",1024],["Last Frame Index The frame this marker ended on. No ",1024],["You can right-click on any of the asset loading markers to open a sub-menu with additional options to visualize that data differently. The available options are as follows:",1024],["Property Function ",1024],["Show marker in timeline view Opens this marker in the CPU Usage Profiler module. ",1024],["Go to the first frame of this marker Selects the frame in which the marker first appears in the chart. This option is disabled if the marker only appears on one frame. ",1024],["Go to the last frame of this marker Selects the frame in which this marker last appears in the chart. This option is disabled if the marker only appears on one frame. ",1024],["Filter the view to this source Populates the search bar with the contents of the Source column to filter the results. ",1024],["Filter the view to this asset name Populates the search bar with the contents of the Asset Name column to filter the results. This option is disabled if the Asset Name column is empty. ",1024],["Creating custom Profiler counters",1025],["To display custom metrics in the Unity profiler, you must use the ProfilerCounter API in the Unity Profiling Core package.",1025],["You can use the Profiling Core API to track a metric in your application. You can display the information that a counter tracks in the Unity Profiler. Use custom Profiler counters to compare system metrics and identify performance issues in the Profiler window.",1025],["A custom Profiler counter can display data from ProfilerCounter or ProfilerCounterValue.",1025],["For a complete guide to using the Unity Profiling Core API to create Profiler counters, see the Profiler counters API guide.",1025],["To add a profiler counter, create scripts to do the following:",1025],["\nCreate a new counter.\n",1025],["\nAssign your counter to a Profiler category.\n",1025],["\nUpdate the counter's value.\n",1025],["The code examples in these sections add a Profiler counter to track the total number of particles that Unity created for every instance of a GameObject’s trail effects. In these examples, the GameObject’s name is “Tank”.",1025],["",1025],["Defining a counter",1025],["To create a new counter, write a script to define the value type of the new counter, and assign a name and a unit to this type.",1025],["When you create a counter you must specify which Profiler category your new counter belongs to. To do this use an existing Unity category. For example, the script example below uses the existing ProfilerCategory.Scripts category.For more information, see Using Profiler categories",1025],["The following example script defines the ProfilerCounterValue TankTrailParticleCount, with the name \"Tank Trail Particles\". This counter has a unit of \"Count\":",1025],["```lang-csharp",1025],["public static class GameStats",1025],["public static readonly ProfilerCategory TanksCategory = ProfilerCategory.Scripts;",1025],["public const string TankTrailParticleCountName = \"Tank Trail Particles\";",1025],["public static readonly ProfilerCounterValue TankTrailParticleCount =",1025],["new ProfilerCounterValue(TanksCategory, TankTrailParticleCountName, ProfilerMarkerDataUnit.Count,",1025],["ProfilerCounterOptions.FlushOnEndOfFrame ProfilerCounterOptions.ResetToZeroOnFlush);",1025],["The options FlushOnEndOfFrame and ResetToZeroOnFlush automatically send the counter to the Profiler data stream and reset the Count value to zero at the end of the frame.",1025],["",1025],["Using Profiler categories",1025],["Unity automatically groups Profiler counters into categories based on the type of work the counters profile, for example, Rendering, Scripting, or Animation. You can assign a custom Profiler counter to any of Unity's profiling categories. For a full list of available Profiler categories, see ProfilerCategory.",1025],["Assigning a Profiler counter to a Profiler category",1025],["A Profiler counter must belong to a Profiler category. You should assign a category to a Profiler counter when you define the counter. To do this, use the ProfilerModule’s optional autoEnabledCategoryNames constructor argument to assign one or more categories to a Profiler counter. There is an example of this method in the following example code:",1025],["```lang-csharp",1025],["using Unity.Profiling;",1025],["using Unity.Profiling.Editor;",1025],["[System.Serializable]",1025],["[ProfilerModuleMetadata(\"Tank Effects\")]",1025],["public class TankEffectsProfilerModule : ProfilerModule",1025],["static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]",1025],["new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, GameStatistics.TanksCategory),",1025],["new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, GameStatistics.TanksCategory),",1025],["new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, GameStatistics.TanksCategory),",1025],["};",1025],["// Ensure that both ProfilerCategory.Scripts and ProfilerCategory.Memory categories are enabled when our module is active.",1025],["static readonly string[] k_AutoEnabledCategoryNames = new string[]",1025],["ProfilerCategory.Scripts.Name,",1025],["ProfilerCategory.Memory.Name",1025],["};",1025],["// Pass the auto-enabled category names to the base constructor.",1025],["public TankEffectsProfilerModule() : base(k_Counters, autoEnabledCategoryNames: k_AutoEnabledCategoryNames) { }",1025],["",1025],["Updating a counter’s value",1025],["To update the value of a counter, create a MonoBehaviour script that sets the value of a counter you have defined. For more information, see How to pass counter values to the Profiler.",1025],["Updating the counter’s value script example",1025],["This example MonoBehaviour script counts the number of trail particles that belong to an assigned GameObject every frame in the Update function. To do this, it uses the counter called TankTrailParticleCount.",1025],["The following example script also creates a public property called Trail Particle System (m_TrailParticleSystem) in the Inspector:",1025],["```lang-csharp",1025],["using UnityEngine;",1025],["class TankMovement : MonoBehaviour",1025],["public ParticleSystem m_TrailParticleSystem;",1025],["void Update()",1025],["GameStats.TankTrailParticleCount.Value += m_TrailParticleSystem.particleCount;",1025],["",1025],["Using Profiler counters to profile a release build",1025],["When you run your project in a release player, you don’t have access to the Profiler window. However, you can display counters as UI elements in a release player. This means you can include profiling tools in a released application. To do this, see Getting counter values in players in the Profiler counters API guide.",1025],["The following image displays counters in the top left of the scene using custom UI in a release player:",1025],["Creating Custom Profiler modules",1026],["A custom Profiler module displays performance data from your system in the Profiler window.",1026],["You can create a custom profiler module in one of the following ways:",1026],["\nUse the Profiler Module Editor.\n",1026],["\nCreate a ProfilerModule script.\n",1026],["Some packages include custom profiler modules that you can use when you install that specific package. For more information, refer to the Profiler modules list.",1026],["A custom module displays the counters you specified in code in the Profiler window chart view (A), and the counters appear as a list in the module details panel (B).",1026],["",1026],["Creating custom Profiler modules using the Profiler Module Editor",1026],["You can use Unity's built-in Profiler Module Editor to create a custom Profiler module. For more information, refer to the Profiler Module Editor documentation section Creating a custom module.",1026],["",1026],["Creating Custom Profiler modules in code",1026],["To create a custom Profiler module via code, you must create a new ProfilerModule script and define the module's properties including the counters it displays, its name, and its icon.",1026],["To define a custom Profiler module, your script must do the following:",1026],["Define a class derived from ProfilerModule in your project or package. In the following example, the class is called TankEffectsProfilerModule:",1026],["```lang-csharp",1026],["public class TankEffectsProfilerModule : ProfilerModule",1026],["Assign the ProfilerModuleMetadata attribute to this class and specify the module's display name in the attribute's argument. In the following example, the display name is \"Tank Effects\":",1026],["```lang-csharp",1026],["[ProfilerModuleMetadata(\"Tank Effects\")]",1026],["Implement a constructor that has no parameter, and pass a list of chart counter descriptions to the base constructor. In the following example, the constructor with no parameter is TankEffectsProfilerModule(), the list of chart counter descriptors is k_Counters, and the base constructor is base:",1026],["```lang-csharp",1026],["static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]",1026],["new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, GameStatistics.TanksCategory),",1026],["new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, GameStatistics.TanksCategory),",1026],["new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, GameStatistics.TanksCategory),",1026],["};",1026],["public TankEffectsProfilerModule() : base(k_Counters) { }",1026],["Displaying a custom Profile module in the Profiler window",1026],["When you define a custom Profiler module, the Profiler window automatically detects it. To view data in your custom Profiler module in the Profiler window:",1026],["Connect the Profiler to your application. For more information, refer to Profiling your application.",1026],["Run your application.",1026],["You can also run the Profiler when your application is in Play mode. However, if you profile an application in Play mode, the Profiler displays data that is not representative of how your application runs when you build it on a hardware device.",1026],["Creating a custom module details panel",1027],["The module details panel appears in the bottom of the Profiler window when you select a module. You can customize this section to show additional details relevant to your module or to display a custom visualization of your performance data.",1027],["To create a custom Module details panel for your Profiler module:",1027],["\nCreate a module details panel Controller script to draw a custom module details panel.\n",1027],["\nCreate a Profiler module script to connect your custom module details panel controller to your custom profiler module .\n",1027],["",1027],["Creating a script to control the module details panel",1027],["You can use the ProfilerModuleViewController base class to customize the module details panel in the profiler window. To do this, create a script that controls what appears in the module details panel when you select a specific module.",1027],["The script you create to customize the module details panel must:",1027],["\nDefine a public constructor for the view controller that calls the base constructor base(profilerWindow).\n",1027],["\nOverride CreateView to build the custom module details panel.\n",1027],["For example:",1027],["```lang-csharp",1027],["public class CustomDetailsViewController : ProfilerModuleViewController",1027],["public CustomDetailsViewController(ProfilerWindow profilerWindow) : base(profilerWindow) { }",1027],["protected override VisualElement CreateView()",1027],["// Create your UI.",1027],["For an example of a full module details panel controller script, see module details panel controller script example.",1027],["",1027],["Module details panel controller script example",1027],["The below example script creates a module details panel controller that draws a single label in the module details panel that displays text:",1027],["This module details panel controller script example does the following:",1027],["\nDefines and creates a label to display the value you want to capture, and adds this label to the module details panel.\n",1027],["\nDefines a constructor to control the module details panel and uses CreateView to build the custom module details panel.\n",1027],["\nPopulates the label with data from the current frame, and updates the label after each frame.\n",1027],["\nFetches a counter value as a string that you can display in the module details panel.\n",1027],["\nSpecifies the text to display in the module details panel, and tells the Profiler to automatically update it each frame.\n",1027],["```lang-csharp",1027],["using UnityEditor;",1027],["using UnityEditorInternal;",1027],["using Unity.Profiling.Editor;",1027],["using UnityEngine.UIElements;",1027],["public class TankEffectsDetailsViewController : ProfilerModuleViewController",1027],["// Define a label, which will display the total particle count for tank trails in the selected frame.",1027],["Label m_TankTrailParticleCountLabel;",1027],["// Define a constructor for the view controller, which calls the base constructor with the Profiler Window passed from the module.",1027],["public TankEffectsDetailsViewController(ProfilerWindow profilerWindow) : base(profilerWindow) { }",1027],["// Override CreateView to build the custom module details panel.6666666667reateView()",1027],["var view = new VisualElement();",1027],["// Create the label and add it to the view.",1027],["m_TankTrailParticleCountLabel = new Label() { style = { paddingTop = 8, paddingLeft = 8 } };",1027],["view.Add(m_TankTrailParticleCountLabel);",1027],["// Populate the label with the current data for the selected frame.",1027],["ReloadData();",1027],["// Be notified when the selected frame index in the Profiler Window changes, so we can update the label.",1027],["ProfilerWindow.SelectedFrameIndexChanged += OnSelectedFrameIndexChanged;",1027],["return view;",1027],["// Override Dispose to do any cleanup of the view when it is destroyed. This is a standard C# Dispose pattern.",1027],["protected override void Dispose(bool disposing)",1027],["if (!disposing)",1027],["return;",1027],["// Unsubscribe from the Profiler window event that we previously subscribed to.",1027],["ProfilerWindow.SelectedFrameIndexChanged -= OnSelectedFrameIndexChanged;",1027],["base.Dispose(disposing);",1027],["void ReloadData()",1027],["// Retrieve the TankTrailParticleCount counter value from the Profiler as a formatted string.",1027],["var selectedFrameIndexInt32 = System.Convert.ToInt32(ProfilerWindow.selectedFrameIndex);",1027],["var value = ProfilerDriver.GetFormattedCounterValue(selectedFrameIndexInt32, GameStatistics.TanksCategory.Name, GameStatistics.TankTrailParticleCountName);",1027],["// Update the label's text with the value.",1027],["m_TankTrailParticleCountLabel.text = $\"The value of '{GameStatistics.TankTrailParticleCountName}' in the selected frame is {value}.\";",1027],["void OnSelectedFrameIndexChanged(long selectedFrameIndex)",1027],["// Update the label with the current data for the newly selected frame.",1027],["ReloadData();",1027],["Creating custom UI elements in the module details panel",1027],["You can use Unity’s UIToolkit to build custom UI for the module details panel. For more information, see UI Toolkit.",1027],["The following example image shows a custom module details panel that belongs to a custom Adaptive Performance module:",1027],["",1027],["Connect a custom module details panel to a Profiler module",1027],["To display a custom module details panel, you need to instantiate your module details panel controller when you select your Profiler module. To do this, override CreateDetailsViewController to create and draw a new module details panel controller. Unity then invokes this method when it displays your module’s details panel.",1027],["The following code example instantiates a custom module details panel for a module called TankEffectsProfilerModule:",1027],["```lang-csharp",1027],["using Unity.Profiling.Editor;",1027],["[System.Serializable]",1027],["[ProfilerModuleMetadata(\"Tank Effects\")]",1027],["public class TankEffectsProfilerModule : ProfilerModule",1027],["static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]",1027],["new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, GameStatistics.TanksCategory),",1027],["new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, GameStatistics.TanksCategory),",1027],["new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, GameStatistics.TanksCategory),",1027],["};",1027],["public TankEffectsProfilerModule() : base(k_Counters) { }",1027],["public override ProfilerModuleViewController CreateDetailsViewController()",1027],["return new TankEffectsDetailsViewController(ProfilerWindow);",1027],["Visualizing additional counters in the module details panel",1027],["You can display counters in the module details panel that are not included in your module’s chart view. This is useful when you want to show additional data for a frame you select.",1027],["The Profiler automatically captures the categories of all counters that belong to a module’s chart view when that module is active. To capture additional counters, write a script to tell the Profiler to capture specific categories when your module is active.",1027],["For example, the script below uses the autoEnabledCategoryNames constructor argument to specify the Scripts and Memory categories. This enables these categories when the module is active:",1027],["```lang-csharp",1027],["using Unity.Profiling;",1027],["using Unity.Profiling.Editor;",1027],["[System.Serializable]",1027],["[ProfilerModuleMetadata(\"Tank Effects\")]",1027],["public class TankEffectsProfilerModule : ProfilerModule",1027],["static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]",1027],["new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, ProfilerCategory.Scripts),",1027],["new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, ProfilerCategory.Scripts),",1027],["new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, ProfilerCategory.Scripts),",1027],["};",1027],["// Enable the ProfilerCategory.Scripts and ProfilerCategory.Memory categories when the module is active.",1027],["static readonly string[] k_AutoEnabledCategoryNames = new string[]",1027],["ProfilerCategory.Scripts.Name,",1027],["ProfilerCategory.Memory.Name",1027],["};",1027],["// Pass the auto-enabled category names to the base constructor.",1027],["public TankEffectsProfilerModule() : base(k_Counters, autoEnabledCategoryNames: k_AutoEnabledCategoryNames) { }",1027],["Customizing the Profiler",1028],["You can customize the Unity Profiler to capture and visualize specific performance data in your application. This performance data provides information about key performance characteristics, which you can use for optimization or for making tooling decisions.",1028],["You can use the Profiler Module Editor to add custom modules without hand-writing any code. The Profiler Module Editor is Unity’s built-in UI for Profiler customization. For more information, see Profiler Module Editor.",1028],["For more control, you can also use code to customize the Profiler in the following ways:",1028],["\nYou can add Profiler counters to your code to tell the Profiler to collect specific custom data.\n",1028],["\nYou can use Profiler counters to create a custom Profiler module in the Profiler Window.\n",1028],["\nYou can Customize a module window further with visualizations in the module details panel.\n",1028],["To customize the profiler using code, you need to install the Unity Profiling Core package.",1028],["Using profiler markers to visualize code",1028],["You can use profiler markers to visualize resource-intensive blocks of code in the Profiler window.",1028],["Profiler Markers allow you to view method calls that Unity does not profile by default. You can then display these method calls in the CPU Profiler module without the need to use Deep Profiling. For more information, see the ProfilerMarker API guide.",1028],["Example of a customized Profiler window",1028],["The following example image of a customized Profiler window contains:",1028],["\na custom profiler module named Tank Effects (A).\n",1028],["\na custom module details panel (B) that visualizes the data in the Tank Effects profiler module.\n",1028],["\nthe following custom counters (C):\n",1028],["\nTank Trail Particles\n",1028],["\nShell Explosion Particles\n",1028],["\nTank Explosion Particles\n",1028],["File Access Profiler module",1029],["The File Access Profiler module displays information about the file activity in your application, such as the number of read or write operations Unity performs or the number of file handles open, either for a specific frame or across all frames in a capture. You can use this information to help determine how efficiently your application performs file operations. This module can capture information about file operations on any file within your built application’s folder structure, or within your Unity project folder if you run the Profiler in the Unity Editor.",1029],["This module is not enabled by default. To enable the File Access Profiler module, open the Profiler window, select the Profiler Modules dropdown menu, and toggle the File Access checkbox.",1029],["Chart categories",1029],["The File Access Profiler module’s chart is divided into five categories. To change the order of the categories in the chart, drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display on or off. For more information on how to use the Profiler window, see Getting started with the Profiler window. This module doesn’t collect information about unsuccessful file operations. If a file operation attempt is unsuccessful, Unity displays an error.",1029],["Chart Description ",1029],["Files Opened The total number of files successfully opened in the local file system this frame. ",1029],["Files Closed The total number of files successfully closed in the local file system this frame. ",1029],["File Seeks The number of file seek operations performed in the local file system this frame. A file seek operation involves a search through the contents of a file. ",1029],["Reads in Flight The total number of read operations that were in progress during this frame. ",1029],["File Handles Open The total number of file handles held open at any time during this frame. This includes files that Unity opens and closes within the same frame. ",1029],["Module details pane",1029],["When you select a frame in the File Access Profiler module, the module details pane displays detailed information about files that Unity accessed during the capture. The File Access Profiler module has two views:",1029],["The File Summary view provides a summary of all file activity for each file Unity accesses during the selected frame setting.",1029],["The Accesses view displays each file access operation in the data set in the order that they occurred.",1029],["Use the dropdown menu at the top-left of the details pane to toggle which view is active. By default, the File Summary view is active.",1029],["Both views can display information for either a single selected frame, or for all frames in the capture. Use the second dropdown menu at the top-left of the details pane to choose between a single frame or all frames. This module doesn’t populate the details pane automatically. Instead, you need to select the Analyze Markers button at the top of the details pane to populate the view with data.",1029],["",1029],["File Summary view",1029],["The File Summary view displays a summary of all file access operations that happened to each file during the capture. One entry in the table represents the full summary for a single file.",1029],["The table below describes all possible columns that the File Summary view table can display. Not all columns are enabled by default; to enable or disable a column, right-click anywhere in the row that contains the column headers to open a menu. Use this menu to toggle any column on or off.",1029],["Detail Description Enabled by default ",1029],["Filename The name of the file that was accessed. Yes ",1029],["Total Bytes Read The total number of bytes of information Unity read from this file during the selected frames. Yes ",1029],["Read Access Time (ms) The total time Unity spent performing reads from this file during the selected frames. Yes ",1029],["Access Count The total number of accesses of any type to this file during the selected frames. Yes ",1029],["First Frame The first frame that Unity accessed this file on. Yes ",1029],["Number of Frames The total number of frames that Unity accessed this file on. Yes ",1029],["ID An index that represents the order of execution of the file access markers. No ",1029],["Read Bandwidth (MBps) The average bandwidth of read operations on this file over the selected frames, in megabytes per second. No ",1029],["Open Count Total number of opening operations on this file during the selected frames. No ",1029],["Close Count Total number of closing operations on this file during the selected frames. No ",1029],["Read Count Total number of read operations on this file during the selected frames. No ",1029],["Write Count Total number of write operations on this file during the selected frames. No ",1029],["Seek Count Total number of file seek operations on this file during the selected frames. No ",1029],["Total Bytes Written The total number of bytes Unity wrote to this file during the selected frames. No ",1029],["Write Bandwidth (MBps) The average bandwidth of write operations on this file over the selected frames, in megabytes per second. No ",1029],["Open Access Time (ms) The total time Unity spent performing opening operations on this file during the selected frames, in milliseconds. No ",1029],["Close Access Time (ms) The total time Unity spent performing close operations on this file during the selected frames, in milliseconds. No ",1029],["Write Access Time (ms) The total time Unity spent performing write operations to this file during the selected frames, in milliseconds. No ",1029],["Total Access Time (ms) The total time Unity spent accessing this file during the selected frames, in milliseconds. No ",1029],["",1029],["Accesses view",1029],["The Accesses view provides detailed information about every file access operation in the capture. Each entry in the table in the details pane of the Profiler represents a single file access operation to a single file. The below table describes all possible columns that the Accesses view can display.",1029],["Detail Description Enabled by default ",1029],["Index An ID number that represents the order in which Unity performed the access operations. Yes ",1029],["Filename The name of the accessed file during this operation. To see the file path in full, hover your cursor over the filename entry. Yes ",1029],["Type The type of access operation performed. This can be either Open, Close, Seek, Read, or Write. Yes ",1029],["Access Size The number of bytes transferred during the access, where the access was a read or write. Where the access was a file seek, the size is the destination offset. Yes ",1029],["Offset The (starting) offset of the file access. Yes ",1029],["Duration (ms) The time taken to perform this access, in milliseconds. Yes ",1029],["Average Bandwidth (MBps) The average bandwidth for this access, where the access type was a read. Yes ",1029],["First Frame Index The ID of the frame this access began on. Yes ",1029],["Frames The total number of frames this access occurred for. Yes ",1029],["Thread The thread the access occurred on. Yes ",1029],["Timestamp (ms) The time this access started, relative to the start of the profiler capture. No ",1029],["You can right-click on any of the file access markers to open a sub-menu with additional options to explore the data. The available options are as follows:",1029],["Property Function ",1029],["Show marker in timeline view Opens this marker in the CPU Usage Profiler module. ",1029],["Go to the first frame of this marker Selects the frame in which the marker first appears in the chart. This option is disabled if the marker only appears on one frame. ",1029],["Go to the last frame of this marker Selects the frame in which this marker last appears in the chart. This option is disabled if the marker only appears on one frame. ",1029],["Filter the view to this file path Populates the search bar with the contents of the Filename column to filter the results. ",1029],["Common Profiler markers",1030],["Unity's code is instrumented with a large number of Profiler markers that give you insight into what is taking up time in your application. The following tables explain what some of the common markers do:",1030],["",1030],["Main thread base markers",1030],["The main thread base markers provide a clear separation between the time spent on your application and time spent on the Editor and Profiler activities. The ProfilerRecorder can also use these markers to get the timing of a frame on the main thread.",1030],["Marker Function ",1030],["",1030],["PlayerLoop Contains any samples that originate from your application’s main loop. If you target the Editor instead of Play mode while the Player is running within the Editor in active Play mode, PlayerLoop samples nest under the EditorLoop. ",1030],["EditorLoop(Editor only marker) Contains any samples that originate from the Editor’s main loop. This is only present while you profile a player in the Editor. When you target Play mode with the Profiler, EditorLoop samples show the amount of time spent rendering and running the Editor that contains the Player.The Profiler does not record any further detailed data under the EditorLoop marker. This is because the samples that Editor code emits while the Profiler is profiling Play mode create a large profiling overhead.Unity categorizes any samples from the EditorLoop marker as Others in the CPU Profiler module charts. As a result, EditorLoop samples are usually the biggest contributor to that category. If you want to see what the Editor does in this time and also get a more detailed breakdown of what else contributes to the Others category, change the Profiler target to the Editor instead.Switching the Profiler’s target to Editor changes what the Profiler displays in the CPU Profiler module’s detail pane, as well as the Category breakdown in the CPU Profiler module’s charts. This is because the samples that were previously hidden under the EditorLoop sample then contribute towards their respective categories. ",1030],["Profiler.CollectEditorStats(Editor only marker) Contains any samples that relate to collecting statistics for different active Profiler modules.Samples that are nested under the Profiler.CollectGlobalStats marker indicate how much overhead the Player incurs when it collects the statistics of a particular module. All other child samples only reflect their effect in the Editor.To remove the overhead that a particular module incurs, close the module’s chart, or call Profiler.SetAreaEnabled.Note: Custom Profiler modules that use built-in counters enable the built-in counter’s area, even if the module it belongs to has been disabled. To prevent the Profiler from collecting these statistics and creating collection overhead, make sure that both the built-in Profiler module and your custom Profiler module are disabled. ",1030],["Editor-only markers",1030],["There are certain markers that only appear when you profile in the Unity Editor. These markers do not appear in Player-related activity, and only relate to Editor activity. Editor-only markers include security checks like the GetComponentNullErrorWrapper, which helps to identify a null component usage; CheckConsistency, which validates object setup; CheckAllowDestructionRecursive, which is a destruction check; and Prefab-related activities.",1030],["By default, in the CPU Profiler module’s Hierarchy view, sample stacks with Editor-only markers are collapsed and are named EditorOnly [SampleName]. While these sample stacks or their child samples might cause managed allocations that can lead to garbage collection getting triggered, they do not contribute to the GC.Alloc value of their parent sample if they are collapsed.",1030],["To change the default behavior, in the top right of the module details pane, select the context menu and disable the Collapse EditorOnly Samples setting. When you do this, you can expand the sample and contribute its GC.Alloc value to the enclosing marker.",1030],["This option does not affect the Timeline view, and the samples and their children appear expanded. You can usually ignore the samples with these markers, because they relate to Editor-only activity and don’t have any impact on reducing managed allocations. However, they can be useful to investigate if you are having serious issues with the performance impact they have on Play mode.",1030],["",1030],["Script update markers",1030],["Unless you are using the Job System, most of your scripting code is nested underneath the following markers. For information on Job System samples, see the Multi threading markers section of this page.",1030],["For further details on Unity’s Update Loop, see the documentation on Order of Execution of Event Functions. If you have inserted your own callbacks into the Player Loop via PlayerLoop.SetPlayerLoop, your script update samples appear under the respective main PlayerLoopSystem marker, if entered as a subsystem, or on their own, if entered directly into the main loop.",1030],["Marker Function ",1030],["",1030],["BehaviourUpdate Contains all samples of MonoBehaviour.Update methods. ",1030],["CoroutinesDelayedCalls Contains all samples of Coroutines after their first yield. ",1030],["FixedBehaviourUpdate Contains all samples of Monobehaviour.FixedUpdate methods. ",1030],["PreLateUpdate.ScriptRunBehaviourLateUpdate Contains all samples of Monobehaviour.LateUpdate methods. ",1030],["Update.ScriptRunBehaviourUpdate Contains all samples of MonoBehaviour.Update and Coroutines. ",1030],["",1030],["Rendering and VSync markers",1030],["These markers contain the samples where the CPU spends time processing data for the GPU, or where it might be waiting for the GPU to finish. If the GPU Profiler module is not available, or it adds too much overhead, the toolbar in the Profiler module details pane does not show this information. The samples under these markers can give you a good idea of whether your application is CPU-bound or GPU-bound.",1030],["Marker Function ",1030],["",1030],["WaitForTargetFPS Indicates how much time your application spent waiting for the targeted FPS that Application.targetFrameRate specifies.If the sample is a subsample of Gfx.WaitForPresentOnGfxThread, it represents the amount of time that your application spent waiting for the GPU. For example, this could be time that the GPU spent waiting for the next VSync, if that is configured in QualitySettings.vSyncCount, or if vSync is enforced on your target platform. However, samples with this marker are also emitted if the GPU hasn’t finished computing the frame.To determine what is causing samples with this marker to use a lot of time, switch to the Timeline view in the CPU Profiler module. In this view, you can check what happened on the render thread and how much time passed between this sample ending in the current frame and the same sample ending in surrounding frames.If the duration is larger than your application’s frame time should be (based on the targeted frame rate or vSync) your frames are taking too long to render or compute. If that’s the case, investigate the render thread and see how much time it spent on Gfx.PresentFrame over other work it did to prepare and issue commands to the GPU. If the render thread spent a large amount of time in Gfx.PresentFrame, your rendering work is GPU-bound. If the render thread’s time was spent preparing commands, your application is CPU-bound.To find out what to focus on, if your application is GPU bound, profile the GPU work with the Unity Profiler or a platform profiler. For more information, see the User manual documentation on how to optimize graphics performance.Note: The Editor doesn’t VSync on the GPU and instead uses WaitForTargetFPS to simulate the delay for VSync. Some platforms, in particular Android and iOS, enforce VSync or have a default frame rate cap of 30 or 60. ",1030],["Gfx.PresentFrame Represents the time your application spent waiting for the GPU to render and present the frame, which includes waiting for VSync.Samples with the WaitForTargetFPS marker on the main thread show how much time is spent waiting for VSync. ",1030],["Gfx.ProcessCommands Contains all processing of the rendering commands on the render thread. Your application might have spent some of this processing time waiting for VSync or new commands from the main thread, which you can see from its child sample Gfx.WaitForPresentOnGfxThread. ",1030],["Gfx.WaitForCommands Indicates that the render thread was ready for new commands. If you see this marker, it might indicate a bottleneck on the main thread. ",1030],["<GraphicsAPIName>.WaitForLastPresent e.g.GfxDeviceD3D11.WaitForLastPresentGfxDeviceD3D12.WaitForLastPresentGfxDeviceMetal.WaitForLastPresent Samples with this marker appear when the main thread waited for the GPU to flip the frame number to the screen (Time.frameCount - QualitySettings.maxQueuedFrames + 1). This means that if QualitySettings.maxQueuedFrames is greater than one, this time is spent waiting for the GPU to flip a frame that your application requested to render in a previous main thread frame.For more details on this sample and an overview of Unity’s Frame Pipeline, see Unity’s blog post on fixing Delta Time. ",1030],["Gfx.WaitForPresentOnGfxThread Indicates that the main thread was ready to start rendering the next frame, but the render thread did not finish waiting for the GPU to present the frame. This might indicate that your application is GPU-bound. To see what the render thread is simultaneously spending time on, check the CPU Profiler module’s Timeline view.If the render thread spends time in Camera.Render, your application is CPU-bound and might be spending too much time sending draw calls or textures to the GPU.If the render thread spends time in Gfx.PresentFrame, your application is GPU-bound, or it might be waiting for VSync on the GPU. A WaitForTargetFPS sub-sample of Gfx.WaitForPresentOnGfxThread represents the portion of the Present phase that your application spent waiting for VSync. The Present phase is the portion of time between Unity instructing the graphics API to swap the buffers, to the time that this operation completed.",1030],["Gfx.WaitForRenderThread Indicates that the main thread was waiting for the render thread to process all the commands in its command stream. Samples with this marker only appear in multithreaded rendering. ",1030],["",1030],["Back end scripting markers",1030],["The samples highlight Mono or IL2CPP scripting backend activities and are useful for troubleshooting issues with garbage collection and allocation.",1030],["Marker Function ",1030],["",1030],["GC.Alloc Represents an allocation in the managed heap that contains managed allocations that are subject to automatic garbage collection. To reduce the time your application spends on automatic garbage collection, you should minimize these types of samples. ",1030],["GC.Collect Represents samples that relate to garbage collection. Whenever Unity needs to perform garbage collection, it stops running your program code and only resumes normal execution when the garbage collector has finished all its work. Note: If you have enabled Incremental Garbage Collection the garbage collector might not finish its work in a single frame.This interruption might cause delays in the execution of your application that last anywhere from less than one millisecond to hundreds of milliseconds. This depends on how much memory the garbage collector needs to process and the platform your application is running on. For more information, see the documentation on Understanding automatic memory management. ",1030],["Mono.JITMono-only Contains samples that relate to just-in-time compilation of a scripting method. When a function is executed for the first time, Mono compiles it and Mono.JIT represents this compilation overhead. ",1030],["UnsafeUtility.Malloc Contains samples that call UnsafeUtility.Malloc to allocate unmanaged memory. While the Garbage Collector does not track this memory, allocating memory might have a significant performance impact which is shown with this sample. To investigate the source of this call, you can enable Call Stack recording for this marker in the Profiler window. ",1030],["",1030],["Multithreading markers",1030],["These markers contain samples that do not measure the CPU cycles consumed, but instead highlight information that relates to thread synchronization and the Job System. When you see these samples, use the CPU Profiler module’s Timeline view to check what’s happening on other threads at the same time.",1030],["Marker Function ",1030],["",1030],["Idle Contains samples that indicate the length of time that a Worker Thread is inactive for. A worker thread is inactive any time that the Job System does not utilize it, and it goes into wait mode, where it waits on the semaphore.Small gaps between Idle samples usually happen when the Job System wakes them up, for example, to schedule new jobs. Longer gaps might indicate that a native job that has not been instrumented is running on the thread. ",1030],["JobHandle.Complete Contains samples that indicate when a sync point on a job happened. Sync points might have a performance impact on your application and might interfere with the execution of multi-threaded job code. To make it easier to find where exactly the sync point happened, enable Call Stack recording for this sample. In the CPU Profiler module's Timeline view you can enable Flow Events to see which jobs finished at this point. ",1030],["Semaphore.WaitForSignal Contains a sample that depicts a synchronization point on a thread. To find the thread it is waiting for, check the Timeline view for samples that ended shortly before this one. ",1030],["WaitForJobGroupID A Sync Fence on a JobHandle was triggered. This might lead to work stealing, which happens when a worker finishes its work and then looks at other workers’ jobs to complete. These show up as job samples executed under this marker. Jobs that were “stolen” are not necessarily the jobs that were being waited for. ",1030],["",1030],["Physics markers",1030],["The following table outlines some of the high-level physics Profiler markers. FixedUpdate calls all of these measurements.",1030],["Marker Function ",1030],["",1030],["Physics.FetchResults Contains samples that collect the results of the physics simulation from the physics engine, such as contact streams, trigger overlaps, and joint breakage events. ",1030],["Physics.Interpolation Contains samples that measure the execution time of the Physics.Interpolation method. This method manages the interpolation of positions and rotations for all the physics objects in your application. ",1030],["Physics.Processing Contains samples that spent time waiting on the main thread until the physics simulation completed across all threads. If your application spends a lot of time in Physics.Processing but only has a few physics related GameObjects in the Scene, it might indicate that worker threads picked up other systems tasks due to job stealing and reported as physics. This is because while waiting, the main thread picks up jobs from the high priority queue. ",1030],["Physics.ProcessingCloth Contains samples that measure the execution time of the Physics.ProcessingCloth method. This method processes all cloth physics jobs. Expand this sample to show the low-level detail of the work done internally in the physics engine. ",1030],["Physics.ProcessReports Contains samples that correspond to time spent forwarding physics data to scripts via callbacks such as OnTriggerEnter. Note: These samples do not compute the data required because they have already been prepared during FetchResults.There are four distinct sub-stages: ",1030],["Physics.Contacts Contains samples that measure the execution time of Physics.Contacts. This processes OnCollisionEnter, OnCollisionExit, and OnCollisionStay events. ",1030],["Physics.JointBreaks Contains samples that measure the execution time of Physics.JointBreaks. This processes updates and messages related to broken joints. ",1030],["Physics.TriggerEnterExits Contains samples that measure the execution time of Physics.TriggerEnterExits. This processes OnTriggerEnter and OnTriggerExit events. ",1030],["Physics.TriggerStays Contains samples that measure the execution time of Physics.TriggerStays. This processes OnTriggerStay events. ",1030],["Physics.Simulate Contains samples that measure the amount of time spent working on the pre-requisites for the Physics.Simulate method. This method instructs the physics engine to run its simulation, which updates the state of the current physics. ",1030],["Physics.UpdateBodies Contains samples that update all the physics bodies’ positions and rotations. For each gameObject that has a Rigidbody component, samples with this marker read the pose from the physics engine and write it to the Transform. ",1030],["Physics.UpdateCloth Contains samples that measure the execution time of the Physics.UpdateCloth method. This method processes updates that relate to cloth and their Skinned Meshes. ",1030],["For more information about script life cycles and general samples within a script life cycle, see the documentation on Order of Execution for Event Functions.",1030],["",1030],["Performance warnings",1030],["The CPU Profiler detects some common performance issues and warns you about them. These appear in the Warning column of the CPU Profiler module's Hierarchy view in the module details pane.",1030],["The Profiler detects some specific calls that you should avoid in performance-critical contexts. It displays the warnings with the reasons the operations are affecting performance as follows:",1030],["Warning Description ",1030],["",1030],["Animation.DestroyAnimationClipAnimation.AddClipAnimation.RemoveClipAnimation.CloneAnimation.Deactivate Indicates that RebuildInternalState has been triggered. RebuildInternalState is an operation that goes through the list of curves for each clip in the Animation component, and then rebinds each curve to a value on a component, on a GameObject.This is a resource-intensive operation, so you should avoid calling these methods at runtime as much as possible. ",1030],["AssetBundle.asset/allAssets Indicates that Unity called the AssetBundleRequest.assets/allAssets API while the AssetBundle loading was not complete (AssetBundleRequest.isDone is false). This causes a stall on the main thread and waits for the loading operation to complete. ",1030],["AsyncUploadManager.AsyncBufferResizedAsyncUploadManager.AsyncBufferDelete Indicates that the internal buffer for uploading data to the GPU is resized because it's not big enough. This resizing is slow and causes spikes in CPU activity.You can avoid this warning if you can spare the memory to allocate a larger size up front.You can use Async Upload Buffer Size setting in Quality Settings to set the default size.The AsyncUploadManager.AsyncBufferResized marker indicates the newly allocated size which you can use as a guide for the default buffer size. ",1030],["Rigidbody.SetKinematic Recreate non-convex MeshCollider for Rigidbody. ",1030],["Profiler Module Editor",1031],["The Profiler Module Editor is a tool that you can use to add your own custom modules to the Unity Profiler window. You can also add built-in counters to modules, or use the runtime API to add your own custom counters to modules. For information on how to implement your own counters, see the Profiling package documentation on Profiler Counters API.",1031],["It’s particularly useful when you need to hone in on statistics that you want to analyze deeper, or to add custom statistics about your application to the Profiler window.",1031],["To use the Profiler Module Editor, open the Profiler Window (Window > Analysis > Profiler) and then select the Profiler Modules dropdown.",1031],["Select the gear icon, and the Profiler Module Editor window opens. The window has three columns:",1031],["List of Profiler Modules:** This list contains all of the available modules you can add to the Profiler Window. Built-in modules are greyed-out in the list, indicating that you cannot edit their contents. You can drag and drop the modules to reorder their appearance in the Profiler window. When you create your own custom Profiler Module, it also appears in this list.",1031],["Profiler Module information pane** (only appears when you create or select a custom module): Lists the counters contained in the custom module",1031],["Available counters** (only appears when you create or select a custom module): Lists the available counters you can add to the custom module.",1031],["Creating a custom module",1031],["To create a custom module, select the Add button in the bottom left of the Profiler Module Editor window. Unity adds a new Profiler module to the list called New Profiler Module. To rename the module, click in the text field and use your keyboard to set the name.",1031],["Adding counters to a module",1031],["To collect data in the custom Profiler module, you must add at least one counter for the module to track. You can add both built-in Unity counters, or use the ProfilerRecorder API to create your own counters to add to the module. The list of available counters appears in the Available Counters pane.",1031],["If you don’t have any data loaded into the Profiler window, then any counters you’ve created do not appear in the Available Counters pane when you load the Profiler Module Editor. To see your custom counters, you must capture or load some data that has your emitted counters in with the Profiler, and reopen the Profiler Module Editor.",1031],["The available Unity counters are divided into three areas: Memory, Render, and Virtual Texturing. For more information on the specific counters available in these areas, see the documentation for each module.",1031],["If you use the API to add your own counters, you must load or collect some data into the Profiler window first, and then your custom counters appear in the Available Counters pane under the User heading of the Profiler Module Editor.",1031],["To add a counter to a module, select it in the Available Counters list and then select the Add Selected button. Alternatively, you can double-click a counter to add it to a module. Unity then adds these counters to the selected Profiler module. To add multiple counters to the module at once, you can hold down Shift and click two counters to select all the counters between the two, or you can hold down Ctrl (Command on macOS) to select counters one at a time, then select the Add Selected button.",1031],["To reorder the counters, you can drag and drop them. You can only add a maximum of 10 counters to a module.",1031],["Using custom modules",1031],["When you are happy with your custom module, select the Save Changes button in the bottom right corner of the Profiler Module Editor window. Unity closes the window, and you can then see your new module listed in the Profiler Window.",1031],["To effectively use and compare your data against the built-in modules, you can reorder the modules in the Profiler Window. To do this, open the Profiler Module Editor, and then drag and drop modules in the Profiler Modules pane.",1031],["This is particularly useful if you want to inspect custom elements of your application against spikes in the built-in Profiler data.",1031],["Profiling your application",1032],["When you use the Unity Profiler to profile your application, there are three main ways to record data:",1032],["Profile your application in a player on your target platform",1032],["Profile your application in Play mode in the Unity Editor",1032],["Profile the Unity Editor",1032],["The best way to get accurate timings about your application is to profile it on the end platform you intend to publish it on. This gives you accurate timings about what impacts the performance of your application.",1032],["However, it can be time-consuming to build your application every time you would like to improve elements of its performance. So, to quickly assess the performance of your application you can profile it directly in Play mode in the Editor. Profiling in Play mode doesn’t give you an accurate reflection of what the performance of your application looks like on a real device, but it is a useful tool to quickly check to see if the changes you make improve your application’s performance, after initially profiling on the end platform.",1032],["The Unity Editor might affect the performance of your application, because it uses the same resources as your application when it's running in Play mode, so you can also profile the Editor separately to determine what resources it uses. This is particularly useful if your application has only been designed to work in Play mode, such as for movie making.",1032],[" Profile your application on a target platform",1032],["To profile your application on its target release platform, connect the target device to your network or directly to your computer via cable. You can also connect to a device via IP address. You can only profile your application as a Development Build. To set this up, go to Build Settings (menu: File > Build Settings) and select your application’s target platform. Enable the Development Build setting. When you enable this setting, two settings related to the Profiler become available: Autoconnect Profiler and Deep Profiling Support.",1032],["When you enable the Autoconnect Profiler setting, the Unity Editor bakes its IP address into the built Player during the build process. When you start the Player, it attempts to connect to the Profiler in the Editor located at the baked IP address.",1032],["If you additionally enable the Deep Profiling Support setting, Unity performs Deep Profiling when the built Player starts, which means that the Profiler profiles every part of your code, and not just code timings explicitly wrapped in ProfilerMarkers. This is useful to get Deep Profiling information on your application’s start up times, however, this adds a small amount of overhead to your build.",1032],["Connecting to your Player in the Profiler window",1032],["To use the Profiler to manually connect to a platform running your application, configure the settings in the Attach to Player dropdown. You can only do this if Autoconnect Profiler is disabled.",1032],["For a platform to appear in the Attach to Player dropdown, it must meet the following requirements:",1032],["The platform is visible on your local network or directly connected to your local machine by cable.",1032],["The platform is running a Player that you built with the Development Build option enabled. For instructions on how to enable this setting for a platform, refer to Profile your application on a target platform.",1032],["The platform is running your Player.",1032],["The Attach to Player dropdown displays all Unity Players that Unity detects through the network or by direct connection. You can identify these Players by Player Name and the Product Name that is running the Player; for example, iPhonePlayer (My iPhone).",1032],["You can also connect to a Player directly via its IP address. To do this, select the Attach to Player menu, and then select <Enter IP> in the dropdown. In the dialog box that appears, type the IP address and (optionally) the port of the Player you want to connect to.",1032],["To collect profiling information on your application, select the Player from the dropdown menu, and then click Record.",1032],["To continuously collect data while your application runs, enable the Run In Background setting in Player Settings (menu: Edit > Project Settings > Player > Resolution and Presentation). When you enable this setting, the Profiler collects data even when you leave your application running in the background. If you disable it, the Profiler only collects data when the application is running in an active window.",1032],["",1032],["Using the Attach to Player search bar",1032],["The Attach to Player dropdown includes a search bar that you can use to find information about your Player. You can search by Player Name or device category, for example Remote. When you search by category, the result displays all devices in that category.",1032],["Select the name of a development Player to view it in the profiler.",1032],["Attach to Player properties",1032],["Each column provides the following information about when it is available:",1032],["Property: Description: ",1032],["Player Name The name of the device that is running your application.To change this name, navigate to Edit > Preferences > Analysis > Profiler (macOS: Unity > Settings > Analysis > Profiler) and enter your desired name in the Custom Connection ID field.You can also set a Player Name set when you launch a Player from the command line using the -connection-id argument.For more information about the categories in this property, see Player name device categories ",1032],["Product Name This is the value of the field that you set in Project > PlayerSettings. ",1032],["IP The IP address of the Player. ",1032],["Port The port of the Player. ",1032],[" Player name device categories",1032],["The Player Name category includes the following categories that display information about particular device types:",1032],["Property: Description: ",1032],["Play Mode Select this property to profile your application in Play Mode. ",1032],["Edit Mode Select this property to profile the Unity Editor. ",1032],["Local This list contains any device that is running on the local machine, in the Unity Editor or in a standalone player.It also displays information for players that are physically connected to the host machine with a cable. ",1032],["Remote This section displays information for devices running on the local network.This section only appears when Unity finds a remote device running on the local network. ",1032],["Connections without ID This section only appears when Unity finds a device running a player older than Unity 2021.2. These players do not have Product Name, IP, or Port information. ",1032],["Direct Connection Use this option to connect to a specific IP and port combination. This category displays the most recent IP you connected to. ",1032],["Platform specific profiling guidance",1032],["Different platforms behave in different ways when you connect them to the Unity Profiler. The following sections provide guidance on some common behaviors each platform has:",1032],["",1032],["WebGL",1032],["You can use the Unity Profiler in WebGL, but you cannot attach to a running player built with WebGL via the Editor. This is because WebGL uses WebSockets for communication, which does not allow incoming connections on the browser side. To attach to a running player, you need to enable the Autoconnect Profiler checkbox in Build Settings (menu: File > Build Settings). Unity cannot profile draw calls for WebGL.",1032],["Profiling on mobile devices",1032],["Both iOS and Android devices support remote profiling over a network. If you are using a firewall, open ports 54998 to 55511 in your firewall’s outbound rules. These are the ports Unity uses for remote profiling.",1032],["When you set up remote profiling, the Unity Editor might sometimes not connect to the device automatically. If this happens, you can initiate the Profiler connection manually by selecting the Attach to Player dropdown menu in the Profiler window and choosing the appropriate device.",1032],["You can also plug the target device directly into your computer, to avoid network or connection issues.",1032],["",1032],["iOS remote profiling**",1032],["To enable remote profiling on iOS devices, follow these steps:",1032],["Connect your iOS device to your WiFi network. The Profiler uses a local WiFi network to send profiling data from your device to the Unity Editor.",1032],["Attach your device to your computer via cable. In the Build Settings window (menu: File > Build Settings), select the Development Build and Autoconnect Profiler checkboxes, then click Build & Run.",1032],["When the application launches on the device, open the Profiler window in the Unity Editor (menu: Window > Analysis > Profiler).",1032],["",1032],["Android remote profiling**",1032],["Android devices support two methods of remote profiling: WiFi and Android Debug Bridge (adb).",1032],["For WiFi profiling, follow these steps:",1032],["Disable mobile data on your Android device.",1032],["Connect your Android device to your WiFi network. The Profiler uses a local WiFi network to send profiling data from your device to the Unity Editor.",1032],["Attach your device to your computer via cable. In the Build Settings window (menu: File > Build Settings), select the Development Build and Autoconnect Profiler checkboxes, then click Build & Run.",1032],["When the application launches on the device, open the Profiler window in the Unity Editor (menu: Window > Analysis > Profiler).",1032],["Note**: The Android device and host computer that is running the Unity Editor must both be on the same subnet for device detection to work.",1032],["For Android Debug Bridge (adb) profiling, follow these steps:",1032],["Make sure the device is in Development mode and enable the USB debugging setting",1032],["Attach your device to your computer via cable and make sure that it shows in the adb devices list.",1032],["In the Build Settings window (menu: File > Build Settings), select the Development Build checkbox, and then click Build & Run.",1032],["When the application launches on the device, open the Profiler window in the Unity Editor (menu: Window > Analysis > Profiler).",1032],["From the Attach to Player dropdown menu, select AndroidProfiler(ADB@127.0.0.1:34999). The entry in the dropdown menu is only visible when the selected target is Android.",1032],["The Unity Editor automatically creates an adb tunnel for your application when you select Build & Run. If you want to profile another application, or you restart the adb server, you need to configure this tunnel manually. To do this, open a Terminal window or Command prompt and enter the following:",1032],["Required when Editor-to-Android connection is established via USB cable",1032],["adb forward tcp:34999 localabstract:Unity-{insert bundle identifier here}",1032],["Required when Android-to-Editor connection is established via USB cable",1032],["adb reverse tcp:34998 tcp:34999",1032],["To use Deep Profiling with an Android build, you need to enable the Mono Scripting Backend setting in the Android Player Settings (menu: Edit > Project Settings > Player > Android > Other Settings) and enter the following to start the game through an adb command:",1032],["~$ adb shell am start -n {insert bundle identifier here}/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'",1032],["ChromeOS remote profiling**",1032],["ChromeOS devices support remote profiling through adb over WiFi, unlike Android devices that support remote profiling through both WiFi and adb over USB connection.",1032],["To enable WiFi profiling on ChromeOS devices, follow these steps:",1032],["Enable Linux Development Environment and ADB debugging settings on your Chromebook. You need not enable ChromeOS Developer Mode. For more information on how to do this, refer to Enable ADB Debug.",1032],["Connect your Chromebook and the host computer running Unity Editor to the same WiFi network.",1032],["Establish a connection between your Chromebook and the host computer through adb. For more information on how to do this, refer to Connect to ADB over a network.",1032],["In the Build Settings window (menu: File > Build Settings), select the Development Build and Autoconnect Profiler checkboxes, and then click Build & Run.",1032],["When the application launches on the device, open the Profiler window in the Unity Editor (menu: Window > Analysis > Profiler). Note: If your application is not deploying to the Chromebook, check the Run Device dropdown in the Build Settings. If your device isn't listed, but the adb connection between the host computer and Chromebook is established, enter the IP address of the device through the <Enter IP> option in the Run Device dropdown. After you enter the IP address, you can profile your application as usual.",1032],["Profiling in the Unity Editor",1032],["When you use the Profiler window to run and profile your application in the Editor, the results are only an approximation of your application’s behavior when the target platform runs it. This is because Play mode runs in the same process as the Editor, so you can't fully isolate your application’s CPU, GPU, and memory usage from the Unity Editor’s usage. This skews the resulting profiling data.",1032],["To get better profiling results, you should always profile your application on a target device, and only profile in the Editor to quickly iterate over issues you have already identified on a device.",1032],["You can also profile in Play mode or profile the Editor to identify issues unrelated to the performance of your application, such as whether long load times or an unresponsive Editor slows down iteration time, or if your application performs badly in Play mode.",1032],["Whenever you profile in the Editor, you should make sure that you open Play mode in maximized view, and reduce the amount of open Editor windows. This ensures that other Editor windows don't use up time on the render thread and GPU, and therefore affect the performance data. When Play mode is in a maximized view it runs your application at a resolution closer to that of your target device, which directly affects performance issues such as those related to fill rate.",1032],["Profiling in Play mode",1032],["The Profiler’s default target is Play mode, which records activities when the Editor is running Play mode. Play mode profiling is useful to test out quick changes without having to rebuild a player, but you should not use it as a replacement for validating builds on your application’s target platform and devices. This is because Play mode runs in the same application and main thread as the Editor, which means that when you profile in Play mode, the Editor’s systems such as the UI, Inspectors, Scene View rendering, and asset management affect the performance and memory profiling measurements of your application.",1032],["To effectively profile in Play mode, you should regularly make builds of your application and deploy them to a range of target devices (both high and low spec devices), and test and profile your application on these devices. If you identify performance issues with your application on these devices, narrow down the area that needs the most attention.",1032],["You can then profile your application in Play mode and quickly iterate over any changes you make to your application. You can use the information you got from profiling your application on target devices to identify if there is any similar behavior after profiling your application in Play mode. You can then make changes to your application and profile again in Play mode to quickly see the effects that your changes made. Once you are satisfied with your changes, build and deploy your application to the target devices again to validate your changes.",1032],["PlayerLoop and EditorLoop samples",1032],["To reduce the amount of noise and misleading measurements in the profiling data that the Editor creates while running Play mode, the CPU and GPU Profiler modules split their timings into those that happen in the PlayerLoop and those that happen in the EditorLoop. Unity assigns Profiler samples of these types with the PlayerLoop and EditorLoop markers.",1032],["When the Profiler targets Play mode, it only collects timing samples that happened inside the PlayerLoop.",1032],["Unity categorizes any EditorLoop samples as Others in the CPU Profiler module charts. As a result, EditorLoop samples are the biggest contributors to that category. If you want to see what the Editor does in this time and also get a more detailed breakdown of what else contributes to the Others category, change the Profiler target to the Editor instead.",1032],["Important:** If you use Deep Profiling, and target Play mode, it has a performance impact on every function call that happens in both PlayerLoop and EditorLoop. This is because Deep Profiling hooks into the beginning and end of any scripting method call on domain reload and it doesn't detect which parts are never called from the PlayerLoop. The method calls that happen in the EditorLoop don’t incur the full overhead of creating a sample, but they still check if they should emit one, which causes a smaller but still present overhead.",1032],["Profiling the Editor",1032],["When you change the Profiler’s target to Editor, all the samples that were previously hidden under the EditorLoop marker contribute to their respective categories. This means that the information in the CPU Profiler module’s detail pane and its charts changes significantly.",1032],["To profile the Editor’s startup times, start the Editor with the command line option -profiler-enable.",1032],["To reduce the impact that the Profiler window has on Editor performance, you can use the Standalone Profiler, which opens the Profiler window in its own process. This is especially useful if you select the Editor as the profiling target, or are Deep Profiling your application, because the Profiler window itself usually uses resources that might skew the performance data.",1032],["Best practices for profiling your application",1032],["When you profile your application, there are a few things that you can do to ensure consistency across profiling sessions, and to make sure that the processes that Unity uses do not affect your profiling data:",1032],["Only add the Profiler modules related to the area that you want to investigate to the Profiler window. To add and remove modules to the Profiler, select the dropdown in the top left of the Profiler window.",1032],["Avoid using Deep Profiling, because it might create a high overhead when you use it. If you want to see more details on samples with markers such as GC.Alloc or JobFence.Complete, go to the Profiler window toolbar and enable the Call Stacks setting. This provides the sample’s full call stack, which gives you the information you need without incurring the overhead of Deep Profiling.",1032],["Disable the Live setting, if you do not need to see the Hierarchy or Timeline view updating as the Profiler collects data. To see the data update in the window, you can stop recording.",1032],["Use the F9 shortcut to enable or disable the Profiler. You can use this shortcut to capture performance data without the Profiler window needing to be open. If you have the Standalone Profiler open, using this shortcut starts recording in this window.",1032],["Added Deep Profiling Support in 2019.3 NewIn20193",1032],["Video Profiler module",1033],["The Video Profiler module displays information about what resources the video in your application is using, such as memory, buffering, and number of video clips. You can use this to determine how efficiently your application plays back and buffers videos on your selected platforms. You can also use the CPU Usage Profiler module to assess where Unity spends time on video. For more information, see the CPU Usage Profiler module documentation.",1033],["Chart categories",1033],["The Video Profiler module’s chart is divided into four categories. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display. For more information on how to use the Profiler window, see the documentation on Getting started with the Profiler window.",1033],["Chart Description ",1033],["",1033],["Total Video Sources The total number of video sources in your Scene. ",1033],["Playing Video Sources The number of video sources playing in your Scene. ",1033],["Pre-buffered frames The total number of pre-buffered frames. ",1033],["Total Video Memory The amount of system memory the video in your application is using. ",1033],["Module details pane",1033],["When you select a frame in the Video Profiler module, the module details pane at the bottom of the Profiler window displays further detailed information on the video playback in your Scene. The following information is available:",1033],["Detail Description ",1033],["",1033],["Total Video Sources The number of video sources in your Scene. ",1033],["Playing Video Sources The number of video sources playing in your Scene. ",1033],["Paused Video Sources The number of video sources that are paused. ",1033],["Software Video Playback The number of videos playing that the platform doesn’t natively support. ",1033],["Pre-buffered frames The total number of pre-buffered frames. ",1033],["Pre-buffered frame limit The pre-buffered frame limit. Unity buffers up to 16 frames per clip. ",1033],["Total frames dropped Number of frames that Unity had to skip in order to maintain real time. This might happen when your application runs slowly and cannot produce frames fast enough to play in real time. ",1033],["Video Clip Count The number of video clips in your Scene. ",1033],["Total Video Memory The amount of system memory the video in your application is using. ",1033],["Virtual Texturing Profiler module",1034],["The Virtual Texturing Profiler module displays statistics about Streaming Virtual Texturing in your application. Virtual Texturing reduces the amount of GPU memory that your application uses, and the loading times of textures in your application if there are a lot of high resolution textures in a scene.",1034],["Note:** To use the Virtual Texturing Profiler module, in your project’s Player Settings, you must enable Virtual Texturing (Edit > Project Settings > Player > Other Settings).",1034],["The chart displays information about the texture tiles that are on screen while your application is running, and how much memory the textures use. When you select the Virtual Texturing module, the lower pane of the Profiler window displays statistics such as how much cache size the virtual textures use.",1034],["The Virtual Texturing Profiler module’s chart is divided into the following categories:",1034],["Chart Description ",1034],["",1034],["Required Tiles The number of texture tiles that were visible on screen. These are the tiles that the shaders tried to sample to render the selected frame. ",1034],["Max Cache Mip Bias The automatic mipmap bias applied to all textures with the same texture format. If this value isn't zero, then the cache isn't large enough to hold all the tiles of that format that are visible. The higher the mip bias, the lower the texture quality. ",1034],["Max Cache Demand The highest cache demand of all GPU caches in the selected frame. ",1034],["Missing Streaming Tiles The number of tiles that were visible on the screen but weren't in video memory. Your application streams these tiles from the disk or copies them from main memory as soon as possible. ",1034],["Missing Disk Data The remaining data (in bytes) that your application needed to read from the disk to satisfy the selected frame. ",1034],["",1034],["Module details pane",1034],["When you click on the Virtual Texturing Profiler module, the details pane in the lower half of the window displays further detailed statistics. These statistics are also available via the ProfilerRecorder API and in the Profiler Module Editor so you can add them to a custom Profiler module.",1034],["The statistics in the details pane are as follows:",1034],["Statistic Description ",1034],["",1034],["System Statistics This section of the details pane displays information about your application’s texture tiles and the resources they used during the Profiler capture. These statistics are available for both player builds, and profiling Play mode in the Unity Editor. ",1034],["Tiles required this frame The number of texture tiles that were visible on screen. These are the tiles that the shaders tried to sample to render the selected frame. If all these tiles are in the GPU cache then Unity renders the frame with the highest possible texture quality for the cache size. Unless the Scene was frozen, then some of the tiles weren't in the GPU memory yet. In this case, the virtual texturing sample uses a lower quality sample from a higher mipmap that's in memory, until the higher quality sample arrives in memory.The cache mipmap bias affects the number of required tiles. If the mipmap bias isn't zero for all caches then the number of required tiles is lower than the number required for the optimal texture quality. ",1034],["Max Cache Mip Bias The mip bias of the GPU cache with the highest mip bias. If this isn't zero then at least one of the caches isn't large enough to hold all the texture tiles to render the selected frame at the optimal texture quality. ",1034],["Max Cache Demand The highest cache demand of all GPU caches the selected frame represented as a percentage of the GPU. The GPU cache that has the highest demand might need to be larger to avoid mipmap biasing for this cache.If the Max Cache Demand statistic is a low percentage then the caches might be too large for the render resolution and content. The main downside of this is that your application is using more GPU memory than it needs but this isn't a problem if your application isn't memory constrained. ",1034],["Total CPU Cache Size The amount of memory that Unity allocated to stored texture tiles after it loaded them from disk. ",1034],["Total GPU Cache Size The size of all GPU caches that the Virtual Texturing module allocated in the selected frame. Unity creates a GPU cache when a material that uses a texture of that texture format is rendered. ",1034],["Atlases The number of virtual texture spaces or atlases (maximum of 64). Unity atlasses the textures that are streamed with virtual texturing into large virtual texture spaces. This is automatic and transparent. ",1034],["Player Build Statistics This section of the details pane displays information about your application’s texture tiles that are only available when you profile a build of your application. ",1034],["Missing Disk Data The remaining data (in bytes) that the application needed to read from disk to satisfy the selected frame. There might be more disk read requests queued up from requests in previous frames that aren’t visible anymore. As such, this is the minimum amount of data that the application reads from disk if no new tiles become visible. The actual amount of data the application reads might be larger. ",1034],["Missing Streaming Tiles The number of tiles that were visible on the screen but weren't in memory yet. These tiles were streamed from disk as soon as possible. This number might be higher if, for example, the camera moves. This statistic falls to zero if the scene and camera froze and no new tiles were visible. ",1034],["Read From Disk The number of bytes of disk read operations that Unity completed in the selected frame. ",1034],["Per Cache Statistics Displays statistics about the cache. Only available when you profile a build of your application. ",1034],["Cache Format The graphics formats that the textures in your application used. ",1034],["Demand The amount of cache demand each graphics format used. Note: This statistic is not available in custom profilers ",1034],["Bias The amount of mipmap bias cache each graphics format used. Note: This statistic is not available in custom profilers ",1034],["Profiler overview",1035],["The Unity Profiler is a tool you can use to get performance information about your application. You can connect it to devices on your network or devices connected to your machine to test how your application runs on your intended release platform. You can also run it in the Editor to get an overview of resource allocation while you’re developing your application.",1035],["The Profiler gathers and displays data on the performance of your application in areas such as the CPU, memory, renderer, and audio. It’s a useful tool to identify areas for performance improvement in your application, and iterate on those areas. You can pinpoint things like how your code, assets, scene settings, camera rendering, and build settings affect your application’s performance. It displays the results in a series of charts, so you can visualize where spikes in your application’s performance happen.",1035],["In addition to using the built-in Unity Profiler, you can use the low level native plug-in Profiler API to export profiling data to third-party profiling tools, and the Profiling Core package to customize your profiling analysis. You can also add powerful profiling tools such as the Memory Profiler, and the Profile Analyzer to your project to analyze performance data in further detail.",1035],["To access the Profiler window go to menu: Window > Analysis > Profiler. For a detailed overview of the window, see the Profiler window documentation.",1035],["This section covers the following topics:",1035],["How to profile and optimize your application",1035],["For best-practice information on how to profile your application, and the sort of things you can adjust through profiling, see the following guides and tutorials:",1035],["Performance and Optimization - Unity Learn tutorial on the Profiler and performance and optimization tips.",1035],["Best practices for performance optimization in Unity - Best practice guides on optimizing your application.",1035],["Ultimate guide to profiling Unity games - An e-book that describes how to effectively profile your Unity application.",1035],["Audio Profiler module",1036],["The Audio Profiler module monitors the performance of the audio system in your application, such as the total load and voice counts.",1036],["The Audio Profiler module’s chart tracks the time spent on the audio in your application. The timings are divided into four categories. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display.",1036],["Chart Description ",1036],["",1036],["Playing Audio Sources The total number of audio sources playing in the Scene at the frame selected. This is useful to monitor to see if the audio is overloaded. ",1036],["Audio Voices The number of audio (FMOD channels) voices used in the selected frame. ",1036],["Total Audio CPU The amount of CPU usage the audio used in the selected frame. ",1036],["Total Audio Memory The amount of RAM the audio engine used in the selected frame. ",1036],["Module details pane",1036],["When you select the Audio Profiler module, the details pane below it displays a breakdown of the audio data for the selected frame. There are two views you can use to inspect the audio profiler data: Simple and Detailed. To change the display, use the top-left dropdown in the details pane (set to Simple by default).",1036],["Simple view",1036],["The Simple view contains the following information about the audio data for the frame you selected.",1036],["Data Description ",1036],["",1036],["Total Audio Sources Total number of audio sources in the Scene. ",1036],["Playing Audio Sources Total number of audio sources playing in the Scene ",1036],["Paused Audio Sources The total number of paused audio sources in the Scene. ",1036],["Audio Clip Count Total number of audio clips in the Scene. ",1036],["Audio Voices The total number of audio channels (FMOD channels) your Project uses. ",1036],["Total Audio CPU The total amount of CPU the audio uses. ",1036],["DSP CPU The amount of CPU your Project uses by mixing, audio effects, and decompression of non-streamed sounds that have the Compressed In Memory load type. This does not cover the CPU required for sounds that Unity decodes in the background whose load type is Decompress On Load and have the Load In Background flag checked. ",1036],["Streaming CPU The amount of CPU your Project uses to stream the audio in your application. ",1036],["Other CPU General CPU overhead not covered by the above. ",1036],["Total Audio Memory The amount of memory the audio uses in your Project. ",1036],["Streaming File Memory The amount of memory that audio files with the load type of Streaming use for short-term buffering of compressed audio data as it is progressively read from disk. ",1036],["Streaming Decode Memory The amount of memory that audio files with the load type of Streaming use for buffering the decoded sample stream. ",1036],["Sample Sound Memory The amount of memory that audio files with the load type of Decompress On Load use for the decompressed sample data.Note: Unity pools the memory that the audio system allocates and it keeps growing until it reaches saturation over the run time of your application. The audio system internally reuses the allocated memory, which cannot be compacted during runtime. ",1036],["Other Memory Overhead caused by various subsystems in the audio system. ",1036],["Detailed view",1036],["The Detailed view contains all of the information in the Simple view, and additionally contains detailed per-frame logging of audio events. You can view these either as Channels, Groups, or Channels and Groups. To open this view, open the dropdown at the top of the module details pane, select Detailed, and then select one of the views from the toolbar at the top of the pane.",1036],["The Groups view shows the hierarchy of the buses in the audio mixer. The Channels and Groups view displays this information alongside information about the playing sounds.",1036],["Select the Reset play count on play to reset the number in the Plays column the next time you click Play in the Player window, or when you connect to a new target device.",1036],["The information in the detailed view is arranged into the following columns:",1036],["Column Description ",1036],["",1036],["Object The GameObject that contains the Audio Source playing the audio. ",1036],["Asset The audio Asset that the corresponding GameObject Audio Source is playing. ",1036],["Volume The volume the Audio Source applies to the audio. This is a combination of its overall volume property, and the dynamic volume that the distance-dependent attenuation curve applies. ",1036],["Audibility The actual level at which the audio plays. This is the sum of the Audio Source’s volume and the other attenuations the mixer channels apply to it. ",1036],["Plays The number of times Unity has played the audio. This information is useful to debug logic errors where Unity might not use some audio files. ",1036],["3D Displays YES if the audio uses dynamic distance-dependent attenuation and directional panning. ",1036],["Paused Displays YES if the audio is paused in this frame. ",1036],["Muted Displays YES if the audio is muted in this frame. ",1036],["Virtual Displays YES if the audio is suspended because of the Max Real Voice Count, which you can set in the Audio Project Settings. The Max Real Voice Count sets the maximum amount of Audio Sources that Unity simultaneously plays at once. If this displays true, Unity has prioritized other audio that has higher audibility or priority in this frame. ",1036],["OneShot Displays YES if AudioSource.PlayOneShot() played the audio. ",1036],["Looped Displays YES if AudioSource.Play() played the audio. ",1036],["Distance The distance from the Audio Source to the AudioListener. ",1036],["MinDist The minimum distance defined on the AudioSource curve editor. This defines a spherical region around the audio where the volume stays at a constant level within it. ",1036],["MaxDist The maximum distance defined on the Audio Source curve editor. This defines a spherical region around the audio where the volume stays at a constant level outside of it. ",1036],["Time The current relative time in the audio’s playback. While the audio playback is paused, this time does not advance. ",1036],["Duration The length of the audio in seconds. ",1036],["CPU Usage Profiler module",1037],["The CPU Usage Profiler module contains a chart that displays where time is spent in your application. It provides an overview of all the significant areas where your application spends time, such as on rendering, its scripts, and animation. This section of the documentation covers:",1037],["",1037],["Chart categories",1037],["The CPU Usage Profiler module’s chart tracks the time spent on the application’s main thread. The timings are divided into nine categories. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display.",1037],["Category Description ",1037],["",1037],["Rendering How much time your application spends on rendering graphics. ",1037],["Scripts How much time your application spends on running scripts. ",1037],["Physics How much time your application spends on the physics engine. ",1037],["Animation How much time your application spends on animating Skinned Mesh Renderers, GameObjects and other components in your application. This also includes the time spent on calculations for systems the Animation and Animator components use. ",1037],["GarbageCollector How much time your application spends on running the Garbage Collector. ",1037],["VSync How much time your application spends per frame waiting for the targetFrameRate or the next VBlank to sync with. This is according to the QualitySettings.vSyncCount value, the target framerate, or the VSync setting that is the default or enforced maximum of the platform your application is running on. For more information about VSync, see the section in this documentation on Rendering and VSync samples. ",1037],["Global Illumination How much time your application spends on lighting. ",1037],["UI How much time your application spends on displaying its UI. ",1037],["Others How much time your application spends on code that does not fall into any of the other categories. This includes areas like the entire EditorLoop, or the Profiling overhead when you profile Play Mode in the Editor. ",1037],["",1037],["Module details pane",1037],["When you select the CPU Usage module, the details pane below it displays a breakdown of where the application spent time in the selected frame. You can display the timing data as either a timeline or a hierarchical table. To change the display, use the top-left dropdown in the details pane (set to Timeline by default). The three views available are:",1037],["View Function ",1037],["",1037],["Timeline Displays a breakdown of the timings for a particular frame, alongside a time axis of the frame’s length. This is the only view mode that you can use to see timings on all threads at once and at the times within the frame at which they happened, so that you can correlate timings across threads (for example, Job System worker threads starting up after a system on the main thread schedules them). ",1037],["Hierarchy Groups the timing data by its internal hierarchical structure. This option displays the elements that your application called in a descending list format, ordered by the time spent by default. You can also order the information by the amount of scripting memory allocated (GC Alloc), or the number of calls. To change the column that orders the table, click the table column’s header. ",1037],["Raw Hierarchy Displays the timing data in a hierarchical structure that is similar to the call stacks where the timing occurred. Unity lists each call stack separately in this mode instead of merging them, as it does in Hierarchy view. ",1037],["",1037],["Live setting",1037],["The Live setting, which is available in each of the views, displays the information about the current or selected frame in the module details pane when you start recording new data in Playmode or the Editor. To enable this, click the Live button next to the module details dropdown. By default, this setting is disabled, and the module details pane is blank when you record data. Note: This setting increases the overhead of the EditorLoop when the Profiler window is repainted.",1037],["",1037],["Show Full Scripting Method Names setting",1037],["Additionally, in each view, you can select the More Items menu (⋮) and enable Show Full Scripting Method Names, which then displays the fully qualified names for all scripting methods (Assembly::Class::MethodName).",1037],["![A: Scripting methods in the Hierarchy view and Timeline view without Show Full Scripting Method Names enabled",1037],["B:** Scripting methods in the Hierarchy view and Timeline view with Show Full Scripting Method Names enabled](../uploads/Main/profiler-cpu-full-scripting-methods.png)",1037],["",1037],["Timeline view",1037],["The Timeline view is the default view for the CPU Usage Profiler module. It contains an overview of where time is spent in your application and how the timings relate to each other.",1037],["The Timeline view displays profiling data from all threads in their own subsections and along the same time axis, unlike the Hierarchy views. The Hierarchy views only display profiling data one thread at a time, defaulting to the main thread. Also, these views only show a sample’s duration, whereas the Timeline view shows at which times each sample occurred.",1037],["You can use the Timeline view to see how activities on the different threads correlate to each other in their parallel execution. You can see how much or little you are using the different threads, such as the Job System’s worker threads, how work on the threads are queued up, and if any thread is idling (Idle sample) or waiting for another thread or a Job to finish (Wait for x sample).",1037],["Navigating and selecting items",1037],["To zoom in on areas of the time axis, use the scroll wheel on your mouse, or press and hold the Alt key while you drag with the right mouse button pressed down. You can also use the ends of the horizontal scrollbar to zoom in. Press the A key on your keyboard to reset the zoom so that the entire frame time is visible.",1037],["Whenever you see a white arrow on the bottom of a thread, you can click it to unfold the thread to show all lines, or click again to show only the top ones. You can also drag the line that separates the threads to readjust how many lines you can see. Double-clicking the line sets the height of the thread’s section to the maximum depth of the call stack. To pan the view, press the middle mouse button, or hold the Alt key (Command key on macOS) and press the left mouse button.",1037],["To collapse and expand groups of threads, click on the foldout arrows next to the thread names on the far left of the view.",1037],["To see an item’s contribution to the CPU chart, select it in the lower pane. The Profiler highlights its contribution, and dims the rest of the chart. To deselect the item, click elsewhere in the view. Press the F key to focus the current sample you selected, or to show the default zoom level if you’ve selected nothing.",1037],["In the image above, the tooltip on the selected sample provides further details, such as the number of instances and the total time of this sample across all threads. You can select the text within the tooltip and copy it as well as use the buttons to interact with the sample further:",1037],["Operation Description ",1037],["",1037],["Copy Copy the call stack and the entire content of the tooltip to your clipboard. ",1037],["Show Select this dropdown to choose from the following options: ",1037],["Hierarchy Switch to this sample in Hierarchy view ",1037],["Raw Hierarchy Switch to this sample in Raw Hierarchy view ",1037],["Full Details for Call Stacks Unity records call stacks as a list of method pointer addresses, which it uses to display the method name, file path, and line number of the stack. Whenever only the pointer address is present, Unity ignores it to conserve screen space for the actionable items that have further information available. Enable this property to see the full list of method pointer addresses of the call stack. ",1037],["Selected Sample Stack View the details of the sample stack. Unity opens this information in a separate window. You can then copy the sample stack information to your clipboard.The sample stack differs from a method’s call stack because Unity does not tie every sample to a specific method, nor does it record every call as a sample. If you select a sample in a different frame and there isn’t a sample with the same sample stack in the displayed frame, this window shows both the sample stack of the original selection, as well as the approximate selection for this frame. ",1037],["GC.Alloc samples appear colored in red-magenta, and show you the size of the allocation.",1037],["To show managed call stacks in the tooltip, navigate to the Profiler window’s toolbar, and select the Call Stacks button. You must enable this property before you profile a frame to display the call stack for a frame. For more information, see the section on call stacks.",1037],["",1037],["Flow Events",1037],["To help you visualize how Unity schedules jobs across threads, you can use the Flow Events setting. This setting displays the relationship between systems, jobs and threads. To enable this setting, select the More menu (⋮) in the top right of the Timeline view pane, and then select Show Flow Events.",1037],["When you enable this setting, the Profiler adds white event markers to the Profiler samples that schedule jobs, or wait on scheduled jobs to complete. It also darkens unrelated samples so that you can more easily visualize the sample you select.",1037],["There are three types of arrows the Profiler adds to the samples:",1037],["Down arrow: Indicates the beginning of a flow, and that this sample scheduled some work.",1037],["Right arrow: Indicates the next item in a flow, and that a different sample scheduled this.",1037],["Up arrow: Indicates the end of a flow, and that the work ended or synchronized on this sample.",1037],["When you select a sample, the Profiler connects the relevant flow event markers together with lines. A thicker line highlights the particular flow line you select. For example, if a begin sample points to two other next samples, when you click one of the next samples, the Profiler draws a thicker line to it.",1037],["This view is useful to discover the flow of execution of your code, what work was being waited on to complete, and helps you uncover the dependencies of your code in a visual way.",1037],["",1037],["Hierarchy and Raw Hierarchy view",1037],["When you switch to the Hierarchy or Raw Hierarchy view, your selection carries over, as long as the sample is on the main thread. If you cannot immediately find your selection, press the F key to focus it.",1037],["The Hierarchy view lists all samples you have profiled and groups them together by their shared call stack and the hierarchy of ProfilerMarkers. The Raw Hierarchy view does not group samples together, which makes it ideal for looking into samples on a granular level. You can also use the Thread dropdown to select a specific thread, like the Main Thread or Render Thread to inspect in these views.",1037],["By default, all EditorOnly samples are collapsed in these views. EditorOnly samples are samples in the Player Loop that only happen because of Editor-only safety checks. When the samples are collapsed, their GC.Alloc value does not contribute to the GC.Alloc value of their enclosing sample. To display these samples, select the More Items menu (⋮) in the top right of the details pane, and then disable the Collapse EditorOnly Samples setting. For more information, see the Editor only samples section of this documentation.",1037],["Both views display the following detailed information for each item in the Hierarchy, next to each row:",1037],["Property Function ",1037],["",1037],["Total The total amount of time Unity spent on a particular function, as a percentage. ",1037],["Self The total amount of time Unity spent on a particular function as a percentage, excluding the time Unity spends calling sub-functions. For example, in the screenshot, 16.7% of time is spent in the Camera.Render function. This is because it calls a lot of drawing and culling functions. However, when you exclude the functions it calls, only 0.2% of time is spent on the Camera.Render function itself. ",1037],["Calls The number of calls made to this function in this frame. In the Raw Hierarchy view the values in this column are always 1 because the Profiler does not merge the hierarchy of samples. ",1037],["GC Alloc How much scripting heap memory Unity has allocated in the current frame. The garbage collector manages the scripting heap memory. Whenever Unity calls GC.Collect() or there is a scripting heap allocation that does not fit within the heap’s current size, the garbage collector triggers. It marks all allocations that have no more references to them and collects them. This process appears as GC.Collect samples in the Profiler. Unity runs the garbage collector more frequently as your application allocates more on the heap. As the managed heap grows, it takes Unity longer to mark and collect the memory. As such, you should keep the GC Alloc value at zero while your application runs, to prevent the garbage collector from affecting your application's framerate, and to keep the overall heap size small. For more details about the managed heap see the documentation on Understanding Automatic Memory Management. ",1037],["Time ms The total amount of time Unity spent on a particular function, in milliseconds. If your application uses the Job System or multithreaded rendering, this information might be misleading, because it only contains the time Unity spent on the currently selected thread. To change the thread, select the Thread dropdown at the top of the Hierarchy pane. ",1037],["Self ms The total amount of time Unity spent on a particular function, in milliseconds, excluding the time Unity spends calling sub-functions. ",1037],["Warning Indicated by a warning icon, this displays how many times the application has triggered a warning during the current frame. For more information, see the Performance warnings section of this documentation. ",1037],["To get more information about where your application calls and uses the profiled functions, select the Details dropdown at the top right hand corner of the module details pane and choose either Related Data or Calls view.",1037],["The Related Data view displays a list of UnityEngine.Objects that use a Begin() overload and are associated with the Profiler sample. Some samples that Unity reports have these associations built in, such as Camera.Render samples that are linked to the Camera GameObject that does the rendering. Unity reports these objects via their instance ID and resolves them to a name in the Profiler window, if you profile in the Editor.",1037],["When you click on one of these objects, Unity tries to find the object via the Scene hierarchy and ping it. Because the association uses the instance ID, pinging only works when you profile your application in the Editor, and for as long as the object still exists.",1037],["For GC.Alloc samples, this view displays a list of N/A items, one for each allocation that happened at this hierarchy level, with the size of the allocation listed in the GC.Alloc column. If you profile your application with the Call Stacks setting enabled, when you select a GC.Alloc sample in this view, the Profiler window displays the call stack for the allocated scripting object you select, even if you did not enable the Deep Profiling setting. For more information, see the Allocation call stacks section of this documentation.",1037],["The Calls view displays where the selected sample is being called from as well as what other functions it calls to.",1037],["",1037],["Call stacks",1037],["ProfilerMarkers emit a set of samples which the Profiler uses to display and organize profiling information into different chronological and hierarchical views. Any sample displayed in the Profiler window is therefore part of a sample stack.",1037],["A sample stack differs from a method’s call stack because Unity does not tie every sample to a specific method, nor does it record every call as a sample. Deep Profiling adds a ProfilerMarker to every function call, but it does not add any for native code, plus recording all of these samples comes with a potentially high overhead.",1037],["You can enable the full call stacks for samples that GC.Alloc, UnsafeUtility.Malloc, JobHandle.Complete emit. This is useful if you want to track down where these samples happened, without enabling Deep Profiling and encountering its high overhead. For more information about these markers, see the documentation on Common Profiler Markers.",1037],["To enable full call stacks for these samples, navigate to the toolbar of the Profiler window and enable the Call Stacks button. By default, this enables the call stacks for GC.Alloc samples. To enable other call stacks, select the dropdown arrow and enable any of the other markers you would like to see the call stacks for.",1037],["You can use this functionality whether you profile in the Editor or on a running player. This only takes effect for the frames you profile after you turn this option on.",1037],["For example, every scripting heap allocation shows up as a GC.Alloc sample in both the Hierarchy view and Timeline view. In the Timeline view, it is colored bright magenta. To see a call stack, select the CPU Profiler module and then select a GC.Alloc sample in Timeline view. The call stack appears in the selection highlight.",1037],["To copy the call stack, select the Copy button in the tooltip. You can also open the relevant code file from this view if the file path is highlighted as a blue link. Click on the link and the file opens in your default IDE. Note: The call stack information does not contain the exact line number within that method but just the line at the beginning of that method.",1037],["You can also use the Show dropdown to see the GC.Alloc’s sample stack, its full details, or switch to view it in the Hierarchy or Raw Hierarchy view.",1037],["To see the full call stack details, while in the Hierarchy or Raw Hierarchy view, set the Details view to Related Data. This view lists the metadata associated with this sample, which might include a UnityEngine.Object that it was associated with. For any metadata entry that is not associated with a UnityEngine.Object, the name shows up as N/A in this panel. When you select an N/A entry, the Profiler displays the meta data, including the call stack in the bottom half of the details view.",1037],["For more information about managed allocations, see documentation on Understanding Automatic Memory Management.",1037],["",1037],["Common markers",1037],["Unity's code is instrumented with a large number of Profiler markers that give you insight into what is taking up time in your application. For a full list of the most common markers you might see in your profiling data, see the documentation on Common Profiler markers.",1037],["Global Illumination Profiler module",1038],["The Global Illumination Profiler module displays statistics about how much CPU time the Enlighten Realtime Global Illumination subsystem uses across all worker threads. There is an option to control the number of Enlighten worker threads included in Command Line Arguments.",1038],["Chart categories",1038],["The Global Illumination Profiler module’s chart tracks the time the global illumination subsystem spent on all worker threads. The timings are divided into 10 categories. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display.",1038],["Chart Description ",1038],["",1038],["Light Probe The time spent updating Light Probes. ",1038],["Setup The time spent in the Setup stage. ",1038],["Environment The time spent processing Environment lighting. ",1038],["Input Lighting The time spent processing input lighting. ",1038],["Systems The time spent updating Systems. ",1038],["Solve Tasks The time spent running radiosity solver tasks. ",1038],["Dynamic Objects Time spent updating Dynamic GameObjects. ",1038],["Other Commands Time spent updating other commands. ",1038],["Block Command Write Time spent in a blocked state, waiting for the command buffer. ",1038],["Module details pane",1038],["When you select the Global Illumination module, the details pane below it displays a breakdown of where the application spent time in the selected frame. The data available is as follows:",1038],["Data Description ",1038],["",1038],["Total CPU Time Total Enlighten Global Illumination CPU time across all threads in ms. ",1038],["Probe Update Time Time spent updating Light Probes in ms. ",1038],["Setup Time Time spent in the Setup stage in ms. ",1038],["Environment Time Time spent processing Environment lighting in ms. ",1038],["Input Lighting Time Time spent processing input lighting in ms. ",1038],["Systems Time Time spent updating Systems in ms. ",1038],["Solve Tasks Time Time spent running radiosity solver tasks in ms. ",1038],["Dynamic Objects Time Time spent updating Dynamic GameObjects in ms. ",1038],["Time Between Updates Time between Global Illumination updates in ms. ",1038],["Other Commands Time Time spent processing other commands in ms. ",1038],["Blocked Command Write Time Time spent in blocked state, waiting for command buffer in ms. ",1038],["Blocked Buffer Writes Number of writes to the command buffer that were blocking. ",1038],["Total Light Probes Total number of Light Probes in the Scene. ",1038],["Solved Light Probes Number of solved Light Probes since the last update. ",1038],["Probe Sets Number of Light Probe sets in the Scene. ",1038],["Systems Number of Enlighten Global Illumination Systems in the Scene. ",1038],["Pending Material GPU Renders Number of Albedo/Emission renders queued for rendering on the GPU. ",1038],["Pending Material Updates Number of Material updates waiting to get processed. ",1038],["GPU Usage Profiler module",1039],["The GPU Usage Profiler module displays where your application spends time in the GPU. You can only use the GPU Profiler in Playmode, or for builds of your application. You cannot use it to profile the Editor.",1039],["Note:** If you have Graphics Jobs enabled in the Player Settings, GPU profiling isn't supported. For more information, see the documentation on Player Settings. Additionally, on macOS, you can profile the GPU only on Mavericks 10.9 and later.",1039],["GPU profiling support",1039],["The following table lists the platforms that the GPU Usage Profiler module supports:",1039],["Platform Graphics API Status ",1039],["",1039],["Windows DirectX 11, DirectX 12, OpenGL Supported ",1039],["Vulkan Not supported ",1039],["macOS OpenGL Supported. Note: Apple has deprecated support of OpenGL. ",1039],["Metal Not supported. Use XCode’s GPU Frame Debugger UI instead. ",1039],["Linux OpenGL core Supported ",1039],["Vulkan Not supported ",1039],["WebGL All WebGL Not supported ",1039],["Android OpenGL Supported on devices running NVIDIA or Intel GPUs. ",1039],["Vulkan Not supported ",1039],["iOS, tvOS Metal Not supported. Use XCode’s GPU Frame Debugger UI instead. ",1039],["Tizen OpenGL Not supported. ",1039],["On Windows, Unity supports Playmode profiling in the Editor with Direct3D 11 and Direct3D 12 APIs only. This is convenient for quick profiling, because it means you don’t need to build the Player; however, the overhead of running the Unity Editor affects the Profiler, which might make the profiling results less accurate.",1039],["Chart categories",1039],["The GPU Usage Profiler module’s chart has several different categories that you can use to investigate GPU timings. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display.",1039],["Chart category Description ",1039],["",1039],["Opaque Built-in rendering pipeline's time to render opaque objects ",1039],["Transparent Built-in rendering pipeline's time to render transparent objects ",1039],["Shadows/Depth Built-in rendering pipeline's time to render shadow maps ",1039],["Deferred Lighting Built-in deferred rendering pipeline's time to do lighting. ",1039],["PostProcess Built-in rendering pipeline's time to process post processing effects. ",1039],["Other Rendering time to process other things such as Scriptable Rendering Pipelines ",1039],["Module details pane",1039],["When you select the GPU Usage module, the details pane below it displays a breakdown of where the application spent time in the selected frame. You can display the timing data as a hierarchical table. To change the table views, use the top-left dropdown in the details pane (set to Hierarchy by default). The views available are:",1039],["View Function ",1039],["",1039],["Hierarchy Groups the timing data by its internal hierarchical structure. This option displays the elements that your application called in a descending list format, ordered by the time spent by default. You can also order the information by the total amount of GPU time, or the number of calls. To change the column that orders the table, click the table column’s header.",1039],["Raw Hierarchy Displays the timing data in a hierarchical structure that is similar to the call stacks where the timing occurred. Unity lists each call stack separately in this mode instead of merging them, as it does in Hierarchy view. ",1039],["When you select the GPU Usage Profiler module, the lower pane of the Profiler displays hierarchical time data for the selected frame. Select an item from the Hierarchy to see a breakdown of contributions in the right-hand panel. See documentation on the Profiler window to learn more about the Profiler window’s functionality.",1039],["The table views have the following columns:",1039],["Column Function ",1039],["",1039],["Total The total amount of time Unity spent on a particular function, as a percentage. ",1039],["DrawCalls The number of calls made to this function in this frame. ",1039],["GPU ms The total amount of time Unity spent on a particular function, in milliseconds. ",1039],["Memory Profiler module",1040],["There are two ways of analyzing memory usage in your application in Unity:",1040],["Memory Profiler module: A built-in Profiler module that gives you basic information on where your application uses memory.",1040],["Memory Profiler package: A Unity package that you can add to your project. It adds an additional Memory Profiler window to the Unity Editor, which you can then use to analyze memory usage in your application in even more detail. You can store and compare snapshots to find memory leaks, or see the memory layout to find memory fragmentation issues.",1040],["This page covers information on the built-in Memory Profiler module. For more information on the Memory profiler package, see the Memory Profiler documentation.",1040],["The Memory Profiler module visualizes counters that represent the total allocated memory in your application. You can use the memory module to see information like the number of loaded objects, and the memory that they take in total per category. You can also see the number of GC allocations per Profiler frame.",1040],["Memory profiling in the Editor",1040],["When you profile your application in the Editor, the Memory Profiler module reports higher data use than a similar profile of the application built on a target device would. This is because the Unity Editor uses specific objects that take up memory, and the Editor window itself uses extra memory.",1040],["Part of the extra memory use is because Unity treats objects like textures as read/write enabled in the Editor and keeps an extra copy of each texture on the CPU. This effectively doubles the reported memory use of textures in the Editor; for a more accurate idea of memory use by textures, profile a built version of your application running on the target platform.",1040],["Also, because Unity can't cleanly separate the memory that the Profiler itself takes up from the Play mode’s memory, memory that the Profiler uses is displayed in the Profiler window. To remind you of this, a warning displays at the top of the Memory Profiler module details pane whenever you have the Profiler target set to Play Mode or Editor. For more precise numbers and memory usage for your application, you should profile your application on the target device and operating system you intend it to run on. For more information, see the documentation on Profiling your application.",1040],["Chart categories",1040],["The Memory Profiler module is divided into categories that display detailed information on where your application spends memory. You can also click a category’s colored legend to toggle its display.",1040],["Category Description ",1040],["",1040],["Total Allocated The total memory your application has used. ",1040],["Texture Memory How much memory the Textures in your application have used. ",1040],["Mesh Memory How much memory the Meshes in your application have used. ",1040],["Material Count The number of Material instances in your application. ",1040],["Object Count The number of native object instances in your application. ",1040],["GC Used Memory The amount of memory the GC heap has used. ",1040],["GC Allocated in Frame The amount of memory allocated per frame on the GC heap. ",1040],["Module details pane",1040],["There are two views available in the module details pane, located at the bottom of the Profiler window:",1040],["Simple:** Displays a high level overview of the memory statistics per frame",1040],["Detailed:** Captures a memory snapshot which contains more details on the memory that native objects used, including native references to them, and Unity's different subsystems.",1040],["To change the view, select it from the dropdown in the top left of the module details pane.",1040],["Simple view",1040],["The Simple view displays an overview of how Unity uses memory in real-time on a per-frame basis. It breaks down the total memory that your application uses into a few major categories. The Total value is based on the System Used Memory Profiler counter, which indicates how much memory the operating system (OS) reports as being in use by your application.",1040],["Unity sets some memory pools aside for allocations to avoid asking the operating system for memory too often. The Profiler module displays how much memory Unity reserves, and how much memory Unity used at the time of the Profiler capture.",1040],["The Simple view displays the data collected within the System Used Memory Profiler counter. This indicates how much memory the operating system (OS) reports as being in use by the app and corresponds to the Total value of the Total Committed Memory bar and the Total Memory Breakdown bar.",1040],["On platforms that support getting the total memory size of the application from the operating system, the System Memory Usage is over 0 and is the same size in a task manager.",1040],["The following reference table describes the statistics available in the Simple view, plus its corresponding profiler counter, and availability in Release builds. This information is also available via the ProfilerRecorder API and in the Profiler Module Editor so you can add them to a custom Profiler module.",1040],["",1040],["Property Description Corresponding Profiler counter Available in Release Players? ",1040],["",1040],["Normalized Enable this setting to scale the Total Committed Memory and Total Memory Breakdown charts to the memory usage of the selected frame. If you disable this setting, the charts scale to the total used memory within the frame range. This setting can help you see how the total or relative amounts of memory change from frame to frame N/A N/A ",1040],["Total Committed Memory The length of the Total Committed Memory bar indicates the total amount of memory that Unity’s Memory Manager system tracked, how much of that it used, and how much memory isn't tracked through this system. System Used Memory Yes ",1040],["Tracked Memory (in use / Reserved) Indicates the total amount of memory that Unity uses and tracks (in use), and the amount of memory that Unity reserves for tracking purposes and pool allocations (Reserved). Total Used Memory Total Reserved Memory Yes ",1040],["Untracked Memory Indicates the total amount of memory that Unity used but isn't aware of. Some examples of untracked memory are: - Memory allocated through native plug-ins or some drivers - Mono or IL2CPP type metadata - Memory that executable code and DLLs use The Memory Profiler package and native platform providers might have more information on some of these untracked memory amounts. N/A N/A ",1040],["Total Memory Breakdown Displays the same total amount as the Total Committed Memory bar but breaks it into some high level categories, based on which subsystems Unity allocated the memory for. Not all memory systems use pools or differentiate between used and reserved memory. Those that do display two numbers, the used and the reserved amount of memory. If the used amount doesn't share the same unit (B, MB, GB) as the reserved amount, Unity displays the unit, otherwise it's omitted. System Used Memory Yes ",1040],["Managed Heap (in use / Reserved) The used heap size and total heap size that managed code uses. This memory is garbage collected. GC Used Memory GC Reserved Memory Yes ",1040],["Graphics & Graphics Driver The estimated amount of memory the driver uses on Textures, render targets, Shaders, and Mesh data. Gfx Used MemoryGfx Reserved Memory No ",1040],["Audio The Audio system’s estimated memory usage. Audio Used MemoryAudio Reserved Memory Yes ",1040],["Video The Video system’s estimated memory usage. Video Used MemoryVideo Reserved Memory Yes ",1040],["Other Displays native memory that Unity tracks, but isn't reported under a specific counter. To get more information on the makeup of this or the other categories, take a snapshot in the Detailed view or with the Memory Profiler package. Important: The Other category doesn't directly map to the Other group in the Detailed view. In this view, Other contains the remainder of the native memory that was not used for the GPU side of graphics memory, the Profiler, Audio, or Video memory. N/A N/A ",1040],["Profiler The memory that the Profiler functionality uses and reserves from the system. Profiler Used MemoryProfiler Reserved Memory Yes ",1040],["Objects stats Displays the amount of object instances of the types of Assets that commonly take up a high percentage of the memory (Textures, Meshes, Materials, Animation Clips), together with their accumulated sizes in memory (Assets, GameObjects, Scene Objects). Note: Texture and Mesh memory doesn't map directly to the Graphics & Graphics Driver stat in the Total Memory Breakdown view. This is because some of that memory might also fall into the Other category of the Total Memory Breakdown bar. Object Count No ",1040],["Textures The total count of loaded textures and memory they use. Texture CountTexture Memory No ",1040],["Meshes The total count of loaded meshes and memory they use. Mesh CountMesh Memory No ",1040],["Materials The total count of loaded materials and memory they use. Material CountMaterial Memory No ",1040],["Animation Clips The total count of loaded AnimationClips and memory they use. AnimationClip CountAnimationClip Memory No ",1040],["Assets The total number of loaded assets. Asset Count No ",1040],["Game Objects The total number of GameObject instances in the scene. GameObject Count No ",1040],["Scene Objects The total number of dynamic UnityEngine.Objects. This number includes the GameObject Count, plus the total number of components, and everything which isn't an asset in the scene. Scene Object Count No ",1040],["GC allocated in frame Displays the amount of managed allocations in the selected frame, and their total size in bytes. GC Allocation In Frame CountGC Allocated In Frame No ",1040],["Availability in Players",1040],["You can use the ProfilerRecorder API to access the Memory Profiler module’s counters in Players. The following example contains a simple script that collects Total Reserved Memory, GC Reserved Memory and System Used Memory metrics, and displays those as a GUI.TextArea. The Memory Profiler module information belongs to the ProfilerCategory.Memory Profiler category.",1040],["```language-csharp",1040],["using System.Text;",1040],["using Unity.Profiling;",1040],["using UnityEngine;",1040],["public class MemoryStatsScript : MonoBehaviour",1040],["string statsText;",1040],["ProfilerRecorder totalReservedMemoryRecorder;",1040],["ProfilerRecorder gcReservedMemoryRecorder;",1040],["ProfilerRecorder systemUsedMemoryRecorder;",1040],["void OnEnable()",1040],["totalReservedMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, \"Total Reserved Memory\");",1040],["gcReservedMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, \"GC Reserved Memory\");",1040],["systemUsedMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, \"System Used Memory\");",1040],["void OnDisable()",1040],["totalReservedMemoryRecorder.Dispose();",1040],["gcReservedMemoryRecorder.Dispose();",1040],["systemUsedMemoryRecorder.Dispose();",1040],["void Update()",1040],["var sb = new StringBuilder(500);",1040],["if (totalReservedMemoryRecorder.Valid)",1040],["sb.AppendLine($\"Total Reserved Memory: {totalReservedMemoryRecorder.LastValue}\");",1040],["if (gcReservedMemoryRecorder.Valid)",1040],["sb.AppendLine($\"GC Reserved Memory: {gcReservedMemoryRecorder.LastValue}\");",1040],["if (systemUsedMemoryRecorder.Valid)",1040],["sb.AppendLine($\"System Used Memory: {systemUsedMemoryRecorder.LastValue}\");",1040],["statsText = sb.ToString();",1040],["void OnGUI()",1040],["GUI.TextArea(new Rect(10, 30, 250, 50), statsText);",1040],["The following screenshot shows the result of adding the script to the Tanks! tutorial project.",1040],["This information is available in Release Players, as are the other high level counters in the table above. If you want to see the selected memory counters in a custom module in the Profiler window, use the Module Editor to configure the chart.",1040],["",1040],["Detailed view",1040],["The Detailed view provides a snapshot of your application’s current state. Select the Take Sample button to capture detailed memory usage for the current target. It takes the Profiler time to get this data, so the Detailed view doesn't give you real-time details. After the Profiler takes a sample, the Profiler window displays a list view where you can explore your application’s memory usage in more detail.",1040],["Enable the Gather Object References setting at the top of the module details pane to collect information about what's referencing an object at the time of the snapshot. The Profiler displays this information in the right-hand pane of the window.",1040],["The list view divides objects that use memory into the following categories:",1040],["Other:** Objects that are neither Assets, GameObjects, or components. This includes information such as the memory Unity uses for different systems.",1040],["Not Saved:** Objects marked as DontSave",1040],["Builtin Resources:** Unity Editor resources or Unity default resources, such as Shaders you have added to the Always Included Shaders list of the Graphics settings.",1040],["Assets:** Assets referenced from user or native code.",1040],["Scene Memory:** Objects and attached components.",1040],["When you click on a GameObject in the Assets or Scene Memory list, Unity highlights it in the Project or Scene view.",1040],["Note:** In the Other category, memory reported under System.ExecutableAndDlls is read-only memory. The operating system might discard these pages as needed and later reload them from the file system. This generates lower memory usage, and doesn't directly contribute to the operating system’s decision to close your application if it uses too much memory. Some of these pages might also be shared with other applications that are using the same frameworks.",1040],["Physics Profiler module",1041],["The Physics Profiler module displays information about the physics that the physics system has processed in your project’s scene. This information can help you diagnose and resolve performance issues or unexpected discrepancies related to the physics in your project’s scene. You can also use the Physics Debug Visualization to further debug and understand issues with physics in your application.",1041],["Chart categories",1041],["The Physics Profiler module’s chart tracks the time your application spends on physics. The timings are divided into different chart categories. To change the order of the categories in the chart, you can drag them in the chart’s legend. You can also click a category’s colored legend to toggle its display. When you click on the chart, you can see the exact numerical values of each chart category in the module details pane below the chart.",1041],["Chart Function ",1041],["",1041],["Physics Used Memory The total amount of memory that the physics module has used ",1041],["Active Dynamic Bodies The number of Rigidbody components and ArticulationBody components that aren't in a sleep state. ",1041],["Active Kinematic Bodies The number of active Kinematic Rigidbody components. A Kinematic Rigidbody is active when MovePosition or MoveRotation is called in a frame, and remains active in the next frame.Note: Unity might process Kinematic Rigidbody components that have joints attached multiple times per frame, and this contributes to the value displayed. ",1041],["Dynamic Bodies The number of Rigidbody components and ArticulationBody components. ",1041],["Overlaps The number of overlap events. An overlapping event is when colliders overlap with each other. ",1041],["Trigger Overlaps The number of overlap events with trigger colliders (counted in pairs). ",1041],["Discreet Overlaps The number of overlap events which Unity used discrete collision detection to solve. ",1041],["Continuous Overlaps The number of overlap events which Unity used continuous collision detection to solve. ",1041],["Physics Queries The total amount of physics queries, such as Raycasts and shapecasts. ",1041],["Module details pane",1041],["When you click on the Physics Profiler module, the module details pane displays further information about the physics in your project’s scene.",1041],["Statistic Description ",1041],["",1041],["Physics Used Memory The total amount of memory that the physics module has used. ",1041],["Dynamic Bodies The number of Rigidbody components and ArticulationBody components. ",1041],["Articulation Bodies The number of ArticulationBody components in the scene ",1041],["Active Dynamic Bodies The number of Rigidbody components and ArticulationBody components that aren't in a sleep state.. ",1041],["Active Kinematic Bodies The number of active Kinematic Rigidbody components. A Kinematic Rigidbody is active when MovePosition or MoveRotation is called in a frame, and remains active in the next frame.Note: Unity might process Kinematic Rigidbody components that have joints attached multiple times per frame, and this contributes to the value displayed. ",1041],["Static Colliders The number of colliders that don't have a Rigidbody or ArticulationBody component ",1041],["Colliders Synced The amount of colliders synced with Transforms. ",1041],["Rigidbodies Synced The amount of Rigidbody components synced with Transforms. ",1041],["Physics Queries The total amount of physics queries, such as Raycasts and shapecasts. ",1041],["Total Overlaps The number of overlap events. An overlapping event is when colliders overlap with each other. ",1041],["Discreet The number of overlap events which Unity used discrete collision detection to solve. ",1041],["Continuous The number of overlap events which Unity used continuous collision detection to solve. ",1041],["Trigger The number of overlap events with trigger colliders (counted in pairs). ",1041],["Modified The number of overlap events which Unity used the Contact Modification API to modify. ",1041],["Broadphase Adds/Removes The total number of colliders that the broadphase algorithm either added or removed. ",1041],["Narrowphase Touches The total amount of collision events that were either lost or appeared as new since the previous frame. ",1041],["The numbers displayed in the Profiler might not correspond to the exact number of GameObjects with physics components in your Scene. This is because Unity processes some physics components at a different rate depending on which other components affect it (for example, an attached Joint component). To calculate the exact number of GameObjects with specific physics components attached, you must write a custom script with the FindObjectsOfType function.",1041],["The Physics Profiler module doesn't display the number of sleeping Rigidbody components. These are components which don't engage with the physics system, so the Profiler doesn't process them. For more information on sleeping Rigidbody components, see the documentation on Rigidbody.",1041],["Understanding physics performance issues",1041],["The physics simulation runs on a separate fixed frequency update cycle from the main logic’s update loop, and can only advance time via a Time.fixedDeltaTime per call. This is similar to the difference between Update and FixedUpdate. For more information on this, see the documentation on the Time window.",1041],["When a heavy logics or graphics frame takes a long amount of time, the Profiler has to call the physics simulation multiple times per frame. This means that an already resource-intensive frame takes even more time and resources. This might cause the physics simulation to temporarily stop according to the Maximum Allowed Timestep value, which you can set in the Project Settings window (menu: Edit > Project Settings > Time)",1041],["To detect this in your Project, select the CPU Usage Profiler module and check the number of calls for Physics.Processing or Physics.Simulate in the Overview section in the Hierarchy view.",1041],["In this example image, the value of 2 in the Calls column indicates that the physics simulation was called two times over the last logical frame.",1041],["A call count close to 10 might indicate an issue. As a first solution, reduce the frequency of the physics simulation, and if the issue continues, check what might have caused the heavy frame before the physics system had to use a lot of simulation calls to catch up with the game time. Sometimes, a heavy graphics frame might cause more physics simulation calls later on in a Scene.",1041],["For more detailed information about the physics simulation in your Scene, select the search box at the top of the module details pane, search for Physics.Processing, and then select Calls from the dropdown at the top right of the pane. This displays the names of the physics system tasks that run to update your Scene. The two most common names you’re likely to see are:",1041],["Pxs: short for ‘PhysX solver’, which are physics system tasks that joints require as well as resolving contacts for overlapping Rigidbody components.",1041],["ScScene: used for tasks that update the Scene, run the broad phase and narrow phase, and integrate Rigidbody components (moving them in space due to forces and impulses). For more information, see Steven M. LaValle’s work on Planning Algorithms for a definition on two-phase collision detection phases.",1041],["Legacy Physics Profiler module",1041],["You can switch to the Legacy mode to see the older version of the Physics Profiler module, which was the default module in older versions of Unity. To do this, select Legacy from the dropdown menu in the top right of the Physics Profiler module's details pane.",1041],["In this mode, you can load and inspect Profiler data that was saved in an older version of Unity. If you switch to this mode to inspect data captured in a newer version of Unity, then the data displayed is unreliable and inaccurate. You should always use the Current mode to inspect new Physics Profiler data.",1041],["Statistic Description ",1041],["",1041],["Active Dynamic The number of active non-Kinematic Rigidbody components. An active Rigidbody is one that isn’t sleeping. ",1041],["Active Kinematic The number of active Kinematic Rigidbody components. A Kinematic Rigidbody is active when MovePosition or MoveRotation is called in a frame, and remains active in the next frame.Note: Unity might process Kinematic Rigidbody components that have joints attached multiple times per frame, and this contributes to the value displayed. ",1041],["Static Colliders The number of Collider components on GameObjects that don’t have Rigidbody components attached to the GameObjects or their parent GameObjects.Collider components on GameObjects or parent GameObjects that have Rigidbody components do not count as Static Colliders. These are called Compound Colliders. Compound Colliders arrange multiple Colliders of a body in a convenient way, rather than having all of the Colliders on the same GameObject as the Rigidbody component. ",1041],["Rigidbody The number of Rigidbody components processed by the physics system, irrespective of the components’ sleeping state. ",1041],["Trigger Overlaps The number of overlapping triggers (counted in pairs). ",1041],["Active Constraints The number of primitive constraints the physics system has processed. Constraints are used as a building block of Joints as well as collision response. For example, restricting a linear or rotational degree of freedom of a ConfigurableJoint involves a primitive constraint per each restriction. ",1041],["Contacts The total number of contact pairs between all Colliders in the Scene, including the amount of trigger overlap pairs. A contact is a pair of Colliders that either touch or overlap. Note: Unity creates contact pairs per Collider pair once the distance between them is below a certain user configurable limit. As such, you might see contacts generated for Rigidbody components that are not yet touching or overlapping. See documentation on Collider.contactOffset and ContactPoint.separation for more details. ",1041],["Rendering Profiler module",1042],["The Rendering Profiler displays rendering statistics and information about what the CPU and GPU do to render the Scene. You can use these statistics to measure the resource intensity of different areas of the Scene, which is useful for optimization.",1042],["The chart displays the number of Batches, SetPass Calls, Triangles and Vertices your application rendered. The lower pane displays more rendering statistics, which match the ones shown in the GameView Rendering Statistics window.",1042],["The Rendering Profiler module’s chart is divided into four categories as follows:",1042],["Chart Description ",1042],["",1042],["Batches Count The number of batches Unity processed during a frame. ",1042],["SetPass Calls Count The number of times Unity switched which shader pass it used to render GameObjects during a frame. A shader might contain several shader passes and each pass renders GameObjects in the scene differently. ",1042],["Triangles Count The number of triangles Unity processed during a frame. ",1042],["Vertices Count The number of vertices Unity processed during a frame. ",1042],["",1042],["Module details pane",1042],["When you click on the Rendering Profiler module, the details pane in the lower half of the window displays detailed rendering statistics. These statistics are similar to the statistics shown in the Rendering Statistics window.",1042],["In the top left of the details pane, select Open Frame Debugger to open the Frame Debugger, which gives you information on individual drawcalls that rendered the frame.",1042],["These statistics are also available via the ProfilerRecorder API and in the Profiler Module Editor so you can add them to a custom Profiler module.",1042],["Statistic Description Accessible in Release Players ",1042],["",1042],["SetPass Calls Count The number of times Unity switched which shader pass it used to render GameObjects during a frame. A shader might contain several shader passes and each pass renders GameObjects in the scene differently. Yes ",1042],["Draw Calls Count The total number of draw calls Unity issued during a frame. Unity issues draw calls when it renders GameObjects to the screen. This number includes non batched draw calls as well as dynamic and static batched draw calls. Yes ",1042],["Total Batches Count The total number of batches Unity processed during a frame. This number includes both static and dynamic batches. Yes ",1042],["Triangles Count The number of triangles Unity processed during a frame. Yes ",1042],["Vertices Count The number of vertices Unity processed during the frame. Yes ",1042],["(Dynamic Batching) This section contains statistics on dynamic batching. No ",1042],["Dynamic Batched Draw Calls Count The number of draw calls Unity combined into dynamic batches. No ",1042],["Dynamic Batches Count The number of dynamic batches Unity processed during the frame. No ",1042],["Dynamic Batched Triangles Count The number of triangles in the GameObjects included in the dynamic batches. No ",1042],["Dynamic Batched Vertices Count The number of vertices in the GameObjects included in the dynamic batches. No ",1042],["Dynamic Batching Time The time Unity spent creating dynamic batching structures. No ",1042],["(Static Batching) This section contains statistics on static batching. No ",1042],["Static Batched Draw Calls Count The number of draw calls Unity combined into static batches. No ",1042],["Static Batches Count The number of static batches Unity processed during a frame. No ",1042],["Static Batched Triangles Count The number of triangles in the GameObjects included in the static batches. No ",1042],["Static Batched Vertices Count The number of vertices in the GameObjects included in the static batches. No ",1042],["(Instancing) This section contains statistics on GPU instancing. No ",1042],["Instanced Batched Draw Calls Count The number of draw calls Unity combined into instance batches. No ",1042],["Instanced Batches Count The number of batches Unity processed to render instanced GameObjects during a frame. No ",1042],["Instanced Batched Triangles Count The number of triangles in the instanced GameObjects. No ",1042],["Instanced Batched Vertices Count The number of vertices in the instanced GameObjects. No ",1042],["Used Textures CountUsed Textures Bytes The number of textures Unity used during the frame and the amount of memory the textures used. No ",1042],["Render Textures CountRender Textures Bytes The number of RenderTextures Unity used during the frame and the amount of memory the RenderTextures used. Yes ",1042],["Render Textures Changes Count The number of times Unity set one or multiple RenderTextures as render targets during the frame. Yes ",1042],["Used Buffers CountUsed Buffers Bytes The total number of GPU buffers and memory they used. This includes vertex, index and compute buffers and all internal buffers required for rendering. Yes ",1042],["Vertex Buffer Upload In Frame CountVertex Buffer Upload In Frame Bytes The amount of geometry that the CPU uploaded to the GPU in the frame. This represents the vertex/normal/texcoord data. There might already be some geometry on the GPU. This statistic only includes geometry that Unity transfers in a frame. Yes ",1042],["Index Buffer Upload In Frame CountIndex Buffer Upload In Frame Bytes The amount of geometry that the CPU uploaded to the GPU in the frame. This represents the triangle indices data. There might already be some geometry on the GPU. This statistic only includes geometry that Unity transfers in a frame. Yes ",1042],["Shadow Casters Count The number of GameObjects that cast shadows in a frame. If a GameObject casts multiple shadows (because multiple lights light it), it has one entry per shadow it casts. Yes ",1042],["Availability in Players",1042],["The Rendering module Profiler counters are also available in Players. Use the ProfilerRecorder API to access Render Profiler module information in Players. High level counters are also available in Release Player.",1042],["The following example contains a simple script that collects “SetPass Calls Count”, “Draw Calls Count” and “Vertices Count” metrics and displays those as TextArea.",1042],["```language-csharp",1042],["using System.Text;",1042],["using Unity.Profiling;",1042],["using UnityEngine;",1042],["public class RenderStatsScript : MonoBehaviour",1042],["string statsText;",1042],["ProfilerRecorder setPassCallsRecorder;",1042],["ProfilerRecorder drawCallsRecorder;",1042],["ProfilerRecorder verticesRecorder;",1042],["void OnEnable()",1042],["setPassCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, \"SetPass Calls Count\");",1042],["drawCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, \"Draw Calls Count\");",1042],["verticesRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, \"Vertices Count\");",1042],["void OnDisable()",1042],["setPassCallsRecorder.Dispose();",1042],["drawCallsRecorder.Dispose();",1042],["verticesRecorder.Dispose();",1042],["void Update()",1042],["var sb = new StringBuilder(500);",1042],["if (setPassCallsRecorder.Valid)",1042],["sb.AppendLine($\"SetPass Calls: {setPassCallsRecorder.LastValue}\");",1042],["if (drawCallsRecorder.Valid)",1042],["sb.AppendLine($\"Draw Calls: {drawCallsRecorder.LastValue}\");",1042],["if (verticesRecorder.Valid)",1042],["sb.AppendLine($\"Vertices: {verticesRecorder.LastValue}\");",1042],["statsText = sb.ToString();",1042],["void OnGUI()",1042],["GUI.TextArea(new Rect(10, 30, 250, 50), statsText);",1042],["The Rendering Profiler module information belongs to the ProfilerCategory.Render Profiler category.",1042],["If you want to highlight the selected Rendering counters in a custom module, use the Module Editor to configure the chart and detailed view.",1042],["UI and UI Details Profiler",1043],["The UI and UI Details Profiler modules provide information on how much time and resources Unity spends laying out and rendering the user interface within your application. You can use this module to understand how Unity handles UI batching for your application, including why and how it batches objects. You can also use this module to find out which part of the UI is responsible for slow performance, or to preview the UI while you scrub the timeline.",1043],["For more information on how to use the Profiler window, see the documentation on Getting started with the Profiler window.",1043],["Chart categories",1043],["The UI and UI Details Profiler modules’ charts are divided into five categories. To change the order of the categories in the chart, you can drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display.",1043],["Chart Description ",1043],["",1043],["UI Profiler module ",1043],["Layout How much time Unity has spent performing the layout pass for the UI. This includes calculations done by HorizontalLayoutGroup, VerticalLayoutGroup, and GridLayoutGroup. ",1043],["Render How much time the UI has spent doing its portion of rendering. This is either the cost of rendering directly to the graphics device or rendering to the main render queue. ",1043],["UI Details Profile module ",1043],["Batches Displays the total number of draw calls that are batched together. ",1043],["Vertices The total number of vertices that are used to render a section of UI. ",1043],["Markers Displays event markers. Unity records markers when the user interacts with the UI (for example, a button click, or a slider value change) and then draws them as vertical lines and labels on the chart. ",1043],["Module details pane",1043],["When you select the UI or the UI Details Profiler module, the module details pane at the bottom of the Profiler window displays more details on the UI in your application. You can use it to inspect the profiling information about the UI objects in your application. The pane is divided into the following columns:",1043],["Column Description ",1043],["",1043],["Object A list of UI canvases your application used during the period profiled. Double click on a row to highlight the matching object in the Scene. ",1043],["Self Batch Count How many batches Unity generated for the canvas. ",1043],["Cumulative Batch Count How many batches Unity generated for the canvas and all of its nested canvases ",1043],["Self Vertex Count How many vertices this canvas is rendering. ",1043],["Cumulative Vertex Count How many vertices this canvas and nested canvases are rendering ",1043],["Batch Breaking Reason Why Unity split the batch. Sometimes Unity might not be able to batch objects together. Common reasons include: Not Coplanar With Canvas, where the batching needs the object’s rect transform to be coplanar (unrotated) with the canvas. CanvasInjectionIndex, where a CanvasGroup component is present and forces a new batch, such as when it displays the drop down list of a combo box on top of the rest.Different Material Instance, Rect clipping, Texture, or A8TextureUsage, where Unity can only batch together objects with identical materials, masking, textures, and texture alpha channel usage. ",1043],["GameObject Count How many GameObjects are part of this batch ",1043],["GameObjects The list of GameObjects in the batch. ",1043],["When you select a UI object from the list, a preview of it appears on the right hand side of the pane. Above the preview there are the following options in the toolbar:",1043],["Detach:** Select this button to open the UI canvas in a separate window. To reattach the window, close it.",1043],["Preview background:** Use the dropdown to change the color of the preview background. You can choose from Checkerboard, Black, or White. This is useful if your UI has a particularly light or dark color scheme.",1043],["Preview type:** Use the dropdown to select from Standard, Overdraw, or Composite Overdraw.",1043],["The Profiler window",1044],["To access the Unity Profiler, go to Window > Analysis > Profiler or use the keyboard shortcut Ctrl+7 (Command+7 on macOS).",1044],["The Profiler records multiple areas of your application's performance, and displays that information to you. You can use this information to make informed decisions about what you might need to optimize in your application, and to confirm that your optimizations produce the results you expect.",1044],["By default, the Profiler records and keeps the last 300 frames of your game, and shows you detailed information about every frame. You can increase the number of frames it records in the Preferences window up to 2,000 frames. Note: If you increase this setting to a large number of frames, the Profiler's overhead and memory usage might become more performance intensive.",1044],["You can inspect script code, and how your application uses certain Assets and resources that might be slowing it down. You can also compare how your application performs on different devices. The Profiler has several different Profiler modules that you can add to your profiling session to get more information on areas such as rendering, memory, and audio.",1044],["This page covers the following topics:",1044],["",1044],["Profiler window layout",1044],["The Profiler window is laid out as follows:",1044],["A:** Profiler modules. This is a list of all the modules you can profile in your application. Use the drop-down menu at the top of this area to add and remove modules from the window.",1044],["B:** Profiler controls. Use these controls to set which device to profile from and what kind of profiling Unity should perform, navigate between frames, and start recording data.",1044],["C:** Frame charts. This area contains charts of each module the Profiler profiles. This area is blank when you open the Profiler for the first time, and fills with information when you start profiling your application.",1044],["D:** Module details panel. The information in this area of the window changes based on the module you have selected. For instance, when you select the CPU Usage Profiler module, it contains a detailed timeline and the option to switch to a Hierarchy view. When you select the Rendering Profiler module, this area displays a list of debugging information. This area is blank when you open the Profiler for the first time, and fills with information when you start profiling your application.",1044],["",1044],["Profiler Preferences",1044],["The Preferences window contains additional Profiler window settings as follows:",1044],["Preference Description ",1044],["",1044],["Frame count Set the maximum number of frames for the Profiler to capture. You can set this number between 300 and 2,000. ",1044],["Show stats for 'current frame' By default, when you select the Current Frame button and enter Current Frame mode, the frame indicator line does not have annotations with the stats for the current frame. This is because the stats annotations might make it difficult to view data in real-time. To display the annotations, enable this setting. ",1044],["Default recording state Select which recording state the Profiler should open in. Choose from Enabled, Disabled, or Remember. Enabled keeps the Record button enabled between sessions, while Disbled disables it, regardless of whether you turn it on or off during your profiling session. The Remember state remembers whether you have enabled or disabled the Record button during your session and keeps it at its last state next time you open the Profiler window. ",1044],["Default editor target mode Select what mode the Attach to Player dropdown should target by default. Choose from either Playmode or Editor. ",1044],["",1044],["Profiler controls",1044],["The Profiler controls are in the toolbar at the top of the Profiler window. Use these to start or stop recording profiler data, and to navigate through profiled frames.",1044],["Control Function ",1044],["",1044],["Attach to Player Select which target to profile your application on. By default, this is set to Playmode. You can also select Editor to profile the Unity Editor and display the resources that the Editor is currently using. Unity also automatically detects any devices that are running on your network or connected via USB, and displays them in the drop-down. Click Enter IP in the drop-down to manually enter the IP address of the device you want to profile your application on. For more information, see Profiling your application. ",1044],["Record Enable this setting to record profiling information for the active modules when you run your application. If you don’t have this button enabled, the Profiler doesn’t collect any data when you run your application. ",1044],["Back arrow Navigate one frame back. ",1044],["Forward arrow Navigate one frame forward. ",1044],["Current Frame When you click the Current Frame button, the frame indicator line jumps to the last recorded frame, and the Profiler enters Current Frame mode. While the Profiler collects data in this mode, it stays on the current frame and displays the data it collects in real-time. Click the button again to exit Current Frame mode. ",1044],["Frame number Indicates the frame number you are currently looking at in the Profiler. The number on the left is the current frame selected, and the number on the right is the total number of frames combined that the Profiler collected during your entire Profiling session. ",1044],["Clear Erase all data from the Profiler window. ",1044],["Clear on Play Enable this setting to erase all data from the Profiler window next time you click Play in the Player window, or when you connect to a new target device. ",1044],["Deep Profile Enable this setting to profile all C# methods. When you enable this setting, Unity adds instrumentation to all mono calls, which then allows for a more detailed investigation of your scripts. See Deep Profiling. ",1044],["Call Stacks To record call stacks for scripting memory allocations, click this toggle. Frames that the Profiler records when you enable this option have information about the selected samples on the full call stack that lead to a managed scripting allocation, even when Deep Profile is not active. By default, the Profiler records the full call stack information for GC.Alloc samples when you enable this setting, but you can change this to a different sample from the dropdown menu (UnsafeUtility.Malloc, JobHandle.Complete, or Native Allocations). For more information, see the Allocation call stacks section of the CPU Usage Profiler module page. ",1044],["Load Load saved Profiler data into the Profiler window. You can also load binary profile data that the Player has written out to file via the Profiler.logFile API. Hold down the Shift button and click the Load button to append the file contents to the current profile frames. ",1044],["Save Save the Profiler data into a .data file in your Project folder. ",1044],["Context menu ",1044],["Color Blind Mode Enable this setting to make the Profiler use higher contrast colors in its graphs. This enhances visibility for users with red-green color blindness (such as deuteranopia, protanopia, or tritanopia). ",1044],["Show stats for \"current\" frame By default, when you select the Current Frame button and enter Current Frame mode, the frame indicator line does not have annotations with the stats for the current frame. This is because the stats annotations might make it difficult to view data in real-time. To display the annotations, enable this setting. ",1044],["Preferences Open the Preferences menu to adjust Profiler-specific properties. ",1044],["To maintain a low overhead, Unity only redraws every fifth frame of the Editor UI. This results in a slightly stuttered update.",1044],["",1044],["Deep Profiling",1044],["Usually the Profiler only profiles code timings that are explicitly wrapped in ProfilerMarkers. This includes the first call stack depth of invocations from the engine’s native code into your scripting code, such as a MonoBehaviour’s Start, Update, or similar methods.",1044],["Without adding more explicit ProfilerMarker instrumentation to your own code, the only other samples you can see as child samples of your scripting code are those that call back into Unity’s API, if that API has been instrumented. Most API calls that carry a performance overhead are instrumented. For example, accessing the main Camera through the Camera.main API is registered as a “FindMainCamera” sample.",1044],["When you enable the Deep Profile setting, the Profiler profiles every part of your script code and records all function calls, including at least the first call stack depth into any Unity API. This is useful information to help you work out where your code impacts on your application’s performance, but it comes with a large overhead.",1044],["When you deep profile your application, Unity injects profiler instrumentation into all of your script methods to record all function calls. This is useful to understand where your application code spends the most time.",1044],["Deep Profiling is resource-intensive and uses a lot of memory. As a result, your application runs significantly slower while it is profiling. Deep Profiling is better suited for small games with simple scripting. If you are using complex script code, your application might not be able to use Deep Profiling at all, and for many larger applications, Deep Profiling might make Unity run out of memory.",1044],["If you run into issues where there are too many samples for the Profiler to store in the ring buffer it uses to stream them to the Profiler, then Unity displays an error message. To increase the size of the ring buffer, you can adjust the Profiler.maxUsedMemory property for the Player you’re profiling.",1044],["If Deep Profiling causes the frame rate of your application to drop so much that it is impossible to run, you can manually profile blocks of your script code, which has a smaller overhead than Deep Profiling. Use ProfilerMarkers to manually add the instrumentation you need to mark up script blocks. These appear in the CPU Usage Profiler module.",1044],["If you want to find out which call stacks lead to a GC.Alloc sample without Deep Profiling, you can turn on the collection of Allocation call stacks. Enable the Call Stacks setting in the Profiler controls, and then you can select the GC.Alloc samples in the Timeline view, or use the Show Related Objects panel in the Hierarchy view to find the call stacks for these samples. For more information, see the documentation on Allocation call stacks in the CPU Profiler Module page.",1044],["",1044],["Profiler modules",1044],["The top part of the Profiler window is divided into Profiler modules that profile specific areas of your game. When you profile your application, Unity displays the data related to each module in corresponding charts.",1044],["The CPU Usage module provides the best overview of how much time your application spends on each frame. The other modules collect more specific data and can help you inspect more specific areas or to monitor the vitals of your application, such as memory consumption, rendering, or audio statistics.",1044],["Each module has its own chart. When you select a module, a Module Details panel appears in the bottom section of the window, which you can use to inspect the detailed data the module collects.",1044],["Profiler module Function ",1044],["",1044],["CPU Usage Displays an overview of where your application spends the most time, in areas such as physics, scripts, animation, and garbage collection. This module contains broad profiling information about your application, and you can use it to decide which further modules to use to investigate more specific issues in your application. This module is always active, even if you close it. See CPU Usage Profiler module ",1044],["GPU Usage Displays information related to graphics processing. By default this module is not active, because it has a high overhead. See GPU Usage Profiler module. ",1044],["Rendering Displays information on how Unity renders graphics in your application, including information on static and dynamic batching, SetPass and Draw calls, triangles, and vertices. See Rendering Profiler module. ",1044],["Memory Displays information on how Unity allocates memory in your application. This is particularly useful for seeing how scripting allocations (GC.Alloc) lead up to garbage collection, or how your application’s Asset memory usage trends over time. See Memory Profiler module. ",1044],["Audio Displays information related to the audio in your application, such as when and how many audio sources play, how much CPU usage the Audio system requires, and how much memory Unity allocates to it. See Audio Profiler module. ",1044],["Video Displays information related to video in your application. See Video Profiler module. ",1044],["Physics Displays information about the physics in your application that the physics engine has processed. See Physics Profiler module. ",1044],["Physics (2D) Similar to the Physics Profiler module, this module displays information about where the physics engine has processed 2D physics in your application. See 2D Physics Profiler module. ",1044],["UI Displays information about how Unity handles UI batching for your application, including why and how Unity batches items. See UI and UI Details Profiler module. ",1044],["UI Details Similar to the UI Module, this module’s chart adds data about batch and vertices count, as well as markers which include information about user input events that trigger UI changes. See UI and UI Details Profiler module ",1044],["Global Illumination Displays information on how much CPU resource Unity spends on the Global Illumination lighting subsystem in your application. See Global Illumination Profiler window. ",1044],["Virtual Texturing Displays statistics about Streaming Virtual Texturing in your application. See the Virtual Texturing Profiler module. ",1044],["Asset Loading Displays information about how your application loads assets. See the Asset Loading Profiler module. ",1044],["File Access Displays information about file accesses in your application. See the File Access Profiler module. ",1044],["",1044],["Profiler module overhead",1044],["Some Profiler modules have a large data collection overhead, such as the GPU, UI, and Audio Profiler module. To prevent these modules from affecting your application’s performance, you can deactivate them by unselecting them in the Profiler Module dropdown. This removes the module from the window, stops the Profiler from collecting that module’s data, and lowers the Profiler’s overhead.",1044],["This does not apply to the CPU Usage module, which always collects data even when it’s not active, because other modules rely on it.",1044],["To add a module, select the Profiler Module dropdown and choose the Profiler you want to activate. When you choose a Profiler module from the drop-down, it starts collecting data, but shows no data for the period in which it was not active.",1044],["To avoid the overhead of the GPU Profiler module, it is not active by default. The GPU Profiler module must be active at the start of your application to hook into the graphics driver. If you add it later, it has no effect on most platforms, and the Profiler displays the message \"GPU profiling is not supported by the graphics card driver (or it was disabled because of driver bugs)\".",1044],["If you instruct the Profiler to collect and send data to disk through the Profiler.logFile API instead of through the Profiler window, you can turn off Profiler modules through Profiler.SetAreaEnabled().",1044],["Some settings that debug your scripts through an external IDE might also create overhead. To avoid this overhead and get more accurate measurements, disable the Editor Attaching setting (menu: Preferences > External Tools). Similarly, when you profile build Players, open Build Settings and disable Script Debugging to avoid that overhead.",1044],["",1044],["Profiler frame charts",1044],["The upper part of the Profiler window displays performance data over time on a frame-by-frame basis. When you run your application, the Profiler records data for each frame. By default, the Profiler window displays the history of the last 300 frames it profiles. You can increase the number of frames the Profiler profiles in the Preferences window, up to a maximum of 2,000.",1044],["When you click in the Profiler frame chart area of the Profiler window, a white line appears, which highlights one frame of your application. To navigate between frames, use the transport controls in the toolbar of the Profiler window.",1044],["Unity manages the vertical scale of the charts automatically, and the charts attempt to fill the vertical space of the window. To see more detail in a chart, you can remove other Profiler modules, or you can drag the splitter between the charts and the detailed statistics area to increase the screen area of the charts.",1044],["To toggle hiding and displaying a metric in a chart, click the colored square next to its label in its module. This can be useful to identify the causes of spikes. In stacked charts such as the CPU Usage Profiler’s chart, you can reorder the metric labels to affect the stacking order, which helps make more prominent metrics more visible.",1044],["Each Profiler module collects different performance data metrics and displays them in separate charts. When you click on a frame, Unity displays more details about the frame in the Module Details pane in the bottom half of the Profiler window. The type of detail in this window changes depending on which Profile module you select. For more information about the specific details that each module displays in this area, see the individual documentation for the Profiler modules.",1044],["",1044],["Standalone Profiler",1044],["To use the Standalone Profiler, go to Window > Analysis > Profiler (Standalone process). When you select the Standalone Profiler, Unity launches the Profiler outside of the Unity Editor’s process, and instead launches the Profiler in a new, separate process.",1044],["Launching the Profiler in its own dedicated process ensures cleaner Profiler data when you target the Editor or Play mode. It also reduces overhead, because the Profiler isn’t profiling itself or sharing a process with your application or the Editor. The functionality and controls of the Profiler remain the same as when you run the Profiler in the same process as the Editor.",1044],["When you start a separate process for the Profiler window, it takes longer to start up than opening it in the same process as the Editor. You cannot dock any Editor windows that are connected to the separate process to the main process’s windows. Additionally, when you restart the Editor, Unity does not re-open the windows in the out-of-process Profiler.",1044],["",1044],["Command line arguments",1044],["If you start your built Player or the Unity Editor from the command line (such as the Command Prompt on Windows, Terminal on macOS, Linux shell, or adb for Android), you can pass command line arguments to configure some Profiler settings.",1044],["Command line argument Description ",1044],["",1044],["-deepprofiling Enable Deep Profiling in a built Player. ",1044],["-profiler-enable Profile the start-up of a Player or the Editor. When you use this argument with a Player, it has the same effect as building the Player with the Autoconnect Profiler option enabled in Build Settings. When you use this argument with the Editor, it starts collecting and displaying Profiler information in the Profiler window on start-up of the Editor. ",1044],["-profiler-log-file <Path/To/Log/File.raw> This argument sets the Profiler up to stream the profile data to a .raw file on startup. It works for both Players and the Editor. ",1044],["-profiler-capture-frame-count <NumberOfFrames> This argument sets how many frames to capture in a profile when streaming to a .raw file on start-up. It only works on Players. ",1044],["-profiler-maxusedmemory By default, maxUsedMemory is 16MB for Players and 256MB for the Editor. You can use this argument to set the maxUsedMemory parameter to a custom size at start-up (for example, -profiler-maxusedmemory 16777216). The size is set in bytes. ",1044],["Added Out-of-process Profiler in 2020.1 NewIn20201",1044],["The Progressive Lightmapper",1045],["The Progressive Lightmapper is a fast path-tracing-based lightmapper system that provides baked lightmaps and Light Probes with progressive updates in the Editor. It requires non-overlapping UVs with small area and angle errors, and sufficient padding between the charts.",1045],["The Progressive Lightmapper takes a short preparation step to process geometry and instance updates, and generates the G-buffer and chart masks. It then produces the output immediately and progressively refines it over time for a much-improved interactive lighting workflow. Additionally, baking times are much more predictable because the Progressive Lightmapper provides an estimated time while it bakes.",1045],["The Progressive Lightmapper also bakes global illumination (GI) at the lightmap resolution for each texel individually, without upsampling schemes or relying on any irradiance caches or other global data structures. This makes it robust and allows you to bake selected portions of lightmaps, which makes it faster for you to test and iterate on your Scene.",1045],["For an in-depth video showing the interactive workflow, see Unity’s video walkthrough: In Development - Progressive Lightmapper (YouTube).",1045],["The Progressive CPU Lightmapper and the Progressive GPU Lightmapper (preview)",1045],["You can choose between two backends for the Progressive Lightmapper. The Progressive CPU Lightmapper backend is a backend for the Progressive Lightmapper that uses your computer's CPU and system RAM. The Progressive GPU Lightmapper is a backend for the Progressive Lightmapper that uses your computer's GPU and VRAM.",1045],["Note that the Progressive GPU Lightmapper is a preview feature in active development, and is subject to change. For information on the Progressive GPU Lightmapper backend, see the Progressive GPU Lightmapper (preview).",1045],["Render pipeline support",1045],["See render pipeline feature comparison for more information about support for the Progressive Lightmapper across render pipelines.",1045],["Platform compatibility",1045],["The Apple silicon version of the Unity Editor is not compatible with the CPU Progressive Lightmapper. However, it is compatible with the Progressive GPU Lightmapper.",1045],["Using the Progressive Lightmapper",1045],["To use the Progressive Lightmapper:",1045],["Go to Window > Rendering > Lighting",1045],["Navigate to Lightmapping Settings",1045],["Set Lightmapper to Progressive CPU or Progressive GPU",1045],["You can perform many of the functions available in this window via scripts, using the LightmapEditorSettings and Lightmapping APIs.",1045],["Settings",1045],["This page lists settings specific to the Progressive Lightmapper. See Lightmapping using Enlighten for settings specific to Enlighten Baked Global Illumination (deprecated, unlike Enlighten Realtime Global Illumination). For all other lighting settings, see Lighting Settings Asset.",1045],["Setting Description ",1045],["Lightmapper Use this to specify which internal lighting calculation software to use to calculate lightmaps in the Scene. The options visible in the user interface by default are:Progressive CPUProgressive GPUThe default value is Progressive CPU. See Lightmapping using Enlighten Baked Global Illumination to find out how to make Enlighten Baked Global Illumination (deprecated in 2022.2 and absent in 2023.1) available for light baking. ",1045],["Progressive Updates Enable this to make the Progressive Lightmapper apply changes to the texels that are currently visible in the Scene View, then apply changes to the out-of-view texels. ",1045],["Multiple Importance Sampling Enable this to use multiple importance sampling for sampling the environment. This generally leads to faster convergence when generating lightmaps, but can lead to noisier results in certain low frequency environments. This is disabled by default. ",1045],["Direct Samples The number of samples (paths) shot from each texel. This setting controls the number of samples Progressive Lightmapper uses for direct lighting calculations. Increasing this value can improve the quality of lightmaps, but increases the baking time. ",1045],["Indirect Samples The number of samples (paths) shot from each texel. This setting controls the number of samples Progressive Lightmapper uses for indirect lighting calculations. For some Scenes, especially outdoor Scenes, 100 samples should be enough. For indoor Scenes with emissive geometry, increase the value until you see the result you want. ",1045],["Environment Samples The Environment Samples property determines the total number of environment rays that Unity fires toward the skybox to gather light directly. Unity fires these rays from the lightmap texel or light probe position depending on the context. The default value is 500. Higher values might yield smoother results, but at the cost of increased bake times.In Scenes with HDR skyboxes, more samples are often needed to reduce noise in the final lightmap or probe. Scenes with skyboxes that include bright singularities (such as the sun) or high-frequency details with significant contrast (such as backlit clouds) also benefit from a higher number of samples. ",1045],["Light Probe Sample Multiplier Controls how many samples are used for Light Probes as a multiplier of the sample values above. Higher values improve the quality of Light Probes, but they will take longer to bake. To enable this feature, go to Project Settings > Editor and disable Use legacy Light Probe sample counts. The default value is 4. ",1045],["Bounces Use this value to specify the number of indirect bounces to do when tracing paths. For most Scenes, two bounces is enough. For some indoor Scenes, more bounces might be necessary. ",1045],["Max Bounces The maximum number of bounces you want the Progressive Lightmapper to include in indirect lighting calculations. Default value: 2. Range: 0–100. Values of up to 10 are suitable for most Scenes. Values higher than 10 might lead to significantly longer bake times.Each bounce increases the computational resources needed to bake your scene. Use higher bounce values for indoor Scenes, and lower bounce values for outdoor Scenes and those with many bright surfaces. ",1045],["Filtering Configure the way the Progressive Lightmapper applies post-processing to lightmaps to limit noise. For lightmap post-processing, the lightmap is split into Direct, Indirect and Ambient Occlusion targets that Unity applies post-processing to individually, before it composites them together into a single lightmap.- Direct: Any light that arrives directly from a Light to a sensor (usually the Camera).- Indirect: Any light that arrives indirectly from a Light to a sensor. This most commonly applies to light that reflects off other GameObjects.- Ambient Occlusion: Any ambient light that the lighting system calculates. ",1045],["None Select this to use no filter or denoising for the lightmap. ",1045],["Auto Select this to use a platform-dependent preset for post-processing the lightmap. If your development machine fulfils the requirements to run OptiX (the NVIDIA OptiX AI-Accelerated Denoiser), the Progressive Lightmapper uses the denoiser with a Gaussian filter that has a 1-texel radius for all targets.If your development machine cannot run OptiX, the Progressive Lightmapper falls back to OpenImageDenoise. ",1045],["Advanced Select Advanced to manually configure options for each type of lightmap target. The targets types are Direct, Indirect and Ambient Occlusion. For more information, see Advanced Filtering settings, below. ",1045],[" ",1045],["Advanced Filtering settings",1045],["Set Filtering to Advanced to manually configure options for each type of lightmap target. The target types are:",1045],["Direct**: Any light that arrives directly from a Light to a sensor (usually the Camera).",1045],["Indirect**: Any light that arrives indirectly from a Light to a sensor. This most commonly applies to light that reflects off other GameObjects.",1045],["Ambient Occlusion**: Any ambient light that the lighting system calculates.",1045],["Setting Description ",1045],["Denoiser Select a denoiser to use for the lightmap target. The options are:Optix: The NVIDIA Optix denoiser is an AI accelerated denoiser that reduces noise in baked lightmaps. It requires an NVIDIA GeForce, Quadro, or Tesla GPU with Maxwell or newer generation architecture, using driver version R495.89 or above. Optix is only supported on Windows.RadeonPro: The RadeonPro denoiser is an AI accelerated denoiser that reduces noise in baked lightmaps. It requires an OpenCL capable GPU with 4GB+ VRAM.- OpenImageDenoise: The Intel Open Image denoiser is an AI accelerated denoiser that reduces noise in baked lightmaps.- None: Do not use a denoiser. ",1045],["Filter Select a filter to use for the lightmap target:- Gaussian: Select this to use a Gaussian filter for the lightmap target. The Gaussian filter applies a bilateral Gaussian filter on the lightmap. This blurs the lightmap and reduces the visible noise.- A-Trous: Select this to use an A-Trous filter for the lightmap target. The A-Trous filter minimizes the amount of blur while it removes visible noise in the lightmap.- None*:* Select this to disable all filtering for the lightmap target. ",1045],["Radius This option is only available when Filter is set to Gaussian. Use the Radius value to set the radius of the Gaussian filter kernel in texels. A higher Radius increases the blur strength and reduces the perceptible noise, but might cause detail to be lost in the lighting. ",1045],["Sigma This option is only available when Filter is set to A-Trous. Use the Sigma value to adjust how much to preserve detail or blur the lighting. A higher Sigma increases the blur strength and reduces the perceptible noise, but might cause detail to be lost in the lighting. ",1045],["Statistics",1045],["The panel below the Auto Generate and Generate Lighting options shows statistics about the lightmapping, including:",1045],["The number of lightmaps that Unity has created",1045],["Memory Usage: The amount of memory required for the current lightmapping.",1045],["Occupied Texels: The number of texels that are occupied in lightmap UV space.",1045],["Lightmaps in view: The number of lightmaps in the Scene view.",1045],["Lightmaps not in view: The number of lightmaps that are out of view.",1045],["Converged: All calculations for these lightmaps are complete.",1045],["Not Converged: Baking is still in progress for these lightmaps.",1045],["Bake Performance: The number of rays per second. If this is low (that is, less than 2) you should adjust your settings or your hardware to process more light rays at a time.",1045],["During baking",1045],["Progressive Lightmapper provides options to monitor and stop the bake while it is in progress, if you need to.",1045],["ETA",1045],["The progress bar that appears while Unity is baking the lightmap provides an \"estimated time of arrival\" (displayed as ETA). This is the estimated time in seconds for the current bake to complete. This allows for much more predictable baking times, and allows you to quickly learn how much time baking takes with your current lighting settings.",1045],["Force Stop",1045],["During manual baking, click Force Stop at any time to halt the baking process. This allows you to stop the process as soon as you see results that look good.",1045],["Disabling the default environment contribution",1045],["Unity automatically generates an ambient probe and a default Reflection Probe to ensure that environment lighting affects your scene and the GameObjects in it by default.",1045],["To disable the environment contribution in the lighting result for a scene or GameObject that does not have manually created light maps and Light Probes, disable the default Reflection Probe and the ambient probe. For more information, see Disabling the SkyManager.",1045],["Custom fall-off",1046],["In the real world, light fades over distance, and dim lights have a lower range than bright lights. The term \"fall-off\" refers to the rate at which light fades. Alongside Unity’s default fall-off lighting behaviour, you can also use custom fall-off settings.",1046],["Progressive Lightmapper provides custom fall-off presets, which you can implement via script. See the image below the table for a visual representation of how these work, and the code sample below the image for an example of how to use this functionality.",1046],["",1046],["Property Function ",1046],["InverseSquared Apply an inverse-squared distance fall-off model. This means the light intensity decreases inversely proportional to the square of location’s distance to the light source. For more information , see Wikipedia: Inverse-square law. This option is the most physically accurate. ",1046],["InverseSquaredNoRangeAttenuation Apply an inverse-squared distance fall-off model with no smooth range attenuation. This works in the same way as InverseSquared, but the lighting system does not take into account the attenuation for the range parameter of punctual lights (that is, point lights and spot lights). ",1046],["Legacy Apply a quadratic fall-off model. This model bases the light attenuation on the range of the light source. The intensity diminishes as the light gets further away from the source, but there is a very sharp and unnatural drop in the attenuation, and the visual effect is not realistic. ",1046],["Linear Apply a linear fall-off model. In this model, attenuation is inversely proportional to the distance from the light, and the fall-off diminishes at a fixed rate from its source. ",1046],["Note**: The code example below only works with the Progressive Lightmapper when you use Baked or Mixed lights. To use the code example with realtime lights, use Enlighten Realtime Global Illumination.",1046],["```lang-C#",1046],["using System.Collections;",1046],["using System.Collections.Generic;",1046],["using UnityEngine;",1046],["using UnityEngine.Experimental.GlobalIllumination;",1046],["using UnityEngine.SceneManagement;",1046],["[ExecuteInEditMode]",1046],["public class ExtractFalloff : MonoBehaviour",1046],["public void OnEnable()",1046],["Lightmapping.RequestLightsDelegate testDel = (Light[] requests, Unity.Collections.NativeArray lightsOutput) =>",1046],["DirectionalLight dLight = new DirectionalLight();",1046],["PointLight point = new PointLight();",1046],["SpotLight spot = new SpotLight();",1046],["RectangleLight rect = new RectangleLight();",1046],["DiscLight disc = new DiscLight();",1046],["Cookie cookie = new Cookie();",1046],["LightDataGI ld = new LightDataGI();",1046],["for (int i = 0; i < requests.Length; i++)",1046],["Light l = requests[i];",1046],["switch (l.type)",1046],["case UnityEngine.LightType.Directional: LightmapperUtils.Extract(l, ref dLight); LightmapperUtils.Extract(l, out cookie); ld.Init(ref dLight, ref cookie); break;",1046],["case UnityEngine.LightType.Point: LightmapperUtils.Extract(l, ref point); LightmapperUtils.Extract(l, out cookie); ld.Init(ref point, ref cookie); break;",1046],["case UnityEngine.LightType.Spot: LightmapperUtils.Extract(l, ref spot); LightmapperUtils.Extract(l, out cookie); ld.Init(ref spot, ref cookie); break;",1046],["case UnityEngine.LightType.Area: LightmapperUtils.Extract(l, ref rect); LightmapperUtils.Extract(l, out cookie); ld.Init(ref rect, ref cookie); break;",1046],["case UnityEngine.LightType.Disc: LightmapperUtils.Extract(l, ref disc); LightmapperUtils.Extract(l, out cookie); ld.Init(ref disc, ref cookie); break;",1046],["default: ld.InitNoBake(l.GetInstanceID()); break;",1046],["ld.cookieID = l.cookie?.GetInstanceID() ?? 0;",1046],["ld.falloff = FalloffType.InverseSquared;",1046],["lightsOutput[i] = ld;",1046],["};",1046],["Lightmapping.SetDelegate(testDel);",1046],["void OnDisable()",1046],["Lightmapping.ResetDelegate();",1046],["Note**: All code in the example above is necessary for the custom falloff to work; however, you can change InverseSquared in the line ld.falloff = FalloffType.InverseSquared; to use any of the presets described above.",1046],["Progressive Lightmapper added in 2018.1 NewIn20181",1046],[" 2018-03-28 ",1046],["Fixing lightmap UV overlap",1047],["Each lightmap contains a number of charts. At run time, Unity maps these charts onto mesh faces, and uses the charts’ lighting data to calculate the final appearance. Because of the way GPU sampling works, data from one chart can bleed onto another if they are too close to each other. This usually leads to unintended artifacts such as aliasing, pixelation, and so on.",1047],["To avoid light bleeding, there must be a sufficient amount of space between charts. When a GPU samples a lightmap, the lighting system calculates the final sample value from the four texels closest to the sampled point (assuming bilinear filtering is used). These four texels are called the bilinear \"neighborhood\" of the sampled point. Charts are too close together if they overlap - that is, if the neighbourhood of any point inside a chart overlaps with the neighborhood of any point in another chart. In the image below, the white pixels indicate chart neighbourhoods, and red pixels indicate overlapping neighbourhoods.",1047],["Determining optimal chart placements and spacing can be difficult, because it depends on several parameters (such as lightmap resolution, mesh UVs, and Importer settings). For this reason, Unity provides the ability to identify these issues easily, as outlined in the following section.",1047],["Identification",1047],["There are three ways to identify overlaps:",1047],["Keep an eye on Unity’s console. If Unity detects overlapping UVs, it prints a warning message with a list of affected GameObjects.",1047],["Use the UV Overlap draw mode in the Scene View (see GI visualizations in the Scene View for more information). When you have this mode enabled, Unity adds a red highlight to chart texels that are too close to texels of other charts. This is especially useful if you discover an artefact in the Scene view, and want to quickly examine whether UV overlap is causing it.",1047],["Use Baked Lightmaps Preview. Select a GameObject and go to the Lighting window and then choose the Baked Lightmaps tab. Double-click the highlighted lightmap, navigate to the Preview window, and select Baked UV Overlap (see dropdown in upper right corner). The Preview window colours problematic texels red in this view.",1047],["Solutions",1047],["There is no one single solution for UV overlap, because there are so many things that can cause it. Here are the most common solutions to consider:",1047],["If you provide lightmap UVs yourself, add margins using your modelling package.",1047],["If Unity automatically generates the lightmap UVs for a Model, you can tell Unity to increase the pack margin. The simplest way to do this is to set the Margin Method to Calculate, and set an appropriate Min Lightmap Resolution and Min Object Scale. If you prefer to set Margin Method to Manual, you can adjust the Pack Margin value directly. For more information on these settings, see documentation on Generating lightmapping UVs.",1047],["Increase the resolution of the entire lightmap. This will increase the numbers of pixels between the charts, and therefore reduce the likelihood of bleeding. The downside is that your lightmap may become too large. You can do this in the Lighting tab under Lightmapper Settings.",1047],["Increase the resolution of a single GameObject. This allows you to increase lightmap resolution only for GameObjects that have overlapping UVs. Though less likely, this can also increase your lightmap size. You can change a GameObject’s lightmap resolution inside its Mesh Renderer under Lightmap Settings.",1047],["The Project window",1048],["The Project window displays all of the files related to your Project and is the main way you can navigate and find Assets and other Project files in your application. When you start a new Project by default this window is open. However, if you cannot find it, or it is closed, you can open it via Window > General > Project or press Ctrl+5 (macOS: Cmd+5).",1048],["You can move the Project window by clicking dragging the top of the window. You can either dock it into place in the Editor, or drag it out of the Editor window to use it as a free-floating window. You can also change the layout of the window itself. To do this, select the More menu (⋮) in the top right of the window and choose from either One Column Layout or Two Column Layout. The Two Column Layout has an extra pane which shows a visual preview of each file.",1048],["The left panel of the browser shows the folder structure of the Project as a hierarchical list. When you select a folder from the list, Unity shows its contents in the pane to the right. You can click the small triangle to expand or collapse the folder, displaying any nested folders it contains. Hold down Alt while you click to expand or collapse any nested folders recursively.",1048],["Individual Assets are shown in the right hand panel as icons that indicate their type (for example, script, material, sub-folder). To resize the icons, use the slider at the bottom of the panel; they will be replaced by a hierarchical list view if the slider is moved to the extreme left. The space to the left of the slider shows the currently selected item, including a full path to the item if a search is being performed.",1048],["Above the Project structure list is a Favorites section where you can keep frequently-used items for easy access. You can drag items from the Project structure list to the Favorites and also save search queries there.",1048],["Project window toolbar",1048],["Along the top edge of the window is the browser's toolbar.",1048],["Property Description ",1048],["",1048],["Create menu Displays a list of Assets and other sub-folders you can add to the folder currently selected. ",1048],["Search bar Use the search bar to search for a file within your Project. You can choose to search within the entire Project (All), in the top level folders of your Project (listed individually), in the folder you currently have selected, or within the Asset Store. ",1048],["Open in Search Opens the Unity Search tool to refine your search. ",1048],["Search by Type Select this property to confine your search to a specific type, for example Mesh, Prefab, Scene. ",1048],["Search by Label Select this property to choose a tag to search within. ",1048],["Save Search Saves your search under Favorites in the left panel. ",1048],["Hidden packages count Select this property to toggle the visibility of the packages in the Project window. ",1048],["Search filters",1048],["Search filters work by adding an extra term in the search text. A term beginning with \"t:\" filters by the specified asset type, while \"l:\" filters by label. You can type these terms directly into the search box rather than use the menu if you know what you are looking for. You can search for more than one type or label at once. Adding several types expands the search to include all specified types (that is, types are ANDed together). Adding multiple labels narrows the search to items that have any of the specified labels (that is, labels are ANDed together).",1048],["Searching the Asset Store",1048],["The Project Browser's search can also be applied to assets available from the Unity Asset Store. If you choose Asset Store from the menu in the breadcrumb bar, all free and paid items from the store that match your query will be displayed. Searching by type and label works the same as for a Unity Project. The search query words will be checked against the asset name first and then the package name, package label and package description in that order (so an item whose name contains the search terms will be ranked higher than one with the same terms in its package description).",1048],["If you select an item from the list, its details will be displayed in the inspector along with the option to purchase and/or download it. Some asset types have previews available in this section so you can, for example, rotate a 3D model before buying. The inspector also gives the option of viewing the asset in the usual Asset Store window to see additional details.",1048],["Shortcuts",1048],["The following keyboard shortcuts are available when the browser view has focus. Note that some of them only work when the view is using the two-column layout (you can switch between the one- and two-column layouts using the panel menu in the very top right corner).",1048],["Shortcut Function ",1048],["F Frame selected (ie, show the selected asset in its containing folder) ",1048],["Tab Shift focus between first column and second column (Two columns) ",1048],["Ctrl/Cmd + F Focus search field ",1048],["Ctrl/Cmd + A Select all visible items in list ",1048],["Ctrl/Cmd + D Duplicate selected assets ",1048],["Delete Delete with dialog (Win) ",1048],["Delete + Shift Delete without dialog (Win) ",1048],["Delete + Cmd Delete without dialog (OSX) ",1048],["Enter Begin rename selected (OSX) ",1048],["Cmd + down arrow Open selected assets (OSX) ",1048],["Cmd + up arrow Jump to parent folder (OSX, Two columns) ",1048],["F2 Begin rename selected (Win) ",1048],["Enter Open selected assets (Win) ",1048],["Backspace Jump to parent folder (Win, Two columns) ",1048],["Right arrow Expand selected item (tree views and search results). If the item is already expanded, this will select its first child item. ",1048],["Left arrow Collapse selected item (tree views and search results). If the item is already collapsed, this will select its parent item. ",1048],["Alt + right arrow Expand item when showing assets as previews ",1048],["Alt + left arrow Collapse item when showing assets as previews ",1048],["Unity Properties",1049],["You can use the Unity Properties API to visit .Net objects at runtime. The Properties API is in the Unity.Properties namespace and it uses a visitor design pattern to visit .Net objects at runtime. The visitor pattern is a design pattern that allows you to add new operations to an existing object structure without modifying the structure itself. You can build various functionalities on top of the visitor pattern, such as serialization, data migration, deep data comparisons, and data binding.",1049],["Unity Properties allows you to use visitors on any given type. You can use the Properties API to do the following:",1049],["\nCreate data types compatible with the Properties API\n",1049],["\nDevelop new property visitors and adapters for domain-specific use cases\n",1049],["Topic Description ",1049],["",1049],["Property bags Understand the concept and performance considerations about property bags. ",1049],["Property visitors Understand the concept and performance considerations about property visitors. ",1049],["Property paths Understand the concept and performance considerations about property paths. ",1049],["Use PropertyVisitor to create a property visitor Learn how to use the PropertyVisitor base class to create a property visitor from an example. ",1049],["Use low-level APIs to create a property visitor Learn how to use the IPropertyBagVisitor and IPropertyVisitor interfaces to create a property visitor from an example. ",1049],["Additional resources",1049],["\nSerialization\n",1049],["\nRuntime data binding\n",1049],["Property bags",1050],["Property bags are collections of properties for a given .Net object type that you can use to access and set data for an instance of an object of that type.",1050],["Concept",1050],["A property bag for a given type is a companion object that enables efficient data traversal algorithms based on instances of that type. By default, Unity uses reflection to generate the property bag for a type. This reflective approach offers convenience and occurs lazily only once per type when a property bag hasn't been registered yet.",1050],["To enhance performance, you can opt-in to code generation by tagging the type with [Unity.Properties.GeneratePropertyBag]. Additionally, to activate code generation, you must tag the assembly with [assembly: Unity.Properties.GeneratePropertyBagsForAssembly]. Code-generated property bags are automatically registered when the domain is loaded.",1050],["In both the reflection and code-generation scenarios, the property bag generates properties for the following:",1050],["Public fields",1050],["Private or internal fields tagged with [SerializeField], [SerializeReference], or [CreateProperty]",1050],["Public, private, or internal properties tagged with [Unity.Properties.CreateProperty]",1050],["The property bag doesn't generate a property for public, private, or internal fields tagged with [DontCreateProperty].",1050],["A generated property is read-only if the field is read-only or the property only has a getter.",1050],["You can also use [Unity.Properties.CreateProperty(ReadOnly = true)] to make a generated property read-only.",1050],["Creating properties in the property bag using serialization attributes for convenience is not always the preferred approach. Unity's serialization system can only operate on fields and auto-properties, which makes it challenging to achieve validation or propagate changes effectively.",1050],["The following example combines the Unity serialization system with the Unity Properties system:",1050],["```lang-csharp",1050],["using UnityEngine;",1050],["using Unity.Properties;",1050],["public class MyBehaviour : MonoBehaviour",1050],["// Serializations go through the field, but we don't want to create a property for it.",1050],["[SerializeField, DontCreateProperty]",1050],["private int m_Value;",1050],["// For the property bag, use the property instead of the field. This ensures that",1050],["// the value stays within the appropriate bounds.",1050],["[CreateProperty]",1050],["public int value",1050],["get => m_Value;",1050],["set => m_Value = value;",1050],["// This is a similar example, but for an auto-property.",1050],["[field: SerializeField, DontCreateProperty]",1050],["[CreateProperty]",1050],["public float floatValue { get; set; }",1050],["Unlike the Unity serialization system, the properties within a property bag don't qualify as value types with [SerializeField]. Instead, struct types are recognized as value types, whereas class types are recognized as references.",1050],["In Unity serialization, although polymorphism is supported, you must use the [SerializeReference] attribute to explicitly opt in. Otherwise, instances are serialized as value types. It's worth noting that UnityEngine.Object types are an exception to this rule, as they're automatically serialized as reference types.",1050],["Performance considerations",1050],["Unity Properties uses .Net reflection to create property bags and properties that are strongly typed, which can introduce performance overhead the first time you request a property bag for a given container type.",1050],["When you create properties for field members through reflection, these properties may allocate garbage in IL2CPP builds. This allocation occurs due to the direct use of System.Reflection.FieldInfo, which leads to unavoidable boxing.",1050],["To avoid reflection, you can code-generate property bags during compilation. However, be aware that this optimization may lead to longer compilation times. To enable code generation for an assembly, tag the assembly with [Unity.Properties.GeneratePropertyBagsForAssemblyAttribute] and tag individual types with [Unity.Properties.GeneratePropertyBagAttribute]. To enable the property bag to access internal, and private fields and properties, make the type partial.",1050],["Additional resources",1050],["Property paths",1051],["Property paths are strings that describe the location of a property within a container object.",1051],["Concept",1051],["You can use property paths to get or set the data of an object at a specific path or accept a visitor on a sub-property of an object.",1051],["Property paths are constructed from strings and resolve a specific property instance from a root object. For example, the path foo.bar.baz[12] resolves the 13th element of the baz list container within the bar container, which is nested inside the foo container.",1051],["To create and manipulate property paths, use the Unity.Properties.PropertyPath class.",1051],["You can use property paths to do the following:",1051],["\nGet or set the data of an object at a specific path\n",1051],["\nAccept a visitor on a sub-property of an object\n",1051],["Performance considerations",1051],["Unity.Properties.PropertyPath is an immutable struct type. When you construct a property path from a string, allocations occur for sub-string extraction.",1051],["The following table lists the allocation behaviors when a property path is constructed from a string:",1051],["String Length Allocations Allocations reason ",1051],["",1051],["\"Path\" 1 0 Use the string as-is. ",1051],["\"Path.To\" 2 2 Split the string into two parts. ",1051],["\"Path.To[2]\" 3 3 Split the string into two parts and extract the index. ",1051],["\"Path.To[2].My\" 4 4 ",1051],["\"Path.To[2].My.Value\" 5 6 Allocate an array for the additional parts. ",1051],["The following table lists the allocation behaviors when a property path is constructed from parts:",1051],["String Length Allocations Allocations reason ",1051],["",1051],["PropertyPath.FromName(\"Path\") 1 0 ",1051],["PropertyPath.AppendName(previous, \"To\") 2 0 ",1051],["PropertyPath.AppendIndex(previous, 2) 3 0 ",1051],["PropertyPath.AppendName(previous, \"My\") 4 0 ",1051],["PropertyPath.AppendName(previous, \"Value\") 5 1 Allocate an array for the additional parts. ",1051],["To optimize performance and avoid allocating memory:",1051],["\nInitialize and cache property paths during initialization routines.\n",1051],["\nCombine or append property path parts instead of constructing it from a string, up to four parts.\n",1051],["Additional resources",1051],["\nProperty bags\n",1051],["\nProperty visitors\n",1051],["\nUse PropertyVisitor to create a property visitor\n",1051],["\nUse low-level APIs to create a property visitor\n",1051],["Use low-level APIs to create a property visitor",1052],["This example demonstrates how to use the low-level APIs with the IPropertyBagVisitor and IPropertyVisitor interfaces to create a property visitor. This example is equivalent to the example that uses the PropertyVisitor base class to create a property visitor.",1052],["Create the visitor",1052],["First, create a DumpObjectVisitor class that implements the IPropertyBagVisitor. Inside the class, use a StringBuilder to build a string that represents the current state of an object.",1052],["Create a DumpObjectVisitor class that implements the IPropertyBagVisitor interfaces.",1052],["Add a StringBuilder field to the class.",1052],["Add a Reset method that clears the StringBuilder and resets the indent level.",1052],["Add a GetDump method that returns the string representation of the current state of an object.",1052],["Your DumpObjectVisitor class looks like this:",1052],["```lang-csharp",1052],["public class DumpObjectVisitor",1052],[": IPropertyBagVisitor",1052],[", IPropertyVisitor",1052],["private const int k_InitialIndent = 0;",1052],["private readonly StringBuilder m_Builder = new StringBuilder();",1052],["private int m_IndentLevel = k_InitialIndent;",1052],["public void Reset()",1052],["m_Builder.Clear();",1052],["m_IndentLevel = k_InitialIndent;",1052],["public string GetDump()",1052],["return m_Builder.ToString();",1052],["Get the properties",1052],["Inside the DumpObjectVisitor class, override the IPropertyBagVisitor.Visit method to loop through the properties of the container object. In the object dump visitor, display the values and delegate the visitation to the properties.",1052],["To call the Accept method on the property using this, implement the IPropertyVisitor interface. This interface allows you to specify the visitation behavior when visiting a property, similar to the VisitProperty method of the PropertyVisitor class.",1052],["Inside the DumpObjectVisitor class, add override the IPropertyBagVisitor.Visit and IPropertyVisitor.Visit methods.",1052],["```lang-csharp",1052],["void IPropertyBagVisitor.Visit(IPropertyBag propertyBag, ref TContainer container)",1052],["foreach (var property in propertyBag.GetProperties(ref container))",1052],["property.Accept(this, ref container);",1052],["void IPropertyVisitor.Visit(Property property, ref TContainer container)",1052],["var value = property.GetValue(ref container);",1052],["// Code goes here.",1052],["The IVisitPropertyAdapter adapters used with the PropertyVisitor base class require access to the internal state of the visitor, so they can't be used outside of that class. However, you can define domain-specific adapters that have the necessary information. Inside the DumpObjectVisito class, update the implementation of the IPropertyVisitor to use the adapter first:",1052],["```lang-csharp",1052],["// Create the following methods to encapsulate the formatting of the message and display the value.",1052],["public readonly struct PrintContext",1052],["private StringBuilder Builder { get; }",1052],["private string Prefix { get; }",1052],["public string PropertyName { get; }",1052],["public void Print(T value)",1052],["Builder.AppendLine($\"{Prefix}- {PropertyName} = {{{TypeUtility.GetTypeDisplayName(value?.GetType() ?? typeof(T))}}} {value}\");",1052],["public void Print(Type type, string value)",1052],["Builder.AppendLine($\"{Prefix}- {PropertyName} = {{{TypeUtility.GetTypeDisplayName(type)}}} {value}\");",1052],["public PrintContext(StringBuilder builder, string prefix, string propertyName)",1052],["Builder = builder;",1052],["Prefix = prefix;",1052],["PropertyName = propertyName;",1052],["public interface IPrintValue",1052],["public interface IPrintValue : IPrintValue",1052],["void PrintValue(in PrintContext context, T value);",1052],["public class DumpObjectVisitor",1052],[": IPropertyBagVisitor",1052],[", IPropertyVisitor",1052],[", IPrintValue",1052],[", IPrintValue",1052],["public IPrintValue Adapter { get; set; }",1052],["public DumpObjectVisitor()",1052],["// For simplicity",1052],["Adapter = this;",1052],["void IPropertyVisitor.Visit(Property property, ref TContainer container)",1052],["// Here, we need to manually extract the value.",1052],["var value = property.GetValue(ref container);",1052],["var propertyName = GetPropertyName(property);",1052],["// We can still use adapters, but we must manually dispatch the calls.",1052],["if (Adapter is IPrintValue adapter)",1052],["var context = new PrintContext(m_Builder, Indent, propertyName);",1052],["adapter.PrintValue(context, value);",1052],["return;",1052],["// Fallback behaviour here",1052],["void IPrintValue.PrintValue(in PrintContext context, Vector2 value)",1052],["context.Print(value);",1052],["void IPrintValue.PrintValue(in PrintContext context, Color value)",1052],["const string format = \"F3\";",1052],["var formatProvider = CultureInfo.InvariantCulture.NumberFormat;",1052],["context.Print(typeof(Color), $\"RGBA({value.r.ToString(format, formatProvider)}, {value.g.ToString(format, formatProvider)}, {value.b.ToString(format, formatProvider)}, {value.a.ToString(format, formatProvider)})\");",1052],["The completed code looks like this:",1052],["```lang-csharp",1052],["public readonly struct PrintContext",1052],["// A context struct to hold information about how to print the property",1052],["private StringBuilder Builder { get; }",1052],["private string Prefix { get; }",1052],["public string PropertyName { get; }",1052],["// Method to print the value of type T with its associated property name",1052],["public void Print(T value)",1052],["Builder.AppendLine($\"{Prefix}- {PropertyName} = {{{TypeUtility.GetTypeDisplayName(value?.GetType() ?? typeof(T))}}} {value}\");",1052],["// Method to print the value with a specified type and its associated property name",1052],["public void Print(Type type, string value)",1052],["Builder.AppendLine($\"{Prefix}- {PropertyName} = {{{TypeUtility.GetTypeDisplayName(type)}}} {value}\");",1052],["// Constructor to initialize the PrintContext",1052],["public PrintContext(StringBuilder builder, string prefix, string propertyName)",1052],["Builder = builder;",1052],["Prefix = prefix;",1052],["PropertyName = propertyName;",1052],["// Generic interface IPrintValue that acts as a marker interface for all print value adapters",1052],["public interface IPrintValue",1052],["// Generic interface IPrintValue to define how to print values of type T",1052],["// This interface is used as an adapter for specific types (Vector2 and Color in this case)",1052],["public interface IPrintValue : IPrintValue",1052],["void PrintValue(in PrintContext context, T value);",1052],["// DumpObjectVisitor class that implements various interfaces for property visiting and value printing",1052],["private class DumpObjectVisitor : IPropertyBagVisitor, IPropertyVisitor, IPrintValue, IPrintValue",1052],["// (Other members are omitted for brevity)",1052],["public IPrintValue Adapter { get; set; }",1052],["public DumpObjectVisitor()",1052],["// The Adapter property is set to this instance of DumpObjectVisitor",1052],["// This means the current DumpObjectVisitor can be used as a print value adapter for Vector2 and Color.",1052],["Adapter = this;",1052],["// This method is called when visiting a property bag (a collection of properties)",1052],["void IPropertyBagVisitor.Visit(IPropertyBag propertyBag, ref TContainer container)",1052],["foreach (var property in propertyBag.GetProperties(ref container))",1052],["// Call the Visit method of IPropertyVisitor to handle individual properties",1052],["property.Accept(this, ref container);",1052],["// This method is called when visiting each individual property of an object.",1052],["// It tries to find a suitable adapter (IPrintValue) for the property value type (TValue) and uses it to print the value.",1052],["// If no suitable adapter is found, it falls back to displaying the value using its type name.",1052],["void IPropertyVisitor.Visit(Property property, ref TContainer container)",1052],["// Here, we need to manually extract the value.",1052],["var value = property.GetValue(ref container);",1052],["var propertyName = GetPropertyName(property);",1052],["// We can still use adapters, but we must manually dispatch the calls.",1052],["// Try to find an adapter for the current property value type (TValue).",1052],["if (Adapter is IPrintValue adapter)",1052],["// If an adapter is found, create a print context and call the PrintValue method of the adapter.",1052],["var context = new PrintContext(m_Builder, Indent, propertyName);",1052],["adapter.PrintValue(context, value);",1052],["return;",1052],["// Fallback behavior here - if no adapter is found, handle printing based on type information.",1052],["var type = value?.GetType() ?? property.DeclaredValueType();",1052],["var typeName = TypeUtility.GetTypeDisplayName(type);",1052],["if (TypeTraits.IsContainer(type))",1052],["m_Builder.AppendLine($\"{Indent}- {propertyName} {{{typeName}}}\");",1052],["else",1052],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{typeName}}} {value}\");",1052],["// Recursively visit child properties (if any).",1052],["++m_IndentLevel;",1052],["if (null != value)",1052],["PropertyContainer.Accept(this, ref value);",1052],["--m_IndentLevel;",1052],["// Method from IPrintValue used to print Vector2 values",1052],["void IPrintValue.PrintValue(in PrintContext context, Vector2 value)",1052],["// Simply use the Print method of PrintContext to print the Vector2 value.",1052],["context.Print(value);",1052],["// Method from IPrintValue used to print Color values",1052],["void IPrintValue.PrintValue(in PrintContext context, Color value)",1052],["const string format = \"F3\";",1052],["var formatProvider = CultureInfo.InvariantCulture.NumberFormat;",1052],["// Format and print the Color value in RGBA format.",1052],["context.Print(typeof(Color), $\"RGBA({value.r.ToString(format, formatProvider)}, {value.g.ToString(format, formatProvider)}, {value.b.ToString(format, formatProvider)}, {value.a.ToString(format, formatProvider)})\");",1052],["Additional resources",1052],["\nProperty visitors\n",1052],["\nProperty bags\n",1052],["\nProperty paths\n",1052],["\nUse PropertyVisitor to create a property visitor\n",1052],["Use PropertyVisitor to create a property visitor",1053],["This example demonstrates how to use the PropertyVisitor base class to create a property visitor. For an equivalent example that uses the IPropertyBagVisitor and IPropertyVisitor interfaces, refer to Use low-level APIs to create a property visitor.",1053],["Create the visitor",1053],["First, create a DumpObjectVisitor class. Inside the class, use a StringBuilder to build a string that represents the current state of an object.",1053],["Create a DumpObjectVisitor class that inherits from PropertyVisitor.",1053],["Add a StringBuilder field to the class.",1053],["Add a Reset method that clears the StringBuilder and resets the indent level.",1053],["Add a GetDump method that returns the string representation of the current state of an object.",1053],["Your finished class looks like this:",1053],["```lang-csharp",1053],["// PropertyVisitor is an abstract class that you must subclass from it.",1053],["public class DumpObjectVisitor: PropertyVisitor",1053],["private const int k_InitialIndent = 0;",1053],["private readonly StringBuilder m_Builder = new StringBuilder();",1053],["private int m_IndentLevel = k_InitialIndent;",1053],["private string Indent => new (' ', m_IndentLevel * 2);",1053],["public void Reset()",1053],["m_Builder.Clear();",1053],["m_IndentLevel = k_InitialIndent;",1053],["public string GetDump()",1053],["return m_Builder.ToString();",1053],["Get the top-level properties",1053],["Inside the DumpObjectVisitor class, override the VisitProperty method to visit each property of an object and log the property name. The PropertyVisitor doesn't require any members to implement and by default, it simply visits every property and performs no action.",1053],["Inside the DumpObjectVisitor class, add the following override VisitProperty method:",1053],["```lang-csharp",1053],["protected override void VisitProperty(Property property, ref TContainer container, ref TValue value)",1053],["m_Builder.AppendLine($\"- {property.Name}\");",1053],["Now that you have a minimal visitor, you can implement the utility method. Update the PrintObjectDump method in the DebugUtilities class to create a new DumpObjectVisitor instance and use it to visit the properties of the given object:",1053],["```lang-csharp",1053],["public static class DebugUtilities",1053],["private static readonly DumpObjectVisitor s_Visitor = new ();",1053],["public static void PrintObjectDump(T value)",1053],["s_Visitor.Reset();",1053],["// This is the main entry point to run a visitor.",1053],["PropertyContainer.Accept(s_Visitor, ref value);",1053],["Debug.Log(s_Visitor.GetDump());",1053],["This gets the following output:",1053],["```lang-text",1053],["\nName\n",1053],["\nVec2\n",1053],["\nColors\n",1053],["\nDict\n",1053],["Get the sub-properties",1053],["The output from the previous section indicates that when you override the VisitProperty method, it doesn't automatically visit the sub-properties of an object. To get the sub-properties, use the PropertyContainer.Accept method to apply the visitor on each of the values recursively.",1053],["\nInside the DebugUtilities class, update the VisitProperty method to apply the visitor recursively on the value to nest in:\n",1053],["```lang-csharp",1053],["protected override void VisitProperty(Property property, ref TContainer container, ref TValue value)",1053],["m_Builder.AppendLine($\"{Indent}- {property.Name}\");",1053],["++m_IdentLevel;",1053],["// Apply this visitor recursively on the value to nest in.",1053],["if (null != value)",1053],["PropertyContainer.Accept(this, ref value);",1053],["--m_IdentLevel;",1053],["This gets the following output:",1053],["```lang-text",1053],["\nName\n",1053],["\nVec2\n",1053],["\nx\n",1053],["\ny\n",1053],["\nColors\n",1053],["\n0\n",1053],["\nr\n",1053],["\ng\n",1053],["\nb\n",1053],["\na\n",1053],["\n1\n",1053],["\nr\n",1053],["\ng\n",1053],["\nb\n",1053],["\na\n",1053],["\nDict\n",1053],["\n5\n",1053],["\nKey\n",1053],["\nValue\n",1053],["Display more details about each property",1053],["Next, let's get the property name of collection items, and the type and value of each property.",1053],["Certain properties have special names, especially when dealing with collection items. Here are the conventions for property names:",1053],["\nFor list items, the name corresponds to the index.\n",1053],["\nFor dictionaries, the name is derived from the string version of the key value.\n",1053],["\nFor sets, the name is based on the string version of the value.\n",1053],["To make this distinction more explicit, encase the property name with square brackets.",1053],["Inside the DumpObjectVisitor class, add the following method:",1053],["```lang-csharp",1053],["private static string GetPropertyName(IProperty property)",1053],["return property switch",1053],["// You can also treat IListElementProperty, IDictionaryElementProperty, and ISetElementProperty separately.",1053],["ICollectionElementProperty => $\"[{property.Name}]\",",1053],["_ => property.Name",1053],["};",1053],["Update the VisitProperty method to use TypeUtility.GetTypeDisplayName to retrieve the display name of a given type.",1053],["```lang-csharp",1053],["protected override void VisitProperty(Property property, ref TContainer container, ref TValue value)",1053],["var propertyName = GetPropertyName(property);",1053],["// Get the concrete type of the property or its declared type if value is null.",1053],["var typeName = TypeUtility.GetTypeDisplayName(value?.GetType() ?? property.DeclaredValueType());",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{typeName}}} {value}\");",1053],["++m_IndentLevel;",1053],["if (null != value)",1053],["PropertyContainer.Accept(this, ref value);",1053],["--m_IndentLevel;",1053],["This gets the following output:",1053],["```lang-text",1053],["\nName = {string} Henry\n",1053],["\nVec2 = {Vector2} (1.00, 1.00)\n",1053],["\nx = {float} 1\n",1053],["\ny = {float} 1\n",1053],["\nColors = {List} System.Collections.Generic.List`1[UnityEngine.Color]\n",1053],["\n[1] = {Color} RGBA(0.000, 1.000, 0.000, 1.000)\n",1053],["\nr = {float} 0\n",1053],["\ng = {float} 1\n",1053],["\nb = {float} 0\n",1053],["\na = {float} 1\n",1053],["\n[1] = {Color} RGBA(1.000, 0.000, 0.000, 1.000)\n",1053],["\nr = {float} 1\n",1053],["\ng = {float} 0\n",1053],["\nb = {float} 0\n",1053],["\na = {float} 1\n",1053],["\nDict = {Dictionary} System.Collections.Generic.Dictionary`2[System.Int32,System.String]\n",1053],["\n[5] = {KeyValuePair} [5, five]\n",1053],["\nKey = {int} 5\n",1053],["\nValue = {string} five\n",1053],["Reduce the amount of information displayed for collection types",1053],["Because List<T> doesn't override the ToString() method, the list value is displayed as System.Collections.Generic.List1[UnityEngine.Color]. To reduce the amount of information displayed, update the VisitProperty to use the TypeTraits.IsContainer utility method to only display the value for types that don't contain sub-properties, such as primitives, enums and strings.",1053],["Inside the DumpObjectVisitor class, update the VisitProperty method to use TypeTraits.IsContainer to determine whether the value is a container type. If it is, display the type name without the value. Otherwise, display the type name and the value.",1053],["```lang-csharp",1053],["protected override void VisitProperty(Property property, ref TContainer container, ref TValue value)",1053],["var propertyName = GetPropertyName(property);",1053],["var type = value?.GetType() ?? property.DeclaredValueType();",1053],["var typeName = TypeUtility.GetTypeDisplayName(type);",1053],["// Only display the values for primitives, enums and strings.",1053],["if (TypeTraits.IsContainer(type))",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} {{{typeName}}}\");",1053],["else",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{typeName}}} {value}\");",1053],["++m_IndentLevel;",1053],["if (null != value)",1053],["PropertyContainer.Accept(this, ref value);",1053],["--m_IndentLevel;",1053],["This gets the following output:",1053],["```lang-text",1053],["\nName = {string} Henry\n",1053],["\nVec2 {Vector2}\n",1053],["\nx = {float} 1\n",1053],["\ny = {float} 1\n",1053],["\nColors {List}\n",1053],["\n[0] {Color}\n",1053],["\nr = {float} 0\n",1053],["\ng = {float} 1\n",1053],["\nb = {float} 0\n",1053],["\na = {float} 1\n",1053],["\n[1] {Color}\n",1053],["\nr = {float} 1\n",1053],["\ng = {float} 0\n",1053],["\nb = {float} 0\n",1053],["\na = {float} 1\n",1053],["\nDict {Dictionary}\n",1053],["\n[5] {KeyValuePair}\n",1053],["\nKey = {int} 5\n",1053],["\nValue = {string} five\n",1053],["Tip**:",1053],["To reduce the amount of information displayed, you can also use the following methods to override a Visit specialization for the collection types:",1053],["```lang-csharp",1053],["protected override void VisitCollection(Property property, ref TContainer container, ref TCollection value) {}",1053],["protected override void VisitList(Property property, ref TContainer container, ref TList value) {}",1053],["protected override void VisitDictionary(Property property, ref TContainer container, ref TDictionary value) {}",1053],["protected override void VisitSet(Property property, ref TContainer container, ref TSet value) {}",1053],["These are similar to the VisitProperty method, but they expose the generic parameters of their respective collections types.",1053],["Add per-type overrides",1053],["Lastly, add per-type overrides to display Vector2 and Color types in a more compact manner.",1053],["Use PropertyVisitor along with IVisitPropertyAdapter. Whenever an adapter is registered for a given type, if the targeted type is encountered during the visitation, the adapter is called instead of the VisitProperty method:",1053],["Inside the DumpObjectVisitor class, add the IVisitPropertyAdapter for Vector2 and Color:",1053],["```lang-csharp",1053],["public class DumpObjectVisitor",1053],[": PropertyVisitor",1053],[", IVisitPropertyAdapter",1053],[", IVisitPropertyAdapter",1053],["public DumpObjectVisitor()",1053],["AddAdapter(this);",1053],["void IVisitPropertyAdapter.Visit(in VisitContext context, ref TContainer container, ref Vector2 value)",1053],["var propertyName = GetPropertyName(context.Property);",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{nameof(Vector2)}}} {value}\");",1053],["void IVisitPropertyAdapter.Visit(in VisitContext context, ref TContainer container, ref Color value)",1053],["var propertyName = GetPropertyName(context.Property);",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{nameof(Color)}}} {value}\");",1053],["The completed DumpObjectVisitor class looks like this:",1053],["```lang-csharp",1053],["public class DumpObjectVisitor",1053],[": PropertyVisitor",1053],[", IVisitPropertyAdapter",1053],[", IVisitPropertyAdapter",1053],["private const int k_InitialIndent = 0;",1053],["// StringBuilder to store the dumped object's properties and values.",1053],["private readonly StringBuilder m_Builder = new StringBuilder();",1053],["private int m_IndentLevel = k_InitialIndent;",1053],["// Helper property to get the current indentation.",1053],["private string Indent => new (' ', m_IndentLevel * 2);",1053],["public DumpObjectVisitor()",1053],["// Constructor, it initializes the DumpObjectVisitor and adds itself as an adapter",1053],["// to handle properties of type Vector2 and Color.",1053],["AddAdapter(this);",1053],["// Reset the visitor, clearing the StringBuilder and setting indentation to initial level.",1053],["public void Reset()",1053],["m_Builder.Clear();",1053],["m_IndentLevel = k_InitialIndent;",1053],["// Get the string representation of the dumped object.",1053],["public string GetDump()",1053],["return m_Builder.ToString();",1053],["// Helper method to get the property name, handling collections and other property types.",1053],["private static string GetPropertyName(IProperty property)",1053],["return property switch",1053],["// If it's a collection element property, display it with brackets",1053],["ICollectionElementProperty => $\"[{property.Name}]\",",1053],["// For other property types, display the name as it is",1053],["_ => property.Name",1053],["};",1053],["// This method is called when visiting each property of an object.",1053],["// It determines the type of the value and formats it accordingly for display.",1053],["protected override void VisitProperty(Property property, ref TContainer container, ref TValue value)",1053],["var propertyName = GetPropertyName(property);",1053],["// Get the type of the value or property.",1053],["var type = value?.GetType() ?? property.DeclaredValueType();",1053],["var typeName = TypeUtility.GetTypeDisplayName(type);",1053],["// Only display the values for primitives, enums, and strings, and treat other types as containers.",1053],["if (TypeTraits.IsContainer(type))",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} {{{typeName}}}\");",1053],["else",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{typeName}}} {value}\");",1053],["// Increase indentation level before visiting child properties (if any).",1053],["++m_IndentLevel;",1053],["if (null != value)",1053],["PropertyContainer.Accept(this, ref value);",1053],["// Decrease indentation level after visiting child properties.",1053],["--m_IndentLevel;",1053],["// This method is a specialized override for Vector2 properties.",1053],["// It displays the property name and its value as a Vector2.",1053],["void IVisitPropertyAdapter.Visit(in VisitContext context, ref TContainer container, ref Vector2 value)",1053],["var propertyName = GetPropertyName(context.Property);",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{nameof(Vector2)}}} {value}\");",1053],["// This method is a specialized override for Color properties.",1053],["// It displays the property name and its value as a Color.",1053],["void IVisitPropertyAdapter.Visit(in VisitContext context, ref TContainer container, ref Color value)",1053],["var propertyName = GetPropertyName(context.Property);",1053],["m_Builder.AppendLine($\"{Indent}- {propertyName} = {{{nameof(Color)}}} {value}\");",1053],["Additional resources",1053],["\nProperty visitors\n",1053],["\nProperty bags\n",1053],["\nProperty paths\n",1053],["\nUse low-level APIs to create a property visitor\n",1053],["Property visitors",1054],["Property visitors are algorithms built on top of the Properties API.",1054],["Concept",1054],["You can use visitors to add functionality to types without the need for direct modifications. You can create highly generic visitors to control both the algorithm itself and the visitation process. This differs from the classic implementation of the visitor pattern, where the visitation typically occurs on a known ahead-of-time type structure. It enables features like serialization, inspector-like UI generation, among others.",1054],["The following is the basic pattern of visitors. It takes place on the property bags and property companion objects.",1054],["An instance of a type accepts a visitor.",1054],["The visitor visits the the property bag of the instance.",1054],["The property bag can loop through its properties and accept the visitor.",1054],["Create a property visitor to get properties",1054],["You can use the following approaches to create your visitors to get properties:",1054],["Use the Unity.Properties.PropertyVisitor base class. Refer to Use PropertyVisitor to create a property visitor for an example.",1054],["Implement the IPropertyBagVisitor and IPropertyVisitor interfaces. Refer to Use low-level APIs to create a property visitor for an example.",1054],["The first approach is the easiest way to get started. However, for more extensive customization of the visitation behavior for both the property bags and the properties, use the second approach, which offers greater flexibility and the potential for performance improvements.",1054],["The following example uses the PropertyVisitor class to create a simple visitor that gets the properties of a given type that are tagged with a certain attribute:",1054],["```lang-csharp",1054],["public class BindableAttribute",1054],[": Attribute",1054],["public class GatherBindablePropertiesVisitor",1054],[": PropertyVisitor",1054],["public List BindableProperties { get; set; }",1054],["protected override void VisitProperty(Property property, ref TContainer container, ref TValue value)",1054],["if (property.HasAttribute())",1054],["BindableProperties.Add(PropertyPath.AppendProperty(default, property));",1054],["The following is the equivalent example that uses the IPropertyBagVisitor interface to create the visitor:",1054],["```lang-csharp",1054],["public class BindableAttribute",1054],[": Attribute",1054],["public class GatherBindablePropertiesVisitor",1054],[": IPropertyBagVisitor",1054],["public List BindableProperties { get; set; }",1054],["void IPropertyBagVisitor.Visit(IPropertyBag propertyBag, ref TContainer container)",1054],["// Loop through the properties of the container object.",1054],["foreach (var property in propertyBag.GetProperties(ref container))",1054],["if (property.HasAttribute())",1054],["BindableProperties.Add(PropertyPath.AppendProperty(default, property));",1054],["The low-level visitor is more performant because it doesn't need to loop through all the properties of the property bag and extract their value. You can also use low-level visitors to visit properties that aren't part of a property bag.",1054],["Performance considerations",1054],["Property bags, properties and visitors are all implemented using generic types so that we can remain as strongly-typed as possible and, in many cases, avoid boxing allocations during visitation. The trade-off of using generic types is that the JIT compiler will generate the IL for a given method the first time it is called. This can result in a slower execution the first time a visitor is accepted on an object.",1054],["Additional resources",1054],["\nProperty bags\n",1054],["\nProperty paths\n",1054],["\nUse PropertyVisitor to create a property visitor\n",1054],["\nUse low-level APIs to create a property visitor\n",1054],["Publishing Builds",1055],["The Build Settings window contains all the settings and options you need to publish your build to a variety of platforms. From this window you can create a Development Build to test your application, as well as publishing a final build.",1055],["To adjust the publishing settings for your application’s build go to File > Build Settings.",1055],["Use the Scenes in Build panel to manage which Scenes Unity includes in the build. You can use the Platform section of the window to select which platform you want to build to, and adjust specific settings such as the Compression Method. These options vary depending on the Platform you select. For more information, see the documentation on Build Settings",1055],["Select the Build or Build And Run button to begin the build process.",1055],["You can choose a name and save location for your application through the Save dialog that appears. Note: depending on the platform you build to, Unity might only prompt you to choose a folder.",1055],["When you select the Save button, Unity builds your application. If you are unsure where to save your build, consider making a subfolder inside your root folder to hold your builds. You cannot save the build into the Assets folder.",1055],["Further information on building games with Unity",1055],["To learn more about constructing Scenes, see documentation on Creating Scenes.",1055],["To learn more about scripting, see documentation on Scripting.",1055],["To learn more about creating art and importing assets, see documentation on Assets Workflow.",1055],["To interact with Unity users and developers, see the Unity Forums.",1055],["Rotation and orientation in Unity",1056],["Unity uses a left-handed coordinate system. In Unity, you can use both Euler angles and quaternions to represent rotations and orientation. These representations are equivalent but have different uses and limitations.",1056],["Typically, you rotate objects in your scene using the Transform component, which displays orientation as a Euler angle. However, Unity stores rotations and orientations internally as quaternions, which can be useful for more complex motions that might otherwise lead to gimbal lock.",1056],["Left-handed coordinate system",1056],["A coordinate system describes the position of objects in a three-dimensional space. Unity uses a left-handed coordinate system: the positive x-axis points to the right, the positive y-axis points up, and the positive z-axis points forward. Unity’s left-handed coordinate system means that the direction of rotation from the positive x-axis to the positive y-axis is counterclockwise when looking along the positive z-axis.",1056],["Euler angles",1056],["In the Transform coordinate, Unity displays rotation with the vector property Transform.eulerAngles X, Y, and Z. Unlike a normal vector, these values actually represent the angle (in degrees) of rotation about the X, Y, and Z axes.",1056],["Euler angle rotations perform three separate rotations around the three axes. Unity performs the Euler rotations sequentially around the z-axis, the x-axis and then the y-axis. This method of rotation is extrinsic rotation; the original coordinate system doesn't change while the rotations occur.",1056],["To rotate a GameObject, you can enter angle values of how far you want each axis to rotate into the Transform component. To rotate your GameObjects with script, use Transform.eulerAngles. If you convert to Euler angles to do calculations and rotations, you risk problems with gimbal lock.",1056],["Gimbal lock",1056],["When an object in 3D space loses a degree of freedom and can only rotate within two dimensions, it's called gimbal lock. Gimbal lock can occur with Euler angles if two axes become parallel.",1056],["If you don't convert the rotational values to Euler angles in your script, the use of quaternions should prevent gimbal lock.",1056],["If you do have problems with gimbal lock, you can avoid Euler angles if you use Transform.RotateAround for rotations. You can also use Quaternion.AngleAxis on each axis and multiply them together (quaternion multiplication applies each rotation in turn).",1056],["Quaternions",1056],["Quaternions provide mathematical notation for unique representations of spatial orientation and rotation in 3D space. A quaternion uses four numbers to encode the direction and angle of rotation around unit axes in 3D. These four values are complex numbers rather than angles or degrees. You can look into the mathematics of quaternions for more information.",1056],["Unity converts rotational values to quaternions to store them because quaternion rotations are efficient and stable to compute. The Unity Editor doesn't display rotations as quaternions because a single quaternion can't represent a rotation greater than 360 degrees about any axis.",1056],["You can use quaternions directly if you use the Quaternion class. If you use script for your rotations, you can use the Quaternion class and functions to create and change rotational values. You can apply values to your rotation as Euler angles but you need to store them as quaternions to avoid problems.",1056],["Convert between Euler angles and quaternions",1056],["To convert between quaternions and Euler angles to view and edit your rotations in your preferred way, you can use script:",1056],["To convert from Euler angles to quaternions, you can use the Quaternion.Euler function.",1056],["To convert a quaternion to Euler angles, you can use the Quaternion.eulerAngles function.",1056],["Additional resources",1056],["2D game development quickstart guide",1057],["2D games in Unity differ on their game perspective and art style. Use this quickstart guide to create a 2D game in Unity.",1057],["Note**: This guide applies to all versions of Unity from 2019 LTS upwards.",1057],["Topic Description ",1057],[":----------------------------------------- :------------------------------------------ ",1057],["Game perspectives for 2D games Choose your game perspective. ",1057],["Art styles for 2D games Choose the art style for your game. ",1057],["Initial setup for 2D games Set up a 2D game. ",1057],["Creating a 2D game Create a 2D game. ",1057],["Additional resources",1057],["\nRuby’s Adventure: 2D Beginner\n",1057],["\nBeginning 2D Game Development\n",1057],["\n2D Learn tutorials\n",1057],["Art styles for 2D games",1058],["Decide what art style you want your game to have. The following table describes the main types of 2D art style:",1058],["Art style / technique Description ",1058],[":------------------------ :----------------------------------------------------------- ",1058],["Minimalist Flat colors, clean lines and high readability, for example a mobile puzzle game. ",1058],["Pixel art Pixelated graphics, for example a retro gaming art style. ",1058],["Illustrative A cartoon, stylized or realistic art style. ",1058],["Pre-rendered 3D Use this technique to create 2D art with 3D tools. You create art that is rendered as Sprites or Sprite sequences. You can use this technique when you need multiple angles of an asset, for example for the 8- or 4-direction Sprite characters used in retro art. ",1058],["Most sections of this guide are relevant for games with any art style. However, this guide does not cover working with pre-rendered 3D assets; to learn more about this see 2D or 3D projects: 2D gameplay with 3D graphics.",1058],["Examples",1058],["See the Mini Metro site.",1058],["See the Phased Unity case study.",1058],["See the Flipping Death Unity case study.",1058],["See the Rise of Kingdoms site.",1058],["Creating a 2D game",1059],["Before you create a 2D game, you need to decide on a game perspective and an art style.",1059],["To create a 2D game, set up your Unity project and then familiarize yourself with the relevant concepts in the following order:",1059],["Fundamentals",1059],["Scripting",1059],["Sprites",1059],["Building in-game environments",1059],["Character animation",1059],["Graphics",1059],["Physics 2D",1059],["Audio",1059],["User interface",1059],["Profiling, optimizing and testing",1059],["Publishing",1059],["",1059],["Fundamentals",1059],["GameObjects are fundamental objects in Unity that represent characters, props, scenery, and more. Every object in your game is a GameObject.",1059],["GameObjects represent the items in your game; the space in which you place them to build your level is called a scene. Scenes in Unity are always 3D; when you make a 2D game in Unity, you typically choose to ignore the third dimension (the z-axis) but you can also use it in special cases, for example when making 2.5D games.",1059],["The behavior of GameObjects is defined by blocks of functionality called components. The following components are fundamental for 2D games:",1059],["\nTransform: the Transform component determines the Position, Rotation, and Scale of each GameObject in the scene. Every GameObject has a Transform component.\n",1059],["\nSprite Renderer: the Sprite Renderer component renders the Sprite and controls how it looks in a scene.\n",1059],["\nCameras: devices that capture and display the world to the player. Marking a Camera as Orthographic removes all perspective from the Camera’s view. This is mostly useful for making isometric or 2D games.\n",1059],["\nCollider 2D: this component defines the shape of a 2D GameObject for the purposes of physical collisions. See 2D Physics.\n",1059],["Components are UI representations of C# classes; you can use scripts to change and interact with components, or create new ones. See the Scripting section for more details.",1059],["",1059],["Scripting",1059],["All 2D games need scripts. Scripts respond to input from the player and arrange for events in the gameplay to happen when they should.",1059],["For details on how to use scripts in Unity see Scripting Overview. Also see the Unity Learn Beginner Scripting course.",1059],["Scripts are attached to GameObjects, and any script you create inherits from the MonoBehaviour class.",1059],["",1059],["Sprites",1059],["Sprites are 2D graphic objects. You use Sprites for all types of 2D games. For example, you can import an image of your main character as a Sprite.",1059],["You can also use a collection of Sprites to build a character. This allows you greater control over the movement and animation of your characters.",1059],["Importing and setting up Sprites",1059],["Import your Sprites with Unity’s recommended settings; see Importing and Setting Up Sprites.",1059],["Rendering Sprites",1059],["Use the Sprite Renderer component to render your Sprites. For example, you can use the Sprite Renderer to change the color and opacity of a Sprite.",1059],["See the Introduction to the Sprite Renderer Learn tutorial. Sorting SpritesBy organizing Sprites in layers, you can create an illusion of depth. You can sort Sprites according to many strategies. See Sorting Sprites for full details. For example, you might sort Sprites along the y-axis, so that Sprites that are higher up are sorted behind Sprites that are lower, to make the Sprites that are higher appear further away than the Sprites that are lower.",1059],["To set the overlay order of Sprites, use Sorting Layers.",1059],["To group GameObjects with Sprite Renderers, and control the order in which they render their Sprites, use Sorting Groups.",1059],["Sprite Atlas",1059],["You can use a Sprite Atlas to consolidate several Textures into a single combined Texture. This optimizes your game and saves memory. For example, you can add all your Sprites associated with a particular character or purpose to a Sprite Atlas.",1059],["See the Introduction to the Sprite Atlas Learn tutorial.",1059],["",1059],["Building in-game environments",1059],["Environment design refers to the process of building your game's levels and environments. You can combine the environment design tools in this section in whichever way makes the most sense for your game; for example, you can make a top-down game using only 9-slice, or you can make a side on platformer with Tilemap and SpriteShape.",1059],["",1059],["9-slicing",1059],["9-slicing is a 2D technique that allows you to reuse an image at various sizes without needing to prepare multiple assets. Unity can dynamically stretch and tile designated parts of a Sprite to allow one Sprite to serve as the border or background for UI elements of many sizes. See 9-slicing sprites.",1059],["For example, you could use 9-slicing to stretch a Sprite to shape when you build a 2D level.",1059],["See the Using 9-Slicing for Scalable Sprites Learn tutorial.",1059],["",1059],["Tilemap",1059],["The Tilemap component is a system that stores and handles Tile assets for creating 2D levels. Use the 2D Tilemap Editor package (installed by default) to use Tilemaps.",1059],["For example, you can use Tilemaps to paint levels using Tiles and brush tools and define rules for how Tiles behave.",1059],["See the Introduction to Tilemaps Learn tutorial.",1059],["2D Tilemap Extras",1059],["To add some extra Tilemap assets to your Project, install the 2D Tilemap Extras package. This package contains reusable 2D and Tilemap Editor scripts that you can use for your own Projects. You can customize the behavior of the scripts to create new Brushes that suit different scenarios.",1059],["",1059],["Isometric Tilemaps",1059],["For games with isometric perspective, you can create Isometric Tilemaps.",1059],["SpriteShape",1059],["In a similar way to a vector drawing tool, SpriteShape provides a more flexible way to create larger Sprites, such as organic-looking landscapes and paths. See the Sprite Shape Profile.",1059],["See the Working with SpriteShape tutorial.",1059],["",1059],["Character animation",1059],["There are three different ways you can animate 2D characters:",1059],["2D animation type Used for ",1059],[":---------------- :----------------------------------------------------------- ",1059],["Frame-by-frame Artistic reasons, if you want your game to have a classic animation art style. Frame-by-frame animation is relatively resource-intensive, both to make and to run. ",1059],["Cutout Smooth skeletal animation, when the characters don't require realistic articulation. ",1059],["Skeletal Smooth skeletal animation where Sprites bend according to the bone structure. Use this when the characters need a more organic feel. ",1059],["Frame-by-frame",1059],["Frame-by-frame animation is based on the traditional cel animation technique of drawing each moment of an animation as individual images, which are played in fast sequence, like flipping pages on a flipbook.",1059],["To do frame-by-frame animation, follow the Frame-by-frame Animation workflow.",1059],["See the Introduction to Sprite Animations Learn tutorial.",1059],["Cutout",1059],["In cutout animation, multiple Sprites make up the body of a character, and each piece moves to give the visual effect of the whole character moving. This animation style is similar to skeletal animation (see below), except that the Sprites don’t bend.",1059],["Skeletal",1059],["With skeletal animation, you map a Sprite or a group of Sprites onto an animation skeleton. You can create and define animation bones for characters and objects, that define how they should bend and move. This approach allows the bones to bend and deform the Sprites, for a more natural movement style. To use skeletal animation, you need to use the 2D Animation package (installed by default).",1059],["For a 2D Animation workflow, including a guide to working with the Bone Editor, see the 2D Animation documentation.",1059],["",1059],["Graphics",1059],["This section describes your graphics options when using Universal Render Pipeline (URP).",1059],["Lighting",1059],["Because you’re using URP with the 2D Renderer, you can use the Light 2D component to apply optimized 2D lighting to Sprites. For details, see Introduction to Lights 2D.",1059],["To set up lighting:",1059],["Prepare your Sprites for lighting. For details, see Preparing Sprites for Lighting.",1059],["Set up normal map and mask Textures. 2D Lights can interact with normal map and mask Textures linked to Sprites to create advanced lighting effects, such as normal mapping. See Setting up normal map and mask Textures.",1059],["Create a 2D Light GameObject; see 2D Lights Properties.",1059],["Configure the 2D Renderer Data asset; see Configuring the 2D Renderer Asset.",1059],["(Optional) if you want to apply 2D Light effects to a pixel art game, see 2D Pixel Perfect.",1059],["See the Lighting in URP Learn tutorial.",1059],["Shadows",1059],["To define the shape and properties that a Light uses to determine the shadows it casts, use the Shadow Caster 2D component. Increase the Light’s Shadow Intensity above zero.",1059],["Enhanced look and feel",1059],["Particle systems and post-processing are optional tools that you can use to add polish to your game.",1059],["Particle systems",1059],["You can use particle systems to create dynamic objects like fire, smoke or liquids, as an alternative to using a Sprite. Sprites are more suited to physical objects. See Particle systems.",1059],["Post-processing",1059],["You can use post-processing effects and full-screen effects to significantly improve the appearance of your game. For example, you can use these effects to simulate physical camera or film properties, or to create stylized visuals.",1059],["URP has its own post-processing implementation. See Post-processing in the Universal Render Pipeline.",1059],["",1059],["Physics 2D",1059],["The Physics 2D settings define limits on the accuracy of the physical simulation in your 2D game. See 2D Physics.",1059],["This video provides an overview of 2D physics features in Unity 2020.1.",1059],["To learn how to use Unity’s 2D physics engine, see the 2D Physics Learn tutorial.",1059],["The following 2D physics tools are useful for 2D games.",1059],["\nRigidbody 2D\n",1059],["\nCollider 2D\n",1059],["\nTriggers\n",1059],["\n2D Joints\n",1059],["\n2D Effectors\n",1059],["Rigidbody 2D",1059],["A Rigidbody 2D component places a GameObject under the control of the physics engine. See Rigidbody 2D.",1059],["Collider 2D",1059],["Collider 2D components define the shape of a 2D GameObject for the purposes of physical collisions. You can also use Collider 2D components for input detection. For example, in mobile games you can use them to make Sprites selectable.",1059],["The Collider 2D types that you can use with Rigidbody 2D are:",1059],["\nCircle Collider 2D\n",1059],["\nBox Collider 2D\n",1059],["\nPolygon Collider 2D\n",1059],["\nEdge Collider 2D\n",1059],["\nCapsule Collider 2D\n",1059],["\nComposite Collider 2D\n",1059],["Triggers",1059],["When you set a Collider 2D as a Trigger (by enabling its Is Trigger property), it no longer behaves as a physical object, and it can intersect with other Colliders without causing a collision. Instead, when a Collider enters its space, Unity calls the OnTriggerEnter function on the Trigger GameObject’s scripts.",1059],["2D Joints",1059],["Joints attach GameObjects together. You can only attach 2D joints to GameObjects that have a Rigidbody 2D component attached, or to a fixed position in world space. See 2D Joints.",1059],["2D Effectors",1059],["Use Effector 2D components with Collider 2D components to direct the forces of physics in your scene when GameObject Colliders come into contact with each other. See 2D Effectors.",1059],["",1059],["Audio",1059],["You can add background music and sound effects to your game in Unity; see Audio Overview. Use third-party software to create your audio and import it into Unity with the recommended settings.",1059],["",1059],["User interface",1059],["If you want to add a menu or help to your game, you need to set up a user interface. To set up a user interface, use Unity UI.",1059],["",1059],["Profiling, optimizing and testing a build",1059],["Profiling",1059],["Profiling allows you to see how resource-intensive the different parts of your game are. You should always profile your game on its target release platform; see Profiling your application.",1059],["Optimizing",1059],["After profiling, you can use the results to make performance improvements and optimizations. See Understanding optimization in Unity.",1059],["Testing",1059],["Test your game and your code with the Unity Test Framework; see Unity Test Framework.",1059],["Publishing",1059],["When you’ve finished your game, you’re ready to publish it. See Publishing Builds.",1059],["Game perspectives for 2D games",1060],["Decide what game perspective or viewpoint you want your game to have. The following table describes the main types of 2D game perspective:",1060],["Game perspective Description ",1060],[":-------------------------------------- :----------------------------------------------------------- ",1060],["Top-down A 2D game that provides an overhead or bird’s-eye view of the action. ",1060],["Side-on A 2D game where the character moves left or right (or up and down) and the screen scrolls with them. The perspective is from the side. ",1060],["Isometric and 2.5D (three-quarter view) 2D games with isometric view simulate 3D geometry and a depth axis, but use an orthographic Camera instead of a perspective Camera. This gives the player a bird’s-eye view of the action. For information on orthographic and perspective Cameras, see Cameras.2.5D (also known as three-quarter view) games are 2D games that use 3D geometry for the environment and characters, but restrict the gameplay to two dimensions. The 3D effect has a visual rather than functional purpose. ",1060],["Many sections of this guide are relevant for all game perspectives. For top-down and side-on perspectives, the Tilemap and 9-slicing tools are especially useful for designing your levels. For isometric, three-quarter view or 2.5D perspectives, the Isometric Tilemaps tool is especially useful.",1060],["Examples",1060],["Initial setup for 2D games",1061],["Note**: For this guide, Unity recommends and assumes that you choose the Universal Render Pipeline (URP) and not the Built-in Render Pipeline.",1061],["Install Unity version 2019 LTS or a later version; see Installing Unity.",1061],["Create a new project with the 2D template.",1061],["In the Package Manager, install the latest URP package version; see Installing the Universal Render Pipeline into an existing Project.",1061],["Set up a 2D Renderer; see the 2D Renderer Setup steps.",1061],["Install any optional packages you need; see Installing packages.",1061],["",1061],["Installing packages",1061],["Most packages you need to make a 2D game in Unity are included in the Unity Editor. The following table lists the packages included by default when you choose the 2D template:",1061],["Package Description ",1061],[":----------------------------------------------------------- :----------------------------------------------------------- ",1061],["2D Animation 2D Animation provides the necessary tooling and runtime components for applying skeletal animation to your Sprites. ",1061],["2D Pixel Perfect The 2D Pixel Perfect package contains the Pixel Perfect Camera component, which ensures your pixel art remains crisp and clear at different resolutions, and stable in motion. ",1061],["2D PSD Importer The 2D PSD Importer package allows you to import multilayered PSD files from Photoshop. You can use this for your Sprites, or to rig your characters. ",1061],["2D Sprite The Sprite Editor provides an in-Editor environment to create and edit Sprite assets. Sprite Editor lets you add custom behavior for editing Sprite-related data. ",1061],["2D SpriteShape 2D Sprite Shape allows you to create organic shapes and terrains, similar to a vector drawing tool. For example, you can choose the fill texture and border Sprites. ",1061],["2D Tilemap Editor 2D Tilemap Editor allows you to create grid-based worlds with square, hexagonal or isometric tiles. Add your Tiles to the Tile Palette, and paint and fill Tile Grids using different settings and brushes. Extra tools let you add smart drawing, randomization or animation to the Tile assets. ",1061],["The following table lists some optional packages you can install that might be particularly useful for 2D game development:",1061],["Package Description ",1061],[":----------------------------------------------------------- :----------------------------------------------------------- ",1061],["Shader Graph Shader Graph lets you build your shaders visually. ",1061],["Cinemachine The Cinemachine package is a suite of modules that provide advanced functionality for operating the Unity Camera. ",1061],["2D Tilemap Extras The 2D Tilemap Extras package contains reusable 2D and Tilemap Editor scripts that you can use for your own Projects. ",1061],["3D game development quickstart guide",1062],["This quickstart guide provides a workflow for 3D game developers creating a 3D game in Unity.",1062],["Note:** This guide applies to all versions of Unity from 2019 LTS upwards.",1062],["This quickstart guide helps you:",1062],["For detailed 3D game tutorials, see the following Unity Learn materials:",1062],["Beginning 3D Development Learn Course",1062],["See all 3D Learn Tutorials",1062],["",1062],["Initial setup",1062],["Note:** For this guide, Unity recommends and assumes that you choose the Universal Render Pipeline (URP) and not the Built-in Render Pipeline.",1062],["Install Unity version 2019 LTS or a later version. See Installing Unity.",1062],["Create a project and select the Universal Render Pipeline template. See Templates in the Hub documentation.",1062],["For help familiarizing yourself with Unity and getting set up, see the Unity Learn Unity Essentials pathway.",1062],["Creating a 3D game",1063],["",1063],["To create a 3D game, set up your Unity project and then familiarize yourself with the relevant concepts in the following order:",1063],["",1063],["Fundamentals",1063],["GameObjects are fundamental objects in Unity that represent characters, props, scenery, and more. Every object in your game is a GameObject.",1063],["GameObjects live in 3D environments called scenes. You can think of a scene as a game level, but it might also represent a menu, the credits at the end of the game or something else entirely.",1063],["The behavior of GameObjects is defined by blocks of functionality called components. You can attach multiple components to GameObjects. The following components are fundamental for 3D games:",1063],["Transform: the Transform component determines the Position, Rotation, and Scale of each GameObject in the scene. Every GameObject has a Transform component.",1063],["Mesh Filter: this component defines the shape of a 3D GameObject.",1063],["Mesh Renderer: this component defines how the 3D shape defined by the Mesh Filter looks.",1063],["Cameras: specially-configured GameObjects that capture and display the world to the player.",1063],["Rigidbody: Rigidbodies allow GameObjects to interact with the Physics system, including gravity and collisions. See the Physics section of this guide.",1063],["Colliders: this component defines the shape of a 3D GameObject for the purpose of physical collisions.",1063],["",1063],["Scripting",1063],["Unity allows you to create your own Components using scripts. Scripts let you trigger game events, modify Component properties over time and respond to user input.",1063],["Unity supports the C# programming language natively.",1063],["Here some examples of how you can use scripts in your game:",1063],["To receive input from the player and have a GameObject move or act based on that input.",1063],["To set win and lose states which open relevant win or lose scenes to create a full game loop.",1063],["To affect the components of GameObjects, such as their transform, animation, or renderer, based on other variables.",1063],["For details on how to use scripts in Unity, see Scripting Overview.",1063],["To learn the fundamentals of scripting, follow the Unity Learn Beginner Scripting course.",1063],["For more in-depth guidance, see the example projects Create with Code and Creator Kit: Beginner Code.",1063],["",1063],["3D Assets",1063],["Models are 3D representations of objects. The majority of the visuals for 3D games consist of models, such as characters, interactable objects, and the world around the player.",1063],["You can use tools like Probuilder to create models in Unity. However, these work best for prototyping, rather than for the final product.",1063],["To add more polished 3D assets to your final product, create 3D Models, Materials and Textures in 3D modeling software and then import them into Unity.",1063],["Importing 3D Model Files",1063],["Unity uses the .fbx model format. You can also use other common native model formats (for example, .max, .blend, .mb, .ma), and Unity converts them into .fbx once they are imported.",1063],["Import models into Unity to use them in your project.",1063],["Rendering Meshes",1063],["A 3D mesh is the structural build of a 3D model. It is made up of multiple polygon shapes. To add a 3D model to a GameObject, add a Mesh Filter to the GameObject. The Mesh Renderer component renders meshes in your scene; to ensure models appear in your game, add a Mesh Renderer to any GameObject that has a Mesh Filter component.",1063],["Materials",1063],["Materials combine information about the visual appearance of a surface, such as Textures, color tints, and Shaders. Use Materials to define how to render surfaces.",1063],["Textures are any 2D image files that you import into Unity. Use Textures to wrap a mesh and add fine detail to a model.",1063],["Use Color tints to alter the color of the texture.",1063],["Shaders are a series of instructions which determine how Unity displays GameObjects on screen. Use Shaders to affect how Unity renders each pixel based on lighting input and Material configuration.",1063],["See the Learn Tutorial on Material Design.",1063],["",1063],["Building in-game environments",1063],["Environment design is the process of creating an environment for gameplay to take place in. You might design and build your environment at the same time in the Unity Editor, or you might design an environment outside of Unity and then build it in Unity.",1063],["To build an in-game environment, you add GameObjects to the scene and position them to suit your preference and design.",1063],["In addition to hand-placing your models in the scene, the Unity Editor includes a built-in set of Terrain features that allow you to add landscapes to your game. In the Editor, you can create multiple Terrain tiles, adjust the height or appearance of your landscape, and add trees or grass to it. Read more about Creating and Using Terrains.",1063],["",1063],["Animation",1063],["You can import animations made in other programs, or animate your assets directly in the Editor.",1063],["For more information on 3D animation, see the Unity Learn Course Introduction to 3D Animation Systems.",1063],["Importing Animations",1063],["Unity can import animation clips when you import a model with animation. This means you can animate models in another program and then access and manipulate the clips in Unity.",1063],["Animating Models in Unity",1063],["Use the Animation window to create and modify Animation Clips directly inside Unity.",1063],["Use Keyframe animation to add simple animations to a GameObject within your scene, such as changing its position, size, or rotation.",1063],["Controlling animations",1063],["To control which Animation Clips play, you can call them directly in a script with the Animator Class, or create and modify the Animator Controller in the Animator window.",1063],["You can use the Animator window to:",1063],["Create and set up the Animation Controller",1063],["Create Animator States with Animation Clips",1063],["Create Animator Parameters, which scripts can access or assign values to",1063],["Create Animator Transitions which specify conditions (based on parameters) for when a State should change and how long the blend between states should take",1063],["",1063],["Graphics",1063],["Lighting",1063],["Light your Scenes to add depth and mood to your environments and to help the player experience the game world you’ve created.",1063],["To set up lighting:",1063],["Create a Light. Right-click in the Hierarchy window to open the GameObject menu, select Light, and select a type of Light to add to your scene. See Types of Light.",1063],["Place your Lights in the Scene. Adjust the color, intensity, and placement of your Lights until you achieve the desired effect. See Using Lights.",1063],["Perfect your lighting. For example, you can choose a different Light mode, or add a cookie mask to create shadows.",1063],["See the Unity Learn Lighting in URP tutorial.",1063],["",1063],["Audio",1063],["You can add background music and sound effects to your game in Unity; see Audio Overview. Use third-party software to create your audio and import it into Unity with the recommended settings.",1063],["",1063],["Physics",1063],["Use Unity’s physics engine to control how GameObjects interact. You can use this to replicate forces such as gravity and mechanics, which define how GameObjects behave on collision in the real world. You can also configure the physics settings to create custom physics to fit the design of your game, which might not be an accurate simulation of the real world.",1063],["To learn how to use Unity’s physics engine, see the Unity Learn Physics tutorial. See the Physics section of the User Manual for more information.",1063],["To set up Physics for your GameObjects:",1063],["To allow your GameObject to be affected by the Physics system, and react to things like gravity and collisions, add a Rigidbody component.",1063],["Use Colliders to enable GameObjects to interact with other GameObjects in the scene. For example, GameObjects with a collider can move or be moved by another GameObject with a collider.",1063],["To be able to call a function in code when two GameObjects intersect, add a Collider and make it a trigger.",1063],["",1063],["User Interface",1063],["If you want to add a menu or help to your game, you need to set up a user interface. To set up a user interface, use Unity UI.",1063],["Quickstart guides",1064],["Quickstart guides provide a workflow to help you start using Unity.",1064],["The following quickstart guides are currently available:",1064],["Ragdoll physics",1065],["Ragdoll physics are a set of colliders, rigid bodies and joints that you can apply to a humanoid character, to simulate behaviour such as impact collisions and character death.",1065],["Unity provides a Ragdoll Wizard that allows you to configure ragdoll physics behaviours on your character.",1065],["Topic Description ",1065],[":-------------------- :----------------------- ",1065],["Create a ragdoll Walkthrough of how to use the Unity Ragdoll Wizard to create and configure a ragdoll. ",1065],["Joint and ragdoll stability Tips for configuring your ragdoll for good joint and ragdoll stability. ",1065],["Joint and Ragdoll stability",1066],["This page provides tips for improving Joint and Ragdoll stability.",1066],["Avoid small Joint angles of Angular Y Limit and Angular Z Limit. Depending on your setup, the minimum angles should be around 5 to 15 degrees in order to be stable. Instead of using a small angle, try setting the angle to zero. This locks the axis and provide a stable simulation.",1066],["Uncheck the Joint's Enable Preprocessing property. Disabling preprocessing can help prevent Joints from separating or moving erratically if they are forced into situations where there is no possible way to satisfy the Joint constraints. This can occur if Rigidbody components connected by Joints are pulled apart by static collision geometry (for example, spawning a Ragdoll partially inside a wall).",1066],["Under extreme circumstances (such as spawning partially inside a wall or pushed with a large force), the joint solver is unable to keep the Rigidbody components of a Ragdoll together. This can result in stretching. To handle this, enable projection on the Joints using either ConfigurableJoint.projectionMode or CharacterJoint.enableProjection.",1066],["If Rigidbody components connected with Joints are jittering, open the Physics window (Edit > Project Settings, then select the Physics category) and try increasing the Default Solver Iterations value to between 10 and 20.",1066],["If Rigidbody components connected with Joints are not accurately responding to bounces, open the Physics window (Edit > Project Settings, then select the Physicscategory) and try increasing the Default Solver Velocity Iterations value to between 10 and 20.",1066],["Never use direct Transform access with Kinematic Rigidbody components connected by Joints to other Rigidbody components. Doing so skips the step where PhysX computes internal velocities of corresponding Rigidbody components, making the solver provide unwanted results. A common example of bad practice is using direct Transform access in 2D projects to flip characters, by altering Transform.TransformDirection on the root bone of the rig. This behaves much better if you use Rigidbody2D.MovePosition and Rigidbody2D.MoveRotation instead.",1066],["Avoid large differences in the masses between Rigidbody components connected by Joints. It's okay to have one Rigidbody with twice as much mass as another, but when one mass is ten times larger than the other, the simulation can become jittery.",1066],["Try to avoid scaling different from 1 in the Transform containing Rigidbody or the Joint. The scaling might not be robust in all cases.",1066],["If Rigidbody components are overlapping when inserted into the world, and you cannot avoid the overlap, try lowering the Rigidbody.maxDepenetrationVelocity to make the Rigidbody components exit each other more smoothly.",1066],["Raycasters",1067],["The Event System needs a method for detecting where current input events need to be sent to, and this is provided by the Raycasters. Given a screen space position they will collect all potential targets, figure out if they are under the given position, and then return the object that is closest to the screen. There are a few types of Raycasters that are provided:",1067],["\nGraphic Raycaster - Used for UI elements, lives on a Canvas and searches within the canvas\n",1067],["\nPhysics 2D Raycaster - Used for 2D physics elements\n",1067],["\nPhysics Raycaster - Used for 3D physics elements\n",1067],["When a Raycaster is present and enabled in the scene it will be used by the Event System whenever a query is issued from an Input Module.",1067],["If multiple Raycasters are used then they will all have casting happen against them and the results will be sorted based on distance to the elements.",1067],["Realtime Global Illumination using Enlighten",1068],["Unity uses a middleware solution called Enlighten for Realtime Global Illumination.",1068],["By default, Realtime Lights contribute only direct lighting to a Scene. If you enable Realtime Global Illumination (Enlighten Realtime Global Illumination) in your Scene, Realtime Lights also contribute indirect lighting to a Scene.",1068],["Render pipeline support",1068],["See render pipeline feature comparison for more information about support for Realtime Global Illumination using Enlighten across render pipelines.",1068],["When to use Enlighten Realtime Global Illumination",1068],["Enlighten Realtime Global Illumination (Realtime GI) is useful for Lights that change slowly and have a significant visual impact on your Scene, such as the sun moving across the sky, or a slowly pulsating light in a closed corridor. This feature is not intended for special effects or Lights that change quickly, because latency and the number of CPU cycles needed make that sort of application impractical. Enlighten Realtime Global Illumination is suitable for games targeting mid-level to high-end PC systems and consoles. Some high-end mobile devices may also be powerful enough to make use of this feature, but you should keep Scenes small and the resolution for real-time lightmaps low to ensure acceptable performance.",1068],["Using Enlighten Realtime Global Illumination",1068],["To enable Enlighten Realtime Global Illumination in your Scene, open the Lighting window (menu: Window > Rendering > Lighting) and enable Realtime Global Illumination.",1068],["To disable the effect of Realtime GI on a specific Light, select the Light GameObject and, in the Light component, set the Indirect Multiplier to 0. This means that the Light doesn't contribute any indirect light to the Scene.",1068],["To disable Realtime GI altogether, open the Lighting window (menu: Window > Rendering > Lighting) and uncheck Realtime Global Illumination.",1068],["For detailed step-by-step advice on using Enlighten Realtime Global Illumination, see the Unity tutorial on Precomputed Realtime GI.",1068],["How Enlighten Realtime Global Illumination works",1068],["Enlighten Realtime Global Illumination splits the Scene into small surface patches and determines the degree to which these patches are visible to each other. At runtime, Enlighten Realtime Global Illumination uses this precomputed visibility information to approximate how Realtime Lights bounce in the Scene, saves the results in a set of lightmaps, and then uses these lightmaps to apply indirect lighting to the Scene.",1068],["It is computationally intensive to update the lightmaps, and so the process is split across several frames. It takes Enlighten Realtime Global Illumination several frames to propagate changes to indirect lighting throughout the Scene.",1068],["Light Probes and Enlighten Realtime Global Illumination",1068],["Note that Light Probes behave differently when you enable Enlighten Realtime Global Illumination.",1068],["In order to react to runtime changes in Scene lighting, they sample lighting iteratively at runtime.",1068],["When you disable Enlighten Realtime Global Illumination in a Scene, Light Probes only use baked lighting data. This means that they don’t react to runtime changes in Scene lighting.",1068],["Shadows and Enlighten Realtime Global Illumination",1068],["If a Light also casts shadows, Unity renders both dynamic and static GameObjects in the Scene into the Light’s shadow map. The Material Shaders of both static and dynamic GameObjects sample this shadow map so that these GameObjects cast real-time shadows onto each other. The Shadow Distance setting determines the maximum distance at which shadows begin to fade out and disappear entirely, which in turn affects performance and image quality.",1068],["Enlighten Realtime Global Illumination results also include soft shadows, unless the Scene is very small. These shadows are typically more coarse-grained than what lightmapping can achieve.",1068],["To modify Shadow Distance settings, navigate to Edit > Project Settings > Quality > Shadows.",1068],["Performance considerations",1068],["Enlighten Realtime Global Illumination uses a set of lightmaps to store real-time indirect bounces. For this reason, enabling it increases memory requirements, even if you are using it along with Baked Global Illumination.",1068],["The number of shader calculations needed to generate lighting also increases when you use Enlighten Realtime Global Illumination because it samples an additional set of lightmaps and Light Probes.",1068],["Optimizing Enlighten Realtime Global Illumination",1068],["If Enlighten Realtime Global Illumination doesn't respond quickly enough to changes in your Scene lighting, there are several ways to address this problem:",1068],["Reduce the real-time lightmap resolution to speed up calculation at runtime.",1068],["Increase the CPU Usage setting for Realtime GI in the Quality Settings window. The tradeoff is that other systems receive less CPU time to do their work. Whether this is acceptable depends on your Project. This is a per-Scene setting, so you can dedicate more or less CPU time based on the complexity of each individual Scene in your Project.",1068],["Disabling the default environment contribution",1068],["Unity automatically generates an ambient probe and a default Reflection Probe to ensure that environment lighting affects your scene and the GameObjects in it by default.",1068],["To disable the environment contribution in the lighting result for a scene or GameObject that does not have manually created light maps and Light Probes, disable the default Reflection Probe and the ambient probe. For more information, see Disabling the SkyManager.",1068],["Reducing the file size of your build",1069],["Keeping the file size of the built app to a minimum is important, especially for mobile devices or for app stores that impose a size limit. The first step in reducing the size is to determine which Assets contribute most to it, because these Assets are the most likely candidates for optimization. This information is available in the Editor Log just after you have performed the build. Go to the Console window (menu: Window > General > Console), click the small drop-down panel in the top right, and select Open Editor Log.",1069],["The Editor Log provides a summary of Assets broken down by type, and then lists all the individual Assets in order of size contribution. Typically, things like Textures, Sounds and Animations take up the most storage, while Scripts, Levels and Shaders usually have the smallest impact. The File headers mentioned in the list are not Assets - they are actually the extra data that is added to \"raw\" Asset files to store references and settings. The headers normally make very little difference to Asset size, but the value might be large if you have numerous large Assets in the Resources folder.",1069],["The Editor Log helps you identify Assets that you might want to remove or optimize, but you should consider the following before you start:",1069],["Unity re-codes imported Assets into its own internal formats, so the choice of source Asset type is not relevant. For example, if you have a multi-layer Photoshop Texture in the Project, it is flattened and compressed before building. Exporting the Texture as a .png file does not make any difference to build size, so you should stick to the format that is most convenient for you during development.",1069],["Unity strips most unused Assets during the build, so you don’t gain anything by manually removing Assets from the Project. The only Assets that are not removed are scripts (which are generally very small anyway) and Assets in the Resources folder (because Unity can’t determine which of these are needed and which are not). With this in mind, you should make sure that the only Assets in the Resources folder are the ones you need for the game. You might be able to replace Assets in the Resources folder with AssetBundles - this means that Unity loads Assets dynamically, thereby reducing the player size.",1069],["Suggestions for reducing build size",1069],["Textures",1069],["Textures usually take up the most space in the build. The first solution to this is to use compressed Texture formats. See documentation on platform-specific Texture compression for more information.",1069],["If that doesn’t reduce the file size enough, try to reduce the physical size (in pixels) of the Texture images. To do this without modifying the actual source content, select the Texture in the Project view, and in the Inspector window reduce the Max Size. To see how this looks in-game, zoom in on a GameObject that uses the Texture, then adjust the Max Size until it starts looking worse in the Scene view. Changing the maximum Texture size does not affect your Texture Asset, just its resolution in the game.",1069],["By default, Unity compresses all Textures when importing. For faster workflow in the Editor, go to Unity < Preferences and untick the checkbox for Compress Assets on Import. All Textures are compressed in the build, regardless of this setting.",1069],["Meshes and Animations",1069],["You can compress Meshes and imported Animation Clips so that they take up less space in your game file. To enable Mesh compression, select the Mesh, then in the Inspector window set the Mesh Compression to Low, Medium or High. Mesh and Animation compression uses quantization, which means it takes less space, but the compression can introduce some inaccuracies. Experiment with what level of compression is acceptable for your models.",1069],["Note that Mesh compression only produces smaller data files, and does not use less memory at run time. Animation keyframe reduction produces smaller data files and uses less memory at run time; generally you should always have it enabled. See documentation on Animation Clips for more information about this.",1069],["Reducing .NET library size",1069],["Unity supports two .NET API compatibility levels.: .NET 4.x and .NET Standard 2.0. The .NET Standard 2.0 restricts you to a smaller subset of the .NET API, which can help keep size down.",1069],["Reflection Probes",1070],["CG films and animations commonly feature highly realistic reflections, which are important for giving a sense of \"connectedness\" among the objects in the scene. However, the accuracy of these reflections comes with a high cost in processor time and while this is not a problem for films, it severely limits the use of reflective objects in real-time games.",1070],["Traditionally, games have used a technique called reflection mapping to simulate reflections from objects while keeping the processing overhead to an acceptable level. This technique assumes that all reflective objects in the scene can \"see\" (and therefore reflect) the exact same surroundings. This works quite well for the game's main character (a shiny car, say) if it is in open space but is unconvincing when the character passes into different surroundings; it looks strange if a car drives into a tunnel but the sky is still visibly reflected in its windows.",1070],["Unity improves on basic reflection mapping through the use of Reflection Probes, which allow the visual environment to be sampled at strategic points in the scene. You should generally place them at every point where the appearance of a reflective object would change noticeably (eg, tunnels, areas near buildings and places where the ground colour changes). When a reflective object passes near to a probe, the reflection sampled by the probe can be used for the object's reflection map. Furthermore, when several probes are nearby, Unity can interpolate between them to allow for gradual changes in reflections. Thus, the use of reflection probes can create quite convincing reflections with an acceptable processing overhead.",1070],["How Reflection Probes Work",1070],["The visual environment for a point in the scene can be represented by a cubemap. This is conceptually like a box with flat images of the view from six directions (up, down, left, right, forward and backward) painted on its interior surfaces.",1070],["For an object to show the reflections, its shader must have access to the images representing the cubemap. Each point of the object's surface can \"see\" a small area of cubemap in the direction the surface faces (ie, the direction of the surface normal vector). The shader uses the colour of the cubemap at this point in calculating what colour the object's surface should be; a mirror material might reflect the colour exactly while a shiny car might fade and tint it somewhat.",1070],["As mentioned above, traditional reflection mapping makes use of only a single cubemap to represent the surroundings for the whole scene. The cubemap can be painted by an artist or it can be obtained by taking six \"snapshots\" from a point in the scene, with one shot for each cube face. Reflection probes improve on this by allowing you to set up many predefined points in the scene where cubemap snapshots can be taken. You can therefore record the surrounding view at any point in the scene where the reflections differ noticeably.",1070],["In addition to its view point, a probe also has a zone of effect defined by an invisible box shape in the scene. A reflective object that passes within a probe's zone has its reflection cubemap supplied temporarily by that probe. As the object moves from one zone to another, the cubemap changes accordingly.",1070],["Reflection Probe performance",1071],["Rendering a reflection probe’s cubemap takes a significant amount of processor time for a number of reasons:",1071],["Each of the six cubemap faces must be rendered separately using a \"camera\" at the probe’s origin.",1071],["The probes will need to be rendered a separate time for each reflection bounce level (see documentation on Advanced Reflection Probes for further details).",1071],["The various mipmap levels of the cubemap must undergo a blurring process to allow for glossy reflections.",1071],["The time taken to render the probes affects the baking workflow in the editor and, more importantly, runtime performance of the player. Below are some tips for keeping the performance impact of reflection probes to a minimum.",1071],["General tips",1071],["The following issues affect both offline baking and runtime performance.",1071],["Resolution",1071],["The higher the resolution of a cubemap, the greater its rendering time will be. You can optimise probes by setting lower resolutions in places where the reflection detail is less important (for example, if a reflective object is small and/or distant then it will naturally show less detail). Higher resolutions should still be used wherever the detail will be noticeable.",1071],["Culling Mask",1071],["A standard technique to improve a normal camera’s performance is to use the Culling Mask property to avoid rendering insignificant objects; the technique works equally well for reflection probes. For example, if your Scene contains many small objects (eg, rocks and plants) you might consider putting them all on the same layer and then using the culling mask to avoid rendering them in the reflection.",1071],["Texture compression",1071],["To optimize the rendering time and lower the GPU memory consumption, use texture compression. To control texture compression for baked Reflection Probes, open the Lighting window (menu: Window > Rendering > Lighting), navigate to Environmental Lighting > Reflections and use the Compression drop-down menu. Note that real-time Reflection Probes are not compressed in memory, and their size in memory depends on Resolution and HDR settings. Because of this, sampling real-time Reflection Probes is usually more resource-intensive than sampling baked Reflection Probes.",1071],["Real-time probe optimisation",1071],["The rendering overhead is generally more significant for real-time probes than for those baked in the editor. Updates are potentially quite frequent and this can have an impact on framerate if not managed correctly. With this in mind, real-time probes provide the following properties to let you handle probe rendering as efficiently as possible:",1071],["Refresh Mode",1071],["The Refresh Mode lets you choose when the probe will update. The most resource-intensive option in terms of processor time is Every Frame. This gives the most frequent updates with minimal programming effort but you may encounter performance problems if you use this mode for all probes.",1071],["If the mode is set to On Awake, the probe will be updated at runtime but only once at the start of the scene. This is useful if the scene (or part of it) is set up at run-time but does not change during its lifetime.",1071],["The final mode, Via Scripting, lets you control probe updates from a script. Although some effort is involved in coding the script, this approach does allow for useful optimisations. For example, you might update a probe according to the apparent size of passing objects (ie, small objects or large objects at a distance are not worth an update).",1071],["Time Slicing",1071],["When the Refresh Mode described above is set to Every Frame the processing load can be considerable. Time Slicing allows you to spread the cost of updates over several frames and thereby reduce the load at any given time. This property has three different options:",1071],["All Faces at Once will cause the six cubemap faces to be rendered immediately (on the same frame) but then the blurring operation for each of the six first level mipmaps will take place on separate frames. The remaining mipmaps will then be blurred on a single frame and the results copied to the cubemap on another frame. The full update therefore takes nine frames to complete.",1071],["Individual Faces works the same way as All Faces at Once except that the initial rendering of each cubemap face takes place on its own frame (instead of all six on the first frame). The full update takes fourteen frames to complete; this option has the lowest impact on framerate but the relative long update time might be noticeable when, say, lighting conditions change abruptly (eg, a lamp is suddenly switched on).",1071],["No Time Slicing disables the time slicing operation completely and so each probe update takes place within a single frame. This ensures that the reflections are synchronised exactly with the appearance of surrounding objects but the processing cost can be prohibitive.",1071],["As with the other optimisations, you should consider using the lower-quality options in places where reflections are less important and save the No Time Slicing option for places where the detail will be noticed.",1071],["",1071],["",1071],["Updated in 5.6",1071],["2017-06-06 ",1071],["Types of Reflection Probe",1072],["Reflection probes come in three basic types as chosen by the Type property in the inspector (see the component reference page for further details).",1072],["Baked** probes store a reflection cubemap generated (\"baked\") within the editor. You can trigger the baking by clicking either the Bake button at the bottom of the Reflection Probe inspector or the Generate Lighting button in the Lighting window. If you have Auto enabled in the Lighting window then baked probes will be updated automatically as you place objects in the Scene view. The reflection from a baked probe can only show objects marked as Reflection Probe Static in the inspector. This indicates to Unity that the objects will not move at runtime.",1072],["Realtime** probes create the cubemap at runtime in the player rather than the editor. This means that the reflections are not limited to static objects and can be updated in real time to show changes in the scene. However, it takes considerable processing time to refresh the view of a probe so it is wise to manage the updates carefully. Unity allows you to trigger updates from a script so you can control exactly when they happen. Also, there is an option to apply timeslicing to probe updates so that they can take place gradually over a few frames.",1072],["A Custom probe type is also available. These probes let you bake the view in the editor, as with Baked probes, but you can also supply a custom cubemap for the reflections. Custom probes cannot be updated at runtime.",1072],["The three types are explained in detail below.",1072],["Baked and Custom Reflection Probes",1072],["A Baked Reflection Probe is one whose reflection cubemap is captured in the Unity editor and stored for subsequent usage in the player (see the Reflection Probes Introduction for further information). Once the capture process is complete, the reflections are \"frozen\" and so baked probes can't react to runtime changes in the scene caused by moving objects. However, they come with a much lower processing overhead than Realtime Probes (which do react to changes) and are acceptable for many purposes. For example, if there is only a single moving reflective object then it need only reflect its static surroundings.",1072],["Using Baked probes",1072],["You should set the probe's Type property to Baked or Custom in order to make it behave as a baked probe (see below for the additional features offered by Custom probes).",1072],["The reflections captured by baked probes can only include scene objects marked as Reflection Probe Static (using the Static menu at the top left of the inspector panel for all objects). You can further refine the objects that get included in the reflection cubemap using the Culling Mask and Clipping Planes properties, which work the same way as for a Camera (the probe is essentially like a camera that is rotated to view each of the six cubemap faces).",1072],["When the Auto option is switched on (from the Lighting window), the baked reflections will update automatically as you position objects in the scene. If you are not making use of auto baking then you will need to click the Bake button in the Reflection Probe inspector to update the probes. (The Generate Lighting button in the Lighting window will also trigger the probes to update.)",1072],["Whether you use auto or manual baking, the bake process will take place asynchronously while you continue to work in the editor. However, if you move any static objects, change their materials or otherwise alter their visual appearance then the baking process will be restarted.",1072],["Custom Probes",1072],["By default, Custom probes work the same way as Baked probes but they also have additional options that change this behaviour.",1072],["The Dynamic Objects property on a custom probe's inspector allows objects that are not marked as Reflection Probe Static to be included in the reflection cubemap.",1072],["Note**: The positions of these objects are still \"frozen\" in the reflection at the time of baking.",1072],["The Cubemap property allows you to assign your own cubemap to the probe and therefore make it completely independent of what it can \"see\" from its view point. You could use this, say, to set a skybox or a cubemap generated from your 3D modelling app as the source for reflections.",1072],["Realtime Probes",1072],["Baked probes are useful for many purposes and have good runtime performance but they have the disadvantage of not updating live within the player. This means that objects can move around in the scene without their reflections moving along with them. In cases where this is too limiting, you can use Realtime probes, which update the reflection cubemap at runtime. This effect comes with a higher processing overhead but offers greater realism.",1072],["Using Realtime Probes",1072],["To enable a probe to update at runtime, you should set its Type property to Realtime in the Reflection Probe Inspector. You don't need to mark objects as Reflection Probe Static to capture their reflections (as you would with a baked probe). However, you can selectively exclude objects from the reflection cubemap using the Culling Mask and Clipping Planes properties, which work the same way as for a Camera (the probe is essentially like a camera that is rotated to view each of the six cubemap faces).",1072],["In the editor, real-time probes have much the same workflow as baked probes, although they tend to render more quickly.",1072],["Note**: Currently, real-time probes will only update their reflections in the Scene view when Reflection Probe Static objects are moved or change their appearance. This means that moving dynamic objects won't cause an update even though those objects appear in the reflection. You should choose the Bake Reflection Probes option from the Generate Lighting button dropdown in the Lighting window to update reflections when a dynamic object is changed.",1072],["Render pipeline feature comparison",1073],["For more information, contact the Graphics Docs team or see https://docs.google.com/spreadsheets/d/1G1r_MC6B3KW36hmOKe2BW72QfxZeNa4qMuRzF6BOmZE/edit#gid=680246509",1073],["Data for Unity version: 2022.2",1073],["Data last updated: 03/01/2023 -->",1073],["This page contains information on feature support in the Built-in Render Pipeline, the Universal Render Pipeline (URP), and the High Definition Render Pipeline (HDRP). It also contains suggested alternatives for certain features.",1073],["For ease of reference, features are broken down into the following categories:",1073],["Platform Support",1073],["Lighting",1073],["Color",1073],["Camera",1073],["Shaders",1073],["World building",1073],["Visual effects",1073],["2D and UI",1073],["XR",1073],["Scripting",1073],["Optimizations",1073],["Debug",1073],["",1073],["Platform Support",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Windows Yes Yes YesDirectX 11. DirectX 12. ",1073],["MacOS Yes Yes Yes ",1073],["Linux Yes Yes Yes ",1073],["XBox One Yes Yes Yes ",1073],["XBox Series Yes Yes Yes ",1073],["PlayStation 4 Yes Yes Yes ",1073],["PlayStation 5 Yes Yes Yes ",1073],["Stadia Yes Yes Yes ",1073],["Nintendo Switch Yes Yes No ",1073],["iOS Yes Yes No ",1073],["Android Yes Yes No ",1073],["Desktop VR Yes Yes Yes ",1073],["Mobile VR Yes Yes No ",1073],["Hololens Yes Yes No ",1073],["WebGL Yes Yes No ",1073],["",1073],["Lighting",1073],["Lights",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Directional Yes Yes Yes ",1073],["Spot YesSupported shapes: Cone YesSupported shapes: Cone YesSupported shapes: Cone, Pyramid, Box ",1073],["Point Yes Yes Yes ",1073],["Area YesSupported shapes: Rectangle (only with Enlighten Realtime Global Illumination), Disc (baked only) YesSupported shapes: Rectangle (baked only), Disc (baked only) YesSupported shapes: Rectangle (real-time and baked), Tube (real-time only), Disc (baked only) ",1073],["Inner Spot angle No Yes Yes ",1073],["Shading technique YesMultiple passes YesSingle pass only YesHybrid tile and cluster ",1073],["Culling Per Object Yes Yes No ",1073],["Culling Per Tile No No Yes ",1073],["Culling Per Layer YesBased on GameObject layers YesBased on dedicated Rendering layers YesBased on dedicated Light layers ",1073],["Multiple directional lights Yes YesSupports shadowing for one directional light at a time. YesSupports shadowing for one directional light at a time. To simulate more, use Spot light with a Box shape. ",1073],["Number of real-time lights per object Unlimited In Deferred: unlimited.In Forward: 4 for GLES2, 8 for all other graphics APIs.In Forward+: unlimited. The per Camera limit applies. Unlimited ",1073],["Number of real-time lights per Camera Unlimited On mobile platforms: 32.On OpenGL ES 3.0 and earlier: 16.On other platforms: 256. In Deferred: 63 per 8x8 pixel tile.In Forward: 63 per 16x16 pixel cluster.You can disable the cap for the deferred rendering path in Frame Settings > Light Loop Debug > Deferred Tile. This will affect performance. ",1073],["Light attenuation type YesLegacy YesInverseSquared YesInverseSquared ",1073],["Vertex Lights Yes Yes No ",1073],["SH Lights Yes No No ",1073],["Light Cookies YesOnly shape, no color (Alpha channel). YesColored cookie (RGB) YesColored cookie (RGB) ",1073],["IES Lights No No Yes ",1073],["Light Distance Fade No No Yes ",1073],["Physical light units No No Yes ",1073],["Light anchor tool Yes Yes Yes ",1073],["Shadows",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Directional Light Shadows Yes Yes Yes ",1073],["Multiple Directional Light Shadows Yes No No ",1073],["Directional Light Cascade Shadows Yes1, 2, or 4 cascades, control by percentage only. Yes1, 2, or 4 cascades. Control by percentage, or switch to meters.Settings are in URP asset. Yes1 to 4 cascades. Control by percentage or distance. Settings are in Volumes. ",1073],["Shadow Cascade Blending No No Yes ",1073],["Spot Light Shadows Yes Yes Yes ",1073],["Point Light Shadows Yes Yes Yes ",1073],["Area Light Shadows No No YesOnly for rectangle shape ",1073],["Stable Fit Shadow Projection Yes Yes Yes ",1073],["Close Fit Shadow Projection Yes No Yes ",1073],["Shadow Lighting Pass Yes Yes Yes ",1073],["Shadow Screen Space Pass Yes Yes YesMostly used for Raytracing. ",1073],["Shadow bias YesSupported types: Constant clip space offset. Normal bias YesSupported types: Offsets shadowmap texels in the light direction, Normal bias YesSupported types: Slope bias, Normal bias ",1073],["PCF filtering (Percentage Closer Filtering) No YesPCF Tent 5x5 YesFor Point and Spot lights in \"Low\" (PCF 3x3 4 taps) and \"Medium\" (PCF 5x5 9 taps) quality settings, and for Directional lights in \"Low\" (PCF 5x5 9 taps) and \"Medium\" (PCF Tent 5x5 9 taps) quality settings. ",1073],["PCSS filtering (Percentage Closer Soft Shadows) No No YesFor Point and Spot lights, Directional lights and Area lights when in \"High\" quality in the HDRP settings for each kind of light. ",1073],["EVSM filtering (Exponential Variance Shadow Mapping) No No YesFor area lights only in all quality settings except \"High\". ",1073],["Shadow update modes No No YesEvery frame, On Enable, On Demand. Each cascade can be updated independently using the API (RequestSubShadowMapRendering) ",1073],["Resolution settings YesConfigured in Quality Settings. YesConfigured in URP Lighting Settings. YesConfigure shadowmap resolution or budget per Light, and configure shadow atlas size in HDRP Asset. ",1073],["Dynamic rescale No No Yes ",1073],["Directional light shadow caching No No Yes ",1073],["Punctual and Area lights shadow caching No No Yes ",1073],["Dynamic Shadow Casters No No Yes ",1073],["Static Shadow Casters No No Yes ",1073],["Contact Shadows No No Yes ",1073],["Micro Shadows No No Yes ",1073],["Shadow Cascade Volume Controller No No Yes ",1073],["Shadow Distance Fade Yes Yes YesConfigure in Shadows Volume. ",1073],["Shadow Mask YesConfigure per scene. YesConfigure per scene. YesConfigure per Light. ",1073],["Distance Shadow Mask YesConfigure per scene. YesForward Rendering Path only. YesConfigure per Light. ",1073],["Transparent objects casting shadows YesUse the Transparent Cutout shaders for objects with “gaps” such as fences, vegetation, etc. or custom pixel-lit shaders using the Geometry render queue. Opacity can affect shadow intensity using dithering. NoAlpha clipping only. YesRaytracing only (incl support of colored shadows). For raster, alpha clipping only (use Alpha clipping > Shadow threshold option). ",1073],["Transparent objects receiving shadows No No Yes ",1073],["Shadow tint No No YesShadow tint or penumbra tint options ",1073],["Shadow matte No No YesUse Unlit master node and \"Enable Shadow Matte\" ",1073],["Shadow Layers No No Yes ",1073],["Global Illumination",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Baked Global Illumination: Progressive CPU Lightmapper Yes Yes Yes ",1073],["Baked Global Illumination: Progressive GPU Lightmapper Yes Yes Yes ",1073],["Baked Global Illumination: Enlighten Lightmapper NoDeprecated NoDeprecated NoDeprecated ",1073],["Baked Global Illumination: Mixed Lighting modes YesSubtractive, Baked indirect, Shadow Mask, Distance Shadow mask YesSubtractive, Baked indirect, Shadow mask YesBaked indirect, Shadow Mask (per light setting), Distance Shadow mask (per light setting) ",1073],["Baked Global Illumination: Double Sided GI Yes Yes Yes ",1073],["Realtime Global Illumination: Pre-computed (Enlighten) YesSupport ends after Unity 2024 LTS YesSupport ends after Unity 2024 LTS YesSupport ends after Unity 2024 LTS ",1073],["Realtime Global Illumination: Screen space GI No No Yes ",1073],["Screen Space Reflections Yes No Yes ",1073],["Planar Reflections No No Yes ",1073],["Raytraced Reflections No No Yes ",1073],["Screen Space Refractions No No Yes ",1073],["Non directional lightmap Yes Yes Yes ",1073],["Directional lightmap Yes Yes Yes ",1073],["Light Probes",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Light Probes: Blending Yes Yes Yes ",1073],["Light Probes: Custom provided Yes Yes Yes ",1073],["Light Probes: Occlusion Probes Yes Yes Yes ",1073],["Light Probes: Proxy volumes (LLPV) Yes NoDeprecated Yes ",1073],["Adaptive Probe Volumes",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Probe Volumes: Per pixel lighting No No YesExperimental ",1073],["Probe Volumes: Blending No No YesExperimental ",1073],["Probe Volumes: Touchup volumes No No YesExperimental ",1073],["Reflection Probes",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Reflection Probes: Baked Yes Yes Yes ",1073],["Reflection Probes: Real-time Yes Yes Yes ",1073],["Reflection Probes: Real-time time sliced all faces at once Yes Yes No ",1073],["Reflection Probes: Real-time time sliced individual faces Yes Yes Yes ",1073],["Reflection Probes: On-demand API Yes Yes Yes ",1073],["Reflection Probes: Proxy volumes No No Yes ",1073],["Reflection Probes: Simple sampling YesChoose per-object how to sample reflection probes. YesChoose in the URP asset whether URP always performs simple sampling from reflection probes, or if it blends. NoSee Reflection Hierarchy. ",1073],["Reflection Probes: Blend probes sampling YesChoose per-object how to sample reflection probes.Blend up to 2 reflection probes. YesChoose in the URP asset whether URP always performs simple sampling from reflection probes, or if it blends.If blending is enabled, URP always blends sky + 1 local probe, or 2 probes if there is no sky. YesNo blending limit. All reflections including planar blend between each other. ",1073],["Reflection Probes: Blend probes and skybox sampling Yes Yes YesSee Reflection Hierarchy. ",1073],["Reflection Probes: Distanced based roughness No No Yes ",1073],["Reflection Probes: Box Projection Yes Yes Yes ",1073],["Reflection Probes: Oriented Box Projection No No Yes ",1073],["Reflection Probes: Sphere Projection Yes No Yes ",1073],["Reflection Probes: Per probe resolution Yes No Yes ",1073],["Raytracing",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Ray-traced Ambient Occlusion No No YesPreview. ",1073],["Ray-traced Contact Shadows No No YesPreview. ",1073],["Ray-traced Global Illumination No No YesPreview. ",1073],["Ray-traced Reflections No No YesPreview. ",1073],["Ray-traced Shadows No No YesPreview. ",1073],["Ray-traced Recursive Rendering No No YesPreview. ",1073],["AxF (automotive material) No No YesPreview. ",1073],["Terrain No No YesPreview. Heightmap only. No support for terrain details and terrain trees. For vegetation on terrain, we recommend using mixed rendering modes for ray traced GI and reflections which allow to support foliage/vegetation & deformation, and for shadows using raster shadows. ",1073],["VFX Graph particles No No No ",1073],["Windows No No YesPreview. Requires DX12, and platforms with hardware supporting RTX. ",1073],["Linux No No No ",1073],["PS5 No No YesPreview. ",1073],["XBox Series No No YesPreview. ",1073],["Pathtracing",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Lit (Pathtracing support) No No YesPreview. ",1073],["Hair (Pathtracing support) No No YesPreview. ",1073],["Eye (Pathtracing support) No No No ",1073],["Fabric (Pathtracing support) No No YesPreview. ",1073],["AxF (Pathtracing support) No No YesPreview. ",1073],["Decals (Pathtracing support) No No No ",1073],["Depth of field (Pathtracing support) No No YesPreview. ",1073],["Exponential Fog (Pathtracing support) No No YesPreview. ",1073],["Anisotropic fog (Pathtracing support) No No YesPreview. ",1073],["Local Volumetric fog (Pathtracing support) No No No ",1073],["HDRI sampling No No YesPreview. ",1073],["Denoiser No No YesPreview. NVidia Optix™ AI accelerated denoiser orIntel® Open Image Denoise. ",1073],["Recorder integration No No YesPreview. ",1073],["Environment lighting",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Skybox YesPer project. Set in the Lighting window. YesPer project. Set in the Lighting window. YesUses a single sky to bake global illumination, otherwise uses sky settings per Volume. You can create your own sky via script and Material. ",1073],["Gradient YesPer project. Set in the Lighting window. YesPer project. Set in the Lighting window. YesUses a single sky to bake global illumination, otherwise uses sky settings per Volume. You can create your own sky via script and Material. ",1073],["Color YesPer project. Set in the Lighting window. YesPer project. Set in the Lighting window. YesUses a single sky to bake global illumination, otherwise uses sky settings per Volume. You can create your own sky via script and Material. ",1073],["Real-time Ambient Mode YesBy script. YesBy script. YesUses a single sky to bake global illumination, otherwise uses sky settings per Volume. You can create your own sky via script and Material. ",1073],["Baked Ambient Mode YesBy default YesBy default YesConfigure in Visual Environment Volume.Uses the environment stored in Lighting > Environment settings. ",1073],["Indirect Lighting Controller No No Yes ",1073],["",1073],["Color",1073],["HDR",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["HDR rendering Yes Yes Yes ",1073],["HDR output No Yes YesUse the HDROutputSettings API to configure HDR output options and HDRP's tonemapping HDR options.See HDRP HDR documentation for more information. ",1073],["Color space",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Linear YesRequires OpenGLES3.0 YesRequires OpenGLES3.0 Yes ",1073],["Gamma Yes Yes No ",1073],["",1073],["Camera",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Multi display Yes Yes Yes ",1073],["Hardware Dynamic resolution Yes YesLimited platform support. YesLimited platform support. ",1073],["Software Dynamic resolution No No Yes ",1073],["Nvidia Deep learning super sampling (DLSS) No No Yes ",1073],["AMD FidelityFX™ Super Resolution 1.0 No Yes Yes ",1073],["TAA upsampler No No Yes ",1073],["Mip bias No Yes Yes ",1073],["Compositing multiple cameras YesUse multiple cameras YesUse Camera stacking YesUse HDRP Compositor ",1073],["Physical camera YesAffects field of view only YesAffects field of view only YesAffects field of view, exposure, bloom, and depth of field ",1073],["Multi-sample anti-aliasing (MSAA) YesForward rendering path only YesForward rendering path only YesForward rendering path only ",1073],["Fast approximate anti-aliasing (FXAA) Yes Yes Yes ",1073],["Subpixel morphological anti-aliasing (SMAA) Yes Yes Yes ",1073],["Temporal anti-aliasing (TAA) YesAdditional pass to render all object's motion vectors. No support for transparents. 32-bits (float) YesAdditional pass to render all object's motion vectors. No support for transparents. No custom motion vectors in ShaderGraph. Not compatible with Dynamic Resolution, MSAA or Camera Stacking. 16-bits (half). YesUses per-shader motion vectors and the stencil buffer to only render motion vectors where needed. Supports transparents. Allows custom motion vectors in shaders, for example using the ShaderGraph or Alembic packages. 32-bits (float). ",1073],["Depth Texture Yes Yes Yes ",1073],["Depth + Normal Texture Yes YesOnly active when using SSAO Yes ",1073],["Depth + Normal Texture (affected by decals) No No YesExcept if MSAA is enabled. ",1073],["Color Texture No Yes Yes ",1073],["Motion Vectors Yes Yes Yes ",1073],["",1073],["Shaders",1073],["Authoring worklfows",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Material Variants Yes Yes Yes ",1073],["Shader Graph Yes Yes Yes ",1073],["ShaderLab Yes YesHand-coded shaders are supported, but not recommended. Shader Graph is recommended (more easily upgradable). YesHand-coded shaders are supported, but not recommended. Shader Graph is recommended (more easily upgradable). ",1073],["ShaderLab Command: UsePass Yes Yes Yes ",1073],["ShaderLab Command: GrabPass Yes NoAlternative: Scene color node in ShaderGraph / create a Renderer Feature NoAlternative: Scene color node in ShaderGraph / create a Custom Pass ",1073],["Surface Shaders Yes No No ",1073],["Diffusion Profiles No No Yes ",1073],["Prebuilt shaders",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Camera-relative rendering No No Yes ",1073],["Material type: Metallic / Standard Yes Yes Yes ",1073],["Material type: Specular Yes Yes Yes ",1073],["Surface Type and Blend Mode: Opaque Yes Yes Yes ",1073],["Surface Type and Blend Mode: Faded (Alpha Blend) Yes Yes YesAlso supports premultiplied alpha. ",1073],["Surface Type and Blend Mode: Transparent Yes Yes Yes ",1073],["Surface Type and Blend Mode: Cutout Yes Yes Yes ",1073],["Surface Type and Blend Mode: Additive No Yes Yes ",1073],["Surface Type and Blend Mode: Multiply No Yes NoNot compatible with half res transparent optimization and offscreen UI blending. ",1073],["Surface Type and Blend Mode: Translucence No No YesTranslucent Material Type in the Lit shaders ",1073],["Surface Type and Blend Mode: Iridescence No No YesIridescent Material Type in the Lit shaders ",1073],["Surface Inputs: Albedo (Base Map) Yes Yes Yes ",1073],["Surface Inputs: Specular Yes Yes YesBase map when using Material Type Specular ",1073],["Surface Inputs: Metallic Yes Yes YesStored in the R channel of the Mask Map. ",1073],["Surface Inputs: Ambient Occlusion Yes Yes YesStored in the G channel of the Mask Map. ",1073],["Surface Inputs: Smoothness Yes Yes YesStored in the A channel of the Mask Map. ",1073],["Surface Inputs: Normal Map Yes Yes Yes ",1073],["Surface Inputs: Bent Normal Map No No Yes ",1073],["Surface Inputs: Detail Map Yes Yes YesAlbedo stored in the R channel of the Detail Map. Smoothness stored in the B channel. ",1073],["Surface Inputs: Detail Normal Map Yes Yes YesY axis stored in the G channel of the Detail Map. X axis stored in the A channel. ",1073],["Surface Inputs: Heightmap YesPixel displacement only. YesPixel displacement only. YesPixel or vertex displacement. ",1073],["Surface Inputs: Detail Mask Yes Yes YesStored in the B channel of the Mask Map. ",1073],["Surface Inputs: Emissive Map Yes Yes Yes ",1073],["Surface Inputs: Transmission Mask No No YesAlso available in Shader Graph. ",1073],["Surface Inputs: Specular Occlusion No No Yes ",1073],["Surface Inputs: Planar & Triplanar mapping NoAlternative: Use ShaderGraph Triplanar node NoAlternative: Use ShaderGraph Triplanar node Yes ",1073],["Included Lighting models: ClearCoat No Yes Yes ",1073],["Included Lighting models: SubSurface Scattering No No Yes ",1073],["Included Lighting models: Anisotropy No No Yes ",1073],["Included Lighting models: Irridescence No No Yes ",1073],["Included Lighting models: Fabric No No Yes ",1073],["Included Lighting models: Eye No No YesEye caustics available in High quality mode. ",1073],["Included Lighting models: Hair (Approximate) No No YesBased on Kajiya Kay parametrization ",1073],["Included Lighting models: Hair (Physical) No No YesBased on Marshner-Disney parametrization. ",1073],["Add custom Lighting model as a plugin Yes No YesPluggable Master Node (undocumented) ",1073],["Features: Light Cookies YesSupports grayscale textures YesSupports RGB textures YesSupports RGB textures ",1073],["Features: Parallax Mapping Yes Yes Yes ",1073],["Features: Light Distance Fade No No Yes ",1073],["Features: Shadow Distance Fade Yes Yes YesConfigure in Shadows Volume. ",1073],["Features: Shadow Cascade Blending No No Yes ",1073],["Features: GPU Instancing Yes Yes Yes ",1073],["Features: Double Sided GI Yes No Yes ",1073],["Features: Two Sided No YesConfigure with the RenderFace property. YesConfigure with the Double Side toggle. ",1073],["Features: Material sorting priority No Yes Yes ",1073],["Features: Renderer sorting priority No NoNot exposed (use debug mode of the inspector). Yes ",1073],["Features: GPU Tesselation No No YesUse the LitTesselation Shader. ",1073],["Features: Specular Occlusion No No YesUse only the ambient occlusion map, or both bent and ambient occlusion maps. ",1073],["Features: Geometric Specular Anti-Aliasing No No Yes ",1073],["Features: Add precomputed velocity No No YesRequires per vertex velocity information (eg: Alembic, or using ShaderGraph custom velocity option) ",1073],["Shader Graph",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Full screen master node No Yes Yes ",1073],["Custom post-processing No Yes Yes ",1073],["Custom render texture Yes Yes Yes ",1073],["Text Mesh Pro No Yes No ",1073],["Decals No Yes Yes ",1073],["Fog Volume No No Yes ",1073],["Terrain No No No ",1073],["",1073],["World building",1073],["Environment",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Terrain system: Physically Based Shader No Yes Yes ",1073],["Terrain system: Simple Lit (Blinn-Phong) Shader Yes No No ",1073],["Terrain system: Speed Tree Shader Yes Yes YesSpeedTree 8 only. ",1073],["Terrain system: Paint Trees Yes Yes Yes ",1073],["Terrain system: Vegetation Yes Yes Yes ",1073],["Terrain system: Terrain Details Yes Yes Yes ",1073],["Terrain system: number of Terrain Layers YesUnlimited YesWith height-based blending: 4With alpha blending: unlimited Yes8 ",1073],["Terrain system: GPU Instanced Rendering Yes Yes Yes ",1073],["Terrain system: Terrain Holes Yes Yes Yes ",1073],["Water system: Physically Based Shader No No Yes ",1073],["Water system: Compute based wave simulation No No Yes ",1073],["Water system: CPU wave simulation for gameplay integration No No Yes ",1073],["Water system: Support for decals (eg: Foam) No No Yes ",1073],["Water system: Underwater Caustics No No Yes ",1073],["Water system: Under water rendering No No Yes ",1073],["Speedtree 8 Yes YesBoth Shader Graph and ShaderLab shaders available YesShader Graph shader only ",1073],["Wind Zone Yes Yes Yes ",1073],["Sky",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Procedural Skybox Yes Yes NoThis sky type is deprecated, but you can still use if if you install the Procedural Sky Sample. ",1073],["6 sided Skybox Yes Yes YesHDRI Sky supports cubemaps. Unity can build cubemaps from this type on import. ",1073],["Cubemap Yes Yes YesHDRI Sky supports cubemaps. ",1073],["Panoramic Yes Yes YesHDRI Sky supports cubemaps. Unity can build cubemaps from this type on import. ",1073],["Physical Sky No No Yes ",1073],["Gradient Sky No No Yes ",1073],["Sky distortion No No YesProcedural or Flowmap ",1073],["Cloud layers No No Yes ",1073],["Volumetrics",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Volumetric Clouds No No Yes ",1073],["Linear Fog YesConfigure in Graphics Settings. YesConfigure in Graphics Settings. No ",1073],["Exponential Fog YesConfigure in Graphics Settings. YesConfigure in Graphics Settings. YesConfigure with the Fog Override. ",1073],["Exponential Squared YesConfigure in Graphics Settings. YesConfigure in Graphics Settings. No ",1073],["Local Volumetrics No No Yes ",1073],["3D Render texture for local volumetric fog No No Yes ",1073],["Volumetric Material (use ShaderGraph for local volumetric fog) No No Yes ",1073],["Fog Scattering & Atmospheric scattering No No Yes ",1073],["",1073],["Visual effects",1073],["Post-processing",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Feature support YesUses separate package: Post-Processing V2 YesUses integrated post-processing solution YesUses integrated post-processing solution ",1073],["Per-project default effects No No YesA default volume can be applied to the project using HDRP default settings. ",1073],["Ambient Occlusion YesSupported types: Multi-scale ambient occlusion YesSupported types: Screen Space Ambient Occlusion (Depth or normal) YesSupported types: Screen Space Ground Truth Ambient Occlusion (Normal + temporal, tinted multi bounced, specular occlusion), Ray-traced ambient occlusion ",1073],["Exposure YesSupported types: Fixed, Automatic YesSupported types: Fixed YesSupported types: Fixed, Automatic (Eye adaptation), Curve Mapping, Physical Camera settings and Histogram. ",1073],["Bloom Yes Yes Yes ",1073],["Chromatic Aberration Yes Yes Yes ",1073],["Tonemapping (Neutral, ACES, Custom) Yes Yes Yes ",1073],["White balance No Yes Yes ",1073],["Color Channel Mixer No Yes Yes ",1073],["Color Adjustments Yes Yes Yes ",1073],["Color Curves Yes Yes Yes ",1073],["Lift, Gamma, Gain Yes Yes Yes ",1073],["Shadows, Midtones, Highlights Yes Yes Yes ",1073],["Split Toning No No Yes ",1073],["Depth of Field YesSupported types: Bokeh YesSupported types: Bokeh and Gaussian YesSupported types: Bokeh ",1073],["Physical Depth of Field No No Yes ",1073],["Film Grain Yes Yes Yes ",1073],["Lens Distortion Yes Yes Yes ",1073],["Camera Motion Blur Yes Yes Yes ",1073],["Object Motion Blur Yes No Yes ",1073],["Screen Space Reflections Yes No Yes ",1073],["Screen Space Refractions No No Yes ",1073],["Vignette Yes Yes Yes ",1073],["Panini Projection No Yes Yes ",1073],["Screen Space Lens Flares No No No ",1073],["Custom post-processing Yes YesSee Full Screen Pass Renderer Feature. YesEither with script or ShaderGraph. ",1073],["CPU Particles (Shuriken)",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Feature support Yes Yes YesGPU instancing is not supported. Distortion and flipbook blending can be done with Shader Graph. No standard particle shader available, but example particles ShaderGraph shaders can be found in the HDRP package samples. ",1073],["Lit Particles Yes Yes Yes ",1073],["Simple lit particles YesUses Blinn Phong. Yes Yes ",1073],["Unlit particles Yes Yes Yes ",1073],["Soft Particles Yes Yes YesAvailable via Shader Graph. Examples available in the particles system shader samples in the HDRP package sample. ",1073],["Distortion Yes Yes YesAvailable via Shader Graph. Examples available in the particles system shader samples in the HDRP package sample. ",1073],["Flipbook blending Yes Yes YesAvailable via Shader Graph. Examples available in the particles system shader samples in the HDRP package sample. ",1073],["Trail Yes Yes Yes ",1073],["GPU Instancing Yes Yes No ",1073],["GPU Particles (VFX Graph)",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Feature support No YesCompute capable hardware only. OpenGL ES not supported. YesCompute capable hardware only. ",1073],["Supported Shader graph shaders No YesVFX Shader Graph, Lit, Unlit, 2D Sprite Lit, 2D Custom Lit YesVFX Shader Graph, Lit, Unlit, Hair, Fabric (no support for tessellation, nor decal) ",1073],["Renders with 2D No Yes3D particles and support for sorting layers and sprites. No support for 2D Physics, 2D sprites emitters, nor 2D Lights No ",1073],["Lit Particles No Yes Yes ",1073],["Simple lit particles No No Yes ",1073],["Unlit particles No Yes Yes ",1073],["Soft Particles No Yes Yes ",1073],["Distortion No No Yes ",1073],["Flipbook blending No YesLinear interpolation or flipbook motion vectors YesLinear interpolation or flipbook motion vectors ",1073],["Trail No YesExperimental YesExperimental ",1073],["Half-resolution No No Yes ",1073],["Decals No YesVFX Graph Forward decals (limited), no support for URP decals nor Shader Graph decals YesVFX Forward decals (limited), HDRP Decals (no support for Shader Graph decals) ",1073],["Camera Buffer No No YesDepth collision, Color buffer ",1073],["Instancing No Yes Yes ",1073],["Skinned Mesh Sampling No Yes Yes ",1073],["6-way lighting No No Yes ",1073],["Decals",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Decals NoSuggested alternative: Projector component. YesProjector decals (Forward + DBuffer) or Screen Space Decals (Deferred), no decal layers, no emissive decals YesProjector decals (Forward & Deferred + DBuffer) or Mesh decals, support on transparents (Cluster decals), support decal layers, surface gradients, emissive decals ",1073],["Decal layers No Yes Yes ",1073],["Other visual effects",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Projector component Yes NoUse the Decal Renderer Feature instead. NoUse the Decal Projector instead. ",1073],["Line Renderer component Yes Yes Yes ",1073],["Trail Renderer component Yes YesYou can also use VFX Graph to create a custom trail effect. YesYou can also use VFX Graph to create a custom trail effect. ",1073],["Billboard Renderer component Yes Yes NoSuggested alternative: Use VFX Graph. ",1073],["Halo component Yes NoSuggested alternative: Use a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. NoSuggested alternative: Use a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component, or use a celestial body in a directional light. ",1073],["Lens flares YesUse a Flare asset and either a Light component or a Lens Flare component. YesUse a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. YesUse a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. ",1073],["",1073],["2D and UI",1073],["2D",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Sprite Yes Yes No ",1073],["Tilemap Yes Yes No ",1073],["Sprite Shape Yes Yes No ",1073],["Pixel-Perfect YesUsing the \"2D Pixel Perfect\" package. YesUsing the \"2D Pixel Perfect\" package. No ",1073],["2D Lights No Yes No ",1073],["2D Shadows No Yes No ",1073],["VFX Graph No YesSupports 3D particles, sorting layers, ShaderGraph Sprite Lit and Custom Lit targets, Alpha Clipping with Shadergraph Sprite Lit, Unlit and Custom Lit targets.Does not support 2D Physics, 2D sprites emitters, or 2D Lights. No ",1073],["UI",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Screen Space - Overlay Yes Yes Yes ",1073],["Screen Space - Camera Yes Yes Yes ",1073],["World Space Yes Yes YesUse the UI Camera stacking Custom pass for improved performance. ",1073],["Text Mesh Pro Yes Yes Yes ",1073],["",1073],["XR",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Multipass Yes Yes Yes ",1073],["Single Pass (double-wide) Yes NoDeprecated NoDeprecated ",1073],["Single Pass Instanced Yes Yes YesWindows and PSVR only ",1073],["Multiview Yes Yes No ",1073],["AR Foundation Yes Yes No ",1073],["",1073],["Scripting",1073],["Render Pipeline Hooks",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Camera.RenderWithShader Yes NoSuggested alternative: ScriptableRenderPass NoSuggested alternative: CustomPass with shader override ",1073],["Camera.AddCommandBuffer (Camera.Remove[All]CommandBuffer) Yes No NoAlternative: Custom Passes ",1073],["Camera.Render Yes Yes Yes ",1073],["Light.AddCommandBuffer (LightRemove[All]CommandBuffer) Yes No No ",1073],["OnPreCull Yes NoSuggested alternative: RenderPipelineManager.beginCameraRendering or ScriptableRenderPass No ",1073],["OnPreRender Yes NoSuggested alternative: RenderPipelineManager.beginCameraRendering or ScriptableRenderPass No ",1073],["OnPostRender Yes No No ",1073],["OnRenderImage Yes NoSuggested alternative: ScriptableRenderPass NoSuggested alternative: Fullscreen CustomPass ",1073],["OnRenderObject Yes YesRenderPipelineManager.endCameraRendering orScriptableRenderPass API NoRenderPipelineManager.endCameraRendering orCustom Pass ",1073],["OnWillRenderObject Yes Yes Yes ",1073],["OnBecameVisible Yes Yes Yes ",1073],["OnBecameInvisible Yes Yes Yes ",1073],["Camera Replacement Material No NoSuggested alternative: use Render Feature to replace materials per-Pass. NoSuggested alternative: Custom Pass with material override ",1073],["RenderPipeline.BeginFrameRendering No Yes Yes ",1073],["RenderPipeline.EndFrameRendering No Yes Yes ",1073],["RenderPipeline.BeginCameraRendering No Yes Yes ",1073],["RenderPIpeline.EndCameraRendering No Yes Yes ",1073],["UniversalRenderPipeline.RenderSingleCamera No Yes No ",1073],["ScriptableRenderPass No YesThis is similar to the CustomPass feature in HDRP. No ",1073],["Custom Renderers No Yes No ",1073],["CustomPass No No YesThis is similar to the ScriptableRenderPass feature in URP. ",1073],["Custom Post Process Pass No No Yes ",1073],["Arbitrary Output Variables (AOV) API No No Yes ",1073],["Recording API No No Yes ",1073],["",1073],["Optimizations",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Batching By Shader No Yes Yes ",1073],["Batching By Material Yes Yes Yes ",1073],["Batching by Material Property Blocks Yes YesBatched separately from the SRP Batcher YesBatched separately from the SRP Batcher ",1073],["Dynamic batching (without SRP Batcher) Yes Yes Yes ",1073],["Real-time batching with SRP Batcher No YesRequires OpenGLES 3.1. On unsupported graphics APIs, falls back to Dynamic Batching. Yes ",1073],["Dynamic Shadows Batching Yes NoDeprecated. Yes ",1073],["GPU Instancing Yes Yes YesDisabled by default when SRP Batcher is enabled. ",1073],["Render Graph No No Yes ",1073],["Dynamic Render Pass Culling No No YesDisabled by default. ",1073],["",1073],["Debug",1073],["Feature Built-in Render Pipeline URP HDRP ",1073],["",1073],["Scene View Modes Yes YesExcept mipmap view Yes ",1073],["Volume Explorer No No Yes ",1073],["Rendering debugger No Yes Yes ",1073],["Runtime GPU profiler No Yes Yes ",1073],["Probe volume debugger No No YesExperimental ",1073],["Color Monitors NoUse post processing stack v2 No YesWaveform, Parade, Vectorscope ",1073],["Introduction to render pipelines",1074],["A render pipeline takes the objects in a scene and displays them on-screen.",1074],["How a render pipeline works",1074],["A render pipeline follows these steps:",1074],["Culling, where the pipeline decides which objects from the scene to display. This usually means it removes objects that are outside the camera view (frustum culling) or hidden behind other objects (occlusion culling).",1074],["Rendering, where the pipeline draws the objects with their correct lighting into pixel buffers.",1074],["Post-processing, where the pipeline modifies the pixel buffers to generate the final output frame for the display. Example of modifications include color grading, bloom, and depth of field.",1074],["A render pipeline repeats these steps each time Unity generates a new frame.",1074],["Render pipelines in Unity",1074],["In Unity, you can use one of the following pre-built render pipelines for your project.",1074],["The Built-In Render Pipeline is Unity's default render pipeline. It's a general purpose render pipeline with limited options for customization.",1074],["The Universal Render Pipeline (URP) is a Scriptable Render Pipeline that you can customize. It lets you create scalable graphics across a wide range of platforms.",1074],["The High Definition Render Pipeline (HDRP) is a Scriptable Render Pipeline that lets you create cutting-edge, high-fidelity graphics on high-end platforms.",1074],["The Scriptable Render Pipelines let you inspect and change how culling, rendering, and post-processing work directly in C#. This level of customization is also possible in the Built-In Render Pipeline when you purchase access to the Unity engine's source code in C++.",1074],["If you're an experienced graphics developer with advanced customization needs, you can also create your own custom render pipeline using Unity's Scriptable Render Pipeline API.",1074],["Refer to Choose a render pipeline for more information about choosing the right pipeline for your project.",1074],["Additional resources",1074],["\nIntroduction to Lighting and Rendering tutorial\n",1074],["Render pipelines",1075],["A render pipeline performs a series of operations that take the contents of a scene, and displays them on a screen.",1075],["In Unity, you can choose between different render pipelines. Unity provides three prebuilt render pipelines with different capabilities and performance characteristics, or you can create your own.",1075],["Page Description ",1075],["\n\n- \n\n",1075],["Render pipelines introduction Understand render pipelines, rendering paths, and tile and cluster rendering in Unity. ",1075],["Choose a render pipeline Compare the different render pipelines in Unity, to help you choose the right one for your project. ",1075],["Render pipeline feature comparison A comparison of the different render pipelines and the features they support. ",1075],["Using the Built-In Render Pipeline Use the default render pipeline, a general purpose render pipeline with limited options for customization. ",1075],["Using the Universal Render Pipeline (URP) Use URP, a Scriptable Render Pipeline (SRP) that lets you create scalable graphics across a wide range of platforms. ",1075],["Using the High Definition Render Pipeline (HDRP) Use HDRP, a Scriptable Render Pipeline that lets you create cutting-edge, high-fidelity graphics on high-end platforms. ",1075],["Scriptable Render Pipeline (SRP) fundamentals Understand SRPs in Unity. ",1075],["Creating a custom render pipeline Understand how SRPs work, create your own custom SRP, or create a custom version of URP or HDRP. ",1075],["How to get, set, and configure the active render pipeline Determine the active render pipeline, and switch between render pipelines. ",1075],["Additional resources",1075],["RenderDoc Integration",1076],["The Editor supports integrated launching and capture of the RenderDoc graphics debugger, for detailed frame introspection and debugging.",1076],["The integration is only supported for RenderDoc versions 0.26 or later, so if an earlier version is currently installed it is required that you update to at least version 0.26.",1076],["Note:** While the integration is only available in the Editor, it is quite possible to use RenderDoc as normal with no extra setup in standalone player builds.",1076],["Note:** Frames can only be captured if Unity is running on a platform and API that RenderDoc supports - at time of writing that means Windows only, and either DirectX 11 or OpenGL Core profile. If another API is in use, the RenderDoc integration will be temporarily disabled until a supported API is enabled.",1076],["Loading RenderDoc",1076],["If a RenderDoc installation is detected, then at any time after loading the Editor you can right click on the tab for the Game View or Scene View and click the 'Load RenderDoc' option. This will reload the graphics device so you must save any changes, but afterwards RenderDoc will be ready to capture without having to restart the editor or build a standalone player.",1076],["Note:** You can also launch the Editor via RenderDoc as normal, or pass the -load-renderdoc command line option to load RenderDoc from startup.",1076],["Capturing a frame with RenderDoc",1076],["When a compatible version of RenderDoc is detected as loaded into the Editor, a new button will appear on the right side of the toolbar on the Game and Scene Views.",1076],["Pressing this button will trigger a capture of the next frame of rendering for the view. If the RenderDoc tool UI has not been opened, a new instance will be launched to show the capture, and if it is already running the newest capture will automatically appear there. From there you can open the capture and debug using the tool.",1076],["Including shader debug information",1076],["By default to optimise the size of DirectX11 shaders, debugging information is stripped out. This means that constants and resources will have no names, and the shader source will not be available. To include this debugging information in your shader, include #pragma enable_d3d11_debug_symbols in your shader's CGPROGRAM block.",1076],["Alternative graphics debugging techniques",1076],["If you build a standalone player using D3D11, you can capture a frame and debug using the Visual Studio graphics debugger.",1076],["Rendering paths in the Built-in Render Pipeline",1077],["Unity's Built-In Render Pipeline supports different rendering paths. A rendering path is a series of operations related to lighting and shading. Different rendering paths have different capabilities and performance characteristics. Deciding on which rendering path is most suitable for your Project depends on the type of Project, and on the target hardware.",1077],["You can choose the rendering path that your Project uses in the Graphics window, and you can override that path for each Camera.",1077],["If the GPU on the device running your Project does not support the rendering path that you have selected, Unity automatically uses a lower fidelity rendering path. For example, on a GPU that does not handle Deferred Shading, Unity uses Forward Rendering.",1077],["Forward Rendering",1077],["Forward Rendering is the default rendering path in the Built-in Render Pipeline. It is a general-purpose rendering path.",1077],["Real-time lights are very expensive to render in forward rendering. To offset this cost, you can choose how many lights Unity should render per-pixel at any one time. Unity renders the rest of the lights in the Scene at lower fidelity: per-vertex, or per-object.",1077],["If your project does not use a large amount of real-time lights, or if lighting fidelity is not important to your project, then this rendering path is likely to be a good choice for your project.",1077],["For more details see the Forward Rendering page.",1077],["Deferred Shading",1077],["Deferred Shading is the rendering path with the most lighting and shadow fidelity in the Built-in Render Pipeline.",1077],["Deferred shading requires GPU support, and has some limitations. It does not support semi-transparent objects (Unity renders these using forward rendering), orthographic projection (Unity uses forward rendering for these Cameras), or hardware anti-aliasing (although you can use a post-process effect to achieve similar results). It has limited support for culling masks, and treats the Renderer.receiveShadows flag as always true.",1077],["If your project has a large number of real-time lights and requires a high level of lighting fidelity, and your target hardware supports deferred shading, then this rendering path might be a good choice for your project.",1077],["For more details, including advice on this rendering path's limitations, see the Deferred Shading page.",1077],["Legacy Vertex Lit",1077],["Legacy Vertex Lit* is the rendering path with the lowest lighting fidelity and no support for real-time shadows. It is a subset of the Forward rendering path.",1077],["For more details see the Vertex Lit page.",1077],["Rendering Path comparison",1077],["**_Deferred_** **_Forward_** **_Vertex Lit_** \n",1077],["Features ",1077],["Per-pixel lighting (normal maps, light cookies) Yes Yes - ",1077],["Real-time shadows Yes With caveats - ",1077],["Reflection Probes Yes Yes - ",1077],["Depth & Normal Buffers Yes Additional render passes - ",1077],["Soft Particles Yes - - ",1077],["Semi-transparent objects - Yes Yes ",1077],["Anti-Aliasing - Yes Yes ",1077],["Light Culling Masks Limited Yes Yes ",1077],["Lighting Fidelity All per-pixel Some per-pixel All per-vertex ",1077],["Performance ",1077],["Cost of a per-pixel Light Number of pixels it illuminates Number of pixels * Number of objects it illuminates - ",1077],["Number of times objects are normally rendered 1 Number of per-pixel lights 1 ",1077],["Overhead for simple Scenes High None None ",1077],["Platform Support ",1077],["PC (Windows/Mac) Shader Model 3.0+ & MRT All All ",1077],["Mobile (iOS/Android) OpenGL ES 3.0 & MRT, Metal All All ",1077],["Consoles XB1, PS4 All - ",1077],["The Rendering Statistics window",1078],["The Game view includes a Rendering Statistics window that displays real-time rendering information about your application during Play mode. To open this window, click the Stats button in the top right corner of the Game view. Unity displays the Statistics window as an overlay in the top right of the Game view. The rendering statistics shown in the Graphics section window are useful for optimizing performance. The exact set of statistics available varies according to the build target.",1078],["Statistics**",1078],["The Graphics section of the Statistics window contains the following information:",1078],["Statistic Description ",1078],["-------------------------------- ------------------------------------------------------------ ",1078],["FPS The current number of frames Unity is able to draw per second. ",1078],["CPU Main: The total amount of time taken to process one frame. This number includes the time Unity takes to process the frame update of your application and the time Unity takes in the Editor to update the Scene view, other Editor Windows, or process Editor-only tasks.Render: The amount of time taken to render one frame. This number includes the time Unity takes to process the frame update for the Game view; it doesn't include the time Unity takes in the Editor. ",1078],["Batches The total number of draw call batches Unity processes during a frame. This number includes static, dynamic, and instance batches. ",1078],["Saved by batching The number of draw calls Unity combined into batches. To ensure good draw call batching, share materials between different GameObjects as often as possible. Batches group draw calls with the same render state, so changing the material causes Unity to create a new batch. ",1078],["Tris The number of triangles Unity processes during a frame. This value is important when optimizing for low-end hardware. ",1078],["Verts The number of vertices Unity processes during a frame. This value is important when optimizing for low-end hardware. ",1078],["Screen The resolution of the screen, along with the amount of memory the screen uses. ",1078],["SetPass The number of times Unity switches which shader pass it uses to render GameObjects during a frame. A shader might contain several shader passes and each pass renders GameObjects differently. Each pass requires Unity to bind a new shader, which might introduce CPU overhead. ",1078],["Shadow casters The number of GameObjects in the frame that cast shadows. ",1078],["Visible skinned meshes The number of Skinned Mesh Renderers in the frame. ",1078],["Animation components playing The number of Animation components playing during the frame. ",1078],["Animator components playing The number of Animator components playing during the frame. ",1078],["For more detailed information about your application’s rendering performance, see the Rendering module of the Profiler window.",1078],["Deferred Shading rendering path",1079],["This page details the Deferred Shading rendering path in Unity's Built-in Render Pipeline. See Wikipedia: deferred shading for an introductory technical overview of deferred shading.",1079],["Overview",1079],["When using deferred shading, there is no limit on the number of lights that can affect a GameObject. All lights are evaluated per-pixel, which means that they all interact correctly with normal maps, etc. Additionally, all lights can have cookies and shadows.",1079],["Deferred shading has the advantage that the processing overhead of lighting is proportional to the number of pixels the light shines on. This is determined by the size of the light volume in the Scene regardless of how many GameObjects it illuminates. Therefore, performance can be improved by keeping lights small. Deferred shading also has highly consistent and predictable behaviour. The effect of each light is computed per-pixel, so there are no lighting computations that break down on large triangles.",1079],["On the downside, deferred shading has no real support for anti-aliasing and can't handle semi-transparent GameObjects (these are rendered using forward rendering). There is also no support for the Mesh Renderer's Receive Shadows flag and culling masks are only supported in a limited way. You can only use up to four culling masks. That is, your culling layer mask must at least contain all layers minus four arbitrary layers, so 28 of the 32 layers must be set. Otherwise you get graphical artifacts.",1079],["Requirements",1079],["It requires a graphics card with Multiple Render Targets (MRT), Shader Model 3.0 (or later) and support for Depth render textures. Most PC graphics cards made after 2006 support deferred shading, starting with GeForce 8xxx, Radeon X2400, Intel G45.",1079],["On mobile, deferred shading is supported on all devices running at least OpenGL ES 3.0.",1079],["Note**: Deferred rendering isn't supported when using Orthographic projection. If the Camera's projection mode is set to Orthographic, the Camera falls back to Forward rendering.",1079],["Note**: Deferred Rendering doesn't support Single Pass Stereo Instancing in the Built-in Render Pipeline..",1079],["Performance considerations",1079],["The rendering overhead of real-time lights in deferred shading is proportional to the number of pixels illuminated by the light and not dependent on Scene complexity. So small Point Lights or Spot Lights are very cheap to render and if they are fully or partially occluded by Scene GameObjects then they are even cheaper.",1079],["Of course, lights with shadows are much more expensive than lights without shadows. In deferred shading, shadow-casting GameObjects still need to be rendered once or more for each shadow-casting light. Furthermore, the lighting shader that applies shadows has a higher rendering overhead than the one used when shadows are disabled.",1079],["Implementation details",1079],["Objects with Shaders that do not support deferred shading are rendered after deferred shading is complete, using the forward rendering path.",1079],["The default layout of the render targets (RT0 - RT4) in the G-buffer is listed below. Data types are placed in the various channels of each render target. The channels used are shown in parentheses.",1079],["RT0, ARGB32 format: Diffuse color (RGB), occlusion (A).",1079],["RT1, ARGB32 format: Specular color (RGB), smoothness (A).",1079],["RT2, ARGB2101010 format: World space normal (RGB), unused (A).",1079],["RT3, ARGB2101010 (non-HDR) or ARGBHalf (HDR) format: Emission + lighting + lightmaps + reflection probes buffer.",1079],["Depth+Stencil buffer.",1079],["So the default G-buffer layout is 160 bits/pixel (non-HDR) or 192 bits/pixel (HDR).",1079],["If using the Shadowmask or Distance Shadowmask modes for Mixed lighting, a fifth target is used:",1079],["RT4, ARGB32 format: Light occlusion values (RGBA).",1079],["And thus the G-buffer layout is 192 bits/pixel (non-HDR) or 224 bits/pixel (HDR).",1079],["If the hardware does not support five concurrent rendertargets then objects using shadowmasks will fallback to the forward rendering path.",1079],["Emission+lighting buffer (RT3) is logarithmically encoded to provide greater dynamic range than is usually possible with an ARGB32 texture, when the Camera is not using HDR.",1079],["Note that when the Camera is using HDR rendering, there’s no separate rendertarget being created for Emission+lighting buffer (RT3); instead the rendertarget that the Camera renders into (that is, the one that is passed to the image effects) is used as RT3.",1079],["G-Buffer pass",1079],["The G-buffer pass renders each GameObject once. Diffuse and specular colors, surface smoothness, world space normal, and emission+ambient+reflections+lightmaps are rendered into G-buffer textures. The G-buffer textures are setup as global shader properties for later access by shaders (_CameraGBufferTexture0 .. _CameraGBufferTexture3 names).",1079],["Lighting pass",1079],["The lighting pass computes lighting based on G-buffer and depth. Lighting is computed in screen space, so the time it takes to process is independent of Scene complexity. Lighting is added to the emission buffer.",1079],["Point Lights and Spot Lights that do not cross the Camera's near plane are rendered as 3D shapes, with the Z buffer's test against the Scene enabled. This makes partially or fully occluded Point Lights and Spot Lights very cheap to render. Directional Lights and Point or Spot Lights that cross the near plane are rendered as fullscreen quads.",1079],["If a light has shadows enabled then they are also rendered and applied in this pass. Note that shadows do not come for \"free\"; shadow casters need to be rendered and a more complex light shader must be applied.",1079],["The only lighting model available is Standard. If a different model is wanted you can modify the lighting pass shader, by placing the modified version of the Internal-DeferredShading.shader file from the Built-in shaders into a folder named \"Resources\" in your \"Assets\" folder. Then open the Graphics settings (menu: Edit > Project Settings, then click the Graphics category). Change the \"Deferred\" dropdown to \"Custom Shader\". Then change the Shader option which appears to the shader you are using.",1079],[" 2017-06-08 ",1079],["Light Modes (Shadowmask and Distance Shadowmask) added in 5.6",1079],["Forward rendering path",1080],["This page describes the Forward rendering path in Unity's Built-in Render Pipeline.",1080],["Forward rendering renders each object in one or more passes, depending on lights that affect the object. Lights themselves are also treated differently by Forward Rendering, depending on their settings and intensity.",1080],["Implementation Details",1080],["In Forward rendering, some number of brightest lights that affect each object are rendered in fully per-pixel lit mode. Then, up to 4 point lights are calculated per-vertex. The other lights are computed as Spherical Harmonics (SH), which is much faster but is only an approximation. Whether a light will be a per-pixel light or not is dependent on this:",1080],["Lights that have their Render Mode set to Not Important are always per-vertex or SH.",1080],["Brightest directional light is always per-pixel.",1080],["Lights that have their Render Mode set to Important are always per-pixel.",1080],["If the above results in fewer lights than current Pixel Light Count Quality Setting, then more lights are rendered per-pixel, in order of decreasing brightness.",1080],["Rendering of each object happens as follows:",1080],["Base Pass applies one per-pixel directional light and all per-vertex/SH lights.",1080],["Other per-pixel lights are rendered in additional passes, one pass for each light.",1080],["For example, if there is some object that's affected by a number of lights (a circle in a picture below, affected by lights A to H):",1080],["Let's assume lights A to H have the same color and intensity and all of them have Auto rendering mode, so they would be sorted in exactly this order for this object. The brightest lights will be rendered in per-pixel lit mode (A to D), then up to 4 lights in per-vertex lit mode (D to G), and finally the rest of lights in SH (G to H):",1080],["Note that light groups overlap; for example last per-pixel light blends into per-vertex lit mode so there are less \"light popping\" as objects and lights move around.",1080],["Base Pass",1080],["Base pass renders object with one per-pixel directional light and all SH/vertex lights. This pass also adds any lightmaps, ambient and emissive lighting from the shader. Directional light rendered in this pass can have Shadows. Note that Lightmapped objects do not get illumination from SH lights.",1080],["Note that when \"OnlyDirectional\" pass flag is used in the shader, then the forward base pass only renders main directional light, ambient/lightprobe and lightmaps (SH and vertex lights are not included into pass data).",1080],["Additional Passes",1080],["Additional passes are rendered for each additional per-pixel light that affect this object. Lights in these passes by default do not have shadows (so in result, Forward Rendering supports one directional light with shadows), unless multi_compile_fwdadd_fullshadows variant shortcut is used.",1080],["Performance Considerations",1080],["Per-pixel lights",1080],["Per-pixel dynamic lighting adds significant rendering work to every affected pixel, and can lead to objects being rendered in multiple passes. Avoid having more than one Pixel Light illuminating any single object on less powerful devices, like mobile or low-end PC GPUs, and use lightmaps to light static objects instead of calculating their lighting every frame. Per-vertex dynamic lighting can add significant work to vertex transformations, so try to avoid situations where multiple lights illuminate a single object.",1080],["Avoid combining meshes that are far enough apart to be affected by different sets of pixel lights. When you use pixel lighting, each mesh has to be rendered as many times as there are pixel lights illuminating it. If you combine two meshes that are very far apart, it increase the effective size of the combined object. All pixel lights that illuminate any part of this combined object are taken into account during rendering, so the number of rendering passes that need to be made could be increased. Generally, the number of passes that must be made to render the combined object is the sum of the number of passes for each of the separate objects, so nothing is gained by combining meshes.",1080],["During rendering, Unity finds all lights surrounding a mesh and calculates which of those lights affect it most. The settings on the Quality window are used to modify how many of the lights end up as pixel lights, and how many as vertex lights. Each light calculates its importance based on how far away it is from the mesh and how intense its illumination is - and some lights are more important than others purely from the game context. For this reason, every light has a Render Mode setting which can be set to Important or Not Important; lights marked as Not Important have a lower rendering overhead.",1080],["Example**: Consider a driving game in which the player's car is driving in the dark with headlights switched on. The headlights are probably the most visually significant light source in the game, so their Render Mode should be set to Important. There may be other lights in the game that are less important, like other cars' rear lights or distant lampposts, and which don't improve the visual effect much by being pixel lights. The Render Mode for such lights can safely be set to Not Important to avoid wasting rendering capacity in places where it has little benefit.",1080],["Optimizing per-pixel lighting saves both the CPU and GPU work: the CPU has fewer draw calls to do, and the GPU has fewer vertices to process and pixels to rasterize for all the additional object renders.",1080],["Spherical Harmonics lights",1080],["Spherical Harmonics lights are very fast to render. They have a tiny cost on the CPU, and are actually free for the GPU to apply (that is, base pass always computes SH lighting; but due to the way SH lights work, the cost is exactly the same no matter how many SH lights are there).",1080],["The downsides of SH lights are:",1080],["They are computed at object's vertices, not pixels. This means they do not support light Cookies or normal maps.",1080],["SH lighting is very low frequency. You can't have sharp lighting transitions with SH lights. They are also only affecting the diffuse lighting (too low frequency for specular highlights).",1080],["SH lighting is not local; point or spot SH lights close to some surface will \"look wrong\".",1080],["In summary, SH lights are often good enough for small dynamic objects.",1080],["Hardware requirements for the Built-in Render Pipeline",1081],["Summary",1081],["",1081],["Win/Mac/Linux iOS/Android Consoles \n",1081],["Forward rendering Yes Yes Yes ",1081],["Vertex Lit rendering Yes Yes - ",1081],["Realtime Shadows GPU support GPU support Yes ",1081],["Image Effects Yes Yes Yes ",1081],["Programmable Shaders Yes Yes Yes ",1081],["Fixed Function Shaders Yes Yes - ",1081],["Realtime Shadows",1081],["Realtime Shadows work on most PC, console & mobile platforms. On Windows (Direct3D), the GPU also needs to support shadow mapping features; most discrete GPUs support that since 2003 and most integrated GPUs support that since 2007. Technically, on Direct3D 10, the GPU should support D16/D24X8 or DF16/DF24 texture formats; and on OpenGL it should support the GL_ARB_depth_texture extension.",1081],["Mobile shadows (iOS/Android) require OpenGL ES 2.0 and GL_OES_depth_texture extension, or OpenGL ES 3.0. Most notably, the extension is not present on Tegra 3 and Tegra 4 based Android devices, so shadows do not work there.",1081],["Post-processing Effects",1081],["Post-processing effects require render-to-texture functionality, which is generally supported on anything made in this millenium.",1081],["Shaders",1081],["You can write programmable or fixed function shaders. Programmable shaders are supported everywhere, and default to Shader Model 2.0 (desktop) and OpenGL ES 2.0 (mobile). You can target higher shader models if you want to add more functionality. Fixed function is supported everywhere except consoles.",1081],["Vertex Lit Rendering Path",1082],["This page describes details of the Vertex Lit rendering path in Unity's Built-in Render Pipeline.",1082],["The Vertex Lit path generally renders each object in one pass, with lighting from all lights calculated for each vertex.",1082],["It's the fastest rendering path and has the widest hardware support.",1082],["Since all lighting is calculated at the vertex level, this rendering path does not support most per-pixel effects: shadows, normal mapping, light cookies, and highly detailed specular highlights are not supported.",1082],["Retargeting of Humanoid animations",1083],["One of the most powerful features of Mecanim is retargeting of humanoid animations. This means that with relative ease, you can apply the same set of animations to various character models. Retargeting is only possible for humanoid models, where an Avatar has been configured, because this gives us a correspondence between the models' bone structure.",1083],["Recommended Hierarchy structure",1083],["When working with Mecanim animations, you can expect your scene to contain the following elements:-",1083],["The Imported character model, which has an Avatar on it.",1083],["The Animator Component, referencing an Animator Controller asset.",1083],["A set of animation clips, referenced from the Animator Controller.",1083],["Scripts for the character.",1083],["Character-related components, such as the Character Controller.",1083],["Your project should also contain another character model with a valid Avatar.",1083],["If in doubt about the terminology, consult the Animation Glossary",1083],["The recommended setup is to:",1083],["Create a GameObject in the Hierarchy that contains Character-related components",1083],["Put the model as a child of the GameObject, together with the Animator component",1083],["Make sure scripts referencing the Animator are looking for the animator in the children instead of the root; use GetComponentInChildren<Animator>() instead of GetComponent<Animator>().",1083],["Then in order to reuse the same animations on another model, you need to:",1083],["Disable the original model",1083],["Drop in the desired model as another child of GameObject",1083],["Make sure the Animator Controller property for the new model is referencing the same controller asset",1083],["Tweak the character controller, the transform, and other properties on the top-level GameObject, to make sure that the animations work smoothly with the new model.",1083],["You're done!",1083],["Introduction to rigid body physics",1084],["In real-world physics, a rigid body is any physical body that does not deform or change shape under physics forces. The distance between any two given points of a rigid body remains constant in time, regardless of external forces exerted on it.",1084],["To simulate physics-based behavior such as movement, gravity, collision, and joints, you need to configure items in your scene as rigid bodies. To configure GameObjects as rigid bodies in Unity’s PhysX system, you can assign them the Rigidbody component. The Rigidbody component is represented in the API by the Rigidbody class.",1084],["Rigid body GameObjects with physics-based movement",1084],["In Unity, a Rigidbody component provides a physics-based way to control the movement and position of a GameObject. Instead of the Transform properties, you can use simulated physics forces and torque to move the GameObject, and let the physics engine calculate the results.",1084],["In most cases, if a GameObject has a Rigidbody, you should use the Rigidbody properties to move the GameObject, instead of the Transform properties. The Rigidbody properties apply forces and torque from the physics system, which change the GameObject’s Transform; if you then change the Transform directly, Unity cannot correctly calculate the physics simulation, and you might see unwanted behavior. This is particularly true of rigid bodies with Joints.",1084],["Unity handles physics-based movement globally, not locally. When a GameObject with a Rigidbody moves via physics-based movement, it moves independently of any parent or child GameObject. A child GameObject that has a Rigidbody still uses its parent GameObject to define its local position for initialization, but Unity calculates its physics-based movement in global space.",1084],["To control a Rigidbody via script, the primary classes are AddForce (to add forces to a GameObject) and AddTorque (to apply torque to a GameObject).",1084],["Rigid body GameObjects without physics-based movement",1084],["There are some cases where you might want the physics system to detect a GameObject, but not to control it. For example, you might want Colliders to detect a GameObject, but you intend to control that GameObject’s movement and position via its Transform.",1084],["Movement in Unity that is not physics-based is called kinematic motion. The Rigidbody component has the property Is Kinematic which, when enabled, defines the attached GameObject as non-physics-based, and removes it from the control of the physics engine. This allows you to move it kinematically via the Transform without Unity’s physics simulation calculations overriding the changes.",1084],["A kinematic Rigidbody can apply physics-based force to physics-based Rigidbody GameObjects, but does not receive physics-based force. For example, a kinematic Rigidbody can collide with and “push” a Rigidbody that has physics-based movement, but a Rigidbody with physics-based movement cannot “push” a kinematic Rigidbody.",1084],["If you use a Joint to attach a kinematic Rigidbody to a non-kinematic Rigidbody, the Joint cannot exert forces to move the kinematic Rigidbody. It can only ever move the non-kinematic Rigidbody. However, you can still move the kinematic Rigidbody via the Transform, and the Joint can adjust the pose of the non-kinematic body to satisfy the joint limits.",1084],["Rigidbody optimization",1084],["When a Rigidbody moves at a slower speed than the Sleep Threshold (see the Physics Project Settings), Unity sets the Rigidbody to “sleep”, which means that the physics system does not include it in physics calculations. When a sleeping Rigidbody receives a collision or force, Unity “wakes up” the Rigidbody and continues to include it in physics calculations.",1084],["By default, the sleeping and waking of a Rigidbody component happens automatically.",1084],["However, you can also control this behavior yourself via script, via the methods Rigidbody.Sleep and Rigidbody.WakeUp.",1084],["A Rigidbody might fail to wake up in response to movement and collisions from static colliders (that is, colliders without a Rigidbody) that are moving via the Transform position instead of the physics system. This is particularly likely if the physics system can no longer detect the static collider. If this happens, you can use Rigidbody.WakeUp to wake up the sleeping Rigidbody.",1084],["For more information on how the PhysX physics system handles sleeping, see the NVIDIA PhysX SDK Rigidbody Dynamics documentation on Sleeping.",1084],["Configure Rigidbody Colliders",1085],["Colliders define the physical boundaries of a Rigidbody. To allow collisions to occur, you must add Colliders to a GameObject alongside a Rigidbody.",1085],["If one Rigidbody collides with another, the physics engine only calculates a collision if both GameObjects have a Collider attached. If one GameObject has a Rigidbody but no Collider, it passes through other GameObjects, and Unity does not include it in collision calculations.",1085],["The relative Mass of each Rigidbody in a collision determines how they react when they collide with each other.",1085],["See Collision for more information.",1085],["Convex and concave collider geometry",1085],["The PhysX physics system requires that any collider you place on a non-kinematic Rigidbody is convex, not concave. All primitive shapes in Unity are convex. However, Unity considers a Mesh Collider concave by default.",1085],["If you apply a default Mesh Collider to a non-kinematic Rigidbody, Unity throws an error at runtime. To ensure that your non-kinematic Rigidbody receives physics-based forces, you need to instruct Unity to make the Mesh Collider convex. To do this, enable the Mesh Collider’s Convex property. When Convex is enabled, Unity automatically calculates a convex collider shape (called a hull) based on the associated mesh. However, because the convex hull of the mesh is only an approximation of the original shape, it can lead to inaccurate simulation.",1085],["For a more accurate collision simulation, you can use one of the following approaches:",1085],["Use a DCC tool to split the mesh into several parts, so that when Unity calculates their convex hulls, they represent the total shape better.",1085],["Use several primitive Colliders to manually build a Compound Collider that is the same shape as the mesh.",1085],["Use automatic tools that calculate convex approximations of any mesh, such as Unity’s V-HACD.",1085],["If a Rigidbody is kinematic (that is, it receives no physics-based forces), you can apply any collider to it.",1085],["Apply constant force to a Rigidbody",1086],["To apply a constant linear or rotational force to a GameObject’s Rigidbody, add the Constant Force component (represented by the API class ConstantForce) to your GameObject. See Constant Force component reference for details on how to configure the properties on the component.",1086],["Set maximum velocity limitations",1086],["Constant force is not the same as constant speed. When you apply a constant force, the speed of movement accelerates over time based on the value of the force. In real life, this acceleration continues indefinitely. By default in Unity’s physics simulation, linear acceleration continues indefinitely, and angular acceleration continues until the Rigidbody reaches a max velocity of 50 rad/s. You can change these maximum velocities in code, via the properties Rigidbody.maxLinearVelocity and Rigidbody.maxAngularVelocity.",1086],["Configure constant forward acceleration",1086],["To make a GameObject constantly accelerate forward (for example, to make it behave like a rocket), do the following:",1086],["Add a Constant Force component to the GameObject.",1086],["On the Constant Force component, set the Relative Force Z axis to a positive value.",1086],["On the Rigidbody, disable Use Gravity. This ensures that there is no competing gravitational force acting upon the GameObject.",1086],["On the Rigidbody component, set the Drag property so that the Rigidbody does not exceed your preferred maximum velocity (the higher the drag, the lower the maximum velocity will be). This might require some trial and error to get the effect you want.",1086],["Apply interpolation to a Rigidbody",1087],["Interpolation provides a way to manage the appearance of jitter in the movement of your Rigidbody GameObjects at run time.",1087],["Jitter can happen when the rate of physics simulation updates (determined by the Fixed Timestep) is slower than the application’s frame rate. It is most noticeable if you have a Rigidbody with physics-based movement that the camera tracks at run time.",1087],["Unity's PhysX system provides a way to implement interpolation. The Interpolate setting on a Rigidbody provides two options to smooth the appearance of a Rigidbody’s motion if it appears jittery at run time. These options are Interpolate and Extrapolate.",1087],["Both interpolation and extrapolation calculate the pose of the Rigidbody (that is, the position and rotation) between physics updates. Which one you should choose depends on which option produces the best visual outcome for your use case.",1087],["You should only use interpolation or extrapolation if you see jitter in your Rigidbody's movement. Interpolate is set to None by default.",1087],["When interpolation or extrapolation is enabled, the physics system takes control of the Rigidbody's transform. For this reason, you should follow any direct (non-physics) change to the transform with a [[Physics.SyncTransforms]] call. Otherwise, Unity ignores any transform change that does not originate from the physics system.",1087],["Interpolate",1087],["Use the pose of the Rigidbody from the previous two physics updates to calculate and apply the pose of the Rigidbody in the current frame.",1087],["Interpolate makes the Rigidbody appear to move slightly behind where it should be. This is because interpolation delays the Rigidbody’s pose by one physics update, so that it has two points to use for its calculation, and enough time to move the Rigidbody to the new pose.",1087],["Interpolation is more accurate than extrapolation, but it has a time lag of one physics update.",1087],["Interpolate is usually the best option for situations where the Rigidbody’s velocity varies, or if there are other physics elements that influence the Rigidbody’s movement.",1087],["Interpolate is represented by the API property RigidbodyInterpolation.Interpolate.",1087],["Extrapolate",1087],["Use the pose of the Rigidbody from the previous physics update, and predict the pose of the Rigidbody in the next physics update, to calculate and predict the pose in the current frame.",1087],["Extrapolate makes the Rigidbody appear to move slightly ahead of where it should be. This is because extrapolation uses the Rigidbody’s current velocity to predict the Rigidbody’s pose in the next physics update, so that it has two points to use for its calculation.",1087],["Extrapolation is often less accurate, and might visibly overshoot collision bounds (and then correct itself in the next frame, after the next physics update). This is because the extrapolation calculation does not take into account future physics forces or calculations.",1087],["Extrapolate is usually only a good option for situations where accuracy is not important; for example, if the Rigidbody moves at a constant velocity, and there are no other physics elements that influence the Rigidbody’s movement.",1087],["Extrapolate is represented by the API property RigidbodyInterpolation.Extrapolate.",1087],["Rigidbody physics",1088],["In physics simulation, rigid bodies enable physics-based behaviour such as movement, gravity, and collision.",1088],["In Unity, you can configure rigid bodies with the Rigidbody class, or the corresponding Rigidbody component.",1088],["Topic Description ",1088],[":-------------------- :----------------------- ",1088],["Introduction to Rigidbody physics Overview of the concepts and fundamental behaviours of the Rigidbody class and component. ",1088],["Configure Rigidbody colliders How to configure Colliders on a Rigidbody so that the physics system can accurately detect collisions. ",1088],["Apply constant force to a Rigidbody How and when to apply a constant linear or rotational force to a Rigidbody GameObject. ",1088],["Apply interpolation to a Rigidbody How to use interpolation to smoothen the movement of a Rigidbody if it appears jittery at runtime. ",1088],["Rigidbody component reference Reference page for the Rigidbody component. ",1088],["Constant Force component reference Reference page for the Constant Force component. ",1088],["Additional resources",1088],["Rigidbody 2D body types",1089],["There are three options for Body Type which define the behavior of the Rigidbody 2D. Any Collider 2D attached to that Rigidbody 2D inherits the Rigidbody 2D’s Body Type as well.",1089],["The selected Body Type defines the Rigidbody 2D’s movement behavior (position and rotation) and Collider interactions. When a Body Type changes, Unity recalculates various mass-related internal properties, and all existing contacts for the Collider 2Ds attached to the Rigidbody 2D need to be re-evaluated during the GameObject’s next FixedUpdate. Depending on how many contacts and Collider 2Ds are attached to the body, changing the Body Type can cause variations in performance.",1089],["The properties of the Rigidbody 2D component in its Inspector window differs depending on which Body Type you have selected. You can refer to the following pages for detailed information about the property settings for each Body Type:",1089],["Topic Description ",1089],[":------------------------------------------------ :---------------------------------------------------------------------------------------------------------------- ",1089],["Body Type: Dynamic Use the Dynamic Body Type to design your Rigidbody 2D to move under simulation. ",1089],["Body Type: Kinematic Use the Kinematic Body Type to design your Rigidbody 2D to move under simulation only with explicit user control. ",1089],["Body Type: Static Use the Static Body Type to design your Rigidbody 2D to not move under simulation. ",1089],["Additional resources",1089],["Body Type: Dynamic",1090],["The Dynamic Body Type is the default Body Type for a Rigidbody 2D, because it is the most common Body Type for things that need to move and is designed to move under simulation. All Rigidbody 2D properties are available with this Body Type, such as finite mass and drag, and is affected by gravity and forces. A Dynamic body will collide with every other Body Type, and is the most interactive of Body Types. It’s also the most performance-expensive Body Type, because of its dynamic nature and interactivity with everything around it",1090],["Tip:** Do not use the Transform component to set the position or rotation of a Dynamic Rigidbody 2D. The simulation repositions a Dynamic Rigidbody 2D according to its velocity; you can change this directly via forces applied to it by scripts, or indirectly via collisions and gravity.",1090],["Available Rigidbody 2D properties",1090],["Property Function ",1090],["Body Type Select to set the movement behavior and Collider 2D interaction of this Rigidbody 2D’s component settings. ",1090],[" **Dynamic** Select to set this Rigidbody 2D to the Dynamic Body Type, which is designed to move under simulation and has all Rigidbody 2D properties available. The is the default Body Type for a Rigidbody 2D \n",1090],[" **Kinematic** Select to set this Rigidbody 2D to the [Kinematic](Rigidbody2D-Kinematic) Body Type, which is designed to move under simulation but only under very explicit user control. Refer to [Body Type: Kinematic](Rigidbody2D-Kinematic) for more information. \n",1090],[" **Static** Select to set this Rigidbody 2D to the [Static](Rigidbody2D-Static) Body Type, which is designed to not move under simulation at all and behaves like an immovable object with infinite mass. Refer to [Body Type: Static](Rigidbody2D-Static) for more information. \n",1090],["Material Set a common physics material for all Collider 2Ds attached to this Rigidbody 2D. Note: A Collider 2D uses its own Material property if it has one set. If there is no Material specified here or in the Collider 2D, the default option is None (Physics Material 2D). This uses a default Material which you can set in the Physics 2D window. ",1090],["Simulated Enable Simulated to have the Rigidbody 2D and any attached Collider 2Ds and Joint 2Ds to interact with the physics simulation during runtime. If this is disabled, these components do not interact with the simulation. Refer to Rigidbody 2D properties: Simulated for more information. This property is enabled by default. ",1090],["Use Auto Mass Enable this property to have the Rigidbody 2D automatically detect the GameObject's mass from its Collider 2D. ",1090],["Mass Define the mass of the Rigidbody 2D. This is grayed out if you have enabled Use Auto Mass. ",1090],["Linear Drag Set the drag coefficient affecting positional movement. ",1090],["Angular Drag Set the drag coefficient affecting rotational movement. ",1090],["Gravity Scale Define the degree to which the GameObject is affected by gravity. ",1090],["Collision Detection Define how collisions between Collider 2Ds are detected. ",1090],["Discrete Select this option to allow GameObjects with Rigidbody 2Ds and Collider 2Ds to overlap or pass through each other during a physics update, if they are moving fast enough. Collision contacts are only generated at the new position. ",1090],["Continuous Select this option to ensure GameObjects with Rigidbody 2Ds and Collider 2Ds do not pass through each other during a physics update. Instead, Unity calculates the first impact point of any of the Collider 2Ds, and moves the GameObject there. Note: This option takes more CPU time than Discrete. ",1090],["Sleeping Mode Define how the GameObject \"sleeps\" to save processor time when it is at rest. ",1090],["Never Sleep Select this option to have sleeping disabled. Important: This should be avoided where possible, as it can impact system resources. ",1090],["Start Awake Select this to have the GameObject initially awake. ",1090],["Start Asleep Select this to have the GameObject initially asleep but can be awaken by collisions. ",1090],["Interpolate Define how the GameObject's movement is interpolated between physics updates. Tip: This is useful when motion tends to be jerky. ",1090],["None Select this to not apply movement smoothing. ",1090],["Interpolate Select this to smoothen movement based on the GameObject's positions in previous frames. ",1090],["Extrapolate Select this to smoothen movement is smoothed based on an estimate of its position in the next frame. ",1090],["Constraints Define any restrictions on the Rigidbody 2D’s motion. ",1090],["Freeze Position Stops the Rigidbody 2D moving in the X and Y world axes selectively. ",1090],["Freeze Rotation Stops the Rigidbody 2D rotating around the Z world axis selectively. ",1090],["Layer Overrides Expand for the Layer override settings. ",1090],["Include Layers Select the additional Layers that all Collider 2Ds attached to this Rigidbody 2D should include, when deciding if a collision with another Collider2D should occur or not. Refer to Rigidbody2D-includeLayers for more information. ",1090],["Exclude Layers Select the additional Layers that all Collider 2Ds attached to this Rigidbody 2D should exclude, when deciding if a collision with another Collider 2D should occur or not. Refer to Rigidbody2D-excludeLayers for more information. ",1090],["Body Type: Kinematic",1091],["The Kinematic Body Type Rigidbody 2D is designed to move under simulation, but only under very explicit user control. While a Dynamic Rigidbody 2D is affected by gravity and forces, a Kinematic Rigidbody 2D is not. Because of this, the Kinematic Rigidbody 2D has a lower demand on system resources than a Dynamic Rigidbody 2D, allowing it to be simulated faster.",1091],["To reposition a Kinematic Rigidbody 2D, it must be repositioned explicitly via Rigidbody2D.MovePosition or Rigidbody2D.MoveRotation. Use physics queries to detect collisions, and scripts to decide where and how the Rigidbody 2D should move.",1091],["A Kinematic Rigidbody 2D can still move via its velocity, but the velocity is not affected by forces or gravity. A Kinematic Rigidbody 2D does not collide with other Kinematic Rigidbody 2Ds or with Static Rigidbody 2Ds and will only collide with Dynamic Rigidbody 2Ds. A Kinematic Rigidbody 2D behaves like an immovable object (as if it has infinite mass) during collisions, and mass-related properties are not available with this Body Type.",1091],["Available Rigidbody 2D properties",1091],["Property Function ",1091],["Body Type Select to set the movement behavior and Collider 2D interaction of this Rigidbody 2D’s component settings. ",1091],[" **Dynamic** Select to set this Rigidbody 2D to the [Dynamic](Rigidbody2D-Dynamic) Body Type, which is designed to move under simulation and has all Rigidbody 2D properties available. This is the default Body Type for a Rigidbody 2D \n",1091],[" **Kinematic** Select to set this Rigidbody 2D to the Kinematic Body Type, which is designed to move under simulation but only under very explicit user control. \n",1091],[" **Static** Select to set this Rigidbody 2D to the [Static](Rigidbody2D-Static) Body Type, which is designed to not move under simulation at all and behaves like an immovable object with infinite mass. Refer to [Body Type: Static](Rigidbody2D-Static) for more information. \n",1091],["Material Set a common physics material for all Collider 2Ds attached to this Rigidbody 2D. Note: A Collider 2D uses its own Material property if it has one set. If there is no Material specified here or in the Collider 2D, the default option is None (Physics Material 2D). This uses a default Material which you can set in the Physics 2D window. ",1091],["Simulated Enable Simulated to have the Rigidbody 2D and any attached Collider 2Ds and Joint 2Ds to interact with the physics simulation during runtime. If this is disabled, these components do not interact with the simulation. Refer to Rigidbody 2D properties: Simulated, below for more information. This property is enabled by default. ",1091],["Full Kinematic Contact Enable this property if you want the Rigidbody 2D to be able to collide with all other Rigidbody 2D Body Types. Note: When this property is disabled, the Kinematic Rigidbody 2D only collides with Dynamic Rigidbody 2Ds. See Using Full Kinematic Contacts for more details. ",1091],["Collision Detection Define how collisions between Collider 2Ds are detected. ",1091],["Discrete Select this option to allow GameObjects with Rigidbody 2Ds and Collider 2Ds to overlap or pass through each other during a physics update, if they are moving fast enough. Collision contacts are only generated at the new position. ",1091],["Continuous Select this option to ensure GameObjects with Rigidbody 2Ds and Collider 2Ds do not pass through each other during a physics update. Instead, Unity calculates the first impact point of any of the Collider 2Ds, and moves the GameObject there. Note: This option takes more CPU time than Discrete. ",1091],["Sleeping Mode Define how the GameObject \"sleeps\" to save processor time when it is at rest. ",1091],["Never Sleep Select this option to have sleeping disabled. Important: This should be avoided where possible, as it can impact system resources. ",1091],["Start Awake Select this to have the GameObject initially awake. ",1091],["Start Asleep Select this to have the GameObject initially asleep but can be awaken by collisions. ",1091],["Interpolate Define how the GameObject's movement is interpolated between physics updates. Tip: This is useful when motion tends to be jerky. ",1091],["None Select this to not apply movement smoothing. ",1091],["Interpolate Select this to smoothen movement based on the GameObject's positions in previous frames. ",1091],["Extrapolate Select this to smoothen movement is smoothed based on an estimate of its position in the next frame. ",1091],["Constraints Define any restrictions on the Rigidbody 2D’s motion. ",1091],["Freeze Position Stops the Rigidbody 2D moving in the X and Y world axes selectively. ",1091],["Freeze Rotation Stops the Rigidbody 2D rotating around the Z world axis selectively. ",1091],["Layer Overrides Expand for the Layer override settings. ",1091],["Include Layers Select the additional Layers that all Collider 2Ds attached to this Rigidbody 2D should include, when deciding if a collision with another Collider2D should occur or not. Refer to Rigidbody2D-includeLayers for more information. ",1091],["Exclude Layers Select the additional Layers that all Collider 2Ds attached to this Rigidbody 2D should exclude, when deciding if a collision with another Collider 2D should occur or not. Refer to Rigidbody2D-excludeLayers for more information. ",1091],["Using Full Kinematic Contacts ",1091],["Enabling Full Kinematic Contacts enables a Kinematic Rigidbody 2D to collide with all Rigidbody 2D Body Types. This is similar to the behavior of a Dynamic Rigidbody 2D, except the Kinematic Rigidbody 2D is not moved by the physics system when contacting another Rigidbody 2D. Instead, it behaves like an immovable object with infinite mass.",1091],["When this property is disabled, a Kinematic Rigidbody 2D will only collide with Dynamic Rigidbody 2Ds and not the other Body Types. Note: Trigger Colliders are an exception to this rule. This means that no collision scripting callbacks (OnCollisionEnter, OnCollisionStay, OnCollisionExit will occur.",1091],["This can be inconvenient when you are using physics queries (such as Physics.Raycast to detect where and how a Rigidbody 2D should move, and when you require multiple Kinematic Rigidbody 2Ds to interact with each other. Enable Use Full Kinematic Contacts to make Kinematic Rigidbody 2D components interact in this way.",1091],["Tip**: Use Full Kinematic Contacts allows explicit position and rotation control of a Kinematic Rigidbody 2D, but still allows full collision callbacks. In a setup where you need explicit control of all Rigidbody 2Ds, use Kinematic Rigidbody 2Ds in place of Dynamic Rigidbody 2Ds to still have full collision callback support.",1091],["Rigidbody 2D properties: Simulated",1092],["The Simulated property is common to all available Body Types. Use this property to start (enabled) or stop (disabled) a Rigidbody 2D and any attached Collider 2Ds and Joint 2Ds from interacting with the 2D physics simulation. Changing this property is more memory and processor efficient than enabling or disabling individual Collider 2D and Joint 2D components.",1092],["When you enable the Simulated property, the following occurs:",1092],["The Rigidbody 2D moves via the simulation (gravity and physics forces are applied).",1092],["Any attached Collider 2Ds continue creating new contacts and continuously reevaluate contacts.",1092],["Any attached Joint 2Ds are simulated and constrain the attached Rigidbody 2D.",1092],["All internal physics objects for Rigidbody 2D, Collider 2D, and Joint 2D stay in memory.",1092],["When you disable the Simulated property, the following occurs:",1092],["The Rigidbody 2D isn't moved by the simulation (gravity and physics forces aren't applied).",1092],["The Rigidbody 2D doesn't create new contacts, and any attached Collider 2D contacts are destroyed.",1092],["Any attached Joint 2Ds aren't simulated, and don't constrain any attached Rigidbody 2Ds.",1092],["All internal physics objects for Rigidbody 2D, Collider 2D, and Joint 2D remain in memory.",1092],["Improve efficiency with the Simulated property",1092],["You can stop and start individual elements of the 2D physics simulation by enabling and disabling physics related components individually on both Collider 2D and Joint 2D components. However, enabling and disabling individual elements of the physics simulations means internal GameObjects and physics-based components are constantly created and destroyed, which can cost high memory usage and processor power. Therefore, it's more efficient to disable the physics simulation entirely rather than disabling the individual components.",1092],["Note:** When you disable a Rigidbody 2D’s Simulated option, any attached Collider 2D is effectively ‘invisible’ and can't be detected by any physics queries, such as with Physics.Raycast.",1092],["Body Type: Static",1093],["A Static Rigidbody 2D is designed to not move under simulation at all. If anything collides with it, a Static Rigidbody 2D behaves like an immovable object (as though it has infinite mass). It is also the least resource intensive Body Type. A Static body only collides with Dynamic Rigidbody 2Ds. Note: Having two Static Rigidbody 2Ds collide is not supported, since they are not designed to move.",1093],["Due to their limited behavior, only a very limited set of properties are available for this Body Type.",1093],["Available Rigidbody 2D properties",1093],["Property Function ",1093],["Body Type Select to set the movement behavior and Collider 2D interaction of this Rigidbody 2D’s component settings. ",1093],[" **Dynamic** Select to set this Rigidbody 2D to the [Dynamic](Rigidbody2D-Dynamic) Body Type, which is designed to move under simulation and has all Rigidbody 2D properties available. The is the default Body Type for a Rigidbody 2D \n",1093],[" **Kinematic** Select to set this Rigidbody 2D to the [Kinematic](Rigidbody2D-Kinematic) Body Type, which is designed to move under simulation but only under very explicit user control. Refer to [Body Type: Kinematic](Rigidbody2D-Kinematic) for more information. \n",1093],[" **Static** Select to set this Rigidbody 2D to the Static Body Type, which is designed to not move under simulation at all and behaves like an immovable object with infinite mass. \n",1093],["Material Set a common physics material for all Collider 2Ds attached to this Rigidbody 2D. Note: A Collider 2D uses its own Material property if it has one set. If there is no Material specified here or in the Collider 2D, the default option is None (Physics Material 2D). This uses a default Material which you can set in the Physics 2D window. Tip: Use this to ensure that all Collider 2Ds attached to the same Static Body Type Rigidbody 2D can all use the same Material. ",1093],["Simulated Enable Simulated to have the Rigidbody 2D and any attached Collider 2Ds and Joint 2Ds to interact with the physics simulation during runtime. If this is disabled, these components do not interact with the simulation. Refer to Rigidbody 2D properties: Simulated for more information. This property is enabled by default. ",1093],["Layer Overrides Expand for the Layer override settings. ",1093],["Include Layers Select the additional Layers that all Collider 2Ds attached to this Rigidbody 2D should include, when deciding if a collision with another Collider2D should occur or not. Refer to Rigidbody2D-includeLayers for more information. ",1093],["Exclude Layers Select the additional Layers that all Collider 2Ds attached to this Rigidbody 2D should exclude, when deciding if a collision with another Collider 2D should occur or not. Refer to Rigidbody2D-excludeLayers for more information. ",1093],["Creating a large number of Static Collider 2D",1093],["Aside from setting the Rigidbody 2D to the Static Body Type, there is another scenario where a Static Rigidbody 2D is created. This is when a GameObject with a Collider 2D component does not have a Rigidbody 2D component at all. All Collider 2Ds without a Rigidbody 2D component are internally considered to be attached to a single hidden Static Rigidbody 2D component.",1093],["This means that you are able to create a large number of Static Collider 2Ds as you do not have to add a Rigidbody 2D component for each individual GameObject. Both methods of creating Static Collider 2Ds have their advantages, depending on the scenario.",1093],["If an individual Static Collider 2D needs to be moved or reconfigured at runtime, then add a Rigidbody 2D component and set it to the Static Body Type, as it is faster to simulate the Collider 2D when it has its own Rigidbody 2D. If a group of Collider 2Ds needs to be moved or reconfigured at runtime, it is faster to have them all be children of the single hidden parent Rigidbody 2D than to move each GameObject individually.",1093],["Note:** As stated above, Static Rigidbody 2Ds are designed not to move, and collisions between two Static Rigidbody 2D objects that intersect are not registered. However, Static Rigidbody 2Ds and Kinematic Rigidbody 2Ds will interact with each other if one of their Collider 2Ds is set to be a trigger. There is also a feature that changes what a Kinematic body will interact with (see Use Full Kinematic Contacts for more information).",1093],["Rigidbody 2D",1094],["Rigidbodies enable physics-based behavior, such as reactions to gravity, mass, drag, and momentum. A Rigidbody 2D is a 2D component you can use to enable an object to act under the control of physics.",1094],["Topic Description ",1094],[":------------------------------------------------------ :----------------------------------------------------------------------------------------------- ",1094],["Introduction to Rigidbody 2D Learn how to use Rigidbody 2D in your project and how they interact with Collider 2D components. ",1094],["Rigidbody 2D body types Choose which Body Type to use to define the behavior of the Rigidbody 2D. ",1094],["Simulated property Use this property to start or stop a Rigidbody 2D and any attached Collider 2Ds and Joint 2Ds from interacting with the 2D physics simulation. ",1094],["Additional resources",1094],["Root Motion - how it works",1095],["Body Transform",1095],["The Body Transform is the mass center of the character. It is used in Mecanim's retargeting engine and provides the most stable displacement model. The Body Orientation is an average of the lower and upper body orientation relative to the Avatar T-Pose.",1095],["The Body Transform and Orientation are stored in the Animation Clip (using the Muscle definitions set up in the Avatar). They are the only world-space curves stored in the Animation Clip. Everything else: muscle curves and IK goals (Hands and Feet) are stored relative to the body transform.",1095],["Root Transform",1095],["The Root Transform is a projection on the Y plane of the Body Transform and is computed at runtime. At every frame, a change in the Root Transform is computed. This change in transform is then applied to the Game Object to make it move.",1095],["Animation Clip Inspector",1095],["The Animation Clip Editor settings - Root Transform Rotation, Root Transform Position (Y) and Root Transform Position (XZ) - let you control the Root Transform projection from the Body Transform. Depending on these settings some parts of the Body Transform may be transferred to Root Transform. For example you can decide if you want the motion Y position to be part of the Root Motion (trajectory) or part of the pose (body transform), which is known as Baked into Pose.",1095],["Root Transform Rotation",1095],["Bake into Pose: The orientation will stay on the body transform (or Pose). The Root Orientation will be constant and delta Orientation will be identity. This means that the Game Object will not be rotated at all by that AnimationClip.",1095],["Only AnimationClips that have similar start and stop Root Orientation should use this option. You will have a Green Light in the UI telling you that an AnimationClip is a good candidate. A suitable candidate would be a straight walk or a run.",1095],["Based Upon: This lets you set the orientation of the clip. Using Body Orientation, the clip will be oriented to follow the forward vector of body. This default setting works well for most Motion Capture (Mocap) data like walks, runs, and jumps, but it will fail with motion like strafing where the motion is perpendicular to the body's forward vector. In those cases you can manually adjust the orientation using the Offset setting. Finally you have Original that will automatically add the authored offset found in the imported clip. It is usually used with Keyframed data to respect orientation that was set by the artist.",1095],["Offset: used to enter the offset when that option is chosen for Based Upon.",1095],["Root Transform Position (Y)",1095],["This uses the same concepts described in Root Transform Rotation.",1095],["Bake Into Pose: The Y component of the motion will stay on the Body Transform (Pose). The Y component of the Root Transform will be constant and Delta Root Position Y will be 0. This means that this clip won't change the Game Object Height. Again you have a Green Light telling you that a clip is a good candidate for baking Y motion into pose.",1095],["Most of the AnimationClips will enable this setting. Only clips that will change the GameObject height should have this turned off, like jump up or down.",1095],["Note: the Animator.gravityWeight is driven by Bake Into Pose position Y. When enabled, gravityWeight = 1, when disabled = 0. gravityWeight is blended for clips when transitioning between states.",1095],["Based Upon: In a similar way to Root Transform Rotation you can choose from Original or Mass Center (Body). There is also a Feet option that is very convenient for AnimationClips that change height (Bake Into Pose disabled). When using Feet the Root Transform Position Y will match the lowest foot Y for all frames. Thus the blending point always remains around the feet which prevents floating problem when blending or transitioning.",1095],["Offset: In a similar way to Root Transform Rotation, you can manually adjust the AnimationClip height using the Offset setting.",1095],["Root Transform Position (XZ)",1095],["Again, this uses same concepts described in Root Transform Rotation and Root Motion Position (Y).",1095],["Bake Into Pose will usually be used for \"Idles\" where you want to force the delta Position (XZ) to be 0. It will stop the accumulation of small deltas drifting after many evaluations. It can also be used for a Keyframed clip with Based Upon Original to force an authored position that was set by the artist.",1095],["Loop Pose",1095],["Loop Pose (like Pose Blending in Blend Trees or Transitions) happens in the referential of Root Transform. Once the Root Transform is computed, the Pose becomes relative to it. The relative Pose difference between Start and Stop frame is computed and distributed over the range of the clip from 0-100%.",1095],["Generic Root Motion and Loop Pose",1095],["This works in essentially the same as Humanoid Root Motion, but instead of using the Body Transform to compute/project a Root Transform, the transform set in Root Node is used. The Pose (all the bones which transform below the Root Motion bone) is made relative to the Root Transform.",1095],["Roslyn analyzers and source generators",1096],["Use Roslyn analyzers, source generators and ruleset files in Unity projects to inspect your code for style, quality, and other issues.",1096],["You can use existing analyzer libraries to inspect your code, and write your own analyzers to promote the best practices or conventions within your organization. This page explains how to use Roslyn analyzers and source generators in an empty Unity Project.",1096],["Note**: Roslyn analyzers are only compatible with the IDEs that Unity publicly supports, which are Visual Studio and JetBrains Rider.",1096],["For more information about how to write and use Roslyn analyzers, refer to Microsoft’s Analyzer Configuration and Get started with Roslyn analyzers documentation.",1096],["Source generators",1096],["You can use source generators as an additional step in your script compilation process. You can use source generators to add new code while you compile your existing code. Like analyzers, you can use existing source generators or create your own.",1096],["Note**: Unity only supports version 6.0.0-preview of the ‘System.Text.Json’ namespace. If you want to use this namespace in your application, ensure you use version 6.0.0-preview. For more information about System.Text.Json, refer to Microsoft’s System.Text.Json Namespace documentation.",1096],["To set up a source generator using Visual Studio:",1096],["In Visual Studio, create a .NET standard library project that targets .NET Standard 2.0.",1096],["Install the Microsoft.CodeAnalysis NuGet package. Your source generator must use Microsoft.CodeAnalysis 3.8 to work with Unity.",1096],["In your Visual Studio project, create a new C# file and add the following code:",1096],["```csharp",1096],["using Microsoft.CodeAnalysis;",1096],["using Microsoft.CodeAnalysis.Text;",1096],["using System.Text;",1096],["namespace ExampleSourceGenerator",1096],["[Generator]",1096],["public class ExampleSourceGenerator : ISourceGenerator",1096],["public void Execute(GeneratorExecutionContext context)",1096],["System.Console.WriteLine(System.DateTime.Now.ToString());",1096],["var sourceBuilder = new StringBuilder(",1096],["@\"",1096],["using System;",1096],["namespace ExampleSourceGenerated",1096],["public static class ExampleSourceGenerated",1096],["public static string GetTestText()",1096],["return \"\"This is from source generator \");",1096],["sourceBuilder.Append(System.DateTime.Now.ToString());",1096],["sourceBuilder.Append(",1096],["@\"\"\";",1096],["\");",1096],["context.AddSource(\"exampleSourceGenerator\", SourceText.From(sourceBuilder.ToString(), Encoding.UTF8));",1096],["public void Initialize(GeneratorInitializationContext context) { }",1096],["Build your source generator for release. To do this, go to Build and select the Batch Build option.",1096],["In your source generator’s project folder, find the bin/Release/netstandard2.0/ExampleSourceGenerator.dll file.",1096],["Copy this file into your Unity project, inside the Assets folder.",1096],["Inside the Asset Browser, click on the .dll file to open the Plugin Inspector window.",1096],["Go to Select platforms for plugin and disable Any Platform.",1096],["Go to Include Platforms and disable Editor and Standalone.",1096],["Go to Asset Labels and open the Asset Labels sub-menu.",1096],["Create and assign a new label called RoslynAnalyzer. To do this, enter “RoslynAnalyzer” into the text input window in the Asset Labels sub-menu. This label must match exactly and is case sensitive. After you create the label for the first analyzer, The label appears in the Asset Labels sub-menu. You can click on the name of the label in the menu to assign it to other analyzers.",1096],["A warning will be printed in the console because this source generator will get injected into more than one assembly. The solution is to make ExampleSourceGenerated in the above example internal or the name itself should be generated.",1096],["To test the source generator is working, create a new C# script in the editor with the following code:",1096],["```csharp",1096],["using UnityEngine;",1096],["public class HelloFromSourceGenerator : MonoBehaviour",1096],["static string GetStringFromSourceGenerator()",1096],["return ExampleSourceGenerated.ExampleSourceGenerated.GetTestText();",1096],["// Start is called before the first frame update",1096],["void Start()",1096],["var output = \"Test\";",1096],["output = GetStringFromSourceGenerator();",1096],["Debug.Log(output);",1096],["Add this script to a GameObject in the scene and enter Play mode. A message from the source generator will appear in the Console window, including the time stamp. A warning will also appear in the console because this source generator will get injected into more than one assembly. The solution is to make ExampleSourceGenerated in the above example internal or the name itself should be generated.",1096],["For more information about source generators, refer to Microsoft’s Source Generators documentation.",1096],[" Analyzer scope",1096],["You can limit the scope of analyzers in your project by using assembly definitions, so that they only analyze certain portions of your code.",1096],["Unity applies analyzers to all assemblies in your project’s Assets folder, or in any subfolder whose parent folder doesn’t contain an assembly definition file. If an analyzer is in a folder that contains an assembly definition, or a subfolder of such a folder, the analyzer only applies to the assembly generated from that assembly definition, and to any other assembly that references it.",1096],["This means, for example, that a package can supply analyzers that only analyze code related to the package, which can help package users to use the package API correctly.",1096],["Report analyzer diagnostics",1096],["To view information such as the total execution time of your analyzers and source generators or the relative execution times of each analyzer or source generator, go to Preferences > Diagnostic Switches and enable EnableDomainReloadTimings. When enabled, the information is displayed in the console window.",1096],["Installing an existing Roslyn analyzer or source generator",1096],["Unity doesn’t support the installation of Roslyn Analyzers or source generators through NuGet directly. The below example uses the ErrorProne.NET.CoreAnalyzers library to demonstrate how to install Roslyn Analyzers and source generators from NuGet:",1096],["Download the library as a .zip file with the Download package button.",1096],["Extract the contents of the .zip file.",1096],["Inside the extracted folder, locate the .dll files that contain the analyzers. In this example, navigate to errorprone.net.coreanalyzers<version-number>\\analyzers\\dotnet\\cd. The required files should be in this folder, named ErrorProne.NET.Core.dll, ErrorProne.Net.CoreAnalyzers.dll, and RuntimeContracts.dll.",1096],["Move these files into the Assets folder, or any folder nested inside of the Assets folder, in your Unity project. To do this, either go to Assets > Import new asset and select the .dll for each of the three files, or copy them into your project’s Assets folder through your device’s file browser.",1096],["Click on the .dll file inside the Asset Browser inside Unity to open the Plugin Inspector window.",1096],["Inside the Plugin Inspector window:",1096],["Under the Select platforms for plugin heading, disable Any Platform.",1096],["Under the Include Platforms heading, disable Editor and Standalone.",1096],["Under the Asset Labels heading in the Plugin Inspector window, click on the blue label icon to open the Asset Labels sub-menu.",1096],["Create and assign a new label called RoslynAnalyzer. To do this, type “RoslynAnalyzer” into the text input window in the Asset Labels sub-menu and press Return. This label must exactly match the example and is case sensitive. After you create the label for the first analyzer, it appears on the list of available labels in the Asset Labels sub-menu. You can click on the name of the label in the menu to assign it to other analyzers.",1096],["Unity recognizes the RoslynAnalyzer label and treats assets with this label as Roslyn Analyzers or source generators. When you assign the label to an analyzer, Unity recompiles scripts within the scope of the analyzer and analyzes the code in those scripts according to the rules in the analyzer. Any scripts that are within the same assembly definition as an analyzer are in that analyzer’s scope. For analyzers in the root level of the Assets folder, Unity considers all files in the project to be in scope. For more information about scope, refer to Analyzer scope above.",1096],["To test that your analyzers work correctly, follow the example below. If you have installed the analyzers correctly, the ErrorProne.NET analyzer raises warnings when it analyzes the code in the example.",1096],["Create a new script file named RethrowError.cs. Copy the following code into this script and save the file:",1096],["```lang-C#",1096],["using System;",1096],["using UnityEngine;",1096],["public class RethrowError : MonoBehaviour",1096],["void Update()",1096],["try",1096],["DoSomethingInteresting();",1096],["catch (Exception e)",1096],["Debug.Log(e.Message);",1096],["throw e;",1096],["private void DoSomethingInteresting()",1096],["throw new System.NotImplementedException();",1096],["When you save the file, Unity recompiles the script and runs any applicable analyzers on the script’s code. When the ErrorProne.NET analyzer is correctly installed, it raises the following warnings in the Console window about the above code:",1096],["Assets\\RethrowError.cs(14,23): warning EPC12: Suspicious exception handling: only e.Message is observed in exception block.",1096],["Assets\\RethrowError.cs(15,19): warning ERP021: Incorrect exception propagation. Use throw; instead.",1096],["Ruleset files",1096],["To define your own rules on how to handle the various warnings and errors that the analyzers in your project raise, you can create a ruleset file. For more information on how to create a custom ruleset, refer to Microsoft’s Visual Studio documentation on how to create a custom rule set.",1096],["In the Assets root folder, place a ruleset file named Default.ruleset. The rules you define in Default.ruleset apply to all predefined assemblies (for example Assembly-CSharp.dll), and all assemblies that are built using .asmdef files.",1096],["To override the rules in Default.ruleset for a predefined assembly, create a .ruleset file in the root folder with the name [PredefinedAssemblyName].ruleset. For example, the rules in Assembly-CSharp.ruleset apply to the code in Assembly-CSharp.dll. Only these .ruleset files are allowed inside the root folder:",1096],["Default.ruleset",1096],["Assembly-CSharp.ruleset",1096],["Assembly-CSharp-firstpass.ruleset",1096],["Assembly-CSharp-Editor.ruleset",1096],["Assembly-CSharp-Editor-firstpass.ruleset",1096],["Workflow: Testing ruleset files in Unity",1096],["To test ruleset files in Unity, follow these steps:",1096],["Step 1: Set up the ruleset file",1096],["Create a subfolder named “Subfolder” inside your project’s Assets folder.",1096],["Inside Subfolder:",1096],["Create a new .asmdef file.",1096],["Save a duplicate copy of RethrowError.cs.",1096],["Create a Default.ruleset file inside Assets with the following code:",1096],["",1096],["",1096],["",1096],["",1096],["",1096],["",1096],["",1096],["The Default.ruleset file defines the following rules:",1096],["Suppress EPC12, the warning about suspicious exception handling.",1096],["Elevate ERP021, the warning about incorrect exception propagation, to an error.",1096],["Step 2: Reload the project",1096],["After you add the ruleset files to your project, reimport any script that lives in an assembly where the rules should apply. This forces Unity to recompile the assembly using the new ruleset files. After recompilation, two messages will appear in the Console window:",1096],["Assets\\Subfolder\\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.",1096],["Assets\\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.",1096],["Notice that Unity applies the rules defined in Default.ruleset to both Assets/RethrowError.cs and Assets/Subfolder/RethrowError.cs.",1096],["Step 3: Add a custom ruleset",1096],["In Assets/Subfolder, create a .ruleset file, and give it any name you like (in this exampleHello.ruleset):",1096],["",1096],["",1096],["",1096],["",1096],["",1096],["",1096],["",1096],["This new Hello.ruleset file tells Unity to print both EPC12 and ERP021 to the Console, without treating them as warnings or errors.",1096],["After Unity compiles the project again, the following messages will appear in the Console window:",1096],["Assets\\Subfolder\\RethrowError.cs(14,23): info EPC12: Suspicious exception handling: only e.Message is observed in exception block.",1096],["Assets\\Subfolder\\RethrowError.cs(15,19): info ERP021: Incorrect exception propagation. Use throw; instead.",1096],["Assets\\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.",1096],["The rules in Default.ruleset still apply to Assets\\RethrowError.cs, but they no longer apply to Assets\\Subfolder\\RethrowError.cs, because the rules in Hello.ruleset override them.",1096],["For more information on all the allowed ruleset action files, refer to the Visual Studio documentation on Using the code analysis rule set editor.",1096],["More analyzers",1096],["The following are links to Github repositories of other popular Roslyn analyzer libraries:",1096],["Running Editor Script Code on Launch",1097],["Sometimes, it is useful to be able to run some editor script code in a project as soon as Unity launches without requiring action from the user. You can do this by applying the InitializeOnLoad attribute to a class which has a static constructor. A static constructor is a function with the same name as the class, declared static and without a return type or parameters (see here for more information):-",1097],["using UnityEngine;",1097],["using UnityEditor;",1097],["[InitializeOnLoad]",1097],["public class Startup {",1097],["static Startup()",1097],["Debug.Log(\"Up and running\");",1097],["A static constructor is always guaranteed to be called before any static function or instance of the class is used, but the InitializeOnLoad attribute ensures that it is called as the editor launches.",1097],["An example of how this technique can be used is in setting up a regular callback in the editor (its \"frame update\", as it were). The EditorApplication class has a delegate called update which is called many times a second while the editor is running. To have this delegate enabled as the project launches, you could use code like the following:-",1097],["using UnityEditor;",1097],["using UnityEngine;",1097],["[InitializeOnLoad]",1097],["class MyClass",1097],["static MyClass ()",1097],["EditorApplication.update += Update;",1097],["static void Update ()",1097],["Debug.Log(\"Updating\");",1097],["Safe Mode",1098],["Overview",1098],["Unity’s Safe Mode is a mode that the Unity Editor can enter when you open a project that has script compilation errors. Safe Mode is designed to provide the best environment for resolving compilation errors, so that you can quickly return your project to a functional state.",1098],["In Safe Mode, Unity provides a minimal version of the Editor user interface, with limited functions. It only imports script-related assets, and prevents the import of non-script assets (such as models, materials, textures and prefabs). This is because Safe Mode is not meant for content production, only for resolving compilation errors.",1098],["Safe Mode never allows managed code to run from your project, or its packages. This means your own scripts such as Editor scripts, asset post-processors, and scripted importers do not run. Safe Mode also disables assembly overrides, and the Burst and Roslyn Analysers. This ensures the Editor in Safe Mode is always fully functional and reliable, even when it opens a project in a very broken state.",1098],["Unity automatically exits Safe Mode when it detects there are no more compilation errors. When it exits Safe Mode, Unity imports your project in full, and the Editor restores its normal full functionality.",1098],["Common causes of compilation errors",1098],["Some common scenarios that might result in you encountering compilation errors occur when you:",1098],["Upgrade a project from an older version of Unity to a newer version.",1098],["Open a project in a different version of Unity from the one it was created in.",1098],["Open a project with a missing package, or an incorrect version of a package.",1098],["Open a project which has errors in your own scripts.",1098],["Open a project under version control, where the latest changes you pulled contained compilation errors.",1098],["Opening a project that has compilation errors without Safe Mode can cause many kinds of problems. For example, packages in your project might not load or function properly, and your assets might be imported incorrectly, resulting in incorrect cached artifacts in your Library or in your Cache Server.",1098],["In these situations, you usually don’t want to wait for the rest of the project to import before you can resolve the errors. Safe Mode provides you with the tools to resolve these script-related problems yourself, or to use version control to update your project to a newer version that resolves the errors, without waiting for a full import of the project.",1098],["Entering Safe Mode",1098],["When you open a project which has compilation errors, the Editor displays a dialog to ask whether you want to enter Safe Mode:",1098],["At this point you have three choices:",1098],["Enter Safe Mode**",1098],["Ignore** the errors and open your project",1098],["Quit** Unity",1098],["In most cases, you should select Enter Safe Mode to resolve the errors in your project (or, if you’re working with version control, to pull changes which contain fixes to the errors). Safe Mode provides the best environment for resolving compilation errors, so that you can quickly return your project to a functional state before Unity imports the rest of your project.",1098],["However, there are some cases where you might not want to enter Safe Mode, in which case you can Quit Unity, or Ignore the errors.",1098],["Note*: You can disable this dialog in Edit > Preferences > Asset Pipeline > Show Enter Safe Mode Dialog. If you disable the dialog, Unity automatically enters Safe Mode when it opens a project with compilation errors.*",1098],["Quitting without entering Safe Mode",1098],["Safe Mode is specifically designed for fixing compilation errors. If you are working on a Unity project as part of a team, but you are not responsible for the scripts that are causing errors, and don’t know what to do, you should select *Quit *in the dialog, and contact the programmers on your team for advice.",1098],["",1098],["Ignoring the errors and continuing import",1098],["There are some situations where you don’t need the project to be in a usable state (for example, if you are opening an old project to copy some parts out, or to simply inspect how it is configured). In this case, you can ignore the errors and open your project in a broken state anyway.",1098],["If you select Ignore, and later want to open the project in Safe Mode, you can close and re-open Unity to access the \"Enter Safe Mode\" dialog again.",1098],["Implications of ignoring compilation errors",1098],["If you choose to ignore the errors, Unity continues to import the rest of your assets and opens your project fully. Potential implications here include:",1098],["Your project might not be in a usable state. You might not be able to enter Play Mode, or create builds of your project, until the errors are resolved. In addition, any packages in your project might not load correctly, or at all.",1098],["Unity might need to import your assets twice; once at launch, and again after you resolve the project’s compilation errors. This increases the amount of time it takes to load your project in a usable state.",1098],["If your project uses a Scriptable Render Pipeline, your render pipeline might not load, resulting in visual problems such as the error shader.",1098],["Script compilation errors can cause secondary errors within your project. For example, if a scripted importer in your project is unable to load because of compilation errors, your assets might import in an incorrect state.",1098],["Safe Mode is designed to help you avoid all of these problems.",1098],["The Editor in Safe Mode",1098],["In Safe Mode, Unity provides a minimal Editor interface with limited functions.",1098],["The Unity Editor displays a Safe Mode banner in the toolbar section at the top of the Editor, which replaces the standard Editor toolbar. The toolbar indicates that you are in Safe Mode, and provides an Exit Safe Mode button, which allows you to ignore the remaining errors and exit Safe Mode. The banner also indicates whether your project uses preview packages.",1098],["The Unity Editor retains its integration with code editors in Safe Mode, so you can double-click on script assets or console errors to open their associated scripts, and you can open the C# project via the Assets menu. It also retains its integration with Version Control systems.",1098],["The restricted set of windows in Safe Mode",1098],["The Editor displays a limited selection of windows in Safe Mode. These are:",1098],["The Console window",1098],["The Project window",1098],["The Inspector window",1098],["The Package Manager window",1098],["These are the only windows available because they relate to fixing compilation errors. No other windows are available in Safe Mode.",1098],["The Editor Menu in Safe Mode",1098],["The options available in the Editor’s main menu are restricted to a limited set while in Safe Mode. You can only see and select the menu options which relate to working with scripts; the regular options for creating and working with other content are not available. For example, you cannot create or open Scenes, or create non-script assets such as primitive shapes, lights, or cameras. The GameObject and Component menus are not present, and the Window menu only offers a restricted set of windows.",1098],["The Project window in Safe Mode",1098],["In Safe Mode, the Project window has some functional differences compared with its normal behavior outside of Safe Mode.",1098],["The primary difference is that you can only select compilation-related assets. Other asset types are not selectable. They remain visible as grayed-out entries in the Project window, but you cannot select or edit them.",1098],["Specifically, the compilation-related asset types that you can interact with are:",1098],["C# files (.cs)",1098],["DLL files (.dll)",1098],["Assembly definitions (.asm)",1098],["Response files (.rsp)",1098],["Ruleset files (.ruleset)",1098],["In addition, the icons for the non-selectable assets do not show a preview of the content of the asset. Instead, they show a generic icon to represent the asset’s type.",1098],["The create (+) menu button is disabled, and the Project window context menu has a reduced set of options available.",1098],["Exiting Safe Mode",1098],["Unity automatically exits Safe Mode when you have resolved all the compilation errors. Unity then continues to open your project and import your assets.",1098],["To exit Safe Mode while there are still compilation errors remaining, select the Exit Safe Mode button in the Safe Mode toolbar. This is not recommended (see Implications of ignoring compilation errors), and Unity prompts you with a dialog to confirm your decision.",1098],["If you exit Safe Mode while errors remain in your project, and later want to return to Safe Mode, you can close and re-open Unity to access the \"Enter Safe Mode\" dialog again..",1098],["Safe Mode in Batch Mode",1098],["In Batch Mode, Unity automatically quits if there are compilation errors in your project, unless you use the -ignoreCompilerErrors command line argument.",1098],["Save your work",1099],["Unity categorizes most saved information into either scene changes or project-wide changes.",1099],["To save all current scene and project-wide changes, go to File > Save (or Save as).",1099],["To save Project-wide changes, but not Scene changes, go to File > Save Project.",1099],["Note**: If you edit in Prefab Mode, saving through File > Save only saves changes to the open Prefab. Exit the Prefab Mode to save wider changes.",1099],["Unity saves some information automatically while you work in the Editor. See Automatic saves for more details.",1099],["Scene changes ",1099],["Scene changes include modifications to GameObjects in the Scene. For example:",1099],["If you add, move, or delete a GameObject.",1099],["If you change a GameObject's parameters in the Inspector window.",1099],["Project-wide changes ",1099],["Project-wide changes in Unity apply to your entire project rather than a specific scene. For example, if you create a temporary scene to test changes, you can save the project and not the scene.",1099],["Project-wide changes include:",1099],["Project Settings**: When you save your project, Unity saves changes to the Project Settings in the Library folder, in these files:",1099],["Input**: InputManager.asset",1099],["Tags And Layers**: TagManager.asset",1099],["Audio**: AudioManager.asset",1099],["Time**: TimeManager.asset",1099],["Player**: ProjectSettings.asset",1099],["Physics**: DynamicsManager.asset",1099],["Physics 2D**: Physics2DSettings.asset",1099],["Quality**: QualitySettings.asset",1099],["Graphics**: GraphicsSettings.asset",1099],["Network**: NetworkManager.asset",1099],["Editor**: EditorUserSettings.asset",1099],["Build Settings**: Unity saves changes to the Build Settings in the Library folder as EditorBuildSettings.asset.",1099],["Changed assets**: When you save project-wide settings, Unity saves any unsaved assets.",1099],["Note:** Some asset types have an Apply button in the Inspector. Unity will not save these unless you select Apply.",1099],["Dirty assets**: Unity saves Dirty assets, which are files on your disk that are modified in the software but not saved yet. You can use custom Editors and scripts to mark an Asset as dirty in one of these ways:",1099],["Use the SerializedObject class with SerializedProperties.",1099],["Use the Undo class to record modifications.",1099],["Use SetDirty.",1099],["Automatic saves ",1099],["Unity automatically saves the following changes to your disk:",1099],["New assets**: Unity automatically saves new assets when you create them but you need to save later changes.",1099],["Asset Import Settings**: For the changes to take effect with most assets, you need to select Apply in the Inspector window. Unity saves the changes when you select Apply.",1099],["Baked data**: When you have data that is set to Baked in your project, Unity saves this data after the bake finishes. This includes:",1099],["Baked Lighting data",1099],["Baked navigation data",1099],["Baked occlusion culling data",1099],["Script execution order changes**: After you select Apply, Unity saves this data into each script's .meta file.",1099],["Creating scene templates",1100],["You can create a new scene template in one of the following ways:",1100],["\nStart an empty template.\n",1100],["\nCreate a template from an existing scene asset.\n",1100],["\nCreate a template from the current scene.\n",1100],["After you create a template, you can edit its properties or create new scenes from it.",1100],["Tip: ",1100],["\n - \n",1100],["Before you create a template from a scene, create a folder with the name as the scene, and put any assets you want to clone in it. When you create the template, Unity automatically enables the Clone property for those assets. For details, see Editing scene templates. ",1100],["",1100],["Creating an empty scene template",1100],["You can create empty scene templates and configure them later. An empty template does not appear in the New Scene dialog until you edit its properties to associate a scene asset to it.",1100],["To create an empty scene template in the current project folder:",1100],["\nFrom the menu, select Assets > Create > Scene Template.\n",1100],["To create an empty scene template in a specific project folder:",1100],["Do one of the following:",1100],["\nIn the Project window, right-click the folder to open the context menu.\n",1100],["\nOpen the folder in the Project window, and right-click the asset pane to open the context menu.\n",1100],["Select Create > Scene Template.",1100],["",1100],["Creating a template from an existing scene asset",1100],["You can turn any existing scene into a scene template. After you create a template from an existing scene, you might want to edit its properties to specify which of its dependencies Unity clones when you create a new scene from it.",1100],["To create a template from an existing scene asset, open the Project window, and do one of the following:",1100],["\nRight-click a scene asset to open the context menu. Then select Create > Scene Template From Scene.\n",1100],["\nSelect the scene asset, and from the main menu, select Assets > Create > Scene Template From Scene.\n",1100],["",1100],["Creating a template from the current scene",1100],["To create a scene template from the current scene, from the menu, select File > Save As Scene Template.",1100],["If you have unsaved changes, Unity prompts you to save the scene before it saves the template.",1100],["After you create a template from the current scene, you might want to edit its properties to specify which of its dependencies Unity clones when you create a new scene from it.",1100],["Creating templates from C# scripts",1100],["You can create scene templates from your C# scripts.",1100],["To create an empty scene template, use the CreateSceneTemplate method.",1100],["```lang-csharp",1100],["SceneTemplate.CreateSceneTemplate(string sceneTemplatePath)",1100],["To create a template from an existing scene, use the CreateTemplateFromScene method. Unity automatically associates the scene with the template, and extracts the scene's dependencies.",1100],["```lang-csharp",1100],["SceneTemplate.CreateTemplateFromScene(SceneAsset sourceSceneAsset, string sceneTemplatePath);",1100],["Customizing new scene creation",1101],["To run custom code when Unity instantiates a new scene from a template, create a Scene Template Pipeline script and connect it to the template. Each time you create a new scene from the template, Unity creates a new instance of the pipeline script as well.",1101],["To connect the script to a template:",1101],["Inspect the template to edit its properties.",1101],["Set the Scene Template Pipeline property to point to your Scene Template Pipeline script.",1101],["You can also use the SceneTemplateAsset.templatePipeline method to connect the script to the template via C#.",1101],["A Scene Template Pipeline script must derive from the [ISceneTemplatePipeline] interface or [SceneTemplatePipelineAdapter]. It should implement the events you want to react to; for example, BeforeTemplateInstantiation or AfterTemplateInstantiation in the code below.",1101],["Example:**",1101],["```lang-csharp",1101],["using UnityEditor.SceneTemplate;",1101],["using UnityEngine;",1101],["using UnityEngine.SceneManagement;",1101],["public class DummySceneTemplatePipeline : ISceneTemplatePipeline",1101],["public void BeforeTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, bool isAdditive, string sceneName)",1101],["if (sceneTemplateAsset)",1101],["Debug.Log($\"Before Template Pipeline {sceneTemplateAsset.name} isAdditive: {isAdditive} sceneName: {sceneName}\");",1101],["public void AfterTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, Scene scene, bool isAdditive, string sceneName)",1101],["if (sceneTemplateAsset)",1101],["Debug.Log($\"After Template Pipeline {sceneTemplateAsset.name} scene: {scene} isAdditive: {isAdditive} sceneName: {sceneName}\");",1101],["Scene Template instantiation sequence",1101],["When you create a new scene from a template with cloneable dependencies, Unity performs several file operations. Most of these operations trigger Unity events that you can listen for, and react to, in scripts.",1101],["The instantiation sequence is as follows:",1101],["You click Create in the New Scene dialog. Unity calls the:",1101],["\nScene template asset.\n",1101],["\nTemplate Scene. This is the Unity Scene associated with the template.\n",1101],["\nNew Scene. This is a new instance of the template Scene.\n",1101],["Unity triggers the ISceneTemplatePipeline.BeforeTemplateInstantiation event for the template asset, and binds the asset to a ISceneTemplatePipeline script that it triggers.",1101],["Unity triggers the SceneTemplate.NewTemplateInstantiating event.",1101],["Unity creates a new scene that is a copy of the template scene.",1101],["Unity creates a folder with the same name as the new scene, and copies all cloneable dependencies into that folder.",1101],["Unity opens the new scene in memory, and triggers the following events:",1101],["\nEditorSceneManager.sceneOpening\n",1101],["\nMonoBehavior.OnValidate (on all GameObjects that implement it)\n",1101],["\nEditorSceneManager.sceneOpened\n",1101],["Unity remaps references to all cloneable assets, so the new scene points to the clones.",1101],["Unity saves the new scene, and triggers the following events:",1101],["\nEditorSceneManager.sceneSaving\n",1101],["\nEditorSceneManager.sceneSaved\n",1101],["Unity triggers the ISceneTemplatePipeline.AfterTemplateInstantiation for the template asset, and binds the asset to a ISceneTemplatePipeline script that it triggers.",1101],["Unity triggers the SceneTemplate.NewTemplateInstantiated event.",1101],["Editing scene templates",1102],["To edit a scene template, select it in the Project window, then open it in an Inspector window.",1102],["Note: ",1102],["\n - \n",1102],["When you first create an empty scene template, you must edit its properties to associate it with a scene before you can use it. Templates that you create from the active scene, or an existing scene asset, have some properties set by default. ",1102],["The scene template Inspector",1102],["The scene template Inspector has the following sections:",1102],["Details: Specifies which scene the template uses, and contains the template description that appears in the New Scene dialog.",1102],["Thumbnail: Provides options for creating a preview image for the template.",1102],["Scene Template Pipeline: Specifies an optional custom script to run when Unity creates a new scene from the template.",1102],["Dependencies: Lists the template scene's dependencies, and specifies whether Unity clones them when it creates a new scene from the template.",1102],["",1102],["Details",1102],["Use the Details section to specify which scene to use for a template, and control how the template appears in the New Scene dialog.",1102],["",1102],["Property: Description: ",1102],["",1102],["Template Scene Specifies the scene to use as a template. This can be any scene in the Project. ",1102],["Title The template name. The name you enter here appears in the New Scene dialog. ",1102],["Description The template description. The description you enter here appears in the New Scene dialog. ",1102],["Pin in New Scene Dialog Controls whether this template is pinned in the New Scene dialog.Pinned templates always appear at the top of the Scene Templates in Project list. ",1102],["",1102],["Thumbnail",1102],["The Thumbnail section contains options for creating a preview image for the template. The preview image appears in the New Scene dialog.",1102],["",1102],["Property: Description: ",1102],["",1102],["Texture Specifies a Texture asset to use as a thumbnail for this template. You can use any Texture asset in the Project. If you don't assign a Texture, the template uses the default scene template asset icon. ",1102],["[Thumbnail Preview] Displays the template's thumbnail texture, if it has one. ",1102],["Snapshot Provides options for capturing a thumbnail image for this template. ",1102],[" View Specifies whether to capture the **Main Camera** view or the **Game View**. \n",1102],["Take Snapshot Click this button to capture the selected View. ",1102],["",1102],["Scene Template Pipeline",1102],["Use these properties to add a Scene Template Pipeline script to this template.",1102],["",1102],["A Scene Template Pipeline script lets you execute custom code when you create a new scene from the template. See Customizing new scene creation.",1102],["",1102],["Dependencies",1102],["This section lists all of the template scene's Dependencies. You can specify whether or not to Clone each dependency when you create a new scene from the template.",1102],["To search for a dependency by name, enter text in the search bar.",1102],["To sort the Dependencies list:",1102],["Click the Dependencies heading to sort by the name of the dependency in alphabetical order.",1102],["Click the Type heading to sort by the dependency Type.",1102],["Click the Clone heading to sort by dependencies that are cloned and not cloned.",1102],["",1102],["For each dependency in the list, toggle the Clone option on to clone the dependency, or off to reference the dependency. When you clone a dependency, you create a copy. When you reference a dependency, all changes made to the original will affect the dependency.",1102],["When you create a new scene from the template, Unity checks whether the template scene has cloneable dependencies. If it does, Unity creates a folder with the same name as the new scene, and puts any cloned dependencies in that folder.",1102],["For more information about cloned and referenced dependencies, see Templates and scene dependencies.",1102],["To specify which types of asset Unity clones by default, edit the scene template Project settings.",1102],["Scene template settings",1103],["To access the scene template Project settings, open the Project Settings window (menu: Edit > Project Settings) and choose Scene Template from the category list.",1103],["",1103],["The scene template Project settings panel",1103],["New Scene settings",1103],["The New Scene settings (1) control what happens when you create a new scene from the File menu: (File > New Scene) or using the Ctrl/Cmd + n shortcut.",1103],["Option: Description: ",1103],["",1103],["New Scene menu ",1103],[" New Scene Dialog Opens the New Scene dialog. \n",1103],[" Built-in Scene Creates a new scene without opening the New Scene dialog. The new scene is a copy of the Project's Basic template. \n",1103],["Default Types settings",1103],["The Default Types settings control whether Unity clones specific types of asset by default when it creates a new scene from a scene template.",1103],["To make Unity clone a specific type of asset by default, enable the Clone option (2) for that asset type in the list.",1103],["To make Unity reference a specific type of asset by default, disable the Clone option (2) for that asset type in the list.",1103],["To set the default clone/reference behavior for asset types that do not appear in the list, enable/disable the Clone option for All Other Types (3).",1103],["To remove an asset type from the list, click the Remove button (4).",1103],["To add an asset type to the list, do one of the following:",1103],["\nIn the Add Type field (5), enter a specific asset type.\n",1103],["\nClick the Browse button (6) to open a search window where you can find and select a specific asset type.\n",1103],["Then click the Add button (7) to add the asset type to the list.",1103],["To revert to Unity's default asset type list and settings, click the Reset Defaults button (8).",1103],["Scene Templates",1104],["To create new scenes, Unity copies scene templates. Think of a scene template as a pre-configured scene that contains all of the content you want to start with. For example, the default Basic template usually contains a Camera and a light.",1104],["You can create your own scene templates to customize the types of new scene you can create in a project. For example, you might create templates for each level in a game so that everyone working on the project can start their scenes with the correct assets and configuration.",1104],["You can create a template from any Unity scene. After you create a template, you can create any number of new scenes from it. Like scenes, most scene templates are assets that are stored in the project.",1104],["This page explains important scene template concepts. For more information about creating, editing, and managing scene templates, see the following pages:",1104],["\nCreating scene templates: Describes the different ways to create a scene template.\n",1104],["\nEditing scene templates: Explains how to edit Scene template properties.\n",1104],["\nCustomizing new scene creation: Explains how to attach a script to a scene template so you can run custom code when Unity creates a scene from the template.\n",1104],["\nScene template settings: Describes project settings for scene templates. Most of these settings control how Unity closes and references scene dependencies when you create a new scene from a template.\n",1104],["Important concepts",1104],["",1104],["Built-in templates vs. user-defined templates",1104],["Most scene templates are user-defined, meaning you create them from your own scenes. User-defined scene templates are assets that Unity stores in the project.",1104],["Unity also ships with built-in templates for each project type. For example, some project types include a Basic template that creates a scene with a Camera and a light, and an Empty template that creates an empty scene.",1104],["Built-in templates are different from other templates because they are not assets stored in the project, and you cannot modify them.",1104],["Note: ",1104],["\n - \n",1104],["Some Unity packages might also include scene templates that they install when you install the package. ",1104],["",1104],["Templates and scene dependencies",1104],["When you create a scene template, you can specify whether Unity clones or references its dependencies (the assets it includes) when you create a new scene from it.",1104],["To specify which assets Unity clones for a specific template, edit the template's properties.",1104],["A typical template might contain a mix of cloned and referenced assets. Unity sets several asset types to clone by default.",1104],["To change whether Unity clones or references a given asset type by default, edit the Scene template project settings.",1104],["Cloning template assets",1104],["Cloned assets are copies of the original assets that the template scene uses. When Unity creates the new scene from the template, it automatically modifies the new scene to use any cloned assets. If you modify the cloned assets, it does not affect the template scene. If you modify the original assets in the template scene, it does not affect the new scene.",1104],["Cloning template assets is useful when you want new scenes to contain a starting set of assets that users might modify.",1104],["Referencing template assets",1104],["Referenced assets are the original assets that the template scene uses. When Unity creates the new scene from the template, the new scene points to the same assets as the template scene. If you modify those assets, it affects both the new scene and the template scene.",1104],["Referencing template assets is useful when you want new scenes to contain a default set of assets that users build on top of, but do not modify.",1104],["Pick and select GameObjects",1105],["You can select a single GameObject in the Scene view or from the Hierarchy window. You can also select more than one GameObject at a time.",1105],["Unity highlights selected GameObjects and their children in the Scene view. By default, the selection outline color is orange, and the child outline color is blue. You can also choose to highlight selected GameObjects’ wireframes in a different color. You can change all of these outline highlight colors from the Preferences window. To open the Preferences window, go to Edit > Preferences (macOS: Unity > Settings) in the main menu.",1105],["For more information about the outline and wireframe selection visualizations, see the documentation on the Gizmos menu.",1105],["",1105],["Select GameObjects",1105],["To select a single GameObject, choose one of these methods:",1105],["Click on it in the Scene view. If you repeatedly click on the shared space between overlapping GameObjects, the selection cycles between them.",1105],["Click its name in the Hierarchy window.",1105],["To select or deselect multiple GameObjects choose one of these methods:",1105],["Drag a rectangle around multiple GameObjects. Unity selects anything that falls inside this bounding box.",1105],["Hold the Shift key and click GameObjects in the Scene. You can also use the Ctrl (Windows) or Command (macOS) key to add or remove GameObjects from the selection.",1105],["Note:** When a feature in the Editor needs a single selected GameObject to perform an action, it looks for an \"active\" object. For example, Unity has to decide which GameObject to use as the pivot for transform tools while in Pivot mode. By default, Unity considers the last GameObject you select to be the \"active\" object. When you Shift+click on one of several selected GameObjects, you change which one of them is active. If a GameObject is active in the Scene view, Unity doesn't display any visible cues that it's active. However, you can see which GameObject is active in the Scene view when you repeatedly Shift+click in Pivot mode with multiple objects selected.",1105],["However, if you are working with a large Scene containing a lot of Scene items (such as GameObjects, Terrain objects, Cameras, and Lights), selecting multiple objects can be very tricky. To help you select only the items you want, you can block some objects from being picked, using the Scene picking controls.",1105],["Scene picking controls",1105],["You can toggle Scene picking controls on and off to mark which items are pickable when you work in the Editor. By default, all items are pickable, but you can choose which Scene items Unity skips adding to the selection when you click on them. For example, if you are working in a large Scene with over 10,000 objects, you can temporarily block specific GameObjects from being selected to prevent accidental editing.",1105],["Once you mark an item as unpickable, Unity continues to render them even though you can no longer select or edit them in the Scene view. The pickability state persists only in the Editor and only for the user in the Project where it was set. Changing the pick state does not \"dirty\" the Scene (that is, count as a modification).",1105],["Scene picking controls are very similar to the Scene visibility controls.",1105],["Toggle pickability",1105],["You control Scene pickability for individual GameObjects from the Hierarchy window.",1105],["To toggle Scene pickability:",1105],["Click a GameObject's pickability icon in the Hierarchy window to toggle between enabling and disabling picking the GameObject and its children.",1105],["Toggling pickability for a GameObject and its children affects all child GameObjects, from the “target” GameObject all the way down to the bottom of the hierarchy.",1105],["Alt** + Click a GameObject's pickability icon in the Hierarchy window to toggle between enabling and disabling picking the GameObject only.",1105],["Toggling pickability for a single GameObject does not affect its children. They retain whatever pickability status they had previously.",1105],["Because you can toggle pickability for a whole branch or a single GameObject, you can end up with GameObjects that are pickable, but have children or parents that you cannot pick. To help you track what’s going on, the pickability icon changes to indicate each GameObject’s status.",1105],["",1105],["----- ------------------------------------------------------------ ------------------------------------------------------------ ",1105],["A You can pick the GameObject, but you cannot pick some of its children. ",1105],["B You cannot pick the GameObject, but you can pick some of its children. ",1105],["C You cannot pick the GameObject nor its children. ",1105],["D You can pick the GameObject and its children. This icon only appears when you hover over the GameObject. ",1105],["Any Scene picking changes you make in the Hierarchy window are persistent. Unity re-applies them whenever you use Select All or Deselect All, close and re-open the Scene, and so on.",1105],["Scene Reloading",1106],["By default, Scene Reloading is enabled. This means that when you enter Play Mode, Unity destroys all existing Scene GameObjects and reloads the Scene from disk. The time it takes for Unity to do this increases with the complexity of the Scene, which means that as your project gets more complex, you have to wait longer between the moment you press the Play button and the moment the Scene fully loads in the Editor.",1106],["When you disable Scene Reloading, the process takes less time. This allows you to more rapidly iterate on the development of your project. Instead of reloading the Scene from disk, Unity only resets the Scene’s modified contents. This avoids the time and performance impact of unloading and reloading the Scene. Unity still calls the same initialization functions (such as OnEnable, OnDisable and OnDestroy) as if it were freshly loaded.",1106],["Effects of skipping Scene Reload",1106],["To disable Scene Reloading:",1106],["Go to Edit > Project Settings > Editor",1106],["Make sure Enter Play Mode Options is enabled.",1106],["Disable Reload Scene",1106],["For more information, see How to configure Play Mode",1106],["When you disable Scene Reloading, the time it takes to start your application in the Editor is no longer representative of the startup time in the built version. Therefore, if you want to debug or profile exactly what happens during your project’s startup, you should enable Scene Reloading to more accurately represent the true loading time and processes that happen in the built version of your application.",1106],["Disabling Scene Reload should have minimal side effects on your project. However, because Scene Reloading is tightly connected to Domain Reload, there are a couple of important differences:",1106],["ScriptableObject and MonoBehaviour fields that are not serialized into the build ([NonSerialized], private, or internal) keep their values. This is because Unity does not recreate existing objects and does not call constructors. Additionally, Unity converts null private and internal fields of array/List type to an empty array/List object during Domain Reload and stay non-null for runtime (non-Editor) scripts.",1106],["Scripts that use ExecuteInEditMode, or ExecuteAlways scripts do not receive OnDestroy or Awake calls. Unity does not call Awake, and only calls OnEnable when EditorApplication.isPlaying is already true on Play Mode change with Awake/OnEnable methods that check the EditorApplication.isPlaying property. Nonserialized fields for runtime (non-Editor) scripts should not be an issue because these are not active in Edit Mode, however scripts marked with ExecuteInEditMode or ExecuteAlways might change themselves or touch fields of other runtime scripts. To work around this, initialize any affected fields in an OnEnable callback yourself.",1106],["Creating, loading, and saving Scenes",1107],["This page explains how to create, load, and save scenes.",1107],["",1107],["Creating a new scene",1107],["There are several ways to create a new scene:",1107],["\nUse the New Scene dialog to create a new scene from a specific scene template.\n",1107],["\nUse the menu or the Project window to create new scenes from your Project's Basic scene template without opening the New Scene dialog.\n",1107],["\nCreate a scene from a specific template directly from a C# script.\n",1107],["Unity creates every new scene from a scene template. For information about creating and managing scene templates, see Scene templates.",1107],["",1107],["Creating a new scene from the New Scene dialog",1107],["Use the New Scene dialog to create new scenes from specific scene templates in your Project. You can also use the New Scene dialog to find and manage scene templates. For details see The New Scene dialog.",1107],["By default, the New Scene dialog opens when you create a new scene from the menu (File > New Scene) or by using a shortcut (Ctrl/Cmd + n).",1107],["To create a new Scene:",1107],["Select a template from the list.",1107],["If you want Unity to load the new scene additively (see note below), enable Load Additively.",1107],["Click Create to create a new scene from the template.",1107],["Note: ",1107],["\n - \n",1107],["Additive loading means that Unity loads the scene in addition to any other scenes you have open. For more information, see Multi-Scene editing. ",1107],["If the template does not have any cloneable dependencies, Unity loads the new scene in memory, but does not save it.",1107],["If the template has cloneable dependencies, Unity prompts you to choose a location in the Project to save it to. When you save the scene, Unity creates a folder in the same location, and with the same name as the new scene. It then clones the cloneable dependencies into the new folder, and updates the new scene to use the cloned assets instead of the original assets used by the template scene.",1107],["",1107],["Creating a new scene from the menu:",1107],["Use the menu (Assets > Create > Scene) to create a new scene without opening the New Scene dialog.",1107],["When you create a new scene from the menu, Unity automatically copies the project's Basic template, and adds the new scene to whichever folder is currently open in the project window.",1107],["",1107],["Creating a new scene from the project window",1107],["Use the context menu in the Project window to create a new scene without opening the New Scene dialog.",1107],["Navigate to the folder where you want to create the new scene.",1107],["Right click the folder in the left-hand pane, or right-click an empty area in the right hand pane, and select Create > Scene from the context menu.",1107],["When you create a new scene from the menu, Unity automatically copies the project's Basic template, and adds the new scene to the selected folder.",1107],["",1107],["Creating a new scene from a C# script",1107],["To create a new scene from a C# script using a specific scene template, use the Instantiate method.",1107],["```lang-csharp",1107],["Tuple SceneTemplate.Instantiate(SceneTemplateAsset sceneTemplate, bool loadAdditively, string newSceneOutputPath = null);",1107],["The Instantiate method instantiates a new scene from a scene template. It returns the newly created Scene handle, and its matching SceneAsset. You can create this scene additively. If the scene contains assets that need to be cloned, you must provide a path for Unity to save the scene to disk.",1107],["New scene events",1107],["When you create a new scene from a template, either from a script or using the New Scene dialog, Unity triggers an event. Unity triggers this event after the template is instantiated, and also after it triggers the EditorSceneManager.newSceneCreated or EditorSceneManager.sceneOpened events.",1107],["```lang-csharp",1107],["public class SceneTemplate",1107],["public delegate void NewTemplateInstantiated(SceneTemplateAsset sceneTemplateAsset, Scene scene, SceneAsset sceneAsset, bool additiveLoad);",1107],["public static event NewTemplateInstantiated newSceneTemplateInstantiated;",1107],["",1107],["Loading scenes",1107],["To open a scene, do one of the following:",1107],["\nIn the Project window, double-click the scene asset.\n",1107],["\nFrom the menu, select File > New Scene\n",1107],["\nFrom the menu, select File > Recent Scenes > [NAME-OF-SCENE]\n",1107],["If your current scene contains unsaved changes, Unity prompts you to save the scene or discard the changes.",1107],["Opening multiple scenes at once",1107],["You can open multiple scenes for editing at the same time. For details, see Multi-Scene editing.",1107],["",1107],["Saving scenes",1107],["To save the scene you're currently working on, choose File > Save Scene from the menu, or press Ctrl + S (Windows) or Cmd + S (macOS).",1107],["Scene view Camera",1108],["The Camera settings menu contains options for configuring the Scene view Camera. These adjustments do not affect the settings on GameObjects with Camera components.",1108],["To open the Scene Camera settings menu, click the Camera icon in the View options overlay in the Scene view.",1108],["You can also configure the Scene Camera in script with the SceneView.CameraSetting API.",1108],["Tip**: To reset the properties to their default values, click the cog icon in the top right corner of the Scene Camera settings menu and select Reset.",1108],["Property Description ",1108],["Field of View Change the height of the Scene Camera's view angle. ",1108],["Dynamic Clipping Enable to have the Editor calculate the Camera's near and far clipping planes relative to the viewport size of the Scene. ",1108],["Clipping Planes Set the distances from the Camera where Unity starts and stops rendering GameObjects in the Scene. These distances apply to both perspective and orthographic (isometric) projection modes. The Near and Far properties are modifiable only when Dynamic Clipping is disabled. ",1108],["Near Set the closest point to the Camera that the Editor renders GameObjects. ",1108],["Far Set the furthest point from the Camera that the Editor renders GameObjects. ",1108],["Occlusion Culling Enable occlusion culling in the Scene view. This prevents the Editor from rendering GameObjects that the Camera cannot see because they are hidden behind other GameObjects. ",1108],["Camera Easing Make the Camera ease in and out of motion in the Scene view. This makes the Camera ease into motion when it starts moving instead of starting at full speed, and ease out when it stops. You can set the duration in the API. ",1108],["Camera Acceleration Enable acceleration when moving the camera. When enabled, the camera initially moves at a speed based on the speed value, and continuously increases speed until movement stops. When disabled, the camera accelerates to a constant speed based on the Camera Speed. ",1108],["Camera Speed Set the current speed the Scene camera uses in the Scene view. In Flythrough mode, you can change the speed of the Camera while moving. To do this, use the mouse scroll wheel or drag two fingers on a trackpad. ",1108],["Min Set the minimum speed of the Camera in the Scene view. Valid values are between 0.01 and 98. ",1108],["Max Set the maximum speed of the Camera in the Scene view. Valid values are between 0.02 and 99. ",1108],["Additional resources",1108],["Scene view navigation",1109],["The Scene view has a set of navigation controls to help you move around efficiently:",1109],["The Scene Gizmo",1109],["The Move, Orbit and Zoom tools",1109],["The Center tool",1109],["",1109],["Scene Gizmo",1109],["The Scene Gizmo appears in the Scene view. This displays the Scene view Camera’s current orientation, and allows you to change the viewing angle and projection mode.",1109],["The Scene Gizmo has a conical arm on each side of the cube. The arms at the forefront are labelled X, Y, and Z. Click on any of the conical axis arms to snap the Scene view Camera to the axis it represents (for example: top view, left view, and front view). You can also right-click the cube to see a menu with a list of viewing angles. To return to the default viewing angle, right-click the Scene Gizmo and select Free.",1109],["You can also toggle Perspective on and off. This changes the projection mode of the Scene view between Perspective and Orthographic (sometimes called \"isometric\"). To do this, click the cube in the center of the Scene Gizmo, or the text below it. The Orthographic view has no perspective, and is useful in combination with clicking one of the conical axis arms to get a front, top or side elevation.",1109],["If your Scene view is in an awkward viewpoint (upside-down or just an angle you find confusing), Shift-click the cube at the center of the Scene Gizmo to get back to a Perspective view with an angle that looks at the Scene from the side and slightly from above.",1109],["Click on the padlock on the top right of the Scene Gizmo to enable or disable rotation of the Scene. Once Scene rotation is disabled, right-click to pan the view instead of rotating it. This is the same as the View tool.",1109],["Note that in 2D Mode, the Scene Gizmo doesn't appear. The only view option in 2d Mode is to look perpendicularly at the XY plane.",1109],["Mac trackpad gestures",1109],["On a Mac with a trackpad, you can drag with two fingers to zoom the view.",1109],["You can also use three fingers to simulate the effect of clicking the arms of the Scene Gizmo: drag up, left, right or down to snap the Scene Camera to the corresponding direction. You must enable three-finger swiping in the MacOS trackpad gesture settings to use this feature.",1109],["",1109],["Move, orbit and zoom in the Scene view",1109],["Moving, orbiting, and zooming are key operations in Scene view navigation. Unity provides several ways to perform them for maximum accessibility:",1109],["",1109],["Use the arrow keys",1109],["You can use the Arrow Keys to move around the Scene as though \"walking\" through it. The Up and Down arrow keys move the Camera forward and backward in the direction it faces. The Left and Right arrow keys pan the view sideways. Hold down the Shift and an arrow key to move faster.",1109],["",1109],["Use the View tool",1109],["When the View tool is selected (shortcut: Q), the following mouse controls are available:",1109],["Control Description ",1109],["Pan Click and drag to pan the Camera around. ",1109],["Orbit Hold Alt (Windows) or Option (macOS), and left-click and drag to orbit the Camera around the current pivot point. This option isn't available in 2D mode, because the view is orthographic. ",1109],["Zoom Hold Alt (Windows) or Option (macOS), and right-click and drag to zoom the Scene view. On macOS, you can also hold Control, and left-click and drag instead. ",1109],["Hold down Shift to increase the rate of movement and zooming.",1109],["",1109],["Use flythrough mode",1109],["Use the Flythrough mode to fly around the Scene view in first-person, similar to how you would navigate in many games.",1109],["Flythrough mode is designed for Perspective Mode. In Orthographic Mode, if you click and hold the right mouse button and move your mouse, your view orbits the Camera instead.",1109],["Flythrough mode isn't available in 2D mode. In 2D mode, if you click and hold the right mouse button and move your mouse, your view pans around the Scene view.",1109],["To enter Flythrough mode and navigate through the Scene view in Flythrough mode:",1109],["Click and hold the right mouse button.",1109],["Do the following to navigate through the Scene view:",1109],["Use your mouse to move the view.",1109],["To move forward or backward, press W or S.",1109],["To move left or right, press A or D.",1109],["To move up or down, press Q or E.",1109],["To move faster, press and hold Shift.",1109],["",1109],["Change the move speed of the camera",1109],["The Scene Camera displays the Scene view in the Editor. By default, the Scene Camera is what you control and look through when you navigate through the Scene view.",1109],["To change the speed that a Camera moves at in the Scene view, select the Camera icon in the View Options overlay then adjust the value of the Camera Speed property to the speed you want.",1109],["Note**: To find the View Options overlay, press ` to open the Overlays menu. In the Overlays menu, hover over View Options to highlight the View Options overlay in the Scene view.",1109],["In Flythrough mode, use the scroll wheel on your mouse or drag two fingers on a trackpad to change the speed that the Scene Camera moves at through the Scene",1109],["",1109],["Movement shortcuts",1109],["For extra efficiency, these controls can also be used regardless of which transform tool is selected.",1109],["The most convenient controls depend on which mouse or track-pad you are using.",1109],["Action 3-button mouse 2-button mouse or track-pad Mac with only one mouse button or track-pad ",1109],["Pan Hold the middle-mouse button then drag Hold Alt+Control+left-click, then drag Hold Option+Command+left-click, then drag ",1109],["Orbit (Not available in 2D mode) Hold Alt+left-click, then drag Hold Alt+left-click, then drag Hold Option+left-click, then drag ",1109],["Zoom Use the scroll wheel, or hold Alt+right-click, then drag Hold Alt+right-click, then drag Use the two-finger swipe method to scroll in and out, or hold Option+Control+left-click, then drag ",1109],["_Change speed _(only available in Flythrough mode) Use the scroll wheel while moving. Drag with two fingers while moving Drag with two fingers while moving ",1109],["",1109],["Center the view on a GameObject",1109],["To center the Scene view on a GameObject, select the GameObject in the Hierarchy, then move the mouse over the Scene view and press F. If the GameObject is already selected, F zooms in to the pivot point. This feature can also be found in the menu bar under Edit > Frame Selected.",1109],["To lock the view to the GameObject even when the GameObject is moving, press Shift+F. This feature is also in the menu bar under Edit > Lock View to Selected.",1109],["Scene visibility",1110],["Unity's scene visibility controls allow you to quickly hide and display GameObjects in the Scene view without changing their in-game visibility. This is useful for working with large or complex scenes where it can be difficult to view and select specific GameObjects.",1110],["Using visibility options is safer than deactivating GameObjects because visibility options only affect the Scene view. This means you can’t accidentally remove GameObjects from the rendered scene, or trigger unnecessary bake jobs for lighting, occlusion, and other systems.",1110],["The Editor saves Scene visibility settings to a file called SceneVisibilityState.asset in the Project’s Library folder. The scene reads from this file and updates it automatically whenever you change the visibility settings. This makes it possible for your settings to persist from one session to the next. Because source control setups for Unity typically ignore the Library folder, changing visibility settings should not create source control conflicts.",1110],["You can set visibility on specific scene items in the Hierarchy window, but if the scene-wide visibility setting is disabled, items marked as hidden might still appear in the Scene view. To change this setting, you can toggle Scene visibility on the Toolbar.",1110],["To control the scene visibility from script, refer to SceneVisibilityManager.",1110],["Scene visibility controls are very similar to the Scene picking controls.",1110],["Set Scene visibility for GameObjects and their children",1110],["You control Scene visibility for individual GameObjects from the Hierarchy window.",1110],["To toggle Scene visibility:",1110],["Click a GameObject's visibility icon in the Hierarchy window, or press H, to toggle between hiding and showing the GameObject and its children.",1110],["Toggling visibility for an object and its children affects all child objects, from the “target” object all the way down to the bottom of the hierarchy.",1110],["Alt** + Click a GameObject's visibility icon in the Hierarchy window to toggle between hiding and showing the GameObject only.",1110],["Toggling visibility for a single object does not affect its children. They retain whatever visibility status they had previously.",1110],["Tip**: You can also click the Scene’s visibility icon to toggle between hiding and showing items marked hidden in the Scene.",1110],["Because you can toggle visibility for a whole branch or a single GameObject, you can end up with GameObjects that are visible, but have hidden children or parents. To help you track what’s going on, the visibility icon changes to indicate each GameObject’s status.",1110],["",1110],["",1110],["A The GameObject is visible, but some of its children are hidden. ",1110],["B The GameObject is hidden, but some of its children are visible. ",1110],["C The GameObject and its children are visible. This icon only appears when you hover over the GameObject. ",1110],["D The GameObject and its children are hidden. ",1110],["Scene visibility changes you make in the Hierarchy window are persistent. Unity re-applies them whenever you toggle scene visibility off and on again in the Scene view, close and re-open the Scene, and so on.",1110],["",1110],["Turn Scene visibility on and off",1110],["The Scene visibility switch in the Scene view View Options Overlay toolbar shows or hides GameObjects in the scene. Click it to toggle Scene visibility on and off.",1110],["Turning Scene visibility off essentially mutes the Scene visibility settings you set in the Hierarchy window, but doesn’t delete or change them. All hidden GameObjects are temporarily visible.",1110],["Turning Scene visibility back on re-applies the visibility settings set in the Hierarchy window.",1110],["Isolate selected GameObjects",1110],["The Isolation view temporarily overrides the Scene visibility settings so that only the selected GameObjects are visible, and everything else is hidden.",1110],["To enter the Isolation view:",1110],["Press Shift + H.",1110],["This isolates all selected GameObjects and their children. Isolating hidden GameObjects makes them visible until you exit the Isolation view.",1110],["While in the Isolation view, you can continue to change Scene visibility settings, but any changes you make are lost on exit.",1110],["To exit the Isolation view:",1110],["Press Shift + H again, or click the Exit button in the Scene view.",1110],["Exiting the Isolation view reverts back to your original Scene visibility settings.",1110],["Additional resources",1110],["Using Animation Events",1111],["Use Animation Events to call functions at specific points in the timeline. These functions can be in any script attached to the GameObject.",1111],["The function called by an Animation Event also has the option to take one parameter. The parameter can be a float, string, int, or object reference, or an AnimationEvent object. The AnimationEvent object has member variables that allow a float, string, integer and object reference to be passed into the function all at once, along with other information about the Event that triggered the function call.",1111],["// This C# function can be called by an Animation Event",1111],["public void PrintFloat (float theValue) {",1111],["Debug.Log (\"PrintFloat is called with a value of \" + theValue);",1111],["To add an Animation Event to a clip at the current playhead position, click the Event button. To add an Animation event to any point in the Animation, double-click the Event line at the point where you want the Event to be triggered. Once added, you can drag the mouse to reposition the Event. To delete an Event, select it and press the Delete key, or right-click on it and select Delete Event.",1111],["When you add an Event, the Inspector Window displays several fields. These fields allow you to specify the name of the function you want to call, and the value of the parameter you want to pass to it.",1111],["The Events added to a clip are shown as markers in the Event line. Hold the mouse over a marker to show a tooltip with the function name and parameter value.",1111],["You can select and manipulate multiple Events in the timeline.",1111],["To select multiple Events in the timeline, hold the Shift key and select Event markers one by one to add them to your selection. You can also drag a selection box across them; click and drag within the Event marker area, like this:",1111],["Example",1111],["This example demonstrates how to add Animation Events to a simple GameObject. When all the steps are followed, the Cube animates forwards and backwards along the x-axis during Play mode, and the Event message is displayed in the console every 1 second at the 0.8 second time.",1111],["The example requires a small script with the function PrintEvent(). This function prints a debug message which includes a string (“called at:”) and the time:",1111],["// This C# function can be called by an Animation Event",1111],["using UnityEngine;",1111],["using System.Collections;",1111],["public class ExampleClass : MonoBehaviour",1111],["public void PrintEvent(string s)",1111],["Debug.Log(\"PrintEvent: \" + s + \" called at: \" + Time.time);",1111],["Create a script file with this example code and place it in your Project folder (right-click inside the Project window in Unity and select Create > C# Script, then copy and paste the above code example into the file and save it).",1111],["In Unity, create a Cube GameObject (menu: GameObject > 3D Object > Cube). To add your new script file to it, drag and drop it from the Project window into the Inspector window.",1111],["Select the Cube and then open the Animation window (menu: Window > Animation > Animation or use ctrl+6). Set a Position curve for the x coordinate.",1111],["Next, set the animation for the x coordinate to increase to around 0.4 and then back to zero over 1 second, then create an Animation Event at approximately 0.8 seconds. Press Play to run the animation.",1111],["AnimationWindowEvent",1111],["Aspect Ratio Fitter",1112],["Properties",1112],["Property: Function: ",1112],["Aspect Mode How the rectangle is resized to enforce the aspect ratio. ",1112],["        None Do not make the rect fit the aspect ratio. ",1112],["        Width Controls Height The height is automatically adjusted based on the width. ",1112],["        Height Controls Width The width is automatically adjusted based on the height. ",1112],["        Fit In Parent The width, height, position, and anchors are automatically adjusted to make the rect fit inside the rect of the parent while keeping the aspect ratio. The may be some space inside the parent rect which is not covered by this rect. ",1112],["        Envelope Parent The width, height, position, and anchors are automatically adjusted to make the rect cover the entire area of the parent while keeping the aspect ratio. This rect may extend further out than the parent rect. ",1112],["Aspect Ratio The aspect ratio to enforce. This is the width divided by the height. ",1112],["Description",1112],["The Aspect Ratio Fitter functions as a layout controller that controls the size of its own layout element. It can adjust the height to fit the width or vice versa, or it can make the element fit inside its parent or envelope its parent. The Aspect Ratio Fitter does not take layout information into account such as minimum size and preferred size.",1112],["It's worth keeping in mind that when a Rect Transform is resized - whether by an Aspect Ratio Fitter or something else - the resizing is around the pivot. This means that the pivot can be used to control the alignment of the rectangle. For example, a pivot placed at the top center will make the rectangle grow evenly to both sides, and only grow downwards while the top edge remain at its position.",1112],["AspectRatioFitter",1112],["Button",1113],["The Button control responds to a click from the user and is used to initiate or confirm an action. Familiar examples include the Submit and Cancel buttons used on web forms.",1113],["Properties",1113],["Property: Function: ",1113],["Interactable Enable Interactable if you want this button to accept input. See API documentation on Interactable for more details. ",1113],["Transition Properties that determine the way the control responds visually to user actions. See Transition Options. ",1113],["Navigation Properties that determine the sequence of controls. See Navigation Options. ",1113],["Events",1113],["Property: Function: ",1113],["On Click A UnityEvent that Unity invokes when a user clicks the button and releases it. ",1113],["Details",1113],["The button is designed to initiate an action when the user clicks and releases it. If the mouse is moved off the button control before the click is released, the action does not take place.",1113],["The button has a single event called On Click that responds when the user completes a click. Typical use cases include:",1113],["Confirming a decision (eg, starting gameplay or saving a game)",1113],["Moving to a sub-menu in a GUI",1113],["Cancelling an action in progress (eg, downloading a new scene)",1113],["Button",1113],["Canvas Scaler",1114],["The Canvas Scaler component is used for controlling the overall scale and pixel density of UI elements in the Canvas. This scaling affects everything under the Canvas, including font sizes and image borders.",1114],["Properties",1114],["Property: Function: ",1114],["UI Scale Mode Determines how UI elements in the Canvas are scaled. ",1114],["        Constant Pixel Size Makes UI elements retain the same size in pixels regardless of screen size. ",1114],["        Scale With Screen Size Makes UI elements bigger the bigger the screen is. ",1114],["        Constant Physical Size Makes UI elements retain the same physical size regardless of screen size and resolution. ",1114],["Settings for Constant Pixel Size:",1114],["Property: Function: ",1114],["Scale Factor Scales all UI elements in the Canvas by this factor. ",1114],["Reference Pixels Per Unit If a sprite has this 'Pixels Per Unit' setting, then one pixel in the sprite will cover one unit in the UI. ",1114],["Settings for Scale With Screen Size:",1114],["Property: Function: ",1114],["Reference Resolution The resolution the UI layout is designed for. If the screen resolution is larger, the UI will be scaled up, and if it's smaller, the UI will be scaled down. ",1114],["Screen Match Mode A mode used to scale the canvas area if the aspect ratio of the current resolution doesn't fit the reference resolution. ",1114],["        Match Width or Height Scale the canvas area with the width as reference, the height as reference, or something in between. ",1114],["        Expand Expand the canvas area either horizontally or vertically, so the size of the canvas will never be smaller than the reference. ",1114],["        Shrink Crop the canvas area either horizontally or vertically, so the size of the canvas will never be larger than the reference. ",1114],["Match Determines if the scaling is using the width or height as reference, or a mix in between. ",1114],["Reference Pixels Per Unit If a sprite has this 'Pixels Per Unit' setting, then one pixel in the sprite will cover one unit in the UI. ",1114],["Settings for Constant Physical Size:",1114],["Property: Function: ",1114],["Physical Unit The physical unit to specify positions and sizes in. ",1114],["Fallback Screen DPI The DPI to assume if the screen DPI is not known. ",1114],["Default Sprite DPI The pixels per inch to use for sprites that have a 'Pixels Per Unit' setting that matches the 'Reference Pixels Per Unit' setting. ",1114],["Reference Pixels Per Unit If a sprite has this 'Pixels Per Unit' setting, then its DPI will match the 'Default Sprite DPI' setting. ",1114],["Settings for World Space Canvas (shown when Canvas component is set to World Space):",1114],["Property: Function: ",1114],["Dynamic Pixels Per Unit The amount of pixels per unit to use for dynamically created bitmaps in the UI, such as Text. ",1114],["Reference Pixels Per Unit If a sprite has this 'Pixels Per Unit' setting, then one pixel in the sprite will cover one unit in the world. If the 'Reference Pixels Per Unit' is set to 1, then the 'Pixels Per Unit' setting in the sprite will be used as-is. ",1114],["Details",1114],["For a Canvas set to 'Screen Space - Overlay' or 'Screen Space - Camera', the Canvas Scaler UI Scale Mode can be set to Constant Pixel Size, Scale With Screen Size, or Constant Physical Size.",1114],["Constant Pixel Size",1114],["Using the Constant Pixel Size mode, positions and sizes of UI elements are specified in pixels on the screen. This is also the default functionality of the Canvas when no Canvas Scaler is attached. However, With the Scale Factor setting in the Canvas Scaler, a constant scaling can be applied to all UI elements in the Canvas.",1114],["Scale With Screen Size",1114],["Using the Scale With Screen Size mode, positions and sizes can be specified according to the pixels of a specified reference resolution. If the current screen resolution is larger than the reference resolution, the Canvas will keep having only the resolution of the reference resolution, but will scale up in order to fit the screen. If the current screen resolution is smaller than the reference resolution, the Canvas will similarly be scaled down to fit.",1114],["If the current screen resolution has a different aspect ratio than the reference resolution, scaling each axis individually to fit the screen would result in non-uniform scaling, which is generally undesirable. Instead of this, the ReferenceResolution component will make the Canvas resolution deviate from the reference resolution in order to respect the aspect ratio of the screen. It is possible to control how this deviation should behave using the Screen Match Mode setting.",1114],["Constant Physical Size",1114],["Using the Constant Physical Size mode, positions and sizes of UI elements are specified in physical units, such as millimeters, points, or picas. This mode relies on the device reporting its screen DPI correctly. You can specify a fallback DPI to use for devices that do not report a DPI.",1114],["World Space",1114],["For a Canvas set to 'World Space' the Canvas Scaler can be used to control the pixel density of UI elements in the Canvas.",1114],["Hints",1114],["See the page Designing UI for Multiple Resolutions for a step by step explanation of how Rect Transform anchoring and Canvas Scaler can be used in conjunction to make UI layouts that adapt to different resolutions and aspect ratios.",1114],["CanvasScaler",1114],["Script compilation",1115],["This section contains information on how Unity compiles your scripts and in what order.",1115],["Page Description ",1115],["",1115],["Special folders Information about the reserved folder names in Unity, which have an effect on the order of script compilation. ",1115],["Platform dependent compilation Contains information about the Platform Dependent Compilation feature, which contains preprocessor directives that let you partition your scripts. ",1115],["Assembly definitions Information about assembly definitions, which you can use to organize the scripts in your project. ",1115],["compilation",1115],["Content Size Fitter",1116],["Properties",1116],["Property: Function: ",1116],["Horizontal Fit How the width is controlled. ",1116],["    Unconstrained Do not drive the width based on the layout element. ",1116],["    Min Size Drive the width based on the minimum width of the layout element. ",1116],["    Preferred Size Drive the width based on the preferred width of the layout element. ",1116],["Vertical Fit How the height is controlled. ",1116],["    Unconstrained Do not drive the height based on the layout element. ",1116],["    Min Size Drive the height based on the minimum height of the layout element. ",1116],["    Preferred Size Drive the height based on the preferred height of the layout element. ",1116],["Description",1116],["The Content Size Fitter functions as a layout controller that controls the size of its own layout element. The size is determined by the minimum or preferred sizes provided by layout element components on the Game Object. Such layout elements can be Image or Text components, layout groups, or a Layout Element component.",1116],["It's worth keeping in mind that when a Rect Transform is resized - whether by a Content Size Fitter or something else - the resizing is around the pivot. This means that the direction of the resizing can be controlled using the pivot.",1116],["For example, when the pivot is in the center, the Content Size Fitter will expand the Rect Transform out equally in all directions. And when the pivot is in the upper left corner, the Content Size Fitter will expand the Rect Transform down and to the right.",1116],["ContentSizeFitter",1116],["Dropdown",1117],["The Dropdown can be used to let the user choose a single option from a list of options.",1117],["The control shows the currently chosen option. Once clicked, it opens up the list of options so a new option can be chosen. Upon choosing a new option, the list of closed again, and the control shows the new selected option. The list is also closed if the user clicks on the control itself, or anywhere else inside the Canvas.",1117],["Properties",1117],["Property: Function: ",1117],["Interactable Will this component will accept input? See Interactable. ",1117],["Transition Properties that determine the way the control responds visually to user actions. See Transition Options. ",1117],["Navigation Properties that determine the sequence of controls. See Navigation Options. ",1117],["Template The Rect Transform of the template for the dropdown list. See instructions below. ",1117],["Caption Text The Text component to hold the text of the currently selected option. (Optional) ",1117],["Caption Image The Image component to hold the image of the currently selected option. (Optional) ",1117],["Item Text The Text component to hold the text of the item. (Optional) ",1117],["Item Image The Image component to hold the image of the item. (Optional) ",1117],["Value The index of the currently selected option. 0 is the first option, 1 is the second, and so on. ",1117],["Options The list of possible options. A text string and an image can be specified for each option. ",1117],["Events",1117],["Property: Function: ",1117],["On Value Changed A UnityEvent that is invoked when a user has clicked one of the options in the dropdown list. ",1117],["Details",1117],["The list of options is specified in the Inspector or can be assigned from code. For each option a text string can be specified, and optionally an image as well, if the Dropdown is setup to support it.",1117],["The button has a single event called On Value Changed that responds when the user completes a click on one of the options in the list. It supports sending an integer number value that is the index of the selected option. 0 is the first option, 1 is the second, and so on.",1117],["The template system",1117],["The Dropdown control is designed to have a child GameObject which serves as a template for the dropdown list that is shown when clicking the dropdown control. The template GameObject is inactive by default, but can be made active while editing the template to better see what's going on. A reference to the template object must be specified in the Template property of the Dropdown component.",1117],["The template must have a single item in it with a Toggle component on. When the actual dropdown list is created upon clicking the dropdown control, this item is duplicated multiple times, with one copy used for each option in the list. The parent of the item is automatically resized so it can fit all the items inside.",1117],["The template can be setup in many different ways. The setup used by the GameObject > UI > Dropdown menu item includes a scroll view, such that if there are too many options to show at once, a scrollbar will appear and the user can scroll through the options. This is however not a mandatory part of the template setup.",1117],["(See the ScrollRect page for more information about setup of Scroll Views.)",1117],["Setup of text and image support",1117],["The dropdown supports one text content and one image content for each option. Both text and image is optional. They can only be used if the Dropdown is setup to support it.",1117],["The dropdown supports text for each option when the Caption Text and Item Text properties are both setup. These are setup by default when using the GameObject > UI > Dropdown menu item.",1117],["The Caption Text is the Text component to hold the text for the currently selected option. It is typically a child to the Dropdown GameObject.",1117],["The Item Text is the Text component to hold the text for each option. It is typically a child to the Item GameObject.",1117],["The dropdown supports an image for each option when the Caption Image and Item Image properties are both setup. These are not setup by default.",1117],["The Caption Image is the Image component to hold the image for the currently selected option. It is typically a child to the Dropdown GameObject.",1117],["The Item Image is the Image component to hold the image for each option. It is typically a child to the Item GameObject.",1117],["The actual text and images used for the dropdowns are specified in the Options property of the Dropdown component, or can be set from code.",1117],["Placement of the dropdown list",1117],["The placement of the dropdown list in relation to the dropdown control is determined by the anchoring and pivot of the Rect Transform of the Template.",1117],["By default, the list will appear below the control. This is achieved by anchoring the template to the bottom of the control. The pivot of the template also needs to be at the top, so that as the template is expanded to accommodate a variable number of option items, it only expands downwards.",1117],["The Dropdown control has simple logic to prevent that the dropdown is displayed outside the bounds of the Canvas, since this would make it impossible to select certain options. If the dropdown at its default position is not fully within the Canvas rectangle, its position in relation to the control is reversed. For example, a list that is shown below the control by default will be shown above it instead.",1117],["This logic is quite simple and has certain limitations. The dropdown template needs to be no larger than half the Canvas size minus the size of the dropdown control, otherwise there may not be room for the list at either position if the dropdown control is placed in the middle of the Canvas.",1117],["Dropdown",1117],["Event System Manager",1118],["This subsystem is responsible for controlling all the other elements that make up eventing. It coordinates which Input Module is currently active, which GameObject is currently considered 'selected', and a host of other high level Event System concepts.",1118],["Each 'Update' the Event System receives the call, looks through its Input Modules and figures out which is the Input Module that should be used for this tick. It then delegates the processing to the modules.",1118],["Properties",1118],["Property: Function: ",1118],["First Selected The GameObject that was selected first. ",1118],["Send Navigation Events Should the EventSystem allow navigation events (move / submit / cancel). ",1118],["Drag Threshold The soft area for dragging in pixels. ",1118],["Beneath the Properies table is the \"Add Default Input Modules\" button.",1118],["EventSystem",1118],["Event Trigger",1119],["The Event Trigger receives events from the Event System and calls registered functions for each event.",1119],["The Event Trigger can be used to specify functions you wish to be called for each Event System event. You can assign multiple functions to a single event and whenever the Event Trigger receives that event it will call those functions.",1119],["Note that attaching an Event Trigger component to a GameObject will make that object intercept all events, and no event bubbling will occur from this object!",1119],["Events",1119],["Each of the Supported Events can optionally be included in the Event Trigger by clicking the Add New Event Type button.",1119],["EventTrigger",1119],["Graphic Raycaster",1120],["The Graphic Raycaster is used to raycast against a Canvas. The Raycaster looks at all Graphics on the canvas and determines if any of them have been hit.",1120],["The Graphic Raycaster can be configured to ignore backfacing Graphics as well as be blocked by 2D or 3D objects that exist in front of it. A manual priority can also be applied if you want processing of this element to be forced to the front or back of the Raycasting.",1120],["Properties",1120],["Property: Function: ",1120],["Ignore Reversed Graphics Should graphics facing away from the raycaster be considered? ",1120],["Blocked Objects Type of objects that will block graphic raycasts. ",1120],["Blocking Mask Type of objects that will block graphic raycasts. ",1120],["GraphicRaycaster",1120],["Grid Layout Group",1121],["The Grid Layout Group component places its child layout elements in a grid.",1121],["Properties",1121],["Property: Function: ",1121],["Padding The padding inside the edges of the layout group. ",1121],["Cell Size The size to use for each layout element in the group. ",1121],["Spacing The spacing between the layout elements. ",1121],["Start Corner The corner where the first element is located. ",1121],["Start Axis Which primary axis to place elements along. Horizontal will fill an entire row before a new row is started. Vertical will fill an entire column before a new column is started. ",1121],["Child Alignment The alignment to use for the layout elements if they don't fill out all the available space. ",1121],["Constraint Constraint the grid to a fixed number of rows or columns to aid the auto layout system. ",1121],["Description",1121],["Unlike other layout groups, the Grid Layout Group ignores the minimum, preferred, and flexible size properties of its contained layout elements and instead assigns a fixed size to all of them which is defined with the Cell Size property of the Grid Layout Group itself.",1121],["Grid Layout Group and auto layout",1121],["There are special considerations to be aware of when using the Grid Layout Group as part of an auto layout setup, such as using it with a Content Size Fitter.",1121],["The auto layout system calculates the horizontal and vertical sizes independently. This can be at odds with the Grid Layout Group, where the number of rows depends on the number of columns and vice versa.",1121],["For any given number of cells, there are different combinations of row count and column count that can make the grid fit its content. In order to aid the layout system, you can specify that you intent the table to have a fixed number of columns or rows by using the Constraint property.",1121],["Here are suggested ways of using the Layout System with a Content Size Fitter:",1121],["Flexible width and fixed height",1121],["To setup a grid with a flexible width and fixed height, where the grid expands horizontally as more elements are added, you can set these properties as follows:",1121],["Grid Layout Group Constraint: Fixed Row Count",1121],["Content Size Fitter Horizontal Fit: Preferred Size",1121],["Content Size Fitter Vertical Fit: Preferred Size or Unconstrained",1121],["If unconstrained Vertical Fit is used, it's up to you to give the grid a height that is big enough to fit the specified row count of cells.",1121],["Fixed width and flexible height",1121],["To setup a grid with a fixed width and flexible height, where the grid expands vertically as more elements are added, you can set these properties as follows:",1121],["Grid Layout Group Constraint: Fixed Column Count",1121],["Content Size Fitter Horizontal Fit: Preferred Size or Unconstrained",1121],["Content Size Fitter Vertical Fit: Preferred Size",1121],["If unconstrained Horizontal Fit is used, it's up to you to give the grid a width that is big enough to fit the specified column count of cells.",1121],["Both flexible width and height",1121],["If you want a grid with both a flexible width and height you can do that, but you will have no control over the specific number of rows and columns. The grid will attempt to make the row and column count approximately the same. You can set these properties as follows:",1121],["Grid Layout Group Constraint: Flexible",1121],["Content Size Fitter Horizontal Fit: Preferred Size",1121],["Content Size Fitter Vertical Fit: Preferred Size",1121],["GridLayoutGroup",1121],["Horizontal Layout Group",1122],["The Horizontal Layout Group component places its child layout elements next to each other, side by side. Their widths are determined by their respective minimum, preferred, and flexible widths according to the following model:",1122],["The minimum widths of all the child layout elements are added together and the spacing between them is added as well. The result is the mimimum width of the Horizontal Layout Group.",1122],["The preferred widths of all the child layout elements are added together and the spacing between them is added as well. The result is the preferred width of the Horizontal Layout Group.",1122],["If the Horizontal Layout Group is at its minimum width or smaller, all the child layout elements will also have their minimum width.",1122],["The closer the Horizontal Layout group is to its preferred width, the closer each child layout element will also get to their preferred width.",1122],["If the Horizontal Layout Group is wider than its preferred width, it will distribute the extra available space proportionally to the child layout elements according to their respective flexible widths.",1122],["For more information about minimum, preferred, and flexible width, see the documentation on Auto Layout.",1122],["Properties",1122],["Property: Function: ",1122],["Padding The padding inside the edges of the layout group. ",1122],["Spacing The spacing between the layout elements. ",1122],["Child Alignment The alignment to use for the child layout elements if they don't fill out all the available space. ",1122],["Control Child Size Whether the Layout Group controls the width and height of its child layout elements. ",1122],["Use Child Scale Whether the Layout Group considers the scale of its child layout elements when sizing and laying out elements. Width and Height correspond to the Scale > X and Scale > Y values in each child layout element's Rect Transform component. ",1122],["Child Force Expand Whether to force the child layout elements to expand to fill additional available space. ",1122],["HorizontalLayoutGroup",1122],["Image",1123],["The Image control displays a non-interactive image to the user. You can use this for purposes such as decorations or icons, and you can change the image from a script to reflect changes in other controls. The control is similar to the Raw Image control, but offers more options for animating the image and accurately filling the control rectangle. However, the Image control requires its Texture to be a Sprite, while the Raw Image can accept any Texture.",1123],["Properties",1123],["Property: Function: ",1123],["Source Image The Texture that represents the image to display (which must be imported as a Sprite). ",1123],["Color The color to apply to the image. ",1123],["Material The Material to use for rendering the image. ",1123],["Raycast Target Enable Raycast Target if you want Unity to consider the image a target for raycasting. ",1123],["Preserve Aspect Ensure the image retains its existing dimension. ",1123],["Set Native Size Set the dimensions of the image box to the original pixel size of the Texture. ",1123],["You must import the image to display as a Sprite to work with the Image control.",1123],["Image",1123],["Input Field",1124],["An Input Field is a way to make the text of a Text Control editable. Like the other interaction controls, it's not a visible UI element in itself and must be combined with one or more visual UI elements in order to be visible.",1124],["Properties",1124],["Property: Function: ",1124],["Interactable A boolean that determines if the Input Field can be interacted with or not. ",1124],["Transition Transitions are used to set how the input field transitions when Normal, Highlighted, Pressed or Disabled. ",1124],["Navigation Properties that determine the sequence of controls. See Navigation Options. ",1124],["TextComponent A reference to the Text element used as the contents of the _Input Field_ ",1124],["Text Starting Value. The initial text placed in the field before editing begins. ",1124],["Character Limit The value of the maximum number of characters that can be entered into the input field. ",1124],["Content Type Define the type(s) of characters that your input field accepts ",1124],["__Standard__ Any character can be entered. \n",1124],["__Autocorrected__ The autocorrection determines whether the input tracks unknown words and suggests a more suitable replacement candidate to the user, replacing the typed text automatically unless the user explicitly overrides the action. \n",1124],["__Integer Number__ Allow only whole numbers to be entered. \n",1124],["__Decimal Number__ Allow only numbers and a single decimal point to be entered. \n",1124],["__Alphanumeric__ Allow both letters and numbers. Symbols cannot be entered. \n",1124],["__Name__ Automatically capitalizes the first letter of each word. Note that the user can circumvent the capitalization rules using the __Delete__ key. \n",1124],["__Email Address__ Allows you to enter an Alphanumeric string consisting of a maximum of one @ sign. periods/baseline dots cannot be entered next to each other. \n",1124],["__Password*__ Conceals the characters inputed with an asterisk. Allows symbols. \n",1124],["__Pin__ Conceals the characters inputed with an asterisk. Only allows only whole numbers to be entered. \n",1124],["__Custom__ Allows you to customise the Line Type, Input Type, Keyboard Type and Character Validation. \n",1124],["Line Type Defines how text is formatted inside the text field. ",1124],["__Single Line__ Only allows text to be on a single line. \n",1124],["__Multi Line Submit__ Allows text to use multiple lines. Only uses a new line when needed. \n",1124],["__Multi Line Newline__ Allows text to use multiple lines. User can use a newline by pressing the return key. \n",1124],["Placeholder This is an optional ‘empty’ Graphic to show that the _Input Field_ is empty of text. Note that this ‘empty' graphic still displays even when the Input Field is selected (that is; when there is focus on it). eg; \"Enter text...\". ",1124],["Caret Blink Rate Defines the blink rate for the mark placed on the line to indicate a proposed insertion of text. ",1124],["Selection Color The background color of the selected portion of text. ",1124],["Hide Mobile Input (iOS only) Hides the native input field attached to the onscreen keyboard on mobile devices. Note that this only works on iOS devices. ",1124],["",1124],["Events",1124],["Property: Function: ",1124],["On Value Change A UnityEvent that is invoked when the text content of the Input Field changes. The event can send the current text content as a string type dynamic argument. ",1124],["End Edit A UnityEvent that is invoked when the user finishes editing the text content either by submitting or by clicking somewhere that removes the focus from the Input Field. The event can send the current text content as a string type dynamic argument. ",1124],["Details",1124],["The Input Field script can be added to any existing Text control object from the menu (Component > UI > Input Field). Having done this, you should also drag the object to the Input Field's Text property to enable editing.",1124],["The Text property of the Text control itself will change as the user types and the value can be retrieved from a script after editing. Note that Rich Text is intentionally not supported for editable Text controls; the field will apply any Rich Text markup instantly when typed but the markup essentially \"disappears\" and there is no subsequent way to change or remove the styling.",1124],["Hints",1124],["To obtain the text of the Input Field, use the text property on the InputField component itself, not the text property of the Text component that displays the text. The text property of the Text component may be cropped or may consist of asterisks for passwords.",1124],["InputField",1124],["Layout Element",1125],["If you want to override the minimum, preferred, or flexible size of a layout element, you can do that by adding a Layout Element component to the GameObject.",1125],["A layout controller allocates width or height to a layout element in the following order:",1125],["First, the layout controller allocates the minimum size properties (Min Width, Min Height).",1125],["If there is sufficient available space, the layout controller allocates the preferred size properties (Preferred Width, Preferred Height).",1125],["If there is additional available space, the layout controller allocates the flexible size properties (Flexible Width, Flexible Height).",1125],["For more information about minimum, preferred, and flexible size, see documentation on Auto Layout.",1125],["Properties",1125],["When you enable a width or height property, a value field appears next to it. Use this value field to enter the exact value for the width or height. Min and Preferred sizes are in regular units, while the Flexible sizes are in relative units.",1125],["Property: Function: ",1125],["Ignore Layout When enabled, the layout system ignores this layout element. ",1125],["Min Width The minimum width this layout element should have. ",1125],["Min Height The minimum height this layout element should have. ",1125],["Preferred Width The preferred width this layout element should have before additional available width is allocated. ",1125],["Preferred Height The preferred height this layout element should have before additional available height is allocated. ",1125],["Flexible Width The relative amount of additional available width this layout element should fill out relative to its siblings. ",1125],["Flexible Height The relative amount of additional available height this layout element should fill out relative to its siblings. ",1125],["Layout Priority The layout priority for this component. If a GameObject has more than one component with layout properties (for example, an Image component and a LayoutElement component), the layout system uses the property values from the component with the highest Layout Priority. If the components have the same Layout Priority, the layout system uses the highest value for each property, regardless of which component it comes from. ",1125],["Description",1125],["The Layout Element component lets you override the values for one or more of the layout properties. Enable the checkbox for a property you want to override and then specify the value you want to override with.",1125],["Minimum and preferred sizes are defined in regular units, while the flexible sizes are defined in relative units. If any layout element has flexible size greater than zero, it means that all the available space will be filled out. The relative flexible size values of the siblings determines how big a proportion of the available space each sibling fills out. Most commonly, flexible width and height is set to just 0 or 1.",1125],["Specifying both a preferred size and a flexible size can make sense in certain cases. Flexible sizes are only allocated after all preferred sizes have been fully allocated. Thus, a layout element which has a flexible size specified but no preferred size will keep its minimum size until other layout elements have grown to their full preferred size, and only then begin to grow based on additional available space. By also specifying a flexible size, this can be avoided and the element can grow to its preferred size in tandem with the other layout elements that have preferred sizes, and then grow further once all flexible sizes have been allocated.",1125],["LayoutElement",1125],["Mask",1126],["A Mask is not a visible UI control but rather a way to modify the appearance of a control's child elements. The mask restricts (ie, \"masks\") the child elements to the shape of the parent. So, if the child is larger than the parent then only the part of the child that fits within the parent will be visible.",1126],["Properties",1126],["Property: Function: ",1126],["Show Graphic Should the graphic of the masking (parent) object be drawn with alpha over the child object? ",1126],["Description",1126],["A common use of a Mask is to show a small section of a large Image, using say a Panel object (menu: GameObject > Create UI > Panel) as a \"frame\". You can achieve this by firstly making the Image a child of the Panel object. You should position the Image so that the area that should be visible is directly behind the Panel area.",1126],["Then, add a Mask component to the Panel. The areas of the child Image outside the panel will become invisible since they are masked by the shape of the Panel.",1126],["If the image is then moved around then only the part revealed by the Panel will be visible. The movement could be controlled by Scrollbars to create a scrollable viewer for a map, say.",1126],["Implementation",1126],["Masking is implemented using the stencil buffer of the GPU.",1126],["The first Mask element writes a 1 to the stencil buffer",1126],["All elements below the mask check when rendering, and only render to areas where there is a 1 in the stencil buffer",1126],["Nested Masks will write incremental bit masks into the buffer, this means that renderable children need to have the logical & of the stencil values to be rendered.",1126],["Mask",1126],["Outline",1127],["The Outline component adds a simple outline effect to graphic components such as Text or Image. It must be on the same GameObject as the graphic component.",1127],["Properties",1127],["Property: Function: ",1127],["Effect Color The color of the outline. ",1127],["Effect Distance The distance of the outline effect horizontally and vertically. ",1127],["Use Graphic Alpha Multiplies the color of the graphic onto the color of the effect. ",1127],["Outline",1127],["Physics 2D Raycaster",1128],["The 2D Raycaster raycasts against 2D objects in the scene. This allows messages to be sent to 2D physics objects that implement event interfaces. The Camera GameObject needs to be used and will be added to the GameObject if the Physics 3D Raycaster is not added to the Camera GameObject.",1128],["For more Raycaster information see Raycasters.",1128],["Properties",1128],["Property: Function: ",1128],["Event Camera The camera that will generate rays for this raycaster. ",1128],["Priority Priority of the caster relative to other casters. ",1128],["Sort Order Priority Priority of the raycaster based upon sort order. ",1128],["Render Order Priority Priority of the raycaster based upon render order. ",1128],["Physics2DRaycaster",1128],["Physics Raycaster",1129],["The Raycaster raycasts against 3D objects in the scene. This allows messages to be sent to 3D physics objects that implement event interfaces.",1129],["Properties",1129],["Property: Function: ",1129],["Depth Get the depth of the configured camera. ",1129],["Event Camera Get the camera that is used for this module. ",1129],["Event Mask Logical and of Camera mask and eventMask. ",1129],["Final Event Mask Logical and of Camera mask and eventMask. ",1129],["PhysicsRaycaster",1129],["Position as UV1",1130],["This adds a simple Position as UV1 effect to text and image graphics.",1130],["Properties",1130],["Property: Function: ",1130],["Script ",1130],["PositionAsUV1",1130],["Raw Image",1131],["The Raw Image control displays a non-interactive image to the user. You can use this for purposes such as decorations or icons, and you can change the image from a script to reflect changes in other controls. The control is similar to the Image control, but offers more options for animating the image and accurately filling the control rectangle. However, the Image control requires its Texture to be a Sprite, while the Raw Image can accept any Texture.",1131],["Properties",1131],["Property: Function: ",1131],["Texture The texture that represents the image to display. ",1131],["Color The color to apply to the image. ",1131],["Material The Material to use for rendering the image. ",1131],["Raycast Target Enable Raycast Target if you want Unity to consider the image a target for raycasting. ",1131],["UV Rectangle The image's offset and size within the control rectangle, given in normalized coordinates (range 0.0 to 1.0). The edges of the image are stretched to fill the space around the UV rectangle. ",1131],["Details",1131],["Since the Raw Image does not require a sprite texture, you can use it to display any texture available to the Unity player. For example, you might show an image downloaded from a URL using the WWW class or a texture from an object in a game.",1131],["The UV Rectangle properties allow you to display a small section of a larger image. The X and Y coordinates specify which part of the image is aligned with the bottom left corner of the control. For example, an X coordinate of 0.25 will cut off the leftmost quarter of the image. The W and H (ie, width and height) properties indicate the width and height of the section of image that will be scaled to fit the control rectangle. For example, a width and height of 0.5 will scale a quarter of the image area up to the control rectangle. By changing these properties, you can zoom and scale the image as desired (see also the Scrollbar control).",1131],["RawImage",1131],["RectMask2D",1132],["A RectMask2D is a masking control similar to the Mask control. The mask restricts the child elements to the rectangle of the parent element. Unlike the standard Mask control it has some limitations, but it also has a number of performance benefits.",1132],["Description",1132],["A common use of a RectMask2D is to show small sections of a larger area. Using the RectMask2D to frame this area.",1132],["The limitations of RectMask2D control are:",1132],["\nIt only works in 2D space\n",1132],["\nIt will not properly mask elements that are not coplanar\n",1132],["The advantages of RectMask2D are:",1132],["\nIt does not use the stencil buffer\n",1132],["\nNo extra draw calls\n",1132],["\nNo material changes\n",1132],["\nFast performance\n",1132],["RectMask2D",1132],["Scrollbar",1133],["The Scrollbar control allows the user to scroll an image or other view that is too large to see completely. Note that the similar Slider control is used for selecting numeric values rather than scrolling. Familiar examples include the vertical Scrollbar at the side of a text editor and the vertical and horizontal pair of bars for viewing a section of a large image or map.",1133],["Properties",1133],["Property: Function: ",1133],["Interactable Will this component accept input? See Interactable. ",1133],["Transition Properties that determine the way the control responds visually to user actions. See Transition Options. ",1133],["Navigation Properties that determine the sequence of controls. See Navigation Options. ",1133],["Fill Rect The graphic used for the background area of the control. ",1133],["Handle Rect The graphic used for the sliding \"handle\" part of the control ",1133],["Direction The direction in which the Scrollbar's value will increase when the handle is dragged. The options are Left To Right, Right To Left, Bottom To Top and Top To Bottom. ",1133],["Value Initial position value of the Scrollbar, in the range 0.0 to 1.0. ",1133],["Size Fractional size of the handle within the Scrollbar, in the range 0.0 to 1.0. ",1133],["Number Of Steps The number of distinct scroll positions allowed by the Scrollbar. ",1133],["Events",1133],["Property: Function: ",1133],["On Value Changed A UnityEvent that is invoked when the current value of the Scrollbar changes. The event can send the value as a float type dynamic argument. ",1133],["Details",1133],["The value of a Scrollbar is determined by the position of the handle along its length with the value being reported as a fraction between the extreme ends. For example, the default left-to-right bar has a value of 0.0 at the left end, 1.0 at the right end and 0.5 indicates the halfway point. A scrollbar can be oriented vertically by choosing Top To Bottom or Bottom To Top for the Direction property.",1133],["A significant difference between the Scrollbar and the similar Slider control is that the Scrollbar's handle can change in size to represent the distance of scrolling available; when the view can scroll only a short way, the handle will fill up most of the bar and only allow a slight shift either direction.",1133],["The Scrollbar has a single event called On Value Changed that responds as the user drags the handle. The current value is passed to the even function as a float parameter. Typical use cases for a scrollbar include:",1133],["Scrolling a piece of text vertically.",1133],["Scrolling a timeline horizontally.",1133],["Used as a pair, scrolling a large image both horizontally and vertically to view a zoomed section. The size of the handle changes to indicate the degree of zooming and therefore the available distance for scrolling.",1133],["Scrollbar",1133],["Scroll Rect",1134],["A Scroll Rect can be used when content that takes up a lot of space needs to be displayed in a small area. The Scroll Rect provides functionality to scroll over this content.",1134],["Usually a Scroll Rect is combined with a Mask in order to create a scroll view, where only the scrollable content inside the Scroll Rect is visible. It can also additionally be combined with one or two Scrollbars that can be dragged to scroll horizontally or vertically.",1134],["Properties",1134],["Property: Function: ",1134],["Content This is a reference to the Rect Transform of the UI element to be scrolled, for example a large image. ",1134],["Horizontal Enables horizontal scrolling ",1134],["Vertical Enables vertical scrolling ",1134],["Movement Type Unrestricted, Elastic or Clamped. Use Elastic or Clamped to force the content to remain within the bounds of the Scroll Rect. Elastic mode bounces the content when it reaches the edge of the Scroll Rect ",1134],["        Elasticity This is the amount of bounce used in the elasticity mode. ",1134],["Inertia When Inertia is set the content will continue to move when the pointer is released after a drag. When Inertia is not set the content will only move when dragged. ",1134],["        Deceleration Rate When Inertia is set the deceleration rate determines how quickly the contents stop moving. A rate of 0 will stop the movement immediately. A value of 1 means the movement will never slow down. ",1134],["Scroll Sensitivity The sensitivity to scroll wheel and track pad scroll events. ",1134],["Viewport Reference to the viewport Rect Transform that is the parent of the content Rect Transform. ",1134],["Horizontal Scrollbar Optional reference to a horizontal scrollbar element. ",1134],["        Visibility Whether the scrollbar should automatically be hidden when it isn't needed, and optionally expand the viewport as well. ",1134],["        Spacing The space between the scrollbar and the viewport. ",1134],["Vertical Scrollbar Optional reference to a vertical scrollbar element. ",1134],["        Visibility Whether the scrollbar should automatically be hidden when it isn't needed, and optionally expand the viewport as well. ",1134],["        Spacing The space between the scrollbar and the viewport. ",1134],["Events",1134],["Property: Function: ",1134],["On Value Changed A UnityEvent that is invoked when the scroll position of the Scroll Rect changes. The event can send the current scroll position as a Vector2 type dynamic argument. ",1134],["Details",1134],["The important elements in a scroll view are the viewport, the scrolling content, and optionally one or two scrollbars.",1134],["The root GameObject has the Scroll Rect component.",1134],["The viewport has a Mask component. The viewport can either be the root GameObject, or a separate GameObject that's a child to the root. If auto-hiding scrollbars are used, it must be a child. The viewport Rect Transform needs to be referenced in the Viewport property of the Scroll Rect.",1134],["All the scrolling content must be children of a single content GameObject that is a child to the viewport. The content Rect Transform needs to be referenced in the Content property of the Scroll Rect.",1134],["The scrollbars - if used - are children to the root GameObject. See the Scrollbar page for more details on the setup of a scrollbar and see the section Scrollbar setup below for information about setup of scrollbars with a scroll view.",1134],["This image shows a setup where the viewport is a child to the scroll view root. This is the default used when using the GameObject > UI > Scroll View menu option.",1134],["To scroll content, the input must be received from inside the bounds of the ScrollRect, not on the content itself.",1134],["Take care when using Unrestricted scrolling movement as it is possible to lose control of the content in an irretrievable way. When using Elastic or Constrained movement it is best to position the content so that it starts within the bounds of the ScrollRect, or undesirable behaviour may occur as the RectTransform tries to bring the content back within its bounds.",1134],["Scrollbar setup",1134],["Optionally, the Scroll Rect can be linked to a horizontal and/or a vertical Scrollbar. These are typically placed in the hierarchy as siblings to the viewport, and when present, should be dragged into the Horizontal Scrollbar and Vertical Scrollbar properties of the Scroll Rect, respectively. Note that the Direction property on such a horizontal Scrollbar should be set to Left To Right, and on the vertical Scrollbar to Bottom To Top.",1134],["The scrollbars can optionally have auto-hiding behaviour that hides the scrollbars if the content doesn't need to scroll because it isn't larger than the viewport. Note that the auto-hiding only ever happens in Play Mode. In Edit Mode the scrollbars are always shown. This prevents marking the scene as dirty when it shouldn't be, and also help authoring content with proportions that there's room for even when the scrollbars are shown.",1134],["If one or both scrollbars have their visibility behaviour set to Auto Hide And Expand View, the viewport is automatically expanded when the scrollbars are hidden in order to take up the extra room where the scrollbars would otherwise have been. With this setup, the position and size of the view is driven by the Scroll Rect, and the width of the horizontal scrollbar as well as the height of the vertical scrollbar is driven as well. With this setup the viewport as well as the scrollbars must be children to the Scroll Rect root GameObject.",1134],["Hints",1134],["The pivot and anchors of the content RectTransform can be used to determine how the content is aligned inside the scroll view if the content grows or shrinks. If the content should stay aligned with the top, set the anchors to the top of the parent, and set the pivot to the top position.",1134],["See the page Making UI elements fit the size of their content for information about how to make the content Rect Transform automatically resize to fit the content.",1134],["ScrollRect",1134],["Selectable Base Class",1135],["The Selectable Class is the base class for all the interaction components and it handles the items that are in common.",1135],["Property: Function: ",1135],["Interactable This determines if this component will accept input. When it is set to false interaction is disabled and the transition state will be set to the disabled state. ",1135],["Transition Within a selectable component there are several Transition Options depending on what state the selectable is currently in. The different states are: normal, highlighted, pressed and disabled. ",1135],["Navigation There are also a number of Navigation Options to control how keyboard navigation of the controls is implemented. ",1135],["Selectable",1135],["Navigation Options",1136],["Property: Function: ",1136],["Navigation The Navigation options refers to how the navigation of UI elements in play mode will be controlled. ",1136],["None No keyboard navigation. Also ensures that it does not receive focus from clicking/tapping on it. ",1136],["Horizontal Navigates Horizontally. ",1136],["Vertical Navigates Vertically. ",1136],["Automatic Automatic Navigation. ",1136],["Explicit In this mode you can explicitly specify where the control navigates to for different arrow keys. ",1136],["Visualize Selecting Visualize gives you a visual representation of the navigation you have set up in the scene window. See below. ",1136],["In the above visualization mode, the arrows indicate how the change of focus is set up for the collection of controls as a group. That means - for each individual UI control - you can see which UI control will get focus next, if the user presses an arrow key when the given control has focus. So in the example shown above, If the \"button\" has focus and the user presses the right arrow key, the first (left-hand) vertical slider will then become focused. Note that the vertical sliders can't be focused-away-from using up or down keys, because they control the value of the slider. The same is true of the horizontal sliders and the left/right arrow keys.",1136],["SelectableNavigation",1136],["Transition Options",1137],["Within a selectable component there are several transition options depending on what state the selectable is currently in. The different states are: normal, highlighted, pressed and disabled.",1137],["Transition Options: Function: ",1137],["None This option is for the button to have no state effects at all. ",1137],["Color Tint Changes the colour of the button depending on what state it is in. It is possible to select the colour for each individual state. It is also possible to set the Fade Duration between the different states. The higher the number is, the slower the fade between colors will be. ",1137],["Sprite Swap Allows different sprites to display depending on what state the button is currently in, the sprites can be customised. ",1137],["Animation Allows animations to occur depending on the state of the button, an animator component must exist in order to use animation transition. It’s important to make sure root motion is disabled. To create an animation controller click on generate animation (or create your own) and make sure that an animation controller has been added to the animator component of the button. ",1137],["Each Transition option (except None) provides additional options for controlling the transitions. We'll go into details with those in each of the sections below.",1137],["Color Tint",1137],["Property: Function: ",1137],["Target Graphic The graphic used for the interaction component. ",1137],["Normal Color The normal color of the control ",1137],["Highlighted Color The color of the control when it is highlighted ",1137],["Pressed Color The color of the control when it is pressed ",1137],["Disabled Color The color of the control when it is disabled ",1137],["Color Multiplier This multiplies the tint color for each transition by its value. With this you can create colors greater than 1 to brighten the colors (or alpha channel) on graphic elements whose base color is less than white (or less then full alpha). ",1137],["Fade Duration The time taken, in seconds, to fade from one state to another ",1137],["Sprite Swap",1137],["Property: Function: ",1137],["Target Graphic The normal sprite to use ",1137],["Highlighted Sprite Sprite to use when the control is highlighted ",1137],["Pressed Sprite Sprite to use when the control is pressed ",1137],["Disabled Sprite Sprite to use when the control is disabled ",1137],["Animation",1137],["Property: Function: ",1137],["Normal Trigger The normal animation trigger to use ",1137],["Highlighted Trigger Trigger to use when the control is highlighted ",1137],["Pressed Trigger Trigger to use when the control is pressed ",1137],["Disabled Trigger Trigger to use when the control is disabled ",1137],["SelectableTransition",1137],["Script serialization",1138],["Serialization** is the automatic process of transforming data structures or GameObject states into a format that Unity can store and reconstruct later.",1138],["How you organize data in your Unity project affects how Unity serializes that data, which can have a significant impact on the performance of your project. This page outlines serialization in Unity and how to optimize your project for it.",1138],["This document covers the following topics:",1138],[" Serialization rules",1138],["Serializers in Unity are specifically designed to operate efficiently at runtime. Because of this, serialization in Unity behaves differently to serialization in other programming environments. Serializers in Unity work directly on the fields of your C# classes rather than their properties, so there are rules that your fields must conform to to be serialized. The following section outlines how to use field serialization in Unity.",1138],["To use field serialization you must ensure that the field:",1138],["Is public, or has a SerializeField attribute",1138],["isn't static",1138],["isn't const",1138],["isn't readonly",1138],["Has a field type that can be serialized:",1138],["Primitive data types (int, float, double, bool, string, etc.)",1138],["Enum types (32 bites or smaller)",1138],["Fixed-size buffers",1138],["Unity built-in types, for example, Vector2, Vector3, Rect, Matrix4x4, Color, AnimationCurve",1138],["Custom structs with the Serializable attribute",1138],["References to objects that derive from UnityEngine.Object",1138],["Custom classes with the Serializable attribute. (See Serialization of custom classes).",1138],["An array of a field type mentioned above",1138],["A List<T> of a field type mentioned above",1138],["Note**: Unity doesn't support serialization of multilevel types (multidimensional arrays, jagged arrays, dictionaries, and nested container types). If you want to serialize these, you have two options:",1138],["Wrap the nested type in a class or struct",1138],["Use serialization callbacks, by implementing ISerializationCallbackReceiver, to perform custom serialization.",1138],[" Serialization of custom classes",1138],["For Unity to serialize a custom class, you must ensure the class:",1138],["Has the Serializable attribute",1138],["isn't static.",1138],["When you assign an instance of a UnityEngine.Object-derived class to a field and Unity saves that field, Unity serializes the field as a reference to that instance. Unity serializes the instance itself independently, so it isn't duplicated when multiple fields are assigned to the instance. But for custom classes which don't derive from UnityEngine.Object, Unity includes the state of the instance directly in the serialized data of the MonoBehaviour or ScriptableObject that references them. There are two ways that this can happen: inline and by [SerializeReference].",1138],["Inline serialization**: By default, Unity serializes custom classes inline by value when you don’t specify [SerializeReference] on the field that references the class. This means that if you store a reference to an instance of a custom class in several different fields, they become separate objects when serialized. Then, when Unity deserializes the fields, they contain different distinct objects with identical data.",1138],["[SerializeReference] serialization**: If you do specify [SerializeReference], Unity establishes the object as a managed reference. The host object still stores the objects directly in its serialized data, but in a dedicated registry section.",1138],["[SerializeReference] adds some overhead but supports the following cases:",1138],["Fields can be null. Inline serialization can't represent null, instead, it replaces null with an inline object that has unassigned fields.",1138],["Multiple references to the same object. If you store a reference to an instance of a custom class in several different fields without using [SerializeReference], then they become separate objects when serialized.",1138],["Graphs and cyclical data (for example, an object that has a reference back to itself). Inline class serialization doesn't support null or shared references, so any cycle in data can lead to unexpected results, such as strange Inspector behavior, console errors or infinite loops.",1138],["Polymorphism. If you create a class that derives from a parent class and assign it to a field that uses the parent class as its type, without [SerializeReference] Unity only serializes the fields that belong to the parent class. When Unity deserializes the class instance, it instantiates the parent class instead of the derived class.",1138],["When a data structure requires a stable identifier to point to a specific object without hardcoding the object’s array position or searching the entire array. See SerializationUtility.SetManagedReferenceIdForObject.",1138],["Note**: Inline serialization is more efficient, and you should use it unless you specifically need one of the features that [SerializeReference] supports. For full details on how to use [SerializeReference], see the SerializeReference documentation.",1138],["Serialization of properties",1138],["Unity doesn't normally serialize properties except in the following situations:",1138],["If a property has an explicit backing field, Unity serializes it according to regular serialization rules. For example:",1138],["public int MyInt",1138],["get => m_backing;",1138],["private set => m_backing = value;",1138],["[SerializeField] private int m_backing;",1138],["Unity serializes properties with autogenerated fields during hot reloading only. public int MyInt { get; set; }",1138],["If you don't want Unity to serialize a property with autogenerated fields, use the [field: NonSerialized] attribute.",1138],[" Custom serialization",1138],["Sometimes you might want to serialize something that Unity’s serializer doesn’t support (for example, a C# Dictionary). The best approach is to implement the ISerializationCallbackReceiver interface in your class. This allows you to implement callbacks that are invoked at key points during serialization and deserialization:",1138],["When an object is about to be serialized, Unity invokes the OnBeforeSerialize() callback. Inside this callback is where you can transform your data into something Unity understands. For example, to serialize a C# Dictionary, copy the data from the Dictionary into an array of keys and an array of values.",1138],["After the OnBeforeSerialize() callback is complete, Unity serializes the arrays.",1138],["Later, when the object is deserialized, Unity invokes the OnAfterDeserialize() callback. Inside this callback is where you can transform the data back into a form that's convenient for the object in memory. For example, use the key and value arrays to repopulate the C# Dictionary.",1138],[" How Unity uses serialization",1138],["Saving and loading",1138],["Unity uses serialization to load and save scenes, Assets, and AssetBundles to and from your device’s memory. This includes data saved in your own scripting API objects such as MonoBehaviour components and ScriptableObjects.",1138],["Many of the features in the Unity Editor are built on top of the core serialization system. Two things to be particularly aware of with serialization are the Inspector window, and hot reloading.",1138],["The Inspector window",1138],["The Inspector window shows the value of the serialized fields of the inspected objects. When you change a value in the Inspector, the Inspector updates the serialized data and triggers a deserialization that updates the inspected object.",1138],["The same applies for both built-in Unity objects, and scripting objects such as MonoBehaviour-derived classes.",1138],["Unity doesn't call any C# property getters and setters when you view or change values in the Inspector window; instead, Unity accesses the serialized backing field directly.",1138],["Hot reloading",1138],["Hot reloading is where you create or edit scripts while the Editor is open and apply the script behaviors immediately. You don't have to restart the Editor for changes to take effect.",1138],["When you change and save a script, Unity hot reloads all the script data that's loaded at the time. Unity stores all serializable variables in all loaded scripts, then reloads those scripts and restores the serialized variables. Hot reloading discards all data that isn't serializable, so you won't be able to access the data afterward.",1138],["This affects all Editor windows and all MonoBehaviours in the project. Unlike other cases of serialization, Unity serializes private fields by default when reloading, even if they don’t have the ‘SerializeField’ attribute.",1138],["When Unity reloads scripts:",1138],["Unity serializes and stores all variables in all loaded scripts.",1138],["Unity restores them to their original, pre-serialization values:",1138],["Unity restores all variables - including private variables - that fulfill the requirements for serialization, even if a variable has no [SerializeField] attribute. Sometimes, you need to prevent Unity from restoring private variables, for example, if you want a reference to be null after reloading from scripts. In this case, use the [field: NonSerialized] attribute.",1138],["Unity never restores static variables, so don't use static variables for states that you need to keep after Unity reloads a script because the reloading process will discard them.",1138],["Prefabs",1138],["A Prefab is the serialized data of one or more GameObjects or components. A Prefab instance contains a reference to both the Prefab source and a list of modifications to it. The modifications are what Unity needs to do to the Prefab source to create that particular Prefab instance.",1138],["The Prefab instance only exists while you edit your project in the Unity Editor. The Unity Editor instantiates a GameObject from its two sets of serialization data: the Prefab source and the Prefab instance’s modifications.",1138],["Instantiation",1138],["When you call Instantiate on anything that exists in a scene, such as a Prefab or a GameObject:",1138],["Unity serializes it. This happens both at runtime and in the Editor. Unity can serialize everything that derives from UnityEngine.Object.",1138],["Unity creates a new GameObject and deserializes the data onto the new GameObject.",1138],["Unity runs the same serialization code in a different variant to report which other UnityEngine.Objects it references. It checks all referenced UnityEngine.Objects to see if they're part of the data Unity instantiates. If the reference points to something external, such as a Texture, Unity keeps that reference as it is. If the reference points to something internal, such as a child GameObject, Unity patches the reference to the corresponding copy.",1138],["Unloading unused assets",1138],["EditorUtility.UnloadUnusedAssetsImmediate is the native Unity garbage collector and has a different purpose to the standard C# garbage collector. It runs after you load a scene and checks for objects (like Textures) that it no longer references and unloads them safely. The native Unity garbage collector runs the serializer in a variation in which objects report all references to external UnityEngine.Objects. This is how Textures that one scene uses, the garbage collector unloads in the next.",1138],["Differences between Editor and runtime serialization",1138],["Most serialization happens in the Editor, whereas deserialization is the focus at runtime. Unity serializes some features only in the Editor, while it can serialize other features in both the Editor and at runtime:",1138],["Feature Editor Runtime ",1138],["",1138],["Assets in Binary Format Read/write supported Read supported ",1138],["Assets in YAML format Read/write supported Not supported ",1138],["Saving scenes, prefabs and other assets Supported, unless in Play mode Not supported ",1138],["Serialization of individual objects with JsonUtility Read/write support with JsonUtility.Support for additional types of objects with EditorJsonUtility Read/write support with JsonUtility ",1138],["SerializeReference Supported Supported ",1138],["ISerializationCallbackReceiver Supported Supported ",1138],["FormerlySerializedAs Supported Not supported ",1138],["Objects can have additional fields that only the Editor serializes, such as when you declare fields within the UNITY_EDITOR scripting symbol:",1138],["```lang-C#",1138],["public class SerializeRules : MonoBehaviour",1138],["if UNITY_EDITOR",1138],["public int m_intEditorOnly;",1138],["endif",1138],["In the above example, the m_intEditorOnly field is only serialized in the editor and isn't included in the build. This allows you to save memory by omitting data that's only required in the Editor from your build. Any code that uses that field would also need to be conditionally compiled, for example within #if UNITY_EDITOR blocks, so that the class can compile at build time.",1138],["The Editor doesn't support objects with fields that Unity only serializes at runtime, (for example, when you declare fields within the UNITY_STANDALONE directive).",1138],[" Script serialization errors",1138],["Script serialization can cause errors. Fixes to some of these are listed below.",1138],["“Find isn't allowed to be called from a MonoBehaviour constructor (or instance field initializer), call in Awake or Start instead.”",1138],["Calling Scripting API such as GameObject.Find inside a MonoBehaviour constructor or field initializer triggers this error.",1138],["To fix this, make the call to the Scripting API in MonoBehaviour.Start instead of in the constructor.",1138],["“Find isn't allowed to be called during serialization, call it from Awake or Start instead.”",1138],["Calling Scripting API such as GameObject.Find from within the constructor of a class marked with System.Serializable triggers this error.",1138],["To fix this, edit your code so that it makes no Scripting API calls in any constructors for any serialized objects.",1138],["Thread-safe Unity Scripting API",1138],["The restrictions above affect the majority of the Scripting API. Only some parts of the Unity scripting API are exempt and you can call them from anywhere:",1138],["Mathf functions",1138],["Simple self-contained structs; for example math structs like Vector3 and Quaternion",1138],["To reduce the risk of errors during serialization, only call API methods that are self-contained and don't need to get or set data in Unity itself, unless there is no alternative.",1138],[" Serialization best practice",1138],["You can organize your data to ensure you get optimal use of Unity’s serialization.",1138],["Aim to have Unity serialize the smallest possible set of data. The purpose of this isn't to save space on your computer’s hard drive, but to make sure that you can maintain backwards compatibility with previous versions of the project. Backwards compatibility can become more difficult later on in development if you work with large sets of serialized data.",1138],["Never have Unity serialize duplicate data or cached data. This causes significant problems for backwards compatibility: it carries a high risk of error because data can get out of sync.",1138],["Avoid nested, recursive structures where you reference other classes. The layout of a serialized structure always needs to be the same; independent of the data and only dependent on what's exposed in the script. The only way to reference other classes is through classes derived from UnityEngine.Object. These classes are separate; they only reference each other and they don’t embed the contents.",1138],["Serialization",1138],["Shadow",1139],["The Shadow component adds a simple outline effect to graphic components such as Text or Image. It must be on the same GameObject as the graphic component.",1139],["Properties",1139],["Property: Function: ",1139],["Effect Color The color of the shadow. ",1139],["Effect Distance The offset of the shadow expressed as a vector. ",1139],["Use Graphic Alpha Multiplies the color of the graphic onto the color of the effect. ",1139],["Shadow",1139],["Slider",1140],["The Slider control allows the user to select a numeric value from a predetermined range by dragging the mouse. Note that the similar ScrollBar control is used for scrolling rather than selecting numeric values. Familiar examples include difficulty settings in games and brightness settings in image editors.",1140],["Properties",1140],["Property: Function: ",1140],["Interactable Will this component accept input? See Interactable. ",1140],["Transition Properties that determine the way the control responds visually to user actions. See Transition Options. ",1140],["Navigation Properties that determine the sequence of controls. See Navigation Options. ",1140],["Fill Rect The graphic used for the fill area of the control. ",1140],["Handle Rect The graphic used for the sliding \"handle\" part of the control ",1140],["Direction The direction in which the slider's value will increase when the handle is dragged. The options are Left To Right, Right To Left, Bottom To Top and Top To Bottom. ",1140],["Min Value The value of the slider when the handle is at its extreme lower end (determined by the Direction property). ",1140],["Max Value The value of the slider when the handle is at its extreme upper end (determined by the Direction property). ",1140],["Whole Numbers Should the slider be constrained to integer values? ",1140],["Value Current numeric value of the slider. If the value is set in the inspector it will be used as the initial value, but this will change at runtime when the value changes. ",1140],["Events",1140],["Property: Function: ",1140],["On Value Changed A UnityEvent that is invoked when the current value of the Slider has changed. The event can send the current value as a float type dynamic argument. The value is passed as a float type regardless of whether the Whole Numbers property is enabled. ",1140],["Details",1140],["The value of a Slider is determined by the position of the handle along its length. The value increases from the Min Value up to the Max Value in proportion to the distance the handle is dragged. The default behaviour is for the slider to increase from left to right but it is also possible to reverse this behavior using the Direction property. You can also set the slider to increase vertically by selecting Bottom To Top or Top To Bottom for the Direction property.",1140],["The slider has a single event called On Value Changed that responds as the user drags the handle. The current numeric value of the slider is passed to the function as a float parameter. Typical use cases include:",1140],["Choosing a level of difficulty in a game, brightness of a light, etc.",1140],["Setting a distance, size, time or angle.",1140],["Slider",1140],["Standalone Input Module",1141],["The module is designed to work as you would expect a controller / mouse input to work. Events for button presses, dragging, and similar are sent in response to input.",1141],["The module sends pointer events to components as a mouse / input device is moved around, and uses the Graphics Raycaster and Physics Raycaster to calculate which element is currently pointed at by a given pointer device. You can configure these raycasters to detect or ignore parts of your Scene, to suit your requirements.",1141],["The module sends move events and submit / cancel events in response to Input tracked via the Input window. This works for both keyboard and controller input. The tracked axis and keys can be configured in the module's inspector.",1141],["Properties",1141],["Property: Function: ",1141],["Horizontal Axis Type the desired manager name for the horizontal axis button. ",1141],["Vertical Axis Type the desired manager name for the vertical axis. ",1141],["Submit Button Type the desired manager name for the Submit button. ",1141],["Cancel Button Type the desired manager name for the Cancel button. ",1141],["Input Actions Per Second Number of keyboard/controller inputs allowed per second. ",1141],["Repeat Delay Delay in seconds before the input actions per second repeat rate takes effect. ",1141],["Force Module Active Enable this property to force this Standalone Input Module to be active. ",1141],["Details",1141],["The module uses:",1141],["\nVertical / Horizontal axis for keyboard and controller navigation\n",1141],["\nSubmit / Cancel button for sending submit and cancel events\n",1141],["\nHas a timeout between events to only allow a maximum number of events a second.\n",1141],["The flow for the module is as follows",1141],["\nSend a Move event to the selected object if a valid axis from the Input window is entered\n",1141],["\nSend a submit or cancel event to the selected object if a submit or cancel button is pressed\n",1141],["\nProcess Mouse input\n",1141],["\nIf it is a new press\n",1141],["\nSend PointerEnter event (sent to every object up the hierarchy that can handle it)\n",1141],["\nSend PointerPress event\n",1141],["\nCache the drag handler (first element in the hierarchy that can handle it)\n",1141],["\nSend BeginDrag event to the drag handler\n",1141],["\nSet the 'Pressed' object as Selected in the event system\n",1141],["\nIf this is a continuing press\n",1141],["\nProcess movment\n",1141],["\nSend DragEvent to the cached drag handler\n",1141],["\nHandle PointerEnter and PointerExit events if touch moves between objects\n",1141],["\nIf this is a release\n",1141],["\nSend PointerUp event to the object that received the PointerPress\n",1141],["\nIf the current hover object is the same as the PointerPress object send a PointerClick event\n",1141],["\nSend a Drop event if there was a drag handler cached\n",1141],["\nSend a EndDrag event to the cached drag handler\n",1141],["\nProcess scroll wheel events\n",1141],["StandaloneInputModule",1141],["Terrain",1142],["The Unity Editor includes a built-in set of Terrain features that allow you to add landscapes to your game. In the Editor, you can create multiple Terrain tiles, adjust the height or appearance of your landscape, and add trees or grass to it. At runtime, Unity optimizes built-in Terrain rendering for efficiency. The pages in this section explain the various built-in options available for Terrain, and how to use them.",1142],["Terrain",1142],["Text",1143],["The Text control displays a non-interactive piece of text to the user. This can be used to provide captions or labels for other GUI controls or to display instructions or other text.",1143],["Properties",1143],["Property: Function: ",1143],["Text The text displayed by the control. ",1143],["Character ",1143],["Font The Font used to display the text. ",1143],["Font Style The style applied to the text. The options are Normal, Bold, Italic and Bold And Italic. ",1143],["Font Size The size of the displayed text. ",1143],["Line Spacing The vertical separation between lines of text. ",1143],["Rich Text Should markup elements in the text be interpreted as Rich Text styling? ",1143],["Paragraph ",1143],["Alignment The horizontal and vertical alignment of the text. ",1143],["Align by Geometry Use the extents of glyph geometry to perform horizontal alignment rather than glyph metrics. ",1143],["Horizontal Overflow The method used to handle the situation where the text is too wide to fit in the rectangle. The options are Wrap and Overflow. ",1143],["Vertical Overflow The method used to handle the situation where wrapped text is too tall to fit in the rectangle. The options are Truncate and Overflow. ",1143],["Best Fit Should Unity ignore the size properties and simply try to fit the text to the control's rectangle? ",1143],["",1143],["Color The color used to render the text. ",1143],["Material The Material used to render the text. ",1143],["A default text element looks like this:",1143],["Details",1143],["Some controls (such as Buttons and Toggles) have textual descriptions built-in. For controls that have no implicit text (such as Sliders), you can indicate the purpose using a label created with a Text control. Text is also useful for lists of instructions, story text, conversations and legal disclaimers.",1143],["The Text control offers the usual parameters for font size, style, etc, and text alignment. When the Rich Text option is enabled, markup elements within the text will be treated as styling information, so you can have just a single word or short section in boldface or in a different color, say (see the page about Rich Text for details of the markup scheme).",1143],["Hints",1143],["See the Effects page for how to apply a simple shadow or outline effect to the text.",1143],["Text",1143],["Toggle",1144],["The Toggle control is a checkbox that allows the user to switch an option on or off.",1144],["Properties",1144],["Property: Function: ",1144],["Interactable Will this component will accept input? See Interactable. ",1144],["Transition Properties that determine the way the control responds visually to user actions. See Transition Options. ",1144],["Navigation Properties that determine the sequence of controls. See Navigation Options. ",1144],["Is On Is the toggle switched on from the beginning? ",1144],["Toggle Transition The way the toggle reacts graphically when its value is changed. The options are None (ie, the checkmark simply appears or disappears) and Fade (ie, the checkmark fades in or out). ",1144],["Graphic The image used for the checkmark. ",1144],["Group The Toggle Group (if any) that this Toggle belongs to. ",1144],["Events",1144],["Property: Function: ",1144],["On Value Changed A UnityEvent that is invoked when the Toggle is clicked. The event can send the current state as a bool type dynamic argument. ",1144],["Details",1144],["The Toggle control allows the user to switch an option on or off. You can also combine several toggles into a Toggle Group in cases where only one of a set of options should be on at once.",1144],["The Toggle has a single event called On Value Changed that responds when the user changes the current value. The new value is passed to the event function as a boolean parameter. Typical use cases for Toggles include:",1144],["Switching an option on or off (eg, playing music during a game).",1144],["Letting the user confirm they have read a legal disclaimer.",1144],["Choosing one of a set of options (eg, a day of the week) when used in a Toggle Group.",1144],["Note that the Toggle is a parent that provides a clickable area to children. If the Toggle has no children (or they are disabled) then it is not clickable.",1144],["Toggle",1144],["Toggle Group",1145],["A Toggle Group is not a visible UI control but rather a way to modify the behavior of a set of Toggles. Toggles that belong to the same group are constrained so that only one of them can switched on at a time - pressing one of them to switch it on automatically switches the others off.",1145],["Properties",1145],["Property: Function: ",1145],["Allow Switch Off Is it allowed that no toggle is switched on? If this setting is enabled, pressing the toggle that is currently switched on will switch it off, so that no toggle is switched on. If this setting is disabled, pressing the toggle that is currently switched on will not change its state. ",1145],["Description",1145],["The Toggle Group is setup by dragging the Toggle Group object to the Group property of each of the Toggles in the group.",1145],["Toggle Groups are useful anywhere the user must make a choice from a mutually exclusive set of options. Common examples include selecting player character types, speed settings (slow, medium, fast, etc), preset colors and days of the week. You can have more than one Toggle Group object in the scene at a time, so you can create several separate groups if necessary.",1145],["Unlike other UI elements, an object with a Toggle Group component does not need to be a child of a Canvas object, although the Toggles themselves still do.",1145],["Note that the Toggle Group will not enforce its constraint right away if multiple toggles in the group are switched on when the scene is loaded or when the group is instantiated. Only when a new toggle is swicthed on are the others switched off. This means it's up to you to ensure that only one toggle is switched on from the beginning.",1145],["ToggleGroup",1145],["Touch Input Module",1146],["Note: TouchInputModule is obsolete. Touch input is now handled in StandaloneInputModule.**",1146],["This module is designed to work with touch devices. It sends pointer events for touching and dragging in response to user input. The module supports multitouch.",1146],["The module uses the scene configured Raycasters to calculate what element is currently being touched over. A raycast is issued for each current touch.",1146],["Properties",1146],["Property: Function: ",1146],["Force Module Active Forces this module to be active. ",1146],["Details",1146],["The flow for the module is as follows:",1146],["\nFor each touch event\n",1146],["\nIf it is a new press\n",1146],["\nSend PointerEnter event (sent to every object up the hierarchy that can handle it)\n",1146],["\nSend PointerPress event\n",1146],["\nCache the drag handler (first element in the hierarchy that can handle it)\n",1146],["\nSend BeginDrag event to the drag handler\n",1146],["\nSet the 'Pressed' object as Selected in the event system\n",1146],["\nIf this is a continuing press\n",1146],["\nProcess movment\n",1146],["\nSend DragEvent to the cached drag handler\n",1146],["\nHandle PointerEnter and PointerExit events if touch moves between objects\n",1146],["\nIf this is a release\n",1146],["\nSend PointerUp event to the object that received the PointerPress\n",1146],["\nIf the current hover object is the same as the PointerPress object send a PointerClick event\n",1146],["\nSend a Drop event if there was a drag handler cached\n",1146],["\nSend a EndDrag event to the cached drag handler\n",1146],["TouchInputModule",1146],["Vertical Layout Group",1147],["The Vertical Layout Group component places its child layout elements on top of each other. Their heights are determined by their respective minimum, preferred, and flexible heights according to the following model:",1147],["The minimum heights of all the child layout elements are added together and the spacing between them is added as well. The result is the minimum height of the Vertical Layout Group.",1147],["The preferred heights of all the child layout elements are added together and the spacing between them is added as well. The result is the preferred height of the Vertical Layout Group.",1147],["If the Vertical Layout Group is at its minimum height or smaller, all the child layout elements will also have their minimum height.",1147],["The closer the Vertical Layout group is to its preferred height, the closer each child layout element will also get to their preferred height.",1147],["If the Vertical Layout Group is taller than its preferred height, it will distribute the extra available space proportionally to the child layout elements according to their respective flexible heights.",1147],["For more information about minimum, preferred, and flexible height, see the documentation on Auto Layout.",1147],["Properties",1147],["Property: Function: ",1147],["Padding The padding inside the edges of the layout group. ",1147],["Spacing The spacing between the layout elements. ",1147],["Child Alignment The alignment to use for the child layout elements if they don't fill out all the available space. ",1147],["Control Child Size Whether the Layout Group controls the width and height of its child layout elements. ",1147],["Use Child Scale Whether the Layout Group considers the scale of its child layout elements when sizing and laying out elements. Width and Height correspond to the Scale > X and Scale > Y values in each child layout element's Rect Transform component. ",1147],["Child Force Expand Whether to force the child layout elements to expand to fill additional available space. ",1147],["VerticalLayoutGroup",1147],["Property Binders",1148],["A Property Binder is a C# Behaviour which you can attach to a GameObject with a Visual Effect component. Property Binders allow for connections between Scene values and Exposed Properties for the attached Visual Effect instance.",1148],["This component only works when you install the Visual Effect Graph package. For information on how to install the Visual Effect Graph, see the packages documentation.",1148],["For information on how to use Property Binders, see the Visual Effect Graph package documentation.",1148],["VFXPropertyBinder",1148],["Scriptable Render Pipeline introduction",1149],["This page explains how Unity's Scriptable Render Pipeline (SRP) works, and introduces some key concepts and terminology. The information on this page is applicable to the Universal Render Pipeline (URP), the High Definition Render Pipeline (HDRP), and custom render pipelines that are based on SRP.",1149],["The Scriptable Render Pipeline is a thin API layer that lets you schedule and configure rendering commands using C# scripts. Unity passes these commands to its low-level graphics architecture, which then sends instructions to the graphics API.",1149],["URP and HDRP are built on top of SRP. You can also create your own custom render pipeline on top of SRP.",1149],["Render Pipeline Instance and Render Pipeline Asset",1149],["Every render pipeline based on SRP has two key customized elements:",1149],["A Render Pipeline Instance. This is an instance of a class defines the functionality of your render pipeline. Its script inherits from RenderPipeline, and overrides its Render() method.",1149],["A Render Pipeline Asset. This is an asset in your Unity Project that stores data about which Render Pipeline Instance to use, and how to configure it. Its script inherits from RenderPipelineAsset and overrides its CreatePipeline() method.",1149],["For more information on these elements, and instructions on how to create them in a custom render pipeline, see Creating a Render Pipeline Asset and a Render Pipeline Instance.",1149],["ScriptableRenderContext",1149],["ScriptableRenderContext is a class that acts as an interface between the custom C# code in the render pipeline and Unity's low-level graphics code.",1149],["Use the ScriptableRenderContext API to schedule and execute rendering commands. For information, see Scheduling and executing rendering commands in the Scriptable Render Pipeline.",1149],["Entry points and callbacks",1149],["When working with SRP, use these to make Unity call your C# code at specific times.",1149],["RenderPipeline.Render is the main entry point to the SRP. Unity calls this method automatically. If you are writing a custom render pipeline, this is where you begin to write your code.",1149],["The RenderPipelineManager class has the following events that you can subscribe to, so that you can execute custom code at specific points in the render loop:",1149],["beginFrameRendering - Note: This can generate garbage. Use beginContextRendering instead.",1149],["endFrameRendering - Note: This can generate garbage. Use endContextRendering instead.",1149],["Scriptable Render Pipeline fundamentals",1150],["Unity's Scriptable Render Pipeline (SRP) is a feature that allows you to control rendering via C# scripts. SRP is the technology that underpins the Universal Render Pipeline (URP) and the High Definition Render Pipeline (HDRP).",1150],["Read this documentation if you want to understand how SRP works, and how URP and HDRP work on a fundamental level.",1150],["This section contains the following pages:",1150],["Assembly definitions",1151],["Assembly Definitions and Assembly References are assets that you can create to organize your scripts into assemblies.",1151],["An assembly is a C# code library that contains the compiled classes and structs that are defined by your scripts and which also define references to other assemblies. See [Assemblies in .NET] for general information about assemblies in C#.",1151],["By default, Unity compiles almost all of your game scripts into the predefined assembly, Assembly-CSharp.dll. (Unity also creates a [few smaller, specialized predefined assemblies].)",1151],["This arrangement works acceptably for small projects, but has some drawbacks as you add more code to your project:",1151],["Every time you change one script, Unity has to recompile all the other scripts, increasing overall compilation time for iterative code changes.",1151],["Any script can directly access types defined in any other script, which can make it more difficult to refactor and improve your code.",1151],["All scripts are compiled for all platforms.",1151],["By defining assemblies, you can organize your code to promote modularity and reusability. Scripts in the assemblies you define for your project are no longer added to the default assemblies and can only access scripts in those other assemblies that you designate.",1151],["The above diagram illustrates how you might split up the code in your project into multiple assemblies. Because Main references Stuff and not the other way around, you know that any changes to the code in Main cannot affect the code in Stuff. Similarly, because Library doesn’t depend on any other assemblies, you can more easily reuse the code in Library in another project.",1151],["This section discusses how to create and set up Assembly Definition and Assembly Reference assets to define assemblies for your project:",1151],["[Defining assemblies]",1151],["[References and dependencies]",1151],["[Creating an Assembly Definition asset]",1151],["[Creating an Assembly Definition Reference asset]",1151],["[Creating a platform-specific assembly]",1151],["[Creating an assembly for Editor code]",1151],["[Creating a test assembly]",1151],["[Referencing another assembly]",1151],["[Referencing a precompiled, plugin assembly]",1151],["[Conditionally building an assembly]",1151],["[Defining symbols based on project packages]",1151],["[Finding which assembly a script belongs to]",1151],["[Special folders]",1151],["[Getting assembly information in build scripts]",1151],["See also:",1151],["[Assembly Definition properties]",1151],["[Assembly Definition Reference properties]",1151],["[Assembly Definition File Format]",1151],["",1151],["Defining assemblies",1151],["To organize your project code into assemblies, create a folder for each desired assembly and move the scripts that should belong to each assembly into the relevant folder. Then [create Assembly Definition assets] to specify the assembly properties.",1151],["Unity takes all of the scripts in a folder that contains an Assembly Definition asset and compiles them into an assembly, using the name and other settings defined by the asset. Unity also includes scripts in any child folders in the same assembly, unless the child folder has its own Assembly Definition or Assembly Reference asset.",1151],["To include scripts from a non-child folder in an existing assembly, create an Assembly Reference asset in the non-child folder and set it to reference the Assembly Definition asset that defines the target assembly. For example, you can combine the scripts from all the Editor folders in your project in their own assembly, no matter where those folders are located.",1151],["Unity compiles assemblies in an order determined by their dependencies; you cannot specify the order in which compilation takes place.",1151],["",1151],["References and dependencies",1151],["When one type (such as a class or struct) uses another type, the first type is dependent on the second. When Unity compiles a script, it must also have access to any types or other code the script depends upon. Likewise, when the compiled code runs, it must have access to the compiled versions of its dependencies. If two types are in different assemblies, an assembly containing a dependent type must declare a reference to the assembly containing the type upon which it depends.",1151],["You can control the references between assemblies used in your project using the options of an Assembly Definition. The Assembly Definition settings include:",1151],["[Auto Referenced] -- Whether the predefined assemblies reference the assembly",1151],["[Assembly Definition References] -- References to other project assemblies created with Assembly Definitions",1151],["[Override References] + [Assembly References] -- References to precompiled (plugin) assemblies",1151],["[No Engine References] -- References to UnityEngine assemblies",1151],["Note: Classes in assemblies created with an Assembly Definition cannot use types defined in the predefined assemblies.",1151],["",1151],["Default references",1151],["By default, the predefined assemblies reference all other assemblies, including those created with Assembly Definitions (1) and precompiled assemblies added to the project as plugins (2). In addition, assemblies you create with an Assembly Definition asset automatically reference all precompiled assemblies (3):",1151],["In the default setup, classes in the predefined assemblies can use all types defined by any other assemblies in the project. Likewise, assemblies you create with an Assembly Definition asset can use all types defined in any precompiled (plug-in) assemblies.",1151],["You can prevent an assembly from being referenced by the predefined assemblies by turning off the [Auto Referenced option] in the Inspector for an Assembly Definition asset. Turning off auto-referenced means that the predefined assemblies are not recompiled when you change code in the assembly, but also means that the predefined assemblies cannot use code in this assembly directly. See [Assembly Definition properties].",1151],["Likewise, you can prevent a plugin assembly from being automatically referenced by turning off the [Auto Referenced property] in the [Plugin Inspector] for a plugin asset. This affects both predefined assemblies and those you create with an Assembly Definition. For more information, see [Plugin Inspector].",1151],["When you turn off Auto Referenced for a plug-in, you can explicitly reference it in the Inspector for an Assembly Definition asset. Enable the asset’s [Override References] option and add a reference to the plug-in. See [Assembly Definition properties].",1151],["Note: You cannot declare explicit references for the precompiled assemblies. The predefined assemblies can only use code in auto-referenced assemblies.",1151],["",1151],["Cyclical references",1151],["A cyclical assembly reference exists when one assembly references a second assembly that, in turn, references the first assembly. Such cyclical references between assemblies are not allowed and are reported as an error with the message, \"Assembly with cyclic references detected.\"",1151],["Typically, such cyclical references between assemblies occur because of cyclical references within the classes defined in the assemblies. While there is nothing technically invalid about cyclical references between classes in the same assembly, cyclical references between classes in different assemblies are not allowed. If you encounter a cyclical reference error, you must refactor your code to remove the cyclical reference or to put the mutually referencing classes in the same assembly.",1151],["",1151],["Creating an Assembly Definition asset",1151],["To create an Assembly Definition asset:",1151],["In the Project window, locate the folder containing the scripts you want to include in the assembly.",1151],["Create an Assembly Definition asset in the folder (menu: Assets > Create > Assembly Definition).",1151],["Assign a name to the asset. By default, the assembly file uses the name you assign to the asset, but you can change the name in the Inspector window.",1151],["Unity recompiles the scripts in the project to create the new assembly. Once it has finished, you can change the settings for the new Assembly Definition.",1151],["The scripts in the folder containing the Assembly Definition, including scripts in any child folders (unless those folders contain their own Assembly Definition or Reference assets), are compiled into the new assembly and removed from their previous assembly.",1151],["",1151],["Creating an Assembly Definition Reference asset",1151],["To create an Assembly Definition Reference asset:",1151],["In the Project window, locate the folder containing the scripts you want to include in the referenced assembly.",1151],["Create an Assembly Reference asset in the folder (menu: Assets > Create > Assembly Definition Reference).",1151],["Assign a name to the asset.",1151],["Unity recompiles the scripts in the project to create the new assembly. Once it has finished, you can change the settings for the new Assembly Definition Reference.",1151],["Select the new Assembly Definition Reference asset to view its properties in the Inspector.",1151],["Set the Assembly Definition property to reference the target Assembly Definition asset.",1151],["Click Apply.",1151],["The scripts in the folder containing the Assembly Definition Reference asset, including scripts in any child folders (unless those folders contain their own Assembly Definition or Reference assets) are compiled into the referenced assembly and removed from their previous assembly.",1151],["",1151],["Creating a platform-specific assembly",1151],["To create an assembly for a specific platform:",1151],["[Create an Assembly Definition asset].",1151],["Select the new Assembly Definition Reference asset to view its properties in the Inspector.",1151],["Check the Any Platform option and choose specific platforms to exclude. Alternately, you can uncheck Any Platform and choose specific platforms to include.",1151],["Click Apply.",1151],["The assembly will be included (or excluded) according to the selected platforms when you build your project for a platform.",1151],["",1151],["Creating an assembly for Editor code",1151],["Editor assemblies allow you to put your Editor scripts anywhere in the project, not just in top-level folders named, Editor.",1151],["To create an assembly that contains the Editor code in your project:",1151],["[Create a platform-specific assembly] in a folder containing your Editor scripts.",1151],["Include ONLY the Editor platform.",1151],["If you have additional folders containing Editor scripts, [create Assembly Definition Reference assets] in those folders and set them to reference this Assembly Definition.",1151],["",1151],["Creating a test assembly",1151],["Test assemblies allow you to write tests and run them with the Unity TestRunner, while also keeping your test code separate from the code you ship with your application. Unity provides the TestRunner as part of the [Test Framework package]. See the [Test Framework documentation] for instructions on installing the Test Framework package and creating test assemblies.",1151],["",1151],["Referencing another assembly",1151],["To use the C# types and functions that are part of another assembly, you must create a reference to that assembly in the Assembly Definition asset.",1151],["To create an assembly reference:",1151],["Select the Assembly Definition for the assembly that requires the reference to view its properties in the Inspector.",1151],["In the Assembly Definition References section, click the + button to add a new reference.",1151],["Assign the Assembly Definition asset to the newly created slot in the list of references.",1151],["Enabling the Use GUIDs option allows you to change the filename of the referenced Assembly Definition asset without updating references in other Assembly Definitions to reflect the new name. (Note that GUIDs must be reset if the metadata files for the asset files are deleted or you move the files outside the Unity Editor without also moving the metadata files along with them.)",1151],["",1151],["Referencing a precompiled, plugin assembly",1151],["By default, all assemblies in your project created with Assembly Definitions automatically reference all precompiled assemblies. These automatic references mean that Unity must recompile all your assemblies when you update any one of the precompiled assemblies, even if the code in the assembly is not used. To avoid this extra overhead, you can override the automatic references and specify references to only those precompiled libraries the assembly actually uses:",1151],["Select the Assembly Definition for the assembly that requires the reference to view its properties in the Inspector.",1151],["In the General section, enable the Override References option.",1151],["The Assembly References section of the Inspector becomes available when Override References is checked.",1151],["In the Assembly References section, click the + button to add a new reference.",1151],["Use the drop-down list in the empty slot to assign a reference to a precompiled assembly. The list shows all the precompiled assemblies in the project for the platform currently set in the project [Build Settings]. (Set the platform compatibility for a precompiled assembly in the [Plugin Inspector].)",1151],["Click Apply.",1151],["Repeat for each platform for which you build your project.",1151],["",1151],["Conditionally including an assembly",1151],["You can use preprocessor symbols to control whether an assembly is compiled and included in builds of your game or application (including play mode in the Editor). You can specify which symbols must be defined for an assembly to be used with the Define Constraints list in the Assembly Definition options:",1151],["Select the Assembly Definition for the assembly to view its properties in the Inspector.",1151],["In the Define Constraints section, click the + button to add a new symbol to the list of constraints.",1151],["Enter the symbol name.",1151],["You can \"negate\" the symbol by putting an exclamation point in front of the name. For example, the constraint, !UNITY_WEBGL would include the assembly when UNITY_WEBGL was NOT defined.",1151],["Click Apply.",1151],["You can use the following symbols as constraints:",1151],["Symbols defined in the [Scripting Define Symbols] setting, which you can find in the Player section of your Project Settings. Note that the Scripting Define Symbols apply to the platform currently set in your project [Build Settings]. To define a symbol for multiple platforms, you must switch to each platform and modify the Scripting Define Symbols field individually.",1151],["Symbols defined by Unity. See [Platform dependent compilation].",1151],["Symbols defined using the [Version Defines] section of the Assembly Definition asset.",1151],["Symbols defined in scripts are not considered when determining if a constraint has been satisfied.",1151],["See [Define Constraints] for additional information.",1151],["",1151],["Defining symbols based on Unity and project package versions",1151],["If you need to compile different code in an assembly according to whether a project uses specific versions of Unity or of a package, you can add entries to the Version Defines list. This list specifies rules for when a symbol should be defined. For version numbers, you can specify a logical expression that evaluates to a specific version or a range of versions.",1151],["To conditionally define a symbol:",1151],["Select the Assembly Definition asset for the assembly to view its properties in the Inspector.",1151],["In the Version Defines section, click the + button to add an entry to the list.",1151],["Set the properties:",1151],["Resource: choose Unity or the package or module that must be installed in order for this symbol to be defined",1151],["Define: the symbol name",1151],["Expression: an expression that evaluates to a specific version or a range of versions. See [Version Define Expressions] for the rules.",1151],["The Expression outcome shows which versions the expression evaluates to. If the outcome displays, Invalid, then expression syntax is incorrect.",1151],["The following example defines the symbol, USE_TIMELINE_1_3, if the project uses Timeline 1.3 and defines, USE_NEW_APIS, if the project is opened in Unity 2021.2.0a7, or later:",1151],["Click Apply.",1151],["Symbols defined in the Assembly Definition are only in scope for the scripts in the assembly created for that definition.",1151],["Note that you can use the symbols defined using the Version Defines list as Define Constraints. Thus you could specify that an assembly should only be used when specific versions of a given package are also installed in the project.",1151],["",1151],["Version Define expressions",1151],["You can use expressions to specify an exact version or a range of versions. A Version Define expression uses mathematical range notation.",1151],["A square bracket, \"[]\" designates that the range includes the endpoint:",1151],["\n [1.3,3.4.1] evaluates to 1.3.0 <= x <= 3.4.1\n",1151],["A parenthesis \"()\" designates that the range excludes the endpoint:",1151],["\n (1.3.0,3.4) evaluates to 1.3.0 < x < 3.4.0\n",1151],["You can mix both range types in a single expression:",1151],["\n [1.1,3.4) evaluates to 1.1.0 <= x < 3.4.0\n",1151],["\n (0.2.4,5.6.2-preview.2] evaluates to 0.2.4 < x <= 5.6.2.-preview.2\n",1151],["You can use a single version designator in square brackets to designate an exact version:",1151],["\n [2.4.5] evaluates to x = 2.4.5\n",1151],["As a shortcut, you can enter a single version without range brackets to indicate that the expression includes that version or later:",1151],["\n 2.1.0-preview.7 evaluates to x >= 2.1.0-preview.7\n",1151],["Note: No spaces are allowed in an expression. No wildcard characters are supported.",1151],["Unity version numbers",1151],["Current versions of Unity (and all versions that support Assembly Definitions) use a version designator with three parts: MAJOR.MINOR.REVISION, for example, 2017.4.25f1, 2018.4.29f1, and 2019.4.7f1.",1151],["The MAJOR version is the target release year, such as 2017 or 2021.",1151],["The MINOR version is the target release quarter, such as 1, 2, 3, or 4.",1151],["The REVISION designator has three parts of its own, with the format: RRzNN, where:",1151],["RR is a one or two digit revision number",1151],["z is a letter designating the release type:",1151],["a = alpha release",1151],["b = beta release",1151],["f = a normal public release",1151],["c = China release version (equivalent to f)",1151],["p = patch release",1151],["x = experimental release",1151],["NN is one or two digit incremental number",1151],["Release type designators are compared as follows:",1151],["\n a < b < f = c < p < x\n",1151],["In other words, an alpha release is considered earlier than a beta, which is earlier than a normal (f) or China (c) release. A patch release is always later than a normal or China release with the same revision number and an experimental release is later than any other release type. Note that experimental releases do not use an incremental number at the end.",1151],["Unity version numbers are allowed to have a suffix after the REVISION component, such as 2019.3.0f11-Sunflower. Any suffixes are ignored for the purpose of comparing versions.",1151],["As an example, the following expression includes any 2017 or 2018 version of Unity, but not any version in 2019 or later:",1151],["Package and module version numbers",1151],["Package and module version designators have four parts, following the [Semantic Versioning] format: MAJOR.MINOR.PATCH-LABEL. The first three parts are always numbers, but the label is a string. Unity packages in preview use the string, preview or preview.n, where n > 0.",1151],["See [Package Versioning] for more information about package version numbers.",1151],["For example, the following expression includes all versions of a package with MAJOR.MINOR versions between 3.2 and 6.1 (inclusive):",1151],["[3.2,6.1]",1151],["",1151],["Finding which assembly a script belongs to",1151],["To identify which assembly one of your C# scripts is compiled into:",1151],["Select the C# script file in the Unity Project window to view its properties in the Inspector window.",1151],["The assembly filename and the Assembly Definition, if one exists, are shown in the Assembly Information section of the Inspector.",1151],["In this example, the selected script is compiled into the library file, Unity.Timeline.Editor.dll, which is defined by the Unity.Timeline.Editor Assembly Definition asset.",1151],["",1151],["Special folders",1151],["Unity treats scripts in folders with certain, special names differently than scripts in other folders. However, one of these folders loses its special treatment when you create an Assembly Definition asset inside it or in a folder above it. You might notice this change when you use Editor folders, which might be scattered throughout your Project (depending on how you organize your code and on the Asset Store packages you use).",1151],["Unity normally compiles any scripts in folders named Editor into the predefined Assembly-CSharp-Editor assembly no matter where those scripts are located. However, if you create an Assembly Definition asset in a folder that has an Editor folder underneath it, Unity no longer puts those Editor scripts into the predefined Editor assembly. Instead, they go into the new assembly created by your Assembly Definition — where they might not belong. To manage Editor folders, you can create Assembly Definition or Reference assets in each Editor folder to place those scripts in one or more Editor assemblies. See [Creating an assembly for Editor code].",1151],["",1151],["Setting assembly attributes",1151],["You can use assembly attributes to set metadata properties for your assemblies. By convention, assembly attribute statements are typically put in a file named AssemblyInfo.cs.",1151],["For example, the following assembly attributes specify a few [.NET assembly metadata values], an [InternalsVisibleTo] attribute, which can be useful for testing, and the Unity-defined [Preserve attribute] that affects how unused code is removed from an assembly when you build your project:",1151],["```csharp",1151],["[assembly: System.Reflection.AssemblyCompany(\"Bee Corp.\")]",1151],["[assembly: System.Reflection.AssemblyTitle(\"Bee's Assembly\")]",1151],["[assembly: System.Reflection.AssemblyCopyright(\"Copyright 2020.\")]",1151],["[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(\"UnitTestAssembly\")]",1151],["[assembly: UnityEngine.Scripting.Preserve]",1151],["",1151],["Getting assembly information in build scripts",1151],["Use the CompilationPipeline class, in the UnityEditor.Compilation namespace, to retrieve information about all assemblies built by Unity for a project, including those created based on Assembly Definition assets.",1151],["For example, the following script uses the CompilationPipeline class to list all the current Player assemblies in a project:",1151],["```csharp",1151],["using UnityEditor;",1151],["using UnityEditor.Compilation;",1151],["public static class AssemblyLister",1151],["[MenuItem(\"Tools/List Player Assemblies in Console\")]",1151],["public static void PrintAssemblyNames()",1151],["UnityEngine.Debug.Log(\"== Player Assemblies ==\");",1151],["Assembly[] playerAssemblies =",1151],["CompilationPipeline.GetAssemblies(AssembliesType.Player);",1151],["foreach (var assembly in playerAssemblies)",1151],["UnityEngine.Debug.Log(assembly.name);",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["",1151],["Special folders and script compilation order",1152],["Unity reserves some project folder names to indicate that the contents have a special purpose. Some of these folders have an effect on the order of script compilation. These folder names are:",1152],["Assets",1152],["Editor",1152],["Editor default resources",1152],["Gizmos",1152],["Plugins",1152],["Resources",1152],["Standard Assets",1152],["StreamingAssets",1152],["See Special folder names for more information about these folders.",1152],["Predefined assemblies",1152],["Unity compiles scripts in four separate phases, based on where the script file is located within the project folder structure. Unity creates a separate CSharp project file (.csproj) and a predefined assembly for each phase. (If there are no scripts eligible for a compilation phase, Unity does not create the corresponding project file or assembly.)",1152],["Compilation order is significant when a script references a class compiled in a different phase (and therefore located in a different assembly). The basic rule is that anything that is compiled in a phase after the current one cannot be referenced. Anything that is compiled in the current phase or an earlier phase is fully available.",1152],["The phases of compilation are as follows:",1152],["Phase Assembly name Script files ",1152],["1 Assembly-CSharp-firstpass Runtime scripts in folders called Standard Assets, Pro Standard Assets and Plugins. ",1152],["2 Assembly-CSharp-Editor-firstpass Editor scripts in folders called Editor that are anywhere inside top-level folders called Standard Assets, Pro Standard Assets and Plugins. ",1152],["3 Assembly-CSharp All other scripts that are not inside a folder called Editor. ",1152],["4 Assembly-CSharp-Editor All remaining scripts (those that are inside a folder called Editor). ",1152],["Note:** Standard Assets work only in the Assets root folder.",1152],["You can organize the scripts in your project using your own assemblies by creating assembly definition files. Defining your own assemblies can reduce the amount of code that needs to be recompiled when you make an unrelated code change and can provide more control over dependencies to other assemblies. See Script Compilation - Assembly Definition Files for more information.",1152],["Scripted Importers",1153],["Scripted Importers are part of the Unity Scripting API. You can use Scripted Importers to write custom Asset importers in C#, which allows you to add your own support for file formats that are not natively supported by Unity.",1153],["You can create a custom importer by specializing the abstract class ScriptedImporter and applying the ScriptedImporter attribute. This registers your custom importer to handle one or more file extensions. When a file matching the registered file extensions is detected by the Asset pipeline as being new or changed, Unity invokes the method OnImportAsset of your custom importer.",1153],["Note: Scripted Importers cannot handle a file extension that is already natively handled by Unity.",1153],["Example",1153],["Below is a simple example as Scripted Importer: It imports asset files with the extension \"cube\" into a Unity Prefab with a cube primitive as the main Asset and a default material and color, and assigns its position from a value read from the Asset file:",1153],["using UnityEngine;",1153],["using UnityEditor.AssetImporters;",1153],["using System.IO;",1153],["[ScriptedImporter(1, \"cube\")]",1153],["public class CubeImporter : ScriptedImporter",1153],["public float m_Scale = 1;",1153],["public override void OnImportAsset(AssetImportContext ctx)",1153],["var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);",1153],["var position = JsonUtility.FromJson(File.ReadAllText(ctx.assetPath));",1153],["cube.transform.position = position;",1153],["cube.transform.localScale = new Vector3(m_Scale, m_Scale, m_Scale);",1153],["// 'cube' is a GameObject and will be automatically converted into a prefab",1153],["// (Only the 'Main Asset' is eligible to become a Prefab.)",1153],["ctx.AddObjectToAsset(\"main obj\", cube);",1153],["ctx.SetMainObject(cube);",1153],["var material = new Material(Shader.Find(\"Standard\"));",1153],["material.color = Color.red;",1153],["// Assets must be assigned a unique identifier string consistent across imports",1153],["ctx.AddObjectToAsset(\"my Material\", material);",1153],["// Assets that are not passed into the context as import outputs must be destroyed",1153],["var tempMesh = new Mesh();",1153],["DestroyImmediate(tempMesh);",1153],["Note**:",1153],["The importer is registered with Unity's Asset pipeline by placing the ScriptedImporter attribute on the CubeImporter class.",1153],["The CubeImporter class implements the abstract ScriptedImporter base class.",1153],["OnImportAsset’s ctx argument contains both input and output data for the import event.",1153],["Each import event must generate one (and only one) call to SetMainAsset.",1153],["Each import event may generate as many calls to AddSubAsset as necessary.",1153],["Please refer to the Scripting API documentation for more details.",1153],["You may also implement a custom Import Settings Editor by specializing ScriptedImporterEditor class and decorating it with the class attribute CustomEditor to tell it what type of importer it is used for.",1153],["For example:",1153],["using UnityEditor;",1153],["using UnityEditor.AssetImporters;",1153],["using UnityEditor.SceneManagement;",1153],["using UnityEngine;",1153],["[CustomEditor(typeof(CubeImporter))]",1153],["public class CubeImporterEditor: ScriptedImporterEditor",1153],["public override void OnInspectorGUI()",1153],["var colorShift = new GUIContent(\"Color Shift\");",1153],["var prop = serializedObject.FindProperty(\"m_ColorShift\");",1153],["EditorGUILayout.PropertyField(prop, colorShift);",1153],["base.ApplyRevertGUI();",1153],["Using a Scripted Importer",1153],["Once you have added a scripted importer class to a project, you may use it just like any other native file type supported by Unity:",1153],["Drop a supported file in the Asset directory hierarchy to import.",1153],["Restarting the Unity Editor reimports any files that have changed since last update.",1153],["Editing the Asset file on disk and returning to the Unity Editor triggers a reimport.",1153],["Import a new asset using Asset > Import New Asset....",1153],["Explicitly trigger a re-import via the menu: Asset > Reimport.",1153],["Click on the Asset to see its settings in the Inspector window. To modify its settings, edit them in the Inspector window and click Apply .",1153],["",1153],["Real-world use of Scripted Importers",1153],["Alembic: The Alembic importer plug-in has been updated to use a Scripted Importer. For more information, visit Unity github: AlembicImporter.",1153],["USD: The USD importer plug-in has been updated to use a Scripted Importer.",1153],["For more information, please visit Unity github:: USDForUnity.",1153],["Scripting backends",1154],["Unity has two scripting backends: Mono and IL2CPP (Intermediate Language To C++), each of which uses a different compilation technique:",1154],["Mono uses just-in-time (JIT) compilation and compiles code on demand at runtime.",1154],["IL2CPP uses ahead-of-time (AOT) compilation and compiles your entire application before it is run.",1154],["This section contains further information about these backends:",1154],["Page Description ",1154],["",1154],["Mono overview Information about the Mono scripting back end. ",1154],["IL2CPP overview Information about the IL2CPP scripting back end. ",1154],["Scripting restrictions This section contains information on what scripting restrictions apply to each platform you want to build your application for, to support cross-platform code. ",1154],["Managed code stripping Information about managed code stripping, which removes unused code from a build. This helps decrease the final build size of your application. ",1154],["Scripting with Assets",1155],["Here are some of the things you can do with Assets via scripts:",1155],["Scripting concepts",1156],["Although Unity uses an implementation of the standard Mono runtime for scripting, it still has its own practices and techniques for accessing the engine from scripts. This section explains how objects created in the Unity editor are controlled from scripts, and details the relationship between Unity's gameplay features and the Mono runtime.",1156],["Important Classes",1157],["This section provides an overview of some of the most commonly used and important built-in classes in Unity that you may want to use when scripting.",1157],["These pages serve as a starting point for the discovery of scripting basics in Unity, and do not cover all classes in Unity, or even every member of the classes which are covered.",1157],["For a more complete reference of all the built-in classes and every member available, see the Script Reference.",1157],["\nGameObject: Represents the type of objects which can exist in a Scene.\n",1157],["\nMonoBehaviour: The base class from which every Unity script derives, by default.\n",1157],["\nObject: The base class for all objects that Unity can reference in the editor.\n",1157],["\nTransform: Provides you with a variety of ways to work with a GameObject’s position, rotation and scale via script, as well as its hierarchical relationship to parent and child GameObjects.\n",1157],["\nVectors: Classes for expressing and manipulating 2D, 3D, and 4D points, lines and directions.\n",1157],["\nQuaternion: A class which represents an absolute or relative rotation, and provides methods for creating and manipulating them.\n",1157],["\nScriptableObject: A data container that you can use to save large amounts of data.\n",1157],["\nTime (and framerate management): The Time class allows you to measure and control time, and manage the framerate of your project.\n",1157],["\nMathf: A collection of common math functions, including trigonometric, logarithmic, and other functions commonly required in games and app development.\n",1157],["\nRandom: Provides you with easy ways of generating various commonly required types of random values.\n",1157],["\nDebug: Allows you to visualise information in the Editor that may help you understand or investigate what is going on in your project while it is running.\n",1157],["\nGizmos and Handles: allows you to draw lines and shapes in the Scene view and Game view, as well as interactive handles and controls.\n",1157],["Scripting restrictions",1158],["Unity provides a common scripting API and experience across all platforms it supports. However, some platforms have inherent restrictions. To help you understand these restrictions, the following table describes which restrictions apply to each platform and scripting backend:",1158],["Platform (scripting backend) Ahead-of-time compile Supports threads ",1158],["Android (IL2CPP) Yes Yes ",1158],["Android (Mono) No Yes ",1158],["iOS (IL2CPP) Yes Yes ",1158],["Standalone (IL2CPP) Yes Yes ",1158],["Standalone (Mono) No Yes ",1158],["Universal Windows Platform (IL2CPP) Yes Yes ",1158],["WebGL (IL2CPP) Yes No ",1158],["",1158],["Ahead-of-time compile (AOT)",1158],["Some platforms don't allow runtime code generation. Any managed code which depends upon just-in-time (JIT) compilation on the target device will fail. Instead, you must compile all the managed code ahead-of-time (AOT). Often, this distinction doesn't matter, but in a few specific cases, AOT platforms require additional consideration.",1158],["Reflection",1158],["Unity supports reflection on AOT platforms. However, if this compiler can't infer that the code is used via reflection the code might not exist at runtime. For more information, refer to [[wiki:ManagedCodeStripping Managed Code Stripping]].",1158],["System.Reflection.Emit",1158],["An AOT platform cannot implement any of the methods in the System.Reflection.Emit namespace.",1158],["Serialization",1158],["AOT platforms might encounter issues with serialization and deserialization because of the use of reflection. If a type or method is only used via reflection as part of serialization or deserialization, the AOT compiler cannot detect that it needs to generate the code needs for the type or method.",1158],["Generic Types and Methods",1158],["For generic types and methods the compiler must determine which generic instances are used because different generic instances might require different code. For example the code for List<int> is different than it is for List<double>. However IL2CPP will share code for usages for reference types, so the same code will be used for List<object> and List<string>.",1158],["It is possible to reference generic types and methods that IL2CPP did not find a compile time in the following cases:",1158],["Creating a new generic instance at runtime: Activator.CreateInstance(typeof(SomeGenericType<>).MakeGenericType(someType));",1158],["Invoking a static method on a generic instance: typeof(SomeGenericType<>).MakeGenericType(someType)).GetMethod(“AMethod”).Invoke(null, null);",1158],["Invoking a static generic method: typeof(SomeType).GetMethod(“GenericMethod”).MakeGenericMethod(someType).Invoke(null, null);",1158],["Some calls to generic virtual functions that cannot be inferred at compile time.",1158],["Calls with deeply nested generic value types, such as Struct<Struct<Struct<...<Struct<int>>>>.",1158],["To support those cases IL2CPP generates generic code that will work with any type parameter. However this code is slower because it can make no assumptions on the size of the type or if it is a reference or value type. If you need to ensure that faster generic methods are generated, do the following:",1158],["If the generic argument will always be a reference type, add the where: class constraint. Then IL2CPP will generate the fallback method using reference type sharing which causes no performance degradation.",1158],["If the generic argument will always be a value type, add the where: struct constraint. This enables some optimizations, but the code will still be slower because the value types can be different sizes.",1158],["Create a method named UsedOnlyForAOTCodeGeneration and add references to the generic types and methods you wish IL2CPP to generate. This method does not need (and probably shouldn’t) be called. The example below will ensure that a specialization for GenericType<MyStruct> will be generated.",1158],["```lang-csharp",1158],["public void UsedOnlyForAOTCodeGeneration()",1158],["// Ensure that IL2CPP will create code for MyGenericStruct",1158],["// using MyStruct as an argument.",1158],["new GenericType();",1158],["// Ensure that IL2CPP will create code for SomeType.GenericMethod",1158],["// using MyStruct as an argument.",1158],["new SomeType().GenericMethod();",1158],["public void OnMessage(T value)",1158],["Debug.LogFormat(\"Message value: {0}\", value);",1158],["// Include an exception so we can be sure to know if this",1158],["// method is ever called.",1158],["throw new InvalidOperationException(",1158],["\"This method is used for AOT code generation only. \" +",1158],["\"Do not call it at runtime.\");",1158],["Note that when the \"Faster (smaller) builds\" setting is enabled only the single fully sharable version of generic code is compiled. This reduces the number of methods generated, reducing compile time and build size, but comes at the expense of runtime performance.",1158],["Calling managed methods from native code",1158],["Managed methods that need to be marshaled to a C function pointer so that they can be called from native code have a few restrictions on AOT platforms:",1158],["The managed method must be a static method",1158],["The managed method must have the [MonoPInvokeCallback] attribute",1158],["If the managed method is generic, the [MonoPInvokeCallback(Type)] overload might need to be used to specify the generic specializations that need to be supported. If so, the type must be a generic instance with the correct number of generic arguments. It's possible to have multiple [MonoPInvokeCallback] attributes on a method as below:",1158],["```lang-csharp",1158],["// Generates reverse P/Invoke wrappers for NameOf and NameOf",1158],["// Note that the types are only used to indicate the generic arguments.",1158],["[MonoPInvokeCallback(typeof(Action))]",1158],["[MonoPInvokeCallback(typeof(Action))]",1158],["private static string NameOfT(T item)",1158],["return typeof(T).Name;",1158],["",1158],["No threads",1158],["Some platforms do not support the use of threads, so any managed code that uses the System.Threading namespace fails at runtime. Also, some parts of the .NET class libraries implicitly depend upon threads. An often-used example is the System.Timers.Timer class, which depends on support for threads.",1158],["Exception filters",1158],["IL2CPP supports exception filters, however the execution order filter statements and catch blocks is different because IL2CPP uses C++ exceptions to implement managed exceptions. This will not be noticeable unless a filter blocks writes to a field.",1158],["MarshalAs and FieldOffset attributes",1158],["IL2CPP does not support reflection of the MarshalAs and FieldOffset attributes at runtime. It does support these attributes at compile time. You should use these for proper platform invoke marshaling.",1158],["The dynamic keyword",1158],["IL2CPP does not support the C# dynamic keyword. This keyword requires JIT compilation, which is not possible with IL2CPP.",1158],["Marshal.Prelink",1158],["IL2CPP doesn't support the Marshal.Prelink or Marshal.PrelinkAll API methods.",1158],["System.Diagnostics.Process API",1158],["IL2CPP doesn't support the System.Diagnostics.Process API methods. For cases where this is required on desktop platforms, use the Mono scripting backend.",1158],["Tutorial: Scripting Root Motion for \"in-place\" humanoid animations",1159],["Sometimes your animation comes as \"in-place\", which means if you put it in a scene, it will not move the character that it's on. In other words, the animation does not contain \"root motion\". For this, we can modify root motion from script. To put everything together follow the steps below (note there are many variations of achieving the same result, this is just one recipe).",1159],["Open the inspector for the FBX file that contains the in-place animation, and go to the Animation tab",1159],["Make sure the Muscle Definition is set to the Avatar you intend to control (let's say this avatar is called Dude, and it has already been added to the Hierarchy View).",1159],["Select the animation clip from the available clips",1159],["Make sure Loop Pose is properly aligned (the light next to it is green), and that the checkbox for Loop Pose is clicked",1159],["Preview the animation in the animation viewer to make sure the beginning and the end of the animation align smoothly, and that the character is moving \"in-place\"",1159],["On the animation clip create a curve that will control the speed of the character (you can add a curve from the Animation Import inspector Curves-> +)",1159],["Name that curve something meaningful, like \"Runspeed\"",1159],["Create a new Animator Controller, (let's call it RootMotionController)",1159],["Drop the desired animation clip into it, this should create a state with the name of the animation (say Run)",1159],["Add a parameter to the Controller with the same name as the curve (in this case, \"Runspeed\")",1159],["Select the character Dude in the Hierarchy, whose inspector should already have an Animator component.",1159],["Drag RootMotionController onto the Controller property of the Animator",1159],["If you press play now, you should see the \"Dude\" running in place",1159],["Finally, to control the motion, we will need to create a script (RootMotionScript.cs), that implements the OnAnimatorMove callback:-",1159],["using UnityEngine;",1159],["using System.Collections;",1159],["[RequireComponent(typeof(Animator))]",1159],["public class RootMotionScript : MonoBehaviour {",1159],["void OnAnimatorMove()",1159],["Animator animator = GetComponent();",1159],["if (animator)",1159],["Vector3 newPosition = transform.position;",1159],["newPosition.z += animator.GetFloat(\"Runspeed\") * Time.deltaTime;",1159],["transform.position = newPosition;",1159],["You should attach RootMotionScript.cs to the \"Dude\" object. When you do this, the Animator component will detect that the script has an OnAnimatorMove function and show the Apply Root Motion property as Handled by Script",1159],["Scripting",1160],["Scripting is an essential ingredient in all applications you make in Unity. Most applications need scripts to respond to input from the player and to arrange for events in the gameplay to happen when they should. Beyond that, scripts can be used to create graphical effects, control the physical behaviour of objects or even implement a custom AI system for characters in the game.",1160],["This section explains the main concepts that apply to scripting in Unity.",1160],["Related pages",1160],["See the Unity Learn website's Scripting section for tutorials on how to use scripting in Unity.",1160],["The Knowledge Base Editor section has troubleshooting, guidance on interpreting C# Compiler Errors and tips and tricks.",1160],["The [Unity Forum] (https://forum.unity.com/forums/scripting.12/) also has common scripting questions and answers.",1160],["Setting Up Your Scripting Environment",1161],["This section provides information on a few common tasks associated with setting up your environment for scripting.",1161],["These include:",1161],["\nIntegrated development environment (IDE) support Use your choice of code editor when working in Unity.\n",1161],["\nDebugging C# code in Unity Connect external debuggers to Unity to set breakpoints, and pause to inspect your project's state.\n",1161],["\nUnit testing Run automated tests on your code to ensure it continues to work correctly.\n",1161],["\nRoslyn analyzers and source generators Use analyzers to inspect your code for style, quality, and other issues.\n",1161],["Integrated development environment (IDE) support",1162],["An integrated development environment (IDE) is a piece of computer software that provides tools and facilities to make it easier to develop other pieces of software. Unity supports the following IDEs:",1162],["Visual Studio",1162],["Visual Studio Code",1162],["JetBrains Rider",1162],["Visual Studio (default IDE on Windows and macOS)",1162],["When you install Unity on Windows and macOS, by default Unity also installs Visual Studio or Visual Studio for Mac, respectively. You can choose to exclude it when you select which components to download and install. By default, the External Script Editor (menu: Unity > Preferences > External Tools > External Script Editor) is set to Visual Studio. When you enable this option, Unity launches Visual Studio and uses it as the default editor for all script files. For more information, see Visual Studio C# Integration.",1162],["On macOS, Unity installs Visual Studio for Mac as the C# IDE. Visual Studio Tools for Unity (VSTU) provides Unity integration for Visual Studio for Mac (VS4M). For information on setting up and using Visual Studio for Mac, see the following Microsoft documentation pages:",1162],["Note**: On Windows, Unity also includes Visual Studio 2019 Community by default in the installation package.",1162],["Visual Studio Code (Windows, macOS, Linux)",1162],["Unity supports opening scripts in Visual Studio Code (VS Code). To open scripts in VS Code, go to Unity > Preferences > External Tools > External Script Editor and select Visual Studio Code. For information on using VS Code with Unity, see Visual Studio’s documentation on Unity Development with VS Code.",1162],["Prerequisites",1162],["To use Visual Studio Code for C# code editing and Unity C# debugging support, you need to install:",1162],["JetBrains Rider (Windows, macOS, Linux)",1162],["Unity supports opening scripts in JetBrains Rider. To open scripts in Rider, go to Unity > Preferences > External Tools > External Script Editor and select Rider.",1162],["Rider is based on ReSharper and includes most of its features. It supports all of C# 7.2’s features as well as C# debugging on the .NET 4.6 scripting runtime in Unity. For more information, see JetBrains’ documentation on Rider for Unity.",1162],["2019-04-18 ",1162],["Transform",1163],["The Transform class provides you with a variety of ways to work with a GameObject's position, rotation and scale via script, as well as its hierarchical relationship to parent and child GameObjects.",1163],["For a full overview of working with Transforms in the Editor, see the Transform user manual page.",1163],["For an exhaustive reference of every member of the Transform class and further technical details about it, see the Transform script reference.",1163],["Use scripts to edit multiple scenes",1164],["You can edit multiple scenes using scripts within the Editor or at runtime.",1164],["Use scripts within the Editor",1164],["When using (or running) scripts within the Editor, use:",1164],["Scene struct: Available both in the Editor and at runtime, Scene struct contains read-only properties that relate to the scene itself, such as name and asset path.",1164],["EditorSceneManager API: This class is only available only in the Editor and has several functions to implement all the Multi-Scene editing features described in the pages Setup multiple scenes and Bake data in multiple scenes.",1164],["SceneSetup utility class: A utility class that you can use to store information about a scene that is in the Hierarchy window.",1164],["Use runtime scripts",1164],["When using scripts at runtime to edit multiple scenes, use the functions in the SceneManager class such as LoadScene and UnloadScene.",1164],["Tips**:",1164],["To instantiate a prefab in a scene, use PrefabUtility.InstantiatePrefab.",1164],["To move objects to the root of a scene, use Undo.MoveGameObjectToScene.",1164],["To avoid having to setup your Hierarchy window every time you restart the Editor, or to store different setups, use EditorSceneManager.GetSceneManagerSetup, which also gets a list of SceneSetup objects that describes the current setup. You can serialize the objects into a ScriptableObject along with any other information you want to store about your scene setup. To restore your Hierarchy window, recreate the list of SceneSetups and use EditorSceneManager.RestoreSceneManagerSetup.",1164],["To get a list of your loaded scenes at runtime, get the sceneCount and iterate over the scenes with GetSceneAt.",1164],["Additional Search filters",1165],["",1165],["Prefab Filters",1165],["Prefab filters can be used with Scene and Object Search Providers.",1165],["Filter Search token Description ",1165],["",1165],["Root prefab prefab:root prefab:root Searches all GameObjects that are a Prefab root. ",1165],["Top prefab prefab:top prefab:top Searches all GameObjects that are part of a Prefab instance. ",1165],["Non asset prefab prefab:nonasset prefab:nonasset Searches all GameObjects that are part of a Prefab that is not inside a Prefab asset. ",1165],["Asset prefab prefab:asset prefab:asset Searches all GameObjects that are part of a Prefab asset. ",1165],["Any prefab prefab:any prefab:any Searches all GameObjects that are part of a Prefab. ",1165],["Model prefab prefab:model prefab:model Searches all GameObjects that are part of a model Prefab. ",1165],["Regular prefab prefab:regular prefab:regular Searches all GameObjects that are part of a regular Prefab instance or Asset. ",1165],["Variant prefab prefab:variant prefab:variant Searches all GameObjects that are part of a Prefab variant. ",1165],["Modified prefab prefab:modified prefab:modified Searches all GameObjects that are a Prefab instance with overrides. ",1165],["Altered prefab prefab:altered prefab:altered Searches all GameObjects that are a Prefab instance with overrides even on default overrides. ",1165],["File Filters",1165],["File filters can be used with Asset and Object Search Providers.",1165],["Filter Search token Description ",1165],["",1165],["Default Search <search term> Searches term attempting to match the asset name, type, or path.textureSearches all Assets that have the word texture in their name, path, or type.",1165],["Name name: name:laserSearches all Assets that contain the word laser.name=laserbeamSearches all Assets where the name is exactly laserbeam. ",1165],["Directory dir:<directory exact name> dir:ScriptsSearches all Assets contained in a directory with the exact name Scripts. ",1165],["Packages a:packages a:packages textureSearches all textures in any package. ",1165],["Project a:assets a:assets textureSearches all textures in the current project's Assets folder. ",1165],["Index file a:<index name> a:psd_textures textureAssuming there is an index file named psd_textures.index in the project, searches all textures in that index. ",1165],["Size size:<number of bytes> size:4000 textureSearches all textures over 4000 bytes (4KB). ",1165],["Extension ext:<file extension without period> ext:png textureSearches all textures with the png extension. ",1165],["Age age:<number of days since last modification> age<3 textureSearches all textures that were modified in the last 3 days. ",1165],["",1165],["Type Filters",1165],["These filters are available if the index uses the Types Indexing option (See Index Manager).",1165],["Filter Search token Description ",1165],["",1165],["Type t:<Asset Type> t:textureSearches all Assets containing texture in their type name (ex: Texture2D, Texture).t:prefabSearches all prefab assets.",1165],["Type <Asset Type> You can search Assets by type without using the t: filter above.textureSearches all Assets containing texture in their type name (ex: Texture2D, Texture) or in their name (ex: myTexture.png).prefabSearches all Prefab Assets or Assets with \"prefab\" in their name.",1165],["File t:file t:file level1Searches all file Assets containing the word level1. ",1165],["Folder t:folder t:folderSearches all folder Assets.",1165],["",1165],["Indexed Property Search",1165],["Searching properties is available if the index has been specified with the Properties Indexing option (see Index Manager). To view the list of all indexed properties check the Index Manager Keywords tab.",1165],["All property values are converted to a string or number.",1165],["The name of the property has to be complete and not partial (case does not matter though).",1165],["Unity indexes properties at the top level object of a Prefab Asset. If you want all Prefab hierarchies to be indexed, create a Prefab Index (see Index Manager).",1165],["For .unity files Unity indexes the properties of the SceneAsset and not the Scene content. If you want all Scene contents to be indexed, create a Scene Index (see Index Manager).",1165],["Filter Search token Description ",1165],["",1165],["Type t:<type> When using the indexed Property, you can use t: to search for a component type for an Asset type.t:colliderSearches all Prefabs containing a component with the word collider.t:textureSearches all Assets with a type containing the word texture (ex: Texture or Texture2D). ",1165],["Has Component t:<component type> t:colliderSearches all Prefabs containing a component with the word collider.t=BoxColliderSearches all Prefabs containing a component called BoxCollider. ",1165],["Label l:<label name> l:archiSearches all Assets with a label containing the word archi (e.g.: Architecture).l=WallSearches all Assets with a label that is exactly Wall. ",1165],["All properties of an Asset (Prefab or other types) are indexed and searchable. Here are a few examples of Property query:",1165],["Filter Search token Description ",1165],["",1165],["Number property:value bounciness>0.1Searches all assets with a property named bounciness (e.g.: a PhysicsMaterial2D) higher than 0.1.health=2Searches all Assets with a property named health (e.g.: HealthSystem Component of a Prefab) with of a value of exactly 2.t:texture filtermode!=0Searches all textures with a filtermode property different than 0 (i.e different than Point). ",1165],["Boolean property:value t:Dungeon generatePath=trueSearches all Dungeon ScriptableObjects where the property generatePath is true.isStunned=falseSearches all GameObjects containing a property isStunned that is false. ",1165],["String property:string value t:Character trait:indestruSearches all Prefab with a Character component whose trait property contains the word indestru (ex: indestructible).t:Character trait=\"tough but fair\"Searches all Prefab with a Character component whose trait property is exactly tough but fair. ",1165],["Enum property:<enum value> characterclass:rogSearches all GameObjects with with a property named characterclass whose value contains the word rog (e.g.: value is rogue).characterclass=FighterMageSearches all GameObjects with a property named characterclass with an exact value of FighterMage. ",1165],["Color property:<html color value> color:ADASearches all GameObjects with a property named color where the color value starts with ADA (like ADADAD00).color=ADADAD00Searches all GameObjects with a property named color where the color value is exactly ADADAD00.color=ADADAD\\Searches all GameObjects with a property named color where the color value is exactly ADADAD and alpha value is 1. ",1165],["Vector property.[xyzw]:value bounds.x>1Searches all GameObjects with a property named bounds where the x value is larger than 1.acceleration.z=2Searches all GameObjects with a property named acceleration where the z value is equal to 2 ",1165],["Object sprite:<object exact name> sprite:CharacterBodySearches all Assets with a sprite property (e.g.: Image Component of a Prefab) that references a GameObject named CharacterBody. ",1165],["",1165],["Dependency filters",1165],["If you are using the Dependencies Indexing option (See Index Manager) Unity indexes direct dependencies of all Assets using AssetDatabase.GetDependencies.",1165],["Filter Search token Description ",1165],["",1165],["Reference Path ref:<asset full path> ref:assets/images/particles/p_smoke.pngSearches all Assets that have direct dependencies on the exact Asset path: assets/images/particles/p_smoke.png . ",1165],["Reference Name ref:<asset name> ref:p_smoSearches all Assets that have direct dependencies on an Asset whose name contains the word p_smo. ref:p_smoke.pngSearches all Assets that have direct dependencies on an Asset named p_smoke.png. ",1165],["Search Object Picker",1166],["Adding the advanced Search Object Picker in your Preferences, you can open Unity Search and search for and select objects directly from any Object Picker window in the Unity Editor.",1166],["You can also add the SearchContextAttribute to specific object properties in your Monobehavior to build a more customized experience. See SearchContextAttribute for more information.",1166],["Add the Search Object Picker to all Object Picker Windows",1166],["Go to Edit > Preferences (macOS: Unity > Settings) in the main menu to open the Preferences window.",1166],["Select Search in the Preferences window.",1166],["In the Search preference settings, under Search Engines, choose Advanced from the Object Selector drop-down menu.",1166],["Close the Preferences window.",1166],["Execute API methods",1167],["The Static API Search Provider indexes all of Unity's parameterless public static API methods and properties, and makes them available to execute.",1167],["Default action:** Executes the API method.",1167],["Context menu actions:**",1167],["Action: Function: ",1167],["\n\n- \n\n",1167],["Exec Executes the API method. ",1167],["Static API Search Provider",1167],["Search the Unity Asset Store",1168],["The Asset Store Search Provider searches the Unity Asset Store. The Preview Inspector displays a preview of each item. Open the Asset Store to see more information about an Asset, such as its name, price, publisher, and category.",1168],["Search token:** store:",1168],["Default action:** Opens the Unity Asset Store web site to the Asset's page.",1168],["Context menu actions:**",1168],["Action: Function: ",1168],["\n\n- \n\n",1168],["Open Unity Asset Store Opens the Unity Asset Store web site to the Asset's page. ",1168],["Asset Store Search Provider",1168],["Sub-filters",1168],["Use these tokens to limit your search results.",1168],["Filter Search token Description ",1168],["",1168],["Minimum price store: min_price:number store: min_price:5 boltSearches for Assets with a minimum price of 5$ and the word bolt in their name. ",1168],["Maximum price store: max_price:number store: max_price:5 boltSearches for Assets with a maximum price of 5$ and the word bolt in their name. ",1168],["Publisher store: publisher:name store: publisher:GargoreSearches for Assets published by the company Gargore. Note that the publisher name must be exact. ",1168],["Version store: version:number store: version:2017Searches for Assets that minimally support Unity 2017. ",1168],["Free store: free:boolean store: free:true asteroidSearches for Assets that are free and that have the word asteroid in their name. ",1168],["On sale store: on_sale:boolean store: on_sale:true max_price:5Searches for Assets that are on sale and that have a max price of 5$. ",1168],["Search Project Assets",1169],["Use the Asset Search Provider to search all Assets in the current Project. You can search using keywords or GUIDs (Instance IDs).",1169],["You can also search the Asset Database or the file system from the Search window.",1169],["Default action:** Open the Asset, either in Unity or in an external editor.",1169],["Context menu actions:**",1169],["Action: Function: ",1169],["\n\n- \n\n",1169],["Select Selects the Asset in the Project window. ",1169],["Open Opens the Asset, either in Unity or in an external editor. ",1169],["Delete Deletes the Asset. ",1169],["Copy Path Copies the path of the Asset. ",1169],["Reimport Reimports the Asset. ",1169],["Reveal Selects the Asset in the operating system's file browser. ",1169],["Properties Opens the Asset's property settings. ",1169],["Asset Search Provider",1169],["",1169],["Asset Search Provider vs. Asset Database search",1169],["Search uses its own Asset indexer, which is faster and more flexible than the Asset Database or the Project Browser.",1169],["For example:",1169],["\nYou can type a file extension and it will find all Assets with that extension.\n",1169],["\nIt matches against directory name\n",1169],["\nIt does a partial search\n",1169],["",1169],["Search the file system",1169],["If you use the asterisk (*) in a query, Search performs both a normal search and a wildcard search against the file systems. This allows you to include files not indexed by the Asset database in your searches.",1169],["The calculator",1170],["The Calculator Search Provider computes expressions directly in Search. Enter any expression that is valid in a numerical text field in Unity, and Search displays the result in the results area.",1170],["Default action:** Logs the result of the expression to the console, and copies it to the clipboard.",1170],["Context menu actions:**",1170],["Action: Function: ",1170],["\n\n- \n\n",1170],["Exec Logs the result of the expression to the console, and copies it to the clipboard. ",1170],["\n Note: To query this provider you need to explicitly add = to the query.\n",1170],["",1170],["",1170],["Supported operators + - * / % ^ ( ) Example: =42/34 + (56 % 6)=23 * 9 ^ 3 ",1170],["Calculator Search Provider",1170],["Functions reference",1171],["Functions by category",1171],["Set manipulation",1171],["Expression Description",1171],["",1171],["distinct {Variadic \\ AnyExpression} Produces the unique set union of multiple expressions.",1171],["except {Iterable, Variadic \\ Iterable} Produces the set difference of two sequences.",1171],["first {Number, Variadic \\ Iterable} Returns the first result for each expression.",1171],["groupBy {Iterable, Optional \\ Selector} Group search results by a specified @selector \\ Hints: ExpandSupported",1171],["intersect {No signature} Produces the set intersection of two sequences.",1171],["last {Number, Variadic \\ Iterable} Returns the last result for each expression.",1171],["map {Iterable, AnyValue} Maps an expression result to form a new expression using variables.",1171],["select {No signature} Creates new results by selecting which value and property to take. ",1171],["sort {No signature} Sorts expression results based on a criteria.",1171],["union {Variadic \\ AnyExpression} Produces a unique set union of multiple expressions.",1171],["Set filtering",1171],["Expression Description",1171],["",1171],["eq {Iterable, Selector, Literal \\ QueryString} Keeps search results that have an equal value.",1171],["gt {Iterable, Selector, Literal \\ QueryString} Keeps search results that have a greater value.",1171],["gte {Iterable, Selector, Literal \\ QueryString} Keeps search results that have a greater or equal value.",1171],["lw {Iterable, Selector, Literal \\ QueryString} Keeps search results that have a lower value.",1171],["lwe {Iterable, Selector, Literal \\ QueryString} Keeps search results that have a lower or equal value.",1171],["neq {Iterable, Selector, Literal\\ QueryString} Keeps search results that have a different value.",1171],["where {Iterable, Text \\ Selector \\ QueryString} Excludes search results for which the expression is not valid. ",1171],["Math",1171],["Expression Description",1171],["",1171],["avg {Selector, Variadic \\ Iterable} Finds the average value for each expression.",1171],["count {Variadic \\ Iterable} Counts the number of results in an expression.",1171],["max {Selector, Variadic \\ Iterable} Finds the maximum value for each expression.",1171],["min {Selector, Variadic \\ Iterable} Finds the minimal value for each expression.",1171],["sum {Selector, Variadic \\ Iterable} Computes the sum value for each expression. ",1171],["Utility",1171],["Expression Description",1171],["",1171],["alias {Iterable, Text \\ Selector \\ Iterable} Assigns an alias to an expression. \\ Hints: AlwaysExpand",1171],["constant {Literal \\ Function} Returns the first result for each expression.",1171],["format {Text \\ Selector, Variadic \\ AnyValue} Converts arguments to a string allowing you to format the result.",1171],["print {Text \\ Selector, Variadic \\ Iterable} Prints expression results in the console.",1171],["query {No signature} Hints: ExpandSupported",1171],["random {Variadic \\ Iterable} Randomly picks a result for each expression.",1171],["set {Variadic \\ Iterable} Returns a set of elements from any expression.",1171],["text {No signature} Converts the text of any expression to a literal string.",1171],["Functions in alphabetical order",1171],["",1171],["alias",1171],["alias{set, aliasName} -> {each element in set gets assigned an aliasName}",1171],["alias{set, formatString} -> {each element in set gets assigned an alias computed from the formatString}",1171],["This function effectively assigns an alias to an expression. This is equivalent to using the “as” keyword. See also alias usage.",1171],["Example:",1171],["count{t:material as material} is equivalent to:",1171],["count{alias{t:material, material}}",1171],["Example:",1171],["Assign the alias “number” to the elements: 1, 2 and 3.",1171],["alias{[1, 2, 3], 'number'}",1171],["Example:",1171],["Assign and alias dynamically computed from a format string to 1,2 and 3:",1171],["alias{[1,2,3], 'number @value}'}",1171],["",1171],["avg",1171],["avg{selector, sets...} -> {Average of selector value in each set}",1171],["avg{set...} -> {Average of @value in each set}",1171],["Find the average value of each item in each set passed as parameters.",1171],["Example:",1171],["avg{[1,2,3,4, 5,6], [1, 1, 1], []} -> {3.5, 1, 1}",1171],["Example:",1171],["avg{@size, t:texture, t:material} -> {1100576, 3618}",1171],["",1171],["constant",1171],["constant{value} -> {constant value}",1171],["Attempts to convert the value to a constant literal value: either a number, string, or Boolean. This can use used to disambiguate parameter types in some functions.",1171],["Example:",1171],["first{constant{5}, t:material}",1171],["",1171],["count",1171],["count{sets...} -> {count of each set}",1171],["Counts the number of results in each set passed as parameters.",1171],["Example:",1171],["count{t:texture, t:material} -> {359, 194}",1171],["Example:",1171],["From the index named “assets”, group assets by type and count each of those asset groups. Take the five largest groups.",1171],["first{5, sort{count{...groupBy{a:assets, @type}}, @value, desc}}",1171],["",1171],["distinct",1171],["distinct{sets...} -> {Unified set of all unique elements in all sets}",1171],["Distinct creates a set of all elements found in all sets passed as parameters. Like union, no duplicate elements are kept.",1171],["Example:",1171],["This example shows that duplicates are removed.",1171],["distinct{[1,2,3], [3,4,5]} -> {1,2,3,4,5}",1171],["Example:",1171],["distinct{*.mat, t:shader} -> {all materials and shaders in the project}",1171],["Example:",1171],["Select the @type of each asset in the index named \"project\" and keep a single asset of each type since duplicates are computed according to the @value of an item.",1171],["distinct{select{a:project, @type}}",1171],["",1171],["eq",1171],["eq{set, value} -> {all elements equal to value}",1171],["eq{set, selector, value} -> {all selector value equal to value}",1171],["Filters a set of element by keeping those equal to a given value.",1171],["Example:",1171],["eq{[2,4,5,6,4,3], 4} -> {4,4}",1171],["this is equivalent to:",1171],["where{[2,4,5,6,4,3], “@value=4”}",1171],["Example:",1171],["Find all textures with a #width serialized property of 256.",1171],["eq{t:texture, #width, 256}",1171],["this is equivalent to",1171],["t:texture #width=256",1171],["",1171],["except",1171],["except{set, sets...} -> {New set of elements}",1171],["Except creates a set of all elements that are not in any of the sets passed as parameters.",1171],["Example:",1171],["except{[1,2,3,4,5], [2,3], [5], [6]} -> {1,4}",1171],["Example:",1171],["except{t:prefab, t:prefab ref=select{t:texture, @path}}",1171],["",1171],["first",1171],["first{sets...} -> {all first element in each sets}",1171],["first{count, sets...} -> {first count elements in each sets}",1171],["First returns a set of the first element found in each set passed as a parameter. If count is passed as parameter, will take the first count element in each set.",1171],["Example:",1171],["first{[3, 4,5], [9, 28, 3]} -> {3,9}",1171],["Example:",1171],["first{3, [9, 28, 3, 4, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7]} -> {9, 28, 3, 1, 2, 3}",1171],["Example:",1171],["Sort all .fbx files in the project by descending order of size and show the three largest.",1171],["first{3,sort{*.fbx, @size, desc}}",1171],["",1171],["format",1171],["format{expression} -> {set of items where the value is converted to a string}",1171],["format{formatString, expression} -> {set of items where the value is set by applying a format string}",1171],["Format can be used in two ways. When only a single expression argument is used it will try to convert the current @value of an item to a string representation.",1171],["If format is used with a format string, it will replace all selectors in the format string with the selected value of the item and set this formatted string in the @value of the item.",1171],["Example:",1171],["print{format{“value=@value”, [1,2,3,4]}} would print [“value=1”,”value=2”,”value=3”,”value=4”] in the Console window.",1171],["",1171],["groupBy",1171],["groupBy{set, selector} -> {multiple sets of items grouped by their selector}",1171],["Example:",1171],["To count the number of assets for each type in a project, the groupBy function coupled with the Expand Operator allows you to automatically group items according to a selector. In the example below it creates a set of items of the same types. The Expand Operator allows you to expand this set of items into multiple sets of the same type.",1171],["count{...groupBy{a:assets, @type}} -> {numberOfAssetType1, numberOfAssetType2, .. numberOfAssetTypeN}",1171],["",1171],["gt",1171],["gt{set, value} -> {all elements greater than value}",1171],["gt{set, selector, value} -> {all elements with selector value greater than value}",1171],["Filters a set of elements by keeping those greater than a given value.",1171],["Example:",1171],["gt{[2,4,5,6,4,3], 4} -> {5,6}",1171],["",1171],["gte",1171],["gte{set, value} -> {all elements greater or equal than value}",1171],["gte{set, selector, value} -> {all with a selector value greater or equal than value}",1171],["Filters a set of element by keeping those greater than or equal to a given value.",1171],["Example:",1171],["gte{[2,4,5,6,4,3], 4} -> {4,5,6,4}",1171],["",1171],["intersect",1171],["intersect{sets...} -> {elements that are in all sets}",1171],["intersect{sets…, selector} -> {elements whose selector value is contained in all sets}",1171],["Intersect creates a new set of elements whose @value is contained in all sets. If a selector is passed as parameter the selector value is used to compare elements.",1171],["Example:",1171],["intersect{[1,2,3,4,5], [3, 5], [6, 3]} -> {3}",1171],["Example:",1171],["Find all textures whose size is bigger than 4000 bytes and intersect with all textures whose path contains the word \"rock\".",1171],["intersect{t:texture size>4000, t:texture @path:rock}",1171],["",1171],["last",1171],["last{sets...} -> {all last element in each sets}",1171],["last{count, sets...} -> {last count elements in each sets}",1171],["Last returns a set of the last element found in each set passed as parameter. If count is passed as parameter, will take the last count elements in each set.",1171],["Example:",1171],["last{[3, 4,5], [9, 28, 3]} -> {5, 3}",1171],["Example:",1171],["last{3, [9, 28, 3, 4, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7]} -> {7,8,9,5,6,7}",1171],["Example:",1171],["Sort all .fbx files in the project by ascending order of size and take the last three.",1171],["last{3,sort{*.fbx, @size}}",1171],["",1171],["lw",1171],["lw{set, value} -> {all elements less than value}",1171],["lw{set, selector, value} -> {all elements with selector value less than value}",1171],["Filters a set of elements by keeping those less than a given value.",1171],["Example:",1171],["lw{[2,4,5,6,4,3], 4} -> {2,3}",1171],["",1171],["lwe",1171],["lwe{set, value} -> {all elements less or equal than value}",1171],["lwe{set, selector, value} -> {all with a selector value less or equal than value}",1171],["Filters a set of elements by keeping those less than or equal to a given value.",1171],["Example:",1171],["lwe{[2,4,5,6,4,3], 4} -> {2,4,3,4}",1171],["",1171],["map",1171],["map{set, <string containing selectors to replace>}",1171],["The map operator is a functional way of expressing a search expression. It maps an expression result to form a new expression using variables.",1171],["The following example:",1171],["map{t:texture, t:prefab ref=@id} -> {t:prefab ref=<textureId1>} {t:prefab ref=<textureId2>} ... {t:prefab ref=<textureIdN>}",1171],["will run the query t:prefab ref=@id for each of the textures returned by t:texture.",1171],["This is equivalent to running:",1171],["{t:prefab ref={t:texture}}",1171],["",1171],["max",1171],["max{sets...} -> {max value element in each set}",1171],["max{selector, sets...} -> {max selector value element in each set}",1171],["Finds the maximum @value` for each set passed as parameters. If a selector is passed as a parameter, find the element with maximum@selector` value.",1171],["Example:",1171],["max{[1,2,3,4,5,6], [2,4,5]} -> {6, 5}",1171],["Example:",1171],["Find the largest .png file and the largest .jpg file.",1171],["max{@size, *.png, *.jpg} -> {<largest .png file>, <largest .jpg file>}",1171],["",1171],["min",1171],["min{sets...} -> {min value element in each set}",1171],["min{selector, sets...} -> {min selector value element in each set}",1171],["Finds the minimum @value` for each set passed as parameters. If a selector is passed as parameter, find the element with minimum@selector` value.",1171],["Example:",1171],["min{[1,2,3,4,5,6], [2,4,5]} -> {1, 2}",1171],["Example:",1171],["Find the smallest .png file and the largest .jpg file.",1171],["min{@size, *.png, *.jpg} -> {<smallest .png file>, <smallest .jpg file>}",1171],["",1171],["neq",1171],["neq{set, value} -> {all elements not equal to value}",1171],["neq{set, selector, value} -> {all selector value not equal to value}",1171],["Filters a set of elements by keeping those not equal to a given value.",1171],["Example:",1171],["neq{[2,4,5,6,4,3], 4} -> {2,5,6,3}",1171],["",1171],["print",1171],["print(FormatString selector, set)",1171],["Print takes a format string (or a selector) and a set of items and prints the formatted results of each item in the console. This can be useful to debug the values of an item.",1171],["In a project, the following expression returns the textures and their paths in the Search window and prints them in the Console window:",1171],["print{'path=@path', t:texture}",1171],["Example:",1171],["print{@value, [1,2,3,4]} would print [1,2,3,4] in the Console window.",1171],["",1171],["query",1171],["query{value} -> {query expression}",1171],["Attempts to convert value to a query expression. This can use used to disambiguate parameters type in some specific functions.",1171],["Example:",1171],["count{t:material} is equivalent to",1171],["count{query{t:material}}",1171],["",1171],["random",1171],["random{sets...} -> {random elements in each set}",1171],["Creates a set out of random elements taken from each set of items passed as a parameter.",1171],["Example:",1171],["random{[1,3,5], [6,4,2]} -> {3, 2} returns a random results in each set.",1171],["",1171],["select",1171],["select(<set>, selectorForLabel, selectorForDesc, otherSelectors...)",1171],["Select is a function that creates a new set of search items and extracts or transforms properties from an original set of search items.",1171],["The second parameter (selectorForLabel) of the select function assigns the selected value to the label of the new item.",1171],["The third parameter (selectorForDesc) assigns the selected value to the description of the new item.",1171],["The last selector in a select function also specifies the value of the item",1171],["Example:",1171],["When searching for textures in a project, using select, generates a set of items where the label is the path and where the description becomes the size of the texture:",1171],["select{t:texture, @path, @size}",1171],["The last selector in a select statement also sets the value of the item. For the example select{t:texture, @path, @size} this means @size will also become the @value of the search item. Switch to the Table view to see how the search expression replaces the label and description sets the value:",1171],["Selectors of a select function can also be functions themselves. Selectors in these functions are evaluated according to the search item being processed.",1171],["Example:",1171],["select{t:texture, @path, count{t:prefab ref=@id}}",1171],["For each texture in the project, create a new search item (t:texture)",1171],["whose label is equal to the @path of the texture (@path)",1171],["and whose description is equal to how many prefabs refer to that texture (count{t:prefab ref=@id}). In the example, @id refers to the SearchItem.id of each texture item.",1171],["You can assign a property value to a search item field if you use the alias operator.",1171],["Example:",1171],["print{\"@pow\", select{t:script, @path as pow}}",1171],["This extracts the @path property from a search item and assigns it to the search item field named pow in the new search item created by the select function.",1171],["",1171],["set",1171],["set{sets...} -> {set of all elements in all sets}",1171],["Creates a set of all elements contained in all the sets passed as parameter. This is equivalent to using the “[set, of , element]” notation.",1171],["Example:",1171],["set{[1, 2,3], [4,5,6]} is equivalent to:",1171],["[[1,2,3], [4,5,6]] which is equivalent to:",1171],["[1,2,3,4,5,6]",1171],["",1171],["sort",1171],["sort{set, selector} -> {set of items sorted in ascending order according to selector value}",1171],["sort{set, selector, desc} -> {set of items sorted in descending order according to selector value}",1171],["Sorts a set of items according to a selector value in descending or ascending order.",1171],["Example:",1171],["Sort this set in ascending order (from smallest to largest).",1171],["Sort{[4,2,7,5,8,1,9], @value} -> {1,2,4,5,7,8,9}",1171],["Example:",1171],["Sort this set in descending order (from largest to smallest).",1171],["sort{[4,2,7,5,8,1,9], @value, desc} -> {9,8,7,5,4,2,1}",1171],["Example:",1171],["Sort all textures in my project according to their @size in descending order (from largest to smallest).",1171],["sort{t:texture, @size, desc}",1171],["",1171],["sum",1171],["sum{sets...} -> {sum of all elements in each set}",1171],["sum{selector, sets...} -> {sum of all elements in each set}",1171],["Find the sum `@value of each item in each set passed as parameters. If a selector is passed as parameter, find the sum @selector value of each element in each set.",1171],["Example:",1171],["sum{[1,2,3,4,5,6], [2,4,5]} -> {21, 11}",1171],["Example:",1171],["Find the sum of all textures @size in a project.",1171],["sum{@size, t:texture}",1171],["",1171],["text",1171],["text{expression} -> {“text of the expression”}",1171],["Creates a string out of an expression. This is equivalent to using the “” or ‘’ delimiters.",1171],["Example:",1171],["[text{hello}] is equivalent to",1171],["[“hello”] or [‘hello’]",1171],["",1171],["union",1171],["union{sets...} -> {Unified set of all unique elements in all sets}",1171],["Union creates a set of all elements found in all sets passed as a parameter. Like distinct, no duplicate of elements are kept.",1171],["Example:",1171],["This example shows that duplicates are removed.",1171],["union{[1,2,3], [3,4,5]} -> {1,2,3,4,5}",1171],["Example:",1171],["union{*.mat, t:shader} -> {all materials and shaders in the project}",1171],["",1171],["where",1171],["where{set, filterString selector} -> {filtered set of items}",1171],["Where is a general filtering function that accepts a selector or a string containing selector usage and operators (>, ==, ...) to filter elements of a set and returns the new filtered set.",1171],["Example:",1171],["Filtering out numbers according to their value:",1171],["where{[1,2,3,4,5,6,7,8,9,10], '@value>4 and @value<9'} -> {5,6,7,8}",1171],["Example:",1171],["Finding all audio clips containing the word effect:",1171],["where{t:AudioClip, @path:effect}",1171],["Search expressions",1172],["Search expressions allow you to add to the search query language to express complex queries that cross-reference multiple providers, for example, to search for all objects in a scene that use a shader that doesn’t compile.",1172],["Search expressions can be chained together to transform or perform set manipulations on Search Items.",1172],["How to use search expressions",1172],["Enter a search expression in the Search window to return a result:",1172],["Create a search expression",1172],["A search expression starts with a root expression that can contain inner expressions.",1172],["A simple query like t:shader is an expression. It returns all of the Search Items corresponding to shaders in your project.",1172],["Use the search expression language to combine multiple queries into a single expression to create more flexible searches.",1172],["Search expressions support the following:",1172],["\nquery: t:shader\n",1172],["\nquery with a nested expression: t:prefab ref={t:texture}\n",1172],["\nfunction: count{t:shader}\n",1172],["\nliteral: 3 or \"this is a string literal\"\n",1172],["\nproperty selector: @path or @mesh (any identifier beginning with @ is assumed to be a selector that extracts a value from a Search Item. Selectors can find properties of an Object or be used to compute results dynamically)\n",1172],["All search expressions return a set of Search Items (IEnumerable<SearchItem>). As a general guideline, the search expression language uses curly braces {} to denote a set of items. Even literal expressions such as 3 are evaluated internally as a set : {3}.",1172],["Search expressions can be chained together to make more complex queries:",1172],["\nt:prefab ref={t:texture}\n",1172],["\nThe t:texture part of the query finds all textures in your project\n",1172],["\nThe t:prefab ref= part of the query runs a query for each texture returned in the t:texture set to see which prefabs refer to this texture.\n",1172],["\nt:prefab ref={t:texture size>4000}: finds all prefabs in a project with texture size larger than 4000 bytes.\n",1172],["This is the equivalent to:",1172],["\nRunning t:texture size>4000to return a list of all 4K textures in the project (for example, armor.png, treasure.png).\n",1172],["\nRunning t:prefab ref=<one of the 4K textures> (for example, t:prefab ref=armor.png and then t:prefab ref=treasure.png).\n",1172],["\nAggregating all results and returning this as a single list of Search Items.\n",1172],["\nt:[shader, material, texture]: finds all objects whose types are shader, material, or texture. Using a normal query it could be expressed as:\n",1172],["\nt:shader or t:material or t:texture\n",1172],["Functions",1172],["Unity has a library of search expression functions to manipulate and transform sets of Search Items. Each of these functions can take multiple arguments and returns a set of items. Unity Search Expressions use curly braces to denote function calls.",1172],["The complete list of all functions is here.",1172],["Example: The function count counts the items of each set passed as parameters and returns a number.",1172],["\ncount{t:shader} : returns a set containing the number of shaders in the project. Example: {34}.\n",1172],["\ncount{t:shader, t:texture} : returns a set containing the number of shaders and textures in the project. Example: {34, 2048}.\n",1172],["Functions can be chained together, similar to s-expression used in the LISP programming language.",1172],["\n Note: There can only be a single root expression.\n",1172],["Example of a chain of functions being evaluated, in order of operation:",1172],["print{\"path=@path\", first{10, sort{t:texture, @size}}}: print the path of the 10 largest textures in the project",1172],["t:texture: finds all texture in the project and then selects the size property.",1172],["sort{ t:texture, @size}: sorts all these textures according to their size property.",1172],["first{10: selects the first 10 sorted textures.",1172],["print{ \"path=@path\": prints this list in the console according to a format string where Unity Search extracts the path property of each resulting item path=@path.",1172],["Functions can have multiple signatures (name of the method and the type and kind (value, reference, or output) of each of its formal parameters, similar to C#) and can support optional (parameters that don't need to be passed to the function) and variadic (parameters that can take a variable number of arguments) parameters.",1172],["Literals in search expressions",1172],["Literals are actual words or numbers that you would like to search for or number amounts you want to retrieve, as opposed to the query string. For example, t:texture searches for Assets with texture in the type name (e.g.,Texture2D), but adding quotation marks to make it a literal, “t:texture” searches for an Asset named t:texture.",1172],["Expression Description",1172],["",1172],["",1172],["Number",1172],["Number literals can used as parameters to functions (such as first).",1172],["first{10, t:shader} -> {the first 10 shaders return by the 't:shader' query}",1172],["",1172],["Set",1172],["Express a set of values using square brackets []. A set can contain any type of expression, but the search expression parser will assume the elements of a set are literals instead of a search query.",1172],["Example:",1172],["[t:shader, hello, 3] -> [\"t:shader\", \"hello\", 3]",1172],["If using curly brackets ({}), the parser would treat this as three queries:",1172],["{t:shader, hello, 3} -> {\\, \\, \\}",1172],["",1172],["String",1172],["String literals can be used as parameters for some functions (such as format). You can specify a string literal using single or double quotes:",1172],["\"hello\" or 'hello'",1172],["The format function taking a format string as a parameter:",1172],["format{t:texture, '@path (@size)'}",1172],["Property selectors and search item values",1172],["A selector is an identifier denoted using the @ prefix. Use selectors to access the property of an item in order to compute, filter, or format. Selectors can map to serialized properties of a UnityEngine.Object or to a custom function to allow access to dynamic data.",1172],["The base selectors that any Search Items supports are:",1172],["\nid: Unique ID of this item according to its Search Provider.\n",1172],["\nvalue: Internal value of an item. By default it is its ID, but functions can override the value of an item.\n",1172],["\nlabel: item label as shown in the Search window\n",1172],["\ndesc or description : item description (second line of the Search window)\n",1172],["Unity also defines generic selectors for a Search Item, for example:",1172],["\n@name: UnityEngine.Object.name\n",1172],["\n@size: File size on disk for an asset\n",1172],["\n@path: Asset path\n",1172],["\n@extension: Asset file extension\n",1172],["\n@provider: Search Provider that has yielded this item\n",1172],["To access specific properties of a Search Item in order to perform an operation, use selectors:",1172],["\ncount{t={distinct{select{a:assets, @type}}}}\n",1172],["\na:assets, @type finds all of the objects name assets and then selects the type property for those objects.\n",1172],["\ndistinct returns a list of all types that exist.\n",1172],["\nt={list of types} returns the multiple lists of each asset of each type.\n",1172],["\ncount counts how many assets of each type are in your project.\n",1172],["\navg{@size,t:shader}\n",1172],["\nt:shader, @size: finds all the shaders and then selects the size property.\n",1172],["\navg: computes the average size for all shaders in your project.\n",1172],["\nprint{@value, count{t:texture, t:material}}\n",1172],["\nThis will print the count value extracted from the results of the count function in the Console window.\n",1172],["The @# selector finds serialized properties and material properties:",1172],["\nsort{t:texture, @#height}: sorts all textures in order of their height serialized properties.\n",1172],["",1172],["Name search expressions (alias)",1172],["You can name search expressions to make them easier to display in the Search window.",1172],["For example, entering the expression sort{count{t:audio, t:texture}, @value,desc} in the Search window, it may be difficult to read which count corresponds to which type:",1172],["Using an alias: sort{count{t:audio as Audio, t:texture as Texture}, desc} yields a more readable result:",1172],["To dynamically generate alias names, use the alias function. For example:",1172],["alias{[1, 2, 3], 'Title value'}",1172],["will yield items with these labels:",1172],["{Title 1, Title 2, Title 3}",1172],["Expand operator",1172],["The expand operator ... allows a set of items to be grouped into multiple sets of items instead of just one set.",1172],["...{expandable expression} -> {sub expr 1} {sub expr 2} {sub expr N}",1172],["Example:",1172],["A small project has 3 prefabs, 4 textures and 5 shaders. The following expression provides a count for all:",1172],["count{t:[prefab, texture, shader]} -> {12}",1172],["The result of the search expression t:[prefab, texture, shader] is a unified list of 12 items of type prefabs, textures, and shaders. This could also be expressed as: t:prefab or t:texture or t:shader.",1172],["Use the expand operator to count the number of each type of asset separately:",1172],["count{...t:[prefab, texture, shader]} -> count{t:prefab, t:texture, t:shader} -> {3, 4, 5}",1172],["The groupBy function can be used with the expand operator to return sets of items grouped by a common key.",1172],["Example:",1172],["A project has three types of assets (prefabs, textures, and shaders). For a selector @type that returns the type of Search Item, the expression would expand to:",1172],["count{t:prefab or t:texture or t:shader}",1172],["You can use the groupBy function to group items by their type and then count each number of items per type:",1172],["count{...groupBy{t:prefab or t:texture or t:shader, @type}}",1172],["Search expression examples",1172],["These examples demonstrate how search expressions can be used for complex requests in a project.",1172],["\nCount prefab usage in scenes and sort by highest usage:\n",1172],["sort{select{p: t:prefab *.prefab, @path, count{t:scene ref:@path} as count}, @count, desc}",1172],["\nSort and count all asset types\n",1172],["sort{count{...groupby{a:assets, @type}}, @value, desc}",1172],["\nFind the mesh with the most vertices (assuming the @vertices selector is available in the project).\n",1172],["first{sort{t:mesh, @vertices, desc}}",1172],["\nSort all meshes by their vertex count\n",1172],["sort{select{h: t:mesh, @path, @vertices}, @vertices, desc}",1172],["\nCount the number of vertices for all meshes\n",1172],["sum{select{h:t:mesh, @vertices}}",1172],["\nFind all assets referencing a mesh\n",1172],["ref=select{p:t:mesh, @path}",1172],["\nList prefab scene references count\n",1172],["select{p: *.prefab, @path, count{p: a:sceneIndex ref=\"@path\"} as count}",1172],["Expression evaluation",1172],["Search expression evaluation is based on the C# iterator pattern and uses of the yield keyword. This ensures that the evaluation is exposed as a fully asynchronous operation and is as non-blocking as possible. It allows each search expression to start its computation before the initial sets of search items are fully computed.",1172],["By default all search expression evaluation is done in a worker thread in order to not block the Editor. For operations that need to rely on non-thread safe Unity API (like some selector accessors), we have a utility API to queue those operations on the main thread and maintain the pattern of yielding search items.",1172],["Customize the search expression language",1172],["The search expression language has been designed to be customizable. APIs to customize all parts of the framework will be available in a future release.",1172],["Search for files",1173],["The File Search Provider searches the file system to find files that match a specific pattern.",1173],["Note:** This search works without using the find: search token.",1173],["Search token:** find:",1173],["Default action:** Select the file.",1173],["Context menu actions:**",1173],["Action Function ",1173],["Select Selects the file in the Project window. ",1173],["Open: Opens the file, either in Unity or an external editor. ",1173],["Delete: Deletes the file. ",1173],["Copy Path Copies the path of the file. ",1173],["Reimport Reimports the file. ",1173],["Reveal Selects the file in the operating system’s file browser. ",1173],["Properties Opens the file's property settings. ",1173],["Your search query can contain a C# regex to perform matching or glob expressions with the following wildcards. A glob expression is converted to a normal regex using the equivalency described in the table below:",1173],["Glob wildcards Description Example Matches Does not match Equivalent regex ",1173],["* Matches any number of any characters including none Law* Law, Laws, Lawyer Groklaw, La, aw .* ",1173],[". Matches any single character including none Law. Law, Laws La, aw . ",1173],["File Search Provider",1173],["Filter searches",1174],["Filtering narrows the scope of your searches to specific providers. You can filter searches in the following ways:",1174],["\nSet up persistent search filters to control which providers Search uses for regular searches.\n",1174],["\nUse a Search Provider's search token in the search field to only display results from that provider.\n",1174],["\nLimit your search results by using sub-filters and query operators and using the keywords available for your index.\n",1174],["\nSee a list of additional search filters here.\n",1174],["",1174],["Persistent search filters",1174],["You can temporarily toggle Search Providers on and off from the Filters pane. This can help reduce the number of items that a search returns, which is convenient if you already know what type of item you are looking for. The providers that are toggled on at any given time are the active Search Providers.",1174],["Search Providers drop-down menu",1174],["When you toggle Search Providers off in the Search Providers menu, Search \"mutes\" them rather than disabling them completely. Search Providers that perform background indexing or other hidden operations continue to do so when muted.",1174],["\n Note: To permanently toggle Search Providers on and off, change them in Search preferences.\n",1174],["To set persistent search filters:",1174],["Choose Edit > Search All to launch Search, and in the Search Providers area select More Options (:)",1174],["Enable or disable any Search Providers you want to include/exclude from subsequent searches.",1174],["\n Tip: You can use ↑ (up arrow) and ↓ (down arrow) to cycle through the available filters, and Space to toggle a filter.\n",1174],["",1174],["Search tokens",1174],["Every Search Provider has a unique text string called a search token, also called a filter ID. When you prefix a search query with a provider's search token, Search limits the scope of the search to that provider.",1174],["For example, p: is the search token for the Asset Search Provider. When you enter p:Player in the search field, Search searches for Assets that match the term \"Player\" (for example, assets with \"Player\" in their names).",1174],["See Search Providers for a list of search tokens for Search Providers.",1174],["See Additional search tokens for a list of search tokens for Prefabs, Files, Types, Properties, and Dependencies searches.",1174],["Combining search tokens",1174],["You can combine search tokens to create more complex queries.",1174],["\nThe queries are written on one line with one character space between tokens.\n",1174],["\nThe character space between each new token is an \"And\" operation, so both filters must be true for the query to return a result. Add another operator (or, \\<, >) to return different results.\n",1174],["\nIf a Search Provider filter token (h:, p:) is used, it must be the first component in the query.\n",1174],["Here are a few examples:",1174],["Query Description ",1174],["",1174],["h: t:meshrenderer p(castshadows)!=\"Off\" Searches all static meshes in a Scene that cast a shadow. ",1174],["h: t:light p(color)=#FFFFFF p(intensity)>7.4 Searches all lights in a Scene with a specific color with brightness higher than 7.4. ",1174],["h: path:/Collectables t:collectable Find all objects with a component Collectable located in the path /Collectables. ",1174],["Search expressions",1174],["Search expressions allow you to add to the search query language to express complex queries that cross-reference multiple providers, for example, to search for all objects in a scene that use a shader that doesn’t compile. See Search expressions for more information.",1174],["Help Search Provider",1175],["The Help Search Provider displays a quick reference for different types of searches in the results area. Each help item provides the syntax for performing a specific type of search, or other instructions for using Search.",1175],["Default action:** Enters the search syntax from the help item into the search bar. Executes any action described in the help item (for example, executing the search or navigating the results).",1175],["Context menu actions:**",1175],["Action: Function: ",1175],["\n\n- \n\n",1175],["Help Enters the search syntax from the help item into the search bar. Executes any action described in the help item (for example, executing the search or navigating the results). ",1175],["Help Search Provider",1175],["The Index Manager",1176],["The Index Manager allows you to create, edit, and remove search indexes. Indexes update when you add or change content in your project.",1176],["",1176],["Index types",1176],["\nAsset - An index of all Assets in a Project. This index is created automatically when you create a Project and rebuilds when you add or modify new content. The Asset index includes all Assets including Prefabs and scenes, but it doesn't index the content of a scene or a nested hierarchy in a Prefab.\n",1176],["\nPackage - An index containing Assets in the Packages.\n",1176],["\nPrefab - An index containing only the GameObjects which are part of Prefabs.\n",1176],["\nScene - An index of Assets in any scene\n",1176],["\nUser - An index that is created for you and is not shared with the project.\n",1176],["By default Unity creates the Asset index. To use Prefab, Package, Scene, and User indexes, you must create them in the Index Manager.",1176],["To open the Index Manager choose Windows > Search > Index Manager.",1176],["",1176],["\n\n- \n\n",1176],["File Path The location of the .index file.",1176],["Name The name you give to the index. ",1176],["Score The Score is a number that is used with multiple indexes to increase the relevance of one index over another. The lower the number, the more weight is placed on an indexes' relevance. Unity suggests using the default setting unless you are using advanced indexing scenarios. ",1176],["Roots Choose a folder to index all of its contents. ",1176],["Packages Select Packages to index the content of all the packages in the project. ",1176],["Includes File extensions (*.jpg), specific files, or folders to index. This supersedes Excludes. ",1176],["Excludes An extension, folder, or file to ignore. Especially useful for files that are generated by other process, for temp files, or for files from external sources (Asset Store plugins). ",1176],["Options Disabled: Select to disable an index. Use as a debugging function to stop an index from being queried without deleting it. Types: Indexes the object types information. Properties: Indexes all properties of all objects (only top level objects in a Scene or Prefab). Allows you to use the Property filter to search an index. Sub objects: Indexes all Scene objects for a Unity scene and all subassets for an FBX. Dependencies: Indexes all dependencies of all Assets. Using this setting creates a much larger index. Allows you to use the Dependency filter to search an index.",1176],["Show package indexes Select to show package indexes (when available) in the Index Manager. ",1176],["",1176],["Index results",1176],["The following tabs contain information about the index:",1176],["\nAssets: Displays the files indexed.\n",1176],["\nObjects: (Prefab and Scene indexes only) Displays the object identifiers.\n",1176],["\nKeywords: Displays the available searchable Properties or filters you can use to further narrow your search results.\n",1176],["Index sizes",1176],["To determine the index options you need, refer to this table.",1176],["Project size Index required ",1176],["",1176],["Less than 1000 assets Minimal - enable a minimal set of indexing options ",1176],["Between 1000 and 2000 assets Default - index your project assets with File and Type ",1176],["Over 2000 assets Extended - index your project with File, Type, Properties, Sub objects, and Dependencies ",1176],["Note:** The more options you add to the index, the longer it will take to generate your first index.",1176],["Add an index",1176],["Open the Index Manager.",1176],["Click the plus (+) sign in the left pane of the Index Manager window and select the type of index you want to create.",1176],["Customize your index settings in the right pane and click Create.",1176],["Name your index in the Save Index Settings window and click Save. Your index builds automatically. Depending on the size of the project and your index settings, this may take some time.",1176],["Edit an index",1176],["Open the Index Manager.",1176],["Select the index from the left pane of the Index Manager window.",1176],["Make changes to your index name or settings and click Save.",1176],["Note:* If you make changes without saving your index, an asterisk () appears next to the window title. If you try to close the window without saving, Unity prompts you to save your index. When you save, Unity rebuilds your index with your changes.",1176],["Delete an index",1176],["Open the Index Manager.",1176],["Select the index from the left pane of the Index Manager window.",1176],["Click the minus (-) sign.",1176],["Click Yes to confirm that you want to delete the index.",1176],["Search the Unity main menu",1177],["Use the Menu Search Provider to quickly locate commands in the Unity Editor main menu.",1177],["Search token:** m:",1177],["Default action:** Executes the menu command.",1177],["Context menu actions:**",1177],["Action: Function: ",1177],["\n\n- \n\n",1177],["Select Executes the menu command. ",1177],["Menu Search Provider",1177],["Unity Search",1178],["Use Search to search sources inside of Unity and perform actions on the results.",1178],["For example, from the Search window you can find Assets and open them, find Unity packages and install them, or find menu commands and run them.",1178],["",1178],["The Search window",1178],["To launch Search use the Ctrl + K shortcut, click the magnifying glass icon in the top right of the Editor window, or use the menu (Edit > Search All).",1178],["Note:** You can customize the shortcut for Search in the Shortcuts Manager.",1178],["",1178],["",1178],["A Search field Enter your search query here.For details about all the ways you can search Unity with Search, see Using Search. ",1178],["B Saved Searches Access your saved searches. To show/hide the pane, click the Saved Searches icon () or select Searches from the More Options (:) menu. To save your search query, use the Save icon to the right of the Search field. ",1178],["C Search Provider Allows you to see all results from standard Search Providers (Project, Hierarchy, Settings) or from other Search Providers by using a specific search token. Select More Options (:) to access a list Search Providers. ",1178],["D Results area Displays search results as you type the search query.Items that best match the search query appear higher in the results. Search also learns over time, and prioritizes items that you select often. See Search Preferences to learn how to customize search result ordering. ",1178],["E Preview Inspector Allows you to view and change item properties, open, reimport or delete a search item, or copy a path. To show/hide the pane, click the Inspector icon () or select Inspector from the More Options (:) menu. ",1178],["F Views and Preferences Change Search views and open the Preferences window. ",1178],["Unity Search Help",1178],["You can get help with Search in the following ways:",1178],["\nWhen you first launch the Search window, the results area displays the basic keyboard shortcuts.\n",1178],["\nType ? (question mark) in the search field to display a quick reference for different types of searches. See Getting Search help for more information.\n",1178],["\nSelect the question mark icon at the top of the window to open the Search documentation.\n",1178],["Search for packages",1179],["The Package Search Provider searches for installed and available Unity packages. You can install, update, or remove any package in the search results.",1179],["Search token:** pkg:",1179],["Default action:** Install the package.",1179],["Context menu actions:**",1179],["Action: Function: ",1179],["\n\n- \n\n",1179],["Open Opens the package in the Package Manager window. ",1179],["Install: Prompts you to install the package. ",1179],["Remove: Uninstalls the package from the Project. ",1179],["Package Search Provider",1179],["Search Providers",1180],["Each type of search has its own Search Provider. A Search Provider allows you to search and filter content. Each Search Provider has a unique search token. A search token is a text string that you can use in the search field to search using only a specific Search Provider.",1180],["By default, all searches use Project, Hierarchy, and Settings Search Providers unless you exclude them.",1180],["Search provides additional opt-in Search Providers. Search ignores opt-in Search Providers unless you explicitly use them. Opt-in Search Providers differ from default Search Providers in the following ways:",1180],["You can only execute them using their search tokens.",1180],["You cannot combine an opt-in Search Provider with any other Search Provider.",1180],["\nTo perform a search using all default Search Providers, enter the search terms in the search field. Results appear as you type.\n",1180],["\nTo perform a search using an opt-in Search Provider, prefix the search terms with the Search Provider's search token.\n",1180],["Open the More(⋮) menu to view a list of Search Providers and their prefixes.",1180],["You can also create your own Search Providers.",1180],["",1180],["Exclude Search Providers",1180],["You can exclude specific Search Providers from a regular search. To exclude a provider, do one of the following:",1180],["\nMute a provider from the Filters pane. When you mute a provider, Search does not use it in searches, but its background activities (such as indexing parts of Unity) continue to run.\n",1180],["\nDisable a provider from the preferences. When you disable a provider, Search does not use it at all, and stops all of its background activities.\n",1180],["Search query operators",1181],["Most Search Providers use a QueryEngine (Scene, Asset, Objects and Resource providers) to parse and resolve their queries. They support a basic set of Query Operators that allow for more complex queries using Boolean operators and parentheses grouping. The table on this page lists the supported Query Operators.",1181],["Case sensitivity**: Most Search queries ignore case. For example, Stone or stone or sToNe will yield the same results.",1181],["Filter Search token Description ",1181],["",1181],["Basic search <any partial name> mainSearches matching the word Main ",1181],["And and Main and t:cameraSearch where name contains Main and is of type name containing camerat:texture and jpgSearches all of type texture containing jpg in their filename. Note: Since and is the default operator of the QueryEngine the last query is equivalent to:t:texture jpg ",1181],["or or Player or MonsterSearches containing the word Player or Monster. ",1181],["Group (<group content>) t:Character and (status=Poison or status=Stunned)Searches for a Character component where the value of status property is either Poison or Stunned. ",1181],["Exclusion -<Expression to exclude> p: dep:door -t:SceneSearches all Assets with a dependency on an Asset containing the word door and that are not of type Scene. p: dep:door -stoneSearches all Assets with a dependency on an Asset containing the word door and that do not contain the word stone. ",1181],["Exact Operator !<something> Most of the string matching in Search returns partial matches. Use the ! operator to return exact matches.p: stoneSearches all Assets containing the word stone (stone_hammer.png, stone_door.prefab).p: !stoneSearches all Assets with the exact name stone (e.g.: stone.png) ",1181],["Partial Value match (:) property:<partial value> ref:asterBecause : is used, searches all Assets having an Asset containing the word aster (ex: asteroid2, asteroids) as a dependency. ",1181],["Exact Value (=) property=exactValue ref=asteroidBecause = is used, searches all Assets having an Asset with the exact name asteroid as a dependency. ",1181],["> property>number t:texture size>256Searches all textures with a size bigger than 256 bytes. ",1181],["< property<number t:texture size<256Searches all textures with a size smaller than 256 bytes. ",1181],["!= property!=number t:texture size!=256Searches all textures with a size different than 256 bytes. ",1181],[">= property>=number t:texture size>=256Searches all textures with a size bigger or equal than 256 bytes. ",1181],["<= property>number t:texture size<=256Searches all textures with a size smaller or equal than 256 bytes. ",1181],["Search saved queries",1182],["The Saved Queries Search Provider searches all saved queries.",1182],["Search token:** q:",1182],["Default action:** Select the saved query.",1182],["Context menu actions:**",1182],["Action: Function: ",1182],["\n\n- \n\n",1182],["Select Selects the saved query in the Project window. ",1182],["Exec Executes the search. ",1182],["Search the current Scene",1183],["Use the Hierarchy Search Provider to find GameObjects in the current Scene.",1183],["Hierarchy queries run on all objects of the current scene. For this search, Unity uses progressive caching, not indexed data (as opposed to Asset and Objects providers).",1183],["From the More(⋮) menu, select Show more results to enable \"fuzzy\" search in the Hierarchy Search Provider. Fuzzy searches are more resource intensive than direct searches, but usually return more matches. They can be slower in larger Scenes and may cause a lag.",1183],["Default action:** Select the GameObject in the Scene.",1183],["Context menu actions:**",1183],["Action: Function: ",1183],["\n\n- \n\n",1183],["Select Selects the GameObject in the Scene and the Hierarchy window. ",1183],["Open Opens the Project Asset that contains the GameObject. ",1183],["Hide/Show Hides/Shows the GameObject in the Scene view. ",1183],["Hierarchy Search Provider",1183],["Sub-filters",1183],["Use these tokens to further limit your Hierarchy searches.",1183],["Filter Search token Description ",1183],["",1183],["Component type t: t:collid Searches all GameObjects that have a component containing the word collid (ex: Collider, Collider2d, MyCustomCollider). ",1183],["Instance id id: id :210 Searches all GameObjects whose instanceID contains the word 210 (ex: 21064). id=21064 Searches all GameObjects whose instanceID is exactly 21064. ",1183],["Path path:parent/to/child path:Wall5/Br Searches all GameObjects whose path matches the partial path Wall5/Br (e.g.: /Structures/Wall5/Brick) path=/Structures/Wall5/Brick Searches all GameObjects with a scene path that is exactly /Structures/Wall5/Brick. ",1183],["Tag tag: tag:resp Searches all GameObjects that have a tag containing the word resp (e.g.: Respawn) ",1183],["Layer layer:<layer number> layer:8 Searches all GameObjects that are on layer 8 (e.g.: 8: Terrain) ",1183],["Size size:number size>5 Searches all GameObjects with an AABB volume size larger than 5. ",1183],["Overlap overlap:number overlap>3 Searches all GameObjects that renderer bounds intersects with more than 3 other GameObjects. ",1183],["Dependencies ref:<asset name> ref:stone Searches all GameObjects and their components that have a dependency on an asset whose name contains the word stone ",1183],["Child is:child is:child Searches all GameObjects that are the child of a GameObject. ",1183],["Leaf is:leaf is:leaf Searches all GameObjects that don't have a child. ",1183],["Root is:root is:root Searches all GameObjects that don't have a parent (i.e. that root objects in the scene). ",1183],["Visible is:visible is:visible Searches all GameObjects that are visible by the camera of the Scene View. ",1183],["Hidden is:hidden is:hidden Searches all GameObjects that are hidden according to the SceneVisibilityManager. ",1183],["Static is:static is:static Searches all GameObjects that are static. ",1183],["Prefab is:prefab is:prefab Searches all GameObjects that are part of a Prefab. ",1183],["Scene Properties",1183],["You can use the special p(<partial propertyname>) syntax to filter objects according to the value of a property in order to match the partial name of the property against any of the components of an object. This is a dynamic operation that doesn’t use an index. Here are some examples of queries using p():",1183],["",1183],["\n\n- \n\n",1183],["p(drawmode)=Simple Matches the drawmode property of a Sprite renderer. ",1183],["p(orthographic size)>2 Matches a Camera with an orthographic size higher than 2. ",1183],["p(istrigger)=false Matches all GameObjects where the IsTrigger property in a Collider2d is NOT a trigger. ",1183],["p(sprite)=bee Matches all GameObjects with a Sprite property (e.g.: Sprite Renderer) that links to an Asset whose name is exactly bee. ",1183],["p(sprite):bee Matches all GameObjects with a Sprite property (e.g.: Sprite Renderer) that links to a GameObject with a name containing the word bee. ",1183],["p(spri):bee Matches all GameObjects with a property containing the word spri (such as the Sprite property of a Sprite Renderer component) that links to a GameObject Asset with a name containing the word bee. ",1183],["Unity indexes property names according to their internal name, which might be different than the display name in the Inspector.",1183],["To find the internal name of a property, check the Inspector in Debug mode.",1183],["Search Settings and Preferences",1184],["Use the Settings Search Provider to search all of the settings in the Project Settings and Preferences windows. It returns all Settings and Preferences pages that match the search query.",1184],["Search token:** set:",1184],["Default action:** Opens the page in the Project Settings or Preferences window.",1184],["Context menu actions:**",1184],["Action: Function: ",1184],["\n\n- \n\n",1184],["Open Opens the page in the Project Settings or Preferences window. ",1184],["Settings Search Provider",1184],["Search tables",1185],["You can use Search tables to view, compare, and sort Search items by properties. From the table you can also modify data and export data to a .csv file or JSON.",1185],["View Search tables",1185],["To view your search in table format, enter a search query and click the table icon in the bottom right of the Unity Search window.",1185],["By default, the table will show the Label and Description columns unless you have added new columns or you are using a select{} statement that creates new columns from selectors.",1185],["Click the column header to sort the search results in ascending or descending order by that column property.",1185],["Click the reset icon () if no columns appear, or if the columns appear from the previous search and you want to reset to the default column layout.",1185],["Add columns",1185],["To add a new column in the search table, click the plus icon (+) and choose a property or selector.",1185],["Customize columns",1185],["You can customize the name, icon, alignment and whether the column is sortable.",1185],["To edit your column, right-click the column header and select Edit \\.",1185],["Field Description ",1185],["",1185],["Format Changes the data about the results to another format. If the result has no data for the new format (for example asking for color information from position data), the cell will be blank. ",1185],["Icon Changes the icon. ",1185],["Name Changes the name of the column ",1185],["Alignment Changes the alignment of the column ",1185],["Sortable Select to make the column sortable in the table ",1185],["Path Indicates the path of the property or sub property which is useful if you need to understand where a property is located. ",1185],["Selector Indicates which property is accessed within the search query. This is useful if you wish to create queries for specific properties, for instance if you have a column for the Height property, you can check the Selector field and create a height search query for Assets using #m_Height. ",1185],["Arrange columns",1185],["Click and hold the column header and drag it to rearrange the columns.",1185],["Delete columns",1185],["Right-click the column header and select Remove \\.",1185],["Show/hide columns",1185],["Once your table is set up, you may wish to hide certain columns temporarily without deleting them.",1185],["Right-click in the column header area and select Show Columns > \\. The columns with a checkmark appear in the table.",1185],["Reset tables",1185],["Reset sets the table back to the default, with the Label and Description columns or will include columns specified in the select{} statement.",1185],["Click the reset icon () to remove all added columns or if the columns appear from the previous search and you want to reset to the default column layout.",1185],["Note:** If you want to keep your current search table column layout, save your table before resetting.",1185],["Save tables",1185],["To save your search table column layout:",1185],["\nClick the Save icon in the Saved Searches User or Project panel area, or the Save icon to the right of the Search field.\n",1185],["Unity Search includes the table layout with the saved search query. When a query is saved with a table its icon changes to the table icon.",1185],["Export table data",1185],["You can export table data in JSON or .csv format. When you save using JSON, you can open the saved table data in Unity. This is static data from the time that you saved it that does not refresh.",1185],["To export table data:",1185],["From the Save drop-down menu, choose Export Report (for JSON) or Export CSV.",1185],["Name your file, choose a location to store your file, then click Save",1185],["Modify table data",1185],["You can modify data in the table using the Experimental format.",1185],["Note:** When you change the data in the Unity Search table using the Experimental format, Search is not aware of any dependencies on the data. No changes to the custom Inspector code related to property editing are triggered. To ensure that your changes include dependencies or linked changes which are often embedded in custom code for common properties, make your changes in the Inspector instead.",1185],["To change the column to Experimental:",1185],["Right-click in the column header area and select Column Format > Experimental>.",1185],["Choose either Serialized or Material Property.",1185],["The data in the column will now be editable.",1185],["Search usage",1186],["To use Search, do the following:",1186],["Launch Search",1186],["Search",1186],["Perform actions on items in the results",1186],["",1186],["Launch Search",1186],["There are several ways to open the Search window:",1186],["\nFrom the Unity menu, choose Edit > Search All.\n",1186],["\nClick the magnifying glass icon in the top right in the Editor window.\n",1186],["Shortcuts:",1186],["Shortcut: Function: ",1186],["\n\n- \n\n",1186],["Ctrl + K Open Search ",1186],["\n Tip: You can change the keyboard shortcuts used to launch Search from the Shortcuts Manager.\n",1186],["\n Note: The last search term you used appears in the search field and the last changes you made to the filter configuration are still in effect.\n",1186],["Keep the Search window opening",1186],["To keep the window open after selecting a search item, select Keep Open from the More Options (:) menu.",1186],["",1186],["Perform searches",1186],["To perform searches, type a query into the search field.",1186],["For most search queries, using the Search All window and the default Asset index created with your project will find your content effectively.",1186],["For more refined searches, use specific Search Providers and Search Expressions.",1186],["To include packages in your search, select Show package results from the More Options (:) menu.",1186],["View search results",1186],["Use Alt + ↑ (up arrow) and ↓ (down arrow) cycle through the search history, or choose a saved search from the left pane.",1186],["",1186],["Change the search results view",1186],["Use the sizing slider to change from a list to grid view with thumbnails, or use the List view icon, the Grid view icon, or the Table view icon in the bottom right of the Search window to change the search view.",1186],["",1186],["Add favorite search result items",1186],["Click the star next to a search result item to tag that item to appear at the top of the search list the next time you perform the same search to find it more easily.",1186],["Search status",1186],["To see the search time and the number of results at the bottom of the search window, select Show Status from the More Options (:) menu.",1186],["",1186],["Save searches",1186],["Saving searches allows you to keep useful searches to reuse as needed. Save the search to your personal Unity for your own use (User), or to project to save it as an Asset to make the search available to anyone working on the project.",1186],["To save a search to your personal version of Unity:",1186],["Create your search.",1186],["Click the drop-down menu next to the Save icon at the top-right of the Search window and choose Save User.",1186],["Your search is added to the Saved Searches panel in the Search window.",1186],["To save again after making changes, highlight the search in the Saved Searches window and from the Save drop-down menu at the top-right of the Search window, choose Save \\",1186],["You may also click the Save icon next to User in the Saved Searches panel.",1186],["To save a search to the project:",1186],["Create your search.",1186],["Click the drop-down menu next to the Save icon at the top-right of the Search window and choose Save Project.",1186],["Enter a file name in the Save search query window, and chose Save.",1186],["Your search is added to the Saved Searches panel in the Search window.",1186],["To save again after making changes, highlight the search in the Saved Searches window and from the Save drop-down menu at the top-right of the Search window, choose Save \\",1186],["You may also click the Save icon next to Project in the Saved Searches panel.",1186],["Find saved searches",1186],["To find a saved search:",1186],["Click the magnifying glass icon in the Saved Searches panel.",1186],["Enter your saved search name, or a part of the name. If found, it will appear in the panel.",1186],["",1186],["Actions",1186],["After you search, you can perform actions on the items Search returns in the Preview Inspector pane or through More Options (⋮) . The actions you can perform depend on the type of item.",1186],["For example, if Search returns a package, you can install/uninstall it. If Search returns an Asset, you can select, open, or highlight it in the Hierarchy window.",1186],["\nEvery type of item has a default action.\n",1186],["\nSome items support additional actions via a context menu.\n",1186],["\nSome items also support drag and drop actions.\n",1186],["To find out which actions you can perform on different types of items, see the Search Provider pages for individual search filters.",1186],["",1186],["Default actions",1186],["Every type of item has a default action.",1186],["To perform the default action for an item do one of the following:",1186],["\nDouble-click the item.\n",1186],["\nSelect the item and use Enter.\n",1186],["Note:** You can edit the default actions in the Search section of the Preferences page.",1186],["",1186],["Additional actions",1186],["Some items support additional actions that you access from the Preview Inspector menu.",1186],["To access the additional actions context menu for an item, do one of the following:",1186],["\nRight-click the item.\n",1186],["\nIn the item entry, select More Options (⋮).\n",1186],["You can also use the following shortcuts to perform additional actions on a selected item without opening the contextual menu:",1186],["Shortcut: Function: ",1186],["\n\n- \n\n",1186],["Alt + Enter Second action ",1186],["Alt + Ctrl + Enter Third action ",1186],["Alt + Ctrl + Shift + Enter Fourth action ",1186],["",1186],["Drag and drop actions",1186],["Some Search Providers (for example, the Asset and Scene providers) support drag and drop actions. You can drag items from the results area to any part of Unity that supports them, for example, the Hierarchy window, the Scene view, or the Inspector.",1186],["Search in the Editor",1187],["There are two types of search functionality available:",1187],["\nUnity Search (formerly QuickSearch)- more advanced search features including performing actions on the results. To open choose Edit > Search All, or in Preferences set the Search Engines to Default.\n",1187],["\nLegacy Search - the original search functionality for Unity, described below.\n",1187],["Legacy search functionality allows you to search the Scene view and Hierarchy window for GameObjects, and the Project window for assets.",1187],["Each search bar has the same basic workflow. To enter a search term, select the textbox and type a word or phrase. While you type, Unity automatically searches for those terms and provides the results.",1187],["Some search bars allow you to search by different criteria, such as name, type, or label. To select the criteria you want to search, select the magnifying glass icon on the bar to open the Search drop-down menu, and choose which criteria to use.",1187],["To clear your search and return your GameObject or Asset list view to normal, empty the search bar or select the small x icon in the search bar.",1187],["Search for GameObjects in the Scene view and Hierarchy window",1187],["Both the Scene view and the Hierarchy window have a search bar that allows you to search for GameObjects by name or type. The Scene view and Hierarchy window represent the same information, and when you use one search bar, Unity automatically populates the other search bar with the same text.",1187],["A search term acts as a filter for the GameObjects in the Scene view and Hierarchy Window.",1187],["In the Scene view, GameObjects that match the search term appear in color. All other GameObjects appear in gray.",1187],["In the Hierarchy window, GameObjects that match the search term appear in alphabetical order. All the other GameObjects disappear from view.",1187],["Search for assets in the Project view",1187],["The Project window has a search bar that allows you to search for assets by name, type, or label. Select the magnifying glass in the search box to define which criteria to search by.",1187],["A search term acts as a filter for the assets in the Project window. Assets that match the search term appear in alphabetical order. Assets that do not match the search term do not appear in the results.",1187],["Asset labels",1187],["A label is a short piece of text that you can use to group particular assets. To view the menu of existing labels, navigate to the Project window header and select the Search by Label button (the label icon). Select a label from the menu to search the project for any assets that have that label assigned to them.",1187],["To add a label to an asset, follow these steps:",1187],["Open the asset in the Inspector and find the preview panel at the bottom. This window might be minimized; if this is the case, click and drag the title bar upwards to expand it.",1187],["To open the label menu, click the label icon shown on the bottom right of this panel.",1187],["To add an existing label to the asset, select a label from this menu. Labels currently applied to the asset have a check mark next to them.",1187],["To add a new label, you first need to create one. Type your new label name into the text box shown at the top of the menu and press either Space or Enter. This creates a label which you can then add to any asset, and use to search in the Project window. Assets can have as many labels as desired and belong to several different label groups at once.",1187],["To remove a label from an asset, open the label menu and select it to remove the tick icon.",1187],["Setting up your project for Unity services",1188],["To start using Unity services, you must first link your Unity project to a Project ID. You can create a new Project ID within the Unity Editor, or in the Unity developer dashboard.",1188],["To link your project from the Unity Editor:",1188],["Open the Services window (Window > General > Services).",1188],["Click General settings to open the Services section of the Project settings menu.",1188],["Select your Organization from the dropdown. You must be signed in to Unity Hub in order to view a list of associated Organizations. For more information, see documentation on Organizations.",1188],["Click Use an existing Unity project ID to link a project to an ID you previously created on the developer dashboard, or *Create project ID *to link your project to a new ID.",1188],["Note**: Your project is now available to manage in the developer dashboard. For more information, see documentation on using the developer dashboard.",1188],["In the Editor, new settings will appear, allowing you to unlink the specified Project ID, and define a COPPA compliance setting.",1188],["Your project is now configured to integrate Unity services. See the following pages for more information on integrating specific services:",1188],["Set up multiple scenes",1189],["You can add multiple scenes, edit how you view them, and change the scene settings.",1189],["To create a new scene, see Creating, loading, and saving Scenes.",1189],["Add scenes",1189],["To add a new scene to your project, do one of the following:",1189],["Right click to open the menu of a scene asset in the Project window and select Open Scene Additive.",1189],["Drag one or more scenes from the Project window into the Hierarchy window.",1189],["View scenes",1189],["The Hierarchy window displays all the scenes that are part of your project:",1189],["A: Scenes with unsaved changes have an asterisk by the scene name.",1189],["B: The scene More menu allows you to perform actions on the scene.",1189],["C: The scene divider (an inverted triangle) lets you collapse a scene and hide its contents from the Hierarchy to better manage multiple scenes.",1189],["Tip**: To add a scene to the Hierarchy window without loading it, press Alt (macOS: press Option) and drag the scene into the Hierarchy window. This lets you load the scene when it's convenient for you.",1189],["Loaded scene More menu (⋮)",1189],["You can interact with and edit a loaded scene in several ways.",1189],["Setting Description ",1189],[":--------------- :-------------------------- ",1189],["Set Active Scene Sets the scene as the target for new GameObjects created through scripts. For more information, see SceneManager.SetActiveScene. ",1189],["Save Scene Saves the scene that you selected. ",1189],["Save Scene As Opens your file browser so you can choose where and how to save the scene. ",1189],["Save All Saves all the scenes you have open in the Hierarchy window. ",1189],["Unload Scene Hides the contents of the scene from the Scene view and the Hierarchy window. If you have unsaved changes, save them before you unload the scene to not lose any changes. ",1189],["Remove Scene Removes the scene from the Hierarchy window. ",1189],["Discard changes Undoes any changes that you haven’t saved. ",1189],["Select Scene Asset Highlights the scene asset in the Project window. ",1189],["Add New Scene Adds a new untitled scene below the scene you have selected. ",1189],["GameObject Opens a dropdown menu of GameObjects that you can add to the scene you have selected. ",1189],["Unloaded scene More menu (⋮)",1189],["You can interact with and edit an unloaded scene in fewer ways than you can a loaded scene.",1189],["Setting Description ",1189],[":--------------- :-------------------------- ",1189],["Load Scene Displays the contents of the scene in the Hierarchy window and the Scene view, and allows you to edit them. ",1189],["Remove Scene Removes the scene from the Hierarchy window. ",1189],["Select Scene Asset Highlights the scene asset in the Project window. ",1189],["Add New Scene Adds a new untitled scene below the scene you have selected. ",1189],["Multiple scenes in Play mode",1189],["When you are in Play mode and have multiple scenes in the Hierarchy window, the Editor displays an additional scene called DontDestroyOnLoad. You can't access the DontDestroyOnLoad scene and it's also not available at runtime.",1189],["Scene-specific settings",1189],["The following settings are specific to each scene:",1189],["RenderSettings and LightmapSettings (both found in the Lighting window).",1189],["Scene settings in the Occlusion Culling window.",1189],["Each scene manages its own settings, so only settings associated with that scene save to the scene file.",1189],["To change the settings of a specific scene, either open that specific scene and change the settings, or set the scene as the active scene then change the settings. Otherwise, if you have multiple scenes open, Unity uses the rendering settings from the active scene.",1189],["When you switch to a new active scene in the Editor or at runtime, Unity replaces all previous settings with the settings from the new active scene.",1189],["Additional resources",1189],["Autodesk Interactive shader",1190],["The Autodesk Interactive shader replicates the Interactive PBS shader available in Autodesk® 3DsMax and Autodesk® Maya, for you to use in Unity.",1190],["When Unity imports an FBX exported from one of these softwares, it checks whether the FBX includes materials with Interactive PBS shaders. If it does, Unity imports these materials as Autodesk Interactive materials. The Autodesk Interactive material properties are identical to their original Interactive PBS materials. They also look and respond to light in a similar way.",1190],["There are slight differences between what you see in Autodesk® Maya or Autodesk® 3DsMax and what you see in Unity:",1190],["Creating an Autodesk Interactive material",1190],["When Unity imports an FBX file with a compatible Autodesk shader, it automatically creates an Autodesk Interactive material. If you want to manually create an Autodesk Interactive material:",1190],["Create a new material from the menu: Assets > Create > Material.",1190],["In the Inspector for the Material, click the Shader drop-down then click Autodesk Interactive.",1190],["Properties",1190],["The properties of the Autodesk Interactive shader work in the same way as the Material Properties in the Standard Shader, with the exception of Roughness.",1190],["For more information on all other properties, see Material Parameters.",1190],["Property Description ",1190],["",1190],["Rendering Mode Controls how Unity displays this material. Choose from Opaque, Cutout, Fade, or Transparent. This property functions in the same way as the standard shader. For more information, see Rendering mode. ",1190],["Main Maps Albedo Defines the color of the material. You can assign a texture to control this property; to do this, use the texture picker button to the left of the property name. For more information, see Albedo Color and Transparency. ",1190],[" **Metallic** Determines how metal-like the surface is. <br /><br />You can assign a texture to control this property; to do this, use the texture picker button to the left of the property name. <br /><br />For more information, see [Metallic mode: Metallic Parameter](StandardShaderMaterialParameterMetallic). \n",1190],[" **Roughness** Controls how rough or smooth the surface of this material appears.<br /><br /> You can assign a texture to control this property; to do this, use the texture picker button to the left of the property name. \n",1190],[" **Normal Map** Defines the normal map for this material, in tangent space. <br /><br /> To assign a normal map to this material, use the texture picker button to the left of the property name.<br /><br /> For more information about normal maps, see [Normal Map](StandardShaderMaterialParameterNormalMap). \n",1190],[" **Height Map** Defines the height map this material uses.<br /><br /> To assign a height map to this material, use the texture picker button to the left of the property name.<br /><br />For more information about height maps, see [Height Map](StandardShaderMaterialParameterHeightMap). \n",1190],[" **Occlusion** Defines the occlusion map this material uses.<br /><br />To assign an occlusion map to this material, use the texture picker button to the left of the property name. <br /><br />For more information about occlusion maps, see [Occlusion Map](StandardShaderMaterialParameterOcclusionMap). \n",1190],[" **Detail Mask** Defines the detail mask this material uses.<br /><br /> To assign a detail mask to this material, use the texture picker button to the left of the property name.<br /><br /> For more information about detail masks, see [Secondary Maps](StandardShaderMaterialParameterDetail). \n",1190],[" **Emission** Controls the color and intensity of light that the surface of a Material emits.<br /><br />For more information, see Standard shader [Emission](StandardShaderMaterialParameterEmission). \n",1190],[" **Tiling** Controls the **X** and **Y** UV tiling for all the textures on this material. \n",1190],[" **Offset** Controls the **X** and **Y** UV offset for all the textures on this material.<br /><br />Unity uses the **X** and **Y** values to offset these textures across the material’s surface, in texture space. \n",1190],["Secondary Maps Secondary Maps (or Detail maps) allow you to overlay a second set of textures on top of the main textures listed above.This second layer of maps allows you to repeat textures over a material on a smaller scale to give the impression of sharp detail when viewed up-close.For more information, see Secondary Maps. ",1190],[" **Detail Albedo x2** Use the texture picker button to apply a second albedo colour map to this material. \n",1190],[" **Normal map** Use the texture picker button to apply a second normal map to this material.<br /><br /> You can control the intensity of this normal map by entering a value greater than 0 in the field next to this property. \n",1190],[" **Tiling** The **X** and **Y** UV tiling for all the textures on this material \n",1190],[" **Offset** The **X** and **Y** UV offset for the secondary textures on this material. \n",1190],[" **UV Set** If this mesh contains more than one set of UV coordinates, you can use this to assign the secondary textures to a different UV set from the primary textures. \n",1190],["Forward Rendering Options Specular Highlights Enable this checkbox to give this material Specular highlights. ",1190],[" **Reflections** Enable this checkbox to give this material a reflective surface. \n",1190],["Advanced Options Enable GPU Instancing Enable this checkbox to tell Unity to render Meshes with the same geometry and material in one batch when possible. This makes rendering faster. Unity cannot render Meshes in one batch if they have different materials, or if the hardware does not support GPU instancing. For example, you cannot static-batch GameObjects that have an animation based on the object pivot, but the GPU can instance them.For more information, see GPU Instancing. ",1190],[" **Double Sided Global Illumination** Enable this checkbox to tell the lightmapper to take both sides of the geometry into account when it calculates Global Illumination.<br /><br />When this is enabled, Unity does not render backfaces or add them to lightmaps, but does treat them as valid when other GameObjects detect them.<br /><br />When using the [Progressive Lightmapper](progressive-lightmapper), the GameObject’s backfaces bounce light using the same emission and albedo as its frontfaces. \n",1190],["Branching in shaders",1191],["Branching is one way of introducing conditional behavior into shader code.",1191],["This page contains information on the following techniques:",1191],["For a general overview of conditionals in shader code and when to use which technique, see Conditionals in shader code.",1191],["",1191],["Static branching",1191],["When a shader program includes conditionals that are evaluated at compile time, it uses static branching. The compiler excludes the code from the unused branch, so it does not appear in the compiled shader program.",1191],["Internally, Unity uses static branching when it creates shader variants; however, static branching on its own does not have any of the performance disadvantages of shader variants.",1191],["Advantages and disadvantages of static branching",1191],["The main advantage of static branching is that it has no negative impact on runtime performance. The main disadvantage of static branching is that you can only use it at compile time.",1191],["Static branching means that the compiler excludes unneeded code from the shader program. It results in small, specialized shader programs that contain only the necessary code. There is no runtime performance cost to static branching; in fact, the smaller programs are likely to result in quicker load times and lower runtime memory usage.",1191],["To use static branching, the conditions must be constant at compile time. This means that you can't use it to execute code for different conditions at runtime.",1191],["How to use static branching",1191],["You can use static branching in your shaders in the following ways:",1191],["In hand-coded shaders:",1191],["Use #if, #elif, #else, and #endif preprocessor directives, or #ifdef and #ifndef preprocessor directives to create static branches.",1191],["Use an if statement that evaluates a compile-time constant value. Although if statements can also be used for dynamic branches, the compiler detects the compile-time constant value and creates a static branch instead.",1191],["Unity provides built-in macros for some compile-time constants that you can use with static branches.",1191],["Note:** Static branching is available only in hand-coded shaders. You cannot create static branches in Shader Graph.",1191],["",1191],["Dynamic branching",1191],["When a shader program includes conditionals that are evaluated at runtime, it uses dynamic branching.",1191],["There are two types of dynamic branching: dynamic branching based on uniform variables, and dynamic branching based on any other runtime value. Uniform-based branching is usually more efficient, because the uniform value is constant for the whole draw call.",1191],["You can use shader keywords for dynamic branching. This allows you to use C# scripts and the Material Inspector to configure runtime branching behavior for your shaders. This results is uniform-based branching; when you do this, Unity compiles the shader keywords as uniforms.",1191],["Advantages and disadvantages of dynamic branching",1191],["The main advantage of dynamic branching is that it allows you to use conditionals at runtime without increasing the number of shader variants in your project. The main disadvantage of dynamic branching is that it impacts GPU performance.",1191],["The GPU performance impact varies by hardware, and by shader code. The reasons are:",1191],["Branching based on non-uniform variables means that the GPU must either perform different operations at the same time (and therefore break parallelism), or \"flatten the branch\" and maintain parallelism by performing the operations for both branches and then discarding one result. Branching based on uniform variables means that the GPU must flatten the branch. Both of these approaches result in reduced GPU performance.",1191],["For any type of dynamic branching, the GPU must allocate register space for the worst case. If one branch is much more costly than the other, this means that the GPU wastes register space. This can lead to fewer invocations of the shader program in parallel, which reduces performance.",1191],["In general, if your code branches on uniform values and both branches have roughly similar workloads, then the impact on GPU performance is likely to be small. However, you should always profile your application and consider the advantages and disadvantages case-by-case.",1191],["Note:** Dynamic branching can also lead to large shader programs, because the code for all conditions is compiled into the same shader program. However, the effect of these larger files on load times and memory usage is usually less significant than the impact of shader variants.",1191],["For information about other ways of using conditionals in shaders, and how to decide which technique is right for your use case, see Conditionals in shaders.",1191],["How to use dynamic branching",1191],["You can use dynamic branching in your shaders in the following ways:",1191],["In hand-coded shaders:",1191],["Optional**: Set up shader keywords for use with with dynamic branching. You can use dynamic branching without shader keywords, but this provides simple set up and per-material configuration.",1191],["Use an if statement that evaluates the shader keywords (if used) or any other runtime state. You can use attributes to force the GPU to execute both branches, or to execute only one branch.",1191],["In Shader Graph, use a Branch Node. This always executes both branches.",1191],["Built-in shaders",1192],["Unity comes with a number of built-in shaders that you can use in your projects.",1192],["Render pipeline compatibility",1192],["Different render pipelines are compatible with different built-in shaders.",1192],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1192],["Standard Shader Yes NoCan convert Standard Shader to equivalent on import NoCan convert Standard Shader to equivalent on import No ",1192],["Standard Particle Shaders Yes No No No ",1192],["Legacy shaders Yes YesSimple unlit Legacy shaders will likely render fine, but they might not be SRP Batcher compatible. YesSimple unlit Legacy shaders will likely render fine, but they might not be SRP Batcher compatible. They also do not support any HDRP features. For an unlit shader that supports HDRP features, use the HDRP/Unlit shader. YesSimple unlit Legacy shaders will likely render fine, but they might not be SRP Batcher compatible. ",1192],["URP prebuilt shaders No Yes No No ",1192],["HDRP prebuilt shaders No No Yes No ",1192],["Shader compilation",1193],["Overview",1193],["Every time you build your project, the Unity Editor compiles all the shaders that your build requires: every required shader variant, for every required graphics API.",1193],["When you're working in the Unity Editor, the Editor does not compile everything upfront. This is because compiling every variant for every graphics API can take a very long time.",1193],["Instead, Unity Editor does this:",1193],["When it imports a shader asset, it performs some minimal processing (such as Surface Shader generation).",1193],["When it needs to show a shader variant, it checks the Library/ShaderCache folder.",1193],["If it finds a previously compiled shader variant that uses identicial source code, it uses that.",1193],["If it does not find a match, it compiles the required shader variant and saves the result to the cache.",1193],["Note:** If you enable Asynchronous shader compilation, it does this in the background and shows a placeholder shader in the meantime.",1193],["Shader compilation is carried out using a process called UnityShaderCompiler. Multiple UnityShaderCompiler processes can be started (generally one per CPU core in your machine), so that at player build time shader compilation can be done in parallel. While the Editor is not compiling shaders, the compiler processes do nothing and do not consume computer resources.",1193],["The shader cache folder can become quite large, if you have a lot of shaders that are changed often. It is safe to delete this folder; it just causes Unity to recompile the shader variants.",1193],["At player build time, all the “not yet compiled” shader variants are compiled, so that they are in the game data even if the editor did not happen to use them.",1193],["Different shader compilers",1193],["Different platforms use different shader compilers for shader program compilation as follows:",1193],["Platforms that use DirectX use Microsoft's FXC HLSL compiler.",1193],["Platforms that use OpenGL (Core & ES) use Microsoft's FXC HLSL compiler, followed by bytecode translation into GLSL using HLSLcc.",1193],["Platforms that use Metal use Microsoft's FXC HLSL compiler, followed by bytecode translation into Metal, using HLSLcc.",1193],["Platforms that use Vulkan use Microsoft's FXC HLSL compiler, followed by bytecode translation into SPIR-V, using HLSLcc.",1193],["Other platforms, such as console platforms, use their respective compilers.",1193],["Surface Shaders use HLSL and MojoShader for code generation analysis step.",1193],["You can configure various shader compiler settings using pragma directives.",1193],["",1193],["",1193],["The Caching Shader Preprocessor",1193],["Shader compilation involves several steps. One of the first steps is preprocessing. During this step, a program called a preprocessor prepares the shader source code for the compiler.",1193],["In previous versions of Unity, the Editor used the preprocessor provided by the shader compiler for the current platform. Now, Unity uses its own preprocessor, also called the Caching Shader Preprocessor.",1193],["The Caching Shader Preprocessor is optimized for faster shader import and compilation. It works by caching intermediate preprocessing data, so the Editor only needs to parse include files when their contents change, which makes compiling multiple variants of the same shader more efficient.",1193],["For detailed information on the differences between the Caching Shader Preprocessor and the previous behavior, see the Unity forum: New shader preprocessor.",1193],["AssetBundles and shaders",1193],["If you use AssetBundles, Unity might compile duplicate shaders if you reference one shader in two or more objects. For example:",1193],["\nA material in an AssetBundle and a material in a built scene reference the same shader.\n",1193],["\nMultiple AssetBundles contain materials that reference the same shader outside an AssetBundle.\n",1193],["This can increase the memory and storage space shaders use, and break draw call batching.",1193],["To avoid this, you can use the following approaches:",1193],["\nLoad an AssetBundle that contains all your shaders first, then load and instantiate AssetBundle assets that reference the shaders. See AssetBundle Dependencies for more information.\n",1193],["\nStructure your AssetBundles to minimise duplication. See Asset Duplication for more information.\n",1193],["You can add materials and shader variant collections to an AssetBundle to specify which shader variants to include.",1193],["If you create a single AssetBundle, some shaders might stay in memory even if they're no longer needed, because you cannot partially unload an AssetBundle. You can avoid this by creating a separate AssetBundle for each group of shaders you use together, for example a 'forest' AssetBundle and a 'desert' AssetBundle. See Managing loaded AssetBundles, or Memory management in the Addressables system if you use Addressables.",1193],["You can use the Asset Bundle Browser to check which assets in AssetBundles depend on other assets, and find out if any assets are duplicated.",1193],["Build time stripping",1193],["While building the game, Unity can detect that some of the internal shader variants are not used by the game, and exclude (\"strip\") them from build data. For more information, see Shader variants.",1193],["Conditionals in shaders",1194],["Sometimes, you want the same shader to do different things under different circumstances. For example, you might want to configure different settings for different materials, define functionality for different hardware, or dynamically change the behavior of shaders at runtime. You might also want to avoid executing computationally expensive code when it's not needed, such as texture reads, vertex inputs, interpolators, or loops.",1194],["You can use conditionals to define behavior that the GPU only executes under certain conditions.",1194],["Different types of conditionals",1194],["To use conditionals in your shader, you can use the following approaches:",1194],["Static branching: the shader compiler evaluates conditional code at compile time.",1194],["Dynamic branching: the GPU evaluates conditional code at runtime.",1194],["Shader variants: Unity uses static branching to compile the shader source code into multiple shader programs. Unity then uses the shader program that matches the conditions at runtime.",1194],["When to use which type of conditional",1194],["There is no \"one size fits all\" approach to conditionals in shaders, and you should consider the advantages and disadvantages of each approach for a given shader, in a given project.",1194],["Which conditional to use depends on when you need the shader to switch to a different code branch:",1194],["\nOnly while you're editing.\n",1194],["\nDuring runtime.\n",1194],["",1194],["Switch code branch while you're editing",1194],["If you don't need a shader to switch to a different code branch at runtime, you can use conditionals that Unity only evaluates while you're editing.",1194],["For example you can set up a property in a Material's Inspector window to make a shader do the following:",1194],["\nAdd specular reflections to some instances of a material but not others.\n",1194],["\nAdd a different look to certain objects, such as objects that appear in underwater scenes.\n",1194],["If you use this approach, shader code is simpler to write and maintain, and less likely to affect build time, file size and performance.",1194],["To do this, use one of the following:",1194],["\nShader variants: Use shader_feature to declare keywords and evaluate them in if statements.\n",1194],["\nStatic branching: Use preprocesser constants and macros.\n",1194],["If you use the shader_feature keyword definition, Unity keeps shader variants used by Materials in your build, and removes ('strips') other shader variants. This keeps build times low and file sizes small.",1194],["Avoid using a C# script to enable or disable shader_feature keywords at runtime, because if a Material uses a shader variant that's missing, Unity chooses a different available variant instead. If you do need to enable or disable keywords at runtime, use one of the following approaches to make sure your build includes all the variants you need:",1194],["\nInclude a shader variant collection with the shader variants you need in the list of preloaded shaders.\n",1194],["\nInclude a Material in your build for every combination of shader_feature keywords you want to use.\n",1194],["",1194],["Switch code branch at runtime",1194],["If you need to use C# scripting to make the shader switch to a different code branch at runtime, you can use conditionals that Unity evaluates both while you're editing and at runtime.",1194],["For example you can use a C# script to make a shader do the following:",1194],["\nChange a Material dynamically so it has snow on it at certain times.\n",1194],["\nChange a Material when a user changes quality settings, for example to give users dynamic control over whether fog appears.\n",1194],["To do this, use one of the following:",1194],["\nShader variants: Use multi_compile to declare keywords and evaluate them in if statements.\n",1194],["\nDynamic branching.\n",1194],["If you use the multi_compile keyword definition, Unity builds a shader variant for every possible combination of shader code branches, including combinations that aren't used by Materials in your build. This means you can enable and disable keywords at runtime, but it might also greatly increase build time, file size, load times and memory usage. See shader variants.",1194],["Dynamic branching doesn't create shader variants, but may mean your shaders run more slowly on the GPU, especially if any of the following are true:",1194],["\nYour shaders run on a less capable GPU.\n",1194],["\nYour conditional code has 'asymmetric branches', where one branch is longer or more complex code than the other.\n",1194],["You can check how many shader variants you have to see whether you can use dynamic branching without affecting GPU performance too much. See shader branching for more on the advantages and disadvantages of dynamic branching.",1194],["Error and loading shaders",1195],["Sometimes, Unity can’t render objects with regular shaders. When this happens, Unity renders the objects with special shaders:",1195],["The special shader that Unity uses depends on the reason that Unity can’t use the original shader.",1195],["",1195],["The default error shader",1195],["Unity renders an object with the default error shader when there’s a problem with that object's material or shader; for example, if no material is assigned, if the shader doesn’t compile, or if the shader isn’t supported.",1195],["Unity uses the default error shader in the Unity Editor, and in builds.",1195],["The default error shader is magenta (bright pink).",1195],["When you use the BatchRendererGroup API, Unity doesn’t display the default error shader. Use BatchRendererGroup.SetErrorMaterial to set a material to use instead.",1195],["",1195],["The loading shader",1195],["Unity renders an object with the loading shader to indicate that Unity is compiling the shader variant needed to display that object.",1195],["Unity shows the loading shader in the Unity Editor when asynchronous shader compilation is enabled, or in a development build when Shader Live Link support is enabled.",1195],["The loading shader is cyan (bright blue).",1195],["When you use the BatchRendererGroup API, Unity doesn’t display the loading shader. Use BatchRendererGroup.SetLoadingMaterial to set a material to use instead.",1195],["",1195],["The Virtual Texturing error material",1195],["If your project uses Streaming Virtual Texturing (SVT), Unity uses a special material to indicate problems in your SVT setup. For more information, see Virtual Texturing error material.",1195],["Using Shader Graph",1196],["Shader Graph is a tool that enables you to build shaders visually. Instead of writing code, you create and connect nodes in a graph framework. Shader Graph gives instant feedback that reflects your changes, and it’s simple enough for users who are new to shader creation.",1196],["![Shaders created using Shader Graph.",1196],["](../uploads/Main/shaders-example.png)",1196],["Render pipeline compatibility",1196],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline ",1196],["Shader Graph Yes Yes Yes No ",1196],["Getting started with Shader Graph",1196],["For instructions on installing and working with Shader Graph, see the Shader Graph documentation.",1196],["Check how many shader variants you have",1197],["You can use logging and profiling tools to check how many shader variants Unity compiles, and identify ways you can remove (strip) variants to improve build times and reduce memory usage. You can do the following:",1197],["\nGet a list of shader variants the Editor uses\n",1197],["\nGet a list of shader variants Unity creates at build time\n",1197],["\nGet a list of shader variants Unity compiles at runtime\n",1197],["\nCheck how much memory shaders use at runtime\n",1197],["\nHighlight missing shaders at runtime\n",1197],["",1197],["Get a list of shader variants the Editor uses",1197],["You can generate a list of shader variants that the Editor uses in the Scene view and the Game view. To do this:",1197],["Go to Edit > Project Settings > Graphics.",1197],["Under Shader Loading, you can see how many shaders and shader variants you have next to Currently tracked:.",1197],["Select Save to asset… to create a shader variant collection asset.",1197],["",1197],["Get a list of shader variants Unity creates at build time",1197],["After you build your project, open the Editor.log log file and search for Compiling shader to see which variants Unity compiles and strips. For example:",1197],["Compiling shader \"Universal Render Pipeline/Lit\" pass \"ForwardLit\" (fp)",1197],["320 / 786432 variants left after stripping, processed in 6.77 seconds",1197],["starting compilation...",1197],["finished in 29.72 seconds. Local cache hits 202 (0.24s CPU time), remote cache hits 0 (0.00s CPU time), compiled 118 variants (582.41s CPU time), skipped 0 variants",1197],["If you're using the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you can also log how many variants Unity compiles and strips in total. Select a logging level other than Disabled under Shader Stripping > Shader Variant Log Level in the following:",1197],["\nThe Universal Render Pipeline Asset if you're using URP.\n",1197],["\nThe Global Settings Window if you're using HDRP.\n",1197],["This adds Total logging to Editor.log. For example:",1197],["STRIPPING: Universal Render Pipeline/Lit (ForwardLit pass) (Fragment) - Remaining shader variants = 640/5760 = 11.11111% - Total = 2657/10169 = 26.12843%",1197],["See log files for the location of Editor.log.",1197],["",1197],["Get a list of shader variants Unity compiles at runtime",1197],["Go to Edit > Project Settings > Graphics.",1197],["Under Shader Loading, enable Log Shader Compilation.",1197],["When you build your project, enable Development Build in the build settings.",1197],["In the Console Window, select Editor and enable Full Log [Developer Mode Only].",1197],["Start the application you built.",1197],["Unity prints a Compiled shader message in the Console Window when it compiles a shader for the GPU.",1197],["",1197],["Check how much memory shaders use at runtime",1197],["Use the Memory Profiler module or the Memory Profiler package to check how much memory shaders are using at runtime. If a shader uses a lot of memory, you can experiment with stripping its variants.",1197],["",1197],["Highlight missing shaders at runtime",1197],["In Unity 2022.2 and above, you can force Unity to show a pink error shader during runtime, when a Material tries to use a missing shader variant.",1197],["Go to Edit > Project Settings > Player.",1197],["Under Other Settings, in the Script Compilation section, select Strict shader variant matching.",1197],["You can also enable this in C# scripts using strictShaderVariantMatching.",1197],["When you do this, Unity shows a warning in the console with the missing variant and its keywords. You can use this during stripping to check you don't remove shader variants your project needs.",1197],["include and include_with_pragmas directives in HLSL",1198],["In HLSL, #include directives are a type of preprocessor directive. They instruct the compiler to include the contents of one HLSL file inside another. The file that they include is called an include file.",1198],["In Unity, regular #include directives work the same as in standard HLSL. For more information on regular #include directives, see the HLSL documentation: include Directive.",1198],["Unity also provides an additional, Unity-specific #include_with_pragmas directive. The #include_with_pragmas directive works the same as a regular #include directive, but it also allows you to use #pragma directives in the include file. This means that the #include_with_pragmas directive allows you to share #pragma directives between multiple files.",1198],["Using the include_with_pragmas directive",1198],["Note:** To use #include_with_pragmas directives, you must enable the Caching Shader Preprocessor.",1198],["This example demonstrates how to use the Unity-specific #include_with_pragmas directive to enable a common workflow improvement: the ability to toggle shader debugging on and off for multiple shaders, without needing to edit every shader source file every time.",1198],["The following line demonstrates the contents of the include file. It contains a single pragma directive that enables shader debugging:",1198],["// Comment out the following line to disable shader debugging",1198],["pragma enable_d3d11_debug_symbols",1198],["In each shader that you want to debug, add an #include_with_pragmas directive that points to the include file. Put the directive near the other #pragma directives, like this:",1198],["// Example pragma directives",1198],["pragma target 4.0",1198],["pragma vertex vert",1198],["pragma fragment frag",1198],["// Replace path-to-include-file with the path to the include file",1198],["include_with_pragmas \"path-to-include-file\"",1198],["// The rest of the HLSL code goes here",1198],["Now, when you want to toggle shader debugging on and off for all shaders that use the include file, you only need to change a single line in the include file. When Unity recompiles the shaders, it includes the amended line.",1198],["Shaders introduction",1199],["A shader program, commonly referred to as a shader, is a program that runs on a GPU.",1199],["Types of shader",1199],["In Unity, shaders are divided into three broad categories. You use each category for different things, and work with them differently.",1199],["Shaders that are part of the graphics pipeline are the most common type of shader. They perform calculations that determine the color of pixels on the screen. In Unity, you usually work with this type of shader by using Shader objects.",1199],["Compute shaders perform calculations on the GPU, outside of the regular graphics pipeline.",1199],["Ray tracing shaders perform calculations related to ray tracing.",1199],["Terminology",1199],["The terminology around shaders can be confusing; people commonly use the word \"shader\" to mean different things.",1199],["In this documentation, the terminology is as follows:",1199],["shader** or shader program - a program that runs on a GPU. Unless otherwise specified, this means shader programs that are part of the graphics pipeline.",1199],["Shader object** - an instance of the Shader class. A Shader object is a wrapper for shader programs and other information.",1199],["ShaderLab** - a Unity-specific language for writing shaders.",1199],["Shader Graph** - a tool for creating shaders without writing code.",1199],["shader asset** - a file with the .shader extension in your Unity project. It defines a Shader object.",1199],["Shader Graph asset** - a file in your Unity project. It defines a Shader object.",1199],["Using shader keywords with the material Inspector",1200],["In the Unity Editor, when you view a material in the material Inspector, you can enable and disable its local shader keywords. This is useful for two reasons:",1200],["It allows artists to easily set different keyword values for different materials, without needing to use code.",1200],["When you enable a keyword using the [KeywordEnum] MaterialPropertyDrawer, Unity automatically disables the other keywords in a set. This ensures that exactly one keyword from a set is enabled at any time.",1200],["As with any shader settings or data, shader keywords are only available in the material Inspector when they are declared as material properties in the shader source file.",1200],["For shaders created in Shader Graph, keywords are material properties by default. This means that these settings are automatically available in the material Inspector. To change this, open the Blackboard, and change the Exposed property.",1200],["For hand-coded shaders, you must ensure that your ShaderLab code defines a material property that represents the keyword set. The material property must have a type of Float, and must use the [Toggle], [ToggleOff], or [KeywordEnum] MaterialPropertyDrawer attribute to expose it correctly to the Inspector.",1200],["Shader \"Custom/ApplyEffectIfKeywordIsOn\"",1200],["Properties",1200],["// Display a toggle in the Material's Inspector window",1200],["[Toggle] _Keyword (\"Keyword\", Float) = 0.0",1200],["SubShader",1200],["Pass",1200],["pragma shader_feature _Keyword",1200],["fixed4 frag(v2f i) : SV_Target",1200],["if _Keyword",1200],["// If _Keyword is on at build time, Unity creates a shader variant that uses the following code",1200],["ApplyEffect();",1200],["endif",1200],["// rest of shader code...",1200],["For more information and examples, see the documentation for the MaterialPropertyDrawer API.",1200],["Using shader keywords with C# scripts",1201],["You can enable or disable shader keywords. When you enable or disable a shader keyword, the shader displays the appropriate conditional behavior. Depending on whether the keyword works with shader variants or dynamic branching, this means that either Unity renders the appropriate shader variant, or the GPU executes the appropriate branch.",1201],["This page contains the following information:",1201],["",1201],["Local and global shader keywords",1201],["When Unity represents shader keywords in C#, it uses the concept of local shader keywords and global shader keywords.",1201],["Local shader keywords comprise all keywords that you declare in shader source files. Local shader keywords affect an individual shader or compute shader. Local keywords can have local or global scope, which affects whether they can be overridden by global shader keywords.",1201],["Global shader keywords act as overrides for local shader keywords. You don't declare these in shader source files; they exist only in C# code. Global shader keywords can affect multiple shaders and compute shaders at the same time.",1201],["Local shader keywords",1201],["When you declare a shader keyword in a shader source file, Unity represents this in C# with a LocalKeyword struct. This is called a local shader keyword.",1201],["The isOverridable property of a LocalKeyword indicates whether the keyword was declared with a global or local scope in the source file. It is true if the keyword was declared with global scope and can therefore be overridden by a global shader keyword with the same name. It is false if the keyword was declared with local scope, and therefore cannot be overridden by a global shader keyword with the same name.",1201],["Unity stores all local shader keywords that affect a shader or compute shader in a LocalKeywordSpace struct. For a graphics shader, you can access this with Shader.keywordSpace. For a compute shader, you can access this with ComputeShader-keywordSpace.",1201],["Global shader keywords",1201],["In addition to the local shader keywords that you declared in your source files, Unity maintains a separate list of global shader keywords. You don't declare these in shader source files; instead, they are runtime overrides for local shader keywords that you work with in C#. Global shader keywords can affect multiple shaders and compute shaders at the same time.",1201],["Unity represents a global shader keyword with a GlobalKeyword struct.",1201],["Setting a global shader keyword can be convenient when you need to enable or disable the same shader keyword for many materials and compute shaders. However, it has the following potential downsides:",1201],["Setting the global state of keywords can lead to unintended consequences if shaders accidentally define a keyword with the same name. You can guard against this by declaring keywords with local scope, or by naming keywords in a way that reduces the likelihood of clashes.",1201],["When you create a new GlobalKeyword, Unity updates its internal mapping between global and local keyword space for all shaders and compute shaders loaded at this point. This can be a CPU-intensive operation. To reduce the impact of this operation, try to create all global keywords shortly after application startup, while your application is loading.",1201],["",1201],["How local and global shader keywords interact",1201],["When a global and local shader keyword with the same name have different states, Unity uses the isOverridable property of a LocalKeyword to determine whether the keyword is enabled or disabled for an individual material or compute shader. isOverridable is true if the keyword was declared with global scope, and false if it was declared with local scope.",1201],["When isOverridable is true: If a global keyword with the same name exists and is enabled, Unity uses the state of the global keyword. Otherwise, Unity uses the state of the local keyword.",1201],["When isOverridable is false: Unity always uses the state of the local keyword.",1201],["Therefore, to understand whether a shader keyword is enabled or disabled for an individual material or compute shader, you must examine the state of the isOverridable property and the global and/or local keyword state.",1201],["This example demonstrates how to check whether Unity considers a keyword enabled or disabled for a material:",1201],["using UnityEngine;",1201],["using UnityEngine.Rendering;",1201],["public class KeywordExample : MonoBehaviour",1201],["public Material material;",1201],["void Start()",1201],["CheckShaderKeywordState();",1201],["void CheckShaderKeywordState()",1201],["// Get the instance of the Shader class that the material uses",1201],["var shader = material.shader;",1201],["// Get all the local keywords that affect the Shader",1201],["var keywordSpace = shader.keywordSpace;",1201],["// Iterate over the local keywords",1201],["foreach (var localKeyword in keywordSpace.keywords)",1201],["// If the local keyword is overridable (i.e., it was declared with a global scope),",1201],["// and a global keyword with the same name exists and is enabled,",1201],["// then Unity uses the global keyword state",1201],["if (localKeyword.isOverridable && Shader.IsKeywordEnabled(localKeyword.name))",1201],["Debug.Log(\"Local keyword with name of \" + localKeyword.name + \" is overridden by a global keyword, and is enabled\");",1201],["// Otherwise, Unity uses the local keyword state",1201],["else",1201],["var state = material.IsKeywordEnabled(localKeyword) ? \"enabled\" : \"disabled\";",1201],["Debug.Log(\"Local keyword with name of \" + localKeyword.name + \" is \" + state);",1201],["",1201],["Shader variants or dynamic branching",1201],["In Unity, you can use shader keywords with shader variants, or you can use them with dynamic branching. You decide when you declare the keywords.",1201],["The isDynamic property of a LocalKeyword indicates whether the keyword was declared for use with dynamic branching in the shader source file. It is true if the keyword was declared for use with dynamic branching, and false if it was declared for use with shader variants.",1201],["",1201],["Enabling and disabling shader keywords",1201],["To check whether a local keyword is enabled for a graphics shader, use Material.IsKeywordEnabled or Material.EnableKeyword. For a compute shader, use ComputeShader.IsKeywordEnabled, or ComputeShader.EnableKeyword.",1201],["To check whether a global keyword is enabled, use Shader.IsKeywordEnabled or Shader.EnableKeyword or ComputeShader.enabledKeywords.",1201],["To enable or disable a local shader keyword for a graphics shader, use Material.SetKeyword, Material.EnableKeyword, or Material.DisableKeyword. For a compute shader, use ComputeShader.SetKeyword, ComputeShader.EnableKeyword, or ComputeShader.DisableKeyword.",1201],["To enable or disable a global shader keyword, use Shader.SetKeyword, ComputeShader.EnableKeyword, or ComputeShader.DisableKeyword.",1201],["To enable or disable a local or global keyword with a Command Buffer, use CommandBuffer.EnableKeyword, or CommandBuffer.DisableKeyword .",1201],["Note:** When you enable or disable keywords that work with shader variants, Unity uses different shader variants. Changing shader variants at runtime can impact performance. If a change in keywords requires a variant to be used for the first time, it can lead to hitches while the graphics driver prepares the shader program. This can be a particular problem for large or complex shaders, or if a global keyword state change affects multiple shaders. To avoid this, if you use keywords with shader variants, ensure that you consider keyword variants in your shader loading and prewarming strategy. For more information, see Shader loading.",1201],["",1201],["Managing sets of keywords at runtime",1201],["When you author your shader, you declare keywords in sets. A set contains mutually-exclusive keywords.",1201],["At runtime, Unity has no concept of these sets. It allows you to enable or disable any keyword independently, and enabling or disabling a keyword has no effect on the state of any other keyword. This means that it is possible to enable multiple keywords from the same set, or disable all the keywords in a set.",1201],["If you use keywords with shader variants, when more than one keyword in a set is enabled or no keywords in a set are enabled, Unity chooses a variant that it considers a \"good enough\" match. There is no guarantee about what exactly happens, and it can lead to unintended results. It is best to avoid this situation by managing keyword state carefully.",1201],["If you use keywords with dynamic branching, when more than one keyword in a set is enabled or no keywords in a set are enabled, the conditional branches execute accordingly. For example, if both KEYWORD_A and KEYWORD_B are enabled, the branches for if (KEYWORD_A) and if (KEYWORD_B) will both execute.",1201],["Shader keywords",1202],["Shader keywords allow you to use conditional behavior in your shader code. You can create shaders that share some common code, but have different functionality when a given keyword is enabled or disabled.",1202],["You can use shader keywords with dynamic branching, or with Shader variants. Before you use shader keywords, it is important to understand how these techniques work, and which one is right for your project.",1202],["This page contains the following information:",1202],["",1202],["Using shader keywords",1202],["",1202],["Declaring shader keywords",1202],["You declare shader keywords in sets. A set contains mutually exclusive keywords.",1202],["For example, the following set contains three keywords:",1202],["COLOR_RED",1202],["COLOR_GREEN",1202],["COLOR_BLUE",1202],["Note:** In Shader Graph, the terminology is different: a set of keywords is called a Keyword, and the keywords in a set are called states. Internally, the functionality is the same: Unity compiles them in the same way, you work with them the same way with C# scripts, and so on.",1202],["The way that you declare shader keywords affects a number of things:",1202],["The type affects whether and how Unity uses the keywords to generate shader variants, or whether it uses them for dynamic branching.",1202],["The scope affects whether the keywords are local or global. This determines their behavior at runtime.",1202],["The stage affects which shader stage the keywords affect (where applicable).",1202],["",1202],["Definition type: \"multi compile\", \"shader feature\", or \"dynamic branch\"",1202],["When you declare a set of keywords, you choose whether to use them with shader variants or with dynamic branching. If you choose shader variants, you must also choose how Unity defines the keywords internally; this affects the number of variants that Unity compiles.",1202],["\"dynamic branch\": Use this to create a set of keywords for use with dynamic branching. Internally, Unity uses these keywords to create uniform variables.",1202],["\"multi compile\" or \"shader feature\": Use this to create a set of keywords for use with shader variants. Internally, Unity uses these keyword to create #define preprocessor directives.",1202],["\"multi compile\" declares a set of keywords for use with shader variants.Unity compiles shader variants for all keywords in the set.",1202],["\"shader feature\" declares a set of keywords for use with shader variants, and also instructs the compiler to compile variants where none of these keywords are enabled.Unity examines the state of your project at build time, and only compiles variants for keywords that are in use. A keyword is in use if a material that is included in the build has that keyword enabled.",1202],["Whether to choose \"multi compile\" or \"shader feature\" depends on how you use the keywords. If you use the keywords to configure materials in your project and do not change their value from C# scripts at runtime, then you should use \"shader feature\" to reduce the number of shader keywords and variants in your project. If you enable and disable keywords at runtime using C# scripts, then you should use \"multi compile\" to prevent variants being stripped in error. For more information on shader stripping, see Shader variant stripping.",1202],["Note:** If you add a shader to the list of Always Included Shaders in the Graphics settings window, Unity includes all keywords from all sets in the build, even if they were declared with \"shader feature\".",1202],["To set this value, see the following documentation:",1202],["In hand-coded shaders, see Declaring and using shader keywords in HLSL",1202],["In Shader Graph, see Keywords. Note: The \"dynamic branch\" option is not available in Shader Graph. You can only use shader keywords with shader variants in Shader Graph.",1202],["",1202],["Local or global scope",1202],["When you declare a set of keywords, you choose whether the keywords in the set have local or global scope. This determines whether you can override the state of this keyword at runtime using a global shader keyword.",1202],["By default, you declare keywords with global scope. This means that you can override the state of this keyword at runtime using a global shader keyword. If you declare keywords with local scope, this means that you cannot override the state of this keyword at runtime using a global shader keyword. For more information and a code example, see Using shader keywords with C# scripts.",1202],["Note:** If a keyword with the same name exists in a shader source file and its dependencies, the scope of the keyword in the source file overrides the scope in the dependencies. Dependencies comprise all Shaders that are included via the Fallback command, and Passes that are included via the UsePass command.",1202],["To set this value, see the following documentation:",1202],["In hand-coded shaders, see Declaring and using shader keywords in HLSL",1202],["In Shader Graph, see Keywords",1202],["",1202],["Stage-specific keywords",1202],["By default, Unity generates keyword variants for each stage of your shader. For example, if your shader contains a vertex stage and a fragment stage, Unity generates variants for every keyword combination for both the vertex and the fragment shader programs. If a set of keywords is only used in one of those stages, this results in identical variants for the other stage. Unity automatically identifies and deduplicates identical variants so that they do not increase build size, but they still result in wasted compilation time, increased shader loading times, and increased runtime memory usage.",1202],["To avoid this problem, when you declare a set of keywords in a hand-coded shader, you can instruct Unity to compile them only for a given shader stage. You are then responsible for ensuring that the keywords are only used in the specified shader stages.",1202],["Note:** The following graphics APIs do not fully support stage-specific keywords. In OpenGL and Vulkan, at compile time, Unity automatically converts all stage-specific keyword directives to regular keyword directives. In Metal, any keyword targeting vertex stages also affects tessellation stages, and vice versa.",1202],["To set this value:",1202],["In hand-coded shaders, see Declaring and using shader keywords in HLSL",1202],["In Shader Graph, you cannot set this value. By default, all keywords affect all stages.",1202],["",1202],["Making behavior conditional with shader keywords",1202],["You can use shader keywords to make parts of your shader conditional, so that certain behaviors only execute when a given keyword is in a given state.",1202],["To do this:",1202],["In hand-coded shaders, see Defining and using shader keywords.",1202],["In Shader Graph, see Shader Graph: Keyword Node.",1202],["",1202],["Enabling and disabling shader keywords",1202],["You can enable or disable shader keywords. When you enable or disable a shader keyword, the shader displays the appropriate conditional behavior. Depending on whether the keyword work with shader variants or dynamic branching, this means that either Unity renders the appropriate shader variant, or the GPU executes the appropriate branch.",1202],["There are two ways to enable and disable shader keywords:",1202],["Use scripts, either at runtime or in the Unity Editor. For more information, see Using shader keywords with C# scripts.",1202],["Use the Material Inspector in the Unity Editor. For more information, see Using shader keywords with the Material Inspector.",1202],["",1202],["Unity's predefined shader keywords",1202],["Unity uses predefined sets of shader keywords to generate shader variants that enable common functionality.",1202],["Unity adds the following sets of shader variant keywords at compile time:",1202],["By default, Unity adds this set of keywords to all graphics shader programs: STEREO_INSTANCING_ON, STEREO_MULTIVIEW_ON, STEREO_CUBEMAP_RENDER_ON, UNITY_SINGLE_PASS_STEREO. You can strip these keywords using an Editor script. For more information, see Shader variant stripping.",1202],["By default, Unity adds this set of keywords to the Standard Shader: LIGHTMAP_ON, DIRLIGHTMAP_COMBINED, DYNAMICLIGHTMAP_ON, LIGHTMAP_SHADOW_MIXING, SHADOWS_SHADOWMASK. You can strip these keywords using the Graphics settings window.",1202],["In the Built-in Render Pipeline, if your project uses tier settings that differ from each other, Unity adds this set of keywords to all graphics shaders: UNITY_HARDWARE_TIER1, UNITY_HARDWARE_TIER2, UNITY_HARDWARE_TIER3. For more information, see Graphics tiers: Graphics tiers and shader variants.",1202],["",1202],["Shader keyword limits",1202],["Unity can use up to 4,294,967,294 global shader keywords. Individual shaders and compute shaders can use up to 65,534 local shader keywords. These totals include keywords used for variants, and keywords used for dynamic branching.",1202],["Every keyword declared in the shader source file and its dependencies count towards this limit. Dependencies include Passes that the shader includes with UsePass, and fallbacks.",1202],["If Unity encounters a shader keyword with the same name multiple times, it only counts towards the limit once.",1202],["If a shader uses more than 128 keywords in total, it incurs a small runtime performance penalty; therefore, it is best to keep the number of keywords low. Unity always reserves 4 keywords per shader.",1202],["How Unity loads and uses shaders",1203],["Unity loads compiled shaders from your built application in the following way:",1203],["When Unity loads a scene or a runtime resource, it loads all the compiled shader variants for the scene or resource into CPU memory.",1203],["By default, Unity decompresses all the shader variants into another area of CPU memory. You can control how much memory shaders use on different platforms.",1203],["The first time Unity needs to render geometry using a shader variant, Unity passes the shader variant and its data to the graphics API and the graphics driver.",1203],["The graphics driver creates a GPU-specific version of the shader variant and uploads it to the GPU.",1203],["This approach ensures that Unity and the graphics driver avoid processing and storing all the shader variants on the GPU before Unity needs them. But there might be a visible stall when the graphics driver creates a GPU-specific shader variant for the first time.",1203],["Unity caches each GPU-specific shader variant, to avoid another stall when Unity needs the shader variant again.",1203],["Unity removes the shader variant completely from CPU and GPU memory when there are no longer any objects that reference the shader variant.",1203],["Which shaders Unity loads",1203],["Unity only loads compiled shaders that are compatible with the platform's graphics API, hardware and graphics tier.",1203],["If Unity can't find the shader variant it needs because you or Unity stripped the shader variant from your built application, Unity tries to select a similar shader variant. If Unity can't find a similar shader variant, it uses the magenta error shader.",1203],["You can enable strict shader variant matching to stop Unity trying to select a similar shader variant.",1203],["How Unity selects a subshader",1203],["If a shader variant contains multiple subshaders, Unity tries to select and use a single subshader that's compatible with all of the following:",1203],["\nThe platform's hardware.\n",1203],["\nThe current ShaderLab level of detail (LOD).\n",1203],["\nThe active render pipeline.\n",1203],["Unity searches for the first compatible subshader among the following elements in the following order:",1203],["The subshaders in the order they appear in the shader.",1203],["The subshaders in any fallback shader objects, in the order they appear in the shader objects.",1203],["If Unity can't find a compatible subshader, it uses the magenta error shader.",1203],["You can set which subshaders are compatible with which hardware using ShaderLab tags. See ShaderLab: assigning tags to a SubShader.",1203],["",1203],["Prewarming shader variants",1203],["To avoid visible stalls at performance-intensive times, Unity can ask the graphics driver to create GPU representations of shader variants before they're first needed. This is called prewarming.",1203],["You can prewarm in the following ways:",1203],["Prewarm a Shader object or shader variant collection using the Experimental.Rendering.ShaderWarmup API.",1203],["Prewarm a shader variant collection by using the ShaderVariantCollection.WarmUp API.",1203],["Prewarm all variants of all Shader objects currently in memory using the Shader.WarmupAllShaders API.",1203],["You can also add shader variant collections to the Preloaded shaders section of the Graphics Settings window. Unity uses the ShaderVariantCollection.WarmUp API to load and prewarm the shader variant collections when your built application starts.",1203],["Prewarm on DirectX 12, Metal or Vulkan",1203],["If you build for DirectX 12, Metal or Vulkan, the graphics driver can only create an accurate GPU representation of a shader variant if it knows the exact vertex data layout and render state. If a prewarmed GPU representation is inaccurate, Unity might still stall when it needs to create the accurate representation.",1203],["To create accurate variants and avoid stalling, you should prewarm by rendering Materials off-screen.",1203],["You can also:",1203],["Prewarm a Shader object or shader variant collection using Experimental.Rendering.ShaderWarmup, but only if you can provide the vertex data layout and set the render state accurately.",1203],["Use ShaderVariantCollection.Warmup or Shader.WarmupAllShaders, which may create inaccurate prewarmed GPU representations because you can't provide a vertex data layout or render state.",1203],["",1203],["Control how much memory shaders use",1203],["In your built application, Unity stores several 'chunks' of compressed shader variant data. Each chunk contains multiple shader variants. When Unity loads a scene at runtime, it loads all the scene's chunks into CPU memory and decompresses them.",1203],["To reduce memory usage on platforms that have limited memory, you can limit the size of chunks and how many decompressed chunks Unity keeps in memory.",1203],["To do this, in Player settings, select Other Settings > Shader Variant Loading and adjust the following settings:",1203],["\nUse Default chunk size (MB) to set the maximum size of compressed chunks Unity stores in your built application.\n",1203],["\nUse Default chunk count to limit how many decompressed chunks Unity keeps in memory. The default is 0, which means there's no limit.\n",1203],["See PlayerSettings.SetDefaultShaderChunkCount for more information.",1203],["You can use Override to override the values for each platform individually. See PlayerSettings.SetShaderChunkCountForPlatform for more information.",1203],["You can also use Shader.maximumChunksOverride to override Default chunk count at runtime.",1203],["Profiler markers for shader loading",1203],["You can use the following profiler markers to see shader loading in the Profiler:",1203],["\nShader.ParseThreaded and Shader.ParseMainThread for Unity loading the shader object from serialized data.\n",1203],["\nShader.CreateGPUProgram for Unity creating a GPU-specific version of a shader variant.\n",1203],["Bumped Diffuse",1204],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1204],["Performance",1204],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1204],["NormalBumpedDiffuse",1204],["Bumped Specular",1205],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1205],["Performance",1205],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1205],["NormalBumpedSpecular",1205],["Decal",1206],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1206],["Decal Properties",1206],["This shader is a variation of the VertexLit shader. All lights that shine on it will be rendered as vertex lights by this shader. In addition to the main texture, this shader makes use of a second texture for additional details. The second \"Decal\" texture uses an alpha channel to determine visible areas of the main texture. The decal texture should be supplemental to the main texture. For example, if you have a brick wall, you can tile the brick texture as the main texture, and use the decal texture with alpha channel to draw graffiti at different places on the wall.",1206],["Performance",1206],["This shader is approximately equivalent to the VertexLit shader. It is marginally more expensive due to the second decal texture, but will not have a noticeable impact.",1206],["NormalDecal",1206],["Diffuse",1207],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1207],["Performance",1207],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1207],["NormalDiffuse",1207],["Diffuse Detail",1208],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1208],["Diffuse Detail Properties",1208],["This shader is a version of the regular Diffuse shader with additional data. It allows you to define a second \"Detail\" texture that will gradually appear as the camera gets closer to it. It can be used on terrain, for example. You can use a base low-resolution texture and stretch it over the entire terrain. When the camera gets close the low-resolution texture will get blurry, and we don't want that. To avoid this effect, create a generic Detail texture that will be tiled over the terrain. This way, when the camera gets close, the additional details appear and the blurry effect is avoided.",1208],["The Detail texture is put \"on top\" of the base texture. Darker colors in the detail texture will darken the main texture and lighter colors will brighten it. Detail texture are usually gray-ish.",1208],["Performance",1208],["This shader is pixel-lit, and approximately equivalent to the Diffuse shader. It is marginally more expensive due to additional texture.",1208],["NormalDiffuseDetail",1208],["Normal Shader Family",1209],["Note.** Unity 5 introduced the Standard Shader which replaces these shaders.",1209],["These shaders are the basic shaders in Unity. They are not specialized in any way and should be suitable for most opaque objects. They are not suitable if you want your object to be transparent, emitting light etc.",1209],["Assets needed:**",1209],["One Base texture, no alpha channel required",1209],["Assets needed:**",1209],["One Base texture, no alpha channel required",1209],["Assets needed:**",1209],["One Base texture with alpha channel for Specular Map",1209],["Assets needed:**",1209],["One Base texture, no alpha channel required",1209],["One Normal map",1209],["Assets needed:**",1209],["One Base texture with alpha channel for Specular Map",1209],["One Normal map",1209],["Assets needed:**",1209],["One Base texture, no alpha channel required",1209],["One Normal map",1209],["One Height texture with Parallax Depth in the alpha channel",1209],["Assets needed:**",1209],["One Base texture with alpha channel for Specular Map",1209],["One Normal map",1209],["One Height texture with Parallax Depth in the alpha channel",1209],["Assets needed:**",1209],["One Base texture, no alpha channel required",1209],["One Decal texture with alpha channel for Decal transparency",1209],["Assets needed:**",1209],["One Base texture, no alpha channel required",1209],["One Detail grayscale texture; with 50% gray being neutral color",1209],["NormalFamily",1209],["Parallax Diffuse",1210],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1210],["Performance",1210],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1210],["NormalParallaxDiffuse",1210],["Parallax Bumped Specular",1211],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1211],["Performance",1211],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1211],["NormalParallaxSpecular",1211],["Specular",1212],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1212],["Performance",1212],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1212],["NormalSpecular",1212],["Vertex-Lit",1213],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1213],["Performance",1213],["Generally, this shader is very cheap to render. For more details, please view the Shader Peformance page.",1213],["NormalVertexLit",1213],["The Shader class",1214],["In Unity, when you work with shaders that are part of the graphics pipeline, you usually work with instances of the Shader class. An instance of the Shader class is called a Shader object.",1214],["A Shader object is a Unity-specific way of working with shader programs; it is a wrapper for shader programs and other information. It lets you define multiple shader programs in the same file, and tell Unity how to use them.",1214],["Render pipeline compatibility",1214],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1214],["Shader objects Yes Yes Yes Yes ",1214],["Shader object fundamentals",1214],["A Shader object contains shader programs, instructions for changing settings on the GPU (collectively called the render state), and information that tells Unity how to use them.",1214],["You use Shader objects with materials to determine the appearance of your scene.",1214],["Assets",1214],["You can create Shader objects in two ways. Each has its own type of asset:",1214],["You can write code to create a shader asset, which is a text file with the .shader extension.",1214],["You can use Shader Graph to create a Shader Graph asset.",1214],["Whichever way you create your Shader object, Unity represents the results in the same way internally.",1214],["Inside a Shader object",1214],["A Shader object has a nested structure. It organizes information into structures called SubShaders and Passes. It organises shader programs into shader variants.",1214],["Shader object",1214],["A Shader object contains:",1214],["Information about itself, such as its name",1214],["An optional fallback Shader object, which Unity uses if it can't use this one",1214],["One or more SubShaders",1214],["You can also define additional information such as shared shader code, or whether to use a custom editor. For information on defining a Shader object, see ShaderLab: defining a Shader object.",1214],["SubShaders",1214],["SubShaders let you separate your Shader object into parts that are compatible with different hardware, render pipelines, and runtime settings.",1214],["A SubShader contains:",1214],["Information about which hardware, render pipelines, and runtime settings this SubShader is compatible with",1214],["SubShader tags, which are key-value pairs that provide information about the SubShader",1214],["One or more Passes",1214],["You can also define additional information, such as render state that is common to all of its Passes. For information on everything you can define in a SubShader, see ShaderLab: defining a SubShader.",1214],["Passes",1214],["A Pass contains:",1214],["Pass tags, which are key-value pairs that provide information about the Pass",1214],["Instructions for updating the render state before running its shader programs",1214],["Shader programs, organised into one or more shader variants",1214],["You can also define additional information such as a name. For information on everything you can define in a Pass, see ShaderLab: defining a Pass.",1214],["Shader variants",1214],["The shader programs that a Pass contains are organised into shader variants. Shader variants share common code, but have different functionality when a given keyword is enabled or disabled.",1214],["The number of shader variants in a Pass depends on how many keywords you define in your shader code, and the target platform. Each Pass contains at least one variant.",1214],["For more information, see Shader variants.",1214],["Understanding shader performance",1215],["This section contains information on the following subjects:",1215],["Usage and Performance of Built-in Shaders",1216],["Shaders in Unity are used through Materials, which essentially combine shader code with parameters like textures. An in-depth explanation of the Shader/Material relationship can be read here.",1216],["Material properties will appear in the Inspector when either the Material itself or a GameObject that uses the Material is selected. The Material Inspector looks like this:",1216],["Each Material will look a little different in the Inspector, depending on the specific shader it is using. The shader iself determines what kind of properties will be available to adjust in the Inspector. Material inspector is described in detail in Material reference page. Remember that a shader is implemented through a Material. So while the shader defines the properties that will be shown in the Inspector, each Material actually contains the adjusted data from sliders, colors, and textures. The most important thing to remember about this is that a single shader can be used in multiple Materials, but a single Material cannot use multiple shaders.",1216],["Shader names",1216],["Changing the name of a Legacy Shader can affect its functionality. This is because prior to Unity 5.0, some of the functionality of a shader was determined by its path and name. This is still how the Legacy Shaders work. For more information, see Legacy shader names",1216],["Performance Considerations",1216],["There are a number of factors that can affect the overall performance of your game. This page will talk specifically about the performance considerations for Built-in Shaders. Performance of a shader mostly depends on two things: shader itself and which Rendering Path is used by the project or specific camera. For performance tips when writing your own shaders, see ShaderLab Shader Performance page.",1216],["Rendering Paths and shader performance",1216],["From the rendering paths Unity supports, Deferred Shading and Vertex Lit paths have the most predictable performance. In Deferred shading, each object is generally drawn once, no matter what lights are affecting it. Similarly, in Vertex Lit each object is generally drawn once. So then, the performance differences in shaders mostly depend on how many textures they use and what calculations they do.",1216],["Shader Performance in Forward rendering path",1216],["In Forward rendering path, performance of a shader depends on both the shader itself and the lights in the scene. The following section explains the details. There are two basic categories of shaders from a performance perspective, Vertex-Lit, and Pixel-Lit.",1216],["Vertex-Lit shaders in Forward rendering path are always cheaper than Pixel-Lit shaders. These shaders work by calculating lighting based on the mesh vertices, using all lights at once. Because of this, no matter how many lights are shining on the object, it will only have to be drawn once.",1216],["Pixel-Lit shaders calculate final lighting at each pixel that is drawn. Because of this, the object has to be drawn once to get the ambient & main directional light, and once for each additional light that is shining on it. Thus the formula is N rendering passes, where N is the final number of pixel lights shining on the object. This increases the load on the CPU to process and send off commands to the graphics card, and on the graphics card to process the vertices and draw the pixels. The size of the Pixel-lit object on the screen will also affect the speed at which it is drawn. The larger the object, the slower it will be drawn.",1216],["So pixel lit shaders come at performance cost, but that cost allows for some spectacular effects: shadows, normal-mapping, good looking specular highlights and light cookies, just to name a few.",1216],["Remember that lights can be forced into a pixel (\"important\") or vertex/SH (\"not important\") mode. Any vertex lights shining on a Pixel-Lit shader will be calculated based on the object's vertices or whole object, and will not add to the rendering cost or visual effects that are associated with pixel lights.",1216],["General shader performance",1216],["Out of Built-in Shaders, they come roughly in this order of increasing complexity:",1216],["Unlit. This is just a texture, not affected by any lighting.",1216],["VertexLit.",1216],["Diffuse.",1216],["Normal mapped. This is a bit more expensive than Diffuse: it adds one more texture (normal map), and a couple of shader instructions.",1216],["Specular. This adds specular highlight calculation.",1216],["Normal Mapped Specular. Again, this is a bit more expensive than Specular.",1216],["Parallax Normal mapped. This adds parallax normal-mapping calculation.",1216],["Parallax Normal Mapped Specular. This adds both parallax normal-mapping and specular highlight calculation.",1216],["Mobile simplified shaders",1216],["Additionally, Unity has several simplified shaders targeted at mobile platforms, under \"Mobile\" category. These shaders work on other platforms as well, so if you can live with their simplifications (e.g. approximate specular, no per-material color support etc.), try using them!",1216],["To see the specific simplifications that have been made for each shader, look at the .shader files from the \"built-in shaders\" package and the information is listed at the top of the file in some comments.",1216],["Some examples of changes that are common across the Mobile shaders are:",1216],["There is no material color or main color for tinting the shader.",1216],["For the shaders taking a normal map, the tiling and offset from the base texture is used.",1216],["The particle shaders do not support AlphaTest or ColorMask.",1216],["Limited feature and lighting support - e.g. some shaders only support one directional light.",1216],["ShaderLab: Predefined Pass tags in the Built-in Render Pipeline",1217],["This page contains information on predefined Pass tags that you can use with the Built-in Render Pipeline.",1217],["For general information on Pass tags, including an introduction to the LightMode tag, see ShaderLab: assigning tags to a Pass. For predefined Pass tag values in the Universal Render Pipeline (URP), see URP Pass tags: LightMode.",1217],["LightMode tag valid values",1217],["These are the valid values for the LightMode Pass tag in the Built-in Render Pipeline. For more information on the LightMode tag, see ShaderLab: using Pass tags.",1217],["Value** Function ",1217],["Always Always rendered; does not apply any lighting. This is the default value. ",1217],["ForwardBase Used in Forward rendering; applies ambient, main directional light, vertex/SH lights and lightmaps. ",1217],["ForwardAdd Used in Forward rendering; applies additive per-pixel lights, one Pass per light. ",1217],["Deferred Used in Deferred Shading; renders G-buffer. ",1217],["ShadowCaster Renders object depth into the shadowmap or a depth texture. ",1217],["MotionVectors Used to calculate per-object motion vectors. ",1217],["Vertex Used in legacy Vertex Lit rendering when the object is not lightmapped; applies all vertex lights. ",1217],["VertexLMRGBM Used in legacy Vertex Lit rendering when the object is lightmapped, and on platforms where the lightmap is RGBM encoded (PC & console). ",1217],["VertexLM Used in legacy Vertex Lit rendering when the object is lightmapped, and on platforms where lightmap is double-LDR encoded (mobile platforms). ",1217],["Meta This Pass is not used during regular rendering, only for lightmap baking or Enlighten Realtime Global Illumination. For more information, see Lightmapping and shaders. ",1217],["PassFlags tag",1217],["In the Built-in Render Pipeline, use the PassFlags Pass tag to specify what data Unity provides to the Pass.",1217],["Valid values",1217],["Value Function ",1217],["OnlyDirectional Valid only in the Built-in Render Pipeline, when the rendering path is set to Forward, in a Pass with a LightMode tag value of ForwardBase.Unity provides only the main directional light and ambient/light probe data to this Pass. This means that data of non-important lights is not passed into vertex-light or spherical harmonics shader variables. See Forward rendering path for details. ",1217],["PassFlag tag code examples",1217],["Shader \"Examples/ExamplePassFlag\"",1217],["SubShader",1217],["Pass",1217],["Tags { \"LightMode\" = \"ForwardBase\" \"PassFlags\" = \"OnlyDirectional\" }",1217],["// The rest of the code that defines the Pass goes here.",1217],["RequireOptions tag",1217],["In the Built-in Render Pipeline, the RequireOptions Pass tag enables or disables a Pass based on project settings.",1217],["Valid values",1217],["Value Function ",1217],["SoftVegetation Render this Pass only if QualitySettings-softVegetation is enabled. ",1217],["Examples",1217],["Shader \"Examples/ExampleRequireOptions\"",1217],["SubShader",1217],["Pass",1217],["Tags { \"RequireOptions\" = \"SoftVegetation\" }",1217],["// The rest of the code that defines the Pass goes here.",1217],["Preprocessor directives in HLSL",1218],["Internally, shader compilation has multiple stages. The first stage is preprocessing, where a program called the preprocessor prepares the code for compilation. Preprocessor directives are instructions for the preprocessor.",1218],["This section of the manual contains information on Unity-specific ways of working with HLSL preprocessor directives, and HLSL preprocessor directives that are unique to Unity. It does not contain exhaustive documentation on all the preprocessor directives that HLSL supports, or general information on working with preprocessor directives in HLSL. For that information, see the HLSL documentation: Preprocessor directives (HLSL).",1218],["Page Description ",1218],["",1218],["include and include_with_pragmas directives in HLSL Working with #include and the Unity-specific #include_with_pragmas directives in HLSL in Unity. ",1218],["pragma directives in HLSL Working with #pragma directives in HLSL in Unity. ",1218],["Targeting shader models and GPU features in HLSL Using #pragma directives to indicate that your shader requires certain GPU features. ",1218],["Targeting graphics APIs and platforms in HLSL Using #pragma directives to target specific graphics API and platforms. ",1218],["Declaring and using shader keywords in HLSL Using #pragma directives to declare shader keywords and #if directives to indicate that code depends on the state of shader keywords. ",1218],["Reflective Bumped Diffuse",1219],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1219],["Performance",1219],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1219],["ReflectiveBumpedDiffuse",1219],["Reflective Bumped Specular",1220],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1220],["One consideration for this shader is that the Base texture's alpha channel will double as both the Reflection Map and the Specular Map.",1220],["Performance",1220],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1220],["ReflectiveBumpedSpecular",1220],["Reflective Normal Mapped Unlit",1221],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1221],["Normal mapped Properties",1221],["This shader does not use normal-mapping in the traditional way. The normal map does not affect any lights shining on the object, because the shader does not use lights at all. The normal map will only distort the reflection map.",1221],["Special Properties",1221],["This shader is special because it does not respond to lights at all, so you don't have to worry about performance reduction from use of multiple lights. It simply displays the reflection cube map on the model. The reflection is distorted by the normal map, so you get the benefit of detailed reflection. Because it does not respond to lights, it is quite cheap. It is somewhat of a specialized use case, but in those cases it does exactly what you want as cheaply as possible.",1221],["Performance",1221],["Generally, this shader is quite cheap to render. For more details, please view the Shader Peformance page.",1221],["ReflectiveBumpedUnlit",1221],["Reflective Normal mapped Vertex-lit",1222],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1222],["Special Properties",1222],["This shader is a good alternative to Reflective Normal mapped. If you do not need the object itself to be affected by pixel lights, but do want the reflection to be affected by a normal map, this shader is for you. This shader is vertex-lit, so it is rendered more quickly than its Reflective Normal mapped counterpart.",1222],["Performance",1222],["Generally, this shader is not expensive to render. For more details, please view the Shader Peformance page.",1222],["ReflectiveBumpedVertexLit",1222],["Reflective Diffuse",1223],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1223],["Performance",1223],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1223],["ReflectiveDiffuse",1223],["Reflective Shader Family",1224],["Note.** Unity 5 introduced the Standard Shader which replaces these shaders.",1224],["Reflective shaders will allow you to use a Cubemap which will be reflected on your mesh. You can also define areas of more or less reflectivity on your object through the alpha channel of the Base texture. High reflectivity is a great effect for glosses, oils, chrome, etc. Low reflectivity can add effect for metals, liquid surfaces, or video monitors.",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas",1224],["One Reflection Cubemap for Reflection Map",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas",1224],["One Reflection Cubemap for Reflection Map",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas & Specular Map combined",1224],["One Reflection Cubemap for Reflection Map",1224],["Note:**",1224],["One consideration for this shader is that the Base texture's alpha channel will double as both the reflective areas and the Specular Map.",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas",1224],["One Reflection Cubemap for Reflection Map",1224],["One Normal map, no alpha channel required",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas & Specular Map combined",1224],["One Reflection Cubemap for Reflection Map",1224],["One Normal map, no alpha channel required",1224],["Note:**",1224],["One consideration for this shader is that the Base texture's alpha channel will double as both the reflective areas and the Specular Map.",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas",1224],["One Reflection Cubemap for Reflection Map",1224],["One Normal map, with alpha channel for Parallax Depth",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas & Specular Map",1224],["One Reflection Cubemap for Reflection Map",1224],["One Normal map, with alpha channel for Parallax Depth",1224],["Note:**",1224],["One consideration for this shader is that the Base texture's alpha channel will double as both the reflective areas and the Specular Map.",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas",1224],["One Reflection Cubemap for Reflection Map",1224],["One Normal map, no alpha channel required",1224],["Assets needed:**",1224],["One Base texture with alpha channel for defining reflective areas",1224],["One Reflection Cubemap for Reflection Map",1224],["One Normal map, no alpha channel required",1224],["ReflectiveFamily",1224],["Reflective Parallax Diffuse",1225],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1225],["Performance",1225],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1225],["ReflectiveParallaxDiffuse",1225],["Reflective Parallax Specular",1226],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1226],["One consideration for this shader is that the Base texture's alpha channel will double as both the Reflection Map and the Specular Map.",1226],["Performance",1226],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1226],["ReflectiveParallaxSpecular",1226],["Reflective Specular",1227],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1227],["One consideration for this shader is that the Base texture's alpha channel will double as both the Reflection Map and the Specular Map.",1227],["Performance",1227],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1227],["ReflectiveSpecular",1227],["Reflective Vertex-Lit",1228],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1228],["Performance",1228],["Generally, this shader is not too expensive to render. For more details, please view the Shader Peformance page.",1228],["ReflectiveVertexLit",1228],["Self-Illuminated Normal mapped Diffuse",1229],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1229],["Performance",1229],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1229],["SelfIllumBumpedDiffuse",1229],["Self-Illuminated Normal mapped Specular",1230],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1230],["Performance",1230],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1230],["SelfIllumBumpedSpecular",1230],["Self-Illuminated Diffuse",1231],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1231],["Performance",1231],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1231],["SelfIllumDiffuse",1231],["Self-Illuminated Shader Family",1232],["Note.** Unity 5 introduced the Standard Shader which replaces these shaders.",1232],["The Self-Illuminated shaders will emit light only onto themselves based on an attached alpha channel. They do not require any Lights to shine on them to emit this light. Any vertex lights or pixel lights will simply add more light on top of the self-illumination.",1232],["This is mostly used for light emitting objects. For example, parts of the wall texture could be self-illuminated to simulate lights or displays. It can also be useful to light power-up objects that should always have consistent lighting throughout the game, regardless of the lights shining on it.",1232],["Assets needed:**",1232],["One Base texture, no alpha channel required",1232],["One Illumination texture with alpha channel for Illumination Map",1232],["Assets needed:**",1232],["One Base texture, no alpha channel required",1232],["One Illumination texture with alpha channel for Illumination Map",1232],["Assets needed:**",1232],["One Base texture with alpha channel for Specular Map",1232],["One Illumination texture with alpha channel for Illumination Map",1232],["Assets needed:**",1232],["One Base texture, no alpha channel required",1232],["One Normal map normal map with alpha channel for Illumination",1232],["Assets needed:**",1232],["One Base texture with alpha channel for Specular Map",1232],["One Normal map normal map with alpha channel for Illumination Map",1232],["Assets needed:**",1232],["One Base texture, no alpha channel required",1232],["One Normal map normal map with alpha channel for Illumination Map & Parallax Depth combined",1232],["Note:**",1232],["One consideration of this shader is that the Bumpmap texture's alpha channel doubles as a Illumination and the Parallax Depth.",1232],["Assets needed:**",1232],["One Base texture with alpha channel for Specular Map",1232],["One Normal map normal map with alpha channel for Illumination Map & Parallax Depth combined",1232],["Note:**",1232],["One consideration of this shader is that the Bumpmap texture's alpha channel doubles as a Illumination and the Parallax Depth.",1232],["SelfIllumFamily",1232],["Self-Illuminated Parallax Diffuse",1233],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1233],["Performance",1233],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1233],["SelfIllumParallaxDiffuse",1233],["Self-Illuminated Parallax Specular",1234],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1234],["Performance",1234],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1234],["SelfIllumParallaxSpecular",1234],["Self-Illuminated Specular",1235],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1235],["Performance",1235],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1235],["SelfIllumSpecular",1235],["Self-Illuminated Vertex-Lit",1236],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1236],["Performance",1236],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1236],["SelfIllumVertexLit",1236],["ShaderLab: adding shader programs",1237],["In Unity, you usually write shader programs in HLSL. To add HLSL code to your shader asset, you put the code inside a shader code block.",1237],["This page contains information about using shader code blocks. For information about writing HLSL itself, see Using HLSL in Unity.",1237],["Note:** Unity also supports writing shader programs in other languages, although this is not generally needed or recommended. For more information, see Writing shaders.",1237],["Render pipeline compatibility",1237],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline ",1237],["HLSLPROGRAM Yes Yes Yes Yes ",1237],["HLSLINCLUDE Yes Yes Yes Yes ",1237],["CGPROGRAM Yes No No YesNot compatible with custom render pipelines that use the SRP Core package. ",1237],["CGINCLUDE Yes No No YesNot compatible with custom render pipelines that use the SRP Core package. ",1237],["Types of shader code blocks",1237],["To add HLSL code, you can use the following types of shader code block:",1237],["HLSLPROGRAM",1237],["CGPROGRAM",1237],["HLSLINCLUDE",1237],["CGINCLUDE",1237],["To understand which to use when, you must understand both their prefix (HLSL or CG), and their suffix (PROGRAM or INCLUDE).",1237],["HLSL and CG prefixes",1237],["The difference between the blocks that begin with HLSL or CG is:",1237],["The shader code blocks prefixed with CG are older. They include several of Unity's built-in shader include files by default, which can be convenient if you need this functionality. The built-in includes are only compatible with the Built-in Render Pipeline.",1237],["The shader code blocks prefixed with HLSL are newer. They do not include Unity's built-in shader include files by default, so you must manually include any library code that you want to use. They are suitable for use with any render pipeline.",1237],["For information on Unity's built-in shader include files, see Built-in shader include files.",1237],["PROGRAM and INCLUDE suffixes",1237],["The difference between the blocks that end with PROGRAM or INCLUDE is:",1237],["The shader code blocks that end with PROGRAM are called shader program blocks. You use them to write shader programs. You write your HLSL shader code inside these blocks, and then place them inside a Pass block in your ShaderLab code.",1237],["The shader code blocks that end with INCLUDE are called shader include blocks. You use them to share common code between shader program blocks in the same source file. You write HLSL shader code that you want to share inside these blocks, and then place them inside a Pass, SubShader or Shader block in your ShaderLab code. It works in a similar way to using an include in your HLSL code.",1237],["Using a shader program block",1237],["Signature Function ",1237],["HLSLPROGRAM    [source code for shader programs, written in HLSL]ENDHLSL Adds the HLSL shader program to the Pass that includes this shader program block. Does not include Unity's built-in shader include files. ",1237],["CGPROGRAM    [source code for shader programs, written in HLSL]ENDCG Adds the HLSL shader program to the Pass that includes this shader program block. Includes several of Unity's built-in shader include files by default, enabling you to use built-in variables and functions. ",1237],["Examples",1237],["Shader \"Examples/ExampleShader\"",1237],["SubShader",1237],["Pass",1237],["Name \"ExamplePassName\"",1237],["Tags { \"LightMode\" = \"ExampleLightModeTagValue\" }",1237],["// ShaderLab commands to set the render state go here",1237],["HLSLPROGRAM",1237],["// HLSL shader code goes here",1237],["ENDHLSL",1237],["Using a shader include block",1237],["Signature Function ",1237],["HLSLINCLUDE    [HLSL code that you want to share]ENDHLSL Unity includes this code in all shader programs that are defined in HLSLPROGRAM blocks, anywhere in this source file. ",1237],["CGINCLUDE    [HLSL code that you want to share]ENDCG Unity includes this code in all shader programs that are defined in CGPROGRAM blocks, anywhere in this source file. ",1237],["Examples",1237],["Shader \"Examples/ExampleShader\"",1237],["SubShader",1237],["HLSLINCLUDE",1237],["// HLSL code that you want to share goes here",1237],["ENDHLSL",1237],["Pass",1237],["Name \"ExampleFirstPassName\"",1237],["Tags { \"LightMode\" = \"ExampleLightModeTagValue\" }",1237],["// ShaderLab commands to set the render state go here",1237],["HLSLPROGRAM",1237],["// This HLSL shader program automatically includes the contents of the HLSLINCLUDE block above",1237],["// HLSL shader code goes here",1237],["ENDHLSL",1237],["Pass",1237],["Name \"ExampleSecondPassName\"",1237],["Tags { \"LightMode\" = \"ExampleLightModeTagValue\" }",1237],["// ShaderLab commands to set the render state go here",1237],["HLSLPROGRAM",1237],["// This HLSL shader program automatically includes the contents of the HLSLINCLUDE block above",1237],["// HLSL shader code goes here",1237],["ENDHLSL",1237],["ShaderLab: commands",1238],["This page contains information on using commands in the ShaderLab language.",1238],["ShaderLab commands fall into these categories:",1238],["Commands for setting the render state on the GPU.",1238],["Commands that create a Pass with a specific purpose.",1238],["Legacy \"fixed function style\" commands that allow you to create shader programs without writing HLSL.",1238],["You can group ShaderLab commands together with the Category block.",1238],["Commands for setting render state",1238],["Use these commands within a Pass block to set the render state for that Pass, or within a SubShader block to set the render state for that SubShader and any Passes that it contains.",1238],["AlphaToMask: sets the alpha-to-coverage mode.",1238],["Blend: enables and configures alpha blending.",1238],["BlendOp: sets the operation used by the Blend command.",1238],["ColorMask: sets the color channel writing mask.",1238],["Conservative: enables and disables conservative rasterization.",1238],["Cull: sets the polygon culling mode.",1238],["Offset: sets the polygon depth offset.",1238],["Stencil: configures the stencil test, and what to write to the stencil buffer.",1238],["ZClip: sets the depth clip mode.",1238],["ZTest: sets the depth testing mode.",1238],["ZWrite: sets the depth buffer writing mode.",1238],["Pass commands",1238],["Use these commands in a SubShader to define a Pass with a specific purpose.",1238],["UsePass defines a Pass that imports the contents of a named Pass from another Shader object.",1238],["GrabPass creates a Pass that grabs the contents of the screen into a texture, for use in a subsequent Pass.",1238],["Legacy \"fixed function style\" commands",1238],["These are documented on the page ShaderLab legacy functionality.",1238],["ShaderLab legacy functionality",1239],["ShaderLab includes a number of \"fixed-function style\" commands that allow you to write shaders without using any HLSL code.",1239],["Note**: These commands are legacy, and are documented for backwards compatibility only. If your Shader object source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.",1239],["6 Sided skybox",1240],["This skybox Shader generates a skybox from six separate Textures. Each texture represents a view of the sky along a particular world axis. To illustrate this, think of the Scene as being inside a cube. Each Texture represents one of the interior faces of the cube and all six combine to create a seamless environment.",1240],["For information on how to create a Material that uses this skybox Shader, as well as details on how to render the skybox in your Scene, see Using skyboxes.",1240],["Render pipeline compatibility",1240],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1240],["------------------ ---------------------------- ----------------------------------- ------------------------------------------ ",1240],["6 Sided skybox Yes Yes No ",1240],["Prerequisite Textures",1240],["To create a 6 Sided skybox, you need six individual Textures that, when combined, map to a net layout like:",1240],["To generate the best ambient lighting, the Textures should use a high dynamic range (HDR).",1240],["Properties",1240],["Property Description ",1240],["------------------------------------ ------------------------------------------------------------ ",1240],["Tint Color The color to tint the skybox to. Unity adds this color to the Textures to change their appearance without altering the base Texture files. ",1240],["Exposure Adjusts the skybox's exposure. This allows you to correct tonal values in the skybox Textures. Larger values produce a more exposed, seemingly brighter, skybox. Smaller values produce a less exposed, seemingly darker, skybox. ",1240],["Rotation The rotation of the skybox around the positive y-axis. This changes the orientation of your skybox and is useful if you want a specific section of the skybox to be behind a particular part of your Scene. ",1240],["Front [+Z] (HDR) The Texture that represents the face of the skybox in the direction of the world's positive z-axis. In a new Unity Scene, this is in front of the default Camera. ",1240],["Back [-Z] (HDR) The Texture that represents the face of the skybox in the direction of the world's negative z-axis. In a new Unity Scene, this is behind the default Camera. ",1240],["Left [+X] (HDR) The Texture that represents the face of the skybox in the direction of the world's positive x-axis. In a new Unity Scene, this is to the left of the default Camera. ",1240],["Right [-X] (HDR) The Texture that represents the face of the skybox in the direction of the world's negative x-axis. In a new Unity Scene, this is to the right of the default Camera. ",1240],["Up [+Y] (HDR) The Texture that represents the face of the skybox in the direction of the world's positive y-axis. In a new Unity Scene, this is above the default Camera. ",1240],["Down [-Y] (HDR) The Texture that represents the face of the skybox in the direction of the world's negative y-axis. In a new Unity Scene, this is below the default Camera. ",1240],["Render Queue Determines the order in which Unity draws GameObjects. For more information on Render Queue, see SL-SubShaderTags. ",1240],["Double Sided Global Illumination Specifies whether the lightmapper accounts for both sides of the geometry when it calculates Global Illumination. When true, if you use the Progressive Lightmapper, back faces bounce light using the same emission and albedo as front faces. ",1240],["Cubemap skybox",1241],["This skybox Shader generates a skybox from a single Cubemap Asset. This Cubemap consists of six square Textures and represents the entire view of the sky from every direction.",1241],["For information on how to create a Material that uses this skybox Shader, as well as details on how to render the skybox in your Scene, see Using skyboxes.",1241],["Render pipeline compatibility",1241],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1241],["------------------ ---------------------------- ----------------------------------- ------------------------------------------ ",1241],["Cubemap skybox Yes Yes No ",1241],["Properties",1241],["Property Description ",1241],["------------------------------------ ------------------------------------------------------------ ",1241],["Tint Color The color to tint the skybox to. Unity adds this color to the Textures to change their appearance without altering the base Texture files. ",1241],["Exposure Adjusts the skybox's exposure. This allows you to correct tonal values in the skybox Textures. Larger values produce a more exposed, seemingly brighter, skybox. Smaller values produce a less exposed, seemingly darker, skybox. ",1241],["Rotation The rotation of the skybox around the positive y-axis. This changes the orientation of your skybox and is useful if you want a specific section of the skybox to be behind a particular part of your Scene. ",1241],["Cubemap (HDR) The Cubemap Asset this Material uses to represent the sky. For information on how to create a Cubemap Asset from your input Textures, see Cubemap Asset. ",1241],["Render Queue Determines the order in which Unity draws GameObjects. For more information on Render Queue, see SL-SubShaderTags. ",1241],["Double Sided Global Illumination Specifies whether the lightmapper accounts for both sides of the geometry when it calculates Global Illumination. When true, if you use the Progressive Lightmapper, back faces bounce light using the same emission and albedo as front faces. ",1241],["Panoramic skybox",1242],["To generate a skybox, the Panoramic Shader wraps a single Texture spherically around the Scene.",1242],["For information on how to create a Material that uses this skybox Shader, as well as details on how to render the skybox in your Scene, see Using skyboxes.",1242],["Render pipeline compatibility",1242],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1242],["-------------------- ---------------------------- ----------------------------------- ------------------------------------------ ",1242],["Panoramic skybox Yes Yes No ",1242],["Prerequisite Textures",1242],["To create a Panoramic skybox, you need a single 2D Texture that uses latitude-longitude (cylindrical) mapping, like so:",1242],["To make sure the Texture is 2D:",1242],["In the Project window, select the Texture.",1242],["In the Inspector, make sure the Texture Shape is set to 2D.",1242],["To generate the best ambient lighting, the Texture should use a high dynamic range (HDR).",1242],["Properties",1242],["Property Description ",1242],["------------------------------------ ------------------------------------------------------------ ",1242],["Tint Color The color to tint the skybox to. Unity adds this color to the Textures to change their appearance without altering the base Texture files. ",1242],["Exposure Adjusts the skybox's exposure. This allows you to correct tonal values in the skybox Textures. Larger values produce a more exposed, seemingly brighter, skybox. Smaller values produce a less exposed, seemingly darker, skybox. ",1242],["Rotation The rotation of the skybox around the positive y-axis. This changes the orientation of your skybox and is useful if you want a specific section of the skybox to be behind a particular part of your Scene. ",1242],["Spherical (HDR) The Texture this Material spherically wraps around the Scene to represent the sky.For information on how to create a Cubemap Asset from your input Textures, see Cubemap Asset. ",1242],["Mapping Specifies the method this Material uses to project the Texture to create the skybox. The options are:6 sided: Uses a net format to map the Texture to the skybox.Latitude Longitude Layout: Uses a cylindrical wrapping method to map the Texture to the skybox. ",1242],["Image Type Specifies the angle around the y-axis that this Material projects the skybox to. The options are:180: Draws the Spherical Texture as a hemisphere with the peak in the direction of the positive z-axis. To change which side of the Scene this Material draws the Texture to, modify the Rotation property. By default, the back of the skybox is black, but this Material can draw a duplicate of the Spherical Texture on the back instead. To do this, enable Mirror on Back.360: Draws the Texture as a full sphere representation that wraps around the entire Scene. ",1242],["- Mirror on Back Specifies whether the Material should duplicate the Spherical Texture on the back of the skybox instead of drawing it as black.This option only appears when Image Type is set to 180. ",1242],["Render Queue Determines the order in which Unity draws GameObjects. For more information on Render Queue, see SL-SubShaderTags. ",1242],["Double Sided Global Illumination Specifies whether the lightmapper accounts for both sides of the geometry when it calculates Global Illumination. When true, if you use the Progressive Lightmapper, back faces bounce light using the same emission and albedo as front faces. ",1242],["Procedural skybox",1243],["The Procedural skybox Shader does not require any input Textures and instead generates a skybox purely from the properties set in the Material Inspector.",1243],["For information on how to create a Material that uses this skybox Shader, as well as details on how to render the skybox in your Scene, see Using skyboxes.",1243],["Render pipeline compatibility",1243],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1243],["--------------------- ---------------------------- ----------------------------------- ------------------------------------------ ",1243],["Procedural skybox Yes Yes No ",1243],["",1243],["Properties",1243],["Property Description ",1243],["------------------------ ------------------------------------------------------------ ",1243],["Sun The method Unity uses the generate a sun disk in the skybox. The options are:• None: Disables the sun disk in the skybox.• Simple: Draws a simplified sun disk into the skybox• High Quality: Draws a sun disk into the skybox. This is similar to the Simple sun disk, but with this mode, you can use Sun Size Convergence to further customize the appearance of the sun disk. ",1243],["Sun Size The size modifier for the sun disk. Larger values make the sun disk appear larger and setting this value to 0 makes the sun disk disappear. ",1243],["Sun Size Convergence The size convergence of the sun. Smaller values make the sun disk appear larger. This property only appears if you set Sun to High Quality. ",1243],["Atmosphere Thickness The density of the atmosphere. An atmosphere of higher density absorbs more light. Unity uses the Rayleigh scattering method to absorb light. ",1243],["Sky Tint The color to tint the sky to. ",1243],["Ground The color of the ground (the area below the horizon). ",1243],["Exposure Adjusts the sky's exposure. This allows you to change tonal values in the skybox this Material generates. Larger values produce a more exposed, seemingly brighter, skybox. Smaller values produce a less exposed, seemingly darker, skybox. ",1243],["Positioning the sun",1243],["If you choose to render a sun disk in your skybox (see Sun in Properties), this Shader uses the rotation of the active Light to position the sun in the skybox. To find the active Light:",1243],["Open the Lighting window (menu: Window > Rendering > Lighting).",1243],["Navigate to the Environment tab.",1243],["The Light assigned to Sun Source is your Scene's active Light.",1243],["If there is no Light assigned to Sun Source, assign the Light in your Scene you want to become the active Light to Sun Source.",1243],["You can use this behaviour to create a simple day-night cycle. To do this, continuously rotate your main Directional Light around a particular axis.",1243],["Standard Particle Shaders",1244],["The Unity Standard Particle Shaders are built-in shaders that enable you to render a variety of Particle System effects. These shaders provide various particle-specific features that aren't available with the Standard Shader.",1244],["To use a Particle Shader:",1244],["Select the Material you want to apply the shader to. For example, you could apply a Flame Material to a Fire Particle System effect.",1244],["In the Material’s Inspector, select Shader Particles.",1244],["Choose the Particle Shader that you want to use, such as Standard Surface.",1244],["Enable and disable the various Particle Shader properties in the Inspector.",1244],["Properties",1244],["The Standard Particle Shaders have the same set of properties as the Standard Shader (or a subset of those properties, depending on the Shader). This page describes the properties and options that are additional to the Standard Shader properties. For information on the Standard Shader properties, see documentation on Material parameters.",1244],["Blending Options",1244],["All of the Standard Particle Shaders have Blending Options that enable you to blend particles with the objects surrounding them in different ways.",1244],["Property: Function: ",1244],["Rendering Mode The Standard Particle Shaders can have the following Rendering Mode options, which control how the final color from the shader is combined with the background color:Additive: Adds the background and final particle color together. This is useful for glow effects, like those you might use for fire or magic spells.Subtractive: Subtracts the final particle color from the background, which darkens the particles against the background. This is useful for foggy effects, like those you might use for steam, or thick black smoke.Modulate: Multiplies the final particle color with the background color. This is useful for portals and light-rays. ",1244],["Color Mode Control how the albedo texture is combined with the particle color. The Color Mode options are:Multiply: Multiplies the particle albedo color with the particle texture. Additive: Preserves a hot spot, such as a white part of the particle texture, while adding the particle albedo color to the darker pixels of the texture. Subtractive: Subtracts the particle albedo color from the particle texture. Overlay: Gives more contrast to the original color and adds the particle albedo color to the gray values. This is similar to Additive, but preserves the original colors.Color: Uses the alpha channel from the particle texture and the albedo color from the particle itself. This is useful for overwriting particles with the same color, while keeping their original \"shape\".Difference: Subtracts the particle albedo color from the texture, or the texture from the color, to get a positive value. This is useful for a range of effects where you want a more dynamic color change. See image below table for a demonstration of this effect. ",1244],["Main Options",1244],["Property Function ",1244],["Flip-Book Mode Render flip-books as individual frames or blend the frames together to give smoother animations. Set to either:Simple - Render frames in a flip-book as a sequence of individual frames.Blended - Blend the frames in a flip-book to render the flip-book as a smooth animation. ",1244],["Two Sided Render both the front and back faces of the particle. When disabled, Unity only renders the front face of the geometry, which is the face in the camera’s view. ",1244],["Enable Soft Particles Fade out particles when they get close to the surface of objects written into the depth buffer. This is useful for avoiding hard edges when particles intersect with opaque geometry. For example, by enabling soft particles, you can make the particle system emit particles close to an opaque surface without causing harsh intersections with the surface: ",1244],["Enable Camera Fading Fade out particles when they get close to the camera. Set to:Near fade - The closest distance particles can get to the camera before they fade from the camera’s view.Far fade - The farthest distance particles can get away from the camera before they fade from the camera’s view. ",1244],["Enable Distortion Make particles perform fake refraction with the objects drawn before them. Distortion is ideal for creating heat haze effects for fire, for example:This effect can be quite expensive because it captures the current frame to a texture. ",1244],["Standard Particles Surface Shader",1244],["This shader comes with functionality similar to the Standard Shader, but works especially well with particles. Like the Standard Shader, it supports Physically Based Shading. It does not include features that are unsuitable for dynamic particles, such as lightmapping.",1244],["Standard Particles Unlit Shader",1244],["This simple shader is faster than the Surface Shader. It supports all of the generic particle controls, such as flipbook blending and distortion, but does not perform any lighting calculations.",1244],["2017-10-16 ",1244],["Standard Particle Shaders added in 2017.3 NewIn20173",1244],["StandardParticleShaders",1244],["Standard Shader",1245],["The Unity Standard Shader is a built-in shader with a comprehensive set of features. It can be used to render \"real-world\" objects such as stone, wood, glass, plastic and metal, and supports a wide range of shader types and combinations. Its features are enabled or disabled by simply using or not using the various texture slots and parameters in the material editor.",1245],["The Standard Shader also incorporates an advanced lighting model called Physically Based Shading. Physically Based Shading (PBS) simulates the interactions between materials and light in a way that mimics reality. PBS has only recently become possible in real-time graphics. It works at its best in situations where lighting and materials need to exist together intuitively and realistically.",1245],["The idea behind our Physically Based Shader is to create a user-friendly way of achieving a consistent, plausible look under different lighting conditions. It models how light behaves in reality, without using multiple ad-hoc models that may or may not work. To do so, it follows principles of physics, including energy conservation (meaning that objects never reflect more light than they receive), Fresnel reflections (all surfaces become more reflective at grazing angles), and how surfaces occlude themselves (what is called Geometry Term), among others.",1245],["The Standard Shader is designed with hard surfaces in mind (also known as \"architectural materials\"), and can deal with most real-world materials like stone, glass, ceramics, brass, silver or rubber. It will even do a decent job with non-hard materials like skin, hair and cloth.",1245],["With the Standard Shader, a large range of shader types (such as Diffuse, Specular, Bumped Specular, Reflective) are combined into a single shader intended to be used across all material types. The benefit of this is that the same lighting calculations are used in all areas of your scene, which gives a realistic, consistent and believable distribution of light and shade across all models that use the shader.",1245],["The Standard Shader lighting math implementation uses the Disney model for diffuse component, GGX model for specular, with Smith Joint GGX visibility term and Schlick Fresnel appromixation.",1245],["Terminology",1245],["There are a number of concepts that are very useful when talking about Physically Based Shading in Unity. These include:",1245],["Energy conservation - This is a physics-based concept that ensures objects never reflect more light than they receive. The more specular a material is, the less diffuse it should be; the smoother a surface is, the stronger and smaller the highlight gets.",1245],["High Dynamic Range (HDR) - This refers to colours outside the usual 0-1 range. For instance, the sun can easily be ten times brighter than a blue sky. For an in-depth discussion, see the Unity Manual HDR page.",1245],["StandardShader",1245],["Transparent Bumped Diffuse",1246],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1246],["Performance",1246],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1246],["TransBumpedDiffuse",1246],["Transparent Bumped Specular",1247],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1247],["One consideration for this shader is that the Base texture's alpha channel defines both the Transparent areas as well as the Specular Map.",1247],["Performance",1247],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1247],["TransBumpedSpecular",1247],["Transparent Cutout Bumped Diffuse",1248],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1248],["Performance",1248],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1248],["TransCutBumpedDiffuse",1248],["Transparent Cutout Bumped Specular",1249],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1249],["One consideration for this shader is that the Base texture's alpha channel defines both the Transparent areas as well as the Specular Map.",1249],["Performance",1249],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1249],["TransCutBumpedSpecular",1249],["Transparent Cutout Diffuse",1250],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1250],["Performance",1250],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1250],["TransCutDiffuse",1250],["Transparent Cutout Specular",1251],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1251],["One consideration for this shader is that the Base texture's alpha channel defines both the Transparent areas as well as the Specular Map.",1251],["Performance",1251],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1251],["TransCutSpecular",1251],["Transparent Cutout Vertex-Lit",1252],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1252],["Performance",1252],["Generally, this shader is very cheap to render. For more details, please view the Shader Peformance page.",1252],["TransCutVertexLit",1252],["Transparent Diffuse",1253],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1253],["Performance",1253],["Generally, this shader is cheap to render. For more details, please view the Shader Peformance page.",1253],["TransDiffuse",1253],["Transparent Parallax Diffuse",1254],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1254],["Performance",1254],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1254],["TransParallaxDiffuse",1254],["Transparent Parallax Specular",1255],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1255],["One consideration for this shader is that the Base texture's alpha channel defines both the Transparent areas as well as the Specular Map.",1255],["Performance",1255],["Generally, this shader is on the more expensive rendering side. For more details, please view the Shader Peformance page.",1255],["TransParallaxSpecular",1255],["Transparent Cutout Shader Family",1256],["Note.** Unity 5 introduced the Standard Shader which replaces these shaders.",1256],["The Transparent Cutout shaders are used for objects that have fully opaque and fully transparent parts (no partial transparency). Things like chain fences, trees, grass, etc.",1256],["Assets needed:**",1256],["One Base texture with alpha channel for Transparency Map",1256],["Assets needed:**",1256],["One Base texture with alpha channel for Transparency Map",1256],["Assets needed:**",1256],["One Base texture with alpha channel for combined Transparency Map/Specular Map",1256],["Note:**",1256],["One limitation of this shader is that the Base texture's alpha channel doubles as a Specular Map for the Specular shaders in this family.",1256],["Assets needed:**",1256],["One Base texture with alpha channel for Transparency Map",1256],["One Normal map normal map, no alpha channel required",1256],["Assets needed:**",1256],["One Base texture with alpha channel for combined Transparency Map/Specular Map",1256],["One Normal map normal map, no alpha channel required",1256],["Note:**",1256],["One limitation of this shader is that the Base texture's alpha channel doubles as a Specular Map for the Specular shaders in this family.",1256],["TransparentCutoutFamily",1256],["Transparent Shader Family",1257],["Note.** Unity 5 introduced the Standard Shader which replaces these shaders.",1257],["The Transparent shaders are used for fully- or semi-transparent objects. Using the alpha channel of the Base texture, you can determine areas of the object which can be more or less transparent than others. This can create a great effect for glass, HUD interfaces, or sci-fi effects.",1257],["Assets needed:**",1257],["One Base texture with alpha channel for Transparency Map",1257],["Assets needed:**",1257],["One Base texture with alpha channel for Transparency Map",1257],["Assets needed:**",1257],["One Base texture with alpha channel for combined Transparency Map/Specular Map",1257],["Note:**",1257],["One limitation of this shader is that the Base texture's alpha channel doubles as a Specular Map for the Specular shaders in this family.",1257],["Assets needed:**",1257],["One Base texture with alpha channel for Transparency Map",1257],["One Normal map normal map, no alpha channel required",1257],["Assets needed:**",1257],["One Base texture with alpha channel for combined Transparency Map/Specular Map",1257],["One Normal map normal map, no alpha channel required",1257],["Note:**",1257],["One limitation of this shader is that the Base texture's alpha channel doubles as a Specular Map for the Specular shaders in this family.",1257],["Assets needed:**",1257],["One Base texture with alpha channel for Transparency Map",1257],["One Normal map normal map with alpha channel for Parallax Depth",1257],["Assets needed:**",1257],["One Base texture with alpha channel for combined Transparency Map/Specular Map",1257],["One Normal map normal map with alpha channel for Parallax Depth",1257],["Note:**",1257],["One limitation of this shader is that the Base texture's alpha channel doubles as a Specular Map for the Specular shaders in this family.",1257],["TransparentFamily",1257],["Transparent Specular",1258],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1258],["One consideration for this shader is that the Base texture's alpha channel defines both the Transparent areas as well as the Specular Map.",1258],["Performance",1258],["Generally, this shader is moderately expensive to render. For more details, please view the Shader Peformance page.",1258],["TransSpecular",1258],["Transparent Vertex-Lit",1259],["Note.** Unity 5 introduced the Standard Shader which replaces this shader.",1259],["Performance",1259],["Generally, this shader is very cheap to render. For more details, please view the Shader Peformance page.",1259],["TransVertexLit",1259],["Shader variant collections",1260],["A shader variant collection is effectively a list of shader variants. Use shader variant collections to prewarm shader variants, or to ensure that shader variants that are required at runtime but not referenced in a scene are not excluded (\"stripped\") from your build.",1260],["Creating a shader variant collection asset",1260],["You can create a shader variant collection asset in the following ways:",1260],["In the Create Asset menu, choose Shader > Shader Variant Collection.",1260],["The Unity Editor can track which shader variants your application uses when it runs, and automatically create a shader variant collection asset that contains them. For more information, see Graphics Settings: Shader loading.",1260],["Viewing and editing a shader variant collection",1260],["When you select a shader variant collection asset in your project, you can view and edit it in the Inspector.",1260],["Use the controls to build a list of Pass types and shader keyword combinations to load in advance.",1260],["You can also configure a shader variant collection asset using the ShaderVariantCollection API.",1260],["Prewarming a shader variant collection",1260],["To avoid visible stalls at performance-intensive times, Unity can ask the graphics driver to create GPU representations of shader variants before they are first needed. This is called prewarming. For more information on prewarming the shader variants in a shader variant collection, see Shader loading: Prewarming shader variants.",1260],["Shader variant stripping",1261],["You can prevent shader variants from being compiled. This is called stripping. Stripping unneeded variants can greatly reduce build times, file size, shader loading times, and runtime memory usage. In larger projects, or projects with complex shaders, this is a very important consideration.",1261],["If you strip a shader variant that a Material needs at runtime, Unity tries to choose a similar shader variant that's available. To avoid this, use the following approaches:",1261],["\nIf you use a shader_feature keyword, don't use the keyword to change which code branch executes at runtime.\n",1261],["\nCheck what shader variants you have to help you see which shader variants and keyword combinations Materials need at runtime.\n",1261],["\nAdd shaders to the Always Included Shaders list in Graphics settings.\n",1261],["Limiting shader variants when you declare shader keywords",1261],["The way that you declare shader keywords can limit the number of variants that they produce:",1261],["Use shader_feature instead of multi_compile where possible - see conditionals in shaders.",1261],["Ensure that you don't define unused keywords with multi_compile.",1261],["Indicate when shader keywords only affect a given shader stage.",1261],["For information on declaring keywords in hand-coded shaders, see Declaring and using shader keywords in HLSL. For information on declaring keywords in Shader Graph, see Shader Graph: Blackboard.",1261],["Use preprocessor macros to limit variants by platform",1261],["In Unity 2021.3 and above, you can create conditional shader code using a target platform preprocessor macro, so you can limit variants on platforms with limited memory.",1261],["The code sample does the following:",1261],["\nIf you build for a SHADER_API_DESKTOP platform, Unity builds variants for every possible keyword combination.\n",1261],["\nIf you build for another platform, Unity builds only variants for keyword combinations the Materials in your build use.\n",1261],["ifdef SHADER_API_DESKTOP",1261],["pragma multi_compile _ RED GREEN BLUE WHITE",1261],["else",1261],["pragma shader_feature RED GREEN BLUE WHITE",1261],["endif",1261],["You can use target platform preprocessor macros to select between shader_feature, multi_compile and dynamic_branch. For more information on when to use each type of conditional, see Shader Conditionals.",1261],["Create user-controlled quality settings",1261],["When you build for console and mobile platforms that have limited memory, you can limit shader variants by only allowing users to switch between a small number of quality settings.",1261],["For example, if you use the keywords DYNAMIC_LIGHTING, SOFT_SHADOWS and HIGH_QUALITY_LIGHTMAPS, you can create the following:",1261],["\nA 'low quality' setting that turns on DYNAMIC_LIGHTING.\n",1261],["\nA 'high quality' setting that turns on DYNAMIC_LIGHTING, SOFT_SHADOWS and HIGH_QUALITY_LIGHTMAPS.\n",1261],["This means Unity won't create shader variants for DYNAMIC_LIGHTING when it's off, or the many different combinations of the 3 keywords being on and off.",1261],["You can use target platform preprocessor macros to conditionally create fewer quality settings and fewer variants on platforms with limited memory. For example the following code sample will allow users to switch between 8 permutations of settings on SHADER_API_DESKTOP platforms, but only 2 on SHADER_API_MOBILE platforms.",1261],["if SHADER_API_DESKTOP",1261],["pragma multi_compile SHADOWS_LOW SHADOWS_HIGH",1261],["pragma multi_compile REFLECTIONS_LOW REFLECTIONS_HIGH",1261],["pragma multi_compile CAUSTICS_LOW CAUSTICS_HIGH",1261],["elif SHADER_API_MOBILE",1261],["pragma multi_compile QUALITY_LOW QUALITY_HIGH",1261],["pragma shader_feature CAUSTICS // Uses shader_feature, so Unity strips variants that use CAUSTICS if there are no Materials that use the keyword at build time.",1261],["endif",1261],["Stripping shader variants in the Editor UI",1261],["There are several places in the Unity Editor UI where you can configure shader stripping:",1261],["In the Graphics Settings window, configure the settings in the Shader stripping section:",1261],["Ensure that no unneeded shaders are included in the Always-included shaders setting.",1261],["Strip variants relating to GPU instancing, lightmapping, and fog.",1261],["In the Built-in Render Pipeline, if it is not important that your Tier settings are different, ensure that they are identical to each other. For more information, see Graphics tiers.",1261],["In the Universal Render Pipeline (URP), disable unused features in the URP Asset. For more information, see Shader stripping.",1261],["If you use the Universal Render Pipeline you can also do the following:",1261],["\nIn the Universal Render Pipeline Asset, disable rendering any features your project doesn't use.\n",1261],["\nEnable shader stripping.\n",1261],["If you use the High Definition Render Pipeline you can also do the following:",1261],["\nIn the High Definition Render Pipeline Asset, disable any rendering features your project doesn't use.\n",1261],["\nIn the Miscellaneous section of the HDRP Global Settings Window, disable Runtime Debug Shaders.\n",1261],["Stripping shader variants using Editor scripts",1261],["For shader variants that you can't strip in other ways, you can use the following APIs in an Editor script to perform build-time stripping:",1261],["IPreprocessShaders.OnProcessShader: receive a callback before Unity compiles a graphics shader Pass into a build.",1261],["IPreprocessComputeShaders.OnProcessComputeShader: receive a callback before Unity compiles a compute shader into a build.",1261],["For more information on this subject, see the Unity blog post Stripping scriptable shader variants",1261],["Branching, variants, and keywords",1262],["Sometimes, you want the same shader to do different things under different circumstances. When this happens, you use conditionals to define different behavior for different hardware.",1262],["This section of the manual contains information about how shader variants and keywords work, and when and how to use them.",1262],["Page Description ",1262],["",1262],["Conditionals in shaders An introduction to conditionals in shaders, including information on the different types of conditional, and when to use which one. ",1262],["Branching in shaders An introduction to static and dynamic branching in shaders. ",1262],["Shader variants An introduction to shader variants, and information on how to understand and control how many shader variants Unity compiles. ",1262],["Check how many shader variants you have Using logging and profiling tools to check how many shader variants Unity compiles, and identify ways you can remove (strip) variants. ",1262],["Shader keywords An introduction to shader keywords, and information on how to use them. ",1262],["Using shader keywords with C# scripts Working with shader keywords in C# scripts. ",1262],["Using shader keywords with the material Inspector Working with shader keywords in the Unity Editor, using the material Inspector. ",1262],["Shader variant stripping Preventing shader variants from being compiled to reduce build times, file size, shader loading times and runtime memory usage. ",1262],["Shader variant collections An introduction to shader variant collections, and information on how to use them. ",1262],["Shader variants",1263],["Shader variants, also sometimes called shader permutations, are one way of introducing conditional behavior into shader code.",1263],["Unity compiles shader source files into shader programs. Each compiled shader program has one or more variants: different versions of the shader program for different conditions. At runtime, Unity uses the variant that matches the current requirements. You configure variants using shader keywords.",1263],["For a general overview of conditionals in shader code and when to use which technique, see Conditionals in shader code. For more information on how Unity loads shader variants, see Shader loading.",1263],["Shaders with a large number of variants are called \"mega shaders\" or \"uber shaders\". Unity's Standard Shader is an example of such a shader.",1263],["Advantages and disadvantages of shader variants",1263],["The main advantage of shader variants is that they allow you to use runtime conditionals in your shader programs, without the GPU performance impact of dynamic branching. The main disadvantage of shader variants is that a large number of them can lead to both build time and runtime performance issues.",1263],["When Unity creates shader variants, it uses static branching to create multiple small, specialized shader programs. At runtime, Unity uses the shader program that matches the conditions. This means that you can use shader variants for code that would likely result in reduced GPU performance in a dynamic branch, without suffering a GPU performance penalty.",1263],["However, a large number of variants can result in increased build times, file sizes, runtime memory usage, and loading times. It also leads to greater complexity when manually preloading (\"prewarming\") shaders. When a project contains a very large number of shader variants, these issues can lead to significant problems with performance and workflow.",1263],["Warning:** It is easy to inadvertently create an excessively large number of shader variants, which can lead to significant performance problems. It is therefore very important to understand how Unity determines the number of shader variants, how to exclude (\"strip\") unneeded variants from compilation, and when to use other types of conditionals in shaders.",1263],["",1263],["Number of shader variants",1263],["At build time, Unity compiles one set of shader variants for each graphics API for the current build target. The number of variants for each combination of graphics API and build target depends on your shader source files, and your use of shader keywords.",1263],["You can check how many shader variants you have.",1263],["Graphics APIs",1263],["Unity compiles one set of shader variants for each graphics API in the list for the current build target. The shaders differ for each combination of build target and graphics API; for example, Unity compiles different shaders for Metal on iOS than for Metal on macOS.",1263],["Some shader programs or keywords might only target a given graphics API or a given build target, so the total number of variants for each combination of graphics API and build target can differ; however, the process for compiling these variants is the same.",1263],["To view and edit the list of graphics APIs for your current build target, use the Player Settings window, or the PlayerSettings API.",1263],["Number of shader programs",1263],["Unity must determine how many shader programs to compile for the current combination of build target and graphics API.",1263],["For each shader source file that is included in your build, Unity determines how many unique shader programs it defines:",1263],["A compute shader asset defines a single shader program.",1263],["In a hand-coded shader, the number of shader programs depends on your code. The total comprises:",1263],["All shader stages in all Passes in the source file itself. For example, each vertex stage defines one shader program; each fragment stage defines one shader program; and so on.",1263],["All shader stages in all Passes in dependencies of the source file. This comprises all fallback shaders, and all Passes that are included using the UsePass command.",1263],["In a Shader Graph shader, the number of shader programs depends on the code that Unity generates from your graph. To see the shader code that Unity generates, context-click the Shader Graph asset and select See generated code. You can then determine the total number of shader programs in the same way that you would for a hand-coded shader.",1263],["Note:** A shader source file is included in a build if it is referenced in a scene in that build, referenced by something in the Resources folder, or included in the Always-included shaders section of the Graphics Settings window.",1263],["Keywords that affect a shader program",1263],["When Unity has determined how many shader programs it must compile for the current build target and graphics API, it then determines how many shader variants it must compile for each shader program.",1263],["For each shader program, Unity determines the combination of shader keywords that result in different variants. This comprises:",1263],["The sets of shader variant keywords that are declared in the source file for that shader. For more information, see Declaring shader keywords.",1263],["The sets of shader keywords that Unity adds automatically. For more information, see Unity's predefined shader keywords.",1263],["The number of shader variants that Unity compiles for a shader program is the product of the keyword sets; that is to say, Unity compiles one variant for every combination that includes one element from each set.",1263],["For example, this set contains three shader variant keywords:",1263],["COLOR_RED",1263],["COLOR_GREEN",1263],["COLOR_BLUE",1263],["This set contains four shader variant keywords:",1263],["QUALITY_LOW",1263],["QUALITY_MEDIUM",1263],["QUALITY_HIGH",1263],["QUALITY_ULTRA",1263],["A shader program affected by those shader variant keywords will result in the following twelve variants:",1263],["COLOR_RED and QUALITY_LOW",1263],["COLOR_RED and QUALITY_MEDIUM",1263],["COLOR_RED and QUALITY_HIGH",1263],["COLOR_RED and QUALITY_ULTRA",1263],["COLOR_GREEN and QUALITY_LOW",1263],["COLOR_GREEN and QUALITY_MEDIUM",1263],["COLOR_GREEN and QUALITY_HIGH",1263],["COLOR_GREEN and QUALITY_ULTRA",1263],["COLOR_BLUE and QUALITY_LOW",1263],["COLOR_BLUE and QUALITY_MEDIUM",1263],["COLOR_BLUE and QUALITY_HIGH",1263],["COLOR_BLUE and QUALITY_ULTRA",1263],["The number of variants that Unity compiles can grow very rapidly as you add more sets of shader variant keywords. The term for this very rapid growth is combinatorial explosion.",1263],["For example, consider a fairly typical use case, where a shader has a number of sets of shader variant keywords that contain two keywords each (<feature name>_ON and <feature name>_OFF). If the shader has two such sets of keywords, this results in four variants. If the shader has ten such sets of keywords, this results in 1024 variants.",1263],["",1263],["Deduplication of shader variants",1263],["After compilation, Unity automatically identifies identical variants within the same Pass, and ensures that these identical variants point to the same bytecode. This is called deduplication.",1263],["Deduplication prevents identical variants in the same Pass from increasing file size; however, identical variants still result in wasted work during compilation, and increased memory usage and shader loading times at runtime. With this in mind, it is always best to strip unneeded variants.",1263],["Example shaders",1264],["How you write custom shaders in Unity depends on the render pipeline you use:",1264],["For guidance and examples for the Built-in Render Pipeline, see Example shaders for the Built-in Render Pipeline.",1264],["For guidance and examples for the the Universal Render Pipeline (URP), see URP: Writing custom shaders.",1264],["It is not recommended to write your own shader programs for HDRP, due to the complexity of the code. Instead, use Shader Graph to create Shader objects without writing code.",1264],["For an example of a simple vertex and fragment shader for a custom Scriptable Render Pipeline, see Creating a simple render loop in a custom render pipeline.",1264],["Writing shaders",1265],["This section contains information on the following subjects:",1265],["Shaders",1266],["This section contains information on working with shaders in Unity.",1266],["![Shaders created using Unity's Shader Graph tool.",1266],["](../uploads/Main/shaders-example.png)",1266],["Page Description ",1266],["",1266],["Shaders core concepts The fundamentals of understanding and working with shaders in Unity. ",1266],["Built-in shaders How to use the prebuilt shaders that ship with Unity. ",1266],["Using Shader Graph How to use Shader Graph, a tool that lets you create shaders without writing code. ",1266],["Writing shaders How to create shaders by writing code. ",1266],["Shader performance and profiling How to debug and analyse the performance of your shaders at runtime. ",1266],["Further resources",1266],["Shaders core concepts",1267],["This section contains information on the fundamentals of working with shaders in Unity.",1267],["Page Description ",1267],["",1267],["Shaders introduction Introductory information about shaders, and key terminology. ",1267],["The Shader class An overview of the Shader class, which acts as a wrapper for regular graphics shader programs. ",1267],["Shader assets Information about assets that represent an instance of the Shader class. ",1267],["Shader compilation How and when Unity compiles shaders. ",1267],["Shader loading How and when Unity loads shaders. ",1267],["Shader variants and keywords An introduction to shader variants and shader keywords, and information on working with them. ",1267],["Replacing shaders at runtime In the Built-in Render Pipeline, you can tell a Camera to change the shader that it uses to render certain geometry at runtime. ",1267],["Compute shaders Working with compute shaders in Unity. ",1267],["Error and loading shaders The special shaders that Unity uses when it can't use regular shaders. ",1267],["Shadow Cascades",1268],["Shadow Cascades help solve a problem called perspective aliasing, where real-time shadows from Directional Lights appear pixelated when they are near the Camera.",1268],["Shadow Cascades only work with Directional Lights.",1268],["Perspective aliasing",1268],["A Directional Light typically simulates sunlight, and a single Directional Light can illuminate the entire Scene. This means that its shadow map covers a large portion of the Scene, which can lead to a problem called perspective aliasing. Perspective aliasing means that shadow map pixels close to the Camera look enlarged and chunky compared to those farther away.",1268],["Perspective aliasing occurs because different areas of the shadow map are scaled disproportionately by the Camera's perspective. The shadow map from a light needs to cover only the part of the Scene visible to the Camera, which is defined by the Camera's view frustum. If you imagine a simple case where the directional light comes directly from above, you can see the relationship between the frustum and the shadow map.",1268],["In this simplified example, the distant end of the frustum is covered by 20 pixels of shadow map, while the near end is covered by only 4 pixels. However, both ends appear the same size on-screen. The result is that the resolution of the map is effectively much less for shadow areas that are close to the Camera.",1268],["How Shadow Cascades work",1268],["Perspective aliasing is less noticeable when you use Soft Shadows, and when you use a higher resolution for the shadow map. However, these solutions use more memory and bandwidth while rendering.",1268],["When using Shadow Cascades, Unity splits the frustum area into two zones based on distance from the Camera. The zone at the near end uses a separate shadow map at a reduced size (but with the same resolution). These staged reductions in shadow map size are known as cascaded shadow maps (sometimes called Parallel Split Shadow Maps).",1268],["Using Shadow Cascades",1268],["When you configure Shadow Cascades in your Project, you can choose to use 0, 2 or 4 cascades. Unity calculates the positioning of the cascades within the Camera's frustum.",1268],["The more cascades you use, the less your shadows are affected by perspective aliasing. Increasing the number increases the rendering overhead. However, this overhead is still less than it would be if you were to use a high resolution map across the whole shadow.",1268],["In the Built-in Render Pipeline, configure Shadow Cascades per quality level property in your Project's Quality Settings.",1268],["In the Universal Render Pipeline (URP), configure Shadow Cascades in the Universal Render Pipeline Asset.",1268],["In the High Definition Render Pipeline (HDRP), configure Shadow Cascades for each Volume.",1268],["Configuring shadows",1269],["You can configure the real-time and baked shadow settings for each Light component using the Inspector.",1269],["Each Mesh Renderer in the Scene also has a Cast Shadows and a Receive Shadows property, which must be enabled as required.",1269],["Enable Cast Shadows by selecting On from the drop-down menu to enable or disable shadow casting for the mesh. Alternatively, select Two Sided to allow shadows to be cast by either side of the surface (so backface culling is ignored for shadow casting purposes), or Shadows Only to allow shadows to be cast by an invisible GameObject.",1269],["Shadow Distance",1270],["Use the Shadow Distance property to determine the distance from the Camera up to which Unity renders real-time shadows.",1270],["Shadows from GameObjects become less noticeable the farther the GameObjects are from the Camera. This is both because the shadows appear smaller on the screen, and because distant GameObjects are usually not the focus of attention. You can take advantage of this effect by disabling real-time shadow rendering for distant GameObjects. This saves on wasted rendering operations, and can improve runtime performance. Additionally, the Scene often looks better without distant shadows.",1270],["If the current Camera Far Plane is closer than the Shadow Distance, Unity uses the Camera Far Plane instead of the Shadow Distance.",1270],["To disguise missing shadows beyond the Shadow Distance, you can use visual effects such as fog.",1270],["Setting the Shadow Distance",1270],["In the Built-in Render Pipeline, set the Shadow Distance property in your Project's Quality Settings.",1270],["In the Universal Render Pipeline (URP), set the Shadow Distance property in the Universal Render Pipeline Asset.",1270],["In the High Definition Render Pipeline (HDRP), set the Shadow Distance property for each Volume.",1270],["Reduce flickering shadows",1270],["Shadows might flicker if they're far away from the camera. Refer to Understanding the View Frustum for more information.",1270],["If shadows are closer to the camera than the world space origin, enable camera-relative culling. Unity uses the camera as the relative position for shadow calculations instead of the world space origin, which reduces flickering.",1270],["To enable camera-relative culling, follow these steps:",1270],["Go to Project Settings > Graphics > Culling Settings > Camera-Relative Culling.",1270],["Enable Shadows.",1270],["Shadow Distance and Shadowmask Lighting Mode",1270],["If your Scene uses the Shadowmask Lighting Mode, Unity renders shadows from Mixed Lights beyond the Shadow Distance, using either Light Probes or a shadow mask Texture. You can configure how Unity renders shadows beyond the Shadow Distance.",1270],["Shadow mapping",1271],["Unity uses a technique called shadow mapping to render real-time shadows.",1271],["How shadow mapping works",1271],["Shadow mapping uses textures called shadow maps. Shadow maps are similar to depth textures. A Light generates a shadow map in a similar way to how a Camera generates a depth texture. If you imagine a Camera at the same location as the Light, the areas of the Scene that the Camera cannot see are the same areas of the Scene that rays from the Light cannot reach; therefore, they are in shadow.",1271],["Unity populates the shadow map with information about how far rays from the Light travel before they hit a surface, and then samples the shadow map to calculate real-time shadows for GameObjects that the Light hits.",1271],["For more information on shadow mapping, see the Wikipedia Page on shadow mapping.",1271],["Shadow map resolution",1271],["To calculate the resolution of a shadow map, Unity:",1271],["Determines the area of the screen view that the Light can illuminate. For directional lights, the whole screen can be illuminated. For Spot Lights and Point Lights, the area is the onscreen projection of the shape of the light's extent: a sphere for point lights, or a cone for Spot Lights. The projected shape has a width and height in pixels on the screen; the larger of those two values is then taken. This value is called the Light's pixel size.",1271],["Determines the shadow quality multiplier. Unity uses the Shadow Resolution setting for this, which is set in the Quality Settings window). The quality settings correspond to the following values:",1271],["\nVery High: 1.0\n",1271],["\nHigh: 0.5\n",1271],["\nMedium: 0.25\n",1271],["\nLow: 0.125\n",1271],["Performs the following calculation, and then clamps the result to the maximum size:",1271],["Light type: Formula: Maximum resolution, in pixels: ",1271],["Directional NextPowerOfTwo (pixel size * shadow quality multiplier * 3.8) 4096 x 4096 when Shadow Resolution is Very High Quality and/or if the GPU has 512MB or more of RAM, 2048 x 2048 otherwise. ",1271],["Spot Lights NextPowerOfTwo (pixel size * shadow quality multiplier * 2.0) 2048 x 2048 if the GPU has 512MB or more of RAM, 1024 x 1024 otherwise. ",1271],["Point Lights NextPowerOfTwo (pixel size * shadow quality multiplier * 1.0) 1024 x 1024 if the GPU has 512MB or more of RAM, 512 x 512 otherwise. ",1271],["Point lights have a lower limit on size than the other types because they use cubemaps for shadows. This means that six cubemap faces at this resolution must be kept in video memory at once. They are also quite expensive to render, as potential shadow casters might need to be rendered into all six cubemap faces.",1271],["Overriding the shadow map resolution",1271],["In the Built-in Render Pipeline, you can set the resolution of a Light's shadow map by setting the Light.shadowCustomResolution property to a value greater than 0. When this value is greater than 0, Unity performs the following calculation for all Light types:",1271],["It then clamps the maximum resolution based on Light type and hardware, as shown in the table above.",1271],["See render pipeline feature comparison for more information about support for shadow mapping across render pipelines.",1271],["Shadow troubleshooting",1272],["Shadow performance",1272],["Real-time shadows have quite a high rendering overhead; any GameObjects that might cast shadows must first be rendered into the shadow map and then that map will be used to render objects that might receive shadows.",1272],["Soft shadows have a greater rendering overhead than hard shadows, but this only affects the GPU and does not cause much extra CPU work.",1272],["If rendering real-time shadows for complex geometry is prohibitively expensive, consider using low LOD meshes or even primitives to cast shadows.",1272],["If this is too resource-intensive, you can fake shadows using a blurred texture applied to a simple mesh or quad underneath your characters, or can create blob shadows with custom shaders.",1272],["Shadow acne",1272],["A surface directly illuminated by a Light sometimes appears to be partly in shadow. This is because pixels that should be exactly at the distance specified in the shadow map are sometimes calculated as being further away (this is a consequence of using shadow filtering, or a low-resolution image for the shadow map). The result is arbitrary patterns of pixels in shadow when they should be lit, giving a visual effect known as \"shadow acne\".",1272],["",1272],["The light bias settings",1272],["To prevent shadow acne, you can adjust the light bias settings.",1272],["You can add a bias to the distance in the shadow map to ensure that pixels on the borderline pass the comparison, or you can inset geometry a little bit along its normals.",1272],["In the Built-in Render Pipeline, you can set these values with the Bias and Normal Bias properties in the Light Inspector window when shadows are enabled.",1272],["Do not set the Bias value too high, because areas around a shadow near the GameObject casting it are sometimes falsely illuminated. This results in a disconnected shadow, making the GameObject look as if it is flying above the ground.",1272],["Likewise, setting the Normal Bias value too high makes the shadow appear too narrow for the GameObject:",1272],["In some situations, Normal Bias can cause an unwanted effect called \"light bleeding\", where light bleeds through from nearby geometry into areas that should be shadowed. A potential solution is to open the GameObject's Mesh Renderer and change the Cast Shadows property to Two Sided. This can sometimes help, although it can be more resource-intensive and increase performance overhead when rendering the Scene.",1272],["The bias values for a Light may need tweaking to make sure that unwanted effects don't occur. It is generally easier to gauge the right value by eye rather than attempting to calculate it.",1272],["Shadow pancaking",1272],["To further prevent shadow acne we are using a technique known as Shadow pancaking. The idea is to reduce the range of the light space used when rendering the shadow map along the light direction. This leads to an increased precision in the shadow map, reducing shadow acne.",1272],["In the above diagram:",1272],["The light blue circles represent the shadow casters",1272],["The dark blue rectangle represents the original light space",1272],["The green line represents the optimized near plane (excluding any shadow casters not visible in the view frustum)",1272],["Clamp these shadow casters to the near clip plane of the optimized space (in the Vertex Shader). Note that while this works well in general, it can create artifacts for very large triangles crossing the near clip plane:",1272],["In this case, only one vertex of the blue triangle is behind the near clip plane and gets clamped to it. However, this alters the triangle shape, and can create incorrect shadowing.",1272],["You can tweak the Shadow Near Plane Offset property from the Quality window to avoid this problem. This pulls back the near clip plane. However, setting this value very high eventually introduces shadow acne, because it raises the range that the shadow map needs to cover in the light direction. Alternatively, you can also tesselate the problematic shadow casting triangles.",1272],["Shadows not appearing",1272],["If you find that one or more objects are not casting shadows then you should check the following points:",1272],["Real-time shadows can be disabled completely in the Quality window. Make sure that you have the correct quality level enabled and that shadows are switched on for that setting.",1272],["All Mesh Renderers in the scene must be set up with their Receive Shadows and Cast Shadows correctly set. Both are enabled by default, but check that they haven't been disabled unintentionally.",1272],["Only opaque objects cast and receive shadows, so objects using the built-in Transparent or Particle shaders will neither cast nor receive. Generally, you can use the Transparent Cutout shaders instead for objects with \"gaps\" such as fences, vegetation, etc. Custom Shaders must be pixel-lit and use the Geometry render queue.",1272],["Objects using VertexLit shaders can't receive shadows, but they can cast them.",1272],["Unity can't calculate shadows for GameObjects that have materials with \"Unlit\" type shaders. Unity can only calculate shadows for materials with shaders that support lighting.",1272],["In the Built-in Render Pipeline, using the Forward rendering path, some shaders allow only the brightest directional light to cast shadows (in particular, this happens with Unity's built-in shaders from 4.x versions). If you want to have more than one shadow-casting light then you should use the Deferred Shading rendering path instead. You can enable your own shaders to support \"full shadows\" by using the fullforwardshadows surface shader directive.",1272],["Shadows",1273],["Shadows add a degree of depth and realism to a Scene because they bring out the scale and position of objects that might otherwise look flat. In Unity, Lights can cast shadows from a GameObject onto other parts of itself, or onto nearby GameObjects.",1273],["This section contains information on:",1273],["Shortcuts Manager",1274],["The Shortcuts manager lets you view and manage keyboard shortcuts in Unity.",1274],["A shortcut is any key, or combination of keys, that is bound to a Unity command. A command is an action that is executed in the Editor. For example, the R key is bound to the command that activates the Scale tool in the Scene view.",1274],["You access the Shortcuts Manager from Unity’s main menu:",1274],["On Windows and Linux, select Edit > Shortcuts.",1274],["On macOS, select Unity > Shortcuts.",1274],["",1274],["\n\n- \n\n",1274],["A Profile drop-down menu: Allows you to manage, and switch between, different shortcut profiles. See Shortcut Profiles for details. ",1274],["B Key map: Shows you which keys are assigned to commands, and the commands they are assigned to. See The key map for details. You can also use the key map to manage shortcuts. ",1274],["C Category list: Commands are sorted into categories, which appear in the Category list. When you select a category, its commands appear in the Command list on the right. ",1274],["D Command and Shortcut list: Lists all commands in the selected Category and their assigned shortcuts. See The Command list for details. You can also use the Command list to manage shortcuts. ",1274],["Assigning shortcuts to global vs. contextual commands",1274],["Unity commands can be global or contextual.",1274],["Global commands are always available. For example, by default the command to Undo an action is assigned to the Ctrl/Cmd + Z shortcut. Using that shortcut always undoes the last action, regardless of which windows are open and which tools are active.",1274],["Contextual commands only work when you use a particular view or set of tools. For example, by default the square bracket keys [ and ] are assigned to one set of commands in the Terrain tool and another set in the Grid Painting tool. When you press either of those keys, Unity executes the command for whichever tool is active.",1274],["Normally, you assign a shortcut to one global command, or one or more contextual commands from different contexts. Other multi-command combinations (for example, two global commands, or two contextual commands from the same context) create conflicts that you need to manage. For information about shortcut conflicts and how to manage them, see Shortcut conflicts.",1274],["Unity also has a few special global commands that can share shortcuts with other global commands without creating conflicts. For example the Q, W, and E keys are assigned to the View, Move, and Rotate tools respectively, but when you activate Flythrough mode, you use these keys to move down, forward, and up.",1274],["",1274],["The key map",1274],["This section explains how to use the key map to view shortcut assignments. For information on using the key map to add, remove, and modify shortcuts, see Managing shortcuts.",1274],["The key map shows you which keys and key combinations are assigned to commands.",1274],["",1274],["\n\n- \n\n",1274],[" Pink keys are assigned to global commands. ",1274],[" Blue keys are assigned to contextual commands. ",1274],[" White keys are not assigned to any commands. ",1274],[" Grey keys are special keys that cannot be assigned to commands.For example, modifier keys such as Shift and Ctrl/Cmd, or utility keys such as Return and Esc. ",1274],["Selecting modifier keys such as Shift, Ctrl/Cmd, and Alt updates the key map to show which combinations of shortcuts and modifiers are assigned to commands. Active modifier keys turn blue in the key map.",1274],["Tip:** To temporarily activate modifier keys in the key map, hold them down on your keyboard.",1274],["To see which commands a particular key is assigned to, hover your mouse pointer over a shortcut key. The tooltip lists the commands the key is assigned to.",1274],["For key combinations, activate the modifier keys by holding them down on your keyboard, or clicking them on the key map, and then hover your mouse pointer over a shortcut key.",1274],["You can assign a single shortcut to more than one command. As long as Unity can’t execute the commands at the same time, the shortcut works transparently. However, if you map a shortcut to multiple commands that can be executed at the same time, you create a conflict. To find out about conflicts and how to manage them, see Shortcut conflicts below.",1274],["",1274],["The Command list",1274],["This section explains how to use the Command list to view shortcut assignments. For information about using the Command list to add, remove, and modify shortcuts, see Managing shortcuts.",1274],["The Command list shows you which shortcuts are assigned to specific commands. Choose a category from the Category list to display its commands and shortcuts in the Command list.",1274],["You can also search the Command list using the search box. As you type a search term, the Command list automatically narrows its scope to commands that match the search term.",1274],["If you search a specific category, you can switch between results in the selected category and results in the All Unity Commands category by setting the scope in the Search row.",1274],["",1274],["Managing shortcuts",1274],["The Shortcuts Manager provides several ways of assigning, modifying, unassigning, and resetting shortcuts.",1274],["You assign or modify shortcuts by doing one of the following:",1274],["You unassign or reset shortcuts by doing one of the following:",1274],["Assigning shortcuts to commands",1274],["You assign shortcuts to commands using the key map or the Command list.",1274],["",1274],["To assign a shortcut using the key map:**",1274],["Click any modifier keys you want to include in the shortcut (for example, Shift or Ctrl/Cmd).",1274],["Drag and drop the command from the Command list onto the main shortcut key.As you hover over the key map, the cursor changes to indicate which assignments are possible.",1274],["",1274],["To assign a shortcut from the Command list:**",1274],["Double-click the command in the list to edit its shortcut field.",1274],["With the cursor in the shortcut field, press the keys for the shortcut on your keyboard, as you would normally.Make sure you hold down any modifier keys you want to include in the shortcut (Shift or Alt/Option, for example).",1274],["If the shortcut is already assigned to a command, the new assignment creates a conflict. For information about managing conflicts, see Shortcut conflicts.",1274],["Unassigning and resetting shortcuts",1274],["Use the key map or the Command list to remove a command’s assigned shortcut or reset a modified shortcut to its default mapping.",1274],["Note:** Unity stores default shortcut assignments in the Default profile. See Shortcut Profiles for details.",1274],["",1274],["To unassign or reset a shortcut from the key map:**",1274],["Right-click the shortcut key you want to unassign or reset.If you are unassigning/resetting a key combination, click any included modifier keys (Shift or Ctrl/Cmd, for example) before right-clicking the shortcut key.",1274],["From the context menu:",1274],["Select [COMMAND] > Reset to default to re-assign the default shortcut to the command.",1274],["Select [COMMAND] > Remove shortcut to unassign the shortcut from the command.",1274],["",1274],["To unassign or reset a shortcut from the Command list:**",1274],["Right-click the command of the shortcut you want to unassign or reset.",1274],["From the context menu:",1274],["Choose [COMMAND] > Reset to default to re-assign the default shortcut to the command.",1274],["Choose [COMMAND] > Remove shortcut to unassign the shortcut from the command.",1274],["Alternatively:",1274],["Double-click a command of the shortcut you want to unassign, and press the Return/Enter key to delete the shortcut from the shortcut field.",1274],["",1274],["Shortcut conflicts",1274],["You can assign the same shortcut to more than one command, provided the commands cannot be executed at the same time. For example, a single shortcut might be assigned to a command in the Scene view and another command in the Animation window. Because the two windows cannot have focus at the same time, there’s no ambiguity about which command Unity executes when you use the shortcut.",1274],["Assigning a shortcut to two commands that can be executed at the same time creates a conflict. For example, you create a conflict when you assign a single shortcut to:",1274],["One or more contextual commands from the same context.",1274],["More than one global command.",1274],["A combination of global and contextual commands.",1274],["The Shortcuts manager gives you options for handling conflicts when you create new shortcut assignments, and when you use a shortcut that is assigned to conflicting commands.",1274],["Viewing conflicts in the Shortcuts Manager",1274],["Commands with shortcut conflicts appear with a “caution” icon in the Command list.",1274],["You can get a complete list of commands with conflicting shortcuts by selecting the Binding Conflicts category in the Category list.",1274],["Managing conflicts when creating shortcuts",1274],["Assigning a shortcut to two conflicting commands opens the Binding conflict dialog.",1274],["Choose Create Conflict to assign the shortcut to the command, in addition to any existing command assignments.Unity adds all of the shortcut’s assigned commands to the shortcut to the Binding Conflicts category.",1274],["Choose Reassign to reassign the shortcut to the conflicting command. This clears any other command assignments.",1274],["Choose Cancel to exit without taking any action.",1274],["Managing conflicts when using shortcuts",1274],["When you’re working in Unity, using a shortcut that is assigned to conflicting commands opens the Shortcut Conflict dialog.",1274],["Choose a command from the list and click the Perform Selected button to execute the command.Enable the Rebind to selected command option before executing the command to clear any other assignments so that the shortcut is assigned to the selected command only. This is equivalent to deleting the other assignments.",1274],["Choose Resolve Conflict to open the Shortcuts Manager, where you can modify the shortcuts to eliminate the conflict.",1274],["Choose Cancel to exit without taking any action.",1274],["",1274],["Shortcut profiles",1274],["Shortcuts are stored in profiles. Each profile is a complete set of Unity shortcuts that you can modify to suit your needs. You can create as many profiles as you like, and switch between them as needed. You can add, remove, or modify shortcuts in any active profile except the Default profile (see below). Changes to the active profile are immediate. Unity saves them automatically, and does not prompt you to accept or reject them.",1274],["Unity stores Shortcut profiles outside of the Project, in the Unity preferences directory:",1274],["On Windows: %APPDATA%/Unity\\Editor-5.x\\Preferences\\shortcuts",1274],["On macOS: ~/Library/Preferences/Unity/Editor-5.x/shortcuts",1274],["On Linux: ~/.config/unity3d/Preferences/Editor-5.x/shortcuts",1274],["This means any profiles you create are available in all of your Projects.",1274],["Upgrading:** When you upgrade from an older version of Unity, Unity migrates any shortcuts you had configured in the Preferences to a new shortcut profile called UserProfile.",1274],["Managing shortcut profiles",1274],["You manage profiles from the profile drop-down menu at the top of the Shortcuts Manager:",1274],["",1274],["\n\n- \n\n",1274],["A Profile list: Lists all available profiles. Choose one to make it the active profile ",1274],["B Profile options: Options for creating a new profile or renaming or deleting the active profile. ",1274],["Default shortcut profile",1274],["Unity has a Default profile with the “factory” shortcut settings. When you create a new profile, Unity copies the Default profile.",1274],["You cannot modify the Default profile. If you try to modify it, Unity automatically creates a copy (called Default copy), makes the copy the active profile, and applies your change to that copy.",1274],["Bypassing the Shortcuts Manager for custom tools",1274],["When you select a key or key combination on your keyboard, Unity generates a keyboard event and sends that event to the active view. If the active view can use the event, for example to trigger an action, it does so. If not, the event is sent to the Shortcuts Manager, and Unity executes the command that the shortcut is assigned to.",1274],["When developing custom tools, you can intercept keyboard events programmatically before they reach the Shortcuts Manager. For example, you might want a custom tool to react to a key press in a more complex way than you can configure using the Shortcuts Manager.",1274],["How you intercept keyboard events depends on the system you use to create the interface for your custom tools.",1274],["If you are using the IMGUI system, see the following Scripting Reference topics:",1274],["If you are using the UI Elements system, see the following Scripting Reference topics:",1274],["",1274],["User-defined shortcuts",1274],["As well as modifying shortcuts from the Shortcuts Manager, you can use the classes in the UnityEditor.ShortcutManagement namespace to define custom shortcuts in other places, such as scripts and packages. For example, you use the ShortcutAttribute and ClutchShortcutAttribute attributes to create new shortcuts.",1274],["When Unity loads the commands and shortcuts from another source, it:",1274],["Adds any new commands in the main menu to the All Unity Commands category in the Command list, so you can then use the Shortcuts Manager to create shortcuts for them.",1274],["Adds custom command categories to the Category list.",1274],["Adds custom keyboard shortcuts to the shortcuts database, so they appear in all shortcut profiles.",1274],["Shows any conflicts between the custom shortcuts and shortcuts in the current profile in the Shortcut Conflicts category in the Command list.",1274],["2019-02-18 ",1274],["Shortcuts Manager added in [2019.1] (https://docs.unity3d.com/2019.1/Documentation/Manual/30_search.html?q=newin20191) NewIn20191",1274],["Single-pass instanced rendering and custom shaders",1275],["URP, HDRP, ShaderGraph, Surface shaders, and built-in shaders already support single-pass stereo instanced rendering. However, shaders from the Asset Store, from other third parties, or those that you have written yourself might need to be updated.",1275],["For more information about supporting instanced rendering in your shaders, see GPU Instancing. The information in this section specifically talks about stereo rendering and might not include all changes you need to make to support instanced rendering in general.",1275],["Update the vertex input attributes struct",1275],["Add the UNITY_VERTEX_INPUT_INSTANCE_ID macro to the appdata struct.",1275],["Example:",1275],["struct appdata",1275],["float4 vertex : POSITION;",1275],["float2 uv : TEXCOORD0;",1275],["UNITY_VERTEX_INPUT_INSTANCE_ID //Insert",1275],["};",1275],["Update the vertex output attributes struct",1275],["Add UNITY_VERTEX_OUTPUT_STEREO macro to the v2f output struct.",1275],["Example:",1275],["struct v2f",1275],["float2 uv : TEXCOORD0;",1275],["float4 vertex : SV_POSITION;",1275],["UNITY_VERTEX_OUTPUT_STEREO //Insert",1275],["};",1275],["Update the main vertex shader function",1275],["Add the following macros to the beginning of your main vert method (in order):",1275],["UNITY_SETUP_INSTANCE_ID()",1275],["UNITY_INITIALIZE_OUTPUT(v2f, o)",1275],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO()",1275],["UNITY_SETUP_INSTANCE_ID() calculates and sets the built-in unity_StereoEyeIndex and unity_InstanceID shader variables to the correct values based on which eye the GPU is currently rendering.",1275],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO tells the GPU which eye in the texture array it should render to, based on the value of unity_StereoEyeIndex. This macro also transfers the value of unity_StereoEyeIndex from the vertex shader so that it will be accessible in the fragment shader only if UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX is called in the fragment shader frag method.",1275],["UNITY_INITALIZE_OUTPUT(v2f,o) initializes all v2f values to 0.",1275],["Example:",1275],["v2f vert (appdata v)",1275],["v2f o;",1275],["UNITY_SETUP_INSTANCE_ID(v); //Insert",1275],["UNITY_INITIALIZE_OUTPUT(v2f, o); //Insert",1275],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //Insert",1275],["o.vertex = UnityObjectToClipPos(v.vertex);",1275],["o.uv = v.uv;",1275],["return o;",1275],["Post-Processing shaders",1275],["If you want your Post-Processing shaders to support single-pass stereo instancing, follow the steps for custom shaders as well as the steps below.",1275],["Note:** You can download all Unity base shader scripts from the Unity website.",1275],["Do the following for each Post-Processing shader that you want to support single-pass instancing:",1275],["Add the UNITY_DECLARE_SCREENSPACE_TEXTURE(tex) macro outside the frag method (see the example below for placement) in your Shader script, so that when you use a particular stereo rendering method the GPU uses the appropriate texture sampler. For example, if you use multi-pass rendering, the GPU uses a texture 2D sampler. For single-pass instancing or multi-view rendering, the texture sampler is a texture array.",1275],["Add UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i) at the beginning of the fragment shader frag method (See the example below for placement). You only need to add this macro if you want to use the unity_StereoEyeIndex built-in shader variable to find out which eye the GPU is rendering to. This is useful when testing post-processing effects.",1275],["Use the UNITY_SAMPLE_SCREENSPACE_TEXTURE() macro when sampling 2D textures (See the example below). Standard shaders use a 2D texture-based back buffer to sample textures. Single-pass stereo instancing does not use this type of back buffer, so if you do not specify a different method for 2D texture sampling, your shader does not render correctly. To prevent rendering issues, the UNITY_SAMPLE_SCREENSPACE_TEXTURE() macro detects which stereo rendering path you are using and then automatically samples the texture in the correct manner. See Unity documentation on HLSLSupport.cginc to learn more about similar macros used for depth textures and screen-space shadow maps.",1275],["Example:",1275],["UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex); //Insert",1275],["fixed4 frag (v2f i) : SV_Target",1275],["UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); //Insert",1275],["fixed4 col = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, i.uv); //Insert",1275],["// just invert the colors",1275],["col = 1 - col;",1275],["return col;",1275],["Full sample shader code",1275],["Below is a simple example of the template image effect shader with all of the previously mentioned changes applied to support single-pass stereo instancing. The lines added to the shader code are marked with the comment: //Insert.",1275],["struct appdata",1275],["float4 vertex : POSITION;",1275],["float2 uv : TEXCOORD0;",1275],["UNITY_VERTEX_INPUT_INSTANCE_ID //Insert",1275],["};",1275],["//v2f output struct",1275],["struct v2f",1275],["float2 uv : TEXCOORD0;",1275],["float4 vertex : SV_POSITION;",1275],["UNITY_VERTEX_OUTPUT_STEREO //Insert",1275],["};",1275],["v2f vert (appdata v)",1275],["v2f o;",1275],["UNITY_SETUP_INSTANCE_ID(v); //Insert",1275],["UNITY_INITIALIZE_OUTPUT(v2f, o); //Insert",1275],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //Insert",1275],["o.vertex = UnityObjectToClipPos(v.vertex);",1275],["o.uv = v.uv;",1275],["return o;",1275],["UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex); //Insert",1275],["fixed4 frag (v2f i) : SV_Target",1275],["UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); //Insert",1275],["fixed4 col = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, i.uv); //Insert",1275],["// invert the colors",1275],["col = 1 - col;",1275],["return col;",1275],["Procedural geometry",1275],["If you use the Graphics.DrawProceduralIndirect() and CommandBuffer.DrawProceduralIndirect() methods to draw fully procedural geometry on the GPU, note that both methods receive their arguments from a compute buffer. This means that it is difficult to increase the instance count at run time. To increase the instance count, you must manually double the instance count contained in your compute buffers.",1275],["Debugging your shader",1275],["The following shader code renders a GameObject as green for a user’s left eye and red for their right eye. This shader is useful for debugging your stereo rendering, because it allows you to verify that all stereo graphics work and are functioning correctly.",1275],["Shader \"XR/StereoEyeIndexColor\"",1275],["Properties",1275],["_LeftEyeColor(\"Left Eye Color\", COLOR) = (0,1,0,1)",1275],["_RightEyeColor(\"Right Eye Color\", COLOR) = (1,0,0,1)",1275],["SubShader",1275],["Tags { \"RenderType\" = \"Opaque\" }",1275],["Pass",1275],["CGPROGRAM",1275],["pragma vertex vert",1275],["pragma fragment frag",1275],["float4 _LeftEyeColor;",1275],["float4 _RightEyeColor;",1275],["include \"UnityCG.cginc\"",1275],["struct appdata",1275],["float4 vertex : POSITION;",1275],["UNITY_VERTEX_INPUT_INSTANCE_ID",1275],["};",1275],["struct v2f",1275],["float4 vertex : SV_POSITION;",1275],["UNITY_VERTEX_INPUT_INSTANCE_ID",1275],["UNITY_VERTEX_OUTPUT_STEREO",1275],["};",1275],["v2f vert (appdata v)",1275],["v2f o;",1275],["UNITY_SETUP_INSTANCE_ID(v);",1275],["UNITY_INITIALIZE_OUTPUT(v2f, o);",1275],["UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);",1275],["o.vertex = UnityObjectToClipPos(v.vertex);",1275],["return o;",1275],["fixed4 frag (v2f i) : SV_Target",1275],["UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);",1275],["return lerp(LeftEyeColor, _RightEyeColor, unityStereoEyeIndex);",1275],["ENDCG",1275],["ShaderGraph debug shader",1275],["ShaderGraph automatically adds the macros required to support single-pass stereo rendering. To implement the debug shader in ShaderGraph you can use a Custom Function Node that sets the base color based on the eye index.",1275],["Use the unity_StereoEyeIndex shader attribute to determine the base color depending on which eye instance is being rendered. The Custom Function Node in the example above contains the following code:",1275],["Out = lerp(LeftColor, RightColor, unity_StereoEyeIndex);",1275],["Stereo rendering",1276],["VR and most MR devices require rendering the Unity scene in stereo. Unity XR supports two stereo render modes:",1276],["Multi-pass**: in this mode, Unity performs a render pass for each eye. Some parts of the render loop are shared between the two passes, so multi-pass rendering is faster than rendering the scene with two unique cameras. Multi-pass mode provides the widest compatibility with existing shaders and rendering utilities, but is slower than single pass instanced mode.",1276],["Single-pass instanced**: in this mode, Unity renders the scene in a single pass using instanced draw calls. This mode greatly decreases CPU usage and slightly decreases GPU usage compared to the multi-pass mode.",1276],["Multiview**: A variation of single-pass instanced rendering supported by some OpenGL and OpenGL ES devices. This option replaces single-pass instanced when available.",1276],["Note:** The earlier technique of rendering the scene into a double-wide texture using a single render pass is no longer available.",1276],["See How to maximize AR and VR performance with advanced stereo rendering for background information. Single-pass instanced stereo rendering is now available on most VR platforms.",1276],["Set the render mode",1276],["You can find the Render mode setting under XR Plug-in Management in Project Settings. Each XR provider plug-in provides its own setting, if supported.",1276],["To set a render mode:",1276],["Open Project Settings (menu: Edit > Project Settings).",1276],["Expand the XR Plugin Management section, if necessary.",1276],["Select the settings page for the relevant provider plug-in.",1276],["Choose a mode from the list.",1276],["Render mode options in the MockHMD provider plug-in",1276],["Note:** Some plug-ins name the setting Stereo Rendering Mode.",1276],["Single-pass instanced render mode support",1276],["Single-pass instanced render mode is supported on the following platforms and devices:",1276],["Android devices that support the Multiview extension",1276],["HoloLens",1276],["PlayStation VR",1276],["PC devices (tethered):",1276],["For DirectX on desktop, the GPU must support Direct3D 11 and the VPAndRTArrayIndexFromAnyShaderFeedingRasterizer extension.",1276],["For OpenGL on desktop, the GPU must support one of the following extensions:",1276],["GL_NV_viewport_array2",1276],["GL_AMD_vertex_shader_layer",1276],["GL_ARB_shader_viewport_layer_array",1276],["If you set the Render Mode to Single Pass Instanced when that mode is not supported, then rendering falls back to multi-pass mode.",1276],["Note:** Unity doesn't support single-pass stereo instancing in the built-in, legacy render pipeline when using deferred rendering.",1276],["Sky",1277],["A sky is a type of background that a Camera draws before it renders a frame. This type of background greatly benefits 3D games and applications because it provides a sense of depth and makes the environment seem much larger than it actually is. The sky itself can contain anything, such as clouds, mountains, buildings, and other unreachable objects, to create the illusion of distant three-dimensional surroundings. Unity can also use a sky to generate realistic ambient lighting in your Scene.",1277],["Sky and render pipelines",1277],["The sky solutions you can use depend on which render pipeline your Project uses.",1277],["Render pipeline Sky Solution ",1277],["------------------------------------------------------------ ------------------------------------------------------------ ",1277],["Built-in Render Pipeline The Built-in Render Pipeline uses a skybox Material to define a sky for Cameras to draw. You can specify the sky on a per-Scene basis and also override the sky for an individual Camera. • For information on how to set the sky on a per-Scene basis, see the Lighting window documentation. • For information on how to override the sky for a specific Camera, see the Skybox component documentation. ",1277],["Universal Render Pipeline (URP) URP uses the same sky solution as the Built-in Render Pipeline and allows you to specify the sky on a per-Scene basis and override the sky for an individual Camera. • For information on how to set the sky on a per-Scene basis, see the Lighting window documentation. • For information on how to override the sky for a specific Camera, see the Skybox component documentation. ",1277],["High Definition Render Pipeline (HDRP) HDRP includes its own sky solution that uses the Volume system. Each Volume can include an override to specify a type of sky to draw. Each Camera interpolates between the sky settings for every Volume that affects it and draws the result. For information on how to create a sky in HDRP, see the Visual Environment documentation. ",1277],["Skybox shaders",1278],["Unity provides multiple Skybox Shaders for you to use. Each Shader uses a different set of properties and generation techniques. Each Shader falls into one of the following two categories:",1278],["Textured**: Generates a skybox from one or multiple textures. The source textures represent the view of the background from all directions. The Skybox Shaders in this category are:",1278],["6 Sided.",1278],["Cubemap.",1278],["Panoramic.",1278],["Procedural**: Does not use textures and instead uses properties on the Material to generate a skybox. The Skybox Shader in this category is:",1278],["Procedural.",1278],["Render pipeline compatibility",1278],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1278],["------------------ ---------------------------- ----------------------------------- ------------------------------------------ ",1278],["Skybox shaders Yes (1) Yes (1) No (2) ",1278],["Notes**:",1278],["The Built-in Render Pipeline, and the Universal Render Pipeline (URP) both exclusively use skyboxes to render a sky. They both support all of the above Shaders.",1278],["The High Definition Render Pipeline (HDRP) does not support any of the above Shaders and instead includes multiple sky generation solutions.",1278],["Using skyboxes",1279],["In Unity, a skybox is a Material that uses a skybox Shader. For information on what skybox Shaders are available, see skybox Shaders.",1279],["Render pipeline compatibility",1279],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1279],["------------ ---------------------------- ----------------------------------- ------------------------------------------ ",1279],["Skyboxes Yes (1) Yes (1) No (2) ",1279],["Notes**:",1279],["The Built-in Render Pipeline, and the Universal Render Pipeline (URP) both exclusively use skyboxes to render a sky. These skyboxes are Materials that use a skybox Shader.",1279],["The High Definition Render Pipeline (HDRP) does not support skybox Materials and instead includes multiple sky generation solutions.",1279],["Creating a skybox Material",1279],["To create a new skybox Material:",1279],["From the menu bar, click Assets > Create > Material.",1279],["In the Shader drop-down, click Skybox then the skybox Shader you want to use.",1279],["You can now fill out the properties on the Material to set up the skybox. The properties available on the Material depend on the skybox Shader the Material uses.",1279],["Note**: Each skybox Shader has its own set of prerequisite Textures that differ in number and Texture format. For information on the Textures a particular skybox Shader requires, see the documentation for that skybox Shader. You can find the list of skybox Shaders and their documentation on the skybox Shaders page.",1279],["Drawing a skybox in your Scene",1279],["After you create a skybox Material, you can render it in your Scene. To do this:",1279],["From the menu bar, click Window > Rendering > Lighting Settings.",1279],["In the window that appears, click the Environment tab.",1279],["Assign the skybox Material to the Skybox Material property.",1279],["This draws the skybox in the background of every Camera in your Scene. If you instead only want to draw the skybox for a particular Camera, see Drawing a skybox for a particular Camera.",1279],["Using a skybox Material for ambient light settings",1279],["After you create a skybox Material, Unity can use it to generate ambient lighting in your Scene. To make Unity do this:",1279],["Open the Lighting window (menu: Window > Rendering > Lighting Settings).",1279],["Assign your chosen skybox to the Skybox Material property.",1279],["Click the Source drop-down and, from the list, click Skybox.",1279],["You can also specify when Unity updates the ambient lighting. To do this, change the Ambient Mode. The two values are:",1279],["\nRealtime: Unity constantly regenerates ambient lighting for your Scene. This is useful if you alter the skybox at run-time\n",1279],["\nBaked: Unity only generates ambient lighting for your Scene when you click the Generate Lighting button at the bottom of the Lighting window. This is useful if your skybox does not change during run-time because it saves computational resources.\n",1279],[" ",1279],["Drawing a skybox for a particular Camera",1279],["If you only want to draw a skybox in the background of a particular Camera, use the Skybox component. When you attach this component to a GameObject with a Camera, it overrides the skybox that the Camera draws. To attach and set up the Skybox component:",1279],["Select a Camera in your Scene and view it in the Inspector window.",1279],["Click Add Component > Rendering > Skybox.",1279],["On the Skybox component, assign the skybox Material to the Custom Skybox property.",1279],["Best Practices",1279],["If your Skybox includes a sun, moon, or other light in it, set up a Directional Light that points in the same direction as the light. This makes it appear as though the light in your skybox creates shadows in your Scene. If there are multiple Directional Lights in your Scene, you can choose which Directional Light the Skybox uses. To do this:",1279],["From the menu bar, click Window > Rendering > Lighting Settings.",1279],["Click the Scene tab.",1279],["Assign the Directional Light you want to use to the Sun Source property.",1279],["If you want to have fog in your Scene, match the fog color to the color of the skybox. This makes the fog blend to the color of the Scene sky. To do this:",1279],["From the menu bar, click Window > Rendering > Lighting Settings.",1279],["Click the Environment tab.",1279],["In the Other Settings section, enable the Fog checkbox.",1279],["Set the Color property to a color that suits your skybox. For this, you can use the ink dropper tool to select a color from the Scene.",1279],["Skyboxes",1280],["A skybox is a cube with a different texture on each face. When you use a skybox to render a sky, Unity essentially places your Scene inside the skybox cube. Unity renders the skybox first, so the sky always renders at the back.",1280],["Similar to other sky implementations, you can use a skybox to do the following:",1280],["Render a skybox around your Scene.",1280],["Configure your lighting settings to create realistic ambient lighting based on the skybox.",1280],["Override the skybox that an individual Camera uses, using the skybox component.",1280],["Render pipeline compatibility",1280],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1280],["------------ ---------------------------- ----------------------------------- ------------------------------------------ ",1280],["Skyboxes Yes (1) Yes (1) No (2) ",1280],["Notes**:",1280],["The Built-in Render Pipeline, and the Universal Render Pipeline (URP) both exclusively use skyboxes to render a sky. These skyboxes are Materials that use a skybox Shader.",1280],["The High Definition Render Pipeline (HDRP) does not support skybox Materials and instead includes multiple sky generation solutions.",1280],["ShaderLab: legacy alpha testing",1281],["Note**: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.",1281],["Render pipeline compatibility",1281],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1281],["Legacy alpha testing Yes No No No ",1281],["Overview",1281],["After the final output color has been calculated, the color can optionally have its alpha value compared to a fixed value. If the test fails, the pixel is not written to the display.",1281],["Syntax",1281],["AlphaTest Off",1281],["Render all pixels (default) or...",1281],["AlphaTest comparison AlphaValue",1281],["Set up the alpha test to only render pixels whose alpha value is within a certain range.",1281],["Comparison",1281],["Comparison is one of the following words:",1281],["",1281],["Greater Only render pixels whose alpha is greater than AlphaValue. ",1281],["GEqual Only render pixels whose alpha is greater than or equal to AlphaValue. ",1281],["Less Only render pixels whose alpha value is less than AlphaValue. ",1281],["LEqual Only render pixels whose alpha value is less than or equal to from AlphaValue. ",1281],["Equal Only render pixels whose alpha value equals AlphaValue. ",1281],["NotEqual Only render pixels whose alpha value differs from AlphaValue. ",1281],["Always Render all pixels. This is functionally equivalent to AlphaTest Off. ",1281],["Never Don't render any pixels. ",1281],["AlphaValue",1281],["A floating-point number between 0 and 1. This can also be a variable reference to a float or range property, in which case it should be written using the standard square bracket notation ([VariableName]).",1281],["Details",1281],["The alpha test is important when rendering concave objects with transparent parts. The graphics card maintains a record of the depth of every pixel written to the screen. If a new pixel is further away than one already rendered, the new pixel is not written to the display. This means that even with Blending, objects will not show through.",1281],["In this figure, the tree on the left is rendered using AlphaTest. Note how the pixels in it are either completely transparent or opaque. The center tree is rendered using only Alpha Blending - notice how transparent parts of nearby branches cover the distant leaves because of the depth buffer. The tree on the right is rendered using the last example shader - which implements a combination of blending and alpha testing to hide any artifacts.",1281],["Examples",1281],["The simplest possible example, assign a texture with an alpha channel to it. The object will only be visible where alpha is greater than 0.5",1281],["Shader \"Simple Alpha Test\" {",1281],["Properties {",1281],["_MainTex (\"Base (RGB) Transparency (A)\", 2D) = \"\" {}",1281],["SubShader {",1281],["Pass {",1281],["// Only render pixels with an alpha larger than 50%",1281],["AlphaTest Greater 0.5",1281],["SetTexture [_MainTex] { combine texture }",1281],["This is not much good by itself. Let us add some lighting and make the cutoff value tweakable:",1281],["Shader \"Cutoff Alpha\" {",1281],["Properties {",1281],["_MainTex (\"Base (RGB) Transparency (A)\", 2D) = \"\" {}",1281],["_Cutoff (\"Alpha cutoff\", Range (0,1)) = 0.5",1281],["SubShader {",1281],["Pass {",1281],["// Use the Cutoff parameter defined above to determine",1281],["// what to render.",1281],["AlphaTest Greater [_Cutoff]",1281],["Material {",1281],["Diffuse (1,1,1,1)",1281],["Ambient (1,1,1,1)",1281],["Lighting On",1281],["SetTexture [_MainTex] { combine texture * primary }",1281],["When rendering plants and trees, many games have the hard edges typical of alpha testing. A way around that is to render the object twice. In the first pass, we use alpha testing to only render pixels that are more than 50% opaque. In the second pass, we alpha-blend the graphic in the parts that were cut away, without recording the depth of the pixel. We might get a bit of confusion as further away branches overwrite the nearby ones, but in practice, that is hard to see as leaves have a lot of visual detail in them.",1281],["Shader \"Vegetation\" {",1281],["Properties {",1281],["_Color (\"Main Color\", Color) = (.5, .5, .5, .5)",1281],["_MainTex (\"Base (RGB) Alpha (A)\", 2D) = \"white\" {}",1281],["_Cutoff (\"Base Alpha cutoff\", Range (0,.9)) = .5",1281],["SubShader {",1281],["// Set up basic lighting",1281],["Material {",1281],["Diffuse [_Color]",1281],["Ambient [_Color]",1281],["Lighting On",1281],["// Render both front and back facing polygons.",1281],["Cull Off",1281],["// first pass:",1281],["// render any pixels that are more than [_Cutoff] opaque",1281],["Pass {",1281],["AlphaTest Greater [_Cutoff]",1281],["SetTexture [_MainTex] {",1281],["combine texture * primary, texture",1281],["// Second pass:",1281],["// render in the semitransparent details.",1281],["Pass {",1281],["// Dont write to the depth buffer",1281],["ZWrite off",1281],["// Don't write pixels we have already written.",1281],["ZTest Less",1281],["// Only render pixels less or equal to the value",1281],["AlphaTest LEqual [_Cutoff]",1281],["// Set up alpha blending",1281],["Blend SrcAlpha OneMinusSrcAlpha",1281],["SetTexture [_MainTex] {",1281],["combine texture * primary, texture",1281],["Note that we have some setup inside the SubShader, rather than in the individual passes. Any state set in the SubShader is inherited as defaults in passes inside it.",1281],["ShaderLab command: AlphaToMask",1282],["Enables or disables alpha-to-coverage mode on the GPU.",1282],["Alpha-to-coverage mode can reduce the excessive aliasing that occurs when you use multisample anti-aliasing (MSAA) with shaders that use alpha testing, such as vegetation shaders. To do this, it modifies the multisample coverage mask proportionally to the alpha value in the output of the fragment shader result.",1282],["This command is intended for use with MSAA. If you enable alpha-to-coverage mode when you are not using MSAA, the results can be unpredictable; different graphics APIs and GPUs handle this differently.",1282],["Render pipeline compatibility",1282],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1282],["AlphaToMask Yes Yes Yes Yes ",1282],["Usage",1282],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1282],["Signature Example syntax Function ",1282],["AlphaToMask <state> AlphaToMask Off Enables or disables alpha-to-coverage mode.",1282],["Valid parameter values",1282],["Parameter Value Function ",1282],["state On Enables alpha-to-coverage mode. ",1282],["Off Disables alpha-to-coverage mode. ",1282],["Examples",1282],["Shader \"Examples/CommandExample\"",1282],["SubShader",1282],["// The rest of the code that defines the SubShader goes here.",1282],["Pass",1282],["// Enable alpha-to-coverage mode for this Pass",1282],["AlphaToMask On",1282],["// The rest of the code that defines the Pass goes here.",1282],["This example code demonstrates the syntax for using this command in a SubShader block.",1282],["Shader \"Examples/CommandExample\"",1282],["SubShader",1282],["// Enable alpha-to-coverage mode for this SubShader",1282],["AlphaToMask On",1282],["// The rest of the code that defines the SubShader goes here.",1282],["Pass",1282],["// The rest of the code that defines the Pass goes here.",1282],["ShaderLab: legacy vertex data channel mapping",1283],["Note**: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.",1283],["Render pipeline compatibility",1283],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1283],["Legacy vertex data channel mapping Yes No No No ",1283],["Overview",1283],["The BindChannels command allows you to specify how vertex data maps to the graphics hardware. By default, Unity figures out the bindings for you, but in some cases you want custom ones to be used.",1283],["For example you could map the primary UV set to be used in the first texture stage and the secondary UV set to be used in the second texture stage; or tell the hardware that vertex colors should be taken into account.",1283],["Syntax",1283],["BindChannels { Bind \"source\", target }",1283],["Specifies that vertex data source maps to hardware target.",1283],["Source** can be one of:",1283],["Vertex: vertex position",1283],["Normal: vertex normal",1283],["Tangent: vertex tangent",1283],["Texcoord: primary UV coordinate",1283],["Texcoord1: secondary UV coordinate",1283],["Color: per-vertex color",1283],["Target** can be one of:",1283],["Vertex: vertex position",1283],["Normal: vertex normal",1283],["Tangent: vertex tangent",1283],["Texcoord0, Texcoord1, ...: texture coordinates for corresponding texture stage",1283],["Texcoord: texture coordinates for all texture stages",1283],["Color: vertex color",1283],["Details",1283],["Unity places some restrictions on which sources can be mapped to which targets. Source and target must match for Vertex, Normal, Tangent and Color. Texture coordinates from the mesh (Texcoord and Texcoord1) can be mapped into texture coordinate targets (Texcoord for all texture stages, or TexcoordN for a specific stage).",1283],["There are two typical use cases for BindChannels:",1283],["Shaders that take vertex colors into account.",1283],["Shaders that use two UV sets.",1283],["Examples",1283],["// Maps the first UV set to the first texture stage",1283],["// and the second UV set to the second texture stage",1283],["BindChannels {",1283],["Bind \"Vertex\", vertex",1283],["Bind \"texcoord\", texcoord0",1283],["Bind \"texcoord1\", texcoord1",1283],["// Maps the first UV set to all texture stages",1283],["// and uses vertex colors",1283],["BindChannels {",1283],["Bind \"Vertex\", vertex",1283],["Bind \"texcoord\", texcoord",1283],["Bind \"Color\", color",1283],["ShaderLab command: Blend",1284],["Determines how the GPU combines the output of the fragment shader with the render target.",1284],["The functionality of this command depends on the blending operation, which you can set using the BlendOp command. Note that while blending itself is supported on all graphics APIs and hardware, some blending operations have more limited support.",1284],["Enabling blending disables some optimizations on the GPU (mostly hidden surface removal/Early-Z), which can lead to increased GPU frame times.",1284],["Render pipeline compatibility",1284],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1284],["Blend Yes Yes Yes Yes ",1284],["Usage",1284],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1284],["If blending is enabled, the following occurs:",1284],["If the BlendOp command is used, the blending operation is set to that value. Otherwise, the blending operation defaults to Add.",1284],["If the blending operation is Add, Sub, RevSub, Min, or Max, the GPU multiplies the value of the output of the fragment shader by the source factor.",1284],["If the blending operation is Add, Sub, RevSub, Min, or Max, the GPU multiplies the value that is already in the render target by the destination factor.",1284],["The GPU performs the blending operation on the resulting values.",1284],["The blending equation is:",1284],["finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue",1284],["In this equation:",1284],["finalValue is the value that the GPU writes to the destination buffer.",1284],["sourceFactor is defined in the Blend command.",1284],["sourceValue is the value output by the fragment shader.",1284],["operation is the blending operation.",1284],["destinationFactor is defined in the Blend command.",1284],["destinationValue is the value already in the destination buffer.",1284],["Signature Example syntax Function ",1284],["Blend <state> Blend Off Disables blending for the default render target. This is the default value. ",1284],["Blend <render target> <state> Blend 1 Off As above, but for a given render target. (1) ",1284],["Blend <source factor> <destination factor> Blend One Zero Enables blending for the default render target. Sets blend factors for RGBA values. ",1284],["Blend <render target> <source factor> <destination factor> Blend 1 One Zero As above, but for a given render target. (1) ",1284],["Blend <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> Blend One Zero, Zero One Enables blending the default render target. Sets separate blend factors for RGB and alpha values. (2) ",1284],["Blend <render target> <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> Blend 1 One Zero, Zero One As above, but for a given render target. (1) (2) ",1284],["Notes:**",1284],["Any signature that specifies a render target requires OpenGL 4.0+, GL_ARB_draw_buffers_blend, or OpenGL ES 3.2.",1284],["Separate RGB and alpha blending is not compatible with advanced OpenGL blending operations.",1284],["",1284],["Valid parameter values",1284],["Parameter Value Function ",1284],["render target Integer, range 0 through 7 The render target index. ",1284],["state Off Disables blending. ",1284],["factor One The value of this input is one. Use this to use the value of the source or the destination color. ",1284],["Zero The value of this input is zero. Use this to remove either the source or the destination values. ",1284],["SrcColor The GPU multiplies the value of this input by the source color value. ",1284],["SrcAlpha The GPU multiplies the value of this input by the source alpha value. ",1284],["SrcAlphaSaturate The GPU multiplies the value of this input by the minimum value of source alpha and (1 - destination alpha) ",1284],["DstColor The GPU multiplies the value of this input by the frame buffer source color value. ",1284],["DstAlpha The GPU multiplies the value of this input by the frame buffer source alpha value. ",1284],["OneMinusSrcColor The GPU multiplies the value of this input by (1 - source color). ",1284],["OneMinusSrcAlpha The GPU multiplies the value of this input by (1 - source alpha). ",1284],["OneMinusDstColor The GPU multiplies the value of this input by (1 - destination color). ",1284],["OneMinusDstAlpha The GPU multiplies the value of this input by (1 - destination alpha). ",1284],["Common blend types",1284],["Here is the syntax for the most common blend types:",1284],["Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency",1284],["Blend One OneMinusSrcAlpha // Premultiplied transparency",1284],["Blend One One // Additive",1284],["Blend OneMinusDstColor One // Soft additive",1284],["Blend DstColor Zero // Multiplicative",1284],["Blend DstColor SrcColor // 2x multiplicative",1284],["Examples",1284],["Shader \"Examples/CommandExample\"",1284],["SubShader",1284],["// The rest of the code that defines the SubShader goes here.",1284],["Pass",1284],["// Enable regular alpha blending for this Pass",1284],["Blend SrcAlpha OneMinusSrcAlpha",1284],["// The rest of the code that defines the Pass goes here.",1284],["This example code demonstrates the syntax for using this command in a SubShader block.",1284],["Shader \"Examples/CommandExample\"",1284],["SubShader",1284],["// Enable regular alpha blending for this SubShader",1284],["Blend SrcAlpha OneMinusSrcAlpha",1284],["// The rest of the code that defines the SubShader goes here.",1284],["Pass",1284],["// The rest of the code that defines the Pass goes here.",1284],["ShaderLab command: BlendOp",1285],["Specifies the blending operation used by the Blend command. For this command to have any effect, there must also be a Blend command in the same Pass block (if this command is in a Pass block) or SubShader block (if this command is in a SubShader block).",1285],["Not all blending operations are supported on all devices, and support depends on both the graphics API and the hardware. Different graphics APIs handle unsupported blending operations differently: GL skips unsupported operations, and Vulkan and Metal fall back to Add operations.",1285],["Render pipeline compatibility",1285],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1285],["BlendOp Yes Yes Yes Yes ",1285],["Usage",1285],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1285],["Signature Example syntax Function ",1285],["BlendOp <operation> BlendOp Sub Sets the blending operation used by the Blend command. ",1285],["Valid parameter values",1285],["Parameter Value Function ",1285],["operation Add Add source and destination together. ",1285],["Sub Subtract destination from source. ",1285],["RevSub Subtract source from destination. ",1285],["Min Use the smaller of source and destination. (See note 1) ",1285],["Max Use the larger of source and destination. (See note 1) ",1285],["LogicalClear Logical operation: Clear (0) (See note 2) ",1285],["LogicalSet Logical operation: Set (1) (See note 2) ",1285],["LogicalCopy Logical operation: Copy (s) (See note 2) ",1285],["LogicalCopyInverted Logical operation: Copy inverted (!s) 2 ",1285],["LogicalNoop Logical operation: Noop (d) (See note 2) ",1285],["LogicalInvert Logical operation: Invert (!d) (See note 2) ",1285],["LogicalAnd Logical operation: And (s & d) (See note 2) ",1285],["LogicalNand Logical operation: Nand !(s & d) (See note 2) ",1285],["LogicalOr Logical operation: Or (s d) (See note 2) ",1285],["LogicalNor Logical operation: Nor !(s d) (See note 2) ",1285],["LogicalXor Logical operation: Xor (s ^ d) (See note 2) ",1285],["LogicalEquiv Logical operation: Equivalence !(s ^ d) (See note 2) ",1285],["LogicalAndReverse Logical operation: Reverse And (s & !d) (See note 2) ",1285],["LogicalAndInverted Logical operation: Inverted And (!s & d) (See note 2) ",1285],["LogicalOrReverse Logical operation: Reverse Or (s !d) (See note 2) ",1285],["LogicalOrInverted Logical operation: Inverted Or (!s d) (See note 2) ",1285],["Multiply Advanced OpenGL blending operation: Multiply (See note 3) ",1285],["Screen Advanced OpenGL blending operation: Screen (See note 3) ",1285],["Overlay Advanced OpenGL blending operation: Overlay (See note 3) ",1285],["Darken Advanced OpenGL blending operation: Darken (See note 3) ",1285],["Lighten Advanced OpenGL blending operation: Lighten (See note 3) ",1285],["ColorDodge Advanced OpenGL blending operation: ColorDodge (See note 3) ",1285],["ColorBurn Advanced OpenGL blending operation: ColorBurn (See note 3) ",1285],["HardLight Advanced OpenGL blending operation: HardLight (See note 3) ",1285],["SoftLight Advanced OpenGL blending operation: SoftLight (See note 3) ",1285],["Difference Advanced OpenGL blending operation: Difference (See note 3) ",1285],["Exclusion Advanced OpenGL blending operation: Exclusion (See note 3) ",1285],["HSLHue Advanced OpenGL blending operation: HSLHue (See note 3) ",1285],["HSLSaturation Advanced OpenGL blending operation: HSLSaturation (See note 3) ",1285],["HSLColor Advanced OpenGL blending operation: HSLColor (See note 3) ",1285],["HSLLuminosity Advanced OpenGL blending operation: HSLLuminosity (See note 3) ",1285],["Notes:",1285],["Min and Max require GL_EXT_blend_minmax on OpenGL ES 2.",1285],["Logical operations require DX 11.1+ or Vulkan.",1285],["Advanced OpenGL blending operations require GLES3.1 AEP+, GL_KHR_blend_equation_advanced, or GL_NV_blend_equation_advanced. They can only be used with standard RGBA blending; they are not compatible with separate RGB and alpha blending.",1285],["Examples",1285],["Shader \"Examples/CommandExample\"",1285],["SubShader",1285],["// The rest of the code that defines the SubShader goes here.",1285],["Pass",1285],["// Enable subtractive blending for this Pass",1285],["Blend SrcAlpha One",1285],["BlendOp RevSub",1285],["// The rest of the code that defines the Pass goes here.",1285],["This example code demonstrates the syntax for using this command in a SubShader block.",1285],["Shader \"Examples/CommandExample\"",1285],["SubShader",1285],["// Enable subtractive blending for this SubShader",1285],["Blend SrcAlpha One",1285],["BlendOp RevSub",1285],["// The rest of the code that defines the SubShader goes here.",1285],["Pass",1285],["// The rest of the code that defines the Pass goes here.",1285],["Built-in shader helper functions",1286],["Unity has a number of built-in utility functions designed to make writing shaders simpler and easier.",1286],["Functions declared in UnityCG.cginc",1286],["See Built-in shader include files for an overview of shader include files provided with Unity.",1286],["Vertex transformation functions in UnityCG.cginc",1286],["Function: Description: ",1286],["float4 UnityObjectToClipPos(float3 pos) Transforms a point from object space to the camera’s clip space in homogeneous coordinates. This is the equivalent of mul(UNITY_MATRIX_MVP, float4(pos, 1.0)), and should be used in its place. ",1286],["float3 UnityObjectToViewPos(float3 pos) Transforms a point from object space to view space. This is the equivalent of mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz, and should be used in its place. ",1286],["Generic helper functions in UnityCG.cginc",1286],["Function: Description: ",1286],["float3 WorldSpaceViewDir (float4 v) Returns world space direction (not normalized) from given object space vertex position towards the camera. ",1286],["float3 ObjSpaceViewDir (float4 v) Returns object space direction (not normalized) from given object space vertex position towards the camera. ",1286],["float2 ParallaxOffset (half h, half height, half3 viewDir) calculates UV offset for parallax normal mapping. ",1286],["fixed Luminance (fixed3 c) Converts color to luminance (grayscale). ",1286],["fixed3 DecodeLightmap (fixed4 color) Decodes color from Unity lightmap (RGBM or dLDR depending on platform). ",1286],["float4 EncodeFloatRGBA (float v) Encodes (0..1) range float into RGBA color, for storage in low precision render target. ",1286],["float DecodeFloatRGBA (float4 enc) Decodes RGBA color into a float. ",1286],["float2 EncodeFloatRG (float v) Encodes (0..1) range float into a float2. ",1286],["float DecodeFloatRG (float2 enc) Decodes a previously-encoded RG float. ",1286],["float2 EncodeViewNormalStereo (float3 n) Encodes view space normal into two numbers in 0..1 range. ",1286],["float3 DecodeViewNormalStereo (float4 enc4) Decodes view space normal from enc4.xy. ",1286],["Forward rendering helper functions in UnityCG.cginc",1286],["These functions are only useful when using forward rendering (ForwardBase or ForwardAdd pass types).",1286],["Function: Description: ",1286],["float3 WorldSpaceLightDir (float4 v) Computes world space direction (not normalized) to light, given object space vertex position. ",1286],["float3 ObjSpaceLightDir (float4 v) Computes object space direction (not normalized) to light, given object space vertex position. ",1286],["float3 Shade4PointLights (...) Computes illumination from four point lights, with light data tightly packed into vectors. Forward rendering uses this to compute per-vertex lighting. ",1286],["Screen-space helper functions in UnityCG.cginc",1286],["The following functions are helpers to compute coordinates used for sampling screen-space textures. They return float4 where the final coordinate to sample texture with can be computed via perspective division (for example xy/w).",1286],["The functions also take care of platform differences in render texture coordinates.",1286],["Function: Description: ",1286],["float4 ComputeScreenPos (float4 clipPos) Computes texture coordinate for doing a screenspace-mapped texture sample. Input is clip space position. ",1286],["float4 ComputeGrabScreenPos (float4 clipPos) Computes texture coordinate for sampling a GrabPass texure. Input is clip space position. ",1286],["Vertex-lit helper functions in UnityCG.cginc",1286],["These functions are only useful when using per-vertex lit shaders (\"Vertex\" pass type).",1286],["Function: Description: ",1286],["float3 ShadeVertexLights (float4 vertex, float3 normal) Computes illumination from four per-vertex lights and ambient, given object space position & normal. ",1286],["Built-in shader include files",1287],["Unity contains several files that can be used by your shader programs to bring in predefined variables and helper functions. This is done by the standard #include directive, e.g.:",1287],["CGPROGRAM",1287],["// ...",1287],["include \"UnityCG.cginc\"",1287],["// ...",1287],["ENDCG",1287],["Shader include files in Unity are with .cginc extension, and the built-in ones are:",1287],["HLSLSupport.cginc - (automatically included) Helper macros and definitions for cross-platform shader compilation.",1287],["UnityShaderVariables.cginc - (automatically included) Commonly used global variables.",1287],["UnityCG.cginc - commonly used helper functions.",1287],["AutoLight.cginc - lighting & shadowing functionality, e.g. surface shaders use this file internally.",1287],["Lighting.cginc - standard surface shader lighting models; automatically included when you're writing surface shaders.",1287],["TerrainEngine.cginc - helper functions for Terrain & Vegetation shaders.",1287],["These files are found inside Unity application ({unity install path}/Data/CGIncludes/UnityCG.cginc on Windows, /Applications/Unity/Unity.app/Contents/CGIncludes/UnityCG.cginc on Mac), if you want to take a look at what exactly is done in any of the helper code.",1287],["HLSLSupport.cginc",1287],["This file is automatically included when compiling CGPROGRAM shaders (but not included for HLSLPROGRAM ones). It declares various preprocessor macros to aid in multi-platform shader development.",1287],["UnityShaderVariables.cginc",1287],["This file is automatically included when compiling CGPROGRAM shaders (but not included for HLSLPROGRAM ones). It declares various built-in global variables that are commonly used in shaders.",1287],["UnityCG.cginc",1287],["This file is often included in Shader objects. It declares many built-in helper functions and data structures.",1287],["Data structures in UnityCG.cginc",1287],["struct appdata_base: vertex shader input with position, normal, one texture coordinate.",1287],["struct appdata_tan: vertex shader input with position, normal, tangent, one texture coordinate.",1287],["struct appdata_full: vertex shader input with position, normal, tangent, vertex color and two texture coordinates.",1287],["struct appdata_img: vertex shader input with position and one texture coordinate.",1287],["Built-in macros",1288],["Unity defines several preprocessor macros when compiling Shader programs.",1288],["Target platform",1288],["Macro: Target platform: ",1288],["SHADER_API_D3D11 Direct3D 11 ",1288],["SHADER_API_GLCORE Desktop OpenGL \"core\" (GL 3/4) ",1288],["SHADER_API_GLES OpenGL ES 2.0 ",1288],["SHADER_API_GLES3 OpenGL ES 3.0/3.1 ",1288],["SHADER_API_METAL iOS/Mac Metal ",1288],["SHADER_API_VULKAN Vulkan ",1288],["SHADER_API_D3D11_9X Direct3D 11 \"feature level 9.x\" target for Universal Windows Platform ",1288],["SHADER_API_DESKTOP Windows, Mac and Linux desktop platforms, WebGL, Stadia ",1288],["SHADER_API_MOBILE iOS and Android mobile platforms, tvOS ",1288],["Additionally, SHADER_TARGET_GLSL is defined when the target shading language is GLSL (always true for OpenGL/GLES platforms).",1288],["Shader target model",1288],["SHADER_TARGET is defined to a numeric value that matches the Shader target compilation model (that is, matching #pragma target directive). For example, SHADER_TARGET is 30 when compiling into Shader model 3.0. You can use it in Shader code to do conditional checks. For example:",1288],["if SHADER_TARGET < 30",1288],["// less than Shader model 3.0:",1288],["// very limited Shader capabilities, do some approximation",1288],["else",1288],["// decent capabilities, do a better thing",1288],["endif",1288],["Unity version",1288],["UNITY_VERSION contains the numeric value of the Unity version. For example, UNITY_VERSION is 202030 for Unity 2020.3.0. This can be used for version comparisons if you need to write Shaders that use different built-in Shader functionality. For example, a #if UNITY_VERSION >= 202000 preprocessor check only passes on versions 2020 or later.",1288],["Shader stage being compiled",1288],["Preprocessor macros SHADER_STAGE_VERTEX, SHADER_STAGE_FRAGMENT, SHADER_STAGE_DOMAIN, SHADER_STAGE_HULL, SHADER_STAGE_GEOMETRY, SHADER_STAGE_COMPUTE are defined when compiling each Shader stage. Typically they are useful when sharing Shader code between pixel Shaders and compute Shaders, to handle cases where some things have to be done slightly differently.",1288],["Platform difference helpers",1288],["Direct use of these platform macros is discouraged, as they don't always contribute to the future-proofing of your code. For example, if you're writing a Shader that checks for D3D11, you may want to ensure that, in the future, the check is extended to include Vulkan. Instead, Unity defines several helper macros (in HLSLSupport.cginc):",1288],["Macro: Use: ",1288],["UNITY_BRANCH Add this before conditional statements to tell the compiler that this should be compiled into an actual branch. Expands to [branch] when on HLSL platforms. ",1288],["UNITY_FLATTEN Add this before conditional statements to tell the compiler that this should be flattened to avoid an actual branch instruction. Expands to [flatten] when on HLSL platforms. ",1288],["UNITY_NO_SCREENSPACE_SHADOWS Defined on platforms that do not use cascaded screenspace shadowmaps (mobile platforms). ",1288],["UNITY_NO_LINEAR_COLORSPACE Defined on platforms that do not support Linear color space (mobile platforms). ",1288],["UNITY_NO_RGBM Defined on platforms where RGBM compression for lightmaps is not used (mobile platforms). ",1288],["UNITY_NO_DXT5nm Defined on platforms that do not use DXT5nm normal-map compression (mobile platforms). ",1288],["UNITY_FRAMEBUFFER_FETCH_AVAILABLE Defined on platforms where \"framebuffer color fetch\" functionality can be available (generally iOS platforms - OpenGL ES 2.0, 3.0 and Metal). ",1288],["UNITY_USE_RGBA_FOR_POINT_SHADOWS Defined on platforms where point light shadowmaps use RGBA Textures with encoded depth (other platforms use single-channel floating point Textures). ",1288],["UNITY_ATTEN_CHANNEL Defines which channel of light attenuation Texture contains the data; used in per-pixel lighting code. Defined to either 'r' or 'a'. ",1288],["UNITY_HALF_TEXEL_OFFSET Defined on platforms that need a half-texel offset adjustment in mapping texels to pixels. ",1288],["UNITY_UV_STARTS_AT_TOP Always defined with value of 1 or 0. A value of 1 is on platforms where Texture V coordinate is 0 at the \"top\" of the Texture. Direct3D-like platforms use value of 1; OpenGL-like platforms use value of 0. ",1288],["UNITY_MIGHT_NOT_HAVE_DEPTH_Texture Defined if a platform might emulate shadow maps or depth Textures by manually rendering depth into a Texture. ",1288],["UNITY_PROJ_COORD(a) Given a 4-component vector, this returns a Texture coordinate suitable for projected Texture reads. On most platforms this returns the given value directly. ",1288],["UNITY_NEAR_CLIP_VALUE Defined to the value of near clipping plane. Direct3D-like platforms use 1.0 while OpenGL-like platforms use -1.0. ",1288],["UNITY_VPOS_TYPE Defines the data type required for pixel position input (VPOS): float2 on D3D9, float4 elsewhere. ",1288],["UNITY_CAN_COMPILE_TESSELLATION Defined when the Shader compiler \"understands\" the tessellation Shader HLSL syntax (currently only D3D11). ",1288],["UNITY_INITIALIZE_OUTPUT(type,name) Initializes the variable name of given type to zero. ",1288],["UNITY_COMPILER_HLSL, UNITY_COMPILER_HLSL2GLSL, UNITY_COMPILER_CG Indicates which Shader compiler is being used to compile Shaders. See documentation on Shader compilation for more details. Use this if you run into very specific Shader syntax handling differences between the compilers, and want to write different code for each compiler. ",1288],["UNITY_REVERSED_Z - defined on plaftorms using reverse Z buffer. Stored Z values are in the range 1..0 instead of 0..1.",1288],["Shadow mapping macros",1288],["Declaring and sampling shadow maps can be very different depending on the platform. Unity has several macros to help with this:",1288],["Macro: Use: ",1288],["UNITY_DECLARE_SHADOWMAP(tex) Declares a shadowmap Texture variable with name \"tex\". ",1288],["UNITY_SAMPLE_SHADOW(tex,uv) Samples shadowmap Texture \"tex\" at given \"uv\" coordinate (XY components are Texture location, Z component is depth to compare with). Returns single float value with the shadow term in 0..1 range. ",1288],["UNITY_SAMPLE_SHADOW_PROJ(tex,uv) Similar to above, but does a projective shadowmap read. \"uv\" is a float4, all other components are divided by .w for doing the lookup. ",1288],["The format of tex must be RenderTextureFormat.Shadowmap.",1288],["NOTE: Not all graphics cards support shadowmaps. Use SystemInfo.SupportsRenderTextureFormat to check for support.",1288],["",1288],["Constant buffer macros",1288],["Direct3D 11 groups all Shader variables into \"constant buffers\". Most of Unity's built-in variables are already grouped, but for variables in your own Shaders it might be more optimal to put them into separate constant buffers depending on expected frequency of updates.",1288],["Use CBUFFER_START(name) and CBUFFER_END macros for that:",1288],["CBUFFER_START(MyRarelyUpdatedVariables)",1288],["float4 _SomeGlobalValue;",1288],["CBUFFER_END",1288],["If you use a GPU compute buffer or graphics buffer to set the value of the variables, make sure the buffer and the constant buffer have matching data layouts on all graphics APIs you build for. See Using constant buffers with GPU buffers for more information.",1288],["Texture/Sampler declaration macros",1288],["Usually you would use texture2D in Shader code to declare a Texture and Sampler pair.",1288],["However on some platforms (such as DX11), Textures and Samplers are separate objects,",1288],["and maximum possible Sampler count is quite limited. Unity has some macros to declare",1288],["Textures without Samplers, and to sample a Texture using a Sampler from another Texture.",1288],["Use this if you end up running into Sampler limits, and you know that several of your",1288],["Textures can in fact share a Sampler (Samplers define Texture filtering and wrapping modes).",1288],["Macro: Use: ",1288],["UNITY_DECLARE_TEX2D(name) Declares a Texture and Sampler pair. ",1288],["UNITY_DECLARE_TEX2D_NOSAMPLER(name) Declares a Texture without a Sampler. ",1288],["UNITY_DECLARE_TEX2DARRAY(name) Declares a Texture array Sampler variable. ",1288],["UNITY_SAMPLE_TEX2D(name,uv) Sample from a Texture and Sampler pair, using given Texture coordinate. ",1288],["UNITY_SAMPLE_TEX2D_SAMPLER( name,samplername,uv) Sample from Texture (name), using a Sampler from another Texture (samplername). ",1288],["UNITY_SAMPLE_TEX2DARRAY(name,uv) Sample from a Texture array with a float3 UV; the z component of the coordinate is array element index. ",1288],["UNITY_SAMPLE_TEX2DARRAY_LOD(name,uv,lod) Sample from a Texture array with an explicit mipmap level. ",1288],["For more information, see documentation on Sampler States.",1288],["Surface Shader pass indicators",1288],["When Surface Shaders are compiled, they generate a lot of code for various passes to do lighting. When compiling each pass, one of the following macros is defined:",1288],["Macro: Use: ",1288],["UNITY_PASS_FORWARDBASE Forward rendering base pass (main directional light, lightmaps, SH). ",1288],["UNITY_PASS_FORWARDADD Forward rendering additive pass (one light per pass). ",1288],["UNITY_PASS_DEFERRED Deferred shading pass (renders G-buffer). ",1288],["UNITY_PASS_SHADOWCASTER Shadow caster and depth Texture rendering pass. ",1288],["Disable Auto-Upgrade",1288],["UNITY_SHADER_NO_UPGRADE allows you to disable Unity from automatically upgrading or modifying your shader file.",1288],["Depth Texture helper macros",1288],["Most of the time, Depth Texture are used to render Depth from the Camera. The UnityCG.cginc include file contains some macros to deal with the above complexity in this case:",1288],["COMPUTE_EYEDEPTH(i): computes eye space depth of the vertex and outputs it in o. Use it in a vertex program when not rendering into a depth texture.",1288],["DECODE_EYEDEPTH(i)/LinearEyeDepth(i): given high precision value from depth texture i, returns corresponding eye space depth.",1288],["Linear01Depth(i): given high precision value from depth texture i, returns corresponding linear depth in range between 0 and 1.",1288],["UNITY_TRANSFER_DEPTH(o): Deprecated. Computes the eye space depth of the vertex and outputs it in o (which must be a float2). On platforms with native depth textures this macro does nothing, because the Z buffer value is rendered implicitly.",1288],["UNITY_OUTPUT_DEPTH(i): Deprecated. Returns eye space depth from i (which must be a float2). On platforms with native depth textures this macro always returns zero, because the Z buffer value is rendered implicitly.",1288],["Note: On DX11/12 and Metal, the Z buffer range is 1-0 and UNITY_REVERSED_Z is defined. On other platforms, the range is 0-1.",1288],["For example, this shader would render depth of its GameObjects:",1288],["Shader \"Render Depth\" {",1288],["SubShader {",1288],["Tags { \"RenderType\"=\"Opaque\" }",1288],["Pass {",1288],["CGPROGRAM",1288],["pragma vertex vert",1288],["pragma fragment frag",1288],["include \"UnityCG.cginc\"",1288],["struct v2f {",1288],["float4 pos : SV_POSITION;",1288],["float2 depth : TEXCOORD0;",1288],["};",1288],["v2f vert (appdata_base v) {",1288],["v2f o;",1288],["o.pos = UnityObjectToClipPos(v.vertex);",1288],["UNITY_TRANSFER_DEPTH(o.depth);",1288],["return o;",1288],["half4 frag(v2f i) : SV_Target {",1288],["UNITY_OUTPUT_DEPTH(i.depth);",1288],["ENDCG",1288],["Cameras and depth textures",1289],["A Camera can generate a depth, depth+normals, or motion vector texture. This is a minimalistic G-buffer texture that can be used for post-processing effects or to implement custom lighting models.",1289],["These are mostly used by effects; for example, post-processing effects often use depth information.",1289],["Pixel values in the depth texture range between 0 and 1, with a non-linear distribution. Precision is usually 32 or 16 bits, depending on configuration and platform used. When reading from the Depth Texture, a high precision value in a range between 0 and 1 is returned. If you need to get distance from the Camera, or an otherwise linear 0-1 value, compute that manually using helper macros (see below).",1289],["Depth Textures are supported on most modern hardware and graphics APIs. Special requirements are listed below:",1289],["Direct3D 11+ (Windows), OpenGL 3+ (Mac/Linux), OpenGL ES 3.0+ (iOS), Metal (iOS), and popular consoles support depth textures.",1289],["OpenGL ES 2.0 (Android) requires GL_OES_depth_texture extension to be present.",1289],["WebGL requires WEBGL_depth_texture extension.",1289],["The Camera's depth Texture mode can be enabled using Camera.depthTextureMode variable from script. It is also possible to build similar textures yourself, using Shader Replacement feature.",1289],["There are three possible depth texture modes:",1289],["DepthTextureMode.Depth: a depth texture.",1289],["DepthTextureMode.DepthNormals: depth and view space normals packed into one texture.*",1289],["DepthTextureMode.MotionVectors: per-pixel screen space motion of each screen texel for the current frame. Packed into a RG16 texture.",1289],["These are flags, so it is possible to specify any combination of the above textures.",1289],["DepthTextureMode.Depth texture",1289],["This builds a screen-sized depth texture.",1289],["Depth texture is rendered using the same shader passes as used for shadow caster rendering (ShadowCaster pass type). So by extension, if a shader does not support shadow casting (i.e. there's no shadow caster pass in the shader or any of the fallbacks), then objects using that shader will not show up in the depth texture.",1289],["Make your shader fallback to some other shader that has a shadow casting pass, or",1289],["If you're using surface shaders, adding an addshadow directive will make them generate a shadow pass too.",1289],["Note that only \"opaque\" objects (that which have their materials and shaders setup to use render queue <= 2500) are rendered into the depth texture.",1289],["DepthTextureMode.DepthNormals texture",1289],["This builds a screen-sized 32 bit (8 bit/channel) texture, where view space normals are encoded into R&G channels, and depth is encoded in B&A channels. Normals are encoded using Stereographic projection, and depth is 16 bit value packed into two 8 bit channels.",1289],["UnityCG.cginc include file has a helper function DecodeDepthNormal to decode depth and normal from the encoded pixel value. Returned depth is in 0..1 range.",1289],["For examples on how to use the depth and normals texture, please refer to Replacing shaders at runtime or Ambient Occlusion in Post-processing and full-screen effects.",1289],["DepthTextureMode.MotionVectors texture",1289],["This builds a screen-sized RG16 (16-bit float/channel) texture, where screen space pixel motion is encoded into the R&G channels. The pixel motion is encoded in screen UV space.",1289],["When sampling from this texture motion from the encoded pixel is returned in a range of -1..1. This will be the UV offset from the last frame to the current frame.",1289],["Tips & Tricks",1289],["Camera inspector indicates when a camera is rendering a depth or a depth+normals texture.",1289],["The way that depth textures are requested from the Camera (Camera.depthTextureMode) might mean that after you disable an effect that needed them, the Camera might still continue rendering them. If there are multiple effects present on a Camera, where each of them needs the depth texture, there's no good way to automatically disable depth texture rendering if you disable the individual effects.",1289],["When implementing complex Shaders or Image Effects, keep Rendering Differences Between Platforms in mind. In particular, using depth texture in an Image Effect often needs special handling on Direct3D + Anti-Aliasing.",1289],["In some cases, the depth texture might come directly from the native Z buffer. If you see artifacts in your depth texture, make sure that the shaders that use it do not write into the Z buffer (use ZWrite Off).",1289],["Shader variables",1289],["Depth textures are available for sampling in shaders as global shader properties. By declaring a sampler called _CameraDepthTexture you will be able to sample the main depth texture for the camera.",1289],["_CameraDepthTexture always refers to the camera's primary depth",1289],["texture. By contrast, you can use _LastCameraDepthTexture to refer to the last depth texture rendered by any camera. This could be useful for example if you render a half-resolution depth texture in script using a secondary camera and want to make it available to a post-process shader.",1289],["The motion vectors texture (when enabled) is available in Shaders as a global Shader property. By declaring a sampler called '_CameraMotionVectorsTexture' you can sample the Texture for the curently rendering Camera.",1289],["Under the hood",1289],["Depth textures can come directly from the actual depth buffer,",1289],["or be rendered in a separate pass, depending on the rendering",1289],["path used and the hardware. Typically when using Deferred",1289],["Shading rendering path, the depth textures come \"for free\" since they are a product of the",1289],["G-buffer rendering anyway.",1289],["When the DepthNormals texture is rendered in a separate pass, this is done through Shader Replacement. Hence it is important to have correct \"RenderType\" tag in your shaders.",1289],["When enabled, the MotionVectors texture always comes from a extra render pass. Unity will render moving GameObjects into this buffer, and construct their motion from the last frame to the current frame.",1289],["ShaderLab command: ColorMask",1290],["Sets the color channel writing mask, which prevents the GPU from writing to channels in the render target.",1290],["By default, the GPU writes to all channels (RGBA). For some effects you might want to leave certain channels unmodified; for example, you can disable color rendering to render uncolored shadows. Another common use case is to disable color writes completely so that you can populate one buffer with data without writing to others; for example, you might want to populate the stencil buffer without writing to the render target.",1290],["Render pipeline compatibility",1290],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1290],["ColorMask Yes Yes Yes Yes ",1290],["Usage",1290],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1290],["Signature Example syntax Function ",1290],["ColorMask <channels> ColorMask RGB Write to the given channels of the default render target. ",1290],["ColorMask <channels> <render target> ColorMask RGB 2 As above, but for a given render target. ",1290],["Valid parameter values",1290],["Parameter Value Function ",1290],["render target Integer, 0 through 7. The render target index. ",1290],["channels 0 Enables color writes to the R, G, B, and A channels. ",1290],["R Enables color writes to the red channel. ",1290],["G Enables color writes to the green channel. ",1290],["B Enables color writes to the blue channel. ",1290],["A Enables color writes to the alpha channel. ",1290],["Any combination of R, G, B, and A without spaces. For example: RB Enables color writes to the given channels. ",1290],["Examples",1290],["Shader \"Examples/CommandExample\"",1290],["SubShader",1290],["// The rest of the code that defines the SubShader goes here.",1290],["Pass",1290],["// Enable writing only to the RGB channels for this Pass, which disables writing to the alpha channel",1290],["ColorMask RGB",1290],["// The rest of the code that defines the Pass goes here.",1290],["This example code demonstrates the syntax for using this command in a SubShader block.",1290],["Shader \"Examples/CommandExample\"",1290],["SubShader",1290],["// Enable writing only to the RGB channels for this SubShader, which disables writing to the alpha channel",1290],["ColorMask RGB",1290],["// The rest of the code that defines the SubShader goes here.",1290],["Pass",1290],["// The rest of the code that defines the Pass goes here.",1290],["ShaderLab command: Conservative",1291],["Enables or disables conservative rasterization.",1291],["Rasterization is a rendering technique that converts vector data (triangle projections) to pixel data (render target) by determining which pixels are covered by triangles. Normally, a GPU determines whether or not to rasterize a pixel by sampling points within the pixel to determine whether they are covered by the triangle; if the coverage is sufficient, then the GPU determines that the pixel is covered. Conservative rasterization means that the GPU rasterizes a pixel that is partially covered by a triangle, regardless of coverage. This is useful when certainty is required, such as when performing occlusion culling, collision detection on the GPU, or visibility detection.",1291],["Conservative rasterization means that the GPU generates more fragments on triangle edges; this leads to more fragment shader invocations, which can lead to increased GPU frame times.",1291],["Render pipeline compatibility",1291],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1291],["Conservative Yes Yes Yes Yes ",1291],["Usage",1291],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1291],["Check for hardware support using the SystemInfo.supportsConservativeRaster API. On hardware that does not support this command, it is ignored.",1291],["Signature Example syntax Function ",1291],["Conservative <enabled> Conservative True Enables or disables conservative rasterization.Requires DX 11.3+, or GL_NV_conservative_raster. ",1291],["Valid parameter values",1291],["Parameter Value Function ",1291],["enabled True Enables conservative rasterization. ",1291],["False Disables conservative rasterization. ",1291],["Examples",1291],["Shader \"Examples/CommandExample\"",1291],["SubShader",1291],["// The rest of the code that defines the SubShader goes here.",1291],["Pass",1291],["// Enable conservative rasterization for this Pass.",1291],["Conservative True",1291],["// The rest of the code that defines the Pass goes here.",1291],["This example code demonstrates the syntax for using this command in a SubShader block.",1291],["Shader \"Examples/CommandExample\"",1291],["SubShader",1291],["// Enable conservative rasterization for this SubShader.",1291],["Conservative True",1291],["// The rest of the code that defines the SubShader goes here.",1291],["Pass",1291],["// The rest of the code that defines the Pass goes here.",1291],["ShaderLab command: Cull",1292],["Sets which polygons the GPU should cull, based on the direction that they are facing relative to the camera.",1292],["Culling is the process of determining what not to draw. Culling improves rendering efficiency, by not wasting GPU time drawing things that would not be visible in the final image.",1292],["By default, the GPU performs back-face culling; this means that it does not draw polygons that face away from the viewer. In general, the more you can reduce the rendering workload, the better; you should therefore change this setting only when necessary.",1292],["Render pipeline compatibility",1292],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1292],["Cull Yes Yes Yes Yes ",1292],["Usage",1292],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1292],["Signature Example syntax Function ",1292],["Cull <state> Cull Back Sets which polygons the GPU should cull, based on the direction that they face relative to the camera. ",1292],["Valid parameter values",1292],["Parameter Value Function ",1292],["state Back Cull polygons that face away from the camera. This is called back-face culling.This is the default value. ",1292],["Front Cull polygons that face towards the camera. This is called front-face culling.Use this for turning geometry inside-out. ",1292],["Off Do not cull polygons based on the direction that they face.Use this for special effects, such as transparent objects or double-sided walls. ",1292],["Examples",1292],["Shader \"Examples/CommandExample\"",1292],["SubShader",1292],["// The rest of the code that defines the SubShader goes here.",1292],["Pass",1292],["// Disable culling for this Pass.",1292],["// You would typically do this for special effects, such as transparent objects or double-sided walls.",1292],["Cull Off",1292],["// The rest of the code that defines the Pass goes here.",1292],["This example code demonstrates the syntax for using this command in a SubShader block.",1292],["Shader \"Examples/CommandExample\"",1292],["SubShader",1292],["// Disable culling for this SubShader.",1292],["// You would typically do this for special effects, such as transparent objects or double-sided walls.",1292],["Cull Off",1292],["// The rest of the code that defines the SubShader goes here.",1292],["Pass",1292],["// The rest of the code that defines the Pass goes here.",1292],["ShaderLab: assigning a custom editor",1293],["This page contains information on using a CustomEditor or CustomEditorForRenderPipeline block in your ShaderLab code to assign custom editors.",1293],["Use custom editors to display data types that Unity can't display using its default material Inspector, or to define custom controls or data validation.",1293],["Render pipeline compatibility",1293],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1293],["ShaderLab: CustomEditor block Yes Yes Yes Yes ",1293],["ShaderLab: CustomEditorForRenderPipeline block No Yes Yes Yes ",1293],["Using the CustomEditor and CustomEditorForRenderPipeline blocks",1293],["In ShaderLab, you can assign a custom editor for all render pipelines. To do this, you can place a CustomEditor block inside a Shader block. You can also assign different custom editors for render pipelines based on the Scriptable Render Pipeline by placing a CustomEditorForRenderPipeline block inside a Shader block. If your code contains both a CustomEditor and CustomEditorForRenderPipeline block, the render pipeline specific one overrides the CustomEditor one.",1293],["Signature Function ",1293],["CustomEditor \"[custom editor class name]\" Unity uses the custom editor defined in the named class, unless this is overridden by a CustomEditorForRenderPipeline block. ",1293],["CustomEditorForRenderPipeline \"[custom editor class name]\" \"[render pipeline asset class name]\" When the active Render Pipeline Asset is the named type, Unity uses the custom editor defined in the named class. ",1293],["Creating a custom editor class for a shader asset",1293],["To define a custom editor for shader assets that represent a given Shader object, you create a script that inherits from the ShaderGUI class. Place your script in a folder named Editor, in your Assets folder.",1293],["The script should follow this format:",1293],["using UnityEditor;",1293],["public class ExampleShaderGUI : ShaderGUI",1293],["public override void OnGUI (MaterialEditor materialEditor, MaterialProperty[] properties)",1293],["// Custom code that controls the appearance of the Inspector goes here",1293],["base.OnGUI (materialEditor, properties);",1293],["Examples",1293],["This example code demonstrates the syntax for specifying a default custom editor for a shader asset using the CustomEditor block, and then specifying two additional custom editors for specific Render Pipeline Assets using the CustomEditorForRenderPipeline block.",1293],["Shader \"Examples/UsesCustomEditor\"",1293],["// The Unity Editor uses the class ExampleCustomEditor to configure the Inspector for this shader asset",1293],["CustomEditor \"ExampleShaderGUI\"",1293],["CustomEditorForRenderPipeline \"ExampleRenderPipelineShaderGUI\" \"ExampleRenderPipelineAsset\"",1293],["CustomEditorForRenderPipeline \"OtherExampleRenderPipelineShaderGUI\" \"OtherExampleRenderPipelineAsset\"",1293],["SubShader",1293],["// Code that defines the SubShader goes here.",1293],["Pass",1293],["// Code that defines the Pass goes here.",1293],["Shader data types and precision",1294],["Unity uses the standard Shader language HLSL and supports general HLSL data types. However, Unity handles some data types differently from HLSL to provide better support on mobile platforms.",1294],["Basic data types",1294],["Shaders carry out the majority of calculations using floating point numbers (also called as float in regular programming languages like C#). In Unity's implementation of HLSL, the scalar floating point data types are float, half, and fixed. These data types differ in precision and, consequently, performance or power usage. There are also several related data types for vectors and matrices such as half3 and float4x4.",1294],["High precision: float",1294],["This is the highest precision floating point data type. On most platforms, float values are 32 bits like in regular programming languages.",1294],["Full float precision is typically useful for world space positions, texture coordinates, or scalar calculations that involve complex functions such as trigonometry or power/exponentiation. If you use lower precision floating point data types for these purposes, it can cause precision-related artifacts. For example with texture coordinates, a half doesn't have enough precision to accurately represent 1-texel offsets of larger textures.",1294],["Medium precision: half",1294],["This is a medium precision floating point data type. On platforms that support half values, they're generally 16 bits. On other platforms, this becomes float.",1294],["half values have a smaller range and precision than float values.",1294],["Half precision is useful to get better shader performance for values that don't require high precision such as short vectors, directions, object space positions, and high dynamic range colors.",1294],["Low precision: fixed",1294],["This is only supported by the OpenGL ES 2.0 Graphics API. On other APIs it becomes the lowest supported precision (half or float).",1294],["This is the lowest precision fixed point value and is generally 11 bits. fixed values range from -2.0 to +2.0 and have a precision of 1/256.",1294],["Fixed precision is useful for regular colors (that are typically stored in regular textures) and performing simple operations on them.",1294],["Floating point numbers",1294],["Unity's shader compiler ignores floating point number suffixes from HLSL. Floating point numbers with a suffix therefore all become float.",1294],["This code shows a possible negative impact of numbers with the h suffix in Unity:",1294],["half3 packedNormal = ...;",1294],["half3 normal = packedNormal * 2.0h - 1.0h;",1294],["Since the h suffix is ignored, the shader compiler generates code that executes these steps:",1294],["Calculate an intermediary normal value in high precision (float3)",1294],["Convert the intermediary value to half3.",1294],["This reduces your shader's performance.",1294],["This code is more efficient because it only uses half values in its calculations:",1294],["half3 packedNormal = ...;",1294],["half3 normal = packedNormal * half(2.0) - half(1.0);",1294],["Floating point numbers",1294],["Unity's shader compiler ignores floating point number suffixes from HLSL. Floating point numbers with a suffix therefore all become float.",1294],["This code shows a possible negative impact of numbers with the h suffix in Unity:",1294],["half3 packedNormal = ...;",1294],["half3 normal = packedNormal * 2.0h - 1.0h;",1294],["Since the h suffix is ignored, the shader compiler generates code that executes these steps:",1294],["Calculate an intermediary normal value in high precision (float3)",1294],["Convert the intermediary value to half3.",1294],["This reduces your shader's performance.",1294],["This code is more efficient because it only uses half values in its calculations:",1294],["half3 packedNormal = ...;",1294],["half3 normal = packedNormal * half(2.0) - half(1.0);",1294],["Integer data types",1294],["Integers (int data type) are often used as loop counters or array indices, and typically work fine across various platforms.",1294],["Depending on the platform you've chosen, your GPU might not support integer types. For example, OpenGL ES 2.0 GPUs only operate on floating point data, and might need complicated floating point math instructions to emulate simple-looking integer expressions that involves bit or logical operations.",1294],["Direct3D 11, OpenGL ES 3, Metal, and other modern platforms have proper support for integer data types, so using bit shifts and bit masking works as expected.",1294],["Composite vector/matrix types",1294],["HLSL has built-in vector and matrix types are created from the basic types. For example, float3 is a 3D vector with .x, .y, .z components, and half4 is a medium precision 4D vector with .x, .y, .z, .w components. Alternatively, you can index vectors using .r, .g, .b, .a components, which is useful when working on colors. For example:",1294],["float4 myColor = ...",1294],["float redValue = myColor.r;",1294],["Matrix types are built in a similar way; for example float4x4 is a 4x4 transformation matrix. However, some platforms like OpenGL ES 2.0 only support square matrices.",1294],["",1294],["Texture/Sampler types",1294],["Typically, you declare textures in your HLSL code in the following way:",1294],["sampler2D _MainTex;",1294],["samplerCUBE _Cubemap;",1294],["For mobile platforms, these translate into low precision samplers, that is, the textures should have low precision data in them.",1294],["You can change the default sampler precision for the whole Unity project in the Player Settings using the Shader precision model dropdown.",1294],["If you know your texture contains HDR colors, you might want to use half precision sampler:",1294],["sampler2D_half _MainTex;",1294],["samplerCUBE_half _Cubemap;",1294],["Or if your texture contains full float precision data depth texture, use a full precision sampler:",1294],["sampler2D_float _MainTex;",1294],["samplerCUBE_float _Cubemap;",1294],["Precision, hardware support and performance",1294],["GPUs in desktop platforms and most modern mobile platforms support 32-bit floating point precision in the vertex and fragment shader stages. However, mobile GPUs perform better and are more energy efficient if you use lower precision.",1294],["If the platform supports lower precision, using half or fixed has the following effects:",1294],["\nShaders use less memory, bandwidth, and power.\n",1294],["\nCalculations are faster. Using fewer bits can improve how the GPU allocates registers, and allow the GPU to use specialized fast execution units.\n",1294],["You should start with lower precision for everything except world space coordinates and texture coordinates. Check whether using lower precision causes visible errors in shader calculations (for example, color bands, or geometry that jumps between positions). If you see errors, increase precision.",1294],["Support for infinities, NaNs and other special floating point values",1294],["Support for special floating point values can be different depending on which GPU family (mostly mobile) you're running.",1294],["All PC GPUs that support Direct3D 10 support well-specified IEEE 754 floating point standard. This means that float numbers behave exactly like they do in regular programming languages on the CPU.",1294],["Mobile GPUs can have slightly different levels of support. On some, dividing zero by zero might result in a NaN (\"not a number\"); on others it might result in infinity, zero or any other unspecified value. Make sure to test your shaders on the target device to check they're supported.",1294],["External GPU documentation",1294],["GPU vendors have in-depth guides about the performance and capabilities of their GPUs. See these for details:",1294],["Additional resources:",1294],["Debugging shaders using Visual Studio",1295],["You can use Visual Studio to debug shaders in a Unity application on Windows platforms using DirectX 11 or 12. This page contains information on how to do this.",1295],["Note:** If you are using DirectX 12, Microsoft recommends that you use PIX to debug shaders instead of Visual Studio. For information on using PIX on Windows with Unity, see Debugging shaders using PIX.",1295],["Preparing your shaders",1295],["To debug shaders, you must compile them with debug symbols included. To do that, insert the #pragma enable_d3d11_debug_symbols directive into the source code of each shader that you want to debug.",1295],["Warning:** This pragma directive can negatively affect performance. Remove it from your shader code before you make a final build. For more information on this pragma directive, see Shader compilation: pragma directives.",1295],["",1295],["Creating a placeholder Visual Studio project for Windows Standalone",1295],["If you build your application for Windows Standalone, you must create a placeholder Visual Studio project. If you build your application for Universal Windows Platform, Unity generates a Visual Studio project for you.",1295],["Launch Visual Studio.",1295],["Go to File > New > Project > Visual C++ > Empty Project.",1295],["Go to Project > Properties > Configuration Properties > Debugging",1295],["In the Command field, replace $(TargetPath) with the path to your Windows Standalone application (for example, C:\\MyApp\\MyApp.exe)",1295],["If you want to force the project to run under DirectX 11, select Command Arguments and type -force-d3d11.",1295],["Using Visual Studio to debug shaders",1295],["For instructions on setting up Visual Studio, see the Microsoft documentation: Install Visual Studio.",1295],["For instructions on setting up and using Visual Studio's graphics debugging tools, see the Microsoft documentation: Visual Studio Graphics Diagnostics.",1295],["ShaderLab: assigning a fallback",1296],["This page contains information on using a Fallback block in your ShaderLab code to assign a fallback Shader object. For information on how a Shader object works, and how Unity chooses when to use a fallback, see Shader objects introduction.",1296],["Render pipeline compatibility",1296],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1296],["ShaderLab: Fallback block Yes Yes Yes Yes ",1296],["Using the Fallback block",1296],["To assign a fallback, you place a Fallback block inside a Shader block.",1296],["Signature Function ",1296],["Fallback \"<name>\" If no compatible SubShaders are found, use the named Shader object. ",1296],["Fallback Off Do not use a fallback Shader object in place of this one. If no compatible SubShaders are found, display the error shader. ",1296],["Fallback code examples",1296],["This example code demonstrates the syntax for creating a Shader object that has a named fallback.",1296],["Shader \"Examples/ExampleFallback\"",1296],["SubShader",1296],["// Code that defines the SubShader goes here.",1296],["Pass",1296],["// Code that defines the Pass goes here.",1296],["Fallback \"ExampleOtherShader\"",1296],["ShaderLab: legacy fog",1297],["Note**: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.",1297],["Render pipeline compatibility",1297],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1297],["Legacy fog Yes No No No ",1297],["Overview",1297],["Use the Fog command to enable or disable Unity's built-in fog, in shaders that are written using legacy fixed-function style commands.",1297],["Configure the project settings for the built-in fog effect using the RenderSettings class, or the Lighting window, and then use this command to enable or disable fog in a given Pass.",1297],["Fogging blends the color of the generated pixels down towards a given color, based on the distance from the camera. Fogging does not modify a blended pixel’s alpha value, only its RGB components.",1297],["Valid parameter values",1297],["Parameter Value Function ",1297],["Mode Off Do not apply built-in fog to this Pass. ",1297],["Global Apply built-in fog to this Pass, based on the project settings.Note that if fog is disabled in the project settings, Unity will not apply it to this Pass. ",1297],["Examples",1297],["This example code demonstrates the syntax for using this command in a Pass block.",1297],["Shader \"Examples/FogExample\"",1297],["SubShader",1297],["// The rest of the code that defines the SubShader goes here.",1297],["Pass",1297],["Fog Off",1297],["// The rest of the code that defines the Pass goes here.",1297],["GLSL in Unity",1298],["As well as writing HLSL shader programs, you can also write raw OpenGL Shading Language (GLSL) shader programs in Unity.",1298],["Note:** This is not recommended or needed as part of a normal workflow; Unity cross-compiles your HLSL into optimized GLSL when needed. The use of raw GLSL is only recommended for testing, or for supporting projects on platforms that use GLSL.",1298],["GLSL snippets",1298],["GLSL program snippets are written between GLSLPROGRAM and ENDGLSL keywords.",1298],["In GLSL, all shader function entry points have to be called main(). When Unity loads the GLSL shader, it loads the source once for the vertex program, with the VERTEX preprocessor define, and once more for the fragment program, with the FRAGMENT preprocessor define. So the way to separate vertex and fragment program parts in GLSL snippet is to surround them with #ifdef VERTEX .. #endif and #ifdef FRAGMENT .. #endif. Each GLSL snippet must contain both a vertex program and a fragment program.",1298],["Standard include files match those provided for Cg/HLSL shaders; they just have a .glslinc extension:",1298],["UnityCG.glslinc",1298],["Vertex shader inputs come from predefined GLSL variables (gl_Vertex, gl_MultiTexCoord0, ...) or are user defined attributes. Usually only the tangent vector needs a user defined attribute:",1298],["attribute vec4 Tangent;",1298],["Data from vertex to fragment programs is passed through varying variables, for example:",1298],["varying vec3 lightDir; // vertex shader computes this, fragment shader uses this",1298],["External OES textures",1298],["Unity does some preprocessing during Shader compilation; for example, texture2D/texture2DProj functions may be replaced to texture/textureProj, based on graphics API (GlES3, GLCore). Some extensions don't support new convention, most notably GL_OES_EGL_image_external.",1298],["If you want to sample external textures in GLSL shaders, use textureExternal/textureProjExternal calls instead of texture2D/texture2DProj.",1298],["Example:",1298],["gl_FragData[0] = textureExternal(_MainTex, uv);",1298],["ShaderLab command: GrabPass",1299],["GrabPass is a command that creates a special type of Pass that grabs the contents of the frame buffer into a texture. This texture can be used in subsequent Passes to do advanced image based effects.",1299],["This command can significantly increase both CPU and GPU frame times. You should generally avoid using this command other than for quick prototyping, and attempt to achieve your effect in other ways. If you do use this command, try to reduce the number of screen grabbing operations as much as possible; either by reducing your usage of this command, or by using the signature that grabs the screen to a named texture if applicable.",1299],["Render pipeline compatibility",1299],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1299],["GrabPass Yes No No No ",1299],["Usage",1299],["Use this command in a SubShader block.",1299],["GrabPass works only on the frame buffer. You cannot use this command to grab the contents of other render targets, the depth buffer, and so on.",1299],["Note that the two different signatures have different functionality, and different performance implications. Using a named texture can result in significantly fewer screen grabbing operations, which can reduce the impact of this resource-intensive command.",1299],["Signature Function ",1299],["GrabPass { } Grabs the frame buffer contents into a texture that you can use in subsequent Passes in the same SubShader.Reference the texture using the name _GrabTexture.When you use this signature, Unity grabs the screen every time it renders a batch that contains this command. This means that Unity can grab the screen multiple times per frame: once for each batch. ",1299],["GrabPass { \"ExampleTextureName\" } Grabs the frame buffer contents into a texture that you can access in subsequent Passes in the same frame, across multiple SubShaders.Reference the texture using the given name.When you use this signature, Unity grabs the screen the first time in a frame that it renders a batch that contains this command with a given texture name. ",1299],["Examples",1299],["This example for the Built-in Render Pipeline demonstrates using GrabPass to invert the colors of the render target. Note that this is not an efficient way to achieve this effect, and is intended only to demonstrate the use of GrabPass; the same effect could be achieved more efficiently using an invert blend mode.",1299],["Shader \"GrabPassInvert\"",1299],["SubShader",1299],["// Draw after all opaque geometry",1299],["Tags { \"Queue\" = \"Transparent\" }",1299],["// Grab the screen behind the object into _BackgroundTexture",1299],["GrabPass",1299],["\"_BackgroundTexture\"",1299],["// Render the object with the texture generated above, and invert the colors",1299],["Pass",1299],["CGPROGRAM",1299],["pragma vertex vert",1299],["pragma fragment frag",1299],["include \"UnityCG.cginc\"",1299],["struct v2f",1299],["float4 grabPos : TEXCOORD0;",1299],["float4 pos : SV_POSITION;",1299],["};",1299],["v2f vert(appdata_base v) {",1299],["v2f o;",1299],["// use UnityObjectToClipPos from UnityCG.cginc to calculate",1299],["// the clip-space of the vertex",1299],["o.pos = UnityObjectToClipPos(v.vertex);",1299],["// use ComputeGrabScreenPos function from UnityCG.cginc",1299],["// to get the correct texture coordinate",1299],["o.grabPos = ComputeGrabScreenPos(o.pos);",1299],["return o;",1299],["sampler2D _BackgroundTexture;",1299],["half4 frag(v2f i) : SV_Target",1299],["half4 bgcolor = tex2Dproj(_BackgroundTexture, i.grabPos);",1299],["return 1 - bgcolor;",1299],["ENDCG",1299],["ShaderLab: legacy lighting",1300],["Note**: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.",1300],["Render pipeline compatibility",1300],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1300],["Legacy lighting Yes No No No ",1300],["Overview",1300],["The material and lighting parameters are used to control the built-in vertex lighting. Vertex lighting is the standard Direct3D/OpenGL lighting model that is computed for each vertex. Lighting on turns it on. Lighting is affected by Material block, ColorMaterial and SeparateSpecular commands.",1300],["Vertex Coloring & Lighting is the first effect to be calculated for any rendered geometry. It operates on the vertex level, and calculates the base color that is used before textures are applied.",1300],["Syntax",1300],["The top level commands control whether to use fixed function lighting or not, and some configuration options. The main setup is in the Material Block, detailed further below.",1300],["Color",1300],["Color color",1300],["Sets the object to a solid color. A color is either four RGBA values in parenthesis, or a color property name in square brackets.",1300],["Material",1300],["Material {Material Block}",1300],["The Material block is used to define the material properties of the object.",1300],["Lighting",1300],["Lighting On Off",1300],["For the settings defined in the Material block to have any effect, you must enable Lighting with the Lighting On command. If lighting is off instead, the color is taken straight from the Color command.",1300],["SeparateSpecular",1300],["SeparateSpecular On Off",1300],["This command makes specular lighting be added to the end of the shader pass, so specular lighting is unaffected by texturing. Only has effect when Lighting On is used.",1300],["ColorMaterial",1300],["ColorMaterial AmbientAndDiffuse Emission",1300],["Makes per-vertex color be used instead of the colors set in the material. AmbientAndDiffuse replaces Ambient and Diffuse values of the material; Emission replaces Emission value of the material.",1300],["Material Block",1300],["This contains settings for how the material reacts to the light. Any of these properties can be left out, in which case they default to black (i.e. have no effect).",1300],["Diffuse color:** The diffuse color component. This is an object's base color.",1300],["Ambient color:** The ambient color component. This is the color the object has when it's hit by the ambient light set in the Lighting Window.",1300],["Specular color:** The color of the object's specular highlight.",1300],["Shininess number:** The sharpness of the highlight, between 0 and 1. At 0 you get a huge highlight that looks a lot like diffuse lighting, at 1 you get a tiny speck.",1300],["Emission color:** The color of the object when it is not hit by any light.",1300],["The full color of lights hitting the object is:",1300],["Ambient** * Lighting Window's Ambient Intensity setting +",1300],["(Light Color * Diffuse + Light Color * Specular) + Emission",1300],["The light parts of the equation (within parenthesis) is repeated for all lights that hit the object.",1300],["Typically you want to keep the Diffuse and Ambient colors the same (all built-in shaders do this).",1300],["Examples",1300],["Always render object in pure red:",1300],["Shader \"Solid Red\" {",1300],["SubShader {",1300],["Pass { Color (1,0,0,0) }",1300],["Basic Shader that colors the object white and applies vertex lighting:",1300],["Shader \"VertexLit White\" {",1300],["SubShader {",1300],["Pass {",1300],["Material {",1300],["Diffuse (1,1,1,1)",1300],["Ambient (1,1,1,1)",1300],["Lighting On",1300],["An extended version that adds material color as a property visible in Material Inspector:",1300],["Shader \"VertexLit Simple\" {",1300],["Properties {",1300],["_Color (\"Main Color\", COLOR) = (1,1,1,1)",1300],["SubShader {",1300],["Pass {",1300],["Material {",1300],["Diffuse [_Color]",1300],["Ambient [_Color]",1300],["Lighting On",1300],["And finally, a full fledged vertex-lit shader (see also SetTexture reference page):",1300],["Shader \"VertexLit\" {",1300],["Properties {",1300],["_Color (\"Main Color\", Color) = (1,1,1,0)",1300],["_SpecColor (\"Spec Color\", Color) = (1,1,1,1)",1300],["_Emission (\"Emmisive Color\", Color) = (0,0,0,0)",1300],["_Shininess (\"Shininess\", Range (0.01, 1)) = 0.7",1300],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1300],["SubShader {",1300],["Pass {",1300],["Material {",1300],["Diffuse [_Color]",1300],["Ambient [_Color]",1300],["Shininess [_Shininess]",1300],["Specular [_SpecColor]",1300],["Emission [_Emission]",1300],["Lighting On",1300],["SeparateSpecular On",1300],["SetTexture [_MainTex] {",1300],["Combine texture * primary DOUBLE, texture * primary",1300],["Declaring and using shader keywords in HLSL",1301],["You can declare shader keywords so shaders behave differently when you enable or disable the keywords.",1301],["You can declare shader keywords in regular graphics shaders including surface shaders, and compute shaders.",1301],["Declare shader keywords using pragma",1301],["To declare shader keywords, use a #pragma directive in the HLSL code. For example:",1301],["pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3",1301],["You can use one of the following shader directives:",1301],["Shader directive Branching type Shader variants Unity creates ",1301],[":-- :-- :-- ",1301],["shader_feature Static branching Variants for keyword combinations you enable at build time ",1301],["multi_compile Static branching Variants for every possible combination of keywords ",1301],["dynamic_branch Dynamic branching No variants ",1301],["Read more about when to use which shader directive.",1301],["See shader keyword limits.",1301],["How sets of keywords work",1301],["The keywords in a single #pragma statement are together called a 'set'. You can enable or disable multiple keywords in a set at the same time.",1301],["For example, to declare a set of three keywords:",1301],["pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3",1301],["You can declare multiple sets of keywords in a single shader. For example, to create 2 sets:",1301],["pragma shader_feature REFLECTION_TYPE1 REFLECTION_TYPE2 REFLECTION_TYPE3",1301],["pragma shader_feature RED GREEN BLUE WHITE",1301],["You can't do the following:",1301],["\nInclude two keywords with the same name in one set.\n",1301],["\nInclude duplicate keyword sets in one shader.\n",1301],["\nDeclare a keyword as both dynamic_branch and shader_feature or multi_compile - Unity uses dynamic_branch if you do this.\n",1301],["Make shader behavior conditional",1301],["To mark parts of your shader code conditional based on whether you enable or disable a shader keyword, use an HLSL if statement.",1301],["For example:",1301],["pragma multi_compile QUALITY_LOW QUALITY_MED QUALITY_HIGH",1301],["if (QUALITY_LOW)",1301],["// code for low quality setting",1301],["You can enable and disable keywords using the Inspector or C# scripting.",1301],["What Unity does with your shader code depends on which shader directive you use.",1301],["If you use dynamic_branch, Unity creates a uniform Boolean variable for each keyword. When you enable a keyword, Unity sets the Boolean for that variable to true, and your GPU switches to using the code in the if statement for that keyword. This is dynamic branching.",1301],["If you use shader_feature or multi_compile, Unity creates separate shader variants for each keyword state. Each variant contains the code from an if branch for that keyword. When you enable a keyword, Unity sends the matching variant to your GPU. This is static branching.",1301],["Read more about when to use which shader directive.",1301],["Use other statements to make shader behavior conditional",1301],["You can also use the following HLSL statements to create conditional code:",1301],["\n#if, #elif, #else and #endif.\n",1301],["\n#ifdef and #ifndef.\n",1301],["Using these instead of if makes it more difficult to change the #pragma keyword directive later. For example, if you need to reduce the number of shader variants, it's more difficult to change multi_compile to shader_feature.",1301],["Make keywords local",1301],["Keywords are global by default.",1301],["Add _local to the shader directive to make the keywords local. If you enable or disable a global keyword, you don't affect the state of local keywords with the same name.",1301],["For example:",1301],["pragma shader_feature_local QUALITY_LOW QUALITY_MED QUALITY_HIGH",1301],["Restrict keywords to shader stages",1301],["When you declare a keyword, Unity assumes all stages of the shader contain conditional code for that keyword.",1301],["You can add the following suffixes to indicate that only certain stages contain conditional code for a keyword. This helps Unity strip unneeded shader variants.",1301],["\n_vertex\n",1301],["\n_fragment\n",1301],["\n_hull\n",1301],["\n_domain\n",1301],["\n_geometry\n",1301],["\n_raytracing\n",1301],["For example, use #pragma shader_feature_fragment RED GREEN BLUE to indicate that you use the 3 keywords to create conditional code in the fragment stage only.",1301],["You can't add these suffixes to #pragma dynamic_branch because dynamic_branch doesn't create variants.",1301],["These suffixes may behave differently or have no effect depending on the graphics API:",1301],["\nThe suffixes have no effect on OpenGL, OpenGL ES or Vulkan.\n",1301],["\nThe _geometry and _raytracing suffixes have no effect on Metal, and Metal treats _vertex, _hull and _domain as a single stage.\n",1301],["Restrict keywords to shader models and GPU features",1301],["You can add keywords to #pragma require and #pragma target directives, so conditional code only runs if the current hardware uses a particular shader model or GPU feature.",1301],["For more information, see Targeting shader models and GPU features in HLSL.",1301],["Create a shader variant for disabled keywords",1301],["If you use shader_feature to create a single keyword, Unity automatically creates a second variant for when the feature is disabled. This helps reduce the number of keywords you need to enable and disable. For example, the following code creates 2 variants:",1301],["pragma shader_feature EXAMPLE_ON",1301],["If you use multi_compile, or you use shader_feature to create a set of two or more keywords, you can use _ when you declare a keyword set. Unity creates a shader variant for situations when all keywords in that set are disabled.",1301],["pragma multi_compile _ EXAMPLE_ON",1301],["pragma shader_feature _ RED GREEN BLUE WHITE",1301],["Use shortcuts to create keyword sets",1301],["You can use Unity shader directive shortcuts to create sets of shader variants. The following example explains how to add SHADOWS_DEPTH and SHADOWS_CUBE variants:",1301],["pragma multi_compile_shadowcaster",1301],["You can remove keywords you don't need using skip_variants. For example, use the following to remove POINT and POINT_COOKIES variants when Unity generates variants from multi_compile_fwdadd.",1301],["pragma multi_compile_fwdadd",1301],["pragma skip_variants POINT POINT_COOKIE",1301],["The following shortcuts relate to light, shadow and lightmapping in the Built-in Render Pipeline:",1301],["multi_compile_fwdbase adds this set of keywords: DIRECTIONAL LIGHTMAP_ON DIRLIGHTMAP_COMBINED DYNAMICLIGHTMAP_ON SHADOWS_SCREEN SHADOWS_SHADOWMASK LIGHTMAP_SHADOW_MIXING LIGHTPROBE_SH. These variants are needed by PassType.ForwardBase.",1301],["multi_compile_fwdbasealpha adds this set of keywords: DIRECTIONAL LIGHTMAP_ON DIRLIGHTMAP_COMBINED DYNAMICLIGHTMAP_ON LIGHTMAP_SHADOW_MIXING VERTEXLIGHT_ON LIGHTPROBE_SH. These variants are needed by PassType.ForwardBase.",1301],["multi_compile_fwdadd adds this set of keywords: POINT DIRECTIONAL SPOT POINT_COOKIE DIRECTIONAL_COOKIE. These variants are needed by PassType.ForwardAdd.",1301],["multi_compile_fwdadd_fullshadows adds this set of keywords: POINT DIRECTIONAL SPOT POINT_COOKIE DIRECTIONAL_COOKIE SHADOWS_DEPTH SHADOWS_SCREEN SHADOWS_CUBE SHADOWS_SOFT SHADOWS_SHADOWMASK LIGHTMAP_SHADOW_MIXING. This is the same as multi_compile_fwdadd, but this adds the ability for the lights to have real-time shadows.",1301],["multi_compile_lightpass adds this set of keywords: POINT DIRECTIONAL SPOT POINT_COOKIE DIRECTIONAL_COOKIE SHADOWS_DEPTH SHADOWS_SCREEN SHADOWS_CUBE SHADOWS_SOFT SHADOWS_SHADOWMASK LIGHTMAP_SHADOW_MIXING. This is effectively a catch-all shortcut for all functionality related to real-time light and shadows, other than Light Probes.",1301],["multi_compile_shadowcaster adds this set of keywords: SHADOWS_DEPTH SHADOWS_CUBE. These variants are needed by PassType.ShadowCaster.",1301],["multi_compile_shadowcollector adds this set of keywords: SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE. It also compiles variants without any of these keywords. These variants are needed for screen-space shadows.",1301],["multi_compile_prepassfinal adds this set of keywords: LIGHTMAP_ON DIRLIGHTMAP_COMBINED DYNAMICLIGHTMAP_ON UNITY_HDR_ON SHADOWS_SHADOWMASK LIGHTPROBE_SH. It also compiles variants without any of these keywords. These variants are needed by PassType.Deferred.",1301],["The following shortcuts relate to other settings:",1301],["multi_compile_particles adds this keyword relating to the Built-in particle system: SOFTPARTICLES_ON. It also compiles variants without this keyword. For more information, see Built-in Particle System.",1301],["multi_compile_fog adds this set of keywords relating to fog: FOG_LINEAR, FOG_EXP, FOG_EXP2. It also compiles variants without any of these keywords. You can control this behavior in the Graphics settings window.",1301],["multi_compile_instancing adds keywords relating to instancing. If the shader uses procedural instancing, it adds this set of keywords: INSTANCING_ON PROCEDURAL_ON. Otherwise, it adds this keyword: INSTANCING_ON. It also compiles variants without any of these keywords. You can control this behavior in the Graphics settings window.",1301],["ShaderLab: assigning a name to a Pass",1302],["This page contains information on using a Name block in your ShaderLab code to assign a name to a Pass. For information on defining Passes, see ShaderLab: defining a Pass. For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader object fundamentals.",1302],["A Pass can have a name. You need to reference a Pass by name in the UsePass command, and in some C# APIs. The name of a Pass is visible in the Frame Debugger tool.",1302],["Render pipeline compatibility",1302],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1302],["ShaderLab: Name block Yes Yes Yes Yes ",1302],["Using the Name block",1302],["To assign a name to a Pass in ShaderLab, you place a Name block inside a Pass block.",1302],["Signature Function ",1302],["Name \"<name>\" Sets the name of the Pass. ",1302],["Internally, Unity converts the name to uppercase. When you reference the name in ShaderLab code, you must use the uppercase variant; for example, if the value is \"example\", you must reference it as EXAMPLE.",1302],["If more than one Pass in the same SubShader has the same name, Unity uses the first Pass in the code.",1302],["Using the Pass name with C# scripts",1302],["To access the name of a Pass from C# scripts, you can use APIs such as Material.FindPass, Material.GetPassName, or ShaderData.Pass.Name.",1302],["Note:** Material.GetShaderPassEnabled and Material.SetShaderPassEnabled do not reference Passes by name; instead, they reference Passes using the value of the LightMode tag.",1302],["Examples",1302],["This example code creates a Shader object called ContainsNamedPass, which contains a Pass called ExampleNamedPass.",1302],["Shader \"Examples/ContainsNamedPass\"",1302],["SubShader",1302],["Pass",1302],["Name \"ExampleNamedPass\"",1302],["// The rest of the code that defines the Pass goes here.",1302],["You can then use the following C# code to query the name of this Pass:",1302],["using UnityEngine;",1302],["public class GetPassName : MonoBehaviour",1302],["// Place this script on a GameObject with a MeshRenderer component",1302],["void Start() {",1302],["// Get the material",1302],["var material = GetComponent().material;",1302],["// Get the name of the first Pass in the active SubShader",1302],["// of the Shader object assigned to the material",1302],["var passName = material.GetPassName(0);",1302],["// Print the name to the console",1302],["Debug.Log(passName);",1302],["ShaderLab command: Offset",1303],["Sets the depth bias on the GPU.",1303],["Depth bias, also called depth offset, is a setting on the GPU that determines the depth at which it draws geometry. Adjust the depth bias to force the GPU to draw geometry on top of other geometry that is at the same depth. This can help you to avoid unwanted visual effects such as z-fighting and shadow acne.",1303],["To set the depth bias for specific geometry, use this command or a RenderStateBlock. To set the global depth bias, which affects all geometry, use CommandBuffer.SetGlobalDepthBias. The GPU applies the depth bias for specific geometry in addition to the global depth bias.",1303],["To reduce shadow acne, you can achieve a similar visual effect with the light bias settings; however, these settings work differently, and they do not change the state on the GPU. For more information, see Shadow troubleshooting.",1303],["Render pipeline compatibility",1303],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1303],["Offset Yes Yes Yes Yes ",1303],["Usage",1303],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1303],["Signature Example syntax Function ",1303],["Offset <factor>, <units> Offset 1, 1 Draw geometry closer to or further away from the camera, based on the given values. ",1303],["Valid parameter values",1303],["Parameter Value Function ",1303],["factor Float, range -1 through 1. Scales the maximum Z slope, also called the depth slope, to produce a variable depth offset for each polygon.Polygons that are not parallel to the near and far clip planes have Z slope. Adjust this value to avoid visual artifacts on such polygons. ",1303],["units Float, range -1 through 1. Scales the minimum resolvable depth buffer value, to produce a constant depth offset. The minimum depth resolvable depth buffer value (one unit) varies by device.A negative value means that the GPU draws the polygon closer to the camera. A positive value means that the GPU draws the polygon further away from the camera. ",1303],["Examples",1303],["This example code demonstrates the syntax for using this command in a Pass block.",1303],["Shader \"Examples/CommandExample\"",1303],["SubShader",1303],["// The rest of the code that defines the SubShader goes here.",1303],["Pass",1303],["// Sets the depth offset for this geometry so that the GPU draws this geometry closer to the camera",1303],["// You would typically do this to avoid z-fighting",1303],["Offset -1, -1",1303],["// The rest of the code that defines the Pass goes here.",1303],["This example code demonstrates the syntax for using this command in a SubShader block.",1303],["Shader \"Examples/CommandExample\"",1303],["SubShader",1303],["// Sets the depth offset for this geometry so that the GPU draws this geometry closer to the camera",1303],["// You would typically do this to avoid z-fighting",1303],["Offset -1, -1",1303],["// The rest of the code that defines the SubShader goes here.",1303],["Pass",1303],["// The rest of the code that defines the Pass goes here.",1303],["ShaderLab: grouping commands with the Category block",1304],["Use the Category block to group commands that set the render state, so that you can \"inherit\" the grouped rendering state within the block.",1304],["For example, your Shader object might have multiple SubShaders, each of which requires blending set to additive. You can use the Category block for that:",1304],["Shader \"example\" {",1304],["Category {",1304],["Blend One One",1304],["SubShader {",1304],["// ...",1304],["SubShader {",1304],["// ...",1304],["// ...",1304],["The Category block does not have an impact on shader performance; it is essentially the same as copy-pasting the code.",1304],["ShaderLab: specifying package requirements",1305],["Some shaders need to support multiple render pipelines simultaneously. Adding package requirements to SubShaders and Passes enables you to avoid compilation errors when shader code uses an include file from a package that is not installed or requires a specific version of a package to compile.",1305],["Render pipeline compatibility",1305],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1305],["---------------------------------------- ---------------------------- ----------------------------------- ------------------------------------------ -------------- ",1305],["ShaderLab: PackageRequirements block Yes Yes Yes Yes ",1305],["Using the PackageRequirements block",1305],["To specify package requirements for a SubShader or a Pass, you use the PackageRequirements block. ShaderLab supports a single PackageRequirements block per SubShader or Pass, but each block can specify multiple package requirements.",1305],["Note**: if you provide a PackageRequirements block, it must come before all other declarations inside the SubShader or Pass.",1305],["Signature Function ",1305],["--------------------------------------------------- ----------------------------------------------------------- ",1305],["PackageRequirements{ [requirement definition]} Defines the package requirements for the Pass or SubShader. ",1305],["There are multiple ways to declare package requirements. Each one provides a different behavior. They are:",1305],["\"\\\"**: Specifies that the SubShader or Pass works with any version of the package.",1305],["\"\\\": \"\\\"**: Specifies that the SubShader or Pass only works with a subset of package versions.",1305],["\"\\\": \"unity=\\\"**: Specifies that the SubShader or Pass only works with a subset of Unity versions and requires a package with the given name.",1305],["\"unity\":\"\\\"**: Specifies that the SubShader or Pass only works with a subset of Unity versions.",1305],["Version restrictions define a set of version ranges. If the installed version of a required package is not inside any of the ranges, the package requirement is not met. Similarly, if a requirement specifies a set of Unity version restrictions, the same applies to the current version of Unity. For information about the syntax of version restrictions, see Version syntax.",1305],["If a SubShader or Pass declares package requirements that the project does not meet, Unity excludes the SubShader or Pass from further processing and compilation. This happens if the project does not include the required packages, or includes them but not with a compatible version. If a shader does not contain a single SubShader that meets the requirements, or if no SubShader contains Passes that meet the requirements, the Console window shows a warning message.",1305],["",1305],["Version syntax",1305],["In ShaderLab's package requirements, a version uses the major.minor or major.minor.patch format. If you only use major.minor, Unity uses 0 for the patch. Package versions can also include a -preview or a -preview.n postfix where -preview is equivalent to -preview.0. Preview versions come before non-preview versions, so 1.2.3-preview.4 comes after 1.2.2 but before 1.2.3.",1305],["There are multiple ways to specify a version range. Each one provides a different behavior. They are:",1305],["\\**: Includes the version you enter and all versions after that. For example, 1.2.3 includes all versions starting with 1.2.3;",1305],["[\\]**: Specifies the exact version. For example, [1.2.3] only includes version 1.2.3;",1305],["[\\,\\]**: Specifies a range between \\ and \\. Using square brackets and round brackets causes the range to include or exclude to version respectively. The opening bracket affects \\ and the closing bracket affects \\. Example: [1.2.3,2.3.4) includes all versions from 1.2.3 to 2.3.3.",1305],["You can also specify sets of version ranges for a single package. To create a set of version ranges from individual ranges, use a semicolon as a separator. For example, [2.0,3.4.5];[3.7];4.0 includes versions from 2.0.0 to 3.4.5, version 3.7.0, and version 4.0.0 and above.",1305],["When you set the versions for a package, be aware of the following:",1305],["Versions, version ranges, and sets of version ranges cannot contain any extra characters.",1305],["Version ranges cannot be empty.",1305],["Sets of version ranges cannot have intersections.",1305],["Package requirements are sensitive to whitespace.",1305],["If the syntax does not adhere to the above, the version restriction is invalid. For more information on what happens with invalid package requirements, see Error checking.",1305],["Example",1305],["The following code example shows how to specify package requirements in both a SubShader and a Pass. The SubShader declares a single package requirement for a package called \"com.my.package\" and works with any version of this package starting from 2.2.0. The SubShader has two Passes:",1305],["The first Pass requires:",1305],["The Universal Render Pipeline package with a version between 10.2.1 and 11.0.",1305],["The Text Mesh Pro package with a version of 3.2 or above.",1305],["The second Pass requires:",1305],["The High-Definition Render Pipeline package with a version between 8.0 to 8.5",1305],["Shader \"Examples/ExampleShader\"",1305],["SubShader",1305],["PackageRequirements",1305],["\"com.my.package\": \"2.2\"",1305],["Pass",1305],["PackageRequirements",1305],["\"com.unity.render-pipelines.universal\": \"[10.2.1,11.0]\"",1305],["\"com.unity.textmeshpro\": \"3.2\"",1305],["Pass",1305],["PackageRequirements",1305],["\"com.unity.render-pipelines.high-definition\": \"[8.0,8.5]\"",1305],["",1305],["Error checking",1305],["If you define package requirements that can never be satisfied, the shader import process fails with an error. This section provides examples of the most common invalid package requirement definitions.",1305],["Malformed versions or empty package name",1305],["PackageRequirements {",1305],["\"com.some.package.x\": \"[10.2.1,9.0]\" // Error, empty version range",1305],["\"com.some.package.y\": \"[10.2.1.9,11.0]\" // Error, incorrect version format",1305],["\"com.some.package.z\": \"[2.3,3.5],[3.0,4.0]\" // Error, ranges intersect",1305],["\"com.some.package.z\" : \"[10.2.1,11.0]\" // Error, extra whitespace after the package name",1305],["\"\" : \"[2.3.4,3.4.5]\" // Error, no package name provided",1305],["Multiple dependencies on the same package",1305],["PackageRequirements {",1305],["\"com.some.package.x\": \"[10.2.1,11.0]\"",1305],["\"com.some.package.x\": \"[11.2.1,12.0]\" // Error, dependency on \"com.some.package.x\" declared twice",1305],["\"unity\" : \"2021.2\"",1305],["\"unity\" : \"2021.3\" // Error, dependency on Unity version declared twice",1305],["Conflicting dependency declarations",1305],["PackageRequirements {",1305],["\"com.some.package.x\": \"unity=[2021.2.1,2021.3.3]\"",1305],["\"unity\" : \"2021.2\" // Error: Unity version requirement cannot be declared on a package and on its own simultaneously",1305],["Conflicting dependency declarations between SubShaders and Passes",1305],["SubShader {",1305],["PackageRequirements {",1305],["\"com.some.package.x\": \"[2.3.4,3.4.5]\"",1305],["\"com.some.package.z\": \"[1.1,3.2]\"",1305],["\"unity\": \"2021.2\"",1305],["Pass {",1305],["PackageRequirements {",1305],["\"com.some.package.y\": \"[1.2.2,2.5]\" // Fine, SubShader doesn’t declare a dependency on \"com.some.package.y\"",1305],["\"com.some.package.z\": \"[2.0,3.1]\" // Fine, SubShader dependency intersects the provided version range",1305],["\"com.some.package.x\": \"[1.1.1, 2.2.2]\" // Error, SubShader version range for \"com.some.package.x\" does not intersect the provided range",1305],["\"com.some.package.w\": \"unity=[2021.2.1,2021.2.5]\" // Fine, SubShader dependency intersects the provided version range",1305],["\"com.some.package.u\": \"unity=[2020.2.1,2020.2.5]\" // Error, SubShader Unity version range does not intersect the provided range",1305],["ShaderLab: defining a Pass",1306],["To define a Pass in ShaderLab, use a Pass block. This page contains information on using Pass blocks. For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader object fundamentals.",1306],["Overview",1306],["A Pass is the fundamental element of a Shader object. It contains instructions for setting the state of the GPU, and the shader programs that run on the GPU.",1306],["Simple Shader objects might contain only a single Pass, but more complex shaders can contain multiple Passes. You can use separate Passes to define parts of your Shader object that work differently; for example, parts that require a change to the render state, different shader programs, or a different LightMode Pass tag.",1306],["Note**: In render pipelines based on the Scriptable Render Pipeline, you can use a RenderStateBlock to change the render state on the GPU, without requiring a separate Pass.",1306],["Render pipeline compatibility",1306],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1306],["ShaderLab: Pass block Yes Yes Yes Yes ",1306],["Using the Pass block",1306],["To define a regular Pass in ShaderLab, you place a Pass block inside a SubShader block.",1306],["Inside the Pass block, you can:",1306],["Assign a name to the Pass, using a Name block. See ShaderLab: assigning a name to a Pass.",1306],["Assign key-value pairs of data to the Pass, using a Tags block. See ShaderLab: assigning tags to a Pass.",1306],["Perform operations using ShaderLab commands. See ShaderLab: using commands.",1306],["Add shader code to the Pass, using a shader code block. See ShaderLab: shader code blocks.",1306],["Specify package requirements using the PackageRequirements block. This makes Unity only run the Pass if the required packages are installed. See ShaderLab: specifying package requirements.",1306],["You can also define two special types of Pass, using the UsePass or GrabPass commands. For information on those commands, see ShaderLab commands: UsePass or ShaderLab commands: GrabPass.",1306],["Signature Function ",1306],["Pass{    <optional: name> <optional: tags>    <optional: commands>   <optional: shader code>} Defines a Pass. ",1306],["Examples",1306],["This example code demonstrates the syntax for creating a Shader object that contains a single SubShader, which in turn contains a single Pass.",1306],["Shader \"Examples/SinglePass\"",1306],["SubShader",1306],["Pass",1306],["Name \"ExamplePassName\"",1306],["Tags { \"ExampleTagKey\" = \"ExampleTagValue\" }",1306],["// ShaderLab commands go here.",1306],["// HLSL code goes here.",1306],["ShaderLab: assigning tags to a Pass",1307],["This page contains information on using a Tags block in your ShaderLab code to assign tags to a Pass. It also contains information on using the LightMode tag.",1307],["For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader object fundamentals.",1307],["Overview",1307],["Tags are key-value pairs of data that you can assign to a Pass. Unity uses predefined tags and values to determine how and when to render a given Pass. You can also create your own custom Pass tags with custom values, and access them from C# code.",1307],["The most commonly used predefined Pass tag is the LightMode tag; this is used in all render pipelines. Other Pass tags vary by render pipeline. For more information, see the following pages:",1307],["For predefined Pass tags in the Built-in Render Pipeline, see Predefined Pass tags in the Built-in Render Pipeline.",1307],["For predefined Pass tagss in the Universal Render Pipeline (URP), see URP Pass tags.",1307],["Render pipeline compatibility",1307],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1307],["ShaderLab: Pass Tags block Yes Yes Yes Yes ",1307],["ShaderLab: LightMode Pass tag Yes Yes Yes Yes ",1307],["Using the Tags block",1307],["To assign Tags to a Pass in ShaderLab, you place a Tags block inside a Pass block.",1307],["Note that both SubShaders and Passes use the Tags block, but they work differently. Assigning SubShader tags to a Pass has no effect, and vice versa. The difference is where you put the Tags block:",1307],["To define Pass tags, place the Tags block inside a Pass block.",1307],["To define SubShader tags, place the Tags block inside a SubShader block but outside a Pass block.",1307],["For information on assigning tags to a SubShader, see Assigning tags to a SubShader.",1307],["Signature Function ",1307],["Tags {\"<name1>\" = \"<value1>\" \"<name2>\" = \"<value2>\"} Applies the given tags to the Pass.You can define as many tags as you like. ",1307],["Using Pass tags with C# scripts",1307],["To access the value of a Pass tag from C# scripts, you can use the Shader.FindPassTagValue API. This works for Unity's predefined Pass tags, and for custom Pass tags that you have created.",1307],["Note:** There are several APIs that work directly with the LightMode Pass tag. For more information, see Using the LightMode tag with C# scripts.",1307],["",1307],["LightMode tag",1307],["The LightMode tag is a predefined Pass tag that Unity uses to determine whether to execute the Pass during a given frame, when during the frame Unity executes the Pass, and what Unity does with the output.",1307],["Note:** The LightMode tag is not related to the LightMode enum, which relates to lighting.",1307],["Every render pipeline uses the LightMode tag, but the predefined values and their meanings vary. For more information, see Syntax and valid values.",1307],["In the Built-in Render Pipeline, if you do not set a LightMode tag, Unity renders the Pass without any lighting or shadows; this essentially the same as having a LightMode value of Always. In the Scriptable Render Pipeline, you can use the SRPDefaultUnlit value to reference Passes without a LightMode tag.",1307],["",1307],["Syntax and valid values",1307],["Signature Function ",1307],["\"LightMode\" = \"[value]\" Sets the LightMode value for this Pass. ",1307],["Valid values for this tag depend on the render pipeline.",1307],["For LightMode Pass tag values in the Built-in Render Pipeline, see Predefined Pass tags in the Built-in Render Pipeline.",1307],["For LightMode Pass tag values in the Universal Render Pipeline (URP), see URP Pass tags: LightMode.",1307],["",1307],["Using the LightMode tag with C# scripts",1307],["Material.SetShaderPassEnabled and ShaderTagId use the value of the LightMode tag to determine how Unity handles a given Pass.",1307],["In the Scriptable Render Pipeline, you can create custom values for the LightMode tag. You can then use these custom values to determine which Passes to draw during a given call to ScriptableRenderContext.DrawRenderers, by configuring a DrawingSettings struct. For more information and a code example, see Creating a simple render loop in a custom Scriptable Render Pipeline.",1307],["Examples",1307],["Shader \"Examples/ExampleLightMode\"",1307],["SubShader",1307],["Pass",1307],["Tags { \"LightMode\" = \"Always\" }",1307],["// The rest of the code that defines the Pass goes here.",1307],["Writing shaders for different graphics APIs",1308],["In some cases, there are differences in how graphics rendering behaves between different graphics APIs. Most of the time the Unity Editor hides the differences, but there are some situations where the Editor cannot do this for you. These situations, and the actions you need to take if they occur, are listed below.",1308],["Render Texture coordinates",1308],["Vertical Texture coordinate conventions differ between two types of platforms: Direct3D-like and OpenGL-like.",1308],["Direct3D-like**: The coordinate is 0 at the top and increases downward. This applies to Direct3D, Metal and consoles.",1308],["OpenGL-like**: The coordinate is 0 at the bottom and increases upward. This applies to OpenGL and OpenGL ES.",1308],["This difference tends not to have any effect on your project, other than when rendering into a Render Texture. When rendering into a Texture on a Direct3D-like platform, Unity internally flips rendering upside down. This makes the conventions match between platforms, with the OpenGL-like platform convention the standard.",1308],["Image Effects and rendering in UV space are two common cases in the Shaders where you need to take action to ensure that the different coordinate conventions do not create problems in your project.",1308],["Image Effects",1308],["When you use Image Effects and anti-aliasing, the resulting source Texture for an Image Effect is not flipped to match the OpenGL-like platform convention. In this case, Unity renders to the screen to get anti-aliasing and then resolves rendering into a Render Texture for further processing with an Image Effect.",1308],["If your Image Effect is a simple one that processes one Render Texture at a time, Graphics.Blit deals with the inconsistent coordinates. However, if you’re processing more than one Render Texture together in your Image Effect, the Render Textures are likely to come out at different vertical orientations in Direct3D-like platforms and when you use anti-aliasing. To standardise the coordinates, you need to manually “flip” the screen Texture upside down in your Vertex Shader so that it matches the OpenGL-like coordinate standard.",1308],["The following code sample demonstrates how to do this:",1308],["// Flip sampling of the Texture:",1308],["// The main Texture",1308],["// texel size will have negative Y).",1308],["if UNITY_UV_STARTS_AT_TOP",1308],["if (MainTexTexelSize.y < 0)",1308],["uv.y = 1-uv.y;",1308],["endif",1308],["A similar situation occurs with GrabPass. The resulting render Texture might not actually be turned upside down on Direct3D-like (non-OpenGL-like) platforms. If your Shader code samples GrabPass Textures, use the ComputeGrabScreenPos function from the UnityCG include file.",1308],["Rendering in UV space",1308],["When rendering in Texture coordinate (UV) space for special effects or tools, you might need to adjust your Shaders so that rendering is consistent between Direct3D-like and OpenGL-like systems. You also might need to adjust your rendering between rendering into the screen and rendering into a Texture. Adjust these by flipping the Direct3D-like projection upside down so its coordinates match the OpenGL-like projection coordinates.",1308],["The built-in variable ProjectionParams.x contains a +1 or –1 value. -1 indicates a projection has been flipped upside down to match OpenGL-like projection coordinates, while +1 indicates it hasn’t been flipped.",1308],["You can check this value in your Shaders and then perform different actions. The example below checks if a projection has been flipped and, if so, flips and then returns the UV coordinates to match.",1308],["float4 vert(float2 uv : TEXCOORD0) : SV_POSITION",1308],["float4 pos;",1308],["pos.xy = uv;",1308],["// This example is rendering with upside-down flipped projection,",1308],["// so flip the vertical UV coordinate too",1308],["if (_ProjectionParams.x < 0)",1308],["pos.y = 1 - pos.y;",1308],["pos.z = 0;",1308],["pos.w = 1;",1308],["return pos;",1308],["Clip space coordinates",1308],["Similar to Texture coordinates, the clip space coordinates (also known as post-projection space coordinates) differ between Direct3D-like and OpenGL-like platforms:",1308],["Direct3D-like**: The clip space depth goes from +1.0 at the near plane to 0.0 at the far plane. This applies to Direct3D, Metal and consoles.",1308],["OpenGL-like**: The clip space depth goes from –1.0 at the near plane to +1.0 at the far plane. This applies to OpenGL and OpenGL ES.",1308],["Inside Shader code, you can use the UNITY_NEAR_CLIP_VALUE built-in macro to get the near plane value based on the platform.",1308],["Inside script code, use GL.GetGPUProjectionMatrix to convert from Unity’s coordinate system (which follows OpenGL-like conventions) to Direct3D-like coordinates if that is what the platform expects.",1308],["Precision of Shader computations",1308],["To avoid precision issues, make sure that you test your Shaders on the target platforms. The GPUs in mobile devices and PCs differ in how they treat floating point types. PC GPUs treat all floating point types (float, half and fixed) as the same - they do all calculations using full 32-bit precision, while many mobile device GPUs do not do this.",1308],["See documentation on data types and precision for details.",1308],["Const declarations in Shaders",1308],["Use of const differs between Microsoft HLSL (see msdn.microsoft.com) and OpenGL’s GLSL (see Wikipedia) Shader language.",1308],["Microsoft’s HLSL const has much the same meaning as it does in C# and C++ in that the variable declared is read-only within its scope but can be initialized in any way.",1308],["OpenGL’s GLSL const means that the variable is effectively a compile time constant, and so it must be initialized with compile time constraints (either literal values or calculations on other consts).",1308],["It is best to follow the OpenGL’s GLSL semantics and only declare a variable as const when it is truly invariant. Avoid initializing a const variable with some other mutable values (for example, as a local variable in a function). This also works in Microsoft’s HLSL, so using const in this way avoids confusing errors on some platforms.",1308],["",1308],["Using buffers with GPU buffers",1308],["If you use buffers to declare variables in your shader, then set values using the data from a GPU compute buffer or graphics buffer, the data layouts might not match depending on the graphics API. This means you might overwrite data or set variables to the wrong values.",1308],["For example if you use cbuffer or Unity's constant buffer macro, depending on the constant buffer's data layout and the graphics API, a float3 might become a float4, or a float might become a float2.",1308],["You can do the following to make sure all graphics APIs compile a buffer with the same data layout:",1308],["\nUse float4 and float4x4 instead of float3 and float3x3, because float4 variables are the same size on all graphics APIs, while float3 variables can become a different size on some graphics APIs.\n",1308],["\nDeclare variables in decreasing size order, for example float4 then float2 then float, so all graphics APIs structure the data in the same way.\n",1308],["For example:",1308],["cbuffer myConstantBuffer {",1308],["float4x4 matWorld;",1308],["float4 vObjectPosition; // Uses a float4 instead of a float3",1308],["float arrayIndex;",1308],["Semantics used by Shaders",1308],["To get Shaders working on all platforms, some Shader values should use these semantics:",1308],["Vertex Shader output (clip space) position: SV_POSITION. Sometimes Shaders use POSITION semantics to get Shaders working on all platforms. Note that this does not not work on Sony PS4 or with tessellation.",1308],["Fragment Shader output color: SV_Target. Sometimes Shaders use COLOR or COLOR0 to get Shaders working on all platforms. Note that this does not work on Sony PS4.",1308],["When rendering Meshes as Points, output PSIZE semantics from the vertex Shader (for example, set it to 1). Some platforms, such as OpenGL ES or Metal, treat point size as “undefined” when it’s not written to from the Shader.",1308],["See documentation on Shader semantics for more details.",1308],["Direct3D Shader compiler syntax",1308],["Direct3D platforms use Microsoft’s HLSL Shader compiler. The HLSL compiler is stricter than other compilers about various subtle Shader errors. For example, it doesn’t accept function output values that aren’t initialized properly.",1308],["The most common situations that you might run into using this are:",1308],["A Surface Shader vertex modifier that has an out parameter. Initialize the output like this:",1308],["void vert (inout appdata_full v, out Input o)",1308],["UNITY_INITIALIZE_OUTPUT(Input,o);**",1308],["// ...",1308],["Partially initialized values. For example, a function returns float4 but the code only sets the .xyz values of it. Set all values or change to float3 if you only need three values.",1308],["Using tex2D in the Vertex Shader. This is not valid, because UV derivatives don’t exist in the vertex Shader. You need to sample an explicit mip level instead; for example, use tex2Dlod (tex, float4(uv,0,0)). You also need to add #pragma target 3.0 as tex2Dlod is a Shader model 3.0 feature.",1308],["DirectX 11 (DX11) HLSL syntax in Shaders",1308],["Some parts of the Surface Shader compilation pipeline do not understand DirectX 11-specific HLSL (Microsoft’s shader language) syntax.",1308],["If you’re using HLSL features like StructuredBuffers, RWTextures and other non-DirectX 9 syntax, wrap them in a DirectX X11-only preprocessor macro as shown in the example below.",1308],["ifdef SHADER_API_D3D11",1308],["// DirectX11-specific code, for example",1308],["StructuredBuffer myColors;",1308],["RWTexture2D myRandomWriteTexture;",1308],["endif",1308],["",1308],["Using Shader framebuffer fetch",1308],["Some GPUs (most notably PowerVR-based ones on iOS) allow you to do a form of programmable blending by providing current fragment color as input to the Fragment Shader (see EXT_shader_framebuffer_fetch on khronos.org).",1308],["It is possible to write Shaders in Unity that use the framebuffer fetch functionality. To do this, use the inout color argument when you write a Fragment Shader in either HLSL (Microsoft’s shading language - see msdn.microsoft.com) or Cg (the shading language by Nvidia - see nvidia.co.uk).",1308],["The example below is in Cg.",1308],["CGPROGRAM",1308],["// only compile Shader for platforms that can potentially",1308],["// do it (currently gles,gles3,metal)",1308],["pragma only_renderers framebufferfetch",1308],["void frag (v2f i, inout half4 ocol : SV_Target)",1308],["// ocol can be read (current framebuffer color)",1308],["// and written into (will change color to that one)",1308],["// ...",1308],["ENDCG",1308],["The Depth (Z) direction in Shaders",1308],["Depth (Z) direction differs on different Shader platforms.",1308],["DirectX 11, DirectX 12, Metal: Reversed direction**",1308],["The depth (Z) buffer is 1.0 at the near plane, decreasing to 0.0 at the far plane.",1308],["Clip space range is [near,0] (meaning the near plane distance at the near plane, decreasing to 0.0 at the far plane).",1308],["Other platforms: Traditional direction**",1308],["The depth (Z) buffer value is 0.0 at the near plane and 1.0 at the far plane.",1308],["Clip space depends on the specific platform:",1308],["On Direct3D-like platforms, the range is [0,far] (meaning 0.0 at the near plane, increasing to the far plane distance at the far plane).",1308],["On OpenGL-like platforms, the range is [-near,far] (meaning minus the near plane distance at the near plane, increasing to the far plane distance at the far plane).",1308],["Note that reversed direction depth (Z), combined with a floating point depth buffer, significantly improves depth buffer precision against the traditional direction. The advantages of this are less conflict for Z coordinates and better shadows, especially when using small near planes and large far planes.",1308],["So, when you use Shaders from platforms with the depth (Z) reversed:",1308],["UNITY_REVERSED_Z is defined.",1308],["_CameraDepth Texture texture range is 1 (near) to 0 (far).",1308],["Clip space range is within “near” (near) to 0 (far).",1308],["However, the following macros and functions automatically work out any differences in depth (Z) directions:",1308],["Linear01Depth(float z)",1308],["LinearEyeDepth(float z)",1308],["UNITY_CALC_FOG_FACTOR(coord)",1308],["Fetching the depth Buffer",1308],["If you are fetching the depth (Z) buffer value manually, you might want to check the buffer direction. The following is an example of this:",1308],["float z = tex2D(_CameraDepthTexture, uv);",1308],["if defined(UNITY_REVERSED_Z)",1308],["z = 1.0f - z;",1308],["endif",1308],["Using clip space",1308],["If you are using clip space (Z) depth manually, you might also want to abstract platform differences by using the following macro:",1308],["float clipSpaceRange01 = UNITY_Z_0_FAR_FROM_CLIPSPACE(rawClipSpace);",1308],["Note**: This macro does not alter clip space on OpenGL or OpenGL ES platforms, so it returns within “-near”1 (near) to far (far) on these platforms.",1308],["Projection matrices",1308],["GL.GetGPUProjectionMatrix() returns a z-reverted matrix if you are on a platform where the depth (Z) is reversed.",1308],["However, if you’re composing from projection matrices manually (for example, for custom shadows or depth rendering), you need to revert depth (Z) direction yourself where it applies via script.",1308],["An example of this is below:",1308],["var shadowProjection = Matrix4x4.Ortho(...); //shadow camera projection matrix",1308],["var shadowViewMat = ... //shadow camera view matrix",1308],["var shadowSpaceMatrix = ... //from clip to shadowMap texture space",1308],["//'m_shadowCamera.projectionMatrix' is implicitly reversed",1308],["//when the engine calculates device projection matrix from the camera projection",1308],["m_shadowCamera.projectionMatrix = shadowProjection;",1308],["//'shadowProjection' is manually flipped before being concatenated to 'm_shadowMatrix'",1308],["//because it is seen as any other matrix to a Shader.",1308],["if(SystemInfo.usesReversedZBuffer)",1308],["shadowProjection[2, 0] = -shadowProjection[2, 0];",1308],["shadowProjection[2, 1] = -shadowProjection[2, 1];",1308],["shadowProjection[2, 2] = -shadowProjection[2, 2];",1308],["shadowProjection[2, 3] = -shadowProjection[2, 3];",1308],["m_shadowMatrix = shadowSpaceMatrix * shadowProjection * shadowViewMat;",1308],["Depth (Z) bias",1308],["Unity automatically deals with depth (Z) bias to ensure it matches Unity’s depth (Z) direction. However, if you are using a native code rendering plugin, you need to negate (reverse) depth (Z) bias in your C or C++ code.",1308],["Tools to check for depth (Z) direction",1308],["Use SystemInfo.usesReversedZBuffer to find out if you are on a platform using reversed depth (Z).",1308],["pragma directives in HLSL",1309],["In HLSL, #pragma directives are a type of preprocessor directive. They provide additional information to the shader compiler that isn't covered by other types of preprocessor directive.",1309],["",1309],["Using pragma directives",1309],["You can put #pragma directives anywhere in your HLSL code, but it is a common convention to put them at the start, like this:",1309],["pragma target 3.0",1309],["pragma exclude_renderers vulkan",1309],["pragma vertex vert",1309],["pragma fragment frag",1309],["// The rest of your HLSL code goes here",1309],["Limitations",1309],["There are some limitations around the use of #pragma directives:",1309],["You can use #pragmadirectives inside conditional (#if) directives if the expression depends only on:",1309],["Any custom #define directives in your own code",1309],["The following platform keywords: SHADER_API_MOBILE, SHADER_API_DESKTOP, UNITY_NO_RGBM, UNITY_USE_NATIVE_HDR, UNITY_FRAMEBUFFER_FETCH_AVAILABLE, UNITY_NO_CUBEMAP_ARRAY",1309],["The UNITY_VERSION macro",1309],["You can only use Unity-specific #pragma directives in .shader files, and in files that you include with the #include_with_pragmas directive. Unity does not support them in files that you include with the #include directive; the compiler ignores them.",1309],["You can only use standard HLSL #pragma directives in files that you include with the #include directive. Unity does not support them in .shader files, or in files that you include with an #include_with_pragmas directive; the compiler ignores them.",1309],["List of supported pragma directives",1309],["Unity supports all #pragma directives that are part of standard HLSL, as long as these directives are in regular include files. For more information on these directives, see the HLSL documentation: pragma Directive.",1309],["In addition, Unity supports the following Unity-specific #pragma directives:",1309],["Surface Shaders",1309],["If you are writing a Surface Shader, use this directive to tell the compiler which function to use as the surface function, and pass data to that function.",1309],["Statement Function ",1309],["",1309],["#pragma surface <surface function> <lighting model> <optional parameters> Compile the function with the given name as the surface shader, so that it works with the given lighting model. For more information, see Surface Shaders. ",1309],["Shader stages",1309],["If you are writing a regular graphics shader, use these directives to tell the compiler which functions to use for different shader stages. The #pragma vertex and #pragma fragment directives are required, but other stages are optional.",1309],["Statement Function ",1309],["",1309],["#pragma vertex <name> Compile the function with the given name as the vertex shader. Replace <name> with the function name. This directive is required in regular graphics shaders. ",1309],["#pragma fragment <name> Compile the function with the given name as the fragment shader. Replace <name> with the function name. This directive is required in regular graphics shaders. ",1309],["#pragma geometry <name> Compile the function with the given name as the geometry shader. Replace <name> with the function name. This option automatically turns on #pragma require geometry; for more information, see Targeting shader models and GPU features in HLSL.Note: Metal does not support geometry shaders. ",1309],["#pragma hull <name> Compile the function with the given name as the DirectX 11 hull shader. Replace <name> with the function name. This automatically adds #pragma require tessellation; for more information, see Targeting shader models and GPU features in HLSL. ",1309],["#pragma domain <name> Compile the function with the given name as the DirectX 11 domain shader. Replace <name> with the function name. This option automatically turns on #pragma require tessellation; for more information, see Targeting shader models and GPU features in HLSL. ",1309],["Shader variants and keywords",1309],["Use these directives to tell the shader compiler how to handle shader variants and keywords. For more information, see Declaring and using shader keywords in HLSL.",1309],["Directive Description ",1309],["",1309],["#pragma multi_compile <keywords> Declares a collection of keywords. The compiler includes all of the keywords in the build.You can use suffixes such as _local to set additional options.For more information and a list of supported suffixes, see Declaring and using shader keywords in HLSL. ",1309],["#pragma shader_feature <keywords> Declares a collection of keywords. The compiler excludes unused keywords from the build.You can use suffixes such as _local to set additional options.For more information and a list of supported suffixes, see Declaring and using shader keywords in HLSL. ",1309],["#pragma hardware_tier_variants <values> Built-in Render Pipeline only: Add keywords for graphics tiers when compiling for a given graphics API. For more information, see Graphics tiers. ",1309],["#pragma skip_variants <list of keywords> Strip specified keywords. ",1309],["GPU requirements and shader model support",1309],["Use these directives to tell the compiler that your shader requires specific GPU features.",1309],["Statement Function ",1309],["",1309],["#pragma target <value> The minimum shader model that this shader program is compatible with. Replace <value> with a valid value. For a list of valid values, see Shader compilation: Targeting shader models and GPU features in HLSL. ",1309],["#pragma require <value> The minimum GPU features that this shader is compatible with. Replace <value> with a valid value, or multiple valid values separated by a space. For a list of valid values, see Shader compilation: Targeting shader models and GPU features in HLSL. ",1309],["Graphics APIs",1309],["Use these directives to tell Unity to include or exclude code for a given graphics API.",1309],["Statement Function ",1309],["",1309],["#pragma only_renderers <value> Compile this shader program only for given graphics APIs. Replace <values> with a space-delimited list of valid values. For more information and a list of valid values, see Targeting graphics APIs and platforms in HLSL. ",1309],["#pragma exclude_renderers <value> Do not compile this shader program for given graphics APIs. Replace <value> with a space-delimited list of valid values. For more information and a list of valid values, see Targeting graphics APIs and platforms in HLSL. ",1309],["Other pragma directives",1309],["Statement Function ",1309],["",1309],["#pragma instancing_options <options> Enable GPU instancing in this shader, with given options. For more information, see GPU instancing ",1309],["#pragma once Put this directive in a file to ensure that the compiler includes the file only once in a shader program.Note: Unity only supports this directive when the Caching Shader Preprocessor is enabled. ",1309],["#pragma enable_d3d11_debug_symbols Generates shader debug symbols for supported graphics APIs, and disables optimizations for all graphics APIs. Use this for debugging shader code in an external tool.Unity generates debug symbols for Vulkan, DirectX 11 and 12, and supported console platforms.Warning: Using this results in an increased file size and reduced shader performance. When you have finished debugging your shaders and you are ready to make a final build of your application, remove this line from your shader source code and recompile the shaders. ",1309],["#pragma skip_optimizations <value> Forces optimizations off for given graphics APIs. Replace <values> with a space-delimited list of valid values. For a list of valid values, see Targeting graphics APIs and platforms in HLSL ",1309],["#pragma hlslcc_bytecode_disassembly Embed disassembled HLSLcc bytecode into a translated shader. ",1309],["#pragma disable_fastmath Enable precise IEEE 754 rules involving NaN handling. This currently only affects the Metal platform. ",1309],["#pragma editor_sync_compilation Force synchronous compilation. This affects the Unity Editor only. For more information, see Asynchronous Shader compilation. ",1309],["#pragma enable_cbuffer Emit cbuffer(name) when using CBUFFER_START(name) and CBUFFER_END macros from HLSLSupport even if the current platform does not support constant buffers. ",1309],["ShaderLab: defining material properties",1310],["This page contains information on using a Properties block in your ShaderLab code to define material properties for a Shader object.",1310],["Overview",1310],["In your ShaderLab code, you can define material properties. A material property is a property that Unity stores as part of the material asset. This allows artists to create, edit, and share materials with different configurations.",1310],["If you use material properties:",1310],["You can get or set the value of a variable in a Shader object by calling functions on the material (such as Material.SetFloat).",1310],["You can view and edit the values using the material Inspector.",1310],["Unity saves the changes that you make as part of the material asset, so they persist between sessions.",1310],["If you do not use material properties:",1310],["You can still get or set the value of a variable in a Shader object by calling a function on a material.",1310],["There is no visual editor for these values.",1310],["Changes do not persist between sessions.",1310],["The only times that you would normally not create a material property is if you want to set shader property values entirely using scripts (for example, if you are making procedural content), if the properties cannot be made into material properties, or if you don't want them to be edited in the Inspector.",1310],["Render pipeline compatibility",1310],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1310],["ShaderLab: Properties block Yes YesIn your HLSL code, you must put per-material variables in the same CBUFFER for SRP Batcher compatibility. YesIn your HLSL code, you must put per-material variables in the same CBUFFER for SRP Batcher compatibility. YesIn your HLSL code, you must put per-material variables in the same CBUFFER for SRP Batcher compatibility. ",1310],["Using the Properties block",1310],["To assign material properties to a Shader object in ShaderLab, you place a Properties block inside a Shader block.",1310],["Signature Function ",1310],["Properties{    <Material property declaration>    <Material property declaration>} Saves the given properties as part of the material asset, and uses the values stored in the material asset during rendering.A Properties block can contain any number of material property declarations. ",1310],["Material property declarations",1310],["All material property declarations follow this basic format:",1310],["[optional: attribute] name(\"display text in Inspector\", type name) = default value",1310],["The exact syntax varies by type.",1310],["This section contains information on:",1310],["Material property declaration syntax by type.",1310],["",1310],["Material property declaration syntax by type",1310],["The type name and the syntax for the default value depend on the type of the property.",1310],["In shader code, it is conventional to begin all property names with an underscore character. The examples on this page follow this convention.",1310],["Type Example syntax Comment ",1310],["Integer _ExampleName (\"Integer display name\", Integer) = 1 This type is backed by a real integer (unlike the legacy Int type described below, which is backed by a float). Use this instead of Int when you want to use an integer. ",1310],["Int (legacy) _ExampleName (\"Int display name\", Int) = 1 Note: This legacy type is backed by a float, rather than an integer. It is supported for backwards compatibility reasons only. Use the Integer type instead. ",1310],["Float _ExampleName (\"Float display name\", Float) = 0.5_ExampleName (\"Float with range\", Range(0.0, 1.0)) = 0.5 The maximum and minimum values for the range slider are inclusive. ",1310],["Texture2D _ExampleName (\"Texture2D display name\", 2D) = \"\" {}_ExampleName (\"Texture2D display name\", 2D) = \"red\" {} Put the following values in the default value string to use one of Unity's built-in textures: “white” (RGBA: 1,1,1,1), “black” (RGBA: 0,0,0,1), “gray” (RGBA: 0.5,0.5,0.5,1), “bump” (RGBA: 0.5,0.5,1,0.5) or “red” (RGBA: 1,0,0,1).If you leave the string empty or enter an invalid value, it defaults to \"gray\".Note: these default textures are not visible in the Inspector. ",1310],["Texture2DArray _ExampleName (\"Texture2DArray display name\", 2DArray) = \"\" {} For more information, see Texture arrays. ",1310],["Texture3D _ExampleName (\"Texture3D\", 3D) = \"\" {} The default value is a \"gray\" (RGBA: 0.5,0.5,0.5,1) texture. ",1310],["Cubemap _ExampleName (\"Cubemap\", Cube) = \"\" {} The default value is a \"gray\" (RGBA: 0.5,0.5,0.5,1) texture. ",1310],["CubemapArray _ExampleName (\"CubemapArray\", CubeArray) = \"\" {} See Cubemap arrays. ",1310],["Color _ExampleName(\"Example color\", Color) = (.25, .5, .5, 1) This maps to a float4 in your shader code.The Material Inspector displays a color picker. If you would rather edit the values as four individual floats, use the Vector type. ",1310],["Vector _ExampleName (\"Example vector\", Vector) = (.25, .5, .5, 1) This maps to a float4 in your shader code.The Material Inspector displays four individual float fields. If you would rather edit the values using a color picker, use the Color type. ",1310],["Reserved material property names",1310],["Unity has some reserved names for material properties. When you create a material property with one of these names, Unity performs predefined operations. Do not use these names unless you intend to use this functionality.",1310],["Name Example syntax Function ",1310],["_TransparencyLM _TransparencyLM (\"Transmissive Texture\", 2D) = \"white\" {} Enables custom RGB transparency during lightmapping.For more information, see Lightmapping and shaders. ",1310],["",1310],["Material property attributes",1310],["Material property declarations can have an optional attribute that tells Unity how to handle them.",1310],["In addition to the attributes listed here, you can use the same syntax to add a MaterialPropertyDrawer to a material property. These let you control how material properties appear in the Inspector window.",1310],["Attribute Function ",1310],["[Gamma] Indicates that a float or vector property uses sRGB values, which means that it must be converted along with other sRGB values if the color space in your project requires this. For more information, see Properties in Shader Programs. ",1310],["[HDR] Indicates that a texture or color property uses high dynamic range (HDR) values.For texture properties, the Unity Editor displays a warning if an LDR texture is assigned. For color properties, the Unity Editor uses the HDR color picker to edit this value. ",1310],["[HideInInspector] Tells the Unity Editor to hide this property in the Inspector. ",1310],["[MainTexture] Sets the main texture for a Material, which you can access using Material.mainTexture.By default, Unity considers a texture with the property name name _MainTex as the main texture. Use this attribute if your texture has a different property name, but you want Unity to consider it the main texture.If you use this attribute more than once, Unity uses the first property and ignores subsequent ones.Note: When you set the main texture using this attribute, the texture is not visible in the Game view when you use the texture streaming debugging view mode, or a custom debug tool. ",1310],["[MainColor] Sets the main color for a Material, which you can access using Material.color.By default, Unity considers a color with the property name name _Color as the main color. Use this attribute if your color has a different property name, but you want Unity to consider it the main color. If you use this attribute more than once, Unity uses the first property and ignores subsequent ones. ",1310],["[NoScaleOffset] Tells the Unity Editor to hide tiling and offset fields for this texture property. ",1310],["[Normal] Indicates that a texture property expects a normal map.The Unity Editor displays a warning if you assign an incompatible texture. ",1310],["[PerRendererData] Indicates that a texture property will be coming from per-renderer data in the form of a MaterialPropertyBlock.The Material inspector shows these properties as read-only. ",1310],["Using material properties with C# code",1310],["Material properties are represented in C# code by the MaterialProperty class.",1310],["To access variables defined in your HLSL code, you can call Material.GetFloat, Material.SetFloat. There are other, similar methods; see the Material API documentation for a full list. When you access HLSL variables using these APIs, it doesn't matter whether the variable is a material property or not.",1310],["In the Unity Editor, you can control how material properties appear in the Inspector window. The easiest way to do this is using a MaterialPropertyDrawer. For more complex needs, you can use the MaterialEditor, MaterialProperty, and ShaderGUI classes. For more information on creating custom GUIs for shaders, see ShaderLab:assigning a custom editor.",1310],["Using material properties to set variables in ShaderLab code",1310],["To set the value of a variable in your ShaderLab code from a material property, put the material property name in square brackets in your ShaderLab code.",1310],["This example code demonstrates the syntax for using a material property to set the units value of the ShaderLab Offset command.",1310],["Shader \"Examples/MaterialPropertyShaderLab\"",1310],["Properties",1310],["// Change this value in the Material Inspector to affect the value of the Offset command",1310],["_OffsetUnitScale (\"Offset unit scale\", Integer) = 1",1310],["SubShader",1310],["// The code that defines the rest of the SubShader goes here",1310],["Pass",1310],["Offset 0, [_OffsetUnitScale]",1310],["// The code that defines the rest of the Pass goes here",1310],["Using material properties to set variables in HLSL code",1310],["To set the value of a variable in HLSL code using a material property, give the material property the same name as the shader property.",1310],["You can see this technique in the following articles, which include working code examples:",1310],["Accessing shader properties in Cg/HLSL",1311],["Shader declares Material properties in a Properties block. If you want to access some of those properties in a shader program, you need to declare a Cg/HLSL variable with the same name and a matching type.",1311],["For example these shader properties:",1311],["_MyColor (\"Some Color\", Color) = (1,1,1,1)",1311],["_MyVector (\"Some Vector\", Vector) = (0,0,0,0)",1311],["_MyFloat (\"My float\", Float) = 0.5",1311],["_MyTexture (\"Texture\", 2D) = \"white\" {}",1311],["_MyCubemap (\"Cubemap\", CUBE) = \"\" {}",1311],["would be declared for access in Cg/HLSL code as:",1311],["fixed4 _MyColor; // low precision type is usually enough for colors",1311],["float4 _MyVector;",1311],["float _MyFloat;",1311],["sampler2D _MyTexture;",1311],["samplerCUBE _MyCubemap;",1311],["Cg/HLSL can also accept uniform keyword, but it is not necessary:",1311],["uniform float4 _MyColor;",1311],["Property types in ShaderLab map to Cg/HLSL variable types this way:",1311],["Color and Vector properties map to float4, half4 or fixed4 variables.",1311],["Range and Float properties map to float, half or fixed variables.",1311],["Texture properties map to sampler2D variables for regular (2D) textures; Cubemaps map to samplerCUBE; and 3D textures map to sampler3D.",1311],["How property values are provided to shaders",1311],["Shader property values are found and provided to shaders from these places:",1311],["Per-Renderer values set in MaterialPropertyBlock. This is typically \"per-instance\" data (e.g. customized tint color for a lot of objects that all share the same material).",1311],["Values set in the Material that's used on the rendered object.",1311],["Global shader properties, set either by Unity rendering code itself (see built-in shader variables), or from your own scripts (e.g. Shader.SetGlobalTexture).",1311],["The order of precedence is like above: per-instance data overrides everything; then Material data is used; and finally if shader property does not exist in these two places then global property value is used. Finally, if there's no shader property value defined anywhere, then \"default\" (zero for floats, black for colors, empty white texture for textures) value will be provided.",1311],["Serialized and Runtime Material properties",1311],["Materials can contain both serialized and runtime-set property values.",1311],["Serialized data is all the properties defined in shader's Properties block. Typically these are values that need to be stored in the material, and are tweakable by the user in Material Inspector.",1311],["A material can also have some properties that are used by the shader, but not declared in shader's Properties block. Typically this is for properties that are set from script code at runtime, e.g. via Material.SetColor. Note that matrices and arrays can only exist as non-serialized runtime properties (since there's no way to define them in Properties block).",1311],["Special Texture properties",1311],["For each texture that is setup as a shader/material property, Unity also sets up some extra information in additional vector properties.",1311],["Texture tiling & offset",1311],["Materials often have Tiling and Offset fields for their texture properties. This information is passed into shaders in a float4 {TextureName}_ST property:",1311],["x contains X tiling value",1311],["y contains Y tiling value",1311],["z contains X offset value",1311],["w contains Y offset value",1311],["For example, if a shader contains texture named _MainTex, the tiling information will be in a _MainTex_ST vector.",1311],["Texture size",1311],["{TextureName}_TexelSize - a float4 property contains texture size information:",1311],["x contains 1.0/width",1311],["y contains 1.0/height",1311],["z contains width",1311],["w contains height",1311],["Texture HDR parameters",1311],["{TextureName}_HDR - a float4 property with information on how to decode a potentially HDR (e.g. RGBM-encoded) texture depending on the color space used. See DecodeHDR function in UnityCG.cginc shader include file.",1311],["Color spaces and color/vector shader data",1311],["When using Linear color space, all material color properties are supplied as sRGB colors, but are converted into linear values when passed into shaders.",1311],["For example, if your Properties shader block contains a Color property called \"MyColor\", then the corresponding \"MyColor\" HLSL variable will get the linear color value.",1311],["For properties that are marked as Float or Vector type, no color space conversions are done by default; it is assumed that they contain non-color data. It is possible to add [Gamma] attribute for float/vector properties to indicate that they are specified in sRGB space, just like colors (see Properties).",1311],["See Also",1311],["ShaderLab Properties block.",1311],["Writing Shader Programs.",1311],["ShaderLab",1312],["ShaderLab is a declarative language that you use in shader source files. It uses a nested-braces syntax to describe a Shader object.",1312],["There are many things that you can define in ShaderLab, but the most common are:",1312],["Defining the overall structure of the Shader object. See ShaderLab: creating a Shader, ShaderLab: creating a SubShader, and ShaderLab: creating a Pass.",1312],["Using code blocks to add shader programs written in HLSL. See ShaderLab: adding shader programs.",1312],["Using commands to set the render state of the GPU before it executes a shader program, or to perform an operation involving another Pass. See ShaderLab: commands.",1312],["Exposing properties from your shader code so you can edit them in the material Inspector and save as part of a material asset. See ShaderLab: defining material properties.",1312],["Specifying package requirements for SubShaders and Passes. This enables Unity to run certain SubShaders and Passes only when particular packages are installed in the Unity project. See ShaderLab: specifying package requirements.",1312],["Defining fallback behavior for when Unity cannot run any of the SubShaders with a Shader object on the current hardware. See ShaderLab: assigning a fallback.",1312],["Surface Shaders and rendering paths",1313],["In the Built-in Render Pipeline, when using a Surface Shader, how lighting is applied and which Passes of the shader are used depends on which rendering path is used. Each pass in a shader communicates its lighting type via Pass Tags.",1313],["Render pipeline compatibility",1313],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1313],["Surface Shaders Yes NoFor a streamlined way of creating Shader objects in URP, see Shader Graph. NoFor a streamlined way of creating Shader objects in HDRP, see Shader Graph. No ",1313],["Rendering paths",1313],["In Forward Rendering, ForwardBase and ForwardAdd passes are used.",1313],["In Deferred Shading, Deferred pass is used.",1313],["In legacy Vertex Lit, Vertex, VertexLMRGBM and VertexLM passes are used.",1313],["In any of the above, to render Shadows or a depth texture, ShadowCaster pass is used.",1313],["Forward Rendering path",1313],["ForwardBase pass renders ambient, lightmaps, main directional light and not important (vertex/SH) lights at once. ForwardAdd pass is used for any additive per-pixel lights; one invocation per object illuminated by such light is done. See Forward Rendering for details.",1313],["If forward rendering is used, but a shader does not have forward-suitable passes (i.e. neither ForwardBase nor ForwardAdd pass types are present), then that object is rendered just like it would in Vertex Lit path, see below.",1313],["Deferred Shading path",1313],["Deferred pass renders all information needed for lighting (in built-in shaders: diffuse color, specular color, smoothness,",1313],["world space normal, emission). It also adds lightmaps, reflection probes and ambient lighting into the emission channel. See Deferred Shading for details.",1313],["Legacy Vertex Lit Rendering path",1313],["Since vertex lighting is most often used on platforms that do not support programmable shaders, Unity can't create multiple shader variants internally to handle lightmapped vs. non-lightmapped cases. So to handle lightmapped and non-lightmapped objects, multiple passes have to be written explicitly.",1313],["Vertex pass is used for non-lightmapped objects. All lights are rendered at once, using a fixed function OpenGL/Direct3D lighting model (Blinn-Phong)",1313],["VertexLMRGBM pass is used for lightmapped objects, when lightmaps are RGBM encoded (PC and consoles). No real-time lighting is applied; pass is expected to combine textures with a lightmap.",1313],["VertexLM pass is used for lightmapped objects, when lightmaps are double-LDR encoded (mobile platforms). No real-time lighting is applied; pass is expected to combine textures with a lightmap.",1313],["Using sampler states",1314],["Coupled textures and samplers",1314],["Most of the time when sampling textures in shaders, the texture sampling state should come from texture settings -- essentially, textures and samplers are coupled together. This is default behavior when using DX9-style shader syntax:",1314],["sampler2D _MainTex;",1314],["// ...",1314],["half4 color = tex2D(_MainTex, uv);",1314],["Using sampler2D, sampler3D, samplerCUBE HLSL keywords declares both texture and sampler.",1314],["Most of the time this is what you want, and is the only supported option on older graphics APIs (OpenGL ES).",1314],["Separate textures and samplers",1314],["Many graphics APIs and GPUs allow using fewer samplers than textures, and coupled texture+sampler syntax might not allow more complex shaders to be written. For example, Direct3D 11 allows using up to 128 textures in a single shader, but only up to 16 samplers.",1314],["Unity allows declaring textures and samplers using DX11-style HLSL syntax, with a special naming convention to match them up: samplers that have names in the form of \"sampler\"+TextureName will take sampling states from that texture.",1314],["The shader snippet from section above could be rewritten in DX11-style HLSL syntax, and it would do the same thing:",1314],["Texture2D _MainTex;",1314],["SamplerState sampler_MainTex; // \"sampler\" + “_MainTex”",1314],["// ...",1314],["half4 color = MainTex.Sample(samplerMainTex, uv);",1314],["However, this way, a shader could be written to \"reuse\" samplers from other textures, while sampling more than one texture. In the example below, three textures are sampled, but only one sampler is used for all of them:",1314],["Texture2D _MainTex;",1314],["Texture2D _SecondTex;",1314],["Texture2D _ThirdTex;",1314],["SamplerState sampler_MainTex; // \"sampler\" + “_MainTex”",1314],["// ...",1314],["half4 color = MainTex.Sample(samplerMainTex, uv);",1314],["color += SecondTex.Sample(samplerMainTex, uv);",1314],["color += ThirdTex.Sample(samplerMainTex, uv);",1314],["Unity provides several shader macros to help with declaring and sampling textures using this \"separate samplers\" approach, see built-in macros. The example above could be rewritten this way, using said macros:",1314],["UNITY_DECLARE_TEX2D(_MainTex);",1314],["UNITY_DECLARE_TEX2D_NOSAMPLER(_SecondTex);",1314],["UNITY_DECLARE_TEX2D_NOSAMPLER(_ThirdTex);",1314],["// ...",1314],["half4 color = UNITY_SAMPLE_TEX2D(_MainTex, uv);",1314],["color += UNITY_SAMPLE_TEX2D_SAMPLER(_SecondTex, _MainTex, uv);",1314],["color += UNITY_SAMPLE_TEX2D_SAMPLER(_ThirdTex, _MainTex, uv);",1314],["The above would compile on all platforms supported by Unity, but would fallback to using three samplers on older platforms like DX9.",1314],["Inline sampler states",1314],["In addition to recognizing HLSL SamplerState objects named as \"sampler\"+TextureName, Unity also recognizes some other patterns in sampler names. This is useful for declaring simple hardcoded sampling states directly in the shaders. An example:",1314],["Texture2D _MainTex;",1314],["SamplerState my_point_clamp_sampler;",1314],["// ...",1314],["half4 color = MainTex.Sample(mypoint_clamp_sampler, uv);",1314],["The name \"my_point_clamp_sampler\" will be recognized as a sampler that should use Point (nearest) texture filtering, and Clamp texture wrapping mode.",1314],["Sampler names recognized as \"inline\" sampler states (all case insensitive):",1314],["\"Point\", “Linear” or “Trilinear” (required) set up texture filtering mode.",1314],["\"Clamp\", “Repeat”, “Mirror” or “MirrorOnce” (required) set up texture wrap mode.",1314],["Wrap modes can be specified per-axis (UVW), e.g. \"ClampU_RepeatV\".",1314],["\"Compare\" (optional) set up sampler for depth comparison; use with HLSL SamplerComparisonState type and SampleCmp / SampleCmpLevelZero functions.",1314],["\"AnisoX\" (where X can be 2/4/8 or 16, for example, Ansio8) can be added to request anisotropic filtering.",1314],["Here’s an example of sampling texture with sampler_linear_repeat and sampler_point_repeat SamplerStates respectively, illustrating how the name controls filtering mode:",1314],["Here’s an example with SmpClampPoint, SmpRepeatPoint, SmpMirrorPoint, SmpMirrorOncePoint, Smp_ClampU_RepeatV_Point SamplerStates respectively, illustrating how the name controls wrapping mode. In the last example, different wrap modes are set for horizontal (U) and vertical (V) axes. In all cases, texture coordinates go from -2.0 to +2.0.",1314],["Just like separate texture + sampler syntax, inline sampler states are not supported on some platforms. Currently they are implemented on Direct3D 11/12 and Metal.",1314],["Note that \"MirrorOnce\" texture wrapping mode is not supported on most mobile GPUs/APIs, and will fallback to Mirror mode when support is not present.",1314],["Note that the \"AnisoX\" filtering modes are a best effort based on the platform capabilities and selected API. The actual value will be clamped based on the maximum supported anisotropic level (including disabled in cases where no anisotropic filtering is supported).",1314],["",1314],["",1314],["2017-06-01 ",1314],["New feature in 2017.1 NewIn20171",1314],["ShaderLab: legacy texture combining",1315],["Note**: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.",1315],["Render pipeline compatibility",1315],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1315],["Legacy texture combining Yes No No No ",1315],["Overview",1315],["After the basic vertex lighting has been calculated, textures are applied. In ShaderLab this is done using SetTexture command.",1315],["Fixed function texturing is the place to do old-style combiner effects. You can have multiple SetTexture commands inside a pass - all textures are applied in sequence, like layers in a painting program. SetTexture commands must be placed at the end of a Pass.",1315],["Syntax",1315],["SetTexture [TextureName] {Texture Block}",1315],["Assigns a texture. TextureName must be defined as a texture property. How to apply the texture is defined inside the TextureBlock.",1315],["The texture block controls how the texture is applied. Inside the texture block can be up to two commands: combine and constantColor.",1315],["Texture block combine command",1315],["combine src1 * src2: Multiplies src1 and src2 together. The result will be darker than either input.",1315],["combine src1 + src2: Adds src1 and src2 together. The result will be lighter than either input.",1315],["combine src1 - src2: Subtracts src2 from src1.",1315],["combine src1 lerp (src2) src3: Interpolates between src3 and src1, using the alpha of src2. Note that the interpolation is opposite direction: src1 is used when alpha is one, and src3 is used when alpha is zero.",1315],["combine src1 * src2 + src3: Multiplies src1 with the alpha component of src2, then adds src3.",1315],["All the src properties can be either one of previous, constant, primary or texture.",1315],["Previous** is the the result of the previous SetTexture.",1315],["Primary** is the color from the lighting calculation or the vertex color if it is bound.",1315],["Texture** is the color of the texture specified by TextureName in the SetTexture (see above).",1315],["Constant** is the color specified in ConstantColor.",1315],["Modifiers:",1315],["The formulas specified above can optionally be followed by the keywords Double or Quad to make the resulting color 2x or 4x as bright.",1315],["All the src properties, except lerp argument, can optionally be preceded by one - to make the resulting color negated.",1315],["All the src properties can be followed by alpha to take only the alpha channel.",1315],["Texture block constantColor command",1315],["ConstantColor color:** Defines a constant color that can be used in the combine command.",1315],["Functionality removed in Unity 5.0",1315],["Unity versions before 5.0 did support texture coordinate transformations with a matrix command inside a texture block. If you need this functionality now, consider rewriting your shader as a programmable shader instead, and do the UV transformation in the vertex shader.",1315],["Similarly, 5.0 removed signed add (a+-b), multiply signed add (a*b+-c), multiply subtract (a*b-c) and dot product (dot3, dot3rgba) texture combine modes. If you need them, do the math in the pixel shader instead.",1315],["Details",1315],["Before fragment programs existed, older graphics cards used a layered approach to textures. The textures are applied one after each other, modifying the color that will be written to the screen. For each texture, the texture is typically combined with the result of the previous operation. These days it is advisable to use actual fragment programs.",1315],["Note that each texture stage may or might not be clamped to 0..1 range, depending on the platform. This might affect SetTexture stages that can produce values higher than 1.0.",1315],["Separate Alpha & Color computation",1315],["By default, the combiner formula is used for calculating both the RGB and alpha component of the color. Optionally, you can specify a separate formula for the alpha calculation. This looks like this:",1315],["SetTexture [_MainTex] { combine previous * texture, previous + texture }",1315],["Here, we multiply the RGB colors and add the alpha.",1315],["Specular highlights",1315],["By default the primary color is the sum of the diffuse, ambient and specular colors (as defined in the Lighting calculation). If you specify SeparateSpecular On in the pass options, the specular color will be added in after the combiner calculation, rather than before. This is the default behavior of the built-in VertexLit shader.",1315],["Graphics hardware support",1315],["Modern graphics cards with fragment shader support (\"shader model 2.0\" on desktop, OpenGL ES 2.0 on mobile) support all SetTexture modes and at least 4 texture stages (many of them support 8). If you're running on really old hardware (made before 2003 on PC, or before iPhone3GS on mobile), you might have as low as two texture stages. The shader author should write separate SubShaders for the cards they want to support.",1315],["Examples",1315],["Alpha Blending Two Textures",1315],["This small examples takes two textures. First it sets the first combiner to just take the _MainTex, then is uses the alpha channel of _BlendTex to fade in the RGB colors of _BlendTex",1315],["Shader \"Examples/2 Alpha Blended Textures\" {",1315],["Properties {",1315],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1315],["_BlendTex (\"Alpha Blended (RGBA) \", 2D) = \"white\" {}",1315],["SubShader {",1315],["Pass {",1315],["// Apply base texture",1315],["SetTexture [_MainTex] {",1315],["combine texture",1315],["// Blend in the alpha texture using the lerp operator",1315],["SetTexture [_BlendTex] {",1315],["combine texture lerp (texture) previous",1315],["Alpha Controlled Self-illumination",1315],["This shader uses the alpha component of the _MainTex to decide where to apply lighting. It does this by applying the texture to two stages; In the first stage, the alpha value of the texture is used to blend between the vertex color and solid white. In the second stage, the RGB values of the texture are multiplied in.",1315],["Shader \"Examples/Self-Illumination\" {",1315],["Properties {",1315],["_MainTex (\"Base (RGB) Self-Illumination (A)\", 2D) = \"white\" {}",1315],["SubShader {",1315],["Pass {",1315],["// Set up basic white vertex lighting",1315],["Material {",1315],["Diffuse (1,1,1,1)",1315],["Ambient (1,1,1,1)",1315],["Lighting On",1315],["// Use texture alpha to blend up to white (= full illumination)",1315],["SetTexture [_MainTex] {",1315],["constantColor (1,1,1,1)",1315],["combine constant lerp(texture) previous",1315],["// Multiply in texture",1315],["SetTexture [_MainTex] {",1315],["combine previous * texture",1315],["We can do something else for free here, though; instead of blending to solid white, we can add a self-illumination color and blend to that. Note the use of ConstantColor to get a _SolidColor from the properties into the texture blending.",1315],["Shader \"Examples/Self-Illumination 2\" {",1315],["Properties {",1315],["_IlluminCol (\"Self-Illumination color (RGB)\", Color) = (1,1,1,1)",1315],["_MainTex (\"Base (RGB) Self-Illumination (A)\", 2D) = \"white\" {}",1315],["SubShader {",1315],["Pass {",1315],["// Set up basic white vertex lighting",1315],["Material {",1315],["Diffuse (1,1,1,1)",1315],["Ambient (1,1,1,1)",1315],["Lighting On",1315],["// Use texture alpha to blend up to white (= full illumination)",1315],["SetTexture [_MainTex] {",1315],["// Pull the color property into this blender",1315],["constantColor [_IlluminCol]",1315],["// And use the texture's alpha to blend between it and",1315],["// vertex color",1315],["combine constant lerp(texture) previous",1315],["// Multiply in texture",1315],["SetTexture [_MainTex] {",1315],["combine previous * texture",1315],["And finally, we take all the lighting properties of the vertexlit shader and pull that in:",1315],["Shader \"Examples/Self-Illumination 3\" {",1315],["Properties {",1315],["_IlluminCol (\"Self-Illumination color (RGB)\", Color) = (1,1,1,1)",1315],["_Color (\"Main Color\", Color) = (1,1,1,0)",1315],["_SpecColor (\"Spec Color\", Color) = (1,1,1,1)",1315],["_Emission (\"Emmisive Color\", Color) = (0,0,0,0)",1315],["_Shininess (\"Shininess\", Range (0.01, 1)) = 0.7",1315],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1315],["SubShader {",1315],["Pass {",1315],["// Set up basic vertex lighting",1315],["Material {",1315],["Diffuse [_Color]",1315],["Ambient [_Color]",1315],["Shininess [_Shininess]",1315],["Specular [_SpecColor]",1315],["Emission [_Emission]",1315],["Lighting On",1315],["// Use texture alpha to blend up to white (= full illumination)",1315],["SetTexture [_MainTex] {",1315],["constantColor [_IlluminCol]",1315],["combine constant lerp(texture) previous",1315],["// Multiply in texture",1315],["SetTexture [_MainTex] {",1315],["combine previous * texture",1315],["ShaderLab: defining a Shader object",1316],["To define a Shader object in ShaderLab, use a Shader block. This page contains information on using Shader blocks.",1316],["For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader objects introduction.",1316],["Overview",1316],["A Shader object is a Unity-specific concept; it is a wrapper for shader programs and other information. It lets you define multiple shader programs in the same file, and tell Unity how to use them.",1316],["A Shader object has a nested structure; it organizes information into structures called SubShaders and Passes.",1316],["Render pipeline compatibility",1316],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1316],["ShaderLab: Shader block Yes Yes Yes Yes ",1316],["Using the Shader block",1316],["Inside the Shader block, you can:",1316],["Define material properties, using the Properties block. See ShaderLab: defining material properties.",1316],["Define one or more SubShaders, using the SubShader block. See ShaderLab: defining a SubShader.",1316],["Assign a custom editor, which determines how the shader asset appears in the Unity Editor. Optionally, you can assign different custom editors for different render pipelines. See ShaderLab: assigning custom editors.",1316],["Assign a fallback Shader object, using the Fallback block. See ShaderLab: assigning a fallback.",1316],["Signature Function ",1316],["Shader \"<name>\"{    <optional: Material properties>    <One or more SubShader definitions>    <optional: custom editor>    <optional: fallback>} Defines a Shader object with a given name. ",1316],[" Legacy shader names",1316],["Prior to Unity 5.0, some of the functionality of a shader was determined by its path and name. This is still how Unity's Legacy Shaders work. Changing the name of these shaders can affect their functionality.",1316],["Examples",1316],["This example code demonstrates the basic syntax and structure of a Shader object. The example Shader object has a single SubShader that contains a single pass. It defines Material properties, a CustomEditor, and a Fallback.",1316],["Shader \"Examples/ShaderSyntax\"",1316],["CustomEditor = \"ExampleCustomEditor\"",1316],["Properties",1316],["// Material property declarations go here",1316],["SubShader",1316],["// The code that defines the rest of the SubShader goes here",1316],["Pass",1316],["// The code that defines the Pass goes here",1316],["Fallback \"ExampleFallbackShader\"",1316],["For example custom shaders that are compatible with different render pipelines, see Example custom shaders",1316],["Targeting graphics APIs and platforms in HLSL",1317],["Some #pragma directives take parameters that allow you to target specific graphics APIs and platforms. This page contains information on using those directives, and provides a list of valid parameter values.",1317],["Including or excluding graphics APIs",1317],["By default, Unity compiles all shader programs for each graphics API in the list for the current build target. Sometimes, you might want to compile certain shader programs only for certain graphics APIs; for example, if you use features that are not supported on all platforms.",1317],["To compile a shader program only for given APIs, use the #pragma only_renderers directive. You can pass multiple values, space delimited.",1317],["This example demonstrates how to compile shaders only for Metal and Vulkan:",1317],["pragma only_renderers metal vulkan",1317],["To exclude shader code from compilation by given compilers, use the #pragma exclude_renderers directive. You can pass multiple values, space delimited.",1317],["This example demonstrates how to exclude a shader from compilation for Metal and Vulkan:",1317],["pragma exclude_renderers metal vulkan",1317],["Generating shader variants for graphics tiers for a given graphics API",1317],["In the Built-in Render Pipeline, Unity automatically generates shader variants that correspond to graphics tiers under certain conditions. You can also force Unity to generate these variants, if required.",1317],["To do this, use the #pragma hardware_tier_variants preprocessor directive and specify the graphics APIs for which you want to generate tier shader variants.",1317],["For example, this instructs Unity to compile tier shader variants for Metal:",1317],["pragma hardware_tier_variants metal",1317],["List of valid parameter values",1317],["Supported values are:",1317],["Value Description ",1317],["",1317],["d3d11 DirectX 11 feature level 10 and above, DirectX 12 ",1317],["gles OpenGL ES 2.0, WebGL 1.0 ",1317],["gles3 OpenGL ES 3.x, WebGL 2.0 ",1317],["ps4 PlayStation 4 ",1317],["xboxone Xbox One and GameCore, DirectX 11 and DirectX 12 ",1317],["metal iOS/Mac Metal ",1317],["glcore OpenGL 3.x, OpenGL 4.x ",1317],["vulkan Vulkan ",1317],["switch Nintendo Switch ",1317],["ps5 PlayStation 5 ",1317],["Targeting shader models and GPU features in HLSL",1318],["You can use #pragma directives to indicate that a shader requires certain GPU features. At runtime, Unity uses this information to determine whether a shader program is compatible with the current hardware.",1318],["You can specify individual GPU features with the #pragma require directive, or specify a shader model with the #pragma target directive. A shader model is a shorthand for a group of GPU features; internally, it is the same as a #pragma require directive with the same list of features.",1318],["It is important to correctly describe the GPU features that your shader requires. If your shader uses features that are not included in the list of requirements, this can result in either compile time errors, or in devices failing to support shaders at runtime.",1318],["Default behavior",1318],["By default, Unity compiles shaders with #pragma require derivatives, which corresponds to #pragma target 2.5.",1318],["Special requirements for shader stages",1318],["If your shader defines certain shader stages, Unity automatically adds items to the list of requirements.",1318],["If a shader defines a geometry stage (with #pragma geometry), Unity automatically adds geometry to the list of requirements.",1318],["If a shader defines a tessellation stage (with #pragma hull or #pragma domain), Unity automatically adds tessellation to the list of requirements.",1318],["If the list of requirements (or the equivalent target value) does not already include these values, Unity displays a warning message when it compiles the shader, to indicate that it has added these requirements. To avoid seeing this warning message, explicitly add the requirements or use an appropriate target value in your code.",1318],["Specifying GPU features or a shader model",1318],["To specify required features, use the #pragma require directive, followed by a list of space-delimited values. For example:",1318],["pragma require integers mrt8",1318],["You can also use the #pragma require directive followed by a colon and a list of space-delimited shader keywords. This means that the requirement applies only to variants that are used when any of the given keywords are enabled.",1318],["For example:",1318],["pragma require integers mrt8 : EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD",1318],["You can use multiple #pragma require lines. In this example, the shader requires integers in all cases, and mrt8 if EXAMPLE_KEYWORD is enabled.",1318],["pragma require integers",1318],["pragma require integers mrt8 : EXAMPLE_KEYWORD",1318],["To specify a shader model, use #pragma target directive. For example:",1318],["pragma target 4.0",1318],["You can also use the #pragma target directive followed by a list of space-delimited shader keywords. This means that the requirement applies only to variants that are used when any of the given keywords are enabled.",1318],["For example:",1318],["pragma target 4.0 EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD",1318],["Note:** The syntax for specifying keywords for #pragma require and #pragma target is slightly different. When you specify keywords for #pragma require, you use a colon. When you specify keywords for #pragma target, you do not use a colon.",1318],["",1318],["List of '#pragma target' values",1318],["Here is the list of shader models that Unity uses, and the combination of #pragma require values that each corresponds to.",1318],["Note:** Unity's shader models are similar to DirectX shader models and OpenGL version requirements, but they do not correspond exactly. Read the descriptions carefully to ensure that you understand the differences.",1318],["Value Description Support Equivalent #pragma require values",1318],["",1318],["2.0 Equivalent to DirectX shader model 2.0.Limited amount of arithmetic and texture instructions; 8 interpolators; no vertex texture sampling; no derivatives in fragment shaders; no explicit LOD texture sampling. Works on all platforms supported by Unity. N/A ",1318],["2.5 Almost the same as 3.0, but with only 8 interpolators, and no explicit LOD texture sampling. DirectX 11 feature level 9+OpenGL 3.2+OpenGL ES 2.0VulkanMetal derivatives ",1318],["3.0 Equivalent to DirectX shader model 3.0.. DirectX 11 feature level 10 +OpenGL 3.2+OpenGL ES 3.0+VulkanMetalMight work on some OpenGL ES 2.0 devices, depending on driver extensions and features. Everything in 2.5, plus:interpolators10 samplelod fragcoord ",1318],["3.5 Equivalent to OpenGL ES 3.0. DirectX 11 feature level 10+OpenGL 3.2+OpenGL ES 3+VulkanMetal Everything in 3.0, plus:interpolators15 mrt4 integers 2darray instancing ",1318],["4.0 Equivalent to DirectX shader model 4.0, but without the requirement to support 8 MRTs. DirectX 11 feature level 10+OpenGL 3.2+OpenGL ES 3.1+AEPVulkanMetal (if no geometry stage is defined) Everything in 3.5, plus:geometry ",1318],["4.5 Equivalent to OpenGL ES 3.1. DirectX 11 feature level 11+OpenGL 4.3+OpenGL ES 3.1VulkanMetal Everything in 3.5, plus:compute randomwrite msaatex ",1318],["4.6 Equivalent to OpenGL 4.1.This is the highest OpenGL level supported on a Mac. DirectX 11 feature level 11+OpenGL 4.1+OpenGL ES 3.1+AEPVulkanMetal (if no geometry stage is defined, and no hull or domain stage is defined) Everything in 4.0, plus:cubearray tesshw tessellation msaatex ",1318],["5.0 Equivalent to DirectX shader model 5.0, but without the requirement to support 32 interpolators or cubemap arrays. DirectX 11 feature level 11+OpenGL 4.3+OpenGL ES 3.1+AEPVulkanMetal (if no geometry stage is defined, and no hull or domain stage is defined) Everything in 4.0, plus:compute randomwrite msaatex tesshw tessellation ",1318],["For information on shader model support for console platforms, see the platform-specific documentation.",1318],["Notes:**",1318],["In the DirectX definitions, shader model 4.0 includes mrt8, and shader model 5.0 includes interpolators32 and cubearray. Unity does not include these, for broader compatibility. To require these features, use an explicit #pragma require directive.",1318],["If you use a target that requires geometry but your shader does not define a geometry stage, Unity removes geometry from the list of requirements at compile time.",1318],["If you use a target that requires tessellation but your shader does not define a hull or domain stage, Unity removes tessellation from the list of requirements at compile time.",1318],["",1318],["List of '#pragma require' values",1318],["Here are all the valid values for the #pragma require directive.",1318],["Value Description ",1318],["",1318],["interpolators10 At least 10 vertex-to-fragment interpolators (“varyings”) are available. ",1318],["interpolators15 At least 15 vertex-to-fragment interpolators (“varyings”) are available.Note: Internally, this also automatically adds integers to the list of requirements. ",1318],["interpolators32 At least 32 vertex-to-fragment interpolators (“varyings”) are available. ",1318],["integers Integers are a supported data type, including bit/shift operations.Note: Internally, this also automatically adds interpolators15 to the list of requirements. ",1318],["mrt4 At least 4 render targets are supported. ",1318],["mrt8 At least 8 render targets are supported. ",1318],["derivatives Pixel shader derivative instructions (ddx/ddy) are supported. ",1318],["samplelod Explicit texture LOD sampling (tex2Dlod / SampleLevel) is supported. ",1318],["fragcoord Pixel location (XY on screen, ZW depth in clip space) input in pixel shader is supported. ",1318],["2darray 2D texture arrays are a supported data type. ",1318],["cubearray Cubemap arrays are a supported data type. ",1318],["instancing SV_InstanceID input system value is supported. ",1318],["geometry Geometry shader stages are supported. ",1318],["compute Compute shaders, structured buffers, and atomic operations are supported. ",1318],["randomwrite or uav “Random write” (UAV) textures are supported. ",1318],["tesshw Hardware tessellation is supported, but not necessarily tessellation (hull/domain) shader stages. For example, Metal supports tessellation, but not hull or domain stages. ",1318],["tessellation Tessellation (hull/domain) shader stages are supported. ",1318],["msaatex The ability to access multi-sampled textures (Texture2DMS in HLSL) is supported. ",1318],["sparsetex Sparse textures with residency info (“Tier2” support in DirectX terms; CheckAccessFullyMapped HLSL function). ",1318],["framebufferfetch or fbfetch Framebuffer fetch (the ability to read input pixel color in the pixel shader) is supported. ",1318],["setrtarrayindexfromanyshader Setting the render target array index from any shader stage (not just the geometry shader stage) is supported. ",1318],["ShaderLab: assigning a LOD value to a SubShader",1319],["This page contains information on using a LOD block in your ShaderLab code to assign a LOD (level of detail) value to a SubShader.",1319],["Overview",1319],["You can assign a LOD value to a SubShader. This value indicates how computationally demanding it is.",1319],["At runtime, you can set the shader LOD value for a single Shader object, or for all Shader objects. Unity then prioritises SubShaders that have a lower LOD value. For information on how Unity chooses when to use SubShaders, see How Unity selects a subshader.",1319],["Note:** Although this technique is named after the LOD feature for rendering meshes, there are important differences: shader LOD does not relate to distance from the Camera, and Unity does not calculate shader LOD automatically. You must set the maximum shader LOD manually.",1319],["Overview",1319],["Use this technique to fine-tune shader performance on different hardware. This is useful when a SubShader is theoretically supported by a user’s hardware, but the hardware is not capable of running it well.",1319],["Render pipeline compatibility",1319],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1319],["ShaderLab: SubShader LOD block Yes Yes Yes Yes ",1319],["Using the LOD block",1319],["In ShaderLab, you assign a LOD value to a SubShader by placing a LOD block inside a SubShader block.",1319],["Signature Function ",1319],["LOD [value] Assigns the given LOD value to the SubShader. ",1319],["Note**: Inside your Shader block, you must put your SubShaders in descending LOD order. For example, if you have SubShaders with LOD values of 200, 100, and 500, you must put the SubShader with the LOD value of 500 first, followed by the one with a LOD value of 200, followed by the one with a LOD value of 100. This is because Unity selects the first valid SubShader it finds, so if it finds one with a lower LOD first it will always use that.",1319],["Using the SubShader LOD value with C# code",1319],["To set the shader LOD for a given Shader object, you can use Shader.maximumLOD. To set the shader LOD for all Shader objects, you can use Shader.globalMaximumLOD. By default, there is no maximum LOD.",1319],["Code examples",1319],["This example code creates a Shader object that contains two SubShaders: one with a LOD value of 200, and one with a value of 100. The SubShaders are in descending order of LOD value.",1319],["Shader \"Examples/ExampleLOD\"",1319],["SubShader",1319],["LOD 200",1319],["Pass",1319],["// The rest of the code that defines the Pass goes here.",1319],["SubShader",1319],["LOD 100",1319],["Pass",1319],["// The rest of the code that defines the Pass goes here.",1319],["LOD values for Unity's built-in shaders",1319],["In the Built-in Render Pipeline, Unity’s built-in shaders have the following LOD values:",1319],["LOD value Shader name ",1319],["",1319],["100 Unlit/TextureUnlit/ColorUnlit/TransparentUnlit/Transparent Cutout ",1319],["300 StandardStandard (Specular Setup)Autodesk Interactive ",1319],["LOD values for legacy shaders",1319],["In the Built-in Render Pipeline, Unity's built-in legacy shaders have the following LOD values:",1319],["LOD value Shader name ",1319],["",1319],["100 VertexLit ",1319],["150 DecalReflective VertexLit ",1319],["200 Diffuse ",1319],["250 Diffuse DetailReflective Bumped UnlitReflective Bumped VertexLit ",1319],["300 BumpedSpecular ",1319],["400 Bumped Specular ",1319],["500 Parallax ",1319],["600 Parallax Specular ",1319],["Optimizing shader runtime performance",1320],["Different platforms have vastly different performance capabilities; a high-end PC GPU can handle much more in terms of graphics and shaders than a low-end mobile GPU. The same is true even on a single platform; a fast GPU is dozens of times faster than a slow integrated GPU.",1320],["GPU performance on mobile platforms and low-end PCs is likely to be much lower than on your development machine. It's recommended that you manually optimize your shaders to reduce calculations and texture reads, in order to get good performance across low-end GPU machines. For example, some built-in Shader objects have \"mobile\" equivalents that are much faster, but have some limitations or approximations.",1320],["This page contains information on optimizing your shaders for runtime performance.",1320],["Only compute what you need",1320],["The more computations and processing your shader code needs to do, the more it will impact the performance of your game. For example, supporting color per material is nice to make a shader more flexible, but if you always leave that color set to white then useless computations are performed for each vertex or pixel rendered on screen.",1320],["The frequency of computations will also impact the performance of your game. Usually there are many more pixels rendered (and subsequently more pixel shader executions) than there are vertices (vertex shader executions), and more vertices than objects being rendered. Where possible, move computations out of the pixel shader code into the the vertex shader code, or move them out of shaders completely and set the values in a script.",1320],["Precision of computations",1320],["When writing shaders in Cg/HLSL, there are three basic number types: float, half and fixed (see Data Types and Precision).",1320],["For good performance, always use the lowest precision that is possible. This is especially important on lower-end hardware. Good rules of thumb are:",1320],["For world space positions and texture coordinates, use float precision.",1320],["For everything else (vectors, HDR colors, etc.), start with half precision. Increase only if necessary.",1320],["For very simple operations on texture data, use fixed precision.",1320],["In practice, exactly which number type you should use for depends on the platform and the GPU. Generally speaking:",1320],["All modern desktop GPUs will always compute everything in full float precision, so float/half/fixed end up being exactly the same underneath. This can make testing difficult, as it's harder to see if half/fixed precision is really enough, so always test your shaders on the target device for accurate results.",1320],["Mobile GPUs have actual half precision support. This is usually faster, and uses less power to do calculations.",1320],["Fixed precision is generally only useful for older mobile GPUs. Most modern GPUs (the ones that can run OpenGL ES 3 or Metal) internally treat fixed and half precision exactly the same.",1320],["See Data Types and Precision for more details.",1320],["Complex mathematical operations",1320],["Transcendental mathematical functions (such as pow, exp, log, cos, sin, tan) are quite resource-intensive, so avoid using them where possible on low-end hardware. Consider using lookup textures as an alternative to complex math calculations if applicable.",1320],["Avoid writing your own operations (such as normalize, dot, inversesqrt). Unity's built-in options ensure that the driver can generate much better code. Remember that the Alpha Test (discard) operation often makes your fragment shader slower.",1320],["Optimized Surface Shaders",1320],["Surface Shaders are great for writing shaders that interact with lighting. However, their default options are tuned to cover a broad number of general cases. Tweak these for specific situations to make shaders run faster or at least be smaller:",1320],["The approxview directive for shaders that use view direction (i.e. Specular) makes the view direction normalized per vertex instead of per pixel. This is approximate, but often good enough.",1320],["The halfasview for Specular shader types is even faster. The half-vector (halfway between lighting direction and view vector) is computed and normalized per vertex, and the lighting function receives the half-vector as a parameter instead of the view vector.",1320],["noforwardadd makes a shader fully support one-directional light in Forward rendering only. The rest of the lights can still have an effect as per-vertex lights or spherical harmonics. This is great to make your shader smaller and make sure it always renders in one pass, even with multiple lights present.",1320],["noambient disables ambient lighting and spherical harmonics lights on a shader. This can make performance slightly faster.",1320],["Alpha Testing",1320],["The fixed-function AlphaTest - or its programmable equivalent, clip() - has different performance characteristics on different platforms:",1320],["Generally you gain a small advantage when using it to remove totally transparent pixels on most platforms.",1320],["However, on PowerVR GPUs found in iOS and some Android devices, alpha testing is resource-intensive. Do not try to use it for performance optimization on these platforms, as it causes the game to run slower than usual.",1320],["Color Mask",1320],["On some platforms (mostly mobile GPUs found in iOS and Android devices), using ColorMask to leave out some channels (e.g. ColorMask RGB) can be resource-intensive, so only use it if really necessary.",1320],["HLSL in Unity",1321],["In Unity, you use the HLSL programming language to write shader programs.",1321],["This section of the manual includes information on using HLSL in a Unity-specific way. For general information on writing HLSL, see Microsoft's HLSL documentation.",1321],["Note:** Unity originally used the Cg language, hence the name of some of Unity's keywords (CGPROGRAM) and file extensions (.cginc). Unity no longer uses Cg, but these names are still in use.",1321],["Adding HLSL code to your ShaderLab code",1321],["You place your HLSL code inside code blocks in your ShaderLab code. They usually look like this:",1321],["Pass {",1321],["// ... the usual pass state setup ...",1321],["HLSLPROGRAM",1321],["// compilation directives for this snippet, e.g.:",1321],["pragma vertex vert",1321],["pragma fragment frag",1321],["// the shader program itself",1321],["ENDHLSL",1321],["// ... the rest of pass ...",1321],["For more information on shader code blocks, see ShaderLab: adding shader programs.",1321],["HLSL syntax",1321],["HLSL has two syntaxes: a legacy DirectX 9-style syntax, and a more modern DirectX 10+ style syntax. The difference is mostly in how texture sampling functions work:",1321],["The legacy syntax uses sampler2D, tex2D() and similar functions. This syntax works on all platforms.",1321],["The DX10+ syntax uses Texture2D, SamplerState and .Sample() functions. Some forms of this syntax do not work on OpenGL platforms, because textures and samplers are not different objects in OpenGL.",1321],["Unity provides shader libraries that contain preprocessor macros to help you manage these differences. For more information, see Built-in shader macros.",1321],["Replacing shaders at runtime",1322],["In the Built-in Render Pipeline, you can tell a Camera to change the shader that it uses to render certain geometry at runtime. You might do this to achieve a visual effect such as edge detection.",1322],["Shader replacement is done from scripts with either the Camera.RenderWithShader or Camera.SetReplacementShader function. Both functions take a shader and a replacementTag.",1322],["It works like this: the camera renders the scene as it normally would. The objects still use their materials, but the shader they use changes:",1322],["If replacementTag is empty (must be an empty string not null), then all objects in the scene are rendered with the given replacement shader.",1322],["If replacementTag is not empty, then for each object that would be rendered:",1322],["The real object's shader is queried for the tag value.",1322],["If it does not have that tag, object is not rendered.",1322],["A subshader is found in the replacement shader that has a given tag with the found value. If no such subshader is found, object is not rendered.",1322],["Now that subshader is used to render the object.",1322],["So if all shaders would have, for example, a \"RenderType\" tag with values like \"Opaque\", \"Transparent\", \"Background\", \"Overlay\", you could write a replacement shader that only renders solid objects by using one subshader with RenderType=Solid tag. The other tag types would not be found in the replacement shader, so the objects would be not rendered. Or you could write several subshaders for different \"RenderType\" tag values. Incidentally, all built-in Shader objects have a \"RenderType\" tag set.",1322],["Lit shader replacement",1322],["When using shader replacement the scene is rendered using the render path that is configured on the camera. This means that the shader used for replacement can contain shadow and lighting passes (you can use surface shaders for shader replacement). This can be useful for doing rendering of special effects and scene debugging.",1322],["Shader replacement tags in built-in shaders",1322],["All built-in shaders have a \"RenderType\" tag set that can be used when rendering with replaced shaders. Tag values are the following:",1322],["Opaque: most of the shaders (Normal, Self Illuminated, Reflective, terrain shaders).",1322],["Transparent: most semitransparent shaders (Transparent, Particle, Font, terrain additive pass shaders).",1322],["TransparentCutout: masked transparency shaders (Transparent Cutout, two pass vegetation shaders).",1322],["Background: Skybox shaders.",1322],["Overlay: Halo, Flare shaders.",1322],["TreeOpaque: terrain engine tree bark.",1322],["TreeTransparentCutout: terrain engine tree leaves.",1322],["TreeBillboard: terrain engine billboarded trees.",1322],["Grass: terrain engine grass.",1322],["GrassBillboard: terrain engine billboarded grass.",1322],["Built-in scene depth/normals texture",1322],["A Camera has a built-in capability to render depth or depth+normals texture, if you need that in some of your effects. See Camera Depth Texture page. Note that in some cases (depending on the hardware), the depth and depth+normals textures can internally be rendered using shader replacement. So it is important to have the correct \"RenderType\" tag in your shaders.",1322],["Code Example",1322],["Your Start() function specifies the replacement shaders:",1322],["void Start() {",1322],["camera.SetReplacementShader (EffectShader, \"RenderType\");",1322],["This requests that the EffectShader will use the RenderType key. The EffectShader will have key-value tags for each RenderType that you want. The Shader will look something like:",1322],["Shader \"EffectShader\" {",1322],["SubShader {",1322],["Tags { \"RenderType\"=\"Opaque\" }",1322],["Pass {",1322],["...",1322],["SubShader {",1322],["Tags { \"RenderType\"=\"SomethingElse\" }",1322],["Pass {",1322],["...",1322],["...",1322],["SetReplacementShader will look through all the objects in the scene and, instead of using their normal shader, use the first subshader which has a matching value for the specified key. In this example, any objects whose shader has Rendertype=\"Opaque\" tag will be replaced by first subshader in EffectShader, any objects with RenderType=\"SomethingElse\" shader will use second replacement subshader and so one. Any objects whose shader does not have a matching tag value for the specified key in the replacement shader will not be rendered.",1322],["Shader semantics",1323],["When writing HLSL shader programs,",1323],["input and output variables need to have their \"intent\" indicated",1323],["via semantics. This is a standard concept in HLSL",1323],["shader language; see the Semantics documentation on MSDN for more details.",1323],["Vertex shader input semantics",1323],["The main vertex shader function (indicated by the #pragma vertex",1323],["directive) needs to have semantics on all the input parameters.",1323],["These correspond to individual Mesh data elements, like vertex position, normal mesh, and texture coordinates.",1323],["See vertex program inputs for more details.",1323],["Here's an example of a simple vertex shader that takes vertex position",1323],["and a texture coordinate as an input. The pixel shader",1323],["visualizes the texture coordinate as a color.",1323],["Shader \"Unlit/Show UVs\"",1323],["SubShader",1323],["Pass",1323],["CGPROGRAM",1323],["pragma vertex vert",1323],["pragma fragment frag",1323],["struct v2f {",1323],["float2 uv : TEXCOORD0;",1323],["float4 pos : SV_POSITION;",1323],["};",1323],["v2f vert (",1323],["float4 vertex : POSITION, // vertex position input",1323],["float2 uv : TEXCOORD0 // first texture coordinate input",1323],["v2f o;",1323],["o.pos = UnityObjectToClipPos(vertex);",1323],["o.uv = uv;",1323],["return o;",1323],["fixed4 frag (v2f i) : SV_Target",1323],["return fixed4(i.uv, 0, 0);",1323],["ENDCG",1323],["Instead of spelling out all individual inputs one by one,",1323],["it's also possible to declare a structure of them, and indicate",1323],["semantics on each individual member variable of the struct.",1323],["Fragment shader output semantics",1323],["Most often a fragment (pixel) shader outputs a color, and has an",1323],["SV_Target semantic. The fragment shader in the example above does",1323],["exactly that:",1323],["fixed4 frag (v2f i) : SV_Target",1323],["The function frag has a return type of fixed4 (low precision",1323],["RGBA color). As it only returns a single value, the semantic",1323],["is indicated on the function itself, : SV_Target.",1323],["It's also possible to return a structure with the outputs.",1323],["The fragment shader above could be rewritten this way too, and it would",1323],["do exactly the same:",1323],["struct fragOutput {",1323],["fixed4 color : SV_Target;",1323],["};",1323],["fragOutput frag (v2f i)",1323],["fragOutput o;",1323],["o.color = fixed4(i.uv, 0, 0);",1323],["return o;",1323],["Returning structures from the fragment shader is mostly useful",1323],["for shaders that don't just return a single color. Additional",1323],["semantics supported by the fragment shader outputs are as follows.",1323],["SV_TargetN: Multiple render targets",1323],["SV_Target1, SV_Target2, etc.: These are additional colors written by the shader. This is used when rendering into more than one render target at once (known as the Multiple Render Targets rendering technique, or MRT). SV_Target0 is the same as SV_Target.",1323],["SV_Depth: Pixel shader depth output",1323],["Usually the fragment shader doesn't override the Z buffer value, and a default value is used from the regular triangle rasterization. However, for some effects it's useful to output custom Z buffer depth values per pixel.",1323],["Note that on many GPUs this turns off some depth buffer optimizations, so don't override Z buffer value without a good reason. The cost incurred by SV_Depth varies depending on the GPU architecture, but overall it's fairly similar to the cost of alpha testing (using the built-in clip() function in HLSL). Render shaders that modify depth after all regular opaque shaders (for example, by using the AlphaTest rendering queue.",1323],["The depth output value needs to be a single float.",1323],["Vertex shader outputs and fragment shader inputs",1323],["A vertex shader needs to output the final clip space position of a vertex, so that the GPU knows where on the screen to rasterize it, and at what depth. This output needs to have the SV_POSITION semantic, and be of a float4 type.",1323],["Any other outputs (\"interpolators\" or \"varyings\") produced by the vertex shader are whatever your particular shader needs. The values output from the vertex shader will be interpolated across the face of the rendered triangles, and the values at each pixel will be passed as inputs to the fragment shader.",1323],["Many modern GPUs don't really care what semantics these variables have; however some old systems (most notably, shader model 2 GPUs) did have special rules about the semantics:",1323],["TEXCOORD0, TEXCOORD1 etc are used to indicate arbitrary high precision data such as texture coordinates and positions.",1323],["COLOR0 and COLOR1 semantics on vertex outputs and fragment inputs are for low-precision, 0-1 range data (like simple color values).",1323],["For best cross platform support, label vertex outputs and",1323],["fragment inputs as TEXCOORDn semantics.",1323],["Interpolator count limits",1323],["There are limits to how many interpolator variables can be used in total",1323],["to pass the information from the vertex into the fragment shader. The limit",1323],["depends on the platform and GPU, and the general guidelines are:",1323],["Up to 8 interpolators**: OpenGL ES 2.0 (Android), Direct3D 11 9.x level (Windows Phone). Since the interpolator count is limited, but each interpolator can be a 4-component vector, some shaders pack things together to stay within limits. For example, you can pass two texture coordinates in one float4 variable (.xy for one coordinate, .zw",1323],["for the second coordinate).",1323],["Up to 10 interpolators**: Shader model 3.0 (#pragma target 3.0).",1323],["Up to 16 interpolators**: OpenGL ES 3.0 (Android), Metal (iOS).",1323],["Up to 32 interpolators**: Direct3D 10 shader model 4.0 (#pragma target 4.0).",1323],["Regardless of your particular target hardware, it's generally a good idea to use as few interpolators as possible for performance reasons.",1323],["Other special semantics",1323],["Screen space pixel position: VPOS",1323],["A fragment shader can receive position of the pixel being rendered as a special VPOS semantic.",1323],["This feature only exists starting with shader model 3.0, so the shader needs to have the #pragma target 3.0 compilation directive.",1323],["On different platforms the underlying type of the screen space position input varies, so for maximum portability use the UNITY_VPOS_TYPE type for it, which is float4 on most platforms.",1323],["Additionally, using the pixel position semantic makes it hard to have both the clip space position (SV_POSITION) and VPOS in the same vertex-to-fragment structure. Therefore, the vertex shader should output the clip space position as a separate \"out\" variable. See the example shader below:",1323],["Shader \"Unlit/Screen Position\"",1323],["Properties",1323],["_MainTex (\"Texture\", 2D) = \"white\" {}",1323],["SubShader",1323],["Pass",1323],["CGPROGRAM",1323],["pragma vertex vert",1323],["pragma fragment frag",1323],["pragma target 3.0",1323],["// note: no SV_POSITION in this struct",1323],["struct v2f {",1323],["float2 uv : TEXCOORD0;",1323],["};",1323],["v2f vert (",1323],["float4 vertex : POSITION, // vertex position input",1323],["float2 uv : TEXCOORD0, // texture coordinate input",1323],["out float4 outpos : SV_POSITION // clip space position output",1323],["v2f o;",1323],["o.uv = uv;",1323],["outpos = UnityObjectToClipPos(vertex);",1323],["return o;",1323],["sampler2D _MainTex;",1323],["fixed4 frag (v2f i, UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target",1323],["// screenPos.xy will contain pixel integer coordinates.",1323],["// use them to implement a checkerboard pattern that skips rendering",1323],["// 4x4 blocks of pixels",1323],["// checker value will be negative for 4x4 blocks of pixels",1323],["// in a checkerboard pattern",1323],["screenPos.xy = floor(screenPos.xy * 0.25) * 0.5;",1323],["float checker = -frac(screenPos.r + screenPos.g);",1323],["// clip HLSL instruction stops rendering a pixel if value is negative",1323],["clip(checker);",1323],["// for pixels that were kept, read the texture and output it",1323],["fixed4 c = tex2D (_MainTex, i.uv);",1323],["return c;",1323],["ENDCG",1323],["Face orientation: VFACE",1323],["A fragment shader can receive a variable that indicates whether the rendered surface is facing the camera, or facing away from the camera. This is useful when rendering geometry that should be visible from both sides -- often used on leaves and similar thin objects. The VFACE semantic input variable will contain a positive value for front-facing triangles, and a negative value for back-facing ones.",1323],["This feature only exists from shader model 3.0 onwards, so the shader needs to have the #pragma target 3.0 compilation directive.",1323],["Shader \"Unlit/Face Orientation\"",1323],["Properties",1323],["_ColorFront (\"Front Color\", Color) = (1,0.7,0.7,1)",1323],["_ColorBack (\"Back Color\", Color) = (0.7,1,0.7,1)",1323],["SubShader",1323],["Pass",1323],["Cull Off // turn off backface culling",1323],["CGPROGRAM",1323],["pragma vertex vert",1323],["pragma fragment frag",1323],["pragma target 3.0",1323],["float4 vert (float4 vertex : POSITION) : SV_POSITION",1323],["return UnityObjectToClipPos(vertex);",1323],["fixed4 _ColorFront;",1323],["fixed4 _ColorBack;",1323],["fixed4 frag (fixed facing : VFACE) : SV_Target",1323],["// VFACE input positive for frontbaces,",1323],["// negative for backfaces. Output one",1323],["// of the two colors depending on that.",1323],["return facing > 0 ? _ColorFront : _ColorBack;",1323],["ENDCG",1323],["The shader above uses the Cull state to disable back-face culling (by default back-facing triangles aren't rendered at all). Here is the shader applied to a bunch of Quad meshes, rotated at different orientations:",1323],["Vertex ID: SV_VertexID",1323],["A vertex shader can receive a variable that has the \"vertex number\" as an unsigned integer. This is mostly useful when you want to",1323],["fetch additional per-vertex data from textures or ComputeBuffers.",1323],["This feature only exists from DX10 (shader model 4.0) and GLCore / OpenGL ES 3, so the shader needs to have the #pragma target 3.5 compilation directive.",1323],["Shader \"Unlit/VertexID\"",1323],["SubShader",1323],["Pass",1323],["CGPROGRAM",1323],["pragma vertex vert",1323],["pragma fragment frag",1323],["pragma target 3.5",1323],["struct v2f {",1323],["fixed4 color : TEXCOORD0;",1323],["float4 pos : SV_POSITION;",1323],["};",1323],["v2f vert (",1323],["float4 vertex : POSITION, // vertex position input",1323],["uint vid : SV_VertexID // vertex ID, needs to be uint",1323],["v2f o;",1323],["o.pos = UnityObjectToClipPos(vertex);",1323],["// output funky colors based on vertex ID",1323],["float f = (float)vid;",1323],["o.color = half4(sin(f/10),sin(f/100),sin(f/1000),0) * 0.5 + 0.5;",1323],["return o;",1323],["fixed4 frag (v2f i) : SV_Target",1323],["return i.color;",1323],["ENDCG",1323],["Writing shaders overview",1324],["Languages",1324],["When you write shaders for Unity, you use the following languages:",1324],["A programming language called HLSL. Use this to write the shader programs themselves. For more information on HLSL, see HLSL in Unity.",1324],["A Unity-specific language called ShaderLab. Use this to define a Shader object, which acts as a container for your shader programs. For more information on ShaderLab, see ShaderLab.",1324],["You do not need to use different languages for different platforms; Unity compiles your HLSL and ShaderLab code into different languages for different graphics APIs. For more information, see Shader compilation.",1324],["Note:** You can also directly write your shader programs in GLSL and Metal if you want. This is not recommended or needed as part of a normal workflow. For more information on using GLSL, see GLSL in Unity.",1324],["Different ways of writing shaders",1324],["There are different ways of writing shaders:",1324],["The most common way is to write vertex and fragment shaders in HLSL. For more information, see Writing vertex and fragment shaders.",1324],["In the Built-in Render Pipeline, you can also write Surface Shaders. They are a simplified way of writing shaders that interact with lighting. For more information, see Surface Shaders.",1324],["For backwards compatibility reasons, Unity also supports \"fixed function style\" ShaderLab commands. These let you write shaders in ShaderLab, without using HLSL. This is no longer recommended, but it is documented on the page ShaderLab legacy functionality.",1324],["Writing shaders for different graphics APIs",1324],["In some cases, you must write your shader code differently depending on the graphics API that you are targeting. For information on this, see Writing shaders for different graphics APIs.",1324],["ShaderLab command: Stencil",1325],["Configures settings relating to the stencil buffer on the GPU.",1325],["The stencil buffer stores an 8-bit integer value for each pixel in the frame buffer. Before executing the fragment shader for a given pixel, the GPU can compare the current value in the stencil buffer against a given reference value. This is called a stencil test. If the stencil test passes, the GPU performs the depth test. If the stencil test fails, the GPU skips the rest of the processing for that pixel. This means that you can use the stencil buffer as a mask to tell the GPU which pixels to draw, and which pixels to discard.",1325],["You would typically use the stencil buffer for special effects such as portals or mirrors. Additionally, the stencil buffer is sometimes used when rendering hard shadows, or constructive solid geometry (CSG).",1325],["Render pipeline compatibility",1325],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1325],["Stencil Yes Yes Yes Yes ",1325],["Usage",1325],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1325],["You can use the Stencil command to do two different things: to configure the stencil test, and to configure what the GPU writes to the stencil buffer. You can do both of these things in the same command, but the most common use case is to create one Shader object that masks out areas of the screen that other Shader objects cannot draw to. To do this, you need to configure the first Shader object to always pass the stencil test and write to the stencil buffer, and configure the others to perform a stencil test and not write to the stencil buffer.",1325],["Use the Ref, ReadMask, and Comp parameters to configure the stencil test. Use the Ref, WriteMask, Pass, Fail, and ZFail parameters to configure the stencil write operation.",1325],["The stencil test equation is:",1325],["(ref & readMask) comparisonFunction (stencilBufferValue & readMask)",1325],["Signature Example syntax Function ",1325],["Stencil{    Ref <ref>    ReadMask <readMask>    WriteMask <writeMask>    Comp <comparisonOperation>    Pass <passOperation>    Fail <failOperation>    ZFail <zFailOperation>    CompBack <comparisonOperationBack>    PassBack <passOperationBack>    FailBack <failOperationBack>    ZFailBack <zFailOperationBack>    CompFront <comparisonOperationFront>    PassFront <passOperationFront>    FailFront <failOperationFront>    ZFailFront <zFailOperationFront>}Note that all parameters are optional. Stencil{    Ref 2    Comp equal    Pass keep    ZFail decrWrap} Configures the stencil buffer according to the given parameters. ",1325],["Valid parameter values",1325],["Parameter Value Function ",1325],["ref An integer. Range 0 through 255. Default is 0. The reference value.The GPU compares the current contents of the stencil buffer against this value, using the operation defined in comparisonOperation.This value is masked with readMask or writeMask, depending on whether a read or a write operation is occurring.The GPU can also write this value to the stencil buffer, if Pass, Fail or ZFail have a value of Replace. ",1325],["readMask An integer. Range 0 through 255. Default is 255. The GPU uses this value as a mask when it performs the stencil test.See above for the stencil test equation. ",1325],["writeMask An integer. Range 0 through 255. Default is 255. The GPU uses this value as a mask when it writes to the stencil buffer.Note that, like other masks, it specifies which bits are included in the operation. For example, a value of 0 means that no bits are included in the write operation, not that the stencil buffer receives a value of 0. ",1325],["comparisonOperation A comparison operation. See Comparison operation values for valid values. Default is Always. The operation that the GPU performs for the stencil test for all pixels.This defines the operation for all pixels, regardless of facing. If this is defined in addition to comparisonOperationBack and comparisonOperationFront, this value overrides them. ",1325],["passOperation A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel pases both the stencil test and the depth test.This defines the operation for all pixels, regardless of facing. If this is defined in addition to passOperationBack and passOperationFront, this value overrides them. ",1325],["failOperation A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel fails the stencil test.This defines the operation for all pixels, regardless of facing. If this is defined in addition to failOperationBack and failOperationFront, this value overrides them. ",1325],["zFailOperation A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel passes the stencil test, but fails the depth test.This defines the operation for all pixels, regardless of facing. If this is defined in addition to zFailOperation and zFailOperation, this value overrides them. ",1325],["comparisonOperationBack A comparison operation. See Comparison operation values for valid values. Default is Always. The operation that the GPU performs for the stencil test.This defines the operation for back-facing pixels only. If comparisonOperation is defined, that value overrides this one. ",1325],["passOperationBack A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel pases both the stencil test and the depth test.This defines the operation for back-facing pixels only. If passOperation is defined, that value overrides this one. ",1325],["failOperationBack A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel fails the stencil test.This defines the operation for back-facing pixels only. If failOperation is defined, that value overrides this one. ",1325],["zFailOperationBack A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel passes the stencil test, but fails the depth test.This defines the operation for back-facing pixels only. If zFailOperation is defined, that value overrides this one. ",1325],["comparisonOperationFront A comparison operation. See Comparison operation values for valid values. Default is Always. The operation that the GPU performs for the stencil test.This defines the operation for front-facing pixels only. If comparisonOperation is defined, that value overrides this one. ",1325],["passOperationFront A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel pases both the stencil test and the depth test.This defines the operation for front-facing pixels only. If passOperation is defined, that value overrides this one. ",1325],["failOperationFront A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel fails the stencil test.This defines the operation for front-facing pixels only. If failOperation is defined, that value overrides this one. ",1325],["zFailOperationFront A stencil operation. See Stencil operation values for valid values. Default is Keep. The operation that the GPU performs on the stencil buffer when a pixel passes the stencil test, but fails the depth test.This defines the operation for front-facing pixels only. If zFailOperation is defined, that value overrides this one. ",1325],["",1325],["Comparison operation values",1325],["In C#, these values are represented by the Rendering.CompareFunction enum.",1325],["Value Corresponding integer value in Rendering.CompareFunction enum Function ",1325],["Never 1 Never render pixels. ",1325],["Less 2 Render pixels when their reference value is less than the current value in the stencil buffer. ",1325],["Equal 3 Render pixels when their reference value is equal to the current value in the stencil buffer. ",1325],["LEqual 4 Render pixels when their reference value is less than or equal to the current value in the stencil buffer. ",1325],["Greater 5 Render pixels when their reference value is greater than the current value in the stencil buffer. ",1325],["NotEqual 6 Render pixels when their reference value differs from the current value in the stencil buffer. ",1325],["GEqual 7 Render pixels when their reference value is greater than or equal to the current value in the stencil buffer. ",1325],["Always 8 Always render pixels. ",1325],["",1325],["Stencil operation values",1325],["In C#, these values are represented by the Rendering.Rendering.StencilOp enum.",1325],["Value Corresponding integer value in Rendering.StencilOp enum Function ",1325],["Keep 0 Keep the current contents of the stencil buffer. ",1325],["Zero 1 Write 0 into the stencil buffer. ",1325],["Replace 2 Write the reference value into the buffer. ",1325],["IncrSat 3 Increment the current value in the buffer. If the value is 255 already, it stays at 255. ",1325],["DecrSat 4 Decrement the current value in the buffer. If the value is 0 already, it stays at 0. ",1325],["Invert 5 Negate all the bits of the current value in the buffer. ",1325],["IncrWrap 6 Increment the current value in the buffer. If the value is 255 already, it becomes 0. ",1325],["DecrWrap 7 Decrement the current value in the buffer. If the value is 0 already, it becomes 255. ",1325],["Examples",1325],["Shader \"Examples/CommandExample\"",1325],["SubShader",1325],["// The rest of the code that defines the SubShader goes here.",1325],["Pass",1325],["// All pixels in this Pass will pass the stencil test and write a value of 2 to the stencil buffer",1325],["// You would typically do this if you wanted to prevent subsequent shaders from drawing to this area of the render target or restrict them to render to this area only",1325],["Stencil",1325],["Ref 2",1325],["Comp Always",1325],["Pass Replace",1325],["// The rest of the code that defines the Pass goes here.",1325],["This example code demonstrates the syntax for using this command in a SubShader block.",1325],["Shader \"Examples/CommandExample\"",1325],["SubShader",1325],["// All pixels in this SubShader pass the stencil test only if the current value of the stencil buffer is less than 2",1325],["// You would typically do this if you wanted to only draw to areas of the render target that were not \"masked out\"",1325],["Stencil",1325],["Ref 2",1325],["Comp Less",1325],["// The rest of the code that defines the SubShader goes here.",1325],["Pass",1325],["// The rest of the code that defines the Pass goes here.",1325],["ShaderLab: defining a SubShader",1326],["To define a SubShader in ShaderLab, you use a SubShader block. This page contains information on using SubShader blocks.",1326],["For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader objects introduction.",1326],["Overview",1326],["A Shader object contains one or more SubShaders. SubShaders let you define different GPU settings and shader programs for different hardware, render pipelines, and runtime settings. Some Shader objects contain only a single SubShader; others contain multiple SubShaders to support a range of different configurations.",1326],["Render pipeline compatibility",1326],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1326],["ShaderLab: SubShader block Yes Yes Yes Yes ",1326],["Using the SubShader block",1326],["In ShaderLab, you define a SubShader by placing a SubShader block inside a Shader block.",1326],["Inside the SubShader block, you can:",1326],["Assign a LOD (level of detail) value to the SubShader, using the LOD block. See assigning a LOD value to a SubShader.",1326],["Assign key-value pairs of data to the SubShader, using the Tags block. See ShaderLab: assigning tags to a SubShader.",1326],["Add GPU instructions or shader code to the SubShader, using ShaderLab commands. See ShaderLab: using commands.",1326],["Define one or more Passes, using the Pass block. See ShaderLab: defining a Pass.",1326],["Specify package requirements using the PackageRequirements block. This makes Unity only run the SubShader if the required packages are installed. See ShaderLab: specifying package requirements.",1326],["Signature Function ",1326],["SubShader{    <optional: LOD>    <optional: tags>    <optional: commands>    <One or more Pass definitions>} Defines a SubShader.You can define as many Passes as you like within a SubShader. ",1326],["Examples",1326],["This example code demonstrates the syntax for creating a Shader object that contains a single SubShader, which in turn contains a single Pass.",1326],["Shader \"Examples/SinglePass\"",1326],["SubShader",1326],["Tags { \"ExampleSubShaderTagKey\" = \"ExampleSubShaderTagValue\" }",1326],["LOD 100",1326],["// ShaderLab commands that apply to the whole SubShader go here.",1326],["Pass",1326],["Name \"ExamplePassName\"",1326],["Tags { \"ExamplePassTagKey\" = \"ExamplePassTagValue\" }",1326],["// ShaderLab commands that apply to this Pass go here.",1326],["// HLSL code goes here.",1326],["ShaderLab: assigning tags to a SubShader",1327],["This page contains information on using a Tags block in your ShaderLab code to assign tags to a SubShader.",1327],["For information on defining SubShader, see ShaderLab: defining a SubShader. For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader objects.",1327],["Overview",1327],["Tags are key-value pairs of data. Unity uses predefined keys and values to determine how and when to use a given SubShader, or you can also create your own custom SubShader tags with custom values. You can access SubShader tags from C# code.",1327],["Render pipeline compatibility",1327],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1327],["ShaderLab: SubShader Tags block Yes Yes Yes Yes ",1327],["ShaderLab: RenderPipeline SubShader tag No Yes Yes No ",1327],["ShaderLab: Queue SubShader tag No Yes Yes YesNote: in a custom SRP, you can define your own rendering order and choose whether or not to use render queues. For more information, see DrawingSettings and SortingCriteria. ",1327],["ShaderLab: RenderType SubShader tag Yes Yes Yes Yes ",1327],["ShaderLab: DisableBatching SubShader tag Yes Yes Yes Yes ",1327],["ShaderLab: ForceNoShadowCasting SubShader tag Yes Yes YesThis disables regular shadows, but has no effect on contact shadows. Yes ",1327],["ShaderLab: CanUseSpriteAtlas SubShader tag Yes Yes Yes Yes ",1327],["ShaderLab: PreviewType SubShader tag Yes Yes Yes Yes ",1327],["Using the Tags block in a SubShader",1327],["In ShaderLab, you assign tags to a SubShader by placing a Tags block inside a SubShader block.",1327],["Note that both SubShaders and Passes use the Tags block, but they work differently. Assigning SubShader tags to a Pass has no effect, and vice versa. The difference is where you put the Tags block:",1327],["To define Pass tags, place the Tags block inside a Pass block.",1327],["To define SubShader tags, place the Tags block inside a SubShader block but outside a Pass block.",1327],["For information on assigning tags to a Pass, see Assigning tags to a Pass.",1327],["Signature Function ",1327],["Tags { \"[name1]\" = \"[value1]\" \"[name2]\" = \"[value2]\"} Applies the given tags to the SubShader.You can define as many tags as you like. ",1327],["Using SubShader tags with C# code",1327],["You can read SubShader tags from a C# script using the Material.GetTag API, like this:",1327],["```c#",1327],["using UnityEngine;",1327],["public class Example : MonoBehaviour",1327],["// Attach this to a gameObject that has a Renderer component",1327],["string tagName = \"ExampleTagName\";",1327],["void Start()",1327],["Renderer myRenderer = GetComponent();",1327],["string tagValue = myRenderer.material.GetTag(ExampleTagName, true, \"Tag not found\");",1327],["Debug.Log(tagValue);",1327],["RenderPipeline tag",1327],["The RenderPipeline tag tells Unity whether a SubShader is compatible with the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP).",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"RenderPipeline\" = \"[name]\" Tells Unity whether this SubShader is compatible with URP or HDRP. ",1327],["Parameter Value Function ",1327],["[name] UniversalRenderPipeline This SubShader is compatible with URP only. ",1327],["HighDefinitionRenderPipeline This SubShader is compatible with HDRP only. ",1327],["(any other value, or not declared) This SubShader is not compatible with URP or HDRP. ",1327],["Examples",1327],["This example code declares that a SubShader is compatible with URP:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"RenderPipeline\" = \"UniversalRenderPipeline\" }",1327],["Pass {",1327],["…",1327],["Queue tag",1327],["The Queue tag tells Unity which render queue to use for geometry that it renders. The render queue is one of the factors that determines the order that Unity renders geometry in.",1327],["Syntax and valid values",1327],["You can use the Queue tag in two ways: you can tell Unity to use a named render queue, or an unnamed render queue that it renders after a named render queue.",1327],["Signature Function ",1327],["\"Queue\" = \"[queue name]\" Use the named render queue. ",1327],["\"Queue\" = \"[queue name] + [offset]\" Use an unnamed queue, at a given offset from the named queue.An example of when this is useful is in the case of transparent water, which you should draw after opaque objects but before transparent objects. ",1327],["Signature Value Function ",1327],["[queue name] Background Specifies the Background render queue. ",1327],["Geometry Specifies the Geometry render queue. ",1327],["AlphaTest Specifies the AlphaTest render queue. ",1327],["Transparent Specifies the Transparent render queue. ",1327],["Overlay Specifies the Overlay render queue. ",1327],["[offset] integer Specifies the index at which Unity renders the unnamed queue, relative to the named queue. ",1327],["Using this tag with C# code",1327],["You can use Shader.renderQueue to read the Queue tag value of a Shader object's active SubShader.",1327],["By default, Unity renders geometry in the render queue specified in the [Queue] tag. You can override this value on a per-material basis. In the Unity Editor, you can do this in the material Inspector by setting the Render Queue property. In a C# script, you can do this by setting the value of Material.renderQueue using the Rendering.RenderQueue enum.",1327],["Examples",1327],["This example code creates a SubShader that renders geometry as part of the Transparent render queue:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"Queue\" = \"Transparent\" }",1327],["Pass {",1327],["…",1327],["This example code creates a SubShader that renders geometry in an unnamed queue, after the Geometry queue.",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"Queue\" = \"Geometry+1\" }",1327],["Pass {",1327],["…",1327],["RenderType tag",1327],["Use the RenderType tag to override the behavior of a Shader object.",1327],["In the Built-in Render Pipeline, you can swap SubShaders at runtime using a technique called shader replacement. This technique works by identifying SubShaders that have matching RenderType tag values. This is used in some cases to produce camera's depth texture.",1327],["In a render pipeline based on the Scriptable Render Pipeline, you can override the render state defined in a Shader object using a RenderStateBlock struct. You can use the value of the RenderType tag to identify SubShaders to override.",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"RenderType\" = \"[renderType]\" Set the RenderType value for this SubShader. ",1327],["Signature Value Function ",1327],["[renderType] String There are no set values for this parameter. To identify the RenderType value for any SubShader that you want to replace, open its shader source file.The RenderType SubShader tags for Unity's legacy built-in shaders are listed on the shader replacement page.You can also create your own values for your custom SubShaders. ",1327],["Using this tag with C# code",1327],["For information on shader replacement in the Built-in Render Pipeline, see Shader replacement. For information on using a RenderStateBlock in the Scriptable Render Pipeline, see the API documentation for ScriptableRenderContext.DrawRenderers.",1327],["Examples",1327],["This example code creates a SubShader with a RenderType value of TransparentCutout:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"RenderType\" = \"TransparentCutout\" }",1327],["Pass {",1327],["…",1327],["ForceNoShadowCasting tag",1327],["The ForceNoShadowCasting tag prevents geometry in a SubShader from casting (and sometimes receiving) shadows. The exact behavior depends on the render pipeline and rendering path.",1327],["This can be useful if you are using shader replacement, but you do not want to inherit a shadow pass from another SubShader.",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"ForceNoShadowCasting\" = \"[state]\" Whether to prevent shadow casting (and sometimes receiving) for all geometry that uses this SubShader. ",1327],["Signature Value Function ",1327],["[state] True Unity prevents the geometry in this SubShader from casting shadows.In the Built in Render Pipeline, with the Forward or Legacy Vertex Lit rendering paths, Unity also prevents the geometry in this SubShader from receiving shadows.In HDRP, this does not prevent the geometry from casting contact shadows. ",1327],["False Unity does not prevent the geometry in this SubShader from casting or receiving shadows. This is the default value. ",1327],["Examples",1327],["This example code creates a SubShader with a ForceNoShadowCasting value of True:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"ForceNoShadowCasting\" = \"True\" }",1327],["Pass {",1327],["…",1327],["DisableBatching tag",1327],["The DisableBatching SubShader Tag prevents Unity from applying Dynamic Batching to geometry that uses this SubShader.",1327],["This is useful for shader programs that perform object space operations. Dynamic Batching transforms all geometry into world space, meaning that shader programs can no longer access object space. Shader programs that rely on object space therefore do not render correctly. To avoid this problem, use this SubShader Tag to prevent Unity from applying Dynamic Batching.",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"DisableBatching\" = \"[state]\" Whether Unity prevents Dynamic Batching for all geometry that uses this SubShader. ",1327],["Signature Value Function ",1327],["[state] True Unity prevents Dynamic Batching for geometry that uses this SubShader. ",1327],["False Unity does not prevent Dynamic Batching for geometry that uses this SubShader. This is the default value. ",1327],["LODFading Unity prevents Dynamic Batching for all geometry that is part of a LODGroup with a Fade Mode value that is not None. Otherwise, Unity does not prevent Dynamic Batching. ",1327],["Examples",1327],["This example code creates a SubShader with a DisableBatching value of True:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"DisableBatching\" = \"True\" }",1327],["Pass {",1327],["…",1327],["IgnoreProjector tag",1327],["In the Built-in Render Pipeline, the IgnoreProjector SubShader tag tells Unity whether geometry is affected by Projectors. This is mostly useful for excluding semi-transparent geometry, which Projectors are not compatible with.",1327],["This tag has no effect in other render pipelines.",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"IgnoreProjector\" = \"[state]\" Whether Unity ignores Projectors when rendering this geometry. ",1327],["Signature Value Function ",1327],["[state] True Unity ignores Projectors when rendering this geometry. ",1327],["False Unity does not ignore Projectors when rendering this geometry. This is the default value. ",1327],["Examples",1327],["This example code creates a SubShader with an IgnoreProjectors value of True:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"IgnoreProjector\" = \"True\" }",1327],["Pass {",1327],["…",1327],["PreviewType tag",1327],["The PreviewType SubShader Tag tells the Unity Editor how to display a material that uses this SubShader in the Material Inspector.",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"PreviewType\" = \"[shape]\" Which shape the Unity Editor uses to display a preview of a material that uses this SubShader. ",1327],["Signature Value Function ",1327],["[shape] Sphere Display the material on a sphere. This is the default value. ",1327],["Plane Display the material on a plane. ",1327],["Skybox Display the material on a skybox. ",1327],["Examples",1327],["This example code creates a SubShader with an PreviewType value of Plane:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"PreviewType\" = \"Plane\" }",1327],["Pass {",1327],["…",1327],["CanUseSpriteAtlas tag",1327],["Use this SubShader tag in projects that use the Legacy Sprite Packer to warn users that your shader relies on original texture coordinates, and that they should therefore not pack its textures into atlases.",1327],["Syntax and valid values",1327],["Signature Function ",1327],["\"CanUseSpriteAtlas\" = \"[state]\" Whether the Sprites that use this SubShader are compatible with the Legacy Sprite Packer. ",1327],["Signature Value Function ",1327],["[state] True Sprites that use this SubShader are compatible with the Legacy Sprite Packer. This is the default value. ",1327],["False Sprites that use this SubShader are not compatible with the Legacy Sprite Packer.When a SubShader with a CanUseSpriteAtlas value of False is used with a Sprite that has a Legacy Sprite Packer packing tag, Unity shows an error message in the Inspector. ",1327],["CanUseSpriteAtlas tag code examples",1327],["This example code creates a SubShader with an CanUseSpriteAtlas value of False:",1327],["Shader \"ExampleShader\" {",1327],["SubShader {",1327],["Tags { \"CanUseSpriteAtlas\" = \"False\" }",1327],["Pass {",1327],["…",1327],["Surface Shader examples",1328],["The Surface Shaders examples on this page show you how to use the built-in lighting models. For examples on how to implement custom lighting models, see Surface Shader Lighting Examples.",1328],["In the Built-in Render Pipelne, Surface Shaders are a streamlined way of writing shaders that interact with lighting.",1328],["Render pipeline compatibility",1328],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1328],["Surface Shaders Yes NoFor a streamlined way of creating Shader objects in URP, see Shader Graph. NoFor a streamlined way of creating Shader objects in HDRP, see Shader Graph. No ",1328],["Simple shader example",1328],["We'll start with a very simple Shader and build up on that. Here's a Shader that sets the surface color to \"white\". It uses the built-in Lambert (diffuse) lighting model.",1328],["Shader \"Example/Diffuse Simple\" {",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float4 color : COLOR;",1328],["};",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = 1;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Here's how it looks like on a model with two Lights set up:",1328],["Texture",1328],["An all-white object is quite boring, so let's add a Texture. We'll add a Properties block to the Shader, so we get a Texture selector in our Material.",1328],["Shader \"Example/Diffuse Texture\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["};",1328],["sampler2D _MainTex;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Normal mapping",1328],["Let's add some normal mapping:",1328],["Shader \"Example/Diffuse Bump\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_BumpMap (\"Bumpmap\", 2D) = \"bump\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float2 uv_BumpMap;",1328],["};",1328],["sampler2D _MainTex;",1328],["sampler2D _BumpMap;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["o.Normal = UnpackNormal (tex2D (BumpMap, IN.uvBumpMap));",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Rim Lighting",1328],["Now, try to add some Rim Lighting to highlight the edges of a GameObject. We'll add some emissive light based on the angle between surface normal and view direction. For that, we'll use the built-in viewDir Surface Shader variable.",1328],["Shader \"Example/Rim\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_BumpMap (\"Bumpmap\", 2D) = \"bump\" {}",1328],["_RimColor (\"Rim Color\", Color) = (0.26,0.19,0.16,0.0)",1328],["_RimPower (\"Rim Power\", Range(0.5,8.0)) = 3.0",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float2 uv_BumpMap;",1328],["float3 viewDir;",1328],["};",1328],["sampler2D _MainTex;",1328],["sampler2D _BumpMap;",1328],["float4 _RimColor;",1328],["float _RimPower;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["o.Normal = UnpackNormal (tex2D (BumpMap, IN.uvBumpMap));",1328],["half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));",1328],["o.Emission = _RimColor.rgb * pow (rim, _RimPower);",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Detail Texture",1328],["For a different effect, let's add a Detail Texture that is combined with the base Texture. A Detail Texture usually uses the same UVs but different Tiling in the Material, so we need to use different input UV coordinates.",1328],["Shader \"Example/Detail\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_BumpMap (\"Bumpmap\", 2D) = \"bump\" {}",1328],["_Detail (\"Detail\", 2D) = \"gray\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float2 uv_BumpMap;",1328],["float2 uv_Detail;",1328],["};",1328],["sampler2D _MainTex;",1328],["sampler2D _BumpMap;",1328],["sampler2D _Detail;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["o.Albedo *= tex2D (Detail, IN.uvDetail).rgb * 2;",1328],["o.Normal = UnpackNormal (tex2D (BumpMap, IN.uvBumpMap));",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Using a Texture checker does not always make much practical sense, but in this example it is used to illustrate what happens:",1328],["Detail Texture in Screen Space",1328],["A Detail Texture in screen space does not make practical sense for a soldier head model, but here it is used to illustrate how a built-in screenPos input might be used:",1328],["Shader \"Example/ScreenPos\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_Detail (\"Detail\", 2D) = \"gray\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float4 screenPos;",1328],["};",1328],["sampler2D _MainTex;",1328],["sampler2D _Detail;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["float2 screenUV = IN.screenPos.xy / IN.screenPos.w;",1328],["screenUV *= float2(8,6);",1328],["o.Albedo *= tex2D (_Detail, screenUV).rgb * 2;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["The normal mapping has been removed from the Shader above, just to make it shorter:",1328],["Cubemap Reflection",1328],["Here's a Shader that does cubemapped reflection using built-in worldRefl input. It's very similar to built-in Reflective/Diffuse Shader:",1328],["Shader \"Example/WorldRefl\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_Cube (\"Cubemap\", CUBE) = \"\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float3 worldRefl;",1328],["};",1328],["sampler2D _MainTex;",1328],["samplerCUBE _Cube;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb * 0.5;",1328],["o.Emission = texCUBE (_Cube, IN.worldRefl).rgb;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Because it assigns the reflection color as Emission, we get a very shiny soldier:",1328],["If you want to do reflections that are affected by normal maps, it needs to be slightly more involved: INTERNAL_DATA needs to be added to the Input structure, and WorldReflectionVector function used to compute per-pixel reflection vector after you've written the Normal output.",1328],["Shader \"Example/WorldRefl Normalmap\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_BumpMap (\"Bumpmap\", 2D) = \"bump\" {}",1328],["_Cube (\"Cubemap\", CUBE) = \"\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float2 uv_BumpMap;",1328],["float3 worldRefl;",1328],["INTERNAL_DATA",1328],["};",1328],["sampler2D _MainTex;",1328],["sampler2D _BumpMap;",1328],["samplerCUBE _Cube;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb * 0.5;",1328],["o.Normal = UnpackNormal (tex2D (BumpMap, IN.uvBumpMap));",1328],["o.Emission = texCUBE (_Cube, WorldReflectionVector (IN, o.Normal)).rgb;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Here's a normal-mapped shiny soldier:",1328],["Slices via World Space Position",1328],["Here's a Shader that \"slices\" the GameObject by discarding pixels in nearly horizontal rings. It does this by using the clip() Cg/HLSL function based on the world position of a pixel. We'll use the built-in worldPos Surface Shader variable.",1328],["Shader \"Example/Slices\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_BumpMap (\"Bumpmap\", 2D) = \"bump\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["Cull Off",1328],["CGPROGRAM",1328],["pragma surface surf Lambert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float2 uv_BumpMap;",1328],["float3 worldPos;",1328],["};",1328],["sampler2D _MainTex;",1328],["sampler2D _BumpMap;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["clip (frac((IN.worldPos.y+IN.worldPos.z*0.1) * 5) - 0.5);",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["o.Normal = UnpackNormal (tex2D (BumpMap, IN.uvBumpMap));",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Normal Extrusion with Vertex Modifier",1328],["It is possible to use a \"vertex modifier\" function that will modify the incoming vertex data in the vertex Shader. This can be used for things like procedural animation and extrusion along normals. Surface Shader compilation directive vertex:functionName is used for that, with a function that takes inout appdata_full parameter.",1328],["Here's a Shader that moves vertices along their normals by the amount specified in the Material:",1328],["Shader \"Example/Normal Extrusion\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_Amount (\"Extrusion Amount\", Range(-1,1)) = 0.5",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert vertex:vert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["};",1328],["float _Amount;",1328],["void vert (inout appdata_full v) {",1328],["v.vertex.xyz += v.normal * _Amount;",1328],["sampler2D _MainTex;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Moving vertices along their normals makes a fat soldier:",1328],["Custom data computed per-vertex",1328],["Using a vertex modifier function, it is also possible to compute custom data in a vertex Shader, which then will be passed to the Surface Shader function per-pixel. The same compilation directive vertex:functionName is used, but the function should take two parameters: inout appdata_full and out Input. You can fill in any Input member that is not a built-in value there.",1328],["Note:** Custom Input members used in this way must not have names beginning with 'uv' or they won't work properly.",1328],["The example below defines a custom float3 customColor member, which is computed in a vertex function:",1328],["Shader \"Example/Custom Vertex Data\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert vertex:vert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["float3 customColor;",1328],["};",1328],["void vert (inout appdata_full v, out Input o) {",1328],["UNITY_INITIALIZE_OUTPUT(Input,o);",1328],["o.customColor = abs(v.normal);",1328],["sampler2D _MainTex;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["o.Albedo *= IN.customColor;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["In this example customColor is set to the absolute value of the normal:",1328],["More practical uses could be computing any per-vertex data that is not provided by built-in Input variables; or optimizing Shader computations. For example, it's possible to compute Rim lighting at the GameObject's vertices, instead of doing that in the Surface Shader per-pixel.",1328],["Final Color Modifier",1328],["It is possible to use a \"final color modifier\" function that will modify the final color computed by the Shader.The Surface Shader compilation directive finalcolor:functionName is used for this, with a function that takes Input IN, SurfaceOutput o, inout fixed4 color parameters.",1328],["Here's a simple Shader that applies tint to the final color. This is different from just applying tint to the surface Albedo color: this tint will also affect any color that comes from Lightmaps, Light Probes and similar extra sources.",1328],["Shader \"Example/Tint Final Color\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_ColorTint (\"Tint\", Color) = (1.0, 0.6, 0.6, 1.0)",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert finalcolor:mycolor",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["};",1328],["fixed4 _ColorTint;",1328],["void mycolor (Input IN, SurfaceOutput o, inout fixed4 color)",1328],["color *= _ColorTint;",1328],["sampler2D _MainTex;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Custom Fog with Final Color Modifier",1328],["A common case for using final color modifier (see above) would be implementing completely custom Fog in forward rendering. Fog needs to affect the final computed pixel Shader color, which is exactly what the finalcolor modifier does.",1328],["Here's a Shader that applies fog tint based on the distance from screen center. This combines the vertex modifier with the custom vertex data (fog) and the final color modifier. When used in the forward rendering additive pass, the Fog needs to fade to black. This example handles that and performs a check for UNITY_PASS_FORWARDADD.",1328],["Shader \"Example/Fog via Final Color\" {",1328],["Properties {",1328],["_MainTex (\"Texture\", 2D) = \"white\" {}",1328],["_FogColor (\"Fog Color\", Color) = (0.3, 0.4, 0.7, 1.0)",1328],["SubShader {",1328],["Tags { \"RenderType\" = \"Opaque\" }",1328],["CGPROGRAM",1328],["pragma surface surf Lambert finalcolor:mycolor vertex:myvert",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["half fog;",1328],["};",1328],["void myvert (inout appdata_full v, out Input data)",1328],["UNITY_INITIALIZE_OUTPUT(Input,data);",1328],["float4 hpos = UnityObjectToClipPos(v.vertex);",1328],["hpos.xy/=hpos.w;",1328],["data.fog = min (1, dot (hpos.xy, hpos.xy)*0.5);",1328],["fixed4 _FogColor;",1328],["void mycolor (Input IN, SurfaceOutput o, inout fixed4 color)",1328],["fixed3 fogColor = _FogColor.rgb;",1328],["ifdef UNITY_PASS_FORWARDADD",1328],["fogColor = 0;",1328],["endif",1328],["color.rgb = lerp (color.rgb, fogColor, IN.fog);",1328],["sampler2D _MainTex;",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1328],["ENDCG",1328],["Fallback \"Diffuse\"",1328],["Linear Fog",1328],["Shader \"Example/Linear Fog\" {",1328],["Properties {",1328],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\"=\"Opaque\" }",1328],["LOD 200",1328],["CGPROGRAM",1328],["pragma surface surf Lambert finalcolor:mycolor vertex:myvert",1328],["pragma multi_compile_fog",1328],["sampler2D _MainTex;",1328],["uniform half4 unity_FogStart;",1328],["uniform half4 unity_FogEnd;",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["half fog;",1328],["};",1328],["void myvert (inout appdata_full v, out Input data) {",1328],["UNITY_INITIALIZE_OUTPUT(Input,data);",1328],["float pos = length(UnityObjectToViewPos(v.vertex).xyz);",1328],["float diff = unity_FogEnd.x - unity_FogStart.x;",1328],["float invDiff = 1.0f / diff;",1328],["data.fog = clamp ((unity_FogEnd.x - pos) * invDiff, 0.0, 1.0);",1328],["void mycolor (Input IN, SurfaceOutput o, inout fixed4 color) {",1328],["ifdef UNITY_PASS_FORWARDADD",1328],["UNITY_APPLY_FOG_COLOR(IN.fog, color, float4(0,0,0,0));",1328],["else",1328],["UNITY_APPLY_FOG_COLOR(IN.fog, color, unity_FogColor);",1328],["endif",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["half4 c = tex2D (MainTex, IN.uvMainTex);",1328],["o.Albedo = c.rgb;",1328],["o.Alpha = c.a;",1328],["ENDCG",1328],["FallBack \"Diffuse\"",1328],["Decals",1328],["Decals are commonly used to add details to Materials at run time (for example, bullet impacts). They are especially useful in deferred rendering, because they alter the GBuffer before it is lit, therefore saving on performance.",1328],["In a typical scenario, Decals should be rendered after the opaque objects and should not be shadow casters, as seen in the ShaderLab \"Tags\" in the example below.",1328],["Shader \"Example/Decal\" {",1328],["Properties {",1328],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1328],["SubShader {",1328],["Tags { \"RenderType\"=\"Opaque\" \"Queue\"=\"Geometry+1\" \"ForceNoShadowCasting\"=\"True\" }",1328],["LOD 200",1328],["Offset -1, -1",1328],["CGPROGRAM",1328],["pragma surface surf Lambert decal:blend",1328],["sampler2D _MainTex;",1328],["struct Input {",1328],["float2 uv_MainTex;",1328],["};",1328],["void surf (Input IN, inout SurfaceOutput o) {",1328],["half4 c = tex2D (MainTex, IN.uvMainTex);",1328],["o.Albedo = c.rgb;",1328],["o.Alpha = c.a;",1328],["ENDCG",1328],["Custom lighting models in Surface Shaders",1329],["In the Built-in Render Pipeline, when writing Surface Shaders, you describe the properties of a surface (such as albedo color and normal), and a Lighting Model computes the lighting interaction.",1329],["Render pipeline compatibility",1329],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1329],["Surface Shaders Yes NoFor a streamlined way of creating Shader objects in URP, see Shader Graph. NoFor a streamlined way of creating Shader objects in HDRP, see Shader Graph. No ",1329],["Overview",1329],["There are two built-in lighting models: Lambert for diffuse lighting, and BlinnPhong for specular lighting. The Lighting.cginc file inside Unity defines these models (Windows: <unity install path>/Data/CGIncludes/Lighting.cginc; macOS: /Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc).",1329],["Sometimes you might want to use a custom lighting model. You can do this with Surface Shaders. A lighting model is simply a couple of Cg/HLSL functions that match some conventions.",1329],["Declaring lighting models",1329],["A lighting model consists of regular functions with names that begin Lighting. You can declare them anywhere in your shader file, or one of the included files. The functions are:",1329],["half4 Lighting<Name> (SurfaceOutput s, UnityGI gi);",1329],["Use this in forward rendering paths for light models that are not dependent on the view direction.",1329],["half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi);",1329],["Use this in forward rendering paths for light models that are dependent on the view direction.",1329],["half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal);",1329],["Use this in deferred shading paths.",1329],["Note that you don't need to declare all functions. A lighting model either uses view direction or it does not. Similarly, if the lighting model only works in forward rendering, do not declare the _Deferred function. This ensures that Shaders that use it only compile to forward rendering.",1329],["Custom GI",1329],["Declare the following function to customize the decoding lightmap data and probes:",1329],["half4 Lighting<Name>_GI (SurfaceOutput s, UnityGIInput data, inout UnityGI gi);",1329],["Note that to decode standard Unity lightmaps and SH probes, you can use the built-in DecodeLightmap and ShadeSHPerPixel functions, as seen in UnityGI_Base in the UnityGlobalIllumination.cginc file inside Unity (Windows: <unity install path>/Data/CGIncludes/UnityGlobalIllumination.cginc; macOS: /Applications/Unity/Unity.app/Contents/CGIncludes/UnityGlobalIllumination.cginc_).",1329],["Examples",1329],["See documentation on Surface Shader Lighting Examples for more information.",1329],["Surface Shader lighting examples",1330],["This page provides examples of custom Surface Shader lighting models in Surface Shaders. For more general Surface Shader guidance, see Surface Shader Examples.",1330],["Because Deferred Shading does not play well with custom per-material lighting models, most of the examples below make the shaders compile to Forward Rendering only.",1330],["Render pipeline compatibility",1330],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1330],["Surface Shaders Yes NoFor a streamlined way of creating Shader objects in URP, see Shader Graph. NoFor a streamlined way of creating Shader objects in HDRP, see Shader Graph. No ",1330],["Diffuse",1330],["The following is an example of a shader that uses the built-in Lambert lighting model:",1330],["Shader \"Example/Diffuse Texture\" {",1330],["Properties {",1330],["_MainTex (\"Texture\", 2D) = \"white\" {}",1330],["SubShader {",1330],["Tags { \"RenderType\" = \"Opaque\" }",1330],["CGPROGRAM",1330],["pragma surface surf Lambert",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["sampler2D _MainTex;",1330],["void surf (Input IN, inout SurfaceOutput o) {",1330],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1330],["ENDCG",1330],["Fallback \"Diffuse\"",1330],["Here's how it looks like with a Texture and without a Texture, with one directional Light in the Scene:",1330],["The following example shows how to achieve the same result by writing a custom lighting model instead of using the built-in Lambert model.",1330],["To do this, you need to use a number of Surface Shader lighting model functions. Here's a simple Lambert one. Note that only the CGPROGRAM section changes; the surrounding Shader code is exactly the same:",1330],["Shader \"Example/Diffuse Texture\" {",1330],["Properties {",1330],["_MainTex (\"Texture\", 2D) = \"white\" {}",1330],["SubShader {",1330],["Tags { \"RenderType\" = \"Opaque\" }",1330],["CGPROGRAM",1330],["pragma surface surf SimpleLambert",1330],["half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten) {",1330],["half NdotL = dot (s.Normal, lightDir);",1330],["half4 c;",1330],["c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * atten);",1330],["c.a = s.Alpha;",1330],["return c;",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["sampler2D _MainTex;",1330],["void surf (Input IN, inout SurfaceOutput o) {",1330],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1330],["ENDCG",1330],["Fallback \"Diffuse\"",1330],["This simple Diffuse lighting model uses the LightingSimpleLambert function. It computes lighting by calculating a dot product between surface normal and light direction, and then applying light attenuation and color.",1330],["Diffuse Wrap",1330],["The following example shows Wrapped Diffuse, a modification of Diffuse lighting where illumination \"wraps around\" the edges of objects. It's useful for simulating subsurface scattering effects. Only the CGPROGRAM section changes, so once again, the surrounding Shader code is omitted:",1330],["...ShaderLab code...",1330],["CGPROGRAM",1330],["pragma surface surf WrapLambert",1330],["half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {",1330],["half NdotL = dot (s.Normal, lightDir);",1330],["half diff = NdotL * 0.5 + 0.5;",1330],["half4 c;",1330],["c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten);",1330],["c.a = s.Alpha;",1330],["return c;",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["sampler2D _MainTex;",1330],["void surf (Input IN, inout SurfaceOutput o) {",1330],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1330],["ENDCG",1330],["...ShaderLab code...",1330],["Here's how it looks like with a Texture and without a Texture, with one directional Light in the Scene:",1330],["Toon Ramp",1330],["The following example shows a \"Ramp\" lighting model that uses a Texture ramp to define how surfaces respond to the angles between the light and the normal. This can be used for a variety of effects, and is especially effective when used with Toon lighting.",1330],["...ShaderLab code...",1330],["CGPROGRAM",1330],["pragma surface surf Ramp",1330],["sampler2D _Ramp;",1330],["half4 LightingRamp (SurfaceOutput s, half3 lightDir, half atten) {",1330],["half NdotL = dot (s.Normal, lightDir);",1330],["half diff = NdotL * 0.5 + 0.5;",1330],["half3 ramp = tex2D (_Ramp, float2(diff)).rgb;",1330],["half4 c;",1330],["c.rgb = s.Albedo * _LightColor0.rgb * ramp * atten;",1330],["c.a = s.Alpha;",1330],["return c;",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["sampler2D _MainTex;",1330],["void surf (Input IN, inout SurfaceOutput o) {",1330],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1330],["ENDCG",1330],["...ShaderLab code...",1330],["Here's how it looks like with a Texture and without a Texture, with one directional Light in the Scene:",1330],["Simple Specular",1330],["The following example shows a simple specular lighting model, similar to the built-in BlinnPhong lighting model.",1330],["...ShaderLab code...",1330],["CGPROGRAM",1330],["pragma surface surf SimpleSpecular",1330],["half4 LightingSimpleSpecular (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {",1330],["half3 h = normalize (lightDir + viewDir);",1330],["half diff = max (0, dot (s.Normal, lightDir));",1330],["float nh = max (0, dot (s.Normal, h));",1330],["float spec = pow (nh, 48.0);",1330],["half4 c;",1330],["c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten;",1330],["c.a = s.Alpha;",1330],["return c;",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["sampler2D _MainTex;",1330],["void surf (Input IN, inout SurfaceOutput o) {",1330],["o.Albedo = tex2D (MainTex, IN.uvMainTex).rgb;",1330],["ENDCG",1330],["...ShaderLab code...",1330],["Here's how it looks like with a Texture and without a Texture, with one directional Light in the Scene:",1330],["Custom GI",1330],["We'll start with a Shader that mimics Unity's built-in GI:",1330],["Shader \"Example/CustomGI_ToneMapped\" {",1330],["Properties {",1330],["_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {}",1330],["SubShader {",1330],["Tags { \"RenderType\"=\"Opaque\" }",1330],["CGPROGRAM",1330],["pragma surface surf StandardDefaultGI",1330],["include \"UnityPBSLighting.cginc\"",1330],["sampler2D _MainTex;",1330],["inline half4 LightingStandardDefaultGI(SurfaceOutputStandard s, half3 viewDir, UnityGI gi)",1330],["return LightingStandard(s, viewDir, gi);",1330],["inline void LightingStandardDefaultGI_GI(",1330],["SurfaceOutputStandard s,",1330],["UnityGIInput data,",1330],["inout UnityGI gi)",1330],["LightingStandard_GI(s, data, gi);",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["void surf (Input IN, inout SurfaceOutputStandard o) {",1330],["o.Albedo = tex2D(MainTex, IN.uvMainTex);",1330],["ENDCG",1330],["FallBack \"Diffuse\"",1330],["Now, let's add some tone mapping on top of the GI:",1330],["Shader \"Example/CustomGI_ToneMapped\" {",1330],["Properties {",1330],["_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {}",1330],["_Gain(\"Lightmap tone-mapping Gain\", Float) = 1",1330],["_Knee(\"Lightmap tone-mapping Knee\", Float) = 0.5",1330],["_Compress(\"Lightmap tone-mapping Compress\", Float) = 0.33",1330],["SubShader {",1330],["Tags { \"RenderType\"=\"Opaque\" }",1330],["CGPROGRAM",1330],["pragma surface surf StandardToneMappedGI",1330],["include \"UnityPBSLighting.cginc\"",1330],["half _Gain;",1330],["half _Knee;",1330],["half _Compress;",1330],["sampler2D _MainTex;",1330],["inline half3 TonemapLight(half3 i) {",1330],["i *= _Gain;",1330],["return (i > Knee) ? (((i - _Knee)*Compress) + _Knee) : i;",1330],["inline half4 LightingStandardToneMappedGI(SurfaceOutputStandard s, half3 viewDir, UnityGI gi)",1330],["return LightingStandard(s, viewDir, gi);",1330],["inline void LightingStandardToneMappedGI_GI(",1330],["SurfaceOutputStandard s,",1330],["UnityGIInput data,",1330],["inout UnityGI gi)",1330],["LightingStandard_GI(s, data, gi);",1330],["gi.light.color = TonemapLight(gi.light.color);",1330],["ifdef DIRLIGHTMAP_SEPARATE",1330],["ifdef LIGHTMAP_ON",1330],["gi.light2.color = TonemapLight(gi.light2.color);",1330],["endif",1330],["ifdef DYNAMICLIGHTMAP_ON",1330],["gi.light3.color = TonemapLight(gi.light3.color);",1330],["endif",1330],["endif",1330],["gi.indirect.diffuse = TonemapLight(gi.indirect.diffuse);",1330],["gi.indirect.specular = TonemapLight(gi.indirect.specular);",1330],["struct Input {",1330],["float2 uv_MainTex;",1330],["};",1330],["void surf (Input IN, inout SurfaceOutputStandard o) {",1330],["o.Albedo = tex2D(MainTex, IN.uvMainTex);",1330],["ENDCG",1330],["FallBack \"Diffuse\"",1330],["Writing Surface Shaders",1331],["In the Built-in Render Pipeline, Surface Shaders are a streamlined way of writing shaders that interact with lighting.",1331],["Render pipeline compatibility",1331],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1331],["Surface Shaders Yes NoFor a streamlined way of creating Shader objects in URP, see Shader Graph. NoFor a streamlined way of creating Shader objects in HDRP, see Shader Graph. No ",1331],["Overview",1331],["Writing shaders that interact with lighting is complex. There are different light types, different shadow options, different rendering paths (forward and deferred rendering), and the shader should somehow handle all that complexity.",1331],["Surface Shaders is a code generation approach that makes it much easier to write lit shaders than using low level vertex/pixel shader programs.",1331],["For some examples, take a look at Surface Shader Examples and Surface Shader Custom Lighting Examples.",1331],["How it works",1331],["You define a \"surface function\" that takes any UVs or data you need as input, and fills in output structure SurfaceOutput. SurfaceOutput basically describes properties of the surface (it's albedo color, normal, emission, specularity etc.). You write this code in HLSL.",1331],["Surface Shader compiler then figures out what inputs are needed, what outputs are filled and so on, and generates actual vertex&pixel shaders, as well as rendering passes to handle forward and deferred rendering.",1331],["Standard output structure of surface shaders is this:",1331],["struct SurfaceOutput",1331],["fixed3 Albedo; // diffuse color",1331],["fixed3 Normal; // tangent space normal, if written",1331],["fixed3 Emission;",1331],["half Specular; // specular power in 0..1 range",1331],["fixed Gloss; // specular intensity",1331],["fixed Alpha; // alpha for transparencies",1331],["};",1331],["In Unity 5, surface shaders can also use physically based lighting models. Built-in Standard and StandardSpecular lighting models (see below) use these output structures respectively:",1331],["struct SurfaceOutputStandard",1331],["fixed3 Albedo; // base (diffuse or specular) color",1331],["fixed3 Normal; // tangent space normal, if written",1331],["half3 Emission;",1331],["half Metallic; // 0=non-metal, 1=metal",1331],["half Smoothness; // 0=rough, 1=smooth",1331],["half Occlusion; // occlusion (default 1)",1331],["fixed Alpha; // alpha for transparencies",1331],["};",1331],["struct SurfaceOutputStandardSpecular",1331],["fixed3 Albedo; // diffuse color",1331],["fixed3 Specular; // specular color",1331],["fixed3 Normal; // tangent space normal, if written",1331],["half3 Emission;",1331],["half Smoothness; // 0=rough, 1=smooth",1331],["half Occlusion; // occlusion (default 1)",1331],["fixed Alpha; // alpha for transparencies",1331],["};",1331],["Samples",1331],["See Surface Shader Examples, Surface Shader Custom Lighting Examples and Surface Shader Tessellation pages.",1331],["Surface Shader compile directives",1331],["Surface shader is placed inside CGPROGRAM..ENDCG block, just like any other shader. The differences are:",1331],["It must be placed inside SubShader block, not inside Pass. Surface shader will compile into multiple passes itself.",1331],["It uses #pragma surface ... directive to indicate it's a surface shader.",1331],["The #pragma surface directive is:",1331],["pragma surface surfaceFunction lightModel [optionalparams]",1331],["Required parameters",1331],["surfaceFunction - which Cg function has surface shader code. The function should have the form of void surf (Input IN, inout SurfaceOutput o), where Input is a structure you have defined. Input should contain any texture coordinates and extra automatic variables needed by surface function.",1331],["lightModel - lighting model to use. Built-in ones are physically based Standard and StandardSpecular, as well as simple non-physically based Lambert (diffuse) and BlinnPhong (specular). See Custom Lighting Models page for how to write your own.",1331],["Standard lighting model uses SurfaceOutputStandard output struct, and matches the Standard (metallic workflow) shader in Unity.",1331],["StandardSpecular lighting model uses SurfaceOutputStandardSpecular output struct, and matches the Standard (specular setup) shader in Unity.",1331],["Lambert and BlinnPhong lighting models are not physically based (coming from Unity 4.x), but the shaders using them can be faster to render on low-end hardware.",1331],["Optional parameters",1331],["Transparency and alpha testing** is controlled by alpha and alphatest directives. Transparency can typically be of two kinds: traditional alpha blending (used for fading objects out) or more physically plausible \"premultiplied blending\" (which allows semitransparent surfaces to retain proper specular reflections). Enabling semitransparency makes the generated surface shader code contain blending commands; whereas enabling alpha cutout will do a fragment discard in the generated pixel shader, based on the given variable.",1331],["alpha or alpha:auto - Will pick fade-transparency (same as alpha:fade) for simple lighting functions, and premultiplied transparency (same as alpha:premul) for physically based lighting functions.",1331],["alpha:blend - Enable alpha blending.",1331],["alpha:fade - Enable traditional fade-transparency.",1331],["alpha:premul - Enable premultiplied alpha transparency.",1331],["alphatest:VariableName - Enable alpha cutout transparency. Cutoff value is in a float variable with VariableName. You'll likely also want to use addshadow directive to generate proper shadow caster pass.",1331],["keepalpha - By default opaque surface shaders write 1.0 (white) into alpha channel, no matter what's output in the Alpha of output struct or what's returned by the lighting function. Using this option allows keeping lighting function's alpha value even for opaque surface shaders.",1331],["decal:add - Additive decal shader (e.g. terrain AddPass). This is meant for objects that lie atop of other surfaces, and use additive blending. See Surface Shader Examples",1331],["decal:blend - Semitransparent decal shader. This is meant for objects that lie atop of other surfaces, and use alpha blending. See Surface Shader Examples",1331],["Custom modifier functions** can be used to alter or compute incoming vertex data, or to alter final computed fragment color.",1331],["vertex:VertexFunction - Custom vertex modification function. This function is invoked at start of generated vertex shader, and can modify or compute per-vertex data. See Surface Shader Examples.",1331],["finalcolor:ColorFunction - Custom final color modification function. See Surface Shader Examples.",1331],["finalgbuffer:ColorFunction - Custom deferred path for altering G-buffer content.",1331],["Shadows and Tessellation** - additional directives can be given to control how shadows and tessellation is handled.",1331],["addshadow - Generate a shadow caster pass. Commonly used with custom vertex modification, so that shadow casting also gets any procedural vertex animation. Often shaders don't need any special shadows handling, as they can just use shadow caster pass from their fallback.",1331],["fullforwardshadows - Support all light shadow types in Forward rendering path. By default shaders only support shadows from one directional light in forward rendering (to save on internal shader variant count). If you need point or Spot Light shadows in forward rendering, use this directive.",1331],["tessellate:TessFunction - use DX11 GPU tessellation; the function computes tessellation factors. See Surface Shader Tessellation for details.",1331],["Code generation options** - by default generated surface shader code tries to handle all possible lighting/shadowing/lightmap scenarios. However in some cases you know you won't need some of them, and it is possible to adjust generated code to skip them. This can result in smaller shaders that are faster to load.",1331],["exclude_path:deferred, exclude_path:forward - Do not generate passes for given rendering path (Deferred Shading, Forward respectively).",1331],["noshadow - Disables all shadow receiving support in this shader.",1331],["noambient - Do not apply any ambient lighting or light probes.",1331],["novertexlights - Do not apply any light probes or per-vertex lights in Forward rendering.",1331],["nolightmap - Disables all lightmapping support in this shader.",1331],["nodynlightmap - Disables runtime dynamic global illumination support in this shader.",1331],["nodirlightmap - Disables directional lightmaps support in this shader.",1331],["nofog - Disables all built-in Fog support.",1331],["nometa - Does not generate a \"meta\" pass (that's used by lightmapping & dynamic global illumination to extract surface information).",1331],["noforwardadd - Disables Forward rendering additive pass. This makes the shader support one full directional light, with all other lights computed per-vertex/SH. Makes shaders smaller as well.",1331],["nolppv - Disables Light Probe Proxy Volume support in this shader.",1331],["noshadowmask - Disables Shadowmask support for this shader (both Shadowmask and Distance Shadowmask).",1331],["Miscellaneous options**",1331],["softvegetation - Makes the surface shader only be rendered when Soft Vegetation is on.",1331],["interpolateview - Compute view direction in the vertex shader and interpolate it; instead of computing it in the pixel shader. This can make the pixel shader faster, but uses up one more texture interpolator.",1331],["halfasview - Pass half-direction vector into the lighting function instead of view-direction. Half-direction will be computed and normalized per vertex. This is faster, but not entirely correct.",1331],["approxview - Removed in Unity 5.0. Use interpolateview instead.",1331],["dualforward - Use dual lightmaps in forward rendering path.",1331],["dithercrossfade - Makes the surface shader support dithering effects. You can then apply this shader to GameObjects that use an LOD Group component configured for cross-fade transition mode.",1331],["To see what exactly is different from using different options above, it can be helpful to use \"Show Generated Code\" button in the Shader Inspector.",1331],["Surface Shader input structure",1331],["The input structure Input generally has any texture coordinates needed by the shader. Texture coordinates must be named \"uv\" followed by texture name (or start it with \"uv2\" to use second texture coordinate set).",1331],["Additional values that can be put into Input structure:",1331],["float3 viewDir - contains view direction, for computing Parallax effects, rim lighting etc.",1331],["float4 with COLOR semantic - contains interpolated per-vertex color.",1331],["float4 screenPos - contains screen space position for reflection or screenspace effects. Note that this is not suitable for GrabPass; you need to compute custom UV yourself using ComputeGrabScreenPos function.",1331],["float3 worldPos - contains world space position.",1331],["float3 worldRefl - contains world reflection vector if surface shader does not write to o.Normal. See Reflect-Diffuse shader for example.",1331],["float3 worldNormal - contains world normal vector if surface shader does not write to o.Normal.",1331],["float3 worldRefl; INTERNAL_DATA - contains world reflection vector if surface shader writes to o.Normal. To get the reflection vector based on per-pixel normal map, use WorldReflectionVector (IN, o.Normal). See Reflect-Bumped shader for example.",1331],["float3 worldNormal; INTERNAL_DATA - contains world normal vector if surface shader writes to o.Normal. To get the normal vector based on per-pixel normal map, use WorldNormalVector (IN, o.Normal).",1331],["Surface Shaders and DirectX 11 HLSL syntax",1331],["Currently some parts of surface shader compilation pipeline do not understand DirectX 11-specific HLSL syntax, so if you're using HLSL features like StructuredBuffers, RWTextures and other non-DX9 syntax, you have to wrap it into a DX11-only preprocessor macro.",1331],["See Platform Specific Differences and Using HLSL pages for details.",1331],["Surface Shaders with DX11 / OpenGL Core Tessellation",1332],["In the Built-in Render Pipeline, Surface Shaders have some support for DirectX 11 / OpenGL Core GPU Tessellation.",1332],["Render pipeline compatibility",1332],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1332],["Surface Shaders Yes NoFor a streamlined way of creating Shader objects in URP, see Shader Graph. NoFor a streamlined way of creating Shader objects in HDRP, see Shader Graph. No ",1332],["Overview",1332],["Tessellation is indicated by tessellate:FunctionName modifier. That function computes triangle edge and inside tessellation factors.",1332],["When tessellation is used, \"vertex modifier\" (vertex:FunctionName) is invoked after tessellation, for each generated vertex in the domain shader. Here you'd typically to displacement mapping.",1332],["Surface shaders can optionally compute phong tessellation to smooth model surface even without any displacement mapping.",1332],["Current limitations of tessellation support:",1332],["Only triangle domain - no quads, no isoline tessellation.",1332],["When you use tessellation, the shader is automatically compiled into the Shader Model 4.6 target, which prevents support for running on older graphics targets.",1332],["No GPU tessellation, displacement in the vertex modifier",1332],["This next example shows a surface shader that does some displacement mapping without using tessellation. It just moves vertices along their normals based on the amount coming from a displacement map:",1332],["Shader \"Tessellation Sample\" {",1332],["Properties {",1332],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1332],["_DispTex (\"Disp Texture\", 2D) = \"gray\" {}",1332],["_NormalMap (\"Normalmap\", 2D) = \"bump\" {}",1332],["_Displacement (\"Displacement\", Range(0, 1.0)) = 0.3",1332],["_Color (\"Color\", color) = (1,1,1,0)",1332],["_SpecColor (\"Spec color\", color) = (0.5,0.5,0.5,0.5)",1332],["SubShader {",1332],["Tags { \"RenderType\"=\"Opaque\" }",1332],["LOD 300",1332],["CGPROGRAM",1332],["pragma surface surf BlinnPhong addshadow fullforwardshadows vertex:disp nolightmap",1332],["pragma target 4.6",1332],["struct appdata {",1332],["float4 vertex : POSITION;",1332],["float4 tangent : TANGENT;",1332],["float3 normal : NORMAL;",1332],["float2 texcoord : TEXCOORD0;",1332],["};",1332],["sampler2D _DispTex;",1332],["float _Displacement;",1332],["void disp (inout appdata v)",1332],["float d = tex2Dlod(_DispTex, float4(v.texcoord.xy,0,0)).r * _Displacement;",1332],["v.vertex.xyz += v.normal * d;",1332],["struct Input {",1332],["float2 uv_MainTex;",1332],["};",1332],["sampler2D _MainTex;",1332],["sampler2D _NormalMap;",1332],["fixed4 _Color;",1332],["void surf (Input IN, inout SurfaceOutput o) {",1332],["half4 c = tex2D (MainTex, IN.uvMainTex) * _Color;",1332],["o.Albedo = c.rgb;",1332],["o.Specular = 0.2;",1332],["o.Gloss = 1.0;",1332],["o.Normal = UnpackNormal(tex2D(NormalMap, IN.uvMainTex));",1332],["ENDCG",1332],["FallBack \"Diffuse\"",1332],["The above shader is fairly standard:",1332],["Vertex modifier disp samples the displacement map and moves vertices along their normals.",1332],["It uses custom \"vertex data input\" structure (appdata) instead of default appdata_full. This is not needed yet, but it's more efficient for tessellation to use as small structure as possible.",1332],["Since our vertex data does not have 2nd UV coordinate, we add nolightmap directive to exclude lightmaps.",1332],["The image below displays some simple GameObjects with this shader applied.",1332],["Fixed amount of tessellation",1332],["If your model’s faces are roughly the same size on screen, add a fixed amount of tesselation to the Mesh (the same tessellation level over the whole Mesh).",1332],["The following example script applies a fixed amount of tessellation.",1332],["Shader \"Tessellation Sample\" {",1332],["Properties {",1332],["_Tess (\"Tessellation\", Range(1,32)) = 4",1332],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1332],["_DispTex (\"Disp Texture\", 2D) = \"gray\" {}",1332],["_NormalMap (\"Normalmap\", 2D) = \"bump\" {}",1332],["_Displacement (\"Displacement\", Range(0, 1.0)) = 0.3",1332],["_Color (\"Color\", color) = (1,1,1,0)",1332],["_SpecColor (\"Spec color\", color) = (0.5,0.5,0.5,0.5)",1332],["SubShader {",1332],["Tags { \"RenderType\"=\"Opaque\" }",1332],["LOD 300",1332],["CGPROGRAM",1332],["pragma surface surf BlinnPhong addshadow fullforwardshadows vertex:disp tessellate:tessFixed nolightmap",1332],["pragma target 4.6",1332],["struct appdata {",1332],["float4 vertex : POSITION;",1332],["float4 tangent : TANGENT;",1332],["float3 normal : NORMAL;",1332],["float2 texcoord : TEXCOORD0;",1332],["};",1332],["float _Tess;",1332],["float4 tessFixed()",1332],["return _Tess;",1332],["sampler2D _DispTex;",1332],["float _Displacement;",1332],["void disp (inout appdata v)",1332],["float d = tex2Dlod(_DispTex, float4(v.texcoord.xy,0,0)).r * _Displacement;",1332],["v.vertex.xyz += v.normal * d;",1332],["struct Input {",1332],["float2 uv_MainTex;",1332],["};",1332],["sampler2D _MainTex;",1332],["sampler2D _NormalMap;",1332],["fixed4 _Color;",1332],["void surf (Input IN, inout SurfaceOutput o) {",1332],["half4 c = tex2D (MainTex, IN.uvMainTex) * _Color;",1332],["o.Albedo = c.rgb;",1332],["o.Specular = 0.2;",1332],["o.Gloss = 1.0;",1332],["o.Normal = UnpackNormal(tex2D(NormalMap, IN.uvMainTex));",1332],["ENDCG",1332],["FallBack \"Diffuse\"",1332],["In the example above, the tessFixed tessellation function returns four tessellation factors as a single float4 value: three factors for each edge of the triangle, and one factor for the inside of the triangle.",1332],["The example returns a constant value that is set in the Material properties.",1332],["Distance-based tessellation",1332],["You can also change tessellation level based on distance from the camera.",1332],["For example, you could define two distance values:",1332],["The distance when tessellation is at maximum (for example, 10 meters).",1332],["The distance when the tessellation level gradually decreases (for example, 20 meters).",1332],["Shader \"Tessellation Sample\" {",1332],["Properties {",1332],["_Tess (\"Tessellation\", Range(1,32)) = 4",1332],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1332],["_DispTex (\"Disp Texture\", 2D) = \"gray\" {}",1332],["_NormalMap (\"Normalmap\", 2D) = \"bump\" {}",1332],["_Displacement (\"Displacement\", Range(0, 1.0)) = 0.3",1332],["_Color (\"Color\", color) = (1,1,1,0)",1332],["_SpecColor (\"Spec color\", color) = (0.5,0.5,0.5,0.5)",1332],["SubShader {",1332],["Tags { \"RenderType\"=\"Opaque\" }",1332],["LOD 300",1332],["CGPROGRAM",1332],["pragma surface surf BlinnPhong addshadow fullforwardshadows vertex:disp tessellate:tessDistance nolightmap",1332],["pragma target 4.6",1332],["include \"Tessellation.cginc\"",1332],["struct appdata {",1332],["float4 vertex : POSITION;",1332],["float4 tangent : TANGENT;",1332],["float3 normal : NORMAL;",1332],["float2 texcoord : TEXCOORD0;",1332],["};",1332],["float _Tess;",1332],["float4 tessDistance (appdata v0, appdata v1, appdata v2) {",1332],["float minDist = 10.0;",1332],["float maxDist = 25.0;",1332],["return UnityDistanceBasedTess(v0.vertex, v1.vertex, v2.vertex, minDist, maxDist, _Tess);",1332],["sampler2D _DispTex;",1332],["float _Displacement;",1332],["void disp (inout appdata v)",1332],["float d = tex2Dlod(_DispTex, float4(v.texcoord.xy,0,0)).r * _Displacement;",1332],["v.vertex.xyz += v.normal * d;",1332],["struct Input {",1332],["float2 uv_MainTex;",1332],["};",1332],["sampler2D _MainTex;",1332],["sampler2D _NormalMap;",1332],["fixed4 _Color;",1332],["void surf (Input IN, inout SurfaceOutput o) {",1332],["half4 c = tex2D (MainTex, IN.uvMainTex) * _Color;",1332],["o.Albedo = c.rgb;",1332],["o.Specular = 0.2;",1332],["o.Gloss = 1.0;",1332],["o.Normal = UnpackNormal(tex2D(NormalMap, IN.uvMainTex));",1332],["ENDCG",1332],["FallBack \"Diffuse\"",1332],["Here, the tessellation function takes the vertex data of the three triangle corners before tessellation as its three parameters.",1332],["Unity needs this to compute tessellation levels, which depend on vertex positions.",1332],["The example includes a built-in helper file, Tessellation.cginc, and calls the UnityDistanceBasedTess function from the file to do all the work. This function computes the distance of each vertex to the camera and derives the final tessellation factors.",1332],["Edge length based tessellation",1332],["Purely distance based tessellation is effective only when triangle sizes are quite similar. In the image above, the GameObjects that have small triangles are tessellated too much, while GameObjects that have large triangles aren’t tessellated enough.",1332],["One way to improve this is to compute tessellation levels based on triangle edge length on the screen. Unity should apply a larger tessellation factor to longer edges.",1332],["Shader \"Tessellation Sample\" {",1332],["Properties {",1332],["_EdgeLength (\"Edge length\", Range(2,50)) = 15",1332],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1332],["_DispTex (\"Disp Texture\", 2D) = \"gray\" {}",1332],["_NormalMap (\"Normalmap\", 2D) = \"bump\" {}",1332],["_Displacement (\"Displacement\", Range(0, 1.0)) = 0.3",1332],["_Color (\"Color\", color) = (1,1,1,0)",1332],["_SpecColor (\"Spec color\", color) = (0.5,0.5,0.5,0.5)",1332],["SubShader {",1332],["Tags { \"RenderType\"=\"Opaque\" }",1332],["LOD 300",1332],["CGPROGRAM",1332],["pragma surface surf BlinnPhong addshadow fullforwardshadows vertex:disp tessellate:tessEdge nolightmap",1332],["pragma target 4.6",1332],["include \"Tessellation.cginc\"",1332],["struct appdata {",1332],["float4 vertex : POSITION;",1332],["float4 tangent : TANGENT;",1332],["float3 normal : NORMAL;",1332],["float2 texcoord : TEXCOORD0;",1332],["};",1332],["float _EdgeLength;",1332],["float4 tessEdge (appdata v0, appdata v1, appdata v2)",1332],["return UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, _EdgeLength);",1332],["sampler2D _DispTex;",1332],["float _Displacement;",1332],["void disp (inout appdata v)",1332],["float d = tex2Dlod(_DispTex, float4(v.texcoord.xy,0,0)).r * _Displacement;",1332],["v.vertex.xyz += v.normal * d;",1332],["struct Input {",1332],["float2 uv_MainTex;",1332],["};",1332],["sampler2D _MainTex;",1332],["sampler2D _NormalMap;",1332],["fixed4 _Color;",1332],["void surf (Input IN, inout SurfaceOutput o) {",1332],["half4 c = tex2D (MainTex, IN.uvMainTex) * _Color;",1332],["o.Albedo = c.rgb;",1332],["o.Specular = 0.2;",1332],["o.Gloss = 1.0;",1332],["o.Normal = UnpackNormal(tex2D(NormalMap, IN.uvMainTex));",1332],["ENDCG",1332],["FallBack \"Diffuse\"",1332],["In this example, you call the UnityEdgeLengthBasedTess function from Tessellation.cginc to do all the work.",1332],["For performance reasons, call the UnityEdgeLengthBasedTessCull function instead, which performs patch frustum culling. This makes the shader a bit more expensive, but saves a lot of GPU work for parts of meshes that are outside of the Camera’s view.",1332],["Phong Tessellation",1332],["Phong Tessellation modifies positions of the subdivided faces so that the resulting surface follows the mesh normals a bit. It's quite an effective way of making low-poly meshes become more smooth.",1332],["Unity's surface shaders can compute Phong tessellation automatically using tessphong:VariableName compilation directive. Here's an example shader:",1332],["Shader \"Phong Tessellation\" {",1332],["Properties {",1332],["_EdgeLength (\"Edge length\", Range(2,50)) = 5",1332],["_Phong (\"Phong Strengh\", Range(0,1)) = 0.5",1332],["_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",1332],["_Color (\"Color\", color) = (1,1,1,0)",1332],["SubShader {",1332],["Tags { \"RenderType\"=\"Opaque\" }",1332],["LOD 300",1332],["CGPROGRAM",1332],["pragma surface surf Lambert vertex:dispNone tessellate:tessEdge tessphong:_Phong nolightmap",1332],["include \"Tessellation.cginc\"",1332],["struct appdata {",1332],["float4 vertex : POSITION;",1332],["float3 normal : NORMAL;",1332],["float2 texcoord : TEXCOORD0;",1332],["};",1332],["void dispNone (inout appdata v) { }",1332],["float _Phong;",1332],["float _EdgeLength;",1332],["float4 tessEdge (appdata v0, appdata v1, appdata v2)",1332],["return UnityEdgeLengthBasedTess (v0.vertex, v1.vertex, v2.vertex, _EdgeLength);",1332],["struct Input {",1332],["float2 uv_MainTex;",1332],["};",1332],["fixed4 _Color;",1332],["sampler2D _MainTex;",1332],["void surf (Input IN, inout SurfaceOutput o) {",1332],["half4 c = tex2D (MainTex, IN.uvMainTex) * _Color;",1332],["o.Albedo = c.rgb;",1332],["o.Alpha = c.a;",1332],["ENDCG",1332],["FallBack \"Diffuse\"",1332],["Here is a comparison between a regular shader (top row) and one that uses Phong tessellation (bottom row). See that even without any displacement mapping, the surface becomes more round.",1332],["2018-03-20 ",1332],["Tessellation for Metal added in 2018.1",1332],["Built-in shader variables",1333],["Unity's built-in include files contain global variables for your shaders: things like current object's transformation matrices, light parameters, current time and so on. You use them in shader programs like any other variable, but if you include the relevant include file, you don't have to declare them.",1333],["For more information on include files, see Built-in include files.",1333],["Transformations",1333],["All these matrices are float4x4 type, and are column major.",1333],["",1333],["Name Value ",1333],["UNITY_MATRIX_MVP Current model * view * projection matrix. ",1333],["UNITY_MATRIX_MV Current model * view matrix. ",1333],["UNITY_MATRIX_V Current view matrix. ",1333],["UNITY_MATRIX_P Current projection matrix. ",1333],["UNITY_MATRIX_VP Current view * projection matrix. ",1333],["UNITY_MATRIX_T_MV Transpose of model * view matrix. ",1333],["UNITY_MATRIX_IT_MV Inverse transpose of model * view matrix. ",1333],["unity_ObjectToWorld Current model matrix. ",1333],["unity_WorldToObject Inverse of current world matrix. ",1333],["Camera and screen",1333],["These variables will correspond to the Camera that is rendering. For example during shadowmap rendering, they will still refer to the Camera component values, and not the \"virtual camera\" that is used for the shadowmap projection.",1333],["",1333],["Name Type Value ",1333],["_WorldSpaceCameraPos float3 World space position of the camera. ",1333],["_ProjectionParams float4 x is 1.0 (or -1.0 if currently rendering with a flipped projection matrix), y is the camera's near plane, z is the camera's far plane and w is 1/FarPlane. ",1333],["_ScreenParams float4 x is the width of the camera's target texture in pixels, y is the height of the camera's target texture in pixels, z is 1.0 + 1.0/width and w is 1.0 + 1.0/height. ",1333],["_ZBufferParams float4 Used to linearize Z buffer values. x is (1-far/near), y is (far/near), z is (x/far) and w is (y/far). ",1333],["unity_OrthoParams float4 x is orthographic camera's width, y is orthographic camera's height, z is unused and w is 1.0 when camera is orthographic, 0.0 when perspective. ",1333],["unity_CameraProjection float4x4 Camera's projection matrix. ",1333],["unity_CameraInvProjection float4x4 Inverse of camera's projection matrix. ",1333],["unity_CameraWorldClipPlanes[6] float4 Camera frustum plane world space equations, in this order: left, right, bottom, top, near, far. ",1333],["Time",1333],["Time is measured in seconds, and is scaled by the Time multiplier in your Project's Time settings. There is no built-in variable that provides access to unscaled time.",1333],["",1333],["Name Type Value ",1333],["_Time float4 Time since level load (t/20, t, t*2, t*3), use to animate things inside the shaders. ",1333],["_SinTime float4 Sine of time: (t/8, t/4, t/2, t). ",1333],["_CosTime float4 Cosine of time: (t/8, t/4, t/2, t). ",1333],["unity_DeltaTime float4 Delta time: (dt, 1/dt, smoothDt, 1/smoothDt). ",1333],["Lighting",1333],["Light parameters are passed to shaders in different ways depending on which Rendering Path is used,",1333],["and which LightMode Pass Tag is used in the shader.",1333],["Forward rendering (ForwardBase and ForwardAdd pass types):",1333],["",1333],["Name Type Value ",1333],["_LightColor0 (declared in UnityLightingCommon.cginc) fixed4 Light color. ",1333],["_WorldSpaceLightPos0 float4 Directional lights: (world space direction, 0). Other lights: (world space position, 1). ",1333],["unity_WorldToLight (declared in AutoLight.cginc) float4x4 World-to-light matrix. Used to sample cookie & attenuation textures. ",1333],["unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0 float4 (ForwardBase pass only) world space positions of first four non-important point lights. ",1333],["unity_4LightAtten0 float4 (ForwardBase pass only) attenuation factors of first four non-important point lights. ",1333],["unity_LightColor half4[4] (ForwardBase pass only) colors of of first four non-important point lights. ",1333],["unity_WorldToShadow float4x4[4] World-to-shadow matrices. One matrix for Spot Lights, up to four for directional light cascades. ",1333],["Deferred shading, used in the lighting pass shader (all declared in UnityDeferredLibrary.cginc):",1333],["",1333],["Name Type Value ",1333],["_LightColor float4 Light color. ",1333],["unity_WorldToLight float4x4 World-to-light matrix. Used to sample cookie & attenuation textures. ",1333],["unity_WorldToShadow float4x4[4] World-to-shadow matrices. One matrix for Spot Lights, up to four for directional light cascades. ",1333],["Spherical harmonics coefficients (used by ambient and light probes) are set up for ForwardBase and Deferred",1333],["pass types. They contain 3rd order SH to be evaluated by world space normal (see ShadeSH9 from UnityCG.cginc).",1333],["The variables are all half4 type, unity_SHAr and similar names.",1333],["Vertex-lit rendering (Vertex pass type):",1333],["Up to 8 lights are set up for a Vertex pass type; always sorted starting from the brightest one. So if you want",1333],["to render objects affected by two lights at once, you can just take first two entries in the arrays. If there are less",1333],["lights affecting the object than 8, the rest will have their color set to black.",1333],["",1333],["Name Type Value ",1333],["unity_LightColor half4[8] Light colors. ",1333],["unity_LightPosition float4[8] View-space light positions. (-direction,0) for directional lights; (position,1) for Point or Spot Lights. ",1333],["unity_LightAtten half4[8] Light attenuation factors. x is cos(spotAngle/2) or -1 for non-Spot Lights; y is 1/cos(spotAngle/4) or 1 for non-Spot Lights; z is quadratic attenuation; w is squared light range. ",1333],["unity_SpotDirection float4[8] View-space Spot Lights positions; (0,0,1,0) for non-Spot Lights. ",1333],["Lightmaps",1333],["",1333],["Name Type Value ",1333],["unity_Lightmap Texture2D Contains lightmap information. ",1333],["unity_LightmapST float4[8] Scales and translates the UV information to the correct range to sample the lightmap texture. ",1333],["Fog and Ambient",1333],["",1333],["Name Type Value ",1333],["unity_AmbientSky fixed4 Sky ambient lighting color in gradient ambient lighting case. ",1333],["unity_AmbientEquator fixed4 Equator ambient lighting color in gradient ambient lighting case. ",1333],["unity_AmbientGround fixed4 Ground ambient lighting color in gradient ambient lighting case. ",1333],["unity_IndirectSpecColor fixed4 If you use a skybox, this is the average color of the skybox, which Unity calculates using the DC component of the spherical harmonics data in the ambient probe. Otherwise this is black. ",1333],["UNITY_LIGHTMODEL_AMBIENT fixed4 Ambient lighting color (sky color in gradient ambient case). Legacy variable. ",1333],["unity_FogColor fixed4 Fog color. ",1333],["unity_FogParams float4 Parameters for fog calculation: (density / sqrt(ln(2)), density / ln(2), -1/(end-start), end/(end-start)). x is useful for Exp2 fog mode, y for Exp mode, z and w for Linear mode. ",1333],["",1333],["Various",1333],["",1333],["Name Type Value ",1333],["unity_LODFade float4 Level-of-detail fade when using LODGroup. x is fade (0..1), y is fade quantized to 16 levels, z and w unused. ",1333],["_TextureSampleAdd float4 Set automatically by Unity for UI only based on whether the texture being used is in Alpha8 format (the value is set to (1,1,1,0)) or not (the value is set to (0,0,0,0)). ",1333],["ShaderLab command: UsePass",1334],["The UsePass command inserts a named Pass from another Shader object. You can use this command to reduce code duplication in shader source files.",1334],["For information on adding a name to a Pass in ShaderLab code, see ShaderLab: adding a name to a Pass.",1334],["Render pipeline compatibility",1334],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1334],["UsePass Yes Yes Yes Yes ",1334],["Usage",1334],["Signature Function ",1334],["UsePass \"Shader object name/PASS NAME IN UPPERCASE\" Inserts the named Pass from the named Shader object.If the named Shader object contains more than one SubShader, Unity iterates over the SubShaders until it finds the first supported SubShader that contains a Pass with the given name. For information on how Unity determines whether a SubShader is supported, see Shader objects introduction.If the SubShader contains more than one Pass with the same name, Unity returns the last Pass it finds.If Unity does not find a matching Pass, it shows the error shader. ",1334],["Examples",1334],["This example code creates a Shader object called NamedPass, which contains a Pass called ExampleNamedPass.",1334],["Shader \"Examples/ContainsNamedPass\"",1334],["SubShader",1334],["Pass",1334],["Name \"ExampleNamedPass\"",1334],["// The rest of the Pass contents go here.",1334],["This example code creates a Shader object called UseNamedPass, which uses the named Pass from the example code above.",1334],["Shader \"Examples/UsesNamedPass\"",1334],["SubShader",1334],["UsePass \"Examples/ContainsNamedPass/EXAMPLENAMEDPASS\"",1334],["Custom shader fundamentals",1335],["These example shaders for the Built-in Render Pipeline demonstrate the basics of writing custom shaders, and cover common use cases.",1335],["For information on writing shaders, see Writing shaders.",1335],["Setting up the scene",1335],["The first step is to create some objects which you will use to test your shaders. Select Game Object > 3D Object > Capsule in the main menu. Then position the camera so it shows the capsule. Double-click the Capsule in the Hierarchy to",1335],["focus the scene view on it, then select the Main Camera object and click Game object > Align with View",1335],["from the main menu.",1335],["Create a new Material by selecting Create > Material from the menu in the Project View. A new material called New Material will appear in the Project View.",1335],["Creating a shader",1335],["Now create a new Shader asset in a similar way. Select Create > Shader > Unlit Shader from the menu in the Project View.",1335],["This creates a basic shader that just displays a texture without any lighting.",1335],["Other entries in the Create > Shader menu create barebone shaders",1335],["or other types, for example a basic surface shader.",1335],["Linking the mesh, material and shader",1335],["Make the material use the shader via the material's inspector, or just drag the shader asset over the material asset in the Project View. The material inspector will display a white sphere when it uses this shader.",1335],["Now drag the material onto your mesh object in either the Scene or the Hierarchy views. Alternatively, select the object, and in the inspector make it use the material in the Mesh Renderer component's Materials slot.",1335],["With these things set up, you can now begin looking at the shader code, and you will see the results of your changes to the shader on the capsule in the Scene View.",1335],["Main parts of the shader",1335],["To begin examining the code of the shader, double-click the shader asset in the Project View. The shader code will open in your script editor (MonoDevelop or Visual Studio).",1335],["The shader starts off with this code:",1335],["Shader \"Unlit/NewUnlitShader\"",1335],["Properties",1335],["_MainTex (\"Texture\", 2D) = \"white\" {}",1335],["SubShader",1335],["Tags { \"RenderType\"=\"Opaque\" }",1335],["LOD 100",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["// make fog work",1335],["pragma multi_compile_fog",1335],["include \"UnityCG.cginc\"",1335],["struct appdata",1335],["float4 vertex : POSITION;",1335],["float2 uv : TEXCOORD0;",1335],["};",1335],["struct v2f",1335],["float2 uv : TEXCOORD0;",1335],["UNITY_FOG_COORDS(1)",1335],["float4 vertex : SV_POSITION;",1335],["};",1335],["sampler2D _MainTex;",1335],["float4 MainTexST;",1335],["v2f vert (appdata v)",1335],["v2f o;",1335],["o.vertex = UnityObjectToClipPos(v.vertex);",1335],["o.uv = TRANSFORM_TEX(v.uv, _MainTex);",1335],["UNITY_TRANSFER_FOG(o,o.vertex);",1335],["return o;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// sample the texture",1335],["fixed4 col = tex2D(_MainTex, i.uv);",1335],["// apply fog",1335],["UNITY_APPLY_FOG(i.fogCoord, col);",1335],["return col;",1335],["ENDCG",1335],["This initial shader does not look very simple! But don't worry,",1335],["we will go over each part step-by-step.",1335],["Let's see the main parts of our simple shader.",1335],["Shader",1335],["The Shader command contains a string with the name of",1335],["the shader. You can use forward slash characters \"/\" to place your shader in sub-menus when selecting your shader in the Material inspector.",1335],["Properties",1335],["The Properties block contains shader variables",1335],["(textures, colors etc.) that will be saved as part of the Material,",1335],["and displayed in the material inspector. In our unlit shader template,",1335],["there is a single texture property declared.",1335],["SubShader",1335],["A Shader can contain one or more SubShaders, which are",1335],["primarily used to implement shaders for different GPU capabilities.",1335],["In this tutorial we're not much concerned with that, so all our",1335],["shaders will contain just one SubShader.",1335],["Pass",1335],["Each SubShader is composed of a number of passes, and",1335],["each Pass represents an execution of the vertex and fragment code",1335],["for the same object rendered with the material of the shader.",1335],["Many simple shaders use just one pass, but shaders that",1335],["interact with lighting might need more (see",1335],["Lighting Pipeline for details). Commands",1335],["inside Pass typically setup fixed function state, for example",1335],["blending modes.",1335],["CGPROGRAM .. ENDCG",1335],["These keywords surround portions of HLSL code within the vertex and fragment",1335],["shaders. Typically this is where most of the interesting code is. See",1335],["vertex and fragment shaders for details.",1335],["Simple unlit shader",1335],["The unlit shader template does a few more things than would be",1335],["absolutely needed to display an object with a texture. For example,",1335],["it supports Fog, and texture tiling/offset fields in the material.",1335],["Let's simplify the shader to bare minimum, and add more comments:",1335],["Shader \"Unlit/SimpleUnlitTexturedShader\"",1335],["Properties",1335],["// we have removed support for texture tiling/offset,",1335],["// so make them not be displayed in material inspector",1335],["[NoScaleOffset] _MainTex (\"Texture\", 2D) = \"white\" {}",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["// use \"vert\" function as the vertex shader",1335],["pragma vertex vert",1335],["// use \"frag\" function as the pixel (fragment) shader",1335],["pragma fragment frag",1335],["// vertex shader inputs",1335],["struct appdata",1335],["float4 vertex : POSITION; // vertex position",1335],["float2 uv : TEXCOORD0; // texture coordinate",1335],["};",1335],["// vertex shader outputs (\"vertex to fragment\")",1335],["struct v2f",1335],["float2 uv : TEXCOORD0; // texture coordinate",1335],["float4 vertex : SV_POSITION; // clip space position",1335],["};",1335],["// vertex shader",1335],["v2f vert (appdata v)",1335],["v2f o;",1335],["// transform position to clip space",1335],["// (multiply with model*view*projection matrix)",1335],["o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);",1335],["// just pass the texture coordinate",1335],["o.uv = v.uv;",1335],["return o;",1335],["// texture we will sample",1335],["sampler2D _MainTex;",1335],["// pixel shader; returns low precision (\"fixed4\" type)",1335],["// color (\"SV_Target\" semantic)",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// sample texture and return it",1335],["fixed4 col = tex2D(_MainTex, i.uv);",1335],["return col;",1335],["ENDCG",1335],["The Vertex Shader is a program that runs on each vertex of the 3D model. Quite often it does not do anything particularly interesting. Here we just transform vertex position from object space into so called \"clip space\", which is what's used by the GPU to rasterize the object on screen. We also pass the input texture coordinate unmodified - we'll need it to sample the texture in the fragment shader.",1335],["The Fragment Shader is a program that runs on each and every pixel that object occupies on-screen, and is usually used to calculate and output the color of each pixel. Usually there are millions of pixels on the screen, and the fragment shaders are executed",1335],["for all of them! Optimizing fragment shaders is quite an important part of overall game performance work.",1335],["Some variable or function definitions are followed by a Semantic Signifier - for example : POSITION or : SV_Target. These semantics signifiers communicate the \"meaning\" of these variables to the GPU. See the shader semantics page for details.",1335],["When used on a nice model with a nice texture, our simple shader looks pretty good!",1335],["Even simpler single color shader",1335],["Let's simplify the shader even more -- we'll make a shader that draws the whole object in a single",1335],["color. This is not terribly useful, but hey we're learning here.",1335],["Shader \"Unlit/SingleColor\"",1335],["Properties",1335],["// Color property for material inspector, default to white",1335],["_Color (\"Main Color\", Color) = (1,1,1,1)",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["// vertex shader",1335],["// this time instead of using \"appdata\" struct, just spell inputs manually,",1335],["// and instead of returning v2f struct, also just return a single output",1335],["// float4 clip position",1335],["float4 vert (float4 vertex : POSITION) : SV_POSITION",1335],["return mul(UNITY_MATRIX_MVP, vertex);",1335],["// color from the material",1335],["fixed4 _Color;",1335],["// pixel shader, no inputs needed",1335],["fixed4 frag () : SV_Target",1335],["return _Color; // just return it",1335],["ENDCG",1335],["This time instead of using structs for input (appdata) and output (v2f), the shader functions just spell out inputs manually. Both ways work, and which you choose to use depends on your coding style and preference.",1335],["Using mesh normals for fun and profit",1335],["Let's proceed with a shader that displays mesh normals in world space. Without further ado:",1335],["Shader \"Unlit/WorldSpaceNormals\"",1335],["// no Properties block this time!",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["// include file that contains UnityObjectToWorldNormal helper function",1335],["include \"UnityCG.cginc\"",1335],["struct v2f {",1335],["// we'll output world space normal as one of regular (\"texcoord\") interpolators",1335],["half3 worldNormal : TEXCOORD0;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["// vertex shader: takes object space normal as input too",1335],["v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(vertex);",1335],["// UnityCG.cginc file contains function to transform",1335],["// normal from object to world space, use that",1335],["o.worldNormal = UnityObjectToWorldNormal(normal);",1335],["return o;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["fixed4 c = 0;",1335],["// normal is a 3D vector with xyz components; in -1..1",1335],["// range. To display it as color, bring the range into 0..1",1335],["// and put into red, green, blue components",1335],["c.rgb = i.worldNormal*0.5+0.5;",1335],["return c;",1335],["ENDCG",1335],["Besides resulting in pretty colors, normals are used for all sorts of graphics effects -- lighting, reflections, silhouettes and so on.",1335],["In the shader above, we started using one of Unity's built-in shader include files.",1335],["Here, UnityCG.cginc was used which contains a handy function UnityObjectToWorldNormal. We have also used the utility function UnityObjectToClipPos, which transforms the vertex from object space to the screen. This just makes the code easier to read and is more efficient under certain circumstances.",1335],["We've seen that data can be passed from the vertex into fragment shader in so-called \"interpolators\" (or sometimes called \"varyings\"). In HLSL shading language they are typically labeled with TEXCOORDn semantic, and each of them can be up to a 4-component vector (see semantics page for details).",1335],["Also we've learned a simple technique in how to visualize normalized vectors (in -1.0 to +1.0 range) as colors: just multiply them by half and add half. For more vertex data visualization examples, see Visualizaing vertex data.",1335],["Environment reflection using world-space normals",1335],["When a Skybox is used in the scene as a reflection source (see Lighting window),",1335],["then essentially a \"default\" Reflection Probe is created, containing the skybox data.",1335],["A reflection probe is internally a Cubemap texture; we will extend the world-space normals shader above to look into it.",1335],["The code is starting to get a bit involved by now. Of course, if you want shaders that automatically work with lights, shadows, reflections and the rest of the lighting system, it's way easier to use surface shaders. This example is intended to show you how to use parts of the lighting system in a \"manual\" way.",1335],["Shader \"Unlit/SkyReflection\"",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["struct v2f {",1335],["half3 worldRefl : TEXCOORD0;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(vertex);",1335],["// compute world space position of the vertex",1335],["float3 worldPos = mul(_Object2World, vertex).xyz;",1335],["// compute world space view direction",1335],["float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));",1335],["// world space normal",1335],["float3 worldNormal = UnityObjectToWorldNormal(normal);",1335],["// world space reflection vector",1335],["o.worldRefl = reflect(-worldViewDir, worldNormal);",1335],["return o;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// sample the default reflection cubemap, using the reflection vector",1335],["half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.worldRefl);",1335],["// decode cubemap data into actual color",1335],["half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);",1335],["// output it!",1335],["fixed4 c = 0;",1335],["c.rgb = skyColor;",1335],["return c;",1335],["ENDCG",1335],["The example above uses several things from the built-in shader include files:",1335],["unity_SpecCube0, unity_SpecCube0_HDR, Object2World, UNITY_MATRIX_MVP from the",1335],["built-in shader variables. unity_SpecCube0 contains data for the active reflection probe.",1335],["UNITY_SAMPLE_TEXCUBE is a built-in macro to sample a cubemap. Most regular cubemaps are declared and",1335],["used using standard HLSL syntax (samplerCUBE and texCUBE), however the reflection probe cubemaps in Unity are declared in a special way to save on sampler slots. If you don't know what that is, don't worry, just know that in order to use unity_SpecCube0 cubemap you have to use UNITY_SAMPLE_TEXCUBE macro.",1335],["UnityWorldSpaceViewDir function from UnityCG.cginc, and DecodeHDR function from the same file. The latter is used to get actual color from the reflection probe data -- since Unity stores reflection probe cubemap in specially encoded way.",1335],["reflect is just a built-in HLSL function to compute vector reflection around a given normal.",1335],["Environment reflection with a normal map",1335],["Often Normal Maps are used to create additional detail on objects, without creating additional geometry. Let's see how to make a shader that reflects the environment, with a normal map texture.",1335],["Now the math is starting to get really involved, so we'll do it in a few steps. In the shader above, the reflection",1335],["direction was computed per-vertex (in the vertex shader), and the fragment shader was only doing the reflection",1335],["probe cubemap lookup. However once we start using normal maps, the surface normal itself needs to be calculated on a per-pixel basis, which means we also have to compute how the environment is reflected per-pixel!",1335],["So first of all, let's rewrite the shader above to do the same thing, except we will move some of the calculations to the fragment shader, so they are computed per-pixel:",1335],["Shader \"Unlit/SkyReflection Per Pixel\"",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["struct v2f {",1335],["float3 worldPos : TEXCOORD0;",1335],["half3 worldNormal : TEXCOORD1;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(vertex);",1335],["o.worldPos = mul(_Object2World, vertex).xyz;",1335],["o.worldNormal = UnityObjectToWorldNormal(normal);",1335],["return o;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// compute view direction and reflection vector",1335],["// per-pixel here",1335],["half3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));",1335],["half3 worldRefl = reflect(-worldViewDir, i.worldNormal);",1335],["// same as in previous shader",1335],["half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, worldRefl);",1335],["half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);",1335],["fixed4 c = 0;",1335],["c.rgb = skyColor;",1335],["return c;",1335],["ENDCG",1335],["That by itself does not give us much -- the shader looks exactly the same, except now it runs slower since it does more calculations for each and every pixel on screen, instead of only for each of the model's vertices. However, we'll need these calculations really soon. Higher graphics fidelity often requires more complex shaders.",1335],["We'll have to learn a new thing now too; the so-called \"tangent space\". Normal map textures are most often expressed in a coordinate space that can be thought of as \"following the surface\" of the model. In our shader, we will need to to know the tangent space basis vectors, read the normal vector from the texture, transform it into world space, and then do all the math",1335],["from the above shader. Let's get to it!",1335],["Shader \"Unlit/SkyReflection Per Pixel\"",1335],["Properties {",1335],["// normal map texture on the material,",1335],["// default to dummy \"flat surface\" normalmap",1335],["_BumpMap(\"Normal Map\", 2D) = \"bump\" {}",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["struct v2f {",1335],["float3 worldPos : TEXCOORD0;",1335],["// these three vectors will hold a 3x3 rotation matrix",1335],["// that transforms from tangent to world space",1335],["half3 tspace0 : TEXCOORD1; // tangent.x, bitangent.x, normal.x",1335],["half3 tspace1 : TEXCOORD2; // tangent.y, bitangent.y, normal.y",1335],["half3 tspace2 : TEXCOORD3; // tangent.z, bitangent.z, normal.z",1335],["// texture coordinate for the normal map",1335],["float2 uv : TEXCOORD4;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["// vertex shader now also needs a per-vertex tangent vector.",1335],["// in Unity tangents are 4D vectors, with the .w component used to",1335],["// indicate direction of the bitangent vector.",1335],["// we also need the texture coordinate.",1335],["v2f vert (float4 vertex : POSITION, float3 normal : NORMAL, float4 tangent : TANGENT, float2 uv : TEXCOORD0)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(vertex);",1335],["o.worldPos = mul(_Object2World, vertex).xyz;",1335],["half3 wNormal = UnityObjectToWorldNormal(normal);",1335],["half3 wTangent = UnityObjectToWorldDir(tangent.xyz);",1335],["// compute bitangent from cross product of normal and tangent",1335],["half tangentSign = tangent.w * unity_WorldTransformParams.w;",1335],["half3 wBitangent = cross(wNormal, wTangent) * tangentSign;",1335],["// output the tangent space matrix",1335],["o.tspace0 = half3(wTangent.x, wBitangent.x, wNormal.x);",1335],["o.tspace1 = half3(wTangent.y, wBitangent.y, wNormal.y);",1335],["o.tspace2 = half3(wTangent.z, wBitangent.z, wNormal.z);",1335],["o.uv = uv;",1335],["return o;",1335],["// normal map texture from shader properties",1335],["sampler2D _BumpMap;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// sample the normal map, and decode from the Unity encoding",1335],["half3 tnormal = UnpackNormal(tex2D(_BumpMap, i.uv));",1335],["// transform normal from tangent to world space",1335],["half3 worldNormal;",1335],["worldNormal.x = dot(i.tspace0, tnormal);",1335],["worldNormal.y = dot(i.tspace1, tnormal);",1335],["worldNormal.z = dot(i.tspace2, tnormal);",1335],["// rest the same as in previous shader",1335],["half3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));",1335],["half3 worldRefl = reflect(-worldViewDir, worldNormal);",1335],["half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, worldRefl);",1335],["half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);",1335],["fixed4 c = 0;",1335],["c.rgb = skyColor;",1335],["return c;",1335],["ENDCG",1335],["Phew, that was quite involved. But look, normal mapped reflections!",1335],["Adding more textures",1335],["Let's add more textures to the normal-mapped, sky-reflecting shader above. We'll add the base color texture, seen in the first unlit example, and an occlusion map to darken the cavities.",1335],["Shader \"Unlit/More Textures\"",1335],["Properties {",1335],["// three textures we'll use in the material",1335],["_MainTex(\"Base texture\", 2D) = \"white\" {}",1335],["_OcclusionMap(\"Occlusion\", 2D) = \"white\" {}",1335],["_BumpMap(\"Normal Map\", 2D) = \"bump\" {}",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["// exactly the same as in previous shader",1335],["struct v2f {",1335],["float3 worldPos : TEXCOORD0;",1335],["half3 tspace0 : TEXCOORD1;",1335],["half3 tspace1 : TEXCOORD2;",1335],["half3 tspace2 : TEXCOORD3;",1335],["float2 uv : TEXCOORD4;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["v2f vert (float4 vertex : POSITION, float3 normal : NORMAL, float4 tangent : TANGENT, float2 uv : TEXCOORD0)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(vertex);",1335],["o.worldPos = mul(_Object2World, vertex).xyz;",1335],["half3 wNormal = UnityObjectToWorldNormal(normal);",1335],["half3 wTangent = UnityObjectToWorldDir(tangent.xyz);",1335],["half tangentSign = tangent.w * unity_WorldTransformParams.w;",1335],["half3 wBitangent = cross(wNormal, wTangent) * tangentSign;",1335],["o.tspace0 = half3(wTangent.x, wBitangent.x, wNormal.x);",1335],["o.tspace1 = half3(wTangent.y, wBitangent.y, wNormal.y);",1335],["o.tspace2 = half3(wTangent.z, wBitangent.z, wNormal.z);",1335],["o.uv = uv;",1335],["return o;",1335],["// textures from shader properties",1335],["sampler2D _MainTex;",1335],["sampler2D _OcclusionMap;",1335],["sampler2D _BumpMap;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// same as from previous shader...",1335],["half3 tnormal = UnpackNormal(tex2D(_BumpMap, i.uv));",1335],["half3 worldNormal;",1335],["worldNormal.x = dot(i.tspace0, tnormal);",1335],["worldNormal.y = dot(i.tspace1, tnormal);",1335],["worldNormal.z = dot(i.tspace2, tnormal);",1335],["half3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));",1335],["half3 worldRefl = reflect(-worldViewDir, worldNormal);",1335],["half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, worldRefl);",1335],["half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);",1335],["fixed4 c = 0;",1335],["c.rgb = skyColor;",1335],["// modulate sky color with the base texture, and the occlusion map",1335],["fixed3 baseColor = tex2D(_MainTex, i.uv).rgb;",1335],["fixed occlusion = tex2D(_OcclusionMap, i.uv).r;",1335],["c.rgb *= baseColor;",1335],["c.rgb *= occlusion;",1335],["return c;",1335],["ENDCG",1335],["Balloon cat is looking good!",1335],["Texturing shader examples",1335],["Procedural checkerboard pattern",1335],["Here's a shader that outputs a checkerboard pattern based on texture coordinates of a mesh:",1335],["Shader \"Unlit/Checkerboard\"",1335],["Properties",1335],["_Density (\"Density\", Range(2,50)) = 30",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["struct v2f",1335],["float2 uv : TEXCOORD0;",1335],["float4 vertex : SV_POSITION;",1335],["};",1335],["float _Density;",1335],["v2f vert (float4 pos : POSITION, float2 uv : TEXCOORD0)",1335],["v2f o;",1335],["o.vertex = UnityObjectToClipPos(pos);",1335],["o.uv = uv * _Density;",1335],["return o;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["float2 c = i.uv;",1335],["c = floor(c) / 2;",1335],["float checker = frac(c.x + c.y) * 2;",1335],["return checker;",1335],["ENDCG",1335],["The density slider in the Properties block controls how dense the checkerboard is. In the vertex shader, the mesh UVs are multiplied by the density value to take them from a range of 0 to 1 to a range of 0 to density. Let's say the density was set to 30 - this will make i.uv input into the fragment shader contain floating point values from zero to 30 for various places of the mesh being rendered.",1335],["Then the fragment shader code takes only the integer part of the input coordinate using HLSL's built-in floor function, and divides it by two. Recall that the input coordinates were numbers from 0 to 30; this makes them all be \"quantized\" to values of 0, 0.5, 1, 1.5, 2, 2.5, and so on. This was done on both the x and y components of the input coordinate.",1335],["Next up, we add these x and y coordinates together (each of them only having possible values of 0, 0.5, 1, 1.5, ...) and only take the fractional part using another built-in HLSL function, frac. Result of this can only be either 0.0 or 0.5. We then multiply it by two to make it either 0.0 or 1.0, and output as a color (this results in black or white color respectively).",1335],["Tri-planar texturing",1335],["For complex or procedural meshes, instead of texturing them using the regular UV coordinates, it is sometimes useful to just \"project\" texture onto the object from three primary directions. This is called \"tri-planar\" texturing. The idea is to use surface normal to weight the three texture directions. Here's the shader:",1335],["Shader \"Unlit/Triplanar\"",1335],["Properties",1335],["_MainTex (\"Texture\", 2D) = \"white\" {}",1335],["_Tiling (\"Tiling\", Float) = 1.0",1335],["_OcclusionMap(\"Occlusion\", 2D) = \"white\" {}",1335],["SubShader",1335],["Pass",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["struct v2f",1335],["half3 objNormal : TEXCOORD0;",1335],["float3 coords : TEXCOORD1;",1335],["float2 uv : TEXCOORD2;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["float _Tiling;",1335],["v2f vert (float4 pos : POSITION, float3 normal : NORMAL, float2 uv : TEXCOORD0)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(pos);",1335],["o.coords = pos.xyz * _Tiling;",1335],["o.objNormal = normal;",1335],["o.uv = uv;",1335],["return o;",1335],["sampler2D _MainTex;",1335],["sampler2D _OcclusionMap;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// use absolute value of normal as texture weights",1335],["half3 blend = abs(i.objNormal);",1335],["// make sure the weights sum up to 1 (divide by sum of x+y+z)",1335],["blend /= dot(blend,1.0);",1335],["// read the three texture projections, for x,y,z axes",1335],["fixed4 cx = tex2D(_MainTex, i.coords.yz);",1335],["fixed4 cy = tex2D(_MainTex, i.coords.xz);",1335],["fixed4 cz = tex2D(_MainTex, i.coords.xy);",1335],["// blend the textures based on weights",1335],["fixed4 c = cx * blend.x + cy * blend.y + cz * blend.z;",1335],["// modulate by regular occlusion map",1335],["c *= tex2D(_OcclusionMap, i.uv);",1335],["return c;",1335],["ENDCG",1335],["Calculating lighting",1335],["Typically when you want a shader that works with Unity's lighting pipeline, you",1335],["would write a surface shader. This does most of the \"heavy lifting\"",1335],["for you, and your shader code just needs to define surface properties.",1335],["However in some cases you want to bypass the standard surface shader path; either because",1335],["you want to only support some limited subset of whole lighting pipeline for performance reasons,",1335],["or you want to do custom things that aren't quite \"standard lighting\". The following examples",1335],["will show how to get to the lighting data from manually-written vertex and fragment shaders.",1335],["Looking at the code generated by surface shaders (via shader inspector) is also",1335],["a good learning resource.",1335],["Simple diffuse lighting",1335],["The first thing we need to do is to indicate that our shader does in fact need lighting information passed to it. Unity's rendering pipeline supports various ways of rendering; here we'll be using the default forward rendering one.",1335],["We'll start by only supporting one directional light. Forward rendering in Unity works by rendering the main directional light, ambient, lightmaps and reflections in a single pass called ForwardBase. In the shader, this is indicated by adding a pass tag: Tags {\"LightMode\"=\"ForwardBase\"}. This will make directional light data be passed into shader via some built-in variables.",1335],["Here's the shader that computes simple diffuse lighting per vertex, and uses a single main texture:",1335],["Shader \"Lit/Simple Diffuse\"",1335],["Properties",1335],["[NoScaleOffset] _MainTex (\"Texture\", 2D) = \"white\" {}",1335],["SubShader",1335],["Pass",1335],["// indicate that our pass is the \"base\" pass in forward",1335],["// rendering pipeline. It gets ambient and main directional",1335],["// light data set up; light direction in _WorldSpaceLightPos0",1335],["// and color in _LightColor0",1335],["Tags {\"LightMode\"=\"ForwardBase\"}",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\" // for UnityObjectToWorldNormal",1335],["include \"UnityLightingCommon.cginc\" // for _LightColor0",1335],["struct v2f",1335],["float2 uv : TEXCOORD0;",1335],["fixed4 diff : COLOR0; // diffuse lighting color",1335],["float4 vertex : SV_POSITION;",1335],["};",1335],["v2f vert (appdata_base v)",1335],["v2f o;",1335],["o.vertex = UnityObjectToClipPos(v.vertex);",1335],["o.uv = v.texcoord;",1335],["// get vertex normal in world space",1335],["half3 worldNormal = UnityObjectToWorldNormal(v.normal);",1335],["// dot product between normal and light direction for",1335],["// standard diffuse (Lambert) lighting",1335],["half nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));",1335],["// factor in the light color",1335],["o.diff = nl * _LightColor0;",1335],["return o;",1335],["sampler2D _MainTex;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["// sample texture",1335],["fixed4 col = tex2D(_MainTex, i.uv);",1335],["// multiply by lighting",1335],["col *= i.diff;",1335],["return col;",1335],["ENDCG",1335],["This makes the object react to light direction - parts of it facing the light are illuminated, and parts facing away are not illuminated at all.",1335],["Diffuse lighting with ambient",1335],["The example above does not take any ambient lighting or light probes into account. Let's fix this!",1335],["It turns out we can do this by adding just a single line of code. Both ambient and light probe data is passed to shaders in Spherical Harmonics form, and ShadeSH9 function from UnityCG.cginc include file does all the work of evaluating it, given a world space normal.",1335],["Shader \"Lit/Diffuse With Ambient\"",1335],["Properties",1335],["[NoScaleOffset] _MainTex (\"Texture\", 2D) = \"white\" {}",1335],["SubShader",1335],["Pass",1335],["Tags {\"LightMode\"=\"ForwardBase\"}",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["include \"UnityLightingCommon.cginc\"",1335],["struct v2f",1335],["float2 uv : TEXCOORD0;",1335],["fixed4 diff : COLOR0;",1335],["float4 vertex : SV_POSITION;",1335],["};",1335],["v2f vert (appdata_base v)",1335],["v2f o;",1335],["o.vertex = UnityObjectToClipPos(v.vertex);",1335],["o.uv = v.texcoord;",1335],["half3 worldNormal = UnityObjectToWorldNormal(v.normal);",1335],["half nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));",1335],["o.diff = nl * _LightColor0;",1335],["// the only difference from previous shader:",1335],["// in addition to the diffuse lighting from the main light,",1335],["// add illumination from ambient or light probes",1335],["// ShadeSH9 function from UnityCG.cginc evaluates it,",1335],["// using world space normal",1335],["o.diff.rgb += ShadeSH9(half4(worldNormal,1));",1335],["return o;",1335],["sampler2D _MainTex;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["fixed4 col = tex2D(_MainTex, i.uv);",1335],["col *= i.diff;",1335],["return col;",1335],["ENDCG",1335],["This shader is in fact starting to look very similar to the built-in Legacy Diffuse shader!",1335],["Implementing shadow casting",1335],["Our shader currently can neither receive nor cast shadows. Let's implement shadow casting first.",1335],["In order to cast shadows, a shader has to have a ShadowCaster pass type in any of its subshaders or any fallback. The ShadowCaster pass is used to render the object into the shadowmap, and typically it is fairly simple - the vertex shader only needs to evaluate the vertex position, and the fragment shader pretty much does not do anything. The shadowmap is only the depth buffer, so even the color output by the fragment shader does not really matter.",1335],["This means that for a lot of shaders, the shadow caster pass is going to be almost exactly the same (unless object has custom vertex shader based deformations, or has alpha cutout / semitransparent parts). The easiest way to pull it in is via UsePass shader command:",1335],["Pass",1335],["// regular lighting pass",1335],["// pull in shadow caster from VertexLit built-in shader",1335],["UsePass \"Legacy Shaders/VertexLit/SHADOWCASTER\"",1335],["However we're learning here, so let's do the same thing \"by hand\" so to speak. For shorter code,",1335],["we've replaced the lighting pass (\"ForwardBase\") with code that only does untextured ambient. Below it, there's a \"ShadowCaster\" pass that makes the object support shadow casting.",1335],["Shader \"Lit/Shadow Casting\"",1335],["SubShader",1335],["// very simple lighting pass, that only does non-textured ambient",1335],["Pass",1335],["Tags {\"LightMode\"=\"ForwardBase\"}",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["struct v2f",1335],["fixed4 diff : COLOR0;",1335],["float4 vertex : SV_POSITION;",1335],["};",1335],["v2f vert (appdata_base v)",1335],["v2f o;",1335],["o.vertex = UnityObjectToClipPos(v.vertex);",1335],["half3 worldNormal = UnityObjectToWorldNormal(v.normal);",1335],["// only evaluate ambient",1335],["o.diff.rgb = ShadeSH9(half4(worldNormal,1));",1335],["o.diff.a = 1;",1335],["return o;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["return i.diff;",1335],["ENDCG",1335],["// shadow caster rendering pass, implemented manually",1335],["// using macros from UnityCG.cginc",1335],["Pass",1335],["Tags {\"LightMode\"=\"ShadowCaster\"}",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["pragma multi_compile_shadowcaster",1335],["include \"UnityCG.cginc\"",1335],["struct v2f {",1335],["V2F_SHADOW_CASTER;",1335],["};",1335],["v2f vert(appdata_base v)",1335],["v2f o;",1335],["TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)",1335],["return o;",1335],["float4 frag(v2f i) : SV_Target",1335],["SHADOW_CASTER_FRAGMENT(i)",1335],["ENDCG",1335],["Now there's a plane underneath, using a regular built-in Diffuse shader, so that we can see",1335],["our shadows working (remember, our current shader does not support receiving shadows yet!).",1335],["We've used the #pragma multi_compile_shadowcaster directive. This causes the shader to be compiled into several variants with different preprocessor macros defined for each (see",1335],["multiple shader variants page for details). When rendering into the shadowmap, the cases of point lights vs other light types need slightly different shader code, that's why this directive is needed.",1335],["Receiving shadows",1335],["Implementing support for receiving shadows will require compiling the base lighting pass into",1335],["several variants, to handle cases of \"directional light without shadows\" and \"directional light with shadows\" properly. #pragma multi_compile_fwdbase directive does this (see",1335],["multiple shader variants for details). In fact it does a lot more:",1335],["it also compiles variants for the different lightmap types, Enlighten Realtime Global Illumination being on or off etc. Currently we don't need all that, so we'll explicitly skip these variants.",1335],["Then to get actual shadowing computations, we'll #include \"AutoLight.cginc\" shader include file and use SHADOW_COORDS, TRANSFER_SHADOW, SHADOW_ATTENUATION macros from it.",1335],["Here's the shader:",1335],["Shader \"Lit/Diffuse With Shadows\"",1335],["Properties",1335],["[NoScaleOffset] _MainTex (\"Texture\", 2D) = \"white\" {}",1335],["SubShader",1335],["Pass",1335],["Tags {\"LightMode\"=\"ForwardBase\"}",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["include \"UnityCG.cginc\"",1335],["include \"Lighting.cginc\"",1335],["// compile shader into multiple variants, with and without shadows",1335],["// (we don't care about any lightmaps yet, so skip these variants)",1335],["pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight",1335],["// shadow helper functions and macros",1335],["include \"AutoLight.cginc\"",1335],["struct v2f",1335],["float2 uv : TEXCOORD0;",1335],["SHADOW_COORDS(1) // put shadows data into TEXCOORD1",1335],["fixed3 diff : COLOR0;",1335],["fixed3 ambient : COLOR1;",1335],["float4 pos : SV_POSITION;",1335],["};",1335],["v2f vert (appdata_base v)",1335],["v2f o;",1335],["o.pos = UnityObjectToClipPos(v.vertex);",1335],["o.uv = v.texcoord;",1335],["half3 worldNormal = UnityObjectToWorldNormal(v.normal);",1335],["half nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));",1335],["o.diff = nl * _LightColor0.rgb;",1335],["o.ambient = ShadeSH9(half4(worldNormal,1));",1335],["// compute shadows data",1335],["TRANSFER_SHADOW(o)",1335],["return o;",1335],["sampler2D _MainTex;",1335],["fixed4 frag (v2f i) : SV_Target",1335],["fixed4 col = tex2D(_MainTex, i.uv);",1335],["// compute shadow attenuation (1.0 = fully lit, 0.0 = fully shadowed)",1335],["fixed shadow = SHADOW_ATTENUATION(i);",1335],["// darken light's illumination with shadow, keep ambient intact",1335],["fixed3 lighting = i.diff * shadow + i.ambient;",1335],["col.rgb *= lighting;",1335],["return col;",1335],["ENDCG",1335],["// shadow casting support",1335],["UsePass \"Legacy Shaders/VertexLit/SHADOWCASTER\"",1335],["Look, we have shadows now!",1335],["Other shader examples",1335],["Fog",1335],["Shader \"Custom/TextureCoordinates/Fog\" {",1335],["SubShader {",1335],["Pass {",1335],["CGPROGRAM",1335],["pragma vertex vert",1335],["pragma fragment frag",1335],["//Needed for fog variation to be compiled.",1335],["pragma multi_compile_fog",1335],["include \"UnityCG.cginc\"",1335],["struct vertexInput {",1335],["float4 vertex : POSITION;",1335],["float4 texcoord0 : TEXCOORD0;",1335],["};",1335],["struct fragmentInput{",1335],["float4 position : SV_POSITION;",1335],["float4 texcoord0 : TEXCOORD0;",1335],["//Creates a variable that contains fog coordinates. The parameter must be a free TEXCOORD, for example 1 if TEXCOORD1 is free.",1335],["UNITY_FOG_COORDS(1)",1335],["};",1335],["fragmentInput vert(vertexInput i){",1335],["fragmentInput o;",1335],["o.position = UnityObjectToClipPos(i.vertex);",1335],["o.texcoord0 = i.texcoord0;",1335],["//Compute fog amount from clip space position.",1335],["UNITY_TRANSFER_FOG(o,o.position);",1335],["return o;",1335],["fixed4 frag(fragmentInput i) : SV_Target {",1335],["fixed4 color = fixed4(i.texcoord0.xy,0,0);",1335],["//Apply fog (additive pass are automatically handled)",1335],["UNITY_APPLY_FOG(i.fogCoord, color);",1335],["//to handle custom fog color another option would have been",1335],["//#ifdef UNITY_PASS_FORWARDADD",1335],["// UNITY_APPLY_FOG_COLOR(i.fogCoord, color, float4(0,0,0,0));",1335],["//#else",1335],["// fixed4 myCustomColor = fixed4(0,0,1,0);",1335],["// UNITY_APPLY_FOG_COLOR(i.fogCoord, color, myCustomColor);",1335],["//#endif",1335],["return color;",1335],["ENDCG",1335],["Providing vertex data to vertex programs",1336],["For Cg/HLSL vertex programs, the",1336],["Mesh vertex data is passed as inputs to the vertex",1336],["shader function. Each input needs to have semantic speficied for it: for example, POSITION input is the vertex position, and NORMAL is the vertex normal.",1336],["Often, vertex data inputs are declared in a structure, instead of",1336],["listing them one by one. Several commonly used vertex structures",1336],["are defined in UnityCG.cginc include file,",1336],["and in most cases it's enough just to use those. The structures are:",1336],["appdata_base: position, normal and one texture coordinate.",1336],["appdata_tan: position, tangent, normal and one texture coordinate.",1336],["appdata_full: position, tangent, normal, four texture coordinates and color.",1336],["Example:** This shader colors the mesh based on its normals, and uses appdata_base as vertex program input:",1336],["Shader \"VertexInputSimple\" {",1336],["SubShader {",1336],["Pass {",1336],["CGPROGRAM",1336],["pragma vertex vert",1336],["pragma fragment frag",1336],["include \"UnityCG.cginc\"",1336],["struct v2f {",1336],["float4 pos : SV_POSITION;",1336],["fixed4 color : COLOR;",1336],["};",1336],["v2f vert (appdata_base v)",1336],["v2f o;",1336],["o.pos = UnityObjectToClipPos(v.vertex);",1336],["o.color.xyz = v.normal * 0.5 + 0.5;",1336],["o.color.w = 1.0;",1336],["return o;",1336],["fixed4 frag (v2f i) : SV_Target { return i.color; }",1336],["ENDCG",1336],["To access different vertex data, you need to declare the",1336],["vertex structure yourself, or add input parameters to the",1336],["vertex shader. Vertex data is identified by Cg/HLSL",1336],["semantics, and must be from the",1336],["following list:",1336],["POSITION is the vertex position, typically a float3 or float4.",1336],["NORMAL is the vertex normal, typically a float3.",1336],["TEXCOORD0 is the first UV coordinate, typically float2, float3 or float4.",1336],["TEXCOORD1, TEXCOORD2 and TEXCOORD3 are the 2nd, 3rd and 4th UV coordinates, respectively.",1336],["TANGENT is the tangent vector (used for normal mapping), typically a float4.",1336],["COLOR is the per-vertex color, typically a float4.",1336],["When the mesh data contains fewer components than are needed by the vertex",1336],["shader input, the rest are filled with zeroes, except for the .w",1336],["component which defaults to 1. For example, mesh texture coordinates",1336],["are often 2D vectors with just x and y components. If a vertex",1336],["shader declares a float4 input with TEXCOORD0 semantic, the",1336],["value received by the vertex shader will contain (x,y,0,1).",1336],["For examples of using these techniques to visualize vertex data in the Built-in Render Pipeline, see Visualizing vertex data.",1336],["ShaderLab command: ZClip",1337],["Sets the GPU's depth clip mode, which determines how the GPU handles fragments that are outside of the near and far planes.",1337],["Setting the GPU's depth clip mode to clamp can be useful for stencil shadow rendering; it means that there is no need for special case handling when the geometry goes beyond the far plane, which results in fewer rendering operations. However, it can result in incorrect Z ordering.",1337],["Render pipeline compatibility",1337],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1337],["ZClip Yes Yes Yes Yes ",1337],["Usage",1337],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1337],["Signature Example syntax Function ",1337],["ZClip [enabled] ZClip True Sets the depth clip mode. ",1337],["Valid parameter values",1337],["Parameter Value Function ",1337],["enabled True Sets the depth clip mode to clip.This is the default setting. ",1337],["False Sets the depth clip mode to clamp.Fragments closer than the near plane are at the near plane exactly, and fragments further away than the far plane are at the far plane exactly. ",1337],["Examples",1337],["This example code demonstrates the syntax for using this command in a Pass block.",1337],["Shader \"Examples/CommandExample\"",1337],["SubShader",1337],["// The rest of the code that defines the SubShader goes here.",1337],["Pass",1337],["// Sets the GPU's depth clip mode to clamp for this Pass",1337],["// You would typically do this if you are rendering stencil shadows",1337],["ZClip False",1337],["// The rest of the code that defines the Pass goes here.",1337],["This example code demonstrates the syntax for using this command in a SubShader block.",1337],["Shader \"Examples/CommandExample\"",1337],["SubShader",1337],["// Sets the GPU's depth clip mode to clamp for this SubShader",1337],["// You would typically do this if you are rendering stencil shadows",1337],["ZClip False",1337],["// The rest of the code that defines the SubShader goes here.",1337],["Pass",1337],["// The rest of the code that defines the Pass goes here.",1337],["ShaderLab command: ZTest",1338],["Sets the conditions under which geometry passes or fails depth testing.",1338],["Depth testing allows GPUs that have \"Early-Z\" functionality to reject geometry early in the pipeline, and also ensures correct ordering of the geometry. You can change the conditions of depth testing to achieve visual effects such as object occlusion.",1338],["Render pipeline compatibility",1338],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1338],["ZTest Yes Yes Yes Yes ",1338],["Usage",1338],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1338],["Signature Example syntax Function ",1338],["ZTest [operation] ZTest Less Set the conditions under which geometry passes or fails depth testing. ",1338],["Valid parameter values",1338],["Parameter Value Function ",1338],["operation Less Draw geometry that is in front of existing geometry. Do not draw geometry that is at the same distance as or behind existing geometry. ",1338],["LEqual Draw geometry that is in front of or at the same distance as existing geometry. Do not draw geometry that is behind existing geometry.This is the default value. ",1338],["Equal Draw geometry that is at the same distance as existing geometry. Do not draw geometry that is in front of or behind existing geometry. ",1338],["GEqual Draw geometry that is behind or at the same distance as existing geometry. Do not draw geometry that is in front of existing geometry. ",1338],["Greater Draw geometry that is behind existing geometry. Do not draw geometry that is at the same distance as or in front of existing geometry. ",1338],["NotEqual Draw geometry that is not at the same distance as existing geometry. Do not draw geometry that is at the same distance as existing geometry. ",1338],["Always No depth testing occurs. Draw all geometry, regardless of distance. ",1338],["Examples",1338],["This example code demonstrates the syntax for using this command in a Pass block.",1338],["Shader \"Examples/CommandExample\"",1338],["SubShader",1338],["// The rest of the code that defines the SubShader goes here.",1338],["Pass",1338],["// Sets the depth test operation to Equal for all pixels in this Pass",1338],["// You would typically do this if you want to render the geometry exactly where already rendered geometry is",1338],["ZTest Equal",1338],["// The rest of the code that defines the Pass goes here.",1338],["This example code demonstrates the syntax for using this command in a SubShader block.",1338],["Shader \"Examples/CommandExample\"",1338],["SubShader",1338],["// Sets the depth test operation to Equal for all pixels in this Pass",1338],["// You would typically do this if you want to render the geometry exactly where already rendered geometry is",1338],["ZTest Equal",1338],["// The rest of the code that defines the SubShader goes here.",1338],["Pass",1338],["// The rest of the code that defines the Pass goes here.",1338],["ShaderLab command: ZWrite",1339],["Sets whether the depth buffer contents are updated during rendering. Normally, ZWrite is enabled for opaque objects and disabled for semi-transparent ones.",1339],["Disabling ZWrite can lead to incorrect depth ordering. In this case, you need to sort geometry on the CPU.",1339],["Render pipeline compatibility",1339],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP ",1339],["ZWrite Yes Yes Yes Yes ",1339],["Usage",1339],["This command makes a change to the render state. Use it in a Pass block to set the render state for that Pass, or use it in a SubShader block to set the render state for all Passes in that SubShader.",1339],["Signature Example syntax Function ",1339],["ZWrite [state] ZWrite Off Enables or disables writing to the depth buffer. ",1339],["Valid parameter values",1339],["Parameter Value Function ",1339],["state On Enables writing to the depth buffer. ",1339],["Off Disables writing to the depth buffer. ",1339],["Examples",1339],["This example code demonstrates the syntax for using this command in a Pass block.",1339],["Shader \"Examples/CommandExample\"",1339],["SubShader",1339],["// The rest of the code that defines the SubShader goes here.",1339],["Pass",1339],["// Disables writing to the depth buffer for this Pass",1339],["ZWrite Off",1339],["// The rest of the code that defines the Pass goes here.",1339],["This example code demonstrates the syntax for using this command in a SubShader block.",1339],["Shader \"Examples/CommandExample\"",1339],["SubShader",1339],["// Disables writing to the depth buffer for this SubShader",1339],["ZWrite Off",1339],["// The rest of the code that defines the SubShader goes here.",1339],["Pass",1339],["// The rest of the code that defines the Pass goes here.",1339],["Smart merge",1340],["Use the UnityYAMLMerge tool to merge scene and prefab files in a semantically correct way. The tool can be accessed from the command line and is also available to third-party version control software.",1340],["Setting up smart merging in Unity",1340],["In the Version Control project settings (menu: Edit > Project Settings > Version Control), when you select a third-party version control tool in the Mode field, for example Perforce or PlasticSCM, the Smart Merge is displayed. The menu has the following options:",1340],["Off**: use only the default merge tool set in the preferences with no smart merging.",1340],["Premerge**: enable smart merging, accept clean merges. Unclean merges will create premerged versions of base, theirs and mine versions of the file. Then, use these with the default merge tool.",1340],["Ask**: enable smart merging but when a conflict occurs, show a dialog to let the user resolve it (this is the default setting).",1340],["Setting up UnityYAMLMerge for use with third-party tools",1340],["The UnityYAMLMerge tool is shipped with the Unity editor; assuming Unity is installed in the standard location, the path to UnityYAMLMerge will be:",1340],["C:\\Program Files\\Unity\\Editor\\Data\\Tools\\UnityYAMLMerge.exe",1340],["or",1340],["C:\\Program Files (x86)\\Unity\\Editor\\Data\\Tools\\UnityYAMLMerge.exe",1340],["...on Windows and",1340],["/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge",1340],["...on Mac OSX (use the Show Package Contents command from the Finder to access this folder).",1340],["UnityYAMLMerge is shipped with a default fallback file (called mergespecfile.txt, also in the Tools folder) that specifies how it should proceed with unresolved conflicts or unknown files. This also allows you to use it as the main merge tool for version control systems (such as git) that don't automatically select merge tools based on file extensions. The most common tools are already listed by default in mergespecfile.txt but you can edit this file to add new tools or change options.",1340],["You can run UnityYAMLMerge as a standalone tool from the command line (you can see full usage instructions by running it without any arguments). Setup instructions for common version control systems are given below.",1340],["P4V",1340],["Go to Preferences > Merge.",1340],["Select Other application.",1340],["Click the Add button.",1340],["In the extension field, type .unity.",1340],["In the Application field, type the path to the UnityYAMLMerge tool (see above).",1340],["In the Arguments field, type merge -p %b %1 %2 %r",1340],["Click Save.",1340],["Then, follow the same procedure to add the .prefab extension.",1340],["Git",1340],["Add the following text to your .git or .gitconfig file:",1340],["[merge]",1340],["tool = unityyamlmerge",1340],["[mergetool \"unityyamlmerge\"]",1340],["trustExitCode = false",1340],["cmd = '' merge -p \"$BASE\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"",1340],["Mercurial",1340],["Add the following text to your .hgrc file:",1340],["[merge-patterns]",1340],[".unity = unityyamlmerge",1340],[".prefab = unityyamlmerge",1340],["[merge-tools]",1340],["unityyamlmerge.executable = ",1340],["unityyamlmerge.args = merge -p --force $base $other $local $output",1340],["unityyamlmerge.checkprompt = True",1340],["unityyamlmerge.premerge = False",1340],["unityyamlmerge.binary = False",1340],["SVN",1340],["Add the following to your ~/.subversion/config file:",1340],["[helpers]",1340],["merge-tool-cmd = ",1340],["TortoiseGit",1340],["Go to Preferences > Diff Viewer > Merge Tool and click the Advanced button.",1340],["In the popup, type .unity in the extension field.",1340],["In the External Program field type:",1340],[" merge -p %base %theirs %mine %merged",1340],["Then, follow the same procedure to add the .prefab extension.",1340],["PlasticSCM",1340],["Go to Preferences > Merge Tools and click the Add button.",1340],["Select External merge tool.",1340],["Select Use with files that match the following pattern.",1340],["Add the .unity extension.",1340],["Enter the command:",1340],[" merge -p \"@basefile\" \"@sourcefile\" \"@destinationfile\" \"@output\"",1340],["Then, follow the same procedure to add the .prefab extension.",1340],["SourceTree",1340],["Go to Tools > Options > Diff.",1340],["Select Custom in the Merge Tool dropdown.",1340],["Type the path to UnityYAMLMerge in the Merge Command field.",1340],["Type merge -p $BASE $REMOTE $LOCAL $MERGED in the Arguments field.",1340],["Configuring mergerules.txt",1340],["To customize how UnityYAMLMerge merges files, configure the mergerules.txt file. This is available in the Editor/Data/Tools folder of your Unity installation.",1340],["The various configuration options are as follows.",1340],["Arrays",1340],["The arrays configuration section tells UnityYAMLMerge to treat the specified path as an array; either as a \"set\" with a key value, or as a \"plain\" array without key values. The default for all arrays is to do a hybrid mode and try to match with some known heuristics.",1340],["<mode> is one of \"set\" or \"plain\"",1340],["Example (as per default mergerules file)",1340],["[arrays]",1340],["set *.GameObject.m_Component *.fileID",1340],["set *.Prefab.m_Modification.m_Modifications target.fileID target.guid propertyPath",1340],["plain *.MeshRenderer.m_Materials",1340],["plain *.Renderer.m_Materials",1340],["Exclusions",1340],["The exclusions configuration section indicates which paths to exclude from merging. If both sides have been modified, they are then treated as a conflict and will show up for user input.",1340],["<mode> is one of \"include\", \"exclude\", \"includeIfContains\", \"excludeIfContains\"",1340],["Example (as per default mergerules file)",1340],["[exclusions]",1340],["exclude .MeshRenderer.m_Materials.",1340],["exclude *.SpriteRenderer.m_Materials",1340],["exclude *.SpriteRenderer.m_Color",1340],["include *.ParticleSystem.InitialModule",1340],["exclude .ParticleSystem.",1340],["exclude .ParticleSystem.InitialModule.",1340],["excludeDepend *.MonoBehaviour m_Script ^m_",1340],["excludeIfContains .MonoBehaviour. x y z",1340],["excludeIfContains .MonoBehaviour. r g b",1340],["Comparisons",1340],["The comparisons section takes into account negligible differences between float values to ignore per user settings. When enabled, floating point comparison is done relatively to account for relative error. You can configure comparison in the following ways:",1340],["\"float\" <float value to compare> (This sets epsilon to a default value close to machine epsilon)",1340],["\"float\" <float value to compare> <relative comparison value and absolute cutoff>",1340],["\"float\" <float value to compare> <relative comparison value> <absolute comparison cutoff>",1340],["The relative comparison value determines epsilon and how comparison will scale with the size of the floats’ relative error. The absolute comparison cutoff determines at which point float comparison switches from absolute to relative from zero (on a graph).",1340],["Note**: Comparison values should be between float epsilon (~0.00000011921) and 1.0",1340],["Example",1340],["[comparisons]",1340],["float *.Transform.m_LocalPosition.x 0.0000005",1340],["float *.Transform.m_LocalPosition.y 0.0000005",1340],["float *.Transform.m_LocalPosition.z 0.0000005",1340],["float *.Transform.m_LocalRotation.x 0.00005 0.001",1340],["float *.Transform.m_LocalRotation.y",1340],["float *.Transform.m_LocalRotation.z 0.00005 0.001",1340],["float *.Transform.m_LocalRotation.w",1340],["Sparse Textures",1341],["Sparse textures (also known as \"tiled textures\" or \"mega-textures\") are textures that are too large to fit in graphic memory in their entirety. To handle them, Unity breaks the main texture down into smaller rectangular sections known as \"tiles\". Individual tiles can then be loaded as necessary. For example, if the camera can only see a small area of a sparse texture, then only the tiles that are currently visible need to be in memory.",1341],["Aside from the tiling, a sparse texture behaves like any other texture in usage. Shaders can use them without special modification and they can have mipmaps, use all texture filtering modes, etc. If a particular tile cannot be loaded for some reason then the result is undefined; some GPUs show a black area where the missing tile should be but this behaviour is not standardised.",1341],["Not all hardware and platforms support sparse textures. For example, on DirectX systems they require DX11.2 (Windows 8.1) and a fairly recent GPU. On OpenGL they require ARB_sparse_texture extension support. Sparse textures only support non-compressed texture formats.",1341],["See the SparseTexture script reference page for further details about handling sparse textures from scripts.",1341],["Example Project",1341],["A minimal example project for sparse textures is available here.",1341],["The example shows a simple procedural texture pattern and lets you move the camera to view different parts of it. Note that the project requires a recent GPU and a DirectX 11.2 (Windows 8.1) system, or using OpenGL with ARB_sparse_texture support.",1341],["Special folder names",1342],["You can usually choose any name you like for the folders you create to organize your Unity project. However, there are folder names that Unity reserves for special purposes. For example, you must place Editor scripts in a folder called Editor for them to work correctly.",1342],["This page contains the full list of special folder names used by Unity.",1342],["",1342],["Assets",1342],["The Assets folder is the main folder that contains the Assets used by a Unity project. The contents of the Project window in the Editor correspond directly to the contents of the Assets folder. Most API functions assume that everything is located in the Assets folder and don't require it to be mentioned explicitly. However, some functions do need to have the Assets folder included as part of a pathname (for example, certain functions in the AssetDatabase class).",1342],["",1342],["Editor",1342],["Editor scripts add functionality to Unity during development but aren't available in builds at runtime. Scripts in an Editor folder run as Editor scripts, not runtime scripts.",1342],["You can have multiple Editor folders placed anywhere inside the Assets folder. Place your Editor scripts inside an Editor folder or a subfolder within it.",1342],["The exact location of an Editor folder affects the time at which its scripts are compiled relative to other scripts. See documentation on Special Folders and Script Compilation Order for a full description.",1342],["Use the EditorGUIUtility.Load function in Editor scripts to load Assets from a Resources folder within an Editor folder. These Assets are only loaded through Editor scripts and are stripped from builds.",1342],["Note:** Unity doesn't allow components derived from MonoBehaviour to be assigned to GameObjects if the scripts are in the Editor folder.",1342],["",1342],["Editor Default Resources",1342],["Editor scripts can make use of Asset files loaded on-demand using the EditorGUIUtility.Load function. This function looks for the Asset files in a folder called Editor Default Resources.",1342],["You can only have one Editor Default Resources folder and you must place it in Project root, directly within the Assets folder. Place the needed Asset files in this Editor Default Resources folder or a subfolder within it. Always include the subfolder path in the path passed to the EditorGUIUtility.Load function if your Asset files are in subfolders.",1342],["",1342],["Gizmos",1342],["Gizmos allow you to add graphics to the Scene View to help visualize design details that are otherwise invisible. The Gizmos.DrawIcon function places an icon in the Scene to act as a marker for a special object or position. You must place the image file used to draw this icon in a folder called Gizmos for the DrawIcon function to locate it.",1342],["You can only have one Gizmos folder, and it must be placed in the root of the Project, directly within the Assets folder. Place the needed Asset files in this Gizmos folder or a subfolder within it. Always include the subfolder path in the path passed to the Gizmos.DrawIcon function if your Asset files are in subfolders.",1342],["",1342],["Resources",1342],["You can load Assets on-demand from a script instead of creating instances of Assets in a Scene for use in gameplay. You do this by placing the Assets in a folder called Resources. Load these Assets by using the Resources.Load function.",1342],["You can have multiple Resources folders placed anywhere inside the Assets folder. Place the needed Asset files in a Resources folder or a subfolder within it. Always include the subfolder path in the path passed to the Resources.Load function if your Asset files are in subfolders.",1342],["Note: If the Resources folder is an Editor subfolder, the Assets in it are loadable from Editor scripts but are removed from builds.",1342],["",1342],["Standard Assets",1342],["When you import a Standard Asset package, Unity puts the assets in a folder called Standard Assets. In addition to containing the assets, these folders have an effect on script compilation order. For more information, see the page on Special Folders and Script Compilation Order.",1342],["You can only have one Standard Assets folder, and you must leave it in the root of the project, directly within the Assets folder. Place the asset files you need inside the <project-root>/Assets/Standard Assets folder or one of its subfolders.",1342],["",1342],["StreamingAssets",1342],["You may want the Asset to be available as a separate file in its original format (though it's more common to directly incorporate Assets into a build). For example, you need to access a video file from the filesystem to play the video on IOS using Handheld.PlayFullScreenMovie.",1342],["To include streaming Assets, do the following:",1342],["Place the file in the StreamingAssets folder.",1342],["The file remains unchanged when copied to the target machine, where it's available from a specific folder.",1342],["See the page about Streaming Assets for further details.",1342],["You can only have one StreamingAssets folder, and it must be placed in the root of the Project, directly within the Assets folder. Place the Assets files in the StreamingAssets folder or subfolder. Always include the subfolder path in the path used to reference the streaming asset if your Asset files are in subfolders.",1342],["",1342],["Android Asset Packs",1342],["Unity interprets any folder that ends with .androidpack as an Android asset packs. For more information, see Create a custom asset pack.",1342],["",1342],["Android Library Projects",1342],["Unity interprets any folder that ends with .androidlib as an Android Library Project. For more information, see Import and Android Library Project.",1342],["",1342],["Hidden Assets",1342],["During the import process, Unity ignores the following files and folders in the Assets folder (or a sub-folder within it):",1342],["Hidden folders.",1342],["Files and folders which start with ‘.’.",1342],["Files and folders which end with ‘~’.",1342],["Files and folders named cvs.",1342],["Files with the extension .tmp.",1342],["This prevents importing special and temporary files created by the operating system or other applications.",1342],["SpeedTree",1343],["SpeedTree, a suite of products by IDV Inc., provides prebuilt tree Assets and modeling software focused specifically on trees.",1343],["Unity recognizes and imports SpeedTree Assets in the same way that it handles other Assets. If you're using SpeedTree Modeler 7, make sure to resave your .spm files using the Unity version of the Modeler. If you're using SpeedTree Modeler 8, save your .st files directly into the Unity Project folder.",1343],["Make sure that Textures are reachable in the Project folder and that Unity automatically generates Materials for each Level of Detail (LOD). When you select an Asset, there are import settings to tweak the generated GameObject and attached Materials. Unity does not re-generate Materials when you re-import them, unless you click the Generate Materials or Apply & Generate Materials button. Therefore, it is possible to preserve any customizations to the Materials.",1343],["The SpeedTree importer generates a Prefab with the LODGroup component configured. You can instantiate the Prefab in a Scene as a common Prefab instance, or select the Prefab as a tree prototype and paint it across the Terrain.",1343],["Additionally, the Terrain accepts any GameObject with an LODGroup component as a tree prototype, and does not place limitations on the Mesh size, or number of Materials used. This is different from Tree Editor trees. However, be aware that SpeedTree trees usually use three to four different Materials, which as a result, issues a number of draw calls every frame. Thus, we recommend that you avoid heavy use of LOD trees on platforms, such as the mobile platforms, where additional draw calls are relatively costly in terms of rendering performance.",1343],["Materials",1343],["The SpeedTree Model Importer has a Materials tab to improve the workflow for handling SpeedTree Material Assets. See documentation on the SpeedTree Model Importer's Material tab page for more information.",1343],["Casting and receiving real-time shadows",1343],["To make billboards cast shadows correctly, Unity rotates billboards during the shadow caster pass to make them face the light direction (or light position in the case of point light) instead of facing the camera.",1343],["To enable these options, select the Billboard LOD level in the Inspector of a SpeedTree Asset, check Cast Shadows or Receive Shadows in Billboard Options, and click Apply Prefab.",1343],["To change the billboard shadow options of instantiated SpeedTree GameObjects, select the billboard GameObject in the Hierarchy window and tweak these options in the Inspector of the Billboard Renderer.",1343],["The trees you paint on a Terrain inherit billboard shadow options from the Prefab. Use BillboardRenderer.shadowCastingMode and BillboardRenderer.receiveShadows to alter these options at runtime.",1343],["Known issues: As with any other renderer, the Receive Shadows option has no effect while using deferred rendering. Billboards always receive shadows in deferred path.",1343],["2019-01-29 ",1343],["Added information about SpeedTree 8 and related links",1343],["Materials tab",1344],["Use the Materials tab to change how Unity deals with materials for an imported SpeedTree model. If the model has materials, Unity imports them as sub-assets.",1344],["To change other import settings for the SpeedTree model, see the Model tab.",1344],["The Materials tab has these sections:",1344],["(A)** The Location and Materials properties allow you to control how Unity accesses the materials inside the imported asset.",1344],["(B)** The Remapped Materials section allows you to remap the imported materials to existing materials in your project.",1344],["(C)** The Revert and Apply options always appear, but you can only select them after you make changes to the import settings. If you change settings in the Remapped Materials section of the Materials tab, the Apply & Generate Materials option appears.",1344],["(D)** The properties for the GameObject (read-only) appear at the bottom of the Inspector view, including a preview of the SpeedTree model with its material applied.",1344],["",1344],["Location and Materials",1344],["Property Description ",1344],[":--- :--- :--- ",1344],["Location Define how the materials are accessed. The rest of the properties on the Materials tab change depending on which of these options you choose. ",1344],["Use Embedded Materials Import materials as sub-assets inside the SpeedTree model. This is the default and recommended option. ",1344],["Use External Materials (Legacy) Extract materials to a folder with the same name and location as the model. This is a deprecated option for projects created with Unity 2017.1 or earlier and isn't recommended for use. ",1344],["Materials This property is visible only when Location is set to Use Embedded Materials. ",1344],["Extract Materials Extract the embedded materials from the imported asset and save them to a folder of your choice. Extracted materials populate the Remapped Materials list. Use this option to modify the materials or share them with other SpeedTree assets. This option isn't available if there are no sub-asset materials to extract from the model. ",1344],["",1344],["Remapped Materials",1344],["The Remapped Materials section lists the embedded materials and allows you to remap them to other materials that are already in the project.",1344],["If you already have a set of materials you want to use for this asset, expand the On Demand Remap group, select Search and Remap , and give the location of the materials. Unity remaps the imported materials to existing materials with the same name. Nothing changes if Unity can’t find any materials with the same name. You can manually remap materials from the Remapped Materials list.",1344],["To save the imported SpeedTree model with the remapped materials, select Apply.",1344],["If you make changes to the material properties through the Model tab’s import settings or an LOD setting override, select Regenerate Materials to re-import the materials in the Remapped Materials list with the updated settings.",1344],["\n Warning: Re-generating the external materials removes any manual modifications you made to the material files.\n",1344],["New imports or changes to the original asset don’t affect extracted materials. If you want to re-import the materials from the source asset, remove the references to the extracted materials in the Remapped Materials list. To remove an item from the list, select it and press the Backspace key on your keyboard.",1344],["Model tab",1345],["Use the Model tab to change the model settings for imported SpeedTree assets.",1345],["To change materials settings for the SpeedTree model, see the Materials tab.",1345],["The Model tab has these sections:",1345],["(A)** The Meshes, Material, Lighting, Additional Settings, and Wind sections allow you to adjust global import settings for the model.",1345],["(B)** The LOD section has a specialized variation of the LOD Group component for importing SpeedTree models. You can set smooth transitions between LOD levels, adjust thresholds for each LOD level, and use the level-specific LOD options to turn off resource-heavy effects.",1345],["(C)** The Revert and Apply options always appear, but you can only select them after you make changes to the import settings. If you change settings in the Remapped Materials section of the Materials tab, the Apply & Generate Materials option appears.",1345],["(D)** The properties for the GameObject (read-only) appear at the bottom of the Inspector view, including a preview of the SpeedTree Model.",1345],["",1345],["Meshes",1345],["Property Description ",1345],[":--- :--- :--- ",1345],["Unit Conversion Apply a global scale to the imported SpeedTree model. The default setting is ft to m because the SpeedTree Modeler uses feet and Unity uses meters as world units. ",1345],["Leave As Is Don't apply any unit conversion. Interpret the values in the model file as meters. ",1345],["ft to m Convert from feet to meters. ",1345],["cm to m Convert from centimeters to meters. ",1345],["inch to m Convert from inches to meters. ",1345],["Custom Apply a user-specified scale factor to the model. ",1345],["Scale Factor Scale the model by a custom value. This property is visible only when Unit Conversion is set to Custom. ",1345],["",1345],["Material",1345],["Property Description ",1345],[":--- :--- ",1345],["Main Color Choose a color to modulate the diffuse lighting component. ",1345],["Color Variation Enable color variation for the model. This property uses Main Color and Variation Color (RGB) Intensity (A) along with the model’s world position to pick the final color. Color variation helps add a more natural look to clusters of SpeedTree models. ",1345],["Variation Color (RGB), Intensity (A) Choose the color and intensity used in the Color Variation process. This property is visible only when Color Variation is enabled. ",1345],["Normal Map Enable Bump maps on the model. ",1345],["Subsurface Scattering Enable subsurface scattering effects. This shader effect simulates the light scattered out the back side of leaves and other two-sided SpeedTree materials. ",1345],["",1345],["Lighting",1345],["Property Description ",1345],[":--- :--- ",1345],["Cast Shadows Let the model cast shadows on its environment when directly lit by a light source. ",1345],["Receive Shadows Let the model receive shadows from other GameObjects in the scene. ",1345],["Light Probes Enable Light Probes rendering for the model. ",1345],["",1345],["Additional Settings",1345],["Property Description ",1345],[":--- :--- :--- ",1345],["Motion Vectors Set the Motion Vector property for the Mesh Renderer of each LOD GameObject. For details about the motion vector rendering options, refer to the Mesh Renderer component. ",1345],["",1345],["Wind",1345],["Property Description ",1345],["Wind Quality Choose the level of wind quality to use for this asset. Options with more wind effects have a higher performance cost. ",1345],["None No wind effects. ",1345],["Fastest Global sway is applied to the model. ",1345],["Faster Global sway and leaf ripple are applied to the model. ",1345],["Better Global sway, branch motion, and leaf ripple are applied to the model. ",1345],["Best Global sway, branch motion, leaf ripple, and leaf tumbling are applied to the model. ",1345],["Palm Global sway, branch motion, leaf ripple, leaf tumbling, and frond ripple are applied to the model. ",1345],["",1345],["LOD",1345],["Note**: This section assumes you have already read the documentation on the LOD Group component. The section on Working with SpeedTree Models explains key concepts and workflow information that are crucial for understanding how to import SpeedTree models.",1345],["The LOD Group component for the SpeedTree Importer is different from the generic LOD Group component that appears on a SpeedTree instance in Unity:",1345],["Fade Mode** options aren't available because the Fade Mode is already set to Speed Tree.",1345],["The playhead for the preview is missing because you can only preview the LOD transitions when an instance of the model is placed in the scene.",1345],["The options governing the LOD transitions are the same as the LOD Group component, with the only difference being the Smooth Transitions property. Enable Smooth Transitions to reveal the other properties for LOD transition animations: Animate Cross-fading, Crossfade Width, and Fade Out Width.",1345],["Each LOD level has its own set of options that allow you to enable or disable resource-heavy effects.",1345],["The LOD Group selection bar",1345],["The LOD Group selection bar represents the different LOD levels as colored boxes. When a level box is selected, a blue outline appears around it:",1345],["The percentage that appears in each LOD level box represents the threshold at which that level becomes active, based on the ratio of the GameObject's screen space height to the total screen height.",1345],["To select a level, click on the level box. To change the percentage value for a level, drag the boundary to the left or right of the level container. You can also customize which properties are enabled or disabled on each level as an optimization strategy.",1345],["Level-specific LOD options",1345],["For each LOD level defined on your SpeedTree asset, you can customize a variety of properties. The properties correspond to other settings in the Model tab and override global import settings.",1345],["To set LOD options on a specific LOD level, select the LOD level box on the LOD Group selection bar and enable Customize LOD options.",1345],["When you enable customization for an LOD level, the SpeedTree Importer generates a new material for that LOD level.",1345],["Note**: Customized LOD levels negatively affect batching and instancing and increase memory consumption. But customizations can help with some GPU bottleneck scenarios if you disable shader-heavy effects for an LOD level. Profile your scene for CPU and GPU before and after you customize to see the impact on performance.",1345],["Billboard LODs",1345],["Billboards are treated differently from other LOD meshes:",1345],["If billboards are available in the SpeedTree model, customizations are automatically enabled.",1345],["Some resource-heavy properties such as Light Probes and Wind are disabled by default or have reduced value range for performance reasons.",1345],["Extracting animation clips",1346],["An animated character typically has a number of different movements that are activated in the game in different circumstances, called Animation Clips. For example, we might have separate animation clips for walking, running, jumping, throwing, and dying. Depending on how the artist set up the animation in the 3D modeling application, these separate movements might be imported as distinct animation clips or as one single clip where each movement simply follows on from the previous one. In cases where there is only one long clip, you can extract component animation clips inside Unity, which adds a few extra steps to your workflow.",1346],["If your model has multiple animations that you already defined as individual clips, the Animations tab looks like this:",1346],["You can preview any of the clips that appear in the list. If you need to, you can edit the time ranges of the clips.",1346],["If your model has multiple animations supplied as one continuous take, the Animation tab looks like this:",1346],["In this case, you can define the time ranges (frames or seconds) that correspond to each of the separate animation sequences (walking, jumping, running, and idling). You can create a new animation clip by following these steps:",1346],["Click the add (+) button.",1346],["Select the range of frames or seconds that it includes.",1346],["You can also change the name of the clip.",1346],["For example, you could define the following:",1346],["walk forward animation during frames 71-77",1346],["idle during frames 170-200",1346],["hit animation during frames 250-280",1346],["For further information, see the Animation tab.",1346],["Importing animations using multiple model files",1346],["Another way to import animations is to follow a naming scheme that Unity allows for the animation files. You can create separate model files and name them with the convention modelName@animationName.fbx. For example, for a model called goober, you could import separate idle, walk, jump and walljump animations using files named goober@idle.fbx, goober@walk.fbx, goober@jump.fbx and goober@walljump.fbx. When exporting animation like this, it is unnecessary to include the Mesh in these files, but in that case you should enable the Preserve Hierarchy Model import option.",1346],["Unity automatically imports all four files and collects all animations to the file without the @ sign in. In the example above, Unity imports the goober.mb file with references to the idle, jump, walk and wallJump animations automatically.",1346],["For FBX files, you can export the Mesh in a Model file without its animation. Then export the four clips as goober@_animname_.fbx by exporting the desired keyframes for each (enable animation in the FBX dialog).",1346],["Sprite Atlas",1347],["A 2D project uses sprites and other graphics to create the visuals of its scenes. This means a single project can contain many texture files. Unity typically issues a draw call for each texture in the scene; however, in a project with many textures, multiple draw calls become resource-intensive and can negatively impact the performance of your project.",1347],["A Sprite Atlas is an asset that consolidates several textures into a single combined texture. Unity can call this single texture to issue a single draw call instead of multiple draw calls to access the packed textures all at once at a smaller performance overhead. You can use the Sprite Atlas API to control loading the Sprite Atlases at your project’s runtime.",1347],["Topic Description ",1347],[":------------------------------------------------------------------- :------------------------------------------------------------ ",1347],["Sprite Atlas properties reference Refer to the properties of the Sprite Atlas. ",1347],["Master and Variant Sprite Atlases Choose the Type property for a Sprite Atlas. ",1347],["Sprite Atlas Workflow Follow the general workflow to create a Sprite Atlas. ",1347],["Preparing Sprite Atlases for distribution Learn how to distribute Sprite Atlases. ",1347],["Sprite Packer Modes Choose the default packing behavior for a Sprite Atlas. ",1347],["Sprite Atlas V2 Use the Sprite Atlas V2 mode. ",1347],["Automatic slicing",1348],["Select the Slice tool and set its Type to Automatic to have Unity automatically slice a texture into multiple individual sprites by generating boundaries based on the surrounding transparency of each potential sprite. For example, you can use Automatic Slicing to isolate regularly spaced graphical images in a texture, such as individual Tiles in a tile sheet.",1348],["After selecting the Slice tool from the Sprite Editor toolbar and setting its Type to Automatic, the following editor panel appears:",1348],["In this panel, you can set the default pivot for each sliced sprite with the Pivot and Custom Pivot options. If there are existing selections in the editor window before applying the Automatic slicing, select from the following options in the Method menu to choose how Unity handles the existing selections:",1348],["Method Function",1348],["",1348],["Delete Existing** Deletes all SpriteRects in the Texture and adds the newly sliced SpriteRects.",1348],["Smart** If a newly sliced SpriteRect overlaps with one or more existing SpriteRects, the best overlapping original SpriteRect will have its position and size updated to the newly sliced SpriteRect. This newly sliced SpriteRect will then be discarded.",1348],["Safe** Maintains all original SpriteRects. If a newly sliced SpriteRect overlaps with an existing SpriteRect, it will be discarded.",1348],["Grid by Cell Size** or Grid by Cell Count options are also available for the slicing type. This is very useful when the sprites have already been laid out in a regular pattern during creation:",1348],["The Pixel Size values determine the height and width of the tiles in pixels. If you chose grid by cell count, Column & Row determines the number of columns and rows used for slicing. You can also use the Offset values to shift the grid position from the upper left of the image and the Padding values to inset the SpriteRects slightly from the grid. The Keep Empty Rects option lets you keep SpriteRects that don't have any pixels within them. This is useful for organising sprites created from the texture based on their position in the texture. The Pivot can be set with one of nine preset locations or a Custom Pivot location can be set.",1348],["The Isometric Grid option attempts to slice the sprite sheet which has its sprites laid out in alternating rows of half-height diamonds. When sliced, the resulting SpriteRects will have custom outlines and physics shapes corresponding to the half-height diamonds.",1348],["The Is Alternate option determines if the isometric diamonds are staggered across alternate rows. If set, the top most row is assumed to have its first diamond starting half a pixel size from the left side. If not, it assumes that the first diamond starts from the left side directly.",1348],["When slicing with the Grid options, previews of the SpriteRects are shown on the texture to help guide the slicing. Adjusting the slicing settings will update the previews accordingly. The preview SpriteRects shown may not be generated after slicing depending on the method used for handling existing SpriteRects or the pixel contents of the preview SpriteRects.",1348],["Note that you can manually edit any SpriteRect generated by any of these Automatic Slicing methods to fine-tune the shape of the SpriteRects.",1348],["Sprite Editor Data Provider API",1349],["By using the Sprite Editor Data Provider API, the user can add, change and remove Sprite data in a custom importer or editor tool. Refer to the code examples below to see how the API is applied.",1349],["Important:** Some of the following examples contains an additional section of code which is needed if you are using Unity 2021.2 or newer. If you are using Unity 2021.1 or older, you should remove the indicated section to ensure the code compiles properly.",1349],["How to get ISpriteEditorDataProvider instances",1349],["The following examples show you how to use the API to get each respective instance.",1349],["Importer",1349],["```C#",1349],["using UnityEditor;",1349],["using UnityEditor.U2D.Sprites;",1349],["using UnityEngine;",1349],["public class MyAssetPostProcessor : AssetPostprocessor",1349],["private void OnPreprocessTexture()",1349],["var factory = new SpriteDataProviderFactories();",1349],["factory.Init();",1349],["var dataProvider = factory.GetSpriteEditorDataProviderFromObject(assetImporter);",1349],["dataProvider.InitSpriteEditorDataProvider();",1349],["/* Use the data provider */",1349],["// Apply the changes made to the data provider",1349],["dataProvider.Apply();",1349],["Texture",1349],["```C#",1349],["using UnityEditor;",1349],["using UnityEditor.U2D.Sprites;",1349],["using UnityEngine;",1349],["public static class MyCustomTool",1349],["[MenuItem(\"Custom/Update Sprite Settings\")]",1349],["static void UpdateSettings()",1349],["foreach (var obj in Selection.objects)",1349],["if (obj is Texture2D)",1349],["var factory = new SpriteDataProviderFactories();",1349],["factory.Init();",1349],["var dataProvider = factory.GetSpriteEditorDataProviderFromObject(obj);",1349],["dataProvider.InitSpriteEditorDataProvider();",1349],["/* Use the data provider */",1349],["// Apply the changes made to the data provider",1349],["dataProvider.Apply();",1349],["// Reimport the asset to have the changes applied",1349],["var assetImporter = dataProvider.targetObject as AssetImporter;",1349],["assetImporter.SaveAndReimport();",1349],["How to add Sprites",1349],["```C#",1349],["static void AddSprite(ISpriteEditorDataProvider dataProvider)",1349],["// Define the new Sprite Rect",1349],["var newSprite = new SpriteRect()",1349],["name = \"MyNewSprite\",",1349],["spriteID = GUID.Generate(),",1349],["rect = new Rect(0, 0, 32, 32)",1349],["};",1349],["// Add the Sprite Rect to the list of existing Sprite Rects",1349],["var spriteRects = dataProvider.GetSpriteRects().ToList();",1349],["spriteRects.Add(newSprite);",1349],["// Write the updated data back to the data provider",1349],["dataProvider.SetSpriteRects(spriteRects.ToArray());",1349],["// Note: This section is only for Unity 2021.2 and newer",1349],["// Register the new Sprite Rect's name and GUID with the ISpriteNameFileIdDataProvider",1349],["var spriteNameFileIdDataProvider = dataProvider.GetDataProvider();",1349],["var nameFileIdPairs = spriteNameFileIdDataProvider.GetNameFileIdPairs().ToList();",1349],["nameFileIdPairs.Add(new SpriteNameFileIdPair(newSprite.name, newSprite.spriteID));",1349],["spriteNameFileIdDataProvider.SetNameFileIdPairs(nameFileIdPairs);",1349],["// End of Unity 2021.2 and newer section",1349],["// Apply the changes",1349],["dataProvider.Apply();",1349],["How to change Sprite data",1349],["```C#",1349],["static void SetPivot(ISpriteEditorDataProvider dataProvider)",1349],["// Get all the existing Sprites",1349],["var spriteRects = dataProvider.GetSpriteRects();",1349],["// Loop over all Sprites and update the pivots",1349],["foreach (var rect in spriteRects)",1349],["rect.pivot = new Vector2(0.1f, 0.2f);",1349],["rect.alignment = SpriteAlignment.Custom;",1349],["// Write the updated data back to the data provider",1349],["dataProvider.SetSpriteRects(spriteRects);",1349],["// Apply the changes",1349],["dataProvider.Apply();",1349],["How to remove Sprites",1349],["```C#",1349],["static void RemoveSprite(ISpriteEditorDataProvider dataProvider, string spriteName)",1349],["// Get all the existing Sprites and look for the Sprite with the selected name",1349],["var spriteRects = dataProvider.GetSpriteRects().ToList();",1349],["var index = spriteRects.FindIndex(x => x.name == spriteName);",1349],["// Remove the entry of the Sprite if found",1349],["if (index >= 0)",1349],["spriteRects.RemoveAt(index);",1349],["// Write the updated data back to the data provider",1349],["dataProvider.SetSpriteRects(spriteRects.ToArray());",1349],["// Note: This section is only for Unity 2021.2 and newer",1349],["// Get all the existing SpriteName & FileId pairs and look for the Sprite with the selected name",1349],["var spriteNameFileIdDataProvider = dataProvider.GetDataProvider();",1349],["var nameFileIdPairs = spriteNameFileIdDataProvider.GetNameFileIdPairs().ToList();",1349],["index = nameFileIdPairs.FindIndex(x => x.name == spriteName);",1349],["// Remove the entry of the Sprite if found",1349],["if (index >= 0)",1349],["nameFileIdPairs.RemoveAt(index);",1349],["spriteNameFileIdDataProvider.SetNameFileIdPairs(nameFileIdPairs);",1349],["// End of Unity 2021.2 and newer section",1349],["// Apply the changes",1349],["dataProvider.Apply();",1349],["How to update Outline data",1349],["```C#",1349],["static void SetOutline(ISpriteEditorDataProvider dataProvider)",1349],["// Get the ISpriteOutlineDataProvider",1349],["var outlineDataProvider = dataProvider.GetDataProvider();",1349],["// Loop over all Sprites and set their outline to a quad",1349],["var spriteRects = dataProvider.GetSpriteRects();",1349],["foreach (var spriteRect in spriteRects)",1349],["var halfWidth = spriteRect.rect.width / 2f;",1349],["var halfHeight = spriteRect.rect.height / 2f;",1349],["var quadOutline = new Vector2[4]",1349],["new Vector2(-halfWidth, -halfHeight),",1349],["new Vector2(-halfWidth, halfHeight),",1349],["new Vector2(halfWidth, halfHeight),",1349],["new Vector2(halfWidth, -halfHeight)",1349],["};",1349],["var outlines = new List();",1349],["outlines.Add(quadOutline);",1349],["var spriteGuid = spriteRect.spriteID;",1349],["outlineDataProvider.SetOutlines(spriteGuid, outlines);",1349],["// Apply the changes",1349],["dataProvider.Apply();",1349],["Additional resources",1349],["\nFull list of available data providers in 2D Sprite package's Scripting API section\n",1349],["Use the Sprite Editor",1350],["When you have an image that is a single character with different parts, such as a car with wheels which each move independently, you can use the Sprite Editor to extract different parts from that image into separate sprites from the same texture.",1350],["Note**: Make sure the graphic you want to edit has its Texture Type set to Sprite (2D and UI). For more information on importing and setting up sprites, refer to Set up sprites.",1350],["Sprite textures with multiple components need the Sprite Mode to be set to Multiple in the Inspector.",1350],["Open the Sprite Editor",1350],["To open the Sprite Editor:",1350],["Select the 2D image you want to edit from the Project View (Fig 1: Project View). Note: You can't edit a sprite by selecting it in the Scene View.",1350],["Click on the Sprite Editor button in the Texture Import Inspector (Fig 2: Texture Import Inspector) and the Sprite Editor displays (Fig 3: Sprite Editor).",1350],["Note:** You can only see the Sprite Editor button if the Texture Type on the image you have selected is set to Sprite (2D and UI).",1350],["Note:** Set the Sprite Mode to Multiple in the Texture Import Inspector if your image has several elements.",1350],["Along with the composite image, you will see a number of controls in the bar at the top of the window. The slider at the top right controls the zoom, while the color bar button to its left chooses whether you view the image itself or its alpha levels. The right-most slider controls the pixilation (mipmap) of the Texture. Moving the slider to the left reduces the resolution of the Sprite Texture. The most important control is the Slice menu at the top left, which gives you options for separating the elements of the image automatically.",1350],["Select the Apply and Revert buttons to keep or discard any changes you have made in the Sprite Editor window respectively. You set these buttons to display a confirmation dialog before applying their effects in Unity’s Preferences window. In the Preferences window, go to 2D > Sprite Editor Window to open the Sprite Editor window options.",1350],["Select the respective option to have a dialog appear after selecting Apply or Revert to confirm your selection, preventing accidental saving or discarding of changes made.",1350],["Use the Editor",1350],["The most direct way to use the editor is to identify the elements manually. If you click on the image, you will see a rectangular selection area appear with handles in the corners. You can drag the handles or the edges of the SpriteRect to resize it around a specific element. Having isolated an element, you can add another by dragging a new SpriteRect in a separate part of the image. You'll notice that when you have a SpriteRect selected, a panel appears in the bottom right of the window:",1350],["The controls in the panel let you choose a name for the Sprite graphic and set the position and size of the SpriteRect by its coordinates. A border width, for left, top, right and bottom can be specified in pixels. The borders are useful when 9-Slicing Sprites. There are also settings for the Sprite's pivot, which Unity uses as the coordinate origin and main \"anchor point\" of the graphic. You can choose from a number of default SpriteRect-relative positions (for example, Center, Top Right, etc) or use custom coordinates.",1350],["The Trim button next to the Slice menu item will resize the SpriteRect so that it fits tightly around the edge of the graphic based on transparency.",1350],["Note:** Borders are only supported for the UI system, not for the 2D Sprite Renderer.",1350],["Resize polygons",1351],["Open the Sprite Editor for a polygon and you have the option to change its shape, size, and pivot position.",1351],["Polygon shape",1351],["Enter the number of sides you want the polygon to have in the Sides field and click Change.",1351],["Polygon size and pivot",1351],["Polygon size",1351],["To change the polygon's size, click on the Sprite to display green border lines and the Sprite information box. Click and drag on the green lines to create the border you want, and the values in the Border fields change.",1351],["Polygon pivot",1351],["To change the polygon's pivot point (that is the axis point the polygon moves around), click on the image to display the Sprite information box. Click on the Pivot drop down menu and select an option. This displays a blue pivot circle on the polygon; its location depends on the pivot option to you have selected. If you want to change it further, select Custom Pivot and click and drag on the blue pivot circle to position it.",1351],["Preparing Sprite Atlases for distribution",1352],["Ensure that the source Texture of the Sprite is always uncompressed. While packing Sprite Atlas, pixel data is read from the source texture and if it uses any compressed format, it may result in loss of precision as it must be uncompressed first before packing. If a Sprite is packed to a Sprite Atlas, only the Sprite Atlas Texture needs to be compressed.",1352],["A Project can have multiple Sprite Atlases for different purposes (for example, Variant Atlases with lower-resolution Textures for hardware with different limitations). If you enable all available Sprite Atlases, you might encounter conflicts (refer to Resolving different Sprite Atlas scenarios for more information).",1352],["To prevent these issues, properly prepare Sprite Atlases for distribution with the following steps:",1352],["Disable 'Include in Build' in the Sprite Atlas properties.",1352],["Choose a method to distribute the Atlas.",1352],["Load the Atlas via Late Binding with a script.",1352],["Disable 'Include in Build'",1352],["Unity includes Sprite Atlases in a Project’s build by default, and automatically loads them at run time. Clear the Include in Build setting of the selected Sprite Atlas to disable this behavior.",1352],["If 'Include in Build' is disabled, Unity still packs the Sprite Atlas into a *.spriteatlas file in the Project’s Assets folder. However, Sprites which reference Textures in a disabled Sprite Atlas appear invisible as the reference Texture is not available or loaded. Unity does not include the disabled Sprite Atlas in the Project’s published build, and does not automatically load it at run time. To do so, a script is required to load the Sprite Atlas via Late Binding.",1352],["Resolving different Sprite Atlas scenarios",1353],["The way Unity resolves the interaction between Sprites and Sprite Atlases depends on various conditions. The examples below detail the most common scenarios:",1353],["Scenario 1: Basic Sprite Atlas usage",1353],["Sprite Atlas A contains Sprite 1.",1353],["Sprite Atlas A *has *Include in Build enabled.",1353],["Result: The Project’s published build includes Sprite Atlas A. Sprite 1 renders with the Texture from Sprite Atlas A.",1353],["Scenario 2: 'Include in Build' is disabled",1353],["Sprite Atlas A contains Sprite 1.",1353],["Sprite Atlas A has Include in Build disabled.",1353],["Result: The Project’s published build does not include Sprite Atlas A, and does not include Sprite 1’s Texture. *Sprite 1 *appears invisible in the build at run time, because the Texture it refers to is not available and is not loaded.",1353],["Scenario 3: One Sprite in two Sprite Atlases",1353],["Sprite Atlas A and Sprite Atlas B both include Sprite 1 in their Objects for Packing lists.",1353],["Both Sprite Atlas A and Sprite Atlas B have Include in Build enabled.",1353],["Both Sprite Atlases have different Texture output settings in this example.",1353],["Result: The Project’s published build includes both Sprite Atlases. Unity randomly chooses which Texture to render Sprite 1 with, in an internal process that is out of your control.",1353],["In this scenario, to ensure that the Sprite renders with the Texture from the Sprite Atlas you want, follow the steps below:",1353],["Disable 'Include in Build' for both Sprite Atlases.",1353],["When you initialize the Sprite at run time, request the Sprite directly from one of the Atlases with SpriteAtlas.GetSprite. This ensures that Unity always draws the Sprite Texture from the correct Sprite Atlas.",1353],["Sprite Atlas V2",1354],["The original version 1 of the Sprite Atlas system packs textures (from sprites, sprites within textures, and sprites in folders) into an Atlas Texture. It packs these textures when it enters Play mode, or when it builds the Player or an AssetBundle. AssetDatabase V1 can't have dependencies, and has no importer support for named objects, so Unity packs its Sprite Atlases through a custom mechanism and stores the output data of textures and render data in the Library/AtlasCache folder.",1354],["Note:** From Unity 2022.2 onwards, the Editor's Sprite Atlas Mode is set to Sprite Atlas V2 - Enabled by default. Sprite Atlas V2 uses the functionalities exposed by AssetDatabase V2 (ADBV2) such as Cache Server support, which the original Sprite Atlas system didn't support.",1354],["Sprite Atlas V2 Inspector properties",1354],["There are no changes to the Inspector properties and settings from that of Sprite Atlas V1 except for the following. The imported Sprite Atlas object is located at the bottom of the Inspector.",1354],["The Pack Preview window displayed at the bottom of the Inspector window.",1354],["Enabling Sprite Atlas V2",1354],["Sprite Atlas V2 is automatically enabled by default by the Editor from Unity 2022.2 onwards. If you are upgrading an existing project from an earlier version that used an earlier version of Sprite Atlas, go to Edit > Project Settings > Editor > Sprite Atlas > Mode and select Sprite Atlas V2 - Enabled from the dropdown menu.",1354],["When you enable Sprite Atlas V2, the following effects occur:",1354],["When you create new Sprite Atlases, they're automatically set to the selected Mode.",1354],["Unity automatically migrates all existing Sprite Atlas V1 assets to Sprite Atlas V2.",1354],["Due to the automatic migration, it's recommended that you make a backup of your Sprite Atlases V1 before you enable Sprite Atlas V2, as assets converted to V2 are incompatible with V1, and Unity can't revert them to their original state.",1354],["Enabling Sprite Atlas V2 effects",1354],["The following come into effect when you select the following Sprite Atlas V2 options for the Sprite Atlas Mode:",1354],["If you select Sprite Atlas V2 - Enabled, sprites will always use the Sprite Atlas as their texture source, in both Edit and Play modes.",1354],["If you select Sprite Atlas V2 - Enabled for Builds, Unity only packs Sprite Atlases when building Players, AssetBundles, or Addressable build scripts. When the Editor is in Edit mode, sprites continue to use their original textures and not textures from a packed Sprite Atlas.",1354],["Sprite Atlas workflow",1355],["Follow the steps below to create a Sprite Atlas:",1355],["Create a Sprite Atlas Asset.",1355],["Select a list of Objects for Packing into the Sprite Atlas.",1355],["Enable Include in build on Sprite Atlases to include them with the project.",1355],["(Optional) Create a Variant Sprite Atlas.",1355],["(Optional) Prepare Sprite Atlases for distribution.",1355],["\nSprites prepared for distribution need to be loaded via Late Binding with a script.\n",1355],["(Optional) Optimize Sprite Atlas usage and size in your Project for improved performance.",1355],["Create a Sprite Atlas Asset",1355],["To create the Sprite Atlas Asset, go to Assets > Create > 2D > Sprite Atlas. Unity creates the Sprite Atlas in the Asset folder, with the file extension * .spriteatlas.",1355],["Selecting items for the Objects for Packing list",1355],["The Objects for Packing list displays the currently selected items that are in the Sprite Atlas. You can place Texture2D and Sprite Assets in this list. Drag and drop a folder directly onto the list to automatically add all valid content within the folder to the list (only the folder appears on the list).",1355],["To select specific items for the list:",1355],["Select the Sprite Atlas Asset and find the Objects For Packing list in its Inspector window. It displays the list of items for Unity to pack when it builds the Sprite Atlas.",1355],["To add items, select the plus (+) icon at the lower right of the list to create a new row. Drag a valid Asset onto an empty row to add it to the list, or select the circle icon to the right of the row to open the Select Object window. Select an Asset from the Object Picker window to add it to the list:",1355],["To remove an item from the list, click the minus (-) icon at the lower right of the Objects For Packing list. To replace an item, drag another item to the row it occupies to replace it on the list.",1355],["Select Pack Preview to preview the combined Atlas Texture in the Asset Preview window.",1355],["Include in Build",1355],["All Sprite Atlases have Include in Build enabled by default when created. This means that Unity includes the Sprite Atlases with the Project’s build and automatically loads them at the build’s run time. Enable or disable the 'Include in Build' property to control which Sprite Atlases are included in the Project build.",1355],["Clearing 'Include in Build' disables this behavior, and is done when preparing a Sprite Atlas for distribution.",1355],["Optimizing Sprite Atlas usage and size for improved performance",1355],["When a Sprite is active in a Scene, Unity loads the Sprite Atlas it belongs to and all the Textures it contains. This can cause excessive performance overhead if Unity loads a Sprite Atlas with very large Textures when nothing in the Scene is using most of those Textures.",1355],["To optimize Sprite Atlas usage, ideally all or most Sprites that are active in the Scene should belong to the same Atlas. It is good practice to split Sprite Textures into multiple smaller Atlases according to their common usage.",1355],["Another way to reduce performance overhead is to reduce the empty space between packed Textures in the Sprite Atlas. This reduces the size of the Sprite Atlas. To do this, select the Sprite Atlas and inspect the packed Atlas Texture in the Pack Preview window at the bottom of its Inspector settings. If there is no Preview available, select the Pack Preview button under the Objects for Packing list to generate the packed Texture.",1355],["Sprite Atlas with excess empty space.",1355],["If there is excess empty space visible, you can manually reduce the size of the packed Texture to reduce the amount of empty space and optimize the Atlas's size. To do so, go to the Platform-specific overrides panel at the bottom of the Inspector window. Select a lower value from the drop-down menu of the Max Texture Size setting, then select Pack Preview to regenerate the packed Texture.",1355],["Set the Max Texture Size.",1355],["When the Max Texture Size value is lower than the current dimensions of the Sprite Atlas Texture, Unity reduces the packed Texture dimensions to match the set Max Texture Size as closely as possible, and automatically trims away any extra empty space. If there are selected Sprite Textures that exceed the Max Texture Size setting of the Sprite Atlas, then the Sprite Atlas ignores the Max Texture Size setting and remains at the minimum size required to contain the Sprite Textures at their original dimensions.",1355],["Textures in a Sprite Atlas remain in their original dimensions.",1355],["Note:** When using Variant Sprite Atlases, selecting a very low scale value (less than 0.25) may result in visual artifacts, depending on the compression format used and original resolution of the Sprite. It is recommended to use high padding values and better compression formats when using Variant Atlases.",1355],["Sprite Creator",1356],["With this tool you can create temporary placeholder sprite (2D) graphics. You can use these in your project during development and then replace them with the graphics you want to use.",1356],["Accessing the Sprite Creator",1356],["Select Assets > Create > 2D > Sprite and then select the placeholder sprite you want to make (square, circle, capsule, isometric diamond, hexagon flat-top, hexagon pointed-top, 9-sliced).",1356],["Using the Sprite",1356],["Your new placeholder sprite appears as a white shape in the asset folder you currently have open. The new sprite's name defaults to its shape name but you have the option to rename your sprite when it is first created. If you are not sure what you want to call it, leave it as the default; you can change it later by clicking on it.",1356],["You can drag and drop your placeholder sprite into the Scene View or Hierarchy to start using it in your project.",1356],["Replacing your Placeholder Sprite",1356],["To change your placeholder sprite, click on it in the Scene View and then edit via the Sprite Renderer Component in the Inspector.",1356],["Edit the Sprite field: You can click on the small circle to the right of the input field to bring up the Sprite Selector where you can browse and select from a menu of available 2D graphic assets.",1356],["Details",1356],["The Sprite Creator makes 4x4 white PNG outline textures.",1356],["The placeholder sprites are perfect primitive polygons (e.g. triangle, hexagon, n-sided polygon), generated by algorithm.",1356],["NOTE:** Placeholder sprites are not like 3D primitives: A sprite is an asset, and as a many-sided polygon, may represent many different shapes, so placeholder sprites are not built like 3D primitives.",1356],["Sprite Editor: Secondary Textures",1357],["The Sprite Editor's Secondary Textures module can associate additional Textures with edited Sprites. A Shader can then sample these secondary Textures to apply additional effects on the Sprite, such as normal mapping. Secondary Textures are currently only supported by Sprite Renderers and are not available for other Renderer components.",1357],["To use this functionality, select the Secondary Textures module from the drop-down menu at the top left of the Sprite Editor window.",1357],["Adding a Secondary Texture",1357],["To add a new Secondary Texture entry, select the ''+'' at the bottom right of the Secondary Textures panel. You can add a maximum of eight Secondary Textures to each Sprite or Sprite Sheet. Each added Secondary Texture appears as an entry on the list, with two fields: Name and Texture.",1357],["You can enter a custom name for the Secondary Texture in the Name field. Some Unity packages suggest Texture names that can be used with their Shaders. The drop-down arrow to the right of the Name field displays a list of valid suggested names. Suggested names remain in the drop-down menu even after their associated packages are uninstalled.",1357],["To select the Texture used by the Secondary Texture, drag the Texture Asset directly onto the Texture field, or open the Object Picker window by selecting the circle to the right of the field.",1357],["Secondary Textures are sampled with the same UV coordinates as the main Sprite Texture. Align the Secondary Textures with the main Sprite Texture to ensure that additional Texture effects are displayed correctly.",1357],["To preview the Secondary Texture in the Sprite Editor window with the main Sprite Texture hidden, select an entry in the list. Click outside of the Secondary Textures list to deselect the entry, and the main Sprite Texture is visible again.",1357],["Deleting a Secondary Texture",1357],["To delete a Secondary Texture from the list, select it and then select the ‘-’ button at the bottom right of the window.",1357],["Applying the Changes",1357],["To apply your changes to the edited Sprites, select Apply on the toolbar. Entries without a Name or selected Texture are considered invalid and are automatically removed when changes are applied.",1357],["Sprite Editor",1358],["Use the Sprite Editor to prepare sprites for your Unity project by slicing large textures or sprite sheets into separate sprites.",1358],["Topic Description ",1358],[":---------------------------------------------------------- :----------------------------------------------------------------------- ",1358],["Use the Sprite Editor Learn how to open and use the Sprite Editor. ",1358],["Automatic slicing Apply automatic slicing to your sprites. ",1358],["Resize polygons Change the shape, size, and pivot position of your sprites. ",1358],["Custom Outline Edit the shape of the mesh that Unity renders the sprite texture on. ",1358],["Custom Physics Shape Edit a sprite’s Physics Shape. ",1358],["Secondary Textures Associate additional textures with edited sprites. ",1358],["Sprite Editor Data Provider API Add, change, and remove sprite data in a custom importer or editor tool. ",1358],["Sprite Editor: Custom Outline",1359],["Use the Sprite Editor’s Custom Outline option to edit the shape of the Mesh that Unity renders the Sprite texture on. The Custom Outline editor allows you to use control points to create and define the shape of the Sprite’s Mesh outline.",1359],["By default, Unity renders each Sprite on a rectangle Mesh. This Mesh might include transparent areas outside the Texture’s border, and rendering these transparent areas can negatively affect performance. When you use the Custom Outline editor to define a Mesh outline that matches the outline of the Sprite Texture, you reduce the size of the transparent areas, which improves performance.",1359],["To access the Custom Outline editor, select a Sprite and then in the Sprite’s Inspector window, select the Sprite Editor button. In the Sprite Editor window, open the upper-left drop-down menu and select Custom Outline to open the Custom Outline editor.",1359],["The Custom Outline editor",1359],["Custom Outline editor properties",1359],["Property Function ",1359],["--------------------- ------------------------------------------------------------ ",1359],["Snap Snap control points to the nearest pixel. ",1359],["Outline Tolerance Use this slider to control how tightly and accurately the generated outline follows the outline of the Sprite texture. At the minimum value (0), the Sprite Editor generates a basic outline around the Sprite. At the maximum value (1), the Sprite Editor generates an outline that follows the outline of the Sprite texture as closely as possible. ",1359],["Generate When you click this button, Unity automatically creates an outline based on the Outline Tolerance value you set. ",1359],["Copy After you have generated or set up a custom outline, click this Copy button to duplicate the custom outline. Leaving the Custom outline module or closing the Sprite Editor removes the copied outline from memory. ",1359],["Paste Use this button to paste a copied outline to the currently selected Sprite. If you have not used the Copy function to copy an outline, this button is not available. To Paste a copied custom outline to another Sprite, in the Project window select the Sprite while the Custom outline editor window is open. Then click the Paste button to paste the copied outline to the new Sprite. When you paste the outline, if a point in the outline is larger than the Sprite’s frame, Unity clamps the point to be inside the Sprite’s frame. ",1359],["Paste All Use this button to paste a copied outline to all Sprites in the Sprite Editor window, regardless of selection. If you have not used the Copy function to copy an outline, this button is unavailable. Use this function to apply the same outline to multiple Sprites in the same Texture (such as when a Texture has its Sprite Mode set to ‘Multiple’). When you paste the outline, if a point in the outline exceeds the Sprite’s frame, Unity clamps the point to be inside that Sprite’s frame. ",1359],["Revert Undoes any unsaved recent changes made in the editor window. To save changes, click Apply first. ",1359],["Apply Select this button to save all changes made in the editor window. ",1359],["Using the Custom Outline editor",1359],["The Custom Outline editor allows you to to create or generate the Mesh of the Sprite. There are two ways to create a custom outline: have Unity automatically generate the shape, or manually creating and editing it in the editor window.",1359],["Generating the outline ",1359],["To have Unity automatically generate an outline that follows the shape of the original Sprite texture, and that also takes into account transparent areas in the texture, click the Generate *button. However, you can adjust how tightly the generated outline follows the Sprite texture by adjusting the Outline Tolerance *slider.",1359],["Adjust the Outline Tolerance slider to refine the outline of the Mesh that Unity generates. Increasing the value increases how closely the outline follows the shape of the Sprite texture. Leaving the slider at 0 generates a Mesh that more loosely follows the Sprite texture.",1359],["Editing the custom outline",1359],["You can create your own custom shape and edit it in two ways. The first way is by automatically generating an outline, and then moving the control points of the generated outline to further refine its shape. Alternatively click and drag over any space in the Custom Outline editor window to create a rectangular outline with four control points and begin refining the outline by moving the control points or adding and removing them.",1359],["Click and drag over the Sprite texture in the editor window to create rectangle outlines with four control points. Repeat this step to create multiple Mesh outlines within the Sprite. Unity only renders the areas enclosed within the Mesh outlines.",1359],["Moving control points**",1359],["To adjust the shape of the Mesh outline, click and drag its control points. When you hover over a control point, it turns blue to indicate that you can select it. Click and drag the control point to different positions to adjust the shape of the Mesh outline. You can select multiple control points at once by clicking and dragging the cursor over an area to select all control points within that area. You can then re-position or remove all selected control points altogether.",1359],["Adding/Removing control points ",1359],["To add a control point, place the cursor over the edge of the outline. A preview of the control point appears along the outline’s edge. Click to add a new control point at that location. To remove a control point, select it and press the Del/Command+Del keys.",1359],["Moving edges",1359],["To move a section between two control points, hold the Control/Ctrl key to select the edges of the outline instead of its control points. To change the shape of the outline, click and drag the highlighted edge to move them into new positions.",1359],["Copy and Paste editor window functions added in 2020.1 NewIn20201",1359],["Edit Outline renamed to Custom Outline in Unity version 2017.3.",1359],["Sprite Packer",1360],["Sprite Packer deprecation",1360],["Please note that Sprite Packer is deprecated for Unity 2020.1 and newer, and will no longer be available as an option from Sprite Packer Modes. Existing Projects already using Sprite Packer will still be able to continue using it, however any new Project created in 2020.1 onwards will default to the Sprite Atlas system when packing Textures.",1360],["Introduction",1360],["When designing Sprite graphics, it is convenient to work with a separate Texture file for each character. However, a significant portion of a Sprite Texture will often be taken up by the empty space between the graphic elements and this space will result in wasted video memory at runtime. For optimal performance, it is best to pack graphics from several Sprite textures tightly together within a single Texture known as an atlas. Unity provides a Sprite Packer utility to automate the process of generating atlases from the individual Sprite textures.",1360],["Unity handles the generation and use of Sprite atlas textures behind the scenes so that the user needs to do no manual assignment. The atlas can optionally be packed on entering Play mode or during a build and the graphics for a Sprite object will be obtained from the atlas once it is generated.",1360],["Users are required to specify a Packing Tag in the Texture Importer to enable packing for Sprites of that Texture.",1360],["Using the Sprite Packer",1360],["The Sprite Packer is disabled by default but you can configure it from the Editor window (menu: Edit > Project Settings, then select the Editor category). The Sprite packing mode can be changed from Disabled to Enabled for Builds (packing is used for builds but not Play mode) or Always Enabled (packing is enabled for both Play mode and builds).",1360],["If you open the Sprite Packer window (menu: Window > 2D > Sprite Packer) and click the Pack button in the top-left corner, you will see the arrangement of the textures packed within the atlas.",1360],["If you select a Sprite in the Project panel, this will also be highlighted to show its position in the atlas. The outline is actually the render mesh outline and it also defines the area used for tight packing.",1360],["The toolbar at the top of the Sprite Packer window has a number of controls that affect packing and viewing. The Pack buttons initiates the packing operation but will not force any update if the atlas hasn't changed since it was last packed. (A related Repack button will appear when you implement a custom packing policy as explained in Customizing the Sprite Packer below). The View Atlas and Page # menus allow you to choose which page of which atlas is shown in the window (a single atlas may be split into more than one \"page\" if there is not enough space for all Sprites in the maximum Texture size). The menu next to the page number selects which \"packing policy\" is used for the atlas (see below). At the right of the toolbar are two controls to zoom the view and to switch between color and alpha display for the atlas.",1360],["Packing policy",1360],["The Sprite Packer uses a packing policy to decide how to assign Sprites into atlases. It is possible to create your own packing policies (see below) but the Default Packer Policy, Tight Packer Policy and Tight Rotate Enabled Sprite Packer Policy options are always available. With these policies, the Packing Tag property in the Texture Importer directly selects the name of the atlas where the Sprite will be packed and so all Sprites with the same packing tag will be packed in the same atlas. Atlases are then further sorted by the Texture import settings so that they match whatever the user sets for the source textures. Sprites with the same Texture compression settings will be grouped into the same atlas where possible.",1360],["DefaultPackerPolicy will use rectangle packing by default unless \"[TIGHT]\" is specified in the Packing Tag (i.e. setting your packing tag to \"[TIGHT]Character\" will allow tight packing).",1360],["TightPackerPolicy will use tight packing by default if Sprite have tight meshes. If \"[RECT]\" is specified in the Packing Tag, rectangle packing will be done (i.e. setting your packing tag to \"[RECT]UI_Elements\" will force rect packing).",1360],["TightRotateEnabledSpritePackerPolicy will use tight packing by default if Sprite have tight meshes and will enable rotation of Sprites. If \"[RECT]\" is specified in the Packing Tag, rectangle packing will be done (i.e. setting your packing tag to \"[RECT]UI_Elements\" will force rect packing).",1360],["Customizing the Sprite Packer",1360],["The DefaultPackerPolicy option is sufficient for most purposes but you can also implement your own custom packing policy if you need to. To do this, you need to implement the UnityEditor.Sprites.IPackerPolicy interface for a class in an editor script. This interface requires the following methods:",1360],["GetVersion - return the version value of your packer policy. Version should be bumped if modifications are done to the policy script and this policy is saved to version control.",1360],["OnGroupAtlases - implement your packing logic here. Define atlases on the PackerJob and assign Sprites from the given TextureImporters.",1360],["DefaultPackerPolicy uses rect packing (see SpritePackingMode) by default. This is useful if you're doing texture-space effects or would like to use a different mesh for rendering the Sprite. Custom policies can override this and instead use tight packing.",1360],["Repack button is only enabled when a custom policy is selected.",1360],["OnGroupAtlases will not be called unless TextureImporter metadata or the selected PackerPolicy version values change.",1360],["Use Repack button when working on your custom policy.",1360],["Sprites can be packed rotated with TightRotateEnabledSpritePackerPolicy automatically.",1360],["SpritePackingRotation is a reserved type for future Unity versions.",1360],["Other",1360],["Atlases are cached in Project\\Library\\AtlasCache.",1360],["Deleting this folder and then launching Unity will force atlases to be repacked. Unity must be closed when doing so.",1360],["Atlas cache is not loaded at start.",1360],["All textures must be checked when packing for the first time after Unity is restarted. This operation might take some time depending on the total number of textures in the project.",1360],["Only the required atlases are loaded.",1360],["Default maximum atlas size is 2048x2048.",1360],["When PackingTag is set, Texture will not be compressed so that the SpritePacker can grab original pixel values and then do compression on the atlas.",1360],["DefaultPackerPolicy",1360],["using System;",1360],["using System.Linq;",1360],["using UnityEngine;",1360],["using UnityEditor;",1360],["using System.Collections.Generic;",1360],["public class DefaultPackerPolicySample : UnityEditor.Sprites.IPackerPolicy",1360],["protected class Entry",1360],["public Sprite Sprite;",1360],["public UnityEditor.Sprites.AtlasSettings settings;",1360],["public string atlasName;",1360],["public SpritePackingMode packingMode;",1360],["public int anisoLevel;",1360],["private const uint kDefaultPaddingPower = 3; // Good for base and two mip levels.",1360],["public virtual int GetVersion() { return 1; }",1360],["protected virtual string TagPrefix { get { return \"[TIGHT]\"; } }",1360],["protected virtual bool AllowTightWhenTagged { get { return true; } }",1360],["protected virtual bool AllowRotationFlipping { get { return false; } }",1360],["public static bool IsCompressedFormat(TextureFormat fmt)",1360],["if (fmt >= TextureFormat.DXT1 && fmt <= TextureFormat.DXT5)",1360],["return true;",1360],["if (fmt >= TextureFormat.DXT1Crunched && fmt <= TextureFormat.DXT5Crunched)",1360],["return true;",1360],["if (fmt >= TextureFormat.PVRTC_RGB2 && fmt <= TextureFormat.PVRTC_RGBA4)",1360],["return true;",1360],["if (fmt == TextureFormat.ETC_RGB4)",1360],["return true;",1360],["if (fmt >= TextureFormat.ATC_RGB4 && fmt <= TextureFormat.ATC_RGBA8)",1360],["return true;",1360],["if (fmt >= TextureFormat.EAC_R && fmt <= TextureFormat.EAC_RG_SIGNED)",1360],["return true;",1360],["if (fmt >= TextureFormat.ETC2_RGB && fmt <= TextureFormat.ETC2_RGBA8)",1360],["return true;",1360],["if (fmt >= TextureFormat.ASTC_RGB_4x4 && fmt <= TextureFormat.ASTC_RGBA_12x12)",1360],["return true;",1360],["if (fmt >= TextureFormat.DXT1Crunched && fmt <= TextureFormat.DXT5Crunched)",1360],["return true;",1360],["return false;",1360],["public void OnGroupAtlases(BuildTarget target, UnityEditor.Sprites.PackerJob job, int[] textureImporterInstanceIDs)",1360],["List entries = new List();",1360],["foreach (int instanceID in textureImporterInstanceIDs)",1360],["TextureImporter ti = EditorUtility.InstanceIDToObject(instanceID) as TextureImporter;",1360],["TextureFormat desiredFormat;",1360],["ColorSpace colorSpace;",1360],["int compressionQuality;",1360],["ti.ReadTextureImportInstructions(target, out desiredFormat, out colorSpace, out compressionQuality);",1360],["TextureImporterSettings tis = new TextureImporterSettings();",1360],["ti.ReadTextureSettings(tis);",1360],["Sprite[] Sprites =",1360],["AssetDatabase.LoadAllAssetRepresentationsAtPath(ti.assetPath)",1360],[".Select(x => x as Sprite)",1360],[".Where(x => x != null)",1360],[".ToArray();",1360],["foreach (Sprite Sprite in Sprites)",1360],["Entry entry = new Entry();",1360],["entry.Sprite = Sprite;",1360],["entry.settings.format = desiredFormat;",1360],["entry.settings.colorSpace = colorSpace;",1360],["// Use Compression Quality for Grouping later only for Compressed Formats. Otherwise leave it Empty.",1360],["entry.settings.compressionQuality = IsCompressedFormat(desiredFormat) ? compressionQuality : 0;",1360],["entry.settings.filterMode = Enum.IsDefined(typeof(FilterMode), ti.filterMode)",1360],["? ti.filterMode",1360],[": FilterMode.Bilinear;",1360],["entry.settings.maxWidth = 2048;",1360],["entry.settings.maxHeight = 2048;",1360],["entry.settings.generateMipMaps = ti.mipmapEnabled;",1360],["entry.settings.enableRotation = AllowRotationFlipping;",1360],["if (ti.mipmapEnabled)",1360],["entry.settings.paddingPower = kDefaultPaddingPower;",1360],["else",1360],["entry.settings.paddingPower = (uint)EditorSettings.SpritePackerPaddingPower;",1360],["if ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION",1360],["entry.settings.allowsAlphaSplitting = ti.GetAllowsAlphaSplitting ();",1360],["endif //ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION",1360],["entry.atlasName = ParseAtlasName(ti.SpritePackingTag);",1360],["entry.packingMode = GetPackingMode(ti.SpritePackingTag, tis.SpriteMeshType);",1360],["entry.anisoLevel = ti.anisoLevel;",1360],["entries.Add(entry);",1360],["Resources.UnloadAsset(ti);",1360],["// First split Sprites into groups based on atlas name",1360],["var atlasGroups =",1360],["from e in entries",1360],["group e by e.atlasName;",1360],["foreach (var atlasGroup in atlasGroups)",1360],["int page = 0;",1360],["// Then split those groups into smaller groups based on texture settings",1360],["var settingsGroups =",1360],["from t in atlasGroup",1360],["group t by t.settings;",1360],["foreach (var settingsGroup in settingsGroups)",1360],["string atlasName = atlasGroup.Key;",1360],["if (settingsGroups.Count() > 1)",1360],["atlasName += string.Format(\" (Group {0})\", page);",1360],["UnityEditor.Sprites.AtlasSettings settings = settingsGroup.Key;",1360],["settings.anisoLevel = 1;",1360],["// Use the highest aniso level from all entries in this atlas",1360],["if (settings.generateMipMaps)",1360],["foreach (Entry entry in settingsGroup)",1360],["if (entry.anisoLevel > settings.anisoLevel)",1360],["settings.anisoLevel = entry.anisoLevel;",1360],["job.AddAtlas(atlasName, settings);",1360],["foreach (Entry entry in settingsGroup)",1360],["job.AssignToAtlas(atlasName, entry.Sprite, entry.packingMode, SpritePackingRotation.None);",1360],["++page;",1360],["protected bool IsTagPrefixed(string packingTag)",1360],["packingTag = packingTag.Trim();",1360],["if (packingTag.Length < TagPrefix.Length)",1360],["return false;",1360],["return (packingTag.Substring(0, TagPrefix.Length) == TagPrefix);",1360],["private string ParseAtlasName(string packingTag)",1360],["string name = packingTag.Trim();",1360],["if (IsTagPrefixed(name))",1360],["name = name.Substring(TagPrefix.Length).Trim();",1360],["return (name.Length == 0) ? \"(unnamed)\" : name;",1360],["private SpritePackingMode GetPackingMode(string packingTag, SpriteMeshType meshType)",1360],["if (meshType == SpriteMeshType.Tight)",1360],["if (IsTagPrefixed(packingTag) == AllowTightWhenTagged)",1360],["return SpritePackingMode.Tight;",1360],["return SpritePackingMode.Rectangle;",1360],["TightPackerPolicy",1360],["using System;",1360],["using System.Linq;",1360],["using UnityEngine;",1360],["using UnityEditor;",1360],["using UnityEditor.Sprites;",1360],["using System.Collections.Generic;",1360],["// TightPackerPolicy will tightly pack non-rectangle Sprites unless their packing tag contains \"[RECT]\".",1360],["class TightPackerPolicySample : DefaultPackerPolicySample",1360],["protected override string TagPrefix { get { return \"[RECT]\"; } }",1360],["protected override bool AllowTightWhenTagged { get { return false; } }",1360],["protected override bool AllowRotationFlipping { get { return false; } }",1360],["TightRotateEnabledSpritePackerPolicy",1360],["using System;",1360],["using System.Linq;",1360],["using UnityEngine;",1360],["using UnityEditor;",1360],["using UnityEditor.Sprites;",1360],["using System.Collections.Generic;",1360],["// TightPackerPolicy will tightly pack non-rectangle Sprites unless their packing tag contains \"[RECT]\".",1360],["class TightRotateEnabledSpritePackerPolicySample : DefaultPackerPolicySample",1360],["protected override string TagPrefix { get { return \"[RECT]\"; } }",1360],["protected override bool AllowTightWhenTagged { get { return false; } }",1360],["protected override bool AllowRotationFlipping { get { return true; } }",1360],["Sprite Packer deprecated in 2020.1 NewIn20191",1360],["Sprite Packer Modes",1361],["To enable or disable the Sprite Atlas default packing behavior, open the Editor settings (menu: Edit > Project Settings > Editor) and navigate to Sprite Packer > Mode. Select the Sprite Packer Mode to determine how Unity uses the Sprite Atlas within the Editor.",1361],["Mode Function",1361],["",1361],["Disabled** Select this mode to disable Sprite Atlas packing in the current Project. Sprite Atlases are not built when the Project enters Play mode or when publishing a build. Pack Preview is also disabled.",1361],["Sprite Atlas V1 - Enabled For Builds** Select this mode to have Unity pack Sprites into the Sprite Atlas when publishing builds only. The Editor and Play mode reference the original source Texture instead of the Texture within the Sprite Atlas.",1361],["Sprite Atlas V1 - Always Enabled** This option is enabled by default. Select this mode to have Unity pack selected Textures into the Sprite Atlas, and Sprites reference the packed Textures during runtime. However, Sprites will reference the original unpacked Textures during Edit mode.",1361],["Sprite Atlas V2 - Enabled** Select this mode to have Unity pack Sprites into the Sprite Atlas immediately when there are any changes. The packed Sprite Atlas is available when the project enters Play mode or when publishing a build.",1361],["Sprite Atlas V2 - Enabled For Builds** Select this mode to have Unity pack Sprites into the Sprite Atlas only when publishing a build. The Editor and Play mode will reference the original unpacked Textures.",1361],["Set up sprites",1362],["Sprites are a type of 2D asset in Unity projects. You can access sprites in the Project view.",1362],["Import your image",1362],["You can import sprites into your project through one of the following methods:",1362],["In your computer’s File Explorer (macOS: Finder), place your image directly into your Unity project’s Assets folder. Unity detects this and displays it in the Project view.",1362],["In Unity, go to Assets > Import New Asset. From the File Explorer (macOS: Finder) window that opens, select your chosen image. Unity displays your chosen image in the Project view.",1362],["For more information on organizing your Assets folder, refer to Importing assets.",1362],["Set your imported image as a sprite",1362],["If you set your project to 2D, Unity automatically sets the image you import as a sprite. Unity will also automatically create sprites based on the Automatic Slicing behavior in Sprite Editor window. If you set your project to 3D instead, Unity imports your image as a texture.",1362],["To change the asset's Texture Type:",1362],["Select the asset to access its Import Inspector.",1362],["Set the Texture Type to Sprite (2D and UI).",1362],["For more information about Texture Type settings, refer to Sprite (2D and UI) import settings reference.",1362],["Sort sprites",1363],["Unity sorts renderers by several criteria, such as their Layer order or their distance from the Camera. Unity’s Graphics settings (menu: Edit > Project Settings > Graphics) provide a setting called Transparency Sort Mode, which you can use to control how to sort sprites depending on their position in relation to the Camera. More specifically, it uses the sprite’s position on an axis to determine which ones are transparent compared to others.",1363],["An example of when you might use this setting is to sort Sprites along the y-axis. This is quite common in 2D games, where sprites that are higher up the y-axis are sorted behind sprites that are lower, to make them appear further away.",1363],["There are four Transparency Sort Mode options available:",1363],["Sort Mode Description ",1363],[":-------------------------- :---------------------------------------------------------------- ",1363],["Default Sorts based on whether the Camera’s Projection mode is set to Perspective or Orthographic. ",1363],["Perspective Sorts based on perspective view. Perspective view sorts sprites based on the distance from the Camera’s position to the sprite’s center. ",1363],["Orthographic Sorts based on orthographic view. Orthographic view sorts sprites based on the distance along the view direction. ",1363],["Custom Axis Sorts based on the given axis set in Transparency Sort Axis. ",1363],["If you set the Transparency Sort Mode to Custom Axis, you also need to set the Transparency Sort Axis.",1363],["If the Transparency Sort Mode is set to Custom Axis, renderers in the Scene view are sorted based on the distance of this axis from the camera. Use a value between -1 and 1 to define the axis. For example: X=0, Y=1, Z=0 sets the axis direction to up. X=1, Y=1, Z=0 sets the axis to a diagonal direction between X and Y.",1363],["For example, if you want sprites to behave like the ones in the image above, set the Transparency Sort Mode to Custom Axis, and set the Y value for the Transparency Sort Axis to a value higher than 0.",1363],["Sort sprites using scripts",1363],["You can also sort sprites per camera through scripts, by modifying the following properties in Camera:",1363],["For example:",1363],["var camera = GetComponent();",1363],["camera.transparencySortMode = TransparencySortMode.CustomAxis;",1363],["camera.transparencySortAxis = new Vector3(0.0f, 1.0f, 0.0f);",1363],["Work with sprites",1364],["Sprites are a type of 2D asset you can use in your Unity project. Use this section to learn how to set up your sprites and manage them with different components.",1364],["If you're used to working in 3D, sprites are similar to standard textures but there are special techniques to combine and manage sprite textures for efficiency during development.",1364],["Topic Description ",1364],[":------------------------------------------------- :---------------------------------------------------------------- ",1364],["Set up sprites Learn how to import and set up your sprites. ",1364],["Sort sprites Learn how to sort your sprites in Unity. ",1364],["Sprite Renderer Display images as sprites in both 2D and 3D scenes. ",1364],["Sprite Creator Create placeholder sprites in your project. ",1364],["Sprite Editor Prepare and edit sprites sliced from a larger image texture. ",1364],["Sorting Groups Use Sorting Groups to group GameObjects together with Sprite Renderers. ",1364],["9-slicing sprites Apply 9-slicing to reuse your sprites in various sizes. ",1364],["Sprite Mask Hide or reveal parts of a sprite or a group of sprites. ",1364],["Sprite Atlas Optimize the performance of video memory in your project. ",1364],["Sprite Shape Renderer Control the geometry and rendering of a Sprite Shape in a scene. ",1364],["Additional resources",1364],["Creating a Render Pipeline Asset and Render Pipeline Instance in a custom render pipeline",1365],["If you are creating your own render pipeline based on the Scriptable Render Pipeline (SRP), your Project must contain:",1365],["A script that inherits from RenderPipelineAsset and overrides its CreatePipeline() method. This script defines your Render Pipeline Asset.",1365],["A script that inherits from RenderPipeline, and overrides its Render() method. This script defines your Render Pipeline Instance, and is where you write your custom rendering code.",1365],["A Render Pipeline Asset that you have created from your RenderPipelineAsset script. This asset acts as a factory class for your Render Pipeline Instance.",1365],["Because these elements are so closely related, you should create them at the same time.",1365],["Creating a basic Render Pipeline Asset and Render Pipeline Instance",1365],["The following example shows how to create a script for a basic custom Render Pipeline Asset that instantiates the Render Pipeline Instance, a script that defines the Render Pipeline Instance, and the Render Pipeline Asset itself.",1365],["Create a C# script called ExampleRenderPipelineAsset.cs.",1365],["Copy and paste the following code into the new script:",1365],["```C#",1365],["using UnityEngine;",1365],["using UnityEngine.Rendering;",1365],["// The CreateAssetMenu attribute lets you create instances of this class in the Unity Editor.",1365],["[CreateAssetMenu(menuName = \"Rendering/ExampleRenderPipelineAsset\")]",1365],["public class ExampleRenderPipelineAsset : RenderPipelineAsset",1365],["// Unity calls this method before rendering the first frame.",1365],["// If a setting on the Render Pipeline Asset changes, Unity destroys the current Render Pipeline Instance and calls this method again before rendering the next frame.",1365],["protected override RenderPipeline CreatePipeline() {",1365],["// Instantiate the Render Pipeline that this custom SRP uses for rendering.",1365],["return new ExampleRenderPipelineInstance();",1365],["Create a C# script called ExampleRenderPipelineInstance.cs.",1365],["Copy and paste the following code into the new script:",1365],["```C#",1365],["using UnityEngine;",1365],["using UnityEngine.Rendering;",1365],["public class ExampleRenderPipelineInstance : RenderPipeline",1365],["public ExampleRenderPipelineInstance() {",1365],["protected override void Render (ScriptableRenderContext context, Camera[] cameras) {",1365],["// This is where you can write custom rendering code. Customize this method to customize your SRP.",1365],["In the Project view, either click the add (+) button, or open the context menu and navigate to Create, and then choose Rendering > Example Render Pipeline Asset. Unity creates a new Render Pipeline Asset in the Project view.",1365],["Creating a configurable Render Pipeline Asset and Render Pipeline Instance",1365],["By default, a Render Pipeline Asset stores information about which Render Pipeline Instance to use for rendering, and the default Materials and Shaders to use in the Editor. In your RenderPipelineAsset script, you can extend your Render Pipeline Asset so that it stores additional data, and you can have multiple different Render Pipeline Assets with different configurations in your Project. For example, you might use a Render Pipeline Asset to hold configuration data for each different tier of hardware. The High Definition Render Pipeline (HDRP) and the Universal Render Pipeline (URP) include examples of this.",1365],["The following example shows how to create a RenderPipelineAsset script that defines a Render Pipeline Asset with public data that you can set for each instance using the Inspector, and a Render Pipeline Instance that receives a Render Pipeline Asset in its constructor and uses data from that Render Pipeline Asset.",1365],["Create a C# script called ExampleRenderPipelineAsset.cs.",1365],["Copy and paste the following code into the new script:",1365],["```C#",1365],["using UnityEngine;",1365],["using UnityEngine.Rendering;",1365],["// The CreateAssetMenu attribute lets you create instances of this class in the Unity Editor.",1365],["[CreateAssetMenu(menuName = \"Rendering/ExampleRenderPipelineAsset\")]",1365],["public class ExampleRenderPipelineAsset : RenderPipelineAsset",1365],["// This data can be defined in the Inspector for each Render Pipeline Asset",1365],["public Color exampleColor;",1365],["public string exampleString;",1365],["// Unity calls this method before rendering the first frame.",1365],["// If a setting on the Render Pipeline Asset changes, Unity destroys the current Render Pipeline Instance and calls this method again before rendering the next frame.",1365],["protected override RenderPipeline CreatePipeline() {",1365],["// Instantiate the Render Pipeline that this custom SRP uses for rendering, and pass a reference to this Render Pipeline Asset.",1365],["// The Render Pipeline Instance can then access the configuration data defined above.",1365],["return new ExampleRenderPipelineInstance(this);",1365],["Create a C# script called ExampleRenderPipelineInstance.cs.",1365],["Copy and paste the following code into the new script:",1365],["```C#",1365],["using UnityEngine;",1365],["using UnityEngine.Rendering;",1365],["public class ExampleRenderPipelineInstance : RenderPipeline",1365],["// Use this variable to a reference to the Render Pipeline Asset that was passed to the constructor",1365],["private ExampleRenderPipelineAsset renderPipelineAsset;",1365],["// The constructor has an instance of the ExampleRenderPipelineAsset class as its parameter.",1365],["public ExampleRenderPipelineInstance(ExampleRenderPipelineAsset asset) {",1365],["renderPipelineAsset = asset;",1365],["protected override void Render(ScriptableRenderContext context, Camera[] cameras) {",1365],["// This is an example of using the data from the Render Pipeline Asset.",1365],["Debug.Log(renderPipelineAsset.exampleString);",1365],["// This is where you can write custom rendering code. Customize this method to customize your SRP.",1365],["In the Project view, either click the add (+) button, or open the context menu and navigate to Create, and then choose Rendering > Example Render Pipeline Asset. Unity creates a new Render Pipeline Asset in the Project view.",1365],["Creating a simple render loop in a custom render pipeline",1366],["A render loop is the term for all of the rendering operations that take place in a single frame. This page contains information on creating a simple render loop in a custom render pipeline that is based on Unity's Scriptable Render Pipeline.",1366],["The code examples on this page demonstrate the basic principles of using the Scriptable Render Pipeline. You can use this information to build your own custom Scriptable Render Pipeline, or to understand how Unity's prebuilt Scriptable Render Pipelines work.",1366],["Preparing your project",1366],["Before you begin writing the code for your render loop, you must prepare your project.",1366],["The steps are as follows:",1366],["Create an SRP-compatible shader.",1366],["Create one or more GameObjects to render.",1366],["Create the basic structure of your custom SRP.",1366],["Optional: If you plan to extend your simple custom SRP to add more complex functionality, install the SRP Core package. The SRP Core package includes the SRP Core shader library (which you can use to make your shaders SRP Batcher compatible), and utility functions for common operations. For more information, see the SRP Core package documentation.",1366],["",1366],["Creating an SRP-compatible shader",1366],["In the Scriptable Render Pipeline, you use the LightMode Pass tag to determine how to draw geometry. For more information on Pass tags, see ShaderLab: assigning tags to a Pass.",1366],["This task shows you how to create a very simple unlit Shader object with a LightMode Pass tag value of ExampleLightModeTag.",1366],["Create a new shader asset in your project. For instructions on creating a shader asset, see Shader assets.",1366],["In your Project view, double click the shader asset to open the shader source code in a text editor.",1366],["Replace the existing code with the following:",1366],["// This defines a simple unlit Shader object that is compatible with a custom Scriptable Render Pipeline.",1366],["// It applies a hardcoded color, and demonstrates the use of the LightMode Pass tag.",1366],["// It is not compatible with SRP Batcher.",1366],["Shader \"Examples/SimpleUnlitColor\"",1366],["SubShader",1366],["Pass",1366],["// The value of the LightMode Pass tag must match the ShaderTagId in ScriptableRenderContext.DrawRenderers",1366],["Tags { \"LightMode\" = \"ExampleLightModeTag\"}",1366],["HLSLPROGRAM",1366],["pragma vertex vert",1366],["pragma fragment frag",1366],["float4x4 unity_MatrixVP;",1366],["float4x4 unity_ObjectToWorld;",1366],["struct Attributes",1366],["float4 positionOS : POSITION;",1366],["};",1366],["struct Varyings",1366],["float4 positionCS : SV_POSITION;",1366],["};",1366],["Varyings vert (Attributes IN)",1366],["Varyings OUT;",1366],["float4 worldPos = mul(unity_ObjectToWorld, IN.positionOS);",1366],["OUT.positionCS = mul(unity_MatrixVP, worldPos);",1366],["return OUT;",1366],["float4 frag (Varyings IN) : SV_TARGET",1366],["return float4(0.5,1,0.5,1);",1366],["ENDHLSL",1366],["",1366],["Creating a GameObject to render",1366],["To test that your render loop works, you must create something to render. This task shows you how to put GameObjects in your scene that use the SRP-compatible shader that you created in the previous task.",1366],["Create a new material asset in your Unity project. For instructions see Materials.",1366],["Assign the shader asset to the material asset. For instructions, see Materials.",1366],["Create a cube in your scene. For instructions, see Primitive objects.",1366],["Assign the material to it. For instructions, see Materials.",1366],["",1366],["Creating the basic structure of your custom SRP",1366],["The final stage of preparation is to create the basic source files needed for your custom SRP, and tell Unity to begin rendering using the custom SRP.",1366],["Create a class that inherits from RenderPipeline and a compatible Render Pipeline Asset, following the instructions in Creating a Render Pipeline Instance and Render Pipeline Asset",1366],["Set the active Render Pipeline Asset, following the instructions in How to get, set, and configure the active render pipeline. Unity will begin rendering using the custom SRP immediately, which means that your Scene view and Game view will be blank until you add code to your custom SRP.",1366],["Creating the render loop",1366],["In a simple render loop, the basic operations are:",1366],["Clearing the render target, which means removing the geometry that was drawn during the last frame.",1366],["Culling, which means filtering out geometry that is not visible to a Camera.",1366],["Drawing, which means telling the GPU what geometry to draw, and how to draw it.",1366],["",1366],["Clearing the render target",1366],["Clearing means removing the things that were drawn during the last frame. The render target is usually the screen; however, you can also render to textures to create a \"picture in picture\" effect. These examples demonstrate how to render to the screen, which is Unity's default behavior.",1366],["To clear the render target in the Scriptable Render Pipeline, you do the following:",1366],["Configure a CommandBuffer with a Clear command.",1366],["Add the CommandBuffer to the queue of commands on the ScriptableRenderContext; to do this, call ScriptableRenderContext.ExecuteCommandBuffer.",1366],["Instruct the graphics API to perform the queue of commands on the ScriptableRenderContext; to do this, call ScriptableRenderContext.Submit.",1366],["As with all Scriptable Render Pipeline operations, you use the RenderPipeline.Render method as the entry point for this code. This example code demonstrates how to do this:",1366],["```c#",1366],["/*",1366],["This is a simplified example of a custom Scriptable Render Pipeline.",1366],["It demonstrates how a basic render loop works.",1366],["It shows the clearest workflow, rather than the most efficient runtime performance.",1366],["/",1366],["using UnityEngine;",1366],["using UnityEngine.Rendering;",1366],["public class ExampleRenderPipeline : RenderPipeline {",1366],["public ExampleRenderPipeline() {",1366],["protected override void Render (ScriptableRenderContext context, Camera[] cameras) {",1366],["// Create and schedule a command to clear the current render target",1366],["var cmd = new CommandBuffer();",1366],["cmd.ClearRenderTarget(true, true, Color.black);",1366],["context.ExecuteCommandBuffer(cmd);",1366],["cmd.Release();",1366],["// Instruct the graphics API to perform all scheduled commands",1366],["context.Submit();",1366],["",1366],["Culling",1366],["Culling is the process of filtering out geometry that is not visible to a Camera.",1366],["To cull in the Scriptable Render Pipeline, you do the following:",1366],["Populate a ScriptableCullingParameters struct with data about a Camera; to do this, call Camera.TryGetCullingParameters.",1366],["Optional: Manually update the values of the ScriptableCullingParameters struct.",1366],["Call ScriptableRenderContext.Cull, and store the results in a CullingResults struct.",1366],["This example code extends the example above, and demonstrates how to clear the render target and then perform a culling operation:",1366],["```c#",1366],["/*",1366],["This is a simplified example of a custom Scriptable Render Pipeline.",1366],["It demonstrates how a basic render loop works.",1366],["It shows the clearest workflow, rather than the most efficient runtime performance.",1366],["/",1366],["using UnityEngine;",1366],["using UnityEngine.Rendering;",1366],["public class ExampleRenderPipeline : RenderPipeline {",1366],["public ExampleRenderPipeline() {",1366],["protected override void Render (ScriptableRenderContext context, Camera[] cameras) {",1366],["// Create and schedule a command to clear the current render target",1366],["var cmd = new CommandBuffer();",1366],["cmd.ClearRenderTarget(true, true, Color.black);",1366],["context.ExecuteCommandBuffer(cmd);",1366],["cmd.Release();",1366],["// Iterate over all Cameras",1366],["foreach (Camera camera in cameras)",1366],["// Get the culling parameters from the current Camera",1366],["camera.TryGetCullingParameters(out var cullingParameters);",1366],["// Use the culling parameters to perform a cull operation, and store the results",1366],["var cullingResults = context.Cull(ref cullingParameters);",1366],["// Instruct the graphics API to perform all scheduled commands",1366],["context.Submit();",1366],["",1366],["Drawing",1366],["Drawing is the process of instructing the graphics API to draw a given set of geometry with given settings.",1366],["To draw in SRP, you do the following:",1366],["Perform a culling operation, as described above, and store the results in a CullingResults struct.",1366],["Create and configure FilteringSettings struct, which describes how to filter the culling results.",1366],["Create and configure a DrawingSettings struct, which describes which geometry to draw and how to draw it.",1366],["Optional: By default, Unity sets the render state based on the Shader object. If you want to override the render state for some or all of the geometry that you are about to draw, you can use a RenderStateBlock struct to do this.",1366],["Call ScriptableRenderContext.DrawRenderers, and pass the structs that you created as parameters. Unity draws the filtered set of geometry, according to the settings.",1366],["This example code builds on the examples above, and demonstrates how to clear the render target, perform a culling operation, and draw the resulting geometry:",1366],["```c#",1366],["/*",1366],["This is a simplified example of a custom Scriptable Render Pipeline.",1366],["It demonstrates how a basic render loop works.",1366],["It shows the clearest workflow, rather than the most efficient runtime performance.",1366],["/",1366],["using UnityEngine;",1366],["using UnityEngine.Rendering;",1366],["public class ExampleRenderPipeline : RenderPipeline {",1366],["public ExampleRenderPipeline() {",1366],["protected override void Render (ScriptableRenderContext context, Camera[] cameras) {",1366],["// Create and schedule a command to clear the current render target",1366],["var cmd = new CommandBuffer();",1366],["cmd.ClearRenderTarget(true, true, Color.black);",1366],["context.ExecuteCommandBuffer(cmd);",1366],["cmd.Release();",1366],["// Iterate over all Cameras",1366],["foreach (Camera camera in cameras)",1366],["// Get the culling parameters from the current Camera",1366],["camera.TryGetCullingParameters(out var cullingParameters);",1366],["// Use the culling parameters to perform a cull operation, and store the results",1366],["var cullingResults = context.Cull(ref cullingParameters);",1366],["// Update the value of built-in shader variables, based on the current Camera",1366],["context.SetupCameraProperties(camera);",1366],["// Tell Unity which geometry to draw, based on its LightMode Pass tag value",1366],["ShaderTagId shaderTagId = new ShaderTagId(\"ExampleLightModeTag\");",1366],["// Tell Unity how to sort the geometry, based on the current Camera",1366],["var sortingSettings = new SortingSettings(camera);",1366],["// Create a DrawingSettings struct that describes which geometry to draw and how to draw it",1366],["DrawingSettings drawingSettings = new DrawingSettings(shaderTagId, sortingSettings);",1366],["// Tell Unity how to filter the culling results, to further specify which geometry to draw",1366],["// Use FilteringSettings.defaultValue to specify no filtering",1366],["FilteringSettings filteringSettings = FilteringSettings.defaultValue;",1366],["// Schedule a command to draw the geometry, based on the settings you have defined",1366],["context.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings);",1366],["// Schedule a command to draw the Skybox if required",1366],["if (camera.clearFlags == CameraClearFlags.Skybox && RenderSettings.skybox != null)",1366],["context.DrawSkybox(camera);",1366],["// Instruct the graphics API to perform all scheduled commands",1366],["context.Submit();",1366],["Creating a custom render pipeline based on the Scriptable Render Pipeline",1367],["This page contains information on how to get started with creating your own custom render pipeline based on the Scriptable Render Pipeline (SRP).",1367],["",1367],["Creating a new project and installing the packages needed for a custom render pipeline",1367],["These instructions show you how to create a custom render pipeline using the SRP Core package. SRP Core is a package made by Unity that contains a reusable code to help you make your own render pipeline, including boilerplate code for working with platform-specific graphics APIs, utility functions for common rendering operations, and the shader library that URP and HDRP use. For more information on SRP Core, see the SRP Core package documentation.",1367],["Create a new Unity Project.",1367],["Use Git to create a clone of the SRP source code repository. You can place the SRP source code in any location on your disk, as long as it is not in one of the reserved Project sub-folders.",1367],["Use Git to update your copy of the SRP source code to a branch that is compatible with your version of the Unity Editor. Read Using the latest version in the SRP repository documentation for information on branches and versions.",1367],["Open your Project in Unity, and install the following packages from the SRP source code folder on your disk, in the following order. For information on installing packages from disk, see Installing a package from a local folder.",1367],["com.unity.render-pipelines.core.",1367],["Optional: com.unity.render-pipelines.shadergraph. Install this package if you intend to use Shader Graph or modify the Shader Graph source code as part of your custom SRP.",1367],["Optional: com.unity.render-pipelines.visualeffectgraph. Install this package if you intend to use Visual Effect Graph or modify the Visual Effect Graph source code as part of your custom SRP.",1367],["You can now debug and modify the scripts in your copy of the SRP source code, and see the results of your changes in your Unity Project.",1367],["Creating a custom version of URP or HDRP",1367],["The Universal Render Pipeline (URP) and the High Definition Render Pipeline (HDRP) offer extensive customization options to help you achieve the graphics and performance you need. However, if you want even more control, you can create a custom version of one of these render pipelines, and modify the source code.",1367],["Follow steps 1-3 in the section above, Creating a new Project and installing the packages needed for a custom SRP. When you reach step 4, install the following packages in the following order:",1367],["URP:**",1367],["com.unity.render-pipelines.core",1367],["com.unity.render-pipelines.shadergraph",1367],["com.unity.render-pipelines.universal",1367],["HDRP:**",1367],["com.unity.render-pipelines.core",1367],["com.unity.render-pipelines.shadergraph",1367],["com.unity.render-pipelines.high-defintion",1367],["Creating a custom render pipeline",1368],["Unity provides two prebuilt render pipelines based on the Scriptable Render Pipeline (SRP): the High Definition Render Pipeline (HDRP), and the Universal Render Pipeline (URP). HDRP and URP offer extensive customization options; however, if you want even more control over your rendering pipeline, you can create your own custom render pipeline based on SRP.",1368],["Read this documentation if you want to create your own custom SRP, if you want to create a custom version of URP or HDRP, or if you want to understand how SRP works on a fundamental level.",1368],["This section contains the following pages:",1368],["How to get, set, and configure the active render pipeline",1369],["This page contains information on how to get, set, and configure the render pipeline that Unity is currently using. The render pipeline that Unity is currently using is called the active render pipeline.",1369],["Overview",1369],["To render content, Unity can either use the Built-in Render Pipeline or a render pipeline based on the Scriptable Render Pipeline (SRP), which includes the Universal Render Pipeline (URP) and the High Definition Render Pipeline (HDRP).",1369],["To specify which Scriptable Render Pipeline Unity uses, you use Render Pipeline Assets. A Render Pipeline Asset tells Unity which SRP to use, and how to configure it. If you don't specify a Render Pipeline Asset, Unity uses the Built-in Render Pipeline.",1369],["You can create multiple Render Pipeline Assets that use the same render pipeline, but with different configurations; for example, you can use different Render Pipeline Assets for different hardware quality levels. For a general introduction to Render Pipeline Assets, see Scriptable Render Pipeline introduction. For information on URP's Render Pipeline Asset, see The Universal Render Pipeline Asset, and for HDRP's Render Pipeline Asset, see The High Definition Render Pipeline Asset.",1369],["As soon as you change the active render pipeline in the Unity Editor or at runtime, Unity uses the new active render pipeline to render content. If you are in the Unity Editor, this includes the Game view, the Scene view, and previews for Materials in the Project panel and the Inspector.",1369],["When you change the active render pipeline, you must ensure that the assets and code in your project are compatible with the new render pipeline; otherwise, you might experience errors or unintended visual effects.",1369],["",1369],["Determining the active render pipeline",1369],["Settings in both Graphics Settings and Quality Settings determine the active render pipeline. In Graphics Settings, you configure the render pipeline that Unity uses by default. In Quality Settings, you can override the default render pipeline for a given quality level.",1369],["To get or set the default render pipeline, use Graphics Settings > Scriptable Render Pipeline Setting (or its equivalent API, GraphicsSettings.defaultRenderPipeline). To get or set the render pipeline that overrides the default for a given quality level, Quality Settings > Render Pipeline (or its equivalent API, QualitySettings.renderPipeline).",1369],["Unity determines the active render pipeline like this:",1369],["If the current Quality Settings level > Render Pipeline references a Render Pipeline Asset, Unity uses that value.",1369],["Otherwise:",1369],["If Graphics Settings > Scriptable Render Pipeline Setting references a Render Pipeline Asset, Unity uses that value.",1369],["Otherwise, Unity uses the Built-in Render Pipeline.",1369],["",1369],["How to get and set the active render pipeline in the Editor UI",1369],["Getting the active render pipeline",1369],["To get the active render pipeline in the Editor UI, you must check both the Graphics Settings and Quality Settings windows. For information on how to use these values to determine the active render pipeline, see Determining the active render pipeline.",1369],["Activating the Built-in Render Pipeline",1369],["To set the active render pipeline to the Built-in Render Pipeline, remove any Render Pipeline Assets from Graphics Settings and Quality Settings.",1369],["To do this:",1369],["Select Edit > Project Settings > Quality.",1369],["For each quality level, if a Render Pipeline Asset is assigned to the Render Pipeline field, unassign it.",1369],["Select Edit > Project Settings > Graphics.",1369],["If a Render Pipeline Asset is assigned to the Scriptable Render Pipeline Setting field, unassign it.",1369],["Activating URP, HDRP, or a custom render pipeline based on SRP",1369],["To set the active render pipeline to one that is based on SRP, tell Unity which Render Pipeline Asset to use as the default active render pipeline, and optionally which Render Pipeline Assets to use for each quality level.",1369],["To do this:",1369],["In your Project folder, locate the Render Pipeline Asset(s) that you want to use.",1369],["Set the default render pipeline, which Unity uses when there is no override for a given quality level. If you do not set this, Unity uses the Built-in Render Pipeline when no override applies.",1369],["Select Edit > Project Settings > Graphics.",1369],["Drag the Render Pipeline Asset on to the Scriptable Render Pipeline Setting field.",1369],["Optional: Set override Render Pipeline Assets for different quality levels.",1369],["Select Edit > Project Settings > Quality.",1369],["Drag the Render Pipeline Asset on to the Render Pipeline field.",1369],["",1369],["How to get and set the active render pipeline in C# scripts",1369],["In C# scripts, you can get and set the active render pipeline and receive a callback when the active render pipeline changes. You can do this in Edit Mode or Play Mode in the Unity Editor, or at runtime in your application.",1369],["To do this, use the following APIs:",1369],["There are several ways to get the active render pipeline:",1369],["To get a reference to the Render Pipeline Asset that defines the active render pipeline, use GraphicsSettings.currentRenderPipeline.",1369],["To get a reference to the Render Pipeline Asset that defines the active render pipeline and to determine whether Unity is using the default value or an override value, get the values of GraphicsSettings.defaultRenderPipeline and QualitySettings.renderPipeline. For information on how to use these values, see Determining the active render pipeline or the following code sample.",1369],["To get the RenderPipeline instance for the active render pipeline, use RenderPipelineManager.currentPipeline. Note: Unity updates this property only after it has rendered at least one frame with the active render pipeline.",1369],["To set the active render pipeline, set the values of GraphicsSettings.defaultRenderPipeline and QualitySettings.renderPipeline. For information on how to use these values, see Determining the active render pipeline or the following code sample.",1369],["To detect and execute code when the type of the active render pipeline changes, use RenderPipelineManager.activeRenderPipelineTypeChanged.",1369],["The following example code shows how to use these APIs:",1369],["using UnityEngine;",1369],["using UnityEngine.Rendering;",1369],["public class ActiveRenderPipelineExample : MonoBehaviour",1369],["// In the Inspector, assign a Render Pipeline Asset to each of these fields",1369],["public RenderPipelineAsset defaultRenderPipelineAsset;",1369],["public RenderPipelineAsset overrideRenderPipelineAsset;",1369],["void Start()",1369],["GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;",1369],["QualitySettings.renderPipeline = overrideRenderPipelineAsset;",1369],["DisplayCurrentRenderPipeline();",1369],["void Update()",1369],["// When the user presses the left shift key, switch the default render pipeline",1369],["if (Input.GetKeyDown(KeyCode.LeftShift)) {",1369],["SwitchDefaultRenderPipeline();",1369],["DisplayCurrentRenderPipeline();",1369],["// When the user presses the right shift key, switch the override render pipeline",1369],["else if (Input.GetKeyDown(KeyCode.RightShift)) {",1369],["SwitchOverrideRenderPipeline();",1369],["DisplayCurrentRenderPipeline();",1369],["// Switch the default render pipeline between null,",1369],["// and the render pipeline defined in defaultRenderPipelineAsset",1369],["void SwitchDefaultRenderPipeline()",1369],["if (GraphicsSettings.defaultRenderPipeline == defaultRenderPipelineAsset)",1369],["GraphicsSettings.defaultRenderPipeline = null;",1369],["else",1369],["GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;",1369],["// Switch the override render pipeline between null,",1369],["// and the render pipeline defined in overrideRenderPipelineAsset",1369],["void SwitchOverrideRenderPipeline()",1369],["if (QualitySettings.renderPipeline == overrideRenderPipelineAsset)",1369],["QualitySettings.renderPipeline = null;",1369],["else",1369],["QualitySettings.renderPipeline = overrideRenderPipelineAsset;",1369],["// Print the current render pipeline information to the console",1369],["void DisplayCurrentRenderPipeline()",1369],["// GraphicsSettings.defaultRenderPipeline determines the default render pipeline",1369],["// If it is null, the default is the Built-in Render Pipeline",1369],["if (GraphicsSettings.defaultRenderPipeline != null)",1369],["Debug.Log(\"The default render pipeline is defined by \" + GraphicsSettings.defaultRenderPipeline.name);",1369],["else",1369],["Debug.Log(\"The default render pipeline is the Built-in Render Pipeline\");",1369],["// QualitySettings.renderPipeline determines the override render pipeline for the current quality level",1369],["// If it is null, no override exists for the current quality level",1369],["if (QualitySettings.renderPipeline != null)",1369],["Debug.Log(\"The override render pipeline for the current quality level is defined by \" + QualitySettings.renderPipeline.name);",1369],["else",1369],["Debug.Log(\"No override render pipeline exists for the current quality level\");",1369],["// If an override render pipeline is defined, Unity uses that",1369],["// Otherwise, it falls back to the default value",1369],["if (QualitySettings.renderPipeline != null)",1369],["Debug.Log(\"The active render pipeline is the override render pipeline\");",1369],["else",1369],["Debug.Log(\"The active render pipeline is the default render pipeline\");",1369],["// To get a reference to the Render Pipeline Asset that defines the active render pipeline,",1369],["// without knowing if it is the default or an override, use GraphicsSettings.currentRenderPipeline",1369],["if (GraphicsSettings.currentRenderPipeline != null)",1369],["Debug.Log(\"The active render pipeline is defined by \" +GraphicsSettings.currentRenderPipeline.name);",1369],["else",1369],["Debug.Log(\"The active render pipeline is the Built-in Render Pipeline\");",1369],["Scheduling and executing rendering commands in the Scriptable Render Pipeline",1370],["This page explains how to schedule and execute rendering commands in the Scriptable Render Pipeline (SRP), either by using CommandBuffers or by making direct API calls to the ScriptableRenderContext. The information on this page is applicable to the Universal Render Pipeline (URP), the High Definition Render Pipeline (HDRP), and custom render pipelines that are based on SRP.",1370],["In SRP, you use C# scripts to configure and schedule rendering commands. You then tell Unity's low-level graphics architecture to execute them, which sends instructions to the graphics API.",1370],["The main way of doing this is by making API calls to the ScriptableRenderContext, but you can also execute CommandBuffers immediately.",1370],["Using the ScriptableRenderContext APIs",1370],["In SRP, the ScriptableRenderContext class acts as an interface between the C# render pipeline code and Unity's low-level graphics code. SRP rendering works using delayed execution; you use the ScriptableRenderContext to build up a list of rendering commands, and then you tell Unity to execute them. Unity's low-level graphics architecture then sends instructions to the graphics API.",1370],["To schedule rendering commands, you can:",1370],["Pass CommandBuffers to the ScriptableRenderContext, using ScriptableRenderContext.ExecuteCommandBuffer",1370],["Make direct API calls to the Scriptable Render Context, such as ScriptableRenderContext.Cull or ScriptableRenderContext.DrawRenderers",1370],["To tell Unity to perform the commands that you have scheduled, call ScriptableRenderContext.Submit. Note that it does not matter whether you used a CommandBuffer to schedule the command, or whether you scheduled the command by calling an API; Unity schedules all rendering commands on the ScriptableRenderContext in the same way, and does not execute any of them until you call Submit().",1370],["This example code demonstrates how to schedule and perform a command to clear the current render target, using a CommandBuffer.",1370],["```c#",1370],["using UnityEngine;",1370],["using UnityEngine.Rendering;",1370],["public class ExampleRenderPipeline : RenderPipeline",1370],["public ExampleRenderPipeline() {",1370],["protected override void Render(ScriptableRenderContext context, Camera[] cameras) {",1370],["// Create and schedule a command to clear the current render target",1370],["var cmd = new CommandBuffer();",1370],["cmd.ClearRenderTarget(true, true, Color.red);",1370],["context.ExecuteCommandBuffer(cmd);",1370],["cmd.Release();",1370],["// Tell the Scriptable Render Context to tell the graphics API to perform the scheduled commands",1370],["context.Submit();",1370],["Executing CommandBuffers immediately",1370],["You can execute CommandBuffers immediately without using the ScriptableRenderContext, by calling Graphics.ExecuteCommandBuffer. Calls to this API take place outside of the render pipeline.",1370],["Additional information",1370],["For more information on commands that you can schedule using CommandBuffers, see CommandBuffers API documentation.",1370],["Scriptable Render Pipeline Batcher",1371],["The Scriptable Render Pipeline (SRP) Batcher is a draw call optimization that significantly improves performance for applications that use an SRP. The SRP Batcher reduces the CPU time Unity requires to prepare and dispatch draw calls for materials that use the same shader variant.",1371],["Requirements and compatibility",1371],["This section includes information about the render pipeline compatibility of the SRP Batcher.",1371],["Render pipeline compatibility",1371],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",1371],["--------------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",1371],["SRP Batcher No Yes Yes Yes ",1371],["",1371],["GameObject compatibility",1371],["In any given scene, some GameObjects are compatible with the SRP Batcher, and some aren't. Compatible GameObjects use the SRP Batcher code path, and non-compatible GameObjects use the standard SRP code path. For more information, see How the SRP Batcher works.",1371],["A GameObject must meet the following requirements to be compatible with the SRP Batcher code path:",1371],["The GameObject must contain either a mesh or a skinned mesh. It can't be a particle.",1371],["The GameObject mustn't use MaterialPropertyBlocks.",1371],["The shader that the GameObject uses must be compatible with the SRP Batcher. For more information, see Shader compatibility.",1371],["",1371],["Shader compatibility",1371],["All lit and unlit shaders in the High Definition Render Pipeline (HDRP) and the Universal Render Pipeline (URP) fit this requirement (except for the particle versions of these shaders).",1371],["For a custom shader to be compatible with the SRP Batcher it must meet the following requirements:",1371],["The shader must declare all built-in engine properties in a single constant buffer named UnityPerDraw. For example, unity_ObjectToWorld, or unity_SHAr.",1371],["The shader must declare all material properties in a single constant buffer named UnityPerMaterial.",1371],["You can check the compatibility status of a shader in the Inspector panel.",1371],["",1371],["Using the SRP Batcher",1371],["This section contains information on how to use the SRP Batcher in Unity's pre-built Scriptable Render Pipelines.",1371],["Using the SRP Batcher in URP",1371],["To activate the SRP Batcher in URP:",1371],["In the Project window, select the URP Asset.",1371],["In the Inspector for the URP asset, enable SRP Batcher. If this option is not visible, follow the instructions below.",1371],["How to show Additional Properties for the URP Asset",1371],["Unity doesn't show certain advanced properties in the URP Asset by default. To see all available properties:",1371],["In the URP Asset, in any section, click the vertical ellipsis icon (⋮) and select Show Additional Properties.",1371],["Unity shows all available properties in the current section.",1371],["To show all additional properties in all sections:",1371],["Click the vertical ellipsis icon and select Show All Additional Properties. Unity opens the Core Render Pipeline section in the Preferences window.",1371],["In the property Additional Properties > Visibility, select All Visible.",1371],["Using the SRP Batcher in HDRP",1371],["When you use HDRP, Unity enables the SRP Batcher by default. Disabling the SRP Batcher isn't recommended. However, you can temporarily disable the SRP Batcher for debugging purposes.",1371],["To enable and disable the SRP Batcher at build time using the Editor:",1371],["In the Project window, select the HDRP Asset.",1371],["In the Inspector for the asset, enter Debug mode. In Debug mode, you can see the properties of the HDRP Asset, including the SRP Batcher property.",1371],["Select Enable SRP Batcher to enable or disable the SRP Batcher.",1371],["To enable or disable the SRP Batcher at runtime, toggle the following global variable in your C# code:",1371],["GraphicsSettings.useScriptableRenderPipelineBatching = true;",1371],["",1371],["How the SRP Batcher works",1371],["The traditional way to optimize draw calls is to reduce the number of them. Instead, the SRP Batcher reduces render-state changes between draw calls. To do this, the SRP Batcher combines a sequence of bind and draw GPU commands. Each sequence of commands is called an SRP batch.",1371],["To achieve optimal performance for your rendering, each SRP batch should contain as many bind and draw commands as possible. To achieve this, use as few shader variants as possible. You can still use as many different materials with the same shader as you want.",1371],["When Unity detects a new material during the render loop, the CPU collects all properties and binds them to the GPU in constant buffers. The number of GPU buffers depends on how the shader declares its constant buffers.",1371],["The SRP Batcher is a low-level render loop that makes material data persist in GPU memory. If the material content doesn't change, theSRP Batcher doesn't make any render-state changes. Instead, the SRP Batcher uses a dedicated code path to update the Unity Engine properties in a large GPU buffer, like this:",1371],["Here, the CPU only handles the Unity Engine properties, labeled Per Object large buffer in the above diagram. All materials have persistent constant buffers located in GPU memory, which are ready to use. This speeds up rendering because:",1371],["All material content now persists in GPU memory.",1371],["Dedicated code manages a large per-object GPU constant buffer for all per-object properties.",1371],["",1371],["Intentionally removing SRP Batcher compatibility for GameObjects",1371],["In some rare cases, you might want to intentionally make particular GameObjects incompatible with the SRP Batcher. For example, if you want to use GPU instancing, which isn't compatible with the SRP Batcher. If you want to render many identical meshes with the exact same material, GPU instancing can be more efficient than the SRP Batcher. To use GPU instancing, you must either:",1371],["Use Graphics.RenderMeshInstanced.",1371],["Manually remove SRP Batcher compatibility and enable GPU instancing for the material.",1371],["There are two ways to remove compatibility with the SRP Batcher from a GameObject:",1371],["Make the shader incompatible.",1371],["Make the renderer incompatible.",1371],["Tip**: If you use GPU instancing instead of the SRP Batcher, use the Profiler to make sure that GPU instancing is more efficient for your application than the SRP Batcher.",1371],["Removing shader compatibility",1371],["You can make both hand-written and Shader Graph shaders incompatible with the SRP Batcher. However, for Shader Graph shaders, if you change and recompile the Shader Graph often, it's simpler to make the renderer incompatible instead.",1371],["To make a Unity shader incompatible with the SRP Batcher, you need to make changes to the shader source file:",1371],["For hand-written shaders, open the shader source file. For Shader Graph shaders, copy the Shader Graph's compiled shader source code into a new shader source file. Use the new shader source file in your application instead of the Shader Graph.",1371],["Add a new material property declaration into the shader’s Properties block. Don't declare the new material property in the UnityPerMaterial constant buffer.",1371],["The material property doesn't need to do anything; just having a material property that doesn't exist in the UnityPerMaterial constant buffer makes the shader incompatible with the SRP Batcher.",1371],["Warning**: If you use a Shader Graph, be aware that every time you edit and recompile the Shader Graph, you must repeat this process.",1371],["",1371],["Removing renderer compatibility",1371],["You can make individual renderers incompatible with the SRP Batcher. To do this, add a MaterialPropertyBlock to the renderer.",1371],["Profiling the SRP Batcher in the Unity Frame Debugger",1371],["You can check the status of SRP batches in the Frame Debugger window. Each SRP Batch displays how many draw calls Unity used, which keywords Unity attached to the shader, and the reason why Unity didn't batch that draw call with the previous one.",1371],["To check the status of SRP Batcher batches:",1371],["In the Editor, open the Frame Debugger (menu: Window > Analysis > Frame Debugger).",1371],["In the Frame Debugger, go to Render Camera > Render Opaques.",1371],["Expand the RenderLoopNewBatcher. Draw list.",1371],["Select on the SRP Batch you want to inspect.",1371],["In the example below, the reason is: Nodes have different shaders. This means that the shader for that SRP batch is different to the one in the previous SRP batch. Because the SRP Batcher used a different shader, the SRP Batcher created a new batch. If several SRP batches have a low number of draw calls, it often means the project uses too many shader variants.",1371],["If you write your own Scriptable Render Pipeline, instead of using either the Universal Render Pipeline or the High Definition Render Pipeline, try to write a generic multi-purpose shader with a minimal number of keywords. This is optimal because you can use as many material properties as you want.",1371],["Stack trace logging",1372],["Unity Console messages and log files can include detailed stack trace information. The console also links to the line of code that generated the message. This is useful when you want to identify the line, method, or sequence of function calls that caused the log entry to appear.",1372],["Tip:** Another way to inspect your code is to attach a debugger to the Editor or your built player.",1372],["Stack trace for managed and unmanaged code",1372],["Unity can provide stack trace information for both managed and unmanaged code:",1372],["Managed code:** Managed DLLs or C# scripts running in Unity. These can be scripts that ship with Unity, custom scripts that you write, third-party scripts included with an Asset store plug-in, or any other C# script that runs in the engine.",1372],["Unmanaged code:** Native Unity engine code, or code from a native plugin running directly on your machine or on a target build platform. Unmanaged code is usually compiled from C or C++ code. You can only access it if you have the original source code of the native binary.",1372],["Typically, you will use stack trace for unmanaged code only if you need to determine whether an error is caused by your code or the engine code, and which part of the engine code.",1372],["Unity offers three stack trace options:",1372],["None:** Unity doesn't output stack trace information.",1372],["ScriptOnly:** Unity outputs stack trace information only for managed code. This is the default option.",1372],["Full:** Unity outputs stack trace information for both managed and unmanaged code.",1372],["Stack trace resource requirements",1372],["Resolving a stack trace, especially a full stack trace, is a resource-intensive operation. Some best practices for stack traces include:",1372],["Use stack traces only to debug. Do not deploy an application to users with stack trace enabled.",1372],["Limit the type of messages that display a stack trace. For example, consider using stack trace only for exceptions and warnings.",1372],["Setting the stack trace type",1372],["Note:** The stack trace option is a build setting and affects the built player. It is not a view preference in the Editor.",1372],["To specify how much detail to include in the stack trace, you can use the scripting API or the Editor:",1372],["To control stack trace logging through the scripting API, use Application.SetStackTraceLogType.",1372],["You can use the API to change the stack trace setting of a player before it’s built, or while it’s running.",1372],["To use the Console, select the Console menu button, then:",1372],["To select the same stack trace option for all Console message types, select Stack Trace Logging > All.",1372],["To select a stack trace option for just one of the Console message types, select Stack Trace Logging > [MESSAGE TYPE].",1372],["Rebuild your player with the new setting.",1372],["To use the Player Settings window, select File > Build Settings > Player Settings > Other Settings.",1372],["Rebuild your player with the new setting.",1372],["Open source files from the stack trace output",1372],["The full text of a message includes references to specific lines in code files with links. Click any link to open the file in your IDE at the referenced line.",1372],["Find the output log file of a built application",1372],["Built applications do not output to the Console. To see the stack trace, use the application’s log file.",1372],["Content and Context",1373],["When thinking about lighting in Unity, it is handy to divide the concepts into what we call the content the item being lit and rendered, and the context, which is the lighting that exists in the scene which affects the object being lit.",1373],["The Context",1373],["When lighting an object it is important to understand which sources of light are affecting the object. There are usually direct light sources in your scene: Game Object lights that you may have placed around your scene. There are also indirect light sources such as reflections and bounced light. These all have an effect on the object's material to give the final result that the camera sees across the surface of the object.",1373],["This is not a hard and fast separation, often what might be considered \"content\" could also be the part of the lighting context for another object.",1373],["A good example of this would be a building situated in a desert landscape. The building would take light information from the skybox, and perhaps bounced light from the surrounding ground.",1373],["However there may be a character standing near an exterior wall of the building. For this character, the building is part of the lighting context - it may be casting a shadow, it may be casting bounced light from its wall onto the character, or the character may have reflective parts which are directly reflecting the building itself.",1373],["The Default Lighting Context",1373],["At startup, Unity shows an empty scene. This scene already has a default lighting context available with ambient, skydome-based reflections and a directional light. Any object placed in that scene should, by default, have all lighting it needs to look correct.",1373],["Let’s add a sphere to the scene, to see the effect of the default lighting context.",1373],["The added sphere will be using the Standard shader by default. Focusing the camera on the sphere will result on something like this:",1373],["Notice the reflection along the edges of the sphere as well as the subtle ambient, from brown (bottom) to the sky blue (top). By default, in an empty scene, all lighting context is derived from the skybox and a directional light (which is added to the Scene by default).",1373],["Of course this is the default setup, a single lighting and sky reflection may not be enough in some cases. You can easily add more lighting and reflection probes:",1373],["For an in-depth view on how reflection and light probes work please see the documentation on light probes and reflection probes.",1373],["Skyboxes",1373],["A Skybox, baked or procedural, can be an integral part of your lighting setup. It can be used to control the ambient lighting and the reflections in your objects in addition to rendering the sky.",1373],["Procedural Skyboxes also allow you to set the colours directly and create a sun disc instead of using a bitmap - more information can be found in the Skybox Documentation",1373],["While reflecting the skybox can be useful for many objects in your scenes, particularly outdoor scenes, there are often cases where you need to vary the reflections an object uses - there may be dark areas in an outdoor scene, such as alleyways or dense forest, or you may have interior areas which require reflections to match each room.",1373],["To meet the needs of these various reflective requirements, Unity has reflection probes which allow you to sample the environment in your scene at a certain point in space, for use as the ambient light and reflection source for any objects near that point instead of the default skybox. Reflection probes can be placed around your scene in any locations where the scene's skybox is not sufficient or appropriate.",1373],["Global Illumination",1373],["The concept of Global Illumination is integral to Unity. Both the Standard shader and Unity's global illumination systems have been designed to play well with each other. The global illumination system takes care of creating and tracking bounced light, light from emissive materials and light from the environment.",1373],["You can find the details here.",1373],["The context is a critical part of the overall look of the image. In this example you can see how a scene reflects changes in context, while content and camera remains the same.",1373],["The Content",1373],["The content is the term used to describe the objects in your scene that are being rendered. Their appearance is a result of the lighting context acting on the materials that have been applied to the objects.",1373],["The Material Editor",1373],["When viewing a material in the inspector which uses the Standard Shader, the editor displays all parameters for the material including textures, blending modes, masking and secondary maps. At a glance you be able to see which features are used and preview the material.",1373],["As the Standard shader is data-driven: Unity will only use the shader code required by the configuration the user has set for the material. In other words if a feature or texture slot of the material is not used, there is no cost for it and the shader combination is optimised behind the scenes.",1373],["How to create a material",1373],["The Standard shader allows for many configurations in order to represent a great variety of material types. Values can be set with texture maps or colour pickers and sliders. Generally UV mapping is required in conjunction with textures to describe which part of your mesh refers to which part of the texture map. The Standard Shader material allows you therefore to have different material properties across the same mesh when used in conjunction with specular and smoothness map or a metallic map. In other words you can create rubber, metal and wood on one mesh where the resolution of the texture can exceed the polygon topology allowing for smooth borders and transition between material types, of course this has implications for a greater complexity in the workflow, but this will depend on your texture creation method.",1373],["Textures for your materials tend to be generated in one of two ways - painting and compositing in a 2D image editor like Photoshop, or rendering / baking from your 3D package, where you can also make use of higher resolution models to generate your normal maps and occlusion maps in addition to the albedo, specular and other maps. This workflow varies dependent on the external packages used.",1373],["Generally no texture map should contain inherent lighting (shadows, highlights, etc). One of the advantages of PBS is that objects react to light as you would expect, which is not possible if maps already contain lighting information.",1373],["The Fresnel Effect",1374],["One important visual cue of objects in the real world has to do with how they become more reflective at grazing angles (illustrated below). This is called the Fresnel effect.",1374],["There are two things to note in this example; firstly, these reflections only appear around the edges of the sphere (that’s when its surface is at a grazing angle), and also that they become more visible and sharper as the smoothness of the material goes up.",1374],["In the Standard shader there is no direct control over the Fresnel effect. Instead it is indirectly controlled through the smoothness of the material. Smooth surfaces will present a stronger Fresnel, totally rough surfaces will have no Fresnel.",1374],["Make your own",1375],["The Standard shader is suitable for a wide range of use cases. You can customize it for your own needs by downloading the shader source code, and then editing it.",1375],["To download the source code for the Standard Shader:",1375],["Go to the Unity download page",1375],["Locate the row for the version of Unity that you are using",1375],["In that row, locate the Downloads drop-down menu for the platform that you are using",1375],["Using that drop-down menu, select, Built-in Shaders",1375],["Material charts",1376],["Use these charts as reference for realistic settings:",1376],["There are also hints on how to make realistic materials in these charts. In essence it is about choosing a workflow (default or metallic) and obtaining relevant values for your maps or colour pickers. For instance, if we wanted to make shiny white plastic, we would want a white Albedo. Since it is not a metal we would want a dark Specular (or a very low Metallic value) and finally a very high Smoothness.",1376],["Albedo Color and Transparency",1377],["The Albedo Property controls the base color of the surface.",1377],["Specifying a single color for the Albedo value is sometimes useful, but it is far more common to assign a texture map for the Albedo Property. This should represent the colors of the surface of the object. It's important to note that the Albedo texture should not contain any lighting, since the lighting will be added to it based on the context in which the object is seen.",1377],["Transparency",1377],["The alpha value of the Albedo colour controls the transparency level for the material. This only has an effect if the Rendering Mode for the material is set to one of the transparent mode, and not Opaque. As mentioned above, picking the correct transparency mode is important because it determines whether or not you will still see reflections and specular highlights at full value, or whether they will be faded out according to the transparency values too.",1377],["When using a texture assigned for the Albedo Property, you can control the transparency of the material by ensuring your albedo texture image has an alpha channel. The alpha channel values are mapped to the transparency levels with white being fully opaque, and black being fully transparent. This will have the effect that your material can have areas of varying transparency.",1377],["Secondary Maps (Detail Maps) & Detail Mask",1378],["Secondary Maps (or Detail maps) allow you to overlay a second set of textures on top of the main textures listed above. You can apply a second Albedo colour map, and a second Normal map. Typically, these would be mapped on a much smaller scale repeated many times across the object's surface, compared with the main Albedo and Detail maps.",1378],["The reason for this is to allow the material to have sharp detail when viewed up close, while also having a normal level of detail when viewed from further away, without having to use a single extremely high texture map to achieve both goals.",1378],["Typical uses for detail textures would be:",1378],["\nAdding skin detail, such as pores and hairs, to a character's skin\n",1378],["\nAdding tiny cracks and lichen growth to a brick wall\n",1378],["\nadding small scratches and scuffs to a large metal container\n",1378],["If you use a single normal map do ALWAYS plug it into the primary channel. The Secondary normal map channel is more expensive than the primary one but has the exact same effect.",1378],["Detail Mask",1378],["The detail mask texture allows you to mask off certain areas of your model to have the detail texture applied. This means you can show the detail texture in certain areas, and hide it in others. In the example of the skin pores above, you might want to create a mask so the pores are not shown on the lips or eyebrows.",1378],["Emission",1379],["Adding emission to a Material makes it appear as a visible source of light in your Scene. The Material emission properties control the color and intensity of light that the surface of a Material emits.",1379],["Emission is useful when you want some part of a GameObject to appear lit from the inside, such as the screen of a monitor, the disc brakes of a car braking at high speed, or glowing buttons on a control panel. GameObjects that use emissive Materials appear to remain bright even in dark areas of your Scene.",1379],["Using Emission",1379],["You can define basic emissive Materials with a single color and emission level. To make a Material emissive, enable the Emission checkbox. This exposes the Color and Global Illumination properties.",1379],["Properties",1379],["Property Description ",1379],["----------------------- ------------------------------------------------------------ ",1379],["Color Specifies the color and intensity of the emission. Click the Color box to open the HDR Color picker. Here you can alter the color of the illumination and the Intensity of the emission. To specify which areas of the Material emit light, you can assign an emission map to this property. If you do this, Unity uses the full color values of the map for the emission color and brightness. You can also use the HDR color picker to tint the map and change the emission intensity. ",1379],["Global Illumination Specifies how the light that this Material emits affects the contextual lighting of other nearby GameObjects. There are three options:• Realtime: Unity adds the emissive light from this Material to the Realtime Global Illumination calculations for the Scene. This means that this emissive light affects the illumination of nearby GameObjects, including ones that are moving.• Baked: Unity bakes the emissive light from this Material into the static Global Illumination lighting for the Scene. This Material affects the lighting of nearby static GameObjects, but not dynamic GameObjects. However, Light Probes still affect the lighting of dynamic GameObjects.• None: The emissive light from this Material does not affect Realtime lightmaps, Baked lightmaps, or Light Probes in the Scene. It does not illuminate or affect other GameObjects. The Material itself does have the emission color. ",1379],["Emission map examples",1379],["\n 2019-11-21 \n",1379],["Heightmap",1380],["Height mapping (also known as parallax mapping) is a similar concept to normal mapping, however this technique is more complex - and therefore also more performance-expensive. Heightmaps are usually used in conjunction with normalmaps, and often they are used to give extra definition to surfaces where the texture maps are responsible for rendering large bumps and protrusions.",1380],["While normal mapping modifies the lighting across the surface of the texture, parallax height mapping goes a step further and actually shifts the areas of the visible surface texture around, to achieve a kind of surface-level occlusion effect. This means that apparent bumps will have their near side (facing the camera) expanded and exaggerated, and their far side (facing away from the camera) will be reduced and seem to be occluded from view.",1380],["This effect, while it can produce a very convincing representation of 3D geometry, is still limited to the surface of the flat polygons of an object's mesh. This means that while surface bumps will appear to protrude and occlude each other, the \"silhouette\" of the model will never be modified, because ultimately the effect is drawn onto the surface of the model and does not modify the actual geometry.",1380],["A heightmap should be a greyscale image, with white areas representing the high areas of your texture and black representing the low areas. Here's a typical albedo map and a heightmap to match.",1380],["From left to right in the above image:",1380],["A rocky wall material with albedo assigned, but no normalmap or heightmap.",1380],["The normal assigned. Lighting is modified on the surface, but rocks do not occlude each other.",1380],["The final effect with normalmap and heightmap assigned. The rocks appear to protrude out from the surface, and nearer rocks seem to occlude rocks behind them.",1380],["Often (but not always) the greyscale image used for a heightmap is also a good image to use for the occlusion map. For information on occlusion maps, see the next section.",1380],["Metallic mode: Metallic Property",1381],["When working in the Metallic workflow (as opposed to the Specular workflow), the reflectivity and light response of the surface are modified by the Metallic level and the Smoothness level.",1381],["Specular reflections are still generated when using this workflow but they arise naturally depending on the settings you give for the Metallic and Smoothness levels, rather than being explicitly defined.",1381],["Metallic mode is not just for materials which are supposed to look metallic!** This mode is known as Metallic because of the way you have control over how metallic or non-metallic a surface is.",1381],["Metallic Property",1381],["The Metallic Property of a material determines how \"metal-like\" the surface is. When a surface is more metallic, it reflects the environment more and its albedo colour becomes less visible. At full metallic level, the surface colour is entirely driven by reflections from the environment. When a surface is less metallic, its albedo colour is more clear and any surface reflections are visible on top of the surface colour, rather than obscuring it.",1381],["By default, with no texture assigned, the Metallic and Smoothness Properties are controlled by a slider each. This is enough for some materials. However if your model's surface has areas with a mixture of surface types in the albedo texture, you can use a texture map to control how the metallic and smoothness levels vary across the surface of the material. For instance if your texture contains a character's clothing including some metal buckles and zips. You would want the buckles and zips to have a higher Metallic value than the fabric of the clothes. To achieve this, instead of using a single slider value, a texture map can be assigned which contains lighter pixel colours in the areas of the buckles and zips, and darker values for the fabric.",1381],["With a texture assigned to the Metallic Property, both the Metallic and Smoothness sliders disappear. Instead, the Metallic levels for the material are controlled by the values in the Red channel of the texture, and the Smoothness levels for the material are controlled by the Alpha channel of the texture. (This means the Green and Blue channels are ignored). This means you have a single texture which can define areas as being rough or smooth, and metallic or non-metallic, which is very useful when working texture maps that cover many areas of a model with varying requirements - for example a single character texture map often includes multiple surface requirements - leather shoes, cloth clothes, skin for the hands and face and metal buckles.",1381],["In the example above, the case has an albedo map, but no texture for Metallic. This means the whole object has a single Metallic and Smoothness value, which is not ideal. The leather straps, the metal buckles, the sticker and the handle should all appear to have different surface properties.",1381],["In this example, a Metallic/Smoothness texture map has been assigned. The buckle now has a high Metallic value and responds to light accordingly. The leather straps are shinier than the leather body of the box, however they have a low Metallic value, so it appears to be a shiny non-metal surface. The black and white map on the far right shows the lighter areas for metal, and mid to low greys for the leather.",1381],["Normal map (Bump mapping)",1382],["Normal maps are a type of Bump Map. They are a special kind of texture that allow you to add surface detail such as bumps, grooves, and scratches to a model which catch the light as if they are represented by real geometry.",1382],["Unity uses Y+ normal maps, sometimes known as OpenGL format.",1382],["For example, you might want to show a surface which has grooves and screws or rivets across the surface, like an aircraft hull. One way to do this would be to model these details as geometry, as shown below.",1382],["Depending on the situation it is not normally a good idea to have such tiny details modelled as \"real\" geometry. On the right you can see the polygons required to make up the detail of a single screwhead. Over a large model with lots of fine surface detail this would require a very high number of polygons to be drawn. To avoid this, we should use a normal map to represent the fine surface detail, and a lower resolution polygonal surface for the larger shape of the model.",1382],["If we instead represent this detail with a bump map, the surface geometry can become much simpler, and the detail is represented as a texture which modulates how light reflects off the surface. This is something modern graphics hardware can do extremely fast. Your metal surface can now be a low-poly flat plane, and the screws, rivets, grooves and scratches will catch the light and appear to have depth because of the texture.",1382],["In modern game development art pipelines, artists will use their 3D modelling applications to generate normal maps based on very high resolution source models. The normal maps are then mapped onto a lower-resolution game-ready version of the model, so that the original high-resolution detail is rendered using the normalmap.",1382],["How to create and use Bump Maps",1382],["Bump mapping is a relatively old graphics technique, but is still one of the core methods required to create detailed realistic real-time graphics. Bump Maps are also commonly referred to as Normal Maps or Height Maps, however these terms have slightly different meanings which will be explained below.",1382],["What are Surface Normals?",1382],["To really explain how normal mapping works, we will first describe what a \"normal\" is, and how it is used in real-time lighting. Perhaps the most basic example would be a model where each surface polygon is lit simply according to the surface angles relative to the light. The surface angle can be represented as a line protruding in a perpendicular direction from the surface, and this direction (which is a vector) relative to the surface is called a \"surface normal\", or simply, a normal.",1382],["In the image above, the left cylinder has basic flat shading, and each polygon is shaded according to its relative angle to the light source. The lighting on each polygon is constant across the polygon's area because the surface is flat. Here are the same two cylinders, with their wireframe mesh visible:",1382],["The model on the right has the same number of polygons as the model on the left, however the shading appears smooth - the lighting across the polygons gives the appearance of a curved surface. Why is this? The reason is that the surface normal at each point used for reflecting light gradually varies across the width of the polygon, so that for any given point on the surface, the light bounces as if that surface was curved and not the flat constant polygon that it really is.",1382],["Viewed as a 2D diagram, three of the surface polygons around the outside of the flat-shaded cylinder would look like this:",1382],["The surface normals are represented by the orange arrows. These are the values used to calculate how light reflects off the surface, so you can see that light will respond the same across the length of each polygon, because the surface normals point in the same direction. This gives the \"flat shading\", and is the reason the left cylinder's polygons appear to have hard edges.",1382],["For the smooth shaded cylinder however, the surface normals vary across the flat polygons, as represented here:",1382],["The normal directions gradually change across the flat polygon surface, so that the shading across the surface gives the impression of a smooth curve (as represented by the green line). This does not affect the actual polygonal nature of the mesh, only how the lighting is calculated on the flat surfaces. This apparent curved surface is not really present, and viewing the faces at glancing angles will reveal the true nature of the flat polygons, however from most viewing angles the cylinder appears to have a smooth curved surface.",1382],["Using this basic smooth shading, the data determining the normal direction is actually only stored per vertex, so the changing values across the surface are interpolated from one vertex to the next. In the diagram above, the red arrows indicate the stored normal direction at each vertex, and the orange arrows indicate examples of the interpolated normal directions across the area of the polygon.",1382],["What is Normal mapping?",1382],["Normal mapping takes this modification of surface normals one step further, by using a texture to store information about how to modify the surface normals across the model. A normal map is an image texture mapped to the surface of a model, similar to regular colour textures, however each pixel in the texture of the normal map (called a texel) represents a deviation in surface normal direction away from the \"true\" surface normal of the flat (or smooth interpolated) polygon.",1382],["In this diagram, which is again a 2D representation of three polygons on the surface of a 3D model, each orange arrow corresponds to a pixel in the normalmap texture. Below, is a single-pixel slice of a normalmap texture. In the centre, you can see the normals have been modified, giving the appearance of a couple of bumps on the surface of the polygon. These bumps would only be apparent due to the way lighting appears on the surface, because these modified normals are used in the lighting calculations.",1382],["The colours visible in a raw normal map file typically have a blueish hue, and don't contain any actual light or dark shading - this is because the colours themselves are not intended to be displayed as they are. Instead, the RGB values of each texel represent the X,Y & Z values of a direction vector, and are applied as a modification to the basic interpolated smooth normals of the polygon surfaces.",1382],["This is a simple normal map, containing the bump information for some raised rectangles and text. This normal map can be imported into Unity and placed into Normal Map slot of the Standard Shader. When combined in a material with a colour map (the Albedo map) and applied to the surface of the cylinder mesh above, the result looks like this:",1382],["Again, this does not affect the actual polygonal nature of the mesh, only how the lighting is calculated on the surfaces. This apparent raised lettering and shapes on the surface are not really present, and viewing the faces at glancing angles will reveal the true nature of the flat surface, however from most viewing angles the cylinder now appears to have embossed detail raised off the surface.",1382],["How do I get or make normal maps?",1382],["Commonly, Normal Maps are produced by 3D or Texture artists in conjunction with the model or textures they are producing, and they often mirror the layout and contents of the Albedo map. Sometimes they are produced by hand, and sometimes they are rendered out from a 3D application.",1382],["How to render normal maps from a 3D application is beyond the scope of this documentation, however the basic concept is that a 3D artist would produce two versions of a model - a very high resolution model containing all detail as polygons, and a lower-res \"game ready\" model. The high res model would be too detailed to run optimally in a game (too many triangles in the mesh), but it is used in the 3D modelling application to generate the normal maps. The lower-res version of model can then omit the very fine level of geometry detail that is now stored in the normal maps, so that it can be rendered using the normal mapping instead. A typical use case for this would be to show the bumped detail of creases, buttons, buckles and seams on a characters clothing.",1382],["There are some software packages which can analyse the lighting in a regular photographic texture, and extract a normalmap from it. This works by assuming the original texture is lit from a constant direction, and the light and dark areas are analysed and assumed to correspond with angled surfaces. However, when actually using a bump map, you need to make sure that your Albedo texture does not have lighting from any particular direction in the image - ideally it should represent the colours of the surface with no lighting at all - because the lighting information will be calculated by Unity according to the light direction, surface angle and bump map information.",1382],["Here are two examples, one is a simple repeating stone wall texture with its corresponding normal map, and one is a character's texture atlas with its corresponding normal map:",1382],["What's the difference between Bump Maps, Normal Maps and Height Maps?",1382],["Normal Maps** and Height Maps are both types of Bump Map. They both contain data for representing apparent detail on the surface of simpler polygonal meshes, but they each store that data in a different way.",1382],["Above, on the left, you can see a height map used for bump mapping a stone wall. A height map is a simple black and white texture, where each pixel represents the amount that point on the surface should appear to be raised. The whiter the pixel colour, the higher the area appears to be raised.",1382],["A normal map is an RGB texture, where each pixel represents the difference in direction the surface should appear to be facing, relative to its un-modified surface normal. These textures tend to have a bluey-purple tinge, because of the way the vector is stored in the RGB values.",1382],["Modern real-time 3D graphics hardware rely on Normal Maps, because they contain the vectors required to modify how light should appear to bounce of the surface. Unity can also accept Height Maps for bump mapping, but they must be converted to Normal Maps on import in order to use them.",1382],["Why the bluey-purple colours?",1382],["Understanding this is not vital for using normal maps! It's ok to skip this paragraph. However if you really want to know: The RGB colour values are used to store the X,Y,Z direction of the vector, with Z being \"up\" (contrary to Unity's usual convention of using Y as \"up\"). In addition, the values in the texture are treated as having been halved, with 0.5 added. This allows vectors of all directions to be stored. Therefore to convert an RGB colour to a vector direction, you must multiply by two, then subtract 1. For example, an RGB value of (0.5, 0.5, 1) or #8080FF in hex results in a vector of (0,0,1) which is \"up\" for the purposes of normal-mapping - and represents no change to the surface of the model. This is the colour you see in the flat areas of the \"example\" normal map earlier on this page.",1382],["A value of (0.43, 0.91, 0.80) gives a vector of (-0.14, 0.82, 0.6), which is quite a steep modification to the surface. Colours like this can be seen in the bright cyan areas of the stone wall normal map at the top of some of the stone edges. The result is that these edges catch the light at a very different angle to the flatter faces of the stones.",1382],["Normal maps",1382],["How to import and use Normal Maps and Height Maps",1382],["A normal map can be imported by placing the texture file in your assets folder, as usual. However, you need to tell Unity that this texture is a normal map. You can do this by changing the \"Texture Type\" setting to \"Normal Map\" in the import inspector settings.",1382],["To import a black and white heightmap as a normal map, the process is almost identical, except you need to check the \"Create from Greyscale\" option.",1382],["With \"Create From Greyscale\" selected, a Bumpiness slider will appear in the inspector. You can use this to control how steep the angles in the normalmap are, when being converted from the heights in your heightmap. A low bumpiness value will mean that even sharp contrast in the heightmap will be translated to gentle angles and bumps. A high value will create exaggerated bumps and very high contrast lighting responses to the bumps.",1382],["Once you have a normalmap in your assets, you can place it into the Normal Map slot of your Material in the inspector. The Standard Shader has a normal map slot, and many of the older legacy shaders also support normal maps.",1382],["If you imported a normalmap or heightmap, and did not mark it as a normal map (By selecting Texture Type: Normal Map as described above), the Material inspector will warn you about this and offer to fix it, as so:",1382],["Clicking \"Fix Now\" has the same effect as selecting Texture Type: Normal Map in the texture inspector settings. This will work if your texture really is a normal map. However if it is a greyscale heightmap, it will not automatically detect this - so for heightmaps you must always select the \"Create from Greyscale\" option in the texture's inspector window.",1382],["Secondary Normal Maps",1382],["You may also notice that there is a second Normal Map slot further down in the Material inspector for the Standard Shader. This allows you to use an additional normal map for creating extra detail. You can add a normal map into this slot in the same way as the regular normal map slot, but the intention here is that you should use a different scale or frequency of tiling so that the two normal maps together produce a high level of detail at different scales. For example, your regular normal map could define the details of panelling on a wall or vehicle, with groves for the panel edges. A secondary normal map could provide very fine bump detail for scratches and wear on the surface which may be tiled at 5 to 10 times the scale of the base normal map. These details could be so fine as to only be visible when examined closely. To have this amount of detail on the base normal map would require the base normal map to be incredibly large, however by combining two at different scales, a high overall level of detail can be achieved with two relatively small normal map textures.",1382],["Occlusion Map",1383],["The occlusion map is used to provide information about which areas of the model should receive high or low indirect lighting. Indirect lighting comes from ambient lighting and reflections, so steep concave parts of your model like a crack or a fold would not realistically receive much indirect light.",1383],["Occlusion texture maps are normally calculated by 3D applications directly from the 3D model using the modeller or third party software.",1383],["An occlusion map is a greyscale image, with white indicating areas that should receive full indirect lighting, and black indicating no indirect lighting. Sometimes this is as simple as a greyscale heightmap for simple surfaces.",1383],["At other times, generating the correct occlusion texture is slightly more complex. For example, if a character in your scene is wearing a hood, the inside edges of the hood should be set to very low indirect lighting, or none at all. In these situations occlusion maps will often be produced by artists using 3D applications to automatically generate an occlusion map based on the model.",1383],["Rendering Mode",1384],["The first Material Parameter in the Standard Shader is Rendering Mode. This allows you to choose whether the object uses transparency, and if so, which type of blending mode to use.",1384],["\nOpaque - Is the default, and suitable for normal solid objects with no transparent areas.\n",1384],["\nCutout - Allows you to create a transparent effect that has hard edges between the opaque and transparent areas. In this mode, there are no semi-transparent areas, the texture is either 100% opaque, or invisible. This is useful when using transparency to create the shape of materials such as leaves, or cloth with holes and tatters.\n",1384],["\nTransparent - Suitable for rendering realistic transparent materials such as clear plastic or glass. In this mode, the material itself will take on transparency values (based on the texture's alpha channel and the alpha of the tint colour), however reflections and lighting highlights will remain visible at full clarity as is the case with real transparent materials.\n",1384],["\nFade - Allows the transparency values to entirely fade an object out, including any specular highlights or reflections it may have. This mode is useful if you want to animate an object fading in or out. It is not suitable for rendering realistic transparent materials such as clear plastic or glass because the reflections and highlights will also be faded out.\n",1384],["Changing the Rendering Mode using a script",1384],["When you change the Rendering Mode, Unity applies a number of changes to the Material. There is no single C# API to change the Rendering Mode of a Material, but you can make the same changes in your code.",1384],["To see the changes that Unity makes when you change the Rendering Mode:",1384],["Download the source code for Unity's built-in shaders. See Make your own shader for instructions.",1384],["Open the file StandardShaderGUI.cs.",1384],["Locate the area of the file that looks like this, and observe the changes for each Rendering Mode.",1384],["````C#",1384],["switch (blendMode)",1384],["case BlendMode.Opaque:",1384],["// Changes associated with Opaque Rendering Mode are here",1384],["break;",1384],["case BlendMode.Cutout:",1384],["// Changes associated with Cutout Rendering Mode are here",1384],["break;",1384],["case BlendMode.Fade:",1384],["// Changes associated with Fade Rendering Mode are here",1384],["break;",1384],["case BlendMode.Transparent:",1384],["// Changes associated with Transparent Rendering Mode are here",1384],["break;",1384],["Standard Shader Material Inspector reference",1385],["The standard shader presents you with a list of Material Properties. These Properties vary slightly depending on whether you have chosen to work in the Metallic workflow mode or the Specular workflow mode. Most of the Properties are the same across both modes, and this page covers all the Properties for both modes.",1385],["These Properties can be used together to recreate the look of almost any real-world surface.",1385],["\nRendering Mode\n",1385],["\nAlbedo Color & Transparency\n",1385],["\nSpecular Mode: Specular\n",1385],["\nMetallic Mode: Metallic\n",1385],["\nSmoothness\n",1385],["\nNormal Map (Bump Mapping)\n",1385],["\nHeight Map (Parallax Mapping)\n",1385],["\nOcclusion Map\n",1385],["\nEmission\n",1385],["\nDetail Mask & Maps\n",1385],["\nThe Fresnel Effect\n",1385],["Smoothness",1386],["The concept of Smoothness applies to both the Specular workflow and the Metallic workflow, and works in very much the same way in both. By default, without a Metallic or Specular texture map assigned, the smoothness of the material is controlled by a slider. This slider allows you to control the \"microsurface detail\" or smoothness across a surface.",1386],["Both shader modes are shown above, because if you choose to use a texture map for the Metallic or Specular Property, the smoothness values are taken from that same map. This is explained in further detail down the page.",1386],["The \"microsurface detail\" is not something directly visible in Unity. It is a concept used in the lighting calculations. You can, however, see the effect of this microsurface detail represented by the amount the light that is diffused as it bounces off the object. With a smooth surface, all light rays tend to bounce off at predictable and consistent angles. Taken to its extreme, a perfectly smooth surface reflects light like a mirror. Less smooth surfaces reflect light over a wider range of angles (as the light hits the bumps in the microsurface), and therefore the reflections have less detail and are spread across the surface in a more diffuse way.",1386],["A smooth surface has very low microsurface detail, or none at all, so light bounces off in uniform ways, creating clear reflections. A rough surface has high peaks and troughs in its microsurface detail, so light bounces off in a wide range of angles which, when averaged out, create a diffuse colour with no clear reflections.",1386],["At low smoothness levels, the reflected light at each point on the surface comes from a wide area, because the microsurface detail is bumpy and scatters light. At high values of smoothness, the light at each point comes from a narrowly focused area, giving a much clearer reflection of the object's environment.",1386],["Using a Smoothness Texture Map",1386],["In a similar way to many of the other Properties, you can assign a texture map instead of using a single slider value. This allows you greater control over the strength and colour of the specular light reflections across the surface of the material.",1386],["Using a map instead of a slider means you can create materials which include a variety of smoothness levels across the surface (usually designed to match what is shown in the albedo texture).",1386],["Property: Function: ",1386],["Smoothness source Select the texture channel where the smoothness value is stored. ",1386],["        Specular/Metallic Alpha Use the Alpha channel of the Specular or Metallic map (depending which of these two modes you are using) as the Smoothness value. Because the smoothness of each point on the surface is a single value, only a single channel of an image texture is required for the data. Unity assumes the smoothness data is in the Alpha Channel of the texture used for the Metallic or Specular texture map . ",1386],["        Albedo Alpha Use the Alpha channel of the Albedo map as the Smoothness value. This lets you reduce the total number of textures, or use textures of different resolutions for the Smoothness value and Specular/Metallic map. ",1386],["You can toggle highlights and reflections with the settings found in the Forward Rendering Options section of the Material when it is open in the Inspector.",1386],["Property: Function: ",1386],["Highlights Check this box to disable highlights. This is an optional performance optimization for mobile. It removes the calculation of highlights from the Standard Shader. How this affects the appearance mainly depends on the Specular/Metallic value and the Smoothness. ",1386],["Reflections Check this box to disable environment reflections. This is an optional performance optimization for mobile. It removes the calculation of highlights from the Standard Shader. Instead of sampling the environment map, an approximation is used. How this affects the appearance depends on the smoothness. ",1386],["Smoother surfaces are more reflective and have smaller, more tightly-focused specular highlights. Less smooth surfaces do not reflect as much, so specular highlights are less noticable and spread wider across the surface. By matching the specular and smoothness maps to the content in your albedo map, you can begin to create very realistic-looking textures.",1386],["Specular mode: Specular Property",1387],["Specular Property",1387],["The Specular Property is only visible when using the Specular setup, as shown in the Shader field in the image above. Specular effects are essentially the direct reflections of light sources in your Scene, which typically show up as bright highlights and shine on the surface of objects (although specular highlights can be subtle or diffuse too).",1387],["Both the Specular setup and Metallic setup produce specular highlights, so the choice of which to use is more a matter of setup and your artistic preference. In the Specular setup you have direct control over the brightness and tint colour of specular highlights, while in the Metallic setup you control other Properties and the intensity and colour of the specular highlights emerge as a natural result of the other Property settings.",1387],["When working in Specular mode, the RGB colour in the Specular Property controls the strength and colour tint of the specular reflectivity. This includes shine from light sources and reflections from the environment. The Smoothness Property controls the clarity of the specular effect. With a low Smoothness value, even strong specular reflections appear blurred and diffuse. With a high Smoothness value, specular reflections are crisper and clearer.",1387],["You might want to vary the Specular values across the surface of your material - for example, if your Texture contains a character's coat that has some shiny buttons. You would want the buttons to have a higher specular value than the fabric of the clothes. To achieve this, assign a Texture map instead of using a single slider value. This allows greater control over the the strength and colour of the specular light reflections across the surface of the material, according to the pixel colours of your specular map.",1387],["When a Texture is assigned to the Specular Property, both the Specular Property and Smoothness slider disappear. Instead, the specular levels for the material are controlled by the values in the Red, Green and Blue channels of the Texture itself, and the Smoothness levels for the material are controlled by the Alpha channel of the same Texture. This provides a single Texture which defines areas as being rough or smooth, and have varying levels and colors of specularity. This is very useful when working Texture maps that cover many areas of a model with varying requirements; for example, a single character Texture map often includes multiple surface requirements such as leather shoes, fabric of the clothes, skin for the hands and face, and metal buckles.",1387],["Here, the specular reflection and smoothness are defined by a colour and the Smoothness slider. No Texture has been assigned, so the specular and smoothness level is constant across the whole surface. This is not always desirable, particularly in the case where your Albedo Texture maps to a variety of different areas on your model (also known as a Texture atlas).",1387],["Here, a Texture map controls the specularity and smoothness. This allows the specularity to vary across the surface of the model. Notice the edges have a higher specular effect than the centre, there are some subtle colour responses to the light, and the area inside the lettering no longer has specular highlights. Pictured to the right are the RGB channels controlling the specular colour and strength, and the Alpha channel controlling the smoothness.",1387],["Note**: A black specular color (0,0,0) results in nulling out the specular effect.",1387],["Metallic vs. specular workflow",1388],["When you create a material with the Standard shader you have the choice of using one of two shaders: Standard or Standard (Specular setup). They differ in the data they take as follows:",1388],["Standard**: The shader exposes a “metallic” value that states whether the material is metallic or not. In the case of a metallic material, the Albedo color controls the color of the specular reflection and most light reflects as specular reflections. Non-metallic materials have specular reflections that are the same color as the incoming light and barely reflect when looking at the surface face-on.",1388],["Standard (Specular setup)**: Choose this shader for the classic approach. Use a specular color to control the color and strength of specular reflections in the material. This makes it possible to have a specular reflection of a different color than the diffuse reflection.",1388],["You can achieve a good representation of most common material types using either method, so for the most part choosing one or the other is a matter of personal preference to suit your art workflow. The following example shows a rubbery plastic material created in both Standard and Standard Specular workflows:",1388],["The first image represents the metallic workflow, where you set the metallic to zero (non-metallic). The second setup is nearly identical but you set the specular to nearly black (so you don’t get metallic mirror-like reflections).",1388],["In the world of Physically Based Shading you can use references from known real-world materials. For some examples of these references, see our [Material Charts] (https://docs.unity3d.com/Manual/StandardShaderMaterialCharts.html).",1388],["State Machine Basics",1389],["The basic idea is that a character is engaged in some particular kind of action at any given time. The actions available will depend on the type of gameplay but typical actions include things like idling, walking, running, jumping, etc. These actions are referred to as states, in the sense that the character is in a \"state\" where it is walking, idling or whatever. In general, the character will have restrictions on the next state it can go to rather than being able to switch immediately from any state to any other. For example, a running jump can only be taken when the character is already running and not when it is at a standstill, so it should never switch straight from the idle state to the running jump state. The options for the next state that a character can enter from its current state are referred to as state transitions. Taken together, the set of states, the set of transitions and the variable to remember the current state form a state machine.",1389],["The states and transitions of a state machine can be represented using a graph diagram, where the nodes represent the states and the arcs (arrows between nodes) represent the transitions. You can think of the current state as being a marker or highlight that is placed on one of the nodes and can then only jump to another node along one of the arrows.",1389],["The importance of state machines for animation is that they can be designed and updated quite easily with relatively little coding. Each state has a Motion associated with it that will play whenever the machine is in that state. This enables an animator or designer to define the possible sequences of character actions and animations without being concerned about how the code will work.",1389],["State Machines",1389],["Unity's Animation State Machines provide a way to overview all of the animation clips related to a particular character and allow various events in the game (for example user input) to trigger different animations.",1389],["Animation State Machines can be set up from the Animator Controller Window, and they look something like this:",1389],["State Machines consist of States, Transitions and Events and smaller Sub-State Machines can be used as components in larger machines. See the reference pages for Animation States and Animation Transitions for further information.",1389],["State Machine Behaviours",1390],["A State Machine Behaviour is a special class of script. In a similar way to attaching regular Unity scripts (MonoBehaviours) to individual GameObjects, you can attach a StateMachineBehaviour script to an individual state within a state machine. This allows you to write code that will execute when the state machine enters, exits or remains within a particular state. This means you do not have to write your own logic to test for and detect changes in state.",1390],["A few examples for the use of this feature might be to:",1390],["Play sounds as states are entered or exited",1390],["Perform certain tests (eg, ground detection) only when in appropriate states",1390],["Activate and control special effects associated with specific states",1390],["State Machine Behaviours can be created and added to states in a very similar way to the way you would create and add scripts to GameObjects. Select a state in your state machine, and then in the inspector use the \"Add Behaviour\" button to select an existing StateMachineBehaviour or create a new one.",1390],["State Machine Behaviour scripts have access to a number of events that are called when the Animator enters, updates and exits different states (or sub-state machines). There are also events which allow you to handle the Root motion and Inverse Kinematics calls.",1390],["For more information see the State Machine Behaviour script reference.",1390],["State Machine Transitions",1391],["State Machine Transitions exist to help you simplify large or complex State Machines. They allow you to have a higher level of abstraction over the state machine logic.",1391],["Each view in the animator window has an Entry and Exit node. These are used during State Machine Transitions.",1391],["The Entry node is used when transitioning into a state machine. The entry node will be evaluated and will branch to the destination state according to the conditions set. In this way the entry node can control which state the state machine begins in, by evaluating the state of your parameters when the state machine begins.",1391],["Because state machines always have a default state, there will always be a default transition branching from the entry node to the default state.",1391],["You can then add additional transitions from the Entry node to other states, to control whether the state machine should begin in a different state.",1391],["The Exit node is used to indicate that a state machine should exit.",1391],["Each sub-state within a state machine is considered a separate and complete state machine, so by using these entry and exit nodes, you can control the flow from a top-level state machine into its sub-state machines more elegantly.",1391],["It is possible to mix state machine transitions with regular state transitions, so it is possible to transition from state to state, from a state to a statemachine, and from one statemachine directly to another statemachine.",1391],["Static batching",1392],["Static batching is a draw call batching method that combines meshes that don't move to reduce draw calls. It transforms the combined meshes into world space and builds one shared vertex and index buffer for them. Then Unity performs a single draw call that uses this combined mesh to draw all objects in the batch at once. Static batching can significantly reduce the number of draw calls.",1392],["Static batching is more efficient than dynamic batching because static batching doesn't transform vertices on the CPU. For more information about the performance implications for static batching, see Performance implications.",1392],["Requirements and compatibility",1392],["This section includes information about the render pipeline compatibility of static batching.",1392],["Render pipeline compatibility",1392],["Feature Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom Scriptable Render Pipeline (SRP) ",1392],["------------------- ---------------------------- ----------------------------------- ------------------------------------------ ------------------------------------------- ",1392],["Static Batching Yes Yes Yes Yes ",1392],["Using static batching",1392],["Unity can perform static batching at build time and at runtime. As a general rule, if the GameObjects exist in a scene before you build your application, use the Editor to batch your GameObjects at build time. If you create the GameObjects and their meshes at runtime, use the runtime API.",1392],["When you use the runtime API, you can change the transform properties of the root of a static batch. This means that you can move, rotate, or scale the entire combination of meshes that make up a static batch. You can’t change the transform properties of the individual meshes.",1392],["To use static batching for a set of GameObjects, the GameObjects must be eligible for static batching. In addition to the criteria described in the common usage information, make sure that:",1392],["The GameObject is active.",1392],["The GameObject has a Mesh Filter component, and that component is enabled.",1392],["The Mesh Filter component has a reference to a Mesh.",1392],["The mesh has a vertex count greater than 0.",1392],["The mesh has not already been combined with another Mesh.",1392],["The GameObject has a Mesh Renderer component, and that component is enabled.",1392],["The Mesh Renderer component does not use any Material with a shader that has the DisableBatching tag set to true.",1392],["Meshes you want to batch together use the same vertex attributes. For example Unity can batch meshes that use vertex position, vertex normal, and one UV with one another, but not with meshes that use vertex position, vertex normal, UV0, UV1, and vertex tangent.",1392],["Note**: To use runtime static batching you must also set the mesh to have read/write enabled.",1392],["For information about the performance implications for static batching, see Performance implications.",1392],["",1392],["Static batching at build time",1392],["You can enable static batching at build time in the Editor.",1392],["To perform static batching at build time:",1392],["Go to Edit > Project Settings > Player.",1392],["In Other Settings, enable Static Batching.",1392],["In the Scene view or Hierarchy, select the GameObject that you want to batch and view it in the Inspector.Tip: You can select multiple GameObjects at the same time to enable static batching for all of them.",1392],["In the GameObject’s Static Editor Flags, enable Batching Static.",1392],["Unity automatically batches the specified static meshes into the same draw call if they fulfill the criteria described in the common usage information.",1392],["Note**: If you perform static batching at build time, Unity doesn't use any CPU resources at runtime to generate the mesh data for the static batch.",1392],["",1392],["Static batching at runtime",1392],["To batch static meshes at runtime, Unity provides the StaticBatchingUtility class. The static StaticBatchingUtility.Combine method combines the GameObjects you pass in and prepares them for static batching. This is especially useful for meshes that you procedurally generate at runtime.",1392],["Unlike static batching at build time, batching at runtime doesn't require you to enable the Static Batching Player Setting. For information on how to use this API, see StaticBatchingUtility.",1392],["",1392],["Performance implications",1392],["Using static batching requires additional CPU memory to store the combined geometry. If multiple GameObjects use the same mesh, Unity creates a copy of the mesh for each GameObject, and inserts each copy into the combined mesh. This means that the same geometry appears in the combined mesh multiple times. Unity does this regardless of whether you use the editor or runtime API to prepare the GameObjects for static batching. If you want to keep a smaller memory footprint, you might have to sacrifice rendering performance and avoid static batching for some GameObjects. For example, marking trees as static in a dense forest environment can have a serious memory impact.",1392],["Note**: There are limits to the number of vertices a static batch can include. Each static batch can include up to 64000 vertices. If there are more, Unity creates another batch.",1392],["Static GameObjects",1393],["If a GameObject does not move at runtime, it is known as a static GameObject. If a GameObject moves at runtime, it is known as a dynamic GameObject.",1393],["Many systems in Unity can precompute information about static GameObjects in the Editor. Because the GameObjects do not move, the results of these calculations are still valid at runtime. This means that Unity can save on runtime calculations, and potentially improve performance.",1393],["The Static Editor Flags property",1393],["The Static Editor Flags property lists a number of Unity systems which can include a static GameObject in their precomputations. Use the drop-down to define which systems should include the GameObject in their precomputations. Setting Static Editor Flags at runtime has no effect on these systems.",1393],["You should only include a GameObject in the precomputations for systems that need to know about that GameObject. Including a GameObject in the precomputations for a system that does not need to know about that GameObject can result in wasted calculations, unnecessarily large data files, or unexpected behavior.",1393],["The Static Editor Flags property is located in the Inspector for a GameObject, in the extreme top-right. It comprises a checkbox, which sets the value to Everything or Nothing, and a drop-down menu that lets you choose which values to include.",1393],["You can also set the Static Editor Flags property in code, using the GameObjectUtility.SetStaticEditorFlags API, and the GameObject.isStatic.",1393],["The following values are available:",1393],["Property: Function: ",1393],["Nothing Do not include the GameObject in precomputations for any systems. ",1393],["Everything Include the GameObject in precomputations for all systems below. ",1393],["Contribute GI When you enable this property, Unity includes the target Mesh Renderer in global illumination calculations. These calculations take place while precomputing lighting data at bake time. The ContributeGI property exposes the ReceiveGI property. The ContributeGI property only takes effect if you enable a global illumination setting such as Baked Global Illumination or Enlighten Realtime Global Illumination for the target scene. A Unity Blog post about static lighting with Light Probes provides guidance for using this flag. For additional context, refer to Choose a lighting setup. ",1393],["Occluder Static Mark the GameObject as a Static Occluder in the occlusion culling system. For more information, see the documentation on the Occlusion Culling system. ",1393],["Occludee Static Mark the GameObject as a Static Occludee in the occlusion culling system. For more information, see the documentation on the Occlusion Culling system. ",1393],["Batching Static Combine the GameObject's Mesh with other eligible Meshes, to potentially reduce runtime rendering costs. For more information, see the documentation on Static Batching. ",1393],["Navigation Static Include the GameObject when precomputing navigation data. For more information, see the documentation on the Navigation system. ",1393],["Off Mesh Link Generation Attempt to generate an OffMesh Link that starts from this GameObject when precomputing navigation data. For more information, see the documentation on automatically building OffMesh Links. ",1393],["Reflection Probe Include this GameObject when precomputing data for Reflection Probes whose Type property is set to Baked. For more information, see the documentation on Reflection Probes. ",1393],["The status bar",1394],["The status bar provides notifications about various Unity processes, and quick access to related tools and settings. You cannot move or rearrange the status bar.",1394],["The status bar displays the following:",1394],["The most recent message logged to the Console window. Click the message to open the Console window.",1394],["A global progress bar for various asynchronous tasks (for example, shader compilation, lightmap baking, and occlusion culling). Click the progress bar to open the Background Tasks window, which displays progress for individual tasks and subtasks.",1394],["The current code optimization mode. Click the code optimization icon to switch between debug mode and release mode.",1394],["The cache server status. Click the icon to get additional information about the cache server, and re-establish a lost connection.",1394],["The automatic lighting generation status for Global illumination. Click the status text to open the Lighting window. When you generate lighting manually, or Unity generates it automatically, a progress bar appears next to the message.",1394],["An activity indicator (spinner) that shows when Unity compiles C# scripts or runs asynchronous tasks.",1394],["Streaming Assets",1395],["Unity combines Scenes and Assets into binary files inside the generated Player when it builds the Project. However, you can place files into the normal filesystem on the target machine to make them available using a pathname. For example, for deploying a movie file on iOS devices, the original movie file must be available from a location in the filesystem to play using the PlayMovie function. This folder can also include AssetBundles that you intend to distribute directly in the Player installation, rather than downloading them on-demand.",1395],["Unity copies any files placed in the folder called StreamingAssets (case-sensitive) in a Unity Project verbatim to a particular folder on the target machine. To retrieve the folder, use the Application.streamingAssetsPath property. It's always best to use Application.streamingAssetsPath to get the location of the StreamingAssets folder, because it always points to the correct location on the platform where the application is running.",1395],["The location returned by Application.streamingAssetsPath varies per platform:",1395],["Most platforms (Unity Editor, Windows, Linux players) use Application.dataPath + \"/StreamingAssets\".",1395],["macOS player uses Application.dataPath + \"/Resources/Data/StreamingAssets\".",1395],["iOS uses Application.dataPath + \"/Raw\".",1395],["Android uses files inside a compressed APK/JAR file, \"jar:file://\" + Application.dataPath + \"!/assets\".",1395],["On WebGL, Application.streamingAssetsPath returns a HTTP URL that points to the StreamingAssets/ path on the web server. For example, http://localhost:8000/unity_webgl_build/StreamingAssets/ is returned when your application is running against a local development server.",1395],["Accessing streaming assets",1395],["On Android and WebGL platforms, it's not possible to access the streaming asset files directly via file system APIs and streamingAssets path because these platforms return a URL. Use the UnityWebRequest class to access the content instead.",1395],["Notes:**",1395],["The streamingAssets path is read-only. Don't modify or write new files to the streamingAssets directory at runtime.",1395],[".dll and script files located in the StreamingAssets folder aren't included during script compilation.",1395],["Asset Bundles and Addressables are alternative ways of accessing content that's not part of regular game build data, and preferred over Streaming Assets folder.",1395],["Structure of a Unity Xcode Project",1396],["When you build a Unity Project for the iOS platform, Unity creates a folder that contains an Xcode project. You need this project to compile and sign your app before you deploy it on a device. You also need to use it to prepare and bundle your game for distribution on the App Store. The Xcode project structure has changed as of Unity 2019.3 to support Unity integration into native iOS applications via Unity as a Library.",1396],["Before you build your Project for iOS, make sure that you set the Bundle Identifier in the iOS Player Settings (menu: Edit > Project Settings > Player Settings). You can also choose whether your app targets the simulator or an actual device. To do this, change the SDK version field.",1396],["Project Targets",1396],["Every generated Unity iOS Xcode project has the following structure and targets:",1396],["UnityFramework**: A library part in the UnityFramework target. It includes the Classes, UnityFramework, and Libraries folders, as well as dependent frameworks, andXcode uses it to build the UnityFramework.framework file.",1396],["GameAssembly:** A container for your C# code translated as C++ code. To build it, Xcode uses the IL2CPP tool that Unity includes in every generated Xcode project. The build produces:",1396],["libGameAssembly.a: A static library that contains all the project's managed code, cross-compiled to C++, and built for iOS.",1396],["il2cpp.a: A static library that contains the IL2CPP runtime code to support your managed code.",1396],["Unity-iPhone**: A thin launcher part in the Unity-iPhone target. It includes the MainApp folder and app representation data such as Launch Screens, .xib files, icons, data, and /Info.plist files, and it runs the library. The Unity-iPhone target has a single dependency on the UnityFramework target.",1396],["Classes folder",1396],["The Classes folder contains code that integrates the Unity Runtime and Objective-C. Unity stores the entry points of the application in the main.mm and UnityAppController.mm/h files inside this folder. You can create your own AppDelegate derived from UnityAppController, or, if any of your plug-ins include AppController.h, you can include UnityAppController.h instead. If your Plugins/iOS folder includes_ AppController.mm/h_, you can merge and rename them.",1396],["The InternalProfiler.h file also defines a compiler conditional to enable the Internal Profiler. The code in this folder doesn't change often, and you can place custom classes here. If you select the Append mode, Xcode preserves changes to this folder between builds. However, this function doesn’t support multiple build targets and requires a fixed structure of the Libraries folder.",1396],["Unity's internal Profiler is fast and unobtrusive, and feeds basic information about:",1396],["Which subsystem is taking most of the frame time.",1396],["The .NET heap size.",1396],["GC event count and duration.",1396],["For more information, see documentation about the built-in Profiler.",1396],["Data folder",1396],["This folder contains your application’s serialized assets, as well as .NET assemblies (.dll or .dat files) as either full code or metadata, depending on code stripping settings. The machine.config file sets up various .NET services such as security and WebRequest. Xcode refreshes the contents of this folder with every build. You shouldn't make any changes to it.",1396],["By default, the Data folder's Target Membership is the Unity-iPhone target, and Unity Runtime searches for it in the mainBundle. To change the default bundle where Unity Runtime looks for the Data folder, call setDataBundleId: \"com.my.product\" on the UnityFramework instance before you call one of the run functions. For example, if you want to have Data together with the UnityFramework call, use setDataBundleId: \"com.unity3d.framework\" and set the Target Membership to UnityFramework.",1396],["Note:** On-Demand Resources are only supported when the Data folder is a part of the Application target and not a part of the UnityFramework target.",1396],["Libraries folder",1396],["The Libraries folder contains libil2cpp.a for IL2CPP. The libiPhone-lib.a file is the Unity Runtime static library, and RegisterMonoModules.cpp binds Unity native code with .NET. Xcode and refreshes the contents of this folder with every build. You shouldn't make any changes to it.",1396],["Custom folders",1396],["You can place your custom files here.",1396],["Graphic files",1396],["Icons and splash screens (.png files) are located in asset catalogs in the Unity-iPhone folder. Unity automatically manages these files. Launch Screens, their XML Interface Builders (.xib files), and Storyboard files are stored in the Project’s root folder. To set them up in Unity use the Player Settings window (menu: Edit > Project Settings > Player Settings). When you create custom launch images, make sure they adhere to Apple’s Human Interface Guidelines.",1396],["Property List (.plist) file",1396],["You can manage the /Info.plist file within the Unity-iPhone target (accessed via mainBundle) from Unity's Player Settings (menu: Edit > Project Settings > Player Settings, then select the Other section and scroll down to the Identification section; for more details, see documentation on iOS Player settings - Identification). When Unity builds the Player, it updates this file rather than replacing it. Don't make changes to it unless you have to.",1396],["The /UnityFramework/Info.plist file (accessed via bundleWithIdentifier:@\"com.unity3d.framework\") is a part of UnityFramework. You can keep values here instead of mainBundle's /Info.plist file to make sure that you can still get these values if UnityFramework is moved into another application.",1396],["Other files",1396],["These include the Xcode project file (.xcodeproj file), and framework links that only appear in the Project Navigator.",1396],["Building an Xcode project with xcodebuild",1396],["When you use command line arguments to specify build settings, these affect all Xcode project targets. To prevent this, some build settings have suffixed versions which you can use to specify which target your build settings affect. This is implemented through User-Defined Settings (*APP suffix used for application target and *FRAMEWORK suffix for framework target).",1396],["When building with xcodebuild, use suffixed versions for:",1396],["PRODUCT_NAME -> PRODUCT_NAME_APP",1396],["PROVISIONING_PROFILE -> PROVISIONING_PROFILE_APP",1396],["PROVISIONING_PROFILE_SPECIFIER -> PROVISIONING_PROFILE_SPECIFIER_APP",1396],["OTHER_LDFLAGS -> OTHER_LDFLAGS_FRAMEWORK",1396],["Based on your custom build pipeline, you can extend the list to cover other settings.",1396],["Modifying an Xcode project",1396],["To modify a generated Xcode project, use Xcode.PBXProject.",1396],["Project Targets",1396],["As of Unity 2019.3, PBXProject.GetUnityTargetName and pbxProject->TargetGuidByName(\"Unity-iPhone\") are obsolete. Instead, you can use either pbxProject->GetUnityFrameworkTargetGuid(), or pbxProject->GetUnityMainTargetGuid():",1396],["// Obsolete",1396],["string targetGuid = proj.TargetGuidByName(\"Unity-iPhone\");",1396],["string targetGuid = proj.TargetGuidByName(PBXProject.GetUnityTargetName());",1396],["// Instead call one of these",1396],["string targetGuid = proj.GetUnityFrameworkTargetGuid();",1396],["string targetGuid = proj.GetUnityMainTargetGuid();",1396],["If you need to support both old and new code paths in your package or custom build postprocessor, follow these steps:",1396],["Rely on plugin importer capabilities whenever possible (for example, to specify additional frameworks).",1396],["Use reflection:",1396],["string mainTargetGuid;",1396],["string unityFrameworkTargetGuid;",1396],["var unityMainTargetGuidMethod = proj.GetType().GetMethod(\"GetUnityMainTargetGuid\");",1396],["var unityFrameworkTargetGuidMethod = proj.GetType().GetMethod(\"GetUnityFrameworkTargetGuid\");",1396],["if (unityMainTargetGuidMethod != null && unityFrameworkTargetGuidMethod != null)",1396],["mainTargetGuid = (string)unityMainTargetGuidMethod.Invoke(proj, null);",1396],["unityFrameworkTargetGuid = (string)unityFrameworkTargetGuidMethod.Invoke(proj, null);",1396],["else",1396],["mainTargetGuid = proj.TargetGuidByName (\"Unity-iPhone\");",1396],["unityFrameworkTargetGuid = mainTargetGuid;",1396],["Unity as a Library for iOS added in 2019.3.NewIn20193",1396],["Rich Text",1397],["The text for UI elements and text meshes can incorporate multiple font styles and sizes. The Text, GUIStyle, and TextMesh classes have a Rich Text setting which instructs Unity to look for markup tags within the text. The Debug.Log function can also use these markup tags to enhance error reports from code. The tags are not displayed but indicate style changes to be applied to the text.",1397],["Markup format",1397],["The markup system is inspired by HTML but isn't intended to be strictly compatible with standard HTML. The basic idea is that a section of text can be enclosed inside a pair of matching tags:-",1397],["We are <b>not</b> amused.",1397],["As the example shows, the tags are just pieces of text inside the \"angle bracket\" characters, < and >.",1397],["You place the opening tag at the beginning of the section. The text inside the tag denotes its name (which in this case is just b).",1397],["You place another tag at the end of the section. This is the closing tag. It has the same name as the opening tag, but the name is prefixed with a slash / character. Every opening tag must have a corresponding closing tag. If you don't close an opening tag, it is rendered as regular text.",1397],["The tags are not displayed to the user directly but are interpreted as instructions for styling the text they enclose. The b tag used in the example above applies boldface to the word \"not\", so the text appears ons creen as:-",1397],["We are not amused",1397],["A marked up section of text (including the tags that enclose it) is referred to as an element.",1397],["Nested elements",1397],["It is possible to apply more than one style to a section of text by \"nesting\" one element inside another",1397],["We are <b><i>definitely not</i></b> amused",1397],["The <i> tag applies italic style, so this would be presented onscreen as",1397],["We are definitely not amused",1397],["Note the ordering of the closing tags, which is in reverse to that of the opening tags. The reason for this is perhaps clearer when you consider that the inner tags need not span the whole text of the outermost element",1397],["We are <b>absolutely <i>definitely</i> not</b> amused",1397],["which gives",1397],["We are absolutely definitely not amused",1397],["Tag parameters",1397],["Some tags have a simple all-or-nothing effect on the text but others might allow for variations. For example, the color tag needs to know which color to apply. Information like this is added to tags by the use of parameters:-",1397],["We are <color=green>green</color> with envy",1397],["Which produces this result:",1397],["Note that the ending tag doesn't include the parameter value. Optionally, the value can be surrounded by quotation marks but this isn't required.",1397],["Tag parameters cannot include blank spaces. For example:",1397],["We are <color = green>green</color> with envy",1397],["does not work because of the spaces to either side of the = character.",1397],["Supported tags",1397],["The following list describes all the styling tags supported by Unity.",1397],["Tag Description Example Notes ",1397],["b Renders the text in boldface. We are <b>not</b> amused. ",1397],["i Renders the text in italics. We are <i>usually</i> not amused. ",1397],["size Sets the size of the text according to the parameter value, given in pixels. We are <size=50>largely</size> unaffected. Although this tag is available for Debug.Log, you will find that the line spacing in the window bar and Console looks strange if the size is set too large. ",1397],["color Sets the color of the text according to the parameter value. The color can be specified in the traditional HTML format. #rrggbbaa ...where the letters correspond to pairs of hexadecimal digits denoting the red, green, blue and alpha (transparency) values for the color. For example, cyan at full opacity would be specified by color=#00ffffff...You can specify hexadecimal values in uppercase or lowercase; #FF0000 is equivalent to #ff0000. We are <color=#ff0000ff>colorfully</color> amused Another option is to use the name of the color. This is easier to understand but naturally, the range of colors is limited and full opacity is always assumed. <color=cyan>some text</color> The available color names are given in the table below. ",1397],["material This is only useful for text meshes and renders a section of text with a material specified by the parameter. The value is an index into the text mesh's array of materials as shown by the inspector. We are <material=2>texturally</material> amused ",1397],["quad This is only useful for text meshes and renders an image inline with the text. It takes parameters that specify the material to use for the image, the image height in pixels, and a further four that denote a rectangular area of the image to display. Unlike the other tags, quad does not surround a piece of text and so there is no ending tag - the slash character is placed at the end of the initial tag to indicate that it is \"self-closing\". <quad material=1 size=20 x=0.1 y=0.1 width=0.5 height=0.5> This selects the material at position in the renderer's material array and sets the height of the image to 20 pixels. The rectangular area of image starts at given by the x, y, width and height values, which are all given as a fraction of the unscaled width and height of the texture. ",1397],["",1397],["Supported colors",1397],["The following table lists colors for which you can use a name instead of a hexadecimal tag in the <color> rich text tag.",1397],["Color name Hex value Swatch ",1397],["aqua (same as cyan) #00ffffff ",1397],["black #000000ff ",1397],["blue #0000ffff ",1397],["brown #a52a2aff ",1397],["cyan (same as aqua) #00ffffff ",1397],["darkblue #0000a0ff ",1397],["fuchsia (same as magenta) #ff00ffff ",1397],["green #008000ff ",1397],["grey #808080ff ",1397],["lightblue #add8e6ff ",1397],["lime #00ff00ff ",1397],["magenta (same as fuchsia) #ff00ffff ",1397],["maroon #800000ff ",1397],["navy #000080ff ",1397],["olive #808000ff ",1397],["orange #ffa500ff ",1397],["purple #800080ff ",1397],["red #ff0000ff ",1397],["silver #c0c0c0ff ",1397],["teal #008080ff ",1397],["white #ffffffff ",1397],["yellow #ffff00ff ",1397],["Editor GUI",1397],["Rich text is disabled by default in the editor GUI system but it can be enabled explicitly using a custom GUIStyle. The richText property should be set to true and the style passed to the GUI function in question:",1397],["GUIStyle style = new GUIStyle ();",1397],["style.richText = true;",1397],["GUILayout.Label(\"Some RICH text\",style);",1397],["Supported Events",1398],["The Event System supports a number of events, and they can be customised further in user custom user written Input Modules.",1398],["The events that are supported by the Standalone Input Module and Touch Input Module are provided by interface and can be implemented on a MonoBehaviour by implementing the interface. If you have a valid Event System configured the events will be called at the correct time.",1398],["\nIPointerEnterHandler - OnPointerEnter - Called when a pointer enters the object\n",1398],["\nIPointerExitHandler - OnPointerExit - Called when a pointer exits the object\n",1398],["\nIPointerDownHandler - OnPointerDown - Called when a pointer is pressed on the object\n",1398],["\nIPointerUpHandler - OnPointerUp - Called when a pointer is released (called on the GameObject that the pointer is clicking)\n",1398],["\nIPointerClickHandler - OnPointerClick - Called when a pointer is pressed and released on the same object\n",1398],["\nIInitializePotentialDragHandler - OnInitializePotentialDrag - Called when a drag target is found, can be used to initialise values\n",1398],["\nIBeginDragHandler - OnBeginDrag - Called on the drag object when dragging is about to begin\n",1398],["\nIDragHandler - OnDrag - Called on the drag object when a drag is happening\n",1398],["\nIEndDragHandler - OnEndDrag - Called on the drag object when a drag finishes\n",1398],["\nIDropHandler - OnDrop - Called on the object where a drag finishes\n",1398],["\nIScrollHandler - OnScroll - Called when a mouse wheel scrolls\n",1398],["\nIUpdateSelectedHandler - OnUpdateSelected - Called on the selected object each tick\n",1398],["\nISelectHandler - OnSelect - Called when the object becomes the selected object\n",1398],["\nIDeselectHandler - OnDeselect - Called on the selected object becomes deselected\n",1398],["\nIMoveHandler - OnMove - Called when a move event occurs (left, right, up, down, ect)\n",1398],["\nISubmitHandler - OnSubmit - Called when the submit button is pressed\n",1398],["\nICancelHandler - OnCancel - Called when the cancel button is pressed\n",1398],["Supporting presets",1399],["In your Editor scripts, use the ObjectFactory class to create new GameObjects, components and Assets. When creating these items, the ObjectFactory class automatically uses default Presets. Your script does not have to search for and apply default Presets, because ObjectFactory handles this for you.",1399],["Support for new types",1399],["To support and enable Presets by default, your class must inherit from one of the following:",1399],["The Preset Inspector creates a temporary instance of your class, so that users can modify its values, so make sure your class does not affect or rely on other objects such as static values, Project Assets or Scene instances.",1399],["Tip**: Using a CustomEditor attribute is optional.",1399],["Use case example: Preset settings in a custom Editor window",1399],["When setting up a custom EditorWindow class with settings that could use Presets:",1399],["Use a ScriptableObject to store a copy of your settings. It can have a CustomEditor attribute too. The Preset system handles this object.",1399],["Always use this temporary ScriptableObject Inspector to show the Preset settings in your UI. This allows your users to have the same UI in your EditorWindow and when editing saved Presets.",1399],["Expose a Preset button and use your own PresetSelectorReceiver implementation to keep your EditorWindow settings up-to-date when a Preset is selected in the Select Preset window.",1399],["The following script examples demonstrate how to add Preset settings to a simple EditorWindow.",1399],["This script example demonstrates a ScriptableObject that keeps and shows settings in a custom window (saved to a file called Editor/MyWindowSettings.cs):",1399],["using UnityEngine;",1399],["// Temporary ScriptableObject used by the Preset system",1399],["public class MyWindowSettings : ScriptableObject",1399],["[SerializeField]",1399],["string m_SomeSettings;",1399],["public void Init(MyEditorWindow window)",1399],["m_SomeSettings = window.someSettings;",1399],["public void ApplySettings(MyEditorWindow window)",1399],["window.someSettings = m_SomeSettings;",1399],["window.Repaint();",1399],["Script example of a PresetSelectorReceiver that updates the ScriptableObject used in the custom window (saved to a file called Editor/MySettingsReceiver.cs):",1399],["using UnityEditor.Presets;",1399],["// PresetSelector receiver to update the EditorWindow with the selected values.",1399],["public class MySettingsReceiver : PresetSelectorReceiver",1399],["Preset initialValues;",1399],["MyWindowSettings currentSettings;",1399],["MyEditorWindow currentWindow;",1399],["public void Init(MyWindowSettings settings, MyEditorWindow window)",1399],["currentWindow = window;",1399],["currentSettings = settings;",1399],["initialValues = new Preset(currentSettings);",1399],["public override void OnSelectionChanged(Preset selection)",1399],["if (selection != null)",1399],["// Apply the selection to the temporary settings",1399],["selection.ApplyTo(currentSettings);",1399],["else",1399],["// None have been selected. Apply the Initial values back to the temporary selection.",1399],["initialValues.ApplyTo(currentSettings);",1399],["// Apply the new temporary settings to our manager instance",1399],["currentSettings.ApplySettings(currentWindow);",1399],["public override void OnSelectionClosed(Preset selection)",1399],["// Call selection change one last time to make sure you have the last selection values.",1399],["OnSelectionChanged(selection);",1399],["// Destroy the receiver here, so you don't need to keep a reference to it.",1399],["DestroyImmediate(this);",1399],["Script example of an EditorWindow that shows custom settings using a temporary ScriptableObject Inspector and its Preset button (saved to a file called Editor/MyEditorWindow.cs):",1399],["using UnityEngine;",1399],["using UnityEditor;",1399],["using UnityEditor.Presets;",1399],["public class MyEditorWindow : EditorWindow",1399],["// get the Preset icon and a style to display it",1399],["private static class Styles",1399],["public static GUIContent presetIcon = EditorGUIUtility.IconContent(\"Preset.Context\");",1399],["public static GUIStyle iconButton = new GUIStyle(\"IconButton\");",1399],["Editor m_SettingsEditor;",1399],["MyWindowSettings m_SerializedSettings;",1399],["public string someSettings",1399],["get { return EditorPrefs.GetString(\"MyEditorWindow_SomeSettings\"); }",1399],["set { EditorPrefs.SetString(\"MyEditorWindow_SomeSettings\", value); }",1399],["// Method to open the window",1399],["[MenuItem(\"Window/MyEditorWindow\")]",1399],["static void OpenWindow()",1399],["GetWindow();",1399],["void OnEnable()",1399],["// Create your settings now and its associated Inspector",1399],["// that allows to create only one custom Inspector for the settings in the window and the Preset.",1399],["m_SerializedSettings = ScriptableObject.CreateInstance();",1399],["m_SerializedSettings.Init(this);",1399],["m_SettingsEditor = Editor.CreateEditor(m_SerializedSettings);",1399],["void OnDisable()",1399],["Object.DestroyImmediate(m_SerializedSettings);",1399],["Object.DestroyImmediate(m_SettingsEditor);",1399],["void OnGUI()",1399],["EditorGUILayout.BeginHorizontal();",1399],["EditorGUILayout.LabelField(\"My custom settings\", EditorStyles.boldLabel);",1399],["GUILayout.FlexibleSpace();",1399],["// create the Preset button at the end of the \"MyManager Settings\" line.",1399],["var buttonPosition = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight, Styles.iconButton);",1399],["if (EditorGUI.DropdownButton(buttonPosition, Styles.presetIcon, FocusType.Passive, Styles.iconButton))",1399],["// Create a receiver instance. This destroys itself when the window appears, so you don't need to keep a reference to it.",1399],["var presetReceiver = ScriptableObject.CreateInstance();",1399],["presetReceiver.Init(m_SerializedSettings, this);",1399],["// Show the PresetSelector modal window. The presetReceiver updates your data.",1399],["PresetSelector.ShowSelector(m_SerializedSettings, null, true, presetReceiver);",1399],["EditorGUILayout.EndHorizontal();",1399],["// Draw the settings default Inspector and catch any change made to it.",1399],["EditorGUI.BeginChangeCheck();",1399],["m_SettingsEditor.OnInspectorGUI();",1399],["if (EditorGUI.EndChangeCheck())",1399],["// Apply changes made in the settings editor to our instance.",1399],["m_SerializedSettings.ApplySettings(this);",1399],[" 2017-03-27 ",1399],["New feature in 2018.1 NewIn20181",1399],["Cache Management for Virtual Texturing",1400],["Virtual Texturing uses fixed-size texture caches in GPU memory. There is one cache per graphics format. You can configure the default size of a cache and overwrite its default size.",1400],["The Streaming Virtual Texturing (SVT) system also uses one CPU cache in main memory to store tile pages. A tile page contains multiple tiles that the SVT system reads all together from disk into the CPU cache. This increases the speed of the read throughput from disk on slower drives. When the Virtual Texturing system requests a tile, it reads the page that contains that tile. It's likely that the system will request other tiles in that page in the following frames, so the CPU cache retains that page to avoid another read from disk. The larger the CPU cache size, the longer Virtual Texturing can keep the page in main memory.",1400],["Virtual Texturing allocates the GPU cache of a given graphics format when it renders a Material that has a Texture Stack with a texture that uses that format. You can configure the cache size (in MB) on the HDRP Asset, which allows you to have different configurations for each quality level.",1400],["You can also use the VirtualTexturing.Streaming.SetGPUCacheSettings method to set the cache size in a script.",1400],["You can change the cache size, but this results in resource-heavy CPU and GPU operations, and blocks both the main thread and the render thread. The length of time it takes to change the cache size depends on the size and number of caches. To avoid noticeable freezes or stuttering, you should change the cache size at a time when frame rate is less important (such as when loading a level).",1400],["The main factors that influence the optimal size of a given cache are the output screen resolution, and the number of layers in each Texture Stack that use that graphics format. The number of Materials in the scene and the resolution of the textures don't influence the optimal size as much. For a full HD screen resolution on the highest quality setting, the combined total GPU cache size is typically 700MB.",1400],["An issue called \"cache thrashing\" occurs when the size of a cache is too low to accommodate its contents, and it must load and unload tiles in the same frame. To prevent cache thrashing, the Virtual Texturing system automatically reduces texture quality as needed. It monitors cache usage, and automatically manages a mipmap bias for the Texture Stack sampling in pixel shaders. If the cache fills up, the mipmap bias increases. This ensures that the Virtual Texturing system requests lower resolution tiles, which saves space in the cache, allowing it to contain all of the requested tiles.",1400],["If your textures look blurry, try increasing the size of your caches. If the caches are already large enough to render frames at the highest quality, further increasing the cache size means that the cache can retain tiles for longer before evicting them. This can reduce unwanted effects such as texture popping when you move or turn the Camera, because tiles that were recently visible are more likely to still be in the cache.",1400],["Enabling Streaming Virtual Texturing in your project",1401],["To enable Streaming Virtual Texturing, you need to enable Virtual Texturing in your project. To do this, go to Edit > Project Settings > Player and enable the Virtual Texturing setting.",1401],["Virtual Texturing is a project-wide setting that is shared for all platforms. You cannot build a player for platforms and graphics APIs that don't support Virtual Texturing. Virtual Texturing can allocate resources such as buffers, even if you don't use the feature in your project, so don't enable Virtual Texturing if you don't plan to use it.",1401],["When you enable Virtual Texturing in your project, Unity adds the following compiler directives:",1401],["ENABLE_VIRTUALTEXTURES: C# define that evaluates to True if your project supports Virtual Texturing.",1401],["ENABLE_VIRTUALTEXTURING: C++ and C# editor define that evaluates to True if Virtual Texturing is possible on the current build target.",1401],["UNITY_VIRTUAL_TEXTURING: Shader version of ENABLE_VIRTUALTEXTURES.",1401],["Note that these might be renamed in future versions of Unity.",1401],["Virtual Texturing error material",1402],["You can use Streaming Virtual Texturing (SVT) with shaders you create in Shader Graph. To use SVT to stream one or more textures, you need to set up your material and Shader Graph correctly. To learn more, see Using Streaming Virtual Texturing in Shader Graph.",1402],["When a texture is not set up correctly, Unity can’t render the material. Instead, Unity renders a Virtual Texturing (VT) error texture with a purple and blue checkerboard pattern. This texture remains visible until you fix the validation error.",1402],["The Virtual Texturing error texture:",1402],["",1402],["Validation errors",1402],["A Texture Stack is a group of textures that Unity samples at the same time, using the same UV coordinates. A validation error occurs when the Texture Stack or a texture in the Texture Stack is not in a valid state.",1402],["You can see the validation error in the Material Inspector:",1402],["This validation error example is caused by a Texture Stack with three layers that only has two texture slots assigned.",1402],["Common reasons for Texture Stack validation errors include:",1402],["\nA texture slot in the Texture Stack does not have an assigned texture.\n",1402],["\nThe Texture Stack is used in a material that is part of an AssetBundle.\n",1402],["\nThe Texture Stack is used in a material that is part of a SubScene.\n",1402],["\nThe Texture Stack is not of a supported data type (see Streaming Virtual Texturing requirements and compatibility).\n",1402],["Errors also occur when one or more textures in the stack are not in a valid state. Causes of a texture validation error include:",1402],["\nThe texture is not of type Texture2D (SVT does not support arrays or cube maps).\n",1402],["\nThe texture uses a Mirror wrap mode.\n",1402],["\nThe texture uses different clamping modes per axis (for example, repeating horizontally while clamping vertically).The texture’s resolution is not a power of two.\n",1402],["\nThe aspect ratios of all textures are not the same.\n",1402],["\nThe texture does not meet the minimum size of 128 by 128 pixels.\n",1402],["\nThe texture does not have a mipmap.\n",1402],["\nThe texture has Use Crunch compression enabled in the texture importer.\n",1402],["",1402],["Build player error",1402],["For Unity to build a player using SVT, all materials must use valid textures with matching aspect ratios and have valid Virtual Texture properties (see Validation errors). If a material in your player build is in an invalid state, it causes a build error that appears in the console log.",1402],["",1402],["Error naming convention",1402],["When Unity logs a validation error, it names the Texture Stacks according to the following convention:",1402],["\nThe number of layers the Texture Stack has.\n",1402],["\nThe Texture Stack’s layer names as set in ShaderGraph.\n",1402],["Here are two examples of this naming convention:",1402],["\nAn error name in a Texture Stack with two layers: Texture 2(Layer_Name_1, NULL)\n",1402],["\nAn error name in a Texture Stack with three layers: Texture 3 (Layer_Name_1, Layer_Name_2, NULL)\n",1402],["When an error appears in the console log, the error name also includes the material that uses the Texture Stack. For example:",1402],["\n'Texture Stack 2 (3_BaseColorMap, NULL)' of material 'materialname3'.\n",1402],["How Streaming Virtual Texturing works",1403],["The Streaming Virtual Texturing system (SVT) divides textures into tiles.",1403],["At runtime, when SVT samples a texture, it does the following:",1403],["It samples an indirection texture, calculates the non-virtual UVs, and samples a cache texture with these UVs.",1403],["It translates the virtual UVs to a tile ID, and binds an additional render target that receives these tile IDs. The CPU copies this render target back to main memory asynchronously, and processes it on a separate thread, to create requests for the asynchronous read manager to load these tiles from disk into a cache of GPU memory (if they are not already present).",1403],["The cost of these runtime operations means that it's more efficient to group textures together, and to sample them all at the same time. This process is called stacking textures. A group of textures that are sampled at the same time with the same UV coordinates is called a Texture Stack.",1403],["SVT issues requests for tiles during frame rendering, so it can take from milliseconds to seconds until the requested tiles load into the GPU cache, and in some cases they might not load into the GPU cache at all. If the requested tile does not load into the cache, SVT has an automatic fallback mechanism: it samples tiles from a higher mipmap level until the requested tile is in the cache. This results in a lower level of detail until the tile fully loads.",1403],["SVT in the High Definition Render Pipeline debug view",1403],["The High Definition Render Pipeline (HDRP) debug view shows how many neighboring screen pixels request the same tile.",1403],["To open the HDRP debug view, navigate to the Unity top menu and select Window > Analysis > Rendering Debugger > Rendering. To view the debug data for SVT, set Fullscreen Debug Mode to RequestedVirtualTextureTiles.",1403],["Pixels that sample the same texture tile have the same colour. The color hue (green, red, and so on) represents the mipmap level to which a tile belongs. For example, all yellowish tiles belong to mipmap 1 of the texture.",1403],["Marking textures as \"Virtual Texturing Only\"",1404],["In the Unity Editor, you can mark textures that only Virtual Texturing uses. This optimizes memory usage and Scene loading times, and reduces the size of the build. To mark a texture as one that only Virtual Texturing uses, open its Texture Importer and enable Virtual Texture Only.",1404],["In practice, when you use Virtual Texturing, you should mark as many textures as possible as Virtual Texture Only to maximize these benefits. Note that if you mark a texture as Virtual Texture Only, you cannot use it with a regular Texture Sampler in your Project. In the Editor, it might seem like you can use it with a regular Texture Sampler because a low resolution preview appears, but an error occurs if you then build a Player.",1404],["How it works",1404],["By default, when you load a Scene in the Unity Editor, the Editor loads all referenced textures into both CPU and GPU memory. The Unity Editor cannot stream textures into GPU memory from disk, but SVT can stream them from CPU memory. When you mark a texture as Virtual Texture Only, this means that on scene load the Editor loads it into CPU memory only, and then extracts tiles from that texture and streams them into GPU memory on demand.",1404],["In a Project with many high resolution textures, this significantly reduces both GPU memory usage and Scene loading times in the Unity Editor. For this reason, it's good practice to mark as many textures as possible as Virtual Texture Only, to ensure that the Streaming Virtual Texturing (SVT) system only streams them from the CPU.",1404],["If you don't mark a texture as Virtual Texture Only, and then use it with Virtual Texturing in the Player, the SVT system keeps a copy of the texture in both CPU and GPU memory.",1404],["Standard texture artifacts",1404],["By default, Unity adds all textures sampled in Shader Graph to the build as standard texture artifacts. Additionally, Virtual Texturing imports all Texture Stack textures into a tiled streaming file, which Unity also includes in the build.",1404],["If you mark a texture as Virtual Texture Only, Unity doesn't include it as a standard texture artifact, and includes it only in the tiled streaming file.",1404],["If you don't mark a texture as Virtual Texture Only, Unity includes it twice in the build; once as a standard texture artifact, and once in the tiled streaming file.",1404],["Note that if you mark a texture as Virtual Texture Only, but use it as a standard texture in the Player, the Player build fails.",1404],["Streaming Virtual Texturing requirements and compatibility",1405],["Render pipeline support",1405],["In the High Definition Render Pipeline (HDRP) you can use Streaming Virtual Texturing (SVT) in Shaders you create with Shader Graph.",1405],["System requirements",1405],["GPU requirements",1405],["GPU compute",1405],["Texture2DArrays",1405],["AsyncReadBack",1405],["Supported platforms",1405],["Windows",1405],["Mac",1405],["Linux",1405],["Some additional console platforms support this functionality. Consult the documentation for your target platform to determine if it supports Streaming Virtual Texturing.",1405],["Supported graphics APIs",1405],["DirectX 11",1405],["DirectX 12",1405],["Metal",1405],["Vulkan",1405],["Texture compatibility",1405],["SVT is built on top of Texture2D. SVT Textures go through the same importer, which limits the maximum texture size. SVT doesn't support textures larger than 16K x 16K. It also does not support UDIM Textures, or merging tiled image files into one large texture.",1405],["SVT doesn't support all Texture graphics formats. The supported formats are:",1405],["GraphicsFormat::kFormatRGBA_DXT1_SRGB",1405],["GraphicsFormat::kFormatRGBA_DXT1_UNorm",1405],["GraphicsFormat::kFormatRGBA_DXT3_SRGB",1405],["GraphicsFormat::kFormatRGBA_DXT3_UNorm",1405],["GraphicsFormat::kFormatR_BC4_UNorm",1405],["GraphicsFormat::kFormatRG_BC5_UNorm",1405],["GraphicsFormat::kFormatRGB_BC6H_SFloat",1405],["GraphicsFormat::kFormatRGB_BC6H_UFloat",1405],["GraphicsFormat::kFormatRGBA_BC7_SRGB",1405],["GraphicsFormat::kFormatRGBA_BC7_UNorm",1405],["GraphicsFormat::kFormatR8_SRGB",1405],["GraphicsFormat::kFormatR8_UNorm",1405],["GraphicsFormat::kFormatR8G8_SRGB",1405],["GraphicsFormat::kFormatR8G8_UNorm",1405],["GraphicsFormat::kFormatR8G8B8_SRGB",1405],["GraphicsFormat::kFormatR8G8B8_UNorm",1405],["GraphicsFormat::kFormatR8G8B8A8_SRGB",1405],["GraphicsFormat::kFormatR8G8B8A8_UNorm",1405],["GraphicsFormat::kFormatR16_SFloat",1405],["GraphicsFormat::kFormatR16_UNorm",1405],["GraphicsFormat::kFormatR16G16_SFloat",1405],["GraphicsFormat::kFormatR16G16_UNorm",1405],["GraphicsFormat::kFormatR16G16B16A16_SFloat",1405],["GraphicsFormat::kFormatR16G16B16A16_UNorm",1405],["GraphicsFormat::kFormatR32_SFloat",1405],["GraphicsFormat::kFormatR32G32_SFloat",1405],["GraphicsFormat::kFormatR32G32B32A32_SFloat",1405],["GraphicsFormat::kFormatA2B10G10R10_UNormPack32",1405],["SVT does not support the following:",1405],["Mirror wrap mode.",1405],["Per-axis clamping (for example, repeating horizontally while clamping vertically).",1405],["Textures with resolutions that aren't a power of two.",1405],["Textures in SVT don't have mipmaps smaller than the tile size (128 x 128 pixels). SVT clamps the sampling to this mip, so you can see aliasing for certain content at a distance.",1405],["SVT only supports trilinear filtering in the Player, and not in the Editor.",1405],["SVT only supports streaming from disk in the Player, and not in the Editor.",1405],["The maximum anisotropic filtering level is 8. This is because each tile has an 8-pixel border.",1405],["You cannot set Textures that are part of a stack dynamically in the Player. In the Player, you cannot call Material.SetTexture or Renderer.SetPropertyBlock to modify the Texture Stack.",1405],["Unity feature compatibility",1405],["SVT does not support the following:",1405],["AssetBundles, including Addressables and Live Link.",1405],["Scriptable Build Pipeline (SBP) and Subscenes.",1405],["Crunch compression.",1405],["The aspect ratios of stack layers must match.",1405],["Streaming Virtual Texturing",1406],["Streaming Virtual Texturing (SVT) is a feature that reduces GPU memory usage and texture loading times when you have many high resolution textures in your Scene. It splits textures into tiles, and progressively uploads these tiles to GPU memory when they are needed.",1406],["SVT lets you set a fixed memory cost. For full texture quality, the required GPU cache size depends mostly on the frame resolution, and not the number or resolution of textures in the Scene. The more high resolution textures you have in your Scene, the more GPU memory you can save with SVT.",1406],["SVT uses the Granite SDK runtime. The workflow requires no additional import time, no additional build step, and no additional streaming files. You work with regular Unity Textures in the Unity Editor, and Unity generates the Granite SDK streaming files when it builds your project.",1406],["Using Streaming Virtual Texturing in Shader Graph",1407],["You can use Streaming Virtual Texturing (SVT) with shaders you create in Shader Graph. Before you begin, you must enable Virtual Texturing in your project. The built-in High Definition Render Pipeline shaders (such as Lit and Unlit) don't support SVT.",1407],["To use SVT to stream a texture, you must add the texture to a Virtual Texture Property. A Virtual Texture Property defines a stack of related textures. To sample these textures, you connect the Virtual Texture Property to a Sample Virtual Texture node. The Sample Virtual Texture node takes one UV coordinate as the input, and uses that UV coordinate to sample all of the textures.",1407],["You should combine textures into the same Virtual Texture Property where possible. This is because it's more efficient to sample multiple textures that are part of the same Virtual Texture Property than to sample multiple Virtual Texture Properties.",1407],["When you use a Sample Virtual Texture node in the fragment stage, SVT automatically streams in texture tiles based on the UVs it sampled. For this to work, the Sample Virtual Texture node outputs the tile ID it reads from into a render target. To turn this off, open the node settings and disable Automatic Streaming. For more information, see How Streaming Virtual Texturing works.",1407],["To use a Sample Virtual Texture node in the vertex stage, you first need to disable Automatic Streaming on the Sample Virtual Texture node, and then select the Lod Level mode. You must then use a script to manually request that SVT loads the tiles. To do this, use the VirtualTexturing.Streaming.RequestRegion method as follows:",1407],["VirtualTexturing.Streaming.RequestRegion(Material, Stack ID, Rect, mipmap, numMips)",1407],["You can use this method to load any tiles that aren't yet visible, which allows you to do things like build a prefetching system. You need to call this method every frame, otherwise the system assumes that the tiles are no longer necessary, and potentially evicts them when it streams other tiles.",1407],["Shader Graph compatibility",1407],["You must assign all texture slots of the Virtual Texture Property in Shader Graph.",1407],["SVT copies each unique combination of textures you assign to a Virtual Texture Property to a unique section of the streaming virtual texture. Therefore, if you use many different combinations of textures in a Virtual Texture Property, it might increase your project build size because each combination is stored separately.",1407],["There are some limitations when you use the Sample Virtual Texture node in Shader Graph.",1407],["You cannot use the Sample Virtual Texture node in a Decal graph or on Transparent shaders. If you use the Sample Virtual Texture node in either of these ways, the node uses standard 2D texture sampling instead.",1407],["Automatic virtual streaming doesn't work when you use it in the vertex stage of a shader. By default, the Sample Virtual Texture node doesn’t connect to vertex slots in a Shader Graph. To sample a virtual texture stack in the vertex stage, you must set up manual streaming for that texture. To do this, set the Lod Mode to Lod Level, and disable Automatic Streaming in the node settings. You also need to write a C# script that drives data requests for this texture. For more information, see VirtualTexturing.Streaming.RequestRegion.",1407],["Some render pipeline or graph settings might be incompatible with virtual texture streaming. If the Sample Virtual Texture node doesn’t work with the current configuration, Shader Graph displays a warning message in the node settings, and the node uses standard 2D texture sampling instead.",1407],["System requirements for Unity 2022.3",1408],["This page outlines the minimum system requirements you need to run Unity 2022.3 on all supported platforms.",1408],["Unity Editor system requirements",1408],["Unity Player system requirements",1408],["",1408],["Unity Editor system requirements",1408],["This section lists the minimum requirements to run the Unity Editor. Actual performance and rendering quality might vary depending on the complexity of your project.",1408],["Minimum requirements Windows macOS Linux ",1408],["",1408],["Operating system version Windows 7 (SP1+), Windows 10 and Windows 11, 64-bit versions only. Mojave 10.14+ (Intel editor) Big Sur 11.0 (Apple silicon Editor) Ubuntu 20.04 and Ubuntu 18.04. ",1408],["CPU X64 architecture with SSE2 instruction set support X64 architecture with SSE2 instruction set support (Intel processors) Apple M1 or above (Apple silicon-based processors) X64 architecture with SSE2 instruction set support ",1408],["Graphics API DX10, DX11, and DX12-capable GPUs Metal-capable Intel and AMD GPUs OpenGL 3.2+ or Vulkan-capable, Nvidia and AMD GPUs. ",1408],["Additional requirements Hardware vendor officially supported drivers Apple officially supported drivers (Intel processor) Rosetta 2 is required for Apple silicon devices running on either Apple silicon or Intel versions of the Unity Editor. Gnome desktop environment running on top of X11 windowing system, Nvidia official proprietary graphics driver or AMD Mesa graphics driver. Other configuration and user environment as provided stock with the supported distribution (Kernel, Compositor, etc.) ",1408],["    For all operating systems, the Unity Editor is supported on workstations or laptop form factors, running without emulation, container or compatibility layer. ",1408],["",1408],["Unity Editor platform limitations",1408],["Apple",1408],["On macOS, secondary Editor windows only maximize, and don't enter full screen mode.",1408],["Apple silicon devices",1408],["The Apple silicon Editor has the following limitations:",1408],["Download and install of Apple silicon Editor via the Unity Hub is only possible through Hub version 3.0 Beta 6 or later, with some limitations in 3.0 Beta 6. For more information, refer to the Hub release notes:",1408],["To switch to the latest beta version of the Hub, change the “Channel” in Preferences > Advanced to “Beta” or re-download from https://unity.com/download.",1408],["If you're using Hub 2.4.5 and wish to use the Apple silicon Editor: uninstall the Apple Intel version, download and run the standalone installer for Unity Editor (Apple silicon) from https://unity3d.com/unity/whats-new/2022.3.0, and locate it through the Hub.",1408],["The native Apple silicon Editor doesn't support the CPU lightmapper or import from SketchUp.",1408],["Linux",1408],["The Linux Editor has the following limitations:",1408],["Video importing is limited to the VP8 video format.",1408],["File systems are case sensitive.",1408],["If the Editor generates a Pipe error ! message, you must increase the maximum open file limit in your current Editor session. For example, run ulimit -n 4096 in the terminal before launching the Editor. For more information, refer to the Troubleshooting Linux Editor issues page.",1408],["",1408],["Unity Player system requirements",1408],["This section lists the minimum requirements to build and run the Unity Player. Actual performance and rendering quality might vary depending on the complexity of your project.",1408],["",1408],["Mobile",1408],["Operating system Android ChromeOS iOS/iPadOS tvOS ",1408],["",1408],["Version 5.1 (API 22)+ Customized versions of Android must include all supported Google standard APIs. R89+ on stable release channel (Android API 28+) 12+ 12+ ",1408],["CPU ARMv7 with Neon Support (32-bit and 64-bit) or ARM64 ARMv7, ARM64, x86, and x86_64 A7 SoC+ A8 SoC+ ",1408],["Graphics API OpenGL ES 2.0+, 3.0+, VulkanNote: OpenGL ES 2.0 support is deprecated. OpenGL ES 2.0+, 3.0+, VulkanNote: OpenGL ES 2.0 support is deprecated. Metal Metal ",1408],["Additional requirements - 1GB+ RAM - Supported hardware devices must meet or exceed Google’s Android Compatibility Definition (Version 9.0) limited to the following Device Types:    1. Handheld (Section 2.2)    2. Television (Section 2.3)    3. Tablets (Section 2.6) - Hardware must be running Android OS natively. With the exception of Android for ChromeOS, Android within a container or emulator isn't supported. - For development: Android SDK (12/API 31), Android NDK (r23b) and OpenJDK (11), which are installed by default with Unity Hub. - Support for ChromeOS devices launched after 2019, such as Chromebooks, Chromebases, Chromeboxes, and tablets that can run Android apps and are within their Auto Update Expiration date. - Support for script debugging and profiling using Android Debug Bridge (adb) over WiFi or Ethernet only. For development and debugging: refer to Apple documentation on XCode support.For App Store submission: refer to Apple's submission guidelines for the required Xcode version. Apple TV 4th generation+ ",1408],["",1408],["Console",1408],["For information on PlayStation 4 (including PS VR), PlayStation 5 (including PS VR2), Xbox One, Xbox Series S X, and Nintendo Switch, refer to the Game Development For Console Platforms page. To build on console platforms, only Windows versions of Unity are supported. For specific requirements on any additional platform specific software needed, please refer to the developer documentation on the platform holders website, or contact your platform representative directly for further information.",1408],["For specific system requirements of the Unity Editor, refer to the Unity downloads page to refer to the version of Unity you are using.",1408],["",1408],["Desktop",1408],["Operating system Windows Universal Windows Platform macOS Linux ",1408],["",1408],["Operating system version Windows 7 (SP1+), Windows 10 and Windows 11 Windows 10+, Xbox One, Xbox Series X\\ S, HoloLens Mojave 10.14+ Ubuntu 20.04, Ubuntu 18.04, and CentOS 7 ",1408],["CPU x86, x64 architecture with SSE2 instruction set support. x86, x64 architecture with SSE2 instruction set support, ARM, ARM64. Apple Silicon, x64 architecture with SSE2. x64 architecture with SSE2 instruction set support. ",1408],["Graphics API DX10, DX11, DX12 capable. DX10, DX11, DX12 capable GPUs. Metal capable Intel and AMD GPUs OpenGL 3.2+, Vulkan capable. ",1408],["Additional requirements Hardware vendor officially supported drivers.For development: IL2CPP scripting backend requires Visual Studio 2015 with C++ Tools component or later and Windows 10+ SDK. Hardware vendor officially supported drivers. For development: Windows 10+ (64-bit), Visual Studio 2015 with C++ Tools component or later and Windows 10+ SDK. Apple officially supported drivers.For development: IL2CPP scripting backend requires Xcode. Targeting Apple Silicon with IL2CPP scripting backend requires macOS Catalina 10.15.4 and Xcode 12.2 or newer. Gnome desktop environment running on top of X11 windowing systemOther configuration and user environment as provided stock with the supported distribution (such as Kernel or Compositor) Nvidia and AMD GPUs using Nvidia official proprietary graphics driver or AMD Mesa graphics driver. ",1408],["    For all Desktop operating systems, the Unity Player is supported on workstations, laptop or tablet form factors, running without emulation, container or compatibility layer. ",1408],["",1408],["Server platform",1408],["Operating system Windows macOS Linux ",1408],["",1408],["Operating system version Windows 7 (SP1+), Windows 10 and Windows 11, running on workstation and rack form factors, without emulation or compatibility layer. Mojave 10.14+ running on workstation and rack form factors, without emulation or compatibility layer. Ubuntu 20.04, Ubuntu 18.04, and CentOS 7, running on workstation and rack form factors, without emulation or compatibility layer. ",1408],["CPU x86, x64 architecture with SSE2 instruction set support. x64 architecture with SSE2 instruction set support. x64 architecture with SSE2 instruction set support. ",1408],["GPU No explicit GPU support. ",1408],["Additional requirements Hardware vendor officially supported drivers. ",1408],["",1408],["WebGL",1408],["Operating system running browsers Windows, macOS, and Linux ",1408],["",1408],["Hardware Workstation and laptop form factors. ",1408],["Additional requirements Versions of Chrome, Firefox, Safari or Edge (Chromium-based) that are:- WebGL 2.0 capable- HTML 5 standards compliant- 64-bit- WebAssembly capableNote: WebGL 1.0 support is deprecated. ",1408],["",1408],["XR platform system requirements",1408],["To enable XR and properly configure your Unity project, follow the steps outlined in the XR section of this manual.",1408],["",1408],["",1408],["Standalone XR devices",1408],["Device Device software ",1408],[":----- :-------------- ",1408],["Magic Leap 2 Magic Leap 2 Core OS version 1.0+ ",1408],["Meta Quest 1 Quest software version 50 or earlier (See Quest 1 support for more information.) ",1408],["Meta Quest 2 Quest software version 39+ ",1408],["Meta Quest Pro Quest software version 46+ ",1408],["Microsoft HoloLens 1 Windows 10 Holographic version 1809+ ",1408],["Microsoft HoloLens 2 Windows Holographic version 1903+ ",1408],["",1408],["Meta desktop XR: Rift, Rift S",1408],["Specification Minimum requirement ",1408],[":--- :--- ",1408],["Operating system version Windows 10+ ",1408],["CPU See Oculus recommended specifications. ",1408],["GPU See Oculus recommended specifications. ",1408],["Graphics API DX11 ",1408],["",1408],["OpenXR",1408],["Refer to the OpenXR Plugin documentation for a list of compatible runtimes.",1408],["",1408],["Windows Mixed Reality",1408],["Specification Minimum requirement ",1408],[":--- :--- ",1408],["Operating system version Windows 10 RS4+ ",1408],["CPU Intel 64-bit ",1408],["Graphics API DX11 ",1408],["",1408],["Google ARCore",1408],["Specification Minimum requirement ",1408],[":--- :--- ",1408],["Operating system version See list of ARCore-supported devices. ",1408],["CPU ARM 32-bit and 64-bit ",1408],["Graphics API OpenGL ES 3.0+ ",1408],["Latest supported SDK version ARCore 1.24 ",1408],["",1408],["Apple ARKit",1408],["Specification Minimum requirement ",1408],[":--- :--- ",1408],["Operating system version iOS 12 ",1408],["CPU A9+ ",1408],["Graphics API Metal ",1408],["Latest supported SDK version ARKit 5 ",1408],["Additional requirements You must use Xcode 12.5 or later when compiling an iOS Player that includes the ARKit XR Plugin. ",1408],["",1408],["Embedded systems",1408],["Support for embedded platforms such as Embedded Linux and QNX is available for a wide variety of chipsets as part of the Premium Runtimes. This includes support for Linux on ARM based chipsets and additional APIs for Android Automotive.",1408],["Recommended system requirements for Unity on embedded systems:",1408],["Operating system Embedded Linux QNX ",1408],["",1408],["RAM 1GB+ 1GB+ ",1408],["CPU Dualcore x86, x64, ARM, ARM64 Dualcore x64, ARM64 ",1408],["GPU OpenGL ES 3 or Vulkan 1.1 Capable OpenGL ES 3 or Vulkan 1.1 Capable ",1408],["Android (Automotive) system requirements are the same as Android under Mobile.",1408],["",1408],["Other system requirements notes",1408],["For Unity Player supporting Windows 7, note that Microsoft support for Windows 7 expired after January 14th 2020.",1408],["Tags",1409],["A tag is a reference word which you can assign to one or more GameObjects. For example, you might define \"Player\" tags for player-controlled characters and an \"Enemy\" tag for non-player-controlled characters. You might define items the player can collect in a Scene with a \"Collectable\" tag. You can use any word you want as a tag. You can even use short phrases, but you might need to widen the Inspector to see the tag's full name. A GameObject can only have one tag assigned to it.",1409],["Tags help you identify GameObjects for scripting purposes. They ensure you don't need to manually add GameObjects to a script's exposed properties with drag and drop, so you save time when you use the same script code in multiple GameObjects.",1409],["Tags are useful for triggers in Collider control scripts that need to determine if the player interacts with an enemy, a prop, or a collectable, for example.",1409],["You can use the GameObject.FindWithTag function to find any GameObject that contains a tag you specify. The following example uses GameObject.FindWithTag(). It instantiates respawnPrefab at the location of GameObjects with the \"Respawn\" tag.",1409],["```lang-cs",1409],["using UnityEngine;",1409],["using System.Collections;",1409],["public class Example : MonoBehaviour {",1409],["public GameObject respawnPrefab;",1409],["public GameObject respawn;",1409],["void Start() {",1409],["if (respawn == null)",1409],["respawn = GameObject.FindWithTag(\"Respawn\");",1409],["Instantiate(respawnPrefab, respawn.transform.position, respawn.transform.rotation) as GameObject;",1409],["Create new Tags",1409],["The Inspector displays the Tag and Layer dropdown menus below the name of a GameObject.",1409],["To create a new tag, select Add Tag.... This opens the Tag and Layer Manager in the Inspector. Once you name a tag, it can't be renamed later.",1409],["Layers are similar to tags, but are used to define how Unity renders GameObjects in the Scene. Refer to documentation on the Layers page for more information.",1409],["Apply a Tag",1409],["The Inspector shows the Tag and Layer dropdown menus just below the name of a GameObject. To apply an existing tag to a GameObject, open the Tags dropdown and choose the tag you want to apply. The GameObject is now associated with this tag.",1409],["Understand built-in tags",1409],["The Editor includes the following built-in tags which don't appear in the Tag Manager:",1409],["Untagged",1409],["Respawn",1409],["Finish",1409],["EditorOnly",1409],["MainCamera",1409],["Player",1409],["GameController",1409],["The Editor caches GameObjects tagged with the MainCamera tag internally. When you access Camera.main, the Editor returns the first valid result from its cache. Refer to Camera.main to learn more.",1409],["GameObjects tagged with EditorOnly are destroyed when the game is built.",1409],["Additional resources",1409],["Target Matching",1410],["Often in games, a situation arises where a character must move in such a way that a hand or foot lands at a certain place at a certain time. For example, the character may need to jump across stepping stones or jump and grab an overhead beam.",1410],["You can use the Animator.MatchTarget function to handle this kind of situation. Imagine, for example, you want to arrange a situation where the character jumps onto a platform and you already have an animation clip for it called Jump Up. Firstly, you need to find the place in the animation clip at which the character is beginning to get off the ground, note in this case it is 14.1% or 0.141 into the animation clip in normalized time:",1410],["You also need to find the place in the animation clip where the character is about to land on its feet, which in this case is at 78.0% or 0.78.",1410],["With this information, you can create a script that calls MatchTarget which you can attach to the model:",1410],["using UnityEngine;",1410],["using System;",1410],["[RequireComponent(typeof(Animator))]",1410],["public class TargetCtrl : MonoBehaviour {",1410],["protected Animator animator;",1410],["//the platform object in the scene",1410],["public Transform jumpTarget = null;",1410],["void Start () {",1410],["animator = GetComponent();",1410],["void Update () {",1410],["if(animator) {",1410],["if(Input.GetButton(\"Fire1\"))",1410],["animator.MatchTarget(jumpTarget.position, jumpTarget.rotation, AvatarTarget.LeftFoot,",1410],["new MatchTargetWeightMask(Vector3.one, 1f), 0.141f, 0.78f);",1410],["The script will move the character so that it jumps from its current position and lands with its left foot at the target. Bear in mind that the result of using MatchTarget will generally only make sense if it is called at the right point in gameplay.",1410],["Trademarks and terms of use",1411],["\"Unity\", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.",1411],["Code snippets in the Unity Editor Manual and Scripting Reference are licensed under the Unity Companion License for Unity-dependent projects (see https://unity.com/legal/licenses/unity-companion-license). Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions.",1411],["All other information in the Unity Manual and Scripting Reference is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND)",1411],["The Unity Editor Manual and Scripting Reference may contain links to third-party websites or resources. You acknowledge and agree that Unity is not responsible or liable for: (i) the availability or accuracy of such websites or resources; or (ii) the content, products, or services on or available from such websites or resources. Links to such websites or resources do not imply any endorsement by Unity of such websites or resources or the content, products, or services available from such websites or resources. You acknowledge sole responsibility for and assume all risk arising from your use of any such websites or resources.",1411],["Create Neighbor Terrains",1412],["The Create Neighbor Terrains tool allows you to quickly create adjacent Terrain tiles, which automatically connect. In the Terrain Inspector, click the Create Neighbor Terrains icon.",1412],["When you select the tool, Unity highlights areas around the selected Terrain tile, indicating spaces where you can place a new, connected tile.",1412],["Enable the Fill Heightmap Using Neighbors checkbox to fill the new Terrain tile's heightmap with a cross-blend of neighboring Terrain tiles’ heightmaps, which ensures that the height of the new tile’s edges match up with adjacent tiles.",1412],["Choose a property from the Fill Heightmap Address Mode drop-down menu to determine how to cross-blend the heightmaps of adjacent tiles:",1412],["Property Description ",1412],["Clamp Unity performs a cross-blend between the heights along the edges of neighboring Terrain tiles that share a border with the new tile. Each Terrain tile has up to four neighboring tiles: top, bottom, left, and right. If there is no tile in any of the four adjacent spaces, the heights along that respective border are taken as zero. ",1412],["Mirror Unity mirrors each of the adjacent Terrain tiles, and cross-blends their heightmaps to produce the heightmap for the new tile. If there is no tile in any of the four adjacent spaces, the heights for that specific tile location are taken as zero. ",1412],["To create a new Terrain tile, click any of the available spaces next to an existing tile. The Editor creates a new Terrain tile in the same group as the selected Terrain, and copies over the settings of the tile it connects to. It also creates a new TerrainData Asset.",1412],["By default, Unity enables Auto connect in the Terrain Settings of a Terrain tile. When Auto connect is enabled, the Terrain system automatically manages the connections between neighboring Terrain tiles, and a tile automatically connects to any neighbors with the same Grouping ID.",1412],["On rare occasions, you might lose connections between tiles if you change the Grouping ID, or disable Auto connect for one or more tiles. To recreate connections between Terrain tiles, click the Reconnect button. Reconnect only connects two adjacent tiles if they have the same Grouping ID and if both tiles have Auto Connect enabled.",1412],["Connecting Terrain tiles in a group allows you to use other tools to paint textures or adjust the heightmaps of the group so that there are no seams. At run time, the Terrain system automatically blends the tessellation and normal map of connected tiles. This ensures they appear as a single piece of Terrain, without seams or artifacts.",1412],["If you attempt to paint across two unconnected tiles in a single stroke, Unity treats them as separate tiles, so any effects you apply might appear only on one tile, or display differently on each tile.",1412],["2019-04-17 ",1412],["Updated content to reflect new UI and options",1412],["Grass and other details",1413],["A Terrain might have grass clumps and other small objects (such as rocks) covering its surface. Unity renders these objects using textured quads or full meshes, depending on the level of detail and performance you require.",1413],["Prior to 2021.2, grass and other details only worked in the built-in render pipeline and Universal Render Pipeline (URP). In 2021.2, Unity introduced instancing details that work with all render pipelines, including the High Definition Render Pipeline (HDRP).",1413],["Terrain details are available in several modes, where each mode has a different use during game development.",1413],["Mode Description ",1413],["--------------- ------------------------------------------------------------ ",1413],["Instanced mesh Unity recommends you use this mode because it’s best suited for most scenarios that require the placement of any number of arbitrary meshes on Terrain.To add an instanced mesh, select Add Detail Mesh and enable the Use GPU Instancing option. ",1413],["Vertex Lit mesh Doesn’t use GPU instancing for rendering. Instead, it combines all detail instances into one mesh, which results in simple shading and limitations to the number of instances you can achieve.To add a Vertex Lit mesh, select Add Detail Mesh and set the Render Mode to Vertex Lit. ",1413],["Grass mesh Works similar to the vertex list mesh, but Unity treats these meshes as grass so they always have up-facing normals and move in the wind.To add a grass mesh, select Add Detail Mesh and set the Render Mode to Grass. ",1413],["Grass Texture Lets you create grass quad meshes directly from Texture, which move in the wind. You don’t need to specify any custom meshes, and there's also an option you can enable to make grass quads always face the camera for a billboard effect.Select Add Grass Texture for this option. ",1413],["Paint Details",1413],["To enable grass and detail painting, select the Paint Details button on the Terrain Inspector toolbar.",1413],["Initially, a Terrain has no grass or details available. In the Inspector, click the Edit Details button to display a menu with the Add Detail Mesh and Add Grass Texture options. Click either option to bring up a window that lets you choose Assets to add to the Terrain for painting.",1413],["Add Detail Mesh",1413],["Use the Detail Prefab field to select a Prefab from your Project. To create an authentic look, each mesh is affected by a random factor to determine the size and color. Unity uses the Perlin noise algorithm to generate such random factors.",1413],["The Min Width, Max Width, Min Height, and Max Height values specify the upper and lower scalings along the X and Y axes with which the meshes are randomly generated.",1413],["The Align to Ground (%) value specifies how much the detail axis aligns to the terrain normal. 0 is unaligned, and 100 is completely aligned to the normal.",1413],["The Position Jitter (%) controls the randomness of the detail distribution from ordered to random. This is only available when legacy distribution is turned off in Quality settings.",1413],["The Noise Seed setting sets the random number generator seed. Each seed value represents a unique generation. If you set the same seed for two types of details, the generated instances become identical. The Noise Spread value refers to the scaling of the noise pattern over the X-Z plane, with higher values indicating more variations within a given area.",1413],["The Hole Edge Padding (%) setting controls how far away detail objects are from the edge of the hole area. For more information, see DetailPrototype.holeEdgePadding.",1413],["The Detail Density value controls the detail's density relative to its size. You can enable this in \"Coverage\" detail scatter mode, set in Terrain Settings.",1413],["Healthy Color** and Dry Color settings control the color variation. Unity performs linear interpolation between the healthy and dry colors, and selects a color based on the size of the mesh. For example, the system considers bigger-sized meshes to be healthier, thus the linear interpolation results for such meshes lean more towards the Healthy Color tint. These color settings disappear when you select Use GPU Instancing because they have no effect on instanced meshes.",1413],["The Affected by Density Scale checkbox determines whether the Detail Density Scale setting set in the Terrain Settings affects this detail.",1413],["You can set the Render Mode to Vertex Lit or Grass.",1413],["Render Mode Description ",1413],["--------------- ------------------------------------------------------------ ",1413],["Vertex Lit Renders detail meshes as solid, vertex lit GameObjects in the scene, which don't move in the wind. ",1413],["Grass Renders detail meshes in the scene with simplified lighting similar to Grass Textures, and do move in the wind. ",1413],["Note: To apply a texture on a detail using Vertex Lit or Grass render mode, their material should have a texture assigned to the MainTex _material property (default property name for Base Color Map in built-in/URP). No other material properties are considered for non-instanced details.",1413],["Use GPU Instancing",1413],["In addition, you can specify if you want to use GPU instancing to render your detail meshes. With GPU instancing, Unity uses the material and the shader specified on the prefab for rendering. This lets you perform more customization in the shader, and potentially use Shader Graph.",1413],["Unity still applies the Width and Height noise to each instance, but disables the Healthy Color/Dry Color noise. You can use your own color variation technique, along with many other randomizations, in the shader.",1413],["Under the hood, some of the Unity GPU instancing limitations do affect rendering. For example:",1413],["\nYour target platform needs to support GPU instancing.\n",1413],["\nYour shader must support GPU instancing. (Most shaders do support it.)\n",1413],["\nObjects are rendered in batches of 1,023 or fewer.\n",1413],["\nInstanced light probe lighting or lightmap lighting are not supported.\n",1413],["Unlike regular instancing where Unity dynamically builds up the instancing constant buffer every frame, instancing details have persistent constant buffers for better CPU and GPU performance when the target hardware allows for it, at the cost of moderately increased GPU memory usage.",1413],["If you select Use GPU Instancing, the Render Mode setting becomes grayed out and unavailable.",1413],["Add Grass Texture",1413],["The Add Grass Texture window",1413],["Detail Texture** is the Texture that represents the grass. You can download Textures from the Asset Store, or create your own Textures. A Texture is a small image with alpha set to zero for the empty areas. Note that “Grass” is a generic term; it is possible for a Texture to represent flowers or man-made objects such as barbed wire coils.",1413],["The Min Width, Max Width, Min Height, Max Height, Noise Seed, Noise Spread, Hole Edge Padding (%), Align to Ground (%), Position Jitter (%), Detail Density, Affected by Density Scale, Healthy Color, and Dry Color settings work the same as they do for meshes, and are described in the Add Detail Mesh section above.",1413],["Finally, when you enable the Billboard option, the grass images rotate so that they always face the Camera. This is useful when you want to show a dense field of grass because clumps are two-dimensional, and not visible from the side. However, with sparse grass, the rotations of individual clumps might become apparent to the viewer, creating a strange effect.",1413],["Remove details",1413],["To remove a detail, select the detail to remove, click the Edit Details button, then select Remove. When you remove a detail, Unity clears the data that represents the Terrain area on which you scattered that detail.",1413],["2022-07-20 ",1413],["Added information about detail density and distribution.",1413],["Working with Heightmaps",1414],["Terrain tools that affect height, such as Raise or Lower Terrain and Set Height, use a grayscale texture called a heightmap. Unity represents the height of each point on the Terrain as a value in a rectangular array. It represents this array using a grayscale heightmap. Heightmaps are built into the Terrain, and the values stored in a heightmap define the height of each point or vertex on the Terrain.",1414],["Importing and exporting heightmaps",1414],["You can import and export heightmaps into the Unity Editor. This is useful when you want to use real world height data to replicate a landmark such as Mount Everest, or work on a heightmap image in an external editor like Photoshop. You can also use 3D modelling applications, such as Houdini and World Machine, to generate Terrain, then import your Terrain into Unity as a heightmap.",1414],["It’s good practice to store heightmaps as RAW files. A RAW file uses a 16-bit grayscale format that is compatible with most image and landscape editors. The Unity Editor enables you to import and export RAW heightmap files for a Terrain.",1414],["To access the import and export settings into the Editor, select the Terrain component in the Inspector, and click the Terrain Settings button (gear icon in the toolbar).",1414],["Under Texture Resolutions (On Terrain Data), there are two buttons labelled Import Raw and Export Raw.",1414],["Import Raw allows Unity to read a heightmap from the RAW file format, and generate it in the Editor.",1414],["Export Raw allows Unity to write a heightmap from the Editor to the RAW file format.",1414],["Import and export options",1414],["Property Description ",1414],["Depth Determines how many bits Unity uses per pixel in the imported or exported heightmap.• Bit 16: Uses 16 bits (2 bytes)• Bit 8: Uses 8 bits (1 byte) ",1414],["Resolution The texture resolution (width and height) of the imported heightmap. ",1414],["Byte Order Determines how Unity orders the bytes for each pixel in the imported or exported heightmap. This mainly applies to bit-16 depth heightmaps, and is platform-dependent. ",1414],["Flip Vertically Determines whether Unity flips the exported heightmap vertically across the x-axis. ",1414],["Terrain Size The size of Terrain that Unity will apply the imported heightmap to. ",1414],["2020-06-30 ",1414],["Updated content to reflect new UI and options",1414],["Terrain settings",1415],["The final tool on the five-icon toolbar is for settings. In the Inspector, click the gear icon to reveal the Terrain settings.",1415],["Basic Terrain",1415],["Property Function ",1415],["Grouping ID The grouping ID for the Auto connect feature. ",1415],["Auto Connect Check this box to automatically connect the current Terrain tile to to neighboring tiles sharing the same Grouping ID. ",1415],["Reconnect On rare occasions, you might lose connections between Terrain tiles if you change the Grouping ID, or disable Auto connect for one or more tiles. To recreate connections between tiles, click the Reconnect button. Reconnect only connects two adjacent tiles if they have the same Grouping ID and if both tiles have Auto Connect enabled. ",1415],["Draw Check this box to enable rendering of the Terrain. ",1415],["Draw Instanced Check this box to enable instanced rendering. ",1415],["Pixel Error The accuracy of the mapping between Terrain maps (such as heightmaps and Textures) and generated Terrain. Higher values indicate lower accuracy, but with lower rendering overhead. ",1415],["Base Map Dist. The maximum distance at which Unity displays Terrain Textures at full resolution. Beyond this distance, the system uses a lower resolution composite image for efficiency. ",1415],["Cast Shadows Use this to define how the Terrain casts shadows onto other objects in the Scene. Rendering.ShadowCastingMode controls how the Terrain shadow interacts with Scene objects. ",1415],["Off The Terrain does not cast shadows. ",1415],["On The Terrain casts shadows. ",1415],["Two Sided Casts two-sided shadows from either side of the Terrain. The Progressive Lightmapper supports two-sided shadows. Enlighten Baked and Enlighten Realtime Global Illumination do not. ",1415],["Shadows Only Shadows from the Terrain are visible, but the Terrain itself is not. ",1415],["Reflection Probes Use this to set how Unity uses Reflection Probes on Terrain. This setting only has an effect when Material is set to Built In Standard, or if you use a custom Material (with Material set to Custom) that supports rendering with reflection. ",1415],["Off Disables Reflection Probes, and uses a skybox for reflection. ",1415],["Blend Probes Enables Reflection Probes. Blending occurs only between probes. Uses default reflection if there are no Reflection Probes nearby, but no blending between default reflection and probe. ",1415],["Blend Probes And Skybox Enables Reflection probes. Blending occurs between probes, or between probes and default reflection. ",1415],["Simple Enables Reflection probes, but no blending occurs between probes when there are two overlapping volumes. ",1415],["Material Lets you specify the Material to use for rendering Terrain. ",1415],["Create The Create button only appears when you select a default Terrain Material. It does not appear when you select a custom Material. When you click Create, Unity creates a copy of the Material in your Project folder, which you can modify, and then automatically selects this new copy. ",1415],["Tree and Detail Objects",1415],["Property Function ",1415],["Draw Check this box to draw trees, grass, and details. ",1415],["Bake Light Probes For Trees If you check this box, Unity creates internal Light Probes at the position of each tree, and applies them to tree renderers for lighting. These probes are internal, and don't affect other renderers in the Scene.If you don't check this box, trees are still affected by Light Probe Groups. This option is only effective for trees with Light Probe enabled on their prototype Prefab. ",1415],["Remove Light Probe Ringing If you check this box, Unity removes visible overshooting, which often appears as ringing on GameObjects that are affected by intense lighting. This setting reduces contrast, and is dependent on Bake Light Probes for Trees. For more information, see Light Probe Groups: Ringing. ",1415],["Preserve Tree Prototype Layers Check this box if you want your tree instances to take on the layer values of their prototype Prefabs, instead of the Terrain GameObject’s layer values. ",1415],["Tree Motion Vectors Set whether to use motion vectors for trees painted on the terrain. Motion vectors track each renderer’s per-pixel, screen-space motion from one frame to the next. Note: Not all platforms support motion vectors. See SystemInfo.supportsMotionVectors for more information.This property corresponds to the Terrain.treeMotionVectorModeOverride API. ",1415],["Camera Motion Only Use only camera movement to track motion. ",1415],["Per Object Motion Use a specific pass to track motion. ",1415],["Force No Motion Do not track motion. ",1415],["Inherit From Prototype Use the Motion Vector property setting of the tree prototype. ",1415],["Detail Distance The distance from the camera beyond which details are culled. ",1415],["Detail Density Scale Scaling factor applied to the density of all details with the \"Affected by Density Scaling\" setting enabled. For more information, see Detail Settings. ",1415],["Tree Distance The distance from the camera beyond which trees are culled. ",1415],["Billboard Start The distance from the camera at which Billboard images replace 3D Tree objects. ",1415],["Fade Length The distance over which Trees transition between 3D objects and Billboards. ",1415],["Max Mesh Trees The maximum number of visible Trees that are represented as solid 3D meshes. Beyond this limit, Billboards replace Trees. ",1415],["Detail Scatter Mode The scatter mode type to be used while painting details. Coverage paints areas details should be populated in based on their density setting, Instance Count paints the amount per sample. ",1415],["Wind Settings for Grass",1415],["Property Function ",1415],["Speed The speed of the wind as it blows across the grass. ",1415],["Size The size of ripples on grassy areas as the wind blows over them. ",1415],["Bending The degree to which the wind bends over grass objects. ",1415],["Grass Tint The overall color tint applied to grass objects. The final color that appears is the Grass Tint multiplied by the Healthy Color and Dry Color settings of each grass object. ",1415],["Wind Settings for Grass have no connection with Wind Zone components. The two are unrelated.",1415],["Mesh Resolution",1415],["Property Function ",1415],["Terrain Width The size of the Terrain GameObject in its X-axis, in world units. ",1415],["Terrain Length The size of the Terrain GameObject in its Z-axis, in world units. ",1415],["Terrain Height The difference in Y-coordinate between the lowest possible heightmap value and the highest one, in world units. ",1415],["Detail Resolution Per Patch The number of cells in a single patch (mesh). This value is squared to form a grid of cells, and must be a divisor of the detail resolution. ",1415],["Detail Resolution The number of cells available for placing details onto the Terrain tile. This value is squared to make a grid of cells. ",1415],["Holes Settings",1415],["Property Function ",1415],["Compress Holes Texture If you check this box, Unity compresses the Terrain Holes Texture to the DXT1 graphics format in the Player during runtime. If you don’t check this box, Unity does not compress the Texture. ",1415],["Texture Resolutions",1415],["Property Function ",1415],["Heightmap Resolution The pixel resolution of the Terrain’s heightmap. This value must be a power of two plus one, for example, 513, which is 512 + 1. ",1415],["Control Texture Resolution The resolution of the splatmap that controls the blending of the different Terrain Textures. ",1415],["Base Texture Resolution The resolution of the composite Texture to use on the Terrain when you view it from a distance greater than the Basemap Distance. ",1415],["Require resampling on change indicates that when you change properties under Texture Resolutions, the Editor resizes the Terrain tile's content to the new size you specify, which can potentially affect the quality of your content.",1415],["Heightmap Import/Export buttons",1415],["The Import Raw and Export Raw buttons allow you to set or save the Terrain's heightmap to an image file in the RAW grayscale format. You can create RAW format files in third-party terrain editing tools (such as Bryce), and you can open, edit, and save them in Photoshop. This allows for sophisticated generation and editing of terrains outside Unity.",1415],["Lighting",1415],["Property Function ",1415],["Contribute Global Illumination Enable this check box to indicate to Unity that the Terrain influences Global Illumination computations. When you enable this property, Lightmapping properties appear. ",1415],["Receive Global Illumination You can only configure this option if you’ve enabled Contribute Global Illumination above. If you don't enable Contribute Global Illumination, the Terrain registers as non-static, and receives Global Illumination from Light Probes. ",1415],["Lightmapping",1415],["Property Function ",1415],["Scale in Lightmap Lets you specify the relative size of an object’s UVs within a lightmap. If you set this to zero, the object is not lightmapped, but still contributes lighting to other objects in the Scene. A value greater than 1.0 increases the number of pixels (the lightmap resolution) used for this GameObject, while a value less than 1.0 decreases it. ",1415],["Lightmap Parameters Lets you adjust advanced parameters that affect the process of generating a lightmap for an object using global illumination. See Lightmap Parameters for more information about these settings. ",1415],["Rendering Layer Mask Determines which rendering layer this Terrain lives on. When you use a scriptable render pipeline, you can specify an additional rendering-specific layer mask. This filters the renderers based on the mask the renderer has and the mask passed to the DrawRenderers command. ",1415],["Quality Settings",1415],["Property Function ",1415],["Ignore Quality Settings If you check this box, this Terrain ignores the Terrain Override Settings set in the Quality settings. ",1415],["Terrain Collider",1415],["The Terrain Collider component manages collisions on the terrain. For details about the Terrain Collider component properties, see the Terrain Collider component reference.",1415],["2022-07-20 ",1415],["Updated content to reflect new quality change settings and updated UI",1415],["Paint Holes",1416],["Use the Paint Holes tool to hide portions of your Terrain. It allows you to paint openings in the Terrain for formations such as caves and cliffs.",1416],["To access the tool, click the Paint Terrain icon, and select Paint Holes from the drop-down menu.",1416],["To paint holes, click and drag the cursor across the Terrain. To erase holes from the Terrain, click and drag while holding down the Shift key. Use the Brush Size slider to control the size of your tool. The Opacity slider determines the strength of the Brush when you apply it to the Terrain.",1416],["Internally, Unity uses a Texture to define the opacity mask for a Terrain surface. When you use the Paint Holes tool to paint on a Terrain, it modifies this Texture. Thus, any holes you paint are visible only if the Terrain Material you use clips or discards texels based on this mask.",1416],["Because this tool uses a Texture, you might see aliased edges surrounding holes you paint. Therefore, for example, when you make a cave, you might choose to hide the aliased edges of the hole with other geometry such as rock meshes.",1416],["Terrain holes work with lighting, physics, and NavMesh baking. Unity discards the Terrain information in areas where you paint holes to ensure accurate lighting, Terrain Colliders, and baked NavMeshes.",1416],["To support physics Colliders, the resolution of the hole's mask Texture is equal to the resolution of the Terrain's heightmap - 1.",1416],["Additional resources",1416],["Paint Holes added in 2019.3 NewIn20193",1416],["Paint Texture",1417],["Use the Paint Texture tool to add textures, such as grass, snow, or sand, to your Terrain. It allows you to draw areas of tiled texture directly onto the Terrain. In the Terrain Inspector, click the Paint Terrain icon, and select Paint Texture from the list of Terrain tools.",1417],["To configure the tool, you must first click the Edit Terrain Layers button to add Terrain Layers. The first Terrain Layer you add flood-fills your Terrain with the configured texture. You can add multiple Terrain Layers. However, the number of Terrain Layers each tile supports depends on your specific render pipeline. See the Rendering performance section on Terrain Layers for more information.",1417],["Next, you must choose a Brush for painting. Brushes are Assets based on Textures, which define the shape of a brush. Select from the built-in Brushes or create your own, then adjust the Brush Size and Opacity (strength of the applied effect) of the brush.",1417],["Finally, in the Scene view, click and drag the cursor across the Terrain to create areas of tiled texture. You can paint across tile boundaries to blend adjacent regions with a natural, organic look. Be aware, however, that the Terrain system adds the selected Terrain Layer to any Terrain you paint on, which might affect performance as mentioned above.",1417],["2019-04-17 ",1417],["Updated content to match new UI",1417],["Raise or Lower Terrain",1418],["Use the Raise or Lower Terrain tool to alter the height of a Terrain tile.",1418],["To access the tool, click the Paint Terrain icon, and in the drop-down menu, select Raise or Lower Terrain. Select a brush from the palette, then click and drag the cursor over a Terrain object to raise its height. Click and drag while holding down the Shift key to lower the Terrain height.",1418],["Use the Brush Size slider to control the size of your tool to create different effects, from large mountains to tiny details. The Opacity slider determines the strength of the brush when you apply it to the Terrain. An Opacity value of 100 sets the brush to full strength, while a value of 50 sets the brush to half strength.",1418],["Use different brushes to create a variety of effects. For example, increase the height with a soft-edged brush to create rolling hills, and then decrease the height of some areas with a hard-edged brush to cut steep cliffs and valleys.",1418],["You can also use heightmaps to edit the height of your Terrain. For more information, see Working with Heightmaps.",1418],["2019-04-17 ",1418],["Updated content to match new UI",1418],["Using Terrain at runtime",1419],["The Terrain system uses Unity engine resources to function correctly. Unity includes these resources in your Player build when you have at least one Terrain instance in a Scene that is part of the build. If you only create Terrain dynamically at runtime, make sure you include a Terrain component somewhere in your build as a placeholder. You can disable that Terrain instance (uncheck the box next to the Terrain name in the Inspector window), and put it in a Scene that your game or app doesn't load.",1419],["Set Height",1420],["Use the Set Height tool to adjust the height of an area on the Terrain to a specific value. To access the tool, click on the Paint Terrain icon, and select the Set Height tool from the drop-down menu.",1420],["When you paint with the Set Height tool, it lowers areas of the Terrain currently above the target height, and raises areas below that height. Set Height is useful for creating flat, level areas in a Scene, such as plateaus or man-made features like roads, platforms, and steps.",1420],["Choose a property from the Space drop-down menu to specify whether the height offset is relative to Local or World space.",1420],["Property Description ",1420],["World Select this to set the height offset to the value you enter in the Height field. However, be aware that the Set Height tool cannot lower a Terrain below its Transform Position Y coordinate, even if you enter a value lower than the Y coordinate. ",1420],["Local Select this to set the height offset relative to the Terrain. For example, if you enter 100 in the Height field, the height offset is the sum of the Terrain's Transform Position Y coordinate and 100 (terrain.transform.position.y + 100). The Height value you enter must range from 0 to the Terrain Height value in the Terrain settings. ",1420],["Enter a numerical value in the Height field, or use the Height property slider, to manually set a height. Alternatively, press Shift and click on the Terrain to sample the height at the cursor position, similar to how you would use the Eyedropper tool in an image editor.",1420],["If you press the Flatten Tile button under the Height field, it levels the whole Terrain tile to the height you specified. This is useful to set a raised ground level if, for example, you want the landscape to include both hills above the ground level and valleys below it. If you press the Flatten All button, it levels all Terrain tiles in the Scene.",1420],["The Brush Size value determines the size of the Brush to use, while the Opacity value determines how quickly the height of the area you’re painting reaches the set target height.",1420],["You can also use heightmaps to edit the height of your Terrain. For more information, see Working with Heightmaps.",1420],["2019-10-22 ",1420],["Updated content to match the new UI and added information about the Space option.",1420],["Smooth Height",1421],["The Smooth Height tool smooths the heightmap and softens Terrain features. In the Terrain Inspector, click the Paint Terrain icon, and select Smooth Height from the list of Terrain tools.",1421],["The Smooth Height tool averages out nearby areas, softens the landscape and reduces the appearance of abrupt changes; it does not significantly raise or lower Terrain height.",1421],["Smoothing is particularly useful after you paint with brushes containing high frequency patterns. These brush patterns tend to introduce sharp, jagged edges into a landscape, but you can use the Smooth Height tool to soften that roughness.",1421],["Adjust the Blur Direction value to control which areas to soften. If you set Blur Direction to -1, the tool softens exterior (convex) edges of your Terrain. If you set Blur Direction to 1, the tool softens interior (concave) edges of your Terrain. To smooth all parts of your Terrain evenly, set Blur Direction to 0.",1421],["The Brush Size value determines the size of the Brush to use, while the Opacity value determines how quickly the tool smooths out the area you're painting.",1421],["2019-04-17 ",1421],["Updated content to reflect new UI and options",1421],["Stamp Terrain",1422],["Use the Stamp Terrain tool to stamp a brush shape on top of the current heightmap. In the Terrain Inspector, click on the Paint Terrain icon and select Stamp Terrain from the drop-down menu.",1422],["Stamp Terrain is useful if you create a custom brush using a Texture that represents a heightmap with a specific geological feature, such as a hill.",1422],["With the Stamp Terrain tool, you can choose an existing brush and apply it with a single click. Each click raises the Terrain to the set Stamp Height in the shape of the selected brush. To multiply the Stamp Height by a percentage, move the Opacity slider to change its value. For example, a Stamp Height of 200 and an Opacity of 50% sets the height of each stamp to 100.",1422],["The Max <--> Add slider lets you choose whether to pick the maximum height, or add the height of your stamp to the Terrain's current height.",1422],["If you set the Max <--> Add value to 0, then stamp onto the Terrain, Unity compares the height of your stamp to the current height of the stamped area, and sets the final height to the value that is higher.",1422],["If you set the Max <--> Add value to 1, then stamp onto the Terrain, Unity adds the height of your stamp to the current height of the stamped area, so that the final height is the sum of both values.",1422],["Enable the Subtract checkbox to subtract the height of any stamps you apply to the Terrain from the existing height of the stamped area. Note that Subtract works only if your Max <--> Add value is greater than zero, for example, if you set the Max <--> Add value to 1. If the stamp height exceeds the current height of the stamped area, the system levels the height to zero.",1422],["2019-04-18 ",1422],["Updated content to reflect new UI and options",1422],["Terrain tools",1423],["To access the Terrain painting tools, click on a Terrain object in the Hierarchy window and open an Inspector window. In the Inspector, click the Paint Terrain (paintbrush) icon to reveal the list of Terrain tools.",1423],["The Terrain component provides six distinct tools:",1423],["Raise or Lower Terrain**: paint the heightmap with a paintbrush tool.",1423],["Paint Holes**: hide portions of the Terrain.",1423],["Paint Texture**: apply surface textures.",1423],["Set Height**: adjust the heightmap toward a specific value.",1423],["Smooth Height**: smooth the heightmap to soften Terrain features.",1423],["Stamp Terrain**: stamp a brush shape on top of the current heightmap.",1423],["You can also create your own custom Terrain tools. For more information about this, see API documentation on TerrainAPI.TerrainPaintTool, and see Unity's GitHub repository for Terrain Tools.",1423],["2019-10-22 ",1423],["Updated screenshot to match the new UI and added the Paint Holes tool.",1423],["Trees",1424],["You can paint Trees onto a Terrain in a way that is similar to painting heightmaps and Textures. However, Trees are solid 3D objects that grow from the surface. Unity uses optimizations like billboarding for distant Trees to maintain good rendering performance. This means that you can have dense forests with thousands of Trees, and still keep an acceptable frame rate.",1424],["Painting Trees",1424],["The Paint Trees button on the toolbar enables Tree painting:",1424],["Initially, the Terrain has no tree prototypes available. To start painting onto the Terrain, you need to add a tree prototype. Click the Edit Trees button, and select Add Tree. From here, you can select a Tree Asset from your Project, and add it as a Tree Prefab for use with the Brush:",1424],["To help prototyping, SpeedTree provides six SpeedTree models in the free Unity Terrain - HDRP Demo Scene on the Asset Store. Alternatively, you can create your own Trees.",1424],["If the Tree Prefab that you are importing supports Bend Factor, the Add Tree window displays a Bend Factor property for adjusting wind responsiveness. Trees created with the SpeedTree Modeler don't have a Bend Factor; only those created with Tree Editor do. See the section on Making Trees bend in the wind, below.",1424],["When you have configured your Settings (described below), you can paint Trees onto the Terrain in the same way you paint textures or heightmaps. To remove Trees from an area, hold the Shift key while you paint. To remove just the currently selected Tree type, hold down the Control key while you paint.",1424],["Settings",1424],["After you select which Tree to place, adjust its settings to customize Tree placement and characteristics.",1424],["Property Function ",1424],["Mass Place Trees Create an overall covering of Trees without painting over the whole landscape. After mass placement, you can still use painting to add or remove Trees to create denser or sparser areas. ",1424],["Brush Size Controls the size of the area that you can add Trees to. ",1424],["Tree Density Tree Density controls the average number of Trees painted onto the area defined by Brush Size. ",1424],["Tree Height Control the Tree's minimal height and maximal height using a slider. Drag the slider to the left for short Trees, and right for tall Trees. If you uncheck Random, you can specify the exact scale for the height of all newly painted Trees within the range of 0.01 to 2. ",1424],["Lock Width to Height By default, a Tree's width is locked to its height so that Trees are always scaled uniformly. However, you can disable the Lock Width to Height option, and specify the width separately. ",1424],["Tree Width If the Tree's width is not locked to its height, you can control the Tree's minimal width and maximal width using a slider. Drag the slider to the left for thin Trees, and right for wide Trees. If you uncheck Random, you can specify the exact scale for the width of all newly painted Trees within the range of 0.01 to 2. ",1424],["Random Tree Rotation If you configure the Tree with an LOD Group, use the Random Tree Rotation setting to help create the impression of a random, natural-looking forest rather than an artificial plantation of identical Trees. Uncheck this option if you want to place Trees with fixed, identical rotations. ",1424],["Color Variation The amount of random shading applied to Trees. This only works if your shader reads the _TreeInstanceColor property. For example, shaders for all trees you create with Tree Editor read the _TreeInstanceColor property. ",1424],["Tree Contribute Global Illumination Enable this check box to indicate to Unity that the Tree influences Global Illumination computations. ",1424],["Creating Trees",1424],["There are two ways to create new Tree models. Use the SpeedTree Modeler from IDV, Inc. to create Trees with advanced visual effects, such as smooth LOD transition, fast billboarding, and natural wind animation. For more detailed information, refer to the SpeedTree Modeler documentation. Alternatively, use the Tree Editor to create Tree Models.",1424],["Internally, the Terrain Engine distinguishes between the two types of models by determining whether an LOD Group is present on the Tree Prefab's root GameObject. A SpeedTree Prefab has an LODGroup component, but a Tree Editor Prefab does not.",1424],["When creating Trees, position the anchor point at the base of the Tree where it emerges from the ground. Performance depends on the polygon count of your Tree model, so be sure to test on your platform, and create simpler Trees if necessary. Also, for Tree Editor Trees, each Mesh always has exactly two materials: one for the Tree body and the other for the leaves.",1424],["Trees you create using Tree Editor must use the Nature/Soft Occlusion Leaves and Nature/Soft Occlusion Bark shader. To use those shaders, you have to place Trees in a specific folder named Ambient-Occlusion, otherwise the Trees don't render correctly. When you place a model in this folder and re-import it, Unity calculates soft ambient occlusion in a way that is specifically designed for Trees.",1424],["If you change an imported Tree Asset in a separate 3D modelling application, you need to click the Refresh button in the Editor to see the updated Trees on your Terrain:",1424],["Note:** When you import and alter a SpeedTree model in a 3D modeling program, then re-export it (as an .fbx or .obj), you might lose the natural wind animation functionality that comes with SpeedTree models.",1424],["Using Colliders with Trees",1424],["You can add a Capsule Collider to a Tree Asset. First, click > next to the Tree Asset to open the Prefab.",1424],["Then, select Add Component > Physics > Capsule Collider to add the collider. To return to the Scene, click < next to the Prefab name.",1424],["You must also check Enable Tree Colliders in the Terrain Collider component.",1424],["Make Trees bend in the wind",1424],["Wind Zones can bend Trees to simulate the direct effect of wind. This feature is only available for Trees that you place through the Terrain menu. To do this, select the Terrain, click the Paint Trees button in the Inspector, then select Edit Trees > Add Tree and select your Tree Prefab. If you did not create the Tree in Unity, set the Bend Factor to 1. Click on the Terrain to place the selected Tree.",1424],["Terrain-based Trees that have a Bend Factor react to Wind Zones by bending and swaying, according to the values of the Wind Zone's Turbulence and Main properties. The Turbulence setting controls the fluttering of leaves. Reducing this value smooths the fluttering effect. The Main value controls the main force of the wind. To create a Wind Zone, select GameObject > 3D Object > Wind Zone.",1424],["If the Wind Zone's Mode is Directional, then its position relative to the Tree does not matter. The Trees will sway in the direction of the Wind Zone. However, if your Wind Zone's Mode is Spherical, then its Radius has to overlap the Tree's radius. This results in multi-directional gusts of wind, with a falloff from the center towards the edge.",1424],["With the default settings, Trees such as the Broadleaf Prefab (which is provided in the Standard Assets Environment pack) sway in a smooth and realistic way. However, if you're using your own Tree Prefab, you might need to adjust the Wind Zone property values. If your Tree Prefab trunk is bent all the way to one side, try reducing the Main value. Alternatively, if the branches of your Tree Prefab bend or stretch excessively, reduce the Turbulence value.",1424],["Tree Level of Detail (LOD) transition zone",1424],["For Tree Editor Trees, Unity's LOD system uses a 2D to 3D transition zone to seamlessly blend 2D billboards with 3D Tree models. This prevents any sudden popping of 2D and 3D Trees, which is vital in VR. Note that billboard Trees don't receive local lighting such as Point Lights and Spot Lights. They work with directional lights, but lighting on the billboards only updates when you rotate the Camera.",1424],["For SpeedTree Trees, see the LOD and LOD Group documentation for more information about configuring LOD components.",1424],["2020-02-19 ",1424],["Added billboard limitations for Tree Editor Trees.",1424],["Creating and editing Terrains",1425],["To add a Terrain GameObject to your Scene, select GameObject > 3D Object > Terrain from the menu. This also adds a corresponding Terrain Asset to the Project view. When you do this, the landscape is initially a large, flat plane. The Terrain’s Inspector window provides a number of tools to create detailed landscape features.",1425],["Terrain editing tools in the Inspector",1425],["The toolbar provides five options to adjust your Terrain:",1425],["Create adjacent Terrain tiles.",1425],["Sculpt and paint your Terrain.",1425],["Add trees.",1425],["Add details such as grass, flowers, and rocks.",1425],["Change general settings for the selected Terrain.",1425],["For more information about each of these icons, see Create Neighbor Terrains, Terrain tools, Trees, Grass and other details, and Terrain Settings.",1425],["Select the paintbrush icon to access painting tools, which allow you to modify the Terrain. Use the cursor to sculpt the height of the Terrain, or paint texture onto the Terrain. Choose from several built-in Brush shapes, or define your own Brush using a texture. You can also change the size and opacity (the strength of the applied effect) of the Brush. Once you’ve defined the properties, your cursor takes the shape of the selected Brush. Click or drag on the Terrain to create different shapes and textures.",1425],["Similar to how you paint with a Brush on the Terrain, you can add textures, trees, and details like grass, flowers, and rocks. You can also create additional connected Terrain tiles, change the height of an entire tile, and even write custom Brushes with complex effects.",1425],["Terrain keyboard shortcuts",1425],["The Terrain Inspector has the following keyboard shortcuts enabled by default.",1425],["Keys Function ",1425],["Comma ( , ) and Period ( . ) Cycle through the available Brushes ",1425],["Shift-Comma ( < ) and Shift-Period ( > ) Cycle through the available objects for trees, textures, and details ",1425],["Open Bracket ( [ ) and Close Bracket ( ] ) Decrease and increase the Brush Size ",1425],["Minus ( - ) and Equal ( = ) Decrease and increase Brush Opacity ",1425],["To set your own custom shortcuts, use the Shortcuts Manager.",1425],["On Windows and Linux, select Edit > Shortcuts.",1425],["On macOS, select Unity > Shortcuts.",1425],["Under Category, select Terrain to display Terrain-related shortcut assignments. For more information about setting and modifying shortcuts, see the Shortcuts Manager page.",1425],["Additionally, the standard F keystroke works slightly differently for Terrain. As Terrains are typically very large, when you press the F key, the Scene view focuses on the area where you position the cursor. This provides a very quick and intuitive way to jump to the Terrain area you want to edit. If you press F while the cursor is not over a Terrain tile, it uses the standard framing behavior, framing the selection around the whole GameObject when you place the cursor over the Scene view.",1425],["Additional resources",1425],["2019-04-17 ",1425],["Updated content to match new UI and added information about keyboard shortcuts",1425],["Terrain Tools",1426],["The Terrain Tools preview package provides additional functionality on top of Unity's built-in Terrain tools. It includes more advanced features such as Erosion, sculpting tools, and Brush Mask Filters. It also contains the Terrain Toolbox, which lets you create new Terrain from preset files or imported heightmaps, batch change settings on multiple Terrain tiles, and import/export splatmaps and heightmaps.",1426],["This add-on toolset is suitable if you require more control over the appearance of your Terrain, and wish to streamline Terrain workflows. It's also useful when you want to make more complex-looking Terrain, or author Terrain Texture data in external tools such as Houdini and World Machine.",1426],["For more information about how to install and use the Terrain Tools package, see the Terrain Tools documentation.",1426],["Unit Testing",1427],["As your project grows, and the number of scripts, classes and methods in your project increases, it can become difficult to ensure that a change in one part of your code doesn't break things somewhere else.",1427],["Automated testing helps you check that all parts of your code are functioning as expected. It saves time by identifying where and when problems occur as soon as they are introduced during development, rather than relying on manual testing, or even worse - bug reports from your end users.",1427],["The Unity Test Framework package (formerly the \"Unity Test Runner\") is a tool that allows you to test your code in both Edit mode and Play mode, and also on target platforms such as Standalone, Android, or iOS.",1427],["For more information on other versions of the Test Framework package, see the com.unity.test-framework page.",1427],["Text-Based Scene Files",1428],["As well as the default binary format, Unity also provides a text-based format for scene data. This can be useful when working with version control software, since text files generated separately can be merged more easily than binary files. Also, the text data can be generated and parsed by tools, making it possible to create and analyze scenes automatically. The pages in this section provide some reference material for working with the format.",1428],["See the Editor window page for how to enable this feature.",1428],["Texture formats",1429],["The Unity Editor can import texture source files with a number of common formats, such as JPEG or PNG. However, GPUs do not use these formats at runtime; instead, they use different, specialized formats that are optimized for memory usage and speed of sampling operations.",1429],["You can configure the texture compression format for a texture asset in its import settings. When you add a texture asset to your project, the Unity Editor automatically chooses an appropriate compression format for each build target; however, most platforms support several texture compression formats.",1429],["Texture compression format can affect load times, GPU frame times, memory usage, visual quality, build size, and compression times; it is therefore important to understand this subject before you make changes to this setting.",1429],["This page contains the following information:",1429],["\nTexture compression overview\n",1429],["\nCrunch compression\n",1429],["\nApplying texture compression formats to texture assets\n",1429],["For general information on texture asset import settings, see Texture import settings. For information on the recommended, default, and supported texture compression formats for each platform, see Recommended, default, and supported texture compression formats, by platform.",1429],["",1429],["Texture compression overview",1429],["Bits per pixel (bpp) is the amount of storage required for a single texture pixel. Textures with a lower bpp value have a smaller size on disk and in memory. A lower bpp value also means that the GPU uses less memory bandwidth to read the texture pixels. GPU memory bandwidth can often be a frame rate bottleneck, and thus texture compression helps to avoid it.",1429],["The higher the visual quality of a texture asset, the higher the bits per pixel; which, consequently, leads to greater build size, loading time, and runtime memory usage. All texture compression formats are lossy, to some extent. Uncompressed textures offer the highest quality, but they also have the highest bits per pixel. Different texture compression formats offer different trade-offs.",1429],["In general, for the best runtime performance and size on disk, for most of your texture assets, you should choose a texture compression format that is supported by your target device, and has the fewest bits per pixel for the visual quality you want.",1429],["When you use a texture for a specific purpose, you can change its individual settings. For example, if you are using a texture with only one channel as a mask, you might choose the BC4 format to reduce file size but preserve quality. If you are using some textures for pixel-perfect UI, you might choose not to compress them.",1429],["Choose a format that your target platforms and devices support. When Unity loads a texture with a compression format that the device does not support, it decompresses the texture to the default uncompressed format for that platform and stores the uncompressed copy in memory alongside the original compressed texture. This increases texture loading time and uses additional memory. When Unity loads a texture with a compression format that the device supports, the GPU can use the data without any need for conversion.",1429],["",1429],["Crunch compression",1429],["Crunch is a compression format that works on top of DXT or ETC compression, by providing additional variable bit rate compression. When Unity loads a Crunch-compressed texture, it decompresses the texture to DXT or ETC on the CPU, and then uploads the DXT or ETC compressed texture data to the GPU.",1429],["Crunch compression helps the texture use the lowest possible amount of disk space, but has no effect on runtime memory usage. Crunch textures can take a long time to compress, but decompression at runtime is fairly fast. You can adjust how lossy Crunch compression is, to strike a balance between file size and quality.",1429],["If you are particularly concerned about the size of your build and Crunch is supported on your target platform, consider adding Crunch compression.",1429],["",1429],["Applying texture compression formats to texture assets",1429],["For information about texture import settings and how to set up platform-specific overrides, see Texture Import Settings.",1429],["Mipmaps introduction",1430],["A mip or mip level is a version of a texture with a specific resolution. Mips exist in sets called mipmaps. Mipmaps contain progressively smaller and lower resolution versions of a single texture.",1430],["For example, a mipmap might contain four versions of a texture, from the original texture (Mip 0), to Mip 1, Mip 2, and Mip 3:",1430],["Mipmaps are commonly used for rendering objects in 3D scenes, where textured objects can vary in distance from the camera. A higher mip level is used for objects closer to the camera, and lower mip levels are used for more distant objects.",1430],["Mipmaps can speed up rendering operations and reduce rendering artifacts in situations where the GPU renders a texture at less than its full resolution. A mip is effectively a cached, downsampled version of the original texture. Instead of performing many sampling operations on the original, full resolution texture, the GPU can perform a smaller number of operations on the already downsampled version.",1430],["Sometimes, mipmaps aren't beneficial. Mipmaps increase the size of a texture by 33%, both on disk and in memory. They also provide no benefit when a texture is only rendered at its full resolution, such as a UI texture that isn't scaled.",1430],["You can create a mipmap for a texture manually, or you can instruct Unity to generate a mipmap for you. To automatically generate a mipmap, ensure that your original texture's resolution is a power of two value, as shown in the example mipmap image.",1430],["You can enable or disable mipmaps for a texture asset in the Texture Import Settings Inspector.",1430],["How the GPU samples mip levels",1430],["When the GPU samples a texture, it determines which mip level to use based on the texture coordinates (UVs) for the current pixel, and two internal values that the GPU calculates: DDX and DDY. DDX and DDY provide information about the UVs of the pixels beside and above the current pixel, including distances and angles.",1430],["The GPU uses these values to determine how much of a texture's detail is visible to the camera. A greater distance and a more extreme angle between the current pixel and its neighbors means that the GPU picks a lower resolution mip; a shorter distance and less extreme angle means that the GPU picks a mip with a higher resolution.",1430],["The GPU can also blend the texture information from two mips together with trilinear filtering. Blending mips while sampling can make the transition from one mip to another less noticeable. To blend mips, the GPU takes a specific percentage of texture information from one mip and the rest from another mip.",1430],["Mip bias",1430],["A setting called mip bias can do two things while sampling, based on the sampler settings:",1430],["The mip bias can change the threshold for the GPU selecting a lower or higher mip for a sample. The GPU selects a specific mip when you use point and linear filtering in a sampler. For example, the GPU's might decide that the texture at a set of UVs uses a sample from Mip 3. With a mip bias of -2, the GPU would use the higher resolution Mip 1 for the sample, instead.",1430],["The mip bias can tell the GPU to prefer one mip over another by an exact percentage when blending samples from different mips. The GPU blends mips when you use trilinear filtering in a sampler. For example, the GPU's calculations might return a value of 0.5. The 0.5 value tells the GPU to take 50% of the texture information it needs from one mip, and the remaining 50% from the next mip in the mipmap. With an added mip bias of 0.2, the 0.5 value would change to 0.7, and the GPU would take 70% of the texture information from the first mip and only 30% from the second.",1430],["The GPU has a global mip bias that it applies to its mip selection by default. Textures can have their own mip bias, which Unity adds or subtracts from the global mip bias. You can also specify your own mip bias for an individual texture sampling operation in a shader.",1430],["To set the mip bias for an individual texture, see Texture.mipMapBias. To set a mip bias for a texture sampling operation in a hand-coded shader, use HLSL functions such as tex2dbias. To set a mip bias for a texture sampling operation in Shader Graph, see Sample texture 2D Array node or Sample texture 2D node.",1430],["How Unity loads mipmaps",1430],["You can control the way that Unity loads mipmaps at runtime with Mipmap Streaming.",1430],["Mipmaps",1431],["A mip or mip level is a version of a texture with a specific resolution. Mips exist in sets called mipmaps. Mipmaps can speed up rendering operations and reduce rendering artifacts in situations where the GPU renders a texture at less than its full resolution.",1431],["This section contains the following information:",1431],["Page Description ",1431],["",1431],["Mipmaps introduction An introduction to mips and mipmaps in Unity. ",1431],["The Mipmpap Streaming system Information about a feature that lets you control how Unity loads mips. ",1431],["The Mipmpap Streaming system API How to use C# scripts to extend the basic functionality of the Mipmap Streaming system. ",1431],["Streaming Controller component Information about this component, which is part of the Mipmap Streaming system. ",1431],["Cookie Import Settings reference",1432],["The Cookie texture type formats the texture asset so it's suitable to use as a light cookie in the Built-in Render Pipeline. For this texture type, Unity updates the Texture Shape automatically based on the Light Type you select:",1432],["\nDirectional Light and Spot Light cookies use the 2D shape.\n",1432],["\nPoint Light cookies use the Cube shape.\n",1432],["Properties",1432],["",1432],["",1432],["",1432],["Property",1432],["Description",1432],["",1432],["",1432],["",1432],["",1432],["Light Type",1432],["Define the type of Light that the cookie is applied to.Note that you must create your source texture with an appropriate layout: cookies for Point Lights must be laid out as cubemaps, and cookies for Directional Lights and Spot Lights must be laid out as regular 2D Textures.If you apply a cookie to a Directional Light, you can use a cookie configured for a Directional Light, or a cookie configured for a Spot Light. A Directional Light using a cookie configured for a Directional Light repeats the cookie in a tiled pattern all over the scene. A Directional Light using a cookie configured for a Spot Light projects the cookie just once in the direct path of the “beam” of the light. This is the only case where the position of a Directional Light is important.",1432],["",1432],["",1432],["Spot Light",1432],["With this type of Light, you want the edges of your Cookie Texture to be solid black to get the proper effect, so Unity sets the Wrap Mode to Clamp by default.",1432],["",1432],["",1432],["Directional Light",1432],["With this type of Light, this Texture tiles, so Unity sets the Wrap Mode to Repeat by default.",1432],["",1432],["",1432],["Point Light",1432],["When you choose this type of Light, you can also customize the Cube shape-specific properties.",1432],["",1432],["",1432],["",1432],["Cursor Import Settings reference",1433],["The Cursor texture type formats the texture asset so it's suitable to use as a custom mouse cursor. Unity locks Texture Shape to 2D for this texture type. For more information, see Texture Shape.",1433],["Properties",1433],["",1433],["",1433],["",1433],["Property",1433],["Description",1433],["",1433],["",1433],["",1433],["",1433],["",1433],["Default Import Settings reference",1434],["The Default texture type is the most common texture type and provides access to most of the properties for texture importing. With this texture type, you can also change the Texture Shape.",1434],["For more information about the Texture Importer window, see texture type.",1434],["Properties",1434],["",1434],["",1434],["",1434],["Property",1434],["Description",1434],["",1434],["",1434],["",1434],["",1434],["",1434],["Directional Lightmap Import Settings reference",1435],["The Directional Lightmap texture type formats the texture asset so it's suitable to use as a directional Lightmap. Unity locks Texture Shape to 2D for this texture type. For more information, see Texture Shape.",1435],["Properties",1435],["",1435],["",1435],["",1435],["Property",1435],["Description",1435],["",1435],["",1435],["",1435],["",1435],["",1435],["Editor GUI and Legacy GUI Import Settings reference",1436],["The Editor GUI and Legacy GUI texture type formats the texture asset so it's suitable for HUD and GUI controls. Unity locks Texture Shape to 2D for this texture type. For more information, see Texture Shape.",1436],["Properties",1436],["",1436],["",1436],["",1436],["Property",1436],["Description",1436],["",1436],["",1436],["",1436],["",1436],["",1436],["Lightmap Import Settings reference",1437],["The Lightmap texture type formats the texture asset so it's suitable to use as a Lightmap. This option enables encoding into a specific format (RGBM or dLDR depending on the platform) and a post-processing step on texture data (a push-pull dilation pass). Unity locks Texture Shape to 2D for this texture type. For more information, see Texture Shape.",1437],["Properties",1437],["",1437],["",1437],["",1437],["Property",1437],["Description",1437],["",1437],["",1437],["",1437],["",1437],["",1437],["Normal map Import Settings reference",1438],["The Normal map texture type formats the texture asset so it's suitable for real-time normal mapping. With this texture type, you can also set the Texture Shape.",1438],["Properties",1438],["",1438],["",1438],["",1438],["Property",1438],["Description",1438],["",1438],["",1438],["",1438],["",1438],["",1438],["Shadowmask Import Settings reference",1439],["The Shadowmask texture type formats the texture asset so it's suitable to use as a shadowmask. Unity locks Texture Shape to 2D for this texture type. For more information, see Texture Shape.",1439],["Properties",1439],["",1439],["",1439],["",1439],["Property",1439],["Description",1439],["",1439],["",1439],["",1439],["",1439],["",1439],["Single Channel Import Settings reference",1440],["The Single Channel texture type formats the texture asset so it only has one channel. With this texture type, you can also set the Texture Shape.",1440],["Properties",1440],["",1440],["",1440],["",1440],["Property",1440],["Description",1440],["",1440],["",1440],["",1440],["",1440],["Channel",1440],["Specifies which color channel from the texture source file to use for the single-channel texture asset.",1440],["",1440],["",1440],["Alpha",1440],["The single-channel texture asset uses the alpha channel of the texture source file.",1440],["",1440],["",1440],["Red",1440],["The single-channel texture asset uses the red color channel of the texture source file.",1440],["",1440],["",1440],["",1440],["Sprite (2D and UI) Import Settings reference",1441],["The Sprite (2D and UI) texture type formats the texture asset so it's suitable to use in 2D applications as a Sprite. Unity locks Texture Shape to 2D for this texture type. For more information, see Texture Shape.",1441],["Properties",1441],["Properties",1441],["",1441],["",1441],["",1441],["Property",1441],["Description",1441],["",1441],["",1441],["",1441],["",1441],["Sprite Mode",1441],["Specifies how to extract the sprite graphic from the image.",1441],["",1441],["",1441],["Single",1441],["Use the sprite image as is. You can clip and edit the image in the Sprite Editor to refine it further, but Unity treats the Sprite generated from the texture source file as a single asset.",1441],["",1441],["",1441],["Multiple",1441],["Choose this value if the texture source file has several elements in the same image. You can then define the location of the elements in the Sprite Editor so that Unity knows how to split the image into different sub-assets. For example, you can create animation frames from a single sheet with multiple poses, create Tiles from a single Tilesheet, or create the different parts of a character.",1441],["",1441],["",1441],["Polygon",1441],["Choose this value to clip the sprite texture according to the mesh defined in the Sprite Editor’s Sprite Custom Outline.",1441],["",1441],["",1441],["Pixels Per Unit",1441],["The number of pixels of width/height in the Sprite image that correspond to one distance unit in world space.",1441],["",1441],["",1441],["Mesh Type",1441],["Specifies the mesh type for the sprite asset you want Unity to generate.This property is visible only when Sprite Mode is set to Single or Multiple.",1441],["",1441],["",1441],["Full Rect",1441],["Choose this value to create a quad (four-sided polygon) to map the Sprite onto.",1441],["",1441],["",1441],["Tight",1441],["Choose this value to generate a Mesh based on pixel alpha value. The Mesh that Unity generates generally follows the shape of the Sprite.Note: Any Sprite that's smaller than 32x32 uses Full Rect, even when Tight is specified.",1441],["",1441],["",1441],["Extrude Edges",1441],["Controls how much area to leave around the Sprite in the generated Mesh.",1441],["",1441],["",1441],["Pivot",1441],["The location in the image where the sprite’s local coordinate system originates. Choose one of the pre-set options, or select Custom to set your own Pivot location in X and Y.This property is visible only when Sprite Mode is set to Single.",1441],["",1441],["",1441],["Generate Physics Shape",1441],["Indicates whether to generate a default Physics Shape from the outline of the sprite if you don’t define a Custom Physics Shape.This property is only visible when you set Sprite Mode to Single or Multiple.",1441],["",1441],["",1441],["Open Sprite Editor",1441],["Open the Sprite Editor which you can use to define how you want Unity to separate the elements on an image with multiple Sprite Mode elements (to create sub-Assets) or refine the shape, size, and pivot position of a Polygon shape.This button only appears if your project uses the 2D Sprite package. For information about how to find and install packages in the Unity Package Manager, see Finding packages and Installing from the registry.This property is visible only when is set to .",1441],["",1441],["",1441],["Install 2D Sprite Package ",1441],["Installs the 2D Sprite package. The Open Sprite Editor button becomes visible after Unity installs the required package.This button only appears if your project currently doesn't have the 2D Sprite package installed. ",1441],["",1441],["",1441],["",1441],["Additional resources",1441],["\n2D game development QuickStart guide\n",1441],["\nSprite Editor\n",1441],["Textures",1442],["Normally, the mesh geometry of an object only gives a rough approximation of the shape while most of the fine detail is supplied by Textures. A texture is just a standard bitmap image that is applied over the mesh surface. You can think of a texture image as though it were printed on a rubber sheet that is stretched and pinned onto the mesh at appropriate positions. The positioning of the texture is done with the 3D modelling software that is used to create the mesh.",1442],["Unity can import textures from most common image file formats.",1442],["Textures for use on 3D models",1442],["Textures are applied to objects using Materials. Materials use specialised graphics programs called Shaders to render a texture on the mesh surface. Shaders can implement lighting and colouring effects to simulate shiny or bumpy surfaces among many other things. They can also make use of two or more textures at a time, combining them for even greater flexibility.",1442],["You should make your textures in dimensions that are to the power of two (e.g. 32x32, 64x64, 128x128, 256x256, etc.) Simply placing them in your project's Assets folder is sufficient, and they will appear in the Project View.",1442],["Once your texture has been imported, you should assign it to a Material. The material can then be applied to a mesh, Particle System, or GUI Texture. Using the Import Settings, it can also be converted to a Cubemap or Normalmap for different types of applications in the game. For more information about importing textures, please read the Texture Component page.",1442],["2D graphics",1442],["In 2D games, the Sprites are implemented using textures applied to flat meshes that approximate the objects' shapes.",1442],["An object in a 2D game may require a set of related graphic images to represent animation frames or different states of a character. Special techniques are available to allow these sets of images to be designed and rendered efficiently. See the manual page about the Sprite Editor for more information.",1442],["GUI",1442],["A game's graphic user interface (GUI) consists of graphics that are not used directly in the game scene but are there to allow the player to make choices and see information. For example, the score display and the options menu are typical examples of game GUI. These graphics are clearly very different from the kind used to detail a mesh surface but they are handled using standard Unity textures nevertheless. See the manual chapter on GUI Scripting Guide for further details about Unity's GUI system.",1442],["Particles",1442],["Meshes are ideal for representing solid objects but less suited for things like flames, smoke and sparkles left by a magic spell. This type of effect is handled much better by Particle Systems. A particle is a small 2D graphic representing a small portion of something that is basically fluid or gaseous, such as a smoke cloud. When many of these particles are created at once and set in motion, optionally with random variations, they can create a very convincing effect. For example, you might display an explosion by sending particles with a fire texture out at great speed from a central point. A waterfall could be simulated by accelerating water particles downward from a line high in the scene.",1442],["Unity's particle systems have a wealth of options for creating all kinds of fluid effects. See the manual chapter on the subject for further information.",1442],["",1442],["Terrain Heightmaps",1442],["Textures can even be used in cases where the image will never be viewed at all, at least not directly. In a greyscale image, each pixel value is simply a number corresponding to the shade of grey at that point in the image (this could be a value in the range 0..1 where zero is black and one is white, say). Although an image like this can be viewed, there is no reason why the numeric pixel values can't be used for other purposes as well, and this is precisely what is done with Terrain Heightmaps.",1442],["A terrain is a mesh representing an area of ground where each point on the ground has a particular height from a baseline. The heightmap for a terrain stores the numeric height samples at regular intervals as greyscale values in an image where each pixel corresponds to a grid coordinate on the ground. The values are not shown in the scene as an image but are converted to coordinates that are used to generate the terrain mesh.",1442],["Interestingly, even though a heightmap is not viewed directly as an image, there are still common image processing techniques that are useful when applied to the height data. For example, adding noise to a heightmap will create the impression of rocky terrain while blurring will smooth it out to produce a softer, rolling landscape.",1442],["More information about terrains in Unity can be found in this section of the manual.",1442],["The Mipmap Streaming system API",1443],["Use this API to override the default settings in the Mipmap Streaming system, or get more fine-grained control.",1443],["This page contains the following information:",1443],["For general information about this system, see Mipmap Streaming system.",1443],["",1443],["Overview",1443],["You can use the API to override behavior for specific situations, while the Mipmap Streaming system automatically manages the default settings.",1443],["This is useful if you know that Unity needs to fully load certain textures; for example, if they relate to GameObjects that move large distances quickly, or if you use instantaneous camera cuts.",1443],[" ",1443],["Controlling the Mipmap Streaming system",1443],["To enable and control Mipmap Streaming on a texture, use the following properties:",1443],["Mipmap Streaming automatically reduces the mip level of textures until they fit into the Mipmap Streaming Memory Budget. The Texture’s Mip Map Priority number is roughly a mipmap offset for the Memory Budget. For example, with a priority of 2, the Mipmap Streaming system tries to use a mip that is two mip levels higher than other textures with a priority of 0. Negative values are also valid. If it can’t do this, it uses a lower mip level to fit the Memory Budget.",1443],["These properties are read-only at runtime:",1443],["To control what happens at runtime, use the following static properties:",1443],["",1443],["Controlling Cameras",1443],["When cutting from one location to another, the Mipmap Streaming system needs time to stream the required Textures into Unity. To trigger preloading at a disabled target Camera location, call StreamingController.SetPreloading on the target Camera’s Streaming Controller component. You can specify a time-out to end the preloading phase. To automatically enable the Camera at the end of the preloading phase, set the activateCameraOnTimeout flag to true in script. To disable a Camera after you cut from it to the new one, pass that Camera as the disableCameraCuttingFrom parameter.",1443],["void StreamingController.SetPreloading(float timeoutSeconds=0.0f, bool activateCameraOnTimeout=false, Camera disableCameraCuttingFrom=null)",1443],["To cancel or query the preloading state, use the following methods:",1443],["To determine whether the Mipmap Streaming system is still loading Textures, you can query the following properties:",1443],["Note that there is delay between when you enable a Camera and when these properties become a value other than zero. This delay is because the Mipmap Streaming system calculates the mip maps using time-sliced processing. For this reason, during a Camera cut you should wait a minimum length of time before the cut. Texture budget and Scene movement can cause continuous Mipmap Streaming, so you also need to set a maximum length of time before the cut.",1443],[" ",1443],["Loading a specific mip level",1443],["To override the mip level calculation for a specific Texture, use Texture2D.requestedMipmapLevel. This is an exact mip level ranging from 0 to the maximum mip level of the specific Texture, or the Max Level Reduction value if that is lower. 0 is the highest resolution mip.",1443],["To check if your requested mip level has loaded, use Texture2D.IsRequestedMipmapLevelLoaded.",1443],["If you no longer want to override the mip level you requested and instead want the system to continue to calculate mip levels, use Texture2D.ClearRequestedMipmapLevel to reset the value.",1443],["To get an estimate of the UV density on a Mesh, use the following:",1443],["float Mesh.GetUVDistributionMetric(int uvSetIndex)",1443],["You can use the UV distribution metric to calculate the mipmap level you need, based on the position of the Camera. See Mesh.GetUVDistributionMetric for example code.",1443],["To override the system and force all mips to load, use Texture.streamingTextureForceLoadAll.",1443],[" ",1443],["Debugging and profiling",1443],["To get per-texture streaming info in material properties that can be used for creating debug visualisations use Texture.SetStreamingTextureMaterialDebugProperties.",1443],["You can use Texture.SetStreamingTextureMaterialDebugProperties to assign streaming status information for each texture to material properties. You can then use these properties in the shader to create debug visualizations.",1443],["You can also use these properties to create Mipmap Streaming profiling and debugging tools for your project.",1443],["To get information about the number of Textures or renderers the Mipmap Streaming system is interacting with, use the following properties:",1443],["To get information about mipmap levels for a texture, use the following properties:",1443],["",1443],["Related Unity API methods",1443],["To get and set a Texture assigned to a Material, use:",1443],["To get all Texture properties on a Material, use:",1443],["The Mipmap Streaming system",1444],["The Mipmap Streaming system gives you control over how Unity loads mipmaps.",1444],["This page contains the following information:",1444],["For information about using the API to extend the functionality of this system, see Mipmap Streaming system API.",1444],["",1444],["Overview",1444],["This system forces Unity to only load the mip levels needed to render the current Camera position, instead of loading all of them by default. It trades a small amount of CPU resources to save a potentially large amount of GPU memory.",1444],["You can set a total memory limit for all textures in an application, and the system automatically reduces mip levels to stay within this budget.",1444],["In Unity’s Viking Village demo project, the Mipmap Streaming system saves 25-30% of texture memory, depending on Camera location.",1444],["",1444],["Getting started",1444],["",1444],["Enabling Mipmap Streaming",1444],["To enable Mipmap Streaming, go to Unity’s Quality Settings (Edit > Project Settings > Quality) and enable the Texture Streaming checkbox.",1444],["When you enable this setting, the Quality settings window reveals the settings specific to the Mipmap Streaming system. For details on each setting, see documentation on Quality Settings.",1444],["By default, this enables Mipmap Streaming for all Cameras in your project.",1444],["",1444],["Making textures work with the Mipmap Streaming system",1444],["Now you can set up Mipmap Streaming on individual textures. Select a texture asset, navigate to the Inspector window and view the Texture Import settings. Open the Advanced settings, and enable the Mip Streaming checkbox.",1444],["If you’re developing for Android, you also need to open the Build Settings and set the Compression Method to LZ4 or LZ4HC. Unity requires one of these compression methods for asynchronous Texture loading, which the Mipmap Streaming system relies upon.",1444],["Unity loads mips at the highest resolution possible while observing the memory budget. You can configure the priority of a texture with the Mip Streaming > Priority setting in the Texture Import Settings.",1444],["Unity uses this setting to determine:",1444],["Which textures to prioritize when assigning resources.",1444],["As a mip bias value when choosing a mip level that fits in the memory budget. For example, with a priority of 2, the mipmap streaming system tries to use a mipmap two mip levels higher than Textures with a priority of 0.",1444],["Positive numbers give higher priority. Valid values range from -128 to 127.",1444],["",1444],["Streaming Lightmaps",1444],["You can use the Mipmap Streaming system to stream mip levels for lightmaps.",1444],["You can edit the Mip Map Streaming settings of the lightmap assets in the same way that you can any other texture, but they reset to their default values when Unity regenerates the lightmaps. To solve this, you can tell Unity to apply these values when it generates the lightmaps. The Player Settings (Edit > Project Settings > Player) provide two controls to set streaming and priority for generated lightmaps: Lightmap Streaming Enabled and Streaming Priority.",1444],["Enabling Mip Map Streaming and configuring priority work in the same way for lightmaps as for regular textures.",1444],["",1444],["Configuring Mipmap Streaming",1444],["You can configure default settings in the Unity Editor, and then use the Mipmap Streaming API to override these settings if required.",1444],["",1444],["Setting the memory budget",1444],["The Memory Budget property determines the maximum amount of memory Unity uses for textures. If your memory budget is too small, Unity lowers the resolution of textures in your scene. This can cause textures to pop or load slowly. However, the memory budget should be as small as possible to allow memory for other resources.",1444],["Set the memory budget in the Quality Settings window, with the Texture Streaming > Memory Budget property.",1444],["When the memory budget is full, Unity discards mipmaps it’s not using, to make room for those it needs to use. You can control how many unused mipmaps it discards with the Max Level Reduction.",1444],["This value is also the mipmap level that the Mipmap Streaming system initially loads at startup. For example, when this is set to 2, Unity skips the two highest mipmaps on first load.",1444],["Set this value in the Quality Settings window, with the Texture Streaming > Max Level Reduction property.",1444],["Note:** Unity prioritises the Max Level Reduction value over the memory budget. It never discards more mipmaps than the Max Level Reduction value, even if this causes the textures memory to exceed the budget.",1444],["The memory budget includes textures that do not use Mipmap Streaming. For example, if your budget is 100MB and you have 90MB of textures that don't use Mipmap Streaming, Unity tries to fit all the streaming mipmaps in the remaining 10MB. If it can’t, it loads them at a lower resolution. Unity always loads textures that don't use Mipmap Streaming at full resolution, even if that exceeds the budget.",1444],["To figure out what your memory budget should be:",1444],["Look at the Texture.desiredTextureMemory value when your project is running.",1444],["Set the Memory Budget value slightly higher than the Texture.desiredTextureMemory value.",1444],["This makes sure there is enough texture memory available for the most resource-intensive areas of your scene and prevents textures from dropping to a lower resolution. If you have extra memory available, you can set a larger memory budget so that Unity can keep texture data that is not visible in your scene in the streaming cache.",1444],["",1444],["Configuring Cameras",1444],["By default, when you enable the Mipmap Streaming system, Unity enables it for all cameras. You can disable this setting if you like.",1444],["Control whether Unity enables mipmap Streaming for all Cameras in the Quality Settings window, with the Texture Streaming > Add All Cameras property.",1444],["If you want to exclude a specific Camera, add a Streaming Controller component to that Camera and then disable it.",1444],["If you disable Add All Cameras, then you must enable mipmap Streaming per-Camera. To do this, add a Streaming Controller component to the same GameObject as the Camera component.",1444],["This component also allows you to adjust the mip bias setting per-Camera.",1444],["",1444],["Configuring Editor streaming settings",1444],["Mipmap Streaming (also known as texture streaming) in the Editor is enabled by default, but only takes effect if you have enabled Texture Streaming in Quality Settings, and have enabled Mipmap Streaming on one or more of your texture asset’s import settings.",1444],["You can control whether Unity uses Mipmap Streaming in the Editor in both Play Mode and Edit Mode independently. To do this, go to Project Settings > Editor > Streaming Settings.",1444],["If you enable Mipmap Streaming in the Editor for one mode but not the other, entering and exiting Play mode takes slightly longer. Enabling Mipmap Streaming for both modes prevents Unity from unloading and reloading mipmap data, and increases the speed of entering and exiting Play Mode.",1444],["The \"Load texture data on demand\" setting enables further optimizations in the Editor for textures which have mip-map streaming enabled, which:",1444],["Asynchronously loads texture data to memory from disk",1444],["Only loads the mip-map levels required by current camera views",1444],["Attempts to work within the Texture Streaming Memory Budget for the current Quality setting",1444],["These optimizations avoid some stalls, make loading slightly faster, and reduce the amount of CPU memory used. However, this setting can cause mip-mapped textures to temporarily appear at a lower resolution than they should while a higher resolution version is loaded in. This feature incurs some overhead on the CPU, so you might want to leave this disabled if your textures all fit in memory at once, or you don’t have any textures set up to stream.",1444],["",1444],["Debugging Mipmap Streaming",1444],["Unity has a built-in Mipmap Streaming debugging view mode. To access it, click the Scene view control drop-down and select Texture Streaming. This view mode tints GameObjects the following colours, depending on their status in the Mipmap Streaming system:",1444],["Green for Textures that have reduced mipmaps due to the Mipmap Streaming system.",1444],["Red for Textures that have fewer mipmaps because the Mipmap Streaming system does not have enough resources to load them all.",1444],["Blue for Textures that are not set to stream, or if there is no renderer calculating the mip levels.",1444],["You can also write your own custom debug tools and visualizations using the Debugging API",1444],["Important : When the main texture is set using the MainTexture attribute, it is not visible in the game view when you use the texture streaming debugging view mode or a custom debug tool.",1444],["",1444],["How Unity calculates the required mip level",1444],["For textures that use Mipmap Streaming, Unity calculates the correct mip level using one of the following methods:",1444],["If you assign the texture to a material that is used by a Unity Renderer componennt, Unity calculates the mip level automatically.",1444],["Otherwise, you must request mip levels manually using Texture2D.requestedMipmapLevel.",1444],["If you don't do this, Unity can't calculate the correct mip level, and it loads the texture using low-quality mips. These can appear blurry.",1444],["Note:** The following systems don't use standard Renderer components. This means you must manually set the requested mips for these systems:",1444],["Decal projector textures.",1444],["Reflection probe textures: Lower resolution mips are a lookup table for roughness. Therefore, if Unity uses a lower mipmap level, it renders materials using the wrong roughness.",1444],["Shaders that use UV texture coordinates in a channel other than Mesh.uv (also called UV0), or change texture coordinates in the shader. The only exceptions are changes to scale and translation (see below).",1444],["",1444],["Limitations",1444],["Unity does not support Mipmap Streaming on Terrain textures. This is because Terrain Textures need to be available at full resolution at all times to allow Unity to tile and blend the textures.",1444],["When a Renderer component is active, its mesh requires valid UV distribution metrics to calculate the desired mip level. Unity calculates distribution metrics automatically as part of the mesh importing process.If you create a mesh from code, Unity does not calculate distribution metrics automatically and therefore it loads the wrong mip levels. To manually trigger the UV distribution metric calculation use Mesh.RecalculateUVDistributionMetrics.",1444],["When Unity renders a streamed Texture directly with an API (such as Graphics.DrawMeshNow) the system has no renderer bounds or other information to calculate the mip level. This means you need to set the Texture mip level manually or disable Mipmap Streaming on this Texture. See Texture2D.requestedMipmapLevel for more details on how to manually set which mip level Unity loads.",1444],["When Unity calculates the miplevel for a texture it looks for the scale and translation of that texture in a _ST value with the same name as the texture flagged in your shader. For example, if you reference your textures are in the shader using _MainTex, Unity will look for _MainTex_ST.",1444],["Tile Palette Preferences",1445],["To access the Tile Palette preferences settings, go to Edit > Preferences > 2D > Tile Palette (macOS: Unity > Settings > 2D > Tile Palette). Customize the default behavior and default tools to suit your preference when editing in the Tile Palette window.",1445],["Preference Function ",1445],["Target Edit Mode This sets the behavior for editing a target when a Prefab instance is selected in the Active Target list. Editing a Prefab instance in the Scene is not recommended due to performance issues. Note: This affects the Active Tilemap list in pre-2021.2 Editor versions. ",1445],["Enable Dialog Displays a dialog which allows you to choose between editing the target in Prefab Mode or in the Scene. ",1445],["Edit In Prefab Mode Select this to edit only the target Tilemap in Prefab Mode. ",1445],["Edit In Scene Select this to edit only the target Tilemap in the Scene view. ",1445],["Active Targets Sorting Mode Sets the method for sorting the Active Targets (affects Active Tilemaps in pre-2021.2 Editor versions) list in the Tile Palette. ",1445],["Alphabetical Sorts the list in alphabetical order, with the first item at the top of the list. ",1445],["ReverseAlphabetical Sorts the list in reverse alphabetical order, with the first item at the top of the list. ",1445],["Restore Edit Mode Active Target Enable this to restore the targeted Active Target (Active Tilemap in pre-2021.2 Editor versions) in the Tile Palette window after returning to Edit mode from Play mode. ",1445],["Create Tile Method Use this to specify the method by which Tile Assets are created when a Texture or a Sprite is dragged and dropped onto a Tile Palette. The default option is DefaultTile, which creates a Tile type Tile Asset. ",1445],["Show Open Tile Palette In Scene View Enable this to show the Open Tile Palette overlay in the Scene view when selecting an object that interacts with the Tile Palette. ",1445],["Prefab Mode Grid Cell Size Sets the default Cell Size when opening a Tilemap Prefab in Prefab Mode when there is no valid Grid in the Prefab. ",1445],["Prefab Mode Grid Cell Gap Sets the default Cell Gap when opening a Tilemap Prefab in Prefab Mode when there is no valid Grid in the Prefab. ",1445],["Prefab Mode Grid Cell Layout Sets the default Cell Layout when opening a Tilemap Prefab in Prefab Mode when there is no valid Grid in the Prefab. ",1445],["Prefab Mode Grid Cell Swizzle Sets the default Cell Swizzle when opening a Tilemap Prefab in Prefab Mode when there is no valid Grid in the Prefab. ",1445],["Default Tile Palette Tools This determines the list of tools which are shown in the Tile Palette window for use with Grid Brushes. The left panel stores the list of tools currently usable in the Tile Palette. The right panel stores the list of currently unused tools that can be added to the selection. To add a tool to the currently usable list, select it in the right panel and then select Add (+) to add it to the left panel. To remove a tool from the currently usable list, select it in the left panel and then select Remove (-) to remove it from the left panel. ",1445],["Save Save changes made to the Default Tile Palette Tools. ",1445],["Revert Revert changes made to the Default Tile Palette Tools. ",1445],["Reset Resets the Default Tile Palette Tools back to the system default. ",1445],["Tile Palette visual elements",1446],["The following list of items are visual elements which are used in the Tile Palette window and can be used for painting on Tilemaps.",1446],["TilePaletteToolbar",1446],["This visual element allows you to create a toolbar containing the TilemapEditorTools for painting on Tilemaps.",1446],["TilePaletteFocusDropdown",1446],["This visual element allows you to create a pop-up dropdown which can allow you to choose the Tilemap Focus mode for painting on Tilemaps. This allows you to focus on the Active Target specifically when painting on Tilemaps.",1446],["TilePaletteActivePalettePopup",1446],["This visual element allows you to create a pop-up dropdown which allows you to choose an active Tile Palette for painting on Tilemaps. The active palette can be visualized with the TilePaletteClipboardElement.",1446],["TilePaletteActiveTargetsPopup",1446],["This visual element allows you to create a pop-up dropdown which allows you to choose an Active Target for painting on Tilemaps.",1446],["TilePaletteBrushesPopup",1446],["This visual element allows you to create a pop-up dropdown which allows you to choose an active Brush for painting on Tilemaps. The properties for the active Brush can be visualized with the TilePaletteBrushInspectorElement.",1446],["TilePaletteBrushesButton",1446],["This visual element allows you to create a button which allows you to choose an active Brush for painting on Tilemaps. The properties for the active Brush can be visualized with the TilePaletteBrushInspectorElement.",1446],["TilePaletteBrushInspectorElement",1446],["This visual element displays the inspector for the active Brush for painting on Tilemaps. This allows you to change the properties of the active Brush. The inspector shown is dependent on the Editor for the active Brush.",1446],["TilePaletteElement",1446],["This visual element displays the Tile Palette Clipboard and the other visual elements used for handling the Tile Palette.",1446],["TilePaletteClipboardElement",1446],["This visual element displays the Tile Palette Clipboard by itself, showing the active Tile Palette and allows users to use the active Brush to assign and pick items for painting. Use this if you want to create a Tile Palette Clipboard and customized its various visual elements.",1446],["Creating Tilemaps",1447],["A Tilemap is a GameObject you place your selected Tiles on. Create a default (rectangular) Tilemap by going to GameObject > 2D Object > Tilemap. If you do not have these options, then the 2D Tilemap Editor package may not be installed. If so, download the 2D Tilemap Editor package from the Package Manager.",1447],["Select the 'Tilemap' option to create the default rectangular Tilemap. Refer to the respective pages for Hexagonal and Isometric Tilemaps for more information on their uses and their options.",1447],["After selecting the Tilemap option, a new Grid GameObject is created with a child Tilemap GameObject in the scene. The Grid GameObject determines the layout of its child Tilemaps.",1447],["The child Tilemap is comprised of a Tilemap component and Tilemap Renderer component. The Tilemap GameObject is where the Tiles are painted on.",1447],["Create additional Tilemaps by selecting the Grid GameObject or the Tilemap GameObject, and then go to the menu: GameObject > 2D Object > Tilemaps, or right-click on the selected GameObject and go to 2D Object > Tilemap to add another Tilemap as a child to the same parent Grid.",1447],["Once the Tilemap(s) are created, adjust the Grid property settings to adjust the properties of its Tilemap children, such as Cell Size or the type of layout of the child Tilemaps. These also affects attached components such as the Tilemap Renderer and Tilemap Collider 2D components.",1447],["Page content and screenshots updated for 2020.1 NewIn20201",1447],[" 2D Tilemap Editor is no longer included with the Editor installation and must be downloaded from Package Manager. 2019.2 NewIn20192",1447],["Tilemaps added in 2017.2 NewIn20172",1447],["Creating Tiles",1448],["There are two ways to create a Tile Asset in Unity; the first method is to directly create a Tile Asset from the Assets menu. The second method is to automatically generate Tile Assets from a selection of Sprites.",1448],["Importing and preparing Sprites for Tile Assets ",1448],["Import the individual Tiles or Tileset images for your Tilemap into your Unity Project by placing the Textures into the Assets folder. Select the imported images to view their Texture Importer settings in the Inspector window.",1448],["Sprite Importer settings.",1448],["When importing Sprites for use in a Tilemap, use the following recommended settings. For further information about each setting, refer to the documentation on Texture Type: Sprite (2D and UI).",1448],["Texture Type - Set this to Sprite (2D and UI). Other Texture types are not supported for Tilemaps.",1448],["Sprite Mode - Set this to Single if the Texture contains only a single Sprite. Set to Multiple if it contains multiple elements, for example a Tile sheet that contains multiple Tile Textures.",1448],["Set Sprite Mode to Multiple when importing a Sprite sheet.",1448],["Pixels Per Unit (PPU) - This value is the number of pixels that make up one Unity unit for the selected Sprite. This determines the size of the Tile Sprite when it is rendered on the Tilemap. It is recommended to set this value to the width(in pixels) of a single Tile Sprite so that a Tile is equal to one Unity unit in width. For both Hexagonal and Isometric Tiles, measure the width of the Sprites at their widest. The size of the Tile Sprites are also affected by the Cell Size property of the Grid parent of the Tilemap also affects the size of Tile Sprites as the Cell Size determines how many Unity units equal to a single Cell.In the example below, the imported Sprites are 64x64. The default Tilemap has a Cell Size of (XYZ: 1, 1, 0) Unity units. To make a Tile Sprite fit exactly on a single Cell of the Tilemap, set its PPU value to 64 to match its pixel width. The Sprite's entire width then corresponds to one Unity unit, which is equal to the width (X value: 1) of a single Cell on the Tilemap.",1448],["Left: Sprites set to 64 PPU. Middle: Same Sprites set to 128 PPU. Right: Sprites set to 32 PPU. By doubling the original PPU value of 64 to 128, the Sprite scales to 0.5(64px/128) Unity units in width. Halving the PPU value to 32 instead scales the Sprites to 2(64px/32) Unity units in width. The Sprites appear smaller or bigger respectively, however their Cell position on the Tilemap remains unchanged.",1448],["Sprite Editor Outlines - After the Sprites are imported, refine the outlines of the Sprites by opening each of them in the Sprite Editor and editing their outlines. If the Texture is imported with Sprite Mode set to Multiple and contains multiple Sprites, then edit the outline of each of the Sprites in the editor.",1448],["Generating Tile Assets automatically in the Tile Palette",1448],["Tiles can be automatically generated by bringing the individual Sprites or Sprite sheets of the Tiles directly into the Tile Palette window (if the window is not open, go to Window > 2D > Tile Palette).",1448],["First prepare and import the Tile Sprites, then open the 'New Palette' drop-down menu in the Tile Palette window. Select an existing Tile Palette from the list, or select 'Create New Palette' to open the Create New Palette dialog box.",1448],["The New Palette drop-down menu.",1448],["After selecting the properties of the Tile Palette (refer to the Tile Palettes documentation for more information about the different options), select Create to open the new Palette in the window.",1448],["Select 'Create' to create a new Tile Palette.",1448],["After creating or loading a Palette, drag and drop Textures or Sprites from the Assets folder directly onto the Tile Palette window. You will be prompted for the save location for the new Tile Assets. Select the save location, and the new Tile Assets are generated in the selected folder. The generated Tiles are also automatically placed onto the Palette.",1448],["Deleting Tile Assets",1448],["When you delete Tile Assets, they are replaced by placeholder Tiles made of a white square tinted with various shades of pink. The placeholder Tiles are placed on the Tilemaps in the original positions of the deleted Tile Assets.This helps to identify Tile Assets which have been deleted in a project, whether intentionally or accidentally.",1448],["Each deleted Tile Asset has a corresponding placeholder Tile with a unique shade of pink that differentiates the placeholders from each other. You can replace these placeholder Tiles with another Tile by using the Flood Fill tool or remove them.",1448],["Left: Tile Palette with three different colored Tile Assets (named after their respective colors - White, Red and Blue). Right: Tile Palette after deleting the the White and Blue Tile Assets. The Red Tile Asset has not been deleted.",1448],["Placeholder Tiles replacing deleted Tile Assets added in 2020.2 NewIn20202",1448],["Page content and screenshots updated for 2020.1 NewIn20201",1448],["Tilemaps added in 2017.2 NewIn20172",1448],["Hexagonal Tilemaps",1449],["In addition to regular Tilemaps, Unity provides both Hexagonal Point Top and Hexagonal Flat Top Tilemaps. Hexagonal tiles are often used in strategic tabletop games, because they have consistent distance between their centres and any point on their edge, and neighboring tiles always share edges. This makes them ideal for constructing almost any kind of large play area and allows players to make tactical decisions regarding movement and positioning.",1449],["The Hexagonal Tilemap uses an offset coordinate system, where alternative rows or columns are offset by half a cell when aligning the cells to the hexagonal grid. For Hexagonal Point Top Tilemaps, every odd row is offset to the right by half a cell’s width. For Hexagonal Flat Top Tilemaps, every odd column is offset to the top by half a cell’s height.",1449],["Creating a Hexagonal Tilemap",1449],["To create a Hexagonal Tilemap, follow the same steps to create a regular Tilemap (menu: GameObject > 2D Object) but choose one of the Hexagonal options in the 2D Object menu.",1449],["Select the Hexagonal Tilemap option that matches the orientation of the hexagonal Tiles you are using. The following are examples of a Hexagonal Point Top Tilemap and a Hexagonal Flat Top Tilemap.",1449],["When creating the Tile Palette for a Hexagonal Tilemap, set the Grid setting of the Tile Palette to Hexagon and select the Hexagon Type that matches the Tilemap and Tiles you are using, as shown below.",1449],["Hexagonal Tilemaps added in 2018.2 NewIn20182",1449],["Creating an Isometric Tilemap",1450],["When creating an Isometric Tilemap, there are additional steps to take compared to creating a regular Tilemap. To create an Isometric Tilemap, go to GameObject > 2D Object > Isometric Tilemap/Isometric Z as Y Tilemap.",1450],["After creating the Isometric Tilemap, there are additional settings that need to set with the Project and Grid settings for the Isometric Tilemap to be rendered properly.",1450],["Custom Axis Sorting",1450],["To render the Tiles of an Isometric Tilemap, Tiles placed further to the 'back' of the Tilemap need to be rendered first before those in front to create the pseudo-depth of an isometric perspective. To ensure that all Renderers in the Scene conform to this logic, a Custom Axis is used as the Sorting Axis. Set the Transparency Sort Mode to 'Custom Axis' and enter (0,1,0) for the XYZ values of the Transparency Sort Axis.",1450],["Go to Edit > Project Settings... > Graphics > Camera Settings to set the 'Custom Axis' settings.",1450],["Set the Transparency Sort Axis XYZ values to (0,1,0) to cause all Renderers which are at a higher Y position in the Scene to be rendered first, and appear behind Renderers at a lower Y position.",1450],["With the Isometric Z as Y Tilemap, Tiles with different Z-position values are offset along the Y-axis and appear to be at different heights, producing a 'stacking' effect with Tiles at the same XY Cell Position. By default, the generic isometric Transparency Sort Axis setting of (0,1,0) does not consider the Tile's Z-position values during sorting which results in the Tiles being rendered out of intended order (see the example below).",1450],["Set the Transparency Sort Axis to (0,1,-0.26) to correctly render Tiles with different Z positions. The Z-axis is set to -0.26 to give a bias to Tiles with higher Z positions to be drawn first.",1450],["Grid Cell Size settings",1450],["Isometric Creates an Isometric Tilemap with the default settings.",1450],["Isometric Z As Y Creates an Isometric Tilemap where a Tile’s Z-axis value is added to its Y-axis value. This causes the Tile to be visually offset along the Y-axis by that value, creating the illusion of height as the Tiles are placed on the Tilemap. ",1450],["Isometric Tilemaps use either dimetric projection or true isometric projection parallel projection angles. For more information about the two forms of projection, please refer to this article for further details.",1450],["Changing the Cell Size of the Grid component changes the size of angles that make up each Cell, which affects the type of projection being simulated. By default, Cell Size of the Isometric Cell Layout is (1, 0.5, 1) which simulates dimetric projection angles. To simulate true isometric projection angles instead, set the Y value to ‘0.57735'.",1450],["Isometric Tilemaps added in 2018.3 NewIn20183",1450],["Creating a Tile Palette for an Isometric Tilemap",1451],["To create a Tile Palette for painting an Isometric Tilemap:",1451],["Open the Tile Palette window (menu: Window > 2D > Tile Palette):",1451],["Select the Create New Palette to open its drop-down menu.",1451],["Set the Grid type to the same layout as the Isometric or Isometric Z As Y Tilemap you are painting.",1451],["Set Cell Size to Manual. Leave X and Z at their default values, but set Y to the same value as the Y value of the Tilemap's Cell Size. This value depends on the projection type of the Tilemap. Refer to the Creating an Isometric Tilemap page for more details.",1451],["Select Create to finalize your settings and create the new Tile Palette Asset.",1451],["To make any changes to the Tile Palette, double-click the Asset in the Asset Folder to open it as a Prefab and make your changes there.",1451],["Adjusting the Tile height in the Palette",1451],["When painting Tiles on an Isometric Z as Y Tilemap, define the Z position of the Grid you are painting on by setting the Z Position value. For this type of Tilemap, the Z position value translates into an offset along the Y-axis, and Tiles painted with different Z positions appear to have different heights on the Tilemap.",1451],["The Z Position editor is at the bottom of the Tilemap Palette:",1451],["Adjust the Z Position by entering the desired value (only whole numbers). Tiles are painted on a Grid with the set Z position until the value is changed or reset. To change the value back to the default of 0, select Reset .",1451],["In the Scene view, the brush preview displays both the Tile at the Cell’s original position with a Z value of 0 as a blue outline, and its painted position with the Z-as-Y offset applied is displayed with a white outline.",1451],["With the Tile brush selected, use the following shortcut keys to quickly switch to different Z positions.",1451],["Shortcut key: Command: ",1451],["\nIncrease Z position by 1 \n",1451],["= Decrease Z position by 1 ",1451],["To remove Tiles, set the Erase Brush to the same Z position as the target Tile to be removed. The Erase Brush does not erase Tiles painted on at a different Z position to it.",1451],["Isometric Tilemaps added in 2018.3 NewIn20183",1451],["Tilemap Renderer Modes",1452],["The Tilemap Renderer component renders the Tilemap in the Scene. Unity creates Tilemaps with the Tilemap Renderer attached by default. The Tilemap Renderer can:",1452],["The Render Mode affects the sorting of Tilemap Sprites when rendered.",1452],["",1452],["Rendering in batches with Chunk Mode",1452],["Chunk Mode is the default rendering mode of the Tilemap Renderer:",1452],["When set to Chunk Mode, the Tilemap Renderer handles Sprites on a Tilemap in batches and renders them together. They're treated as a single sort item when sorted in the 2D Transparent Queue. While this reduces draw calls, other renderers can't render between any part of the Tilemap, preventing other rendered Sprites from interweaving with Tilemap Sprites.",1452],["Using the Sprite Atlas for Sorting (Chunk Mode only)",1452],["In Chunk Mode, the Tilemap Renderer isn't able to sort Tiles from multiple textures individually and doesn't render the tile sprites consistently (refer to the example below).",1452],["Pack all the individual Sprites that make up the Tilemap into a single Sprite Atlas to solve this issue. To do this:",1452],["Create a Sprite Atlas from the Assets menu (go to: Atlas > Create > Sprite Atlas).",1452],["Add the Sprites to the Sprite Atlas by dragging them to the Objects for Packing list in the Atlas’ Inspector window.",1452],["Click Pack Preview. Unity packs the Sprites into the Sprite Atlas during Play mode, and correctly sorts and renders them. This is only visible in the Editor during Play mode.",1452],["",1452],["Rendering individually with Individual Mode",1452],["In Individual Mode, the Tilemap Renderer sorts and renders the Sprites on a Tilemap with consideration of other Renderers in the Scene, such as the Sprite Renderers and Mesh Renderers. Use this mode if other Renderers interact with Sprites and objects on the Tilemap.",1452],["In this mode, the Tilemap Renderer sorts sprites based on their position on the Tilemap and the sorting properties set in the Tilemap Renderer. For example, this allows a character sprite to go in-between obstacle sprites (refer to the example below).",1452],["",1452],["Using the same example in Chunk Mode, character sprites might get hidden behind ground sprites:",1452],["Using Individual Mode might reduce performance as there is more overhead when rendering each sprite individually on the Tilemap.",1452],["Custom Axis Sorting Mode for a Z as Y Tilemap in Individual Mode",1452],["To sort and render tile sprites on an Isometric Z as Y Tilemap, set the Transparency Sort Axis to a Custom Axis. To do this:",1452],["Set the Tilemap Renderer component Mode to Individual.",1452],["Navigate to Edit > Project Settings > Graphics.",1452],["Set Transparency Sort Mode to Custom Axis.",1452],["Set the Transparency Sort Axis Y-value to 1 and the Z-value to -0.26.",1452],["Refer to the page on Creating an Isometric Tilemap for more information about the Transparency Sort Axis settings.",1452],["Scriptable Brushes",1453],["The GridBrushBase class has methods that you can override to handle changes in Z position. This allows you to have custom behaviours for your customised Scriptables Brushes. These methods are:",1453],["public virtual void ChangeZPosition(int change):",1453],["Changes the Z Position of the Brush. The change argument is the amount that is changed by using the Hotkeys or the Z Position Inspector.",1453],["public virtual void ResetZPosition():",1453],["Resets the Z Position of the Brush. You define what value to reset the Z Position to.",1453],["Isometric Tilemaps added in 2018.3 NewIn20183",1453],["Importing and preparing Sprites for an Isometric Tilemap",1454],["Import the individual Tiles or Tilesheet images for your Isometric Tilemap into your Unity Project by placing the Textures into the Assets folder. Select the imported images to view their Texture Importer settings in the Inspector window.",1454],["When importing Sprites for use in an Isometric Tilemap, use the following recommended settings. For further information about each setting, refer to the documentation on Texture Type: Sprite (2D and UI).",1454],["Texture Type - Set this to Sprite (2D and UI). Other Texture types are not supported for Tilemaps.",1454],["Sprite Mode - Set this to Single if the Texture contains only a single Sprite. Set to Multiple if it contains multiple Sprite Textures, for example a Sprite sheet with multiple Tile Textures.",1454],["Pixels Per Unit (PPU) - This value is the number of pixels that make up one Unity unit for the selected Sprite. This determines the size of the Sprite when it is rendered on the Tilemap. This is also affected by the Cell Size setting of the Grid that contains the Tilemap, which determines how many Unity units make up a single Cell. Refer to the example below to see how PPU values and the Grid's Cell Size settings interact.",1454],["Mesh Type - Set to Tight to ensure the Tile Meshes follow the outline of the imported Sprites, and the Tiles are drawn flush together on the Tilemap. Due to the general diamond shape of most Isometric Tiles, setting this to Full Rect may result in drawing of wasted transparent spaces at the corners of an Isometric Tile, and is not recommended.",1454],["Generate Physics Shape - If the Tiles do not need to interact with Physics2D, then clear this option. Leave this option enabled to generate a Physics Shape based on the shape of the Tile Sprite, for use with the Tilemap Collider component. To make the generated Physics Shape match the cell of the Tilemap instead, select the Tile Asset and set its Collider Type property to Grid.",1454],["In the example below, the imported Sprite is a 256x128 image, and the Isometric Tilemap has a Cell Size of (XYZ: 1, 0.5, 1) Unity units. To make the Sprite fit exactly on a single Cell of the Tilemap, set its PPU value to 256. Its entire width then corresponds to one Unity unit, which is equal to the width (X value: 1) of a single Cell.",1454],["If the Sprite is set to a PPU value of 128, then it becomes 2 (256px/128) Unity units in width. This causes the Sprite to visually appear to cover 2 Cells in width when painted on the Tilemap. However, the original Cell position of the Tile remains unchanged.",1454],["After the Sprites are imported, refine the outlines of the Sprites by opening the Sprite Editor for each of them and editing their outlines. For Sprites in an Isometric Tilemap, you should set the Pivot of the Sprite so that the ‘ground’ is relative to the Sprite.",1454],["If the Texture is imported with Sprite Mode set to Multiple and contains multiple Sprites, then edit the outline of each Sprite in the Sprite Editor.",1454],["Isometric Tilemaps added in 2018.3 NewIn20183",1454],["Isometric Tilemaps",1455],["In addition to Hexagonal Tilemaps, Unity enables you to create Isometric Tilemaps. The isometric perspective displays all three X, Y, and Z axes, so you can add pseudo-depth and height to a Tilemap.",1455],["Isometric tilemaps are popular in strategy games, as the isometric perspective allows you to simulate 3D gameplay elements such as different elevations and line-of-sight. This lets players make tactical decisions regarding movement and positioning during gameplay.",1455],["Isometric Tilemap workflow",1455],["Import and prepare Sprites for an Isometric Tilemap.",1455],["Create an Isometric Tilemap.",1455],["Create an Isometric Tile Palette.",1455],["Adjust the Z Position Editor while painting the Tilemap.",1455],["Set the Tilemap Renderer Mode and settings.",1455],["Set up Chunk Mode sorting with Sprite Atlas.",1455],["Set the Custom Axis Sort mode.",1455],["Customize Scriptable Brushes to handle Z position changes.",1455],["Isometric Tilemaps added in 2018.3 NewIn20183",1455],["Painting on Tilemaps",1456],["The following details the steps and tools for painting Tiles on a Tilemap. However, if you are painting an Isometric Tilemap, refer to Creating a Tile Palette for an Isometric Tilemap for more specific information.",1456],["Tile Palette window",1456],["To open the Tile Palette window, go Window > 2D > Tile Palette .",1456],["The Tile Palette window.",1456],["Selecting the Active Target",1456],["To begin painting with Tiles, select the Tilemap you want to paint on from the Active Target dropdown menu in the Tilemap Palette window. Tilemaps created in the Scene’s hierarchy are automatically added to the dropdown menu. Only the currently selected Active Target is affected by the Tile Palette painting tools.",1456],["The Active Target dropdown menu (highlighted).",1456],["Hover over an option in the Active Target dropdown menu to reveal toggle options to the left of its name. Refer to the table below for their different functions.",1456],["Active Target toggle options.",1456],["Option Function ",1456],[":--: -- ",1456],[" Eye Selecting this will toggle the visibility of the target in the Scene View. ",1456],[" Ping Selecting this will ping the target in the Hierarchy Window. This will help to identify the target in that window. ",1456],["Tile Palette toolbar",1456],["Paint on the active Tilemap with the painting tools from the Tile Palette toolbar at the top of the Tile Palette window (highlighted below). These tools can also be used to edit and paint on the Tile Palette itself.",1456],["The Tile Palette toolbar.",1456],["Tile Palette tools and shortcuts",1456],["The following shows the shortcuts for each Tile Palette painting tool. Select the respective tool for more information about their specific functions.",1456],["Tool Shortcut key ",1456],[":--: -- -- ",1456],["Select Tool S ",1456],["Move Tool M ",1456],["Paintbrush Tool B ",1456],["Box Fill Tool U ",1456],["Picker Tool I ",1456],[" To temporarily switch to the **Picker Tool** when using the following Tools: \n",1456],[" **Paintbrush Tool** Ctrl+B (macOS: Cmd+B) \n",1456],[" **Box Fill Tool** Ctrl+U (macOS: Cmd+U) \n",1456],["Eraser Tool D ",1456],[" To temporarily switch to the **Eraser Tool** when using the following Tools: \n",1456],[" **Paintbrush Tool** Shift+B \n",1456],[" **Box Fill Tool** Shift+U \n",1456],["Flood Fill Tool G ",1456],["Select Tool",1456],["Use the Select Tool to select a Tile on the Active Tilemap, or hold and drag it over multiple Tiles to select more at once.",1456],["Selecting the Select Tool.",1456],["Selecting a Tile on the Tilemap with the Select Tool.",1456],["When you select a Tile(s) with the Select Tool, the selected Tile(s)' property details are shown in the Inspector window in two main property sections - the Grid Selection Properties and the Modify Tilemap properties. Refer to the Select Tool page for more information about these properties.",1456],["After selecting Tiles with the Select Tool, you can then use the Move Tool to move selected Tiles to a different position on the Tilemap.",1456],["Move Tool",1456],["Use the Move Tool to move the Select Tool’s Tile selection. Note that the Move Tool cannot select Tiles by itself. Hold and drag selected Tiles to another position on the Tilemap.",1456],["Selecting the Move Tool.",1456],["Moving Selected Tiles (highlighted in orange) with the Move Tile.",1456],["Paintbrush Tool",1456],["Use the Paintbrush Tool by first selecting a Tile in the Tilemap Palette, or hold and drag it over multiple Tiles to select more at once. Then click on any location on the Tilemap in the Scene to begin painting with your selected Tiles. Hold Shift while using the Paintbrush Tool to temporarily switch to the Erase Tool.",1456],["Selecting the Paintbrush Tool.",1456],["Selecting a Tile from the Tilemap Palette (right) and painting it onto the Tilemap (left) with the Paintbrush Tool.",1456],["To select and paint with Tiles that are already on the Tilemap instead of the Tilemap Palette, hold Ctrl as you select Tiles on the Tilemap with the Paintbrush Tool. This temporarily switches it to the Picker Tool to pick Tiles from the Tilemap directly for painting.",1456],["Box Fill Tool",1456],["Use the Box Fill Tool by first selecting a Tile in the Tilemap Palette, or hold and drag over multiple Tiles to select more at once. Then hold and drag the Box Fill Tool over the Tilemap to draw a rectangular shape which automatically fills with the selected Tile(s). Selections made with the other tools (such as the Select Tool) can also be used with the Box Fill Tool.",1456],["Selecting the Box Fill Tool.",1456],["Selecting Tiles from the Tilemap Palette (right), then painting with the Box Fill Tool (left) on the Tilemap.",1456],["Picker Tool",1456],["Use the Picker Tool to pick a Tile from the Tilemap or Tilemap palette, or hold and drag over multiple Tiles to select more at once. The active tool switches to the Paintbrush Tool once a selection is made, to allow you to immediately paint on the Tilemap with the selected Tile(s).",1456],["Selecting the Picker Tool.",1456],["Selecting Tiles on the Tilemap Palette with the Picker Tool (highlighted in light blue).",1456],["Eraser Tool",1456],["Use the Eraser Tool to erase Tiles from the Tilemap by selecting them while the tool is enabled. To erase a larger area at once, hold and drag the Eraser Tool to the desired size in the Tilemap Palette, then paint over Tiles you want to delete on the Tilemap.",1456],["Selecting the Eraser Tool.",1456],["Erase Tiles in the selection.",1456],["Flood Fill Tool",1456],["Use the Flood Fill Tool by first selecting a Tile from the Tile Palette, then use the tool to fill a contiguous area of empty cells or identical Tiles with the selected Tile. This tool can only be used with a single selected Tile, and cannot be used with a selection with multiple Tiles.",1456],["Selecting the Flood Fill Tool.",1456],["Select the Tile from the Tile Palette (left) to automatically Flood Fill the four identical Tiles in the middle of the Tilemap (right).",1456],["Active Brush inspector",1456],["The active Brush Inspector window.",1456],["The Active Brush Inspector window is found at the bottom of the Tile Palette window and is minimized by default. It allows you to change the current active Brush and its properties. Drag the bottom toolbar upwards to expand it the window.",1456],["The Active Brush dropdown menu, with Default Brush selected by default.",1456],["Use the dropdown menu to change the active Brush to the different Brushes available in your project, such as custom Scriptable Brushes.",1456],["Brush preview and other shortcuts",1456],["A preview of the picked Tile is shown at the cursor.",1456],["When painting with the active Brush on a Tilemap in the Scene view, a preview of the picked Tile(s) is shown at the cursor location. This is the Brush preview that helps you to visualize the placement of the Tiles before painting. Note that brush previews with multiple Tiles may look different when the cursor hovers over neighboring rows or columns. This is more pronounced on Hexagonal Tilemaps.",1456],["The following shortcuts allow you to change the orientation or z-position of the picked Tile, which is visually reflected in the Brush preview.",1456],["Shortcut Key Function ",1456],["-- -- ",1456],["[ Rotate the active Brush clockwise. ",1456],["] Rotate the active Brush anti-clockwise. ",1456],["Shift+[ Flip the active Brush along the x-axis. ",1456],["Shift+] Flip the active Brush along the y-axis. ",1456],["-(Only available when Lock Z Position is disabled) Increase the z-position of the active Brush. This is only available when Lock Z Position is disabled for the active Brush. ",1456],["=(Only available when Lock Z Position is disabled) Decrease the z-position of the active Brush. This is only available when Lock Z Position is disabled for the active Brush. ",1456],["Shift+B Switch to the next Brush in the Brush list ",1456],["Shift+Alt+B Switch to the previous Brush in the Brush list ",1456],["Tilemap Focus",1456],["The Tilemap Focus dropdown menu.",1456],["Use the Tilemap Focus mode to focus on a specific Tilemap or Grid GameObject by fading out other GameObjects in the Scene. This is useful when working with multiple Tilemap layers to avoid confusion and clutter. The Tilemap Focus mode will be activated on the current Active Target.",1456],["Creating a Tile Palette",1457],["Place a selection of Tiles onto Tile Palettes so that you can pick Tiles from the Palette to paint on Tilemaps. To create a Tile Palette, open the Tile Palette window by going to Window > 2D > Tile Palette. If you do not have this option, then the 2D Tilemap Editor package may not be installed. If so, download the 2D Tilemap Editor package from the Package Manager.",1457],["The Tile Palette window is empty by default. Select the New Palette drop-down menu to open a list of Tile Palettes available in the Project, or for the option to create a new Palette. Select the Create New Palette option to create a new Palette.",1457],["Select the Create New Palette option from the dropdown menu.",1457],["After selecting the option to create a new Tile Palette, the Create New Palette dialog box becomes available. It contains the different property settings and options available when creating a new Palette:",1457],["The Create New Palette options.",1457],["The expanded Grid options.",1457],["Create New Palette properties",1457],["Property Function ",1457],["",1457],["Name Provide a name for the created Tile Palette Asset. ",1457],["Grid Select the Grid layout the created Tile Palette will be used to paint on. ",1457],[" **Rectangle** Select this if creating a Palette for the default rectangular Tilemap. \n",1457],[" **Hexagon** Select this when creating a Palette for a [Hexagonal Tilemap](Tilemap-Hexagonal). \n",1457],[" **Isometric** Select this when creating a Palette for a [Isometric Tilemap](Tilemap-Isometric). Refer to [Creating a Tile Palette for an Isometric Tilemap](Tilemap-Isometric-Palette) for more information. \n",1457],["Isometric Z as Y Select this when creating a Palette for a Isometric Z as Y Tilemap. Refer to Creating a Tile Palette for an Isometric Tilemap for more information. ",1457],[" **Hexagon Type** (only available when the Hexagon Grid type is selected) Select the type of Hexagonal Tilemap that the Palette will be used to paint on. Refer to the documentation on [Hexagonal Tilemaps](Tilemap-Hexagonal) for more information. \n",1457],["Cell Size The size of a cell that the Tiles are painted on. ",1457],[" **Automatic** The Cell Size is automatically set in Unity units and based on the size of the Sprite used to create the Tile Assets. If there are multiple Tiles, the Cell Size is adjusted to match the first Tile from the bottom left of the Palette, so that it fits exactly on a cell. \n",1457],[" **Manual** Select this option to input custom size values. \n",1457],["Sort Mode Determines the transparency sort mode of Renderers in the Tile Palette. ",1457],[" **Default** The default transparency Sort Mode. This mode is determined by the **Graphics Settings** of the project. \n",1457],[" **Orthographic** Select this mode to sort Renderers based on the perpendicular distance from the camera to a Renderer in the Tile Palette. \n",1457],[" **Perspective** Select this mode to sort Renderers based on the direct distance from the camera to a Renderer in the Tile Palette. \n",1457],[" **Custom Axis Sort** Select this mode to sort objects based on their distance along a custom axis. \n",1457],["Sort Axis Set the XYZ values for the sorting axis, if the Sort Mode is set to Custom Axis Sort. ",1457],["Name the newly created Palette and select the desired settings, then select the Create button. Select the folder to save the Palette Asset file into when prompted. The newly created Palette is automatically loaded in the Tile Palette window.",1457],["A blank Tile Palette",1457],["Drag and drop Textures or Sprites from the Assets folder onto the Tile Palette, and choose where to save the new Tile Assets when prompted. New Tile Assets are generated in the selected save location, and the Tiles are placed on the grid of the active Tile Palette window.",1457],["Drag and drop directly onto the Tile Palette window.",1457],["Use the following shortcuts and actions to navigate the Palette window and begin picking Tiles to paint on the Tilemap in the Editor window.",1457],["Shortcut/Action Function ",1457],["------------------------------------------------- ---------------------- ",1457],["Click on a Tile** Selects the Tile ",1457],["Select and drag the mouse over multiple Tiles** Selects multiple Tiles ",1457],["Alt + Left button and drag** Pan ",1457],["Click the wheel button and drag** Pan ",1457],["Rotate the wheel button** Zoom in/out ",1457],["Active Brush inspector",1457],["The Active Brush inspector is at the bottom of the Tile Palette window and is minimized by default. To expand it, drag the bottom toolbar upwards. Use inspector to change the current active Brush and its properties.",1457],["Brush dropdown menu set to the Default Brush.",1457],["Use the Brush dropdown menu to change the active Brush from the Default Brush to other Brushes, such as Scriptable Brushes.",1457],["Property Function ",1457],["------------------------------ ------------------------------------------------------------ ",1457],["Script** Displays the currently assigned script Asset that provides a fixed set of APIs for painting on Tilemaps. The default is the GridBrush. Users may use or create their own Scriptable Brushes which become available from the dropdown menu. The Script property updates to reflect the current active Brush. ",1457],["Flood Fill Contiguous Only** Enable this property to have the Flood Fill tool only affect Tiles on a Tilemap which are both the same as the targeted Tile and are contiguous to each other from the targeted position. When disabled, Flood Fill will change all Tiles which are the same as the targeted Tile on a Tilemap regardless of their position. This only affects the Default Brush. ",1457],["Lock Z Position** Enable this property to change the z-position of the active Brush. Disable to prevent any changes to the current z-position of the active Brush. ",1457],["Z Position** Only available when Can Change Z Position is enabled. Enter the desired z-axis value (only whole numbers) for this Brush when painting Tiles, which also adjusts the relative heights of Tiles on a Z as Y Isometric Tilemap . Refer to Adjusting the Tile height in the Palette for more information. ",1457],["Reset** Select to reset the z-position value back to zero. ",1457],["Expand or contract the inspector with the highlighted toggle.",1457],["Editing the Tile Palette",1457],["The tools for picking and painting with Tiles can also be used to edit the Tile Palette directly, allowing you to move and manipulate the Tiles currently placed on the Tile Palette. Select the Palette you want to edit from the Palette dropdown menu (the default Palette is named 'New Palette'), then select Edit to unlock the Palette for editing.",1457],["The Tile Palette Edit toggle.",1457],["Refer to Painting on Tilemaps for the shortcuts and functions of the Palette tools, which can also be used to edit the Palette.",1457],["Creating Palette Assets from existing Grid Prefabs",1457],["You can convert an existing Prefab to a Palette Asset, so that you can use it in the Tile Palette window. To do this, the Prefab must not already be a Palette Asset, and it must have a Grid component on its topmost GameObject.",1457],["The Tile Palette toolbar",1457],["To convert a Prefab, drag and drop it onto the Tile Palette toolbar (highlighted in the image above). The Editor automatically converts it to a Palette Asset, and adds a Grid Palette Asset. The new Palette Asset has the same name as its source, and it becomes available in the Palette dropdown menu.",1457],["Tile Palette Grid visibility toggle",1457],["The Tile Palette Grid toggle.",1457],["Switch the visibility of the Grid on the Tile Palette on or off by selecting the toggle highlighted above.",1457],["Tile Palette Gizmos visibility toggle",1457],["The Tile Palette can display Gizmos over the currently selected Palette Asset, to help you visualize specific criteria. For example, you can add a Gizmo that displays a special icon for Tiles that contain no Sprites.",1457],["The Tile Palette Gizmos toggle.",1457],["To display the default Unity and the Palette Asset’s Gizmos on the Tile Palette, enable the Gizmos toggle (highlighted above). The Tile Palette immediately displays any component with MonoBehaviour.OnDrawGizmos() in the Palette Asset.",1457],["To add your own custom gizmos to a Palette Asset, add a component with DrawGizmo to the Palette Asset:",1457],["Select the Palette Asset in the Project window.",1457],["Open the Palette Asset in Prefab Mode.",1457],["Add the component while in Prefab Mode.",1457],["Save the Asset while in Prefab Mode.",1457],["Exit Prefab Mode.",1457],["Tile Palette contextual menu",1457],["The expanded context menu.",1457],["Right-click on the Tile Palette toolbar to bring up a contextual menu listing several actions you can use to select and locate objects that the Tile Palette interacts with. The available actions are:",1457],["Action Function ",1457],["------------------------------- ------------------------------------------------------------ ---- ",1457],["Select Paint Target** Selects the GameObject in the Hierarchy window that is the current target of the Active Tilemap in the Tile Palette. ",1457],["Select Palette Prefab** Selects the currently active Palette Prefab Asset in the Project window. ",1457],["Select Tile Asset** Selects the currently selected Tile Asset in the Project window. ",1457],["Unlock/Lock Palette Editing** Unlocks or locks the Tile Palette for editing. ",1457],["Open Window as** The style of window. ",1457],[" **Dockable** Opens the window as a dockable window, which can be docked in the Editor. \n",1457],[" **Floating** Opens the window as a floating window, which displays on top of the Editor. \n",1457],["Scriptable Brush example",1458],["LineBrush provides the ability to easily draw lines of Tiles onto the Tilemap by specifying the start point and the end point. The Paint method for the LineBrush is overridden to allow the user to specify the start of a line with the first mouse click in Paint mode and draw the line with the second mouse click in Paint mode. The OnPaintSceneGUI method is overridden to produce the preview of the line to be drawn between the first and second mouse clicks. The following is a script used to create the Brush.",1458],["using System;",1458],["using System.Collections;",1458],["using System.Collections.Generic;",1458],["using UnityEngine;",1458],["using UnityEngine.Tilemaps;",1458],["namespace UnityEditor.Tilemaps",1458],["[CustomGridBrush(true, false, false, \"Line Brush\")]",1458],["public class LineBrush : GridBrush {",1458],["public bool lineStartActive = false;",1458],["public Vector3Int lineStart = Vector3Int.zero;",1458],["public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)",1458],["if (lineStartActive)",1458],["Vector2Int startPos = new Vector2Int(lineStart.x, lineStart.y);",1458],["Vector2Int endPos = new Vector2Int(position.x, position.y);",1458],["if (startPos == endPos)",1458],["base.Paint(grid, brushTarget, position);",1458],["else",1458],["foreach (var point in GetPointsOnLine(startPos, endPos))",1458],["Vector3Int paintPos = new Vector3Int(point.x, point.y, position.z);",1458],["base.Paint(grid, brushTarget, paintPos);",1458],["lineStartActive = false;",1458],["else",1458],["lineStart = position;",1458],["lineStartActive = true;",1458],["[MenuItem(\"Assets/Create/Line Brush\")]",1458],["public static void CreateBrush()",1458],["string path = EditorUtility.SaveFilePanelInProject(\"Save Line Brush\", \"New Line Brush\", \"Asset\", \"Save Line Brush\", \"Assets\");",1458],["if (path == \"\")",1458],["return;",1458],["AssetDatabase.CreateAsset(ScriptableObject.CreateInstance(), path);",1458],["// http://ericw.ca/notes/bresenhams-line-algorithm-in-csharp.html",1458],["public static IEnumerable GetPointsOnLine(Vector2Int p1, Vector2Int p2)",1458],["int x0 = p1.x;",1458],["int y0 = p1.y;",1458],["int x1 = p2.x;",1458],["int y1 = p2.y;",1458],["bool steep = Math.Abs(y1 - y0) > Math.Abs(x1 - x0);",1458],["if (steep)",1458],["int t;",1458],["t = x0; // swap x0 and y0",1458],["x0 = y0;",1458],["y0 = t;",1458],["t = x1; // swap x1 and y1",1458],["x1 = y1;",1458],["y1 = t;",1458],["if (x0 > x1)",1458],["int t;",1458],["t = x0; // swap x0 and x1",1458],["x0 = x1;",1458],["x1 = t;",1458],["t = y0; // swap y0 and y1",1458],["y0 = y1;",1458],["y1 = t;",1458],["int dx = x1 - x0;",1458],["int dy = Math.Abs(y1 - y0);",1458],["int error = dx / 2;",1458],["int ystep = (y0 < y1) ? 1 : -1;",1458],["int y = y0;",1458],["for (int x = x0; x <= x1; x++)",1458],["yield return new Vector2Int((steep ? y : x), (steep ? x : y));",1458],["error = error - dy;",1458],["if (error < 0)",1458],["y += ystep;",1458],["error += dx;",1458],["yield break;",1458],["[CustomEditor(typeof(LineBrush))]",1458],["public class LineBrushEditor : GridBrushEditor",1458],["private LineBrush lineBrush { get { return target as LineBrush; } }",1458],["public override void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)",1458],["base.OnPaintSceneGUI(grid, brushTarget, position, tool, executing);",1458],["if (lineBrush.lineStartActive)",1458],["Tilemap tilemap = brushTarget.GetComponent();",1458],["if (tilemap != null)",1458],["tilemap.ClearAllEditorPreviewTiles();",1458],["// Draw preview tiles for tilemap",1458],["Vector2Int startPos = new Vector2Int(lineBrush.lineStart.x, lineBrush.lineStart.y);",1458],["Vector2Int endPos = new Vector2Int(position.x, position.y);",1458],["if (startPos == endPos)",1458],["PaintPreview(grid, brushTarget, position.min);",1458],["else",1458],["foreach (var point in LineBrush.GetPointsOnLine(startPos, endPos))",1458],["Vector3Int paintPos = new Vector3Int(point.x, point.y, position.z);",1458],["PaintPreview(grid, brushTarget, paintPos);",1458],["if (Event.current.type == EventType.Repaint)",1458],["var min = lineBrush.lineStart;",1458],["var max = lineBrush.lineStart + position.size;",1458],["// Draws a box on the picked starting position",1458],["GL.PushMatrix();",1458],["GL.MultMatrix(GUI.matrix);",1458],["GL.Begin(GL.LINES);",1458],["Handles.color = Color.blue;",1458],["Handles.DrawLine(new Vector3(min.x, min.y, min.z), new Vector3(max.x, min.y, min.z));",1458],["Handles.DrawLine(new Vector3(max.x, min.y, min.z), new Vector3(max.x, max.y, min.z));",1458],["Handles.DrawLine(new Vector3(max.x, max.y, min.z), new Vector3(min.x, max.y, min.z));",1458],["Handles.DrawLine(new Vector3(min.x, max.y, min.z), new Vector3(min.x, min.y, min.z));",1458],["GL.End();",1458],["GL.PopMatrix();",1458],["2017-09-06 ",1458],["GridBrushBase",1459],["All brushes added must inherit from GridBrushBase. GridBrushBase provides a fixed set of APIs for painting.",1459],["public virtual void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)",1459],["Paint adds data onto the target GameObject brushTarget with the GridLayout grid at the given position. This is triggered when the Brush is activated on the grid and the Paint Tool is selected on the Palette window. Override this to implement the action desired on painting.",1459],["public virtual void Erase(GridLayout grid, GameObject brushTarget, Vector3Int position)",1459],["Erase removes data onto the target GameObject brushTarget with the GridLayout grid at the given position. This is triggered when the Brush is activated on the grid and the Erase Tool is selected on the Palette window. Override this to implement the action desired on erasing.",1459],["public virtual void BoxFill(GridLayout grid, GameObject brushTarget, BoundsInt position)",1459],["BoxFill adds data onto the target GameObject brushTarget with the GridLayout grid onto the given bounds. This is triggered when the Brush is activated on the grid and the Box Fill Tool is selected on the Palette window. Override this to implement the action desired on filling.",1459],["public virtual void FloodFill(GridLayout grid, GameObject brushTarget, Vector3Int position)",1459],["FloodFill adds data onto the target GameObject brushTarget with the GridLayout grid starting at the given position and filling all other possible areas linked to the position. This is triggered when the Brush is activated on the grid and the Flood Fill Tool is selected on the Palette window. Override this to implement the action desired on filling.",1459],["public virtual void Rotate(RotationDirection direction)",1459],["Rotate rotates the content in the brush with the given direction based on the currently set pivot.",1459],["public virtual void Flip(FlipAxis flip)",1459],["Flip flips the content of the brush with the given axis based on the currently set pivot.",1459],["public virtual void Select(GridLayout grid, GameObject brushTarget, BoundsInt position)",1459],["Select marks a boundary on the target GameObject brushTarget with the GridLayout grid from the given bounds. This allows you to view information based on the selected boundary and move the selection with the Move Tool. This is triggered when the Brush is activated on the grid and the Select tool is selected on the Palette window. Override this to implement the action desired when selecting from a target.",1459],["public virtual void Pick(GridLayout grid, GameObject brushTarget, BoundsInt position, Vector3Int pivot)",1459],["Pick pulls data from the target GameObject brushTarget with the GridLayout grid from the given bounds and pivot position, and fills the brush with that data. This is triggered when the Brush is activated on the grid and the Pick Tool is selected on the Palette window. Override this to implement the action desired when picking from a target.",1459],["public virtual void Move(GridLayout grid, GameObject brushTarget, BoundsInt from, BoundsInt to)",1459],["Move marks the movement from the target GameObject brushTarget with the GridLayout grid from the given starting position to the given ending position. Override this to implement the action desired when moving from a target. This is triggered when the Brush is activated on the grid and the Move Tool is selected on the Palette window and the Move is performed (MouseDrag). Generally, this would be any behaviour while a Move operation from the brush is being performed.",1459],["public virtual void MoveStart(GridLayout grid, GameObject brushTarget, BoundsInt position)",1459],["MoveStart marks the start of a move from the target GameObject brushTarget with the GridLayout grid from the given bounds. This is triggered when the Brush is activated on the grid and the Move Tool is selected on the Palette window and the Move is first triggered (MouseDown). Override this to implement the action desired when starting a move from a target. Generally, this would be picking of data from the target with the given start position.",1459],["public virtual void MoveEnd(GridLayout grid, GameObject brushTarget, BoundsInt position)",1459],["MoveEnd marks the end of a move from the target GameObject brushTarget with the GridLayout grid from the given bounds. This is triggered when the Brush is activated on the grid and the Move Tool is selected on the Palette window and the Move is completed (MouseUp). Override this to implement the action desired when ending a move from a target. Generally, this would be painting of data to the target with the given end position.",1459],["2017-09-06 ",1459],["GridBrushEditorBase",1460],["All brush editors added must inherit from GridBrushEditorBase. GridBrushEditorBase provides a fixed set of APIs for drawing of inspectors on the Palette window and drawing of Gizmos on the Scene View.",1460],["public virtual GameObject[] validTargets",1460],["This returns a list of GameObjects which are valid targets to be painted on by the brush. This appears in the dropdown in the Palette window. Override this to have a custom list of targets which this Brush can interact with.",1460],["public virtual void OnPaintInspectorGUI()",1460],["This displays an inspector for editing Brush options in the Palette. Use this to update brush functionality while editing in the Scene view.",1460],["public virtual void OnSelectionInspectorGUI()",1460],["This displays an inspector for when cells are selected on a target Grid. Override this to show a custom inspector view for the selected cells.",1460],["public virtual void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)",1460],["This is used for drawing additional gizmos on the Scene View when painting with the brush. Tool is the currently selected tool in the Palette. Executing returns whether the brush is being used at the particular time.",1460],["2017-09-06 ",1460],["Other useful classes",1461],["GridBrushBase.Tool",1461],["Select = 0 - Tool for Selection for a GridBrush",1461],["Move = 1- Tool for Moving for a GridBrush",1461],["Paint = 2 - Tool for Painting for a GridBrush",1461],["Box = 3 - Tool for Boxfill for a GridBrush",1461],["Pick = 4 - Tool for Picking for a GridBrush",1461],["Erase = 5 - Tool for Erasing for a GridBrush",1461],["Floodfill = 6 - Tool for Floodfill for a GridBrush",1461],["GridBrushBase.RotationDirection",1461],["Clockwise = 0 - Clockwise rotation direction. Use this when rotating a Brush.",1461],["CounterClockwise = 1 - Counter clockwise rotation direction. Use this when rotating a Brush.",1461],["GridBrushBase.FlipAxis",1461],["X = 0 - Flips along the X Axis. Use this when flipping a Brush.",1461],["Y = 1 - Flips along the Y Axis. Use this when flipping a Brush.",1461],["2017-09-06 ",1461],["TilemapEditorTool",1462],["The TilemapEditorTool is an inheritable class that defines editor tools for the Tile Palette window. To create a new editor tool for the Tile Palette window, create a new class inheriting from TilemapEditorTool. Override any required methods for your new TilemapEditorToolclass.",1462],["You can override the following methods from TilemapEditorTool:",1462],["protected abstract string tooltipStringFormat { get; }",1462],["Define this to show the tooltip for your TilemapEditorTool. The shortcut for your TilemapEditorToolwill be passed in to this and formatted for the final tooltip.",1462],["protected abstract string shortcutId { get; }",1462],["Define this to assign a Shortcut Id for identifying your keyboard shortcut for your tool.",1462],["public virtual GUIContent toolbarIcon { get; }",1462],["Define this to show the icon for your TilemapEditorTool. If this is not defined, the toolbar displays the Tool Mode icon.",1462],["public virtual bool HandleTool(bool isHotControl, GridLayout gridLayout, GameObject brushTarget, Vector3Int gridMousePosition)",1462],["Override this to determine any custom behavior for handling your TilemapEditorTool. The following parameters are passed into the method for additional information:",1462],["Name Function",1462],["",1462],["isHotControl** Whether the tool is a hot control under UnityGUI (refer to GUIUtility.hotControl for more information).",1462],["gridLayout** The GridLayout being handled by the Tool.",1462],["brushTarget** The GameObject being handled by the Tool.",1462],["gridMousePosition** The Grid Cell position where the mouse cursor currently is.",1462],["public override bool IsAvailable()",1462],["Whether your TilemapEditorToolcan be activated at the current time. Use this to validate whether the prerequisites for activating your TilemapEditorToolare available.",1462],["The custom TilemapEditorToolcan be added as a default tool in the Tile Palette using the Tile Palette Preferences or as a tool for specific Grid Brushes when your GridBrushhas a BrushToolattribute with the type of your custom TilemapEditorTool.",1462],["TilemapEditorTool page added in 2021.2 .",1462],["Scriptable Brushes",1463],["Creating Scriptable Brushes",1463],["Create a new class inheriting from GridBrushBase (or any useful subclasses of GridBrushBase like GridBrush). Override any required methods for your new Brush class. The following are the usual methods you would override:",1463],["Paint allows the Brush to add items onto the target Grid.",1463],["Erase allows the Brush to remove items from the target Grid.",1463],["FloodFill allows the Brush to fill items onto the target Grid.",1463],["Rotate rotates the items set in the Brush.",1463],["Flip flips the items set in the Brush.",1463],["Create instances of your new class using ScriptableObject.CreateInstance<(Your Brush Class>(). You may convert this new instance to an Asset in the Editor in order to use it repeatedly by calling AssetDatabase.CreateAsset().",1463],["You can also make a custom editor for your brush. This works the same way as custom editors for scriptable objects. The following are the main methods you would want to override when creating a custom editor:",1463],["You can override OnPaintInspectorGUI to have an Inspector window appear on the Palette when the Brush is selected to provide additional behaviour when painting.",1463],["You can also override OnPaintSceneGUI to add additional behaviours when painting on the SceneView.",1463],["You can also override validTargets to have a custom list of targets which the Brush can interact with. This list of targets is shown as a dropdown list in the Palette window.",1463],["When created, the Scriptable Brush is listed in the Brushes dropdown menu in the Palette window. By default, an instance of the Scriptable Brush script is instantiated and stored in the Library folder of your project. Any modifications to the brush properties are stored in that instance. If you want to have multiple copies of that Brush with different properties, you can instantiate the Brush as Assets in your project. These Brush Assets are listed separately in the Brush dropdown menu.",1463],["You can add a CustomGridBrush attribute to your Scriptable Brush class. This allows you to configure the behavior of the Brush in the Palette window. The CustomGridBrush attribute has the following properties:",1463],["HideAssetInstances - Set this to true to hide all copies of created Brush Assets in the Palette window. This is useful when you want only the default instance to show up in the Brush dropdown menu in the Tile Palette window.",1463],["HideDefaultInstances - Set this to true to hide the default instance of the Brush in the Palette window. This is useful when you want only created Assets to show up in the Brush dropdown menu in the Tile Palette window.",1463],["DefaultBrush - Set this to true to set the default instance of the Brush as the default Brush in the project. This makes this Brush the default selected Brush whenever the project starts. Note: Only set one Scriptable Brush as the Default Brush. Setting more than one Default Brush may cause your Scriptable Brushes to behave incorrectly.",1463],["DefaultName - Set a name to this to have the Brush dropdown menu use the set name as the name for the Brush instead of the name of the Brush’s class.",1463],["If you want your Scriptable Brush class to use only certain tools, you can add a BrushTools attribute to your class with a list of compatible TilemapEditorTools types. This ensures that your Scriptable Brush only activates with these specific tools from the Tile Palette toolbar.",1463],["Note:** Remember to save your project to ensure that your new Brush Assets are saved!",1463],["Scriptable Tile example",1464],["The RoadTile example provides the ability to easily layout linear segments onto the Tilemap, such as roads or pipes, with a minimal set of sprites. The following is a script used to create the Tile.",1464],["using UnityEngine;",1464],["using UnityEngine.Tilemaps;",1464],["using System.Collections;",1464],["if UNITY_EDITOR",1464],["using UnityEditor;",1464],["endif",1464],["public class RoadTile : Tile",1464],["public Sprite[] m_Sprites;",1464],["public Sprite m_Preview;",1464],["// This refreshes itself and other RoadTiles that are orthogonally and diagonally adjacent",1464],["public override void RefreshTile(Vector3Int location, ITilemap tilemap)",1464],["for (int yd = -1; yd <= 1; yd++)",1464],["for (int xd = -1; xd <= 1; xd++)",1464],["Vector3Int position = new Vector3Int(location.x + xd, location.y + yd, location.z);",1464],["if (HasRoadTile(tilemap, position))",1464],["tilemap.RefreshTile(position);",1464],["// This determines which sprite is used based on the RoadTiles that are adjacent to it and rotates it to fit the other tiles.",1464],["// As the rotation is determined by the RoadTile, the TileFlags.OverrideTransform is set for the tile.",1464],["public override void GetTileData(Vector3Int location, ITilemap tilemap, ref TileData tileData)",1464],["int mask = HasRoadTile(tilemap, location + new Vector3Int(0, 1, 0)) ? 1 : 0;",1464],["mask += HasRoadTile(tilemap, location + new Vector3Int(1, 0, 0)) ? 2 : 0;",1464],["mask += HasRoadTile(tilemap, location + new Vector3Int(0, -1, 0)) ? 4 : 0;",1464],["mask += HasRoadTile(tilemap, location + new Vector3Int(-1, 0, 0)) ? 8 : 0;",1464],["int index = GetIndex((byte)mask);",1464],["if (index >= 0 && index < m_Sprites.Length)",1464],["tileData.sprite = m_Sprites[index];",1464],["tileData.color = Color.white;",1464],["var m = tileData.transform;",1464],["m.SetTRS(Vector3.zero, GetRotation((byte) mask), Vector3.one);",1464],["tileData.transform = m;",1464],["tileData.flags = TileFlags.LockTransform;",1464],["tileData.colliderType = ColliderType.None;",1464],["else",1464],["Debug.LogWarning(\"Not enough sprites in RoadTile instance\");",1464],["// This determines if the Tile at the position is the same RoadTile.",1464],["private bool HasRoadTile(ITilemap tilemap, Vector3Int position)",1464],["return tilemap.GetTile(position) == this;",1464],["// The following determines which sprite to use based on the number of adjacent RoadTiles",1464],["private int GetIndex(byte mask)",1464],["switch (mask)",1464],["case 0: return 0;",1464],["case 3:",1464],["case 6:",1464],["case 9:",1464],["case 12: return 1;",1464],["case 1:",1464],["case 2:",1464],["case 4:",1464],["case 5:",1464],["case 10:",1464],["case 8: return 2;",1464],["case 7:",1464],["case 11:",1464],["case 13:",1464],["case 14: return 3;",1464],["case 15: return 4;",1464],["return -1;",1464],["// The following determines which rotation to use based on the positions of adjacent RoadTiles",1464],["private Quaternion GetRotation(byte mask)",1464],["switch (mask)",1464],["case 9:",1464],["case 10:",1464],["case 7:",1464],["case 2:",1464],["case 8:",1464],["return Quaternion.Euler(0f, 0f, -90f);",1464],["case 3:",1464],["case 14:",1464],["return Quaternion.Euler(0f, 0f, -180f);",1464],["case 6:",1464],["case 13:",1464],["return Quaternion.Euler(0f, 0f, -270f);",1464],["return Quaternion.Euler(0f, 0f, 0f);",1464],["if UNITY_EDITOR",1464],["// The following is a helper that adds a menu item to create a RoadTile Asset",1464],["[MenuItem(\"Assets/Create/RoadTile\")]",1464],["public static void CreateRoadTile()",1464],["string path = EditorUtility.SaveFilePanelInProject(\"Save Road Tile\", \"New Road Tile\", \"Asset\", \"Save Road Tile\", \"Assets\");",1464],["if (path == \"\")",1464],["return;",1464],["AssetDatabase.CreateAsset(ScriptableObject.CreateInstance(), path);",1464],["endif",1464],["2017-09-06 ",1464],["Other useful classes",1465],["TileFlags",1465],["None = 0",1465],["No flags are set for the Tile. This is the default for most Tiles.",1465],["LockColor = 1 << 0",1465],["Set this flag if the Tile script controls the color of the Tile. If this is set, the Tile controls the color as it is placed onto the Tilemap. You cannot change the Tile’s color through painting or using scripts. If this is not set, you can change the Tile’s color through painting or using scripts.",1465],["LockTransform = 1 << 1",1465],["Set this flag if the Tile script controls the transform of the Tile. If this is set, the Tile controls the transform as it is placed onto the Tilemap. You cannot rotate or change the Tile’s transform through painting or using scripts. If this is not set, you can change the Tile’s transform through painting or using scripts.",1465],["LockAll = LockColor LockTransform",1465],["This is a combination of all the lock flags used by TileBase.",1465],["InstantiateSpawnGameObjectRuntimeOnly = 1 << 2",1465],["Set this flag if the Tile script should spawn its game object only when your project is running and not in Editor mode.",1465],["Tile.ColliderType",1465],["None = 0",1465],["This Tile does not generate a collider shape.",1465],["Sprite = 1",1465],["The collider shape generated by this Tile is the physics shape set by the Sprite that the Tile returns. If no physics shape has been set in the Sprite, it tries to generate a shape based on the outline of the Sprite.",1465],["Note: If a collider shape for a Tile needs to be generated in runtime, set a physics shape for the Sprite or set the Texture of the Sprite to be readable in order for Unity to generate a shape based on the outline.",1465],["Grid = 2",1465],["The collider shape generated by this Tile is the shape of the cell, defined by the layout of the Grid.",1465],["ITilemap",1465],["ITilemap is the base class where Tile can retrieve data from the Tilemap when the Tilemap tries to retrieve data from the Tile.",1465],["Vector3Int origin { get; }",1465],["This returns the origin point of the Tilemap in cellspace.",1465],["Vector3Int size { get; }",1465],["This returns the size of the Tilemap in cellspace.",1465],["Bounds localBounds { get; }",1465],["This returns the bounds of the Tilemap in localspace.",1465],["BoundsInt cellBounds { get; }",1465],["This returns the bounds of the Tilemap in cellspace.",1465],["Sprite GetSprite(Vector3Int location);",1465],["This returns the sprite used by the Tile in the Tilemap at the given location.",1465],["Color GetColor(Vector3Int location);",1465],["This returns the color used by the Tile in the Tilemap at the given location.",1465],["Matrix4x4 GetTransformMatrix(Vector3Int location);",1465],["This returns the transform matrix used by the Tile in the Tilemap at the given location.",1465],["TileFlags GetTileFlags(Vector3Int location);",1465],["This returns the tile flags used by the Tile in the Tilemap at the given location.",1465],["TileBase GetTile(Vector3Int location);",1465],["This returns the Tile in the Tilemap at the given location. If there is no Tile there, it returns null.",1465],["T GetTile(Vector3Int location) where T : TileBase;",1465],["This returns the Tile in the Tilemap at the given location with type T. If there is no Tile with the matching type there, it returns null.",1465],["void RefreshTile(Vector3Int location);",1465],["This requests a refresh of the Tile in the Tilemap at the given location.",1465],["T GetComponent();",1465],["This returns the component T that is attached to the GameObject of the Tilemap.",1465],["2017-09-06 ",1465],["Tile",1466],["The Tile class is a simple class that allows a sprite to be rendered on the Tilemap. Tile inherits from TileBase. The following is a description of the methods that are overridden to have the Tile’s behaviour.",1466],["public Sprite sprite;",1466],["public Color color = Color.white;",1466],["public Matrix4x4 transform = Matrix4x4.identity;",1466],["public GameObject gameobject = null;",1466],["public TileFlags flags = TileFlags.LockColor;",1466],["public ColliderType colliderType = ColliderType.Sprite;",1466],["These are the default properties of a Tile. If the Tile was created by dragging and dropping a Sprite onto the Tilemap Palette, the Tile would have the Sprite property set as the sprite that was dropped in. You may adjust the properties of the Tile instance to get the Tile required.",1466],["public void RefreshTile(Vector3Int location, ITilemap tilemap)",1466],["This is not overridden from TileBase. By default, it only refreshes the Tile at that location.",1466],["public override void GetTileData(Vector3Int location, ITilemap tilemap, ref TileData tileData)",1466],["tileData.sprite = this.sprite;",1466],["tileData.color = this.color;",1466],["tileData.transform = this.transform;",1466],["tileData.gameObject = this.gameObject;",1466],["tileData.flags = this.flags;",1466],["tileData.colliderType = this.colliderType;",1466],["This fills in the required information for Tilemap to render the Tile by copying the properties of the Tile instance into tileData.",1466],["public bool GetTileAnimationData(Vector3Int location, ITilemap tilemap, ref TileAnimationData tileAnimationData)",1466],["This is not overridden from TileBase. By default, the Tile class does not run any Tile animation and returns false.",1466],["public bool StartUp(Vector3Int location, ITilemap tilemap, GameObject go)",1466],["This is not overridden from TileBase. By default, the Tile class does not have any special start up functionality. If tileData.gameObject is set, the Tilemap still instantiates it on start up and place it at the location of the Tile.",1466],["2017-09-06 ",1466],["TileAnimationData",1467],["public Sprite[] animatedSprites",1467],["This is an array of sprites for the Tile animation. The Tile is animated by these sprites in sequential order.",1467],["public float animationSpeed",1467],["This is the speed where the Tile animation is run. This is combined with the Tilemap’s animation speed for the actual speed.",1467],["public float animationTimeOffset",1467],["This allows you to start the animation at a different time frame.",1467],["2017-09-06 ",1467],["TileBase",1468],["All tiles to be added to the Tilemap must inherit from TileBase. TileBase provides a fixed set of APIs to the Tilemap to communicate its rendering properties. For most cases of the APIs, the location of the Tile and the instance of the Tilemap the Tile is placed on is passed in as arguments of the API. You may use this to determine any required attributes for setting the tile information.",1468],["public void RefreshTile(Vector3Int location, ITilemap tilemap)",1468],["RefreshTile determines which Tiles in the vicinity are updated as this Tile is added to the Tilemap. By default, the TileBase calls tilemap.RefreshTile(location) to refresh the tile at the current location. Override this to determine which Tiles need to be refreshed due to the placement of the new Tile.",1468],["Example:** There is a straight road, and you place a RoadTile next to it. The straight road isn’t valid anymore. It needs a T-section instead. Unity doesn’t automatically know what needs to be refreshed, so RoadTile needs to trigger the refresh onto itself, but also onto the neighboring road.",1468],["public bool GetTileData(Vector3Int location, ITilemap tilemap, ref TileData tileData)",1468],["GetTileData determines what the Tile looks like on the Tilemap. See TileData below for more details.",1468],["public bool GetTileAnimationData(Vector3Int location, ITilemap tilemap, ref TileAnimationData tileAnimationData)",1468],["GetTileAnimationData determines whether or not the Tile is animated. Return true if there is an animation for the Tile, other returns false if there is not.",1468],["public bool StartUp(Vector3Int location, ITilemap tilemap, GameObject go)",1468],["StartUp is called for each tile when the Tilemap updates for the first time. You can run any start up logic for Tiles on the Tilemap if necessary. The argument go is the instanced version of the object passed in as gameobject when GetTileData was called. You may update go as necessary as well.",1468],["2017-09-06 ",1468],["TileData",1469],["public Sprite sprite",1469],["This is the sprite that is rendered for the Tile.",1469],["public Color color",1469],["This is the color that tints the sprite used for the Tile.",1469],["public Matrix4x4 transform",1469],["This is the transform matrix used to determine the final location of the Tile. Modify this to add rotations or scaling to the tile.",1469],["public GameObject gameobject",1469],["This is the GameObject that is instanced when the Tile is added to the Tilemap.",1469],["public TileFlags flags",1469],["These are the flags which controls the Tile’s behaviour. Refer to Other useful classes for more details.",1469],["public Tile.ColliderType colliderType",1469],["This controls the collider shape generated by the Tile for an attached Tilemap Collider 2D component. See documentation on Tile.ColliderType for more details.",1469],["2017-09-06 ",1469],["Scriptable Tiles",1470],["Creating Scriptable Tiles",1470],["Create a new class inheriting from TileBase (or any useful sub-classes of TileBase, like Tile). Override any required methods for your new Tile class. The following are the usual methods you would override:",1470],["RefreshTile determines which Tiles in the vicinity are updated when this Tile is added to the Tilemap.",1470],["GetTileData determines what the Tile looks like on the Tilemap.",1470],["Create instances of your new class using ScriptableObject.CreateInstance<YOUR_TILE_CLASS>(). You may convert this new instance to an Asset in the Editor in order to use it repeatedly by calling AssetDatabase.CreateAsset().",1470],["You can also make a custom editor for your Tile. This works the same way as custom editors for scriptable objects.",1470],["Remember to save your project to ensure that your new Tile Assets are saved!",1470],["2017-09-06 ",1470],["Tile asset reference",1471],["Tiles** are Assets that are arranged on Tilemaps to construct a 2D environment. Each Tile references a selected Sprite, which is then rendered at the Tile's location on the Tilemap Grid. Refer to Creating Tiles for more information about preparing and importing sprites for your Tiles, and the different methods for creating the Assets in the Editor.",1471],["Asset properties",1471],["Property Function ",1471],[":----------------------------- :----------------------------------------------------------- ",1471],["Preview Displays a visual preview of the selected Tile. ",1471],["Sprite Select the Sprite to be rendered on this Tile. Click the circle icon to the right to open the object picker window to select from the available Sprite Assets, or drag a Sprite directly onto this box. ",1471],["Color Tints the Sprite placed on this Tile with the selected Color. When set to white, the Sprite is rendered without a tint. ",1471],["Collider Type Defines the shape of the Collider generated for the Tile. ",1471],["    None No Collider is generated. ",1471],["    Sprite The Collider shape is generated based on the selected Sprite's outline. ",1471],["    Grid The Collider shape is based on a cell of the Tilemap. The shape of a cell depends on the Cell Layout of the Tilemap. ",1471],["Collider Type's effect on Collider generation",1471],["The Collider Type set in the Tile Asset's properties affects the generation of Collider shapes for each Tile in the Tilemap. The component's shape generation behavior corresponds to the Collider Types in the following ways:",1471],["Collider Type Function ",1471],["------------- ------------------------------------------------------------ ",1471],["None The Tilemap Collider 2D component does not generate any Collider shapes for this Tile. ",1471],["Sprite The Tilemap Collider 2D component generates a Collider shape based on the Sprite assigned to the Tile. The Collider shape is based on the Custom Physics Shape set for the Sprite. ",1471],["Grid The Tilemap Collider 2D component generates a Collider shape based on the shape of the Grid cell, which is determined by the selected Cell Layout of the Grid component. ",1471],["Page content and screenshots updated for 2020.1 NewIn20201",1471],["Tilemaps added in 2017.2 NewIn20172",1471],["Tilemap workflow",1472],["The following is the general workflow and steps for creating a Tilemap.",1472],["Create a Tilemap that you will paint your Tiles on. A Grid GameObject is also automatically created as a parent to the Tilemap in the process.",1472],["Create Tile Assets directly, or generate Tiles automatically by bringing Sprites into the Tile Palette window.",1472],["Create a Tile Palette that contains your Tile Assets and use a variety of painting Brushes to Paint onto Tilemaps.",1472],["You can attach the Tilemap Collider 2D component to your Tilemaps to have them interact with Physics2D.",1472],["Unity also supports more specialized types of Tilemaps such as Hexagonal and Isometric Tilemaps. Refer to their respective documentation for their specific workflows and properties.",1472],["Tilemaps added in 2017.2 NewIn20172",1472],["Tilemaps",1473],["Unity's Tilemap system stores and handles Tile Assets for creating 2D levels, which makes it easy to create and iterate level design cycles within Unity. The Tilemap system transfers the required information from the Tiles placed on it to other related components such as the Tilemap Renderer and the Tilemap Collider 2D.",1473],["By default, the Tilemap package isn't included in the Unity Editor, so you must download the 2D Tilemap Editor package from the Package Manager.",1473],["When you create a Tilemap, the Grid component is automatically parented to the Tilemap and acts as a guide when you lay out Tiles onto the Tilemap. To create, change, or pick the Tiles for painting onto a Tilemap, use the Tile Palette (menu: Window > 2D > Tile Palette) and its tools. For more information, refer to Creating a Tile Palette and Painting Tilemaps.",1473],["Topic Description ",1473],[":------------------------------------------------------------- :------------------------------------------------------------------ ",1473],["Tilemap component reference Refer to the properties of the Tilemap component. ",1473],["Grid component reference Refer to the properties of the Grid component. ",1473],["Tilemap Renderer component reference Refer to the properties of the Tilemap Renderer component. ",1473],["Tile asset reference Refer to the properties of Tile assets. ",1473],["Tile Palette preferences reference Refer to the properties of the Tile Palette component. ",1473],["Tilemap workflow Follow the general workflow to create a Tilemap. ",1473],["Hexagonal Tilemaps Create Hexagonal Tilemaps in your 2D project. ",1473],["Isometric Tilemaps Create Isometric Tilemaps in your 2D project. ",1473],["Scriptable Tiles Understand how to use the available classes for Scriptable Tiles. ",1473],["Scriptable Brushes Understand how to use the available classes for Scriptable Brushes. ",1473],["Tile Palette visual elements Learn which visual elements you can use to paint on Tilemaps. ",1473],["Additional resources",1473],["Select Tool",1474],["The Select Tool Inspector window has the following two main sections in the Grid Selection and Modify Tilemap property settings.",1474],["Grid Selection",1474],["Use the Select Tool to select one or more cells. The Grid Selection Inspector window displays the contents and properties of the Tiles at the selected location.",1474],["Grid Selection Inspector window properties",1474],["Grid Selection Properties",1474],["Property Function ",1474],["---------------------------------------------- ------------------------------------------------------------ ",1474],["Tile Displays the Tile currently set at the selected cell location. If you select multiple cells, and they display the same Tile, then that Tile’s name is shown. If you select multiple cells with different Tiles, this property is blank. ",1474],["Sprite Displays the Sprite assigned to the Tile in the Tile property above. If you select multiple cells with the same Tile, then this displays the same Sprite. If you select multiple cells with different Tiles, this property is blank. This is grayed out by default, so you cannot edit it. ",1474],["Color The vertex color of the Sprite. This is grayed out if Lock Color is enabled, so you cannot edit it. ",1474],["Collider Type The Collider Type of the Tiles at the selected location. This is grayed out by default and cannot be edited. ",1474],["\nNote: The following Transforms (Position, Rotation, Scale) are grayed out if Lock Transform is enabled and cannot be edited. \n",1474],["Position Enter the offset (in cells) for each axis to shift the Tile Sprites along the respective axis. The Tiles’ actual cell positions on the Tilemap remain unchanged. ",1474],["Rotation This rotates one or more Tile Sprites at the selected location. Enter the rotation (in degrees) for each axis to rotate the Tile Sprites around the respective axis. The Tiles’ actual cell positions on the Tilemap remain unchanged. ",1474],["Scale Scales the size of one or more Tile Sprites at the selected location. Enter the factor for each axis to scale the Tile Sprite by along the respective axis. The Tiles’ actual cell positions on the Tilemap remain unchanged. ",1474],["Lock Color Select this to prevent changes to the Color of the Tile, and clear this to enable the Color property. When this property is grayed out, its state remains fixed. See the Tilemaps.TileFlags set in the Tile Asset to modify this property. ",1474],["Lock Transform Select this to prevent changes to the Transforms of the Tile, and clear this to enable the Transform properties. When this property is grayed out, its state remains fixed. See the Tilemaps.TileFlags set in the Tile Asset to modify this property. ",1474],["Delete Selection Select this button to delete the currently selected contents in the Tilemap. ",1474],["Modify Tilemap",1474],["This section contains various functions and tools you can use to modify the Tilemap and selected contents in it. This consists of a toolbar showing the available functions you can use to modify the Tilemap and selected contents in the Tilemaps, and a drop-down menu which provides different options for inserting or removing rows and columns of blank cells into the Tilemap.",1474],["The available functions in the Modify Tilemap section.",1474],["Gizmo toolbar",1474],["Select a function from the toolbar to activate Gizmos which modifies selected contents in the Tilemap. The following table describes each option, with links to examples showing how they affect the Tilemap.",1474],["This is the default Tilemap that the Gizmo function examples are based on.",1474],["Gizmo Function ",1474],["----------------------- ------------------------------------------------------------ ",1474],["None No Gizmo is active or shown in the Scene view. ",1474],["Move Activates and displays a Move Gizmo in the Scene view. Use this to change the offset of the selected contents. ",1474],["Rotate Activates and displays a Rotate Gizmo in the Scene view. Use this to change the rotation of the selected contents. ",1474],["Scale Activates and displays a Scale Gizmo in the Scene view. Use this to change the scale of the selected contents. ",1474],["Transform Activates and displays a Transform Gizmo in the Scene view. Use this to change the offset, rotation and scale of the selected contents all at once. ",1474],["Gizmo function examples",1474],["None**",1474],["Default Tilemap and selected cell location. No Gizmo is activated or visible.",1474],["Move**",1474],["Left: Default Tilemap and selected cell location. Right: Offset changed for the selected cell locations.",1474],["Rotate**",1474],["Left: Default Tilemap and selected cell location. Right: Rotation changed for the selected cell locations.",1474],["Scale**",1474],["Left: Default Tilemap and selected cell location. Right: Scale changed for the selected cell locations.",1474],["Transform**",1474],["Left: Default Tilemap and selected cell location. Right: Offset, rotation and scale of the selected cell locations are modified.",1474],["Modify Tilemap drop-down expanded options",1474],["The drop-down menu provides different options for inserting or removing rows and columns of blank cells onto the Tilemap. After selecting one of the drop-down menu options, enter the number of rows or columns to insert or remove into the box and select Modify.",1474],["The following table describes each option, with links to examples showing how they affect the Tilemap.",1474],["This is the default Tilemap that the following examples are based on.",1474],["Property Function ",1474],["------------------------------------ ------------------------------------------------------------ ",1474],["Insert Row Inserts one or more rows of blank cells at the selected location. Existing cells are displaced upward along the positive y-axis. ",1474],["Insert Row Before Inserts one or more rows of blank cells below the selected location. Existing cells are displaced downward along the negative y-axis. ",1474],["Delete Row Removes one or more rows of cells at the selected location and above. Existing cells above then collapse down to fill the space left by the deleted rows. ",1474],["Delete Row Before Removes one or more rows of cells below the selected location. Existing cells below then shift upward along the positive y-axis to fill the space left by the deleted rows. ",1474],["Insert Column Inserts one or more columns of blank cells at the selected location. Existing cells are displaced to the right along the positive x-axis. ",1474],["Insert Column Before Inserts one or more columns of blank cells to the left of the selected cell. Existing cells are displaced to the left along the negative x-axis. ",1474],["Delete Column Removes one or more columns of cells at the selected location and to its right. Existing cells then shift to the left along the negative x-axis to fill the space left by the deleted columns. ",1474],["Delete Column Before Removes one or more columns of cells to the left of the selected cell. Existing cells shifted to the right along the positive x-axis to fill the space left by the deleted columns. ",1474],["Examples of different drop-down menu options",1474],["Insert Row**",1474],["Left: Default Tilemap and selected cell location. Right: Insert Row.",1474],["Insert Row Before**",1474],["Left: Default Tilemap and selected cell location. Right: Insert Row Before.",1474],["Delete Row**",1474],["Left: Default Tilemap and selected cell location. Right: Delete Row.",1474],["Delete Row Before**",1474],["Left: Default Tilemap and selected cell location. Right: Delete Row Before.",1474],["Insert Column**",1474],["Left: Default Tilemap and selected cell location. Right: Insert Column.",1474],["Insert Column Before**",1474],["Left: Default Tilemap and selected cell location. Right: Insert Column Before.",1474],["Delete Column**",1474],["Left: Default Tilemap and selected cell location. Right: Delete Column.",1474],["Delete Column Before**",1474],["Left: Default Tilemap and selected cell location. Right: Delete Column Before.",1474],["Multiple cell selection**",1474],["When multiple cells are selected, the lower-leftmost cell is the main point of reference when applying the Modify Tilemap options. See the following examples of selecting multiple cells then modifying the Tilemap.",1474],["Left: Default Tilemap with multiple cells selected. Right: Insert Row.",1474],["Left: Default Tilemap with multiple cells selected. Right: Insert Column.",1474],["Left: Default Tilemap with multiple cells selected. Right: Delete Row.",1474],["Left: Default Tilemap with multiple cells selected. Right: Delete Column.",1474],["2020-08-17",1474],["2020-01-07",1474],["Updated Select Tool functionality in Unity 2020.1 NewIn20201",1474],["Time",1475],["Unity's Time class provides important basic properties that allow you to work with time-related values in your project.",1475],["This page contains explanations for some more commonly used members of the Time class, and how they relate to each other. You can read individual descriptions for each member of the time class on the Time script reference page.",1475],["The Time class has a few properties which provide you with numeric values that allow you to measure time elapsing while your game or app is running. For example:",1475],["\nTime.time returns the amount of time in seconds since your project started playing.\n",1475],["\nTime.deltaTime returns the amount of time in seconds that elapsed since the last frame completed. This value varies depending on the frames per second (FPS) rate at which your game or app is running.\n",1475],["The Time class also provides you with properties which allow you to control and limit how time elapses, for example:",1475],["\nTime.timeScale controls the rate at which time elapses. You can read this value, or set it to control how fast time passes, allowing you to create slow-motion effects.\n",1475],["\nTime.fixedDeltaTime controls the interval of Unity's fixed timestep loop (used for physics, and if you want to write deterministic time-based code).\n",1475],["\nTime.maximumDeltaTime sets an upper limit on the amount of time the engine will report as having passed by the \"delta time\" properties above.\n",1475],["Variable and Fixed time steps",1475],["Unity has two systems which track time, one with a variable amount of time between each step, and one with a fixed amount of time between each step.",1475],["The variable time step system operates on the repeated process of drawing a frame to the screen, and running your app or game code once per frame.",1475],["The fixed time step system steps forward at a pre-defined amount each step, and is not linked to the visual frame updates. It is more commonly associated with the physics system, which runs at the rate specified by the fixed time step size, but you can also execute your own code each fixed time step if necessary.",1475],["Variable frame rate management",1475],["The frame rate of your game or app can vary because of the time it takes to display and execute the code for each frame. This is is affected by the capabilities of the device on which it is running, and also on the varying amount of complexity of the graphics displayed and computation required each frame. For example, your game may run at a slower frame rate when there are one hundred characters active and on-screen, compared to when there is only one. This variable rate is often referred to as \"frames per second\", or FPS.",1475],["Unless otherwise constrained by your quality settings or by the Adaptive Performance package, Unity tries to run your game or app at the fastest frame rate possible. You can see more details of what occurs each frame in the execution order diagram, in the section marked \"Game Logic\".",1475],["Unity provides the Update method as an entry point for you to execute your own code each frame. For example, in your game character's Update method, you might read the user input from a joypad, and move the character forward a certain amount. It's important to remember when handling time-based actions like this is that the game's frame rate can vary and so the length of time between Update calls also varies.",1475],["Consider the task of moving an object forward gradually, one frame at a time. It might seem at first that you could just translate the object by a fixed distance each frame:",1475],["//C# script example",1475],["using UnityEngine;",1475],["using System.Collections;",1475],["public class ExampleScript : MonoBehaviour {",1475],["public float distancePerFrame;",1475],["void Update() {",1475],["transform.Translate(0, 0, distancePerFrame); // this is incorrect",1475],["However with this code, as the frame rate varies, the the object's apparent speed also varies. If the game is running at 100 frames per second, the object moves distancePerFrame one hundred times per second. But if the frame rate slows to 60 frames per second (due to CPU load, say) then it only steps forward sixty times a second and therefore covers a shorter distance over the same amount of time.",1475],["In most cases this is undesirable, particularly with games and animation. It is much more common to want your in-game objects to move at steady and predictable speeds regardless of the frame rate. The solution is to scale the amount of the movement each frame by the amount of time elapsed each frame, which you can read from the Time.deltaTime property:",1475],["//C# script example",1475],["using UnityEngine;",1475],["using System.Collections;",1475],["public class ExampleScript : MonoBehaviour {",1475],["public float distancePerSecond;",1475],["void Update() {",1475],["transform.Translate(0, 0, distancePerSecond * Time.deltaTime);",1475],["Note that the movement is now given as distancePerSecond rather than distancePerFrame. As the frame rate varies, the size of the movement step will vary accordingly and so the object's speed will be constant.",1475],["Depending on your target platform, use either Application.targetFrameRate or QualitySettings.vSyncCount to set the frame rate of your application. For more information, see the Application.targetFrameRate API documentation.",1475],["Fixed Timestep",1475],["Unlike the main frame update, Unity's physics system works to a fixed timestep, which is important for the accuracy and consistency of the simulation. At the start of the each frame, Unity performs as many fixed updates as necessary to catch up with the current time. You can see more details of what occurs during the fixed update cycle in the execution order diagram, in the section marked \"Physics\".",1475],["You can also execute your own code in sync with the fixed timestep, if necessary. This is most commonly used for executing your own physics-related code, such as applying a force to a Rigidbody. Unity provides the FixedUpdate method as an entry point for you to execute your own code each fixed timestep.",1475],["The fixedDeltaTime property controls the interval of Unity's fixed timestep loop, and is specified in seconds. For example, a value of 0.01 means each fixed timestep is one hundredth of a second in duration, and so there will be 100 fixed time steps per second.",1475],["If your game or app is running at a higher frame rate than the number of fixed timesteps per second, it means each frame duration is less than the duration of a single fixed timestep. In that case, Unity performs either zero or one fixed physics updates per frame. For example, if your fixed timestep value is 0.02, there will be 50 fixed updates per second. If your game or app then runs at 60 frames per second, approximately one in ten frames will not have a fixed update.",1475],["If your game or app is running at a lower frame rate than the fixed timestep value, it means each frame duration is longer than a single fixed timestep. To account for this, Unity will perform one or more fixed updates each frame, so that the physics simulation catches up with the amount of time elapsed since the last frame. For example, if your fixed timestep value is 0.01, there will be 100 fixed updates per second. If your app runs at 25 frames per second, Until performs four fixed updates every frame. You might want a scenario like this where it's more important to model more accurate physics than to have a high frame rate.",1475],["You can read or change the duration of the fixed timestep in the Time window, or from a script using the Time.fixedDeltaTime property.",1475],["Note: A lower timestep value means more frequent physics updates and more precise simulations, which leads to higher CPU load.",1475],["Unity's Time Logic",1475],["The following flowchart illustrates the logic that Unity uses to count time in a single frame, and how the time, deltaTime, fixedDeltaTime, and maximumDeltaTime properties relate to each other.",1475],["",1475],["Controlling and handling variations in time",1475],["As described above, there can be variations in the amount of time elapsed between each frame.",1475],["Elapsed time variations can be slight. For example, in a game running at 60 frames per second, the actual number of frames per second may vary slightly, so that each frame lasts between 0.016 and 0.018 seconds. Larger variations can occur when your app performs heavy computations or garbage collection, or when the resources it needs to maintain its frame rate are being used by a different app.",1475],["The properties explained in this section are:",1475],["\nTime.time\n",1475],["\nTime.unscaledTime\n",1475],["\nTime.deltaTime\n",1475],["\nTime.unscaledDeltaTime\n",1475],["\nTime.smoothDeltaTime\n",1475],["\nTime.timeScale\n",1475],["\nTime.maximumDeltaTime\n",1475],["These properties each have their own scripting API documentation page, but it can help to see their descriptions and outputs in relation to each other to understand their appropriate uses.",1475],["Time.time indicates the amount of time elapsed since the player started, and so usually continuously and steadily rises. Time.deltaTime indicates the amount of time elapsed since the last frame, and so ideally remains fairly constant.",1475],["Both these values are subjective measures of time elapsed within your app or game. This means they take into account any scaling of time that you apply. So for example, you could set the Time.timeScale to 0.1 for a slow-motion effect (which indicates 10% of normal playback speed). In this situation the value reported by Time.time increases at 10% the rate of \"real\" time. After 10 seconds, the value of Time.time would have increased by 1. In addition to slowing down or speeding up time in your app, you can set Time.timeScale to zero to pause your game, in which case the Update method is still called, but Time.time does not increase at all, and Time.deltaTime is zero.",1475],["These values are also clamped by the value of the Time.maximumDeltaTime property. This means the length of any pauses or variations in frame rate reported by these properties will never exceed maximumDeltaTime. For example, if a delay of one second occurs, but the maximumDeltaTime is set to the default value of 0.333, Time.time would only increase by 0.333, and Time.deltaTime would equal 0.333, despite more time having actually elapsed in the real world.",1475],["The unscaled versions of each of these properties (Time.unscaledTime and Time.unscaledDeltaTime) ignore these subjective variations and limitations, and report the actual time elapsed in both cases. This is useful for anything that should respond at a fixed speed even when the game is playing in slow-motion. An example of this is UI interaction animation.",1475],["The table below shows an example of 16 frames elapsing one after another, with one large delay occuring half-way through, on a single frame. These figures illustrate how the various Time class properties report and respond to this large variation in frame rate.",1475],["Frame unscaledTime time unscaledDeltaTime deltaTime smoothDeltaTime ",1475],["",1475],["1 0.000 0.000 0.018 0.018 0.018 ",1475],["2 0.018 0.018 0.018 0.018 0.018 ",1475],["3 0.036 0.036 0.018 0.018 0.018 ",1475],["4 0.054 0.054 0.018 0.018 0.018 ",1475],["5 0.071 0.071 0.017 0.017 0.018 ",1475],["6 0.089 0.089 0.018 0.018 0.018 ",1475],["7 0.107 0.107 0.018 0.018 0.018 ",1475],["8 (a) 1.123 (b) 0.440 (c) 1.016 (d) 0.333 (e) 0.081 (f) ",1475],["9 1.140 0.457 0.017 0.017 0.066 ",1475],["10 1.157 0.474 0.017 0.017 0.056 ",1475],["11 1.175 0.492 0.018 0.018 0.049 ",1475],["12 1.193 0.510 0.018 0.018 0.042 ",1475],["13 1.211 0.528 0.018 0.018 0.038 ",1475],["14 1.229 0.546 0.018 0.018 0.034 ",1475],["15 1.247 0.564 0.018 0.018 0.031 ",1475],["16 1.265 0.582 0.018 0.018 0.028 ",1475],["Frames 1 to 7 are running at a steady rate of approximately 60 frames per second. You can see both \"time\" and \"unscaledTime\" increasing steadily together, indicating that the timeScale during this example is set to 1.",1475],["Then on frame 8 (a), a large delay of just over one second occurs. This can happen when there is resource competition. For example, a code in the app blocks the main process while it loads a large amount of data from disk.",1475],["When a frame delay of larger than the maximumDeltaTime value occurs, Unity limits the value reported by deltaTime, and the amount added to the current time. The purpose of this limit is to avoid undesirable side-effects that might occur if the timestep exceeded that amount. If there was no limit, an object whose movement was scaled by deltaTime would be able to \"glitch\" through a wall in a game during a frame rate spike, because there would theoretically be no limit to how far an object could move from one frame to the next, so it could possibly jump from one side of an obstacle to another in a single frame without intersecting with it at all.",1475],["You can adjust the maximumDeltaTime value in the Time window, where it is labelled Maximum allowed timestep, as well as with the Time.maximumDeltaTime property.",1475],["The default maximumDeltaTime value is one third of a second (0.3333333). This means that in a game where movement is controlled by deltaTime, an object's movement from one frame to the next is limited to the distance it could cover in a third of a second, regardless of how much time actually elapsed since the previous frame.",1475],["Looking at the data from the table above in graph form can help to visualise how these time properties behave in relation to each other:",1475],["You can see above, on frame 8, that unscaledDeltaTime (d) and deltaTime (e) differ in how much time they report has elapsed. Although a whole second of real time elapsed between frames 7 and 8, deltaTime reports only 0.333 seconds. This is because deltaTime is clamped to the maximumDeltaTime value.",1475],["Similarly, unscaledTime (b) has increased by approximately a whole second because the true (unclamped) value has been added, whereas time (c) has only increased by the smaller clamped value. The time value does not catch up to the real amount of time that has elapsed, and instead behaves as though the delay was only maximumDeltaTime in duration.",1475],["The Time.smoothDeltaTime property reports an approximation of the recent deltaTime values with all variations smoothed out according to an algorithm. This is another technique to avoid undesirably large steps or fluctuations in movement or other time-based calculations. In particular, those which fall below the threshold set by maximumDeltaTime. The smoothing-out algorithm cannot predict future variations, but it gradually adapts its reported value to smooth out variations in the recently elapsed delta time values, so that the average reported time remains approximately equivalent to the actual amount of time elapsed.",1475],["Time variation and the physics system",1475],["The maximumDeltaTime value also affects the physics system. The physics system uses the fixedTimestep value to determine how much time to simulate in each step. Unity tries to keep the physics simulation up-to-date with the amount of time that has elapsed and, as mentioned above, sometimes performs multiple physics updates per frame. However if the physics simulation fall too far behind, for example because of some heavy computation or a delay of some kind, the physics system may require a large number of steps to catch up with the current time. This large number of steps may then itself cause a further slow-down.",1475],["To avoid this cyclic feedback of slowing down due to attempting to catch up, the maximumDeltaTime value also acts as a limit on the amount of time the physics system will simulate between any given two frames.",1475],["If a frame update takes longer than maximumDeltaTime to process, the physics engine will not try to simulate any time beyond the maximumDeltaTime, and instead lets the frame processing catch up. Once the frame update has finished, the physics resumes as though no time has passed since it stopped. The result of this is that physics objects will not move perfectly in real time as they usually do, but will be slowed slightly. However, the physics \"clock\" will still track them as though they were moving normally. The slowing of physics time is usually not noticeable and is often an acceptable trade-off against gameplay performance.",1475],["Time Scale",1475],["For special time effects such as slow-motion, it's sometimes useful to slow the passage of game time so that animations and time-based calculations in your code happen at a slower pace. Furthermore, you may sometimes want to freeze game time completely, as when the game is paused. Unity has a Time Scale property that controls how fast game time proceeds relative to real time. If you set the scale to 1.0, your in-game time matches real time. A value of 2.0 makes time pass twice as quickly in Unity (ie, the action will be speeded-up) while a value of 0.5 will slow gameplay down to half speed. A value of zero will make your in-game time stop completely. Note that the time scale doesn't actually slow execution but instead changes the time step reported to the Update and FixedUpdate functions with Time.deltaTime and Time.fixedDeltaTime. Your Update function may be called just as often when you reduce your time scale, but the value of deltaTime each frame will be less. Other script functions aren't affected by the time scale, so you can for example display a GUI with normal interaction when the game is paused.",1475],["The Time window has a property to let you set the time scale globally but it's usually more useful to set the value from a script using the ScriptRef:Time-timeScale property:",1475],["//C# script example",1475],["using UnityEngine;",1475],["using System.Collections;",1475],["public class ExampleScript : MonoBehaviour {",1475],["void Pause() {",1475],["Time.timeScale = 0;",1475],["void Resume() {",1475],["Time.timeScale = 1;",1475],["Capture frame rate",1475],["A special case of time management is where you want to record gameplay as a video. Since the task of saving screen images takes considerable time, the game's normal frame rate is reduced, and the video doesn't reflect the game's true performance.",1475],["To improve the video's appearance, use the Capture Framerate property. The property's default value is 0, for unrecorded gameplay. For recording. When you set the property's value to anything other than zero, game time is slowed and the frame updates are issued at precise regular intervals. The interval between frames is equal to 1 / Time.captureFramerate, so if you set the value to 5.0 then updates occur every fifth of a second. With the demands on frame rate effectively reduced, you have time in the Update function to save screenshots or take other actions:",1475],["//C# script example",1475],["using UnityEngine;",1475],["using System.Collections;",1475],["public class ExampleScript : MonoBehaviour {",1475],["// Capture frames as a screenshot sequence. Images are",1475],["// stored as PNG files in a folder - these can be combined into",1475],["// a movie using image utility software (eg, QuickTime Pro).",1475],["// The folder to contain our screenshots.",1475],["// If the folder exists we will append numbers to create an empty folder.",1475],["string folder = \"ScreenshotFolder\";",1475],["int frameRate = 25;",1475],["void Start () {",1475],["// Set the playback frame rate (real time will not relate to game time after this).",1475],["Time.captureFramerate = frameRate;",1475],["// Create the folder",1475],["System.IO.Directory.CreateDirectory(folder);",1475],["void Update () {",1475],["// Append filename to folder name (format is '0005 shot.png\"')",1475],["string name = string.Format(\"{0}/{1:D04} shot.png\", folder, Time.frameCount );",1475],["// Capture the screenshot to the specified file.",1475],["Application.CaptureScreenshot(name);",1475],["Using this technique improves the video, but can make the game much harder to play. Try different values of Time.captureFramerate to find a good balance.",1475],["The Toolbar",1476],["You can find the Toolbar at the top of the Unity Editor. It is not a window, and is the only part of the Unity interface that you can't rearrange.",1476],["For additional tools in the Scene view, see Overlays.",1476],["Control: Description: ",1476],["----------------------------------------------- ------------------------------------------------------------",1476],[" Access your Unity Account from the Account drop-down menu. ",1476],[" Click the Cloud button to open the Unity Services window. ",1476],[" Use the Play, Pause, and Step buttons in the Game view. ",1476],[" Use Undo History to view, undo, or redo actions performed in the Editor ",1476],[" Open Search. ",1476],[" Control which objects appear in Scene view from the Layers drop-down menu. ",1476],[" Change the arrangement of your views and then save the new layout or load an existing from the Layout drop-down menu. ",1476],["Tracker Modules",1477],["Tracker Modules are essentially just packages of audio samples that have been modeled, arranged and sequenced programatically. The concept was introduced in the 1980's (mainly in conjunction with the Amiga computer) and has been popular since the early days of game development and demo culture.",1477],["Tracker Module files are similar to MIDI files in many ways. The tracks are scores that contain information about when to play the instruments, and at what pitch and volume and from this, the melody and rhythm of the original tune can be recreated. However, MIDI has a disadvantage in that the sounds are dependent on the sound bank available in the audio hardware, so MIDI music can sound different on different computers. In contrast, tracker modules include high quality PCM samples that ensure a similar experience regardless of the audio hardware in use.",1477],["Supported formats",1477],["Unity supports the four most common module file formats, namely Impulse Tracker (.it), Scream Tracker (.s3m), Extended Module File Format (.xm), and the original Module File Format (.mod).",1477],["Benefits of Using Tracker Modules",1477],["Tracker module files differ from mainstream PCM formats (.aif, .wav, .mp3, and .ogg) in that they can be very small without a corresponding loss of sound quality. A single sound sample can be modified in pitch and volume (and can have other effects applied), so it essentially acts as an \"instrument\" which can play a tune without the overhead of recording the whole tune as a sample. As a result, tracker modules lend themselves to games, where music is required but where a large file download would be a problem.",1477],["Third Party Tools and Further References",1477],["Currently, the most popular tools to create and edit Tracker Modules are MilkyTracker for OSX and OpenMPT for Windows. For more information and discussion, please see the blog post .mod in Unity from June 2010.",1477],["Transfer a Project to a new Organization",1478],["To transfer a Unity Project from one organization to another, you must be an owner or manager of both organizations. You perform this operation through the Unity Developer Dashboard.",1478],["Note**: You do not need to disable Unity Services for this process.",1478],["From the Developer Dashboard Projects list, locate the Project you want to transfer, and select View.",1478],["Select Settings on the left navigation bar, then select General from the drop-down options.",1478],["Select the Transfer this project to another organization drop-down, then select the destination organization from the list and click Transfer.",1478],["A message appears indicating whether the transfer was successful. If you receive an error message, contact Unity Support.",1478],["2017-10-18 ",1478],["2017-10-18 - Project transfer service compatible with Unity 2017.1 onwards at this date; version compatibility may be subject to change.",1478],["Branch Group Properties",1479],["Branch groups node is responsible for generating branches and fronds. Its properties appear when you have selected a branch, frond or branch + frond node.",1479],["Distribution",1479],["Adjusts the count and placement of branches in the group. Use the curves to fine tune position, rotation and scale. The curves are relative to the parent branch or to the area spread in case of a trunk.",1479],["",1479],["Group Seed The seed for this group of branches. Modify to vary procedural generation. ",1479],["Frequency Adjusts the number of branches created for each parent branch. ",1479],["Distribution The way the branches are distributed along their parent. ",1479],["Twirl Twirl around the parent branch. ",1479],["Whorled Step Defines how many nodes are in each whorled step when using Whorled distribution. For real plants this is normally a Fibonacci number. ",1479],["Growth Scale Defines the scale of nodes along the parent node. Use the curve to adjust and the slider to fade the effect in and out. ",1479],["Growth Angle Defines the initial angle of growth relative to the parent. Use the curve to adjust and the slider to fade the effect in and out. ",1479],["Geometry",1479],["Select what type of geometry is generated for this branch group and which materials are applied. LOD Multiplier allows you to adjust the quality of this group relative to tree's LOD Quality.",1479],["",1479],["LOD Multiplier Adjusts the quality of this group relative to tree's LOD Quality, so that it is of either higher or lower quality than the rest of the tree. ",1479],["Geometry Mode Type of geometry for this branch group: Branch Only, Branch + Fronds, Fronds Only. ",1479],["Branch Material The primary material for the branches. ",1479],["Break Material Material for capping broken branches. ",1479],["Frond Material Material for the fronds. ",1479],["Shape",1479],["Adjusts the shape and growth of the branches. Use the curves to fine tune the shape, all curves are relative to the branch itself.",1479],["",1479],["Length Adjusts the length of the branches. ",1479],["Relative Length Determines whether the radius of a branch is affected by its length. ",1479],["Radius Adjusts the radius of the branches, use the curve to fine-tune the radius along the length of the branches. ",1479],["Cap Smoothing Defines the roundness of the cap/tip of the branches. Useful for cacti. ",1479],["Growth Adjusts the growth of the branches. ",1479],["Crinkliness Adjusts how crinkly/crooked the branches are, use the curve to fine-tune. ",1479],["Seek Sun Use the curve to adjust how the branches are bent upwards/downwards and the slider to change the scale. ",1479],["Surface Noise Adjusts the surface noise of the branches. ",1479],["Noise Overall noise factor, use the curve to fine-tune. ",1479],["Noise Scale U Scale of the noise around the branch, lower values will give a more wobbly look, while higher values gives a more stochastic look. ",1479],["Noise Scale V Scale of the noise along the branch, lower values will give a more wobbly look, while higher values gives a more stochastic look. ",1479],["Flare Defines a flare for the trunk. ",1479],["Flare Radius The radius of the flares, this is added to the main radius, so a zero value means no flares. ",1479],["Flare Height Defines how far up the trunk the flares start. ",1479],["Flare Noise Defines the noise of the flares, lower values will give a more wobbly look, while higher values gives a more stochastic look. ",1479],["Breaking Controls the breaking of branches. ",1479],["Break Chance Chance of a branch breaking, i.e. 0 = no branches are broken, 0.5 = half of the branches are broken, 1.0 = all the branches are broken. ",1479],["Break Location This range defines where the branches will be broken. Relative to the length of the branch. ",1479],["These properties are for child branches only, not trunks.**",1479],["Welding * *Defines the welding of branches onto their parent branch. Only valid for secondary branches. ",1479],["Weld Length Defines how far up the branch the weld spread starts. ",1479],["Spread Top Weld's spread factor on the top-side of the branch, relative to it's parent branch. Zero means no spread. ",1479],["Spread Bottom Weld's spread factor on the bottom-side of the branch, relative to it's parent branch. Zero means no spread. ",1479],["Fronds",1479],["Here you can adjust the number of fronds and their properties. This tab is only available if you have Frond geometry enabled in the Geometry tab.",1479],["",1479],["Frond Count Defines the number of fronds per branch. Fronds are always evenly spaced around the branch. ",1479],["Frond Width The width of the fronds, use the curve to adjust the specific shape along the length of the branch. ",1479],["Frond Range Defines the starting and ending point of the fronds. ",1479],["Frond Rotation Defines rotation around the parent branch. ",1479],["Frond Crease Adjust to crease / fold the fronds. ",1479],["Wind",1479],["Adjusts the parameters used for animating this group of branches. The wind zones are only active in Play Mode.",1479],["",1479],["Main Wind Primary wind effect. This creates a soft swaying motion and is typically the only parameter needed for primary branches. ",1479],["Edge Turbulence Turbulence along the edge of fronds. Useful for ferns, palms, etc. ",1479],["Create Wind Zone Creates a Wind Zone. ",1479],["Building Your First Tree",1480],["We'll now walk you through the creation of your first tree with the Tree creation tool.",1480],["Adding a new Tree",1480],["To create a new Tree asset, select GameObject > 3D Object > Tree. You'll see a new Tree asset is created in your Project View, and instantiated in the currently open Scene. This new tree is very basic with only a single branch, so let's add some character to it.",1480],["Adding Branches",1480],["Select the tree to view the Tree window in the Inspector. This interface provides all the tools for shaping and sculpting your trees. You will see the Tree Hierarchy window with two nodes present: the Tree Root node and a single Branch Group node, which we'll call the trunk of the tree.",1480],["In the Tree Hierarchy, select the Branch Group, which acts as the trunk of the tree. Click on the Add Branch Group button and you'll see a new Branch Group appear connected to the Main Branch. Now you can play with the settings in the Branch Group Properties to see alterations of the branches attached to the tree trunk.",1480],["After creating the branches that are attached to the trunk, we can now add smaller twigs to the newly created branches by attaching another Branch Group node. Select the secondary Branch Group and click the Add Branch Group button again. Tweak the values of this group to create more branches that are attached to the secondary branches.",1480],["Now the tree's branch structure is in place. Our game doesn't take place in the winter time, so we should also add some Leaves to the different branches, right?",1480],["Adding Leaves",1480],["We decorate our tree with leaves by adding Leaf Groups, which basically work the same as the Branch groups we've already used. Select your secondary Branch Group node and then click the Add Leaf Group button. If you're really hardcore, you can add another leaf group to the tiniest branches on the tree as well.",1480],["Right now the leaves are rendered as opaque planes. This is because we want to adjust the leaves' values (size, position, rotation, etc.) before we add a material to them. Tweak the Leaf values until you find some settings you like.",1480],["Adding Materials",1480],["In order to make our tree realistic looking, we need to apply Materials for the branches and the leaves. Create a new Material in your project using Assets > Create > Material. Rename it to \"My Tree Bark\", and choose Nature > Tree Creator Bark from the Shader drop-down. From here you can assign the Textures provided in the Tree Creator Package to the Base, Normalmap, and Gloss properties of the Bark Material. We recommend using the texture \"BigTree_bark_diffuse\" for the Base and Gloss properties, and \"BigTree_bark_normal\" for the Normalmap property.",1480],["Now we'll follow the same steps for creating a Leaf Material. Create a new Material and assign the shader as Nature > Tree Creator Leaves. Assign the texture slots with the leaf textures from the Tree Creator Package.",1480],["When both Materials are created, we'll assign them to the different Group Nodes of the Tree. Select your Tree and click any Branch or Leaf node, then expand the Geometry section of the Branch Group Properties. You will see a Material assignment slot for the type of node you've selected. Assign the relevant Material you created and view the results.",1480],["To finish off the tree, assign your Materials to all the Branch and Leaf Group nodes in the Tree. Now you're ready to put your first tree into a game!",1480],["Hints",1480],["Creating trees is a trial and error process.",1480],["Don't create too many leaves/branches as this can affect the performance of your game.",1480],["Leaf Group Properties",1481],["Leaf groups generate leaf geometry. Either from primitives or from user created meshes.",1481],["Distribution",1481],["Adjusts the count and placement of leaves in the group. Use the curves to fine tune position, rotation and scale. The curves are relative to the parent branch.",1481],["",1481],["Group Seed The seed for this group of leaves. Modify to vary procedural generation. ",1481],["Frequency Adjusts the number of leaves created for each parent branch. ",1481],["Distribution Select the way the leaves are distributed along their parent. ",1481],["Twirl Twirl around the parent branch. ",1481],["Whorled Step Defines how many nodes are in each whorled step when using Whorled distribution. For real plants this is normally a Fibonacci number. ",1481],["Growth Scale Defines the scale of nodes along the parent node. Use the curve to adjust and the slider to fade the effect in and out. ",1481],["Growth Angle Defines the initial angle of growth relative to the parent. Use the curve to adjust and the slider to fade the effect in and out. ",1481],["Geometry",1481],["Select what type of geometry is generated for this leaf group and which materials are applied. If you use a custom mesh, its materials will be used.",1481],["",1481],["Geometry Mode The type of geometry created. You can use a custom mesh, by selecting the Mesh option, ideal for flowers, fruits, etc. ",1481],["Material Material used for the leaves. ",1481],["Mesh Mesh used for the leaves. ",1481],["Shape",1481],["Adjusts the shape and growth of the leaves.",1481],["",1481],["Size Adjusts the size of the leaves, use the range to adjust the minimum and the maximum size. ",1481],["Perpendicular Align Adjusts whether the leaves are aligned perpendicular to the parent branch. ",1481],["Horizontal Align Adjusts whether the leaves are aligned horizontally. ",1481],["Animation",1481],["Adjusts the parameters used for animating this group of leaves. Wind zones are only active in Play Mode. If you select too high values for Main Wind and Main Turbulence the leaves may float away from the branches.",1481],["",1481],["Main Wind Primary wind effect. Usually this should be kept as a low value to avoid leaves floating away from the parent branch. ",1481],["Main Turbulence Secondary turbulence effect. For leaves this should usually be kept as a low value. ",1481],["Edge Turbulence Defines how much wind turbulence occurs along the edges of the leaves. ",1481],["Tree Basics",1482],["With the Tree Creator package imported, you can select GameObject > 3D Object > Tree to add a new tree to the scene (this will also create a new Tree asset in the Project view). The tree this produces is initially little more than a single stalk with no leaves or branches. However, you will notice in the inspector that the object has a Tree component attached, and this will allow you to design the tree to your liking.",1482],["At the top of the Tree component inspector is the tree structure editor where the basic arrangement of branches and leaves is specified.",1482],["It is important to understand the concept of tree levels when working with the editor. The trunk has branches which, in turn, have sub-branches; this branching process continues until the terminal twig are produced. The trunk is regarded as the first level of the tree, and then any branches growing directly from the trunk comprise the second level. Any branches that grow from second level branches together form the third level, and so on.",1482],["This notion of levels is reflected in the tree editor. Consider the following tree structure, for example:-",1482],["The icons are connected by lines to show the branching levels of the tree. The icon right at the bottom (with the tree picture) denotes the \"root\" of the tree. When this icon is selected, the properties in the inspector panel below are the ones that apply to the tree as a whole. From this root extend the first and second levels of branching. The icons show several pieces of information:-",1482],["The main picture shows which kind of element it is. The number in the top-right corner is the number of branches that exist at that level of the tree, as set by the Frequency property in the inspector. With a given icon selected, changing the Frequency value will change the number of branches at that level. The eye image just below the number denotes the visibility of the branches in the scene view; you click the eye to toggle visibility on or off.",1482],["The arrangement of branch groups can be edited using the controls at the bottom-right of the tree editor:-",1482],["Going from left to right, the first tool adds leaf groups to the tree. Leaves are arranged in levels as are branches but unlike branches, leaves cannot further subdivide into more levels. The second tool adds a new branch group at the current level (ie, it creates a new \"child\" for the selected branch icon). The third tool duplicates whichever group is selected while the fourth deletes a group from the tree. It is possible to have several groups at each level of a tree as in the following example:-",1482],["This tree has a main trunk from which two different branch groups grow. The first has its own sub-groups of branches and leaves, while the second just has bare branches. The separate groups at a given level can each have their properties set differently in the inspector so you could, say, have a large number of short twigs sprouting from the trunk along with a smaller number of main branches.",1482],["Hand Editing Branches and Leaves",1482],["When a branch is selected in the tree structure view, it will also be highlighted in the scene view, as with this \"tree\" (which is just a bare trunk for now).",1482],["The tree's single branch is shown with a number of boxes overlaid on the view. The boxes represent control points along the length of the branch (ie, the center line of the branch passes through all the points but is also smoothly curved between them). You can click and drag any of the boxes to move the control points and thus change the shape of the branch.",1482],["Moving control points is actually just the first of three options available on the hand editing toolbar.",1482],["The second tool allows you to bend the branch by rotating it at a given control point. The third tool allows you to start with the mouse at a given control point and from there on draw the branch freehand. The branching is still controlled from the structure view - only the shapes of branches can be redrawn. If a leaf group is selected in the structure view then a corresponding toolbar gives you options to move or rotate leaves around their parent branch.",1482],["Note that some properties in the tree creator's inspector are related to procedural generation of trees (ie, the computer generates the shape itself randomly) and these will be disabled after you have hand edited the tree. There is a button which will restore a tree to procedural status but this will undo any edits you have made by hand.",1482],["TreeView",1483],["Note**: It's strongly recommended to use the UI Toolkit to extend the Unity Editor, as it provides a more modern, flexible, and scalable solution than IMGUI.",1483],["The information on this page assumes the reader has basic knowledge of IMGUI (Immediate Mode GUI) concepts. For information about IMGUI and customizing Editor windows, refer to Extending the Editor and the IMGUI Unity blog.",1483],["TreeView is an IMGUI control used to display hierarchical data that you can expand and collapse. Use TreeView to create highly customizable list views and multi-column tables for Editor windows, which you can use alongside other IMGUI controls and components.",1483],["See Unity Scripting API documentation on TreeView for information about the available TreeView API functions.",1483],["Note that the TreeView is not a tree data model. You can construct TreeView using any tree data structure you prefer. This can be a C# tree model, or a Unity-based tree structure like the Transform hierarchy.",1483],["The rendering of the TreeView is handled by determining a list of expanded items called rows. Each row represents one TreeViewItem. Each TreeViewItem contains parent and children information, which is used by the TreeView to handle navigation (key and mouse input).",1483],["The TreeView has a single root TreeViewItem which is hidden and does not appear in the Editor. This item is the root of all other items.",1483],["Important classes and methods",1483],["The most important classes aside from the TreeView itself are TreeViewItem and TreeViewState.",1483],["TreeViewState (TreeViewState) contains state information that is changed when interacting with TreeView fields in the Editor, such as selection state, expanded state, navigation state, and scroll state. TreeViewState is the only state that is serializable. The TreeView itself is not serializable - it is reconstructed from the data that it represents when it is constructed or reloaded. Add the TreeViewState as a field in your EditorWindow-derived class to ensure that user-changed states are not lost when reloading scripts or entering Play mode (see documentation on extending the Editor for information on how to do this). For an example of a class containing a TreeViewState field, see Example 1: A simple TreeView, below.",1483],["TreeViewItem (TreeViewItem) contains data about an individual TreeView item, and is used to build the representation of the tree structure in the Editor. Each TreeViewItem must be constructed with a unique integer ID (unique among all the items in the TreeView). The ID is used for finding items in the tree for the selection state, expanded state, and navigation. If the tree represents Unity objects, use GetInstanceID for each object as the ID for the TreeViewItem. The IDs are used in the TreeViewState to persist user-changed states (such as expanded items) when reloading scripts or entering Play mode in the Editor.",1483],["All TreeViewItems have a depth property, which indicates the visual indentation. See the Initializing a TreeView example below for more information.",1483],["BuildRoot (BuildRoot) is the single abstract method of the TreeView class that must be implemented to create a TreeView. Use this method to handle creating the root item of the tree. This is called every time Reload is called on the tree. For simple trees that use small data sets, create the entire tree of TreeViewItems under the root item in BuildRoot. For very large trees, it is not optimal to create the entire tree on every reload. In this situation, create the root and then override the BuildRows method to only create items for the current rows. For an example of BuildRoot in use, see Example 1: A simple TreeView below.",1483],["BuildRows (BuildRows) is a virtual method where the default implementation handles building the rows list based on the full tree created in BuildRoot. If only the root was created in BuildRoot, this method should be overridden to handle the expanded rows. See Initializing a TreeView, below, for more information.",1483],["This diagram summarizes the ordering and repetition of BuildRoot and BuildRows event methods during a TreeView’s lifetime. Note that the BuildRoot method is called once every time Reload is called. BuildRows is called more often because it is called once on Reload (right after BuildRoot) and every time TreeViewItem is expanded or collapsed.",1483],[" ",1483],["Initializing a TreeView",1483],["The TreeView is initialized when the Reload method is called from a TreeView object.",1483],["There are two ways to set up a TreeView:",1483],["Create the full tree - Create TreeViewItems for all items in the tree model data. This is the default and requires less code to set up. The full tree is built when BuildRoot is called from a TreeView object.",1483],["Create only the expanded items - This approach requires you to override BuildRows to manually control the rows being shown, and BuildRoot is only used to create the root TreeViewItem. This approach scales best with large data sets or data that changes often.",1483],["Use the first approach for small data sets, or for data that does not change often. Use the second approach for large data sets, or data that changes often, because it is faster to only create only expanded items rather than a full tree.",1483],["There are three ways you can set up TreeViewItems:",1483],["Create TreeViewItems with children, parent, and depths initialized from the start.",1483],["Create TreeViewItems with parent and children and then use SetupDepthsFromParentsAndChildren to set the depths.",1483],["Create TreeViewItems only with depth information and then use SetupDepthsFromParentsAndChildren to set the the parent and children references.",1483],["Examples",1483],["To view the Project and source code for the examples shown below, download TreeViewExamples.zip.",1483],[" ",1483],["Example 1: A simple TreeView",1483],["To create a TreeView, create a class that extends the TreeView class and implement the abstract method BuildRoot. The following example creates a simple TreeView.",1483],["class SimpleTreeView : TreeView",1483],["public SimpleTreeView(TreeViewState treeViewState)",1483],[": base(treeViewState)",1483],["Reload();",1483],["protected override TreeViewItem BuildRoot ()",1483],["// BuildRoot is called every time Reload is called to ensure that TreeViewItems",1483],["// are created from data. Here we create a fixed set of items. In a real world example,",1483],["// a data model should be passed into the TreeView and the items created from the model.",1483],["// This section illustrates that IDs should be unique. The root item is required to",1483],["// have a depth of -1, and the rest of the items increment from that.",1483],["var root = new TreeViewItem {id = 0, depth = -1, displayName = \"Root\"};",1483],["var allItems = new List",1483],["new TreeViewItem {id = 1, depth = 0, displayName = \"Animals\"},",1483],["new TreeViewItem {id = 2, depth = 1, displayName = \"Mammals\"},",1483],["new TreeViewItem {id = 3, depth = 2, displayName = \"Tiger\"},",1483],["new TreeViewItem {id = 4, depth = 2, displayName = \"Elephant\"},",1483],["new TreeViewItem {id = 5, depth = 2, displayName = \"Okapi\"},",1483],["new TreeViewItem {id = 6, depth = 2, displayName = \"Armadillo\"},",1483],["new TreeViewItem {id = 7, depth = 1, displayName = \"Reptiles\"},",1483],["new TreeViewItem {id = 8, depth = 2, displayName = \"Crocodile\"},",1483],["new TreeViewItem {id = 9, depth = 2, displayName = \"Lizard\"},",1483],["};",1483],["// Utility method that initializes the TreeViewItem.children and .parent for all items.",1483],["SetupParentsAndChildrenFromDepths (root, allItems);",1483],["// Return root of the tree",1483],["return root;",1483],["In this example, depth information is used to build the TreeView. Finally, a call to SetupDepthsFromParentsAndChildren sets the parent and children data of the TreeViewItems.",1483],["Note that there are two ways to set up the TreeViewItem: Set the parent and children directly, or use the AddChild method, as demonstrated in the following example:",1483],["protected override TreeViewItem BuildRoot()",1483],["var root = new TreeViewItem { id = 0, depth = -1, displayName = \"Root\" };",1483],["var animals = new TreeViewItem { id = 1, displayName = \"Animals\" };",1483],["var mammals = new TreeViewItem { id = 2, displayName = \"Mammals\" };",1483],["var tiger = new TreeViewItem { id = 3, displayName = \"Tiger\" };",1483],["var elephant = new TreeViewItem { id = 4, displayName = \"Elephant\" };",1483],["var okapi = new TreeViewItem { id = 5, displayName = \"Okapi\" };",1483],["var armadillo = new TreeViewItem { id = 6, displayName = \"Armadillo\" };",1483],["var reptiles = new TreeViewItem { id = 7, displayName = \"Reptiles\" };",1483],["var croco = new TreeViewItem { id = 8, displayName = \"Crocodile\" };",1483],["var lizard = new TreeViewItem { id = 9, displayName = \"Lizard\" };",1483],["root.AddChild(animals);",1483],["animals.AddChild(mammals);",1483],["animals.AddChild(reptiles);",1483],["mammals.AddChild(tiger);",1483],["mammals.AddChild(elephant);",1483],["mammals.AddChild(okapi);",1483],["mammals.AddChild(armadillo);",1483],["reptiles.AddChild(croco);",1483],["reptiles.AddChild(lizard);",1483],["SetupDepthsFromParentsAndChildren(root);",1483],["return root;",1483],["Alternative BuildRoot method for the SimpleTreeView class above",1483],["The following example shows the EditorWindow that contains the SimpleTreeView. TreeViews are constructed with a TreeViewState instance. The implementer of the TreeView should determine how this view state should be handled: whether its state should persist until the next session of Unity, or whether it should only preserve its state after scripts are reloaded (either when entering Play mode or recompiling scripts). In this example, the TreeViewState is serialized in the EditorWindow, ensuring the TreeView preserves its state when the Editor is closed and reopened.",1483],["using System.Collections.Generic;",1483],["using UnityEngine;",1483],["using UnityEditor.IMGUI.Controls;",1483],["class SimpleTreeViewWindow : EditorWindow",1483],["// SerializeField is used to ensure the view state is written to the window",1483],["// layout file. This means that the state survives restarting Unity as long as the window",1483],["// is not closed. If the attribute is omitted then the state is still serialized/deserialized.",1483],["[SerializeField] TreeViewState m_TreeViewState;",1483],["//The TreeView is not serializable, so it should be reconstructed from the tree data.",1483],["SimpleTreeView m_SimpleTreeView;",1483],["void OnEnable ()",1483],["// Check whether there is already a serialized view state (state",1483],["// that survived assembly reloading)",1483],["if (m_TreeViewState == null)",1483],["m_TreeViewState = new TreeViewState ();",1483],["m_SimpleTreeView = new SimpleTreeView(m_TreeViewState);",1483],["void OnGUI ()",1483],["m_SimpleTreeView.OnGUI(new Rect(0, 0, position.width, position.height));",1483],["// Add menu named \"My Window\" to the Window menu",1483],["[MenuItem (\"TreeView Examples/Simple Tree Window\")]",1483],["static void ShowWindow ()",1483],["// Get existing open window or if none, make a new one:",1483],["var window = GetWindow ();",1483],["window.titleContent = new GUIContent (\"My Window\");",1483],["window.Show ();",1483],["Example 2: A multi-column TreeView",1483],["This example illustrates a multi-column TreeView that uses the MultiColumnHeader class.",1483],["MultiColumnHeader supports the following functionality: renaming items, multi-selection, reordering items and custom row content using normal IMGUI controls (such as sliders and object fields), sorting of columns, and the filtering and searching of rows.",1483],["This example creates a data model using the classes TreeElement and TreeModel. The TreeView fetches data from this \"TreeModel\". In this example, the TreeElement and TreeModel classes have been built in to demonstrate the features of the TreeView class. These classes have been included in the TreeView Examples Project (TreeViewExamples.zip). The example also shows how the tree model structure is serialized to a ScriptableObject and saved in an Asset.",1483],["[Serializable]",1483],["//The TreeElement data class is extended to hold extra data, which you can show and edit in the front-end TreeView.",1483],["internal class MyTreeElement : TreeElement",1483],["public float floatValue1, floatValue2, floatValue3;",1483],["public Material material;",1483],["public string text = \"\";",1483],["public bool enabled = true;",1483],["public MyTreeElement (string name, int depth, int id) : base (name, depth, id)",1483],["floatValue1 = Random.value;",1483],["floatValue2 = Random.value;",1483],["floatValue3 = Random.value;",1483],["The following ScriptableObject class ensures that data persists in an Asset when the tree is serialized.",1483],["[CreateAssetMenu (fileName = \"TreeDataAsset\", menuName = \"Tree Asset\", order = 1)]",1483],["public class MyTreeAsset : ScriptableObject",1483],["[SerializeField] List m_TreeElements = new List ();",1483],["internal List treeElements",1483],["get { return m_TreeElements; }",1483],["set { m_TreeElements = value; }",1483],["Construction of the MultiColumnTreeView class",1483],["The following example shows snippets of the class MultiColumnTreeView, which illustrates how the multi column GUI is achieved. Find full source code in the TreeView Examples Project (TreeViewExamples.zip).",1483],["public MultiColumnTreeView (TreeViewState state,",1483],["MultiColumnHeader multicolumnHeader,",1483],["TreeModel model)",1483],[": base (state, multicolumnHeader, model)",1483],["// Custom setup",1483],["rowHeight = 20;",1483],["columnIndexForTreeFoldouts = 2;",1483],["showAlternatingRowBackgrounds = true;",1483],["showBorder = true;",1483],["customFoldoutYOffset = (kRowHeights - EditorGUIUtility.singleLineHeight) * 0.5f;",1483],["extraSpaceBeforeIconAndLabel = kToggleWidth;",1483],["multicolumnHeader.sortingChanged += OnSortingChanged;",1483],["Reload();",1483],["The custom changes in the code sample above make the following adjustments:",1483],["rowHeight = 20: Change the default height (which is based on EditorGUIUtility.singleLineHeight’s 16 points) to 20, to add more room for GUI controls.",1483],["columnIndexForTreeFoldouts = 2: In the example, the fold-out arrows are shown in the third column because this value is set to 2 (see image above). If this value is not changed, the fold-outs are rendered in the first column, because \"columnIndexForTreeFoldouts\" is 0 by default.",1483],["showAlternatingRowBackgrounds = true: Enable alternating row background colors, so that each row is distinct.",1483],["showBorder = true: Render the TreeView with a margin around it, so that a thin border is shown to delimit it from the rest of the content",1483],["customFoldoutYOffset = (kRowHeights - EditorGUIUtility.singleLineHeight) * 0.5f: Center fold-outs vertically in the row - see Customizing the GUI below.",1483],["extraSpaceBeforeIconAndLabel = 20: Make space before the tree labels so the toggle button is shown.",1483],["multicolumnHeader.sortingChanged += OnSortingChanged: Assign a method to the event to detect when the sorting changes in the header component (when the header column is clicked), so that the rows of the TreeView change to reflect the sorting state.",1483],[" ",1483],["Customizing the GUI",1483],["If the default RowGUI handling is used, the TreeView looks like the SimpleTreeView example above, with only fold-outs and a label. When using multiple data values for each item, you must override the RowGUI method to visualize these values.",1483],["protected override void RowGUI (RowGUIArgs args)",1483],["The following code sample is the argument structure of the RowGUIArgs struct.",1483],["protected struct RowGUIArgs",1483],["public TreeViewItem item;",1483],["public string label;",1483],["public Rect rowRect;",1483],["public int row;",1483],["public bool selected;",1483],["public bool focused;",1483],["public bool isRenaming;",1483],["public int GetNumVisibleColumns ()",1483],["public int GetColumn (int visibleColumnIndex)",1483],["public Rect GetCellRect (int visibleColumnIndex)",1483],["You can extend the TreeViewItem and add additional user data (which creates a class that derives from TreeViewItem). You can then use this user data in the RowGUI callback. An example of this is provided below. See override void RowGUI - this example casts the input item to TreeViewItem<MyTreeElement>.",1483],["There are three methods which are related to column handling: GetNumVisibleColumns, GetColumn, and GetCellRect. You can only call these when the TreeView is constructed with a MultiColumnHeader, otherwise an exception is thrown.",1483],["protected override void RowGUI (RowGUIArgs args)",1483],["var item = (TreeViewItem) args.item;",1483],["for (int i = 0; i < args.GetNumVisibleColumns (); ++i)",1483],["CellGUI(args.GetCellRect(i), item, (MyColumns)args.GetColumn(i), ref args);",1483],["void CellGUI (Rect cellRect, TreeViewItem item, MyColumns column, ref RowGUIArgs args)",1483],["// Center the cell rect vertically using EditorGUIUtility.singleLineHeight.",1483],["// This makes it easier to place controls and icons in the cells.",1483],["CenterRectUsingSingleLineHeight(ref cellRect);",1483],["switch (column)",1483],["case MyColumns.Icon1:",1483],["// Draw custom texture",1483],["GUI.DrawTexture(cellRect, s_TestIcons[GetIcon1Index(item)], ScaleMode.ScaleToFit);",1483],["break;",1483],["case MyColumns.Icon2:",1483],["//Draw custom texture",1483],["GUI.DrawTexture(cellRect, s_TestIcons[GetIcon2Index(item)], ScaleMode.ScaleToFit);",1483],["break;",1483],["case MyColumns.Name:",1483],["// Make a toggle button to the left of the label text",1483],["Rect toggleRect = cellRect;",1483],["toggleRect.x += GetContentIndent(item);",1483],["toggleRect.width = kToggleWidth;",1483],["if (toggleRect.xMax < cellRect.xMax)",1483],["item.data.enabled = EditorGUI.Toggle(toggleRect, item.data.enabled);",1483],["// Default icon and label",1483],["args.rowRect = cellRect;",1483],["base.RowGUI(args);",1483],["break;",1483],["case MyColumns.Value1:",1483],["// Show a Slider control for value 1",1483],["item.data.floatValue1 = EditorGUI.Slider(cellRect, GUIContent.none, item.data.floatValue1, 0f, 1f);",1483],["break;",1483],["case MyColumns.Value2:",1483],["// Show an ObjectField for materials",1483],["item.data.material = (Material)EditorGUI.ObjectField(cellRect, GUIContent.none, item.data.material,",1483],["typeof(Material), false);",1483],["break;",1483],["case MyColumns.Value3:",1483],["// Show a TextField for the data text string",1483],["item.data.text = GUI.TextField(cellRect, item.data.text);",1483],["break;",1483],["TreeView FAQ",1483],["Q: In my TreeView subclass, I have the functions BuildRoot and RowGUI. Is RowGUI called for every TreeViewItem that got added in the build function, or only for items that are visible on screen in the scroll view?**",1483],["A: RowGUI is only called for the items visible on screen. For example, if you have 10,000 items, only the 20 visible items on screen have their RowGUI called.",1483],["Q: Can I get the indices of the rows that are visible on the screen?**",1483],["A: Yes. Use the method GetFirstAndLastVisibleRows.",1483],["Q: Can I get the list of rows that are built in BuildRows?**",1483],["A: Yes. Use the method GetRows.",1483],["Q: Is it mandatory for any of the overridden functions to call base.Method?**",1483],["A: Only if the method has a default behavior you want to extend.",1483],["Q: I just want to make list of items (not a tree). Do I have to create the root?**",1483],["A: Yes, you should always have a root. You can create the root item and set root.children = rows for fast setup.",1483],["Q: I’ve added a Toggle to my row - why doesn’t the selection jump to that row when I click on it?**",1483],["A: By default, the row is only selected if the mouse down is not consumed by the contents of the row. Here, your Toggle consumes the event. To fix this, use the method SelectionClick before your Toggle button is called.",1483],["Q: Are there methods I can use before or after all RowGUI methods are called?**",1483],["A: Yes. See API documentation on BeforeRowsGUI and AfterRowsGUI.",1483],["Q: Is there a simple way to return key focus to the TreeView from API? If I select a FloatField in my row, the row selection becomes gray. How do I make it blue again?**",1483],["A: The blue color indicates which row currently has key focus. Because the FloatField has focus, the TreeView loses focus, so this is the intended behavior. Set GUIUtility.keyboardControl = treeViewControlID when needed.",1483],["Q: How do I convert from id to a TreeViewItem?**",1483],["A: Use either FindItem or FindRows.",1483],["Q: How do I receive a callback when a user changes their selection in the TreeView?**",1483],["A: Override the SelectionChanged method (other useful callbacks: DoubleClickedItem, and ContextClickedItem).",1483],["Troubleshooting",1484],["This section addresses common problems that can arise when using Unity. Each platform is dealt with separately below.",1484],["Platform-specific troubleshooting",1484],["Geforce 7300GT on OSX 10.6.4",1484],["Deferred rendering is disabled because materials are not displayed correctly for Geforce 7300GT on OX 10.6.4; This happens because of buggy video drivers.",1484],["Script editing",1484],["Script opens in default system text editor, even when Visual Studio is set as the script editor",1484],["This happens when Visual Studio reports that it failed to open your script. The most common cause for this is an external plugin (such as Resharper) displaying a dialog at startup, requesting input from the user. This causes Visual Studio to report that it failed to open.",1484],["Graphics",1484],["Slow framerate and/or visual artifacts",1484],["This may occur if your video card drivers are not up to date. Make sure you have the latest official drivers from your card vendor.",1484],["Shadows",1484],["Shadows require certain graphics hardware support. See Shadow Performance page for details.",1484],["Make sure shadows are enabled in the Quality window.",1484],["Shadows on Android and iOS have limitations: soft shadows are not available, and in forward rendering path only a single directional light can cast shadows. There is no limit to the number of lights casting shadows in the deferred rendering path.",1484],["Some GameObjects do not cast or receive shadows",1484],["An object's Renderer must have Receive Shadows enabled for shadows to be rendered onto it. Also, an object must have Cast Shadows enabled in order to cast shadows on other objects (both are on by default).",1484],["Only opaque objects cast and receive shadows. This means that objects using the built-in Transparent or Particle shaders will not cast shadows. In most cases it is possible to use Transparent Cutout shaders for objects like fences, vegetation, etc. If you use custom written Shaders, they have to be pixel-lit and use the Geometry render queue. Objects using VertexLit shaders do not receive shadows but are able to cast them.",1484],["Only Pixel lights cast shadows. If you want to make sure that a light always casts shadows no matter how many other lights are in the scene, then you can set it to Force Pixel render mode (see the Light reference page).",1484],["Troubleshoot the Editor",1485],["The following sections explain how to troubleshoot and prevent problems with the Unity Editor in different situations. In general, make sure your computer meets all the system requirements, is up-to-date, and that you have the required user permissions in your system. Also, make backups regularly to protect your projects.",1485],["Versions",1485],["You can install different versions of the Editor in different folders. However, make sure you backup your projects as these might be upgraded by a newer version, and you won't be able to open them in an older version of Unity. Refer to installing Unity for further information.",1485],["Licenses of add-ons are valid only for the Unity versions that share the same major number, for example 3.x and 4.x. If you upgrade to a minor version of Unity, for example 4.0 to 4.1, the add-ons will be kept.",1485],["Activation",1485],["The Unity Hub is the primary method for all license management operations. For information about all license activation methods, refer to License activation methods.",1485],["If you experience issues activating your license, refer to License Troubleshooting.",1485],["If you still have problems activating your license or logging in to your user account, contact support@unity3d.com.",1485],["Failure to Start",1485],["If Unity crashes when starting then firstly make sure that your computer meets the minimal system requirements. Also update to the latest graphic and sound drivers.",1485],["If you get disk write errors, check your user account restrictions. When in macOS, note the \"root user\" is not recommended and Unity hasn't been tested in this mode. Unity must always have write permissions for its folders, but if you are granting them manually check these folders:",1485],["On Windows:",1485],["Unity's installation folder",1485],["%AllUsersProfile%\\Unity (typically C:\\ProgramData\\Unity)",1485],["C:\\Documents and Settings\\<user>\\Local Settings\\Application Data\\Unity",1485],["C:\\Users\\<user>\\AppData\\Local\\Unity",1485],["On macOS:",1485],["Package contents of Unity.app",1485],["/Library/Application Support/Unity",1485],["~/Library/Logs/Unity",1485],["Some users have experienced difficulties when using hard disks formatted with non-native partitions, and using certain software to translate data between storage devices.",1485],["Fonts",1485],["Corrupt fonts can crash Unity, you can find damaged files following these steps:",1485],["On Windows:",1485],["Open the fonts folder on your computer, located in the \"Windows\" folder.",1485],["Select \"Details\" from the \"View\" menu.",1485],["Check the \"Size\" column for fonts with a \"0\" size, which indicates a problematic file.",1485],["Delete corrupt fonts and reinstall them.",1485],["On macOS:",1485],["Launch your Font Book application.",1485],["Select all the fonts.",1485],["Open the \"File\" menu and choose \"Validate Fonts\" -> problematic fonts will be shown as invalid.",1485],["Delete corrupt fonts and reinstall them.",1485],["The system might have resources constrained, for example running in a virtual machine. Use the Task Manager to find processes consuming lots of memory.",1485],["Corrupt Project or Installation",1485],["Unity might try to open a project that is corrupt, and this might include the default sample project. If this is the case, rename or move the folder of the project. After Unity starts correctly, you can restore the project's folder if wished.",1485],["In the event of a corrupt installation, you might need to reinstall Unity. Refer to the instructions below.",1485],["In Windows, there might be problems like installation errors, registry corruption, conflicts, and other issues. For example, error 0xC0000005 means the program has attempted to access memory that it shouldn't. If you added new hardware or drivers recently, remove and replace the hardware to determine if it's causing the problem. Run diagnostics software and check information on troubleshooting the operating system.",1485],["Performance and Crashes",1485],["If the Editor runs slowly or crashes, particularly on builds, this might be caused by all of the available system resources being consumed. Close all other applications when you build the project. Clean up the system using its utilities, and consult the Task Manager (Windows) or Activity Monitor (MacOS) to find out if there are processes using lots of resources, for example memory. Sometimes virus protection software can slow down or even block the file system with its scanning process.",1485],["Project Loss",1485],["There are many factors that can destroy a project. The recommended best practice is that you constantly backup your projects to prevent unfortunate accidents. When in macOS, activate Time Machine using an external hard disk reserved for this sole purpose. After a loss you can try any of the file recovery utilities that exist, but sometimes this is irreversible.",1485],["Re-installation",1485],["Follow these steps to reinstall the Editor:",1485],["Uninstall Unity. When in macOS, drag the Unity app to trash.",1485],["Delete these files if present:",1485],["Windows:",1485],["%AllUsersProfile%\\Unity\\ (typically C:\\ProgramData\\Unity)",1485],["MacOS:",1485],["/Library/Application Support/Unity/",1485],["Restart the computer.",1485],["Download the latest version from our website, since your original install might be corrupt: http://unity3d.com/unity/download/archive",1485],["Reinstall Unity.",1485],["Additional resources",1485],["Troubleshooting on iOS devices",1486],["There are some situations with iOS where your app works perfectly in the Unity Editor but then doesn't work or start on the device.The problems are often related to code or content quality. This section describes the most common scenarios.",1486],["The game stops responding after a while. Xcode shows \"interrupted\" in the status bar.",1486],["There are a number of reasons why this might happen. Typical causes include:",1486],["Scripting errors such as using uninitialized variables, etc.",1486],["Using third party Thumb compiled native libraries. Such libraries trigger a known problem in the iOS SDK linker and might cause random crashes.",1486],["Using generic types with value types as parameters (e.g. List<int>, List<SomeStruct>, List<SomeEnum>) for serializable script properties.",1486],["Using reflection when managed code stripping is enabled.",1486],["Errors in the native plugin interface (the managed code method signature does not match the native code function signature).",1486],["Information from the XCode Debugger console can often help detect these problems (Xcode menu: View > Debug Area > Activate Console).",1486],["The Xcode console shows \"Program received signal: “SIGBUS” or EXC_BAD_ACCESS error.",1486],["This message typically appears on iOS devices when your application receives a NullReferenceException. Use Native stack traces to find out where the fault occurred:",1486],["Native stack traces",1486],["Native stack traces are a much more powerful tool for fault investigation but using them requires some expertise. Also, you generally can't continue after these native (hardware memory access) faults happen. To get a native stack trace, type bt all into the Xcode Debugger Console. Carefully inspect the printed stack traces; they may contain hints about where the error occurred. You might see something like:",1486],["...",1486],["Thread 1 (thread 11523):",1486],["0 0x006267d0 in m_OptionsMenu_Start ()",1486],["1 0x002e4160 in wrapper_runtime_invoke_object_runtime_invoke_void__this___object_intptr_intptr_intptr ()",1486],["2 0x00a1dd64 in mono_jit_runtime_invoke (method=0x18b63bc, obj=0x5d10cb0, params=0x0, exc=0x2fffdd34) at /Users/mantasp/work/unity/unity-mono/External/Mono/mono/mono/mini/mini.c:4487",1486],["3 0x0088481c in MonoBehaviour::InvokeMethodOrCoroutineChecked ()",1486],["...",1486],["Firstly, you should find the stack trace for \"Thread 1\", which is the main thread. The very first lines of the stack trace will point to the place where the error occurred. In this example, the trace indicates that the NullReferenceException happened inside the OptionsMenu script's Start method. Looking carefully at this method implementation would reveal the cause of the problem. Typically, NullReferenceExceptions happen inside the Start method when incorrect assumptions are made about initialization order.",1486],["In some cases only a partial stack trace is seen on the Debugger Console:",1486],["Thread 1 (thread 11523):",1486],["0 0x0062564c in start ()",1486],["This indicates that native symbols were stripped during the Release build of the application. The full stack trace can be obtained with the following procedure:",1486],["Remove application from device.",1486],["Clean all targets.",1486],["Build and run.",1486],["Get stack traces again as described above.",1486],["EXC_BAD_ACCESS starts occurring when an external library is linked to the Unity iOS application.",1486],["This usually happens when an external library is compiled with the ARM Thumb instruction set. Currently, such libraries are not compatible with Unity. The problem can be solved easily by recompiling the library without Thumb instructions. You can do this for the library's Xcode project with the following steps:",1486],["In Xcode, select View > Navigators > Show Project Navigator from the menu",1486],["Select the Unity-iPhone project, activate Build Settings tab",1486],["In the search field enter: Other C Flags",1486],["Add -mno-thumb flag there and rebuild the library.",1486],["If the library source is not available you should ask the supplier for a non-thumb version of the library.",1486],["The Xcode console shows \"WARNING -> applicationDidReceiveMemoryWarning()\" and the application crashes immediately afterwards",1486],["Sometimes, you might see a message like Program received signal: \"0\".",1486],["This warning message is often not fatal and merely indicates that iOS is low on memory and is asking applications to free up some memory. Typically, background processes like Mail will free some memory and your application can continue to run. However, if your application continues to use memory or ask for more, the OS will eventually start killing applications and yours could be one of them. Apple does not document what memory usage is safe, but empirical observations show that applications using less than 50% of all device RAM do not have major memory usage problems.",1486],["The main metric you should rely on is how much RAM your application uses. Your application memory usage consists of three major components:",1486],["Application code (the OS needs to load and keep your application code in RAM, but some of it might be discarded if really needed)",1486],["Native heap (used by the engine to store its state, your assets, etc. in RAM)",1486],["Managed heap (used by your Mono runtime to keep C# objects)",1486],["GLES driver memory pools: textures, framebuffers, compiled shaders, etc.",1486],["Your application memory usage can be tracked by two Xcode Instruments tools: Activity Monitor and Allocations. You can start from the Xcode Run menu: Product > Profile and then select specific tool or via Xcode > Open Developer Tools > Instruments. Activity Monitor tool shows all process statistics including Real memory which can be regarded as the total amount of RAM used by your application. Note: OS and device HW version combination might noticeably affect memory usage numbers, so you should be careful when comparing numbers obtained on different devices.",1486],["Note:** The internal profiler shows only the heap allocated by .NET scripts. Total memory usage can be determined via Xcode Instruments as shown above. This figure includes parts of the application binary, some standard framework buffers, Unity engine internal state buffers, the .NET runtime heap (number printed by internal profiler), GLES driver heap and some other miscellaneous stuff.",1486],["The other tool displays all allocations made by your application and includes both native heap and managed heap statistics. The important statistic is the Net bytes value.",1486],["To keep memory usage low:",1486],["Reduce the application binary size by using the strongest iOS stripping options, and avoid unnecessary dependencies on different .NET libraries. See the Player settings and Optimizing the size of the built iOS Player for further details.",1486],["Reduce the size of your content. Use PVRTC compression for textures and use low poly models. See the manual page about reducing file size for more information.",1486],["Don't allocate more memory than necessary in your scripts. Track mono heap size and usage with the internal profiler.",1486],["Querying the OS about the amount of free memory may seem like a good idea to evaluate how well your application is performing. However, the free memory statistic is likely to be unreliable since the OS uses a lot of dynamic buffers and caches. The only reliable approach is to keep track of memory consumption for your application and use that as the main metric. Pay attention to how the graphs from the tools described above change over time, especially after loading new levels.",1486],["The game runs correctly when launched from Xcode but crashes while loading the first level when launched manually on the device.",1486],["There could be several reasons for this. You need to inspect the device logs to get more details. Connect the device to your Mac, launch Xcode and select Window > Devices and Simulators from the menu. Select your device in the window's left toolbar, then click on the Show the device console button and review the latest messages carefully. Additionally, you may need to investigate crash reports. You can find out how to obtain crash reports here: http://developer.apple.com/iphone/library/technotes/tn2008/tn2151.html.",1486],["The Xcode Organizer console contains the message \"killed by SpringBoard\".",1486],["There is a poorly-documented time limit for an iOS application to render its first frames and process input. If your application exceeds this limit, it will be killed by SpringBoard. This may happen in an application with a first scene which is too large, for example. To avoid this problem, it is advisable to create a small initial scene which just displays a splash screen, waits a frame or two with yield and then starts loading the real scene. This can be done with code as simple as the following:",1486],["IEnumerator Start() {",1486],["yield return new WaitForEndOfFrame();",1486],["// Do not forget using UnityEngine.SceneManagement directive",1486],["SceneManager.LoadScene(\"Test\");",1486],["Type.GetProperty() or Type.GetValue() cause crashes on the device",1486],["Currently Type.GetProperty() and Type.GetValue() are supported only for the .NET 2.0 Subset profile. You can select the .NET API compatibility level in the Player settings.",1486],["Note:** Type.GetProperty() and Type.GetValue() might be incompatible with managed code stripping and might need to be excluded (you can supply a custom non-strippable type list during the stripping process to accomplish this). For further details, see the iOS player size optimization guide.",1486],["The game crashes with the error message \"ExecutionEngineException: Attempting to JIT compile method 'SometType`1<SomeValueType>:.ctor ()' while running with --aot-only.\"",1486],["The Mono .NET implementation for iOS is based on AOT (ahead of time compilation to native code) technology, which has its limitations. It compiles only those generic type methods (where a value type is used as a generic parameter) which are explicitly used by other code. When such methods are used only via reflection or from native code (i.e. the serialization system) then they get skipped during AOT compilation. The AOT compiler can be hinted to include code by adding a dummy method somewhere in the script code. This can refer to the missing methods and so get them compiled ahead of time.",1486],["void _unusedMethod() {",1486],["var tmp = new SomeType();",1486],["Note:** Value types are basic types, enums and structs.",1486],["Various crashes occur on the device when a combination of System.Security.Cryptography and managed code stripping is used",1486],[".NET Cryptography services rely heavily on reflection and so are not compatible with managed code stripping since this involves static code analysis. Sometimes the easiest solution to the crashes is to exclude the whole System.Security.Crypography namespace from the stripping process.",1486],["The stripping process can be customized by adding a custom link.xml file to the Assets folder of your Unity project. This specifies which types and namespaces should be excluded from stripping. Further details can be found in the iOS player size optimization guide.",1486],["link.xml",1486],["",1486],["",1486],["",1486],["",1486],["",1486],["Application crashes when using System.Security.Cryptography.MD5 with managed code stripping",1486],["You should consider the above advice or try working around this problem by adding extra references to specific classes to your script code:",1486],["object obj = new MD5CryptoServiceProvider();",1486],["\"Ran out of trampolines of type 0/1/2\" runtime error",1486],["This error usually happens if you use lots of recursive generics. You can hint to the AOT compiler to allocate more trampolines of type 0, type 1 or type 2. Additional AOT compiler command line options can be specified in the Other Settings section of the Player settings. For for type 0 trampolines specify ntrampolines=ABCD, where ABCD is the number of new trampolines required (i.e. 4096). For type 1 trampolines specify nrgctx-trampolines=ABCD and for type 2 trampolines specify nimt-trampolines=ABCD.",1486],["After upgrading Xcode Unity iOS, runtime fails with message \"You are using Unity iPhone Basic. You are not allowed to remove the Unity splash screen from your game\"",1486],["With some latest Xcode releases there were changes introduced in PNG compression and optimization tool. These changes might cause false positives in Unity iOS runtime checks for splash screen modifications. If you encounter such problems try upgrading Unity to the latest publicly available version. If this does not help, you might consider the following workaround:",1486],["Replace your Xcode project from scratch when building from Unity (instead of appending it)",1486],["Delete already installed projects from device",1486],["Clean project in Xcode (Product > Clean)",1486],["Clear Xcode's Derived Data folders (Xcode > Preferences > Locations)",1486],["If this still does not help try disabling PNG re-compression in Xcode:",1486],["Open your Xcode project",1486],["Select Unity-iPhone project",1486],["Select Build Settings tab",1486],["Look for Compress PNG files option and set to NO",1486],["WWW downloads are working fine in Unity Editor and on Android, but not on iOS",1486],["The most common mistake is to assume that WWW downloads are always happening on a separate thread. On some platforms this might be true, but you should not take it for granted. Best way to track WWW status is either to use the yield statement or check status in Update method. You should not use busy while loops for that.",1486],["\"PlayerLoop called recursively!\" error occurs when using Cocoa via a native function called from a script",1486],["Some operations with the UI will result in iOS redrawing the window immediately (the most common example is adding a UIView with a UIViewController to the main UIWindow). If you call a native function from a script, it will happen inside Unity's PlayerLoop, resulting in PlayerLoop being called recursively. In such cases, you should consider using the performSelectorOnMainThread method with waitUntilDone set to false. It will inform iOS to schedule the operation to run between Unity's PlayerLoop calls.",1486],["Profiler or Debugger unable to see game running on iOS device",1486],["Check that you have built a Development build, and checked the Script Debugging and Autoconnect Profiler boxes (as appropriate).",1486],["The application running on the device will make a multicast broadcast to 225.0.0.222 on UDP port 54997. Check that your network settings allow this traffic. Then, the profiler will make a connection to the remote device on a port in the range 55000 - 55511 to fetch profiler data from the device. These ports will need to be open for TCP access.",1486],["Missing DLLs",1486],["If your application runs ok in editor but you get errors in your iOS project this may be caused by missing DLLs (e.g. I18N.dll, I19N.West.dll). In this case, try copying those dlls from within the Unity.app to your project's Assets\\Plugins folder. The location of the DLLs within the unity app is:",1486],["Unity.app\\Contents\\Frameworks\\Mono\\lib\\mono\\unity",1486],["You should then also check the stripping level of your project to ensure the classes in the DLLs aren't being removed when the build is optimised. Refer to the iOS Optimisation Page for more information on iOS Stripping Levels.",1486],["Xcode Debugger console reports: ExecutionEngineException: Attempting to JIT compile method '(wrapper native-to-managed) Test:TestFunc (int)' while running with --aot-only",1486],["Typically, such a message is received when the managed function delegate is passed to the native function, but the required wrapper code wasn't generated when the application was built. You can help AOT compiler by hinting which methods will be passed as delegates to the native code. This can be done by adding the MonoPInvokeCallbackAttribute custom attribute. Currently, only static methods can be passed as delegates to the native code.",1486],["Sample code:",1486],["using UnityEngine;",1486],["using System.Collections;",1486],["using System;",1486],["using System.Runtime.InteropServices;",1486],["using AOT;",1486],["public class NewBehaviourScript : MonoBehaviour {",1486],["[DllImport (\"__Internal\")]",1486],["private static extern void DoSomething (NoParamDelegate del1, StringParamDelegate del2);",1486],["delegate void NoParamDelegate ();",1486],["delegate void StringParamDelegate (string str);",1486],["[MonoPInvokeCallback(typeof(NoParamDelegate))]",1486],["public static void NoParamCallback() {",1486],["Debug.Log (\"Hello from NoParamCallback\");",1486],["[MonoPInvokeCallback(typeof(StringParamDelegate))]",1486],["public static void StringParamCallback(string str) {",1486],["Debug.Log(string.Format(\"Hello from StringParamCallback {0}\", str));",1486],["// Use this for initialization",1486],["void Start() {",1486],["DoSomething(NoParamCallback, StringParamCallback);",1486],["Xcode throws compilation error: \"ld : unable to insert branch island. No insertion point available. for architecture armv7\", \"clang: error: linker command failed with exit code 1 (use -v to see invocation)\"",1486],["This error usually means there is just too much code in single module. Typically, it is caused by having lots of script code or having big external .NET assemblies included into build. And enabling script debugging might make things worse, because it adds quite few additional instructions to each function, so it is easier to hit that limit.",1486],["Enabling managed code stripping in Player settings might help with this problem, especially if big external .NET assemblies are involved. But if the issue persists then the best solution is to split user script code into multiple assemblies. The easiest way to this is move some code to Plugins folder. Code at this location is put to a different assembly. Also, check the information about how special folder names affect script compilation.",1486],["iOS simulators aren't visible on ARM-based Macs running Xcode 14.3",1486],["Starting with Xcode version 14.3, Apple introduced a new option Destination Architecture. With Destination Architecture, you can use iOS simulators on ARM-based Macs without requiring to run Xcode in Rosetta simulator mode.",1486],["To view the iOS simulators, use the following steps:",1486],["In the Xcode menu bar, select Product > Destination > Destination Architectures.",1486],["Select Show Rosetta Destinations or Show Both (to view the iOS simulators for both Apple Silicon and Rosetta architectures).",1486],["2018-06-14 ",1486],["Building your application for tvOS",1487],["To create a build for tvOS, go to Build Settings (menu:** File > Build Settings). In the Platform list, select tvOS, then select the Switch Platform button.",1487],["Similar to iOS, building your application to a tvOS device involves two steps:",1487],["Unity builds an Xcode project.",1487],["Xcode builds that project to your device.",1487],["To select the device that Xcode builds to, follow these steps:",1487],["Connect the device to your computer.",1487],["From Xcode’s main menu, go to Product > Destination, and select your device from the Devices list.",1487],["tvOS build settings are the exact same as those for iOS. See iOS build settings to check which settings you can configure for your build.",1487],["Incremental build pipeline",1487],["Unity uses the incremental build pipeline when it builds the Player for tvOS. This means that Unity incrementally builds/generates files such as Information Property List (plist) files and Entitlement files. If you implement callbacks that modify or move any iOS file or asset that the incremental build pipeline uses, see Creating non-incremental builds.",1487],["Debugging Your Application",1488],["To debug your application on a tvOS device, you need:",1488],["A fourth-generation Apple TV device (you also need a USB C to USB 3.0 cable, which doesn’t come with the consumer package).",1488],["Xcode 7.1 or later.",1488],["Set up provisioning for this device in the same way as for iOS devices. To test that provisioning works correctly, create an empty tvOS app with Xcode.",1488],["Or you can pair your device to xcode wirelessly. See Pair a wireless device with Xcode for more details.",1488],["Developing for tvOS",1489],["When you are developing applications for tvOS, you need to know how to support the tvOS input devices and how to set up application navigation.",1489],["Topic Description ",1489],["--- --- ",1489],["Supporting input devices on tvOS Explains how to support the Apple TV Remote and Made for iOS (MFi) controllers. ",1489],["Setting up application navigation for tvOS Explains how to set up navigation for your tvOS application using Unity and Xcode. ",1489],["Debugging your tvOS application Contains guidance on debugging your tvOS applications. ",1489],["tvOS",1490],["tvOS is the operating system used on Apple TVs. It's based on the iOS operating system and has many similar frameworks, technologies, and concepts. For more information about tvOS, see Apple’s tvOS Overview",1490],["Use the following information to develop, build, and publish an application for tvOS.",1490],["Topic Description ",1490],["--- --- ",1490],["tvOS requirements and compatibility Contains the requirements, compatibility notes, and known issues to be aware of before you start developing applications for tvOS. ",1490],["Player Settings Describes tvOS specific Player Settings. ",1490],["Developing for tvOS Explains how to set up application navigation; how to support the main two input devices; and debugging your application. ",1490],["Building your application for tvOS Explains how to build and publish your tvOS application. ",1490],["tvOS Player Settings",1491],["tvOS shares many Player Settings with iOS but there are certain settings that are specific only to tvOS.",1491],["Icon",1491],["Use the Icon settings to customize the branding for your Apple TV app.",1491],["Apple TV images consist of between two and five layers. Unity only provides two layers for Apple TV icons. For more information on layering images for Apple TV, see the Apple Developer documentation on Layered Images.",1491],["Setting Function ",1491],["--- --- ",1491],["App icons Build the custom icon that you would like to appear on your AppleTV home screen for each resolution (1280x768, 800x480, and 400x240). ",1491],["Top Shelf icons Build the custom icon that you would like to appear on the Apple Top Shelf for each aspect and resolution (4640x1440, 2320x720, 3840x1440, and 1920x720). ",1491],["Splash Image",1491],["In addition to the common Splash Screen settings, there are two additional settings for the tvOS platform:",1491],["Use the AppleTV (1x) and AppleTV (2x) properties to set Apple TV static splash screens.",1491],["Configuration",1491],["tvOS has the same Configuration settings as iOS, except for one - the Require Extended Game Controller setting.",1491],["If your application requires a game controller, enable the Require Extended Game Controller setting. For more information, see the Apple Developer documentation on Game Controllers.",1491],["Requirements and compatibility",1492],["Although the Apple TV platform (tvOS) is similar to the iOS platform, there are some differences between the two. Before developing your application for tvOS, review the requirements, compatibility notes, and known limitations.",1492],["Requirements",1492],["To develop for tvOS, you need the following:",1492],["Xcode 7.1 or later.",1492],["Compatibility",1492],["It’s best practice to create a separate branch or copy of your application and port that to Apple TV. tvOS only supports a subset of the iOS framework. This means that plug-ins that are compatible with iOS might not be compatible with tvOS.",1492],["If your app uses more than 4 GB on disk, break it into smaller parts and use On Demand Resources.",1492],["Note:** Bitcode is included with tvOS builds, which adds around 130 MB to your executables. App Store servers strip this code, so it doesn’t affect your distribution size. To estimate Bitcode size, analyze the LLVM sections in your executable from the command line with otool -1.",1492],["Implementing support for On Demand Resources",1492],["tvOS limits how much disk space your application can reserve. The main application installation bundle size can’t be larger than 4 GB. The limits for additional downloadable content are up to 2GB for in-use assets, and up to 20GB of total downloadable content. Apple recommends On Demand Resources (ODR) for tvOS downloadable content, which is the best disk space management for tvOS. Unity supports ODR via Asset Bundles. For more information about ODR implementation, see the Unity blog Mastering on-demand resources for Apple platforms.",1492],["Known limitations",1492],["The on-screen keyboard is limited to single line entries.",1492],["tvOS Simulator doesn’t emulate the Apple TV Remote as an app controller, which means apps can’t access its input.",1492],["Setting up app navigation from the Unity UI",1493],["You must provide custom visual resources to the Apple Game Center for its native leaderboard UI. Here’s how to set them up in Xcode:",1493],["Open the Input window in the Unity Editor. Find the first occurrence of the Submit virtual input, expand it, and change its Alt Positive Button to joystick button 14.",1493],["Select the EventSystem appObject in your Scene. In the Inspector, find the EventSystem component, and set a reference to the UI appObject that should receive initial focus in the First Selected property. You might need to enable the Force input module property in the Standalone Input Module component.#",1493],["Note**: Apple TV Remote navigation doesn’t work while your app is running in the TV Simulator.",1493],["Supporting input devices on tvOS",1494],["While tvOS builds on the foundation of iOS, it does create new challenges such as adapting content to function with tvOS inputs, and for display on a bigger screen.",1494],["There are two main inputs for tvOS:",1494],["The Apple TV Remote (mandatory input)",1494],["Made For iOS (MFi) controllers (optional)",1494],["Apple TV Remote",1494],["The Apple TV Remote (Siri Remote) is a multi-purpose input device that works as a traditional menu navigation controller, app controller, gyroscope, acceleration sensor, and as a touch gesture device. Unity routes Apple TV Remote input to corresponding Unity APIs, but performs no other processing on that input. Your application might need some adjustments to its input scheme to leverage the Apple TV Remote’s specific input features. For instance, your application can treat it as a traditional application controller, with one analog axis and an extra action button, or your application can use the accelerometer for interactions such as steering. You can experiment with various schemes when porting an app to tvOS.",1494],["Made for iOS (MFi)",1494],["Unity provides Made For iOS (MFi), which is a standardized controller support for iOS and tvOS. MFi controllers offer out of the box input mappings, and you can set up custom action mappings from Edit > Project Settings > Input Manager. For more information, refer to Handle Game Controller input and Game Controllers.",1494],["Two further wireless MFi controllers can be connected to an Apple TV device, which effectively turns it into a console. Your application can use the controllers in the same way as iOS MFi controllers, but you must ensure its usability with the Apple TV Remote alone. The tvOS system limits the number of additional controllers to two.",1494],["Here are some technical details on accessing specific TV Remote features:",1494],["Feature Description ",1494],["--- --- ",1494],["Touch area Maps to both Input.touches (Touch.type is set to Indirect and is ignored by the Unity GUI), and the Joystick Input API (for example, Input.GetAxis(\"Horizontal\")). ",1494],["Touch area click Maps to button A, which then maps to joystick button 14 ",1494],["Gyroscope Maps to Input.gyro. Input.gyro.attitude derives from the gravity vector, and as such it doesn’t rotate around the axis parallel to the gravity vector. The same applies for Input.gyro.rotationRate. ",1494],["Acceleration Maps to Input.acceleration. Note: Input.acceleration derives from the gyroscope API and might have some instabilities. The tvOS SDK doesn’t have a dedicated accelerometer API. ",1494],["Pause/Play button Maps to button X, which then maps to joystick button 15 ",1494],["Menu button A long press calls the tvOS task switcher. You can’t override this behavior. Your app can process short taps one of two ways: a) Return to the tvOS system home screen, if UnityEngine.tvOS.Remote.allowExitToHome is true. b) Let your app respond to taps (which maps to the Pause button/joystick button 0 when UnityEngine.tvOS.Remote.allowExitToHome is false. This is the default behavior. Your app should switch between a) and b) based on its current state: - If the user is currently interacting with the top menu, enable behavior a). - If the user is interacting with the app in real time, enable behavior b) and call the in-app pause menu when they press this button. ",1494],["Swipe to the edge of the remote Generates directional pad (D-pad) up/down/left/right button presses. For a list of mappings, refer to Game Controller input mapping. ",1494],["You can control the Apple TV Remote operational modes via a dedicated API as follows:",1494],["Note**: When UnityEngine.tvOS.Remote.allowExitToHome is false, the Menu button maps to joystick button 0. This causes a conflict with the default Input window, because it also uses joystick button 0 to map the Submit virtual button. This results in the Menu button triggering actions on UI elements. To fix this issue, remove or modify the Submit virtual button bindings in the Input window (menu: Edit > Project Settings, then select the Input category).",1494],["UDP API",1495],["The UDP API lets you upload binary files to the UDP console. This lets you use a CI system to build your app and push the output directly to UDP. See Managing and publishing your game on the UDP console.",1495],["The following file types are supported:",1495],["APK",1495],["OBB",1495],["AAB",1495],["API structure",1495],["The API is structured as follows:",1495],["https://distribute.dashboard.unity.com/developer/api/upload/:orgId/:clientId?token=xxxxxx[&obbType=xxxx]",1495],["The table below describes the parameters of the API.",1495],["Parameter Description ",1495],["",1495],["orgId The organization ID of the game for which you want to upload binary files. ",1495],["clientId The client ID of the game for which you want to upload binary files. ",1495],["token The authorization token generated in the UDP console, on the Developer API page. ",1495],["obbType The OBB file type you want to upload. The following values are valid:- mainObb- patchObbYou only need to specify this query parameter when you upload a OBB file. ",1495],["Form keys",1495],["You can use form keys in the POST method to specify values when uploading your build to UDP. The values correspond to the Binary section of the Game Information tab.",1495],["The table below describes the form keys.",1495],["Form key Description Mandatory / Optional ",1495],["",1495],["uploadFile Specify the path to the file to upload. Mandatory ",1495],["whatsNew Set the value of the field What’s New in the UDP console. Optional ",1495],["useGoogleService Set the value of the field Does your game use Google Play Services? in the UDP console. Optional ",1495],["If you don’t specify optional keys, UDP uses the values of the latest version of your game.",1495],["Common error messages and error codes",1495],["Invalid authentication token",1495],["If you provide an invalid authentication token, you will get an error message with status code 401.",1495],["{\"errorCode\":\"NotAuthenticated\",\"message\":\"not authenticated error\",\"target\":\"\",\"details\":null}",1495],["Invalid organization ID or client ID",1495],["If you provide an invalid organization ID or an invalid client ID, you will get an error message with status code 400.",1495],["{\"errorCode\":\"InvalidParameter\",\"message\":\"The given parameter is missing or invalid\",\"target\":\"Invalid OrgId or ClientId\",\"details\":null}",1495],["Invalid file type",1495],["If you provide an invalid file type, you will get an error message with status code 400.",1495],["{\"errorCode\":\"InvalidParameter\",\"message\":\"The given parameter is missing or invalid: please provide the right binary file(APK, AAB or OBB)\",\"target\":\"file type\",\"details\":null}",1495],["Invalid OBB type",1495],["If you provide an invalid OBB type, you will get an error message with status code 400.",1495],["{\"errorCode\":\"InvalidParameter\",\"message\":\"The given parameter is missing or invalid\",\"target\":\"obbType\",\"details\":null}",1495],["Invalid content type",1495],["If you provide an invalid content type, you will get an error message with status code 400.",1495],["{\"errorCode\":\"InvalidParameter\",\"message\":\"The given parameter is missing or invalid\",\"target\":\"content type\",\"details\":null}",1495],["Distributing your game with UDP",1496],["The steps below show the overall process to publish a game to app stores via UDP.",1496],["Creating a game in the UDP console.",1496],["Entering your game info on the UDP console.",1496],["Defining supported languages.",1496],["Implement UDP in your Unity project.",1496],["Install the package.",1496],["Link your project to the UDP client.",1496],["Initialize the UDP SDK.",1496],["Implement IAP (if applicable).",1496],["Implement LicenceCheck for premium games (optional).",1496],["Build and test your game",1496],["Build your game APK.",1496],["Ensure all your IAP products are listed in the UDP console (if applicable).",1496],["Test your game in the Sandbox.",1496],["Upload your game APK to the UDP console.",1496],["Finalize the game information page in the UDP console.",1496],["Verify testing was successful.",1496],["Upload your app signing private key.",1496],["Set a premium price (if applicable).",1496],["Localize your game information for additional languages (if applicable).",1496],["Release your game on UDP.",1496],["Publish your game to stores.",1496],["The image below illustrates the overall workflow.",1496],["",1496],["Creating a game in the UDP console",1496],["To create a new game in the UDP console:",1496],["In the My Games tab, select Add Game.",1496],["Add a title for your game and select Create New Game.The Game Info page opens.",1496],["Select Save.",1496],["This is the minimum required to create a new game in the UDP console.",1496],["The next step is to enter your game information.",1496],["When you create a new game in the UDP console it generates a UDP client and UDP client ID. You must link the UDP client to your game in the Unity Editor.",1496],["",1496],["Entering game information on the UDP console",1496],["To edit your game information on the UDP console:",1496],["In the My games tab, select your game’s card.",1496],["In the Game Info page, select EDIT INFO to enter edit mode.",1496],["Update your game information. Learn more about the requirements for the Game Info page.To help complete this information, you can also import metadata from Google Play.",1496],["To save changes select SAVE. To discard your changes, select CANCEL.",1496],["If you intend to provide descriptions for your game in multiple languages, add your supported languages in the UDP console. Otherwise, implement UDP in your project.",1496],["",1496],["Adding supported languages",1496],["When you add a language in the Game Info page, it copies the information from the default version. Therefore, to reduce duplication of work, add as much information as possible in the default version before you add more languages.",1496],["To add languages:",1496],["In the Game Info page, select EDIT INFO.",1496],["In the language dropdown, select Manage languages.",1496],["Select the languages you wish to support and select Save.",1496],["In the Game Info page, select Save.",1496],["If you will use the bulk import feature to import IAP products, including descriptions in multiple languages, you should first add the languages in the UDP Console. Otherwise, the IAP descriptions would not be imported for those languages.",1496],["",1496],["Implementing UDP in your project",1496],["Follow the steps to get started with the UDP package. This includes:",1496],["Install the UDP package.",1496],["Link your project to an existing UDP client ID.",1496],["Initialize the SDK.",1496],["If applicable, implement code in your game for:",1496],["IAP",1496],["Premium games",1496],["Using Firebase with UDP builds",1497],["Implementing Firebase in your Android games lets you leverage the Firebase product layer, for example for analytics or crashlytics. If your game uses Firebase, additional configuration is required to support the builds that Unity Distribution Portal (UDP) creates for different stores.",1497],["When your app invokes Firebase products, Firebase checks that the following information matches the details registered on the Firebase console:",1497],["The package name of the app",1497],["The certificate the app was signed with",1497],["The google_app_id in the Android package (APK) resource",1497],["These details must match in order for Firebase to provide accurate analysis.",1497],["For certain stores where you publish your game via UDP, UDP adds a store-specific suffix to the package name. Additionally, if you don’t use your own private key to generate the certificate, UDP generates a certificate for each repacked build. These events would cause your certificate and/or package name to no longer match the information on the Firebase console.",1497],["The UDP console displays a warning for Firebase services if you register your app to stores that need a package name suffix.",1497],["To enable your store-specific builds to work correctly with Firebase, you must register them with your Firebase project. The following sections explain how to configure Firebase for your UDP builds.",1497],["",1497],["Configuring Firebase for your UDP builds",1497],["This section gives an overview of the steps required to configure Firebase for your UDP builds (apps). For more detailed information, see the Firebase documentation.",1497],["Prerequisites",1497],["You have created a Firebase project and added it to your app",1497],["You have added the Firebase Unity SDKs to your app",1497],["You have registered your game with a store in the UDP console",1497],["If you use the app-signing private key generated by UDP, repack and publish your app to generate a certificate",1497],["Note**: During the process to register your app, you can download a google-services.json file. Unity recommends that you register all your package versions before you download this file.",1497],["Register your app with Firebase.",1497],["Use the store-specific package name from the UDP console: My Games > Publish > Store > Advanced page.",1497],["In the Firebase console, go to Project Settings and add your app’s fingerprint store certificate.",1497],["If you use your own key, get your fingerprint with the command:keytool -keystore path-to-your-keystore -list -v",1497],["If you don't use your own key, use the SHA1 certificate for the corresponding UDP store (UDP Console > My Games > Publish > Store > Advanced)",1497],["You can also download the APK certificate and get the fingerprint information with the command:openssl x509 -in path-to-your-certificate -fingerprint -noout",1497],["Repeat these steps for each store-specific app you want to link to your Firebase project.",1497],["Firebase adds an App ID for each app you add.",1497],["When you’ve registered all your apps, add the Firebase configuration file to your Unity project.",1497],["Adding Firebase configuration files",1497],["When you register an app in Firebase, Firebase creates a google-services.json configuration file. When you’ve added all your apps to Firebase, download the file and add it to your project.",1497],["In the Firebase console go to your app’s Project Settings page.",1497],["Download the google-services.json file.",1497],["Copy the google-services.json file into your Unity project’s Assets folder.",1497],["Your project is now properly configured for Firebase. To ensure stable operation of your app, rebuild and publish your project.",1497],["Adding your Firebase ID in the UDP console",1497],["For each build you’ve added to Firebase, in the UDP console, add the App ID:",1497],["Copy the build-specific App ID from Firebase.",1497],["In the UDP console, go to My Games > Publish > Store > Advanced page.",1497],["Paste the App ID into the Firebase App ID field.",1497],["Select Save.",1497],["Rebuilding your project",1497],["In the Unity Editor, rebuild your project.",1497],["Upload your build to the UDP console.",1497],["Release a new revision.",1497],["In the Publish tab, select each store you want to publish.",1497],["Set the target step to Submit to Store.",1497],["Select Publish.",1497],["For more information on these steps, see Managing and publishing your game on the UDP console.",1497],["Getting started with UDP",1498],["",1498],["UDP implementation",1498],["Unity recommends implementing UDP in your game development cycle towards the end of the development cycle, for example when you have decided what your game’s purchasable in-app products will be. This makes it easier to implement UDP in your back-catalog games to give them a new lease of life on new app stores.",1498],["You can implement UDP in your game in one of the following ways.",1498],["Using the UDP Package only",1498],["Using the UDP package and Unity IAP package (for Unity IAP package versions 2.0.0+)",1498],["Using Unity IAP only (for Unity IAP package versions 1.22.0-1.23.5)",1498],["The implementation you choose does not affect the UDP console.",1498],["",1498],["Using the UDP Package",1498],["This implementation is similar to the Google Play In-App Billing implementation. If you have previously configured your game for Google Play then Unity recommends using the UDP package.",1498],["The UDP package is available from Unity Package Manager or from the Unity Asset Store.",1498],["For standalone UDP package installations, see Installing the UDP package.",1498],["Using the UDP package and Unity IAP",1498],["The Unity IAP package version 2.0.0 and above does not contain the UDP DLL. This requires the UDP package version 2.0.0 and above. From these versions on, install the UDP package and install the Unity IAP package from the Asset Store.",1498],["",1498],["Using Unity IAP",1498],["If your game already uses Unity IAP, you can continue to use the Unity IAP package.",1498],["Note**: Unity recommends using the UDP package along with the Unity IAP package version 2.0.0+, available from the Asset Store..",1498],["UDP is included in Unity IAP from version 1.22.0 - 1.23.5. If you use the Unity IAP package (1.22.0 - 1.23.5) do not install the UDP package separately.",1498],["To check which Unity IAP version is installed, go to Services > Unity IAP > IAP Updates.",1498],["Follow the general implementation guidance of Unity IAP’s documentation before you implement your IAP items with Unity IAP.",1498],["If using the Unity IAP package, you can implement IAP items in your game using code, or a codeless implementation. For better integration with UDP, implement IAP using code.",1498],["System requirements",1498],["UDP is supported in Unity 5.6.1 or higher. Unity recommends to use 2018.4 or above.",1498],["From the following package versions and above, you can use the UDP and Unity IAP packages together:",1498],["UDP - 2.0.0",1498],["Unity IAP - 2.0.0 (Asset Store version)",1498],["Accessing the UDP console",1498],["To access the UDP console, go to the Unity Dashboard and select Distribution Portal.",1498],["To access the UDP console from the Unity Editor, select Services > Unity Distribution Portal > Configure. In the Unity Distribution Portal settings, select Go to UDP console.",1498],["Implementing IAP products",1499],["Unity recommends adding and managing your IAP products in the UDP console. The IAP Catalog in the UDP console is the source of truth for what is submitted to the store’s back-end systems. Additionally, the UDP console lets you:",1499],["Note**: If you are using the UDP package only, you should still create at least one IAP item in the Unity Editor to test that it can sync with the UDP console correctly.",1499],["If you are using the Unity IAP package (codeless implementation), you must add each IAP item in the Unity Editor and upload them all to the UDP console. If you are using the Unity IAP package and have implemented IAP in code, create the IAP items in the UDP console.",1499],["If you maintain an IAP Catalog in your game client, UDP keeps it synchronized between the Unity Editor and the UDP console.",1499],["",1499],["Managing in-app purchases on the UDP console",1499],["In the UDP console, navigate to your game via the My Games page.",1499],["In the Game Info page, select the EDIT INFO button to enter edit mode. To save changes select SAVE. To discard your changes, select CANCEL.",1499],["This section covers how to edit, create and delete IAP products from the UDP console.",1499],["",1499],["Creating new IAP items",1499],["To create new IAP items in the UDP console:",1499],["Select EDIT INFO on the Game Information page.",1499],["Select Add Item to create a new item.",1499],["Specify and save your product information.",1499],["Follow the requirements for Product IDs to make sure they’re valid for app stores.",1499],["Make sure the IAP products you define in your game use the same Product ID that is set in the IAP Catalog.",1499],["Select Manage amounts and currencies to:",1499],["Convert the IAP price from USD to foreign currencies.",1499],["Adjust pricing in these currencies.",1499],["Select SAVE to save your changes.",1499],["Note**: If you have many IAP items to create, consider using the Bulk IAP Import feature to create all your IAP items at once, including localized description and pricing in multiple currencies.",1499],["If using the UDP package, any new IAP items you add in the Console are synced to your Unity project. You don’t need to rebuild your game to include them.",1499],["",1499],["Editing IAP descriptions",1499],["To edit IAP descriptions, proceed as follows.",1499],["Select EDIT INFO on the Game Information page.",1499],["Choose the language for which you want to edit your description via the drop-down language selector.",1499],["In the In-App Purchases section, select the pencil icon to edit an existing IAP item.",1499],["Edit your IAP item information:",1499],["Product Name, the name of the IAP item",1499],["Description, to succinctly describe the IAP item",1499],["Select SAVE to save your changes.",1499],["Note**: The above steps only edit your IAP item information for the language selected. If you have a large number of IAP items and languages to support, consider using Bulk IAP Import to import this information.",1499],["Editing IAP prices and currencies",1499],["Select EDIT INFO on the Game Information page.",1499],["Select Manage amounts and currencies for an IAP item to:",1499],["Change the IAP price.",1499],["Convert it from USD to foreign currencies.",1499],["Adjust pricing in these currencies.",1499],["Select SAVE to save your changes.",1499],["Hint**: To set currencies as favourite currencies, select the star icon next to their currency code. This pins the currency to the top of the list. Deselect the star to unpin.",1499],["Note**: If you have many IAP items and currencies to support, you can use the Convert function to automatically convert all your IAP prices into global currencies, based on the USD amount set for each IAP item. This overrides any local prices you have previously set.",1499],["Alternatively, use Bulk IAP Import to import all this information at once.",1499],["Deleting IAP items",1499],["Select EDIT INFO on the Game Information page.",1499],["Select the trash can icon to delete an IAP item.",1499],["Select SAVE to save your changes.",1499],["Importing IAP items in bulk",1499],["Select EDIT INFO on the Game Information page.",1499],["Select IMPORT CATALOG in the top-right corner of the In-App Purchases panel.See Bulk IAP Import for full coverage of this function.",1499],["Select SAVE to save your changes.",1499],["Importing game information from Google Play",1499],["If you have already published your game on Google Play, you can import the basic information using your game’s Google Play URL:",1499],["Select Import from Google Play.",1499],["Paste your game’s Google Play URL into the input box.",1499],["To specify which language to specifically import, use a Google Play URL that contains the language suffix, for example for Italian use &hl=it.If your Google Play URL doesn't contain the language suffix, UDP fetches the information for the language that you’re currently editing in the UDP console (if it is set on Google Play).",1499],["Select Import.",1499],["Double-check the outcome as in some instances your computer’s IP address may ultimately determine which language you are served.",1499],["",1499],["Bulk IAP Import",1499],["The Bulk IAP Import feature makes it easier to manage your IAP Catalog if you have a lot of IAP items. This lets you upload CSV files in the regular UDP format and in Google Play format to the UDP Console with all your IAP product details, including prices in multiple currencies and descriptions in multiple languages.",1499],["Unity recommends that you still add an IAP item in the Unity Editor for testing purposes to ensure you can purchase an IAP item in the sandbox environment.",1499],["Note**: If your CSV file contains multiple languages, add the supported languages before you import the CSV file.",1499],["This section describes how to import your IAP items in bulk via CSV.",1499],["Implementation requirements",1499],["To add new IAP products",1499],["You should only use the Bulk IAP Import function to add new IAP products if you implemented UDP:",1499],["With the UDP package",1499],["With Unity IAP (code implementation)",1499],["Unity recommends that you still add an IAP item in the Unity Editor for testing purposes to ensure you can purchase an IAP item in the sandbox environment.",1499],["To add localized descriptions and prices",1499],["For all implementations, you can use Bulk IAP Import to assign descriptions in more languages and prices in more currencies to your existing IAP products.",1499],["With the UDP Package",1499],["You can use Bulk IAP Import to entirely redefine your game’s IAP Catalog without having to rebuild your game.",1499],["You only need to have a UDP implementation in good working order.",1499],["With Unity IAP (code implementation)",1499],["With Unity IAP, you can only sync your IAP Catalog from the Editor to the UDP Console.",1499],["If you will upload your game’s IAP Catalog to the UDP Console via Bulk IAP Upload, you should prepare your game to fetch IAP product information from the UDP Console, rather than from the game client’s default IAP Catalog.",1499],["To allow your game to fetch the IAP Catalog from the UDP console, do not invoke any IAP product retrieval method in your code.",1499],["For more information, see Querying IAP inventory.",1499],["Download the CSV Template",1499],["UDP provides a CSV template you can use for bulk import of IAP products. The template is in the regular UDP format for CSV files.",1499],["Select EDIT INFO on the Game Information page.",1499],["Go to the In-App Purchases panel.",1499],["Select IMPORT CATALOG.",1499],["Select Download Template.",1499],["Fill in the CSV file",1499],["CSV files use commas (,) and semicolons (;) to separate data values. Commas separate primary data values, and semicolons separate subvalues.",1499],["Each IAP item must appear entirely on a single line within the CSV file.",1499],["You must enter data in the exact format of the template provided. The UDP console displays an error message if you upload a file that contains errors, such as invalid price syntax or missing languages.",1499],["Upload your CSV file",1499],["Select EDIT INFO on the Game Information page.",1499],["Go to the In-App Purchases section.",1499],["Select IMPORT CATALOG.",1499],["Select Upload CSV or drag and drop your CSV file in the designated box.",1499],["Select IMPORT to upload your IAP Catalog to the UDP console.",1499],["Note:** Uploading a CSV file entirely overwrites this revision’s IAP catalog. The UDP console only uses the information contained in your CSV file; any other IAP information you previously entered via the UDP console is lost.",1499],["Export a CSV file",1499],["To re-use or modify an existing IAP Catalog:",1499],["Select EDIT INFO on the Game Information page.",1499],["Go to the In-App Purchases section.",1499],["Select EXPORT CATALOG.This exports your existing IAP Catalog as a CSV file in the regular UDP format.",1499],["Modify the CSV file.",1499],["Upload your CSV file.",1499],["The EXPORT CATALOG button is only shown if you have IAP products in your IAP Catalog, and is only visible in edit mode. The image below shows this button in the In-App Purchases section.",1499],["",1499],["Import IAP products from Google Play format",1499],["UDP also supports CSV files in Google Play format.",1499],["To import IAP products using a Google Play CSV file:",1499],["Select EDIT INFO on the Game Information page.",1499],["Go to the In-App Purchases section.",1499],["Click IMPORT CATALOG.",1499],["Select the CSV file in Google Play format checkbox.",1499],["Select Upload CSV or drag and drop your CSV file in the designated box.",1499],["In the Google Play default currency field, select the default currency for your game.",1499],["Select Import to upload your IAP Catalog to the UDP console.",1499],["Pricing",1499],["Google Play sets pricing by country, UDP sets pricing by currency. Therefore the import maps countries to currencies.",1499],["If for an IAP product you've set different prices across countries using the same currency (for example, EUR in European countries) UDP uses the first country in the list for the currency. If there are several countries with USD listed, the US locale is used.",1499],["UDP does not support Google Play’s pricing templates. This setting is ignored. UDP only uses the local prices provided in the CSV file.",1499],["Default currency",1499],["UDP uses USD as its default currency. If you don’t have USD pricing on Google Play, UDP converts your Google Play default pricing and currency into USD and uses this as the UDP default pricing.",1499],["Local prices that are set in your CSV file are maintained in their respective currencies.",1499],["For countries that aren’t explicitly set in the CSV file, UDP converts your Google Play default pricing and currency into their respective currencies.",1499],["IAP products",1499],["The type of IAP products (consumable / non-consumable) cannot be determined from your CSV file; you need to tell UDP the type of each IAP product.",1499],["UDP does not support Auto-Translate. This setting is ignored. UDP only uses the localized descriptions provided in the CSV file.",1499],["Managing and publishing your game on the UDP console",1500],["Uploading your game to the UDP console",1500],["Once you’ve built your game in the Unity Editor, the UDP console needs to repack it with each store’s SDK before you can publish your game to the supported stores.",1500],["To upload your build to the UDP Console, follow these steps.",1500],["Note**: The UDP console only accepts APKs or AABs that have a UDP implementation.",1500],["On the UDP Console, select your project in My Games.",1500],["In the Game Info tab, go to the Binary section.",1500],["Select Upload APK and upload the APK file (and OBB files, if any) of your game.",1500],["To upload AAB files, select Convert from AAB file and upload the file.",1500],["You can also deploy your game to the UDP console in the following ways:",1500],["Upload your APK to CloudBuild, and deploy it to UDP from there",1500],["Build your game with CloudBuild, and deploy it to UDP from there",1500],["",1500],["Uploading your game to the UDP console using the UDP API",1500],["You can only use the UDP API to upload binary files for the draft version of your game. If there is no draft version of your game, UDP creates one based on the latest version of your game. If the upload process is successful, UDP returns the “upload success” message with status code 200. If the upload process is unsuccessful, UDP returns an error message with a non-2xx status code.",1500],["You can upload either:",1500],["An APK file, a main OBB file (optional) and a patch OBB file (optional).This overwrites any existing AAB file in the UDP console.",1500],["An AAB file.This overwrites any existing APK or OBB file in the UDP console.",1500],["You can only upload one binary file at a time; you can’t specify multiple binary files for a command. If you upload the same type of binary file multiple times, the most recent file overrides the previous one.",1500],["Prerequisites",1500],["To use the UDP API, you need:",1500],["A valid authentication token from the UDP console.To generate an authentication token in the UDP console, go to the Developer API page and select New Token.",1500],["A tool to send HTTPS POST messages. Unity recommends using curl.",1500],["Uploading binary files",1500],["To upload binary files to the UDP console using the UDP API, use the HTTP POST method, and set the Content-Type to multipart/form-data. For information on the supported API parameters, see UDP API.",1500],["Uploading APK files",1500],["To upload an APK file, specify the path to your APK file in the POST method with the form key uploadFile.",1500],["Example:",1500],["$ curl -XPOST -F 'whatsNew=\"example\"' -F 'useGoogleService=false' -F 'uploadFile=@/path/to/your/APK/example.apk'",1500],["https://distribute.dashboard.unity.com/developer/api/upload/12369536319506/1d1a4cxq774MzPKwsiHgXA?token=NWQxMWIzZmYyNjk0Njc2NGYwMDU0ZTA3ZTk3YjA2ZDA=",1500],["Uploading AAB files",1500],["To upload an AAB file, specify the path to your AAB file with the form key uploadFile.",1500],["Example:",1500],["$ curl -XPOST -F 'whatsNew=\"example\"' -F 'useGoogleService=true -F 'uploadFile=@/path/to/your/AAB/example.aab'",1500],["https://distribute.dashboard.unity.com/developer/api/upload/12369536319506/1d1a4cxq774MzPKwsiHgXA?token=NWQxMWIzZmYyNjk0Njc2NGYwMDU0ZTA3ZTk3YjA2ZDA=",1500],["Uploading OBB files",1500],["To upload an OBB file:",1500],["Specify the path to your OBB file with the form key uploadFile.",1500],["Specify the OBB type. Set the query parameter key obbType to mainObb or patchObb.",1500],["Example main OBB file upload:",1500],["$ curl -XPOST -F 'uploadFile=@/path/to/your/OBB/exampleMain.obb'",1500],["https://distribute.dashboard.unity.com/developer/api/upload/12369536319506/1d1a4cxq774MzPKwsiHgXA?token=NWQxMWIzZmYyNjk0Njc2NGYwMDU0ZTA3ZTk3YjA2ZDA=&obbType=mainObb",1500],["Example patch OBB file upload:",1500],["$ curl -XPOST -F 'uploadFile=@/path/to/your/OBB/examplePatch.obb'",1500],["https://distribute.dashboard.unity.com/developer/api/upload/12369536319506/1d1a4cxq774MzPKwsiHgXA?token=NWQxMWIzZmYyNjk0Njc2NGYwMDU0ZTA3ZTk3YjA2ZDA=&obbType=patchObb",1500],["Finalizing game info",1500],["Before you can publish your game to a store on the UDP console, follow these steps:",1500],["Edit your game information, including:",1500],["Check the Sandbox Testing section to ensure testing was successful.",1500],["Upload your app signing private key",1500],["Indicate your use of ads.",1500],["Set a premium price (if applicable).",1500],["Localize your game information for additional languages (if applicable).",1500],["Finalize your IAP products.",1500],["Release your game revision.",1500],["You can then proceed to publish your game.",1500],["",1500],["Release your revision",1500],["To be able to publish your game to stores, you need to release it.",1500],["When you have saved your revision draft and are ready to publish it:",1500],["In the Game Info page, select RELEASE.A window opens to enter release information.",1500],["Enter Release notes and a Release label to keep track of your revision.",1500],["Select RELEASE.",1500],["Revisions are released versions of your game. This lets you store a record of changes to your app store submissions throughout time.",1500],["A revision’s key components are:",1500],["your game build (APK file)",1500],["your IAP catalog",1500],["your game metadata",1500],["If you change one of these elements, your store submission changes, and you must create a new revision. The revision system is incremental (+1 each time) and is managed by UDP. You cannot create custom revision numbers. Use revision notes and labels when you release a new revision to help you keep track of revisions.",1500],["Note**: If a draft revision has been saved on the UDP console but not released, you can’t push changes from the Editor that would increment the revision number.",1500],["Editing a revision",1500],["To overwrite an existing revision draft.",1500],["Choose the existing revision that you want to edit. Your new draft will inherit all the Game Information data of this revision.",1500],["Select Edit to make your changes.",1500],["Save your changes to create a revision draft.",1500],["To make this draft the latest revision, select RELEASE.",1500],["Enter release notes and a release label to keep track of your revisions.The revision number increments by one from the highest released revision. This becomes the latest Revision Draft",1500],["",1500],["Publishing your game to stores",1500],["Use the Publish panel to publish your game to stores. You can only publish released revisions to stores.",1500],["Follow these steps for each of the stores you want to submit your game to:",1500],["Sign up with the store.",1500],["Register your game with the store.",1500],["Submitting your game to the store.",1500],["Set Advanced settings.",1500],["Add company information.",1500],["When your setup is complete for all stores, select Publish.",1500],["For help publishing to specific stores, see Documentation > Partner Store Guides in the UDP console.",1500],["When you’ve published your game, you can monitor its performance in the Reporting Dashboard.",1500],["",1500],["Sign up with the store",1500],["To be able to publish your game to stores, you need to have an account with them.",1500],["To create an account with a store:",1500],["In the Publish page, select Sign up to <store name>.For some stores, you might be redirected outside the UDP console to complete your sign-up process with the store.",1500],["Follow the onboarding process for the store.",1500],["Once you’ve signed up with the store, you can register your game with it.",1500],["Note:** Only the Organization Owner and Manager can sign up with a store. See Organization-related permissions for more details.",1500],["Store accounts are per Unity Organization. Any games you publish via UDP are attached to the Organization from which you published. If you access the UDP console under a different Organization, you need to sign up again and create a different account. For more information on how to sign up to individual stores, see Documentation > Partner Store Guides in the UDP console.",1500],["",1500],["Register your game with the store",1500],["When you have signed up to a store, you can register your game with the store.",1500],["In the Publish page, select Register your game with <store name>.",1500],["Confirm the package name you want to register with the store and select REGISTER. Some stores ask for additional information when registering the game.",1500],["When your game is registered with the store, you can no longer change the package name for that store.",1500],["If you use UDP to generate the App signing private key, UDP generates a store-specific key to sign the repacked build. This may also affect third-party services integrated in your game. The store-specific certificate is available in the Advanced section when your game has been repacked.",1500],["Signing your repacked build in this way makes your game more vulnerable to Google Play Protect warnings.",1500],["",1500],["Submitting your game to the store",1500],["In the Publish tab, select the target step for the given store.",1500],["To publish your game to a store for the first time, select the checkbox for the store.",1500],["Select Submit to Store.UDP repacks and submits your game to the store.",1500],["UDP creates a separate build for each store that you publish to, containing only the store-specific SDK that’s required.",1500],["Each store-specific build is signed with a UDP certificate that is specific to your game and to each store. You can find and retrieve the certificate from the Advanced section of each store.",1500],["Additionally, UDP adds a store-specific suffix to the package name, if applicable. If this is required, the UDP console will display this information during the Register step.",1500],["Note**: If required, in the Publish page, you can configure:",1500],["The countries you want to publish your game to",1500],["Advanced settings for your game",1500],["Submitting different revisions to different stores",1500],["You can only submit the latest released revision to a store. If you intend to submit different revisions to different stores, Unity recommends you use the release labels and notes to identify your revisions.",1500],["Example: You want to submit one revision for StoreA and another revision for StoresBCD.",1500],["Create your revision (for example, revision 1) for StoreA. When releasing revision 1, write clear release notes and label your release StoreA.",1500],["Submit revision 1 to StoreA.",1500],["Create a new revision for StoresBCD. This revision draft will ultimately become revision 2. When releasing revision 2, write clear release notes and label your release StoresBCD.",1500],["Submit revision 2 to StoresBCD.",1500],["When you need to submit a new release to StoreA, you can do so based on your previous submission to that store. Your release labels will show that revision 1 was the last revision labelled StoreA.",1500],["Select revision 1, and edit it. This will create a revision draft based on revision 1. When you release it, it will become revision 3 (as revision 2 has already been released ).",1500],["When releasing revision 3, continue to use the StoreA label. Submit revision 3 to StoreA.",1500],["Repacking your game",1500],["If you’ve previously submitted your game to a store, you can repack the game without uploading a new IAP catalog. This uses the most recently submitted IAP catalog.",1500],["To repack without uploading a new IAP catalog, select the checkbox for the store.",1500],["Select Repack Game.",1500],["Before you submit your repacked build to stores, download the APK from the Status tab and test it to ensure your in-app purchases work as expected in the store’s commercial environment.",1500],["Note**: Changes you’ve made in the Advanced settings for a store are not overridden if you submit a new version of your game.",1500],["",1500],["Adding company information",1500],["To publish your game to the UDP stores, you need to create a company information profile. Stores display this information in the “About the developer” section of your game’s listing on their app store. You only need to do this once.",1500],["On the UDP console, select Settings > Company Info.",1500],["Enter and save your company information.",1500],["Publishing your game",1500],["Once you have completed all the above steps, publish your game.",1500],["In the Publish tab, select each store you want to submit this game revision to.",1500],["Select PUBLISH.",1500],["Only the latest released revision of your game is taken through the target steps selected for each store.",1500],["If there are any problems with your submission, these are displayed in the Detail section.",1500],["For stores that are only partially integrated with UDP, you must complete the submission on the store’s own developer console. To do this, select Go to Store next to the submitted revision. A tooltip explains which steps are still required. Follow the links and complete your submission on the store’s console.",1500],["",1500],["Archiving games",1500],["When you no longer need a game on the UDP console, you can archive it.",1500],["To archive your game:",1500],["Go to the My Games panel.",1500],["Select your filters for the game. By default, you can see all active games.",1500],["Hover over the game to display the More menu (⋮).",1500],["Select Archive.",1500],["When you have archived a game, you can then restore it or delete it from the UDP console.",1500],["Deleting games",1500],["To delete games you no longer need on the UDP console:",1500],["Follow the steps to archive the game.",1500],["Hover over the game to display the More menu (⋮).",1500],["Select Delete.",1500],["Note**: This permanently removes the game from the My Games tab of the UDP console, and all of the game's data from the Reporting Dashboard.",1500],["",1500],["Restoring archived games",1500],["To restore archived games:",1500],["Go to the My Games panel.",1500],["Select the archived filter in the selection criteria.",1500],["On the game you want to restore, select the More menu (⋮).",1500],["Select Restore.",1500],["UDP reference",1501],["",1501],["UDP console reference",1501],["This section provides a high-level overview of the UDP console’s information architecture.",1501],["The UDP console contains a navigation bar that lets you navigate between the following sections of the UDP console:",1501],["",1501],["Overview",1501],["The Overview tab of the UDP console contains useful information on how to use the UDP console, including:",1501],["Tutorial videos",1501],["A walkthrough guide to help you track your progress",1501],["Store-specific information",1501],["FAQ",1501],["",1501],["My Games",1501],["The My Games tab displays your UDP projects. From here you can switch between UDP projects, create a new game, and archive and restore games.",1501],["You can filter the list of games by status, for example:",1501],["All Games**",1501],["Published to UDP**",1501],["Submitted to stores**",1501],["Live on stores**",1501],["If you select Submitted to stores or Live on stores, you can also filter the list of games by store.",1501],["When you select a game, the following tabs are available:",1501],["Game Info",1501],["Publish",1501],["Status",1501],["Each game card displays the status of the game. The Published status indicates the game has completed the available steps to be repacked and submitted to the store.",1501],["Game Info",1501],["Use the Game Info page to view and edit your game information. See Entering game information on the UDP console",1501],["To view the Game Info page for a game, select the card in the My Games tab.",1501],["The Game Info page contains the following sections:",1501],["The Game Info page contains a progress bar to display how close you are to being able to release your game. Each section displays a Completed status when you have added the necessary info for that section.",1501],["",1501],["Game description",1501],["Use the Game Description section to enter information that the app stores will display for your game.",1501],["The table below describes a superset of all the participating stores’ requirements. Not all stores use all the properties described. The UDP console flags which fields are mandatory and which are optional. The UDP console also indicates any store-specific syntax requirements.",1501],["Property Description ",1501],["",1501],["Import from Google Play If you have already published your game on Google Play, you can import the basic information using your game’s Google Play URL.",1501],["Game Title The title of your game (this field is synced with the Editor). ",1501],["Genre Indicates the category that your game belongs to. You can choose from Action, Adventure, Arcade, Board, Card, Casino, Casual, Educational, Music, Puzzle, Racing, Role Playing, Simulation, Sports, Strategy, Trivia, and Word. ",1501],["Device Choose between Smartphone, Tablet, or Universal. ",1501],["Game Icon The game icon to display on the app stores. ",1501],["Short Description Short description (max 60 char) of your game to display on the app stores. ",1501],["Description Full-length description (4,000 char) of your game to display on the app stores. ",1501],["Game Banners An image used by stores to feature your game. For example, it can be a placement in a carousel. The landscape banner is mandatory, the portrait banner is optional. ",1501],["Keywords Define up to 4 keywords (30 char each). These are used for search purposes in the app stores. ",1501],["Feature Video Add a video trailer for your game.Note: For videos, some stores only accept MP4 files while others only accept a Youtube link. Unity recommends you upload both. ",1501],["Screenshots Add screenshots of your game, including the cover image (thumbnail) to lay over the MP4 video when it's not playing.Add at least four images per orientation that you use.Some app stores only accept either portrait or landscape images, but not both. If you upload both portrait and landscape images to UDP, select your preferred orientation in the Preference field. UDP will inform you if the screenshots don't meet the stores’ requirements. ",1501],["Use these screenshots for all languages Enable this toggle to use the same screenshots for all languages. Disable this toggle if you want to add language-specific screenshots. ",1501],["Preference Certain stores only accept portrait or landscape images. For such stores, specify which orientation of image to use. ",1501],["Ratings Select the audience which the game is suitable for. ",1501],["You can specify metadata for each of your supported languages. To add new languages, select the language dropdown while in edit mode and select Manage Languages.",1501],["",1501],["Binary",1501],["Use the Binary section to upload your APK file and OBB files, or AAB files:",1501],["Property Description ",1501],["",1501],["APK Files (or AAB) Your UDP game build. If you pushed your UDP build via Cloud Build, you don’t need to upload it again.For UDP to accept your APK file, the APK file:- Must contain a versionName- Must have an Initialize() method- Must have a Purchase() method (for games with IAP)If you upload a new APK version which contains a different package name, you will receive an error. This also prevents publishing the new APK version.To upload an Android App Bundle (AAB) file, select the Convert from AAB file option. UDP converts AAB files to APK for publishing to stores. ",1501],["Version code This field is only displayed once you’ve uploaded your game to UDP. ",1501],["Minimum Android Version Support Minimum supported Android version for your game. This field is only displayed once you’ve uploaded your game to UDP. ",1501],["What's New Describe what’s changed with this version of your game. UDP publishes this information in the stores.This field is only displayed once you’ve uploaded your game to UDP. ",1501],["OBB File (Main) The main extension file for additional resources that your game or app might need. ",1501],["OBB File (Patch) Optional file to make small updates to the main expansion file. ",1501],["Does your game use Google Play Services? Knowing about your Google Play Services usage helps UDP better guide you during the submission stage. ",1501],["OBB files aren't pushed during a CloudBuild deployment, so if your game uses them you must upload them manually to the UDP console.",1501],["Note**: You can only change the APK files and OBB files in the default language view (English).",1501],["",1501],["Ads",1501],["The table below describes the Ads section.",1501],["Property Description ",1501],["",1501],["Does your game contain ads Select whether or not your game contains ads. This information is useful for UDP to better guide you during submission. ",1501],["What ad mediation solutions does your game use? (Optional) If your game contains ads, select which mediation solutions your game uses. ",1501],["What ad networks does your game use? (Optional) If your game contains ads, select which ad networks your game uses. ",1501],["Certain stores expect you to implement their proprietary ad network in games you submit to them.",1501],["UDP asks if your game contains ads to better inform your submissions to the stores, especially if UDP can ascertain that your submission will be rejected from a store because of this.",1501],["Stores which might reject your game display a warning icon in the Publish section, and a tooltip to explain the issue that might occur.",1501],["UDP otherwise doesn't modify your game’s ad implementation in any way.",1501],["Note**: Tests of the most common mediation layers and ad networks indicate that games repacked for the UDP stores generally have no problem receiving ad campaigns. Feel free to contact UDP Support about your ad setup and its suitability for distribution via UDP. Make sure you mention which mediation SDK and ad networks your game uses, to get a better-informed answer faster.",1501],["",1501],["Premium price",1501],["The Premium price is the price it costs players to download your game.",1501],["Property Description ",1501],["",1501],["Manage amounts and currencies Set the price of the game in USD.Select Convert to automatically convert the USD price into the other listed currencies. You can also edit prices manually for specific currencies. ",1501],["Note**: You can only submit premium games to stores which support premium games.",1501],["",1501],["In-App Purchases",1501],["Use the In-App Purchases section to add and manage IAP items.",1501],["If using the UDP package, UDP automatically keeps your game’s IAP Catalog synchronized between the Unity Editor and the UDP console.",1501],["Property Description ",1501],["",1501],["Search box Filter the list of IAP items by text. ",1501],["Type dropdown Filter the list of IAPs by type, that is, consumable or non-consumable. ",1501],["Sort dropdown Choose how to sort the list of IAP items. ",1501],["Add Item Click to add a new IAP item. This opens a window to enter the IAP details. ",1501],["Manage amounts and currencies Click to set prices for additional currencies. ",1501],["Convert Converts the USD price of your IAP item into global currencies. This overwrites any manually set prices for other currencies. ",1501],["Favourite Currencies Select to open the Favourite currencies window. To set currencies as favourite currencies, select the star icon next to their currency code. This pins the currency to the top of the list. Deselect the star to unpin. ",1501],["IAP Item window",1501],["Use the IAP Item window to add and edit details for IAP products. To open this window select Add Item.",1501],["The table below describes the windows of the Add IAP Item window.",1501],["Field Description ",1501],["",1501],["Product ID The unique ID used to identify the IAP product.Product IDs must follow these requirements:- Start with a letter or a digit- Contain only letters, digits, dots (.) and underscores (_)- Must not use capitalized letters ",1501],["Product Name The name of the IAP product. ",1501],["Currency Displays the currency the price is shown in. ",1501],["Price The price of the IAP product in USD.You must specify a price to enable players to purchase products in your game. ",1501],["Consumable Select this option for consumable IAP items. ",1501],["Description A short description of the IAP product. ",1501],["",1501],["Sandbox Testing",1501],["The Sandbox Testing section displays the test status for your game. Use this section to create user credentials for testing in the sandbox environment and view the status of the tests.",1501],["The table below describes the fields of this section.",1501],["Field Description ",1501],["",1501],["Test status Displays the test status for the game. ",1501],["UDP Initialization Displays the test status for the Initialization check. This checks to ensure the Initialize() method is called (for all games). ",1501],["IAP Transaction Displays the test status for the IAP transactions check. Purchase() method is called (for IAP games only) ",1501],["Sandbox Test Account The email address for the sandbox test account. This is used as the login name for the UDP sandbox environment only. ",1501],["Password The password for the test account. ",1501],["",1501],["App Signature",1501],["UDP uses an App-signing private key to sign the repacked APK files that are submitted to the stores.",1501],["Unity recommends that you select Export and upload the key and certificate and use your own App signing private key. If your game is released on Google Play, use the same key as on Google Play. This significantly decreases the chance of Google Play Protect flagging your game when users install it.",1501],["Note**: If your game is flagged, you can appeal to Google here.",1501],["The table below describes the App Signature section of the Game Info tab.",1501],["Property Description ",1501],["",1501],["Export and upload the key and certificate (recommended) UDP uses the App signing private key you upload to sign the repacked builds. If you select this option, it applies to all stores you submit your game to. ",1501],["Let UDP create and manage App signing private key UDP generates a different App signing private key for each store the game is repacked for.This option leaves your game more vulnerable to Google Play Protect warnings. ",1501],["Note**: App signature generation is only supported for Android SDK Version 18 and above. If your game uses a lower SDK version than this, use the RSA algorithm signature or increase the game’s Minimum API Level.",1501],["Changing keys",1501],["You can switch from using the UDP key to your own key at any time. This change only applies for stores that the game hasn't been repacked for (and therefore signed). If you have previously repacked for a store using the UDP key, that store will always use the UDP key.",1501],["You can only switch from using your own key to the UDP key if you haven't repacked your game (and your own key) for any store.",1501],["UDP-generated keys",1501],["UDP uses company information to generate a keystore for the repacked APK files when the following conditions are met:",1501],["The APK file uploaded by the developer doesn't contain the keystore file.",1501],["The game hasn't been repacked in the partner store.",1501],["If these conditions aren't met, UDP uses an existing UDP keystore if available, or it uses the developer information to generate a new signature file.",1501],["",1501],["Integration Information",1501],["This information is synced with the Editor. The following fields are editable:",1501],["Field Description ",1501],["",1501],["Unity Project ID The Unity project ID linked to the UDP client.To unlink a Unity project from the UDP client, delete the ID in this field and select Save.Note: Only owners and managers can edit this field. ",1501],["Callback URL URL of the game server. UDP uses this to send notifications for payment results. ",1501],["Release window",1501],["The Release window lets you release versions of your game. This is displayed when you select Release in the Game Info page.",1501],["The Release window contains fields to specify the version’s:",1501],["Tag",1501],["Release notes",1501],["The tag and release notes of all your revisions are visible in:",1501],["The Game Info section, when expanding the Revision drop-down",1501],["The Status section, which is organized by Release",1501],["Note**: You can only publish the latest revision to the stores.",1501],["Learn more about:",1501],["Publish Panel",1501],["Use the Publish panel to sign up to stores and publish your games. Each store has its own section in the page.",1501],["The table below describes the Publish page.",1501],["Field Description ",1501],["",1501],["Publish Publishes the selected games. ",1501],["Only show stores that accept the game’s pricing model Hides stores that don’t support your game’s pricing model from the Publish page. ",1501],["All Stores Selects all visible stores for publishing. ",1501],["Store checkbox Select the checkbox for a store to only publish to selected stores. ",1501],["Premium The Premium label is displayed for stores which support premium games. ",1501],["IAP The IAP label is displayed for stores which support IAP. ",1501],["Info icon The info icon states whether the store is fully or partially integrated with UDP. ",1501],["Sign up Sign up to the selected store. ",1501],["Countries Select Countries to choose which countries you want to publish your game to.This opens a window containing a list of countries which the store supports. Select the checkboxes to enable your game for a country and select Save.This option is only displayed when you’ve signed up for the store. ",1501],["Advanced Select to configure advanced properties for a specific store.This option is only displayed when you’ve signed up for the store. ",1501],["",1501],["Target steps",1501],["In the Publish tab, each store contains a dropdown to let you select the target step for the given store. The following options are available:",1501],["Target step Description ",1501],["",1501],["Repack Game UDP unpacks the generic UDP build and repacks your game with the SDK from the selected store. This uses the IAP catalog from the last build you submitted to the store. ",1501],["Submit to Store UDP repacks and submits your game, its metadata and its IAP catalog to the production environment of the selected stores.The first time you publish your game, you must submit it to create an IAP catalog on the stores’ servers. ",1501],["",1501],["Advanced settings",1501],["To configure store-specific settings before you submit your game, select Advanced for the store in the Publish tab.",1501],["You can configure the following properties specifically for a store:",1501],["Property Function Affected store ",1501],["",1501],["Target SDK The version of the store SDK that you publish your game to. By default, UDP repacks for the latest version of the store SDK. All ",1501],["CP ID Merchant ID on the Huawei AppGallery Connect console. Huawei ",1501],["Product ID Product ID on the Huawei AppGallery Connect console. Huawei ",1501],["App ID Application ID on the Huawei AppGallery Connect console. Huawei ",1501],["Configuration version on the Huawei AppGallery Connect console. Version of the game Huawei ",1501],["PubKey Public key on the Huawei AppGallery Connect console. Huawei ",1501],["App Secret App secret on the Huawei AppGallery Connect console. Huawei ",1501],["privacyPolicy Privacy statement address on the Huawei AppGallery Connect console. Huawei ",1501],["Premium Price The price players will pay to download your game. All stores which support premium games ",1501],["In-App Purchases The name of your IAP items. All ",1501],["Approval Number from SAPPRFT (aka ISBN) Enter the SAPPRFT approval number for games you publish in China. If you don’t have a publishing licence for this, deselect China from the country list. XiaomiHuawei ",1501],["Registration Number from MCPRC Ministry of Culture Record number for games you publish in China. Huawei ",1501],["Launch Manually Set to launch the game manually on the store. Huawei ",1501],["Launch on Specify a date and time to launch your game on the store. Huawei ",1501],["Renew authentication Select to renew your authentication token for the selected store. Huawei ",1501],["Package Name Displays the name of the package. This can't be edited once it’s been registered. QooAppViveport ",1501],["URL for Privacy Policy Enter the URL of your game’s privacy policy. Viveport ",1501],["URL for EULA/Terms of Use Enter the URL of your game’s EULA/Terms of use. Viveport ",1501],["",1501],["Detail",1501],["If your submission is missing anything, the UDP console displays error or warning messages. Select Detail to expand for more information on the problem.",1501],["Errors are displayed in a red panel. You must fix errors before you can submit your game. Select Modify to go to the erroneous area to fix the issue.",1501],["You can also choose to only submit to stores where there are no errors.",1501],["Warnings are displayed in a yellow panel. You can dismiss the warnings you decide to ignore.",1501],["Status panel",1501],["When UDP starts processing your game, visit the Status panel to monitor progress and check the submission history of your game.",1501],["The Status panel displays an overview of your game's history.",1501],["Field Description ",1501],["",1501],["Revisions repacked Total number of repacked APK builds created with UDP.Note: If a game has been repacked three times for the same stores, this counts as three. ",1501],["Revisions submitted Total number of submissions made via UDP.Note: If a game was submitted five times to a store, this counts as five. ",1501],["Submissions accepted Number of submissions that have been accepted to app stores. ",1501],["Submissions rejected Number of revisions that have been rejected by app stores. ",1501],["For each game revision, the Status panel displays the following details:",1501],["Field Description ",1501],["",1501],["Store The store(s) that the game was submitted to. ",1501],["Status The status of the revision.Not all stores can provide visibility until 'Live'. The Status section only provides the information it can get from the store. ",1501],["Countries The number of countries which your game is enabled for, for each store. Select the number in this column to view the countries. ",1501],["Action Perform additional actions, such as download revisions of your game or go to store to complete publishing steps. ",1501],["Your game can have the following statuses:",1501],["Repacked**: your game was successfully repacked with the SDK of the selected store",1501],["Published**: your game has passed all the steps required for the store when repacking and submitting to that store",1501],["Pending**: your game is being repacked with the SDK of the selected store",1501],["Failed**: your game couldn't be repacked with the SDK of the selected store",1501],["Canceled**: your game submission was cancelled by you or someone from your Organization",1501],["",1501],["Store Sign-Ups",1501],["The Store Sign-Ups tab displays information about the stores you can distribute your game to using UDP.",1501],["Select the More link for more information on a store, such as overview, FAQs, and other useful links specific to each store.",1501],["For an overview of information for all stores, select Compare stores to open the Partner Stores cheatsheet. This compares details for all stores, including data such as number of users, countries in which the store is available, and whether or not the store supports premium games.",1501],["",1501],["Reporting dashboard",1501],["The Reporting tab displays performance information for your published games.",1501],["Monitor the performance of your published games from the Reporting dashboard, which is accessible from the top navigation bar.",1501],["You can filter the information presented on the Reporting dashboard by game and store.",1501],["If you don’t select anything in the All Games and All Stores filters for the whole Reporting dashboard, you can view breakdowns on an individual chart level (where applicable). On supported charts, select the by store or by game filters to view performance on specific stores or for individual games.",1501],["The Reporting dashboard is divided into five panels, all subject to the Games and Stores filters. For the panels which are subject to the date filter, you can export chart data as CSV files and images. To download the data as a CSV file or image, select the corresponding icon for the chart.",1501],["Note**: The Huawei AppGallery only returns revenue information to UDP if you’ve set up server-side validation using QueryOrder. If you used callback notifications, no revenue-related charts or information is available for Huawei.",1501],["Metrics and definitions",1501],["The Reporting dashboard tracks the following data from the UDP stores where your games are published:",1501],["Metric Description",1501],["",1501],["Gross revenue Amount collected from players in USD (for example, if IAP price= 0.99 then= $0.99) ",1501],["Players The number of unique users who downloaded and started the game. This is calculated by unique devices. ",1501],["Spenders The number of paying players. That is, the number of unique users who have made at least one successful payment. ",1501],["Days since 1st activity The number of days since a game reached 10 players on an app store. ",1501],["New Players Number of players who started the game for the first time during the selected time period. ",1501],["DAU Daily active users. The number of unique users who launched the game at least once on that day. ",1501],["MAU Monthly Active Users. The number of unique users who launched the game at least once during the last 30 days. ",1501],["IAP Revenue Gross revenue from IAP, in USD. ",1501],["Average Revenue per Transaction This is defined as Revenue / Number of Transactions, in USD. ",1501],["ARPPU Average revenue per paying user, in USD. This is defined as Gross Revenue / Number of Paying Players. ",1501],["ARPU Average revenue per user, in USD. This is defined as Gross Revenue / Number of Players. ",1501],["Spender Conversion Rate This is defined as Number of Paying Players / Number of Players. ",1501],["Transactions Number of successful transactions which resulted in a payment (OrderID was successful and verified by the UDP server). ",1501],["Revenue by IAP Breakdown of gross revenue by IAP, in USD. ",1501],["Transaction Volume by IAP Breakdown of transactions by IAP. ",1501],["Premium Revenue Gross revenue generated by premium games, in USD. ",1501],["Sessions Number of times the game was launched, on any device. ",1501],["Day 1 Retention (%) This is defined as Percentage of Players that are still active 1 day after their first game launch. ",1501],["Day 7 Retention (%) This is defined as Percentage of Players that are still active 7 days after their first game launch. ",1501],["Day 30 Retention (%) This is defined as Percentage of Players that are still active 30 days after their first game launch. ",1501],["Note:** The Reporting dashboard contains estimated data; you can get exact numbers directly from the stores. The data shown is in UTC time and is until the previous day to display the most accurate, complete data.",1501],["All Time",1501],["This panel displays the following lifetime metrics:",1501],["Gross revenue (in USD)",1501],["Players",1501],["Spenders",1501],["Days since 1st activity",1501],["Yesterday",1501],["This panel displays the following metrics from the last full 24h day (basis UTC):",1501],["Gross revenue (in USD) with $ or % comparison to the previous day",1501],["New players",1501],["DAU with % comparison with average DAU value of last 7 days",1501],["MAU with % comparison with average MAU value of last 7 days",1501],["IAP Performance",1501],["This panel displays the following metrics for the selected date range:",1501],["IAP Revenue",1501],["Average Revenue per Transaction",1501],["ARPPU",1501],["ARPU",1501],["Spender Conversion Rate",1501],["Transactions",1501],["Revenue by IAP. You can view up to 5 IAPs in the chart, and select which ones to view via the drop-down selector. This chart contains presets for:",1501],["Most revenue",1501],["Most transactions",1501],["Highest price points",1501],["Lowest price points",1501],["Transaction Volume by IAP. You can view up to 5 IAPs in the chart, and select which ones to view via the drop-down selector. This chart contains presets for:",1501],["Most revenue",1501],["Most transactions",1501],["Highest price points",1501],["Lowest price points",1501],["Premium Revenue",1501],["This panel displays, for the selected date range:",1501],["Premium Revenue (revenue from paid downloads)",1501],["Game Health",1501],["This panel displays the following metrics for the selected date range:",1501],["DAU - per day and average over the period",1501],["MAU - per day and average over the period",1501],["New Players - per day and total over the period",1501],["Sessions - per day and total over the period",1501],["Day 1 Retention Rate - per day and average over the period",1501],["Day 7 Retention Rate - per day and average over the period",1501],["Day 30 Retention Rate - per day and average over the period",1501],["",1501],["Documentation",1501],["The Documentation tab displays useful information to help you get started, including:",1501],["Links to the UDP documentation",1501],["Guides to different app stores",1501],["Video tutorials",1501],["",1501],["Resources",1501],["The Resources tab provides useful information to help you get started, including:",1501],["Getting Started Guide",1501],["Tutorial videos",1501],["Store Guides",1501],["Knowledge base",1501],["Release notes",1501],["",1501],["Settings",1501],["Company Information",1501],["Use the Company Information window to add information to display for your company in the app stores.",1501],["On the UDP console, choose your organization and select the pencil icon to edit the profile.",1501],["Field Description ",1501],["",1501],["Company Name The name of your company as you want players to see it. ",1501],["Company Icon Upload an image to display for your company. ",1501],["Location The location you want to define as your studio’s headquarters. ",1501],["Company Size Use the drop-down to specify the number of people in your company. ",1501],["Official Website The official website of your company. ",1501],["Support Email Address The support email that players can use to contact your company. ",1501],["Introduction Any additional information about your company / studio. ",1501],["",1501],["Developer API",1501],["The Developer API page lets you generate and manage authentication tokens for use with the UDP API. You can use the UDP API to upload binary files to the UDP console. See Managing and publishing your game on the UDP console",1501],["The table below describes the Developer API page.",1501],["Field Description ",1501],["",1501],["Token The authentication token to use to let the UDP API access the UDP console. Select COPY to copy the token to your clipboard.",1501],["Expiry date The expiry date of the authentication token, if specified. ",1501],["Operations Edit or delete existing tokens. ",1501],["NEW TOKEN Select to create a new token. ",1501],["",1501],["CSV reference",1501],["Data values for CSV files",1501],["Each row in a CSV file of In-App Purchases can contain the following values. Don't pass empty values.",1501],["Field Description ",1501],["",1501],["product_id Represents the ID of a unique IAP product. product_id needs to start with a lowercase letter or a digit and must be composed of only lowercase letters (a-z), digits (0-9), underscores (_), and periods (.) ",1501],["language; product_name; description When setting the language value, use the language code listed in TABLE A.UDP uses en-US as the default language.Use semicolon(;) to separate language, product_name and description.To include localized versions of the item's product name and description, list the default language, product_name, and description, followed by the languages, product_names, and descriptions for each locale. In the following example, the product has en-US (ENGLISH) as the default language and zh-CN (CHINESE) as a localization:en-US;Product 1;This is my first product; zh-CN; 产品1; 产品描述1.Note: UDP only imports the fields for languages you've defined in the Game Info section of the UDP Console. To support multiple languages, define them on the UDP Console before you import your IAP catalog. ",1501],["consumable Set to TRUE or FALSE (case insensitive) to define whether or not the IAP product is consumable. ",1501],["auto_convert_prices If true, UDP automatically converts the price to other currencies. To exclude a currency from conversion, specify the currency and its price in the currency;price field. ",1501],["currency; price When setting the currency value, use the currency code listed in TABLE B. The price must be positive. The default currency is USD. The price of each IAP product must immediately follow its corresponding currency. For example: USD;0.99;CNY;6 ",1501],["TABLE A - Language codes**",1501],["Language Code ",1501],["",1501],["AFRIKAANS af ",1501],["AMHARIC am ",1501],["BULGARIAN bg ",1501],["CATALAN ca ",1501],["CHINESE zh-CN ",1501],["CHINESE (HONG KONG) zh-HK ",1501],["CHINESE (TAIWAN) zh-TW ",1501],["CROATIAN hr ",1501],["CZECH cs ",1501],["DANISH da ",1501],["DUTCH nl ",1501],["ENGLISH (UK) en-GB ",1501],["ENGLISH en-US ",1501],["ESTONIAN et ",1501],["FILIPINO fil ",1501],["FINNISH fi ",1501],["FRENCH (CANADA) fr-CA ",1501],["FRENCH fr-FR ",1501],["GERMAN de ",1501],["GREEK el ",1501],["HINDI hi ",1501],["HUNGARIAN hu ",1501],["INDONESIAN id ",1501],["ITALIAN it ",1501],["JAPANESE ja ",1501],["KOREAN ko ",1501],["LATVIAN lv ",1501],["LITHUANIAN lt ",1501],["MALAY ms ",1501],["NORWEGIAN no ",1501],["POLISH pl ",1501],["PORTUGUESE (BRAZIL) pt-BR ",1501],["PORTUGUESE (PORTUGAL) pt-PT ",1501],["ROMANIAN ro ",1501],["RUSSIAN ru ",1501],["SERBIAN sr ",1501],["SLOVAK sk ",1501],["SLOVENIAN sl ",1501],["SPANISH (LATIN AMERICA) es ",1501],["SPANISH es-ES ",1501],["SWAHILI sw ",1501],["SWEDISH sv ",1501],["THAI th ",1501],["TURKISH tr ",1501],["UKRAINIAN uk ",1501],["VIETNAMESE vi ",1501],["ZULU zu ",1501],["TABLE B - Currency codes**",1501],["Code Code Code ",1501],["",1501],["AED IDR PEN ",1501],["ARS ILS PHP ",1501],["AUD INR PKR ",1501],["BGN IQD PLN ",1501],["BHD ISK QAR ",1501],["BND JOD RON ",1501],["BIF JPY RUB ",1501],["BRL KES SAR ",1501],["CAD KHR SDG ",1501],["CHF KRW SEK ",1501],["CNY KWD SGD ",1501],["CZK LAK THB ",1501],["DKK LKR TND ",1501],["DZD LYD TRY ",1501],["EGP MAD TWD ",1501],["EUR MMK TZS ",1501],["GBP MXN USD ",1501],["GHS MYR UYU ",1501],["HKD NOK VND ",1501],["HRK NZD ZAR ",1501],["HUF OMR ",1501],["Example 1",1501],["product_id,language; product_name; description,consumable,auto_convert_prices,currency; price",1501],["com.mystudio.mygame.product1,en-US;Product 1;This is my first product; zh-CN; 产品1; 产品描述1,TRUE,TRUE,USD;0.99;CNY;6;EUR;0.79",1501],["com.mystudio.mygame.product2,en-US;Product 2;This is my second product; zh-CN; 产品2; 产品描述2,FALSE,FALSE,USD;1.99;CNY;12;EUR;1.59",1501],["com.mystudio.mygame.product3,en-US;Product 3;This is my third product; zh-CN; 产品3; 产品描述3,TRUE,TRUE,USD;4.99;CNY;30;EUR;3.99",1501],["Testing your game in the UDP sandbox",1502],["Before you can release your game for the first time and repack for the app stores, test your game in the sandbox environment. You must:",1502],["Initialize UDP in the sandbox at least once (for all games)",1502],["Call the Initialize() method",1502],["Complete an IAP purchase in the sandbox at least once (if your game has IAPs)",1502],["Call the Purchase() method",1502],["This is to ensure that the UDP implementation works for a simple and nominal case. Unity recommends you test your UDP methods more extensively.",1502],["After your first release, you do not need to retest in the sandbox to release new revisions of your game on UDP.",1502],["Note**: If you test your game in the Unity Editor Play mode, all IAP transactions are successful and are automatically consumed. This is not connected to the UDP console and is not sufficient to clear sandbox testing.",1502],["To test your game in the sandbox:",1502],["In the Unity Distribution Portal tab of the Project Settings window, go to the UDP Sandbox Test accounts section and create login credentials for the sandbox environment.If you have already added credentials in the UDP console, you can use those.",1502],["Run your game on an Android device or emulator.When your game launches it should call the Initialize method, which displays the login screen automatically in the sandbox environment. If you didn’t call Initialize on game launch, trigger the necessary step to call Initialize.",1502],["Enter your login credentials for the sandbox test account.This is all that’s required to check that the game initializes.",1502],["For IAP games, make a purchase to test your IAP purchases.No real transaction is made in the sandbox environment.",1502],["When each test is successful:",1502],["The sandbox environment displays a toast notification",1502],["The UDP sandbox updates the Sandbox Testing section of the UDP console to display a green Tested status for the corresponding test",1502],["When all required tests are successful, the left panel of the Game Info page displays a green tick to confirm you’ve cleared sandbox testing. You can now complete any remaining steps on your Game Info page to release your first revision and submit it to stores.",1502],["The sandbox login credentials only work with the generic UDP build for the sandbox environment. When UDP repacks your build for the real app stores, UDP removes the sandbox environment and login page, and patches in the store-specific SDK. The store-specific SDK in the build ensures IAP transactions work with that store’s payment system.",1502],["Note**: Sandbox mode also supports server-side validation.",1502],["Troubleshooting",1502],["Check your UDP and/or IAP implementation if any IAP-related issues arise, such as:",1502],["No login screen appearing",1502],["No IAP products retrieved",1502],["Unresponsive purchase buttons",1502],["Inability to complete a purchase",1502],["For further troubleshooting information, check the UDP Package documentation or contact the UDP support team via the “Contact Support” link on the UDP Console.",1502],["UDP SDK data collection",1503],["For various app stores, app publishers must define what data their apps collect, including the data collected by integrated third-party SDKs such as UDP. For your convenience, UDP provides information on its data collection practices below.",1503],["Important**: The data disclosures below are for the UDP SDK only. You are also responsible for providing any additional disclosures for your app, including other third-party SDKs used in your app.",1503],["Contact info data Collected? Linked to user? Purpose ",1503],["",1503],["NameFor example, first or last name. No Not applicable Not applicable ",1503],["Email AddressIncluding, but not limited to a hashed email address. No Not applicable Not applicable ",1503],["Phone NumberIncluding, but not limited to a hashed phone number. No Not applicable Not applicable ",1503],["Physical AddressSuch as home address, physical address, or mailing address. No Not applicable Not applicable ",1503],["Other User Contact InfoAny other information that can be used to contact the user outside the app. No Not applicable Not applicable ",1503],["Health and Fitness data Collected? Linked to user? Purpose ",1503],["",1503],["HealthHealth and medical data, including but not limited to from the Clinical Health Records API, HealthKit API, MovementDisorderAPIs, or health-related human subject research or any other user-provided health or medical data. No Not applicable Not applicable ",1503],["FitnessFitness and exercise data, including but not limited to the Motion and Fitness API. No Not applicable Not applicable ",1503],["Financial data Collected? Linked to user? Purpose ",1503],["",1503],["Payment InfoSuch as form of payment, payment card number, or bank account number. No Not applicable Not applicable ",1503],["Credit InfoSuch as a credit score. No Not applicable Not applicable ",1503],["Other Financial InfoSuch as salary, income, assets, debts, or any other financial information. No Not applicable Not applicable ",1503],["Location data Collected? Linked to user? Purpose ",1503],["",1503],["Precise LocationInformation that describes the location of a user or device with the same or greater resolution as a latitude and longitude with three or more decimal places. No Not applicable Not applicable ",1503],["Coarse LocationInformation that describes the location of a user or device with lower resolution than a latitude and longitude with three or more decimal places, such as approximate location services. Yes Not applicable AnalyticsNote: For example, Unity collects country-level information for analytics. ",1503],["Sensitive data Collected? Linked to user? Purpose ",1503],["",1503],["Sensitive InfoSuch as racial or ethnic data, sexual orientation, pregnancy or childbirth information, disability, religious or philosophical beliefs, trade union membership, political opinion, genetic information, or biometric data. No Not applicable Not applicable ",1503],["Contact data Collected? Linked to user? Purpose ",1503],["",1503],["ContactsSuch as a list of contacts in the user’s phone, address book, or social graph. No Not applicable Not applicable ",1503],["User content Collected? Linked to user? Purpose ",1503],["",1503],["Emails or Text MessagesIncluding subject line, sender, recipients, and contents of the email or message. No Not applicable Not applicable ",1503],["Photos or VideosThe user's photos or videos. No Not applicable Not applicable ",1503],["Audio DataThe user's voice or sound recordings. No Not applicable Not applicable ",1503],["Customer SupportData generated by the user during a customer support request. No Not applicable Not applicable.(Players do not make CS requests to UDP) ",1503],["Other User ContentAny other user-generated content. No Not applicable Not applicable ",1503],["Browsing data Collected? Linked to user? Purpose ",1503],["",1503],["Browsing HistoryInformation about the content the user has viewed that is not part of the app, such as websites. No Not applicable Not applicable ",1503],["Search data Collected? Linked to user? Purpose ",1503],["",1503],["Search HistoryInformation about searches performed in the app. No Not applicable Not applicable ",1503],["Identifier data Collected? Linked to user? Purpose ",1503],["",1503],["User IDSuch as screen name, handle, account ID, assigned user ID, customer number, or other user- or account-level ID that can be used to identify a particular user or account. Yes (depends on which store the game is repacked for) Linked to user App FunctionalityFor certain UDP stores, UDP will collect the User ID (returned by login method of the store's SDK) and keep it for further App Functionality. For other stores the login method is not required and UDP doesn't collect such data. ",1503],["Device IDSuch as the device's advertising identifier, or other device-level ID. Yes Linked to user Analytics ",1503],["Purchase data Collected? Linked to user? Purpose ",1503],["",1503],["Purchase HistoryAn account’s or individual’s purchases or purchase tendencies. Yes Linked to user Tracking and analyticsNote: For example, Unity collects in-app purchase information to verify purchases. But does not use it to analyze any specific user's purchase tendencies ",1503],["Usage data Collected? Linked to user? Purpose ",1503],["",1503],["Product InteractionSuch as app launches, taps, clicks, scrolling information, music listening data, video views, saved place in a game, video, or song, or other information about how the user interacts with the app. Yes Not applicable Analytics ",1503],["Advertising DataSuch as information about the advertisements the user has seen. No Not applicable Not applicable ",1503],["Other Usage DataAny other data about user activity in the app. No Not applicable Not applicable ",1503],["Diagnostic data Collected? Linked to user? Purpose ",1503],["",1503],["Crash DataSuch as crash logs. No Not applicable Not applicable ",1503],["Performance DataSuch as launch time, hang rate, or energy use. No Not applicable Not applicable ",1503],["Other Diagnostic DataAny other data collected for the purposes of measuring technical diagnostics related to the app. No Not applicable Not applicable ",1503],["Other data Collected? Linked to user? Purpose ",1503],["",1503],["Other Data TypesAny other data types not mentioned. Yes Not applicable AnalyticsNote: For example, Unity collects data like device language, make, model, screen size, and connection type, to be able to understand the overall distribution of devices within a store channel ",1503],["Using UDP with other services",1504],["Google Play games services in UDP builds",1504],["Overview",1504],["Implementing Google Play games services in your Android games lets you leverage Google’s service layer for features such as achievements and leaderboards. If your game implements Google Play game services, additional configuration is required to support the builds that UDP creates for different stores.",1504],["When your game invokes Google Play games services, Google Play games services checks that the following details match the information registered on the Google Play Console:",1504],["The application’s package name",1504],["The certificate the application was signed with",1504],["If they don’t match, the player can’t log into the application with Google Play games services.",1504],["For certain stores that you publish your game to via UDP, UDP adds a store-specific suffix to the package name. Additionally, if you don’t use your own private key to generate the certificate, UDP generates a certificate for each repacked build. These events would cause your certificate and/or package name to no longer match the information on the Google Play Console. This would prevent users from logging into the game with Google Play game services.",1504],["The following section explains how to resolve this issue.",1504],["Configuring Google Play games services for UDP builds",1504],["This section explains how to link your UDP versions to a Google Play application so that Google Play game services can work on all of them.",1504],["In the Google Play Console, go to the target app.",1504],["Go to Play Games Services > Setup and management > Configuration.",1504],["If your Google Play game has Google Play games services implemented, your game will already be linked to a Google Play games services project. In this case:",1504],["Select Use an existing Play Games Services project.",1504],["Select your game project and select Use.",1504],["Follow the steps in Link the UDP apps to your game service.",1504],["If your Google Play game doesn’t have Google Play games services implemented:",1504],["In the Play Games Services setup page, select Yes, my game already uses Google APIs or No, my game doesn’t use Google APIs.",1504],["Follow the steps in Creating and linking a Google Play games services project.",1504],["",1504],["Creating and linking a Google Play games services project",1504],["This section explains how to create a Google Play games services project and link it to a new or existing cloud project.",1504],["If you selected Yes, my game already uses Google APIs in the Play Games Services setup page:",1504],["Select a cloud project.",1504],["Select Use to create a new Play Games Services project and link it to your existing cloud project.",1504],["If you selected No, my game doesn’t use Google APIs in the Play Games Services setup page:",1504],["Enter a game name.",1504],["Select Create to create a new Play Games Services project and link it to a new cloud project.",1504],["When you create a new Play Games Services project, the Add credential link is disabled.",1504],["Select Configure OAuth consent screen.",1504],["In the Play Games Services configuration screen, select Refresh.The Add credential option is now enabled.",1504],["Select Add credential.This opens the Add credential page.",1504],["In the Add credential page:",1504],["Select Android as the Type.",1504],["Set Enable anti-piracy to Off. This lets users access your game if they have installed it from a different app store than Google Play.",1504],["In the Authorization section, select Create OAuth client. This opens a popup.",1504],["Select Create OAuth Client ID and use the details from the popup to complete the form.",1504],["When you’ve completed the above steps, your Google Play game is linked to its Google Play games services. The next step is to link your UDP builds to the games services.",1504],["",1504],["Linking UDP apps to your games services",1504],["When you have linked your app to Google Play games services you can link the other (UDP) apps to the games services.",1504],["In the Google Play Console, select Play Games Services > Setup and management > Configuration.",1504],["In the Play Games Services configuration page, select Add credential.",1504],["In the Add credential page:",1504],["Select Android.",1504],["Set Enable anti-piracy to off. This lets users access your game if they have installed it from a different app store than Google Play.",1504],["In the Authorization section, select Create OAuth client. This opens a popup.",1504],["Select Create OAuth Client ID and use the details from the popup to complete the form.",1504],["In the Create OAuth client ID form, enter the required details to create an entry for one of your UDP builds.",1504],["In the Name field, name the build after the corresponding store, for example “Samsung version”.",1504],["In the Package name field, specify the package name for the build registered with the corresponding store via the UDP console.The store-specific package name is displayed in the UDP console:",1504],["Go to My Games > Publish tab.",1504],["Select Advanced for the corresponding store.The package name is displayed in the Basic Information section.",1504],["In the certificate field, use the certificate used for the corresponding UDP store. UDP signs the app with the new certificate after the Repack operation.The store-specific certificate is displayed in the UDP console:",1504],["Go to My Games > Publish tab.",1504],["Select Advanced for the corresponding store.The certificate is displayed in the Basic Information section.Note: You can also download the APK Certificate and get the fingerprint information via the command:openssl x509 -in [downloaded-pem-filepath] -fingerprint -noout",1504],["Copy the SHA-1 from the UDP console into the certificate field.",1504],["When you’ve completed the form, select Create and return to Google Play Console.",1504],["Select Refresh OAuth clients.",1504],["Select your new OAuth client.",1504],["Select Save changes to save the credential.",1504],["Repeat the above steps for each store-specific UDP build that you want to link to your Google Play application.",1504],["You can view the UDP builds you’ve linked to your Google Play application in the Google Cloud Platform > Google API & Services dashboard, under Credentials.",1504],["These steps enable Google Play games services to work successfully on all the UDP store versions that are linked that way, excluding Mi GetApps (whose SDK integrates an old version of Google Mobile Services, which creates conflicts).",1504],["Note**: Any changes to Google’s systems could impact the solution described above. For more information on Google’s troubleshooting information, see the Google documentation.",1504],["Using Cloud Build with UDP",1504],["You can use Cloud Build to deploy your game to the UDP console in the following ways:",1504],["Upload your APK to Cloud Build, and deploy it to UDP from there",1504],["Build your game with Cloud Build, and deploy it to UDP from there",1504],["",1504],["Pushing the build to the UDP console via Cloud Build",1504],["This section explains how to use Cloud Build to push your game to UDP.",1504],["In the Unity Editor, enable Cloud Build in the Project Settings window.",1504],["Using Cloud Build in the Editor to deploy your game to UDP",1504],["To deploy your game to UDP via the Cloud Build feature in the Unity Editor, you need to upload your UDP build and push it to UDP.",1504],["In the Cloud Build tab of the Project Settings window, if you haven't uploaded any build before, select Upload Build.",1504],["In FILE:",1504],["Choose the APK of your UDP build",1504],["Enter a useful LABEL",1504],["Set the PLATFORM field to Android.",1504],["Select UPLOAD, and let it complete the upload process.",1504],["In the Cloud Build tab of the Project Settings window, locate the desired build from the build History timeline and select Push to Unity Distribution Portal.",1504],["Verify that you want to push, and that the action completes.",1504],["Using the Unity Dashboard to deploy your game to UDP",1504],["To deploy your game to UDP via the Cloud Build feature in the Unity Dashboard, you need to upload your UDP build to the Unity Dashboard and push it from there to UDP.",1504],["In the Unity Developer Dashboard, navigate to your Project’s Cloud Build > History.",1504],["Select Upload, then select your APK file.",1504],["In the Platform field, select Android.",1504],["Select Upload.",1504],["Select the More menu next to your build to expand the drop-down menu.",1504],["Select Push to Unity Distribution Portal.",1504],["",1504],["Building and deploying via Cloud Build",1504],["If you use Unity Teams Advanced, you can generate builds automatically.",1504],["In the Cloud Build tab of the Project Settings window:",1504],["Select Manage Build Targets > Add new build target",1504],["In the TARGET SETUP window, set the PLATFORM field to Android and enter a useful TARGET LABEL.",1504],["Select Next: Save.",1504],["Select Start Cloud Build, then select the target build you just created.",1504],["Push your build to UDP directly via the Unity Cloud Build Developer Dashboard (as shown above).",1504],["Service interoperability",1504],["UDP can tell other services used by your game which store was the game downloaded from.",1504],["This information can be used in many ways, by Unity services as well as by third-party or your own services.",1504],["For example, Unity Remote Config lets you tune your game settings based on rules that you define, such as which store the game was downloaded from.",1504],["This section explains how to let other services gain access to this information, and includes an example.",1504],["How does it work?",1504],["When your game first launches on a player’s device, UDP creates and drops the udp.json file in the game’s Persistent Data Path. This file contains the field udpStore, which shows which store the game was downloaded from. Retrieve that information to use it the way you intend to.",1504],["Note:** This doesn't add any new permission into your game manifest.",1504],["Locating udp.json",1504],["The file udp.json is saved in:",1504],["Application.PersistentDataPath + '/Unity' + /Application.CloudProjectID + /udp/udp.json",1504],["Where:",1504],["Application.PersistentDataPath is your game’s persistent data path",1504],["Application.CloudProjectID is your game’s Unity project ID",1504],["Here is an example of a path to the udp.json file:",1504],["path/storage/emulated/0/Android/data/com.mystudio.mygame/files/Unity/c83d2de2-de74-4b75-83fc-ade948bda064/udp/udp.json",1504],["Where:",1504],["Application.PersistentDataPath= path/storage/emulated/0/Android/data/com.mystudio.mygame",1504],["Application.CloudProjectID= c83d2de2-de74-4b75-83fc-ade948bda064",1504],["Reading udp.json",1504],["The file udp.json contains the following information:",1504],["{\"key\":\"UDP\",\"udpStore\":\"StoreName\",\"udpClientId\":\"value_of_udpClientId\",\"CloudProjectId\":\"value_of_CloudProjectId\"}",1504],["The field udpStore contains the value of the UDP store your game was downloaded from.",1504],["Here is an example of a udp.json file:",1504],["{\"key\":\"UDP\",\"udpStore\":\"Huawei\",\"udpClientId\":\"icjaB7wmu_q7AOjrSLH8yw\",\"cloudProjectId\":\"bc2be074-09f3-450f-8e98-a0f79c9746f7\"}",1504],["In this example, the game was downloaded from the HUAWEI AppGallery.",1504],["Tip:** use JSONUtility.FromJsonOverwrite to read the contents of the file as a text asset.",1504],["",1504],["udpStore values",1504],["The table below lists the udpStore values you can expect for stores available on UDP.",1504],["These are case-sensitive.",1504],["Store (channel name on UDP) Value for udpStore ",1504],["",1504],["UDP Sandbox (for the generic UDP builds) UdpSandbox ",1504],["ONE store OneStore ",1504],["APPTUTTi Apptutti ",1504],["Mi GetApps (Xiaomi) XiaomiStore ",1504],["HUAWEI AppGallery Huawei ",1504],["QooApp Game Store QooApp ",1504],["Uptodown Uptodown ",1504],["SHAREit ShareIt ",1504],["JioGames JioGames ",1504],["Legion Store Legion ",1504],["",1504],["Using udpStore with Remote Config",1504],["Unity Remote Config lets you tune your game settings without deploying new versions of your application. When a player launches your game, Remote Config detects contextual attributes used as Rule conditions (based on Unity, the application, the user, or custom criteria that you define). The service then returns customized settings for each player according to the Rules that apply to them.",1504],["Use udpStore as an attribute in your Rule conditions, so you can determine game settings that depend on which UDP store the game was downloaded from.",1504],["To implement udpStore with Remote Config, follow these steps.",1504],["Download and install the UDP package.",1504],["Download and install the Unity Remote Config package. See the Remote Config documentation.",1504],["Create an AppAttributes struct, which at least has a parameter, \"udpStore\":",1504],["public struct AppAttributes",1504],["public string udpStore;",1504],["In the game code, implement the Remote Config ConfigManager.FetchConfigs call.",1504],["When calling FetchConfigs, create a new instance of the AppAttributes struct, read the UDP store data file from:",1504],["Application.PersistentDataPath + '/Unity' + /Application.CloudProjectId + /udp/udp.json",1504],["Use JSONUtility.FromJsonOverwrite to read the contents of the file as a text asset.",1504],["string udpFilePath = System.IO.Path.Combine(Application.persistentDataPath, \"Unity\", Application.cloudProjectId, \"udp\", \"udp.json\");",1504],["string udpFileContents = System.IO.File.ReadAllText(udpFilePath);",1504],["var appAttr = JsonUtility.FromJson<AppAttributes>(udpFileContents);",1504],["Unity.RemoteConfig.ConfigManager.FetchCompleted += ConfigManager_FetchCompleted;",1504],["Unity.RemoteConfig.ConfigManager.FetchConfigs(null, appAttr);",1504],["Ensure the AppAttributes struct is used in ConfigManager.FetchConfigs.",1504],["Open the Remote Config settings (Services > Remote Config > Configure), and create the parameters that you'd want to change based on the UDP store.",1504],["When the parameters are set up, and instrumented in the game code, create a rule for each store in the Remote Config window.",1504],["In each rule's condition, put: app.udpStore == \"[storeName]\"",1504],["See the values for udpStore",1504],["To enable the setting, select the checkbox next to the name of the rule on the left panel in the Remote Config settings.",1504],["Build the app to a device and ensure the rules are properly applied, and ship it.",1504],["",1504],["Implementing IAP items for UDP with Unity IAP",1504],["If you want to implement UDP using Unity IAP, first set up Unity IAP.",1504],["Note**: If you choose to implement UDP with Unity IAP version 1.22.0-1.23.5 (instead of using the UDP package) then implement via Unity IAP only.",1504],["Unity IAP automatically handles the following:",1504],["Initializing UDP",1504],["Querying the store’s IAP product inventory",1504],["Requesting to purchase a product",1504],["Consuming the purchased item",1504],["However, your game must properly use Unity IAP’s similar functions (such as initialization and purchase) according to the Unity IAP Documentation.",1504],["When you’ve implemented your game’s in-app purchases with Unity IAP, take the following steps to set up UDP with Unity IAP.",1504],["",1504],["Querying IAP inventory",1504],["With Unity IAP (code implementation)",1504],["Fetching IAP products defined in the Editor",1504],["When fetching the IAP products to pass to the queryInventory method, invoke ProductCatalog.LoadDefaultCatalog(). This returns the IAP products defined in the Editor’s IAP Catalog (Services > Unity IAP > IAP Catalog).",1504],["For instance:",1504],["var catalog = ProductCatalog.LoadDefaultCatalog();",1504],["foreach (var product in catalog.allValidProducts)",1504],["if (product.allStoreIDs.Count > 0)",1504],["var ids = new IDs();",1504],["foreach (var storeID in product.allStoreIDs)",1504],["ids.Add(storeID.id, storeID.store);",1504],["builder.AddProduct(product.id, product.type, ids);",1504],["else",1504],["builder.AddProduct(product.id, product.type);",1504],["Fetching IAP product information from the UDP console",1504],["If you plan to modify your game’s IAP Catalog on the UDP Console, prepare your game to fetch IAP product information from the UDP Console.",1504],["When fetching the IAP products to pass to the queryInventory method, invoke builder.AddProduct to retrieve specific IAP products defined from the UDP console:",1504],["builder.AddProduct(product.id, product.type, new IDs{})",1504],["To display the product price, formatted with currency, use productInfo.Value.Price.",1504],["Fetching the IAP Catalog from the UDP console",1504],["To retrieve all the IAP products defined on the UDP Console, don’t invoke any IAP product retrieval method. Your game will then fetch the entire IAP Catalog from the UDP Console.",1504],["Note: Uploading a CSV file of IAP products on the UDP Console entirely overwrites your IAP Catalog.",1504],["Filling in the IAP Catalog with the Unity IAP package",1504],["Add and configure your IAP Catalog all your in-app purchases for UDP.",1504],["Note**: If you don’t use an IAP Catalog in your game client (for instance, you maintain your IAP items solely on your game server) you must still create your IAP Catalog on the UDP console.",1504],["In the Unity Editor, select Services > Unity IAP > IAP Catalog.",1504],["Select Add Product and enter the details for each IAP product.",1504],["Add the price for the IAP item under Unity Distribution Portal Configuration.",1504],["To save your IAP product to the UDP console, select Sync to UDP. Do this for each IAP product you create.",1504],["To make sure the IAP Catalog is properly saved, check that the items you added are displayed in the UDP console.",1504],["UDP troubleshooting",1505],["Incorrect UDP implementation",1505],["An incorrect implementation of UDP in your game client could prevent users from purchasing IAP products. Typical symptoms of such a problem in your game include:",1505],["The wallet doesn’t appear when invoked",1505],["In-app purchases are unresponsive",1505],["If these symptoms occur in your generic UDP build, resolve them before you repack your game.",1505],["No IAPs are displayed in the UDP console",1505],["Make sure you push your IAP Catalog information in the Editor.",1505],["Error: Packing Failed: No UDP SDK detected",1505],["This can happen with an implementation via Unity IAP, if you forget to set UDP as the build target.",1505],["It can also happen if you use the Minify option while building your APK; UDP may not be able to find files/directories that it needs because of it. Keep UDP-related packages in a customized proguard file (or disable Minify option) and rebuild your game.",1505],["UDP Sandbox: login screen doesn't appear",1505],["The login screen in the Sandbox can fail to appear if the Init() method has not been implemented properly. The login screen is displayed when Init() is called. Init() is successful only when the login is successful. Unity recommends to implement Init() when your game launches.",1505],["Unity Distribution Portal",1506],["Overview",1506],["Unity Distribution Portal (UDP) lets you distribute your games to multiple app stores through a single hub. UDP repacks your Android build with each store’s dedicated In-App Purchase SDK to make your game compatible with the separate app stores. You can manage all your store submissions from the UDP console.",1506],[" ",1506],["UDP overview",1506],["You can use UDP to distribute premium games and games with IAP.",1506],["UDP console",1506],["The UDP console is a web-based portal where you can prepare your games for submission to multiple app stores. The UDP console lets you:",1506],["Learn more about the UDP console interface.",1506],["UDP package",1506],["The UDP package contains an SDK for working with UDP. It also enables the Unity Distribution Portal settings in the Project Settings window of the Unity Editor.",1506],["UDP client",1506],["To use UDP, your game must have a UDP client, including UDP client ID. This identifies your game on the UDP service. The ID is generated when you create a game on UDP and you must link it to your Unity project.",1506],["To unlink a Unity project from a UDP client, remove the Unity project ID from the Integration Information section in the UDP console.",1506],["UDP sandbox",1506],["The UDP package contains a sandbox environment that acts as a test store for your UDP games. When you implement the UDP SDK in your game, your UDP build can then use the sandbox as a test environment. Before you can submit your game to the real stores, you must test your game in the sandbox to verify that your UDP and IAP (if applicable) implementation works properly.",1506],["Sandbox testing helps you to identify any issues that arise during your initial UDP implementation. Unresolved problems could prevent UDP repacking your game for stores, or cause UDP to repack the game with the existing problems. This could result in stores rejecting your game or players being unable to complete transactions.",1506],["Games with in-app purchases",1506],["In-app purchases (IAP) let you sell content to players from inside your game. You only need to implement your in-app purchases via UDP. UDP then automatically repacks your game into store-specific builds.",1506],["You can implement UDP on both the game client and server sides. For offline games, you only need to implement UDP in the game client. For online games, you can also implement UDP on the server side.",1506],["Implementing UDP in-app purchases in the game clientThe implementation in the game client includes initializing the UDP SDK and integrating with the in-app purchase flow of UDP.",1506],["Implementing UDP in-app purchases on the server sideThe implementation on the server side lets you query the UDP server about orders, receive callback notifications, and return the acknowledgements.",1506],["Learn how to:",1506],["Implement in-app purchases on the Editor",1506],["IAP product types",1506],["UDP only supports consumable and non-consumable IAP products. Subscription products are not supported.",1506],["",1506],["Non-consumable IAP products",1506],["Non-consumable products provide permanent effects. Players can only purchase them once.",1506],["",1506],["Consumable IAP products",1506],["Consumable products provide temporary effects, such as game currency and extra experience points. Players can purchase these multiple times.",1506],["When a user has purchased a consumable product, they must consume it before they can repurchase it. You can use the consumption to ensure the purchased product is successfully delivered.",1506],["To consume a product, your game needs to send a Consume request to the UDP SDK. Your game should deliver a product when it is consumed. This prevents the product being delivered repeatedly.",1506],["",1506],["IAP Catalog",1506],["The IAP Catalog is an inventory of the IAP items implemented in your game. For each IAP item, you define a:",1506],["description",1506],["price",1506],["consumable type",1506],["Product ID",1506],["When your game is repacked and submitted to a store, UDP syncs your IAP Catalog with the store’s back-end. Your game can then query the IAP inventory from the store’s back-end.",1506],["When players purchase IAP products, your game asks the store to confirm the IAP Catalog. UDP must be properly implemented in your game for this step to work smoothly.",1506],["The IAP Catalog on the UDP console is the source of truth for what is submitted to the store’s back-end systems.",1506],["For a successful implementation, follow the UDP implementation guidance. To ensure your IAPs behave properly, test your game in the UDP Sandbox environment.",1506],["Premium Games",1506],["You can distribute Premium games (aka pay-to-download games) via UDP to stores which support premium games. You can then view your premium game revenue in the UDP console’s Reporting dashboard.",1506],["Learn how to distribute your premium game via UDP.",1506],["Ownership",1506],["UDP games belong to a Unity Organization and not to any individual user. All users of an Organization have access to its UDP games. Permissions vary depending on the role of a given user within the Organization.",1506],["You can also add users who aren't in the Organization to specific projects. Add users in the Unity Dashboard under Project > Settings > Users.",1506],["You can divide tasks within a Unity Organization between users and non-users of the Unity Editor; for example:",1506],["Publishing Manager** (not an Editor user)",1506],["Creates a new game on the UDP console",1506],["Passes Developer the parameters needed to carry out the UDP implementation",1506],["Consolidates the material required for distribution",1506],["Begins signing up with the stores the Organization wants to distribute its games to",1506],["Developer** (Editor user)",1506],["Implements UDP in the project",1506],["Builds and tests the game's APK or AAB",1506],["Deploys the game build to the UDP console",1506],["Publishing Manager**",1506],["Creates game releases",1506],["Finalizes the submissions to the stores",1506],["",1506],["Project-related permissions",1506],["Members of an organization and individuals granted access to a project can both work on Unity projects.",1506],["Project-related permissions relate to what UDP features you have access to on a specific Unity project, both in the Unity Editor and in the UDP console. This applies to:",1506],["Members of the organization that the project belongs to (with organization-level permissions)",1506],["Individuals granted access to the project only (with project-level permissions)",1506],["The table below lists the project-related UDP permissions for Users, Managers and Owners in the Unity Editor. These are the same for both project-level and organization-level permissions.",1506],["User Manager Owner ",1506],["",1506],["Generate a new UDP client Yes Yes Yes ",1506],["Link a Unity project to the UDP client Yes Yes Yes ",1506],["Modify UDP settings Yes Yes Yes ",1506],["Create or modify IAPs Yes Yes Yes ",1506],["The table below lists the project-related UDP permissions for Users, Managers and Owners in the UDP console. These are the same for both project-level and organization-level permissions.",1506],["User Manager Owner ",1506],["",1506],["Generate a new UDP client Yes Yes Yes ",1506],["Archive a game in game list No Yes Yes ",1506],["Delete a game in game list No Yes Yes ",1506],["Edit a game revision Yes Yes Yes ",1506],["Link a Unity project with a UDP client Yes Yes Yes ",1506],["Unlink a Unity project from a UDP client No Yes Yes ",1506],["Release a game revision No Yes Yes ",1506],["Register a game to a store No Yes Yes ",1506],["Publish a game to a store No Yes Yes ",1506],["Advanced page operation No Yes Yes ",1506],["Status page access and operation No Yes Yes ",1506],["Generate an authentication token No Yes Yes ",1506],["Organization-related permissions",1506],["Organization-related permissions relate to what UDP features you have access to in the Organization. These features are generally restricted to Organization members only, that is, individuals granted access only to specific projects do not have organization-level permissions. The exceptions to this are:",1506],["the project Owner can view the Reporting dashboard",1506],["any project role can view the projects they have access to in the game list",1506],["The table below lists additional Organization-related permissions for Users, Managers and Owners.",1506],["Project-level Org-level ",1506],["",1506],["User Manager Owner User Manager Owner ",1506],["View the Reporting dashboard No No Yes No Yes Yes ",1506],["Access the game list Yes* Yes* Yes* Yes Yes Yes ",1506],["Edit the Company profile No No No No Yes Yes ",1506],["Sign up the Organization to a store No Yes Yes No Yes Yes ",1506],["Note**: Project-level users can assess the games within the host organization that owns the project, and any other projects they have access to within their own Organizations.",1506],["Comparison of UI systems in Unity",1507],["UI Toolkit is intended to become the recommended UI system for your new UI development projects. However, in the current release, UI Toolkit does not have some features that Unity UI (uGUI) and Immediate Mode GUI (IMGUI) support. uGUI and IMGUI are more appropriate for certain use cases, and are required to support legacy projects.",1507],["This page provides a high-level feature comparison of UI Toolkit, uGUI, and IMGUI, and their respective approaches to UI design.",1507],["General consideration",1507],["The following table lists the recommended and alternative system for runtime and Editor:",1507],["2022 Recommendation Alternative ",1507],["",1507],["Runtime Unity UI UI Toolkit ",1507],["Editor UI Toolkit IMGUI ",1507],["Roles and skill sets",1507],["Your team's skill set and comfort level with different technologies is also an important consideration.",1507],["The following table lists the recommended system for different roles:",1507],["Roles UI Toolkit Unity UI(uGUI) IMGUI Skill sets ",1507],["",1507],["Programmer Yes Yes Yes Programmers can use any game development tool or API. ",1507],["Technical Artist Partial Yes No Technical artists who are familiar with Unity's GameObject-based tools and workflows are likely to be comfortable working with GameObjects, Components, and the Scene view. They might not be comfortable with UI Toolkit's web-like approach or IMGUI's pure C# approach. ",1507],["UI Designer Yes Partial No UI designers who are familiar with UI creation tools are likely to be comfortable with UI Toolkit's document-based approach and can use the UI Builder to visually edit their UI.If they are not familiar with GameObject-based workflows, they might require help from programmers or level designers. ",1507],["Innovation and development",1507],["UI Toolkit is in active development and releases new features frequently. uGUI and IMGUI are established and production-proven UI systems that are updated infrequently.",1507],["uGUI and IMGUI might be better choices if you need features that are not yet available in UI Toolkit, or you need to support or reuse older UI content.",1507],["",1507],["Runtime",1507],["uGUI is the recommended solution for the following:",1507],["UI positioned and lit in a 3D world",1507],["VFX with custom shaders and materials",1507],["Easy referencing from MonoBehaviours",1507],["UI Toolkit is an alternative to uGUI if you create a screen overlay UI that runs on a wide variety of screen resolutions. Consider UI Toolkit to do the following:",1507],["Produce work with a significant amount of user interfaces",1507],["Require familiar authoring workflows for artists and designers",1507],["Seek textureless UI rendering capabilities",1507],["Use Cases",1507],["The following table lists the recommended system for major runtime use cases:",1507],["2022 Recommendation ",1507],["",1507],["Multi-resolution menus and HUD in intensive UI projects UI Toolkit ",1507],["World space UI and VR Unity UI ",1507],["UI that requires customized shaders and materials Unity UI ",1507],["In details",1507],["The following table lists the recommended system for detailed runtime features:",1507],["2022 UI Toolkit Unity UI ",1507],["",1507],["WYSIWYG authoring Yes Yes ",1507],["Nesting reusable components Yes Yes ",1507],["Global style management Yes No ",1507],["Layout and Styling Debugger Yes Yes ",1507],["Scene integration Yes Yes ",1507],["Rich text tags Yes Yes* ",1507],["Scalable text Yes Yes* ",1507],["Font fallbacks Yes Yes* ",1507],["Adaptive layout Yes Yes ",1507],["Input system support Yes Yes ",1507],["Serialized events No Yes ",1507],["Visual Scripting support No Yes ",1507],["Rendering pipelines support Yes Yes ",1507],["Screen-space (2D) rendering Yes Yes ",1507],["World-space (3D) rendering No Yes ",1507],["Custom materials and shaders No Yes ",1507],["Sprites / Sprite atlas support Yes Yes ",1507],["Dynamic texture atlas Yes No ",1507],["Textureless elements Yes No ",1507],["UI anti-aliasing Yes No ",1507],["Rectangle clipping Yes Yes ",1507],["Mask clipping No Yes ",1507],["Nested masking Yes Yes ",1507],["UI transition animations Yes No ",1507],["Integration with Animation Clips and Timeline No Yes ",1507],["Requires the TextMesh Pro package*",1507],["",1507],["Editor",1507],["UI Toolkit is recommended if you create complex editor tools. UI Toolkit is also recommended for the following reasons:",1507],["Better reusability and decoupling",1507],["Visual tools for authoring UI",1507],["Better scalability for code maintenance and performance",1507],["IMGUI is an alternative to UI Toolkit for the following:",1507],["Unrestricted access to editor extensible capabilities",1507],["Light API to quickly render UI on screen",1507],["Use Cases",1507],["The following table lists the recommended system for major Editor use cases:",1507],["2022 Recommendation ",1507],["",1507],["Complex editor tool UI Toolkit ",1507],["Property drawers UI Toolkit ",1507],["Collaboration with designers UI Toolkit ",1507],["In details",1507],["The following table lists the recommended system for detailed Editor features:",1507],["2022 UI Toolkit IMGUI ",1507],["",1507],["WYSIWYG authoring Yes No ",1507],["Nesting reusable components Yes No ",1507],["Global style management Yes Yes ",1507],["Layout and Styling Debugger Yes No ",1507],["Rich text tags Yes Yes ",1507],["Scalable text Yes No ",1507],["Font fallbacks Yes Yes ",1507],["Adaptive layout Yes Yes ",1507],["Default Inspectors Yes Yes ",1507],["Inspector: Edit custom object types Yes Yes ",1507],["Inspector: Edit custom property types Yes Yes ",1507],["Inspector: Mixed values (multi-editing) support Yes Yes ",1507],["Array and list-view control Yes Yes ",1507],["Data binding: Serialized properties Yes Yes ",1507],["Additional resources",1507],["Animation Integration",1508],["Animation allows for each transition between control states to be fully animated using Unity's animation system. This is the most powerful of the transition modes due to the number of properties that can be animated simultaneously.",1508],["To use the Animation transition mode, an Animator Component needs to be attached to the controller element. This can be done automatically by clicking \"Auto Generate Animation\". This also generates an Animator Controller with states already set up, which will need to be saved.",1508],["The new Animator controller is ready to use straight away. Unlike most Animator Controllers, this controller also stores the animations for the controller's transitions and these can be customised, if desired.",1508],["For example, if a Button element with an Animator controller attached is selected, the animations for each of the button's states can be edited by opening the Animation window (Window>Animation).",1508],["There is an Animation Clip pop-up menu to select the desired clip. Choose from \"Normal\", \"Highlighted\", \"Pressed\" and \"Disabled\".",1508],["The Normal State is set by the values on button element itself and can be left empty. On all other states, the most common configuration is a single keyframe at the start of the timeline. The transition animation between states will be handled by the Animator.",1508],["As an example, the width of the button in the Highlighted State could be changed by selecting the Highlighted state from the Animation Clip pop up menu and with the playhead at the start of the time line:",1508],["Select the record Button",1508],["Change the width of the Button in the inspector",1508],["Exit the record mode.",1508],["Change to play mode to see how the button grows when highlighted.",1508],["Any number of properties can have their parameters set in this one keyframe.",1508],["Several buttons can share the same behaviour by sharing Animator Controllers.",1508],["The UI Animation transition mode is not compatible with Unity's legacy animation system.* You should only use the *Animator Component.",1508],["Auto Layout",1509],["The Rect Transform layout system is flexible enough to handle a lot of different types of layouts and it also allows placing elements in a complete freeform fashion. However, sometimes something a bit more structured can be needed.",1509],["The auto layout system provides ways to place elements in nested layout groups such as horizontal groups, vertical groups, or grids. It also allows elements to automatically be sized according to the contained content. For example a button can be dynamically resized to exactly fit its text content plus some padding.",1509],["The auto layout system is a system built on top of the basic Rect Transform layout system. It can optionally be used on some or all elements.",1509],["Understanding Layout Elements",1509],["The auto layout system is based on a concept of layout elements and layout controllers. A layout element is an Game Object with a Rect Transform and optionally other components as well. The layout element has certain knowledge about which size it should have. Layout elements don't directly set their own size, but other components that function as layout controllers can use the information they provide in order to calculate a size to use for them.",1509],["A layout element has properties that defines its own:",1509],["Minimum width",1509],["Minimum height",1509],["Preferred width",1509],["Preferred height",1509],["Flexible width",1509],["Flexible height",1509],["Examples of layout controller components that use the information provided by layout elements are Content Size Fitter and the various Layout Group components. The basic principles for how layout elements in a layout group are sized is as follows:",1509],["First minimum sizes are allocated.",1509],["If there is sufficient available space, preferred sizes are allocated.",1509],["If there is additional available space, flexible size is allocated.",1509],["Any Game Object with a Rect Transform on it can function as a layout element. They will by default have minimum, preferred, and flexible sizes of 0. Certain components will change these layout properties when added to the Game Object.",1509],["The Image and Text components are two examples of components that provide layout element properties. They change the preferred width and height to match the sprite or text content.",1509],["Layout Element Component",1509],["If you want to override the minimum, preferred, or flexible size, you can do that by adding a Layout Element component to the Game Object.",1509],["The Layout Element component lets you override the values for one or more of the layout properties. Enable the checkbox for a property you want to override and then specify the value you want to override with.",1509],["See the reference page for Layout Element for more information.",1509],["Understanding Layout Controllers",1509],["Layout controllers are components that control the sizes and possibly positions of one or more layout elements, meaning Game Objects with Rect Transforms on. A layout controller may control its own layout element (the same Game Object it is on itself) or it may control child layout elements.",1509],["A component that functions as a layout controller may also itself function as a layout element at the same time.",1509],["Content Size Fitter",1509],["The Content Size Fitter functions as a layout controller that controls the size of its own layout element. The simplest way to see the auto layout system in action is to add a Content Size Fitter component to a Game Object with a Text component.",1509],["If you set either the Horizontal Fit or Vertical Fit to Preferred, the Rect Transform will adjust its width and/or height to fit the Text content.",1509],["See the reference page for Content Size Fitter for more information.",1509],["Aspect Ratio Fitter",1509],["The Aspect Ratio Fitter functions as a layout controller that controls the size of its own layout element.",1509],["It can adjust the height to fit the width or vice versa, or it can make the element fit inside its parent or envelope its parent. The Aspect Ratio Fitter does not take layout information into account such as minimum size and preferred size.",1509],["See the reference page for Aspect Ratio Fitter for more information.",1509],["Layout Groups",1509],["A layout group functions as a layout controller that controls the sizes and positions of its child layout elements. For example, a Horizontal Layout Group places its children next to each other, and a Grid Layout Group places its children in a grid.",1509],["A layout group doesn't control its own size. Instead it functions as a layout element itself which may be controlled by other layout controllers or be set manually.",1509],["Whatever size a layout group is allocated, it will in most cases try to allocate an appropriate amount of space for each of its child layout elements based on the minimum, preferred, and flexible sizes they reported. Layout groups can also be nested arbitrarily this way.",1509],["See the reference pages for Horizontal Layout Group, Vertical Layout Group and Grid Layout Group for more information.",1509],["Driven Rect Transform properties",1509],["Since a layout controller in the auto layout system can automatically control the sizes and placement of certain UI elements, those sizes and positions should not be manually edited at the same time through the Inspector or Scene View. Such changed values would just get reset by the layout controller on the next layout calculation anyway.",1509],["The Rect Transform has a concept of driven properties to address this. For example, a Content Size Fitter which has the Horizontal Fit property set to Minimum or Preferred will drive the width of the Rect Transform on the same Game Object. The width will appear as read-only and a small info box at the top of the Rect Transform will inform that one or more properties are driven by Conten Size Fitter.",1509],["The driven Rect Transforms properties have other reasons beside preventing manual editing. A layout can be changed just by changing the resolution or size of the Game View. This in turn can change the size or placement of layout elements, which changes the values of driven properties. But it wouldn't be desirable that the Scene is marked as having unsaved changes just because the Game View was resized. To prevent this, the values of driven properties are not saved as part of the Scene and changes to them do not mark the scene as changed.",1509],["Technical Details",1509],["The auto layout system comes with certain components built-in, but it is also possible to create new components that controls layouts in custom ways. This is done by having a component implement specific interfaces which are recognized by the auto layout system.",1509],["Layout Interfaces",1509],["A component is treated as a layout element by the auto layout system if it implements the interface ILayoutElement.",1509],["A component is expected to drive the Rect Transforms of its children if it implements the interface ILayoutGroup.",1509],["A component is expected to drive its own RectTransform if it implements the interface ILayoutSelfController.",1509],["Layout Calculations",1509],["The auto layout system evaluates and executes layouts in the following order:",1509],["The minimum, preferred, and flexible widths of layout elements are calculated by calling CalculateLayoutInputHorizontal on ILayoutElement components. This is performed in bottom-up order, where children are calculated before their parents, such that the parents may take the information in their children into account in their own calculations.",1509],["The effective widths of layout elements are calculated and set by calling SetLayoutHorizontal on ILayoutController components. This is performed in top-down order, where children are calculated after their parents, since allocation of child widths needs to be based on the full width available in the parent. After this step the Rect Transforms of the layout elements have their new widths.",1509],["The minimum, preferred, and flexible heights of layout elements are calculated by calling CalculateLayoutInputVertical on ILayoutElement components. This is performed in bottom-up order, where children are calculated before their parents, such that the parents may take the information in their children into account in their own calculations.",1509],["The effective heights of layout elements are calculated and set by calling SetLayoutVertical on ILayoutController components. This is performed in top-down order, where children are calculated after their parents, since allocation of child heights needs to be based on the full height available in the parent. After this step the Rect Transforms of the layout elements have their new heights.",1509],["As can be seen from the above, the auto layout system evaluates widths first and then evaluates heights afterwards. Thus, calculated heights may depend on widths, but calculated widths can never depend on heights.",1509],["Triggering Layout Rebuild",1509],["When a property on a component changes which can cause the current layout to no longer be valid, a layout recalculation is needed. This can be triggered using the call:",1509],["LayoutRebuilder.MarkLayoutForRebuild (transform as RectTransform);",1509],["The rebuild will not happen immediately, but at the end of the current frame, just before rendering happens. The reason it is not immediate is that this would cause layouts to be potentially rebuild many times during the same frame, which would be bad for performance.",1509],["Guidelines for when a rebuild should be triggered:",1509],["In setters for properties that can change the layout.",1509],["In these callbacks:",1509],["OnEnable",1509],["OnDisable",1509],["OnRectTransformDimensionsChange",1509],["OnValidate (only needed in the editor, not at runtime)",1509],["OnDidApplyAnimationProperties",1509],["Get started with UI Builder",1510],["Want to learn how to create UI with UI Builder? Use this example to get started.",1510],["To create UI in the UI Builder:",1510],["Create a new UI Document (UXML).",1510],["Add elements to create your UI hierarchy.",1510],["Set up attributes and style properties in the Inspector.",1510],["When more than one element starts to need the same style properties, create USS style sheets and selectors.",1510],["Test your UI and if you are satisfied with the results, extract inline style properties to USS classes.",1510],["Save the UI Document (UXML).",1510],["Prerequisites",1510],["Before you start, get familiar with the following:",1510],["Example overview",1510],["This example creates the main view for the Create a list view runtime UI example. It creates a root element as the background, with two containers. One container holds the character name list and another holds the character details. In the character details container, you add background and foreground frames. Finally, you add two labels for the character name. This example won't create the character name list entry UI.",1510],["Create the root element",1510],["Create a new project and then create a root visual element that covers the entire screen. Set your root element to have a background color and center all child elements in the middle of the screen.",1510],["Create a project in Unity with any template.",1510],["Select Window > UI Toolkit > UI Builder.",1510],["In the UI Builder window, at the top left of the Viewport window, select File > New to create a new UXML document.",1510],["Name it as MainView.uxml and save.",1510],["Drag VisualElement from Library into the Hierarchy window.",1510],["Tip**: You can also double-click a control to add it to the Hierarchy window.",1510],["Select the element from the Hierarchy window.",1510],["In the Inspector window, set Flex > Grow to 1. This sets the flex-grow property to 1, making it cover the entire screen.",1510],["To center all child elements, set both Align Items and Justify Content to Center.",1510],["Set Background > Color to #732526.",1510],["Create the parent container",1510],["Create a new VisualElement underneath the root element. This element becomes the parent container for the left and right sections of the UI.",1510],["Drag VisualElement from Library to the root VisualElement in the Hierarchy window.",1510],["Select the element from the Hierarchy window.",1510],["In the Inspector window, set Flex > Direction to row.",1510],["Set Size > Height to 350 pixels.",1510],["Create the character names list container",1510],["Add a ListView as the child element of the container to hold the character names.",1510],["Drag a ListView from the Library to the container VisualElement in the Hierarchy window.",1510],["Select the element from the Hierarchy window.",1510],["In the Inspector window, set Name to CharacterList.",1510],["Set Size > Width to 230 pixels.",1510],["Set Margin & Padding > Margin > Right to 6 pixels.",1510],["Set Background > Color to #6E3925.",1510],["Set Border > Color to #311A11.",1510],["Set Border > Width to 4 pixels.",1510],["Set Border > Radius to 15 pixels.",1510],["Create the character details container",1510],["Add a new VisualElement under the same parent as the #CharacterList to hold the character details container. The purpose is that when the user selects a character from the list on the left, it displays the character's portrait, name, and class.",1510],["Drag a VisualElement from the Library to the container element in the Hierarchy window. This is the container to hold all the elements on the right.",1510],["Select the element from the Hierarchy window.",1510],["In the Inspector window, set Align > Align Items to flex-end.",1510],["Set Align > Justify Content to space-between.",1510],["Add another VisualElement as the child of the right container.",1510],["Select the element from the Hierarchy window.",1510],["Set Size > Width to 276 pixels.",1510],["In the Align section, set both Align Items and Justify Content to center.",1510],["Set Margin & Padding > Padding to 8 pixels.",1510],["Set Background > Color to #AA5939.",1510],["Set Border > Color to #311A11.",1510],["Set Border > Width to 4 pixels.",1510],["Set Border > Radius to 15 pixels.",1510],["Your UI layout should now look like the following:",1510],["Create the character portrait background",1510],["Add the individual UI controls to the character details container. The first step is to add the character portrait background.",1510],["Drag VisualElement from Library to the character details container.",1510],["Select the element from the Hierarchy window.",1510],["In the Size section, set both Width and Height to 120 pixels.",1510],["Set Margin & Padding > Padding to 4 pixels.",1510],["Set Background > Color to #FF8554.",1510],["",1510],["Create a USS class for the border style",1510],["The character details container will use the same border styles as the character names list container. Create a USS class to apply to both containers.",1510],["In the StyleSheet window, select + > Create New USS.",1510],["Name it as MainView.uss and save.",1510],["Click on the Add new selector... field and enter .border. A .border selector appears in the StyleSheet window.",1510],["In the StyleSheet window, select .border.",1510],["In the Inspector window, set Border > Color to #311A11.",1510],["Set Border > Width to 2 pixels.",1510],["Set Border > Radius to 15 pixels.",1510],["Drag .border from the StyleSheet window to the character details container VisualElement.",1510],["Drag .border from the StyleSheet window to the character names list container VisualElement.",1510],["Select the character names list container VisualElement.",1510],["In the Inspector window, right-click Border and select Unset to remove the inline style you set earlier.",1510],["Create the character portrait foreground",1510],["Next in the character details container is to add the foreground for an actual image.",1510],["Drag VisualElement from Library to the character details container.",1510],["Select the element from the Hierarchy window.",1510],["Set Name to CharacterPortrait.",1510],["Set Flex > Grow to 1, so that the image can use all the available space.",1510],["Set Background > Scale Mode to scale-to-fit, so that you can scale the image to match the element size while keeping the correct aspect ratio.",1510],["Create labels",1510],["Add two label controls to the character details container to display the selected character's name and class.",1510],["Drag Label from Library to the character details container in the Hierarchy window.",1510],["Set Name to CharacterName.",1510],["Drag Label from Library to the character details container in the Hierarchy window.",1510],["Set Name to CharacterClass.",1510],["Select the #CharacterName element.",1510],["Set Text > Font Style to B.",1510],["Set Text > Size to 18 pixels.",1510],["In the Viewport window, select File > Save to save the changes to MainView.uxml.",1510],["",1510],["Extract inline styles",1510],["In UI Builder, you can create elements and use inline styles only to experiment while the number of elements is still small. As you build a more complex UI, it's easier to manage styles using style sheets. You can extract inline styles to a style sheet in UI Builder.",1510],["Select the root visual element.",1510],["In the Inspector window, in the Style Class List field, enter .background as the class name.",1510],["Select Extract Inlined Styles to New Class. This creates a .background class selector with the inline styles you set for the root element and updates the UI Document (UXML) for the root visual element to use the class selector instead of the inline styles.",1510],["In the Viewport window, select File > Save.",1510],["If you want to continue to work on the Create a list view runtime UI example, you can repeat the steps to extract styles for all the other elements, and follow the instructions to create the example.",1510],["Additional resources",1510],["\nStyle elements with UI Builder\n",1510],["UI Builder interface overview",1511],["To open the UI Builder window:",1511],["\nSelect Window > UI Toolkit > UI Builder. This opens a UXML document that has been previously loaded with UIBuilder.\n",1511],["\nFrom the Project window, double-click a UXML file.\n",1511],["The following image shows an example UI Builder window:",1511],["",1511],["Open and save UI Documents (UXML)",1511],["To open a UI Document in UI Builder:",1511],["\nUse the File menu inside the UI Builder Viewport pane toolbar and select Open....\n",1511],["\nIn the Project tab of the Library pane, right-click on the document and select Open in UI Builder.\n",1511],["To open a UI Document (UXML) in your default text editor or IDE:",1511],["\nUse the inlineStyle file icon.\n",1511],["Go to the Project window > Assets.",1511],["Click the arrow in the middle of the UXML file icon.",1511],["Double-click the inlineStyle file icon.",1511],["\nUse the Open with IDE button.\n",1511],["In UI Builder, go to Library > Project tab.",1511],["Open the Assets folder.",1511],["Right-click on the UI Document (UXML) and select Open with IDE.",1511],["\nUse the UXML Preview pane.\n",1511],["In UI Builder, make sure your UI Document (UXML) is currently loaded.",1511],["Go to the UXML Preview pane.",1511],["Select the icon at the top-right corner of the UXML Preview pane.",1511],["The currently opened and active UI Document (UXML) asset name is displayed in the Hierarchy pane as a root tree item, in the Canvas header inside the Viewport, and in the UXML Preview pane at the bottom of the Viewport. An asterisk (*) next to the name indicates unsaved changes.",1511],["To save a UI Document (UXML):",1511],["\nUse the File > Save menu in the UI Builder's Viewport pane toolbar.\n",1511],["\nUse Ctrl/CMD + S. It also prompts you to save the Scene in the Editor.\n",1511],["Note**: The Unity project-wide save doesn't save the active UI Document (UXML) opened in the UI Builder.",1511],["StyleSheets",1511],["StyleSheets and the USS Selectors in UI Toolkit are used to share and apply styles across many elements and UI Documents (UXML).",1511],["The StyleSheets pane is where you can:",1511],["\nAdd, reorder, or remove StyleSheets (USS) in the current UI Document (UXML).\n",1511],["\nCreate, reorder, copy, or remove USS Selectors within StyleSheets to share styles across different elements.\n",1511],["Hierarchy",1511],["The Hierarchy pane contains the tree view representing the element hierarchy of the current document. It's a superset of the hierarchy you see in the UXML text representation of the UI Document (UXML). Besides the elements created directly from UXML, the Hierarchy pane also contains elements created dynamically that only exist in the runtime of the UI. For example, the Hierarchy pane includes elements that are part of a Template instance (a different document instanced inside the current document), whereas the UXML would just have a single <Instance> tag.",1511],["You can use the Hierarchy pane to:",1511],["\nSelect elements for inspecting or editing.\n",1511],["\nCut, copy, delete, or reorder elements.\n",1511],["\nOpen instanced template documents as sub-documents for in-place (in context) editing.\n",1511],["\nCheck at once many elements' style class lists, name attributes, and locally attached StyleSheets.\n",1511],["Elements appear in the tree according to their name attributes. If an element's name attribute isn't set, it appears according to its C# type. You can double-click an element to quickly rename it.",1511],["Click the ⋮ icon in the top right corner of the Hierarchy pane header to access a menu of display options.",1511],["\nSelect Type to force the Hierarchy to display each element's C# type, regardless of whether it has a name.\n",1511],["\nSelect Class List to display each element's style class list next to its Hierarchy entry.\n",1511],["\nSelect Attached StyleSheets to display any locally attached StyleSheets next to their element.\n",1511],["Library",1511],["The Library pane is similar to the Project window in the Unity Editor. It lists available UI elements.",1511],["\nThe Standard tab lists the standard built-in elements that Unity provides. These elements include standard styling that works for all supported Unity Editor and runtime themes.\n",1511],["You can change this view mode between tiles and tree view using the ⋮ icon in the top right corner of the Library window and choosing Tree View.",1511],["\nThe Project tab lists custom .uxml assets in the Project. It also lists any custom C# elements that inherit from VisualElement and have their UxmlFactory set up to be instantiable via UXML. To preview any element in the Library's Project tab, hover over it. The preview appears to the right of the Library pane.\n",1511],["To instantiate an element, do one of the following:",1511],["\nDrag it into the Hierarchy pane.\n",1511],["\nDrag the element onto the Canvas in the Viewport.\n",1511],["\nDouble-click the element. This adds the element as a sibling of the currently selected element. If nothing is selected, the element is added at the root of the UI Document (UXML).\n",1511],["You can select elements in the Hierarchy window or in the Canvas. In the Hierarchy, hold down Ctrl/Cmd to select additional elements. In the Canvas, when an element is focused, you can click the element to select its parent element, which you can repeat to travel up the element hierarchy until it reverts back to the original element.",1511],["Viewport",1511],["The Viewport pane displays the output of a UI Document (UXML) on a floating resizable edit-time Canvas. The toolbar contains menus of UI Builder-specific commands, Viewport settings, Theme selector, and the Preview button. You can find additional UI Builder settings in the top-right corner of the Viewport under the ⋮ menu, including a shortcut to the UI Builder's Settings in Unity's Project Settings.",1511],["Navigate in the Viewport",1511],["Pan and zoom to navigate in the Viewport. The UI Builder saves each UI Document (UXML)'s current pan and zoom state, and restores them after the UI Builder window reloads, a domain reloads, or when you close and re-open the same UI Document (UXML).",1511],["When you create and open a new document, the UI Builder resets the pan and zoom states.",1511],["To pan, do one of the following:",1511],["\nMiddle-click and drag in the Viewport.\n",1511],["\nHold down Ctrl/Cmd + Alt/Option and click and drag in the Viewport.\n",1511],["To zoom in and out, position the mouse pointer in the Viewport and do one of the following:",1511],["\nPosition the mouse pointer in the Viewport, and rotate the mouse wheel.\n",1511],["\nHold down Alt/Option and right-mouse drag. Drag right to zoom in, and left to zoom out.\n",1511],["Set up the Canvas",1511],["The Canvas is where you edit, preview, and interact with the UI Document (UXML) you are authoring. If you can't see it, select the Fit Canvas button in the Viewport toolbar to bring it into view. The header of the Canvas displays the name of the currently loaded UI Document (UXML). An asterisk (*) next to the name indicates unsaved changes.",1511],["To resize the Canvas:",1511],["\nInside the Viewport, drag the edges or corners.\n",1511],["\nSelect the Canvas header to display the Inspector window of the canvas, where you can enter the canvas' width and height.\n",1511],["To match the Canvas size to the size of the Unity Game window, select the Match Game View checkbox.",1511],["You can change the Canvas background to make it easier to edit the UI. To change the background, select the Canvas in the Inspector pane. You can set it to be a solid color, a specific texture (a mock-up from a UI Designer), or a live view from a Camera in an open Unity Scene:",1511],["Any settings related to the Canvas, like its size, aren't saved as part of the UI Document (UXML) but stored in a separate settings file for the next time you open the same UI Document (UXML).",1511],["Code Previews",1511],["As you build your UI, UI Builder automatically generates the underlying UXML and USS text, and displays them in the UXML Preview and USS Preview panes .",1511],["",1511],["Inspector",1511],["The UI Builder Inspector pane is similar to the Unity Inspector window. The Inspector displays slightly different content, depending on the object you have selected inside the UI Builder:",1511],["\nElements display an attribute section for per-element (UXML) attributes, a StyleSheets section to assign style classes and view applied styles from StyleSheets, and an Inlined Styles section to edit inline per-element style properties.\n",1511],["\nUSS Selectors display a Style Selector section to change the selector query string and a Styles section to edit style properties.\n",1511],["\nCanvas displays a Canvas Size section to change the Canvas size, a Canvas Background section to change the edit-time canvas background, and a Document Settings section for per-document edit-time settings.\n",1511],["",1511],["Enable Editor Extension Authoring for UI Documents (UXML)",1511],["By default, new UI Documents (UXML) created in the UI Builder have a setting saved within the UXML that marks them as runtime-only UI:",1511],["```lang-xml",1511],["",1511],["This means that, by default, the Library pane's Standard tab only contains elements that work best at runtime.",1511],["To create UI for the Unity Editor, like custom Editor Windows or custom Inspectors, you can enable Editor Extension Authoring to see additional Editor-Only controls in the Standard tab of the Library pane.",1511],["To enable Editor Extension Authoring:",1511],["\nSelect the Canvas header to display the Inspector window of the canvas, where you select the Document Settings > Editor Extension Authoring option:\n",1511],["\nIn the menu on the Library pane, select Editor Extension Authoring.\n",1511],["Note**: Unlike the other Canvas settings, this setting is saved in the editor-extension-mode attribute of the root element of the UI Document (UXML).",1511],["To enable Editor Extension Authoring on any new UI Documents (UXML) by default:",1511],["Go to Edit > Project Settings > UI Builder.",1511],["Select Enable Editor Extension Authoring by Default.",1511],["UI Documents (UXML) that you create outside of the UI Builder, for example, in a text editor or IDE, don't have an Editor Extension Authoring attribute until you open them in the UI Builder. However, you can add the editor-extension-mode attribute manually in your UI Document (UXML) in a text editor or IDE at any moment. When you open an externally created UI Document (UXML) in the UI Builder for the first time, the Editor Extension Authoring attribute is set according to the default specified in the UI Builder project settings.",1511],["Additional resources",1511],["\nGet started with UI Builder\n",1511],["UI Builder project settings",1512],["To view the UI Builder project settings, go to Edit > Project Settings > UI Builder. When you create a new UI Document (UXML) in the UI Builder, certain features are set by default:",1512],["\nThe UI Document is set to suit runtime UI.\n",1512],["\nThe UI Builder library only displays UI controls that are available for runtime UI.\n",1512],["\nYou can easily zoom in and out of the canvas of the Viewport window in UI Builder using your mouse wheel or trackpad.\n",1512],["To ensure that newly created documents are, by default, compatible with Editor UI and that the UI Builder library displays the additional controls for Editor UI, select Enable Editor Extension Authoring by Default. For more information, refer to Enable Editor Extension Authoring for UI Documents (UXML).",1512],["To disable zooming on your canvas using your mouse wheel or trackpad, select Disable Viewport Zooming via Mouse Wheel/Trackpad.",1512],["Additional resources",1512],["\nUI Builder\n",1512],["Create a custom control with two attributes",1513],["Version**: 2021.3+",1513],["This example demonstrates how to create a simple custom control with two attributes.",1513],["Example overview",1513],["This example creates a custom control called MyElement with two attributes and exposes it to UXML and UI Builder. This example also shows how to add the custom control to a UI in the UI Builder.",1513],["You can find the completed files that this example creates in this GitHub repository.",1513],["Prerequisites",1513],["This guide is for developers who are familiar with Unity, UI Toolkit, and C# scripting. Before you start, get familiar with the following:",1513],["Create the example",1513],["To create a new custom control class in C#, inherit it from the VisualElement class. This allows you to create and use this element in C#, but won’t automatically expose it in UXML and UI Builder. To expose it, define a traits class derived from UxmlTraits and override the Init().",1513],["Create a Unity project with any template.",1513],["In the Assets folder, create a C# script named MyElement.cs with the following content:",1513],["```lang-csharp",1513],["using UnityEngine;",1513],["using UnityEngine.UIElements;",1513],["class MyElement : VisualElement",1513],["public new class UxmlFactory : UxmlFactory { }",1513],["// Add the two custom UXML attributes.",1513],["public new class UxmlTraits : VisualElement.UxmlTraits",1513],["UxmlStringAttributeDescription m_String =",1513],["new UxmlStringAttributeDescription { name = \"my-string\", defaultValue = \"default_value\" };",1513],["UxmlIntAttributeDescription m_Int =",1513],["new UxmlIntAttributeDescription { name = \"my-int\", defaultValue = 2 };",1513],["public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)",1513],["base.Init(ve, bag, cc);",1513],["var ate = ve as MyElement;",1513],["ate.myString = m_String.GetValueFromBag(bag, cc);",1513],["ate.myInt = m_Int.GetValueFromBag(bag, cc);",1513],["// Must expose your element class to a { get; set; } property that has the same name",1513],["// as the name you set in your UXML attribute description with the camel case format",1513],["public string myString { get; set; }",1513],["public int myInt { get; set; }",1513],["Create a UXML file with any name you want.",1513],["Double-click the UXML file to open it in the UI Builder.",1513],["In the Library section of the UI Builder, select Project > Custom Controls (C#) > MyElement.",1513],["Drag MyElement to the Hierarchy window.",1513],["To see the custom attributes for MyElement, go to the Inspector window of MyElement:",1513],["Additional resources",1513],["Work with elements",1514],["The most basic building block in UI Toolkit is a `VisualElement'. These elements are ordered into a hierarchy tree with parent-child relationships. This is called the visual tree.",1514],["Add elements",1514],["You need to add elements to the hierarchy to create UI. To add an element to the hierarchy in UI Builder, drag it from the Library tab into the Hierarchy window. You can also double-click on an element in the Library to append it to the Hierarchy. By default, elements aren't named, so they appear in the Hierarchy as their type name.",1514],["To name an element, double-click on the item in the Hierarchy, or update the Name attribute in the element's Inspector window.",1514],["Unique naming in UI Toolkit isn't enforced, so they're only for identification within the UI. UI Builder doesn't use element names for any internal identification or functionality.",1514],["To build a hierarchy, you can drag one or more elements in the Hierarchy to reorder them or move them between parents:",1514],["You can also drag elements into and from the Canvas, where a yellow line appears to indicate the element placement:",1514],["Manipulate elements",1514],["To copy, paste, duplicate, or delete one or more selected elements, right-click on an element and select the option in the menu. You can also use the standard short-cut keys for your operating system.",1514],["When you copy an element in the Hierarchy pane, it copies the UXML text representation of the element and its children. This means you can paste it directly into a text editor. You can also copy UXML text and paste it into the UI Builder.",1514],["All actions you do to an element are also applied to all its children. For example, deleting an element deletes all its children and duplicating an element replicates the entire sub-tree of elements under it.",1514],["",1514],["Read-only elements",1514],["When you drag an element from the Library tab to the Hierarchy tab, you might notice additional child elements appearing in a dimmed state. These are read-only elements. This happens with some built-in UI controls, and some custom elements that create their internal hierarchy upon creation.",1514],["When you add child elements to a VisualElement, children elements are added to the contentContainer of this parent element. For example, the ScrollView below has one Foldout child element that's inside the contentContainer. It also has several Scroller child elements that are in the shadow tree. The shadow tree is the hierarchy of child elements that are outside of the contentContainer of this element.",1514],["As the UI Builder can only edit what it can represent in the UXML Document, it is not possible to edit the internal hierarchy. UXML is not a direct copy of the live UI hierarchy but rather an instruction set.",1514],["Attributes in UXML",1514],["Elements have per-element attributes which can be set in UXML. You can think of them as a constructor or initialization arguments. This includes the name attribute. The base VisualElement class comes with a few standard attributes that all elements share (since all elements inherit from VisualElement), like name, tooltip, and tabindex. More advanced elements and controls have additional attributes you can set, for example, the Label adds the text attribute.",1514],["Note**: You can use the Enter key to add newline characters for the text attribute.",1514],["Change attributes in the Inspector",1514],["All standard and custom attributes appear in the Attribute section at the top of the Inspector window.",1514],["You can set the value of an attribute in the attribute section. If the field appears bold with a solid line on the left of the field's label, it means the attribute is already set and not using the default. For example, setting tooltip from empty to test and then back to empty is different from never setting it in the first place: the first case is unset while the second case is set to empty. What this attribute is set means is there's an entry in the UXML text on this element setting this attribute to avalue",1514],["If the attribute doesn't appear in the UXML file, it's not set.",1514],["To unset an attribute, right-click on the field's label and select Unset.",1514],["To unset all attributes, right-click on the field's label and select Unset All.",1514],["Change attributes in the Canvas",1514],["The only attribute you can change directly in the Canvas is the text attribute on text elements such as a Button or a Label. To change the text attribute in the Canvas, double-click on it in the Canvas.",1514],["To commit the change, press the Enter key. If the text attribute contains newline characters, use Shift + Enter to commit the change.",1514],["To cancel the change, press the Esc key.",1514],["Additional resources",1514],["Use UXML instances as templates",1515],["You can instantiate existing UXML Documents as Templates inside your UXML Documents as Template Instances, similar to how Prefabs work in Unity.",1515],["Use a UXML Document as a template",1515],["To use an existing UXML Document in your project as a template, do the following:",1515],["Under the Library's Project tab, find the UXML Asset (.uxml) you wish to instantiate.",1515],["Drag it into the Hierarchy like an element in the Library.",1515],["A Template Instance appears in the Hierarchy like a normal element of type TemplateContainer. The name of the .uxml file displays as greyed font to the right of its name. If you expand the Template Instance, you can see the internal hierarchy of the instance. This internal hierarchy, as explained in Working with elements, is read-only and only for reference.",1515],["Make a Sub-Document as a template",1515],["You can make a Sub-Document within a UXML Document as a Template Instance, so you can reuse it.",1515],["Right-click on the Sub-Document.",1515],["Select Create Template.",1515],["Select a location to save the file.",1515],["This also instantiates the Sub-Document as Template Instances in the existing document.",1515],["",1515],["Edit a UXML document template instance",1515],["To edit an original UXML Document used as a Template Instance, right-click on a Template Instance, and select one of the following options:",1515],["\nOpen in UI Builder: Unload the current UXML Document, and load the Template Instance:\n",1515],["\nOpen Instance in Isolation: Keep the current UXML Document loaded in the background while loading Template Instance. The Hierarchy and the Canvas only display the contents of the Template Instance, and the StyleSheets pane includes the style sheet of the background parent UXML Document in a read-only state. This is because the style sheets are still being applied to the Template Instance:\n",1515],["\nOpen Instance in Context: Keep the current UXML Document loaded while making all its elements read-only and appear dimmed in the Hierarchy and the Canvas. You can edit the contents of the Template Instance within the context of the parent UXML Document. Use this option to update Template Instance content without losing the context of the host document:\n",1515],["\nShow in Project: Show the location of the Template Instance file in the Project window.\n",1515],["For the second and third options, a breadcrumb appears above the Viewport. You can use the breadcrumb to go back to a parent UXML Document.",1515],["Unpack a UXML document template instance",1515],["To unpack a single Template Instance, right-click on a Template Instance and select Unpack Instance. This changes Template Instance to a normal UXML Document.",1515],["To unpack all the Template Instances, right-click on a Template Instance and select Unpack Instance Completely. This changes all the Template Instances to normal UXML Documents.",1515],["Additional resources",1515],["\nReuse UXML files\n",1515],["\nEncapsulate UXML documents with logic\n",1515],["Set background images",1516],["You can use both the Image element and the VisualElement.backgroundImage property to add visual content to your UI. The choice between the two depends on the specific requirements of your application. For more information, refer to Image versus VisualElement.backgroundImage.",1516],["Topic Description ",1516],["Set background images with an image asset Use an imported or built-in image asset to set a background image for your UI. ",1516],["Image import settings Apply import settings for Textures, Sprites, and Vector images before you use them as a background for a visual element in the UI Builder. ",1516],["9-Slice images with UI Toolkit Use 9-Slice images to create resizable UI elements. ",1516],["Additional resources",1516],["\nUXML element Image\n",1516],["Style text with USS",1517],["You can style text with USS text properties inline in UXML, a USS file, or directly in UI Builder.",1517],["Style text in USS and UXML",1517],["Text properties are regular USS style properties. You can set text style properties on any element. Unlike most USS style properties, text style properties propagate to child elements.",1517],["The following USS example styles the Label text to bold, italic, and have a font size of 39px:",1517],["```lang-uss",1517],["Label {",1517],["-unity-font-style: bold-and-italic;",1517],["font-size: 39px;",1517],["The following UXML inline style example applies the same style to the Label text:",1517],["```lang-xml",1517],["",1517],["",1517],["",1517],["",1517],["",1517],["Style text in UI builder",1517],["To style text in UI Builder, you can use the Text section in a UI control's Inspector window to style text.",1517],["If the UI control is a text element that inherits from TextElement, such as Label or Button, you can also set the following text styles directly in the Canvas on selected text elements:",1517],["\nHorizontal text align\n",1517],["\nVertical text align\n",1517],["\nText wrap\n",1517],["Additional resources",1517],["Style UI with UI Builder",1518],["In UI Builder, you can style an element with inline styles or USS selectors. Inline styles are typically used for single-use or experimental purposes, whereas managing styles through style sheets tends to be easier and more efficient. You can extract inline styles to a USS class. You can also manage style sheets and USS selectors in UI Builder.",1518],["Set inline styles to elements",1518],["You can set inline styles to elements in the Inlined Styles section in the element's Inspector window.",1518],["Style fields that appear bold with a solid line on the left of the field label represent style properties that are already set or overridden. It's important to keep track of these overridden style properties, as they always override the same property coming from a StyleSheet or from a C# default. To unset or remove the override for a style property, right-click on the style field and select Unset.",1518],["Note**: You can't use inline style to style pseudo-classes or read-only elements.",1518],["Manage a style sheet",1518],["To add a style sheet, use the + dropdown menu and select one of the following options:",1518],["\nCreate New USS: This opens a Save File Dialog to create a new style sheet in your project.\n",1518],["\nAdd Existing USS: This opens the Open File Dialog to add an existing style sheet to the UI Document.\n",1518],["To remove a style sheet from the active UI Document, right-click on the style sheet and select Remove USS.",1518],["To make a style sheet active, right-click on a style sheet and select Set as Active USS. An Active StyleSheet appears bold.",1518],["When you edit sub-documents, the style sheets that belong to parent documents appear dimmed and are read-only.",1518],["Note**: You can add comments in a USS file with a text editor the same way as you do with a CSS file. However, if you open the USS file in the UI Builder, the comments are removed as soon as you save the USS file from the UI Builder.",1518],["Create USS selectors",1518],["You can create any new USS selectors in the StyleSheets window. You can also create a new class selector in the StyleSheets section in the Inspector window. A new selector is always added to the Active StyleSheet.",1518],["To create a new selector in the StyleSheets window:",1518],["In the StyleSheets window, click in the Add new selector... field. This opens a USS selector syntax reference window on top of the Viewport as shown in the image below:",1518],["Enter the selector with the correct syntax. For example, a class selector should start with ..",1518],["Press the Enter key.",1518],["In the StyleSheets window, select the newly-created selector.",1518],["In the selector's Inspector window, set the desired styles for the selector.",1518],["To create a new class selector in an element's Inspector window:",1518],["In the Hierarchy window, select the element.",1518],["In the Inspector window, enter the class selector in the Style Class List text field.",1518],["Select Add Style Class to List. A yellow-style class label appears in Style Class List.",1518],["If the yellow-style class label appears faded, it means the selector doesn't exist in the attached StyleSheets. You can double-click on it to create a new class selector. If the class selector exists, you can double-click on it to open the selector's Inspector window.",1518],["Manipulate USS selectors",1518],["To copy, paste, duplicate, rename, or delete one or more USS selectors:",1518],["In the StyleSheets window, select the group.",1518],["Right-click the group and select the desired action.",1518],["Tip**: You can copy and paste a USS selector between the UI Builder's StyleSheets window and a text editor.",1518],["Match USS style class to elements",1518],["You can match USS classes to elements. For example, if you have the following USS style:",1518],["To match USS style class to elements, do any of the following:",1518],["\nDrag a style class label, like , onto the element in either the Hierarchy or the Canvas.\n",1518],["\nEnter the name of the selector into the StyleSheet > Style Class List field in the element's Inspector window and then select Add Style Class to List:\n",1518],["Additional resources",1518],["\nUI Builder\n",1518],["\nSelector precedence\n",1518],["Assign USS variables in UI Builder",1519],["USS variables define values that you can reuse in other USS rules. USS variables are primarily used for themes, with the default Unity themes exposing a long list of standard variables to make your UI more consistent with standard controls.",1519],["You can't create USS variables with UI Builder. You must use a text editor to create a new USS variable in the USS file.",1519],["You can assign a USS variable that's in the current theme or any assigned StyleSheets to the current UI Document (UXML) to a style property in UI Builder. When you work on an Editor UI, make sure to enable Editor Extension Authoring to see all available Editor variables.",1519],["To assign a variable:",1519],["In the StyleSheet window, select the selector.",1519],["In the Inspector window, right-click a style field.",1519],["Select Set Variable. This converts the style field into a text field.",1519],["Enter the name of the USS variable. As you type the name of the variable, a dropdown list displays the available variables.",1519],["You can also select a variable from the dropdown list, and see its current value and the StyleSheet asset it's coming from. Pressing Enter sets the variable and reverts the style field back to its original type.",1519],["Tip**: For style fields that are already text fields, you can also assign a variable by starting to type -- instead of a number.",1519],["You can see which style fields already have a variable assigned by looking at the label of the field and seeing if it's enclosed in a box:",1519],["To remove a variable assignment, right-click a style field and select Remove Variable.",1519],["Note**: Any inline styles set on a style property will override the USS variables.",1519],["Additional resources",1519],["\nUI Builder\n",1519],["Test UI",1520],["You can test your UI inside the UI Builder, and use debugging tools to investigate styles.",1520],["Test UI in Preview mode",1520],["To test your UI inside the UI Builder, directly inside the Canvas, you can enable Preview mode, found in the Viewport's toolbar. Preview mode removes the UI Builder-specific picking overlay and handles from the Canvas. You can tell if you have Preview mode enabled by looking for an orange border around the entire Viewport:",1520],["With Preview mode enabled, you can test the following:",1520],["\nState-based controls like Foldout, which you can click on to expand and see how the rest of the UI reacts.\n",1520],["\nInput fields like IntegerField, where you can test input validation.\n",1520],["\nLarge containers like ScrollView, where you can test scrolling up and down.\n",1520],["\n:hover pseudo states to check hover-only styles.\n",1520],["In Preview mode, you can still work on your UI. However, Canvas picking and manipulators are turned off in Preview mode.",1520],["",1520],["Debug styles",1520],["If you don't know where a style comes from, you can find the styles for an element in the Matching Selectors section in the UI Builder's Inspector.",1520],["In the Canvas of the UI Builder, select the element.",1520],["In the Inspector window, expand StyleSheet > Matching Selectors.",1520],["The Matching Selectors section displays the following:",1520],["USS selectors from your own style sheets",1520],["USS selectors from the default Unity theme",1520],["Note**: USS selectors that appear lower in the list always override the same style properties in higher USS selectors.",1520],["If the Matching Selectors section doesn't provide enough information, you can use the UI Toolkit Debugger. The UI Toolkit Debugger is a tool that you can use to inspect and debug your UI elements in real-time. It provides a visual representation of your UI hierarchy. You use it to examine the state and properties of each UI element.",1520],["Additional resources",1520],["Basic Layout",1521],["In this section we'll look at how you can position UI elements relative to the Canvas and each other. If you want to test yourself while reading, you can create an Image using the menu GameObject -> UI -> Image.",1521],["The Rect Tool",1521],["Every UI element is represented as a rectangle for layout purposes. This rectangle can be manipulated in the Scene View using the Rect Tool in the toolbar. The Rect Tool is used both for Unity's 2D features and for UI, and in fact can be used even for 3D objects as well.",1521],["The Rect Tool can be used to move, resize and rotate UI elements. Once you have selected a UI element, you can move it by clicking anywhere inside the rectangle and dragging. You can resize it by clicking on the edges or corners and dragging. The element can be rotated by hovering the cursor slightly away from the corners until the mouse cursor looks like a rotation symbol. You can then click and drag in either direction to rotate.",1521],["Just like the other tools, the Rect Tool uses the current pivot mode and space, set in the toolbar. When working with UI it's usually a good idea to keep those set to Pivot and Local.",1521],["Rect Transform",1521],["The Rect Transform is a new transform component that's used for all UI elements instead of the regular Transform component.",1521],["Rect Transforms have position, rotation, and scale just like regular Transforms, but it also has a width and height, used to specify the dimensions of the rectangle.",1521],["Resizing Versus Scaling",1521],["When the Rect Tool is used to change the size of an object, normally for Sprites in the 2D system and for 3D objects it will change the local scale of the object. However, when it's used on an object with a Rect Transform on it, it will instead change the width and the height, keeping the local scale unchanged. This resizing won't affect font sizes or the border on sliced images.",1521],["Pivot",1521],["Rotations, size, and scale modifications occur around the pivot so the position of the pivot affects the outcome of a rotation, resizing, or scaling. When the toolbar Pivot button is set to Pivot mode, the pivot of a Rect Transform can be moved in the Scene View.",1521],["Anchors",1521],["Rect Transforms include a layout concept called anchors. Anchors are shown as four small triangular handles in the Scene View and anchor information is also shown in the Inspector.",1521],["If the parent of a Rect Transform is also a Rect Transform, the child Rect Transform can be anchored to the parent Rect Transform in various ways. For example, the child can be anchored to the center of the parent, or to one of the corners.",1521],["The anchoring also allows the child to stretch together with the width or height of the parent. Each corner of the rectangle has a fixed offset to its corresponding anchor, i.e. the top left corner of the rectangle has a fixed offset to the top left anchor, etc. This way the different corners of the rectangle can be anchored to different points in the parent rectangle.",1521],["The positions of the anchors are defined in fractions (or percentages) of the parent rectangle width and height. 0.0 (0%) corresponds to the left or bottom side, 0.5 (50%) to the middle, and 1.0 (100%) to the right or top side. But anchors aren't limited to the sides and middle; they can be anchored to any point within the parent rectangle.",1521],["You can drag each of the anchors individually, or if they're together, you can drag them together by clicking in the middle in between them and dragging. If you hold down Shift key while dragging an anchor, the corresponding corner of the rectangle will move together with the anchor.",1521],["A useful feature of the anchor handles is that they automatically snap to the anchors of sibling rectangles to allow for precise positioning.",1521],["Anchor presets",1521],["In the Inspector, the Anchor Preset button can be found in the upper left corner of the Rect Transform component. Clicking the button brings up the Anchor Presets dropdown. From here you can select from some of the most common anchoring options. You can anchor the UI element to the sides or middle of the parent, or stretch together with the parent size. The horizontal and vertical anchoring is independent.",1521],["The Anchor Presets buttons displays the currently selected preset option if there is one. If the anchors on either the horizontal or vertical axis are set to different positions than any of the presets, the custom options is shown.",1521],["Anchor and position fields in the Inspector",1521],["You can click the Anchors expansion arrow to reveal the anchor number fields if they are not already visible. Anchor Min corresponds to the lower left anchor handle in the Scene View, and Anchor Max corresponds to the upper right handle.",1521],["The position fields of rectangle are shown differently depending on whether the anchors are together (which produces a fixed width and height) or separated (which causes the rectangle to stretch together with the parent rectangle).",1521],["When all the anchor handles are together the fields displayed are Pos X, Pos Y, Width, and Height. The Pos X and Pos Y values indicate the position of the pivot relative to the anchors.",1521],["When the anchors are separated the fields can change partially or completely to Left, Right, Top, and Bottom. These fields define the padding inside the rectangle defined by the anchors. The Left and Right fields are used if the anchors are separated horizontally and the Top and Bottom fields are used if they're separated vertically.",1521],["Note that changing the values in the anchor or pivot fields will normally counter-adjust the positioning values in order to make the rectangle stay in place. In cases where this isn't desired, enable Raw edit mode by clicking the R button in the Inspector. This causes the anchor and pivot value to be able to be changed without any other values changing as a result. This will likely cause the rectangle to be visually moved or resized, since its position and size is dependent on the anchor and pivot values.",1521],["UI Builder",1522],["UI Builder lets you visually create and edit UI assets, such as UI Documents (.uxml), and StyleSheets (.uss), that you use with UI Toolkit.",1522],["You can also install the following optional packages that offer additional functionality in UI Builder:",1522],["\nThe com.unity.vectorgraphics package allows you to assign a VectorImage as a background style on an element.\n",1522],["\nThe com.unity.2d.sprite package allows you to assign a 2D Sprite asset (or sub-asset) as a background style on an element. With the 2D Sprite package installed, you can also open the 2D Sprite Editor directly from the Inspector pane.\n",1522],["Topic Description ",1522],[":-------------------- :----------------------- ",1522],["UI Builder interface overview Understand the UI Builder interface. ",1522],["Get started with UI Builder Understand the workflow to create UI in UI Builder by an example. ",1522],["Work with elements Learn how to structure UI controls in your project. ",1522],["Use UXML instances as templates Learn how to use existing UXML Documents as templates inside your UXML Documents in UI Builder. ",1522],["Style UI with UI Builder Learn how to create and manage USS styles, how to use USS selectors and variables, and how to position elements and set background images. ",1522],["Assign USS variables in UI Builder Learn how to assign and remove a USS variable in UI Builder. ",1522],["Test UI Debug your styles and test inside the UI Builder. ",1522],["Additional resources",1522],["\nGet started with UI Toolkit\n",1522],["\nGet started with runtime UI\n",1522],["\nStructure UI with UXML\n",1522],["\nStyle UI with USS\n",1522],["Canvas",1523],["The Canvas is the area that all UI elements should be inside. The Canvas is a Game Object with a Canvas component on it, and all UI elements must be children of such a Canvas.",1523],["Creating a new UI element, such as an Image using the menu GameObject > UI > Image, automatically creates a Canvas, if there isn't already a Canvas in the scene. The UI element is created as a child to this Canvas.",1523],["The Canvas area is shown as a rectangle in the Scene View. This makes it easy to position UI elements without needing to have the Game View visible at all times.",1523],["Canvas uses the EventSystem object to help the Messaging System.",1523],["Draw order of elements",1523],["UI elements in the Canvas are drawn in the same order they appear in the Hierarchy. The first child is drawn first, the second child next, and so on. If two UI elements overlap, the later one will appear on top of the earlier one.",1523],["To change which element appear on top of other elements, simply reorder the elements in the Hierarchy by dragging them. The order can also be controlled from scripting by using these methods on the Transform component: SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex.",1523],["Render Modes",1523],["The Canvas has a Render Mode setting which can be used to make it render in screen space or world space.",1523],["Screen Space - Overlay",1523],["This render mode places UI elements on the screen rendered on top of the scene. If the screen is resized or changes resolution, the Canvas will automatically change size to match this.",1523],["Screen Space - Camera",1523],["This is similar to Screen Space - Overlay, but in this render mode the Canvas is placed a given distance in front of a specified Camera. The UI elements are rendered by this camera, which means that the Camera settings affect the appearance of the UI. If the Camera is set to Perspective, the UI elements will be rendered with perspective, and the amount of perspective distortion can be controlled by the Camera Field of View. If the screen is resized, changes resolution, or the camera frustum changes, the Canvas will automatically change size to match as well.",1523],["World Space",1523],["In this render mode, the Canvas will behave as any other object in the scene. The size of the Canvas can be set manually using its Rect Transform, and UI elements will render in front of or behind other objects in the scene based on 3D placement. This is useful for UIs that are meant to be a part of the world. This is also known as a \"diegetic interface\".",1523],["9-Slice images with UI Toolkit",1524],["Generally, you can apply the 9-slice technique to a regular 2D Sprite. However, with UI Toolkit, you can apply the 9-slice technique to Texture, Render Texture, and SVG Vector images.",1524],["To apply the 9-slice technique to an image:",1524],["For a Sprite image, use Sprite Editor or USS.",1524],["For other types of images, use USS.",1524],["To apply the 9-slice technique to a selected image with USS:",1524],["Open UI Builder.",1524],["In the Background section in the Inspector, specify the Left, Right, Top, and Bottom slice values.",1524],["You can also specify the slice values directly in USS, UXML, or C# files for the following properties:",1524],["-unity-slice-left",1524],["-unity-slice-right",1524],["-unity-slice-top",1524],["-unity-slice-bottom",1524],["-unity-slice-scale",1524],["Important**:",1524],["Slice values set with USS apply only to the image in the associated visual element. The values don't apply to the same image used in other visual elements, in other UI documents, or in a scene.",1524],["Unset slice value is zero. For example, if you set the Top, Bottom, and Right slice attributes but leave the Left slice empty, the Left slice is zero.",1524],["Slice values set in USS override slice values set in the Sprite Editor. For the example above, no matter what value you added to the Left slice in the Sprite Editor, the Left slice value is zero.",1524],["Additional resources",1524],["\nUXML element Image\n",1524],["\nSet background images with an image asset\n",1524],["Introduction to USS",1525],["A Unity Style Sheet (USS) is a text file recognized as an asset that supports style rules. The USS text file must have the .uss extension.",1525],["You can use USS files to define the appearance and styles for the UI elements in your games and applications. USS provides a way to separate the appearance and styling of UI elements from the rest of the code, making it easier to manage and maintain the look and feel of an application.",1525],["With USS, you can define styles for buttons, labels, images, and other UI elements in a separate USS file, and then apply these styles in your game or application code. This makes it possible to change the appearance of your application by modifying the USS file, without having to make changes to the code.",1525],["A USS consists of the following:",1525],["\nStyle rules that include a selector and a declaration block.\n",1525],["\nSelectors that identify which visual element the style rule affects.\n",1525],["\nA declaration block, inside curly braces, that has one or more style declarations. Each style declaration has a property and a value. Each style declaration ends with a semi-colon.\n",1525],["Syntax",1525],["The following is the general syntax of a style rule:",1525],["```lang-css",1525],["selector {",1525],["property1: value;",1525],["property2: value;",1525],["Style matching with rules",1525],["When you define a style sheet, you can apply it to a visual tree. Selectors match against elements to resolve which properties apply from the USS file. If a selector matches an element, the style declarations apply to the element.",1525],["For example, the following rule matches any Button object:",1525],["```lang-css",1525],["Button {",1525],["width: 200px;",1525],["Supported selector types",1525],["USS supports several types of simple and complex selectors that match elements based on different criteria, such as the following:",1525],["\nElement C# type name\n",1525],["\nAn assigned name property\n",1525],["\nA list of USS classes\n",1525],["\nThe element’s position in the visual tree and its relationship to other elements\n",1525],["USS also supports pseudo classes that you can use with selectors to target elements that are in a specific state or select the :root element.",1525],["If an element matches more than one selector, USS applies the styles from whichever selector takes precedence.",1525],["Note**: All selectors are case-sensitive.",1525],["Simple selectors",1525],["USS supports a set of simple selectors that are analogous, but not identical, to simple selectors in CSS. The following table provides a quick reference of USS simple selectors.",1525],["Selector type Syntax Matches ",1525],["",1525],["Type selector Type {...} Elements of a specific C# or visual element type. ",1525],["Class selector .class {...} Elements with an assigned USS class. ",1525],["Name selector #name {..} Elements with an assigned name attribute. ",1525],["Universal selector * {...} Any elements. ",1525],["Complex selectors",1525],["USS supports a subset of CSS complex selectors. The following table provides a quick reference of USS complex selectors.",1525],["Selector type Syntax Matches ",1525],["",1525],["Descendant selector selector1 selector2 {...} Elements that are the descendant of another element in the visual tree. ",1525],["Child selector selector1 > selector2 {...} Elements that are the children of another element in the visual tree. ",1525],["Multiple selector selector1selector2 {...} Elements that match all the simple selectors. ",1525],["",1525],["Connect styles to elements",1525],["You can connect styles to elements by the following methods:",1525],["\nIn UI Builder, style an element with inline styles or USS selectors. For more information, refer to Style UI with UI Builder\n",1525],["\nIn UXML, style an element with inline styles or attach a style sheet with selectors matching this element. For more information, refer to Add styles to UXML.\n",1525],["\nIn a C# script, set styles directly to the style properties or add a USS style sheet to the styleSheet property with selectors matching an element. For more information, refer to Apply styles in C# scripts.\n",1525],["Additional resources",1525],["\nUSS selectors\n",1525],["\nBest practices for USS\n",1525],["\nTheme Style Sheet (TSS)\n",1525],["Add styles to UXML",1526],["In UI Toolkit, you can use USS to customize the appearance of visual elements. The suggested workflow for USS is that you visually style an element in UI Builder, extract the style to a USS file, and then reference it in UXML.",1526],["If you style an element in UI Builder, the style is added as an inline style to the style attribute of UXML elements:",1526],["```lang-xml",1526],["",1526],["",1526],["",1526],["To reference a stylesheet file, add the <Style> element under the root element of a UXML file.",1526],["For example, if you have a USS file named styles.uss with the following content:",1526],["```lang-css",1526],["root {",1526],["width: 200px;",1526],["height: 200px;",1526],["background-color: red;",1526],["You can reference it like this:",1526],["```lang-xml",1526],["",1526],["/styles.uss\" />",1526],["",1526],["",1526],["Additional resources",1526],["\nStyle UI\n",1526],["\nBest practices for managing elements\n",1526],["Apply styles in C# scripts",1527],["You can write to style to set style values to an element. However, to get the final computed styles of an element, read from resolvedStyle.",1527],["Set styles",1527],["In a C# script, you can set styles directly to the style properties of a visual element. For example, the following code sets the background color of a button to red:",1527],["```lang-csharp",1527],["button.style.backgroundColor = Color.red",1527],["You can also add a Unity style sheet (USS) to any visual element. Unity represents USS files as StyleSheet objects in C# scripts.",1527],["To add style sheets to a visual element:",1527],["Load StyleSheet objects with standard Unity APIs, such as AssetDatabase.Load() or Resources.Load().",1527],["Use the styleSheets property of a visual element to add the StyleSheet object.",1527],["For example, given a style sheet in the local variable styleSheet and an element in the local variable element, the following example adds the style sheet to the element:",1527],["```lang-csharp",1527],["element.styleSheets.Add(styleSheet);",1527],["Note**: Style rules apply to the visual element and all its descendants, but don't apply to the parent or siblings of the element. Any change to the USS file automatically refreshes the UI that uses this style sheet.",1527],["Get resolved styles",1527],["Style values on an element are computed from various sources, including multiple applied classes, inheritance from ancestors, and inline styles from UXML or C# code. These values might change from frame to frame. The style only holds the inline styles for the element and does not reflect other sources. The resolvedStyle has the final calculated values, considering all sources on the current frame.",1527],["For example, when you use the inline style to set the width for an element, both the style and resolvedStyle start with the same value. When the element is added to the hierarchy, resolvedStyle.width could be NaN until the layout updates. If you define the width in a class as a percentage, the computed width relies on parent properties such as border-width and padding. Although style.width might give a relative value, such as for transitions that can change value, resolvedStyle.width gives the actual rendered width.",1527],["The following example shows how to get the final computed width of an element:",1527],["```lang-csharp",1527],["float width = element.resolvedStyle.width;",1527],["Additional resources",1527],["\nManage UI asset references from C# scripts\n",1527],["Best practices for managing elements",1528],["This page describes the best practices for managing elements in the visual tree.",1528],["Pre-create hierarchies",1528],["It's a slow operation to create elements and load them in a hierarchy. To avoid this you can pre-create the elements in a hierarchy, and use display:none to hide them and only display them when needed. However, it might consume more memory to create many elements at the same time.",1528],["Pool recurring elements",1528],["Elements pooling is to keep hold of elements that you might recreate them later on, rather than creating elements with new() every time and letting go of them.",1528],["It's important to be fully in control of all elements that you pool and make sure you reset them properly before you return them to the pool. Otherwise, the pooling system can become unstable and troublesome. For example, it's impossible to clean up an element if you pool elements while registering event callbacks or setting internal non-serialized state at the same time.",1528],["Keep the number of visible elements low",1528],["To keep the number of visual elements low, use ListView when possible. ListView pools elements and recycles elements as the user scrolls.",1528],["Alternatively, you can implement your own pool and recycle mechanism similar to the ListView, and use the following to manage the visible area:",1528],["To observe the size of a container, use GeometryChangedEvent",1528],["To compute the size of children, use the VisualElement.layout property",1528],["Additional resources",1528],["\nThe visual tree\n",1528],["\nIntroduction to visual elements and visual tree\n",1528],["Bind a custom control",1529],["Version**: 2021.3+",1529],["This example demonstrates how to bind a custom control to a native Unity type.",1529],["Example overview",1529],["The example creates a custom control that displays a 2D image. It uses the custom control in a custom Editor for a new asset type, and it binds the custom control to a field in an asset of the new type.",1529],["You can find the completed files that this example creates in this GitHub repository.",1529],["Prerequisites",1529],["\nVisual Tree\n",1529],["\nUXML\n",1529],["\nUSS\n",1529],["\nBindableElement\n",1529],["\nINotifyValueChanged\n",1529],["Create a serialized object",1529],["Create a serialized object that contains a Texture2D.",1529],["Create a Unity project with any template.",1529],["In the Project window, create a folder named bind-custom-control to store the files.",1529],["Create a C# script named TextureAsset.cs and replace its contents with the following:",1529],["```lang-cs",1529],["using UnityEngine;",1529],["namespace UIToolkitExamples",1529],["[CreateAssetMenu(menuName = \"UIToolkitExamples/TextureAsset\")]",1529],["public class TextureAsset : ScriptableObject",1529],["public Texture2D texture;",1529],["public void Reset()",1529],["texture = null;",1529],["Create the Inspector UI",1529],["Create the Inspector UI, and bind the custom control to the Texture2D object.",1529],["In the Editor folder, create a C# script named TextureAssetEditor.cs and replace its contents with the following:",1529],["```lang-cs",1529],["using UnityEditor;",1529],["using UnityEngine.UIElements;",1529],["using UnityEngine;",1529],["namespace UIToolkitExamples",1529],["[CustomEditor(typeof(TextureAsset))]",1529],["public class TextureAssetEditor : Editor",1529],["[SerializeField]",1529],["VisualTreeAsset m_VisualTree;",1529],["public override VisualElement CreateInspectorGUI()",1529],["return m_VisualTree.CloneTree();",1529],["Set the binding with UXML",1529],["Create a UXML file with a TexturePreviewElement, and set the binding-path property to texture. This binds the TexturePreviewElement to TextureAsset.texture.",1529],["In the Editor folder, create a UI Document named texture_asset_editor.uxml and replace its contents with the following:",1529],["```lang-xml",1529],["",1529],["",1529],["",1529],["In the Project window, select TextureAssetEditor.cs.",1529],["Drag texture_asset_editor.uxml to Visual Tree in the Inspector.",1529],["Test the binding",1529],["From the menu, select Assets > Create > UIToolkitExamples > TextureAsset. This creates an instance of a TextureAsset.",1529],["Select the new TextureAsset object. In the Inspector, you can see the Texture Preview Element. If you put a texture asset reference into the field, you can see a preview above the field. If you change the asset reference in the Texture Preview Element in the UI, the TextureAsset.texture changes.",1529],["Additional resources",1529],["Bind a custom control to custom data type",1530],["Version**: 2021.3+",1530],["This example demonstrates how to bind custom controls to custom data types.",1530],["Example overview",1530],["This example creates a custom data type and a custom control based on three built-in controls. It binds the custom control to the custom data type. The drawer converts between Celsius and Fahrenheit.",1530],["You can find the completed files that this example creates in this GitHub repository.",1530],["Prerequisites",1530],["Create a custom data type",1530],["Create a custom data type Temperature, and use it as a serialized property.",1530],["Create a Unity project with any template.",1530],["Create a folder named bind-custom-data-type to store all the files.",1530],["Create a C# script named Temperature.cs and replace its contents with the following:",1530],["```lang-csharp",1530],["using System;",1530],["namespace UIToolkitExamples",1530],["public enum TemperatureUnit",1530],["Celsius,",1530],["Farenheit",1530],["[Serializable]",1530],["public struct Temperature",1530],["public double value;",1530],["public TemperatureUnit unit;",1530],["Create a C# script named PlanetScript.cs and replace its contents with the following:",1530],["```lang-csharp",1530],["using UnityEngine;",1530],["namespace UIToolkitExamples",1530],["public class PlanetScript : MonoBehaviour",1530],["public Temperature coreTemperature;",1530],["Create a custom control",1530],["Create a custom Editor for Planet and a custom Property Drawer for Temperature.",1530],["In the custom Property Drawer, implement a button that converts temperature between Fahrenheit and Celsius by writing to properties of SerializedProperty (use doubleValue and enumValueIndex) and then calling SerializedObject.ApplyModifiedProperties().",1530],["The custom Property Draweris is considered as a custom control. It's a built-in control that behaves in a custom way.",1530],["Create a folder named Editor.",1530],["In the Editor folder, create a C# script named PlanetEditor.cs and replace its contents with the following:",1530],["```lang-csharp",1530],["using UnityEditor;",1530],["using UnityEngine.UIElements;",1530],["using UnityEditor.UIElements;",1530],["namespace UIToolkitExamples",1530],["[CustomEditor(typeof(PlanetScript))]",1530],["public class PlanetEditor : Editor",1530],["public override VisualElement CreateInspectorGUI()",1530],["return new PropertyField(serializedObject.FindProperty(\"coreTemperature\"));",1530],["In the Editor folder, create a C# script named TemperatureDrawer.cs and replace its contents with the following:",1530],["```lang-csharp",1530],["using UnityEditor;",1530],["using UnityEngine;",1530],["using UnityEngine.UIElements;",1530],["namespace UIToolkitExamples",1530],["[CustomPropertyDrawer(typeof(Temperature))]",1530],["public class TemperatureDrawer : PropertyDrawer",1530],["public override VisualElement CreatePropertyGUI(SerializedProperty property)",1530],["var asset = Resources.Load(\"temperature_drawer\");",1530],["var drawer = asset.Instantiate(property.propertyPath);",1530],["drawer.Q().text = property.displayName;",1530],["// Don't allow conversion when you've selected multiple objects in the Inspector",1530],["if (!property.serializedObject.isEditingMultipleObjects)",1530],["drawer.Q().RegisterCallback(Convert, property);",1530],["return drawer;",1530],["static void Convert(ClickEvent evt, SerializedProperty property)",1530],["var valueProperty = property.FindPropertyRelative(\"value\");",1530],["var unitProperty = property.FindPropertyRelative(\"unit\");",1530],["// F -> C",1530],["if (unitProperty.enumValueIndex == (int)TemperatureUnit.Farenheit)",1530],["valueProperty.doubleValue -= 32;",1530],["valueProperty.doubleValue *= 5.0d / 9.0d;",1530],["unitProperty.enumValueIndex = (int)TemperatureUnit.Celsius;",1530],["else // C -> F",1530],["valueProperty.doubleValue *= 9.0d / 5.0d;",1530],["valueProperty.doubleValue += 32;",1530],["unitProperty.enumValueIndex = (int)TemperatureUnit.Farenheit;",1530],["// Important: Because you are bypassing the binding system, you must save the modified SerializedObject",1530],["property.serializedObject.ApplyModifiedProperties();",1530],["Set the binding",1530],["Create a UXML file with the following:",1530],["A DoubleField",1530],["An EnumField",1530],["A Button",1530],["Set the binding-path of the two fields to value and unit of the Temperature property.",1530],["In the Editor folder, create a folder named Resources.",1530],["In the Resources folder, create a UI Document named temperature_drawer.uxml and replace its contents with the following:",1530],["```lang-xml",1530],["",1530],["",1530],["",1530],["",1530],["",1530],["",1530],["",1530],["",1530],["",1530],["",1530],["Test the binding",1530],["Create an empty GameObject in a scene.",1530],["In the Hierarchy, select the GameObject.",1530],["Drag PlanetScript.cs to the Inspector. This adds a Planet Script component to the GameObject.",1530],["Enter a number in the Temperature field and select a unit from the dropdown.",1530],["Select the Convert button to convert between units. If you make changes in the Inspector UI, the Temperature property of the custom contol changes.",1530],["Additional resources",1530],["Bind to a list without ListView",1531],["Version**: 2021.3+",1531],["You can bind to a list without ListView. To do so, bind each element to an item in the array of the serialized object and track the value of the array size. The array size might change in certain situations, such as an undo or reset operation.",1531],["This example demonstrates how to bind to a list without ListView.",1531],["Example overview",1531],["This example creates a list of TexturePreviewElements and binds the list to an underlying list of Texture2D objects.",1531],["You can find the completed files that this example creates in this GitHub repository.",1531],["Prerequisites",1531],["\nVisual Tree\n",1531],["\nUXML\n",1531],["\nBindProperty()\n",1531],["\nTrackPropertyValue\n",1531],["\nScrollView\n",1531],["Create an object that contains a list",1531],["Create a C# class that contains a list. This list is the target of the binding.",1531],["Create a project in Unity with any template.",1531],["In your Project window, create a folder named bind-to-list-without-ListView to store all your files.",1531],["Create a C# script named TexturePackAsset.cs and replace its contents with the following:",1531],["```lang-cs",1531],["using System.Collections.Generic;",1531],["using UnityEngine;",1531],["namespace UIToolkitExamples",1531],["[CreateAssetMenu(menuName = \"UIToolkitExamples/TexturePackAsset\")]",1531],["public class TexturePackAsset : ScriptableObject",1531],["public List textures;",1531],["public void Reset()",1531],["textures = new() { null, null, null, null };",1531],["",1531],["Create the custom Editor and set the binding",1531],["Create the custom Editor with a C# script that creates the asset.",1531],["To change the size of the textures list when the number of TexturePreviewElements in the UI changes, call the SetupList() method and walk through the list of entries in the serialized list.",1531],["To bind each TexturePreviewElement to the list of textures, call BindProperty() with the property name of TexturePackAsset.textures.",1531],["In the Editor folder, create a C# script named TexturePackEditor.cs and replace its contents with the following:",1531],["```lang-cs",1531],["using UnityEditor;",1531],["using UnityEditor.UIElements;",1531],["using UnityEngine;",1531],["using UnityEngine.UIElements;",1531],["namespace UIToolkitExamples",1531],["[CustomEditor(typeof(TexturePackAsset))]",1531],["public class TexturePackEditor : Editor",1531],["[SerializeField]",1531],["VisualTreeAsset m_VisualTreeAsset;",1531],["public override VisualElement CreateInspectorGUI()",1531],["var editor = m_VisualTreeAsset.CloneTree();",1531],["var container = editor.Q(className: \"preview-container\");",1531],["SetupList(container);",1531],["// Watch the array size to handle the list being changed",1531],["var propertyForSize = serializedObject.FindProperty(nameof(TexturePackAsset.textures) + \".Array\");",1531],["propertyForSize.Next(true); // Expand to obtain array size",1531],["editor.TrackPropertyValue(propertyForSize, prop => SetupList(container));",1531],["editor.Q(\"add-button\").RegisterCallback(OnClick);",1531],["return editor;",1531],["void SetupList(VisualElement container)",1531],["var property = serializedObject.FindProperty(nameof(TexturePackAsset.textures) + \".Array\");",1531],["var endProperty = property.GetEndProperty();",1531],["property.NextVisible(true); // Expand the first child.",1531],["var childIndex = 0;",1531],["// Iterate each property under the array, and populate the container with preview elements",1531],["do",1531],["// Stop if you reach the end of the array",1531],["if (SerializedProperty.EqualContents(property, endProperty))",1531],["break;",1531],["// Skip the array size property",1531],["if (property.propertyType == SerializedPropertyType.ArraySize)",1531],["continue;",1531],["TexturePreviewElement element;",1531],["// Find an existing element or create one",1531],["if (childIndex < container.childCount)",1531],["element = (TexturePreviewElement)container[childIndex];",1531],["else",1531],["element = new TexturePreviewElement();",1531],["container.Add(element);",1531],["element.BindProperty(property);",1531],["++childIndex;",1531],["while (property.NextVisible(false)); // Never expand children.",1531],["// Remove excess elements if the array is now smaller",1531],["while (childIndex < container.childCount)",1531],["container.RemoveAt(container.childCount - 1);",1531],["void OnClick(ClickEvent evt)",1531],["var property = serializedObject.FindProperty(nameof(TexturePackAsset.textures));",1531],["property.arraySize += 1;",1531],["serializedObject.ApplyModifiedProperties();",1531],["Create a UI Document called texture_pack_editor.uxml and replace its contents with the following:",1531],["```lang-xml",1531],["",1531],["",1531],["",1531],["",1531],["",1531],["",1531],["In the Project window, select TexturePackEditor.cs.",1531],["Drag texture_pack_editor.uxml to Visual Tree Asset in the Inspector.",1531],["Test the binding",1531],["From the menu, select Assets > Create > UIToolkitExamples > TexturePackAsset. This creates an asset named New Texture Pack Asset.",1531],["In the Project window, select New Texture Pack Asset. This displays four TexturePreviewElement elements in the Inspector.",1531],["Assign 2D image assets to these elements or use the Add button to add new elements. If you make changes in the Inspector UI, the property of the TexturePackAsset.textures object changes.",1531],["Tip**: To import some textures and assign them to the different entries in the list, try this free Playground asset store plugin.",1531],["Additional resources",1531],["Bind to a list with ListView",1532],["Version**: 2021.3+",1532],["The ListView control is the most efficient way to create lists. To bind to a list with ListView, set the binding path of the ListView to the name of the property that contains the list.",1532],["This example demonstrates how to bind to a list with ListView.",1532],["Example overview",1532],["The example creates a list of toggles and binds the list to an underlying list of GameSwitch objects.",1532],["You can find the completed files that this example creates in this GitHub repository.",1532],["Prerequisites",1532],["\nVisual Tree\n",1532],["\nUXML\n",1532],["\nUSS\n",1532],["\nListView\n",1532],["Create an object with a list",1532],["Create a GameSwitch object and a serialized object that has a list of GameSwitch objects as a property.",1532],["Create a Unity project with any template.",1532],["In your Project window, create a folder named bind-to-list to store all your files.",1532],["",1532],["",1532],["Create a C# script named GameSwitchListAsset.cs and replace its contents with the following:",1532],["```lang-cs",1532],["using System.Collections.Generic;",1532],["using UnityEngine;",1532],["namespace UIToolkitExamples",1532],["[CreateAssetMenu(menuName = \"UIToolkitExamples/GameSwitchList\")]",1532],["public class GameSwitchListAsset : ScriptableObject",1532],["public List switches;",1532],["public void Reset()",1532],["switches = new()",1532],["new() { name = \"Use Local Server\", enabled = false },",1532],["new() { name = \"Show Debug Menu\", enabled = false },",1532],["new() { name = \"Show FPS Counter\", enabled = true },",1532],["};",1532],["public bool IsSwitchEnabled(string switchName) => switches.Find(s => s.name == switchName).enabled;",1532],["Create a custom Editor and set the binding",1532],["Create a custom Editor that can create an asset with a list of toggles. Bind the toggle list to the GameSwitch list by setting the binding-path attribute of the UI Document to the property name of the GameSwitch list, which is switches.",1532],["Create a folder named Editor.",1532],["In the Editor folder, create a C# script named GameSwitchListEditor.cs and replace its contents with the following:",1532],["```lang-cs",1532],["using UnityEditor;",1532],["using UnityEngine;",1532],["using UnityEngine.UIElements;",1532],["namespace UIToolkitExamples",1532],["[CustomEditor(typeof(GameSwitchListAsset))]",1532],["public class GameSwitchListEditor : Editor",1532],["[SerializeField]",1532],["VisualTreeAsset m_ItemAsset;",1532],["[SerializeField]",1532],["VisualTreeAsset m_EditorAsset;",1532],["public override VisualElement CreateInspectorGUI()",1532],["var root = m_EditorAsset.CloneTree();",1532],["var listView = root.Q();",1532],["listView.makeItem = m_ItemAsset.CloneTree;",1532],["return root;",1532],["Create a UI Document named game_switch_list_editor.uxml and replace its contents with the following:",1532],["```lang-xml",1532],["",1532],["",1532],["reorder-mode=\"Animated\"",1532],["binding-path=\"switches\"",1532],["show-add-remove-footer=\"true\"",1532],["show-border=\"true\"",1532],["show-foldout-header=\"true\"",1532],["header-title=\"Switches\"",1532],["/>",1532],["",1532],["In the Project window, select GameSwitchListEditor.cs.",1532],["Drag game_switch.uxml to Item Asset in the Inspector.",1532],["Drag game_switch_list_editor.uxml to Editor Asset in the Inspector.",1532],["Test the binding",1532],["From the menu, select Assets > Create > UIToolkitExamples > GameSwitchList. This creates an asset named New Game Switch List Asset.",1532],["In the Project window, select New Game Switch List Asset. This shows a list of toggles in the Inspector. You can reorder the list, collapse it, add entries to or remove entries from the list, and change the number of entries in the list. If you make changes in the Inspector UI, the switches property of the GameSwitchListAsset object changes.",1532],["Additional resources",1532],["Bind to nested properties",1533],["Version**: 2021.3+",1533],["This example demonstrates how to use the binding-path attribute of a BindableElement in UXML to bind fields to nested properties of a SerializedObject.",1533],["Example overview",1533],["This example creates a custom Inspector UI with the following:",1533],["Two fields that bind to a GameObject's name and the scale of a USS transform",1533],["Two fields that bind to nested properties of a SerializedObject",1533],["You can find the completed files that this example creates in this GitHub repository.",1533],["Prerequisites",1533],["\nVisual Tree\n",1533],["\nUXML\n",1533],["\nUSS\n",1533],["\nBindableElement\n",1533],["\nPropertyField\n",1533],["Create the destructible tank object",1533],["Create a C# script to define a class for a tank that has health values to make it destructible.",1533],["Create a project in Unity with any template.",1533],["In your Project window, create a folder named bind-nested-properties to store all the files.",1533],["Create a C# script named DestructibleTankScript.cs and replace its content with the following:",1533],["```lang-cs",1533],["using System;",1533],["using UnityEngine;",1533],["using UnityEngine.Serialization;",1533],["[Serializable]",1533],["public struct Health",1533],["public int armor;",1533],["public int life;",1533],["[ExecuteInEditMode]",1533],["public class DestructibleTankScript : MonoBehaviour",1533],["public string tankName = \"Tank\";",1533],["public float tankSize = 1;",1533],["public Health health;",1533],["private void Update()",1533],["gameObject.name = tankName;",1533],["gameObject.transform.localScale = new Vector3(tankSize, tankSize, tankSize);",1533],["public void Reset()",1533],["health.armor = 100;",1533],["health.life = 10;",1533],["Create the UXML and the Inspector UI",1533],["Create a UXML file with a BindableElement. Set the BindableElement's binding-path to the health property and set each child element's binding-path of the BindableElement to the armor and life properties of health.",1533],["In the bind-nested-properties folder, create a folder named Editor.",1533],["",1533],["Create a UI Document named destructible_tank_editor.uxml and replace its contents with the following:",1533],["```lang-xml",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["",1533],["Create the custom Editor",1533],["Create a C# script that registers a custom Editor for the DestructibleTankScript.",1533],["Create a C# script named DestructibleTankEditor.cs and replace its content with the following:",1533],["```lang-cs",1533],["using UnityEditor;",1533],["using UnityEngine;",1533],["using UnityEngine.UIElements;",1533],["[CustomEditor(typeof(DestructibleTankScript))]",1533],["public class DestructibleTankEditor : Editor",1533],["[SerializeField]",1533],["VisualTreeAsset visualTreeAsset;",1533],["public override VisualElement CreateInspectorGUI()",1533],["return visualTreeAsset.CloneTree();",1533],["Select DestructibleTankEditor.cs in the Project window.",1533],["Drag destructible_tank_editor.uxml to Visual Tree Asset in the Inspector.",1533],["Test the binding",1533],["In Unity, add an empty GameObject to a scene.",1533],["Select the GameObject.",1533],["Add the Destructible Tank Script component in the Inspector. The Armor and Life fields are bound to the health.armor and health.life properties. If you change the values in the Inspector, the values of the underlying properties change.",1533],["Additional resources",1533],["Bind to a UXML template",1534],["Version**: 2021.3+",1534],["This example demonstrates how to set binding paths with UXML templates.",1534],["Example overview",1534],["This example creates an asset menu item. The menu creates a GameSwitch asset with three template instances that bind to properties of the GameSwitch object.",1534],["You can find the completed files that this example creates in this GitHub repository.",1534],["Prerequisites",1534],["\nUI Builder\n",1534],["\nVisual Tree\n",1534],["\nUXML\n",1534],["\nUSS\n",1534],["Create the GameSwitch asset",1534],["Create scripts to define the GameSwitch struct and a custom asset to hold properties of the GameSwitch struct.",1534],["Create a project in Unity with any template.",1534],["In your Project window, create a folder named bind-uxml-template to store all your files.",1534],["",1534],["Create a C# script named GameSwitchesAsset.cs and replace its contents with the following:",1534],["```lang-cs",1534],["using UnityEngine;",1534],["[CreateAssetMenu(menuName = \"UIToolkitExamples/GameSwitches\")]",1534],["public class GameSwitchesAsset : ScriptableObject",1534],["public GameSwitch useLocalServer;",1534],["public GameSwitch showDebugMenu;",1534],["public GameSwitch showFPSCounter;",1534],["// Use the Reset function to provide default values",1534],["public void Reset()",1534],["useLocalServer = new GameSwitch() { name = \"Use Local Server\", enabled = false };",1534],["showDebugMenu = new GameSwitch() { name = \"Show Debug Menu\", enabled = false };",1534],["showFPSCounter = new GameSwitch() { name = \"Show FPS Counter\", enabled = true };",1534],["Create the UXML template and files",1534],["Create a UXML template that you can use for each GameSwitch struct instance, and a UXML file that uses the template.",1534],["",1534],["In the bind-uxml-template folder, create a folder named Editor.",1534],["In the Editor folder, create a UI Document named game_switches_editor.uxml and replace its contents with the following:",1534],["```lang-xml",1534],["",1534],["",1534],["",1534],["",1534],["",1534],["",1534],["Note**: This is the main UXML file for the custom Editor. Each property binds to an instance of game_switch.uxml through the binding-path attribute of Instance .",1534],["Create the asset menu and the asset",1534],["Create a script to register a custom Editor for GameSwitchesAsset.",1534],["Create a C# script named GameSwitchesEditor.cs and replace its content with the following:",1534],["```lang-cs",1534],["using UnityEditor;",1534],["using UnityEngine;",1534],["using UnityEngine.UIElements;",1534],["namespace UIToolkitExamples",1534],["[CustomEditor(typeof(GameSwitchesAsset))]",1534],["public class GameSwitchesEditor : Editor",1534],["[SerializeField]",1534],["VisualTreeAsset visualTreeAsset;",1534],["public override VisualElement CreateInspectorGUI()",1534],["return visualTreeAsset.CloneTree();",1534],["Test the binding",1534],["In Unity, select Assets > Create > UIToolkitExamples > GameSwitches to create a new asset in your project's Assets folder.",1534],["Select the newly created asset. The Inspector shows toggles and text fields that bind to the GameSwitchesAsset.useLocalServer, GameSwitchesAsset.showDebugMenu, and GameSwitchesAsset.showFPSCounter properties.",1534],["Additional resources",1534],["Bind without the binding path",1535],["Version**: 2021.3+",1535],["You can call BindProperty() to bind an element to a SerializedProperty object directly, instead of with the binding path. This example demonstrates how to bind with BindProperty().",1535],["Example overview",1535],["This example creates a custom Editor window to change the name of a GameObject.",1535],["You can find the completed files that this example creates in this GitHub repository.",1535],["Prerequisites",1535],["\nBindProperty\n",1535],["Bind with BindProperty()",1535],["Create a custom Editor window in C# with a TextField. Find the name property of a GameObject and bind to the property directly with the BindProperty() method.",1535],["In your Project window, create a folder named bind-without-binding-path to store your file.",1535],["In the bind-without-binding-path folder, create a folder named Editor.",1535],["In the Editor folder, create a C# script named SimpleBindingPropertyExample.cs and replace its contents with the following:",1535],["```lang-cs",1535],["using UnityEditor;",1535],["using UnityEngine;",1535],["using UnityEditor.UIElements;",1535],["using UnityEngine.UIElements;",1535],["namespace UIToolkitExamples",1535],["public class SimpleBindingPropertyExample : EditorWindow",1535],["TextField m_ObjectNameBinding;",1535],["[MenuItem(\"Window/UIToolkitExamples/Simple Binding Property Example\")]",1535],["public static void ShowDefaultWindow()",1535],["var wnd = GetWindow();",1535],["wnd.titleContent = new GUIContent(\"Simple Binding Property\");",1535],["public void CreateGUI()",1535],["m_ObjectNameBinding = new TextField(\"Object Name Binding\");",1535],["rootVisualElement.Add(m_ObjectNameBinding);",1535],["OnSelectionChange();",1535],["public void OnSelectionChange()",1535],["GameObject selectedObject = Selection.activeObject as GameObject;",1535],["if (selectedObject != null)",1535],["// Create the SerializedObject from the current selection",1535],["SerializedObject so = new SerializedObject(selectedObject);",1535],["// Note: the \"name\" property of a GameObject is actually named \"m_Name\" in serialization.",1535],["SerializedProperty property = so.FindProperty(\"m_Name\");",1535],["// Bind the property to the field directly",1535],["m_ObjectNameBinding.BindProperty(property);",1535],["else",1535],["// Unbind any binding from the field",1535],["m_ObjectNameBinding.Unbind();",1535],["Test the binding",1535],["In Unity, select Window > UIToolkitExamples > Simple Binding Property Example. A custom Editor window appears with a text field.",1535],["Select a GameObject in your scene. The name of the GameObject appears in your Editor window's text field. If you change the name of the GameObject in the text field, the name of the GameObject changes.",1535],["Additional resources",1535],["Bindable elements reference",1536],["This page lists the bindable elements from different namespaces.",1536],["UnityEditor.UIElements",1536],["The following are the bindable elements from the UnityEditor.UIElements namespace:",1536],["Base Class",1536],["\nBaseMaskField\n",1536],["Controls",1536],["\nInspectorElement\n",1536],["\nColorField\n",1536],["\nCurveField\n",1536],["\nGradientField\n",1536],["\nLayerField\n",1536],["\nLayerMaskField\n",1536],["\nMaskField\n",1536],["\nTagField\n",1536],["\nToolbarButton\n",1536],["\nToolbarMenu\n",1536],["\nToolbarToggle\n",1536],["\nEnumFlagsField\n",1536],["\nObjectField\n",1536],["UnityEngine.UIElements",1536],["The following are the bindable elements from the UnityEngine.UIElements namespace:",1536],["Base Class",1536],["\nBaseField\n",1536],["\nBaseSlider\n",1536],["\nBaseBoolField\n",1536],["\nBaseCompositeField\n",1536],["\nBaseListView\n",1536],["\nBaseTreeView\n",1536],["\nBaseVerticalCollectionView\n",1536],["\nTextInputBaseField\n",1536],["\nBasePopupField\n",1536],["\nAbstractProgressBar\n",1536],["Controls",1536],["\nFoldout\n",1536],["\nMinMaxSlider\n",1536],["\nSlider\n",1536],["\nSliderInt\n",1536],["\nTextField\n",1536],["\nToggle\n",1536],["\nMultiColumnListView\n",1536],["\nMultiColumnTreeView\n",1536],["\nBoundsField\n",1536],["\nBoundsIntField\n",1536],["\nButton\n",1536],["\nRectField\n",1536],["\nRectIntField\n",1536],["\nVector2Field\n",1536],["\nVector2IntField\n",1536],["\nVector3Field\n",1536],["\nVector3IntField\n",1536],["\nVector4Field\n",1536],["\nDoubleField\n",1536],["\nDropdownField\n",1536],["\nEnumField\n",1536],["\nFloatField\n",1536],["\nGroupBox\n",1536],["\nHash128Field\n",1536],["\nIntegerField\n",1536],["\nLabel\n",1536],["\nListView\n",1536],["\nLongField\n",1536],["\nPopupField\n",1536],["\nPopupWindow\n",1536],["\nProgressBar\n",1536],["\nRadioButton\n",1536],["\nRadioButtonGroup\n",1536],["\nRepeatButton\n",1536],["\nTreeView\n",1536],["\nTextElement\n",1536],["\nTextValueField\n",1536],["\nTemplateContainer\n",1536],["UnityEditor.Toolbars",1536],["The following are the bindable elements from the UnityEditor.Toolbars namespace:",1536],["Controls",1536],["\nEditorToolbarButton\n",1536],["\nEditorToolbarDropdown\n",1536],["\nEditorToolbarDropdownToggle\n",1536],["\nEditorToolbarToggle\n",1536],["UnityEditor.Search",1536],["The following are the bindable elements from the UnityEditor.Search namespace:",1536],["Controls",1536],["\nObjectField\n",1536],["Additional resources",1536],["Bindable data types and fields",1537],["This following describs the data type conversions and fields supported by PropertyField.",1537],["Data type conversions",1537],["Most built-in controls in UI Toolkit implement the INotifyValueChanged interface for a specific data type. For example, DoubleField implements INotifyValueChanged<Double>, which means you can bind the DoubleField control to a property of type double. You can bind more data types with the binding system. For example, you can bind a property of type int to a DoubleField.",1537],["The following table lists the source and target data types that you can bind:",1537],["Source data type Target data type of INotifyValueChanged ",1537],[":---------------- :---------------------------------------------------------------- ",1537],["long longintstringfloat ",1537],["int intstringfloat ",1537],["double doublefloat ",1537],["float floatdouble ",1537],["char charstring",1537],["Note**: To prevent data loss, use a PropertyField or use the appropriate data types as shown in the Fields supported by PropertyField table below.",1537],["Fields supported by PropertyField",1537],["When the Inspector window is populated, if a custom Editor doesn't exist for a type, the binding system calls InspectorElement.FillDefaultInspector(). This creates a PropertyField for each SerializedProperty on the SerializedObject.",1537],["Each PropertyField has a matching control under it, such as an IntegerField to represent an int, or a Toggle to represent a bool. If the property has sub-properties, the PropertyField has a Foldout control. That Foldout has the appropriate default controls under each sub-property. If you created a custom PropertyDrawer for a Property, the visual tree returned from the PropertyDrawer's CreatePropertyGUI() method is used instead.",1537],["Note**:",1537],["When you create a custom UI, don't use a PropertyField unless you can't find a specific control for it. For example, to create a control in your visual tree and bind it to a Color, use a ColorField rather than a PropertyField. This makes visual trees more lightweight and operations faster.",1537],["The use of PropertyField incurs additional overhead because it resolves the concrete field to use after binding. This extra step can affect performance. However, PropertyField is beneficial for some uses. For example, it supports custom drawers, which you can use to handle specific properties in a personalized way. This eliminates the need to guess the field type for drawing, which can reduce errors.",1537],["",1537],["The following table lists fields supported by PropertyField and their data type:",1537],["Field Data type ",1537],["----------------------------- ---------------------- ",1537],["BoundsField Bounds ",1537],["BoundsIntField BoundsInt ",1537],["ColorField Color ",1537],["CurveField AnimationCurve ",1537],["FloatField float ",1537],["GradientField Gradient ",1537],["Hash128Field Hash128 ",1537],["IntegerField int ",1537],["IntegerField int, for the ArraySize ",1537],["LayerMaskField unit ",1537],["LongField long ",1537],["ObjectField UnityEngine.Object ",1537],["PopupField<string> Enum ",1537],["RectField Rect ",1537],["RectIntField RectInt ",1537],["TextField string ",1537],["TextField, with a maxLength=1 char ",1537],["Toggle bool ",1537],["Vector2Field Vector2 ",1537],["Vector2IntField Vector2Int ",1537],["Vector3Field Vector3 ",1537],["Vector3IntField Vector3Int ",1537],["Vector4Field Vector4 ",1537],["Additional resources",1537],["Binding examples",1538],["Learn Editor data binding from examples.",1538],["Additional resources",1538],["Binding system implementation details",1539],["The following is an explanation of how the UI Toolkit binding system works at the implementation level.",1539],["Binding creation",1539],["When you call the Bind() method, it synchronizes and tracks the first value asynchronously. This means that the value property of the fields can't update immediately. This allows you to set up binding for hierarchies that aren't yet added to any UI.",1539],["Change detection",1539],["The binding system relies upon the serialized data of Unity objects to implement change detection.",1539],["After you create a binding between a SerializedObject and one or more elements, the system polls this object for changes at a regular interval, but not every frame, in two steps:",1539],["The system serializes and polls the SerializedObject in native code to detect any change to serialized bytes. If there are no changes, it stops.",1539],["If there are changes, the system compares the property and the displayed value on the bound element. If needed, the system updates the displayed value. It does this for each specific property-to-element binding for the given object.",1539],["Operation throttling",1539],["Some binding operations might be too long to handle in a single frame. If the binding operations are handled in a single frame, the UI might become unresponsive. To prevent this, these binding operations might happen across several frames. For example, it might take several updates to detect changes, depending on the number of objects polled.",1539],["Additional resources",1539],["SerializedObject data binding",1540],["Data bindings synchronize properties of non-UI object, such as a string property on a MonoBehaviour, with properties of UI objects, such as the value property of a TextField. A binding refers to the link between the property and the visual control that modifies it.",1540],["Use data binding to synchronize values between a property and a specific visual element, so you don't need to write event handlers when the value changes in the UI.",1540],["Note**: SerializedObject data binding only works in the Editor, not at runtime.",1540],["Serialization requirements",1540],["You can only bind to serialized properties. This means you can only bind visual elements to the following objects that are compatible with the Serialization system:",1540],["\nUser-defined ScriptableObject classes\n",1540],["\nUser-defined MonoBehaviour classes\n",1540],["\nNative Unity component types\n",1540],["\nNative Unity asset types\n",1540],["\nPrimitive C# types such as int, bool, float, and so on.\n",1540],["\nNative Unity types such as Vector3, Color, Object, and so on.\n",1540],["",1540],["Value binding",1540],["You can only bind the value property of visual elements that implement the INotifyValueChanged interface. For example, you can bind TextField.value to a string, but you can't bind TextField.name to a string.",1540],["You can bind between an object and any visual element that either derives from BindableElement or implements the IBindable interface.",1540],["Create a binding",1540],["To create a binding, either call Bind() or BindProperty().",1540],["",1540],["Call Bind()",1540],["You can call Bind() to bind an element to a SerializedObject. Before you bind an element, you must set the binding path and create a SerializedObject.",1540],["Use this method if you don't have easy access to the SerializedProperty for the binding. See Create a binding with a C# script for an example.",1540],["The Bind() extension method sets up an entire hierarchy of visual elements with specified bindingPath properties. You can call the Bind() method on a single element or the parent of the hierarchy that you want to bind. For example, you can call Bind() on the rootVisualElement of an Editor window. This binds all child elements with specified bindingPath properties.",1540],["Don't call Bind() from the Editor.CreateInspectorGUI() or PropertyDrawer.CreatePropertyGUI() override. These overrides are called automatically on the visual elements that these methods return.",1540],["Call Unbind()",1540],["The Unbind() method stops the value tracking for the element and all its direct and indirect child elements. In general, you don't need to call Unbind() because tracking stops when a user closes the Inspector or Editor window. Call Unbind() if you must bind elements to different targets in their lifetimes.",1540],["If you construct an InspectorElement in C# by calling its constructor, binding occurs during the constructor call. If you want to rebind an InspectorElement after it has been constructed, you must call Unbind() and then either call Bind() explicitly or let a bind operation from a parent create a binding.",1540],["",1540],["Set binding path",1540],["If you call Bind() to create the binding, you must set the visual element's binding path to the property name of the object that you want to bind to.",1540],["For example:",1540],["If you have the following component script:",1540],["```lang-csharp",1540],["using UnityEngine;",1540],["public class MyComp : MonoBehaviour",1540],["[SerializeField]",1540],["int m_Count;",1540],["To bind your visual element to m_Count, set the binding path to m_Count.",1540],["If you want to bind a visual element to a GameObject's name property, which is m_Name, set the binding path to m_Name.",1540],["You can set the binding path in UI Builder, UXML, or with a C# script:",1540],["In UI Builder, enter the binding path in the Binding Path field for a visual element in the Inspector.",1540],["In UXML, set the binding-path attribute for a visual element. See Define the binding path in UXML for an example.",1540],["In C#, set bindingPath from the IBindable interface. See Bind with the binding path for an example.",1540],["",1540],["Call BindProperty()",1540],["You can call BindProperty() to bind an element to a SerializedProperty directly.",1540],["Use this method if you already have a SerializedProperty object, and especially if you traverse the properties of a SerializedObject to build a UI dynamically. See Bind without the binding path for an example.",1540],["Bind elements to nested properties",1540],["You can bind a visual element to nested properties in the source object. To do so, combine the binding path of an element with the binding path of the first ancestor. Use this method with the following elements:",1540],["\nBindableElement\n",1540],["\nTemplateContainer (corresponds to the <Instance> tag in UXML)\n",1540],["\nGroupBox\n",1540],["See Bind to nested properties for an example.",1540],["Receive callbacks when values change",1540],["You can create a binding to receive a callback when a bound serialized property changes. To do so, leverage the TrackPropertyValue() extension method, which is available to any VisualElement. This registers a callback that executes when the provided SerializedProperty changes. See Receive callbacks when a serialized property changes for an example.",1540],["You can also create a binding to receive a callback when any properties of the bound serialized object changes. To do so, leverage the TrackSerializedObjectValue() extension method, which is available to any VisualElement. This registers a callback that executes when the provided SerializedProperty changes. See Receive callbacks when any properties change for an example.",1540],["Bind custom elements",1540],["You can create custom elements and bind them to serialized properties through the value binding system.",1540],["To create bindable custom elements:",1540],["Declare a custom element.",1540],["Inherit the element from BindableElement or implement the IBinding interface.",1540],["Implement the INotifyValueChanged interface.",1540],["Implement the SetValueWithoutNotify() method to the INotifyValueChanged interface.",1540],["Implement the value property accessors to the INotifyValueChanged interface.",1540],["See Create and style a custom control for an example.",1540],["Note**: You can't bind custom data types directly to custom elements because the binding system only allows you to bind an element to a type supported by SerializedPropertyType of enum. This means you can't define a class or structure, for example a struct called MyStruct, and bind it to an element that implements INotifyValueChanged<MyStruct>. However, you can bind to serializable nested properties of custom data types. This includes polymorphic serialization (when a field uses the [SerializeReference] attribute). See Bind a custom control to custom data type for an example.",1540],["Best practices",1540],["Based on the type of UI you create, binding occurs at various times. This is called bind time.",1540],["The following table describes the bind time of a control:",1540],["Condition Automatic bind time (assuming binding path was set) ",1540],[":------------- :-------------------- ",1540],["An InspectorElement constructed in C# During the constructor call ",1540],["A child element that is under the return value of CreateInspectorGUI() or CreatePropertyGUI() when those methods return After CreateInspectorGUI() or CreatePropertyGUI() returns ",1540],["A child element that is under an element when Bind() or BindProperty() is called on the parent element During the Bind() or BindProperty() call ",1540],["Other No automatic binding; you must bind the element or one of its parents manually ",1540],["The following are best practices when creating a binding regarding bind time:",1540],["\nIf you create a custom Editor or custom PropertyDrawer, set the elements' binding paths instead of calling Bind() or BindProperty() on any visual elements that are in the visual tree by the end of the body of CreateInspectorGUI() or CreatePropertyGUI(). These elements are bound automatically after CreateInspectorGUI() or CreatePropertyGUI() returns. However, if you add any elements to the visual tree after that point, call Bind() or BindProperty() to bind them.\n",1540],["\nIf you create any other type of UI, call Bind() or BindProperty() regardless of the time at which the elements get added to the visual tree. If you call Bind() or BindProperty() and bind multiple controls at the same time, set the binding path of each control and then call Bind() on the lowest-level parent element that encompasses all the controls. Bind() binds the element on which it's called if it has a binding path and recursively binds all its child elements if they have binding paths. To prevent a negative performance impact, don't bind a visual element with the Bind() method more than once.\n",1540],["Binding examples",1540],["Try the following examples to learn how to code with data binding:",1540],["Additional resources",1540],["Capture events",1541],["Capture events inform you of the changes in the mouse capture state. UI Toolkit has two types of capture events:",1541],["\nMouse capture events\n",1541],["\nPointer capture events\n",1541],["When an element captures the mouse or pointer, it's the only element that receives events from the pointing device until the device releases or loses the capture.",1541],["For example, if you click in a text box, the text box captures the mouse. The mouse can still move around the screen, but it won't trigger events outside of the text box. As long as the text box has your mouse captured, it won't trigger other events. When the user presses a button on the mouse outside of the text box, the box releases its mouse capture.",1541],["Event Description Trickles down Bubbles up Cancellable ",1541],["--------------------------------------------------------------------- ------------------------------------------------------------------- ----------------- -------------- --------------- ",1541],["MouseCaptureEvent Sent when an element takes the mouse capture. ✔ ✔ ",1541],["MouseCaptureOutEvent Sent when an element releases or otherwise loses the mouse capture. ✔ ✔ ",1541],["PointerCaptureEvent Sent when an element captures a pointer. ✔ ✔ ",1541],["PointerCaptureOutEvent Sent when an element releases a pointer. ✔ ✔ ",1541],["Behavior",1541],["Mouse capture",1541],["Mouse capture events refer to events on a physical mouse, or a virtual mouse emulating a physical mouse. Capturing a mouse will also result in a PointerCaptureEvent for the mouse pointer.",1541],["When an element releases a mouse capture, the corresponding MouseCaptureOutEvent triggers, with the target being the element that requested the release of the capture.",1541],["There can never be two elements that capture the mouse at the same time. If another visual element triggers a MouseCaptureEvent, the element that sent the original MouseCaptureEvent loses the capture. This also triggers a MouseCaptureOutEvent on the original element.",1541],["Pointer capture",1541],["Pointer events precede mouse events in UI Toolkit. If the pointer type is a mouse, capturing it will also trigger the corresponding mouse capture events. Capturing the pointer will also capture the mouse.",1541],["Event list",1541],["MouseCaptureEvent",1541],["A MouseCaptureEvent event is sent when an element takes the mouse capture.",1541],["target**: The element that takes the capture.",1541],["MouseCaptureOutEvent",1541],["A MouseCaptureOutEvent event is sent when an element releases, or loses the mouse capture.",1541],["target**: The element that loses the capture.",1541],["PointerCaptureEvent",1541],["A PointerCaptureEvent event is sent when an element takes the pointer capture.",1541],["target**: The element that takes the capture.",1541],["PointerCaptureOutEvent",1541],["A PointerCaptureOutEvent event is sent when an element releases, or loses the pointer capture.",1541],["target**: The element that loses the capture.",1541],["Examples",1541],["The following example demonstrates the behavior of the capture events, and capturing and releasing pointers.",1541],["To see the example in action, do the following:",1541],["Under Assets > Scripts > Editor, create a new C# file called CaptureEventsTestWindow.cs",1541],["Copy the example into the C# script.",1541],["From the Editor Toolbar, select Window > UI Toolkit > Capture Events Test Window.",1541],["Click on the various labels in the dialog window, and watch the console for the output.",1541],["```lang-csharp",1541],["using UnityEditor;",1541],["using UnityEngine;",1541],["using UnityEngine.UIElements;",1541],["public class CaptureEventsTestWindow : EditorWindow",1541],["[MenuItem(\"Window/UI Toolkit/Capture Events Test Window\")]",1541],["public static void ShowExample()",1541],["var wnd = GetWindow();",1541],["wnd.titleContent = new GUIContent(\"Capture Events Test Window\");",1541],["private bool m_IsCapturing = false;",1541],["public void CreateGUI()",1541],["// Add a few clickable labels that print a message to the console when clicked",1541],["for (int i = 0; i < 4; i++)",1541],["Label clickableLabel = new Label($\"Label {i} - Click Me!\");",1541],["clickableLabel.RegisterCallback((evt) => { Debug.Log($\"Clicked on label '{(evt.target as Label).text}'\"); });",1541],["rootVisualElement.Add(clickableLabel);",1541],["// Now add a label that captures the pointer",1541],["Label capturingLabel = new Label(\"Click here to capture mouse\");",1541],["capturingLabel.RegisterCallback((evt) =>",1541],["if (!m_IsCapturing)",1541],["capturingLabel.text = \"Click here to release mouse\";",1541],["MouseCaptureController.CaptureMouse(capturingLabel);",1541],["m_IsCapturing = true;",1541],["else",1541],["capturingLabel.text = \"Click here to capture mouse\";",1541],["MouseCaptureController.ReleaseMouse(capturingLabel);",1541],["m_IsCapturing = false;",1541],["});",1541],["rootVisualElement.Add(capturingLabel);",1541],["// Register callbacks to print a message when the mouse is captured or released",1541],["rootVisualElement.RegisterCallback((evt) =>",1541],["Debug.Log(\"Mouse captured\");",1541],["});",1541],["rootVisualElement.RegisterCallback((evt) =>",1541],["Debug.Log(\"Mouse captured released\");",1541],["});",1541],["Change events",1542],["When the value of an element changes, a ChangeEvent is sent. This is typically sent when a value in a field of a control changes. For example, when the user toggles a checkbox.",1542],["The ChangeEvent is a typed event, and contains both the previous and the new value of the visual element.",1542],["The event triggers after a change assigns a new value to a visual element. You can't cancel change events to prevent a value change on a visual element.",1542],["The base class for ChangeEvent is the EventBase class.",1542],["Event Description Trickles down Bubbles up Cancellable ",1542],["----------------------------------------------- ---------------------------------------------------------- ----------------- -------------- --------------- ",1542],["ChangeEvent A generic event sent when the value of an element changes. ✔ ✔ ",1542],["Unique properties",1542],["previousValue**: The previous value of the target control.",1542],["newValue**: The new value of the target control.",1542],["Event List",1542],["ChangeEvent",1542],["ChangeEvent is a notification event that allows you to react to the value change of a visual element. For example, when you toggle a checkbox to mute music in a game, the game should stop all music.",1542],["This event applies to all controls that implement the INotifyValueChanged<T>, where <T> is the type of the ChangeEvent. This event is also used internally to update properties within objects linked to the UI via Bindings.",1542],["It fires even when the value of a control is set by code. You can modify the value on a control without firing the ChangeEvent by calling SetValueWithoutNotify in the INotifyValueChange<T> interface.",1542],["You can register a callback function to receive a ChangeEvent in two ways:",1542],["Call RegisterCallback<>() on a visual element",1542],["Call RegisterValueChangedCallback() on a visual element deriving from INotifyValueChange<T>",1542],["Registering a callback via RegisterCallback works on all visual elements, regardless of whether they store internal values or not. If you want to listen to any changes that happen in the child controls of a parent element, this is the method to use.",1542],["Because ChangeEvent is a typed event, you must specify the type when registering the event. The code below demonstrates registering and receiving a ChangeEvent of the type bool.",1542],["```lang-csharp",1542],["// Registering the callback",1542],["rootVisualElement.RegisterCallback>(OnBoolChangedEvent);",1542],["```lang-csharp",1542],["// Event callback",1542],["private void OnBoolChangedEvent(ChangeEvent evt)",1542],["// Handling code",1542],["Elements that hold values, such as toggles and integer fields, implement the INotifyValueChange<T> interface. It’s possible to register a callback on these elements directly, by calling RegisterValueChangedCallback. This is a more convenient way to register a callback because the type is already built-in. You can unregister event handlers again by calling myElement.UnregisterValueChangedCallback.",1542],["```lang-csharp",1542],["var newToggle = new Toggle(\"Test Toggle\");",1542],["newToggle.RegisterValueChangedCallback(OnTestToggleChanged);",1542],["```lang-csharp",1542],["private void OnTestToggleChanged(ChangeEvent evt)",1542],["// Handling code",1542],["target**: The element where the change of state occurs.",1542],["Examples",1542],["The following examples demonstrate the usage of ChangeEvent and how to set and get a control value.",1542],["To view an example, do the following:",1542],["Under Assets > Scripts > Editor, create a C# script called ChangeEventTestWindow.",1542],["Copy the example code into the C# script.",1542],["From the Editor Toolbar, select Window > UI Toolkit > Change Events Test Window",1542],["Example 1: Registering callbacks to the receive change events",1542],["```lang-csharp",1542],["using UnityEditor;",1542],["using UnityEngine;",1542],["using UnityEngine.UIElements;",1542],["public class ChangeEventTestWindow : EditorWindow",1542],["private Toggle m_MyToggle;",1542],["[MenuItem(\"Window/UI Toolkit/Change Event Test Window\")]",1542],["public static void ShowExample()",1542],["ChangeEventTestWindow wnd = GetWindow();",1542],["wnd.titleContent = new GUIContent(\"Change Event Test Window\");",1542],["public void CreateGUI()",1542],["// Create a toggle",1542],["m_MyToggle = new Toggle(\"Test Toggle\") { name = \"My Toggle\" };",1542],["rootVisualElement.Add(m_MyToggle);",1542],["// Register a callback on the toggle",1542],["m_MyToggle.RegisterValueChangedCallback(OnTestToggleChanged);",1542],["// Register a callback on the parent",1542],["rootVisualElement.RegisterCallback>(OnBoolChangedEvent);",1542],["private void OnBoolChangedEvent(ChangeEvent evt)",1542],["Debug.Log($\"Toggle changed. Old value: {evt.previousValue}, new value: {evt.newValue}\");",1542],["private void OnTestToggleChanged(ChangeEvent evt)",1542],["Debug.Log($\"A bool value changed. Old value: {evt.previousValue}, new value: {evt.newValue}\");",1542],["Example 2: Setting a control value through code",1542],["```lang-csharp",1542],["using UnityEditor;",1542],["using UnityEngine;",1542],["using UnityEngine.UIElements;",1542],["public class ChangeEventTestWindow : EditorWindow",1542],["private Toggle m_MyToggle;",1542],["[MenuItem(\"Window/UI Toolkit/Change Event Test Window\")]",1542],["public static void ShowExample()",1542],["GetWindow().titleContent = new GUIContent(\"Change Event Test Window\");",1542],["public void CreateGUI()",1542],["// Create a toggle and register callback",1542],["m_MyToggle = new Toggle(\"Test Toggle\") { name = \"My Toggle\" };",1542],["m_MyToggle.RegisterValueChangedCallback((evt) => { Debug.Log(\"Change Event received\"); });",1542],["rootVisualElement.Add(m_MyToggle);",1542],["// Create button to toggle the toggle's value",1542],["Button button01 = new Button() { text = \"Toggle\" };",1542],["button01.clicked += () =>",1542],["m_MyToggle.value = !m_MyToggle.value;",1542],["};",1542],["rootVisualElement.Add(button01);",1542],["// Create button to toggle the toggle's value without triggering a ChangeEvent",1542],["Button button02 = new Button() { text = \"Toggle without notification\" };",1542],["button02.clicked += () =>",1542],["m_MyToggle.SetValueWithoutNotify(!m_MyToggle.value);",1542],["};",1542],["rootVisualElement.Add(button02);",1542],["Click events",1543],["A ClickEvent occurs when the user clicks the left mouse button (or the first button on a pointing device) over a VisualElement.",1543],["A click consists of a pointer down event followed by a pointer up event on the same VisualElement. The pointer is allowed to move between the two events, as long as the down and up events occur over the same VisualElement.",1543],["This event can be used to detect clicks on visual elements that aren't buttons. For example, the implementation of the Toggle control uses the ClickEvent to show or hide the check mark, and to change the control's value.",1543],["The base class for ClickEvent is PointerEventBase. For more information please also see the documentation on Pointer Events.",1543],["Event Description Trickles down Bubbles up Cancellable ",1543],["--------------------------------------------- --------------------------------------------- ----------------- -------------- --------------- ",1543],["ClickEvent Occurs when the left mouse button is clicked. ✔ ✔ ✔ ",1543],["Unique properties",1543],["The ClickEvent has no unique properties, but inherits all properties from its base class. You can find a list of properties on the Pointer Events page.",1543],["Event list",1543],["ClickEvent",1543],["Unity sends this event when the left mouse button is clicked over a visual element.",1543],["target**: The element underneath the mouse or pointing device when the click occurred.",1543],["The following example registers for a ClickEvent on a visual element:",1543],["```lang-csharp",1543],["btnClose.RegisterCallback(Clicked, asset); // asset is the root visual element that will be closed",1543],["private void Clicked(ClickEvent evt, VisualElement root)",1543],["root.ShowVisualElement(false);",1543],["Examples",1543],["The following example shows how to react to the ClickEvent on a colored visual element. When an element is clicked, its color will change to a new, random color.",1543],["To see the example in action, do the following:",1543],["Create a new C# script called ClickEventExampleWindow.",1543],["Copy the example code into the C# script.",1543],["Under Window > UI Toolkit > Click Event Example, open the newly created Editor window.",1543],["```lang-csharp",1543],["using UnityEditor;",1543],["using UnityEngine;",1543],["using UnityEngine.UIElements;",1543],["public class ClickEventExampleWindow : EditorWindow",1543],["[MenuItem(\"Window/UI Toolkit/ClickEventExample\")]",1543],["public static void ShowExample()",1543],["var wnd = GetWindow();",1543],["wnd.titleContent = new GUIContent(\"Click Event Example\");",1543],["public void CreateGUI()",1543],["// Create a few different colored boxes",1543],["for (int i = 0; i < 4; i++)",1543],["// Create VisualElement with random background color",1543],["var newBox = new VisualElement() { style = { flexGrow = 1, backgroundColor = GetRandomColor() } };",1543],["rootVisualElement.Add(newBox);",1543],["// Register a click event to the visual element to change the background color to a new color",1543],["newBox.RegisterCallback(OnBoxClicked);",1543],["private void OnBoxClicked(ClickEvent evt)",1543],["// Only perform this action at the target, not in a parent",1543],["if (evt.propagationPhase != PropagationPhase.AtTarget)",1543],["return;",1543],["// Assign a random new color",1543],["var targetBox = evt.target as VisualElement;",1543],["targetBox.style.backgroundColor = GetRandomColor();",1543],["private Color GetRandomColor()",1543],["return new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));",1543],["Color gradients",1544],["You can apply gradients of up to four colors to text. When you add a color gradient, TextCore applies gradient colors to each character in a text string.",1544],["Use the the <gradient> rich text tags to apply color gradient presets to text objects. A gradient preset overrides the text’s local gradient type and colors.",1544],["Create a color gradient preset",1544],["To create a color gradient with one or more colors, and place it in a specific folder, follow these steps:",1544],["From the menu, select Assets > Create > Text > Color Gradient to add a new color gradient preset.",1544],["In the Color Gradient's Inspector window, select a color mode from the dropdown menu:",1544],["\nSingle: Applies a single color.\n",1544],["\nHorizontal Gradient: Applies two colors and produces a side-to-side transition between them on each character.\n",1544],["\nVertical Gradient: Applies two colors and produces an up-and-down transition between the two on each character.\n",1544],["\nFour Corners Gradient: Applies four colors. Each color radiates from its assigned corner of each character.\n",1544],["Set the gradient colors. The number of colors available in the Colors field depends on the gradient mode you choose. Each swatch corresponds to the color's origin on a character sprite.",1544],["Place the color gradient asset into the path set for the Color Gradient Presets in the Panel Text Setting asset.",1544],["Apply color gradient presets",1544],["To apply a color gradient preset to text, reference the color gradient by name as <gradient=\"name-of-the-color-gradient\">Your text</gradient>. If you apply the color gradient like this, the color of the text is multiplied by the object's current vertex colors.",1544],["To apply the pure gradient to a selection of text, use a <color> tag to reset the color to white. For example:",1544],["```lang-xml",1544],["Light to Dark Green gradient",1544],["Color gradient mode examples",1544],["The following shows color gradient examples for each mode.",1544],["",1544],["Single color",1544],["A single-color gradient.",1544],["",1544],["Horizontal gradients",1544],["A side-to-side gradient with two colors.",1544],["",1544],["Vertical gradients",1544],["An up-and-down gradient with two colors.",1544],["",1544],["Four corner gradients",1544],["A gradient with four colors. Each color radiates from one corner. This is the most versatile gradient type. You can vary some colors and keep others identical to create different kinds of gradients.",1544],["This example shows three corners with one color and the fourth with a different color.",1544],["This example shows pairs of adjacent corners with the same color to create horizontal or vertical gradients.",1544],["This example shows pairs of diagonally opposite corners the same color to create diagonal gradients.",1544],["This example creates horizontal and vertical three-color gradients with a dominant color at one end and a transition between two colors at the other.",1544],["This example gives two diagonally opposite corners the same color and the other two corners different colors to create a diagonal stripe three-color gradient.",1544],["Additional resources",1544],["Command events",1545],["Command events are sent to allow the Unity Editor to forward top-level menu actions to the Editor UI, as well as their equivalent keyboard shortcuts.",1545],["The following are the available commands:",1545],["\nCopy\n",1545],["\nCut\n",1545],["\nPaste\n",1545],["\nDelete\n",1545],["\nSoftDelete\n",1545],["\nDuplicate\n",1545],["\nFrameSelected\n",1545],["\nFrameSelectedWithLock\n",1545],["\nSelectAll\n",1545],["\nFind\n",1545],["\nFocusProjectWindow\n",1545],["Event Description Trickles down Bubbles up Cancellable ",1545],["-------------------- ------------------------------------------------------------------------------------------------- ------------- ---------- ----------- ",1545],["ValidateCommandEvent The Editor sends this event when determining whether an element in the panel handles the command. ✔ ✔ ✔ ",1545],["ExecuteCommandEvent The Editor sends this event when an element in the panel executes a command. ✔ ✔ ✔ ",1545],["Unique properties",1545],["target**: The element with keyboard focus. This value is null if no element has focus.",1545],["commandName**: The command to validate or execute.",1545],["Event List",1545],["ValidateCommandEvent",1545],["The ValidateCommandEvent event asks an EditorWindow if it can execute a command. For example, the Editor can enable or disable a menu item based on the results from the validation command event.",1545],["To verify if the Editor can execute a command:",1545],["Register a callback for ValidateCommandEvent.",1545],["Test the commandName property of the event.",1545],["Call the Event.StopPropogation() method on the event if the command can be executed.",1545],["ExecuteCommandEvent",1545],["The ExecuteCommandEvent event asks an Editor Window to execute a command.",1545],["Even if this event follows a validation event, it's best practice to ensure the action is possible first, independently of any previous validation.",1545],["To respond to the command:",1545],["Register a callback for ExecuteCommandEvent.",1545],["Test the commandName property of the event.",1545],["Call the Event.StopPropogation() method on the event before executing the actual logic of the command, so the Editor knows that the comment has been executed.",1545],["Example",1545],["The following example uses command events to support copy and paste in a custom Editor Window. The example displays a list of fruits in a custom Editor window. Users can use keyboard shortcuts to copy and paste any fruits.",1545],["```lang-csharp",1545],["using System;",1545],["using System.Collections.Generic;",1545],["using System.Linq;",1545],["using UnityEditor;",1545],["using UnityEngine;",1545],["using UnityEngine.UIElements;",1545],["public class CopyPasteExample : EditorWindow",1545],["[MenuItem(\"Window/UI Toolkit Examples/CopyPasteExample\")]",1545],["public static void Show()",1545],["GetWindow();",1545],["readonly List fruits = new ()",1545],["\"Banana\",",1545],["\"Apple\",",1545],["\"Lime\",",1545],["\"Orange\"",1545],["};",1545],["ListView m_ListView;",1545],["public void CreateGUI()",1545],["Func makeItem = () => new Label();",1545],["Action bindItem = (e, i) => (e as Label).text = fruits[i];",1545],["m_ListView = new ListView();",1545],["m_ListView.makeItem = makeItem;",1545],["m_ListView.bindItem = bindItem;",1545],["m_ListView.itemsSource = fruits;",1545],["m_ListView.selectionType = SelectionType.Single;",1545],["m_ListView.RegisterCallback(OnValidateCommand);",1545],["m_ListView.RegisterCallback(OnExecuteCommand);",1545],["rootVisualElement.Add(m_ListView);",1545],["void OnExecuteCommand(ExecuteCommandEvent evt)",1545],["if (evt.commandName == \"Copy\" && m_ListView.selectedIndices.Count() > 0)",1545],["EditorGUIUtility.systemCopyBuffer = fruits[m_ListView.selectedIndex];",1545],["evt.StopPropagation();",1545],["else if (evt.commandName == \"Paste\" && !string.IsNullOrEmpty(EditorGUIUtility.systemCopyBuffer))",1545],["fruits.Add(EditorGUIUtility.systemCopyBuffer);",1545],["m_ListView.RefreshItems();",1545],["evt.StopPropagation();",1545],["void OnValidateCommand(ValidateCommandEvent evt)",1545],["if (evt.commandName == \"Copy\" && m_ListView.selectedIndices.Count() > 0)",1545],["evt.StopPropagation();",1545],["else if (evt.commandName == \"Paste\" && !string.IsNullOrEmpty(EditorGUIUtility.systemCopyBuffer))",1545],["evt.StopPropagation();",1545],["Contextual menu events",1546],["Use the contextual menu events, ContextualMenuManipulator and ContextualMenuPopulateEvent, to display a set of choices when a user performs certain actions, such as when a user right-clicks a label.",1546],["Enable contextual menus",1546],["To enable contextual menus, attach the ContextualMenuManipulator to a visual element. This manipulator displays a contextual menu after either a right button mouse up event or a menu key up event. The ContextualMenuManipulator manipulator also adds a callback that responds to a ContextualMenuPopulateEvent.",1546],["The following code example adds a contextual menu to a visual element. The menu has only one item.",1546],["```lang-csharp",1546],["void InstallManipulator(VisualElement element)",1546],["ContextualMenuManipulator m = new ContextualMenuManipulator(MyDelegate);",1546],["m.target = element;",1546],["void MyDelegate(ContextualMenuPopulateEvent event)",1546],["// Modify event.menu",1546],["event.menu.AppendAction(\"My action\", DisplayProperties, DropdownMenu.MenuAction.AlwaysEnabled);",1546],["void DisplayProperties(DropdownMenu.MenuAction menuItem)",1546],["// ...",1546],["The callback given to the ContextualMenuManipulator constructor is invoked last so child elements can populate the menu.",1546],["The manipulator sends a ContextualMenuPopulateEvent event propagated to the target element hierarchy. The event moves along the propagation path: from the root of the visual tree to the event target, and then back up the visual tree to the root. Along the propagation path, the elements with a callback for the ContextualMenuPopulateEvent event can add, remove, or update items in the contextual menu.",1546],["Respond to the user selection",1546],["When an element receives a ContextualMenuPopulateEvent, it calls either [DropdownMenu.InsertAction()](ScriptRef:UIElements.DropdownMenu.InsertAction] or DropdownMenu.AppendAction() to add menu items to the contextual menu.",1546],["[DropdownMenu.InsertAction()](ScriptRef:UIElements.DropdownMenu.InsertAction] and DropdownMenu.AppendAction() take two callbacks as parameters. The first callback executes when the user selects the item in the menu. The second callback executes before it displays the menu and also checks whether the menu item is enabled.",1546],["Both callbacks receive a MenuAction as a parameter. The MenuAction represents the menu item and has the following properties:",1546],["\nMenuAction.userData includes a reference to user data used with AppendAction() or InsertAction().\n",1546],["\nMenuAction.eventInfo includes information about the event that displays the contextual menu. Use MenuAction.eventInfo in the action that responds to the event. For example, you can use the mouse position to create and place an object based on the selected contextual menu item.\n",1546],["Examples",1546],["The following example creates a custom Editor window with two labels and adds contextual menus for each label. The example demonstrates how to add, remove, and update a contextual menu.",1546],["Create a Unity project with any template.",1546],["In the Project window, create a folder named Editor.",1546],["In the Editor window, create a C# script named ContextualMenuDemo and replace its contents with the following:",1546],["```lang-csharp",1546],["using UnityEditor;",1546],["using UnityEngine;",1546],["using UnityEngine.UIElements;",1546],["public class ContextualMenuDemo : EditorWindow",1546],["[MenuItem(\"Window/ContextualMenuDemo\")]",1546],["public static void ShowExample()",1546],["ContextualMenuDemo wnd = GetWindow();",1546],["wnd.titleContent = new GUIContent(\"ContextualMenuDemo\");",1546],["public void CreateGUI()",1546],["VisualElement root = rootVisualElement;",1546],["VisualElement label = new Label(\"Right click me!\");",1546],["root.Add(label);",1546],["AddANewContextMenu(label);",1546],["InsertIntoAnExistingMenu(label);",1546],["VisualElement second = new Label(\"Click me also!\");",1546],["root.Add(second);",1546],["AddANewContextMenu(second);",1546],["InsertIntoAnExistingMenu(second);",1546],["// Override the default behavior by clearing the menu.",1546],["ReplaceContextMenu(second);",1546],["void AddANewContextMenu(VisualElement element)",1546],["// The manipulator handles the right click and sends a ContextualMenuPopulateEvent to the target element.",1546],["// The callback argument passed to the constructor is automatically registered on the target element.",1546],["element.AddManipulator(new ContextualMenuManipulator((evt) =>",1546],["evt.menu.AppendAction(\"First menu item\", (x) => Debug.Log(\"First!!!!\"), DropdownMenuAction.AlwaysEnabled);",1546],["evt.menu.AppendAction(\"Second menu item\", (x) => Debug.Log(\"Second!!!!\"), DropdownMenuAction.AlwaysEnabled);",1546],["}));",1546],["void InsertIntoAnExistingMenu(VisualElement element)",1546],["element.RegisterCallback((evt) =>",1546],["evt.menu.AppendSeparator();",1546],["evt.menu.AppendAction(\"Another action\", (x) => Debug.Log(\"Another Action!!!!\"), DropdownMenuAction.AlwaysEnabled);",1546],["});",1546],["void ReplaceContextMenu(VisualElement element)",1546],["element.RegisterCallback((evt) =>",1546],["evt.menu.ClearItems();",1546],["evt.menu.AppendAction(\"The only action\", (x) => Debug.Log(\"The only action!\"), DropdownMenuAction.AlwaysEnabled);",1546],["});",1546],["To see the example live, from the menu, select Window > UI Toolkit > ContextualMenuDemo.",1546],["Additional resources",1546],["Structure UI with C# scripts",1547],["Technical users can define the layout of the UI directly in C# scripts.",1547],["You can define the look of controls in a USS file, or modify the style properties of the control in your C# script.",1547],["Controls are interactive and represent a value that you can change. For example, a FloatField represents a float value. You can create C# scripts to change the value of a control, register a callback, or apply data binding.",1547],["Add controls to a UI with C# scripts",1547],["To use a control in a UI, add it to the visual tree.",1547],["The following example adds a Button control to an existing visual tree.",1547],["```lang-csharp",1547],["var newButton = new Button(\"Click me!\");",1547],["rootVisualElement.Add(newButton);",1547],["When adding controls to a UI hierarchy, the layout engine automatically handles the sizing and positioning. You can also override the size and position of visual elements.",1547],["Change the control value",1547],["To access or change the value of a control, use its value property.",1547],["The following example creates a Toggle control and a Button control. When you click the button, the value of the toggle flips.",1547],["```lang-csharp",1547],["// Create a toggle and register callback",1547],["m_MyToggle = new Toggle(\"Test Toggle\") { name = \"My Toggle\" };",1547],["rootVisualElement.Add(m_MyToggle);",1547],["// Create button to flip the toggle's value",1547],["Button button01 = new Button() { text = \"Toggle\" };",1547],["button01.clicked += () =>",1547],["m_MyToggle.value = !m_MyToggle.value;",1547],["};",1547],["rootVisualElement.Add(button01);",1547],["For more information about the properties of a specific control, see UI Toolkit built-in controls reference.",1547],["Register a callback",1547],["Controls that have value properties send an event if the value changes. You can register a callback to receive this event.",1547],["The following example creates a Toggle control and registers a callback:",1547],["```lang-csharp",1547],["// Create a toggle and register callback",1547],["m_MyToggle = new Toggle(\"Test Toggle\") { name = \"My Toggle\" };",1547],["m_MyToggle.RegisterValueChangedCallback((evt) => { Debug.Log(\"Change Event received\"); });",1547],["rootVisualElement.Add(m_MyToggle);",1547],["To learn more about callbacks and events, see Events Handling.",1547],["Apply data binding",1547],["You can bind controls to an object or a serialized property. For example, you can bind a FloatField control to a public float variable that belongs to a MonoBehaviour. When the control binds to the property, it automatically displays the value of the property. When you modify the control, the value of the property updates.",1547],["Similarly, when the property value changes through code, the UI displays the updated value. This two-way connection is useful when you create custom Inspector windows.",1547],["For more information about data binding, see SerializedObject data binding.",1547],["Not all controls are bindable. For a list of built-in controls and whether they support binding, see UI Toolkit built-in controls reference.",1547],["Manage control states",1547],["Controls have different states that you can manage in your C# scripts. For example, you can enable or disable a control.",1547],["The following example creates a Toggle control and a Button control. When you click the button, the toggle is disabled.",1547],["```lang-csharp",1547],["// Create a toggle.",1547],["Toggle myToggle = new Toggle(\"A Toggle\");",1547],["// Create a button to disable the toggle.",1547],["Button button01 = new Button();",1547],["button01.text = \"Button01\";",1547],["button01.RegisterCallback(evt =>",1547],["myToggle.SetEnabled(false);",1547],["});",1547],["You can also implement a visual feedback change when the state changes in USS using the pseudo-classes. For example, to disable a toggle, use a selector that has the disabled pseudo state:",1547],["```lang-css",1547],[".unity-button:disabled",1547],["background-color: #000000;",1547],["Additional resources",1547],["\nStructure UI with UXML\n",1547],["Coordinate and position systems",1548],["UI Toolkit uses a powerful layout system that automatically calculates the position and size of individual elements based on the layout parameters in their style properties. This is based on Flexbox, a web layout model. For more information, see Layout Engine.",1548],["Relative and absolute positions",1548],["UI Toolkit has two types of coordinates:",1548],["\nRelative: Coordinates relative to the element’s calculated position. The layout system calculates the position of the element, then adds the coordinates as an offset. Parent elements can influence the size and position of the child elements, as the layout engine takes them into account when it calculates the element position. Child elements can only influence the size of the parent element.\n",1548],["\nAbsolute: Coordinates relative to the parent element. This circumvents the automatic layout calculation and directly sets the position of the element. Sibling elements under the same parent have no influence on the element’s position. Similarly, the element doesn't influence the position and size of other siblings under the same parent.\n",1548],["Each visual element determines the coordinate system used to calculate its position. You can configure which coordinate system to use in the element stylesheet.",1548],["The following code shows how to set the coordinate space and the position of a visual element through code:",1548],["```lang-csharp",1548],["var newElement = new VisualElement();",1548],["newElement.style.position = Position.Relative;",1548],["newElement.style.left = 15;",1548],["newElement.style.top = 35;",1548],["The origin of an element is its top left corner.",1548],["The layout system computes the VisualElement.layout property (type Rect) for each element, which includes the final position of the element. This takes the relative or absolute position of the element into account.",1548],["The layout.position is expressed in points, relative to the coordinate space of its parent.",1548],["Each VisualElement has a transform property (ITransform) you can use to add an additional local offset to the position and rotation of an element. The offset isn't represented in the calculated layout property. By default, the transform is the identity.",1548],["Use the worldBound property to retrieve the final window space coordinates of the VisualElement, taking into account both the layout position and the transform. This position includes the height of the header of the window.",1548],["Transformation between coordinate systems",1548],["The VisualElement.layout.position and VisualElement.transform properties define how to transform between the local coordinate system and the parent coordinate system.",1548],["The VisualElementExtensions static class provides the following extension methods that transform points and rectangles between coordinate systems:",1548],["\nWorldToLocal transforms a Vector2 or Rect from Panel space to the referential within the element.\n",1548],["\nLocalToWorld transforms a Vector2 or Rect to Panel space referential.\n",1548],["\nChangeCoordinatesTo transforms Vector2 or Rect from the local space of one element to the local space of another.\n",1548],["Additional resource",1548],["Receive callbacks when any bound properties change",1549],["Version**: 2021.3+",1549],["The examples demonstrate how to receive callbacks when any properties of a bound serialized object changes.",1549],["Example overview",1549],["This example creates a custom Inspector with two fields. It warns the user if the values of the fields fall outside certain ranges.",1549],["You can find the completed files for the example in this GitHub repository.",1549],["Prerequisites",1549],["\nTrackSerializedObjectValue()\n",1549],["Create a Weapon object",1549],["Create a C# script to define the class Weapon as a MonoBehaviour with two properties: m_BaseDamage and m_HardModeModifier.",1549],["Create a project in Unity with any template.",1549],["In your Project window, create a folder named callback-any-SerializedProperty-changes to store your files.",1549],["Create a C# script named Weapon.cs and replace its contents with the following:",1549],["```lang-cs",1549],["using UnityEngine;",1549],["namespace UIToolkitExamples",1549],["public class Weapon : MonoBehaviour",1549],["public const float maxDamage = 9999f;",1549],["[SerializeField]",1549],["float m_BaseDamage;",1549],["[SerializeField]",1549],["float m_HardModeModifier;",1549],["public float GetDamage(bool hardMode)",1549],["return hardMode ? m_BaseDamage * m_HardModeModifier : m_BaseDamage;",1549],["Create the binding to receive callbacks",1549],["Create a C# script that defines a custom Inspector for Weapon and uses the TrackSerializedObjectValue() method to check for changes in the m_BaseDamage and m_HardModeModifier properties.",1549],["In the callback-any-SerializedProperty-changes folder, create a folder named Editor.",1549],["In the Editor folder, create a C# script named WeaponCustomEditor.cs and replace its contents with the following:",1549],["```lang-cs",1549],["using UnityEngine;",1549],["using UnityEditor;",1549],["using UnityEngine.UIElements;",1549],["using UnityEditor.UIElements;",1549],["namespace UIToolkitExamples",1549],["[CustomEditor(typeof(Weapon))]",1549],["public class WeaponCustomEditor : Editor",1549],["// This is text used for the warning labels.",1549],["const string k_NegativeWarningText =",1549],["\"This weapon has a negative final damage on at least 1 difficulty level.\";",1549],["static readonly string k_DamageCapWarningText =",1549],["\"This weapon has an excessive final damage that is capped to \" + Weapon.maxDamage +",1549],["\" on at least 1 difficulty level.\";",1549],["// These are labels to warn users about negative damage and excessive damage.",1549],["Label m_NegativeWarning, m_DamageCapWarning;",1549],["public override VisualElement CreateInspectorGUI()",1549],["VisualElement root = new();",1549],["// Create FloatFields for serialized properties.",1549],["var baseDamageField = new FloatField(\"Base Damage\") { bindingPath = \"m_BaseDamage\" };",1549],["var modifierField = new FloatField(\"Hard Mode Modifier\") { bindingPath = \"m_HardModeModifier\" };",1549],["root.Add(baseDamageField);",1549],["root.Add(modifierField);",1549],["// Create warning labels and style them so they stand out.",1549],["var warnings = new VisualElement();",1549],["m_NegativeWarning = new(k_NegativeWarningText);",1549],["m_DamageCapWarning = new(k_DamageCapWarningText);",1549],["warnings.style.color = Color.red;",1549],["warnings.style.unityFontStyleAndWeight = FontStyle.Bold;",1549],["warnings.Add(m_NegativeWarning);",1549],["warnings.Add(m_DamageCapWarning);",1549],["root.Add(warnings);",1549],["// Determine whether to show the warnings at the start.",1549],["CheckForWarnings(serializedObject);",1549],["// Whenever any serialized property on this serialized object changes its value, call CheckForWarnings.",1549],["root.TrackSerializedObjectValue(serializedObject, CheckForWarnings);",1549],["return root;",1549],["// Check the current values of the serialized properties to either display or hide the warnings.",1549],["void CheckForWarnings(SerializedObject serializedObject)",1549],["// For each possible damage values of the weapon, determine whether it's negative and whether it's above the",1549],["// maximum damage value.",1549],["var weapon = serializedObject.targetObject as Weapon;",1549],["var damages = new float[] { weapon.GetDamage(true), weapon.GetDamage(false) };",1549],["var foundNegativeDamage = false;",1549],["var foundCappedDamage = false;",1549],["foreach (var damage in damages)",1549],["foundNegativeDamage = foundNegativeDamage damage < 0;",1549],["foundCappedDamage = foundCappedDamage damage > Weapon.maxDamage;",1549],["// Display or hide warnings depending on the values of the damages.",1549],["m_NegativeWarning.style.display = foundNegativeDamage ? DisplayStyle.Flex : DisplayStyle.None;",1549],["m_DamageCapWarning.style.display = foundCappedDamage ? DisplayStyle.Flex : DisplayStyle.None;",1549],["Test the binding",1549],["Create an empty GameObject in a scene.",1549],["Select the GameObject.",1549],["Add the Weapon component in the Inspector.",1549],["In the Weapon component, change the values in the fields:",1549],["If Base Damage or Base Damage multiplied by Hard Mode Modifier is negative, a warning message appears.",1549],["If Base Damage or Base Damage multiplied by Hard Mode Modifier is greater than 9999, a different warning message appears.",1549],["Additional resources",1549],["Receive callbacks when a bound property changes",1550],["Version**: 2021.3+",1550],["This example demonstrates how to receive callbacks when a bound serialized property changes.",1550],["Example overview",1550],["This example creates a custom Editor window with a TextField that binds to the name of a GameObject in a scene. If the name of the GameObject is GameObject, the background color of the text field label changes to dark red.",1550],["You can find the completed files for the example in this GitHub repository.",1550],["Prerequisites",1550],["\nTrackPropertyValue()\n",1550],["\nUnbind()\n",1550],["Create the binding to receive a callback",1550],["Create a C# script that:",1550],["\nCalls the CheckName() method whenever the value of a serialized property changes\n",1550],["\nRegisters the method with the TrackPropertyValue() extension method\n",1550],["\nCalls Unbind() before calling the TrackPropertyValue() again on another property.\n",1550],["A VisualElement can only track one property at any given time.",1550],["Create a project in Unity with any template.",1550],["In your Project window, create a folder named callback-SerializedProperty-changes to store your files.",1550],["In the callback-SerializedProperty-change folder, create a folder named Editor.",1550],["In the Editor folder, create a C# script named SimpleBindingPropertyTrackingExample.cs and replace its contents with the following:",1550],["```lang-cs",1550],["using UnityEditor;",1550],["using UnityEngine;",1550],["using UnityEditor.UIElements;",1550],["using UnityEngine.UIElements;",1550],["namespace UIToolkitExamples",1550],["public class SimpleBindingPropertyTrackingExample : EditorWindow",1550],["TextField m_ObjectNameBinding;",1550],["[MenuItem(\"Window/UIToolkitExamples/Simple Binding Property Tracking Example\")]",1550],["public static void ShowDefaultWindow()",1550],["var wnd = GetWindow();",1550],["wnd.titleContent = new GUIContent(\"Simple Binding Property Tracking\");",1550],["public void CreateGUI()",1550],["m_ObjectNameBinding = new TextField(\"Object Name Binding\");",1550],["rootVisualElement.Add(m_ObjectNameBinding);",1550],["OnSelectionChange();",1550],["public void OnSelectionChange()",1550],["GameObject selectedObject = Selection.activeObject as GameObject;",1550],["if (selectedObject != null)",1550],["// Create the SerializedObject from the current selection",1550],["SerializedObject so = new SerializedObject(selectedObject);",1550],["// Note: the \"name\" property of a GameObject is actually named \"m_Name\" in serialization.",1550],["SerializedProperty property = so.FindProperty(\"m_Name\");",1550],["// Ensure to use Unbind() before tracking a new property",1550],["m_ObjectNameBinding.Unbind();",1550],["m_ObjectNameBinding.TrackPropertyValue(property, CheckName);",1550],["// Bind the property to the field directly",1550],["m_ObjectNameBinding.BindProperty(property);",1550],["CheckName(property);",1550],["else",1550],["// Unbind any binding from the field",1550],["m_ObjectNameBinding.Unbind();",1550],["void CheckName(SerializedProperty property)",1550],["if (property.stringValue == \"GameObject\")",1550],["m_ObjectNameBinding.style.backgroundColor = Color.red * 0.5f;",1550],["else",1550],["m_ObjectNameBinding.style.backgroundColor = StyleKeyword.Null;",1550],["Test the binding",1550],["In Unity, select Window > UIToolkitExamples > Simple Binding Property Tracking Example. A custom Editor window appears with a text field.",1550],["Select any GameObject in your scene. The name of the GameObject appears in your Editor window's text field.",1550],["Change the name of the GameObject in the text field. If the name is GameObject, the background color of the label changes to dark red.",1550],["Additional resources",1550],["Bind with binding path in C# script",1551],["Version**: 2021.3+",1551],["This example demonstrates how to bind with the binding path in a C# script.",1551],["Example overview",1551],["This examples create a custom Editor window to change the name of a GameObject.",1551],["You can find the completed files that this example creates in this GitHub repository.",1551],["Prerequisites",1551],["\nbindingPath\n",1551],["\nBind()\n",1551],["",1551],["Bind with the binding path",1551],["Create a custom Editor window in C# with a TextField. Set the binding path to the name property of a GameObject and make an explicit call to the Bind() method.",1551],["Create a project in Unity with any template.`",1551],["In your Project window, create a folder named bind-with-binding-path folder to store your file.",1551],["In the bind-with-binding-path folder, create a folder named Editor.",1551],["In the Editor folder, create a C# script named SimpleBindingExample.cs and replace its contents with the following:",1551],["```lang-csharp",1551],["using UnityEditor;",1551],["using UnityEngine;",1551],["using UnityEditor.UIElements;",1551],["using UnityEngine.UIElements;",1551],["namespace UIToolkitExamples",1551],["public class SimpleBindingExample : EditorWindow",1551],["TextField m_ObjectNameBinding;",1551],["[MenuItem(\"Window/UIToolkitExamples/Simple Binding Example\")]",1551],["public static void ShowDefaultWindow()",1551],["var wnd = GetWindow();",1551],["wnd.titleContent = new GUIContent(\"Simple Binding\");",1551],["public void CreateGUI()",1551],["m_ObjectNameBinding = new TextField(\"Object Name Binding\");",1551],["// Note: the \"name\" property of a GameObject is \"m_Name\" in serialization.",1551],["m_ObjectNameBinding.bindingPath = \"m_Name\";",1551],["rootVisualElement.Add(m_ObjectNameBinding);",1551],["OnSelectionChange();",1551],["public void OnSelectionChange()",1551],["GameObject selectedObject = Selection.activeObject as GameObject;",1551],["if (selectedObject != null)",1551],["// Create the SerializedObject from the current selection",1551],["SerializedObject so = new SerializedObject(selectedObject);",1551],["// Bind it to the root of the hierarchy. It will find the right object to bind to.",1551],["rootVisualElement.Bind(so);",1551],["// Alternatively you can instead bind it to the TextField itself.",1551],["// m_ObjectNameBinding.Bind(so);",1551],["else",1551],["// Unbind the object from the actual visual element that was bound.",1551],["rootVisualElement.Unbind();",1551],["// If you bound the TextField itself, you'd do this instead:",1551],["// m_ObjectNameBinding.Unbind();",1551],["// Clear the TextField after the binding is removed",1551],["m_ObjectNameBinding.value = \"\";",1551],["Test the binding",1551],["In Unity, select Window > UIToolkitExamples > Simple Binding Example. A custom Editor window appears with a text field.",1551],["Select any GameObject in your scene. The name of the GameObject appears in your Editor window's text field. If you change the name of the GameObject in the text field, the name of the GameObject changes.",1551],["Additional resources",1551],["Bind with UXML and C# script",1552],["Version**: 2021.3+",1552],["This example demonstrates how to create a binding and set the binding path with UXML, and call the Bind() method with a C# script.",1552],["Example overview",1552],["This example creates a custom Editor window with a TextField that binds to the name property of any GameObject in a scene.",1552],["You can find the completed files that this example creates in this GitHub repository.",1552],["Prerequisites",1552],["\nVisual Tree\n",1552],["\nUXML\n",1552],["\nbindingPath\n",1552],["\nBind()\n",1552],["",1552],["Define the binding path in UXML",1552],["Define the visual elements and the binding path in UXML.",1552],["Create a project in Unity with any template.",1552],["In your Project window, create a folder named bind-with-uxml-csharp folder to store all your files.",1552],["Create a UI Document named binding_example.uxml and replace its content with the following:",1552],["```lang-xml",1552],["",1552],["",1552],["",1552],["",1552],["",1552],["",1552],["Create the binding in C#",1552],["Create the binding in a C# script and make an explicit call to the Bind() method.",1552],["Create a folder named Editor.",1552],["In the Editor folder, create a C# script file named SimpleBindingExampleUXML.cs.",1552],["Replace the contents of SimpleBindingExampleUXML.cs with the following:",1552],["```lang-csharp",1552],["using UnityEditor;",1552],["using UnityEngine;",1552],["using UnityEditor.UIElements;",1552],["using UnityEngine.UIElements;",1552],["namespace UIToolkitExamples",1552],["public class SimpleBindingExampleUXML : EditorWindow",1552],["[SerializeField]",1552],["VisualTreeAsset visualTree;",1552],["[MenuItem(\"Window/UIToolkitExamples/Simple Binding Example UXML\")]",1552],["public static void ShowDefaultWindow()",1552],["var wnd = GetWindow();",1552],["wnd.titleContent = new GUIContent(\"Simple Binding UXML\");",1552],["public void CreateGUI()",1552],["visualTree.CloneTree(rootVisualElement);",1552],["OnSelectionChange();",1552],["public void OnSelectionChange()",1552],["GameObject selectedObject = Selection.activeObject as GameObject;",1552],["if (selectedObject != null)",1552],["// Create the SerializedObject from the current selection",1552],["SerializedObject so = new SerializedObject(selectedObject);",1552],["// Bind it to the root of the hierarchy. It will find the right object to bind to.",1552],["rootVisualElement.Bind(so);",1552],["else",1552],["// Unbind the object from the actual visual element",1552],["rootVisualElement.Unbind();",1552],["// Clear the TextField after the binding is removed",1552],["var textField = rootVisualElement.Q(\"GameObjectName\");",1552],["if (textField != null)",1552],["textField.value = string.Empty;",1552],["In the Project window, select SimpleBindingExampleUXML.cs and drag binding_example.uxml to the Visual Tree field in the Inspector.",1552],["Test the binding",1552],["In Unity, select Window > UIToolkitExamples > Simple Binding Example UXML. A custom Editor window appears with a text field.",1552],["Select any GameObject in your scene. The name of the GameObject appears in your Editor window's text field.",1552],["If you change the name of the GameObject in the text field, the name of the GameObject changes.",1552],["Additional resources",1552],["Create a binding with the Inspector",1553],["Version**: 2021.3+",1553],["The example demonstrates how to create bindings among a custom Inspector, a custom Editor, and serialized objects.",1553],["Example overview",1553],["This example creates the following:",1553],["A custom Inspector UI component with two fields that bind to a GameObject's name and the scale of a USS transform.",1553],["A custom Editor window that creates the same bindings inside an InspectorElement.",1553],["You can find the completed files that this example creates in this GitHub repository.",1553],["Prerequisites",1553],["\nVisual Tree\n",1553],["\nUXML\n",1553],["\nUSS\n",1553],["\nCreateInspectorGUI\n",1553],["\nInspectorElement\n",1553],["Define the custom Inspector component",1553],["Define a custom Inspector UI class called TankScript, style it with USS, and set the visual elements and the binding path in UXML.",1553],["In your Project window, create a folder named create-a-binding-inspector to store all your files.",1553],["Create a C# script named TankScript.cs and replace its content with the following:",1553],["```lang-csharp",1553],["using UnityEngine;",1553],["[ExecuteInEditMode]",1553],["public class TankScript : MonoBehaviour",1553],["public string tankName = \"Tank\";",1553],["public float tankSize = 1;",1553],["private void Update()",1553],["gameObject.name = tankName;",1553],["gameObject.transform.localScale = new Vector3(tankSize, tankSize, tankSize);",1553],["In the create-a-binding-inspector folder, create a folder named Editor.",1553],["",1553],["Create a UXML file named tank_inspector_uxml.uxml and replace its contents with the following:",1553],["```lang-xml",1553],["",1553],["",1553],["",1553],["",1553],["",1553],["",1553],["",1553],["",1553],["Create the Inspector UI with binding",1553],["Create a C# script to register the custom Inspector for TankScript. You don't need to call the Bind() method as binding in the Inspector window is implicit.",1553],["Create a C# script named TankEditor.cs and replace its contents with the following:",1553],["```lang-cs",1553],["using UnityEditor;",1553],["using UnityEngine;",1553],["using UnityEngine.UIElements;",1553],["[CustomEditor(typeof(TankScript))]",1553],["public class TankEditor : Editor",1553],["[SerializeField]",1553],["VisualTreeAsset visualTree;",1553],["public override VisualElement CreateInspectorGUI()",1553],["var uxmlVE = visualTree.CloneTree();",1553],["return uxmlVE;",1553],["In the Project window, select TankEditor.cs.",1553],["Drag tank_inspector_uxml.uxml to Visual Tree in the Inspector.",1553],["Drag tank_inspector_styles.uss to Style Sheet in the Inspector.",1553],["Test the first binding",1553],["In Unity, add an empty GameObject to a scene.",1553],["Select the GameObject and drag TankScript.cs to Add Component in the Inspector. This generates the Tank Script component in the Inspector.",1553],["In Tank Script, you can change the name of the Tank in the Tank Name box, and change the Transform scale value in the Tank Size box.",1553],["Bind with InspectorElement",1553],["Create a custom Editor window with two fields that bind to the TankScript object. Create a C# script that calls the InspectorElement constructor. The InspectorElement creates the UI and automatically binds the UI to objects.",1553],["Create a C# file named SimpleBindingExampleInspectorElement.cs and replace its contents with the following:",1553],["```lang-cs",1553],["using UnityEditor;",1553],["using UnityEngine;",1553],["using UnityEditor.UIElements;",1553],["namespace UIToolkitExamples",1553],["public class SimpleBindingExampleInspectorElement : EditorWindow",1553],["[MenuItem(\"Window/UIToolkitExamples/Simple Binding Example Inspector Element\")]",1553],["public static void ShowDefaultWindow()",1553],["var wnd = GetWindow();",1553],["wnd.titleContent = new GUIContent(\"Simple Binding with Inspector Element\");",1553],["TankScript m_Tank;",1553],["public void OnEnable()",1553],["m_Tank = FindObjectOfType();",1553],["if (m_Tank == null)",1553],["return;",1553],["var inspector = new InspectorElement(m_Tank);",1553],["rootVisualElement.Add(inspector);",1553],["Test the second binding",1553],["In Unity, select Window > UIToolkitExamples > Simple Binding Example Inspector Element.",1553],["In the Editor window, if you change the values in the fields, the values in the Inspector change, and vice versa.",1553],["Additional resources",1553],["Use Toggle to create a conditional UI",1554],["This example uses a Toggle to create a conditional UI.",1554],["Example overview",1554],["The example creates a custom Editor window with two toggles. You can use the toggles to do the following:",1554],["Show or hide a label",1554],["Activate or deactivate a button",1554],["You can find the completed files that this example creates in this GitHub repository.",1554],["Create the example",1554],["To create the example:",1554],["Create a Unity project with any template.",1554],["In the Project window, create a folder named Editor.",1554],["In the Editor folder, create a C# script file named ToggleExample with the following content:",1554],["```lang-csharp",1554],["using UnityEngine;",1554],["using UnityEditor;",1554],["using UnityEngine.UIElements;",1554],["namespace Samples.Editor.Controls",1554],["public class ToggleExample : EditorWindow",1554],["private Toggle showToggle;",1554],["private Toggle activateToggle;",1554],["private Label labelToShow;",1554],["private Button buttonToActivate;",1554],["[MenuItem(\"Window/ToggleExample\")]",1554],["public static void OpenWindow()",1554],["var window = GetWindow(\"Controls: Toggle Sample\");",1554],["window.minSize = new Vector2(200, 170);",1554],["EditorGUIUtility.PingObject(MonoScript.FromScriptableObject(window));",1554],["public void CreateGUI()",1554],["showToggle = new Toggle(\"Show label\")",1554],["value = true",1554],["};",1554],["activateToggle = new Toggle(\"Active button\")",1554],["value = true",1554],["};",1554],["labelToShow = new Label(\"This label is shown when the above toggle is set to On\");",1554],["buttonToActivate = new Button(() => Debug.Log(\"Button pressed!\"))",1554],["text = \"Active if above toggle is On\"",1554],["};",1554],["rootVisualElement.Add(showToggle);",1554],["rootVisualElement.Add(labelToShow);",1554],["rootVisualElement.Add(activateToggle);",1554],["rootVisualElement.Add(buttonToActivate);",1554],["showToggle.RegisterValueChangedCallback(evt => labelToShow.visible = evt.newValue);",1554],["activateToggle.RegisterValueChangedCallback(evt => buttonToActivate.SetEnabled(evt.newValue));",1554],["To try the example, from the menu, select Window > ToggleExample.",1554],["Additional resources",1554],["\nToggle\n",1554],["Create a pop-up window",1555],["Version**: 2021.3+",1555],["This example demonstrates how to use UnityEditor.PopupWindow to create a pop-up window.",1555],["Example overview",1555],["This example creates a pop-up window that's displayed through a button in a custom Editor window. The pop-up window has three toggles and closes when it isn't in focus.",1555],["You can find the completed files that this example creates in this GitHub repository.",1555],["Prerequisites",1555],["\nUXML\n",1555],["\nUSS\n",1555],["\nUnityEditor.PopupWindow\n",1555],["Create a custom Editor window",1555],["Create a custom Editor window with a button. Define the button in a UI Document (UXML file) and style it in a USS file. Finally, define the button logic in a C# script so that when you click the button, the pop-up window displays.",1555],["Create a Unity project with any template.",1555],["Right-click in the Project window, and then select Create > UI Toolkit > Editor Window.",1555],["In the C# box of the UI Toolkit Editor Window Creator window, enter PopupExample.",1555],["Select Confirm. This creates three files: PopupExample.cs, PopupExample.uxml, and PopupExample.uss.",1555],["Replace PopupExample.uxml with the following content:",1555],["```lang-xml",1555],["",1555],["",1555],["",1555],["",1555],["Replace PopupExample.cs with the following content:",1555],["```lang-csharp",1555],["using UnityEditor;",1555],["using UnityEngine.UIElements;",1555],["using PopupWindow = UnityEditor.PopupWindow;",1555],["public class PopupExample : EditorWindow",1555],["// Add menu item",1555],["[MenuItem(\"Example/Popup Example\")]",1555],["static void Init()",1555],["EditorWindow window = EditorWindow.CreateInstance();",1555],["window.Show();",1555],["private void CreateGUI()",1555],["var visualTreeAsset = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/PopupExample.uxml\");",1555],["visualTreeAsset.CloneTree(rootVisualElement);",1555],["var button = rootVisualElement.Q();",1555],["button.clicked += () => PopupWindow.Show(button.worldBound, new PopupContentExample());",1555],["Replace PopupExample.uss with the following content:",1555],["```lang-css",1555],[".popup-button {",1555],["width: 200px;",1555],["Create the pop-up window content",1555],["Create a UI Document (UXML file) to define the content in the pop-up window. Create a C# class to set the window size and to display the window.",1555],["In the Editor folder, create a UI Document named PopupWindowContent.uxml with the following content:",1555],["```lang-xml",1555],["",1555],["",1555],["",1555],["",1555],["",1555],["In the Editor folder, create a C# file named PopupContentExample.cs with the following content:",1555],["```lang-csharp",1555],["using UnityEditor;",1555],["using UnityEngine;",1555],["using UnityEngine.UIElements;",1555],["public class PopupContentExample : PopupWindowContent",1555],["//Set the window size",1555],["public override Vector2 GetWindowSize()",1555],["return new Vector2(200, 100);",1555],["public override void OnGUI(Rect rect)",1555],["// Intentionally left empty",1555],["public override void OnOpen()",1555],["Debug.Log(\"Popup opened: \" + this);",1555],["var visualTreeAsset = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/PopupWindowContent.uxml\");",1555],["visualTreeAsset.CloneTree(editorWindow.rootVisualElement);",1555],["public override void OnClose()",1555],["Debug.Log(\"Popup closed: \" + this);",1555],["To test the popup window, from the menu, select Example > Popup Example > Popup Options.",1555],["Create a bindable custom control",1556],["Version**: 2021.3+",1556],["This example demonstrates how to create a bindable custom control in a custom Editor window.",1556],["Example overview",1556],["This example creates a custom control bound to a property with the double data type. You can adapt this example to bind to properties with other data types such as a string or an integer.",1556],["You can find the completed files that this example creates in this GitHub repository.",1556],["Prerequisites",1556],["\nUI Builder\n",1556],["\nVisual Tree\n",1556],["\nUXML\n",1556],["\nSerializedObject data binding\n",1556],["Create the custom control class",1556],["Create a C# class to define the custom control.",1556],["Create a Unity project with any template.",1556],["Create a folder named ExampleField to store your files.",1556],["In the ExampleField folder, create a C# script named ExampleField.cs and replace its content with the following:",1556],["```lang-cs",1556],["using UnityEngine.UIElements;",1556],["namespace UIToolkitExamples",1556],["// ExampleField inherits from BaseField with the double type. Therefoe, the ExampleField's underlying value is a double.",1556],["public class ExampleField : BaseField",1556],["// We can provide the existing BaseFieldTraits class as a type parameter for UxmlFactory, and this means we",1556],["// don't need to define our own traits class or override its Init() method. We do, however, need to provide it",1556],["// However, you must provide the value type (double) and its attribute description type:",1556],["// (UxmlDoubleAttributeDescription).",1556],["public new class UxmlFactory :",1556],["UxmlFactory> { }",1556],["Label m_Input;",1556],["// Default constructor is required for compatibility with UXML factory",1556],["public ExampleField() : this(null)",1556],["// Main constructor accepts label parameter to mimic BaseField constructor.",1556],["// Second argument to base constructor is the input element, the one that displays the value this field is",1556],["// bound to.",1556],["public ExampleField(string label) : base(label, new Label() { })",1556],["// This is the input element instantiated for the base constructor.",1556],["m_Input = this.Q(className: inputUssClassName);",1556],["// SetValueWithoutNotify needs to be overridden by calling the base version and then making a change to the",1556],["// underlying value be reflected in the input element.",1556],["public override void SetValueWithoutNotify(double newValue)",1556],["base.SetValueWithoutNotify(newValue);",1556],["m_Input.text = value.ToString(\"N\");",1556],["Use the custom control in a UXML file",1556],["In the ExampleField folder, create a UI Document named ExampleField.uxml.",1556],["Open ExampleField.uxml in a text editor and replace its contents with the following:",1556],["```lang-xml",1556],["",1556],["",1556],["",1556],["In Unity, double-click ExampleField.uxml to open it in the UI Builder. The ExampleField displays in the Hierarchy window and is visualized in the Viewport. If you select the ExampleField in the Hierarchy window, the Inspector window shows the values assigned to the Binding Path and Label boxes.",1556],["Create the class and custom Editor for the binding target",1556],["In the ExampleField folder, create a C# script named ExampleFieldComponent.cs and replace its contents with the following:",1556],["```lang-cs",1556],["using UnityEngine;",1556],["namespace UIToolkitExamples",1556],["public class ExampleFieldComponent : MonoBehaviour",1556],["[SerializeField]",1556],["double m_Value;",1556],["In the ExampleField folder, create a folder named Editor.",1556],["In the Editor folder, create a C# script named ExampleFieldCustomEditor.cs and replace its contents with the following:",1556],["```lang-cs",1556],["using UnityEditor;",1556],["using UnityEngine.UIElements;",1556],["using UnityEngine;",1556],["namespace UIToolkitExamples",1556],["[CustomEditor(typeof(ExampleFieldComponent))]",1556],["public class ExampleFieldCustomEditor : Editor",1556],["[SerializeField]",1556],["VisualTreeAsset m_Uxml;",1556],["public override VisualElement CreateInspectorGUI()",1556],["var parent = new VisualElement();",1556],["m_Uxml?.CloneTree(parent);",1556],["return parent;",1556],["In Unity, select ExampleFieldCustomEditor.cs in the Project window.",1556],["Drag ExampleField.uxml into the Uxml box in the Inspector window.",1556],["Test the example",1556],["In Unity, add an empty GameObject to a scene.",1556],["Add the ExampleFieldComponent component to the GameObject. The custom control appears in the Inspector with the default value of 0 for the Binding Target. If you change the value of the underlying double property, the UI reflects that change.",1556],["Additional resources",1556],["Create a custom control",1557],["To create a custom control, you must create a custom control C# class and initialize it. You can expose it for use in UXML and UI Builder. You can also bind it to data.",1557],["",1557],["Create a custom control class",1557],["Create a C# class derived from the VisualElement class or a subclass of the VisualElement class. For example, you can create a bindable custom control derived from the BaseField generic base class instead of BindableElement. This provides the following advantages:",1557],["\nImplements the INotifyValueChanged interface for the generic parameter type that you specify\n",1557],["\nMakes the control focusable by default\n",1557],["\nProvides a horizontal layout with a label element on the left and input on the right\n",1557],["Note**: It's possible to create custom controls derived from built-in UI controls, if you understand their internal hierarchy and existing USS classes. Unity discourages this practice because your custom controls might be dependent on their internal structure, which is subject to change in the future.",1557],["Initialize a custom control",1557],["Custom controls inherit from VisualElement. A VisualElement isn't bound to the lifetime of a GameObject and doesn't receive any of these callbacks:",1557],["Awake()",1557],["OnEnable()",1557],["OnDisable()",1557],["OnDestroy()",1557],["You can initialize a custom control in its constructor. However, if your application needs, you can delay initialization until the custom control is added to the UI. To do this, register a callback for an AttachToPanelEvent. To detect that your custom control has been removed from the UI, use the DetachFromPanelEvent callback.",1557],["```lang-cs",1557],["public CustomControl()",1557],["var myCustomElement = rootVisualElement.Q(className: \"my-custom-element\");",1557],["myCustomElement.RegisterCallback(e =>",1557],["{ /* do something here when element is added to UI */ });",1557],["myCustomElement.RegisterCallback(e =>",1557],["{ /* do something here when element is removed from UI */ });",1557],["UI Toolkit dispatches these two events for all elements and doesn't need a custom VisualElement subclass. For more information, see Panel events.",1557],["Expose custom controls to UXML and UI Builder",1557],["To use your custom controls with UXML and UI Builder, you must expose them. To expose custom controls, define a factory class derived from UxmlFactory<T>.",1557],["You can add new attributes to a custom control to use in UXML. To add new attributes to a custom control, define a traits class derived from UxmlTraits and override the Init() method as described in Define attributes on elements. The UI Builder relies on this to ensure that the visual element created for the Viewport updates when you change the value of a UXML property in the Inspector.",1557],["To use your custom controls' UXML properties in the Inspector of the UI Builder, you must match property names between UXML and C# script. Use standard kebab case notation for UXML, and camel case or Pascal case for C#. For example, a property named MyFloat or myFloat in C# should be my-float in UXML.",1557],["Bind custom controls to data",1557],["You bind custom controls to serialized properties to synchronize values between the control and the property.",1557],["To bind custom controls to data:",1557],["Implement the INotifyValueChanged interface and listen for ChangeEvents as needed.",1557],["Inherit from the BindableElement class or implement the IBindable interface.",1557],["See SerializedObject data binding for more details.",1557],["For a bindable custom control example, see Create a bindable custom control.",1557],["Style custom controls with USS",1557],["Use USS to customize the look of a custom control the same way as a built-in control. You can also create USS custom properties to style a custom control.",1557],["Note**: The Inspector window in the UI Builder doesn't show USS custom properties. To edit USS custom properties, use a text editor to edit your USS file directly.",1557],["To interact with custom USS properties for a custom control in C#, use the CustomStyleProperty structure and the CustomStylesResolvedEvent event.",1557],["CustomStyleProperty describes the name and type of the property you read from the stylesheet.",1557],["UI Toolkit dispatches CustomStylesResolvedEvent for any element that directly receives a custom USS property. It dispatches the event for any element that a selector matches, for selectors for which the rule contains the value of the custom property. UI Toolkit doesn't dispatch the event for elements that inherit the value. The event holds a reference to an ICustomStyle object. You must use its TryGetValue() method to read the effective value of a CustomStyleProperty. This method has overloads for different types of CustomStyleProperty.",1557],["For a custom style with a custom control example, see Create custom style for a custom control.",1557],["Note**: You can't define transitions for custom style properties.",1557],["Handle event for custom controls",1557],["For detailed information on how to handle events for custom controls, see Handle events.",1557],["Note**:",1557],["Unity dispatches keyboard events to the currently focused element. To handle keyboard events for a custom control, set properties related to focus.",1557],["To handle touch and mouse input events, register callbacks for the relevant event types, such as pointer events and mouse events, in the constructor.",1557],["Use custom controls in UI Builder",1557],["To add a custom control to a visual tree in UI Builder:",1557],["Select Library > Project > Custom Controls (C#).",1557],["Drag the custom control into the Hierarchy window.",1557],["Best practices and tips",1557],["Best practices**:",1557],["Expose properties that a custom control represents and other functional aspects of its behavior as UXML properties, and expose properties that affect the look of a custom control as USS properties.",1557],["Use a namespace that's unique, short, and readable to avoid name collisions with other elements.",1557],["Keep UXML attributes primitive. Data that you can specify in UXML is limited to the set of primitive data types. UXML doesn't support complex data structures or collections. Pass complex data to your custom controls at runtime via C# scripts or data binding, not in UXML.",1557],["In C#, expose USS classes or names as constants. This allows you to locate elements by class or name using UQuery.",1557],["Adopt the BEM standard for USS classes. This allows you to address every element with a class list selector.",1557],["Use static callbacks for a lower memory footprint. When you register an instance method to be used as a callback, you might create unnecessary allocations. To avoid allocations, use anonymous static lambda functions that call into regular C# static methods. You can retrieve the context of the current element through the EventBase.currentTarget property.",1557],["Tips**:",1557],["Render custom geometry through the generateVisualContent callback for custom controls. For an example usage that renders a partially filled circle, see RadialProgress example.",1557],["Custom controls are convenient. However, you might achieve the same outcomes with the following:",1557],["\nAssemble your UI from existing elements, and change their styles and properties.\n",1557],["\nUse UXML templates. Use regular C# MonoBehaviours to add logic that pertains to the specific UI Document that holds your UI. (To learn how to use MonoBehaviours to control UI in a UI Document, see Create your first runtime UI.) To achieve encapsulation, create properties and methods inside your MonoBehaviour that internally fetch VisualElements with UQuery and manipulate their properties.\n",1557],["Additional resources",1557],["Create a custom style for a custom control",1558],["Version**: 2021.2+",1558],["This example demonstrates how to use custom USS variables in a custom control.",1558],["Example overview",1558],["This example creates a custom control that reads two colors from USS and uses them to generate a texture.",1558],["You can find the completed files that this example creates in this GitHub repository.",1558],["Prerequisites",1558],["\nUI Builder\n",1558],["\nVisual Tree\n",1558],["\nUXML\n",1558],["\nUSS\n",1558],["Create the custom control and custom style",1558],["Create a C# script to define the custom control and a USS file to define the custom style.",1558],["Create a Unity project with any template.",1558],["Create a folder named create-custom-style-custom-control to store your files.",1558],["In the ExampleElementCustomStyle folder, create a C# script named ExampleElementCustomStyle.cs and replace its contents with the following:",1558],["```lang-cs",1558],["using UnityEngine;",1558],["using UnityEngine.UIElements;",1558],["namespace UIToolkitExamples",1558],["public class ExampleElementCustomStyle : VisualElement",1558],["// Factory class, required to expose this custom control to UXML",1558],["public new class UxmlFactory : UxmlFactory { }",1558],["// Traits class",1558],["public new class UxmlTraits : VisualElement.UxmlTraits { }",1558],["// Use CustomStyleProperty to fetch custom style properties from USS",1558],["static readonly CustomStyleProperty S_GradientFrom = new CustomStyleProperty(\"--gradient-from\");",1558],["static readonly CustomStyleProperty S_GradientTo = new CustomStyleProperty(\"--gradient-to\");",1558],["// Image child element and its texture",1558],["Texture2D m_Texture2D;",1558],["Image m_Image;",1558],["public ExampleElementCustomStyle()",1558],["// Create an Image and a texture for it. Attach Image to self.",1558],["m_Texture2D = new Texture2D(100, 100);",1558],["m_Image = new Image();",1558],["m_Image.image = m_Texture2D;",1558],["Add(m_Image);",1558],["RegisterCallback(OnStylesResolved);",1558],["// When custom styles are known for this control, make a gradient from the colors.",1558],["void OnStylesResolved(CustomStyleResolvedEvent evt)",1558],["Color from, to;",1558],["if (evt.customStyle.TryGetValue(S_GradientFrom, out from)",1558],["&& evt.customStyle.TryGetValue(S_GradientTo, out to))",1558],["GenerateGradient(from, to);",1558],["public void GenerateGradient(Color from, Color to)",1558],["for (int i = 0; i < m_Texture2D.width; ++i)",1558],["Color color = Color.Lerp(from, to, i / (float)m_Texture2D.width);",1558],["for (int j = 0; j < m_Texture2D.height; ++j)",1558],["m_Texture2D.SetPixel(i, j, color);",1558],["m_Texture2D.Apply();",1558],["m_Image.MarkDirtyRepaint();",1558],["Create a USS file named ExampleElementCustomStyle.uss and replace its contents with the following:",1558],["```lang-css",1558],["ExampleElementCustomStyle {",1558],["--gradient-from: red;",1558],["--gradient-to: yellow;",1558],["Use the custom control in UI Document",1558],["Create a UI Document to use the custom control and apply the custom style to the custom control.",1558],["In the ExampleElementCustomStyle folder, create a UI Document named ExampleElementCustomStyle.uxml.",1558],["Double-click ExampleElementCustomStyle.uxml to open it in the UI Builder.",1558],["Select Library > Project > UIToolkitExamples, and drag ExampleElementCustomStyle to the Hierarchy window. A grey square appears in the Viewport window.",1558],["Add the ExampleElementCustomStyle.uss file as an existing USS. This applies the custom USS variables to the square.",1558],["Additional resources",1558],["Create a drag-and-drop UI inside a custom Editor window",1559],["Version**: 2021.3+",1559],["Drag-and-drop is a common feature in UI design. You can use UI Toolkit to create a drag-and-drop UI inside a custom Editor window or inside an application built by Unity. This example demonstrates how to create a drag-and-drop UI inside a custom Editor window.",1559],["Example overview",1559],["The example adds several slots and one object in a custom Editor window. You can drag the object into any slot, as shown below:",1559],["You can find the completed files that this example creates in this GitHub repository.",1559],["Prerequisites",1559],["\nUI Builder\n",1559],["\nVisual Tree\n",1559],["\nUXML\n",1559],["\nUSS\n",1559],["\nPointer events\n",1559],["Create a custom Editor window",1559],["To start, create a default custom Editor window from the menu. Change the menu name and window title to Drag And Drop, and remove the code for the default labels, to make the UI more user-friendly.",1559],["Create a project in Unity with any template.",1559],["Right-click in the Assets folder and select Create > UI Toolkit > Editor Window.",1559],["In UI Toolkit Editor Window Creator, enter DragAndDropWindow.",1559],["Click Confirm. This automatically creates three files: DragAndDropWindow.cs, DragAndDropWindow.uxml, and DragAndDropWindow.uss.",1559],["Replace the content of DragAndDropWindow.cs with the following:",1559],["```lang-cs",1559],["using UnityEditor;",1559],["using UnityEngine;",1559],["using UnityEngine.UIElements;",1559],["using UnityEditor.UIElements;",1559],["public class DragAndDropWindow : EditorWindow",1559],["[MenuItem(\"Window/UI Toolkit/Drag And Drop\")]",1559],["public static void ShowExample()",1559],["DragAndDropWindow wnd = GetWindow();",1559],["wnd.titleContent = new GUIContent(\"Drag And Drop\");",1559],["public void CreateGUI()",1559],["// Each editor window contains a root VisualElement object",1559],["VisualElement root = rootVisualElement;",1559],["// Import UXML",1559],["var visualTree = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/DragAndDropWindow.uxml\");",1559],["VisualElement labelFromUXML = visualTree.Instantiate();",1559],["root.Add(labelFromUXML);",1559],["// A stylesheet can be added to a VisualElement.",1559],["// The style will be applied to the VisualElement and all of its children.",1559],["var styleSheet = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/DragAndDropWindow.uss\");",1559],["Create slots and objects",1559],["Next, add UI controls to your custom window:",1559],["\nOne named slots with two children named slot_row1 and slot_row2. Each row should have two children named slot1 and slot2.\n",1559],["\nOne named object at the same level as slots. object must come after slots in the Hierarchy.\n",1559],["Style the UI controls as the following:",1559],["\nFor slot1 and slot2, style them as 80px X 80px squares with white background color and rounded corners. Line up the slots as two rows with two slots in each row.\n",1559],["\nFor object, style it as a 50px X 50px round spot with a black background color.\n",1559],["Tip**: To make your project more fun, you can use a background image for the object. You can find the image (Pouch.png) in the GitHub repository.",1559],["Replace the content of DragAndDropWindow.uxml with the following:",1559],["```lang-xml",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["",1559],["Replace the content of DragAndDropWindow.uss with the following:",1559],["```lang-css",1559],[".slot {",1559],["width: 80px;",1559],["height: 80px;",1559],["margin: 5px;",1559],["background-color: rgb(255, 255, 255);",1559],["border-top-radius: 10px;",1559],["border-top-left-radius: 10px;",1559],["border-bottom-left-radius: 10px;",1559],["border-top-right-radius: 10px;",1559],["border-bottom-right-radius: 10px;",1559],[".slot_row {",1559],["flex-direction: row;",1559],[".object {",1559],["width: 50px;",1559],["height: 50px;",1559],["position: absolute;",1559],["left: 20px;",1559],["top: 20px;",1559],["border-radius: 30px;",1559],["background-color: rgb(0, 0, 0);",1559],["Define the drag-and-drop logic",1559],["To define the drag-and-drop behavior, extend the PointerManipulator class and define the logic. Write a constructor to set target and store a reference to the root of the visual tree. Write four methods that act as callbacks for PointerDownEvents, PointerMoveEvents, PointerUpEvents, and PointerCaptureOutEvents. Implement RegisterCallbacksOnTarget() and UnregisterCallbacksOnTarget() to register and un-register these four callbacks from target.",1559],["In the Editor folder, create another C# file named DragAndDropManipulator.cs.",1559],["Replace the content of DragAndDropManipulator.cs with the following:",1559],["```lang-cs",1559],["using System.Collections;",1559],["using System.Collections.Generic;",1559],["using UnityEngine;",1559],["using UnityEngine.UIElements;",1559],["public class DragAndDropManipulator : PointerManipulator",1559],["// Write a constructor to set target and store a reference to the",1559],["// root of the visual tree.",1559],["public DragAndDropManipulator(VisualElement target)",1559],["this.target = target;",1559],["root = target.parent;",1559],["protected override void RegisterCallbacksOnTarget()",1559],["// Register the four callbacks on target.",1559],["target.RegisterCallback(PointerDownHandler);",1559],["target.RegisterCallback(PointerMoveHandler);",1559],["target.RegisterCallback(PointerUpHandler);",1559],["target.RegisterCallback(PointerCaptureOutHandler);",1559],["protected override void UnregisterCallbacksFromTarget()",1559],["// Un-register the four callbacks from target.",1559],["target.UnregisterCallback(PointerDownHandler);",1559],["target.UnregisterCallback(PointerMoveHandler);",1559],["target.UnregisterCallback(PointerUpHandler);",1559],["target.UnregisterCallback(PointerCaptureOutHandler);",1559],["private Vector2 targetStartPosition { get; set; }",1559],["private Vector3 pointerStartPosition { get; set; }",1559],["private bool enabled { get; set; }",1559],["private VisualElement root { get; }",1559],["// This method stores the starting position of target and the pointer,",1559],["// makes target capture the pointer, and denotes that a drag is now in progress.",1559],["private void PointerDownHandler(PointerDownEvent evt)",1559],["targetStartPosition = target.transform.position;",1559],["pointerStartPosition = evt.position;",1559],["target.CapturePointer(evt.pointerId);",1559],["enabled = true;",1559],["// This method checks whether a drag is in progress and whether target has captured the pointer.",1559],["// If both are true, calculates a new position for target within the bounds of the window.",1559],["private void PointerMoveHandler(PointerMoveEvent evt)",1559],["if (enabled && target.HasPointerCapture(evt.pointerId))",1559],["Vector3 pointerDelta = evt.position - pointerStartPosition;",1559],["target.transform.position = new Vector2(",1559],["Mathf.Clamp(targetStartPosition.x + pointerDelta.x, 0, target.panel.visualTree.worldBound.width),",1559],["Mathf.Clamp(targetStartPosition.y + pointerDelta.y, 0, target.panel.visualTree.worldBound.height));",1559],["// This method checks whether a drag is in progress and whether target has captured the pointer.",1559],["// If both are true, makes target release the pointer.",1559],["private void PointerUpHandler(PointerUpEvent evt)",1559],["if (enabled && target.HasPointerCapture(evt.pointerId))",1559],["target.ReleasePointer(evt.pointerId);",1559],["// This method checks whether a drag is in progress. If true, queries the root",1559],["// of the visual tree to find all slots, decides which slot is the closest one",1559],["// that overlaps target, and sets the position of target so that it rests on top",1559],["// of that slot. Sets the position of target back to its original position",1559],["// if there is no overlapping slot.",1559],["private void PointerCaptureOutHandler(PointerCaptureOutEvent evt)",1559],["if (enabled)",1559],["VisualElement slotsContainer = root.Q(\"slots\");",1559],["UQueryBuilder allSlots =",1559],["slotsContainer.Query(className: \"slot\");",1559],["UQueryBuilder overlappingSlots =",1559],["allSlots.Where(OverlapsTarget);",1559],["VisualElement closestOverlappingSlot =",1559],["FindClosestSlot(overlappingSlots);",1559],["Vector3 closestPos = Vector3.zero;",1559],["if (closestOverlappingSlot != null)",1559],["closestPos = RootSpaceOfSlot(closestOverlappingSlot);",1559],["closestPos = new Vector2(closestPos.x - 5, closestPos.y - 5);",1559],["target.transform.position =",1559],["closestOverlappingSlot != null ?",1559],["closestPos :",1559],["targetStartPosition;",1559],["enabled = false;",1559],["private bool OverlapsTarget(VisualElement slot)",1559],["return target.worldBound.Overlaps(slot.worldBound);",1559],["private VisualElement FindClosestSlot(UQueryBuilder slots)",1559],["List slotsList = slots.ToList();",1559],["float bestDistanceSq = float.MaxValue;",1559],["VisualElement closest = null;",1559],["foreach (VisualElement slot in slotsList)",1559],["Vector3 displacement =",1559],["RootSpaceOfSlot(slot) - target.transform.position;",1559],["float distanceSq = displacement.sqrMagnitude;",1559],["if (distanceSq < bestDistanceSq)",1559],["bestDistanceSq = distanceSq;",1559],["closest = slot;",1559],["return closest;",1559],["private Vector3 RootSpaceOfSlot(VisualElement slot)",1559],["Vector2 slotWorldSpace = slot.parent.LocalToWorld(slot.layout.position);",1559],["return root.WorldToLocal(slotWorldSpace);",1559],["Instantiate the drag-and-drop behavior",1559],["To enable drag-and-drop in the custom window, instantiate it when the window opens.",1559],["In DragAndDropWindow.cs, add the following to the CreateGUI() method to instantiate the DragAndDropManipulator class:",1559],["```lang-cs",1559],["DragAndDropManipulator manipulator =",1559],["new(rootVisualElement.Q(\"object\"));",1559],["From the menu bar, select Window > UI Toolkit > Drag And Drop. In the opened custom Editor window, you can drag the object into any slot.",1559],["Additional resources",1559],["Create a complex list view",1560],["This example demonstrates how to create a complex ListView.",1560],["Example overview",1560],["The example creates a custom Editor window with a list of characters. Each character has a slider and a color palette. Moving the slider changes the color of the palette.",1560],["You can find the completed files that this example creates in this GitHub repository.",1560],["Prerequisites",1560],["Create the example",1560],["This example builds the visual elements in the list from a C# script. It uses a custom CharacterInfoVisualElement class that inherits from VisualElement, and binds the custom elements to CharacterInfo objects.",1560],["Create a Unity project with any template.",1560],["In the Project window, create a folder named Editor.",1560],["In the Editor folder, create a C# script file named ListViewExample.cs with the following content:",1560],["```lang-csharp",1560],["using System;",1560],["using System.Collections.Generic;",1560],["using UnityEditor;",1560],["using UnityEngine;",1560],["using UnityEngine.UIElements;",1560],["public class ListViewExample : EditorWindow",1560],["// Gradient used for the HP color indicator.",1560],["private Gradient hpGradient;",1560],["private GradientColorKey[] hpColorKey;",1560],["private GradientAlphaKey[] hpAlphaKey;",1560],["// ListView is kept for easy reference.",1560],["private ListView listView;",1560],["// List of CharacterInfo items, bound to the ListView.",1560],["private List items;",1560],["[MenuItem(\"Window/ListView Custom Item\")]",1560],["public static void OpenWindow()",1560],["GetWindow().Show();",1560],["private void OnEnable()",1560],["SetGradient();",1560],["// Create and populate the list of CharacterInfo objects.",1560],["const int itemCount = 50;",1560],["items = new List(itemCount);",1560],["for(int i = 1; i <= itemCount; i++)",1560],["CharacterInfo character = new CharacterInfo {name = $\"Character {i}\", maxHp = 100};",1560],["character.currentHp = character.maxHp;",1560],["items.Add(character);",1560],["// The ListView calls this to add visible items to the scroller.",1560],["Func makeItem = () =>",1560],["var characterInfoVisualElement = new CharacterInfoVisualElement();",1560],["var slider = characterInfoVisualElement.Q(name: \"hp\");",1560],["slider.RegisterValueChangedCallback(evt =>",1560],["var hpColor = characterInfoVisualElement.Q(\"hpColor\");",1560],["var i = (int)slider.userData;",1560],["var characterInfo = items[i];",1560],["characterInfo.currentHp = evt.newValue;",1560],["SetHp(slider, hpColor, characterInfo);",1560],["});",1560],["return characterInfoVisualElement;",1560],["};",1560],["// The ListView calls this if a new item becomes visible when the item first appears on the screen,",1560],["// when a user scrolls, or when the dimensions of the scroller are changed.",1560],["Action bindItem = (e, i) => BindItem(e as CharacterInfoVisualElement, i);",1560],["// Height used by the ListView to determine the total height of items in the list.",1560],["int itemHeight = 55;",1560],["// Use the constructor with initial values to create the ListView.",1560],["listView = new ListView(items, itemHeight, makeItem, bindItem);",1560],["listView.reorderable = false;",1560],["listView.style.flexGrow = 1f; // Fills the window, at least until the toggle below.",1560],["listView.showBorder = true;",1560],["rootVisualElement.Add(listView);",1560],["// Add a toggle to switch the reorderable property of the ListView.",1560],["var reorderToggle = new Toggle(\"Reorderable\");",1560],["reorderToggle.style.marginTop = 10f;",1560],["reorderToggle.value = false;",1560],["reorderToggle.RegisterValueChangedCallback(evt => listView.reorderable = evt.newValue);",1560],["rootVisualElement.Add(reorderToggle);",1560],["// Sets up the gradient.",1560],["private void SetGradient()",1560],["hpGradient = new Gradient();",1560],["// HP at 0%: Red. At 10%: Dark orange. At 40%: Yellow. At 100%: Green.",1560],["hpColorKey = new GradientColorKey[4];",1560],["hpColorKey[0] = new GradientColorKey(Color.red, 0f);",1560],["hpColorKey[1] = new GradientColorKey(new Color(1f, 0.55f, 0f), 0.1f); // Dark orange",1560],["hpColorKey[2] = new GradientColorKey(Color.yellow, 0.4f);",1560],["hpColorKey[3] = new GradientColorKey(Color.green, 1f);",1560],["// Alpha is always full.",1560],["hpAlphaKey = new GradientAlphaKey[2];",1560],["hpAlphaKey[0] = new GradientAlphaKey(1f, 0f);",1560],["hpAlphaKey[1] = new GradientAlphaKey(1f, 1f);",1560],["hpGradient.SetKeys(hpColorKey, hpAlphaKey);",1560],["// Bind the data (characterInfo) to the display (elem).",1560],["private void BindItem(CharacterInfoVisualElement elem, int i)",1560],["var label = elem.Q(name: \"nameLabel\");",1560],["var slider = elem.Q(name: \"hp\");",1560],["var hpColor = elem.Q(\"hpColor\");",1560],["slider.userData = i;",1560],["CharacterInfo characterInfo = items[i];",1560],["label.text = characterInfo.name;",1560],["SetHp(slider, hpColor, characterInfo);",1560],["private void SetHp(SliderInt slider, VisualElement colorIndicator, CharacterInfo characterInfo)",1560],["slider.highValue = characterInfo.maxHp;",1560],["slider.SetValueWithoutNotify(characterInfo.currentHp);",1560],["float ratio = (float)characterInfo.currentHp / characterInfo.maxHp;",1560],["colorIndicator.style.backgroundColor = hpGradient.Evaluate(ratio);",1560],["// This class inherits from VisualElement to display and modify data to and from a CharacterInfo.",1560],["public class CharacterInfoVisualElement : VisualElement",1560],["// Use Constructor when the ListView uses makeItem and returns a VisualElement to be",1560],["// bound to a CharacterInfo data class.",1560],["public CharacterInfoVisualElement()",1560],["var root = new VisualElement();",1560],["// The code below to style the ListView is for demo purpose. It's better to use a USS file",1560],["// to style a visual element.",1560],["root.style.paddingTop = 3f;",1560],["root.style.paddingRight = 0f;",1560],["root.style.paddingBottom = 15f;",1560],["root.style.paddingLeft = 3f;",1560],["root.style.borderBottomColor = Color.gray;",1560],["root.style.borderBottomWidth = 1f;",1560],["var nameLabel = new Label() {name = \"nameLabel\"};",1560],["nameLabel.style.fontSize = 14f;",1560],["var hpContainer = new VisualElement();",1560],["hpContainer.style.flexDirection = FlexDirection.Row;",1560],["hpContainer.style.paddingLeft = 15f;",1560],["hpContainer.style.paddingRight = 15f;",1560],["hpContainer.Add(new Label(\"HP:\"));",1560],["var hpSlider = new SliderInt {name = \"hp\", lowValue = 0, highValue = 100};",1560],["hpSlider.style.flexGrow = 1f;",1560],["hpContainer.Add(hpSlider);",1560],["var hpColor = new VisualElement();",1560],["hpColor.name = \"hpColor\";",1560],["hpColor.style.height = 15f;",1560],["hpColor.style.width = 15f;",1560],["hpColor.style.marginRight = 5f;",1560],["hpColor.style.marginBottom = 5f;",1560],["hpColor.style.marginLeft = 5f;",1560],["hpColor.style.backgroundColor = Color.black;",1560],["hpContainer.Add(hpColor);",1560],["root.Add(nameLabel);",1560],["root.Add(hpContainer);",1560],["Add(root);",1560],["// Basic data class used for a character, with a name and HP data. Use a list of CharacterInfo as",1560],["// a data source for the ListView. The CharacterInfo can be bound to CharacterInfoVisualElement when needed.",1560],["[Serializable]",1560],["public class CharacterInfo",1560],["public string name;",1560],["public int maxHp;",1560],["public int currentHp;",1560],["To see the example, from the menu, select Window > ListView Custom Item.",1560],["Additional resources",1560],["Create a tabbed menu for runtime",1561],["Version:** 2021.3+",1561],["Tabbed menus are common in video games and application UI. You can use UI Toolkit to create a tabbed menu for a custom Editor window or runtime. This example demonstrates how to create a tabbed menu in the sample scene.",1561],["Example overview",1561],["This example adds a menu in the sample scene. The menu has three tabs. Each tab presents certain content. When you click a tab, only the content associated with that tab is displayed.",1561],["To create tabbed content, you need to define the menu elements, styles, and logic.",1561],["You can find the completed files that this example creates in this GitHub repository.",1561],["Prerequisites",1561],["This guide is for developers familiar with Unity, UI Toolkit, Flexbox, and C# scripting. Before you start, get familiar with the following:",1561],["\nLabel\n",1561],["\nUSS\n",1561],["\nUI Builder\n",1561],["\nPositioning elements with Flexbox\n",1561],["Define the tabbed menu elements",1561],["Create two sections in your menu using the UI Builder, one for tabs and one for the content of tabs. In these sections, create three tab elements and three tab content elements.",1561],["Create a project in Unity with any template.",1561],["Click GameObject > UI Toolkit > UI Document to add a UI Document in the sample scene.",1561],["Create a folder in Assets named TabbedMenu to store all your files.",1561],["In the TabbedMenu folder, create a UI Document named TabbedMenu.uxml.",1561],["Double-click TabbedMenu.uxml to open it in the UI Builder.",1561],["Add two VisualElements named tabs and tabContent under the root.",1561],["Under tabs, add three Label controls and give them the following Label texts:",1561],["London",1561],["Paris",1561],["Ottawa",1561],["Under tabContent, add three Label controls and give them the following Label texts:",1561],["London is the capital city of England",1561],["Paris is the capital of France",1561],["Ottawa is the capital of Canada",1561],["To associate the tab content with the tab, this example uses the same prefixes but different suffixes for the Label names. Each tab name has the Tab suffix and each tab content has the Content suffix. Set the tab Label names and content Label names to the following:",1561],["LondonTab",1561],["ParisTab",1561],["OttawaTab",1561],["LondonContent",1561],["ParisContent",1561],["OttawaContent",1561],["Your UI Builder Hierarchy looks like the following:",1561],["Define the tabbed menu styles",1561],["Define the layout for tabs and tab content using USS. You can style the tabs and the tab content the way you like. This example arranges tabs in a row and on top of the tab content. It adds a background color for the selected tab and hides the un-selected tab content.",1561],["In the TabbedMenu folder, create a stylesheet named TabbedMenu.uss.",1561],["Open TabbedMenu.uss and add the following styling rules:",1561],["```lang-css",1561],["/* Style for tabs */",1561],["tabs {",1561],["flex-direction: row;",1561],["background-color: rgb(229, 223, 223);",1561],["-unity-font-style: bold;",1561],["font-size: 14px;",1561],["/* Sets each label in tabs to have the same size. */",1561],[".tab {",1561],["flex-grow: 1;",1561],["/* Adds background color for the selected tab */",1561],[".currentlySelectedTab {",1561],["background-color: rgb(173, 166, 166);",1561],["/* Style for tabContent */",1561],["tabContent {",1561],["background-color: rgb(255, 255, 255);",1561],["font-size: 20px;",1561],["/* Hides the unselected tab content */",1561],[".unselectedContent {",1561],["display: none;",1561],["Open TabbedMenu.uxml in UI Builder.",1561],["Click Add Existing USS and select TabbedMenu.uss.",1561],["Apply your styles to the UI controls:",1561],["Apply .tab to each label under tabs",1561],["Apply .currentlySelectedTab to LondonTab",1561],["Apply .unselectedContent to ParisContent and OttawaContent",1561],["The finished TabbedMenu.uxml looks like the following:",1561],["```lang-xml",1561],["",1561],["/* Your src might look different. If you save your UXML in UI Builder, USS file is referenced by the file location, fileID and guid. */",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["",1561],["Set up the scene",1561],["Create a UIDocument GameObject in the SampleScene and add the UI Document as the source asset.",1561],["In the SampleScene, select GameObject > UI Toolkit > UI Document.",1561],["Select the UIDocument GameObject in the hierarchy and drag TabbedMenu.uxml from your Project window to the Source Asset field of the UI Document component in the Inspector window. This references the source asset to the UXML file you created.",1561],["Define the tabbed menu logic",1561],["Create a C# script that change the displayed tab content. When a user clicks a tab, the tab's content displays and the current content hides. Create a MonoBehaviour script that attaches the tabbed menu logic to the game.",1561],["In the TabbedMenu folder, create a C# script named TabbedMenuController.cs with the following contents:",1561],["```lang-cs",1561],["// This script defines the tab selection logic.",1561],["using UnityEngine.UIElements;",1561],["public class TabbedMenuController",1561],["/* Define member variables*/",1561],["private const string tabClassName = \"tab\";",1561],["private const string currentlySelectedTabClassName = \"currentlySelectedTab\";",1561],["private const string unselectedContentClassName = \"unselectedContent\";",1561],["// Tab and tab content have the same prefix but different suffix",1561],["// Define the suffix of the tab name",1561],["private const string tabNameSuffix = \"Tab\";",1561],["// Define the suffix of the tab content name",1561],["private const string contentNameSuffix = \"Content\";",1561],["private readonly VisualElement root;",1561],["public TabbedMenuController(VisualElement root)",1561],["this.root = root;",1561],["public void RegisterTabCallbacks()",1561],["UQueryBuilder tabs = GetAllTabs();",1561],["tabs.ForEach((Label tab) => {",1561],["tab.RegisterCallback(TabOnClick);",1561],["});",1561],["/* Method for the tab on-click event:",1561],["\nIf it is not selected, find other tabs that are selected, unselect them\n",1561],["\nThen select the tab that was clicked on\n",1561],["/",1561],["private void TabOnClick(ClickEvent evt)",1561],["Label clickedTab = evt.currentTarget as Label;",1561],["if (!TabIsCurrentlySelected(clickedTab))",1561],["GetAllTabs().Where(",1561],["(tab) => tab != clickedTab && TabIsCurrentlySelected(tab)",1561],[").ForEach(UnselectTab);",1561],["SelectTab(clickedTab);",1561],["//Method that returns a Boolean indicating whether a tab is currently selected",1561],["private static bool TabIsCurrentlySelected(Label tab)",1561],["return tab.ClassListContains(currentlySelectedTabClassName);",1561],["private UQueryBuilder GetAllTabs()",1561],["return root.Query(className: tabClassName);",1561],["/* Method for the selected tab:",1561],["\nTakes a tab as a parameter and adds the currentlySelectedTab class\n",1561],["\nThen finds the tab content and removes the unselectedContent class */\n",1561],["private void SelectTab(Label tab)",1561],["tab.AddToClassList(currentlySelectedTabClassName);",1561],["VisualElement content = FindContent(tab);",1561],["content.RemoveFromClassList(unselectedContentClassName);",1561],["/* Method for the unselected tab:",1561],["\nTakes a tab as a parameter and removes the currentlySelectedTab class\n",1561],["\nThen finds the tab content and adds the unselectedContent class */\n",1561],["private void UnselectTab(Label tab)",1561],["tab.RemoveFromClassList(currentlySelectedTabClassName);",1561],["VisualElement content = FindContent(tab);",1561],["content.AddToClassList(unselectedContentClassName);",1561],["// Method to generate the associated tab content name by for the given tab name",1561],["private static string GenerateContentName(Label tab) =>",1561],["tab.name.Replace(tabNameSuffix, contentNameSuffix);",1561],["// Method that takes a tab as a parameter and returns the associated content element",1561],["private VisualElement FindContent(Label tab)",1561],["return root.Q(GenerateContentName(tab));",1561],["In the TabbedMenu folder, create a C# script namedTabbedMenu.cs with the following contents:",1561],["```lang-cs",1561],["// This script attaches the tabbed menu logic to the game.",1561],["using UnityEngine;",1561],["using UnityEngine.UIElements;",1561],["//Inherits from class MonoBehaviour. This makes it attachable to a game object as a component.",1561],["public class TabbedMenu : MonoBehaviour",1561],["private TabbedMenuController controller;",1561],["private void OnEnable()",1561],["UIDocument menu = GetComponent();",1561],["VisualElement root = menu.rootVisualElement;",1561],["controller = new(root);",1561],["controller.RegisterTabCallbacks();",1561],["Select UIDocument in the SampleScene and drag the TabbedMenu.cs to Add Component in the Inspector.",1561],["Enter Play mode and click different tabs to see different contents.",1561],["Additional resources",1561],["Custom controls",1562],["You can create custom controls and implement custom logic for user interface elements. A good custom control is abstract, self-contained, and recurring.",1562],["A Slide Toggle is a good example of a custom control:",1562],["\nIt's abstract. You use it to switch between one setting and another.\n",1562],["\nIt's self-contained. You give it a label and an initial value. A Slide Toggle triggers an event when its state changes.\n",1562],["\nIt's recurring. You can use it in multiple places in an application.\n",1562],["The menu bar of your application isn't a good example of a custom control:",1562],["\nIt's not abstract. It's specific to your application.\n",1562],["\nIt's not self-contained. It probably has dependencies to other parts of your application.\n",1562],["\nIt's not recurring. There is probably only one menu in your application.\n",1562],["After you have created a custom control, you can style it with USS, add logic to handle events in C#, and expose and use it in UI Builder.",1562],["Topic Description ",1562],[":-------------------- :--------------------- ",1562],["Create custom controls Understand all aspects of creating and using custom controls. ",1562],["Expose custom controls to UXML and UI Builder Understand how to expose your custom controls and define attributes for your custom controls. ",1562],["Customize UXML tag names and attributes Understand how to customize a UXML tag name, override the default value of a base class attribute, or restrict the accepted attributes for your custom controls. ",1562],["Additional resources",1562],["Customize UXML tag names and attributes",1563],["You can customize a UXML tag name, override the default value of a base class attribute, or restrict the accepted attributes for your custom control.",1563],["Customize a UXML tag name",1563],["By default, the tag name in UXML for your custom control is the C# class name. It's not recommended that a tag has a different name than the C# class. However, you can customize the tag name if there are name conflicts.",1563],["To customize a UXML tag name, override its IUxmlFactory.uxmlName and IUXmlFactory.uxmlQualifiedName properties. Make sure of the following:",1563],["\nuxmlName is unique in your namespace\n",1563],["\nuxmlQualifiedName is unique in your project\n",1563],["If both names aren't unique, Unity throws an exception when it loads the assembly.",1563],["The following code example overrides and customizes the UXML tag name:",1563],["```lang-csharp",1563],["public class FactoryWithCustomName : UxmlFactory<..., ...>",1563],["public override string uxmlName",1563],["get { return \"UniqueName\"; }",1563],["public override string uxmlQualifiedName",1563],["get { return uxmlNamespace + \".\" + uxmlName; }",1563],["Select a factory for an element",1563],["By default, IUxmlFactory instantiates an element and selects the element by the name of the element. To consider attribute values on the element for the selection, override IUXmlFactory.AcceptsAttributeBag(). The factory examines the element attributes to decide if it can instantiate an object for the UXML element.",1563],["If your VisualElement class is generic, it can be useful to have the factory examine element attributes. In this case, the class factory for a specialization of your class could examine the value of a UXML type attribute. Depending on the value, instantiation can be accepted or refused.",1563],["If more than one factory can instantiate an element, the first registered factory is selected.",1563],["Override the default value of a base class attribute",1563],["To change the default value of an attribute declared in a base class, set its defaultValue in the derived UxmlTraits class.",1563],["The following code example changes the default value of m_TabIndex:",1563],["```lang-csharp",1563],["class MyElementTraits : VisualElement.UxmlTraits",1563],["public MyElementTraits()",1563],["m_TabIndex.defaultValue = 0;",1563],["Restrict accepted attributes",1563],["By default, the generated UXML schema states that an element can have any attribute. This is in contrast to XML validators that check that the value of a declared attribute matches its declaration.",1563],["The IUxmlAttributes bag includes additional attributes that are passed to the IUxmlFactory.AcceptsAttributeBag() and IUxmlFactory.Init() functions. The factory implementation decided whether to use these additional attributes. The default behavior is to discard additional attributes. These additional attributes aren't attached to the instantiated VisualElement and you can't query these attributes with UQuery.",1563],["To restrict the accepted attributes to those explicitly declared in the IUxmlAttributes bag when you define a new element, set the UxmlTraits.canHaveAnyAttribute property to false in your UxmlTraits constructor.",1563],["Additional resources",1563],["Create a drag-and-drop UI to drag between Editor windows",1564],["Version:** 2021.3+",1564],["This example demonstrates how to use UI Toolkit's drag events along with the UnityEditor.DragAndDrop class to enable drag-and-drop UI between windows.",1564],["Example overview",1564],["The example creates two custom Editor windows. You can drag an asset from the Project window into the Editor windows. You can also drag the same asset from one window to another.",1564],["You can find the completed files that this example creates in this GitHub repository",1564],["Prerequisites",1564],["Define the content of the Editor windows",1564],["Define the content of each Editor window in a UXML file with built-in visual elements. Each Editor window includes a background, a header, a drop area, and text. Style the visual elements in a USS file.",1564],["Create a Unity project with any template.",1564],["Create a folder named drag-and-drop-across-window to store all the files.",1564],["Create a UI Document named DragAndDrop.uxml with the following content:",1564],["```lang-xml",1564],["",1564],["",1564],["",1564],["",1564],["",1564],["",1564],["",1564],["",1564],["",1564],["",1564],["Create a style sheet named DragAndDrop.uss with the following content:",1564],["```lang-css",1564],[".background {",1564],["flex-grow: 1;",1564],["background-color: rgba(30, 30, 30, 255);",1564],[".header {",1564],["align-items: center;",1564],["margin-left: 10px;",1564],["margin-right: 10px;",1564],["margin-top: 10px;",1564],["margin-bottom: 10px;",1564],["padding-left: 5px;",1564],["padding-right: 5px;",1564],["padding-top: 5px;",1564],["padding-bottom: 5px;",1564],["background-color: rgba(112, 128, 144, 255);",1564],["border-left-color: rgba(211, 211, 211, 255);",1564],["border-right-color: rgba(211, 211, 211, 255);",1564],["border-top-color: rgba(211, 211, 211, 255);",1564],["border-bottom-color: rgba(211, 211, 211, 255);",1564],["border-left-width: 2px;",1564],["border-right-width: 2px;",1564],["border-top-width: 2px;",1564],["border-bottom-width: 2px;",1564],[".header__label {",1564],["font-size: 18px;",1564],["color: rgba(255, 255, 255, 255);",1564],[".drop-area {",1564],["flex-grow: 1;",1564],["align-items: center;",1564],["justify-content: center;",1564],["margin-left: 10px;",1564],["margin-right: 10px;",1564],["margin-top: 10px;",1564],["margin-bottom: 10px;",1564],["padding-left: 5px;",1564],["padding-right: 5px;",1564],["padding-top: 5px;",1564],["padding-bottom: 5px;",1564],["background-color: rgba(112, 128, 144, 255);",1564],["border-left-color: rgba(211, 211, 211, 255);",1564],["border-right-color: rgba(211, 211, 211, 255);",1564],["border-top-color: rgba(211, 211, 211, 255);",1564],["border-bottom-color: rgba(211, 211, 211, 255);",1564],["border-left-width: 2px;",1564],["border-right-width: 2px;",1564],["border-top-width: 2px;",1564],["border-bottom-width: 2px;",1564],["border-top-left-radius: 20px;",1564],["border-bottom-left-radius: 20px;",1564],["border-top-right-radius: 20px;",1564],["border-bottom-right-radius: 20px;",1564],[".drop-area--dropping {",1564],["opacity: 0.4;",1564],["background-color: rgba(0, 100, 0, 255);",1564],[".drop-area__label {",1564],["-unity-font-style: italic;",1564],["color: rgba(255, 255, 255, 255);",1564],["Double-click DragAndDrop.xml to open it in the UI Builder.",1564],["Add DragAndDrop.uss as the existing USS.",1564],["Create a manipulator to store event callbacks",1564],["A manipulator is an object that registers and un-registers event callbacks related to the input. Create a custom manipulator in a C# script to register pointer events and drag events for the Editor window.",1564],["In the drag-and-drop-across-window folder, create a folder named Editor.",1564],["In the Editor folder, create a C# file named DragAndDropManipulator.cs with the following content:",1564],["```lang-cs",1564],["using UnityEngine;",1564],["using UnityEditor;",1564],["using UnityEngine.UIElements;",1564],["namespace Samples.Editor.General",1564],["// The DragAndDropManipulator class is a private class within DragAndDropWindow.",1564],["public partial class DragAndDropWindow",1564],["// DragAndDropManipulator is a manipulator that stores pointer-related callbacks, so it inherits from",1564],["// PointerManipulator.",1564],["class DragAndDropManipulator : PointerManipulator",1564],["// The Label in the window that shows the stored asset, if any.",1564],["Label dropLabel;",1564],["// The stored asset object, if any.",1564],["Object droppedObject = null;",1564],["// The path of the stored asset, or the empty string if there isn't one.",1564],["string assetPath = string.Empty;",1564],["public DragAndDropManipulator(VisualElement root)",1564],["// The target of the manipulator, the object to which to register all callbacks, is the drop area.",1564],["target = root.Q(className: \"drop-area\");",1564],["dropLabel = root.Q(className: \"drop-area__label\");",1564],["protected override void RegisterCallbacksOnTarget()",1564],["// Register a callback when the user presses the pointer down.",1564],["target.RegisterCallback(OnPointerDown);",1564],["// Register callbacks for various stages in the drag process.",1564],["target.RegisterCallback(OnDragEnter);",1564],["target.RegisterCallback(OnDragLeave);",1564],["target.RegisterCallback(OnDragUpdate);",1564],["target.RegisterCallback(OnDragPerform);",1564],["protected override void UnregisterCallbacksFromTarget()",1564],["// Unregister all callbacks that you registered in RegisterCallbacksOnTarget().",1564],["target.UnregisterCallback(OnPointerDown);",1564],["target.UnregisterCallback(OnDragEnter);",1564],["target.UnregisterCallback(OnDragLeave);",1564],["target.UnregisterCallback(OnDragUpdate);",1564],["target.UnregisterCallback(OnDragPerform);",1564],["// This method runs when a user presses a pointer down on the drop area.",1564],["void OnPointerDown(PointerDownEvent _)",1564],["// Only do something if the window currently has a reference to an asset object.",1564],["if (droppedObject != null)",1564],["// Clear existing data in DragAndDrop class.",1564],["DragAndDrop.PrepareStartDrag();",1564],["// Store reference to object and path to object in DragAndDrop static fields.",1564],["DragAndDrop.objectReferences = new[] { droppedObject };",1564],["if (assetPath != string.Empty)",1564],["DragAndDrop.paths = new[] { assetPath };",1564],["else",1564],["DragAndDrop.paths = new string[] { };",1564],["// Start a drag.",1564],["DragAndDrop.StartDrag(string.Empty);",1564],["// This method runs if a user brings the pointer over the target while a drag is in progress.",1564],["void OnDragEnter(DragEnterEvent _)",1564],["// Get the name of the object the user is dragging.",1564],["var draggedName = string.Empty;",1564],["if (DragAndDrop.paths.Length > 0)",1564],["assetPath = DragAndDrop.paths[0];",1564],["var splitPath = assetPath.Split('/');",1564],["draggedName = splitPath[splitPath.Length - 1];",1564],["else if (DragAndDrop.objectReferences.Length > 0)",1564],["draggedName = DragAndDrop.objectReferences[0].name;",1564],["// Change the appearance of the drop area if the user drags something over the drop area and holds it",1564],["// there.",1564],["dropLabel.text = $\"Dropping '{draggedName}'...\";",1564],["target.AddToClassList(\"drop-area--dropping\");",1564],["// This method runs if a user makes the pointer leave the bounds of the target while a drag is in progress.",1564],["void OnDragLeave(DragLeaveEvent _)",1564],["assetPath = string.Empty;",1564],["droppedObject = null;",1564],["dropLabel.text = \"Drag an asset here...\";",1564],["target.RemoveFromClassList(\"drop-area--dropping\");",1564],["// This method runs every frame while a drag is in progress.",1564],["void OnDragUpdate(DragUpdatedEvent _)",1564],["DragAndDrop.visualMode = DragAndDropVisualMode.Generic;",1564],["// This method runs when a user drops a dragged object onto the target.",1564],["void OnDragPerform(DragPerformEvent _)",1564],["// Set droppedObject and draggedName fields to refer to dragged object.",1564],["droppedObject = DragAndDrop.objectReferences[0];",1564],["string draggedName;",1564],["if (assetPath != string.Empty)",1564],["var splitPath = assetPath.Split('/');",1564],["draggedName = splitPath[splitPath.Length - 1];",1564],["else",1564],["draggedName = droppedObject.name;",1564],["// Visually update target to indicate that it now stores an asset.",1564],["dropLabel.text = $\"Containing '{draggedName}'...\\n\\n\" *",1564],["$\"(You can also drag from here)\";",1564],["target.RemoveFromClassList(\"drop-area--dropping\");",1564],["Create the Editor windows and instantiate the manipulator",1564],["Create two custom Editor windows in a C# script and instantiate a manipulator for each Editor window.",1564],["Create a C# file named DragAndDropWindow.cs with the following content:",1564],["```lang-cs",1564],["using UnityEditor;",1564],["using UnityEngine;",1564],["using UnityEngine.UIElements;",1564],["namespace Samples.Editor.General",1564],["public partial class DragAndDropWindow : EditorWindow",1564],["// This is the visual tree that contains the UI structure of the window.",1564],["[SerializeField]",1564],["VisualTreeAsset uxmlAsset;",1564],["// This manipulator contains all of the event logic for this window.",1564],["DragAndDropManipulator manipulator;",1564],["// This is the minimum size of both windows.",1564],["readonly static Vector2 windowMinSize = new(300, 180);",1564],["// These are the starting positions of the windows.",1564],["readonly static Vector2 windowAPosition = new(50, 50);",1564],["readonly static Vector2 windowBPosition = new(450, 100);",1564],["// These are the titles of the windows.",1564],["const string windowATitle = \"Drag and Drop A\";",1564],["const string windowBTitle = \"Drag and Drop B\";",1564],["// This method opens two DragAndDropWindows when a user selects the specified menu item.",1564],["[MenuItem(\"Window/UI Toolkit/Drag And Drop (Editor)\")]",1564],["public static void OpenDragAndDropWindows()",1564],["// Create the windows.",1564],["var windowA = CreateInstance();",1564],["var windowB = CreateInstance();",1564],["// Define the attributes of the windows and display them.",1564],["windowA.minSize = windowMinSize;",1564],["windowB.minSize = windowMinSize;",1564],["windowA.Show();",1564],["windowB.Show();",1564],["windowA.titleContent = new(windowATitle);",1564],["windowB.titleContent = new(windowBTitle);",1564],["windowA.position = new(windowAPosition, windowMinSize);",1564],["windowB.position = new(windowBPosition, windowMinSize);",1564],["void OnEnable()",1564],["if (uxmlAsset != null)",1564],["uxmlAsset.CloneTree(rootVisualElement);",1564],["// Instantiate manipulator.",1564],["manipulator = new(rootVisualElement);",1564],["void OnDisable()",1564],["// The RemoveManipulator() method calls the Manipulator's UnregisterCallbacksFromTarget() method.",1564],["manipulator.target.RemoveManipulator(manipulator);",1564],["In the Project window, select DragAndDropWindow.cs and drag DragAndDrop.xml to Uxml Asset in the Inspector.",1564],["From the menu, select Window > UI Toolkit > Drag and Drop (Editor). Two Drag and Drop windows open. You can drag an asset from the Project window to the drop areas in these windows. You can also drag the same asset from one window to another.",1564],["Additional resources",1564],["Drag-and-drop events",1565],["Drag events are sent during operations where visual elements have drag-and-drop behavior. This is an Editor-only event.",1565],["To implement drag-and-drop functionality, make sure that visual elements register callbacks for specific events.",1565],["Visual elements that support drag operations separate into two types:",1565],["\nDraggable visual elements\n",1565],["\nDroppable visual elements\n",1565],["You can select a draggable visual element, drag it to a droppable visual element, and release the element to drop it.",1565],["The base class for all drag-and-drop events is DragAndDropEventBase.",1565],["Event Description Trickles down Bubbles up Cancellable ",1565],["--------------------------------------------------------- ------------------------------------------------------------ ----------------- -------------- --------------- ",1565],["DragExitedEvent Sent when the drag-and-drop process ends. ✔ ✔ ",1565],["DragUpdatedEvent Sent when the dragged element moves over a drop target. ✔ ✔ ✔ ",1565],["DragPerformEvent Sent when the dragged element drops onto a target. ✔ ✔ ✔ ",1565],["DragEnterEvent Sent when the dragged element enters a new VisualElement. ✔ ",1565],["DragLeaveEvent Sent when the dragged element exits the current drop target. ✔ ",1565],["Make visual elements draggable",1565],["To make a visual element draggable, you need to register callbacks on the following three event types:",1565],["\nPointerDownEvent\n",1565],["\nPointerUpEvent\n",1565],["\nPointerMoveEvent\n",1565],["Use the following steps for a drag operation:",1565],["Set its state to \"being dragged\".",1565],["Add the appropriate data to DragAndDrop.",1565],["Call DragAndDrop.StartDrag().",1565],["Provide a visual cue to the drag operation. The drop area visual element should remove this feedback when it receives a DragPerformEvent or a DragExitedEvent.",1565],["Event list",1565],["DragExitedEvent",1565],["The DragExitedEvent is sent when the user drags any draggable object over a visual element and releases the mouse pointer. When a drop area visual element receives a DragExitedEvent, it needs to remove all feedback from drag operations.",1565],["DragUpdatedEvent",1565],["The DragUpdatedEvent is sent when the pointer moves over a visual element as the user moves a draggable object.",1565],["When a drop area visual element receives a DragUpdatedEvent, it needs to update the drop feedback. For example, you can move the \"ghost\" of the dragged object so it stays under the mouse pointer.",1565],["The drop area visual element should also examine DragAndDrop properties and set DragAndDrop.visualMode to indicate the effect of a drop operation. For example, a drop operation could create a new object, move an existing object, or reject the drop operation.",1565],["DragPerformEvent",1565],["The DragPerformEvent is sent when the user drags any draggable object and releases the mouse pointer over a visual element. This only occurs if a visual element sets DragAndDrop.visualMode to something other than DragAndDropVisualMode.None or DragAndDropVisualMode.Rejected to indicate that it can accept dragged objects.",1565],["When a drop area visual element receives a DragPerformEvent, it needs to act on the dragged objects stored in DragAndDrop.objectReferences, DragAndDrop.paths or DragAndDrop.GetGenericData().",1565],["For example, it might add new visual elements at the location where the user drops the objects.",1565],["DragEnterEvent",1565],["The DragEnterEvent is sent when the pointer enters a visual element during a drag operation.",1565],["When a drop area visual element receives a DragEnterEvent, it needs to provide feedback that lets the user know that it, or one of its children, is a target for a potential drop operation. For example, you can add a USS class to the target element and display a \"ghost\" of the dragged object under the mouse pointer.",1565],["DragLeaveEvent",1565],["The DragLeaveEvent is sent when the pointer exits a visual element as the user moves a draggable object.",1565],["When a drop area visual element receives a DragLeaveEvent, it needs to stop providing drop feedback. For example, you can remove the USS class that you added when the target element received a DragEnterEvent, and no longer display the “ghost” of the dragged object.",1565],["Examples",1565],["Draw order",1566],["The draw order of elements in the visual tree follows a depth-first search. Child visual elements appear on top of parent elements. UI Toolkit draws child elements in the order of the sibling list. The draw order is the following:",1566],["The top visual element.",1566],["The first child element of that visual element.",1566],["The child elements of the descendant element.",1566],["The diagram below shows the draw order of a visual tree:",1566],["To change the draw order of visual elements in C#, use the following functions:",1566],["\nBringToFront()\n",1566],["\nSendToBack()\n",1566],["To change the draw order of sibling visual elements, use the following functions:",1566],["\nPlaceBehind()\n",1566],["\nPlaceInFront()\n",1566],["UXML elements reference",1567],["The following tables outline the UXML elements available in the UnityEngine.UIElements and UnityEditor.UIElements namespaces.",1567],["Base elements",1567],["",1567],["Built-in controls",1567],["The following table is a reference of all built-in controls available for UI Toolkit.",1567],["",1567],["",1567],["",1567],["Templates",1567],["Element Description Namespace Permitted child elements Attributes ",1567],["Template A reference to another UXML template that can be instantiated using the Instance element. UnityEngine.UIElements None name: A unique string identifier for this elementpath: The path of the UXML file to load ",1567],["Instance Instance of a Template UnityEngine.UIElements None template: The name of the Template to instantiate ",1567],["",1567],["UxmlObject attributes",1567],["Element Description Namespace Permitted child elements Attributes ",1567],["Columns Contains descriptions of columns. Must be a child of a parent that supports it, such as MultiColumnListView or MultiColumnTreeView. UnityEngine.UIElements Column None ",1567],["Column Describes a column. Must be a child of Columns. UnityEngine.UIElements None name: The name of this column in codetitle: The name displayed in the header of this columnwidth: The default width of this column in pixels ",1567],["Encapsulate UXML documents with logic",1568],["A Prefab is a pre-made GameObject that you can instantiate multiple times in a scene. Prefabs are useful for creating reusable components. Visual elements in UI Toolkit aren't GameObjects and therefore Prefabs don't apply. However, you can create a custom control as a reusable UI component that encapsulates a specific hierarchy of elements with logic. Because UI Toolkit encourages you to separate the UI from your game or application code, you can use UXML to define the structure, use USS to define the look, and use C# to define the logic of your custom control.",1568],["Create reusable UI components",1568],["To create a reusable UI component, such as a custom control called CardElement for a card, which displays an image for the character, and the life and attack statistics as shown below:",1568],["These are the general steps to accomplish this:",1568],["In C#, declare a custom element type called CardElement.",1568],["In UXML, define the hierarchy of the custom control. You can use two approaches. Both approaches support instantiating the CardElement in C# and in a parent UXML.",1568],["\nUXML-first approach adds children after element construction.\n",1568],["\nElement-first approach adds children during element construction.\n",1568],["Locate references to child elements of the custom control.",1568],["Expose properties and methods, and encapsulate logic in your custom control the same way as you do with any C# classes.",1568],["Connect your custom control with your game or application code. You can also register event callbacks to implement user interaction.",1568],["",1568],["UXML-first approach",1568],["With this approach, you include your custom element CardElement in the hierarchy UXML document and declare its child elements directly underneath, and use the hierarchy UXML document as a template. This approach offers a simpler solution with a fixed UI structure within the hierarchy UXML document.",1568],["The following C# and UXML examples demonstrate how to use the UXML-first approach to create reusable UI.",1568],["",1568],["Create the custom control class",1568],["Create a C# script that defines CardElement custom control. The custom control class assigns an image and badge values to CardElement.",1568],["```lang-cs",1568],["using UnityEngine;",1568],["using UnityEngine.UIElements;",1568],["// Define the custom control type.",1568],["public class CardElement : VisualElement",1568],["// Expose the custom control to UXML and UI Builder.",1568],["public new class UxmlFactory : UxmlFactory {}",1568],["private VisualElement portraitImage => this.Q(\"image\");",1568],["private Label attackBadge => this.Q(\"attack-badge\");",1568],["private Label healthBadge => this.Q(\"health-badge\");",1568],["// Use the Init() approach instead of a constructor because",1568],["// we don't have children yet.",1568],["public void Init(Texture2D image, int health, int attack)",1568],["portraitImage.style.backgroundImage = image;",1568],["attackBadge.text = health;",1568],["healthBadge.text = attack;",1568],["// Custom controls need a default constructor.",1568],["public CardElement() {}",1568],["Define the hierarchy of the custom control",1568],["Create a UXML document (CardElement.uxml) that defines the hierarchy of CardElement. This example styles CardElement with a USS file.",1568],["```lang-xml",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["Connect custom controls to your game",1568],["You can connect your custom control to your game by the following:",1568],["\nInstantiate CardElement.uxml inside a parent UXML document. You can navigate back and forth between the hierarchy UXML and this UXML document in UI Builder.\n",1568],["\nInstantiate CardElement.uxml containing CardElement from a MonoBehaviour C# script. You must use UQuery to find CardElement before you add it to the scene.\n",1568],["You call Init() after adding the custom control into the scene.",1568],["You can also add gameplay-related actions, such as a click event to interact with the elements.",1568],["Instantiate inside parent UXML**",1568],["The following shows an example of instantiation in UXML:",1568],["```lang-xml",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["For information on how to render the UXML document in your game, see Render UI in the Game view.",1568],["Instantiate directly in C#**",1568],["Note**: For learning purposes, the example code on this page uses the Resources folder method to load the UXML files which is convenient. However, this method doesn't scale well. It's recommended that you use other methods to load references for your production projects.",1568],["The following shows an example of instantiation in C#:",1568],["```lang-cs",1568],["using UnityEngine;",1568],["using UnityEngine.UIElements;",1568],["public class UIManager : MonoBehaviour",1568],["public void Start()",1568],["UIDocument document = GetComponent();",1568],["// Load the UXML document that defines the hierarchy of CardElement.",1568],["// It assumes the UXML file is placed at the \"Resources\" folder.",1568],["VisualTreeAsset template = Resources.Load(\"CardElement\");",1568],["// Create a loop to modify properties and perform interactions",1568],["// for each card. It assumes that you have created a function",1568],["// called GetCards() to get all the cards in your game.",1568],["foreach(Card card in GetCards())",1568],["// Instantiate a template container.",1568],["var templateContainer = template.Instantiate();",1568],["// Find the custom element inside the template container.",1568],["var cardElement = templateContainer.Q();",1568],["// Add the custom element into the scene.",1568],["document.rootVisualElement.Add(cardElement);",1568],["// Initialize the card.",1568],["cardElement.Init(card.image, card.health, card.attack);",1568],["// Register an event callback for additional interaction.",1568],["cardElement.RegisterCallback(SomeInteraction);",1568],["private void SomeInteraction(ClickEvent evt)",1568],["// Interact with the elements here.",1568],["",1568],["Element-first approach",1568],["With this approach, you only include the child elements in the hierarchy UXML document and use C# to load the hierarchy UXML document into the CardElement class definition. This approach offers a flexible UI structure for custom controls. For example, you can load different hierarchy UXML documents depending on specific conditions.",1568],["The following C# and UXML examples demonstrate how to use the element-first approach to create reusable UI.",1568],["Create the custom control class",1568],["Create a C# script that defines the CardElement custom control. In addition to defining a constructor to assign an image and badge values to CardElement, the custom control loads the hierarchy UXML document in its class definition.",1568],["```lang-cs",1568],["using UnityEngine;",1568],["using UnityEngine.UIElements;",1568],["// Define the custom control type.",1568],["public class CardElement : VisualElement",1568],["// Expose the custom control to UXML and UI Builder.",1568],["public new class UxmlFactory : UxmlFactory {}",1568],["private VisualElement portraitImage => this.Q(\"image\");",1568],["private Label attackBadge => this.Q(\"attack-badge\");",1568],["private Label healthBadge => this.Q(\"health-badge\");",1568],["// Custom controls need a default constructor. This default constructor",1568],["// calls the other constructor in this class.",1568],["public CardElement() {}",1568],["// Define a constructor that loads the UXML document that defines",1568],["// the hierarchy of CardElement and assigns an image and badge values.",1568],["public CardElement(Texture2D image, int health, int attack)",1568],["// It assumes the UXML file is called \"CardElement.uxml\" and",1568],["// is placed at the \"Resources\" folder.",1568],["var asset = Resources.Load(\"CardElement\");",1568],["asset.CloneTree(this);",1568],["portraitImage.style.backgroundImage = image;",1568],["attackBadge.text = health.ToString();",1568],["healthBadge.text = attack.ToString();",1568],["Note**: If you have performance concerns, use lazy initialization to keep fields to cache the references and avoid re-evaluating the queries too often.",1568],["Define the hierarchy of the custom control",1568],["Create a UXML document (CardElement.uxml) that defines the hierarchy of the child elements of CardElement. The example styles CardElement with a USS file.",1568],["```lang-xml",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["Connect custom controls to your game",1568],["You can connect your custom control to your game by doing the following:",1568],["\nInstantiate CardElement.uxml inside a parent UXML document. In UI Builder, you can't navigate back and forth between the hierarchy UXML and this UXML document because child elements are loaded from C#.\n",1568],["\nInstantiate CardElement.uxml containing CardElement from a MonoBehaviour C# script.\n",1568],["You call the constructor before adding the custom control to the scene.",1568],["You can also add gameplay-related actions, such as a click event to interact with the elements.",1568],["Instantiate inside parent UXML**",1568],["The following shows an example of instantiation in UXML:",1568],["```lang-xml",1568],["",1568],["",1568],["",1568],["",1568],["",1568],["For information on how to render the UXML document in your game, see Render UI in the Game view.",1568],["Instantiate directly in C#**",1568],["The following shows an example of instantiation in C#:",1568],["```lang-cs",1568],["using UnityEngine;",1568],["using UnityEngine.UIElements;",1568],["public class UIManager : MonoBehaviour",1568],["public void Start()",1568],["UIDocument document = GetComponent();",1568],["// Create a loop to modify properties and perform interactions",1568],["// for each card. It assumes that you have created a function",1568],["// called GetCards() to get all the cards in your game.",1568],["foreach(Card card in GetCards())",1568],["var cardElement = new CardElement(card.image, card.health, card.attack);",1568],["// Register an event callback for additional interaction.",1568],["cardElement.RegisterCallback(SomeInteraction);",1568],["// Add the custom element into the scene.",1568],["document.rootVisualElement.Add(cardElement);",1568],["private void SomeInteraction(ClickEvent evt)",1568],["// Interact with the elements here.",1568],["Build more complex elements",1568],["As the UI of your project gets more complex, it's better to isolate your logic into higher-level components. This makes orchestrating the UI easier for the rest of the game or application.",1568],["You can apply the concepts on this page to gradually build specialized components out of smaller, more generic components. For example, to build a main title screen from which the user can access an Options menu and an About section, you can create a TitleScreenManager element with three different child UXML documents. Each defines its own elements: Title, Options, and About.",1568],["Additional resources",1568],["\nFind visual elements with UQuery\n",1568],["\nUse UXML instances as templates\n",1568],["\nReuse UXML files\n",1568],["\nSupport for runtime UI\n",1568],["Event examples",1569],["Learn UI Toolkit events by examples.",1569],["Additional resources",1569],["Dispatch events",1570],["The UI Toolkit event system listens to events, coming from the operating system or scripts, and dispatches these events to visual elements using the EventDispatcher. The event dispatcher determines an appropriate dispatching strategy for each event it sends. Once determined, the dispatcher executes the strategy.",1570],["Visual elements implement default behaviors for several events. This can involve the creation and execution of additional events. For example, a MouseMoveEvent could generate an additional MouseEnterEvent and a MouseLeaveEvent. These events enter a queue and process after the current event. For example, the MouseMoveEvent finishes processing before the MouseEnterEvent and MouseLeaveEvent events.",1570],["Dispatch behavior of event types",1570],["Each event type has its own dispatch behavior. The behavior of each event type breaks down into three stages:",1570],["\nTrickles down: Events sent to elements during the trickle down phase.\n",1570],["\nBubbles up: Events sent to elements during the bubble-up phase.\n",1570],["\nCancellable: Events that can have their default action execution cancelled, stopped, or prevented.\n",1570],["For a list of dispatch behavior for each event type, see the Event reference page.",1570],["Event propagation",1570],["After the event dispatcher selects the event target, it computes the propagation path of the event. The propagation path is an ordered list of visual elements that receive the event. The propagation path occurs in the following order:",1570],["The path starts at the root of the visual element tree and descends towards the target. This is the trickle-down phase.",1570],["The event target receives the event.",1570],["The event then ascends the tree towards the root. This is the bubble-up phase.",1570],["Most event types are sent to all elements along the propagation path. Some event types skip the bubble-up phase, and some event types are sent to the event target only.",1570],["If you hide or disable an element, it won't receive events. Events still propagate to the ancestors and descendants of a hidden or disabled element.",1570],["As an event travels along the propagation path, Event.currentTarget updates to the element handling the event. Within an event callback function, there are two properties that log the dispatch behavior:",1570],["\nEvent.currentTarget is the visual element on which the callback was registered.\n",1570],["\nEvent.target is the element where the event occurs, for example the element directly under the mouse.\n",1570],["Event target",1570],["The target of an event depends on the event type. For mouse events, the target is most commonly the topmost pickable element, directly under the mouse. For keyboard events, the target is the element that has focus.",1570],["UI Toolkit events have a target property, containing a reference to the element where the event occurred. For most events that originate from the operating system, the dispatch process finds the event target automatically.",1570],["The target element is stored in EventBase.target and doesn't change during the dispatch process. The property Event.currentTarget updates to the visual element currently handling the event.",1570],["Picking mode and custom shapes",1570],["Most mouse events use the picking mode to determine their target. The VisualElement class has a pickingMode property which supports the following values:",1570],["\nPickingMode.Position (default): performs picking based on the position rectangle.\n",1570],["\nPickingMode.Ignore: prevents picking as the result of a mouse event.\n",1570],["You can override the VisualElement.ContainsPoint() method to perform custom intersection logic.",1570],["Capture the mouse",1570],["After a MouseDownEvent, some elements must capture the pointer position to ensure it receives all subsequent mouse events, even when the cursor is no longer hovering over the element. For example, when you click on a button, slider, or a scroll bar.",1570],["To capture the mouse, call element.CaptureMouse() or MouseCaptureController.CaptureMouse().",1570],["To release the mouse, call MouseCaptureController.ReleaseMouse(). If another element is already capturing the mouse when you call CaptureMouse(), the element receives a MouseCaptureOutEvent",1570],["and loses the capture.",1570],["Only one element in the application can have the capture at any moment. While an element has the capture, it's the target of all subsequent mouse events except mouse wheel events. This only applies to mouse events that don't already have a set target and rely on the dispatch process to determine the target.",1570],["For more information, see Capture events.",1570],["Focus ring and the tab order",1570],["Each UI Toolkit panel has a focus ring that defines the focus order of elements. By default, a depth-first search (DFS) on the visual element tree determines the focus order of elements. For example, the focus order for the tree depicted below would be F, B, A, D, C, E, G, I, H.",1570],["Some events use the focus order to determine which element holds the focus. For example, the target for a keyboard event is the element in focus.",1570],["Use the focusable property to control whether a visual element is focusable. By default, VisualElements aren't focusable, but some subclasses, such as TextField, might be focusable by default.",1570],["Use the tabIndex property to control the focus order as follows (tabIndex default value of 0) :",1570],["\nIf the tabIndex is negative, you can't use tab on the element.\n",1570],["\nIf the tabIndex is zero, the element keeps its default tab order, as determined by the focus ring algorithm.\n",1570],["\nIf the tabIndex is positive, the element is placed in front of other elements that either have a zero tabIndex (tabIndex = 0) or a tabIndex value smaller than its own.\n",1570],["Additional resources",1570],["Handle events",1571],["Events in UI Toolkit are similar to HTML events. When an event occurs, it's sent to the target visual element and to all elements within the propagation path in the visual element tree.",1571],["The event handling sequence is as follows:",1571],["Execute event callbacks on elements from the root element down to the parent of the event target. This is the trickle-down phase of the dispatch process.",1571],["Execute event callbacks on the event target. This is the target phase of the dispatch process.",1571],["Call ExecuteDefaultActionAtTarget() on the event target.",1571],["Execute event callbacks on elements from the event target parent up to the root. This is the bubble-up phase of the dispatch process.",1571],["Call ExecuteDefaultAction() on the event target.",1571],["As an event moves along the propagation path, the Event.currentTarget property updates to the element currently handling the event. Within an event callback function:",1571],["\nEvent.currentTarget is the visual element that the callback registers on.\n",1571],["\nEvent.target is the visual element where the original event occurs.\n",1571],["For more information, see Dispatching events.",1571],["Register an event callback",1571],["You can register an event callback to customize the behavior of an individual instance of an existing class, such as reacting to a mouse click on a text label.",1571],["Each element along the propagation path (except the target) can receive an event twice:",1571],["\nOnce during the trickle-down phase.\n",1571],["\nOnce during the bubble-up phase.\n",1571],["By default, a registered callback executes during the target phase and the bubble-up phase. This default behavior ensures that a parent element reacts after its child element.",1571],["On the other hand, if you want a parent element to react before its child, register your callback with the TrickleDown.TrickleDown option:",1571],["```lang-csharp",1571],["using UnityEngine;",1571],["using UnityEngine.UIElements;",1571],["...",1571],["VisualElement myElement = new VisualElement();",1571],["// Register a callback for the trickle-down phase.",1571],["myElement.RegisterCallback(MyCallback, TrickleDown.TrickleDown);",1571],["...",1571],["This informs the dispatcher to execute the callback at the target phase and the trickle-down phase.",1571],["To add a custom behavior to a specific visual element, register an event callback on that element.",1571],["The following example registers a callback for the MouseDownEvent:",1571],["```lang-csharp",1571],["// Register a callback on a mouse down event",1571],["myElement.RegisterCallback(MyCallback);",1571],["The signature for the callback function looks like this:",1571],["```lang-csharp",1571],["void MyCallback(MouseDownEvent evt) { /* ... */ }",1571],["You can register multiple callbacks for an event. However, you can only register the same callback function on the same event and propagation phase once.",1571],["To remove a callback from a VisualElement, call the myElement.UnregisterCallback() method.",1571],["Send custom data to an event callback",1571],["You can send custom data along with the callback to an event. To attach custom data, you must extend the call to register the callback.",1571],["The following example registers a callback for the MouseDownEvent and sends custom data to the callback function:",1571],["```lang-csharp",1571],["// Send user data along to the callback",1571],["myElement.RegisterCallback(MyCallbackWithData, myData);",1571],["The signature for the callback function looks like this:",1571],["```lang-csharp",1571],["void MyCallbackWithData(MouseDownEvent evt, MyType data) { /* ... */ }",1571],["Listen to value changes",1571],["UI controls can use the value property to hold data for their internal state. For example:",1571],["A Toggle holds a Boolean value that changes when the Toggle is turned on or off.",1571],["An IntegerField holds an integer that holds the field's value.",1571],["You can get the value of the control by the following:",1571],["Get the value from the control directly: int val = myIntegerField.value;.",1571],["Listen to a ChangeEvent sent by the control and process the change when it happens. You must register your callback to the event like this:",1571],["```lang-csharp",1571],["//RegisterValueChangedCallback is a shortcut for RegisterCallback.",1571],["//It constrains the right type of T for any VisualElement that implements an",1571],["//INotifyValueChange interface.",1571],["myIntegerField.RegisterValueChangedCallback(OnIntegerFieldChange);",1571],["The signature for the callback function looks like this:",1571],["```lang-csharp",1571],["void OnIntegerFieldChange(ChangeEvent evt) { /* ... */ }",1571],["You can change the value of a control by the following:",1571],["Directly change the value variable: myControl.value = myNewValue;. This will trigger a new ChangeEvent.",1571],["Use myControl.SetValueWithoutNotify(myNewValue);. This won't trigger a new ChangeEvent.",1571],["For more information, see Change events",1571],["Capture the pointer",1571],["When you handle pointer input, you might want the control to capture a pointer. When a visual element captures a pointer, Unity sends all the events associated with the pointer to the visual element regardless of whether the pointer hovers over the visual element. For example, if you create a control that receives drag events and captures the pointer, the control still receives drag events regardless of the pointer location.",1571],["To capture a pointer, use capture events. See Create a drag-and-drop UI inside a custom Editor window for an example.",1571],["Respond to events with custom controls",1571],["If you're implementing custom controls, you can respond to UI Toolkit events in two ways:",1571],["\nRegistering an event callback.\n",1571],["\nImplementing a default action.\n",1571],["How you choose to respond to events depends on the situation.",1571],["The differences between callbacks and default actions are:",1571],["\nCallbacks must register on instances of the class. Default actions run as virtual functions on the class.\n",1571],["\nCallbacks execute for all visual elements in the propagation path. Default actions run only for the event target.\n",1571],["\nCallbacks might perform additional checks to determine whether they should react to an event. For example, a callback handling a mouse click might check if the element is the target of the event. Default actions can skip this step.\n",1571],["\nDefault actions have a slight performance advantage because they don’t require a lookup in the callback registry during the propagation phase.\n",1571],["Implement a default action",1571],["A default action applies to all instances of the class. A class that implements default actions can also have callbacks registered on its instances.",1571],["When a class implements a default action, it must derive a new subclass of VisualElement and implement either the ExecuteDefaultActionAtTarget() method, the ExecuteDefaultAction() method, or both.",1571],["Default actions execute on each instance of a visual element sub-class when that instance receives an event. To customize default actions, you can override ExecuteDefaultActionAtTarget() and ExecuteDefaultAction(), as shown in the example below:",1571],["```lang-csharp",1571],["override void ExecuteDefaultActionAtTarget(EventBase evt)",1571],["// Call the base function.",1571],["base.ExecuteDefaultActionAtTarget(evt);",1571],["if (evt.eventTypeId == MouseDownEvent.TypeId())",1571],["// ...",1571],["else if (evt.eventTypeId == MouseUpEvent.TypeId())",1571],["// ...",1571],["// More event types",1571],["Implementing your default actions in ExecuteDefaultAction() allows you to stop or prevent the execution of a default action.",1571],["If you want the target default action to execute before its parent callback, implement the default actions in ExecuteDefaultActionAtTarget().",1571],["You should view default actions as the behaviors that an element type should have when it receives an event. For example, a checkbox should toggle its state in response to a click event. To execute this, you can override a default action virtual function, instead of registering callbacks on all checkboxes.",1571],["Best practices for custom controls",1571],["The following are best practices for custom controls.",1571],["Implement behaviors",1571],["You should implement behaviors from your element with default actions. You can call PreventDefault() in a callback attached to an instance to cancel default element behaviors.",1571],["Additional benefits of implementing behaviors as default actions are:",1571],["\nDefault actions don't require a lookup in the callback registry.\n",1571],["\nInstances without callbacks don't enter the propagation process.\n",1571],["For greater flexibility, you can execute default actions of the event target at two moments during the event dispatch process:",1571],["\nBetween the trickle-down and the bubble-up propagation phase, immediately after execution of the target callbacks, override ExecuteDefaultActionsAtTarget().\n",1571],["\nAt the end of the event dispatch process, override ExecuteDefaultActions().\n",1571],["Default actions on a class",1571],["Implement your class default actions in ExecuteDefaultActions(), if possible. This allows more options to override the class. You can call PreventDefault() to override the class during the trickle-down phase or the bubble-up phase of the event propagation process.",1571],["You must stop propagation of an event during a default action if the event shouldn't propagate to the parent element. For example, a text field receives a KeyDownEvent that modifies its value, such as the Delete key to delete content. This event must not propagate to the parent visual element. Use ExecuteDefaultActionsAtTarget() to implement a default action, and call StopPropagation() to make sure the event isn't processed during the bubble-up phase.",1571],["Default actions only execute for an event target. For a class to react to events that target their child or parent elements, you must register a callback to receive the event either during the trickle-down or the bubble-up propagation phase. Avoid registering callbacks in your class to improve performance.",1571],["Stop event propagation and cancel default actions",1571],["When handling an event inside a callback or a default action, you can stop further event propagation and the execution of default actions. For example, a parent panel could stop propagation during the trickle-down phase to prevent its children from receiving events.",1571],["You can't prevent the execution of the EventBase.PreDispatch() and EventBase.PostDispatch() methods inside the event class itself.",1571],["The following methods affect event propagation and default actions:",1571],["\nStopImmediatePropagation(): Stops the event propagation process immediately, so no other callbacks execute for the event. However, the ExecuteDefaultActionAtTarget() and ExecuteDefaultAction() default actions still execute.\n",1571],["\nStopPropagation(): Stops the event propagation process after the last callback on the current element. This ensures that all callbacks execute on the current element, but no further elements react to the event. The ExecuteDefaultActionAtTarget() and ExecuteDefaultAction() default actions still execute.\n",1571],["\nPreventDefault(): Prevents the event propagation process from calling the ExecuteDefaultActionAtTarget() and ExecuteDefaultAction() default actions. PreventDefault() doesn't prevent the execution of other callbacks and doesn't affect the ExecuteDefaultActionAtTarget() action during the bubble-up phase.\n",1571],["Additional resources",1571],["Event reference",1572],["UI Toolkit raises an event when a user interacts with and changes the state of elements from UI Toolkit.",1572],["The event design is similar to the Event interface for HTML elements.",1572],["Event types fit into a hierarchy based on the EventBase class. Each event family implements an interface that defines the common characteristics of all events of the same family. For example, BlurEvent and FocusEvent use the FocusEventBase class.",1572],["Select any of the event types listed below for more information on the event, its parent class, and links to the API documentation.",1572],["Topic Description ",1572],[":-------------------- :----------------------- ",1572],["Capture events Events that capture the user's interaction with the UI. ",1572],["Change events Events that occur when the user changes the state of an element. ",1572],["Click events Events that occur when the user clicks an element. ",1572],["Command events Events that occur when the user invokes a command. ",1572],["Drag and drop events Events that occur when the user drags and drops an element. ",1572],["Layout events Events that occur when the layout engine changes the layout of an element. ",1572],["Focus events Events that occur when the user focuses on an element. ",1572],["Input events Events that occur when the user inputs text. ",1572],["Keyboard events Events that occur when the user presses a key. ",1572],["Mouse events Events that occur when the user moves the mouse. ",1572],["Navigation events Events that occur when the user navigates through the UI. ",1572],["Panel events Events that occur when the user interacts with a panel. ",1572],["Pointer events Events that occur when the user interacts with a pointer device. ",1572],["Tooltip events Events that occur when the user interacts with a tooltip. ",1572],["Transition events Events that occur when the user interacts with a transition. ",1572],["ContextualMenu events Events that occur when the user interacts with a contextual menu. ",1572],["IMGUI events Events that occur when the user interacts with an IMGUI element. ",1572],["Additional resources",1572],["Synthesize and send events",1573],["Before you synthesize and send custom events, understand how the UI Toolkit event system allocates and sends operating system events.",1573],["The event system uses a pool of events to avoid allocating event objects repeatedly.",1573],["To synthesize and send your own events:",1573],["Get an event object from the pool of events.",1573],["Fill in the event properties.",1573],["Enclose the event in a using block to ensure it's returned to the event pool.",1573],["Pass the event to panel.visualTree.SendEvent().",1573],["You can send operating system events, such as keyboard and mouse events. To do so, use a UnityEngine.Event to initialize the UI Toolkit event.",1573],["The following example demonstrates how to synthesize and send events:",1573],["```lang-csharp",1573],["void SynthesizeAndSendKeyDownEvent(IPanel panel, KeyCode code,",1573],["char character = '\\0', EventModifiers modifiers = EventModifiers.None)",1573],["// Create a UnityEngine.Event to hold initialization data.",1573],["var evt = new Event() {",1573],["type = EventType.KeyDownEvent,",1573],["keyCode = code,",1573],["character = character,",1573],["modifiers = modifiers",1573],["};",1573],["using (KeyDownEvent keyDownEvent = KeyDownEvent.GetPooled(evt))",1573],["panel.visualTree.SendEvent(keyDownEvent);",1573],["Note**: Don't send events that don't come from the operating system and can't be found in the UnityEngine.Event types. Some events are sent by UI Toolkit as a reaction to internal state changes and must not be sent by external processes. For example, if you send PointerCaptureEvent, visual elements assume that the underlying conditions for that event are met and won't set pointer capture for them. This might break the internal configurations of the visual element and cause undefined behaviors.",1573],["Additional resources",1573],["Control behavior with events",1574],["UI Toolkit provides events that communicate user actions or notifications to visual elements. The UI Toolkit event system shares the same terminology and event naming as HTML events.",1574],["Topic Description ",1574],[":-------------------- :----------------------- ",1574],["Dispatch events Understand the event dispatch behavior, propagation, and target. ",1574],["Handle events Understand event handling with built-in and custom controls. ",1574],["Use manipulators to handle events Learn how to use manipulators to handle events from examples. ",1574],["Synthesize and send events Learn how to synthesize and send events by an example. ",1574],["Event reference Understand behavior and characteristics of each event. ",1574],["Examples",1575],["This page lists a collection of examples that you can build with UI Toolkit:",1575],["Vector UI examples",1575],["Topics Description ",1575],["Create a pie chart in the Editor and runtime UI Use the Vector API to create a pie chart. ",1575],["Use Vector API to create a radial progress indicator Use the Vector API to create a radial progress indicator custom control and add the custom control in a runtime UI. ",1575],["Expose custom control to UXML and UI Builder",1576],["To use custom controls with UXML and UI Builder, you must expose them.",1576],["",1576],["Define a factory",1576],["To define new elements, derive a new class from VisualElement or one of its subclasses, and then implement the appropriate functionality within this new class.",1576],["Your new class must implement a default constructor. For example:",1576],["```lang-csharp",1576],["class StatusBar : VisualElement",1576],["public StatusBar()",1576],["m_Status = String.Empty;",1576],["string m_Status;",1576],["public string status { get; set; }",1576],["In order for UI Toolkit to instantiate a new class when it reads a UXML file, you must define a factory for your class. Unless your factory needs to do something special, you can derive the factory from UxmlFactory<T>. It's recommended that you put the factory class within your component class.",1576],["For example, the following code snippet define a factory named UxmlFactory for the StatusBar class:",1576],["```lang-csharp",1576],["class StatusBar : VisualElement",1576],["public new class UxmlFactory : UxmlFactory {}",1576],["// ...",1576],["With this factory defined, you can use the <StatusBar> element in UXML files.",1576],["",1576],["Define attributes on elements",1576],["You can define UXML traits for a new class and set its factory to use these traits.",1576],["For example, the following code snippet defines a UXML traits class to initialize the status property as a property of the StatusBar class. The status property initializes from UXML data.",1576],["```lang-csharp",1576],["class StatusBar : VisualElement",1576],["public new class UxmlFactory : UxmlFactory {}",1576],["public new class UxmlTraits : VisualElement.UxmlTraits",1576],["UxmlStringAttributeDescription m_Status = new UxmlStringAttributeDescription { name = \"status\" };",1576],["public override IEnumerable uxmlChildElementsDescription",1576],["get { yield break; }",1576],["public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)",1576],["base.Init(ve, bag, cc);",1576],["((StatusBar)ve).status = m_Status.GetValueFromBag(bag, cc);",1576],["// ...",1576],["Note**: When you are authoring an element within UI Builder, UI Builder might call UxmlTraits.Init() multiple times to synchronize values from UXML files. You are recommended to use GetValueFromBag instead of TryGetValueFromBag to ensure that an element doesn’t retain the previous value when an attribute is unset in UI Builder.",1576],["The UxmlTraits serves two purposes:",1576],["\nThe factory uses it to initialize the newly created object.\n",1576],["\nThe schema generation process analyzes it to get information about the element. This information translates into XML schema directives.\n",1576],["The code example above does the following:",1576],["\nThe declaration of m_Status defines an XML attribute named status.\n",1576],["\nThe uxmlChildElementsDescription returns an empty IEnumerable which indicates that StatusBar element has no child.\n",1576],["\nThe Init() member reads the value of the status attribute in a property bag from the XML parser and sets the StatusBar.status property to this value.\n",1576],["\nThe UxmlTraits class is placed inside the StatusBar class. This allows the Init() method to access the private members of StatusBar.\n",1576],["\nThe new UxmlTraits class inherits from the base class UxmlTraits, so it shares the attributes of the base class.\n",1576],["\nInit() calls base.Init() to initialize the base class properties.\n",1576],["The code example above declares a string attribute with the UxmlStringAttributeDescription class. UI Toolkit supports the following types of attributes and each links a C# type to a UMXL type:",1576],["Attribute Attribute value ",1576],["--------------- -------------------- ",1576],["UxmlStringAttributeDescription A string ",1576],["UxmlFloatAttributeDescription A single precision floating point value in the range of the C# float type. ",1576],["UxmlDoubleAttributeDescription A double precision floating point value in the range of the C# double type. ",1576],["UxmlIntAttributeDescription An integer value in the range of the C# int type. ",1576],["UxmlLongAttributeDescription A long integer value in the range of the C# long type. ",1576],["UxmlBoolAttributeDescription true or false ",1576],["UxmlColorAttributeDescription A string that represents a color defined in USS format. ",1576],["UxmlEnumAttributeDescription<T> A string that represents one of the values for the Enum type T. ",1576],["UxmlTypeAttributeDescription<T> A string that represents the assembly-qualified name of the type. ",1576],["In the code example above, the uxmlChildElementsDescription returns an empty IEnumerable which indicates that the StatusBar element doesn't accept child element descriptions to the XML schema.",1576],["To have an element accept children of any type, you must override the uxmlChildElementsDescription property. For example, for the StatusBar element to accept children of any type, you must specify the uxmlChildElementsDescription property as follows:",1576],["```lang-csharp",1576],["public override IEnumerable uxmlChildElementsDescription",1576],["get",1576],["yield return new UxmlChildElementDescription(typeof(VisualElement));",1576],["Define a namespace prefix",1576],["Once you have defined a new element in C#, you can use the element in your UXML files. To categorize elements, create your class in a namespace. When you define a new namespace, you can define a prefix for the namespace. You must define namespace prefixes as attributes of the root <UXML> element and replace the full namespace name when scoping elements.",1576],["To define a namespace prefix, add a UxmlNamespacePrefix attribute to your assembly for each namespace prefix. For example:",1576],["```lang-csharp",1576],["[assembly: UxmlNamespacePrefix(\"My.First.Namespace\", \"first\")]",1576],["[assembly: UxmlNamespacePrefix(\"My.Second.Namespace\", \"second\")]",1576],["You can do this at the root level (outside any namespace) of any C# file of the assembly.",1576],["The schema generation system does the following:",1576],["\nChecks for these attributes and uses them to generate the schema.\n",1576],["\nAdds the namespace prefix definition as an attribute of the <UXML> element in newly created UXML files.\n",1576],["\nIncludes the schema file location for the namespace in its xsi:schemaLocation attribute.\n",1576],["To ensure that your text editor recognizes the new element, select Assets > Update UXML Schema to update the schema definition.",1576],["To create a new UXML document with the prefix, select Assets > Create > UI Toolkit > UI Document.",1576],["Additional resources",1576],["Fallback font",1577],["Each font asset has a limited number of characters. When you use a character that isn't in the current font asset, TextCore searches the Fallback List until it finds a font asset with that character. The text element then uses that font asset to render the character.",1577],["You can set a list of fallback fonts to distribute fonts over multiple textures, or use different fonts for specific characters. It requires extra computing resources to search the list for missing characters and additional draw calls to use additional fonts.",1577],["You can use the same character for multiple font assets in the fallback list. Match the style of the characters in the fallback list to style of the main font asset as possible as you can.",1577],["Fallback font usage",1577],["In general, use fallback font assets to:",1577],["\nWork with languages that have large alphabets, such as Chinese, Korean, and Japanese. Use fallback fonts to distribute an alphabet across several assets.\n",1577],["\nInclude special characters from other alphabets in your text.\n",1577],["Tips**: Dynamic OS font assets are great candidates for fallback font assets.",1577],["Fallback font chain",1577],["You can create local and global fallback font asset lists. Set local font asset lists in the Font Assets property and set global font asset lists in Panel Text Settings. In addition to the fallback fonts, TextCore searches other assets, such as the default sprite asset, for missing glyphs. Together, these assets form the fallback chain.",1577],["The following is the asset order in the fallback chain:",1577],["Local fallback font assets list",1577],["Global fallback font assets list",1577],["Default sprite asset",1577],["Default font asset",1577],["Missing glyphs characters",1577],["Additional resources",1577],["FAQ for input and event systems with UI Toolkit",1578],["This page includes frequently asked questions for using the event system and the input system with UI Toolkit.",1578],["How do I know if the mouse is over a visual element from a runtime panel?",1578],["How can I remap basic UI actions?",1578],["How can I change what element is focused next when using directional navigation?",1578],["Is it possible to get rid of WASD inputs for directional navigation or space bar for the submit action?",1578],["How can I start entering keyboard input without ever clicking anywhere with the mouse?",1578],["",1578],["How do I know if the mouse is over a visual element from a runtime panel?",1578],["You can do this by two methods:",1578],["First method**",1578],["Add an Event System component in your scene the same way as you create GameObject-based UI content from the com.unity.uGUI package.",1578],["Use the EventSystem.current.IsPointerOverGameObject method, which returns true if the pointer is over UI content from either uGUI or from UI Toolkit.",1578],["Use the EventSystem.current.RaycastAll method to see what visual element is under the mouse.",1578],["Intersected UI Toolkit Panels are represented in the Event System’s environment through a GameObject:",1578],["The GameObject's name matches the corresponding PanelSettings.",1578],["The GameObject's parent is the GameObject that holds the current Event System component.",1578],["The GameObject has two components, PanelRaycaster and PanelEventHandler. Both components have a panel property that returns the IPanel it targets.",1578],["After you find the panel under the pointer, call the panel.Pick method to find what visual element lies at the pointer’s position.",1578],["You must use the RuntimePanelUtils.ScreenToPanel method to transform the pointer’s screen coordinates into panel coordinates.",1578],["uGUI’s screen coordinate system uses a bottom-left origin whereas UI Toolkit screen coordinates are expressed from the top-left. Conversion between the two systems requires that you mirror the Y coordinate with yTopLeft = Screen.height - yBottomLeft, and vice versa.",1578],["Second method**",1578],["Use the UIDocument.rootVisualElement property from one UIDocument per distinct PanelSettings used to get the list of all the runtime panels that could be under the pointer, which you can gather",1578],["Go through the panels manually in order of depth and call panel.Pick on each of them successively until you find one that returns a visual element.",1578],["",1578],["How can I remap basic UI actions?",1578],["To remap basic UI actions:",1578],["Add an Event System component in your scene the same way as you create GameObject-based UI content from the com.unity.uGUI package.",1578],["In the Inspector window, configure the Stand alone Input Module or Input System UI Input Module fields to control what input maps to each action.",1578],["Note**: The actions mapped to Tab and Shift+Tab inputs can’t be remapped because they're not exposed through the Event System input modules.",1578],["",1578],["How can I change what element is focused next when using directional navigation?",1578],["You can configure directional navigation to have other targets other than the default ones.",1578],["The following code example allows element A to navigate to elements U, D, L, R when navigating up, down, left, and right respectively:",1578],["```lang-csharp",1578],["A.RegisterCallback (e =>",1578],["switch(e.direction)",1578],["case NavigationMoveEvent.Direction.Up: U.Focus(); break;",1578],["case NavigationMoveEvent.Direction.Down: D.Focus(); break;",1578],["case NavigationMoveEvent.Direction.Left: L.Focus(); break;",1578],["case NavigationMoveEvent.Direction.Right: R.Focus(); break;",1578],["e.PreventDefault();",1578],["});",1578],["",1578],["Is it possible to get rid of WASD inputs for directional navigation or space bar for the submit action?",1578],["Yes. You can use the EventSystem's StandaloneInputModule or InputSystemUIInputModule fields in the Inspector window to control what input maps to each action. However, since these actions are shared with uGUI input, this also changes the uGUI controls.",1578],["To remap UI Toolkit inputs without affecting uGUI controls, disable UI Toolkit’s runtime event handling and send all events manually to panels. To do so, call EventSystem.SetUITookitEventSystemOverride(null, true, false); before the start method of your current EventSystem kicks in, such as the Awake method of the component of your scene. For more information about this uGUI method, see SetUITookitEventSystemOverride.",1578],["",1578],["How can I start entering keyboard input without ever clicking anywhere with the mouse?",1578],["It’s possible that no element or panel is in focus at a given time, such as when loading your game scene for the first time. In this case, keyboard navigation doesn't start from a predictable first element. This can be a problem for a game that plays entirely without a mouse.",1578],["You add C# script to allow a predictable navigation behavior from the start, and attach your script to the same GameObject as the UIDocument responsible for the element that you choose to get the initial focus.",1578],["Assume your script is named FirstFocus and your initial focused element is named as first-focused. In your script’s Start() method, add a line to focus that element as the following:",1578],["```lang-csharp",1578],["public class FirstFocus : MonoBehaviour",1578],["void Start()",1578],["FocusFirstElement();",1578],["public void FocusFirstElement()",1578],["GetComponent().rootVisualElement.",1578],["Q(\"first-focused\").Focus();",1578],["Note**: If you disable the UIDocument’s GameObject, all its underlying hierarchy is recreated from scratch. Therefore, you must run your custom FocusFirstElement() method again after you re-enable the GameObject.",1578],["Additional resources",1578],["Focus events",1579],["Focus events occur when an element gains or loses focus.",1579],["Focus events are useful when you need to change focus to and away from visual elements. Controls often use focus events to change their contents, depending on the focus state. For example, a text field can display placeholder text while it isn't in focus, or it can react to the FocusInEvent to clear the placeholder text.",1579],["Focus can change on a visual element from user interactions, such as tabbing or clicking, or using C# scripts with element.Focus().",1579],["Focus events separate into two distinct types:",1579],["\nFocusOutEvent and FocusInEvent are sent along the propagation path just before a focus change occurs.\n",1579],["\nFocusEvent and BlurEvent are sent to the event target, immediately after the change in focus.\n",1579],["The base class for all focus events is FocusEventBase.",1579],["Event Description Trickles down Bubbles up Cancellable ",1579],["--------------------------------------------------- --------------------------------------- ----------------- -------------- --------------- ",1579],["FocusOutEvent Sent before an element loses focus. ✔ ✔ ",1579],["FocusInEvent Sent before an element gains focus. ✔ ✔ ",1579],["BlurEvent Sent after an element has lost focus. ✔ ",1579],["FocusEvent Sent after an element has gained focus. ✔ ",1579],["Unique properties",1579],["The following section explains relevant properties unique to focus events. This isn't a complete list of all properties within the focus event family. For a full list, see the FocusEventBase in the API documentation.",1579],["relatedTarget**: Contains the visual element that's the secondary target of an event. For FocusOut and Blur events, it contains the element that gains focus. For FocusIn and Focus events, it contains the element that loses focus.",1579],["Event target relatedTarget ",1579],["--------- ----------------------------- ----------------------------- ",1579],["Blur The element that loses focus. The element that gains focus. ",1579],["Focus The element that gains focus. The element that loses focus. ",1579],["focusIn The element that gains focus. The element that loses focus. ",1579],["focusOut The element that loses focus. The element that gains focus. ",1579],["Event list",1579],["FocusOutEvent",1579],["The FocusOutEvent is sent when an element is about to lose focus.",1579],["target**: The element that will lose focus.",1579],["relatedTarget**: The element that will gain focus.",1579],["FocusInEvent",1579],["The FocusInEvent is sent when an element is about to gain focus.",1579],["target**: The element that will gain focus.",1579],["relatedTarget**: The element that will lose focus.",1579],["BlurEvent",1579],["The BlurEvent is sent after an element lost focus.",1579],["target**: The element that lost focus.",1579],["relatedTarget**: The element that gained focus.",1579],["FocusEvent",1579],["The FocusEvent is sent after an element gained focus.",1579],["target**: The element that gained focus.",1579],["relatedTarget**: The element that lost focus.",1579],["Examples",1579],["The following example shows how to use placeholder text in a TextField.",1579],["After you create the elements through UXML, the script assigns a placeholder text to the TextField. When the TextField is in focus, FocusInEvent fires and clears the placeholder text. FocusOutEvent toggles the placeholder mode based on the TextField contents.",1579],["To see the example in action, do the following:",1579],["Create a new C# script called PlaceHolderExample.",1579],["Copy the example code into the C# script.",1579],["Under Window > UI Toolkit > PlaceHolderExample, open the newly created Editor window.",1579],["```lang-csharp",1579],["using UnityEditor;",1579],["using UnityEngine;",1579],["using UnityEngine.UIElements;",1579],["public class PlaceHolderExample : EditorWindow",1579],["[MenuItem(\"Window/UI Toolkit/PlaceHolderExample\")]",1579],["public static void ShowExample()",1579],["PlaceHolderExample wnd = GetWindow();",1579],["wnd.titleContent = new GUIContent(\"PlaceHolderExample\");",1579],["private bool placeHolderMode = true;",1579],["private const string placeHolderText = \"Write here\";",1579],["public void CreateGUI()",1579],["TextField textField = new TextField();",1579],["textField.value = placeHolderText;",1579],["rootVisualElement.Add(textField);",1579],["textField.RegisterCallback(OnFocusInTextField);",1579],["textField.RegisterCallback(OnFocusOutTextField);",1579],["private void OnFocusInTextField(FocusInEvent evt)",1579],["// If the text field just received focus and the user might want to write",1579],["// or edit the text inside, the placeholder text should be cleared (if active)",1579],["if (placeHolderMode)",1579],["var textField = evt.target as TextField;",1579],["textField.value = \"\";",1579],["private void OnFocusOutTextField(FocusOutEvent evt)",1579],["// If the text field is empty after the user is done editing and the",1579],["// element lost focus, write placeholder text into the text field",1579],["var textField = evt.target as TextField;",1579],["placeHolderMode = string.IsNullOrEmpty(textField.value);",1579],["if (placeHolderMode)",1579],["textField.value = placeHolderText;",1579],["Font assets",1580],["You can create a font asset from an imported font file.",1580],["Topic Description ",1580],["-------------------- ----------------------- ",1580],["Introduction to font assets Convert font to font asset before using them in your project. ",1580],["Font Asset properties reference Information about each Font Asset property. ",1580],["Font Asset Creator properties reference Information about each Font Asset Creator property. ",1580],["Additional resources",1580],["Font Asset properties reference",1581],["You can adjust the properties of a font asset after the font asset is created. To adjust the properties of a font asset, select the font asset, and change the values of its properties in the Inspector window.",1581],["Font Asset properties",1581],["This section describes all the Font Asset properties.",1581],["Face Info",1581],["Use the Face Info properties to control the font's line metrics.",1581],["Property Description ",1581],["\n\n- \n\n",1581],["Family Name Name of the font used to create this font asset. ",1581],["Style Name Style of the font used to create this font asset. For example, Regular, Bold, or Italic. ",1581],["Point Size Font size in points used to generate the font asset. ",1581],["Scale Scale the font. For example, a value of 1.5 scales glyphs to 150% of the original font size. ",1581],["Line Height Distance between the tops of consecutive lines.If you set a line height greater than the sum of the Ascent Line and Descent Line, it creates in a gap between lines.If you set a line height smaller than the sum of the Ascent Line and Descent Line values, characters on different lines might overlap. ",1581],["Ascent Line Maximum distance that glyphs can extend above the baseline. It corresponds to the top of a line. ",1581],["Cap Line Distance between the base line and the tops of uppercase glyphs. ",1581],["Mean Line Maximum height for non-ascending lowercase glyphs. For example, \"a\" and \"c\", but not \"b\" and \"d\" which have ascenders.The tops of rounded glyphs sometimes extend a slightly above the mean line. ",1581],["Baseline Height of the baseline.The baseline is the horizontal line that characters sit on. ",1581],["Descent Line Maximum distance that glyphs can extend below the baseline. ",1581],["Underline Offset Position of underlines relative to the baseline. ",1581],["Underline Thickness Thickness of underlines. ",1581],["Strikethrough Offset Position of strikethrough lines relative to the baseline. ",1581],["Superscript Offset Offset superscript text from the baseline. ",1581],["Superscript Size Scale superscript text relative to the original font size. ",1581],["Subscript Offset Offset subscript text from the baseline. ",1581],["Subscript Size Scale subscript text relative to the original font size. ",1581],["Tab Width Width of a TAB character. ",1581],["Generation Settings",1581],["You can change the generation settings for a font asset. For dynamic or dynamic OS font assets, you can change the settings directly in the Inspector Window without regenerating the atlas. To update the generation settings for a static font asset, select Update Atlas Texture, and make changes in the Font Asset Creator window and regenerate the font atlas.",1581],["Property Description ",1581],["\n\n- \n\n",1581],["Source Font File Source file used to generate the font asset. ",1581],["Atlas Population Mode Mode to populate the font atlas. ",1581],["Atlas Render Mode Mode to render the font atlas. ",1581],["Sampling Point Size Size, in points, of characters in the font texture. ",1581],["Padding Padding, in pixels, between characters in the font atlas texture. ",1581],["Atlas Width Width of the font atlas texture. ",1581],["Atlas Height Height of the font atlas texture. ",1581],["Multi Atlas Textures Store glyphs in multiple atlas textures. Enable this option if you need more than one atlas. ",1581],["Clear Dynamic Data Clear all dynamic data and restore the font asset back to its default creation and empty state. ",1581],["Atlas & Material",1581],["Note**: Font material isn't supported in the current release.",1581],["Property Description ",1581],["\n\n- \n\n",1581],["Font Atlas Font texture atlas created when you generated the font Asset. ",1581],["Font Weights",1581],["You can use the Font Weights options to control the appearance of bold and italicized text in the following ways:",1581],["\nSpecify regular and italic fonts for weights ranging from 100 (Thin) to 900 (Black).\n",1581],["\nUse the Italic Slant and Bold Weight properties to define \"fake\" bolding and italicization. These settings adjust characters in the current font asset when you bold or italicize text. This limits you to regular and italic versions of original and bold text (equal to weights of 400 and 700 respectively).\n",1581],["The following table describes the properties for the Italic Slant and Bold Weight properties:",1581],["Property Description ",1581],["\n\n- \n\n",1581],["Regular Weight Regular font weight to use when no font asset is available. ",1581],["Bold Weight Bold font weight assumed when no font asset is available. ",1581],["Regular Spacing Space between characters when using the regular text style. ",1581],["Bold Spacing Space between characters when using the bold text style if you haven’t specified a Bold font asset. ",1581],["Italic Slant Slant value for the italic typeface. ",1581],["Tab Multiple This value is multiplied by the width of the font's space character to calculate the tab size. ",1581],["",1581],["Fallback Font Assets",1581],["Manage the local fallback font assets list for this font asset.",1581],["Note**: The local fallback has precedence over the global fallback set in the Panel Text Settings asset.",1581],["Property Description ",1581],["",1581],["Fallback Font Assets List Click + and - to add and remove font slots. Click the circle icon next to a font to open an Object Picker where you can choose a font asset.Drag the handles on the left side of any font asset to reorder the list. ",1581],["Character Table",1581],["The character table contains information about each character in the font asset. You can adjust the attributes of an individual glyph to correct font problems. To do so, select Edit Glyph.",1581],["Property Description ",1581],["\n\n- \n\n",1581],["Character Search Search the character list by character, ASCII value or Hex value. ",1581],["UTF16 ASCII decimal value of the character. ",1581],["Unicode Unicode Hex value of the character. ",1581],["Glyph ID ID of the character's glyph. ",1581],["Glyph Table",1581],["The glyph table contains information about each glyph in the font asset. You can adjust the attributes of an individual glyph to correct font problems.",1581],["Property Description ",1581],["",1581],["Glyph Search Search the character list by character, ASCII value, or Hex value.Search results are ordered by ASCII value, lowest to highest. ",1581],["Glyph Rect Define the rectangular area the character occupies in the font atlas. ",1581],["Glyph Metrics Define the metrics of the glyph. ",1581],["W Width of the character. ",1581],["H Height of the character. ",1581],["BX, BY Control the placement of the character's sprite, defined at its top-left corner relative to its origin on the baseline. ",1581],["AD How far to advance along the baseline before placing the next character. ",1581],["Scale Scaling value that adjusts the size of the character. ",1581],["Glyph Adjustment Table",1581],["The glyph adjustment table Control spacing between specific pairs of characters. Some fonts include kerning information, which is imported automatically. You can add kerning pairs for fonts that don’t include them.",1581],["Property Description ",1581],["",1581],["Adjustment Pair Search Search the adjustment table by character or ASCII value.Search results include entries where either the left or right character matches the search string.Search results are ordered by the ASCII value of the left character, lowest to highest. ",1581],["Glyph Properties Display a single glyph’s properties. Each glyph has its own entry.Click an entry to make it active. You can then edit the glyph, copy it, or remove it from the list. ",1581],["Char (left and right) Left and right characters for the kerning pair. ",1581],["ID (left and right) Left and right characters’ ASCII decimal values for the kerning pair. ",1581],["OX, OY (left and right) Left and right horizontal (X) and vertical (Y) offsets relative to the character's initial position in the kerning pair. ",1581],["AX (left and right) How far to advance along the baseline before placing the next character in the kerning pair.The left AX value controls the distance between the characters in the kerning pair, while the right AX value controls the distance between the kerning pair and the next character. ",1581],["Additional resources",1581],["Introduction to font assets",1582],["Font assets act as containers for fonts. With font assets, you can import fonts into your projects and create variations of a font from one file and not change the original font. Another reason to create font asset is to deal with languages with massive character sets, such as Chinese. You can include only the characters you need, rather than the full set of characters.",1582],["You can convert TrueType (.ttf), OpenType (.otf), or TrueType Collection(.ttc) fonts to font assets. A font asset includes a font atlas texture file that contains all of the characters. There are several atlas populate modes and render modes to choose when you create a font asset.",1582],["",1582],["Atlas population modes",1582],["TextCore supports the Static, Dynamic, and Dynamic OS atlas population modes.",1582],["Static font asset",1582],["Static font assets pre-bake characters into the atlas texture during conversion. Use static font assets to contain known text in your project, such as labels and section titles. When you create a static font asset, the font atlas is empty by default. You must manually generate the font atlas and include all the characters required for the project. The project build doesn't require you to include the font source file, so it's fast and efficient.",1582],["See instructions on how to create a Static font asset.",1582],["Dynamic font asset",1582],["Dynamic font assets start with an empty atlas texture. Dynamic font assets look for characters in the source font file and adds the characters dynamically as you use them in a UI. Use Dynamic font assets for unknown text in your project, such as any text input fields. Dynamic fonts assets are flexible, but they have additional performance overhead because the project build requires to include all source font files.",1582],["See instructions on how to create a Dynamic font asset.",1582],["Dynamic OS font asset",1582],["Dynamic OS font assets are a dynamic font asset that references the font file on the operating system instead of the source font file. Compared to the Dynamic font asset, dynamic OS font assets have less memory overhead. The project build doesn't require to include the font source files. Make sure that the fonts are on the operating system of the targeted platforms. Dynamic OS font assets are great candidates for fallback font assets.",1582],["To create a dynamic OS font asset, import the font from the operating system to your project, and use it to create a dynamic font asset and change the Atlas Population Mode to Dynamic OS.",1582],["",1582],["Atlas render modes",1582],["TextCore supports atlas render modes for bitmap and Signed Distance Field (SDF).",1582],["Bitmap fonts",1582],["Bitmap rendering generates font assets that perfectly aligns each pixel of the font with scene and GUI pixels. Use the following render modes for pixel art:",1582],["\nSMOOTH or SMOOTH_HINTED to render text to an antialiased bitmap. SMOOTH_HINTED aligns character pixels with texture pixels for clearer images.\n",1582],["\nRASTER or RASTER_HINTE to render text to a non-antialiased bitmap. RASTER_HINTE aligns character pixels with texture pixels for a clearer image.\n",1582],["",1582],["SDF fonts",1582],["SDF rendering generates font assets that look crisp when you transform or magnify them. SDF rendering supports effects such as outlines and drop shadows.",1582],["Unlike bitmap font textures, SDF font assets contain contour distance information. In font atlases, this information looks like grayscale gradients that run from the middle of each glyph to a point past its edge. The gradient's mid-point corresponds to the edge of the glyph.",1582],["The images below show bitmap and SDF font assets and the rendered text they produce. The bitmap fonts produce text whose edges are more or less jagged and blurry, depending on how far the text is from the camera, and how it's transformed and distorted. The SDF font produces text with smooth edges regardless of the distance from the camera.",1582],["Use the following render mode for SDF fonts:",1582],["\nSDFAA: Use this mode to produce font atlases for most use cases except when you render large text such as titles that exceed 90 point size on screen with a large outline. SDFAA is the default mode for Dynamic or Dynamic OS font assets for fast generation. SDFAA is a faster but less accurate SDF generation mode.\n",1582],["\nSDFAA_HINTED Use this mode to align character pixels with texture pixels for a crisper result.\n",1582],["\nSDF32: Default mode for Static font assets. Use this mode for fonts with complex or small characters. It's a slower and accurate SDF generation mode with 32x oversampling.\n",1582],["\nSDF16: Use this mode for Static font assets and mostly large text, such as titles that are 72 point size or larger. It's a slower and accurate SDF generation mode with 16x oversampling.\n",1582],["\nSDF8: Use this mode for a slower and accurate SDF generation with 8x oversampling.\n",1582],["\nSDF: Use this mode for a slower and accurate SDF generation without oversampling.\n",1582],["Font asset variant",1582],["If you want to make changes only to a font asset’s metrics, instead of creating a new font asset, create a font asset variant based on another font asset. A font asset variant can have styling that distinguishes it from the original font asset , without consuming extra space for textures. The variant stores its own Face Info, Character, Glyph, and Adjustment Pair data, but still refers to the original atlas.",1582],["To create a font asset variant, right-click the font asset and select Create > Text> Font Asset Variant.",1582],["",1582],["Padding",1582],["Characters in the font texture need padding between them so they can be rendered separately. This padding is specified in pixels. Padding also creates room for the SDF gradient. The larger the padding, the smoother the transition, which allows for higher-quality rendering and larger effects, like thick outlines. Use a padding of 5 for a 512x512 texture. A good rule of thumb is to have a sampling to padding ration of 1:10.",1582],["",1582],["Enable Multi Atlas Textures for large texture",1582],["For most fonts, use a 512x512 texture resolution if you include all ASCII characters. To support thousands of characters, use large textures and enable Multi Atlas Textures in the font asset's Inspector window. This automatically creates new textures of the same size once the main texture is full.",1582],["You can also enable Multi Atlas Textures if you design for mobile devices, where an imposed maximum texture size prevents an entire set of glyphs from fitting in a single atlas of sufficient quality.",1582],["Use a font asset",1582],["To use a font asset, in UI Builder, select the font from Font Asset in the Inspector window.",1582],["Note**: The Font field is for backward compatibility. If you want to use a font from the Font list for your legacy projects, you must select None from Font Asset. Otherwise, the font you selected from Font won’t take effect.",1582],["You can apply a font asset to a text element in USS with the following syntax:",1582],["```lang-css",1582],["-unity-font-definition: ",1582],["For example:",1582],["```lang-css",1582],["Label {",1582],["-unity-font-definition: url(“/Assets/UI Toolkit/Resources/Fonts & Materials/LiberationSans SDF.asset”);",1582],["For more information, see USS text properties.",1582],["Best practices",1582],["In summary, consider the following when you create a font asset:",1582],["\nUser input text: Use Dynamic or Dynamic OS population mode, and SDFAA mode for fast generation. You might need to add fallbacks for localization.\n",1582],["\nGeneric labels: Use the Static population mode and SDF16 mode with smaller sampling point size.\n",1582],["\nTitles: Use the Static population mode and SDF32 mode with higher sampling point size.\n",1582],["\nPixel Art: Use any of the bitmap font render modes.\n",1582],["\nPadding: Use a sampling to padding ration of 1:10.\n",1582],["\nEnable Multi Atlas Textures for large texture.\n",1582],["Additional resources",1582],["\nFont Asset properties reference\n",1582],["\nFont Asset Creator properties reference\n",1582],["Font Asset Creator properties reference",1583],["You can generate and update the font atlas with the Font Asset Creator. To generate and update the font atlas, select Update Atlas Texture in the Font Asset's Inspector window.",1583],["The following table describes all the Font Asset creator properties:",1583],["Property Description ",1583],["",1583],["Source Font File Source font to use to generate the font asset. ",1583],["Sampling Point Size Font size, in points, used to generate the font texture. The higher the Sampling Point Size, the better the rendering quality, but it takes more atlas space. ",1583],["Auto Sizing Use the largest point size possible while still fitting all characters on the texture.This is the general option for SDF fonts. ",1583],["Custom Size Use a custom point size to achieve pixel-accurate control over bitmap-only fonts. ",1583],["Padding Padding, in pixels, between characters in the font atlas texture. ",1583],["Packing Method How to fit the characters into the font texture. ",1583],["Optimum Find the largest possible automatic font size that still fits all characters in the texture.Use this option to generate the final font texture.",1583],["Fast Compute character packing more quickly, but might use a smaller font size than the Optimum mode.Use this option when to test out font asset creation. ",1583],["Atlas Resolution Width and height of the font texture, in pixels.A resolution of 512 x 512 is fine for most fonts if you only include ASCII characters. Fonts with more characters may require larger resolutions, or multiple atlases. For an SDF font, a higher resolution produces finer gradients, and therefore higher quality text. ",1583],["Character Set The characters in a font file aren't included in the font Asset automatically. You must specify which ones you need. You can select a predefined character set, provide a list of characters to include, or include all of the characters in an existing font asset or text asset. ",1583],["ASCII Include the visible characters in the ASCII character set. ",1583],["Extended ASCII Include the visible characters in the extended ASCII character set. ",1583],["ASCII Lowercase Include only visible lower-case characters from the ASCII character set. ",1583],["ASCII Uppercase Include only visible upper-case characters from the ASCII character set. ",1583],["Numbers + Symbols Include only the visible numbers and symbols from the ASCII character set. ",1583],["Custom Range Include a range of characters that you define.Enter a sequence of decimal values, or ranges of values, to specify which characters to include.Use a hyphen to separate the first and last values of a range. Use commas to separate values and ranges (for example 32-126,160,8230).You can also choose an existing font asset to include the characters in that asset. ",1583],["Unicode Range (Hex) Include a range of characters that you define.Enter a sequence of unicode hexadecimal values, or ranges of values, to specify which characters to include.Use a hyphen to separate the first and last values of a range. Use commas to separate values and ranges (for example 20-7E,A0,2026).You can also choose an existing font asset to include the characters in that asset. ",1583],["Custom Characters Include a range of characters that you define.Enter a sequence of characters to specify which characters to include.Enter characters one after the other, with no spaces or delimiting characters in between, such as abc123*#%.You can also choose an existing font asset to include the characters in that asset. ",1583],["Characters from File Include all the characters in a text asset that you specify.Use this option when you want to save your character set. ",1583],["Render Mode Mode to render the font atlas. ",1583],["Get Kerning Pairs Copy the kerning data from the font.Kerning data is used to adjust the spacing between specific character pairs to produce a more visually pleasing result.Note: It isn't always possible to import kerning data. Some fonts store kerning pairs in their glyph positioning (GPOS) table, which is not supported. Other fonts do not store kerning pairs at all. ",1583],["Additional resources",1583],["Generate 2D visual content",1584],["You use the Mesh API or Vector API to generate 2D visual content onto a visual element.",1584],["You can use the Mesh API to draws custom shapes. The Mesh API is a tool for advanced users. If you only want to generate simple geometry, use the Vector API instead. Inspired by HTML Canvas, the Vector API draws 2D vector graphics, such as lines, arcs, and shapes.",1584],["",1584],["Use the Mesh API",1584],["To use the Mesh API, allocate a mesh with the MeshGenerationContext.Allocate method and then fill the vertices and indices. The MeshGenerationContext.Allocate method allocates and draws the specified number of vertices and indices required to express geometry for drawing the content of a visual element. For details on geometry generation conventions, see Vertex.position.",1584],["The following code snippet generates a single quad. It allocates vertices and indices, and provides coordinates in a clockwise direction:",1584],["```lang-csharp",1584],["void OnGenerateVisualContent(MeshGenerationContext mgc)",1584],["var mesh = mgc.Allocate(4, 6);",1584],["mesh.SetNextVertex(new Vertex() { position = new Vector3(p0.x, p0.y, Vertex.nearZ), tint = wireColor});",1584],["mesh.SetNextVertex(new Vertex() { position = new Vector3(p1.x, p1.y, Vertex.nearZ), tint = wireColor});",1584],["mesh.SetNextVertex(new Vertex() { position = new Vector3(p2.x, p2.y, Vertex.nearZ), tint = wireColor});",1584],["mesh.SetNextVertex(new Vertex() { position = new Vector3(p3.x, p3.y, Vertex.nearZ), tint = wireColor});",1584],["mesh.SetNextIndex(0);",1584],["mesh.SetNextIndex(1);",1584],["mesh.SetNextIndex(2);",1584],["mesh.SetNextIndex(0);",1584],["mesh.SetNextIndex(2);",1584],["mesh.SetNextIndex(3);",1584],["",1584],["Use the Vector API",1584],["To use the Vector API, access the Painter2D object from the MeshGenerationContext and generate paths with it. You can then use Stroke to draw lines or Fill to draw shapes.",1584],["To build paths, you issue commands that move a kind of \"virtual pen.\" For example, to generate the same quad in the Mesh API example, move the \"pen\" to the first position, and chain lines together. After the path is done, use Fill to build the shape.",1584],["``` lang-csharp",1584],["void DrawCanvas(MeshGenerationContext mgc)",1584],["var painter2D = mgc.painter2D;",1584],["painter2D.fillColor = wireColor;",1584],["painter2D.BeginPath();",1584],["painter2D.MoveTo(p0);",1584],["painter2D.LineTo(p1);",1584],["painter2D.LineTo(p2);",1584],["painter2D.LineTo(p3);",1584],["painter2D.ClosePath();",1584],["painter2D.Fill();",1584],["Line",1584],["The LineTo method generates a straight line from the current pen position to the provided one. Before you draw lines, define properties, such as the stroke color, the line width, the joins, and caps.",1584],["When you draw lines, the properties of LineJoin and LineCap control the styles of line joins and caps.",1584],["The following image illustrates the different styles of line caps and joins:",1584],["The following code snippet draws a zigzag line:",1584],["``` lang-csharp",1584],["painter2D.lineWidth = 10.0f;",1584],["painter2D.strokeColor = Color.white;",1584],["painter2D.lineJoin = LineJoin.Round;",1584],["painter2D.lineCap = LineCap.Round;",1584],["painter2D.BeginPath();",1584],["painter2D.MoveTo(new Vector2(100, 100));",1584],["painter2D.LineTo(new Vector2(120, 120));",1584],["painter2D.LineTo(new Vector2(140, 100));",1584],["painter2D.LineTo(new Vector2(160, 120));",1584],["painter2D.LineTo(new Vector2(180, 100));",1584],["painter2D.LineTo(new Vector2(200, 120));",1584],["painter2D.LineTo(new Vector2(220, 100));",1584],["painter2D.Stroke();",1584],["Arc",1584],["You can use the following methods to draw arcs:",1584],["\nThe Arc method generates an arc from the provided arc center, the radius, and the starting and ending angles.\n",1584],["\nThe ArcTo method generates an arc between two straight segments.\n",1584],["The following code snippet uses Arc to draws a sector with a border:",1584],["``` lang-csharp",1584],["painter2D.lineWidth = 2.0f;",1584],["painter2D.strokeColor = Color.red;",1584],["painter2D.fillColor = Color.blue;",1584],["painter2D.BeginPath();",1584],["// Move to the arc center",1584],["painter2D.MoveTo(new Vector2(100, 100));",1584],["// Draw the arc, and close the path",1584],["painter2D.Arc(new Vector2(100, 100), 50.0f, 10.0f, 95.0f);",1584],["painter2D.ClosePath();",1584],["// Fill and stroke the path",1584],["painter2D.Fill();",1584],["painter2D.Stroke();",1584],["The following code snippet uses ArcTo to draw an arc of the requested radius in the corner of the lines:",1584],["``` lang-csharp",1584],["painter2D.BeginPath();",1584],["painter2D.MoveTo(new Vector2(100, 100));",1584],["painter2D.ArcTo(new Vector2(150, 150), new Vector2(200, 100), 20.0f);",1584],["painter2D.LineTo(new Vector2(200, 100));",1584],["painter2D.Stroke();",1584],["Curves",1584],["You can use the following methods to draw curves:",1584],["\nThe BezierCurveTo method generates a cubic bezier curve by two control points and the final position of the cubic bezier.\n",1584],["\nThe QuadraticCurveTo method generates a quadratic bezier curve by a control point and the final position of the quadratic bezier.\n",1584],["The following code snippet uses BezierCurveTo to draw a bezier curve:",1584],["``` lang-csharp",1584],["painter2D.BeginPath();",1584],["painter2D.MoveTo(new Vector2(100, 100));",1584],["painter2D.BezierCurveTo(new Vector2(150, 150), new Vector2(200, 50), new Vector2(250, 100));",1584],["painter2D.Stroke();",1584],["The following code snippet uses QuadraticCurveTo to draw a quadratic curve:",1584],["``` lang-csharp",1584],["painter2D.BeginPath();",1584],["painter2D.MoveTo(new Vector2(100, 100));",1584],["painter2D.QuadraticCurveTo(new Vector2(150, 150), new Vector2(250, 100));",1584],["painter2D.Stroke();",1584],["Holes in fills",1584],["You can construct paths with holes in them when you do a Fill. When you call MoveTo, it starts a new sub-path. To create a hole, use the fill rule to overlap the various sub-paths with each other.",1584],["The fill rule determines how to fill the inside of a shape:",1584],["\nOddEven: Draw a ray from that point to infinity in any direction and count the number of path segments from the given shape that the ray crosses. If this number is odd, the point is inside; if even, the point is outside.\n",1584],["\nNonZero: Draw a ray from that point to infinity in any direction, and then examine the places where a segment of the shape crosses the ray. Start with a count of zero, and add one each time a path segment crosses the ray from left to right. Subtract one each time a path segment crosses the ray from right to left. After you count the crossings, if the result is zero, then the point is outside the path. Otherwise, it's inside.\n",1584],["The following code snippet creates a rectangle with a diamond shape hole in it:",1584],["``` lang-csharp",1584],["painter2D.BeginPath();",1584],["painter2D.MoveTo(new Vector2(10, 10));",1584],["painter2D.LineTo(new Vector2(300, 10));",1584],["painter2D.LineTo(new Vector2(300, 150));",1584],["painter2D.LineTo(new Vector2(10, 150));",1584],["painter2D.ClosePath();",1584],["painter2D.MoveTo(new Vector2(150, 50));",1584],["painter2D.LineTo(new Vector2(175, 75));",1584],["painter2D.LineTo(new Vector2(150, 100));",1584],["painter2D.LineTo(new Vector2(125, 75));",1584],["painter2D.ClosePath();",1584],["painter2D.Fill(FillRule.OddEven);",1584],["Additional resources",1584],["\nMeshGenerationContext\n",1584],["\nPainter2D\n",1584],["\nCreate a pie chart in the Editor and runtime UI\n",1584],["\nUse Mesh API to create a radial progress indicator\n",1584],["\nUse Vector API to create a radial progress indicator\n",1584],["Get started with runtime UI",1585],["You can create a runtime UI and display it in a game view by the following steps:",1585],["Create a UI Document (.uxml) with controls.",1585],["Add a UIDocument GameObject in the scene and add the UXML file as the source asset for it.",1585],["Create MonoBehaviours to define the behavior of your UI controls.",1585],["Try the following simple runtime UI example to get started. The example adds a label, a button, a toggle, and a text field in a scene. When you click the button, the Console window shows a message. When you select the toggle and click the button, the Console window shows how many times the buttons have been clicked. When you enter a text message in the text field, the Console window shows the message.",1585],["Prerequisites",1585],["\nUI Builder\n",1585],["\nUXML\n",1585],["\nVisual Tree\n",1585],["\nLabel\n",1585],["\nButton\n",1585],["\nToggle\n",1585],["\nTextField\n",1585],["You can find the completed files that this example creates in this GitHub repository.",1585],["",1585],["Create a UI Document with controls",1585],["Create a UI Document with a label, a button, and a Toggle. For information on how to add UI controls with UI Builder or UXML, refer to Get started with UI Toolkit.",1585],["Create a project in Unity Editor with any template.",1585],["Create a UI Document named SimpleRuntimeUI.uxml with the following contents:",1585],["```lang-xml",1585],["",1585],["xsi=\"http://www.w3.org/2001/XMLSchema-instance\" engine=\"UnityEngine.UIElements\" editor=\"UnityEditor.UIElements\"",1585],["noNamespaceSchemaLocation=\"../UIElementsSchema/UIElements.xsd\" editor-extension-mode=\"False\">",1585],["",1585],["",1585],["",1585],["",1585],["",1585],["",1585],["",1585],["",1585],["Set up the scene",1585],["Create a UIDocument GameObject in the SampleScene and add the UI Document as the source asset.",1585],["In the SampleScene, select GameObject > UI Toolkit > UI Document. This creates the following:",1585],["A UI Toolkit folder with a Panel Settings asset and a default runtime theme.",1585],["A GameObject with a UI Document component attached, and the UI Document component is connected to the Panel Settings asset.",1585],["Select the UIDocument GameObject in the hierarchy and drag SimpleRuntimeUI.uxml from your Project window to the Source Asset field of the UI Document component in the Inspector window. This references the source asset to the UXML file you created.",1585],["",1585],["Define the behavior of your UI controls",1585],["To add logic, create a C# script that derives from MonoBehaviour to access the controls that the UI Document component references.",1585],["Unity loads a UI Document component's source UXML when OnEnable is called on the component. To ensure the visual tree is loaded correctly, add logic to interact with the controls inside the OnEnable method.",1585],["Create a C# script named SimpleRuntimeUI.cs with the following contents:",1585],["```lang-csharp",1585],["using UnityEngine;",1585],["using UnityEngine.UIElements;",1585],["public class SimpleRuntimeUI : MonoBehaviour",1585],["private Button _button;",1585],["private Toggle _toggle;",1585],["private int _clickCount;",1585],["//Add logic that interacts with the UI controls in the OnEnable methods",1585],["private void OnEnable()",1585],["// The UXML is already instantiated by the UIDocument component",1585],["var uiDocument = GetComponent();",1585],["_button = uiDocument.rootVisualElement.Q(\"button\") as Button;",1585],["_toggle = uiDocument.rootVisualElement.Q(\"toggle\") as Toggle;",1585],["_button.RegisterCallback(PrintClickMessage);",1585],["var _inputFields = uiDocument.rootVisualElement.Q(\"input-message\");",1585],["_inputFields.RegisterCallback>(InputMessage);",1585],["private void OnDisable()",1585],["_button.UnregisterCallback(PrintClickMessage);",1585],["private void PrintClickMessage(ClickEvent evt)",1585],["++_clickCount;",1585],["Debug.Log($\"{\"button\"} was clicked!\" +",1585],["(_toggle.value ? \" Count: \" + _clickCount : \"\"));",1585],["public static void InputMessage(ChangeEvent evt)",1585],["Debug.Log($\"{evt.newValue} -> {evt.target}\");",1585],["Add SimpleRuntimeUI.cs as a component of the UIDocument GameObject.",1585],["Additional resources",1585],["Get started with text",1586],["UI Toolkit uses TextCore to render text, a technology based on TextMesh Pro. TextCore allows advanced styling capabilities and can render text clearly at various point sizes and resolutions. It takes advantage of Signed Distance Field (SDF) font rendering, which can generate font assets that look crisp even when transformed and magnified.",1586],["This example demonstrates how to style text in UI Builder, create and apply static and dynamic font assets, use rich text tags and custom style sheets to style text, and create a Panel Text Settings asset to manage the text settings for a panel.",1586],["Note**: For demonstration purposes, this guide uses a runtime UI. The instructions to create font assets and a style sheet also apply to Editor UI. However, you can’t change the default Panel Text Settings for Editor UI in the current release.",1586],["Prerequisites",1586],["\nUI Builder\n",1586],["\nUXML\n",1586],["\nRuntime UI\n",1586],["Create a Panel Text Settings asset",1586],["Start with a runtime UI and create a Panel Text Settings asset that manages text settings for the panel. You also create a Resources folder and sub-folders to store font assets and custom style sheets.",1586],["Follow the steps in Get started with Runtime UI to create a simple runtime UI.",1586],["In the Assets folder, create a Resources folder.",1586],["Right-click in the Assets\\UI Toolkit folder, and select Create > UI Toolkit > Text Settings to create a UITK Text Settings.asset. The Inspector window for UITK Text Settings.asset shows the default path names for the font asset, Text Style Sheets asset, Sprite asset, and Color Gradient presets.",1586],["In the Resources folder, create two folders named Fonts & Materials and Text Style Sheets.",1586],["",1586],["Style text with UI Builder",1586],["Use UI Builder to style the Toggle text to be bold and italic, and have a font size of 12px. For more information, see Style text with USS.",1586],["Double-click SimpleRuntimeUi.uxml to open it in UI Builder.",1586],["In the Inspector window for the Toggle control, select Text.",1586],["In the Font Style field, select B and I.",1586],["In the Size field, enter 12.",1586],["",1586],["Create a static font asset",1586],["Create a static font asset and apply it to the Button control. For a static font asset, you don't need to include the source font file in the build. However, you must generate atlas for all the characters in the Button's display text. The display text is This is a Button and you will add a * in the text, so you generate atlas for TBhinostua*.",1586],["Download the Lato font package from Google Fonts.",1586],["Unzip the font package file and place Lato-Regula.ttf in your project's Assets folder.",1586],["In the Inspector window for the font file, confirm the following:",1586],["\nInclude Font Data is enabled.\n",1586],["\nCharacter is set to Dynamic.\n",1586],["In the Project window, right-click Lato-Regula.ttf and select Create > Text > Font Asset. This creates a dynamic font asset called Lato-Regula SDF.asset.",1586],["In the Inspector window for Lato-Regula SDF.asset, set the Atlas Population Mode to Static.",1586],["Click Update Atlas Texture.",1586],["In the Font Asset Creator window, from the Character Set list, choose Custom Characters.",1586],["In the Custom Characters List box, enter TBhinostua*.",1586],["Click Generate Font Atlas.",1586],["Save your changes.",1586],["Place Lato-Regula SDF.asset in the Assets\\Resources\\Fonts & Materials folder.",1586],["Double-click SimpleRuntimeUi.uxml to open it in UI Builder.",1586],["In the Inspector window for the Button control, select Text > Font Asset > Lato-Regula SDF.",1586],["",1586],["Create a dynamic font asset",1586],["Create a dynamic font asset and apply it to the TextField control. For a dynamic font asset, you must include the source font file in the build. Import the source font file directly to the path set for font.",1586],["Download the Roboto font package from Google Fonts.",1586],["Unzip the font package file and place Roboto-Regular.ttf in your project's Assets\\Resources\\Fonts & Materials folder.",1586],["In the Inspector window for the font file, confirm the following:",1586],["\nInclude Font Data is enabled\n",1586],["\nCharacter is set to Dynamic\n",1586],["Right-click Roboto-Regular.ttf and select Create > Text > Font Asset. This creates a dynamic font asset called Roboto-Regular SDF.asset.",1586],["Double-click SimpleRuntimeUi.uxml to open it in UI Builder.",1586],["In the TextField control's Inspector window, select Text > Font Asset > Roboto-Regular SDF.",1586],["Style with rich text tags",1586],["Use rich text tags to style text in the Label control.",1586],["Note**: In the current release, rich text tags aren't supported for TextField.",1586],["Double-click SimpleRuntimeUi.uxml to open it in UI Builder.",1586],["In the Inspector window for the Label control , change Text to This is a <font-weight=700><size=2em><color=#FF0000>*Label*</color></size></font-weight>. This makes the word Label big, red, bold, and with an asterisk on either side of it.",1586],["Make sure Enable Rich Text is selected.",1586],["The label text looks like the following in the Viewport window:",1586],["",1586],["Style with style sheets",1586],["To apply the same style for Label to Button, create a custom style sheet, and apply the style to both words.",1586],["Right-click in the Assets\\Resources\\Text Style Sheets folder and select Create > Text > Text StyleSheet. This creates a Text StyleSheet.asset in the path you set in the Panel Text Settings asset.",1586],["In the Inspector window for Text StyleSheet.asset, do the following:",1586],["\nIn Name, enter ExampleStyle.\n",1586],["\nIn Opening Tags, enter <font-weight=700><size=2em><color=#FF0000>*.\n",1586],["\nIn Closing Tags, enter *</color></size></font-weight>.\n",1586],["In the Inspector window for UITK Text Settings.asset, from the Default Style Sheet list, select Text StyleSheet.",1586],["Double-click SimpleRuntimeUi.uxml to open it in UI Builder.",1586],["In the Label control's Inspector window, change Text to <s>This is a <style=\"ExampleStyle\">Label</style>.",1586],["Make sure Enable Rich Text is selected.",1586],["In the Button control's Inspector window, change Text to <s>This is a <style=\"ExampleStyle\">Button</style>.",1586],["Make sure Enable Rich Text is selected.",1586],["Enter Play mode and check the text in the runtime UI.",1586],["In the text field, enter some random characters. For a dynamic font asset, the font atlas are dynamically generated as you enter text in the text field.",1586],["In your project's Assets\\Resources\\Fonts & Materials folder, select Roboto-Regular SDF.asset.",1586],["In the Inspector window for Roboto-Regular SDF.asset, select Update Atlas Texture to open the Font Asset Creator window. If the atlas window is hidden, expend it. You should see the characters you entered in the atlas window.",1586],["Additional resources",1586],["Create a Custom Inspector",1587],["While Unity generates a default inspector for your MonoBehaviours and ScriptableObjects, there are good reasons to write a custom inspector, such as:",1587],["\nCreate a more user-friendly representation of script properties.\n",1587],["\nOrganize and group properties together.\n",1587],["\nDisplay or hide sections of the UI depending on the user's choices.\n",1587],["\nProvide additional information about the meaning of individual settings and properties.\n",1587],["Creating custom inspectors using UI Toolkit is similar to using Immediate Mode GUI (IMGUI), but UI Toolkit has several advantages, such as automatic data binding and automatic undo support. Where IMGUI creates the UI for the inspector entirely through script, UI Toolkit allows you to build the UI via script, visually in UI Builder, or a combination of both.",1587],["You can find the final source code of this guide at the bottom of this page here.",1587],["In this guide, you'll create a custom inspector for a MonoBehaviour class, using both scripts and UXML (using UI Builder) to create the UI. The custom inspector will also feature a custom property drawers.",1587],["Prerequisites",1587],["This guide is for developers familiar with Unity, but new to UI Toolkit. It's recommended to have a basic understanding of Unity and C# scripting.",1587],["This guide also references the following concepts:",1587],["\nVisual Tree\n",1587],["\nSerializedObject data binding\n",1587],["Content",1587],["Topics covered:**",1587],["\nUI Builder\n",1587],["\nFoldout\n",1587],["\nPropertyField\n",1587],["\nPropertyDrawer\n",1587],["\nInspectorElement\n",1587],["In this guide, you'll do the following:",1587],["\nCreating a new MonoBehaviour\n",1587],["\nCreating a custom inspector script\n",1587],["\nUsing UXML inside a custom inspector\n",1587],["\nUndo and data binding\n",1587],["\nCreating a default inspector\n",1587],["\nProperty fields\n",1587],["\nCreating a custom property drawer\n",1587],["Create a new MonoBehaviour",1587],["To begin, you need to create a custom class that you can create a custom inspector for, which is either a MonoBehaviour or a ScriptableObject. This guide works with a MonoBehaviour script that represents a simple car with properties, such as model and color.",1587],["Create a new script file Car.cs inside Assets/Scripts and copy the following code into it.",1587],["```lang-csharp",1587],["using UnityEngine;",1587],["public class Car : MonoBehaviour",1587],["public string m_Make = \"Toyota\";",1587],["public int m_YearBuilt = 1980;",1587],["public Color m_Color = Color.black;",1587],["Create a new GameObject in the scene and attach the Car script component to it.",1587],["Create a custom inspector script",1587],["To create a custom inspector for any serialized object, you need to create a class deriving from the Editor base class, and add the CustomEditor attribute to it. This attribute lets Unity know which class this custom inspector represents. The workflow for this in UI Toolkit is identical to that in Immediate Mode GUI (IMGUI).",1587],["Create a file Car_Inspector.cs inside Assets/Scripts/Editor and copy the following code into it.",1587],["```lang-csharp",1587],["using UnityEditor;",1587],["using UnityEditor.UIElements;",1587],["using UnityEngine.UIElements;",1587],["[CustomEditor(typeof(Car))]",1587],["public class Car_Inspector : Editor",1587],["Note ",1587],["",1587],["The custom inspector file must be inside the Editor folder, or inside an Editor-only assembly definition. Attempting to create standalone builds will fail, as the UnityEditor namespace isn't available. ",1587],["If you select your GameObject with the Car component at this point, Unity will still display the default inspector. You need to override CreateInspectorGUI() inside your Car_Inspector class to replace the default inspector.",1587],["The CreateInspectorGUI() function builds the visual tree for the inspector. The function needs to return a VisualElement containing the UI. The implementation of CreateInspectorGUI() below creates a blank new VisualElement and adds a label to it.",1587],["Override the CreateInspectorGUI() function inside your Car_Inspector script and copy the code below.",1587],["```lang-csharp",1587],["public override VisualElement CreateInspectorGUI()",1587],["// Create a new VisualElement to be the root of our inspector UI",1587],["VisualElement myInspector = new VisualElement();",1587],["// Add a simple label",1587],["myInspector.Add(new Label(\"This is a custom inspector\"));",1587],["// Return the finished inspector UI",1587],["return myInspector;",1587],["Use UXML inside a custom inspector",1587],["UI Toolkit allows you to add UI controls in two ways:",1587],["\nImplementing a script\n",1587],["\nLoading a UXML file containing a pre-made UI tree.\n",1587],["This section will be using the UI Builder to create a UXML file containing the UI, and use code to load and instantiate the UI from the UXML file.",1587],["Open the UI Builder via the menu Window > UI Toolkit > UI Builder and create a new Visual Tree Asset using the File > New menu entry inside the UI Builder.",1587],["UI Toolkit offers additional controls types when you're using it to create Editor windows and custom inspectors. By default, these Editor-only controls aren't visible in UI Builder. To make them available, you need to enable the checkbox Editor Extension Authoring.",1587],["Select the <unsaved file>*.uxml in the Hierarchy view in the UI Builder and enable the Editor Extension Authoring checkbox.",1587],["Note ",1587],["",1587],["If you use UI Toolkit to create Editor windows and custom inspectors, you can enable this setting by default in Project Settings > UI Builder. ",1587],["To add a control to the UI, select it from the Library and drag it into the Hierarchy above. You don't need to adjust the position or size of the new control unless you want to modify the automatic layout. By default, the label uses the entire width of the available panel and the height adjusts to the chosen font size.",1587],["Add a label control to the visual tree by dragging it from the Library to the Hierarchy.",1587],["You can change the text inside the label by selecting it and changing the text in the element's inspector on the right side of the UI Builder editor.",1587],["When the UI Builder saves a visual tree, it saves it as a Visual Tree Asset in the UXML format. You can learn more about this on the UXML documentation page.",1587],["The UXML below displays the code generated by UI Builder from the previous steps:",1587],["```lang-xml",1587],["",1587],["",1587],["",1587],["Save the visual tree you created under Asset > Script > Editor as Car_Inspector_UXML.uxml, using the File menu in UI Builder.",1587],["To use the UXML file you created inside your custom inspector, you need to load and clone it inside the CreateInspectorGUI() function and add it to the visual tree. To do this, you use the CloneTree method. You can pass any VisualElement as a parameter to act as a parent for the created elements.",1587],["Modify the CreateInspectorGUI() function to clone the visual tree inside the UXML file and use it in your custom inspector.",1587],["```lang-csharp",1587],["public override VisualElement CreateInspectorGUI()",1587],["// Create a new VisualElement to be the root of our inspector UI",1587],["VisualElement myInspector = new VisualElement();",1587],["// Add a simple label",1587],["myInspector.Add(new Label(\"This is a custom inspector\"));",1587],["// Load and clone a visual tree from UXML",1587],["VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath(\"Assets/Scripts/Editor/Car_Inspector_UXML.uxml\");",1587],["visualTree.CloneTree(myInspector);",1587],["// Return the finished inspector UI",1587],["return myInspector;",1587],["The inspector for the car component now displays two created labels: one through script, and one through UI Builder/UXML.",1587],["The code must load the Visual Tree Asset (UXML) file to clone the visual tree, and uses a hard-coded path and filename. However, hard-coded files aren't recommended, because if the file properties change, such as file path or name, it might invalidate the code.",1587],["The better solution to access the Visual Tree Asset is to use a reference to the asset file. The GUID inside the meta file stores the file reference. If you rename or move the file, the GUID remains unchanged, and Unity will still be able to find and load the file from its new location.",1587],["For Prefabs and ScriptableObjects, you can assign references to other files in the Editor. For script files, Unity allows setting a Default Reference. If you declare public fields of type VisualTreeAsset in a window class, the Inspector offers the ability to drag references onto the corresponding object fields. This means that any new instance of the Car_Inspector class populates with the references set to the corresponding VisualTreeAsset object. This is the recommended way of assigning UXML files to custom inspectors and Editor window scripts.",1587],["Create a public variable for a VisualTreeAsset in your script, and assign the Car_Inspector_UXML.uxml file as a default reference in the Editor.",1587],["```lang-csharp",1587],["public VisualTreeAsset m_InspectorXML;",1587],["Note ",1587],["",1587],["Default references only work in the Editor. They do not work with runtime components in standalone builds using the AddComponent() method. ",1587],["With the default reference set, you no longer need to load the VisualTreeAsset using the LoadAssetAtPath function. Instead, you can use CloneTree directly on the reference to your UXML file.",1587],["This reduces the code inside the CreateInspectorGUI() method to 3 lines.",1587],["```lang-csharp",1587],["public VisualTreeAsset m_InspectorXML;",1587],["public override VisualElement CreateInspectorGUI()",1587],["// Create a new VisualElement to be the root of our inspector UI",1587],["VisualElement myInspector = new VisualElement();",1587],["// Load from default reference",1587],["m_InspectorXML.CloneTree(myInspector);",1587],["// Return the finished inspector UI",1587],["return myInspector;",1587],["Undo and data binding",1587],["The purpose of this custom inspector is to display all properties of the Car class. When the user modifies any of the UI controls, the values inside the instance of the Car class should also change. To do so, you need to add UI controls to the visual tree and connect them to the individual properties of the class.",1587],["UI Toolkit supports linking of UI controls to serialized properties with a SerializedObject data binding. A control bound to a serialized property displays the current value of a property and updates the property value if the user changes it in the UI. You don't have to write code that retrieves a value from a control and writes it back to the property.",1587],["Add a TextField control for the car's m_Make property to the inspector using UI Builder.",1587],["To bind a control to a serialized property, assign the property to the binding-path field of the control. You can do this in code, UXML or UI Builder. The property matches by name, so make sure to check your spelling.",1587],["Bind the new TextField to the m_Make property in UI Builder.",1587],["Below is the UXML code for the inspector UI, including the data binding attribute.",1587],["```lang-uxml",1587],["",1587],["",1587],["",1587],["When you set the binding path of a control, you tell the control the name of the serialized property it should be linking to. But the control still needs to receive and instance of the serialized object that the property belongs to. You can use the VisualElement.Bind method to bind a serialized object such as a MonoBehaviour to an entire Visual Tree, and the individual controls will bind to the appropriate properties on that object.",1587],["When writing a custom inspector, binding is automatic. CreateInspectorGUI() does an implicit bind after you return your visual tree. To learn more, see SerializedObject data binding.",1587],["Because UI Toolkit is working with serialized properties, there is no additional code needed to support Undo/Redo functionality. It's automatically supported.",1587],["Property fields",1587],["To display properties of the Car class, you must add a control for each field. The control must match the property type so that it can be bound. For example, an int should be bound to an Integer field or an Integer Slider.",1587],["Instead of adding a specific control based on the property type, you can also make use of the generic PropertyField control. This control works for most types of serialized properties, and generates the default inspector UI for this property type.",1587],["Add a PropertyField control for the m_YearBuilt and the m_Color properties of the Car class. Assign the binding path for each and fill in the Label text.",1587],["The advantage of a PropertyField is the inspector UI will automatically adjust when you change the variable type inside your script. However, you can't get a preview of the control inside the UI Builder, since the control type needed is unknown until the visual tree is bound to a serialized object, and UI Toolkit can determine the property type.",1587],["Create a custom property drawer",1587],["A custom property drawer is a custom inspector UI for a custom serializable class. If that serializable class is part of another serialized object, the custom UI displays that property in the inspector. In UI Toolkit, the PropertyField control displays the custom property drawer for a field if one exists.",1587],["Create a new script Tire.cs in Assets/Scripts and copy the following code into the file:",1587],["```lang-csharp",1587],["[System.Serializable]",1587],["public class Tire",1587],["public float m_AirPressure = 21.5f;",1587],["public int m_ProfileDepth = 4;",1587],["Add a list of Tire to the Car class as shown in the code below:",1587],["```lang-csharp",1587],["public class Car : MonoBehaviour",1587],["public string m_Make = \"Toyota\";",1587],["public int m_YearBuilt = 1980;",1587],["public Color m_Color = Color.black;",1587],["// This car has four tires",1587],["public Tire[] m_Tires = new Tire[4];",1587],["The PropertyField control works with all standard property types, but it also supports custom serializable classes and arrays. To display the properties of the car's tires, add another PropertyField in UI Builder and bind it to m_Tires.",1587],["Add a PropertyField control for the m_Tires property.",1587],["You can find the UXML code from Car_Inspector_UXML.uxml generated for the current inspector UI below:",1587],["```lang-uxml",1587],["",1587],["",1587],["",1587],["",1587],["",1587],["",1587],["A custom property drawer allows you to customize the look of the individual Tire elements in the list. Instead of deriving from the Editor base class, custom property drawers derive from the PropertyDrawer class. To create UI for the custom property, you need to override the CreatePropertyGUI method.",1587],["Create a new script Tire_PropertyDrawer.cs inside the folder Assets/Scripts/Editor and copy the code below into it.",1587],["```lang-csharp",1587],["using UnityEditor;",1587],["using UnityEditor.UIElements;",1587],["using UnityEngine.UIElements;",1587],["[CustomPropertyDrawer(typeof(Tire))]",1587],["public class Tire_PropertyDrawer : PropertyDrawer",1587],["public override VisualElement CreatePropertyGUI(SerializedProperty property)",1587],["// Create a new VisualElement to be the root the property UI",1587],["var container = new VisualElement();",1587],["// Create drawer UI using C#",1587],["// ...",1587],["// Return the finished UI",1587],["return container;",1587],["You can use code and UXML to create the UI for the property, like in a customized inspector. This examples uses code to create the custom UI.",1587],["Create custom UI for the Tire class property drawer by extending the CreatePropertyGUI method as shown below.",1587],["```lang-csharp",1587],["public override VisualElement CreatePropertyGUI(SerializedProperty property)",1587],["// Create a new VisualElement to be the root the property UI",1587],["var container = new VisualElement();",1587],["// Create drawer UI using C#",1587],["var popup = new UnityEngine.UIElements.PopupWindow();",1587],["popup.text = \"Tire Details\";",1587],["popup.Add(new PropertyField(property.FindPropertyRelative(\"m_AirPressure\"), \"Air Pressure (psi)\"));",1587],["popup.Add(new PropertyField(property.FindPropertyRelative(\"m_ProfileDepth\"), \"Profile Depth (mm)\"));",1587],["container.Add(popup);",1587],["// Return the finished UI",1587],["return container;",1587],["For more information on property drawers, please see the documentation of PropertyDrawer.",1587],["Note**: Unity does not support the use of custom property drawers within default inspectors, as Unity makes default inspectors with IMGUI. If you wish to create a custom property drawer, you must also create a custom inspector for the class that uses that property, as this guide does for Tire and Car.",1587],["Create a default inspector",1587],["During development of a custom inspector it's helpful to keep access to the default inspector. With UI Toolkit, it's simple to add the default inspector UI to your custom UI.",1587],["Add a Foldout control to your UI in UI Builder, name it Default_Inspector and assign a label text:",1587],["You will use UI Builder to create the foldout, but not the inspector. The content of the default inspector generates inside the inspector script and attaches to the foldout control via code.",1587],["To attach the default inspector UI to the foldout you created in the UI Builder, you must obtain a reference to it. You can retrieve the visual element of the foldout from the visual tree of your inspector. This is done using the UQuery family of APIs. You can retrieve individual elements inside your UI by name, USS class or by type, or a combination of these attributes.",1587],["Get a reference to the Foldout control inside your CreateInspectorGUI method, using the name you set in UI Builder.",1587],["```lang-csharp",1587],["// Get a reference to the default inspector foldout control",1587],["VisualElement inspectorFoldout = myInspector.Q(\"Default_Inspector\");",1587],["The FillDefaultInspector method of the InspectorElement creates a visual tree with a default inspector for a given serialized object and attaches it to the parent visual element passed into the method as a parameter.",1587],["Create and attach a default inspector to the foldout using the code below:",1587],["```lang-csharp",1587],["// Attach a default inspector to the foldout",1587],["InspectorElement.FillDefaultInspector(inspectorFoldout, serializedObject, this);",1587],["Final scripts",1587],["Below you can find the full source code for all files created in this guide.",1587],["Car.cs",1587],["```lang-csharp",1587],["using UnityEngine;",1587],["public class Car : MonoBehaviour",1587],["public string m_Make = \"Toyota\";",1587],["public int m_YearBuilt = 1980;",1587],["public Color m_Color = Color.black;",1587],["// This car has four tires",1587],["public Tire[] m_Tires = new Tire[4];",1587],["Car_Inspector.cs",1587],["```lang-csharp",1587],["using UnityEditor;",1587],["using UnityEditor.UIElements;",1587],["using UnityEngine.UIElements;",1587],["[CustomEditor(typeof(Car))]",1587],["public class Car_Inspector : Editor",1587],["public VisualTreeAsset m_InspectorXML;",1587],["public override VisualElement CreateInspectorGUI()",1587],["// Create a new VisualElement to be the root of our inspector UI",1587],["VisualElement myInspector = new VisualElement();",1587],["// Load from default reference",1587],["m_InspectorXML.CloneTree(myInspector);",1587],["// Get a reference to the default inspector foldout control",1587],["VisualElement inspectorFoldout = myInspector.Q(\"Default_Inspector\");",1587],["// Attach a default inspector to the foldout",1587],["InspectorElement.FillDefaultInspector(inspectorFoldout, serializedObject, this);",1587],["// Return the finished inspector UI",1587],["return myInspector;",1587],["Car_Inspector_UXML.uxml",1587],["```lang-uxml",1587],["",1587],["",1587],["",1587],["",1587],["",1587],["",1587],["",1587],["Tire.cs",1587],["```lang-csharp",1587],["[System.Serializable]",1587],["public class Tire",1587],["public float m_AirPressure = 21.5f;",1587],["public int m_ProfileDepth = 4;",1587],["Tire_Property.cs",1587],["```lang-csharp",1587],["using UnityEditor;",1587],["using UnityEditor.UIElements;",1587],["using UnityEngine.UIElements;",1587],["[CustomPropertyDrawer(typeof(Tire))]",1587],["public class Tire_PropertyDrawer : PropertyDrawer",1587],["public override VisualElement CreatePropertyGUI(SerializedProperty property)",1587],["// Create a new VisualElement to be the root the property UI",1587],["var container = new VisualElement();",1587],["// Create drawer UI using C#",1587],["var popup = new UnityEngine.UIElements.PopupWindow();",1587],["popup.text = \"Tire Details\";",1587],["popup.Add(new PropertyField(property.FindPropertyRelative(\"m_AirPressure\"), \"Air Pressure (psi)\"));",1587],["popup.Add(new PropertyField(property.FindPropertyRelative(\"m_ProfileDepth\"), \"Profile Depth (mm)\"));",1587],["container.Add(popup);",1587],["// Return the finished UI",1587],["return container;",1587],["Create a custom Editor window",1588],["Custom Editor windows allow you to extend Unity by implementing your own editors and workflows. This guide covers creating an Editor window through code, reacting to user input, making the UI resizable and handling hot-reloading.",1588],["In this tutorial, you will create a sprite browser, which finds and displays all sprites inside the project, and shows them as a list. Selecting a sprite in the list will display the image on the right side of the window.",1588],["You can find the completed example in the Editor window script section.",1588],["Prerequisites",1588],["This guide is for developers familiar with Unity, but new to UI Toolkit. It's recommended to have a basic understanding of Unity and C# scripting.",1588],["This guide also references the following concepts:",1588],["\nVisual Tree\n",1588],["\nControls\n",1588],["Content",1588],["Controls used in this guide:**",1588],["\nListView\n",1588],["\nTwoPaneSplitView\n",1588],["\nLabel\n",1588],["\nImage\n",1588],["In this guide, you'll do the following:",1588],["\nCreate the Editor window script.\n",1588],["\nCreate a menu entry to open the window.\n",1588],["\nAdd UI controls to the window.\n",1588],["\nWrite code to respond to user selections.\n",1588],["\nMake the UI resizable.\n",1588],["\nSupport hot-reloading in the Editor.\n",1588],["Create the Editor window script",1588],["Tip ",1588],["",1588],["You can generate the necessary code to create an Editor window script in the Unity Editor. From the Project window, right-click and select Create > UI Toolkit > Editor Window. For this guide please disable the UXML and USS checkboxes. You might also have to add additional using directives at the top of the file, as shown below. ",1588],["You can create Editor windows through C# scripts in your project. A custom Editor window is a class that derives from the EditorWindow class.",1588],["Create a new script file MyCustomEditor.cs under the Assets/Editor folder. Paste the following code into the script:",1588],["```lang-csharp",1588],["using System.Collections.Generic;",1588],["using System.Linq;",1588],["using UnityEditor;",1588],["using UnityEngine;",1588],["using UnityEngine.UIElements;",1588],["public class MyCustomEditor : EditorWindow",1588],["Note ",1588],["",1588],["This is an Editor-only window that includes the UnityEditor namespace, so the file must be placed under the Editor folder, or inside an Editor-only Assembly Definition. ",1588],["Create a menu entry to open the window",1588],["To open the new Editor window, you must create an entry in the Editor menu.",1588],["Add the MenuItem attribute to a static method. In this example, the name of the static method is ShowMyEditor().",1588],["Inside ShowMyEditor(), call the EditorWindow.GetWindow() method to create and display the window. It returns an EditorWindow object. To set the window title, change the EditorWindow.titleContent property.",1588],["Add the following function inside the MyCustomEditor class created in the previous step.",1588],["```lang-csharp",1588],["[MenuItem(\"Tools/My Custom Editor\")]",1588],["public static void ShowMyEditor()",1588],["// This method is called when the user selects the menu item in the Editor",1588],["EditorWindow wnd = GetWindow();",1588],["wnd.titleContent = new GUIContent(\"My Custom Editor\");",1588],["Test your new window by opening it via the Unity Editor menu Tools > My Custom Editor.",1588],["Add UI controls to the window",1588],["UI Toolkit uses the CreateGUI method to add controls to Editor UI, and Unity calls the CreateGUI method automatically when the window needs to display. This method works the same way as methods such as Awake or Update.",1588],["You can add UI controls to the UI by adding visual elements to the visual tree. The VisualElement.Add() method is used to add children to an existing visual element. The visual tree of an Editor window is accessed via the rootvisualElement property.",1588],["To get started, add a CreateGUI() function to your custom Editor class and add a 'Hello' label:",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["rootVisualElement.Add(new Label(\"Hello\"));",1588],["Note ",1588],["",1588],["To present a list of sprites, use AssetDatabase functions to find all sprites in a project. ",1588],["Replace the code inside CreateGUI() with the code below to enumerate all sprites inside the project.",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["// Get a list of all sprites in the project",1588],["var allObjectGuids = AssetDatabase.FindAssets(\"t:Sprite\");",1588],["var allObjects = new List();",1588],["foreach (var guid in allObjectGuids)",1588],["allObjects.Add(AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)));",1588],["For the sprite browser, the top-level visual element will be a TwoPaneSplitView. This control splits the available window space into two panes: one fixed-size and one flexible-size. When you resize the window, only the flexible pane resizes, while the fixed-size pane remains the same size.",1588],["For the TwoPaneSplitView control to work, it needs to have exactly two children. Add code inside CreateGUI() to create a TwoPaneSplitview, then add two child elements as placeholders for different controls.",1588],["```lang-csharp",1588],["// Create a two-pane view with the left pane being fixed with",1588],["var splitView = new TwoPaneSplitView(0, 250, TwoPaneSplitViewOrientation.Horizontal);",1588],["// Add the view to the visual tree by adding it as a child to the root element",1588],["rootVisualElement.Add(splitView);",1588],["// A TwoPaneSplitView always needs exactly two child elements",1588],["var leftPane = new VisualElement();",1588],["splitView.Add(leftPane);",1588],["var rightPane = new VisualElement();",1588],["splitView.Add(rightPane);",1588],["The image below shows the custom window with the two empty panels. The divider bar can be moved.",1588],["For the sprite browser, the left pane will be a list containing the names of all sprites found in the project. The ListView control derives from VisualElement, so it's easy to modify the code to use a ListView instead of a blank VisualElement.",1588],["Modify the code inside the CreateGUI() function to create a ListView control for the left pane instead of a VisualElement.",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["...",1588],["var leftPane = new ListView();",1588],["splitView.Add(leftPane);",1588],["...",1588],["The ListView control displays a list of selectable items. It's optimized to create only enough elements to cover the visible area, and pool and recycle the visual elements as you scroll the list. This optimizes performance and reduces the memory footprint, even in lists that have many items.",1588],["To take advantage of this, the ListView must be properly initialized with the following:",1588],["\nAn array of data items.\n",1588],["\nA callback function to create an individual visual list entry in the list.\n",1588],["\nA bind function that initializes a visual list entry with an item from the data array.\n",1588],["You can create complex UI structures for each element in the list, but this example uses a simple text label to display the sprite name.",1588],["Add code to the bottom CreateGUI() function that initializes the ListView.",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["...",1588],["// Initialize the list view with all sprites' names",1588],["leftPane.makeItem = () => new Label();",1588],["leftPane.bindItem = (item, index) => { (item as Label).text = allObjects[index].name; };",1588],["leftPane.itemsSource = allObjects;",1588],["The image below shows the Editor window with a scrollable list view and selectable items.",1588],["For reference, below is the current code for the CreateGUI() function in its entirety:",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["// Get a list of all sprites in the project",1588],["var allObjectGuids = AssetDatabase.FindAssets(\"t:Sprite\");",1588],["var allObjects = new List();",1588],["foreach (var guid in allObjectGuids)",1588],["allObjects.Add(AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)));",1588],["// Create a two-pane view with the left pane being fixed with",1588],["var splitView = new TwoPaneSplitView(0, 250, TwoPaneSplitViewOrientation.Horizontal);",1588],["// Add the panel to the visual tree by adding it as a child to the root element",1588],["rootVisualElement.Add(splitView);",1588],["// A TwoPaneSplitView always needs exactly two child elements",1588],["var leftPane = new ListView();",1588],["splitView.Add(leftPane);",1588],["var rightPane = new VisualElement();",1588],["splitView.Add(rightPane);",1588],["// Initialize the list view with all sprites' names",1588],["leftPane.makeItem = () => new Label();",1588],["leftPane.bindItem = (item, index) => { (item as Label).text = allObjects[index].name; };",1588],["leftPane.itemsSource = allObjects;",1588],["Add callbacks",1588],["When you select a sprite from the list in the left pane, its image must display on the right pane. To do this you need to provide a callback function that the ListView can call when the user makes a selection. The ListView control has an onSelectionChange property for this purpose.",1588],["The callback function receives a list that contains the item or items chosen by the user. It's possible to configure the ListView to allow multi-selection, but by default the selection mode is limited to a single item.",1588],["Add a callback function when the user changes the selection from the list in the left pane.",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["...",1588],["// React to the user's selection",1588],["leftPane.onSelectionChange += OnSpriteSelectionChange;",1588],["private void OnSpriteSelectionChange(IEnumerable selectedItems)",1588],["Note ",1588],["",1588],["If you lose your window and the menu doesn't reopen, close all floating panels through the menu under Window > Panels > Close all floating panels, or reset your window layout. ",1588],["To display the image of the selected sprite on the right side of the window, the function needs to be able to access the right-hand pane of the TwoPaneSplitView. You can make this control a member variable of the class to be able to access it inside the callback function.",1588],["Turn the rightPane created inside CreateGUI() into a member variable.",1588],["```lang-csharp",1588],["private VisualElement m_RightPane;",1588],["public void CreateGUI()",1588],["...",1588],["m_RightPane = new VisualElement();",1588],["splitView.Add(m_RightPane);",1588],["...",1588],["With a reference to the TwoPaneSplitView, you can access the right pane via the flexedPane property.",1588],["Before creating a new Image control on the right pane, use VisualElement.Clear() to remove the previous image. This method removes all children from an existing visual element.",1588],["Clear the right pane from all previous content and create a new Image control for the selected sprite.",1588],["```lang-csharp",1588],["private void OnSpriteSelectionChange(IEnumerable selectedItems)",1588],["// Clear all previous content from the pane",1588],["m_RightPane.Clear();",1588],["// Get the selected sprite",1588],["var selectedSprite = selectedItems.First() as Sprite;",1588],["if (selectedSprite == null)",1588],["return;",1588],["// Add a new Image control and display the sprite",1588],["var spriteImage = new Image();",1588],["spriteImage.scaleMode = ScaleMode.ScaleToFit;",1588],["spriteImage.sprite = selectedSprite;",1588],["// Add the Image control to the right-hand pane",1588],["m_RightPane.Add(spriteImage);",1588],["Note ",1588],["",1588],["Make sure to include using System.Linq; at the top of your file to use the First() method on the selectedItems parameter. ",1588],["Test your sprite browser in the Editor. The image below shows the custom Editor window in action.",1588],["Make the UI resizable",1588],["Editor windows are resizable within their minimum and maximum allowed dimensions. You can set these dimensions in C# when creating the window by writing to the EditorWindow.minSize and EditorWindow.maxSize properties. To prevent a window from resizing, assign the same dimension to both properties.",1588],["Limit the size of your custom editor window by adding the following lines to the bottom of the ShowMyEditor() function:",1588],["```lang-csharp",1588],["[MenuItem(\"Tools/My Custom Editor\")]",1588],["public static void ShowMyEditor()",1588],["// This method is called when the user selects the menu item in the Editor",1588],["EditorWindow wnd = GetWindow();",1588],["wnd.titleContent = new GUIContent(\"My Custom Editor\");",1588],["// Limit size of the window",1588],["wnd.minSize = new Vector2(450, 200);",1588],["wnd.maxSize = new Vector2(1920, 720);",1588],["For situations where the window dimensions are too small to display the entire UI, you must use a ScrollView element to provide scrolling for the window, or the content might become inaccessible.",1588],["The ListView on the left pane is using a ScrollView internally, but the right pane is a regular VisualElement. Changing this to a ScrollView control automatically displays scrollbars when the window is too small to fit the entire image in its original size.",1588],["Exchange the right pane VisualElement for a ScrollView with bidirectional scrolling.",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["...",1588],["m_RightPane = new ScrollView(ScrollViewMode.VerticalAndHorizontal);",1588],["splitView.Add(m_RightPane);",1588],["...",1588],["The image below shows the sprite browser window with scrollbars.",1588],["Close and reopen your custom Editor window to test out the new size limits.",1588],["Note ",1588],["",1588],["In Unity 2021.2 and up, Unity doesn't respect the minSize and maxSize properties when the window is docked. This allows the user to resize dock areas without limitations. Consider creating a ScrollView as one of your top-level elements and place all UI inside of it to make your UI as responsive as possible. ",1588],["Support hot-reloading in the Editor",1588],["A proper Editor window must work with the hot-reloading workflow that happens in the Unity Editor. A C# domain reload occurs when scripts recompile or when the Editor enters Play mode. You can learn more about this topic on the Script Serialization page.",1588],["To see this in action in the Editor window you just created, open the sprite browser, select a sprite, and then enter Play mode. The window resets, and the selection disappears.",1588],["Since VisualElement objects aren't serializable, the UI must be recreated every time a reload happens in Unity. This means that the CreateGUI() method is invoked after the reload has completed. This lets you restore the UI state before the reload by storing necessary data in your EditorWindow class.",1588],["Add a member variable to save the selected index in the sprite list.",1588],["```lang-csharp",1588],["public class MyCustomEditor : EditorWindow",1588],["[SerializeField] private int m_SelectedIndex = -1;",1588],["....",1588],["When you make a selection, the new selection index of the list view can be stored inside this member variable. You can restore the selection index during creation of the UI inside the CreateGUI() function.",1588],["Add code to the end of the CreateGUI() function to store and restore the selected list index.",1588],["```lang-csharp",1588],["public void CreateGUI()",1588],["...",1588],["// Restore the selection index from before the hot reload",1588],["leftPane.selectedIndex = m_SelectedIndex;",1588],["// Store the selection index when the selection changes",1588],["leftPane.onSelectionChange += (items) => { m_SelectedIndex = leftPane.selectedIndex; };",1588],["Select a sprite from the list and enter Play mode to test hot-reloading.",1588],["",1588],["Editor window script",1588],["The code below is the final script of the Editor window created during this guide. You can paste the code directly into a file called MyCustomEditor.cs inside the Assets/Editor folder to see it in the Unity Editor.",1588],["```lang-csharp",1588],["using System.Collections.Generic;",1588],["using System.Linq;",1588],["using UnityEditor;",1588],["using UnityEngine;",1588],["using UnityEngine.UIElements;",1588],["public class MyCustomEditor : EditorWindow",1588],["[SerializeField] private int m_SelectedIndex = -1;",1588],["private VisualElement m_RightPane;",1588],["[MenuItem(\"Tools/My Custom Editor\")]",1588],["public static void ShowMyEditor()",1588],["// This method is called when the user selects the menu item in the Editor",1588],["EditorWindow wnd = GetWindow();",1588],["wnd.titleContent = new GUIContent(\"My Custom Editor\");",1588],["// Limit size of the window",1588],["wnd.minSize = new Vector2(450, 200);",1588],["wnd.maxSize = new Vector2(1920, 720);",1588],["public void CreateGUI()",1588],["// Get a list of all sprites in the project",1588],["var allObjectGuids = AssetDatabase.FindAssets(\"t:Sprite\");",1588],["var allObjects = new List();",1588],["foreach (var guid in allObjectGuids)",1588],["allObjects.Add(AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)));",1588],["// Create a two-pane view with the left pane being fixed with",1588],["var splitView = new TwoPaneSplitView(0, 250, TwoPaneSplitViewOrientation.Horizontal);",1588],["// Add the panel to the visual tree by adding it as a child to the root element",1588],["rootVisualElement.Add(splitView);",1588],["// A TwoPaneSplitView always needs exactly two child elements",1588],["var leftPane = new ListView();",1588],["splitView.Add(leftPane);",1588],["m_RightPane = new ScrollView(ScrollViewMode.VerticalAndHorizontal);",1588],["splitView.Add(m_RightPane);",1588],["// Initialize the list view with all sprites' names",1588],["leftPane.makeItem = () => new Label();",1588],["leftPane.bindItem = (item, index) => { (item as Label).text = allObjects[index].name; };",1588],["leftPane.itemsSource = allObjects;",1588],["// React to the user's selection",1588],["leftPane.onSelectionChange += OnSpriteSelectionChange;",1588],["// Restore the selection index from before the hot reload",1588],["leftPane.selectedIndex = m_SelectedIndex;",1588],["// Store the selection index when the selection changes",1588],["leftPane.onSelectionChange += (items) => { m_SelectedIndex = leftPane.selectedIndex; };",1588],["private void OnSpriteSelectionChange(IEnumerable selectedItems)",1588],["// Clear all previous content from the pane",1588],["m_RightPane.Clear();",1588],["// Get the selected sprite",1588],["var selectedSprite = selectedItems.First() as Sprite;",1588],["if (selectedSprite == null)",1588],["return;",1588],["// Add a new Image control and display the sprite",1588],["var spriteImage = new Image();",1588],["spriteImage.scaleMode = ScaleMode.ScaleToFit;",1588],["spriteImage.sprite = selectedSprite;",1588],["// Add the Image control to the right-hand pane",1588],["m_RightPane.Add(spriteImage);",1588],["Create a list view runtime UI",1589],["Version**: 2021.3+",1589],["This example demonstrates how to create a list view runtime UI. This example uses the UXML and USS files directly to create the structure and style of the UI. If you are new to UI Toolkit and want to use UI Builder to create the UI, see Create an example UI with UI Builder.",1589],["Example overview",1589],["This example creates a simple character selection screen. When you click the name of a character from a list on the left, the detail of the character appears on the right.",1589],["You can find the completed files that this example creates in this GitHub repository.",1589],["Prerequisites",1589],["Create the main UI Document",1589],["Create the main view UI Document and a USS file to style the visual elements. Add two visual elements as containers in the UI Document: one that contains the list of character names and another that contains the selected character's details.",1589],["Create a project in Unity with any template.",1589],["In the Project window, create a folder named UI to store all the UI Document and Style Sheet files.",1589],["In the UI folder, create a UI Document named MainView.uxml with the following content:",1589],["```lang-xml",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["In the UI folder, create a USS style sheet named MainView.uss with the following content:",1589],["```lang-css",1589],["background {",1589],["flex-grow: 1;",1589],["align-items: center;",1589],["justify-content: center;",1589],["background-color: rgb(115, 37, 38);",1589],["main-container {",1589],["flex-direction: row;",1589],["height: 350px;",1589],["character-list {",1589],["width: 230px;",1589],["border-color: rgb(49, 26, 17);",1589],["border-width: 4px;",1589],["background-color: rgb(110, 57, 37);",1589],["border-radius: 15px;",1589],["margin-right: 6px;",1589],["character-name {",1589],["-unity-font-style: bold;",1589],["font-size: 18px;",1589],["CharacterClass {",1589],["margin-top: 2px;",1589],["margin-bottom: 8px;",1589],["padding-top: 0;",1589],["padding-bottom: 0;",1589],["right-container{",1589],["justify-content: space-between;",1589],["align-items: flex-end;",1589],["details-container{",1589],["align-items: center;",1589],["background-color: rgb(170, 89, 57);",1589],["border-width: 4px;",1589],["border-color: rgb(49, 26, 17);",1589],["border-radius: 15px;",1589],["width: 252px;",1589],["justify-content: center;",1589],["padding: 8px;",1589],["height: 163px;",1589],["details{",1589],["border-color: rgb(49, 26, 17);",1589],["border-width: 2px;",1589],["height: 120px;",1589],["width: 120px;",1589],["border-radius: 13px;",1589],["padding: 4px;",1589],["background-color: rgb(255, 133, 84);",1589],["character-portrait{",1589],["flex-grow: 1;",1589],["-unity-background-scale-mode: scale-to-fit;",1589],["Create a list entry UI Document",1589],["Create a UI Document and a Style Sheet for the individual entries in the list. The character list entry consists of a colored background frame and the character's name.",1589],["In the UI folder, create a UI Document named ListEntry.uxml with the following content:",1589],["```lang-xml",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["",1589],["In the UI folder, create a Style Sheet file named ListEntry.uss with the following content:",1589],["```lang-css",1589],["list-entry {",1589],["height: 41px;",1589],["align-items: flex-start;",1589],["justify-content: center;",1589],["padding-left: 10px;",1589],["background-color: rgb(170, 89, 57);",1589],["border-color: rgb(49, 26, 17);",1589],["border-width: 2px;",1589],["border-radius: 15px;",1589],["character-name {",1589],["-unity-font-style: bold;",1589],["font-size: 18px;",1589],["color: rgb(49, 26, 17);",1589],["Create sample data to display",1589],["Create sample data to fill the character list in the UI. For the character list, create a class that holds a character name, class, and a portrait image.",1589],["In the Asset folder, create a folder named Scripts to store your C# scripts.",1589],["In the Scripts folder, create a C# script named CharacterData.cs with the following content:",1589],["```lang-csharp",1589],["using UnityEngine;",1589],["public enum ECharacterClass",1589],["Knight, Ranger, Wizard",1589],["[CreateAssetMenu] //This adds an entry to the Create menu",1589],["public class CharacterData : ScriptableObject",1589],["public string CharacterName;",1589],["public ECharacterClass Class;",1589],["public Sprite PortraitImage;",1589],["This creates a Character Data item in the Assets > Create menu.",1589],["In the Assets folder, create a folder named Resources.",1589],["In the Resources folder, create a folder named Characters to store all your sample character data.",1589],["In the Characters folder, right-click and select Create > Character Data to create an instance of the ScriptableObject.",1589],["Create more CharacterData instances and fill them with placeholder data.",1589],["Set up the scene",1589],["Create a UIDocument GameObject in the SampleScene and add the UI Document as the source asset.",1589],["In the SampleScene, select GameObject > UI Toolkit > UI Document.",1589],["Select the UIDocument GameObject in the Hierarchy window.",1589],["Drag MainView.uxml from your Project window to the Source Asset field of the UI Document component in the Inspector window. This references the source asset to the UXML file.",1589],["Create controllers for the list entry and the main view",1589],["Create two C# scripts with the following classes:",1589],["A CharacterListEntryController class to display the data of a character instance in the UI of the list entry. It needs to access the label for the character name and set it to display the name of the given character instance.",1589],["A CharacterListController class for the character list in the main view, and a MonoBehaviour script that instantiates and assigns it to the visual tree.",1589],["Note**: The CharacterListEntryController class isn't a MonoBehaviour. Since the visual elements in UI Toolkit aren't GameObjects, you can't attach components to them. Instead, you attach the class to the userData property in the CharacterListController class.",1589],["In the Scripts folder, create a C# script named CharacterListEntryController.cs with the following contents:",1589],["```lang-csharp",1589],["using UnityEngine.UIElements;",1589],["public class CharacterListEntryController",1589],["Label NameLabel;",1589],["//This function retrieves a reference to the",1589],["//character name label inside the UI element.",1589],["public void SetVisualElement(VisualElement visualElement)",1589],["NameLabel = visualElement.Q(\"character-name\");",1589],["//This function receives the character whose name this list",1589],["//element displays. Since the elements listed",1589],["//in a ListView are pooled and reused, it's necessary to",1589],["//have a Set function to change which character's data to display.",1589],["public void SetCharacterData(CharacterData characterData)",1589],["NameLabel.text = characterData.CharacterName;",1589],["In the Scripts folder, create a C# script named CharacterListController.cs with the following content:",1589],["```lang-csharp",1589],["using System.Collections.Generic;",1589],["using UnityEngine;",1589],["using UnityEngine.UIElements;",1589],["public class CharacterListController",1589],["// UXML template for list entries",1589],["VisualTreeAsset ListEntryTemplate;",1589],["// UI element references",1589],["ListView CharacterList;",1589],["Label CharClassLabel;",1589],["Label CharNameLabel;",1589],["VisualElement CharPortrait;",1589],["public void InitializeCharacterList(VisualElement root, VisualTreeAsset listElementTemplate)",1589],["EnumerateAllCharacters();",1589],["// Store a reference to the template for the list entries",1589],["ListEntryTemplate = listElementTemplate;",1589],["// Store a reference to the character list element",1589],["CharacterList = root.Q(\"character-list\");",1589],["// Store references to the selected character info elements",1589],["CharClassLabel = root.Q(\"character-class\");",1589],["CharNameLabel = root.Q(\"character-name\");",1589],["CharPortrait = root.Q(\"character-portrait\");",1589],["FillCharacterList();",1589],["// Register to get a callback when an item is selected",1589],["CharacterList.onSelectionChange += OnCharacterSelected;",1589],["List AllCharacters;",1589],["void EnumerateAllCharacters()",1589],["AllCharacters = new List();",1589],["AllCharacters.AddRange(Resources.LoadAll(\"Characters\"));",1589],["void FillCharacterList()",1589],["// Set up a make item function for a list entry",1589],["CharacterList.makeItem = () =>",1589],["// Instantiate the UXML template for the entry",1589],["var newListEntry = ListEntryTemplate.Instantiate();",1589],["// Instantiate a controller for the data",1589],["var newListEntryLogic = new CharacterListEntryController();",1589],["// Assign the controller script to the visual element",1589],["newListEntry.userData = newListEntryLogic;",1589],["// Initialize the controller script",1589],["newListEntryLogic.SetVisualElement(newListEntry);",1589],["// Return the root of the instantiated visual tree",1589],["return newListEntry;",1589],["};",1589],["// Set up bind function for a specific list entry",1589],["CharacterList.bindItem = (item, index) =>",1589],["(item.userData as CharacterListEntryController).SetCharacterData(AllCharacters[index]);",1589],["};",1589],["// Set a fixed item height",1589],["CharacterList.fixedItemHeight = 45;",1589],["// Set the actual item's source list/array",1589],["CharacterList.itemsSource = AllCharacters;",1589],["void OnCharacterSelected(IEnumerable selectedItems)",1589],["// Get the currently selected item directly from the ListView",1589],["var selectedCharacter = CharacterList.selectedItem as CharacterData;",1589],["// Handle none-selection (Escape to deselect everything)",1589],["if (selectedCharacter == null)",1589],["// Clear",1589],["CharClassLabel.text = \"\";",1589],["CharNameLabel.text = \"\";",1589],["CharPortrait.style.backgroundImage = null;",1589],["return;",1589],["// Fill in character details",1589],["CharClassLabel.text = selectedCharacter.Class.ToString();",1589],["CharNameLabel.text = selectedCharacter.CharacterName;",1589],["CharPortrait.style.backgroundImage = new StyleBackground(selectedCharacter.PortraitImage);",1589],["Attach the controller script to the main view",1589],["The CharacterListController isn't a MonoBehaviour, so it must be attached to the visual tree. Create a MonoBehaviour script that you can attach to the same GameObject as the UIDocument. It instantiates the CharacterListController and attaches it to the Visual Tree.",1589],["In the Scripts folder, create a C# script named MainView.cs with the following content:",1589],["```lang-csharp",1589],["using UnityEngine;",1589],["using UnityEngine.UIElements;",1589],["public class MainView : MonoBehaviour",1589],["[SerializeField]",1589],["VisualTreeAsset ListEntryTemplate;",1589],["void OnEnable()",1589],["// The UXML is already instantiated by the UIDocument component",1589],["var uiDocument = GetComponent();",1589],["// Initialize the character list controller",1589],["var characterListController = new CharacterListController();",1589],["characterListController.InitializeCharacterList(uiDocument.rootVisualElement, ListEntryTemplate);",1589],["In the SampleScene, select UIDocument.",1589],["Drag MainView.cs to Add Component in the Inspector window.",1589],["Drag ListEntry.uxml to the ListEntry Template field.",1589],["Enter Play mode to see your UI displayed in the game view.",1589],["Additional resource",1589],["Image import settings",1590],["After you have imported an image to your project, for the most intuitive results, it's recommended that you apply certain import settings for Textures, Sprites, and Vector images before you use them as a background for a visual element in the UI Builder.",1590],["Texture",1590],["The recommended import settings for a Texture image that you use as a background for a visual element:",1590],["Property: Value: ",1590],["Texture Type Default ",1590],["Non-Power of 2 None ",1590],["Compression None ",1590],["Alpha Is Transparency true ",1590],["Texture Type Editor GUI and Legacy GUI ",1590],["Non-Power of 2 None ",1590],["Compression None ",1590],["Alpha Is Transparency true ",1590],["Texture Type Sprite (2D and UI) ",1590],["Compression None ",1590],["Alpha Is Transparency true ",1590],["Sprite Mode Single ",1590],["Mesh Type Tight ",1590],["Sprites",1590],["The recommended import settings for a Sprite image that you use as a background for a visual element:",1590],["Property: Value: ",1590],["Texture Type Sprite (2D and UI) ",1590],["Compression None ",1590],["Alpha Is Transparency true ",1590],["Sprite Mode Multiple if file contains multiple sprites, Single otherwise ",1590],["Mesh Type Tight ",1590],["Vector images",1590],["The recommended import settings for a SVG Vector image that you use as a background for a visual element:",1590],["Property: Value: ",1590],["Generated Asset Type UI Toolkit Vector Image ",1590],["Tessellation Settings Basic ",1590],["Target Resolution Lowest value that produces satisfactory results ",1590],["Tip**:",1590],["You can apply default presets to Assets by folder to automatically set your desired import settings.",1590],["All image types are subject to dynamic atlasing if they're not already in an atlas. (An image is in an atlas if imported as a Sprite with Sprite Mode set to Multiple, or if you have manually added it to a Sprite Atlas asset.) You can configure dynamic atlasing in a Panel Settings asset.",1590],["Additional resources",1590],["\nUIE-uxml-element-Image\n",1590],["\nSet background images with an image asset\n",1590],["\n9-Slice images with UI Toolkit\n",1590],["IMGUI events",1591],["The IMGUI event family refers to IMGUI events that directly affect the Unity Editor, and are Editor-only events.",1591],["UI Toolkit receives its events from the IMGUI events in the Editor. If there are IMGUI events that don't fit into other event types, they fall under the IMGUI event family. Currently, IMGUI events support mouse and keyboard inputs tailored for the Unity Editor. UI Toolkit runtime panels might receive events that don't originate from IMGUI.",1591],["Event Description Trickles down Bubbles up Cancellable ",1591],["----------------------------------- ----------------------------------------- ------------- ---------- ----------- ",1591],["IMGUIEvent Sent to encapsulate IMGUI-specific events. Yes Yes Yes ",1591],["Event list",1591],["IMGUIEvent",1591],["Event used to encapsulate IMGUI-specific events.",1591],["Migrate from Immediate Mode GUI (IMGUI) to UI Toolkit",1592],["This guide is for developers experienced with Immediate Mode GUI (IMGUI) to migrate to UI Toolkit. This guide focuses on the Editor UI, but its information can also apply to the runtime UI as well.",1592],["Key differences",1592],["Code-driven versus UI-driven",1592],["IMGUI is code-driven by calls to the OnGUI function in an C# script which implements it. UI Toolkit provides more options for Editor UI creation. With UI Toolkit, you define the behaviors in C# scripts. However, when defining UI elements and styles, in addition to C#, you can visually define UI controls in UI Builder or write in an XML-like text file (called UXML) directly. For more information, see Simple UI Toolkit workflow.",1592],["Immediate versus retained mode",1592],["With IMGUI, you describe the UI tree when the UI is repainted within the OnGUI() function. You must call this function when an event enters the UI or when you repaint the UI. There is no persistent information pertaining the UI tree between different events. Whereas, you create visual elements with UI Toolkit in a tree structure called Visual Tree. Information in the Visual Trees is retained persistently.",1592],["Constant versus state changes",1592],["IMGUI is based around the OnGUI() function that runs at least once every frame. You define the look and the behaviors of the UI for every possible frame. The body of OnGUI() might contain many conditions and different states.",1592],["UI Toolkit operates in an event-driven system. You define the look of the UI in its default state and define the behaviors of the UI in response to events. Any changes you make in UI Toolkit cause persistent changes to the state of your UI.",1592],["For example, the declaration of a button in IMGUI looks like the following:",1592],["```lang-cs",1592],["if (GUILayout.Button(\"Click me!\"))",1592],["//Code runs here in frames where the user clicks the button.",1592],["//Code makes changes to the UI for frames where the user has just clicked the button.",1592],["else",1592],["//Code specifies what happens in all other frames.",1592],["The example above looks like the following in UI Toolkit:",1592],["```lang-cs",1592],["UIDocument document = GetComponent();",1592],["//Create button.",1592],["Button button = new Button();",1592],["button.text = \"Click me!\";",1592],["//Set up event handler.",1592],["button.RegisterCallback((ClickEvent evt) =>",1592],["//Code runs here after button receives ClickEvent.",1592],["});",1592],["//Add button to UI.",1592],["document.rootVisualElement.Add(button);",1592],["For a completed example on how to create a custom Editor window with UI Toolkit, see Simple UI Toolkit workflow.",1592],["IMGUI support",1592],["Use the IMGUIContainer to place IMGUI code inside of a VisualElement. Everything you can do inside of OnGUI() is supported.",1592],["You can arrange multiple IMGUIContainers and lay them out by mixing GUILayout and UI Toolkit layouts. Note that it's not possible to add VisualElement instances inside of an IMGUIContainer.",1592],["From IMGUI to UI Toolkit conversion",1592],["The following table lists the equivalent functions between IMGUI and UI Toolkit:",1592],["Action IMGUI UI Toolkit ",1592],["",1592],["Create an Editor Window EditorWindow.OnGUI() EditorWindow.CreateGUI() ",1592],["Create a Property Drawer or a Property Attribute PropertyDrawer.OnGUI() PropertyDrawer.CreatePropertyGUI() ",1592],["Create a custom Editor for the Inspector Editor.OnInspectorGUI() Editor.CreateInspectorGUI() ",1592],["",1592],["The following table lists the equivalent methods, classes, attributes between IMGUI and UI Toolkit:",1592],["IMGUI IMGUI namespaces UI Toolkit ",1592],[":------ :------------ :--------------------------------- ",1592],["AddCursorRect() EditorGUIUtility Set VisualElement.style.cursor, or set a visual element's cursor texture in the UI Builder or USS. For more detailed interactivity, use C# events. ",1592],["AreaScope GUILayout Scopes are generally not needed in UI Toolkit. See BeginArea(). ",1592],["BeginArea() GUILayout To define the area itself, create a visual element and set style.position to Position.Absolute. To create children for the area, create child visual elements under it. ",1592],["BeginBuildTargetSelectionGrouping() EditorGUILayout No equivalent. ",1592],["BeginChangeCheck() EditorGUI Register callbacks on each element in the change check range. If using a PropertyField as a stand-in for a serialized field in a custom Inspector, use PropertyField.RegisterCallback<SerializedPropertyChangeEvent>() or PropertyField.RegisterValueChangeCallback(). In all other cases, use VisualElement.RegisterCallback<ChangeEvent<T>>() or VisualElement.RegisterValueChangedCallback<T>(). ",1592],["BeginDisabledGroup() EditorGUI VisualElement.SetEnabled(false) ",1592],["BeginFoldoutHeaderGroup() EditorGUI, EditorGUILayout See Foldout(). ",1592],["BeginGroup() GUI See BeginArea(). ",1592],["BeginHorizontal() EditorGUILayout, GUILayout See BeginArea(). ",1592],["BeginProperty() EditorGUI If you use BeginProperty()/EndProperty() to bind a simple control to a serialized property, you can do that in UI Toolkit by calling BindProperty(), by setting bindingPath, or by setting the binding-path UXML attribute. If you use BeginProperty()/EndProperty() to make a single property out of complex custom UI, that is not supported well in UI Toolkit. ",1592],["BeginScrollView() EditorGUILayout, GUI, GUILayout UnityEngine.UIElements.ScrollView ",1592],["BeginToggleGroup() EditorGUILayout No equivalent. ",1592],["BeginVertical() EditorGUILayout, GUILayout See BeginArea(). ",1592],["BoundsField() EditorGUI, EditorGUILayout BoundsField ",1592],["BoundsIntField() EditorGUI, EditorGUILayout BoundsIntField ",1592],["Box() GUI, GUILayout Box ",1592],["BringWindowToBack() GUI See Window(). ",1592],["BringWindowToFront() GUI See Window(). ",1592],["Button() GUI, GUILayout Button ",1592],["CanCacheInspectorGUI() EditorGUI Not needed in retained mode. ",1592],["ChangeCheckScope EditorGUI Scopes are generally not needed in UI Toolkit. See BeginChangeCheck(). ",1592],["ColorField() EditorGUI, EditorGUILayout ColorField ",1592],["CommandEvent() EditorGUIUtility Generally not needed in retained mode. Use C# callbacks to handle events. ",1592],["CurveField() EditorGUI, EditorGUILayout CurveField ",1592],["DelayedDoubleField() EditorGUI, EditorGUILayout DoubleField with isDelayed set to true. ",1592],["DelayedFloatField() EditorGUI, EditorGUILayout FloatField with isDelayed set to true. ",1592],["DelayedIntField() EditorGUI, EditorGUILayout IntegerField with isDelayed set to true. ",1592],["DelayedTextField() EditorGUI, EditorGUILayout TextField with isDelayed set to true. ",1592],["DisabledScope EditorGUI Scopes are generally not needed in UI Toolkit. See BeginDisabledGroup(). ",1592],["DoubleField() EditorGUI, EditorGUILayout DoubleField ",1592],["DragWindow() GUI See Window(). ",1592],["DrawPreviewTexture() EditorGUI No equivalent. ",1592],["DrawRect() EditorGUI Use VisualElement. Set style.position to Absolute. Set style.top and style.left to define the position. Set style.width and style.height to define the size. Set style.backgroundColor to set the color. ",1592],["DrawTexture() GUI Image. Set tintColor in place of color. There is no equivalent for a false alphaBlend. There are no equivalents for borderWidth, borderWidths, borderRadius, or borderRadiuses. ",1592],["DrawTextureAlpha() EditorGUI No equivalent. ",1592],["DrawTextureWithTexCoords() GUI Image. Set uv in place of texCoords. There is no equivalent for a false alphaBlend. ",1592],["DropdownButton() EditorGUI, EditorGUILayout No exact equivalent. Use fully-fledged DropdownFields instead of just a DropdownButton(). ",1592],["DropShadowLabel() EditorGUI Label with shadow values set in style.textShadow. ",1592],["EditorToolbar() EditorGUILayout Create a Toolbar with one ToolbarButton for each tool. For each ToolbarButton, register a callback when clicked to call either ToolManager.SetActiveTool() or ToolManager.RestorePreviousTool() to make that button activate the tool or deactivate it, respectively. ",1592],["EndArea() GUILayout See BeginArea(). ",1592],["EndBuildTargetSelectionGrouping() EditorGUILayout See BeginBuildTargetSelectionGrouping(). ",1592],["EndChangeCheck() EditorGUI See BeginChangeCheck(). ",1592],["EndDisabledGroup() EditorGUI See BeginDisabledGroup(). ",1592],["EndFoldoutHeaderGroup() EditorGUI, EditorGUILayout See Foldout(). ",1592],["EndGroup() GUI See BeginArea(). ",1592],["EndHorizontal() EditorGUILayout, GUILayout See BeginArea(). ",1592],["EndProperty() EditorGUI See BeginProperty(). ",1592],["EndScrollView() EditorGUILayout, GUI, GUILayout See BeginScrollView(). ",1592],["EndToggleGroup() EditorGUILayout See BeginToggleGroup(). ",1592],["EndVertical() EditorGUILayout, GUILayout See BeginArea(). ",1592],["EnumFlagsField() EditorGUI, EditorGUILayout EnumFlagsField ",1592],["EnumPopup() EditorGUI, EditorGUILayout EnumField ",1592],["ExpandHeight() GUILayout No equivalent. ",1592],["ExpandWidth() GUILayout No equivalent. ",1592],["FlexibleSpace() GUILayout See Space(). ",1592],["FloatField() EditorGUI, EditorGUILayout FloatField ",1592],["FocusControl() GUI VisualElement.Focus() ",1592],["FocusTextInControl() EditorGUI TextField.Focus() ",1592],["FocusWindow() GUI See Window(). ",1592],["Foldout() EditorGUI, EditorGUILayout Foldout ",1592],["GetControlRect() EditorGUILayout Only needed to convert from EditorGUILayout to EditorGUI. Not needed in UI Toolkit. ",1592],["GetNameOfFocusedControl() GUI VisualElement.focusController.focusedElement ",1592],["GetPropertyHeight() EditorGUI PropertyField.layout.height ",1592],["GradientField() EditorGUI, EditorGUILayout GradientField ",1592],["GroupScope GUI Scopes are generally not needed in UI Toolkit. See BeginArea(). ",1592],["Height() GUILayout VisualElement.style.height ",1592],["HelpBox() EditorGUI, EditorGUILayout HelpBox ",1592],["HorizontalScope EditorGUILayout, GUILayout Scopes are generally not needed in UI Toolkit. See BeginArea(). ",1592],["HorizontalScrollbar() GUI, GUILayout Scroller with direction set to Horizontal. ",1592],["HorizontalSlider() GUI, GUILayout Slider with direction set to Horizontal ",1592],["InspectorTitlebar() EditorGUI, EditorGUILayout No equivalent. ",1592],["IntField() EditorGUI, EditorGUILayout IntegerField ",1592],["IntPopup() EditorGUI, EditorGUILayout No equivalent. ",1592],["IntSlider() EditorGUI, EditorGUILayout SliderInt ",1592],["Label() GUI, GUILayout Label ",1592],["LabelField() EditorGUI, EditorGUILayout TextField with isReadOnly set to true. ",1592],["LayerField() EditorGUI, EditorGUILayout LayerField ",1592],["LinkButton() EditorGUI, EditorGUILayout No equivalent. ",1592],["Load() EditorGUIUtility If using C#, you can use this function as is and assign its return value to the VisualElement.style property you want. If using USS, use function resource() with the same argument you would give to Load(). ",1592],["LongField() EditorGUI, EditorGUILayout LongField ",1592],["MaskField() EditorGUI, EditorGUILayout MaskField ",1592],["MaxHeight() GUILayout VisualElement.style.maxHeight ",1592],["MaxWidth() GUILayout VisualElement.style.maxWidth ",1592],["MinHeight() GUILayout VisualElement.style.minHeight ",1592],["MinMaxSlider() EditorGUI, EditorGUILayout MinMaxSlider ",1592],["MinWidth() GUILayout VisualElement.style.minWidth ",1592],["ModalWindow() GUI See Window(). ",1592],["[NonReorderable] attribute Ensure that ListView.reorderable is false. ",1592],["ObjectField() EditorGUI, EditorGUILayout ObjectField ",1592],["PasswordField() EditorGUI, EditorGUILayout, GUI, GUILayout TextField with isPasswordField set to true ",1592],["PixelsToPoints() EditorGUIUtility Valid for use with UI Toolkit. ",1592],["PointsToPixels() EditorGUIUtility Valid for use with UI Toolkit. ",1592],["Popup() EditorGUI, EditorGUILayout PopupField<T0> ",1592],["ProgressBar() EditorGUI ProgressBar ",1592],["PropertyField() EditorGUI, EditorGUILayout PropertyField ",1592],["PropertyScope EditorGUI Scopes are generally not needed in UI Toolkit. See BeginProperty(). ",1592],["RectField() EditorGUI, EditorGUILayout RectField ",1592],["RectIntField() EditorGUI, EditorGUILayout RectIntField ",1592],["RepeatButton() GUI, GUILayout RepeatButton ",1592],["ScrollTo() GUI ScrollView.ScrollTo() or ScrollView.scrollOffset ",1592],["ScrollViewScope EditorGUILayout, GUI, GUILayout Scopes are generally not needed in UI Toolkit. See BeginScrollView(). ",1592],["SelectableLabel() EditorGUI, EditorGUILayout Label with isSelectable and focusable set to true. ",1592],["SelectionGrid() GUI, GUILayout RadioButton ",1592],["SetNextControlName() GUI VisualElement.name ",1592],["singleLineHeight EditorGUIUtility Use USS variable --unity-metrics-single_line-height. ",1592],["Slider() EditorGUI, EditorGUILayout Slider ",1592],["Space() EditorGUILayout, GUILayout Use flex properties to configure spacing between visual elements. ",1592],["TagField() EditorGUI, EditorGUILayout TagField ",1592],["TextArea() EditorGUI, EditorGUILayout, GUI, GUILayout TextField with multiline set to true, style.whiteSpace set to Normal, and ScrollView.verticalScrollerVisibility set to Auto. ",1592],["TextField() EditorGUI, EditorGUILayout, GUI, GUILayout TextField with multiline set to true and style.whiteSpace set to NoWrap. ",1592],["Toggle() EditorGUI, EditorGUILayout, GUI, GUILayout Toggle ",1592],["ToggleGroupScope EditorGUILayout Scopes are generally not needed in UI Toolkit. See BeginToggleGroup(). ",1592],["ToggleLeft() EditorGUI, EditorGUILayout Toggle, but instead of setting label, set text. ",1592],["Toolbar() GUI, GUILayout No equivalent. ",1592],["UnfocusWindow() GUI See Window(). ",1592],["Vector2Field() EditorGUI, EditorGUILayout Vector2Field ",1592],["Vector2IntField() EditorGUI, EditorGUILayout Vector2IntField ",1592],["Vector3Field() EditorGUI, EditorGUILayout Vector3Field ",1592],["Vector3IntField() EditorGUI, EditorGUILayout Vector3IntField ",1592],["Vector4Field() EditorGUI, EditorGUILayout Vector4Field ",1592],["VerticalScope EditorGUILayout, GUILayout Scopes are generally not needed in UI Toolkit. See BeginArea(). ",1592],["VerticalScrollbar() GUI, GUILayout Scroller with direction set to Vertical. ",1592],["VerticalSlider() GUI, GUILayout Slider with direction set to Vertical. ",1592],["Width() GUILayout VisualElement.style.width ",1592],["Window() GUI, GUILayout No equivalent. ",1592],["Additional resources",1592],["Input events",1593],["The InputEvent is sent when the user submits text into a text field. This event updates when there is a change in focus, such as a PointerCaptureOutEvent that on a touch screen.",1593],["For default keyboard inputs, the inputEvent fires for each keystroke. InputEvent doesn't fire when the TextField populates from an indirect source, such as an automated script.",1593],["Event Description Trickles down Bubbles up Cancellable ",1593],["----------------------------------- ----------------------------------------------------------------- ------------- ---------- ----------- ",1593],["InputEvent Sent when data is input to a visual element, typically a control. ",1593],["Unique properties",1593],["previousData**: The former data.",1593],["newData**: The new data.",1593],["Event list",1593],["InputEvent",1593],["Event sent when data is input to visual elements that implement TextInputBaseField. This event differs from ChangeEvent in that it's sent for every input event in the control, even if the value of the control hasn't changed.",1593],["target**: The element where the input occurred.",1593],["Keyboard events",1594],["Keyboard events occur when you press or release keys on the keyboard. Each event includes information about the modifier, text character, and related key code for the event.",1594],["Many standard controls use the KeyDownEvent to encode shortcuts or accessibility behaviors. The following examples all use keyboard events:",1594],["\nThe Toggle and Button classes listen for Enter and Spacebar key presses as replacement actions for mouse clicks.\n",1594],["\nThe ScrollView and Slider controls use directional arrow key presses to modulate their values.\n",1594],["\nThe TextField control looks at both the keyCode property and the character property to execute special actions or to accept text.\n",1594],["The base class for all keyboard events is KeyboardEventBase.",1594],["Event Description Trickles down Bubbles up Cancellable ",1594],["------------------------------------------------- -------------------------------------------------- ------------- ---------- ----------- ",1594],["KeyDownEvent Sent when the user presses a key on the keyboard. Yes Yes Yes ",1594],["KeyUpEvent Sent when the user releases a key on the keyboard. Yes Yes Yes ",1594],["Unique properties",1594],["keyCode**: The keyCode property returns a character key that corresponds directly to a physical key on an input device, such as a keyboard or joystick. The difference between the character property and the keyCode property is that keyCode represents a physical key, while character represents the entry of a specific character. For example, both a and A return keyCode=KeyCode.A during a keyDownEvent.",1594],["character**: The character property returns a character code during a keyDownEvent.",1594],["modifiers**: The modifiers property returns which modifier key is held down. Some examples of modifier keys are the Shift, Ctrl, or Alt keys.",1594],["For more information, see the Modifier keys section of the MDN documentation.",1594],["Event List",1594],["The following list provides the name, description, and target of each event in the event family.",1594],["By default, a visual element doesn't receive keyboard events. Only elements that are focusable and currently in focus are targeted for keyboard events. This is because keyboard events trickle down and bubble up, allowing parent elements to receive them as well.",1594],["In summary, to begin receiving keyboard events, you must mark the element as focusable=true and explicitly give it focus using element.Focus(). This ensures that the element is eligible to receive keyboard events.",1594],["KeyDownEvent",1594],["A KeyDownEvent is sent each time you press a key on the keyboard. The key pressed contains the keyCode property for that event. If that key press has text input associated with it, additional events are sent for each character of text input. The character property contains the character for those events.",1594],["When you press and release a, UI Toolkit sends the following events:",1594],["```lang-csharp",1594],["KeyDownEvent { keyCode=KeyCode.A }",1594],["KeyDownEvent { character=’a’ }",1594],["KeyUpEvent { keyCode=KeyCode.A }",1594],["When you press and release Ctrl+a, UI Toolkit sends the following events:",1594],["```lang-csharp",1594],["KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }",1594],["KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }",1594],["KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }",1594],["KeyUpEvent { keyCode=KeyCode.LeftControl }",1594],["target**: The visual element that has focus. If no element has focus, the root visual element of the panel.",1594],["KeyUpEvent",1594],["A KeyUpEvent is sent when you release a key on the keyboard. The keyCode property for that event contains the key being released. KeyDownEvent has additional events sent when a keystroke has an associated text input.",1594],["When you press and release a, UI Toolkit sends the following events:",1594],["```lang-csharp",1594],["KeyDownEvent { keyCode=KeyCode.A }",1594],["KeyDownEvent { character=’a’ }",1594],["KeyUpEvent { keyCode=KeyCode.A }",1594],["When you press and release Ctrl+a, UI Toolkit sends the following events:",1594],["```lang-csharp",1594],["KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }",1594],["KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }",1594],["KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }",1594],["KeyUpEvent { keyCode=KeyCode.LeftControl }",1594],["target**: The visual element that has focus. If no element has focus, the root visual element of the panel.",1594],["Examples",1594],["The following code example prints a message to the console when you press a key in a TextField. This code sample highlights the event firing of both KeyUpEvent and KeyDownEvent.",1594],["Create a Unity project with any template.",1594],["In the SampleScene, select GameObject > UI Toolkit > UI Document.",1594],["Create a C# script named KeyboardEventTest.cs with the following contents:",1594],["```lang-csharp",1594],["using UnityEngine;",1594],["using UnityEngine.UIElements;",1594],["// Add KeyboardEventTest to a GameObject with a valid UIDocument.",1594],["// When the user presses a key, it will print the keyboard event properties to the console.",1594],["[RequireComponent(typeof(UIDocument))]",1594],["public class KeyboardEventTest : MonoBehaviour",1594],["void OnEnable()",1594],["var root = GetComponent().rootVisualElement;",1594],["root.Add(new Label(\"Press any key to see the keyDown properties\"));",1594],["root.Add(new TextField());",1594],["root.Q().Focus();",1594],["root.RegisterCallback(OnKeyDown, TrickleDown.TrickleDown);",1594],["root.RegisterCallback(OnKeyUp, TrickleDown.TrickleDown);",1594],["void OnKeyDown(KeyDownEvent ev)",1594],["Debug.Log(\"KeyDown:\" + ev.keyCode);",1594],["Debug.Log(\"KeyDown:\" + ev.character);",1594],["Debug.Log(\"KeyDown:\" + ev.modifiers);",1594],["void OnKeyUp(KeyUpEvent ev)",1594],["Debug.Log(\"KeyUp:\" + ev.keyCode);",1594],["Debug.Log(\"KeyUp:\" + ev.character);",1594],["Debug.Log(\"KeyUp:\" + ev.modifiers);",1594],["Select the UIDocument GameObject in the Hierarchy window.",1594],["Drag KeyboardEventTest.cs to Add Component in the Inspector window.",1594],["Enter Play mode and type in the TextField.",1594],["Additional resources",1594],["\nUI Toolkit events\n",1594],["\nUI Toolkit built-in controls reference\n",1594],["\nUI Toolkit controls\n",1594],["\nUI Toolkit controls examples\n",1594],["Layout events",1595],["GeometryChangedEvent is currently the only layout event.",1595],["The base class for GeometryChangedEvent is the EventBase class.",1595],["Event Description Trickles down Bubbles up Cancellable ",1595],["----------------------------------------------------------------- --------------------------------------------------------------- ----------------- -------------- --------------- ",1595],["GeometryChangedEvent Sent when the position or the dimensions of an element changes. ",1595],["Unique properties",1595],["oldRect**: The former position and dimensions of the element.",1595],["newRect**: The new position and dimensions of the element.",1595],["GeometryChangedEvent",1595],["The GeometryChangedEvent is sent when either the position or the dimensions of an element changes. Events of this type are only sent to the event target.",1595],["It's important to unregister from the GeometryChangedEvent event after you receive your callback, as additional layout changes will trigger the callback again.",1595],["target**: The element with a new geometry.",1595],["Position element with the layout engine",1596],["UI Toolkit includes a layout engine that positions elements based on layout and styling properties. The layout engine uses the layout principles of Yoga, which implements a subset of Flexbox, a HTML/CSS layout system. UI Toolkit properties match Yoga layout behavior. UI Toolkit supports most properties in Flexbox.",1596],["By default, all elements are part of the layout. The layout has the following default behaviours:",1596],["\nA container distributes its children vertically.\n",1596],["\nThe position of a container rectangle includes its children rectangles. This behavior can be limited by other layout properties.\n",1596],["\nA VisualElement with text uses the text size in its size calculations. This behavior can be limited by other layout properties.\n",1596],["UI Toolkit includes built-in controls for standard UI components, such as a button, toggle, or text field. These built-in controls have styles that affect their layout.",1596],["Main style properties",1596],["The following are the main style properties:",1596],["\nFlex > Direction (flex-direction in USS): Defines the layout direction the main-axis. The default is column and that makes the main-axis run from top to bottom.\n",1596],["\nFlex > Grow (flex-grow in USS): Defines how an element should grow in the main-axis. It's a ratio that's shared with all other siblings of the same parent. This property is useful when trying make an element stretch to take up the entire size of its parents (minus any siblings). To do this, set the Flex > Grow value to 1. If you have two siblings with flex-grow set to 1, they will each take 50% of the parent's available size along the main-axis.\n",1596],["\nAlign > Align Items (align-items in USS): Defines the alignment of elements in the cross-axis, or the perpendicular axis to the main-axis. For example, if you have two Buttons in a VisualElement that has flex-direction: column and align-items: flex-end set, the two Buttons will squish against the container's right edge. The options for align-items have names like flex-start and flex-end because they depend on the value of flex-direction.\n",1596],["\nAlign > Justify Content (justify-content in USS): Defines the alignment of elements in the main-axis. For example, if you have two Buttons in a VisualElement that has flex-direction: column and justify-content: flex-end set, the two Buttons squish against the container's bottom edge. The options for justify-content are named like flex-start and flex-end because they depend on the value of flex-direction.\n",1596],["For more information, refer to Flex layout.",1596],["If the selected element has child elements, in UI Builder, you can use toggles in the header to toggle flex-related style properties in the Viewport. The image below shows the options available for the #menu element:",1596],["You can use the style properties to create complex, dynamic layouts. Here's an example of a layout that anchors a Button on the bottom-right edge of the screen:",1596],["The UXML for this layout, showing the inline styles set on each container VisualElement, is below:",1596],["```lang-xml",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["The containers are colored to reveal their shape. You can use nested VisualElement containers to achieve any dynamic layout without resorting to explicitly setting the position and size of each element. This keeps the layout dynamic and automatically adjusts to the larger container changing size, like the screen changing size.",1596],["Absolute position",1596],["UI Builder also supports the Position style properties. The Position > Absolute mode makes an element invisible to the default Flexbox-based layout engine. It's as if it no longer takes any space. Absolute-position elements appear on top of any siblings that are Relative-position.",1596],["While using Absolute position, you can use the Position > Left, Top, Right, Bottom style properties to offset and size the element from the respective edges of its parent. This doesn't set absolute coordinates on the screen but sets offsets relative to the parent element. You can still use Relative mode to position the parent element. If you set both a Left offset and a Right offset, the Width style property of the element is ignored and the computed width will now come from the following formula:",1596],["element-computed-width = parent-width - left-offset - right-offset",1596],["Left**, Top, Right, Bottom can also be interpreted as anchors. For example, you can anchor a Button on the bottom-left of the screen:",1596],["The UXML below displays the inline styles:",1596],["```lang-xml",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["With positioning, there is a difference between having Left set to 0 and having Left unset:",1596],["\nLeft set to 0 means set an offset of 0.\n",1596],["\nLeft unset doesn't set any offset and lets other style properties define the width or height of the element.\n",1596],["You can also modify these offset style properties directly in the Canvas via additional resize handles on each edge and corner of the element's blue selection border. It's important to differentiate between what's set and what's unset, so the Canvas also includes \"anchor\" toggles as orange squares off each side of the element. The Canvas handles will adjust which style properties are set when resizing the element visually, depending on which \"anchors\" are set. For example, say you are resizing the element in the Canvas via its right-border handle:",1596],["\nIf you set both Left and Right properties, the handle will update the Right property.\n",1596],["\nIf you set Left but not Right, the handle will update the Width property.\n",1596],["Use both Relative and Absolute",1596],["It's typically discouraged to use Absolute position mode because it bypasses the built-in layout engine in UI Toolkit. It might also lead to high-maintenance UI where changing the overall layout would require manually updating individual elements. However, one of the legitimate use cases for Absolute position mode is for overlays. It's useful to overlay some complex UI on top of other complex UI, such as a popup or a dropdown. You can use Absolute position only for the overlay container itself while continuing to use Relative mode inside the overlay. Here's an example of a simple centered popup:",1596],["And here's the UXML for your reference:",1596],["```lang-xml",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["",1596],["The example above highlights the use of Absolute position. Set all Position > Left, Top, Right, Bottom to 0, so the position is 0 pixels away from the edges of the screen. This makes the #overlay element overlap the #complex-ui-screen container element. You can also set a semi-transparent background to the #overlay element to make the other UI appear darkened. Use #overlay to set Relative position to center our #popup container VisualElement.",1596],["Best practices",1596],["The following list provides tips to help improve the performance of the layout engine:",1596],["\nSet the width and height to define the size of an element.\n",1596],["\nUse the flexGrow property (USS: flex-grow: <value>;) to assign a flexible size to an element. The value of the flexGrow property assigns a base weight to the size of an element when it's determined by its siblings.\n",1596],["\nSet the flexDirection property to row (USS: flex-direction: row;) to switch to a horizontal layout.\n",1596],["\nUse relative positioning to offset an element based on its original layout position.\n",1596],["\nSet the position property to absolute to place an element relative to its parent position rectangle. This doesn't affect the layout of its siblings or parent.\n",1596],["Additional resources",1596],["\nUSS properties reference\n",1596],["\nUSS common properties\n",1596],["\nStyle UI with USS\n",1596],["\nRelative and absolute positioning C# example\n",1596],["Create list and tree views",1597],["List and tree views are common features in UI design. You can use UI Toolkit to create list and tree views inside a custom Editor window or runtime. This example demonstrates how to create list and tree views inside a custom Editor window. You configure the structure of lists and trees with UXML and then dynamically populate them in your C# script.",1597],["Example overview",1597],["This example creates four Editor windows that display the following:",1597],["A list of planets with a single column",1597],["A list of planets with two columns",1597],["A tree view of planets",1597],["A tree view of planets with two columns",1597],["You can find the completed files that this example creates in this GitHub repository.",1597],["Prerequisites",1597],["Create the data in C#",1597],["Create data in a C# script that's made up of two groups of planets and the root nodes for the tree view.",1597],["Create a project in Unity with any template.",1597],["In your Project window, create a folder named Editor.",1597],["In the Editor folder, create a C# script named PlanetsWindow.cs.",1597],["Replace the contents of PlanetsWindow.cs with the following:",1597],["```lang-cs",1597],["using System.Collections.Generic;",1597],["using UnityEngine;",1597],["using UnityEditor;",1597],["using UnityEngine.UIElements;",1597],["// Base class for all windows that display planet information.",1597],["public class PlanetsWindow : EditorWindow",1597],["[SerializeField]",1597],["protected VisualTreeAsset uxml;",1597],["// Nested interface that can be either a single planet or a group of planets.",1597],["protected interface IPlanetOrGroup",1597],["public string name",1597],["get;",1597],["public bool populated",1597],["get;",1597],["// Nested class that represents a planet.",1597],["protected class Planet : IPlanetOrGroup",1597],["public string name",1597],["get;",1597],["public bool populated",1597],["get;",1597],["public Planet(string name, bool populated = false)",1597],["this.name = name;",1597],["this.populated = populated;",1597],["// Nested class that represents a group of planets.",1597],["protected class PlanetGroup : IPlanetOrGroup",1597],["public string name",1597],["get;",1597],["public bool populated",1597],["get",1597],["var anyPlanetPopulated = false;",1597],["foreach (Planet planet in planets)",1597],["anyPlanetPopulated = anyPlanetPopulated planet.populated;",1597],["return anyPlanetPopulated;",1597],["public readonly IReadOnlyList planets;",1597],["public PlanetGroup(string name, IReadOnlyList planets)",1597],["this.name = name;",1597],["this.planets = planets;",1597],["// Data about planets in our solar system.",1597],["protected static readonly List planetGroups = new List",1597],["new PlanetGroup(\"Inner Planets\", new List",1597],["new Planet(\"Mercury\"),",1597],["new Planet(\"Venus\"),",1597],["new Planet(\"Earth\", true),",1597],["new Planet(\"Mars\")",1597],["}),",1597],["new PlanetGroup(\"Outer Planets\", new List",1597],["new Planet(\"Jupiter\"),",1597],["new Planet(\"Saturn\"),",1597],["new Planet(\"Uranus\"),",1597],["new Planet(\"Neptune\")",1597],["})",1597],["};",1597],["// Expresses planet data as a list of the planets themselves. Needed for ListView and MultiColumnListView.",1597],["protected static List planets",1597],["get",1597],["var retVal = new List(8);",1597],["foreach (var group in planetGroups)",1597],["retVal.AddRange(group.planets);",1597],["return retVal;",1597],["// Expresses planet data as a list of TreeViewItemData objects. Needed for TreeView and MultiColumnTreeView.",1597],["protected static IList> treeRoots",1597],["get",1597],["int id = 0;",1597],["var roots = new List>(planetGroups.Count);",1597],["foreach (var group in planetGroups)",1597],["var planetsInGroup = new List>(group.planets.Count);",1597],["foreach (var planet in group.planets)",1597],["planetsInGroup.Add(new TreeViewItemData(id++, planet));",1597],["roots.Add(new TreeViewItemData(id++, group, planetsInGroup));",1597],["return roots;",1597],["Create a list view",1597],["To create a list view, first use the UI builder to create a ListView UI control. Then, create a custom Editor window with the ListView and define where to get data for the list in a C# script. Finally, reference the UXML file to the C# script.",1597],["Right-click in the Editor folder.",1597],["Select Create > UI Toolkit > Editor Window.",1597],["In the C# box, enter PlanetsListView and clear the USS checkbox. This creates two files: PlanetsListView.uxml and PlanetsListView.cs.",1597],["Double-click PlanetsListView.uxml to open it in the UI Builder.",1597],["In the Hierarchy window, delete the Label control and add the ListView control.",1597],["Select the ListView control in the Hierarchy window.",1597],["In the Inspector window, set Fixed Item Height to 20.",1597],["Save your changes. Your PlanetsListView.uxml should look like the following:",1597],["```lang-xml",1597],["",1597],["",1597],["",1597],["Replace the contents of PlanetsListView.cs with the following:",1597],["```lang-cs",1597],["using UnityEditor;",1597],["using UnityEngine.UIElements;",1597],["public class PlanetsListView : PlanetsWindow",1597],["[MenuItem(\"Planets/Standard List\")]",1597],["static void Summon()",1597],["GetWindow(\"Standard Planet List\");",1597],["void CreateGUI()",1597],["uxml.CloneTree(rootVisualElement);",1597],["var listView = rootVisualElement.Q();",1597],["// Set ListView.itemsSource to populate the data in the list.",1597],["listView.itemsSource = planets;",1597],["// Set ListView.makeItem to initialize each entry in the list.",1597],["listView.makeItem = () => new Label();",1597],["// Set ListView.bindItem to bind an initialized entry to a data item.",1597],["listView.bindItem = (VisualElement element, int index) =>",1597],["(element as Label).text = planets[index].name;",1597],["In Unity, select PlanetsListView.cs in the Project window, and then drag PlanetsListView.uxml into the Uxml field in the Inspector.",1597],["From the menu, select Planets > Standard List to see a list of planets.",1597],["Create a list view with multiple columns",1597],["To create a list view with multiple columns, first create a MultiColumnListView UI control, and define the number of columns and column titles in a UXML file. Then create a custom Editor window with the MultiColumnListView and define where to get data for the list in each column in a C# script. Finally, reference the UXML file to the C# script.",1597],["Right-click in the Editor folder.",1597],["Select Create > UI Toolkit > UI Document to create a UXML file and name it as PlanetsMultiColumnListView.uxml.",1597],["Open PlanetsMultiColumnListView.uxml in a text editor.",1597],["Replace the contents of PlanetsMultiColumnListView.uxml with the following:",1597],["```lang-xml",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["In the Editor folder, create a C# file named PlanetsMultiColumnListView.cs.",1597],["Replace the contents of PlanetsMultiColumnListView.cs with the following:",1597],["```lang-cs",1597],["using UnityEditor;",1597],["using UnityEngine.UIElements;",1597],["public class PlanetsMultiColumnListView : PlanetsWindow",1597],["[MenuItem(\"Planets/Multicolumn List\")]",1597],["static void Summon()",1597],["GetWindow(\"Multicolumn Planet List\");",1597],["void CreateGUI()",1597],["uxml.CloneTree(rootVisualElement);",1597],["var listView = rootVisualElement.Q();",1597],["// Set MultiColumnListView.itemsSource to populate the data in the list.",1597],["listView.itemsSource = planets;",1597],["// For each column, set Column.makeCell to initialize each cell in the column.",1597],["// You can index the columns array with names or numerical indices.",1597],["listView.columns[\"name\"].makeCell = () => new Label();",1597],["listView.columns[\"populated\"].makeCell = () => new Toggle();",1597],["// For each column, set Column.bindCell to bind an initialized cell to a data item.",1597],["listView.columns[\"name\"].bindCell = (VisualElement element, int index) =>",1597],["(element as Label).text = planets[index].name;",1597],["listView.columns[\"populated\"].bindCell = (VisualElement element, int index) =>",1597],["(element as Toggle).value = planets[index].populated;",1597],["In Unity, select PlanetsMultiColumnListView.cs in the Project window.",1597],["Drag PlanetsMultiColumnListView.uxml into the Uxml field in the Inspector.",1597],["From the menu, select Planets > Multicolumn List to see a two-column list. One column has a list of planets. The other column has toggles that indicate whether the planet is populated.",1597],["Create a tree view",1597],["To create a tree view in a custom Editor, first create a TreeView UI control in a UXML file. Then create a custom Editor window with the TreeView and define where to get data for the tree nodes a C# script. Finally reference the UXML file to the C# script.",1597],["In the Editor folder, create a UXML file named PlanetsTreeView.uxml.",1597],["Replace the contents of PlanetsTreeView.uxml with the following:",1597],["```lang-xml",1597],["",1597],["",1597],["",1597],["In the Editor folder, create a C# file named PlanetsTreeView.cs.",1597],["Replace the contents of PlanetsTreeView.cs with the following:",1597],["```lang-cs",1597],["using UnityEditor;",1597],["using UnityEngine.UIElements;",1597],["public class PlanetsTreeView : PlanetsWindow",1597],["[MenuItem(\"Planets/Standard Tree\")]",1597],["static void Summon()",1597],["GetWindow(\"Standard Planet Tree\");",1597],["void CreateGUI()",1597],["uxml.CloneTree(rootVisualElement);",1597],["var treeView = rootVisualElement.Q();",1597],["// Call TreeView.SetRootItems() to populate the data in the tree.",1597],["treeView.SetRootItems(treeRoots);",1597],["// Set TreeView.makeItem to initialize each node in the tree.",1597],["treeView.makeItem = () => new Label();",1597],["// Set TreeView.bindItem to bind an initialized node to a data item.",1597],["treeView.bindItem = (VisualElement element, int index) =>",1597],["(element as Label).text = treeView.GetItemDataForIndex(index).name;",1597],["In Unity, select PlanetsTreeView.cs in the Project window.",1597],["Drag PlanetsTreeView.uxml into the Uxml field in the Inspector.",1597],["From the menu, select Planets > Standard Tree to see two lists of planets grouped by nodes. Each node has an arrow next to it. If you select the arrow, the window shows the planets in the group.",1597],["Create a tree view with multiple columns",1597],["To create a tree view with multiple columns in a custom Editor, first create a MultiColumnTreeView UI control and define the columns in a UXML file. Then create a custom Editor window with the MultiColumnTreeView and define where to get data for each column in a C# script. Finally, reference the UXML file to the C# script.",1597],["In the Editor folder, create a UXML file named PlanetsMultiColumnTreeView.uxml.",1597],["Replace the contents of PlanetsMultiColumnTreeView.uxml with the following:",1597],["```lang-xml",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["",1597],["In the Editor folder, create a C# file named PlanetsMultiColumnTreeView.cs.",1597],["Replace the contents of PlanetsMultiColumnTreeView.cs with the following:",1597],["```lang-cs",1597],["using UnityEditor;",1597],["using UnityEngine.UIElements;",1597],["public class PlanetsMultiColumnTreeView : PlanetsWindow",1597],["[MenuItem(\"Planets/Multicolumn Tree\")]",1597],["static void Summon()",1597],["GetWindow(\"Multicolumn Planet Tree\");",1597],["void CreateGUI()",1597],["uxml.CloneTree(rootVisualElement);",1597],["var treeView = rootVisualElement.Q();",1597],["// Call MultiColumnTreeView.SetRootItems() to populate the data in the tree.",1597],["treeView.SetRootItems(treeRoots);",1597],["// For each column, set Column.makeCell to initialize each node in the tree.",1597],["// You can index the columns array with names or numerical indices.",1597],["treeView.columns[\"name\"].makeCell = () => new Label();",1597],["treeView.columns[\"populated\"].makeCell = () => new Toggle();",1597],["// For each column, set Column.bindCell to bind an initialized node to a data item.",1597],["treeView.columns[\"name\"].bindCell = (VisualElement element, int index) =>",1597],["(element as Label).text = treeView.GetItemDataForIndex(index).name;",1597],["treeView.columns[\"populated\"].bindCell = (VisualElement element, int index) =>",1597],["(element as Toggle).value = treeView.GetItemDataForIndex(index).populated;",1597],["In Unity, select PlanetsMultiColumnTreeView.cs in the Project window.",1597],["Drag PlanetsMultiColumnTreeView.uxml into the Uxml field in the Inspector.",1597],["Select Planets > Multicolumn Tree to see a list with two columns. The first column has two lists of planets grouped by nodes. Each node has an arrow next to it. If you select the arrow, the window shows a list of planets and toggles in that group.",1597],["Additional resources",1597],["Instantiate UXML from C# scripts",1598],["To build UI from a UXML file, you must first load the file into a VisualTreeAsset, and then use the Instantiate() to instantiate without a parent, which creates a new TemplateContainer, or CloneTree(parent)) to clone inside a parent.",1598],["Once the UXML is instantiated, you can retrieve specific elements from the visual tree with UQuery.",1598],["The following example creates a custom Editor window and loads a UXML file as its content:",1598],["```lang-csharp",1598],["using UnityEditor;",1598],["using UnityEngine;",1598],["using UnityEngine.UIElements;",1598],["using UnityEditor.UIElements;",1598],["public class MyWindow : EditorWindow {",1598],["[MenuItem (\"Window/My Window\")]",1598],["public static void ShowWindow () {",1598],["EditorWindow w = EditorWindow.GetWindow(typeof(MyWindow));",1598],["VisualTreeAsset uiAsset = AssetDatabase.LoadAssetAtPath(\"Assets/MyWindow.uxml\");",1598],["VisualElement ui = uiAsset.Instantiate();",1598],["w.rootVisualElement.Add(ui);",1598],["Additional resources",1598],["\nLoad UXML and USS from C# scripts\n",1598],["\nUQuery\n",1598],["Load UXML and USS C# scripts",1599],["Unity represents UXML files as VisualTreeAsset objects in C# and represents USS files as StyleSheet objects in C#. Since VisualTreeAsset and StyleSheet are regular Unity assets, you can use Unity's standard workflows to load them.",1599],["Use serialization references",1599],["Unity automatically detects fields from your C# scripts that are of type VisualTreeAsset or StyleSheet. You can use the Inspector to set references to specific UXML or USS files imported into your project. Such references remain valid even when the location of your assets changes in your project.",1599],["There are three ways to use this in your scripts:",1599],["Description How to display the Inspector Reference save location ",1599],["",1599],["Instances of custom scripts (such as MonoBehaviour) Select the GameObject holding the instance of the script Inside the scene ",1599],["Default references for a script that derives from EditorWindow or Editor Select the actual C# file in the Project Browser Inside the meta file associated with the script ",1599],["Custom assets in your project that derive from ScriptableObject Select the asset in the Project browser Inside the serialized data of the asset itself ",1599],["Note**: The default references work for all scripts that derive from MonoBehaviour or ScriptableObject. It provides a way to populate default values for serialized fields of scripts.",1599],["The following example MonoBehaviour class receives a UXML file and a list of USS files from the Inspector:",1599],["```lang-csharp",1599],["using UnityEngine;",1599],["using UnityEngine.UIElements;",1599],["public class MyBehaviour : MonoBehaviour",1599],["// Note that public fields are automatically exposed in the Inspector",1599],["public VisualTreeAsset mainUI;",1599],["[Reorderable]",1599],["public StyleSheet[] seasonalThemes;",1599],["The following example EditorWindow class receives default references from the Inspector:",1599],["```lang-csharp",1599],["using UnityEditor;",1599],["using UnityEngine.UIElements;",1599],["public class MyWindow : EditorWindow",1599],["[SerializeField]",1599],["private VisualTreeAsset uxml;",1599],["[SerializeField]",1599],["private StyleSheet uss;",1599],["Use the Asset Database (Editor only)",1599],["You can load your UI Assets by path or GUID with the AssetDatabase class.",1599],["The following example shows how to locate an asset by path:",1599],["```lang-csharp",1599],["VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/main_window.uxml\");",1599],["StyleSheet uss = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/main_styles.uss\");",1599],["The following example shows how to locate an asset by path from a package:",1599],["```lang-csharp",1599],["VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath(\"Packages//main_window.uxml\");",1599],["StyleSheet uss = AssetDatabase.LoadAssetAtPath(\"Packages//main_styles.uss\");",1599],["Use Addressables (Runtime only)",1599],["The Addressables system provides tools and scripts to organize and package content for your application and an API to load and release assets at runtime.",1599],["You can use UXML and USS assets with the Addressable system.",1599],["For information about how to set up Addressables for any assets in Unity, see Getting started with Addressables.",1599],["",1599],["Use a Resources folder",1599],["If you add a Resources folder in your project and place your UI assets in it, you can use the Resources.Load method to load your assets.",1599],["The following example shows how to load an asset in the Resources folder:",1599],["```lang-csharp",1599],["VisualTreeAsset uxml = Resources.Load(\"main_window\");",1599],["StyleSheet uss = Resources.Load(\"main_styles\");",1599],["Note**: This method increases the final build size significantly. If you are concerned with the build size, use Addressables instead.",1599],["Additional resources",1599],["\nThe Resources folder\n",1599],["\nAssets, Resources and AssetBundles\n",1599],["Manipulators",1600],["To separate your event logic from your UI code, use a manipulator to handle events. Manipulators are state machines that handle user interaction with UI elements. They store, register, and unregister event callbacks. A manipulator streamlines setting up that user interaction, so you don't have to handle each callback one by one. To handle events, use or inherit from one of the manipulators that UI Toolkit supports.",1600],["To create and use a manipulator:",1600],["Define a dedicated class that inherits from a manipulator class supported by UI Toolkit. This class encapsulates the event-handling logic tailored to the specific user interaction you want to manage.",1600],["Within the class, implement methods to respond to relevant interactions, such as mouse clicks or drags. These methods capture and process the necessary information to execute the desired behavior.",1600],["When you have finished designing the manipulator class, instantiate it and attach it to the target UI element. This attachment lets the manipulator intercept and manage the specified events, orchestrating user interactions while maintaining clear separation from your UI code.",1600],["Supported manipulators",1600],["The following table lists the supported manipulator classes:",1600],["Manipulator Inherits from Description ",1600],["-------------- ------------ --------------- ",1600],["Manipulator Base class for all provided manipulators. ",1600],["KeyboardNavigationManipulator Manipulator Handles translation of device-specific input events to higher-level navigation operations with a keyboard. ",1600],["MouseManipulator Manipulator Handles mouse input. Has a list of activation filters. ",1600],["ContextualMenuManipulator MouseManipulator Displays a contextual menu when the user clicks the right mouse button or presses the menu key on the keyboard. ",1600],["PointerManipulator MouseManipulator Handles pointer input. Has a list of activation filters. ",1600],["Clickable PointerManipulator Tracks mouse events on an element, and identifies when a click occurs, which is both a pointer press and release on the same element. ",1600],["Examples",1600],["The following examples demonstrate how to use manipulators to handle events. They do the following:",1600],["\nInherit the manipulators from the PointerManipulators class, which handles mouse input.\n",1600],["\nUse the activators list to specify the conditions that activate the manipulator. For example, to activate the manipulator when the user clicks the left mouse button, add\n",1600],["ManipulatorActivationFilter to the activators list with the button field set to MouseButton.LeftMouse.",1600],["\nUse the target property to access the element that the manipulator is attached to.\n",1600],["\nOverride the RegisterCallbacksOnTarget and UnregisterCallbacksFromTarget methods to register and unregister the event callbacks.\n",1600],["Create an ExampleDragger manipulator",1600],["The following example creates a manipulator that moves an element when you click and drag it:",1600],["```lang-csharp",1600],["using UnityEngine;",1600],["using UnityEngine.UIElements;",1600],["public class ExampleDragger : PointerManipulator",1600],["private Vector3 m_Start;",1600],["protected bool m_Active;",1600],["private int m_PointerId;",1600],["private Vector2 m_StartSize;",1600],["public ExampleDragger()",1600],["m_PointerId = -1;",1600],["activators.Add(new ManipulatorActivationFilter { button = MouseButton.LeftMouse });",1600],["m_Active = false;",1600],["protected override void RegisterCallbacksOnTarget()",1600],["target.RegisterCallback(OnPointerDown);",1600],["target.RegisterCallback(OnPointerMove);",1600],["target.RegisterCallback(OnPointerUp);",1600],["protected override void UnregisterCallbacksFromTarget()",1600],["target.UnregisterCallback(OnPointerDown);",1600],["target.UnregisterCallback(OnPointerMove);",1600],["target.UnregisterCallback(OnPointerUp);",1600],["protected void OnPointerDown(PointerDownEvent e)",1600],["if (m_Active)",1600],["e.StopImmediatePropagation();",1600],["return;",1600],["if (CanStartManipulation(e))",1600],["m_Start = e.localPosition;",1600],["m_PointerId = e.pointerId;",1600],["m_Active = true;",1600],["target.CapturePointer(m_PointerId);",1600],["e.StopPropagation();",1600],["protected void OnPointerMove(PointerMoveEvent e)",1600],["if (!m_Active !target.HasPointerCapture(m_PointerId))",1600],["return;",1600],["Vector2 diff = e.localPosition - m_Start;",1600],["target.style.top = target.layout.y + diff.y;",1600],["target.style.left = target.layout.x + diff.x;",1600],["e.StopPropagation();",1600],["protected void OnPointerUp(PointerUpEvent e)",1600],["if (!m_Active !target.HasPointerCapture(m_PointerId) !CanStopManipulation(e))",1600],["return;",1600],["m_Active = false;",1600],["target.ReleaseMouse();",1600],["e.StopPropagation();",1600],["Create an ExampleResizer manipulator",1600],["The following example creates a manipulator that resizes an element when you drag it:",1600],["```lang-csharp",1600],["using UnityEngine;",1600],["using UnityEngine.UIElements;",1600],["public class ExampleResizer : PointerManipulator",1600],["private Vector3 m_Start;",1600],["protected bool m_Active;",1600],["private int m_PointerId;",1600],["private Vector2 m_StartSize;",1600],["public ExampleResizer()",1600],["m_PointerId = -1;",1600],["activators.Add(new ManipulatorActivationFilter { button = MouseButton.LeftMouse });",1600],["m_Active = false;",1600],["protected override void RegisterCallbacksOnTarget()",1600],["target.RegisterCallback(OnPointerDown);",1600],["target.RegisterCallback(OnPointerMove);",1600],["target.RegisterCallback(OnPointerUp);",1600],["protected override void UnregisterCallbacksFromTarget()",1600],["target.UnregisterCallback(OnPointerDown);",1600],["target.UnregisterCallback(OnPointerMove);",1600],["target.UnregisterCallback(OnPointerUp);",1600],["protected void OnPointerDown(PointerDownEvent e)",1600],["if (m_Active)",1600],["e.StopImmediatePropagation();",1600],["return;",1600],["if (CanStartManipulation(e))",1600],["m_Start = e.localPosition;",1600],["m_StartSize = target.layout.size;",1600],["m_PointerId = e.pointerId;",1600],["m_Active = true;",1600],["target.CapturePointer(m_PointerId);",1600],["e.StopPropagation();",1600],["protected void OnPointerMove(PointerMoveEvent e)",1600],["if (!m_Active !target.HasPointerCapture(m_PointerId))",1600],["return;",1600],["Vector2 diff = e.localPosition - m_Start;",1600],["target.style.height = m_StartSize.y + diff.y;",1600],["target.style.width = m_StartSize.x + diff.x;",1600],["e.StopPropagation();",1600],["protected void OnPointerUp(PointerUpEvent e)",1600],["if (!m_Active !target.HasPointerCapture(m_PointerId) !CanStopManipulation(e))",1600],["return;",1600],["m_Active = false;",1600],["target.ReleasePointer(m_PointerId);",1600],["m_PointerId = -1;",1600],["e.StopPropagation();",1600],["Add or remove a manipulator",1600],["To add a manipulator to an element, use the AddManipulator method. To remove a manipulator from an element, use the RemoveManipulator method.",1600],["The following example adds and removes the ExampleDragger to a VisualElement:",1600],["```lang-csharp",1600],["// Create a VisualElement.",1600],["var myElement = new VisualElement();",1600],["// Add manipulators to the VisualElement.",1600],["myElement.AddManipulator(new ExampleDragger());",1600],["// Remove manipulators from the VisualElement.",1600],["myElement.RemoveManipulator();",1600],["The following example adds the ExampleResizer to a VisualElement:",1600],["```lang-csharp",1600],["var box = new VisualElement()",1600],["style =",1600],["left = 100,",1600],["top = 100,",1600],["width = 100,",1600],["height = 100,",1600],["backgroundColor = Color.red",1600],["},",1600],["pickingMode = PickingMode.Position,",1600],["};",1600],["box.AddManipulator(new ExampleResizer());",1600],["Additional resources",1600],["\nHandle events\n",1600],["\nCreate a drag-and-drop UI inside a custom Editor window\n",1600],["\nCreate a drag-and-drop UI to drag between Editor windows\n",1600],["Migration guides",1601],["This section includes the following pages:",1601],["Topic Description ",1601],["-------------------- ----------------------- ",1601],["Migrate from Unity UI (uGUI) to UI Toolkit Understand the similarities and differences between uGUI and the UI Toolkit. ",1601],["Migrate from Immediate Mode GUI (IMGUI) to UI Toolkit Understand the similarities and differences between IMGUI and the UI Toolkit. ",1601],["Mouse events",1602],["Mouse events occur when you interact with the UI using a mouse. Touch, pens, or other pointing devices generate other events, not mouse events.",1602],["In the Mouse event APIs and in this documentation, the term “mouse” refers only to a physical mouse or a virtual mouse that emulates a physical mouse.",1602],["Mouse events are always preceded by the corresponding PointerEvent.",1602],["The base class for all mouse events is MouseEventBase.",1602],["Event Description Trickles down Bubbles up Cancellable ",1602],["------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------- ----------------- -------------- --------------- ",1602],["MouseDownEvent Sent when the user presses a mouse button. Yes Yes Yes ",1602],["MouseUpEvent Sent when the user releases a mouse button. Yes Yes Yes ",1602],["MouseMoveEvent Sent when the user moves the mouse. Yes Yes Yes ",1602],["WheelEvent Sent when the user activates the mouse wheel. Yes Yes Yes ",1602],["MouseEnterWindowEvent Sent when the mouse enters a window. Yes ",1602],["MouseLeaveWindowEvent Sent when the mouse leaves a window. Yes ",1602],["MouseEnterEvent Sent when the mouse enters an element or one of its descendants. Yes Yes ",1602],["MouseLeaveEvent Sent when the mouse leaves an element or one of its descendants. Yes Yes ",1602],["MouseOverEvent Sent when the mouse enters an element. Yes Yes Yes ",1602],["MouseOutEvent Sent when the mouse leaves an element. Yes Yes Yes ",1602],["ContextClickEvent (obsolete) Sent when the user presses and releases the third mouse button. Exists for backwards compatibility with IMGUI. Yes Yes Yes ",1602],["Unique Properties",1602],["button**: The button property returns an integer that identifies the mouse button pressed to trigger an event. The following table lists the integer and associated mouse button:",1602],["Integer Button ",1602],["----------- ------------- ",1602],["0 Left button ",1602],["1 Right button ",1602],["2 Middle button ",1602],["pressedButtons**: The pressedButton property returns an integer that identifies which combination of mouse buttons are currently pressed.",1602],["The number is the sum of the individual buttons’ integer value (see table below). For example, holding the right mouse button and the middle mouse button pressed at the same time will result in pressedButton having a value of 6.",1602],["Integer Button ",1602],["----------- ------------- ",1602],["1 Left button ",1602],["2 Right button ",1602],["4 Middle button ",1602],["modifiers**: The modifiers property returns the modifier key pressed during a keyboard event. Some examples of modifiers are the Shift, Ctrl, or Alt keys.",1602],["For more information, see the Modifier keys section of the MDN documentation.",1602],["mousePosition**: The mousePosition property returns the mouse position within the panel, also known as the screen coordinate system. For more information on panel coordinates, see the Visual Tree page.",1602],["localMousePosition**: The localMousePosition property returns the coordinates relative to the target visual element.",1602],["mouseDelta**: The difference between the pointer's position during the previous mouse event and its position during the current mouse event.",1602],["Event list",1602],["The following list provides the name, description, and target of each event in the event family. For more information on the event, see the UI Toolkit API.",1602],["MouseDownEvent",1602],["A MouseDownEvent is sent when the mouse button is pressed while the cursor is inside a visual element.",1602],["target**: The visual element that receives the mouse capture. Otherwise, it's the topmost selectable element under the cursor.",1602],["MouseUpEvent",1602],["The MouseUpEvent triggers when a mouse button releases while the cursor is within a visual element. MouseUpEvent is complimentary to MouseDownEvent.",1602],["target**: The visual element that receives the mouse capture. Otherwise, it's the topmost selectable element under the cursor.",1602],["MouseMoveEvent",1602],["The MouseMoveEvent is sent when the cursor hotspot is moved within a visual element.",1602],["target**: The visual element that receives the mouse capture. Otherwise, it's the topmost selectable element under the cursor.",1602],["WheelEvent",1602],["The WheelEvent is sent when the mouse wheel is pressed.",1602],["target**: The visual element that receives the mouse capture. Otherwise, it's the topmost selectable element under the cursor.",1602],["MouseEnterWindowEvent",1602],["A MouseEnterWindowEvent triggers when the cursor is moved into an Editor window. Runtime panels don't receive this event when you enter the Game view window.",1602],["target**: The visual element that receives the mouse capture. Otherwise, it's the topmost selectable element under the cursor.",1602],["MouseLeaveWindowEvent",1602],["MouseLeaveWindowEvent fires when the cursor exits the space of an Editor window. The MouseLeaveWindowEvent is the counterpoint to MouseEnterWindowEvent.",1602],["target**: The visual element that receives the mouse capture. Otherwise it returns null, as the cursor isn't over an element.",1602],["MouseEnterEvent",1602],["The MouseEnterEvent is sent when the cursor is moved into a visual element, or one of its descendants.",1602],["target**: The visual element under the mouse cursor, or one of its descendants.",1602],["MouseLeaveEvent",1602],["MouseLeaveEvent triggers when the cursor moves outside of a visual element. This event differs from MouseOutEvent as this event is sent to each element the mouse exits. This event doesn't propagate.",1602],["target**: The visual element (or one of its descendants) that the mouse cursor exits.",1602],["MouseOverEvent",1602],["The MouseOverEvent is sent when the cursor enters an element. This differs from MouseEnterEvent, because this event is only sent to the entered element.",1602],["target**: The visual element that's under the mouse cursor.",1602],["MouseOutEvent",1602],["The MouseOutEvent triggers when a pointing device moves the cursor outside the boundary of a visual element.",1602],["MouseOutEvent is different from MouseLeaveEvent in that MouseOutEvent is sent when leaving the visual element to any other element, while MouseLeaveEvent isn't sent when transitioning from a visual element to descendant elements.",1602],["target**: The visual element that the mouse cursor exited.",1602],["ContextualMenuPopulateEvent",1602],["Event sent by the ContextualMenuManager when the contextual menu needs to be populated with menu items.",1602],["target**: The visual element for which the contextual menu is being built.",1602],["ContextClickEvent (obsolete)",1602],["Event sent when the user presses and releases the third mouse button. This event only exists for backward compatibility with IMGUI.",1602],["Examples",1602],["Editor window example",1602],["The following code sample creates an Editor window with three buttons that prints messages to the console when the mouse moves over an element, or buttons are pressed on the mouse.",1602],["This code sample highlights the event firing of both MouseDownEvent and MouseEnterEvent, and how to use the event parameters.",1602],["To see the example in action, do the following:",1602],["Create a new C# script called MouseEventTestWindow.cs.",1602],["Copy the example into the C# script.",1602],["Open the example under Window > UI Toolkit > Mouse Event Test Window.",1602],["```lang-csharp",1602],["using UnityEditor;",1602],["using UnityEngine;",1602],["using UnityEngine.UIElements;",1602],["// Open this in the Editor via the menu Window > UI ToolKit > Mouse Event Test Window",1602],["public class MouseEventTestWindow : EditorWindow",1602],["[MenuItem(\"Window/UI Toolkit/Mouse Event Test Window\")]",1602],["public static void ShowExample()",1602],["MouseEventTestWindow wnd = GetWindow();",1602],["wnd.titleContent = new GUIContent(\"Mouse Event Test Window\");",1602],["public void CreateGUI()",1602],["// Add a few buttons",1602],["for (int i = 0; i < 3; i++)",1602],["Button newElement = new Button { name = $\"Button {i}\", text = $\"Button {i}\" };",1602],["newElement.style.flexGrow = 1;",1602],["rootVisualElement.Add(newElement);",1602],["// Register mouse event callbacks",1602],["rootVisualElement.RegisterCallback(OnMouseDown, TrickleDown.TrickleDown);",1602],["rootVisualElement.RegisterCallback(OnMouseEnter, TrickleDown.TrickleDown);",1602],["private void OnMouseDown(MouseDownEvent evt)",1602],["bool leftMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.LeftMouse));",1602],["bool rightMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.RightMouse));",1602],["bool middleMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.MiddleMouse));",1602],["Debug.Log($\"Mouse Down event. Triggered by {(MouseButton)evt.button}.\");",1602],["Debug.Log($\"Pressed buttons: Left button: {leftMouseButtonPressed} Right button: {rightMouseButtonPressed} Middle button: {middleMouseButtonPressed}\");",1602],["private void OnMouseEnter(MouseEnterEvent evt)",1602],["VisualElement targetElement = (VisualElement)evt.target;",1602],["Debug.Log($\"Mouse is now over element '{targetElement.name}'\");",1602],["Runtime example",1602],["The following code sample prints messages to the console when any mouse buttons are pressed, showing which button triggered the event, and which buttons are currently pressed.",1602],["This code sample highlights registering a callback to the MouseDownEvent and how to use the event parameters.",1602],["To see the example in action, do the following:",1602],["Create a GameObject with a valid UIDocument.",1602],["Under Assets > Scripts, create a C# script called MouseEventTestRuntime.",1602],["Copy the example into the C# script.",1602],["Attach the MouseEventTestRuntime script to the GameObject with the UIDocument.",1602],["Enter Play mode.",1602],["Move the mouse over the game view and press or hold buttons on the mouse.",1602],["```lang-csharp",1602],["using UnityEngine;",1602],["using UnityEngine.UIElements;",1602],["public class MouseEventTestRuntime : MonoBehaviour",1602],["void Start()",1602],["var root = GetComponent().rootVisualElement;",1602],["var newLabel = new Label(\"Move the mouse or press buttons to see the log output\");",1602],["newLabel.style.flexGrow = 1;",1602],["root.Add(newLabel);",1602],["root.RegisterCallback(OnMouseDown, TrickleDown.TrickleDown);",1602],["private void OnMouseDown(MouseDownEvent evt)",1602],["bool leftMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.LeftMouse));",1602],["bool rightMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.RightMouse));",1602],["bool middleMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.MiddleMouse));",1602],["VisualElement targetElement = (VisualElement)evt.target;",1602],["Debug.Log($\"Mouse Down event. Triggered by {(MouseButton)evt.button} over element '{targetElement.name}'\");",1602],["Debug.Log($\"Pressed buttons: Left button: {leftMouseButtonPressed} Right button: {rightMouseButtonPressed} Middle button: {middleMouseButtonPressed}\");",1602],["Navigation events",1603],["Navigation events occur at runtime when the user presses the D-pad, moves a joystick, or presses the Escape, Enter or arrow keys. They're an indicator that the user is trying to navigate the UI, but they're not limited to a specific input device, such as a keyboard. The difference from a Focus event is that the navigation event doesn't require the focus to move to a new UI element.",1603],["The base class for all navigation events is NavigationEventBase.",1603],["All navigation events trickle down, bubble up, and are cancellable, but it's recommended to listen to these events during the bubble-up propagation phase. This is because navigation events are triggered by input events that might also be used to interact with individual controls. For example, a button will react to a press of the Enter key with a button click, and it will cancel the NavigationSubmitEvent. Listening to these events during the bubble-up phase makes sure that they're navigation events.",1603],["Event Description Trickles down Bubbles up Cancellable ",1603],["------------------------------------------------------------------- ---------------------------------------- ----------------- -------------- --------------- ",1603],["NavigationMoveEvent Sent when user makes a move input. ✔ ✔ ✔ ",1603],["NavigationCancelEvent Sent when the user makes a cancel input. ✔ ✔ ✔ ",1603],["NavigationSubmitEvent Sent when the user makes a submit input. ✔ ✔ ✔ ",1603],["Event list",1603],["NavigationMoveEvent",1603],["The NavigationMoveEvent is sent when the user presses the D-pad, moves a joystick, or presses the arrow keys.",1603],["Some controls will use the arrow keys for their own functionality. For example, the ListView allows the user to select items using the up and down arrow keys. In this case, the control will cancel the NavigationMoveEvent and the event won't enter the bubble-up phase.",1603],["direction**: The direction of the navigation. (None, Left, Up, Right, Down)",1603],["move**: The move vector. If the event was triggered by an analog axis input, like a joystick, this property gives access to the directional vector.",1603],["NavigationTabEvent",1603],["THIS EVENT IS CURRENTLY NOT PUBLICLY EXPOSED -> but that might change in the future",1603],["The NavigationTabEvent is sent when the user presses L1/R1 or presses Tab or Shift+Tab key. It navigates forward, toward the next element, or backwards, towards the previous element.",1603],["direction**: The direction of the navigation. (None, Next, Previous)",1603],["-->",1603],["NavigationCancelEvent",1603],["The NavigationCancelEvent is triggered when the user cancels the current navigation action, such as by pressing the `Escape`` key on the keyboard. It's important to note that this event doesn't affect the currently focused element, which means that the UI element that had focus before the cancellation remains selected.",1603],["NavigationSubmitEvent",1603],["The NavigationSubmitEvent is triggered when the user presses the submit button, such as by pressing the `Enter`` key on the keyboard.",1603],["If a control handles the event itself, it cancels the event, preventing it from entering the bubble-up phase. For example, a TextField that has the focus will stop the NavigationSubmitEvent from bubbling up. On the other hand, a focusable Label or Image will allow the NavigationSubmitEvent to bubble up to its parent elements, allowing them to handle the event if needed.",1603],["Example",1603],["The following code example shows how to register callbacks for navigation events in a runtime UI:",1603],["```lang-csharp",1603],["using UnityEngine.UIElements;",1603],["public class MyNavigationHandler : MonoBehaviour",1603],["void OnEnable()",1603],["// Get a reference to the root visual element",1603],["var uiDocument = GetComponent();",1603],["var rootVisualElement = uiDocument.rootVisualElement;",1603],["// Register for navigation events",1603],["rootVisualElement.RegisterCallback(OnNavCancelEvent);",1603],["rootVisualElement.RegisterCallback(OnNavMoveEvent);",1603],["rootVisualElement.RegisterCallback(OnNavSubmitEvent);",1603],["private void OnNavSubmitEvent(NavigationSubmitEvent evt)",1603],["Debug.Log($\"OnNavSubmitEvent {evt.propagationPhase}\");",1603],["private void OnNavMoveEvent(NavigationMoveEvent evt)",1603],["Debug.Log($\"OnNavMoveEvent {evt.propagationPhase} - move {evt.move} - direction {evt.direction}\");",1603],["private void OnNavCancelEvent(NavigationCancelEvent evt)",1603],["Debug.Log($\"OnNavCancelEvent {evt.propagationPhase}\");",1603],["Additional resources",1603],["Panel events",1604],["A panel represents a visible instance of a UI hierarchy. It handles element behavior event dispatching within the hierarchy of the visual tree. It holds a reference to the root visual element of the hierarchy. For runtime UI, it’s comparable to the Canvas in UGUI.",1604],["You must attach an instance of a visual element to a panel for it to render or receive events.",1604],["Panel events fire on a visual element when its relationship with a panel changes. For example, when you add the visual element to a panel (AttachToPanelEvent) or remove it from a panel (DetachFromPanelEvent).",1604],["Panel events are only sent to visual elements and their descendants within a hierarchy that are directly affected when panel changes occur. Parent elements don't receive events when descendant visual elements attach or detach from the panel.",1604],["For example, in the UXML code below, when you add the parent visual element to a hierarchy that's already attached to a panel, parent, child, and grandchild all receive the same event. If you remove parent from the same UXML hierarchy, all visual elements would receive DetachFromPanel events.",1604],["```lang-xml",1604],["",1604],["",1604],["",1604],["",1604],["",1604],["",1604],["",1604],["The base class for all panel events is PanelChangedEventBase.",1604],["Event Description Trickles down Bubbles up Cancellable ",1604],["--------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------- -------------- --------------- ",1604],["AttachToPanelEvent Sent right after the element (or one of its parents) is attached to a panel. ",1604],["DetachFromPanelEvent Sent just before an element (or one of its parents) is detached from a panel. ",1604],["Unique properties",1604],["originPanel**: The originPanel contains data specific to the DetachFromPanelEvent. It contains the source panel that the visual element detaches from during a panel change.",1604],["destinationPanel**: The destinationPanel contains data specific to the AttachFromPanelEvent. It provides the panel where the visual element is now attached.",1604],["Event list",1604],["The following list provides the name, description, and target of each event in the event family.",1604],["AttachToPanelEvent",1604],["The AttachToPanelEvent fires after a visual element attaches to a panel. It also occurs when you add a visual element to a hierarchy that's attached to a panel.",1604],["target**: The visual element that's attached to a panel.",1604],["DetachFromPanelEvent",1604],["The DetachFromPanelEvent triggers before you remove a visual element from a panel. It also occurs when you remove a visual element from a hierarchy that's attached to a panel.",1604],["target**:The visual element that's detaching from a panel.",1604],["Examples",1604],["The following example creates an Editor window with a button that will add additional labels to the window. Clicking the labels will remove them again.",1604],["This example implements a custom label class that prints a message to the console whenever the instance of the VisualElement is attached or detached from a panel. It highlights the behavior of the AttachToPanelEvent and DetachFromPanelEvent events and how to use the originPanel and destinationPanel properties.",1604],["To see the example in action, do the following:",1604],["Under Assets > Scripts > Editor, create a C# script called PanelEventsTestWindow.",1604],["Copy the example code into the C# script.",1604],["From the Editor Toolbar, select Window > UI Toolkit > Panel Events Test Window.",1604],["```lang-csharp",1604],["using UnityEditor;",1604],["using UnityEngine;",1604],["using UnityEngine.UIElements;",1604],["public class PanelEventsTestWindow : EditorWindow",1604],["[MenuItem(\"Window/UI Toolkit/Panel Events Test Window\")]",1604],["public static void ShowExample()",1604],["PanelEventsTestWindow wnd = GetWindow();",1604],["wnd.titleContent = new GUIContent(\"Panel Events Test Window\");",1604],["public void CreateGUI()",1604],["// Set a name for the panel",1604],["rootVisualElement.panel.visualTree.name = \"Our Window Root Visual Element\";",1604],["// Add a button which will add new instances of our custom labels to the window",1604],["rootVisualElement.Add(new Button(() => rootVisualElement.Add(new CustomLabel())) { text = \"Add New Label\" });",1604],["/// ",1604],["/// Custom label class which prints out a console message when it is attached or detached.",1604],["/// ",1604],["public class CustomLabel : Label",1604],["private static int m_InstanceCounter = 0;",1604],["private int m_LabelNumber;",1604],["public CustomLabel() : base()",1604],["m_LabelNumber = ++m_InstanceCounter;",1604],["text = $\"Label #{m_LabelNumber} - click me to detach\";",1604],["RegisterCallback(evt =>",1604],["Debug.Log($\"I am label {m_LabelNumber} and I \" +",1604],["$\"just got attached to panel '{evt.destinationPanel.visualTree.name}'\");",1604],["});",1604],["RegisterCallback(evt =>",1604],["Debug.Log($\"I am label {m_LabelNumber} and I \" +",1604],["$\"just got detached from panel '{evt.originPanel.visualTree.name}'\");",1604],["});",1604],["// Register a pointer down callback that removes this element from the hierarchy",1604],["RegisterCallback(evt => this.RemoveFromHierarchy());",1604],["Panels",1605],["The panel is the parent object of a visual tree. It owns the rootVisualElement but itself isn't a visual element. A visual tree must connect to a panel for the visual elements inside a tree to render. All panels belong to either an Editor Window or a runtime UIDocument. The panel also handles focus control and event dispatching for the visual tree.",1605],["Every element in a visual tree holds a direct reference to the panel that holds the visual tree. To verify the connection of a VisualElement to a panel, you can test the panel property of this element. When the visual element isn't connected, the test returns null.",1605],["Additional resources",1605],["\nDispatch events\n",1605],["\nThe visual tree\n",1605],["\nThe Panel Settings asset\n",1605],["\nRelative and absolute positioning C# example\n",1605],["Performance consideration for runtime UI",1606],["This page describes how you can improve the performance for runtime UI.",1606],["Use usage hints to reduce draw calls and geometry regeneration",1606],["You can use usage hints to set how an element is used at runtime. Usage hints can reduce draw calls and avoid geometry regeneration.",1606],["You can set the usage hints in UI Builder, UXML, or C#. The following examples set the usage hints to DynamicTransform:",1606],["UXML**:",1606],["```lang-xml",1606],["",1606],["C#**:",1606],["```lang-csharp",1606],["visualElement.usageHints = UsageHints.DynamicTransform;",1606],["The supported usage hints are:",1606],["\nDynamicTransform\n",1606],["\nGroupTransform\n",1606],["\nMaskContainer\n",1606],["\nDynamicColor\n",1606],["For more information, see usageHints and VisualElement.usageHints.",1606],["Consider device capabilities",1606],["Some Android devices and WebGL can't partially patch index buffers. If your audience uses such devices or if you target WebGL, UI Toolkit rendering is still functional but performance may be degraded. To avoid performance degradation, don't animate too many elements at the same time and profile on device.",1606],["Avoid mesh tessellation",1606],["It's computationally expensive to build mesh tessellation for visual elements. Any time the size (width/height) of the element changes, its geometry re-builds, which can be an issue with animations or frequent resizing.",1606],["Generally speaking, transforms and texture aren't good choices in terms of flexibility and re-use. However, when you animate, to get better performance, do the following:",1606],["\nUse transforms instead of width or other layout properties\n",1606],["\nUse textures or 2D sprites instead of rounded corners and borders\n",1606],["Control textures of the dynamic atlas",1606],["To reduce the number of batches broken by texture changes and achieve good performance, use an atlas to group together textures used at the same time. You can achieve this with either of the following methods:",1606],["\nUse a sprite atlas. With this method, you have more control over the sprites but you need to manually create the sprite atlas.\n",1606],["\nUse a dynamic atlas. UI Toolkit automatically adds textures to, or removes textures from, a dynamic atlas when visual elements reference them.\n",1606],["Verify textures in dynamic atlas",1606],["When you use dynamic atlas to group together textures, to limit the number of draw calls, make sure that your textures enter the dynamic atlas. To verify, use the Frame Debugger. Frame Debugger helps you to observe texture changes and deduce batch breaking.",1606],["The following example verifies that the dynamic atlas contains all the textures in runtime UI.",1606],["Apply built-in filters",1606],["The dynamic atlas texture starts from a specified minimum size, and grows as needed, doubling horizontally or vertically, up to a specified maximum size. You can define the minimum and maximum atlas sizes in the Panel Settings asset. You can also use the filters in the dynamic atlas to decide whether to add a sub-texture to the atlas.",1606],["To enable or disable the filters, in the Panel Settings asset's Inspector window, select the options from Dynamic Atlas Settings > Active Filters dropdown list.",1606],["Use custom filters",1606],["You can assign a custom filter to PanelSettings.dynamicAtlasSettings.customFilter to add or relax constraints on a global or per-texture basis.",1606],["The following custom filter example bypasses a large texture from the Size filter while keeping the Size filter active for other textures:",1606],["```lang-csharp",1606],["using UnityEngine;",1606],["using UnityEngine.UIElements;",1606],["class MyCustomFilter : MonoBehaviour",1606],["public PanelSettings panelSettings;",1606],["public Texture2D largeTexture;",1606],["void OnEnable() { panelSettings.dynamicAtlasSettings.customFilter = Filter; }",1606],["void OnDisable() { panelSettings.dynamicAtlasSettings.customFilter = null; }",1606],["bool Filter(Texture2D texture, ref DynamicAtlasFilters filtersToApply)",1606],["if (texture == largeTexture)",1606],["// Disable the Size check for this one.",1606],["filtersToApply &= ~DynamicAtlasFilters.Size;",1606],["return true;",1606],["Additional resources",1606],["\nPanel Settings asset\n",1606],["\nusageHints\n",1606],["Create a pie chart in the Editor and runtime UI",1607],["Version**: 2022.1+",1607],["This example demonstrates how to use the Vector API to create graphs in the Editor and runtime UI.",1607],["Example overview",1607],["This example generates a pie chart onto a VisualElement, and displays it in the Editor and runtime UI.",1607],["You can find the completed files that this example creates in this GitHub repository.",1607],["Prerequisites",1607],["\nGenerate 2D visual content\n",1607],["\nMeshGenerationContext\n",1607],["Create the pie chart graph",1607],["Create a C# script that uses the Arc and Fill methods in the Vector API to draw a pie chart into a visual element.",1607],["Create a Unity project with any template.",1607],["Create a folder named pie-chart to store your files.",1607],["In the pie-chart folder, create a C# script named PieChart.cs with the following content:",1607],["```lang-csharp",1607],["using System.Collections;",1607],["using System.Collections.Generic;",1607],["using UnityEngine;",1607],["using UnityEngine.UIElements;",1607],["public class PieChart : VisualElement",1607],["float m_Radius = 100.0f;",1607],["float m_Value = 40.0f;",1607],["public float radius",1607],["get => m_Radius;",1607],["set",1607],["m_Radius = value;",1607],["public float diameter => m_Radius * 2.0f;",1607],["public float value {",1607],["get { return m_Value; }",1607],["set { m_Value = value; MarkDirtyRepaint(); }",1607],["public PieChart()",1607],["generateVisualContent += DrawCanvas;",1607],["void DrawCanvas(MeshGenerationContext ctx)",1607],["var painter = ctx.painter2D;",1607],["painter.strokeColor = Color.white;",1607],["painter.fillColor = Color.white;",1607],["var percentage = m_Value;",1607],["var percentages = new float[] {",1607],["percentage, 100 - percentage",1607],["};",1607],["var colors = new Color32[] {",1607],["new Color32(182,235,122,255),",1607],["new Color32(251,120,19,255)",1607],["};",1607],["float angle = 0.0f;",1607],["float anglePct = 0.0f;",1607],["int k = 0;",1607],["foreach (var pct in percentages)",1607],["anglePct += 360.0f * (pct / 100);",1607],["painter.fillColor = colors[k++];",1607],["painter.BeginPath();",1607],["painter.MoveTo(new Vector2(m_Radius, m_Radius));",1607],["painter.Arc(new Vector2(m_Radius, m_Radius), m_Radius, angle, anglePct);",1607],["painter.Fill();",1607],["angle = anglePct;",1607],["Add the pie chart in the Editor UI",1607],["Create a folder named Editor to store your files.",1607],["In the Editor folder, create a C# script named PieChartWindow.cs with the following contents:",1607],["```lang-cs",1607],["using UnityEditor;",1607],["using UnityEngine;",1607],["using UnityEngine.UIElements;",1607],["public class PieChartWindow : EditorWindow",1607],["[MenuItem(\"Tools/PieChart Window\")]",1607],["public static void ShowExample()",1607],["PieChartWindow wnd = GetWindow();",1607],["wnd.titleContent = new GUIContent(\"PieChartWindow\");",1607],["public void CreateGUI()",1607],["VisualElement root = rootVisualElement;",1607],["root.Add(new PieChart());",1607],["To see the pie chart in the Editor window, from the menu, select Tools > PieChart Window.",1607],["Add the pie chart in the runtime UI",1607],["Add the pie chart in the UIDocument GameObject in the SampleScene.",1607],["In the pie-chart folder, create a C# script named PieChartComponet.cs with the following content:",1607],["```lang-cs",1607],["using System.Collections;",1607],["using System.Collections.Generic;",1607],["using UnityEngine;",1607],["using UnityEngine.UIElements;",1607],["[RequireComponent(typeof(UIDocument))]",1607],["public class PieChartComponent : MonoBehaviour",1607],["PieChart m_PieChart;",1607],["void Start()",1607],["m_PieChart = new PieChart();",1607],["GetComponent().rootVisualElement.Add(m_PieChart);",1607],["In the SampleScene, select GameObject > UI Toolkit > UI Document.",1607],["Select the UIDocument GameObject in the hierarchy.",1607],["Add PieChartComponet.cs as a component of the UIDocument GameObject.",1607],["Enter Play mode to see the pie chart in the scene.",1607],["Additional resources",1607],["Pointer events",1608],["Pointer events fire for UI interactions with a pointing device. Similar to mouse events, pointer events provide additional information about the used input device, such as pen pressure or tilt angle.",1608],["Pointer events always precede mouse events in UI Toolkit.",1608],["Pointer events don't have a persistent position. They also don't have a set position when they're released from the touch device.",1608],["Some pointer events, such as PointerStationaryEvent and PointerCancelEvent events, have conditions triggered by the operating system (OS) of the input device.",1608],["The base class for all pointer events is PointerEventBase.",1608],["Event Description Trickles down Bubbles up Cancellable ",1608],["--------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------ ----------------- -------------- --------------- ",1608],["PointerDownEvent Sent when you press a pointer. Yes Yes Yes ",1608],["PointerUpEvent Sent when you release a pointer. Yes Yes Yes ",1608],["PointerMoveEvent Sent when the pointer changes state. Yes Yes Yes ",1608],["PointerEnterEvent Sent when the pointer enters a visual element, or one of its descendants. Yes Yes ",1608],["PointerLeaveEvent Sent when the pointer leaves a visual element and all of its descendants. Yes Yes ",1608],["PointerOverEvent Sent when the pointer enters a visual element. Yes Yes Yes ",1608],["PointerOutEvent Sent when the pointer leaves a visual element. Yes Yes Yes ",1608],["PointerStationaryEvent Sent when a pointer type (like a stylus or finger) doesn't change for a set amount of time determined by the operating system. Yes Yes Yes ",1608],["PointerCancelEvent Sent when a pointer action is cancelled by the operating system. Yes Yes Yes ",1608],["Unique properties",1608],["altitudeAngle**: The altitudeAngle contains the angle of the stylus relative to the surface, in radians. A value of 0 indicates that the stylus is parallel to the surface. A value of pi/2 indicates that it's perpendicular to the surface.",1608],["azimuthAngle**: The azimuthAngle contains the angle of the stylus relative x-axis, in radians. A value of 0 indicates that the stylus points along the x-axis of the device.",1608],["button**: The button property returns an integer that identifies the mouse button pressed to trigger the event. The following table lists the integer and associated mouse button:",1608],["Integer Button ",1608],["----------- ------------- ",1608],["0 Left button ",1608],["1 Right button ",1608],["2 Middle button ",1608],["clickCount**: The clickCount property contains the number of times the button is pressed.",1608],["deltaPosition**: The deltaPosition property contains the difference between the pointer's position during the previous mouse event and its position during the current mouse event.",1608],["deltaTime**: The deltaTime property contains the amount of time that has passed since the last recorded change in pointer values, in seconds.",1608],["localPosition**: The localPosition property returns the pointer position relative to the target visual element.",1608],["modifiers**: The modifiers property returns the modifier key currently held down. Some examples of modifiers are the Shift, Ctrl, or Alt keys. For more information, see the Modifier keys section of the MDN documentation.",1608],["pointerId**: The pointerId property returns an integer that identifies the pointer that sends the event.",1608],["pointerType**: The pointerType property returns a string that defines the type of pointer that creates the event.",1608],["position**: The position property returns the pointer position in the screen or world coordinate system.",1608],["pressedButtons**: The pressedButton property returns an integer that identifies which combination of mouse buttons are currently pressed.",1608],["The number is the sum of the individual buttons’ integer value (see table below). For example, holding the right mouse button and the middle mouse button pressed at the same time will result in pressedButton having a value of 6.",1608],["Integer Button ",1608],["----------- ------------- ",1608],["1 Left button ",1608],["2 Right button ",1608],["4 Middle button ",1608],["pressure**: The pressure property returns the amount of pressure currently applied by a touch. If the device doesn't report pressure, the value of this property is 1.0f.",1608],["radius**: The radius property returns an estimate of the radius of a touch. Add radiusVariance to get the maximum touch radius, subtract it to get the minimum touch radius.",1608],["radiusVariance**: The radiusVariance property value determines the accuracy of the touch radius. Add this value to the radius to get the maximum touch radius, subtract it to get the minimum touch radius.",1608],["tangentialPressure**: The tangentialPressure property returns a float value representing the pressure applied to an additional pressure-sensitive control on the stylus.",1608],["twist**: The twist property returns the rotation of the stylus around its axis, in radians.",1608],["Event list",1608],["The following list provides the name, description, and target of each event in the event family. For more information on the event, see the UI Toolkit API.",1608],["PointerDownEvent",1608],["The PointerDownEvent is sent when you press a pointer inside a visual element.",1608],["target**: The visual element that receives the pointer capture. Otherwise, it's the topmost selectable element under the cursor.",1608],["PointerUpEvent",1608],["A PointerUpEvent triggers when you release a pointer within a visual element.",1608],["When the PointerUpEvent event triggers, it also removes the pointer coordinates. It also clears the cache of the pointer, so there's no record of the pointer location.",1608],["target**: The visual element that receives the pointer capture. Otherwise, it's the topmost selectable element under the cursor.",1608],["PointerMoveEvent",1608],["The PointerMoveEvent occurs when the pointer changes state.",1608],["target**: The visual element that receives the pointer capture. Otherwise, it's the topmost selectable element under the cursor.",1608],["PointerEnterEvent",1608],["The PointerEnterEvent is sent when the pointer enters a visual element, or one of its descendants.",1608],["target**: The visual element (or one of its descendants) that the pointer exits.",1608],["PointerLeaveEvent",1608],["A PointerLeaveEvent is sent when the pointer leaves a visual element and all its descendants. For example if a visual element contains a child, then the parent element will receive this event when the pointer is no longer over either the parent or the child. The parent element won't receive the PointerLeaveEvent while the pointer is still over one of its child elements, even if it's no longer the topmost element underneath the pointer. It will receive the PointerOverEvent instead.",1608],["target**: The visual element (or one of its descendants) that the pointer exits.",1608],["PointerOverEvent",1608],["The PointerOverEvent is sent when the pointer enters a visual element.",1608],["target**: The visual element under the pointer.",1608],["PointerOutEvent",1608],["The PointerOutEvent is sent when the pointer leaves a visual element.",1608],["target**: The visual element that the pointer exits.",1608],["PointerStationaryEvent",1608],["The PointerStationaryEvent is sent when a pointer type (like a stylus or finger) doesn't change for a set amount of time determined by the operating system.",1608],["target**: The visual element that captures the pointer, or the topmost selectable element under the pointer.",1608],["PointerCancelEvent",1608],["The PointerCancelEvent is sent when a pointer action is cancelled by the operating system.",1608],["target**: The visual element that captures the pointer, or the topmost selectable element under the pointer.",1608],["Examples",1608],["The following code sample creates an Editor window with a red box containing a yellow box. It prints messages to the console when the pointer leaves a visual element or its child. It demonstrates the behavior of the PointerOutEvent and the PointerLeaveEvent.",1608],["To see the example in action, do the following:",1608],["Under Assets > Scripts > Editor, create a new UXML file called PointerEventsTestWindow.uxml",1608],["Copy the UXML code from below into it",1608],["Under Assets > Scripts > Editor, create a new C# file called PointerEventsTestWindow.cs",1608],["Copy a code sample into the C# script.",1608],["From the Editor Toolbar, select Window > UI Toolkit > Pointer Events Test Window.",1608],["UXML code",1608],["```lang-xml",1608],["",1608],["",1608],["",1608],["",1608],["",1608],["",1608],["",1608],["C# code",1608],["```lang-csharp",1608],["using UnityEditor;",1608],["using UnityEngine;",1608],["using UnityEngine.UIElements;",1608],["using UnityEditor.UIElements;",1608],["public class PointerEventsTestWindow : EditorWindow",1608],["[MenuItem(\"Window/UI Toolkit/Pointer Events Test Window\")]",1608],["public static void ShowExample()",1608],["PointerEventsTestWindow wnd = GetWindow();",1608],["wnd.titleContent = new GUIContent(\"Pointer Events Test Window\");",1608],["public void CreateGUI()",1608],["// Import UXML",1608],["VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath(\"Assets/Scripts/Editor/PointerEventsTestWindow.uxml\");",1608],["visualTree.CloneTree(rootVisualElement);",1608],["// Get the red box and register pointer event callbacks",1608],["VisualElement redBox = rootVisualElement.Q(\"Red_Box\");",1608],["redBox.RegisterCallback(OnPointerOutEvent, TrickleDown.TrickleDown);",1608],["redBox.RegisterCallback(OnPointerLeaveEvent, TrickleDown.TrickleDown);",1608],["private void OnPointerLeaveEvent(PointerLeaveEvent evt)",1608],["Debug.Log($\"Pointer LEAVE Event. Target: {(evt.target as VisualElement).name}\");",1608],["private void OnPointerOutEvent(PointerOutEvent evt)",1608],["Debug.Log($\"Pointer OUT Event. Target: {(evt.target as VisualElement).name}\");",1608],["Additional resources",1608],["Use Vector API to create a radial progress indicator",1609],["Version**: 2022.1+",1609],["This example demonstrates how to create custom controls and use the Vector API to draw visual content onto a visual element.",1609],["Example overview",1609],["This example creates a custom control that displays progress, as an alternative to a loading bar. The progress indicator displays a progress value in a partially filled ring around a label that displays the percentage. It supports a value between 0 and 100, which determines how much of the ring is filled.",1609],["You can find the completed files that this example creates in this GitHub repository.",1609],["Prerequisites",1609],["\nUI Builder\n",1609],["\nUXML\n",1609],["\nUSS\n",1609],["\nGenerate 2D visual content\n",1609],["\nMeshGenerationContext\n",1609],["Create the radial progress control and its custom mesh",1609],["Create a C# script to define a RadialProgress visual element and a C# script to define the custom mesh. Style the visual element with a USS file.",1609],["Create a Unity project with any template.",1609],["Create a folder named radial-progress to store your files.",1609],["In the radial-progress folder, create a C# script named RadialProgress.cs with the following content:",1609],["```lang-cs",1609],["using Unity.Collections;",1609],["using UnityEngine;",1609],["using UnityEngine.UIElements;",1609],["namespace MyUILibrary",1609],["// An element that displays progress inside a partially filled circle",1609],["public class RadialProgress : VisualElement",1609],["public new class UxmlTraits : VisualElement.UxmlTraits",1609],["// The progress property is exposed to UXML.",1609],["UxmlFloatAttributeDescription m_ProgressAttribute = new UxmlFloatAttributeDescription()",1609],["name = \"progress\"",1609],["};",1609],["// Use the Init method to assign the value of the progress UXML attribute to the C# progress property.",1609],["public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)",1609],["base.Init(ve, bag, cc);",1609],["(ve as RadialProgress).progress = m_ProgressAttribute.GetValueFromBag(bag, cc);",1609],["// Define a factory class to expose this control to UXML.",1609],["public new class UxmlFactory : UxmlFactory { }",1609],["// These are USS class names for the control overall and the label.",1609],["public static readonly string ussClassName = \"radial-progress\";",1609],["public static readonly string ussLabelClassName = \"radial-progress__label\";",1609],["// These objects allow C# code to access custom USS properties.",1609],["static CustomStyleProperty s_TrackColor = new CustomStyleProperty(\"--track-color\");",1609],["static CustomStyleProperty s_ProgressColor = new CustomStyleProperty(\"--progress-color\");",1609],["Color m_TrackColor = Color.gray;",1609],["Color m_ProgressColor = Color.red;",1609],["// This is the label that displays the percentage.",1609],["Label m_Label;",1609],["// This is the number that the Label displays as a percentage.",1609],["float m_Progress;",1609],["// A value between 0 and 100",1609],["public float progress",1609],["// The progress property is exposed in C#.",1609],["get => m_Progress;",1609],["set",1609],["// Whenever the progress property changes, MarkDirtyRepaint() is named. This causes a call to the",1609],["// generateVisualContents callback.",1609],["m_Progress = value;",1609],["m_Label.text = Mathf.Clamp(Mathf.Round(value), 0, 100) + \"%\";",1609],["MarkDirtyRepaint();",1609],["// This default constructor is RadialProgress's only constructor.",1609],["public RadialProgress()",1609],["// Create a Label, add a USS class name, and add it to this visual tree.",1609],["m_Label = new Label();",1609],["m_Label.AddToClassList(ussLabelClassName);",1609],["Add(m_Label);",1609],["// Add the USS class name for the overall control.",1609],["AddToClassList(ussClassName);",1609],["// Register a callback after custom style resolution.",1609],["RegisterCallback(evt => CustomStylesResolved(evt));",1609],["// Register a callback to generate the visual content of the control.",1609],["generateVisualContent += GenerateVisualContent;",1609],["progress = 0.0f;",1609],["static void CustomStylesResolved(CustomStyleResolvedEvent evt)",1609],["RadialProgress element = (RadialProgress)evt.currentTarget;",1609],["element.UpdateCustomStyles();",1609],["// After the custom colors are resolved, this method uses them to color the meshes and (if necessary) repaint",1609],["// the control.",1609],["void UpdateCustomStyles()",1609],["bool repaint = false;",1609],["if (customStyle.TryGetValue(s_ProgressColor, out m_ProgressColor))",1609],["repaint = true;",1609],["if (customStyle.TryGetValue(s_TrackColor, out m_TrackColor))",1609],["repaint = true;",1609],["if (repaint)",1609],["MarkDirtyRepaint();",1609],["void GenerateVisualContent(MeshGenerationContext context)",1609],["float width = contentRect.width;",1609],["float height = contentRect.height;",1609],["var painter = context.painter2D;",1609],["painter.lineWidth = 10.0f;",1609],["painter.lineCap = LineCap.Butt;",1609],["// Draw the track",1609],["painter.strokeColor = m_TrackColor;",1609],["painter.BeginPath();",1609],["painter.Arc(new Vector2(width * 0.5f, height * 0.5f), width * 0.5f, 0.0f, 360.0f);",1609],["painter.Stroke();",1609],["// Draw the progress",1609],["painter.strokeColor = m_ProgressColor;",1609],["painter.BeginPath();",1609],["painter.Arc(new Vector2(width * 0.5f, height * 0.5f), width * 0.5f, -90.0f, 360.0f * (progress / 100.0f) - 90.0f);",1609],["painter.Stroke();",1609],["Additional resources",1609],["Use Mesh API to create a radial progress indicator",1610],["Version**: 2021.3+",1610],["This example demonstrates how to use the Mesh API to draw visual content onto a visual element.",1610],["Note**: The Mesh API is a tool for advanced users. In version 2022.1 and later, if you only want to generate simple geometry, use the Vector API instead. For more information, see Use Vector API to create a radial progress indicator.",1610],["Example overview",1610],["This example creates a custom control that displays progress, as an alternative to a loading bar. The progress indicator displays a progress value in a partially filled ring around a label that displays the percentage. It supports a value between 0 and 100, which determines how much of the ring is filled.",1610],["You can find the completed files that this example creates in this GitHub repository.",1610],["Prerequisites",1610],["\nUI Builder\n",1610],["\nUSS\n",1610],["\nHandling events\n",1610],["\nMeshGenerationContext\n",1610],["Create the radial progress indicator and its custom mesh",1610],["Create two C# files with one defining the RadialProgress class and another defining the custom mesh. In the C# file that defines the RadialProgress class, create a Factory class to expose the control to UXML and UI Builder.",1610],["Create a Unity project with any template.",1610],["Create a folder named radial-progress to store your files.",1610],["In the radial-progress folder, create a C# scrip named RadialProgress.cs with the following content:",1610],["```lang-cs",1610],["using Unity.Collections;",1610],["using UnityEngine;",1610],["using UnityEngine.UIElements;",1610],["namespace MyUILibrary",1610],["// An element that displays progress inside a partially filled circle",1610],["public class RadialProgress : VisualElement",1610],["public new class UxmlTraits : VisualElement.UxmlTraits",1610],["// The progress property is exposed to UXML.",1610],["UxmlFloatAttributeDescription m_ProgressAttribute = new UxmlFloatAttributeDescription()",1610],["name = \"progress\"",1610],["};",1610],["// Use the Init method to assign the value of the progress UXML attribute to the C# progress property.",1610],["public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)",1610],["base.Init(ve, bag, cc);",1610],["(ve as RadialProgress).progress = m_ProgressAttribute.GetValueFromBag(bag, cc);",1610],["// Define a factory class to expose this control to UXML.",1610],["public new class UxmlFactory : UxmlFactory { }",1610],["// These are USS class names for the control overall and the label.",1610],["public static readonly string ussClassName = \"radial-progress\";",1610],["public static readonly string ussLabelClassName = \"radial-progress__label\";",1610],["// These objects allow C# code to access custom USS properties.",1610],["static CustomStyleProperty s_TrackColor = new CustomStyleProperty(\"--track-color\");",1610],["static CustomStyleProperty s_ProgressColor = new CustomStyleProperty(\"--progress-color\");",1610],["// These are the meshes this control uses.",1610],["EllipseMesh m_TrackMesh;",1610],["EllipseMesh m_ProgressMesh;",1610],["// This is the label that displays the percentage.",1610],["Label m_Label;",1610],["// This is the number of outer vertices to generate the circle.",1610],["const int k_NumSteps = 200;",1610],["// This is the number that the Label displays as a percentage.",1610],["float m_Progress;",1610],["// A value between 0 and 100",1610],["public float progress",1610],["// The progress property is exposed in C#.",1610],["get => m_Progress;",1610],["set",1610],["// Whenever the progress property changes, MarkDirtyRepaint() is named. This causes a call to the",1610],["// generateVisualContents callback.",1610],["m_Progress = value;",1610],["m_Label.text = Mathf.Clamp(Mathf.Round(value), 0, 100) + \"%\";",1610],["MarkDirtyRepaint();",1610],["// This default constructor is RadialProgress's only constructor.",1610],["public RadialProgress()",1610],["// Create a Label, add a USS class name, and add it to this visual tree.",1610],["m_Label = new Label();",1610],["m_Label.AddToClassList(ussLabelClassName);",1610],["Add(m_Label);",1610],["// Create meshes for the track and the progress.",1610],["m_ProgressMesh = new EllipseMesh(k_NumSteps);",1610],["m_TrackMesh = new EllipseMesh(k_NumSteps);",1610],["// Add the USS class name for the overall control.",1610],["AddToClassList(ussClassName);",1610],["// Register a callback after custom style resolution.",1610],["RegisterCallback(evt => CustomStylesResolved(evt));",1610],["// Register a callback to generate the visual content of the control.",1610],["generateVisualContent += context => GenerateVisualContent(context);",1610],["progress = 0.0f;",1610],["static void CustomStylesResolved(CustomStyleResolvedEvent evt)",1610],["RadialProgress element = (RadialProgress)evt.currentTarget;",1610],["element.UpdateCustomStyles();",1610],["// After the custom colors are resolved, this method uses them to color the meshes and (if necessary) repaint",1610],["// the control.",1610],["void UpdateCustomStyles()",1610],["if (customStyle.TryGetValue(s_ProgressColor, out var progressColor))",1610],["m_ProgressMesh.color = progressColor;",1610],["if (customStyle.TryGetValue(s_TrackColor, out var trackColor))",1610],["m_TrackMesh.color = trackColor;",1610],["if (m_ProgressMesh.isDirty m_TrackMesh.isDirty)",1610],["MarkDirtyRepaint();",1610],["// The GenerateVisualContent() callback method calls DrawMeshes().",1610],["static void GenerateVisualContent(MeshGenerationContext context)",1610],["RadialProgress element = (RadialProgress)context.visualElement;",1610],["element.DrawMeshes(context);",1610],["// DrawMeshes() uses the EllipseMesh utility class to generate an array of vertices and indices, for both the",1610],["// \"track\" ring (in grey) and the progress ring (in green). It then passes the geometry to the MeshWriteData",1610],["// object, as returned by the MeshGenerationContext.Allocate() method. For the \"progress\" mesh, only a slice of",1610],["// the index arrays is used to progressively reveal parts of the mesh.",1610],["void DrawMeshes(MeshGenerationContext context)",1610],["float halfWidth = contentRect.width * 0.5f;",1610],["float halfHeight = contentRect.height * 0.5f;",1610],["if (halfWidth < 2.0f halfHeight < 2.0f)",1610],["return;",1610],["m_ProgressMesh.width = halfWidth;",1610],["m_ProgressMesh.height = halfHeight;",1610],["m_ProgressMesh.borderSize = 10;",1610],["m_ProgressMesh.UpdateMesh();",1610],["m_TrackMesh.width = halfWidth;",1610],["m_TrackMesh.height = halfHeight;",1610],["m_TrackMesh.borderSize = 10;",1610],["m_TrackMesh.UpdateMesh();",1610],["// Draw track mesh first",1610],["var trackMeshWriteData = context.Allocate(m_TrackMesh.vertices.Length, m_TrackMesh.indices.Length);",1610],["trackMeshWriteData.SetAllVertices(m_TrackMesh.vertices);",1610],["trackMeshWriteData.SetAllIndices(m_TrackMesh.indices);",1610],["// Keep progress between 0 and 100",1610],["float clampedProgress = Mathf.Clamp(m_Progress, 0.0f, 100.0f);",1610],["// Determine how many triangles are used to depending on progress, to achieve a partially filled circle",1610],["int sliceSize = Mathf.FloorToInt((k_NumSteps * clampedProgress) / 100.0f);",1610],["if (sliceSize == 0)",1610],["return;",1610],["// Every step is 6 indices in the corresponding array",1610],["sliceSize *= 6;",1610],["var progressMeshWriteData = context.Allocate(m_ProgressMesh.vertices.Length, sliceSize);",1610],["progressMeshWriteData.SetAllVertices(m_ProgressMesh.vertices);",1610],["var tempIndicesArray = new NativeArray(m_ProgressMesh.indices, Allocator.Temp);",1610],["progressMeshWriteData.SetAllIndices(tempIndicesArray.Slice(0, sliceSize));",1610],["tempIndicesArray.Dispose();",1610],["Create a C# script named EllipseMesh.cs with the following content:",1610],["```lang-cs",1610],["using UnityEngine;",1610],["using UnityEngine.UIElements;",1610],["namespace MyUILibrary",1610],["public class EllipseMesh",1610],["int m_NumSteps;",1610],["float m_Width;",1610],["float m_Height;",1610],["Color m_Color;",1610],["float m_BorderSize;",1610],["bool m_IsDirty;",1610],["public Vertex[] vertices { get; private set; }",1610],["public ushort[] indices { get; private set; }",1610],["public EllipseMesh(int numSteps)",1610],["m_NumSteps = numSteps;",1610],["m_IsDirty = true;",1610],["public void UpdateMesh()",1610],["if (!m_IsDirty)",1610],["return;",1610],["int numVertices = numSteps * 2;",1610],["int numIndices = numVertices * 6;",1610],["if (vertices == null vertices.Length != numVertices)",1610],["vertices = new Vertex[numVertices];",1610],["if (indices == null indices.Length != numIndices)",1610],["indices = new ushort[numIndices];",1610],["float stepSize = 360.0f / (float)numSteps;",1610],["float angle = -180.0f;",1610],["for (int i = 0; i < numSteps; ++i)",1610],["angle -= stepSize;",1610],["float radians = Mathf.Deg2Rad * angle;",1610],["float outerX = Mathf.Sin(radians) * width;",1610],["float outerY = Mathf.Cos(radians) * height;",1610],["Vertex outerVertex = new Vertex();",1610],["outerVertex.position = new Vector3(width + outerX, height + outerY, Vertex.nearZ);",1610],["outerVertex.tint = color;",1610],["vertices[i * 2] = outerVertex;",1610],["float innerX = Mathf.Sin(radians) * (width - borderSize);",1610],["float innerY = Mathf.Cos(radians) * (height - borderSize);",1610],["Vertex innerVertex = new Vertex();",1610],["innerVertex.position = new Vector3(width + innerX, height + innerY, Vertex.nearZ);",1610],["innerVertex.tint = color;",1610],["vertices[i * 2 + 1] = innerVertex;",1610],["indices[i * 6] = (ushort)((i == 0) ? vertices.Length - 2 : (i - 1) * 2); // previous outer vertex",1610],["indices[i * 6 + 1] = (ushort)(i * 2); // current outer vertex",1610],["indices[i * 6 + 2] = (ushort)(i * 2 + 1); // current inner vertex",1610],["indices[i * 6 + 3] = (ushort)((i == 0) ? vertices.Length - 2 : (i - 1) * 2); // previous outer vertex",1610],["indices[i * 6 + 4] = (ushort)(i * 2 + 1); // current inner vertex",1610],["indices[i * 6 + 5] = (ushort)((i == 0) ? vertices.Length - 1 : (i - 1) * 2 + 1); // previous inner vertex",1610],["m_IsDirty = false;",1610],["public bool isDirty => m_IsDirty;",1610],["void CompareAndWrite(ref float field, float newValue)",1610],["if (Mathf.Abs(field - newValue) > float.Epsilon)",1610],["m_IsDirty = true;",1610],["field = newValue;",1610],["public int numSteps",1610],["get => m_NumSteps;",1610],["set",1610],["m_IsDirty = value != m_NumSteps;",1610],["m_NumSteps = value;",1610],["public float width",1610],["get => m_Width;",1610],["set => CompareAndWrite(ref m_Width, value);",1610],["public float height",1610],["get => m_Height;",1610],["set => CompareAndWrite(ref m_Height, value);",1610],["public Color color",1610],["get => m_Color;",1610],["set",1610],["m_IsDirty = value != m_Color;",1610],["m_Color = value;",1610],["public float borderSize",1610],["get => m_BorderSize;",1610],["set => CompareAndWrite(ref m_BorderSize, value);",1610],["Additional resources",1610],["Reference other files from UXML",1611],["In a UXML file, you can use the <Template> and the <Style> elements to reference other UXML or USS files. The two elements both accept either an src attribute or a path attribute.",1611],["The src attribute",1611],["Use the following syntax for the src attribute:",1611],["```lang-xml",1611],["src=\"/\"",1611],["Any errors during import, such as missing files, trigger an error message.",1611],["The path attribute",1611],["The path attribute uses the Unity Resources mechanisms, but doesn't offer error reporting at import time and doesn't allow relative paths.",1611],["The path attribute accepts files located in either the Resources folder or the Editor Default Resources folder, with the following rules:",1611],["\nIf the file is in the Resources folder, don't include the file extension. For example, write path=\"template\" for a file located at Assets/Resources/template.uxml.\n",1611],["\nIf the file is in the Editor Default Resources folder, you must include the file extension. For example, write path=\"template.uxml\" for a file located at Assets/Editor Default Resources/template.uxml.\n",1611],["Additional resources",1611],["\nAdd styles to UXML\n",1611],["\nReuse UXML files\n",1611],["Relative and absolute positioning",1612],["This example demonstrates the difference between relative and absolute positioning. This example also demonstrates how to use C# and UXML/USS to add and style UI controls.",1612],["Example overview",1612],["The example uses the automatic layout system to add boxes to an Editor and a runtime UI. One box demonstrates a relative offset of 25 px, while another box demonstrates the absolute position of 25 px, 25 px.",1612],["The example structures the Editor UI with C# script and the runtime UI with UXML and CSS.",1612],["You can find the completed files that this example creates in this GitHub repository.",1612],["Prerequisites",1612],["Create the example for the Editor UI",1612],["Create a custom Editor window and add all the boxes with a C# script: four boxes with gray backgrounds for comparison purposes; one box with a black background set up using absolute position placement; one box with a purple background set up using relative position placement.",1612],["Create a Unity project with any template.",1612],["Right-click in the Project window, then select Create > UI Toolkit > Editor Window.",1612],["In the C# box of the UI Toolkit Editor Window Creator window, enter PositioningTestWindow.",1612],["Clear the UXML and USS checkboxes.",1612],["Select Confirm. This creates a C# file called PositioningTestWindow.cs.",1612],["Replace PositioningTestWindow.cs with the following content:",1612],["```lang-csharp",1612],["using UnityEditor;",1612],["using UnityEngine;",1612],["using UnityEngine.UIElements;",1612],["public class PositioningTestWindow : EditorWindow",1612],["[MenuItem(\"Window/UI Toolkit/Positioning Test Window\")]",1612],["public static void ShowExample()",1612],["var wnd = GetWindow();",1612],["wnd.titleContent = new GUIContent(\"Positioning Test Window\");",1612],["public void CreateGUI()",1612],["for (int i = 0; i < 2; i++)",1612],["var temp = new VisualElement();",1612],["temp.style.width = 70;",1612],["temp.style.height = 70;",1612],["temp.style.marginBottom = 2;",1612],["temp.style.backgroundColor = Color.gray;",1612],["this.rootVisualElement.Add(temp);",1612],["// Relative positioning",1612],["var relative = new Label(\"Relative\\nPos\\n25, 0\");",1612],["relative.style.width = 70;",1612],["relative.style.height = 70;",1612],["relative.style.left = 25;",1612],["relative.style.marginBottom = 2;",1612],["relative.style.backgroundColor = new Color(0.2165094f, 0, 0.254717f);",1612],["this.rootVisualElement.Add(relative);",1612],["for (int i = 0; i < 2; i++)",1612],["var temp = new VisualElement();",1612],["temp.style.width = 70;",1612],["temp.style.height = 70;",1612],["temp.style.marginBottom = 2;",1612],["temp.style.backgroundColor = Color.gray;",1612],["this.rootVisualElement.Add(temp);",1612],["// Absolute positioning",1612],["var absolutePositionElement = new Label(\"Absolute\\nPos\\n25, 25\");",1612],["absolutePositionElement.style.position = Position.Absolute;",1612],["absolutePositionElement.style.top = 25;",1612],["absolutePositionElement.style.left = 25;",1612],["absolutePositionElement.style.width = 70;",1612],["absolutePositionElement.style.height = 70;",1612],["absolutePositionElement.style.backgroundColor = Color.black;",1612],["this.rootVisualElement.Add(absolutePositionElement);",1612],["To see the example, from the menu, select Window > UI Toolkit > Positioning Test Window.",1612],["Create the example for the runtime UI",1612],["Create a USS file named PositioningTest.uss with the following content:",1612],["```lang-css",1612],[".box {",1612],["height: 70px;",1612],["width: 70px;",1612],["margin-bottom: 2px;",1612],["background-color: gray;",1612],["relative{",1612],["width: 70px;",1612],["height: 70px;",1612],["background-color: purple;",1612],["left: 25px;",1612],["margin-bottom: 2px;",1612],["position:relative;",1612],["absolutePositionElement{",1612],["left: 25px;",1612],["top: 25px;",1612],["width: 70px;",1612],["height: 70px;",1612],["background-color: black;",1612],["position: absolute;",1612],["Create a UXML document named PositioningTest.uxml with the following content:",1612],["```lang-xml",1612],["",1612],["xsi=\"http://www.w3.org/2001/XMLSchema-instance\" engine=\"UnityEngine.UIElements\"",1612],["editor=\"UnityEditor.UIElements\" noNamespaceSchemaLocation=\"../UIElementsSchema/UIElements.xsd\"",1612],["editor-extension-mode=\"False\">",1612],["",1612],["",1612],["",1612],["",1612],["",1612],["",1612],["",1612],["",1612],["Create a C# script named PositioningTestRuntime.cs with the following content:",1612],["```lang-cs",1612],["using UnityEngine;",1612],["using UnityEngine.UIElements;",1612],["public class PostionTestRuntime : MonoBehaviour",1612],["void OnEnable()",1612],["GetComponent();",1612],["Right-click in the Hierarchy window, and then select UI Toolkit > UI Document.",1612],["In the Inspector window of the UI Document, select UI Document > Source Asset > PositioningTest.",1612],["In the Inspector window of the UI Document, select Add Component > Positioning Test Runtime.",1612],["Enter Play mode and adjust the resolution as necessary to see the result.",1612],["Additional resources",1612],["Render UI in the Game view",1613],["To render UI and react to input from the users in the Game view, connect the UXML Documents to a Panel Settings asset by a UI Document component.",1613],["Every UI Document component references a UXML Document that defines the UI and a Panel Settings that renders it. You can connect more than one UXML Document to a single Panel Settings asset.",1613],["Configure a panel",1613],["A Panel Settings asset defines a panel in the Scene. The panel provides the root visual element that UI hierarchies are attached to, and draws the UI in the Scene at runtime. How you configure the Panel Settings asset determines how the UI is rendered. It also determines how the UI reacts to input. For example, the panel that's visually in the front intercepts clicks from the user before the panels that are visually in the back.",1613],["You can configure the Panel Settings asset to do the following:",1613],["\nControl scale and resolution\n",1613],["\nApply default styles\n",1613],["\nDisplay UI on Render Textures\n",1613],["\nSet the panel's sort order\n",1613],["To configure a panel:",1613],["In your project, select Assets > Create > UI Toolkit > Panel Settings to create a Panel Settings asset if you don't have it.",1613],["In the Inspector window of the Panel Settings asset, configure the Panel Settings properties.",1613],["Connect the UI to a panel",1613],["A panel can display UI from more than one UXML Document component. Each UI Document has a Sort Order property that sets the UXML Document rendering order:",1613],["\nChild UI Document components are drawn on top of their parent UI Document components.\n",1613],["\nUI Documents components that are at the same level of the hierarchy are rendered in sequence according to their Sort Order.\n",1613],["To connect more than one UXML Document to a panel:",1613],["Select or create a GameObject to host the UI.",1613],["Select Component > UI Toolkit > UI Document to add a UI Document component.",1613],["In the Inspector window of the UIDocument, do the following:",1613],["Set the Panel Settings to the Panel Settings to display the UI.",1613],["Set the Source to the UXML Document that contains the UI to display.",1613],["Set the Sort Order UI Document component with a smaller number rendered first.",1613],["Repeat the process for each UXML Document.",1613],["Note**: If there are multiple UI document components attached to the same Panel Settings, all these documents have a common focus navigation context. If they have distinct Panel Settings, navigation won't jump automatically from one to the other even if you arrange them side by side. To make navigation jump from one to the other, you must set the focusController of the Panel Settings to the FocusController of the UI Document component you want to jump to.",1613],["",1613],["Lifecycle of UI Document components",1613],["Unity loads a UI Document component's source UXML documents when it calls the OnEnable() method on the component. To ensure the visual tree loads correctly, add logic to interact with the controls inside the OnEnable() method. This means your script must respond to OnEnable() and OnDisable() to safely reference visual elements from your UXML documents.",1613],["A UI Document component clears its contents when it responds to the OnEnable() and OnDisable() methods. This approach removes UI elements that the UI Document won't reuse soon and effectively clears the associated resources. Additionally, if a UI Document component isn't assigned with a Panel Settings asset, it automatically clears its contents.",1613],["To hide a UI element that's likely to be reused soon or needs to appear quickly to avoid an initialization penalty, set the display of the UIDocument.rootVisualElement to none. You can also use this to hide a UI element component that's part of a larger UI hierarchy.",1613],["Additional resources",1613],["Reuse UXML files",1614],["You can create a UXML file as a template and reuse it in other UXML files.",1614],["Import a UXML template",1614],["When you design a large user interface, you can create template UXML files that define parts of the UI, and use the <Template> and <Instance> elements to import it into another UXML file.",1614],["For example, if you have a portrait UI element that has an image, a name, and a label, you can create a UXML template file as Assets/Portrait.uxml with the following content:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["You can then reuse the Portrait template like this:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["Override UXML attributes",1614],["When you create instances of a UXML template, you can override the default attribute values of its elements. Attribute overrides allow you to instantiate the same template many times with different values for each instance.",1614],["Override an attribute",1614],["You can override attributes with the UXML tag. To override an attribute, specify the following:",1614],["\nThe element-name attribute of the element whose attributes you want to override\n",1614],["\nThe name of the attribute to override\n",1614],["\nThe new attribute value\n",1614],["For example, if you want to display the same set of information for each player in your game, you can create a UXML template, and use attribute overrides to create player-specific instances.",1614],["First, create a template, such as MyTemplate.uxml, with the following content:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["Then, instance it from another UXML file and override its attributes to display each player's name and score:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["Override multiple attributes",1614],["You can specify more than one attribute per override. For example, the following syntax finds any element in the instance named player-name-label, and",1614],["\nOverrides the default value of its text attribute with the new value, Alice.\n",1614],["\nOverrides the default value of its tooltip attribute with the new value, Tooltip 1.\n",1614],["```lang-xml",1614],["",1614],["Nest attribute overrides",1614],["Attribute overrides propagate through nested templates in the element hierarchy. For example, if template A instances template B, and template B instances template C, both template A and template B can override attributes in template C.",1614],["When you override attributes in nested templates, the shallowest override takes precedence. In the example above, if template A and template B both override the same attribute of template C, the override in template A determines what actually appears in the rendered UI.",1614],["Override template instance styles",1614],["If you're creating instances of a UXML template, and an element in the template has an inline style defined with the style attribute, you can't use AttributeOverrides to override that style attribute. However, you can use USS selectors in a USS style sheet to override the styling of your template instances.",1614],["For example, if you have the following UXML template called Hotkeys.uxml that defines a #Container with two labels, and the #Container has an inline style that defines the flex row direction:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["If you want to create two template instances with the second having a reversed flex row direction, you can't use AttributeOverides to override the style attribute of the #Container element in your second instance.",1614],["To override the style, do the following:",1614],["Remove the style of the #Container in the above UXML template (Hotkeys.uxml).",1614],["In your UXML instances file, name your two instances, such as HotkeysXML and ReversedHotkeysXML.",1614],["Apply a USS style sheet, such as ContextHotkeys.uss, to your UXML instance file.",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["You can then create ContextHotkeys.uss to change the #Container style according to the template instance name:",1614],["```lang-css",1614],["ReversedHotkeysXML > #Container {",1614],["flex-direction: row-reverse;",1614],["HotkeysXML > #Container {",1614],["flex-direction: row;",1614],["Limitations",1614],["Attribute overrides have the following limitations:",1614],["\nAttribute overrides find matching attributes according to the element name you specify. You can't use USS Selectors or UQuery to match elements.\n",1614],["\nAlthough you can override an element’s binding-path attribute, data binding doesn't work with attribute overrides.\n",1614],["\nYou can't override an element's class, name, or style attributes.\n",1614],["Specify where to nest child elements in a UXML template",1614],["You can use the content-container attribute of a visual element to specify where to nest child elements in a UXML template. For example, if you have the following UXML template file as Assets/MyTemplate.uxml:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["",1614],["You can then apply the template with nested child elements as this:",1614],["```lang-xml",1614],["",1614],["",1614],["",1614],[" ",1614],["",1614],["",1614],["Note**: You can provide any value to the content-container attribute.",1614],["Additional resources",1614],["\nTemplates\n",1614],["Style text with rich text tags",1615],["You can use USS to style a whole text string, but what if you only want to style one word of your text string? This is difficult with USS, but it's simple with rich text tags.",1615],["Rich text tags are tags that you can place inside a text string to style the text between the tags.",1615],["For all the supported tags, see Supported tags.",1615],["Note**: In the current release, rich text tags aren't supported for TextField.",1615],["Rich text syntax",1615],["Rich text tags are similar to HTML or XML tags, but have less strict syntax.",1615],["A simple tag can have be just its name and have no additional values or attributes. For example, the <b> tag makes text bold.",1615],["Some tags have additional values or attributes like this:",1615],["\n<tag=\"value\">\n",1615],["\n<tag attribute=\"value\">\n",1615],["For example:",1615],["\n<color=”red”>: Makes text red\n",1615],["\n<sprite index=3>: Inserts the fourth sprite from the default Sprite Asset.\n",1615],["Note**: In a UXML file, you must use HTML code for the following characters:",1615],["\n<: (&lt;)\n",1615],["\n>: (&gt;)\n",1615],["\n\": (&quot;)\n",1615],["The following table lists possible attribute value types and example values.",1615],["Value type Example value ",1615],["",1615],["Decimals 0.5 ",1615],["Percentages 25% ",1615],["Pixel values 5px ",1615],["Font units 1.5em ",1615],["Hex color values #FFFFFF (RGB)#FFFFFFFF (RGBA)#FF (A) ",1615],["Names Both <link=”ID”> and <link=ID> are valid. ",1615],["Tag scope and nested tags",1615],["Tags have a scope that defines how much of the text they affect. Most of the time, a tag added to a specified point in the text affects all of the text from that point forward.",1615],["For example, if you add the tag <color=\"red\"> to the beginning of the text, it affects the entire text block: <color=\"red\">This text is red.",1615],["If you add the same tag in the middle of the text block, it affects only the text between the tag and the end of the block : This text turns<color=\"red\"> red.",1615],["If you use the same tag more than once in a text block, the last tag supersedes all previous tags of the same type: <color=\"red\">This text goes from red<color=\"green\"> to green.",1615],["You can also use a closing tag to limit the scope of a tag, and use nested tag within another tag: <color=red>This text is <color=green>mostly </color>red",1615],["The first <color> tag’s scope is the entire text block. The the second <color> tag has a closing tag that limits its scope to one word.",1615],["When you nest tags, you don't need to close their scopes in the same order that you started them.",1615],["Enable and disable rich text tags",1615],["Rich text tags are enabled by default.",1615],["To disable the rich text tag, do one of the following:",1615],["\nIn UI Builder, select the control and clear the Enable Rich Text checkbox in the Inspector window.\n",1615],["\nIn UXML, set the enable-rich-text attribute to false.\n",1615],["Additional resources",1615],["Runtime UI event system",1616],["UI Toolkit uses an event system to handle input and send events to all active panels.",1616],["The UI Toolkit's event system can receive events from IMGUI and the legacy Input Manager. Navigation events are created from axes defined in the legacy Input Manager. Other events come from the IMGUI event queue.",1616],["Except in specific instances, you don't need to add a component to the scene to use the event system.",1616],["Event system with multiple Panel Settings assets",1616],["If the Scene uses more than one Panel Settings asset, the event system sends pointer events to their panels according to their Sort Order. A pointer event propagates through the panels until a panel reacts to it.",1616],["The first panel that uses an event to affect the focused element becomes the focused panel for the event system. That panel continues to receive keyboard events until another event causes a different panel to become the focused panel.",1616],["Note**: Stopping an event's propagation and giving an element focus are two separate things. For example, when you click a button, it stops the propagation and allows only the button to react to being pressed, but it doesn't prevent the other default actions for the click, such as giving focus to the button or, in general, any focusable element that is clicked.",1616],["Use uGUI with UI Toolkit",1616],["You can use UI Toolkit UI Documents and uGUI components at the same time.",1616],["When you add your first uGUI element in the Scene, an Event System and a Standalone Input Module are automatically added to the Scene:",1616],["\nThe Event System allows uGUI objects to respond to events.\n",1616],["\nThe Standalone Input Module dispatches events to UI Toolkit elements.\n",1616],["The Event System reads the scene and executes events, whereas the Standalone Input Module interprets the input and requests event execution. You can replace the Standalone Input Module with other input modules. Other input modules change what input is consumed, but all events still go through the Event System to execute.",1616],["UI Toolkit uses the sorting order of the Panel and compares it with the sorting order of uGUI canvases and other valid raycast targets, to decide whether pointer events should be sent to a UI Toolkit element or to a uGUI object, or to something else in the scene. Similarly, UI Toolkit sets the Event System's currentSelectedGameObject to make sure that when a UI Toolkit panel wants to get focus, it removes the focus from other uGUI objects, and when a uGUI object becomes selected, UI Toolkit panels automatically lose their focus.",1616],["To add the event system manually, select GameObject > UI > Event System.",1616],["Use the event system and the input system with UI Toolkit",1616],["When you use UI Toolkit (and uGUI) with different input systems, you need to choose different input module and event system.",1616],["The following table describes the required components and settings for each input system usage:",1616],["Usage Required components Active Input Handling ",1616],["",1616],["UI Toolkit elements with legacy Input Manager Uses the default event system. No scene component is required. Input Manager (Old). ",1616],["UI Toolkit elements with Input System package An Input System UI Input Module and an Event System components. Input System Package (New) ",1616],["UI Toolkit elements and uGUI components with legacy Input Manager A Standalone Input Module and an Event System components. Input Manager (Old) or Both. ",1616],["UI Toolkit elements and uGUI components with Input System package An Input System UI Input Module and an Event System components. Input System Package (New) or Both ",1616],["You can find the Active Input Handling setting in Edit > Project Settings > Player > Active Input Handling.*",1616],["Use Input System package",1616],["You can use UI Toolkit with the Input System package:",1616],["Use the Package Manager to install the Input System package.",1616],["Select Edit > Project Settings > Player.",1616],["Set Active Input Handling to Input System Package (New).",1616],["Select GameObject > UI > Event System.",1616],["This adds an Event System GameObject that includes a Standalone Input Module in the Scene. The module shows an error message along with a button in the Inspector window.",1616],["Select Replace with InputSystemUIInputModule to replace the Standalone Input Module with the Input System UI Input Module. The Input System UI Input Module and its accompanying Event System allows the events of both UI Toolkit and uGUI elements to be dispatched correctly.",1616],["Additional resources",1616],["Panel Settings properties reference",1617],["The following tables describe the Panel Settings asset properties:",1617],["Property Description ",1617],["",1617],["Theme Style Sheet Apply a default TSS file to every UIDocument that the panel renders. ",1617],["Text Settings Set the Panel Text Settings asset for this panel. If this asset isn't set, UI Toolkit automatically creates one with the default settings. ",1617],["Target Texture Set the render texture for the panel.For a 3D game, display UI on 3D geometry in the scene. ",1617],["Target Display Set the display for the panel. Only set this if the target texture isn't set, as the target texture takes precedence over the target display. ",1617],["Sort Order Set the order that the UI System draws panels in if the Scene uses more than one panel. Panels with higher Sort Order values are drawn on top of panels with lower values. ",1617],["Scale Mode Set how the panel's UI scales when the screen size changes. ",1617],["Scale Mode Parameters Display different properties depending on the Scale Mode setting. ",1617],["Dynamic Atlas Settings Specify the settings that the dynamic atlas system uses. ",1617],[" **Min Atlas Size** Set the minimum size (width/height) of the atlas texture, in pixels. \n",1617],[" **Max Atlas Size** Set the maximum size (width/height) of the atlas texture, in pixels. \n",1617],[" **Max Sub Texture Size** Set the maximum size (width/height) of a texture that can be added to the atlas. \n",1617],[" **Active Filters** Set the [filters](#active-filters) that the dynamic atlas system uses to exclude textures from the texture atlas. \n",1617],["",1617],["Scale Mode parameters",1617],["The following table describes the parameters for each scale mode:",1617],["Scale Mode Scale Mode Parameters Description ",1617],["",1617],["Constant Pixel Size Set elements to stay the same size, in pixels, regardless of screen size. ",1617],["Scale Multiply element sizes by this value. Must be greater than 0. ",1617],["Constant Physical Size Set elements stay the same physical size regardless of screen size and resolution. ",1617],["Reference DPI Set the Reference DPI value to the screen density that your UI was designed for. When the system renders your UI, it tries to find the actual DPI value of the screen, and compares it to the Reference DPI. If they're different, the system scales the UI accordingly. ",1617],["Fallback DPI Use this value if the UI system can't determine the screen DPI. ",1617],["Scale with Screen Size Set elements to grow or shrink depending on the screen size. ",1617],["Screen Match Mode Set how to scale elements when the screen resolution is different from the Reference Resolution:Match Width or Height: Scale the canvas area with the width or the height as reference, or a linear interpolation between the width and the height.Shrink: Crop the canvas area either horizontally or vertically, so the size of the canvas is smaller than the reference. Expand: Expand the canvas area either horizontally or vertically, so the size of the canvas is larger than the reference. ",1617],["**Reference Resolution** Set the resolution that this panel's UI is designed for. If the screen resolution is larger than the reference resolution, the UI scales up. If it's smaller, the UI scales down. How the UI scales depends on the **Screen Match Mode**. \n",1617],["**Screen Match Mode Parameters** When **Screen Match Mode** is set to **Match Width or Height**, the **Match** value controls whether the UI system scales the UI to match the screen width, the screen height, or a mix of the two. <br/><br/>For example, if the value is `0`, it matches the width; if the value is `1`, it matches the height; if the value is `0.4`, it linearly interpolates between width and height by `40%`. \n",1617],["",1617],["Active Filters",1617],["You can apply more than one filter at a time. The following table describes each active filter.",1617],["Filter Description ",1617],["",1617],["Nothing Disable all the filters. ",1617],["Everything Apply all the filters. ",1617],["Readability Exclude textures that Texture2D.isReadable is set to true. Unity can't automatically update the dynamic atlas when you add a texture through APIs like Texture2D.SetPixels. You can use RuntimePanelUtils.SetTextureDirty to force the atlas to update its content for a given texture. ",1617],["Size Exclude textures that are larger than the Max Sub Texture Size setting. Large textures can saturate the atlas quickly. If you don't want to add large textures to the atlas, select this filter and adjust Max Sub Texture Size to fit your needs. By default, textures larger than 64x64 aren't allowed into the atlas. ",1617],["Format Store sRGB-encoded data with 8-bits per channel precision, and excludes sub-textures that would lose precision or be truncated when added to the atlas, such as an R16G16B16A16_FLOAT texture. ",1617],["Color Space Exclude R8G8B8A8_UNORM content when the project is in a linear color space. In a linear color space, the format of the RenderTexture of the dynamic atlas is R8G8B8A8_SRGB. The data stored in the RenderTexture is sRGB-encoded. When read from, it's linearized, and when written to, it's encoded to sRGB. Because of the limited precision of the format, R8G8B8A8_UNORM content stored in the atlas could cause banding to occur. ",1617],["Filter Mode Exclude textures for which the sub-texture filter mode, such as Point or Bilinear, doesn't match the atlas filter mode. This prevents the mismatch between the sub-texture filter mode and the atlas filter mode. The mismatch could cause unexpected blurriness or blockiness. ",1617],["Additional resources",1617],["Set background images with an image asset",1618],["You can use an imported or built-in image asset to set a background image for your UI.",1618],["Use UI Builder to set a background image",1618],["To use UI Builder to set a background image for your UI:",1618],["Import a background image into your project.",1618],["Create a regular VisualElement in UI Builder.",1618],["Set the element's background image to the imported image.",1618],["When you set the background image, you must select a supported background image type:",1618],["SVG Vector images",1618],["Note**: To use an SVG image as a background for a VisualElement, you must install a package. To do so, in the Package Manager window, install the package com.unity.vectorgraphics from Git URL.",1618],["Use C# to set a background image",1618],["To use C# to set a background image for your UI, assign the image to the style.backgroundImage property.",1618],["The following code example shows how to set background images for visual elements:",1618],["```lang-csharp",1618],["// Use the AssetDatabase method to load the texture.",1618],["myElement1.style.backgroundImage = AssetDatabase.LoadAssetAtPath(\"path/to/imageFile.png\");",1618],["// Use the AssetDatabase method to load the Sprite.",1618],["myElement2.style.backgroundImage = new StyleBackground(AssetDatabase.LoadAssetAtPath(\"path/to/spriteAssetFile.png\"));",1618],["// Load the texture from project's Resources folder.",1618],["myElement3.style.backgroundImage = Resources.Load(\"imageFile\");",1618],["// Load the Sprite from project's Resources folder.",1618],["myElement4.style.backgroundImage = new StyleBackground(Resources.Load(\"spriteAssetFile\"));",1618],["// Use the Unity Editor's default resources.",1618],["myElement5.style.backgroundImage = EditorGUIUtility.FindTexture(\"CloudConnect\");",1618],["myElement6.style.backgroundImage = EditorGUIUtility.IconContent(\"FolderOpened Icon\").image;",1618],["Additional resources",1618],["\nUXML element Image\n",1618],["\nImage import settings\n",1618],["\n9-Slice images with UI Toolkit\n",1618],["\nEditorGUIUtility\n",1618],["Get started with UI Toolkit",1619],["Want to create your first UI with UI Toolkit? Use this basic UI Toolkit workflow example to get started.",1619],["Note**: For demonstration purpose, this guide describes how to add UI controls for the Editor UI. However, the instructions on adding UI controls to a UI Document also apply to runtime UI. For more information, see Get started with runtime UI.",1619],["If you perform a specific task often, you can use UI Toolkit to create a dedicated UI for it. For example you can create a custom Editor window. The example demonstrates how to create a custom Editor window and add UI controls into your custom Editor window with UI Builder, UXML, and C# script.",1619],["You can find the completed files that this example creates in this GitHub repository.",1619],["Create a custom Editor window",1619],["Create a custom Editor window with two labels.",1619],["Create a project in Unity Editor with any template.",1619],["In the Project window, right-click in the Assets folder, and then select Create > UI Toolkit > Editor Window.",1619],["In UI Toolkit Editor Window Creator, enter MyCustomEditor.",1619],["Keep the UXML checkbox selected and clear the USS checkbox.",1619],["Click Confirm.",1619],["To open the Editor window, select Window > UI Toolkit > MyCustomEditor.",1619],["You can find the source files for it in the Assets/Editor folder.",1619],["Add UI controls to the window",1619],["You can add UI controls into your window in the following ways:",1619],["\nUse the UI Builder to visually add the UI controls\n",1619],["\nUse an XML-like text file (UXML) to add the UI controls\n",1619],["\nUse C# script to add the UI controls\n",1619],["You can use any of these methods individually, or combine. The following examples create three sets of labels, buttons, and toggles with a combination of these methods.",1619],["Use UI Builder to add UI controls",1619],["To visually add UI controls to your window, use UI Builder. The following steps add a button and a toggle into your custom Editor window in addition to the default label.",1619],["In the Editor folder, double-click MyCustomEditor.uxml to open the UI Builder.",1619],["In the UI Builder, drag Button and Toggle from Library > Controls into the Hierarchy or the window preview in the Viewport.",1619],["In the Hierarchy window, select Label.",1619],["In the Inspector window, change the default text to These controls were created in UI Builder in the Text field.",1619],["In the Hierarchy window, select Button.",1619],["In the Inspector window, enter This is button1 in the Text field.",1619],["Enter button1 in the Name field.",1619],["In the Hierarchy window, select Toggle.",1619],["In the Inspector window, enter Number? in the Label field.",1619],["Enter toggle1 in the Name field.",1619],["Save and close the UI Builder window.",1619],["Close your custom Editor window if you haven't done so.",1619],["Select Window > UI Toolkit > MyCustomEditor to re-open your custom Editor window to see the button and the toggle you just added.",1619],["Use UXML to add UI controls",1619],["If you prefer to define your UI in a text file, you can edit the UXML to add the UI controls. The following steps add another set of label, button, and toggle into your window.",1619],["In the Editor folder, click Assets > Create > UI Toolkit > UI Document to create a UXML file called MyCustomEditor_UXML.uxml.",1619],["Click the arrow on MyCustomEditor_UXML.uxml in the Project window.",1619],["Double-click inlineStyle to open MyCustomEditor_UXML.uxml in a text editor.",1619],["Replace the contents of MyCustomEditor_UXML.uxml with the following:",1619],["```lang-xml",1619],["",1619],["",1619],["xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"",1619],["xmlns:engine=\"UnityEngine.UIElements\"",1619],["xmlns:editor=\"UnityEditor.UIElements\"",1619],["xsi:noNamespaceSchemaLocation=\"../../UIElementsSchema/UIElements.xsd\"",1619],[">",1619],["",1619],["",1619],["",1619],["",1619],["Open MyCustomEditor.cs.",1619],["Add a private VisualTreeAsset field called m_UXMLTree to the MyCustomEditor class. Put the attribute [SerializeField] above it:",1619],["```lang-cs",1619],["[SerializeField]",1619],["private VisualTreeAsset m_UXMLTree;",1619],["Add the following code to the end of CreateGUI().",1619],["```lang-cs",1619],["root.Add(m_UXMLTree.Instantiate());",1619],["In the Project window, select MyCustomEditor.cs.",1619],["Drag MyCustomEditor_UXML.uxml from the Project window into the UXML Tree field in the Inspector. This assigns your UXML to the visual tree.",1619],["Select Window > UI Toolkit > MyCustomEditor. This opens your custom Editor window with three labels, two buttons, and two toggles.",1619],["Use C# script to add UI controls",1619],["If you prefer coding, you can add UI Controls to your window with a C# script. The following steps add another set of label, button, and toggle into your window.",1619],["Open MyCustomEditor.cs.",1619],["Unity uses UnityEngine.UIElements for basic UI controls like label, button, and toggle. To work with UI controls, you must add the following declaration if it's not already present.",1619],["```lang-cs",1619],["using UnityEngine.UIElements;",1619],["Change the text of the existing label from \"Hello World! From C#\" to \"These controls were created using C# code.\".",1619],["The EditorWindow class has a property called rootVisualElement. To add the UI controls to your window, first instantiate the element class with some attributes, and then use the Add methods of the rootVisualElement.",1619],["Your finished CreateGUI() method should look like the following:",1619],["```lang-cs",1619],["public void CreateGUI()",1619],["// Each editor window contains a root VisualElement object",1619],["VisualElement root = rootVisualElement;",1619],["// VisualElements objects can contain other VisualElements following a tree hierarchy.",1619],["Label label = new Label(\"These controls were created using C# code.\");",1619],["root.Add(label);",1619],["Button button = new Button();",1619],["button.name = \"button3\";",1619],["button.text = \"This is button3.\";",1619],["root.Add(button);",1619],["Toggle toggle = new Toggle();",1619],["toggle.name = \"toggle3\";",1619],["toggle.label = \"Number?\";",1619],["root.Add(toggle);",1619],["// Import UXML",1619],["var visualTree = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/MyCustomEditor.uxml\");",1619],["VisualElement labelFromUXML = visualTree.Instantiate();",1619],["root.Add(labelFromUXML);",1619],["Close your custom Editor window if you haven't done so.",1619],["Select Window > UI Toolkit > MyCustomEditor to re-open your custom Editor window to see three labels, three buttons, and three toggles.",1619],["Define the behavior of your UI controls",1619],["You can set up event handlers for your UI controls so that when you click the button, and select or clear the toggle, your UI controls perform some tasks.",1619],["In this example, set up event handlers that:",1619],["\nWhen a button is clicked, the Editor Console displays a message.\n",1619],["\nWhen a toggle is selected, the Console shows how many times the buttons have been clicked.\n",1619],["Your finished MyCustomEditor.cs looks like the following:",1619],["```lang-csharp",1619],["using UnityEditor;",1619],["using UnityEngine;",1619],["using UnityEngine.UIElements;",1619],["public class MyCustomEditor : EditorWindow",1619],["[MenuItem(\"Window/UI Toolkit/MyCustomEditor\")]",1619],["public static void ShowExample()",1619],["MyCustomEditor wnd = GetWindow();",1619],["wnd.titleContent = new GUIContent(\"MyCustomEditor\");",1619],["[SerializeField]",1619],["private VisualTreeAsset m_UXMLTree;",1619],["private int m_ClickCount = 0;",1619],["private const string m_ButtonPrefix = \"button\";",1619],["public void CreateGUI()",1619],["// Each editor window contains a root VisualElement object",1619],["VisualElement root = rootVisualElement;",1619],["// VisualElements objects can contain other VisualElement following a tree hierarchy.",1619],["Label label = new Label(\"These controls were created using C# code.\");",1619],["root.Add(label);",1619],["Button button = new Button();",1619],["button.name = \"button3\";",1619],["button.text = \"This is button3.\";",1619],["root.Add(button);",1619],["Toggle toggle = new Toggle();",1619],["toggle.name = \"toggle3\";",1619],["toggle.label = \"Number?\";",1619],["root.Add(toggle);",1619],["// Import UXML",1619],["var visualTree = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/MyCustomEditor.uxml\");",1619],["VisualElement labelFromUXML = visualTree.Instantiate();",1619],["root.Add(labelFromUXML);",1619],["root.Add(m_UXMLTree.Instantiate());",1619],["//Call the event handler",1619],["SetupButtonHandler();",1619],["//Functions as the event handlers for your button click and number counts",1619],["private void SetupButtonHandler()",1619],["VisualElement root = rootVisualElement;",1619],["var buttons = root.Query();",1619],["buttons.ForEach(RegisterHandler);",1619],["private void RegisterHandler(Button button)",1619],["button.RegisterCallback(PrintClickMessage);",1619],["private void PrintClickMessage(ClickEvent evt)",1619],["VisualElement root = rootVisualElement;",1619],["++m_ClickCount;",1619],["//Because of the names we gave the buttons and toggles, we can use the",1619],["//button name to find the toggle name.",1619],["Button button = evt.currentTarget as Button;",1619],["string buttonNumber = button.name.Substring(m_ButtonPrefix.Length);",1619],["string toggleName = \"toggle\" + buttonNumber;",1619],["Toggle toggle = root.Q(toggleName);",1619],["Debug.Log(\"Button was clicked!\" +",1619],["(toggle.value ? \" Count: \" + m_ClickCount : \"\"));",1619],["To try the example, select Window > UI Toolkit > MyCustomEditor.",1619],["Additional resources",1619],["Create a slide toggle custom control",1620],["Version**: 2021.3+",1620],["This example demonstrates how to create a \"switch-like\" variation of a toggle.",1620],["Example overview",1620],["The example creates a custom control: a toggle that users can flip with the mouse, the keyboard, a gamepad, and other devices. It comes with a label that can describe what the toggle represents.",1620],["You can find the completed files that this example creates in this GitHub repository.",1620],["Prerequisites",1620],["\nUI Builder\n",1620],["\nVisual Tree\n",1620],["\nUXML\n",1620],["\nUSS\n",1620],["\nHandling events\n",1620],["Create and style the slide toggle",1620],["Create the slide toggle class with a C# script and style it with a USS file.",1620],["Create a Unity project with the 3D template. A 3D template has a better visual effect for this example. However, you can use any templates.",1620],["Create a folder named slide-toggle to store your files.",1620],["In the slide-toggle folder, create a C# script named SlideToggle.cs.",1620],["Open SlideToggle.cs in a text editor and replace its content with the following:",1620],["```lang-cs",1620],["using UnityEngine;",1620],["using UnityEngine.UIElements;",1620],["namespace MyUILibrary",1620],["// Derives from BaseField base class. Represents a container for its input part.",1620],["public class SlideToggle : BaseField",1620],["public new class UxmlFactory : UxmlFactory { }",1620],["public new class UxmlTraits : BaseFieldTraits { }",1620],["// In the spirit of the BEM standard, the SlideToggle has its own block class and two element classes. It also",1620],["// has a class that represents the enabled state of the toggle.",1620],["public static readonly new string ussClassName = \"slide-toggle\";",1620],["public static readonly new string inputUssClassName = \"slide-toggle__input\";",1620],["public static readonly string inputKnobUssClassName = \"slide-toggle__input-knob\";",1620],["public static readonly string inputCheckedUssClassName = \"slide-toggle__input--checked\";",1620],["VisualElement m_Input;",1620],["VisualElement m_Knob;",1620],["// Custom controls need a default constructor. This default constructor calls the other constructor in this",1620],["// class.",1620],["public SlideToggle() : this(null) { }",1620],["// This constructor allows users to set the contents of the label.",1620],["public SlideToggle(string label) : base(label, null)",1620],["// Style the control overall.",1620],["AddToClassList(ussClassName);",1620],["// Get the BaseField's visual input element and use it as the background of the slide.",1620],["m_Input = this.Q(className: BaseField.inputUssClassName);",1620],["m_Input.AddToClassList(inputUssClassName);",1620],["Add(m_Input);",1620],["// Create a \"knob\" child element for the background to represent the actual slide of the toggle.",1620],["m_Knob = new();",1620],["m_Knob.AddToClassList(inputKnobUssClassName);",1620],["m_Input.Add(m_Knob);",1620],["// There are three main ways to activate or deactivate the SlideToggle. All three event handlers use the",1620],["// static function pattern described in the Custom control best practices.",1620],["// ClickEvent fires when a sequence of pointer down and pointer up actions occurs.",1620],["RegisterCallback(evt => OnClick(evt));",1620],["// KeydownEvent fires when the field has focus and a user presses a key.",1620],["RegisterCallback(evt => OnKeydownEvent(evt));",1620],["// NavigationSubmitEvent detects input from keyboards, gamepads, or other devices at runtime.",1620],["RegisterCallback(evt => OnSubmit(evt));",1620],["static void OnClick(ClickEvent evt)",1620],["var slideToggle = evt.currentTarget as SlideToggle;",1620],["slideToggle.ToggleValue();",1620],["evt.StopPropagation();",1620],["static void OnSubmit(NavigationSubmitEvent evt)",1620],["var slideToggle = evt.currentTarget as SlideToggle;",1620],["slideToggle.ToggleValue();",1620],["evt.StopPropagation();",1620],["static void OnKeydownEvent(KeyDownEvent evt)",1620],["var slideToggle = evt.currentTarget as SlideToggle;",1620],["// NavigationSubmitEvent event already covers keydown events at runtime, so this method shouldn't handle",1620],["// them.",1620],["if (slideToggle.panel?.contextType == ContextType.Player)",1620],["return;",1620],["// Toggle the value only when the user presses Enter, Return, or Space.",1620],["if (evt.keyCode == KeyCode.KeypadEnter evt.keyCode == KeyCode.Return evt.keyCode == KeyCode.Space)",1620],["slideToggle.ToggleValue();",1620],["evt.StopPropagation();",1620],["// All three callbacks call this method.",1620],["void ToggleValue()",1620],["value = !value;",1620],["// Because ToggleValue() sets the value property, the BaseField class dispatches a ChangeEvent. This results in a",1620],["// call to SetValueWithoutNotify(). This example uses it to style the toggle based on whether it's currently",1620],["// enabled.",1620],["public override void SetValueWithoutNotify(bool newValue)",1620],["base.SetValueWithoutNotify(newValue);",1620],["//This line of code styles the input element to look enabled or disabled.",1620],["m_Input.EnableInClassList(inputCheckedUssClassName, newValue);",1620],["In the slide-toggle folder, create a USS file named SlideToggle.uss.",1620],["Open SlideToggle.uss in a text editor and replace its contents with the following:",1620],["```lang-css",1620],[".slide-toggle__input {",1620],["background-color: var(--unity-colors-slider_groove-background);",1620],["max-width: 25px;",1620],["border-top-left-radius: 8px;",1620],["border-bottom-left-radius: 8px;",1620],["border-top-right-radius: 8px;",1620],["border-bottom-right-radius: 8px;",1620],["overflow: visible;",1620],["border-left-width: 1px;",1620],["border-right-width: 1px;",1620],["border-top-width: 1px;",1620],["border-bottom-width: 1px;",1620],["border-right-color: var(--unity-colors-slider_thumb-border);",1620],["border-top-color: var(--unity-colors-slider_thumb-border);",1620],["border-bottom-color: var(--unity-colors-slider_thumb-border);",1620],["max-height: 16px;",1620],["margin-top: 10px;",1620],["border-left-color: var(--unity-colors-slider_thumb-border);",1620],["transition-property: background-color;",1620],["transition-duration: 0.5s;",1620],[".slide-toggle__input-knob {",1620],["height: 16px;",1620],["width: 16px;",1620],["background-color: var(--unity-colors-slider_thumb-background);",1620],["position: absolute;",1620],["border-top-left-radius: 25px;",1620],["border-bottom-left-radius: 25px;",1620],["border-top-right-radius: 25px;",1620],["border-bottom-right-radius: 25px;",1620],["top: -1px;",1620],["transition-property: translate, background-color;",1620],["transition-duration: 0.5s, 0.5s;",1620],["translate: -1px 0;",1620],["border-left-width: 1px;",1620],["border-right-width: 1px;",1620],["border-top-width: 1px;",1620],["border-bottom-width: 1px;",1620],["border-left-color: var(--unity-colors-slider_thumb-border);",1620],["border-right-color: var(--unity-colors-slider_thumb-border);",1620],["border-top-color: var(--unity-colors-slider_thumb-border);",1620],["border-bottom-color: var(--unity-colors-slider_thumb-border);",1620],[".slide-toggle__input--checked {",1620],["background-color: rgb(0, 156, 10);",1620],[".slide-toggle__input--checked > .slide-toggle__input-knob {",1620],["translate: 8px 0;",1620],[".slide-toggle:focus .slide-toggle__input-knob {",1620],["border-left-width: 1px;",1620],["border-right-width: 1px;",1620],["border-top-width: 1px;",1620],["border-bottom-width: 1px;",1620],["border-left-color: var(--unity-colors-input_field-border-focus);",1620],["border-right-color: var(--unity-colors-input_field-border-focus);",1620],["border-top-color: var(--unity-colors-input_field-border-focus);",1620],["border-bottom-color: var(--unity-colors-input_field-border-focus);",1620],["Add a slide toggle to a UXML file with the UI Builder",1620],["In the slide-toggle folder, create a UI Document file named SlideToggleUsage.uxml.",1620],["Open SlideToggleUsage.uxml in the UI Builder.",1620],["In the UI Builder, select Library > Project > MyUILibrary.",1620],["Drag a SlideToggle into the Hierarchy window.",1620],["In the Inspector, enter a label text for your toggle in the Label field.",1620],["In the StyleSheets section, add SlideToggle.uss as existing USS.",1620],["Save and close the UI Builder.",1620],["Test the slide toggle",1620],["In the SampleScene, create a UI Document GameObject.",1620],["Select the UI Document, and drag SlideToggleUsage.uxml into the Source Asset field in the Inspector.",1620],["Enter play mode. You can click on the toggle, press Enter, press Return, or press Space and get it to flip back and forth.",1620],["Additional resources",1620],["Sprite Asset properties reference",1621],["The following table describes the sprite asset properties:",1621],["Property Description ",1621],["",1621],["Update Sprite Asset Sync the sprite asset with the latest Sprite Editor changes. ",1621],["Sprite Atlas A reference to the sprite asset's source texture. ",1621],["Default Material A reference to the sprite asset's material, which it uses to render sprites. ",1621],["Fallback Sprite Asset List When a glyph doesn't exist in this sprite asset, TextCore searches the fallback sprite assets list for the missing glyph. This is the local fallback list. The local fallback list has precedence over the global fallback list set in the Panel Text Settings asset. You can add or remove a sprite asset in the fallback list. You can also drag the handles on the left side of any sprit asset to reorder the list. ",1621],["Sprite Character Table Manage the sprites in this asset.Click a sprite to make it active.Click Up or Down to move the sprite up or down in the list.To move the sprite to a specific position, enter the index ID of the position in the text field and then click Goto to move the sprite to that position in the list.Note: Moving a sprite updates its index ID and the index IDs of all preceding sprites accordingly.Click + to add a copy of the sprite to the list.Click - to remove the sprite from the list. ",1621],["Index Unique index ID for the sprite, based on its position in the list. You can use it to reference the sprite in the <sprite> rich text tag. ",1621],["Unicode Unicode for the sprite. For more information, see Assign and use Unicode for a sprite. ",1621],["Name Unique name for the sprite.You can use it to reference the sprite in the <sprite> rich text tag. ",1621],["Sprite Glyph Rect Manage the glyphs in this asset. ",1621],["X, Y, W, H Rectangular area that the character occupies in the sprite atlas. ",1621],["Global Offsets & Scale Offsets and scale settings for all sprites in the asset. ",1621],["OX, OY Control the placement of the sprite, defined at its top-left corner relative to its origin on the baseline. ",1621],["ADV How far to advance along the baseline to place the next sprite. ",1621],["SF Adjust the size of the sprite. ",1621],["Additional resources",1621],["Include sprites in text",1622],["To use sprites in your rich text tags, such as emojis, you need a sprite asset. You create sprite assets from atlas textures that contain a set of sprites.",1622],["You can use as many sprite atlases and assets as you want. However, if you use multiple atlases per text object results in multiple draw calls for that object and consumes more system resources. As a rule, when you import multiple sprites, pack them into a single atlas to reduce draw calls. Make sure the sprite atlas has a suitable resolution for your target platform.",1622],["Use the <sprite> rich text tag to include sprites in your text.",1622],["See information for all the Sprite asset properties.",1622],["Create a sprite asset",1622],["You create sprite assets from atlas textures. Although sprite assets and their source textures are separate entities, you must keep the source textures in the project after you've created the sprite assets.",1622],["To create a sprite asset:",1622],["Import the sprite atlas.",1622],["Select the atlas and change the following texture options in the Inspector window:",1622],["\nSet the Texture Type to Sprite (2D and UI).\n",1622],["\nSet the Sprite Mode to Multiple.\n",1622],["Select Sprite Editor and divide the texture into individual sprites.",1622],["Right-click the sprite and select Create > Text > Sprite Asset. This creates a new sprite asset.",1622],["From the Inspector window, you can further customize the appearance and names of each glyph. See Sprite Asset properties for more information.",1622],["Place the sprite asset to the path set in the Panel Text Settings.",1622],["Once you've created the sprite asset, you can revert the atlas texture's Texture Type to its original setting.",1622],["Use a sprite asset",1622],["To use sprites in the rich text tag, reference the sprite asset name and the sprite name as <sprite=\"assetName\" name=\"spriteName\"> or by index as <sprite=\"assetName\" index=1>.",1622],["You can add the tint=1 attribute to the tag to tint the sprite with the text object's vertex color. You can also choose a different color by adding a color attribute to the tag, for example: <sprite=\"assetName\" index=1 color=#55FF55FF>.",1622],["For runtime UI, if you have set a sprite asset as the default in the Panel Text Settings, you can omit the asset name as <sprite index=1> (or shorthand <sprite=1>), or <sprite name=\"spriteName\">.",1622],["",1622],["Assign and use Unicode for a sprite",1622],["You can assign a Unicode to a sprite and use the Unicode directly in your text object instead of the <sprite> tag.",1622],["For example, the Unicode for a smiling face emoji is U+1F60A. To assign it to a sprite in your sprite asset:",1622],["In the sprite asset's Inspector window, find the glyph in the Sprite Character Table. You can browse or search by index or name.",1622],["Click the glyph to enable the edit mode.",1622],["In the Unicode box, enter +1F60A.",1622],["Click the Unicode label to save your changes. The Unicode changes to 0xF1F60A.",1622],["To use the smiling face emoji in your text object, enter \\U00F1F60A.",1622],["Additional resources",1622],["Structure UI",1623],["You can structure UI with either UXML or C#.",1623],["Topic Description ",1623],[":-------------------- :--------------------- ",1623],["The visual tree Structure elements in your UI into a visual tree. ",1623],["Structure UI with UXML Write UXML files, add styles to UXML, and reuse UXML templates. ",1623],["Structure UI with C# scripts Add and interact with UI controls in C#. ",1623],["Custom controls Understand the steps to create and use custom controls. ",1623],["Best practices for managing elements Things you can do to improve performance when you manage elements in a UI. ",1623],["Encapsulate UXML documents with logic Create reusable UI components that encapsulate a specific hierarchy of elements. ",1623],["UXML elements Reference Find a complete list of all the UXML elements. ",1623],["Structure UI examples Find a list of structure UI examples. ",1623],["Additional resources",1623],["\nStyle UI\n",1623],["Style sheets",1624],["If you want to reuse a style, create a custom style sheet for it, and apply it to text through the <style> rich text tag.",1624],["A custom style can include opening and closing rich text tags, and leading and trailing text.",1624],["For example, you might want headings in your text to be big, red, bold, with an asterisk to either side and a line break at the end.",1624],["Instead of typing this for every heading:",1624],["<font-weight=700><size=2em><color=#FF0000>*Heading*</color></size></font-weight><br>",1624],["You can create a style, called H1 that includes all of that formatting, and then apply the style to your headings.",1624],["For instructions on how to create a custom style sheet, see Style-with-style-sheets in Get started with text",1624],["To use a custom style sheet in the rich text tag, reference the style sheet asset name and the style name: <style=\"assetName\" name=\"styleName\">.",1624],["For runtime UI, if you have set a style sheet as the default style sheet in the Panel Text Settings, you can omit the asset name: <style=\"styleName\">. For example: <style=\"H1\">This is heading 1</style>.",1624],["Additional resources",1624],["Support for Editor UI",1625],["You can use UI Toolkit to create Editor UI and synchronize data between a property and a visual element for the Editor UI.",1625],["Topic Description ",1625],[":-------------------- :----------------------- ",1625],["Create a custom Editor window Learn how to create a custom Editor by an example. ",1625],["Create a custom Inspector Learn how to create a custom Inspector by an example. ",1625],["SerializedObject data binding Understand data binding and learn how to do data binding by examples. ",1625],["ViewData persistence Usage of the ViewData API. ",1625],["Additional resources",1625],["\nCreate a transition in a custom Editor window\n",1625],["\nCreate a drag-and-drop UI\n",1625],["\nCreate a drag-and-drop UI to drag between Editor windows\n",1625],["\nCreate list and tree views\n",1625],["\nSupport for runtime UI\n",1625],["Support for runtime UI",1626],["You can use UI Toolkit to create UI for the runtime. You can use the UI Toolkit's event system with Unity's different input systems.",1626],["Topic Description ",1626],[":-------------------- :----------------------- ",1626],["Get started with runtime UI Get started with runtime UI by a simple example. ",1626],["Render UI in the Game view Learn to render UI and react to input from the users in the Game view. ",1626],["Panel Settings properties reference Understand each Panel Settings asset property. ",1626],["Runtime UI event system Learn to use the event system and the input system with UI Toolkit. ",1626],["Performance consideration for runtime UI Learn how you can improve the performance for runtime UI. ",1626],["FAQ for event and input system FAQs for using the event system and the input system with UI Toolkit. ",1626],["Create a ListView runtime UI Learn to create a ListView runtime UI by an example. ",1626],["Additional resources",1626],["\nCreate a tabbed menu for runtime\n",1626],["\nCreate a ListView runtime UI\n",1626],["\nSupport for Editor UI\n",1626],["Supported rich text tags",1627],["The following table lists all the supported rich text tags:",1627],["Tag Description Example ",1627],["",1627],["<a> Define a hyperlink. Use the href attribute to define the hyperlink URL. <a href=\"https://www.unity.com\">Visit Unity!</a> ",1627],["<align> Change the text's horizontal alignment. The supported values are: left center right justified flush If you put multiple alignment tags on the same line, the last one overrides the others. <align=\"left\">Left-aligned</align> ",1627],["<allcaps> Convert text to uppercase. <allcaps>Alice and Bob watched TV.</allcaps> ",1627],["<alpha> Change text opacity. It works with hexadecimal values. <alpha=#FF>FF <alpha=#CC>CC <alpha=#AA>AA <alpha=#88>88 <alpha=#66>66 <alpha=#44>44 <alpha=#22>22 <alpha=#00>00 ",1627],["<b> Render text in boldface. The fox jumps over the <b>lazy dog</b> ",1627],["<br> Forces a line break in text. Break the line here <br> New line starts ",1627],["<color> Change text color or color and opacity. It supports color names and hexadecimal values. If you apply successive tags in the same text, the last one takes precedence over the others until you either add another tag or use a closing tag to end the current color's scope. <color=\"red\">Red <color=#005500>Dark Green <#0000FF>Blue <color=#FF000088>Semitransparent Red ",1627],["<cspace> Change spacing between characters, either absolute or relative to the original font Asset. Use pixels or font units. Positive adjustments push the characters apart, negative adjustments pull them together. <cspace=1em>Spacing</cspace> is just as important as <cspace=-0.5em>timing. ",1627],["<font> Change text font. Would you like <font=\"Impact SDF\">a different font?</font> ",1627],["<font-weight> Change the text's font weight to any of the weights defined in the font Asset. If you haven't defined any font weights, you can still use 400 for normal, 700 for bold. <font-weight=\"100\">Thin</font-weight> ",1627],["<gradient> Apply a color gradient to text. <gradient=\"Light to Dark Green - Vertical\">gradient ",1627],["<i> Render text in italics. The <i>quick brown fox</i> ",1627],["<indent> Indent all text between the tag and the next hard line break. Use this tag to create text patterns, such as bullet points, that work with word-wrapping. Specify indentation in pixels, font units, or percentages. <indent=15%>It is useful for things like bullet points.</indent> ",1627],["<line-height> Modify the line height relative to the default line height specified in the font Asset. Specify the line height in pixels, font units, or percentages. <line-height=50%>Line height at 50% ",1627],["<line-indent> Indent the first line after every hard line break. New lines created by word-wrapping are not indented. <line-indent=15%>This line is indented. <br>This line is also indented. ",1627],["<lowercase> Convert text to lowercase. <lowercase>Alice and Bob watched TV.</lowercase> ",1627],["<margin> Set the text horizontal margins. If you only want to adjust the left or right margin, you can use the <margin-left> or <margin-right> tag. Specify the margins in pixels, font units, and percentages. Negative values have no effect. <margin=5em> ",1627],["<mark> Highlight the text with a colored overlay. The overlay must be translucent (alpha less than 1) for the text to show through. Text <mark=#ffff00aa>can be marked with</mark> an overlay. ",1627],["<mspace> Override a font's character spacing and turn it into a monospace font. Any font can become <mspace=2.75em>monospace, if you really want it. ",1627],["<nobr> Keep a segment of text together. You don't want <nobr>I M P O R T A N T</nobr> things to be broken up. ",1627],["<noparse> Prevent parsing of rich text tags. Use <noparse><b></noparse> for <b>bold</b> text. ",1627],["<pos> Set the horizontal caret position on the current line. Specify the horizontal position in pixels, font units, or percentages. at <pos=75%>75% ",1627],["<rotate> Rotates each character about its center. Specify the amount of rotation in degrees. Positive values rotate characters counter-clockwise. Negative values rotate them clockwise. Rotation affects the spacing between characters, and might cause characters to overlap in some cases. Use the <cspace> tag to correct character spacing as needed. Rotate text <rotate=\"45\">counter-clockwise</rotate> ",1627],["<s> Render a line across the text. The <s>quick brown</s> fox ",1627],["<size> Adjusts the font size. Specify the new size in pixels, font units, or percentage. Pixel adjustments can be absolute (such as 5px) or relative (such as +1 or -1). Relative sizes are based on the original font size, so they're not cumulative. <size=100%>Echo <size=80%>Echo <size=60%>Echo <size=40%>Echo <size=20%>Echo ",1627],["<smallcaps> Convert text to lowercase. <smallcaps>Alice and Bob watched TV. ",1627],["<space> Add a horizontal offset between itself and the rest of the text. Specify the offset in pixels or font units. Give me some <space=5em> space ",1627],["<sprite> Add a sprite from a sprite asset into your text. <sprite name=\"spriteName\"> ",1627],["<strikethrough> Draws a line slightly above the baseline so it crosses out the text. <strikethrough> Some text ",1627],["<style> Apply a custom style to the text. <style=\"H1\">Styles</style> ",1627],["<sub> Convert the text to subscript. We have 1m<sup>3</sup> of H<sub>2</sub>O. ",1627],["<sup> Convert the test to superscript. We have 1m<sup>3</sup> of H<sub>2</sub>O. ",1627],["<u> Underline the text. <u>The lazy dog</u> ",1627],["<uppercase> Convert text to uppercase. <uppercase>Alice and Bob watched TV.</uppercase> ",1627],["<voffset> Give the baseline a vertical offset. Specify the offset in pixels or font units. The offset is always relative to the original baseline. Up <voffset=1em>up <voffset=2em>UP</voffset> and <voffset=-0.5em>down</voffset> we go again. ",1627],["<width> Change the horizontal size of text area. <width=60%>Those days are long gone</width> ",1627],["<page> Add a page break to the text. The text's Overflow mode must be set to Page for page breaks to work. First page<page>Second page -->",1627],["Additional resources",1627],["\nStyle text with rich text tags\n",1627],["Panel Text Settings assets",1628],["UI Toolkit stores project-wide text settings in the Panel Text Settings asset. UI Toolkit uses a default Panel Text Settings asset for your text objects.",1628],["For runtime UI, you can create and assign a Panel Text Settings asset to the Panel Setting asset, and edit the text setting properties:",1628],["\nTo create a Panel Text Settings, select Assets > Create > UI Toolkit > Text Settings. This creates a Panel Text Settings asset with the default values.\n",1628],["\nTo assign a Panel Text Settings to a Panel Setting, select the Panel Setting and drag the Panel Text Settings to the Text Settings field in the Inspector window.\n",1628],["Note**: In the current release, you can't change the default Panel Text Settings for Editor UI.",1628],["This section describes all the properties for the Panel Text Settings asset. The Panel Text Settings asset controls the default values for all text objects used within that Panel.",1628],["You can edit the paths to store the font assets, sprite assets, custom style sheets, and the color gradient presets. The paths must be a sub-folder of a Resources folder. Create a Resources folder if you don't have one in your project.",1628],["Default Font Asset",1628],["After you create a font asset from a font file, you must place it in the path set to store all the font assets.",1628],["Property Description ",1628],["",1628],["Default Font Asset Default font to use when you create a new text object. ",1628],["Path Path to store all the font assets. ",1628],["Font Assets Fallback",1628],["Manage the global fallback font assets list for this font asset.",1628],["Note**: The local fallback set in the Font Asset Properties has precedence over the global fallback .",1628],["Property Description ",1628],["",1628],["Fallback Font Assets List Click + and - to add and remove font slots. Click the circle icon next to a font to open an Object Picker where you can choose a font asset.Drag the handles on the left side of any font asset to reorder the list. ",1628],["Dynamic Font System Settings",1628],["Project-wide settings to handle missing glyphs.",1628],["Property Description ",1628],["",1628],["Missing Character Unicode Unicode of the character to use when a missing glyph isn't in any of the fallback fonts.The default value of 0 produces the outline of a square. ",1628],["Clear Dynamic Data on Build Clear all dynamic data and restore the font asset back to its default creation and empty state. ",1628],["Disable Warnings Enable this if you don't want to log a warning for every missing glyph. ",1628],["Default Sprite Asset",1628],["After you create a sprit asset, you must place it in the path set to store all the sprite assets. You can set a default sprite asset and reference the sprites in the default sprite asset by index or sprite name.",1628],["Property Description ",1628],["",1628],["Default Sprite Asset Sprite asset to use by default. ",1628],["Missing Sprite Unicode Unicode of the sprite for a missing sprite. ",1628],["Path Path to store all the sprite assets. ",1628],["Sprite Asset Fallback",1628],["The fallback list set in the Panel Text Setting is called the global fallback. The local fallback set in the Sprite Asset has precedence over the global fallback list.",1628],["Property Description ",1628],["",1628],["Sprite Asset Fallback List Add or remove a sprite asset in the fallback list. You can also drag the handles on the left side of any sprit asset to reorder the list. ",1628],["",1628],["Default Style Sheet",1628],["After you create a custom style sheet, you must place it in the path set to store all the custom style sheet assets.",1628],["Property Description ",1628],["",1628],["Default Style Sheet Default style sheet to use by all text objects in the project. ",1628],["Path Path to store all the custom style sheet assets. ",1628],["",1628],["Color Gradient Presets",1628],["Set the path to store all color gradients presets.",1628],["Property Description ",1628],["",1628],["Path Path to store the Color Gradient presets. ",1628],["Line Breaking for Asian Languages",1628],["To get correct line-breaking behavior for Asian languages, specify which characters behave as leading and following characters.",1628],["Property Description ",1628],["",1628],["Leading Characters Specify the text file that contains the list of leading characters. ",1628],["Following Characters Specify the text file that contains the list of following characters. ",1628],["Korean Line Breaking Rules Enable this to use modern rules. ",1628],["Additional resources",1628],["Tooltip event",1629],["The Tooltip event is sent to check if a visual element underneath the pointer is able to display a tooltip. This is an Editor-only event.",1629],["Tooltips are usually set using the tooltip property. You can also respond to the Tooltip event to set tooltips.",1629],["You can handle the Tooltip event in two ways:",1629],["Set a callback to the TooltipEvent. This adds a tooltip to a visual element that doesn't have one set. This can also override the tooltip set to a visual element.",1629],["Declare a custom VisualElement (such as declaring a class that extends VisualElement), and override the ExecuteDefaultAction method.",1629],["If you set the callback or implement a custom visual element to declare tooltips, don't set the value for the tooltip property via code or UXML.",1629],["When you set a tooltip property, the visual element under the mouse cursor automatically registers a callback to handle the TooltipEvent. This callback also stops further propagation of the event.",1629],["If you register a custom callback to handle the TooltipEvent, you must stop the propagation of the event, or the tooltip can be overridden later in the propagation phase.",1629],["The base class for Tooltip events is the EventBase class.",1629],["Event Description Trickles down Bubbles up Cancellable ",1629],["--------------------------------------------------- ------------------------------------------ ------------- ---------- ----------- ",1629],["TooltipEvent Sent just before Unity displays a tooltip. Yes Yes Yes ",1629],["Unique properties",1629],["rect: Rectangle of the hovered visual element in the panel coordinate system.",1629],["tooltip: The tooltip property is a text string to display inside the tooltip box during the tooltip event. The following callback event sets the tooltip property during the event:",1629],["```lang-csharp",1629],["evt.tooltip = \"Tooltip set by parent!\";",1629],["Event list",1629],["TooltipEvent",1629],["The TooltipEvent is sent just before the Unity Editor displays a tooltip. The handler should set the TooltipEvent.tooltip string and the TooltipEvent.rect.",1629],["target**: The visual element under the mouse.",1629],["Examples",1629],["The following examples display the behavior of the ToolTipEvent.",1629],["To view an example:",1629],["Under Assets > Scripts > Editor, create a C# script called SampleWindow.",1629],["Copy one of the following examples into the C# script.",1629],["From the Editor Toolbar, select Window > UI Toolkit > SampleWindow.",1629],["Example 1: Registering a callback to the TooltipEvent on the parent visual element",1629],["```lang-csharp",1629],["using UnityEditor;",1629],["using UnityEngine;",1629],["using UnityEngine.UIElements;",1629],["public class SampleWindow : EditorWindow",1629],["[MenuItem(\"Window/UI Toolkit/SampleWindow\")]",1629],["public static void ShowExample()",1629],["SampleWindow wnd = GetWindow();",1629],["wnd.titleContent = new GUIContent(\"SampleWindow\");",1629],["public void CreateGUI()",1629],["VisualElement label = new Label(\"Hello World! This is a UI Toolkit Label.\");",1629],["rootVisualElement.Add(label);",1629],["label.tooltip = \"And this is a tooltip\";",1629],["// If you comment out the registration of the callback, the tooltip that displays for the label is \"And this is a tooltip\".",1629],["// If you keep the registration of the callback, the tooltip that displays for the label (and any other child of rootVisualElement)",1629],["// is \"Tooltip set by parent!\".",1629],["rootVisualElement.RegisterCallback(evt =>",1629],["evt.tooltip = \"Tooltip set by parent!\";",1629],["evt.rect = (evt.target as VisualElement).worldBound;",1629],["evt.StopPropagation();",1629],["}, TrickleDown.TrickleDown); // Pass the TrickleDown.TrickleDown parameter to intercept the event before it reaches the label.",1629],["Example 2: Declaring a custom visual element and overriding ExecuteDefaultAction",1629],["```lang-csharp",1629],["using UnityEditor;",1629],["using UnityEngine;",1629],["using UnityEngine.UIElements;",1629],["public class SampleWindow : EditorWindow",1629],["[MenuItem(\"Window/UI Toolkit/SampleWindow\")]",1629],["public static void ShowExample()",1629],["SampleWindow wnd = GetWindow();",1629],["wnd.titleContent = new GUIContent(\"SampleWindow\");",1629],["private void CreateGUI()",1629],["CustomLabel custom1 = new CustomLabel(\"custom 1\");",1629],["rootVisualElement.Add(custom1);",1629],["CustomLabel custom2 = new CustomLabel(\"custom 2\");",1629],["rootVisualElement.Add(custom2);",1629],["public class CustomLabel : Label",1629],["private static int m_InstanceCounter = 0;",1629],["private int m_CurrentCounter;",1629],["public CustomLabel(string labelText) : base(labelText)",1629],["m_CurrentCounter = m_InstanceCounter++;",1629],["protected override void ExecuteDefaultAction(EventBase evt)",1629],["// Other events need to be handled as usual.",1629],["base.ExecuteDefaultAction(evt);",1629],["if (evt.eventTypeId == TooltipEvent.TypeId())",1629],["TooltipEvent e = (TooltipEvent)evt;",1629],["// Apply an offset to the tooltip position.",1629],["var tooltipRect = new Rect(worldBound);",1629],["tooltipRect.x += 10;",1629],["tooltipRect.y += 10;",1629],["e.rect = tooltipRect;",1629],["// Set a custom/dynamic tooltip.",1629],["e.tooltip = $\"This is instance # {m_CurrentCounter + 1} of my CustomLabel\";",1629],["// Stop propagation avoids other instances of handling of the event that may override the values set here.",1629],["e.StopPropagation();",1629],["USS transform",1630],["The transform properties apply a 2D transformation to a visual element. You can use them to rotate, scale, or move a visual element.",1630],["If you change the layout of an element, Unity recalculates the layout of other elements in the same hierarchy. This recalculation might reduce an animation's frame rate. Applying transform to an element reduces recalculations because it doesn't change the layout of other elements in the hierarchy.",1630],["It's possible to use transform to define the static appearance of a visual element. However, transform is best used for changes and animations. For example, if you want to make a visual element shake when an event happens in an application, set the position of the visual element using the regular layout properties such as top and left, and then use translate to align an offset relative to the initial position.",1630],["Transform includes the following properties:",1630],["Property USS syntax Description ",1630],[":------------- :-------------- :----- ",1630],["Transform Origin transform-origin Represents the point of origin where rotation, scaling, and translation occur. ",1630],["Translate translate Repositions the visual element in horizontal or vertical directions. ",1630],["Scale scale Changes the apparent size, padding, border, and margins of a visual element. Negative values flip visual elements along the scale axis. ",1630],["Rotate rotate Rotates a visual element. Positive values represent clockwise rotation and negative values represent counterclockwise rotation. You can set rotation with deg, grad, rad, or turn units. For more information on these units, see MDN Web Docs's page on the <angle> CSS data type. ",1630],["Note**: All transformations are performed in the following order:",1630],["Scale",1630],["Rotate",1630],["Translate",1630],["You can set transform properties for a visual element using the controls in the UI Builder, within a USS file, or using a C# script.",1630],["Transform controls in the UI Builder",1630],["You can use the controls in the Transform section of the Inspector in the UI Builder to set the transform properties of a visual element.",1630],["Pivot Origin",1630],["The Pivot Origin widget sets the transform origin property. To use it, do one of the following:",1630],["\nClick a point in the widget to set the origin to a corner, the center of an edge, or the center. You can also define the values using the keyboard. When the widget is in focus, use the arrow keys to specify a point in the widget.\n",1630],["\nEnter values for X and Y and specify the unit.\n",1630],["Tip**: You can enter % or px after values. This automatically changes the displayed unit in the unit selector. You can also drag to define the values in the X and Y boxes.",1630],["Note**: The default value for the transform origin is center.",1630],["If you use percentages for both the X and Y values, the widget shows the new origin point when you edit the X and Y text boxes.",1630],["If you specify a transform origin point outside the element, such as having a value less than 0% or greater than 100%, the widget shows the directions of the X and Y axes.",1630],["Translate",1630],["The Translate control sets the translate property. To use it, enter values in the X and Y boxes and specify the unit.",1630],["Tip**: You can enter % or px after values. This automatically changes the displayed unit in the unit selector. You can also drag to define the values in the X and Y boxes.",1630],["Scale",1630],["The Scale control sets the scale property. To use it, enter values in the X and Y boxes and specify the unit.",1630],["Tip**: You can enter % or px after values. This automatically changes the displayed unit in the unit selector. You can also drag to define the values in the X and Y boxes.",1630],["Rotate",1630],["The Rotate control sets the rotate property. To use it, enter a value and specify the unit.",1630],["Tip**: You can type deg, grad, rad, or turn after a value in the Rotate box. This automatically changes the displayed unit in the unit selector.",1630],["USS transform properties",1630],["You can use styling rules to set the transform properties for a visual element. You can set the styling rules within a USS file or inline in a UXML file.",1630],["transform-origin",1630],["The transform-origin property sets the transform origin along the X and Y axes in pixels or percentages.",1630],["You can also use keywords to set the value of the transform-origin attribute. These keywords match the dots in the widget in the UI Builder. The following keywords are supported:",1630],["Pivot point Keywords ",1630],[":------------------------ :------------------------------------------------------------------------ ",1630],["Center centercenter center (This is the default value) ",1630],["Center of left edge leftleft centercenter left ",1630],["Center of right edge rightright centercenter right ",1630],["Center of top edge toptop centercenter top ",1630],["Center of bottom edge bottombottom centercenter bottom ",1630],["Top-left corner top leftleft top ",1630],["Top-right corner top rightright top ",1630],["Bottom-left corner bottom leftleft bottom ",1630],["Bottom-right corner bottom rightright bottom ",1630],["Examples**",1630],["```lang-css",1630],["transform-origin: 0% 100%;",1630],["transform-origin: 20px 10px;",1630],["transform-origin: 0px 100%;",1630],["transform-origin: 60% 10px;",1630],["translate",1630],["The translate property sets the translation along the X and Y axes in pixels or percentages relative to the size of this visual element. You can omit Y if it equals X.",1630],["Examples**",1630],["```lang-css",1630],["translate: 80%;",1630],["translate: 35px;",1630],["translate: 5% 10px;",1630],["translate: 24px 0%;",1630],["scale",1630],["The scale property sets the scale along the X and Y axes as a pair of (float) multipliers. You can omit Y if it equals X.",1630],["The keyword none sets no scale.",1630],["Examples**",1630],["```lang-css",1630],["scale: 2.5;",1630],["scale: -1 1;",1630],["scale: none;",1630],["rotate",1630],["The rotate property sets the rotation using a number or a unit.",1630],["The keyword none sets no rotation.",1630],["Examples**",1630],["```lang-css",1630],["rotate: 45deg;",1630],["rotate: -100grad;",1630],["rotate: -3.14rad;",1630],["rotate: 0.75turn;",1630],["rotate: none;",1630],["Transform C# properties",1630],["You can set the transform properties for a visual element in a C# script.",1630],["IStyle.transformOrigin",1630],["The IStyle.transformOrigin property sets the transform origin.",1630],["The transformOrigin property of the style is of type StyleTransformOrigin. Its constructor takes a TransformOrigin as an argument. You can construct a new TransformOrigin using an X value and a Y value. The X value and the Y value are of type Length.",1630],["Examples**",1630],["```lang-cs",1630],["//This example sets the transform origin of the element to be 100 pixels from the left edge and 50% of the way down from the top edge.",1630],["element.style.transformOrigin = new StyleTransformOrigin(new TransformOrigin(new Length(100f, LengthUnit.Pixel), new Length(50f, LengthUnit.Percent)));",1630],["You can simplify the above code as follows using implicit conversions:",1630],["```lang-cs",1630],["element.style.transformOrigin = new TransformOrigin(100, Length.Percent(50));",1630],["IStyle.translate",1630],["The IStyle.translate property sets the translation.",1630],["IStyle.translate is of type StyleTranslate. Its constructor takes a Translate as an argument. You can construct a new Translate using an X value and a Y value. The X value and the Y value are of type Length.",1630],["Examples**",1630],["```lang-cs",1630],["//This example sets the translation of the element. The X-axis is 10% and the Y-axis is 50 pixels.",1630],["element.style.translate = new StyleTranslate(new Translate(new Length(10f, LengthUnit.Percent), new Length(50f, LengthUnit.Pixel)));",1630],["You can simplify the above code as follows using implicit conversions:",1630],["```lang-cs",1630],["element.style.translate = new Translate(Length.Percent(10), 50);",1630],["IStyle.scale",1630],["The IStyle.scale property sets the scale.",1630],["IStyle.scale is of type StyleScale. StyleScale's constructor takes a Scale as an argument. You can construct this Scale with a Vector2.",1630],["Examples**",1630],["```lang-cs",1630],["element.style.scale = new StyleScale(new Scale(new Vector2(0.5f, -1f)));",1630],["You can simplify the code above as follows using implicit conversions:",1630],["```lang-cs",1630],["element.style.scale = new Scale(new Vector2(0.5f, -1));",1630],["IStyle.rotate",1630],["The IStyle.rotate property sets the rotation.",1630],["The IStyle.rotate property is of type StyleRotate. The StyleRotate's constructor takes a Rotate as an argument. You can construct this Rotate with an Angle. You can construct an Angle with a float and an optional AngleUnit enum, or you can use static methods Degrees(), Gradians(), Radians(), and Turns().",1630],["Examples**",1630],["```lang-cs",1630],["//Rotate by 180 degrees",1630],["elements[0].style.rotate = new StyleRotate(new Rotate(new Angle(180f, AngleUnit.Degree)));",1630],["//Rotate by 200 gradians",1630],["elements[1].style.rotate = new StyleRotate(new Rotate(new Angle(200f, AngleUnit.Gradian)));",1630],["//Rotate by pi radians",1630],["elements[2].style.rotate = new StyleRotate(new Rotate(new Angle(Mathf.PI, AngleUnit.Radian)));",1630],["//Rotate by half a turn",1630],["elements[3].style.rotate = new StyleRotate(new Rotate(new Angle(0.5f, AngleUnit.Turn)));",1630],["You can simplify the above code as follows:",1630],["```lang-cs",1630],["//Rotate by 180 degrees",1630],["elements[0].style.rotate = new Rotate(180);",1630],["//Rotate by 200 gradians",1630],["elements[1].style.rotate = new Rotate(Angle.Gradians(200));",1630],["//Rotate by pi radians",1630],["elements[2].style.rotate = new Rotate(Angle.Radians(Mathf.PI));",1630],["//Rotate by half a turn",1630],["elements[3].style.rotate = new Rotate(Angle.Turns(0.5f));",1630],["Additional resources",1630],["\nLayout engine\n",1630],["\nCSS transform-origin property (Mozilla developer documentation)\n",1630],["\nCSS translate property (Mozilla developer documentation)\n",1630],["\nCSS rotate property (Mozilla developer documentation)\n",1630],["\nCSS scale property (Mozilla developer documentation)\n",1630],["Create a transition event",1631],["Version**: 2021.3+",1631],["This example demonstrates the lifecycle of a transition event.",1631],["Example overview",1631],["The example creates a custom Editor window with a button and color palette. If you click the button, the following appears:",1631],["A transition starts to change the color palette from blue to green.",1631],["The transition events that are sent during the transition.",1631],["The duration of the events.",1631],["You can find the completed files that this example creates in this GitHub repository.",1631],["Prerequisites",1631],["\nUXML\n",1631],["\nUSS transition\n",1631],["\nTransition events\n",1631],["Create the example",1631],["Create a project in Unity with any template.",1631],["From the menu, select Assets > Create > UI Toolkit > Editor Window.",1631],["In the UI Toolkit Editor Window Creator window, enter TransitionExample.",1631],["Save your changes. This creates three files as TransitionExample.cs, TransitionExample.uss, and TransitionExample.uxml.",1631],["Replace TransitionExample.cs with the following content:",1631],["```lang-csharp",1631],["using System;",1631],["using UnityEditor;",1631],["using UnityEngine;",1631],["using UnityEngine.UIElements;",1631],["public class TransitionExample : EditorWindow",1631],["[SerializeField] private VisualTreeAsset m_VisualTreeAsset = default;",1631],["private Button clickMeButton;",1631],["private VisualElement colorChanger;",1631],["private Label eventLabel;",1631],["private Label timeLabel;",1631],["private DateTime lastEvent;",1631],["private static readonly TimeSpan NearlyInstantaneousThreshold = TimeSpan.FromMilliseconds(10);",1631],["private static readonly string ClickMeButtonClass = \"click-me\";",1631],["private static readonly string ColorChangerClass = \"color-changer\";",1631],["private static readonly string ColorChangerTransitionClass = \"color-transition\";",1631],["private static readonly string EventLabelName = \"eventLabel\";",1631],["private static readonly string TimeLabelName = \"timeLabel\";",1631],["private static readonly string TimeBelowThresholdText = \"Almost instantaneous.\";",1631],["[MenuItem(\"Window/UI Toolkit/Transition Example\")]",1631],["public static void ShowExample()",1631],["TransitionExample wnd = GetWindow();",1631],["wnd.titleContent = new GUIContent(\"TransitionExample\");",1631],["wnd.minSize = new Vector2(500f, 400f);",1631],["public void CreateGUI()",1631],["lastEvent = DateTime.Now;",1631],["// Each editor window contains a root VisualElement object",1631],["VisualElement root = rootVisualElement;",1631],["// Instantiate UXML",1631],["VisualElement uxmlAsset = m_VisualTreeAsset.Instantiate();",1631],["root.Add(uxmlAsset);",1631],["// Get the relevant elements by querying the root element",1631],["clickMeButton = root.Q(className: ClickMeButtonClass);",1631],["colorChanger = root.Q(className: ColorChangerClass);",1631],["eventLabel = root.Q(name: EventLabelName);",1631],["timeLabel = root.Q(name: TimeLabelName);",1631],["// Add callbacks for clicking on the button and monitoring the color changing element.",1631],["clickMeButton.RegisterCallback(OnClickEvent);",1631],["colorChanger.RegisterCallback(OnTransitionRun);",1631],["colorChanger.RegisterCallback(OnTransitionStart);",1631],["colorChanger.RegisterCallback(OnTransitionEnd);",1631],["colorChanger.RegisterCallback(OnTransitionCancel);",1631],["private void OnDisable()",1631],["clickMeButton.UnregisterCallback(OnClickEvent);",1631],["colorChanger.UnregisterCallback(OnTransitionRun);",1631],["colorChanger.UnregisterCallback(OnTransitionStart);",1631],["colorChanger.UnregisterCallback(OnTransitionEnd);",1631],["colorChanger.UnregisterCallback(OnTransitionCancel);",1631],["private void OnClickEvent(ClickEvent evt)",1631],["colorChanger.ToggleInClassList(ColorChangerTransitionClass);",1631],["private void OnTransitionRun(TransitionRunEvent evt)",1631],["DisplayLatestEvent(\"TransitionRunEvent\", DateTime.Now);",1631],["private void OnTransitionStart(TransitionStartEvent evt)",1631],["DisplayLatestEvent(\"TransitionStartEvent\", DateTime.Now);",1631],["private void OnTransitionEnd(TransitionEndEvent evt)",1631],["DisplayLatestEvent(\"TransitionEndEvent\", DateTime.Now);",1631],["private void OnTransitionCancel(TransitionCancelEvent evt)",1631],["DisplayLatestEvent(\"TransitionCancelEvent\", DateTime.Now);",1631],["private void DisplayLatestEvent(string eventType, DateTime timestamp)",1631],["// If two events are sent too close together, add both to the Latest event line.",1631],["// This happens if the delay is set to 0 and the TransitionRun and TransitionStart",1631],["// are sent at the same time, or if the button was pressed before the transition",1631],["// was over, thus sending TransitionCancel and TransitionRun (and potentially",1631],["// TransitionStart) events close together.",1631],["var elapsed = timestamp - lastEvent;",1631],["if (elapsed <= NearlyInstantaneousThreshold)",1631],["timeLabel.text = TimeBelowThresholdText;",1631],["eventLabel.text += eventType;",1631],["else",1631],["timeLabel.text = $\"{elapsed:s\\.ff} s\";",1631],["eventLabel.text = eventType;",1631],["lastEvent = timestamp;",1631],["Replace TransitionExample.uxml with the following content:",1631],["```lang-xml",1631],["",1631],["xsi=\"http://www.w3.org/2001/XMLSchema-instance\" engine=\"UnityEngine.UIElements\" editor=\"UnityEditor.UIElements\"",1631],["noNamespaceSchemaLocation=\"../../UIElementsSchema/UIElements.xsd\" editor-extension-mode=\"False\">",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["",1631],["Replace TransitionExample.uss with the following content:",1631],["```lang-css",1631],[".click-me {",1631],["width: 250px;",1631],["height: 50px;",1631],["font-size: 40px;",1631],["-unity-font-style: bold-and-italic;",1631],["margin: 30px;",1631],[".color-changer {",1631],["margin: 10px;",1631],["width: 150px;",1631],["height: 150px;",1631],["border-width: 10px;",1631],["border-radius: 75px;",1631],["background-color: rgb(0, 31, 138);",1631],["transition: background-color 3s ease-in-out 1s;",1631],[".main-container {",1631],["align-items: center;",1631],["justify-content: space-between;",1631],["flex-grow: 1;",1631],["background-color: rgb(60, 60, 60);",1631],[".label-section {",1631],["margin: 10px;",1631],["border-width: 2px;",1631],["width: 95%;",1631],["align-items: center;",1631],[".label-line {",1631],["flex-direction: row;",1631],["margin: 5px;",1631],["flex-grow: 1;",1631],["align-items: center;",1631],["width: 90%;",1631],["height: 25px;",1631],["font-size: 14px;",1631],["padding: 0;",1631],[".color-transition {",1631],["background-color: rgb(177, 221, 111);",1631],["Select TransitionExample.cs and drag TransitionExample.uxml to the Visual Tree Asset field in the Inspector if it's not already there.",1631],["To try the example, from the menu, select Window > UI Toolkit > Transition Example.",1631],["Click the button to view the color transition and the description of the events sent. There is a long delay between the TransitionRunEvent and the TransitionStartEvent. During the long duration, you can click the button again to interrupt the transition.",1631],["Additional resources",1631],["\nUSS\n",1631],["\nHandle events\n",1631],["\nCreate looping transitions\n",1631],["\nCreate a transition in a custom Editor window\n",1631],["Create looping transitions",1632],["Version: 2022.1+",1632],["This example demonstrates how to leverage the TransitionEndEvent to create transitions that loop.",1632],["Example overview",1632],["This example demonstrates two looping animations:",1632],["\nYo-yo: The loop starts from state A to state B with transition, and then return back to state A with transition.\n",1632],["\nA-to-B: The loop starts from state A to state B with transition, and then return back to state A without transition.\n",1632],["You can find the completed files that this example creates in this GitHub repository.",1632],["Prerequisites",1632],["\nUXML\n",1632],["\nUSS transition\n",1632],["\nTransition events\n",1632],["Create the example",1632],["Create a project in Unity with any template.",1632],["In your Project window, create a folder named loop-transition-example.",1632],["Right-click in the folder, and select Create > UI Toolkit > Editor Window.",1632],["In the UI Toolkit Editor Window Creator window, enter LoopingExample.",1632],["Save your changes. This creates three files as LoopingExample.cs, LoopingExample.uss, and LoopingExample.uxml.",1632],["Replace LoopingExample.cs with the following content:",1632],["```lang-csharp",1632],["using UnityEditor;",1632],["using UnityEngine;",1632],["using UnityEngine.UIElements;",1632],["public class LoopingExample : EditorWindow",1632],["[SerializeField] private VisualTreeAsset m_VisualTreeAsset = default;",1632],["private Label _yoyoLabel;",1632],["private Label _a2bLabel;",1632],["[MenuItem(\"Window/UI Toolkit/Transition Looping Example\")]",1632],["public static void ShowExample()",1632],["var wnd = GetWindow();",1632],["wnd.titleContent = new GUIContent(\"TransitionStyle\");",1632],["public void CreateGUI()",1632],["VisualElement root = rootVisualElement;",1632],["VisualElement asset = m_VisualTreeAsset.Instantiate();",1632],["root.Add(asset);",1632],["SetupYoyo(root);",1632],["SetupA2B(root);",1632],["// This method powers the yo-yo loop.",1632],["private void SetupYoyo(VisualElement root)",1632],["_yoyoLabel = root.Q(name: \"yoyo-label\");",1632],["// When the animation ends, the callback toggles a class to set the scale to 1.3",1632],["// or back to 1.0 when it's removed.",1632],["_yoyoLabel.RegisterCallback(evt => _yoyoLabel.ToggleInClassList(\"enlarge-scale-yoyo\"));",1632],["// Schedule the first transition 100 milliseconds after the root.schedule.Execute method is called.",1632],["root.schedule.Execute(() => _yoyoLabel.ToggleInClassList(\"enlarge-scale-yoyo\")).StartingIn(100);",1632],["// This method powers the A-to-B cycle.",1632],["private void SetupA2B(VisualElement root)",1632],["_a2bLabel = root.Q(name:\"a2b-label\");",1632],["_a2bLabel.RegisterCallback(evt =>",1632],["_a2bLabel.RemoveFromClassList(\"enlarge-scale-a2b\");",1632],["_a2bLabel.schedule.Execute(() => _a2bLabel.AddToClassList(\"enlarge-scale-a2b\")).StartingIn(10);",1632],["});",1632],["_a2bLabel.schedule.Execute(() => _a2bLabel.AddToClassList(\"enlarge-scale-a2b\")).StartingIn(100);",1632],["Replace LoopingExample.uxml with the following content:",1632],["```lang-xml",1632],["",1632],["xsi=\"http://www.w3.org/2001/XMLSchema-instance\"",1632],["engine=\"UnityEngine.UIElements\" editor=\"UnityEditor.UIElements\"",1632],["noNamespaceSchemaLocation=\"../../../../UIElementsSchema/UIElements.xsd\"",1632],["editor-extension-mode=\"False\">",1632],["",1632],["",1632],["",1632],["",1632],["",1632],["",1632],["",1632],["",1632],["",1632],["",1632],["Replace LoopingExample.uss with the following content:",1632],["```lang-css",1632],["yoyo-label{",1632],["transition-duration: 3s;",1632],[".text-style {",1632],["font-size: 20px;",1632],["flex-grow: 0;",1632],["margin: 20px;",1632],[".enlarge-scale-a2b{",1632],["scale: 1.5 1.5;",1632],["transition-duration: 3s;",1632],[".enlarge-scale-yoyo{",1632],["scale: 1.5 1.5;",1632],["container{",1632],["flex-grow:1;",1632],["justify-content: space-around;",1632],["align-items: center;",1632],["To test the example, from the menu, select Window -> UI Toolkit -> Transition Looping Example.",1632],["Additional resources",1632],["\nUSS\n",1632],["\nHandle events\n",1632],["\nCreate a transition event\n",1632],["\nCreate a transition in a custom Editor window\n",1632],["Transition events",1633],["Transition events inform you of the changes in a transition's state.",1633],["UI Toolkit uses transitions when a VisualElement's style property is modified. Changes to VisualElement property are immediately reflected visually. However, you can use the transition USS property to interpolate between the initial and end results gradually.",1633],["The transition's lifecycle",1633],["A transition's lifecycle has the following stages:",1633],["A VisualElement's property is modified when you:",1633],["\nAdd or remove a class with C# methods. For example: element.ToggleInClassList() (where element is any VisualElement).\n",1633],["\nUse USS with selectors like :hover.\n",1633],["\nManipulate the element's style property. For example: element.style.backgroundColor = Color.red; (where element is any VisualElement).\n",1633],["A TransitionRunEvent is sent.",1633],["If the resolved transition-delay property for the changing property has a value other than 0, nothing happens for the duration of the delay.",1633],["After the delay, a TransitionStartEvent is sent, and the transition starts with the property at its initial value.",1633],["For the length of time set by transition-duration, the transition occurs. During that time, the property goes from its initial to its final value.",1633],["If the property is changed to a new value during the transition, TransitionCancelEvent is sent. The transition process restarts at step 2.",1633],["After the transition-duration elapses, the property sets to its final value. A TransitionEndEvent is sent.",1633],["Transition events reference table",1633],["The following table describes the transition events and their propagation phases:",1633],["Event Description Trickles down Bubbles up Cancellable ",1633],["------------- ------------------------------------------------------------------- ----------------- -------------- --------------- ",1633],["TransitionRunEvent Sent when a transition is created. Yes ",1633],["TransitionStartEvent Sent when a transition's delay phase ends and the transition starts. Yes ",1633],["TransitionEndEvent Sent when a transition ends. Yes ",1633],["TransitionCancelEvent Sent when an a transition is canceled. Yes ",1633],["Behavior",1633],["Each transition property has its own lifecycle and its own transition events. You can access the current property with an event's stylePropertyNames property.",1633],["If a shorthand USS property is changed, every component also gets its own lifecycle. For example, if you change margin, margin-left, margin-right, margin-top and margin-bottom, they all get their own TransitionRunEvent, TransitionStartEvent and TransitionEndEvent, for a total of 12 separate events.",1633],["If you set transition-delay to 0, the TransitionRunEvent and TransitionStartEvent are sent one after the other within a few milliseconds.",1633],["If you set transition-delay to a value below 0, the transition won't start at the beginning. For example, with a transition-delay of -3 seconds and transition-duration of 5 seconds, the TransitionRunEvent and TransitionStartEvent is sent with an elapsedTime property set to 3 seconds and the transition effectively starts at the third second of a five-second animation.",1633],["Event list",1633],["This section describes the target, stylePropertyNames, and elapsedTime of each transition event.",1633],["TransitionRunEvent",1633],["A TransitionRunEvent event is sent when a transition is created.",1633],["target**: The element that executes the transition.",1633],["stylePropertyNames**: The list of properties modified by the transition.",1633],["elapsedTime**: The time since the start of the transition.",1633],["TransitionStartEvent",1633],["A TransitionStartEvent event is sent when the transition's delay phase ends and the transition begins.",1633],["target**: The element that executes the transition.",1633],["stylePropertyNames**: The list of properties modified by the transition.",1633],["elapsedTime**: The time since the start of the transition.",1633],["TransitionEndEvent",1633],["A TransitionEndEvent event is sent when a transition ends.",1633],["target**: The element that executes the transition.",1633],["stylePropertyNames**: The list of properties modified by the transition.",1633],["elapsedTime**: The time since the start of the transition.",1633],["TransitionCancelEvent",1633],["A TransitionCancelEvent event is sent when a transition is interrupted by the property being changed again.",1633],["target**: The element that executes the transition.",1633],["stylePropertyNames**: The list of properties modified by the transition.",1633],["elapsedTime**: The time since the start of the transition.",1633],["Examples",1633],["\nCreate a transition event: This example demonstrates the lifecycle of a transition event.\n",1633],["\nCreate looping transitions: This example demonstrates how to leverage the TransitionEndEvent to create transitions that loop.\n",1633],["\nCreate a transition in a custom Editor window: This example demonstrates how to create simple transitions with the UI Builder and C# script.\n",1633],["Additional resources",1633],["Create a transition in a custom Editor window",1634],["Version: 2022.1+",1634],["This example demonstrates how to create simple transitions with the UI Builder and C# script.",1634],["Example overview",1634],["The example creates a custom Editor window with three labels that rotate and scale when you hover over them. The transition lasts for three seconds.",1634],["You can find the completed files that this example creates in this GitHub repository.",1634],["Prerequisites",1634],["\nUI Builder\n",1634],["\nUSS\n",1634],["\nPseudo-classes\n",1634],["\nHandle events\n",1634],["Create the Editor window files",1634],["Use the menu to create the Editor window files automatically.",1634],["Create a Unity project with any template.",1634],["Create a folder named create-a-transition to store the files for this example.",1634],["In that folder, right-click in the Project window and select Create > UI Toolkit > Editor Window.",1634],["In the C# box, enter TransitionExample. This creates the following files:",1634],["\nTransitionExample.cs\n",1634],["\nTransitionExample.uss\n",1634],["\nTransitionExample.uxml\n",1634],["Create the transition in UI Builder",1634],["Create transitions for the second and the third labels in UI Builder. Set transform to resize and rotate the labels when a user hovers the labels and set the transition to last for three seconds.",1634],["Open TransitionExample.uxml in the UI Builder.",1634],["In the StyleSheets window, click Add new selector and enter Label:hover to add a hover style for the label.",1634],["Press Enter and select Label:hover in the list of USS selectors.",1634],["In the Transform section of the Inspector, do the following to scale and rotate the labels:",1634],["\nIn the Scale row, change the X value to 1.1.\n",1634],["\nIn the Rotate row, enter 10.\n",1634],["In the StyleSheets window, click Add new selector and enter Label to add a style for the label.",1634],["Press Enter and select Label in the list of USS selectors.",1634],["In the Transition Animations section, enter 3 in the Duration row.",1634],["Note**: Unity recommends that you set transitions on the label rather than the hover.",1634],["Save and close the UI Builder. Your TransitionExample.uss file looks like the following:",1634],["```lang-css",1634],[".custom-label {",1634],["font-size: 20px;",1634],["-unity-font-style: bold;",1634],["color: rgb(68, 138, 255);",1634],["Label:hover {",1634],["scale: 1.1 1;",1634],["rotate: 10deg;",1634],["Label {",1634],["transition-duration: 3s;",1634],["In Unity, select Window > UI Toolkit > Transition Example.",1634],["Hover over the second and third labels. The labels rotate and increase in size over three seconds.",1634],["Create the transition in C#",1634],["In C#, create the same transition you did in the previous section for the first label.",1634],["Open TransitionExample.cs in a text editor.",1634],["Replace the contents of TransitionExample.cs with the following:",1634],["```lang-cs",1634],["using UnityEditor;",1634],["using UnityEngine;",1634],["using UnityEngine.UIElements;",1634],["using System.Collections.Generic;",1634],["public class TransitionExample : EditorWindow",1634],["[SerializeField]",1634],["VisualTreeAsset m_VisualTreeAsset;",1634],["[MenuItem(\"Window/UI Toolkit/TransitionExample\")]",1634],["public static void ShowExample()",1634],["TransitionExample wnd = GetWindow();",1634],["wnd.titleContent = new GUIContent(\"Transition Example\");",1634],["public void CreateGUI()",1634],["// Each editor window contains a root VisualElement object.",1634],["VisualElement root = rootVisualElement;",1634],["// VisualElements objects can contain other VisualElement following a tree hierarchy.",1634],["cSharpLabel = new Label(\"Hello World! From C#\");",1634],["root.Add(cSharpLabel);",1634],["// Create transition on the new Label.",1634],["cSharpLabel.style.transitionDuration = new List{ new TimeValue(3) };",1634],["// Record default rotate and scale values.",1634],["defaultRotate = cSharpLabel.resolvedStyle.rotate;",1634],["defaultScale = cSharpLabel.resolvedStyle.scale;",1634],["// Set up event handlers to simulate the use of the :hover pseudo-class.",1634],["cSharpLabel.RegisterCallback(OnPointerOver);",1634],["cSharpLabel.RegisterCallback(OnPointerOut);",1634],["// Instantiate UXML",1634],["VisualElement labelFromUXML = m_VisualTreeAsset.Instantiate();",1634],["root.Add(labelFromUXML);",1634],["// The Label created with C#.",1634],["VisualElement cSharpLabel;",1634],["// The default rotate and scale values for the new Label.",1634],["Rotate defaultRotate;",1634],["Scale defaultScale;",1634],["void OnPointerOver(PointerOverEvent evt)",1634],["SetHover(evt.currentTarget as VisualElement, true);",1634],["void OnPointerOut(PointerOutEvent evt)",1634],["SetHover(evt.currentTarget as VisualElement, false);",1634],["// When the user enters or exits the Label, set the rotate and scale.",1634],["void SetHover(VisualElement label, bool hover)",1634],["label.style.rotate = hover ? new(Angle.Degrees(10)) : defaultRotate;",1634],["label.style.scale = hover ? new Vector2(1.1f, 1) : defaultScale;",1634],["// Unregister all event callbacks.",1634],["void OnDisable()",1634],["cSharpLabel.UnregisterCallback(OnPointerOver);",1634],["cSharpLabel.UnregisterCallback(OnPointerOut);",1634],["In Unity, select Window > UI Toolkit > Transition Example.",1634],["Hover over the first label. The label rotates and increases in size over three seconds.",1634],["Additional resources",1634],["\nUSS transition\n",1634],["Migrate from Unity UI (uGUI) to UI Toolkit",1635],["This page guides developers with experience in Unity UI (uGUI) to transition to the new UI Toolkit system. It explores the similarities and differences between uGUI and the UI Toolkit.",1635],["As uGUI is a runtime-only UI system, this page focuses on runtime UI. UI Toolkit can create both runtime and Editor UI. This guide applies to both use cases for UI Toolkit.",1635],["UI hierarchy",1635],["Both uGUI and UI Toolkit build and maintain the UI inside a hierarchy tree structure. In uGUI, all elements in this hierarchy are visible as individual GameObjects in the hierarchy view panel. In UI Toolkit, visual elements organize into a visual tree. The visual tree isn't visible in the panel.",1635],["To view and debug the UI hierarchy in UI Toolkit, you can use the UI Debugger. You can find UI Debugger in the Editor toolbar, under Window > UI Toolkit > Debugger.",1635],["Key differences",1635],["Canvas versus UIDocument",1635],["The Canvas component in uGUI is similar to the UIDocument component in UI Toolkit. Both are MonoBehaviours that attach to GameObjects.",1635],["In uGUI, a Canvas component sits at the root of the UI tree. It works with the Canvas Scaler component to determine the sort order, rendering, and scaling mode of the UI underneath.",1635],["In UI Toolkit, the UIDocument component contains a reference to a PanelSettings object. The PanelSettings contains the rendering settings for the UI, including the scale mode and the sort order. Multiple UIDocument components can point to the same PanelSettings object, which optimizes performance when using multiple UI screens in the same scene.",1635],["In uGUI, the UI tree hierarchy sits underneath the GameObject holding the Canvas component. In UI Toolkit, the UIDocument component holds a reference to the root element of the Visual Tree.",1635],["The UIDocument component also contains a reference to the UXML file that defines the UI layout from which the Visual Tree is built at runtime. See Creating UI section for more information.",1635],["Note:** For Editor UI, no UIDocument component is needed. You can derive your custom class from EditorWindow, then implement CreateGUI(). For a practical example, see the guide on Creating custom Editor windows.",1635],["GameObject components vs visual elements",1635],["UI Toolkit refers to UI elements as controls or visual elements. Examples of UI elements are:",1635],["\nControls\n",1635],["\nButtons\n",1635],["\nText labels\n",1635],["uGUI builds the UI hierarchy from GameObjects. Adding new UI elements requires adding new GameObjects to the hierarchy. The individual controls are implemented as MonoBehaviour components.",1635],["In UI Toolkit, the visual tree is virtual and doesn't use GameObjects. You can no longer build or view the UI hierarchy in the hierarchy view, but it removes the overhead of using a GameObject for each UI element.",1635],["In uGUI, UI elements derive (directly or indirectly) from the UIBehavior base class. Similarly, in UI Toolkit all UI elements derive from a base class called VisualElement. The key difference is the VisualElement class doesn't derive from MonoBehaviour. You can not attach visual elements to GameObjects.",1635],["Working with UI Toolkit controls in script is similar to working with uGUI controls.",1635],["The following table shows common script interactions with UI controls in uGUI, and their UI Toolkit counterparts.",1635],["Action uGUI UI Toolkit ",1635],["----------------------------- ----------------------------------------------- ------------------------------------------------------------------------------------------------------------- ",1635],["Write text into a label m_Label.text = \"My Text\"; m_Label.text = \"My Text\"; ",1635],["Read the state of a toggle bool isToggleChecked = m_Toggle.isOn; bool isToggleChecked = m_Toggle.value; ",1635],["Assign a callback to a button m_Button.onClick.AddListener(MyCallbackFunc); m_Button.clicked += MyCallbackFunc_1;orm_Button.RegisterCallback<ClickEvent>(MyCallbackFunc_2); ",1635],["To learn more about controls and their properties and events, please see the Controls Overview page.",1635],["Access UI elements",1635],["In uGUI, there are two ways scripts can access UI elements:",1635],["\nAssigning a reference to the UI components in the Editor.\n",1635],["\nFinding the components in the hierarchy using helper functions such as GetComponentInChildren<T>().\n",1635],["Since there are no GameObject or components in UI Toolkit, you can't directly assign references to a control in the Editor. They must be resolved at runtime using a query function.",1635],["Instead, access the Visual Tree via the UIDocument component.",1635],["UIDocument is a MonoBehaviour, so you can assign it as a reference and make it part of a Prefab. The UIDocument component holds a reference to the root visual element. From the root, scripts can find child elements by type or by name, similar to uGUI.",1635],["The table below shows a direct comparison of accessing UI controls in Unity UI and UI Toolkit",1635],["Action uGUI UI Toolkit ",1635],["------------------------------------------ --------------------------------------------- --------------------------------------- ",1635],["Find UI element by name transform.FindChild(\"childName\"); rootVisualElement.Query(\"childName\"); ",1635],["Find UI element by type transform.GetComponentInChildren<Button>(); rootVisualElement.Query<Button>(); ",1635],["Direct assignment of a reference in Editor Possible Not possible ",1635],["",1635],["Create UI",1635],["One of the biggest differences between uGUI and UI Toolkit is the creation of user interfaces.",1635],["Both uGUI and UI Toolkit allow you to visually build the UI and preview it in the Editor. In uGUI, the UI is then saved inside a Prefab, along with any logic scripts attached to individual UI controls.",1635],["In UI Toolkit, The UI layout is created in UI Builder, then saved as one or multiple UXML files. At runtime, UIDocument components load the UXML files that the Visual Tree assembles in memory.",1635],["For a method similar to uGUI, you can create UI controls directly from a script, then add them to a Visual Tree at runtime.",1635],["Prefabs",1635],["uGUI uses GameObjects for individual UI controls and Prefabs that both contain visuals and logic. UI Toolkit takes a different approach to re-usability, as it separates logic and layout. You can create reusable UI components through UXML and custom controls.",1635],["To create a similar template to a Prefab in UI Toolkit:",1635],["Create a UXML file for the partial UI element.",1635],["Create a GameObject with a UIDocument component.",1635],["Reference the UXML file in the GameObject.",1635],["Add a script to handle the UI component logic to the same GameObject.",1635],["Save the GameObject as a Prefab.",1635],["UI layout",1635],["Arranging individual UI elements on screen in uGUI is a manual process. By default, UI controls are free floating and are only affected by their direct parent. Other UI controls under the same parent don't affect their siblings positions or sizes. Pivots and anchors control the position and size of an element.",1635],["The UI Toolkit layout system is influenced by web design, and based on automatic layout generation. The automatic layout system affects all elements by default, and an element's size and position will affect other elements under the same parent.",1635],["The default behavior in UI Toolkit is comparable to placing all elements inside a VerticalLayoutGroup in uGUI, and adding a LayoutElement component to each.",1635],["You can disable automatic layout generation by changing the IStyle position property of the visual element. All visual elements have this property. See Visual Tree for a code sample.",1635],["UI Toolkit has no direct equivalents for anchoring and pivots of UI elements, due to the fundamental layout differences compared to uGUI.",1635],["The size and position of an element is controlled by the layout engine. For more information, see Layout Engine and Coordinate and position systems.",1635],["Rendering order",1635],["In uGUI, the order of the GameObjects in the hierarchy determines the rendering order. Objects further down in the hierarchy render last and appear on top. In a scene with multiple Canvases, the Sort Order on the root Canvas component determines the render order of the individual UI trees.",1635],["The render order in a visual tree in UI Toolkit operates the same way. Parent elements render before their children, and children render from the first to the last, so that the last appears on top. In a scene with multiple UI Documents, the render order is determined by the Sort Order setting on the root UIDocument component.",1635],["To change the rendering order of an element in uGUI, such as making an element appear on top, you can call the sibling functions on the Transform component of the GameObject. The VisualElement class offers comparable functions to control the rendering order. As all UI Toolkit controls derive from this class, all controls have access to this function.",1635],["The table below shows the uGUI functions to control render order and the equivalent functions in UI Toolkit:",1635],["Action uGUI UI Toolkit ",1635],["-------------------------------------------------------------------- -------------------------------------- ------------------------------------------------------------------------------------ ",1635],["Make element render underneath all other siblings transform.SetAsFirstSibling(); myVisualElement.SendToBack(); ",1635],["Make element render on top of all other siblings transform.SetAsLastSibling(); myVisualElement.BringToFront(); ",1635],["Manually control the element's render order relative to its siblings transform.SetSiblingIndex(newIndex); myVisualElement.PlaceBehind(sibling);myVisualElement.PlaceInFront(sibling); ",1635],["Events",1635],["Just like in uGUI, user interactions in UI Toolkit trigger events. The code can subscribe to receive a callback on events, such as pressing a button or moving a slider.",1635],["In uGUI, all UI elements are based on MonoBehaviour, and can expose their events in the Editor. This allows to set up logic with other GameObjects, for example to hide or show other UI elements, or to assign callback functions.",1635],["In UI Toolkit, logic and UI layout are stored separately. Callbacks can no longer be set up directly on GameObjects or stored in Prefabs. You must set up all callbacks at runtime, and handle them via scripting.",1635],["```lang-csharp",1635],["Button playButton = new Button(\"Play\");",1635],["playButton.RegisterCallback(OnPlayButtonPressed);",1635],["...",1635],["private void OnPlayButtonPressed(ClickEvent evt)",1635],["// Handle button press",1635],["The event dispatching system in UI Toolkit differs from events in uGUI. Depending on the event type, events aren't just sent to the target UI control, but also to all the parent controls.",1635],["To learn more about this, see Dispatch events.",1635],["",1635],["Use uGUI and UI Toolkit in the same project",1635],["It's possible that you use uGUI and UI Toolkit in the same project.",1635],["In its current version, UI Toolkit doesn't support 3D world space picking and rendering. You should make your entire game menu and Network Manager HUD with UI Toolkit, and make your 3D world space with uGUI.",1635],["You can also make your entire project with uGUI and only make some menu items with UI Toolkit.",1635],["You can use either UI Toolkit or uGUI for any item that doesn't interact outside of its own boundaries. For example, for a runtime UI, you can use uGUI to create on-screen buttons, such as the joystick for mobile, and use UI Toolkit to create a modal window.",1635],["However, advanced interactions between mixed UI don't work:",1635],["\nYou can't only use a keyboard to navigate freely between focused element in UI Toolkit and a uGUI selected object. To navigate, you must use C# scripts to register events on the boundary elements, and manually select or focus the next element from the other domain.\n",1635],["\nYou can't embed uGUI inside a UI Toolkit hierarchy or UI Toolkit in a uGUI hierarchy. You can use a RenderTexture to draw, but the events won't catch up.\n",1635],["\nStyling and event conventions in UI Toolkit are different from uGUI. It is difficult to make a project that has a UI that feels unified if you use a scattered mixture of uGUI and UI Tookit.\n",1635],["Additional resources",1635],["USS transition",1636],["USS transitions change property values over a given duration. Similar to the CSS transition, UI Toolkit supports many easing functions, variable transition durations, and a configurable transition delay. You can change the look and feel of the transition and adjust the sequence in which the transitions occur. You can use the easing functions to trigger discrete animation at any time of the transition.",1636],["Important**:",1636],["For properties that you supply with a value and a unit, make sure the unit for the start value matches the unit for the end value. Pay special attention to transitions to or from default values. For example, the default value of the translate attribute is 0. This implicitly uses pixels as its unit. If you try to transition from this value to a translate value expressed with a percentage, you will have a unit mismatch. Units that don't have a consistent conversion between them, such as pixels and percentages, are susceptible to unit mismatches.",1636],["A transition animation on a frame is triggered when the property's current state is different from the previous state. The first frame in a scene has no previous state; therefore, you must start a transition animation after the first frame.",1636],["For visual elements in a hierarchy, USS transition behaves the same as in the CSS transition, if you set transitions for an inherited property, such as color, transitions applied on the parent elements cascade to the child elements. To find out which property is inherited, see USS property reference.",1636],["When an incomplete transition is interruptedSame, USS transition behaves the same as in the CSS transition, the reverse transition might be faster.",1636],["",1636],["Transition includes the following properties:",1636],["Property USS syntax Description ",1636],[":-------------------- :---------------------------- :------------------------------------------------ ",1636],["Property transition-property Specifies the name of the USS property the transition effect is for. Defaults to all. ",1636],["Duration transition-duration Specifies how long the transition effect takes to complete. Defaults to 0s. ",1636],["Easing function transition-timing-function Specifies how the property moves between values over time. Defaults to ease. ",1636],["Delay transition-delay Defines when the transition effect starts. Defaults to 0s. ",1636],["Transition transition Shorthand for transition-property, transition-duration, transition-timing-function, and transition-delay. ",1636],["You can use the controls in the UI Builder, a USS file, or a C# script to set the transition properties for a visual element.",1636],["Transition controls in the UI Builder",1636],["You can use the controls in the Transition Animations section of the Inspector in the UI Builder to set transition rules for a visual element. You can set multiple transitions on a visual element. To add another transition, select Add Transition. To remove a transition, select the Remove (−) button.",1636],["Property",1636],["The Property control sets which property the transition applies to. To use it, select a keyword or USS property name from the dropdown. The dropdown has a search bar that you can use to find a specific keyword or USS property name.",1636],["Note**: If you choose Ignored, Unity ignores the transitions defined for the specified duration, delay, and easing function.",1636],["Duration",1636],["The Duration control sets the duration property. To use it, enter a value in the text box and specify a unit, or choose initial in the unit selector.",1636],["Tip**: You can enter s or ms after values or enter initial. This automatically changes the displayed unit in the unit selector. You can also drag to define the value in the text box.",1636],["Easing",1636],["The Easing control sets the easing function property. To use it, select an easing function name from the dropdown.",1636],["Delay",1636],["The Delay control sets the delay property. To use it, enter a value in the text box and specify a unit, or choose Initial in the unit selector.",1636],["Tip**: You can enter s or ms after values or enter initial. This automatically changes the displayed unit in the unit selector. You can also drag to define the value in the text box.",1636],["Usage hints",1636],["The Usage Hints control sets the UsageHints property for optimizations. To use it in UI Builder, select one or more values from the dropdown list.",1636],["Note**: Set the usage hints at edit time or before you add the element to a panel. When the transition starts, the system might automatically add missing relevant usage hints to avoid regenerating geometry in every frame. However, this causes a one-frame performance penalty because the rendering data for the VisualElement and its descendants is regenerated.",1636],["USS transition properties",1636],["You can use styling rules to set the transition properties for a visual element. You can set the styling rules within a USS file or inline in a UXML file.",1636],["transition-property",1636],["You can supply a single USS property, a keyword, or a comma-separated list of them.",1636],["The following table lists the supported keywords for transition-property:",1636],["Keyword Description ",1636],[":------------ :----------------------------------------------------------------------------------------------- ",1636],["all Applies transitions to all properties and overrides any preceding transitions. ",1636],["initial Applies transitions to all properties. You can't use this keyword in a comma-separated list. ",1636],["none Ignores transitions for all properties. You can't use this keyword in a comma-separated list. ",1636],["",1636],["You can apply transitions to most USS properties. However, the animatability for certain properties is different. The animatabilty of USS properties falls into the following categories:",1636],["Animatability Description ",1636],[":-------------------- :--------------------------------------------------- ",1636],["Fully animatable Supports transition from the start value to the end value, at a speed that follows the easing function and transition duration. ",1636],["Discrete Supports transition between values in a single step from the start value to the end value. ",1636],["Non-animatable Doesn't support transition. ",1636],["To find out the animatability of each property, see USS property reference.",1636],["Note**: Unity recommends you use transitions with the USS transform properties. Although you can use transitions on other USS properties, it might result in animations with poor frame rates because value changes on these properties might cause layout recalculations. Layout recalculations in each frame can slow down the frame rate of your transition animation.",1636],["Examples**",1636],["```lang-css",1636],["transition-property: scale;",1636],["transition-property: translate, all, rotate;",1636],["transition-property: initial;",1636],["transition-property: none;",1636],["transition-duration",1636],["You can supply a number with a unit, a keyword, or a comma-separated list of numbers and units.",1636],["If you supply multiple values, each value applies to the corresponding property specified in transition-property.",1636],["transition-duration only supports the keyword initial (0s). You can't use this keyword in a comma-separated list.",1636],["Examples**",1636],["```lang-css",1636],["transition-duration: 2s;",1636],["transition-duration: 800ms;",1636],["transition-duration: 3s, 1500ms, 1.75s;",1636],["transition-duration: initial;",1636],["In the following example, the original duration for scale is 1s, but all overrides it to 2s.",1636],["```lang-css",1636],["transition-property: scale, all, rotate;",1636],["transition-duration: 1s, 2s, 3s;",1636],["transition-timing-function",1636],["You can supply an easing function, a keyword, or a comma-separated list of easing functions.",1636],["If you supply multiple values, each value applies to the corresponding property specified in transition-property.",1636],["transition-timing-function only supports the keyword initial. It's equal to ease. You can't use this keyword in a comma-separated list.",1636],["UI Toolkit supports the following easing functions:",1636],["\nease\n",1636],["\nease-in\n",1636],["\nease-out\n",1636],["\nease-in-out\n",1636],["\nlinear\n",1636],["\nease-in-sine\n",1636],["\nease-out-sine\n",1636],["\nease-in-out-sine\n",1636],["\nease-in-cubic\n",1636],["\nease-out-cubic\n",1636],["\nease-in-out-cubic\n",1636],["\nease-in-circ\n",1636],["\nease-out-circ\n",1636],["\nease-in-out-circ\n",1636],["\nease-in-elastic\n",1636],["\nease-out-elastic\n",1636],["\nease-in-out-elastic\n",1636],["\nease-in-back\n",1636],["\nease-out-back\n",1636],["\nease-in-out-back\n",1636],["\nease-in-bounce\n",1636],["\nease-out-bounce\n",1636],["\nease-in-out-bounce\n",1636],["For detailed information about each function, see MDN's documentation for the transition-timing-function CSS attribute or easings.net.",1636],["Examples**",1636],["```lang-css",1636],["transition-timing-function: linear;",1636],["transition-timing-function: ease-in, ease-out-circ, ease-in-out-cubic;",1636],["transition-timing-function: initial;",1636],["transition-delay",1636],["You can supply a number with a unit, a keyword, or a comma-separated list of numbers and units.",1636],["If you supply multiple values, each value applies to the corresponding property specified in transition-property.",1636],["transition-delay only supports the keyword initial (0s). You can't use this keyword in a comma-separated list.",1636],["Examples**",1636],["```lang-css",1636],["transition-delay: 0s;",1636],["transition-delay: 300ms;",1636],["transition-delay: 2s, 650ms, 2.75s;",1636],["transition-delay: initial;",1636],["transition",1636],["You can supply one transition, a keyword, or a comma-separated list of transitions. You separate properties within a transition by a space with the following order:",1636],["transition-property",1636],["transition-delay",1636],["transition-duration",1636],["transition-timing-function",1636],["transition only supports the keyword initial, which represents the initial value of each transition property:",1636],["transition-delay: 0s",1636],["transition-duration: 0s",1636],["transition-property: initial",1636],["transition-timing-function: ease",1636],["Examples**",1636],["```lang-css",1636],["/One transition/",1636],["transition: width 2s ease-out;",1636],["/Two transitions/",1636],["transition: margin-right 4s, color 1s;",1636],["C# properties",1636],["You can set the transition properties for a visual element in a C# script.",1636],["IStyle.transitionProperty",1636],["The IStyle.transitionProperty property sets the USS properties to which transitions apply.",1636],["The transitionProperty property is of type StyleList<StylePropertyName>. StylePropertyName is a struct that you can construct from a string. StyleList is a struct you can construct from a list of StylePropertyNames.",1636],["Example**",1636],["```lang-cs",1636],["//Create a list that contains the rotate property, and use it to set transitionProperty.",1636],["List properties = new List();",1636],["properties.Add(new StylePropertyName(\"rotate\"));",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionProperty = new StyleList(properties);",1636],["You can use implicit conversions to simplify the above code as follows:",1636],["```lang-cs",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionProperty = new List { \"rotate\" };",1636],["IStyle.transitionDuration",1636],["The IStyle.transitionDuration property sets the durations of the transitions on a visual element.",1636],["The transitionDuration property is of type StyleList<TimeValue>. TimeValue is a struct that you can construct from a number and a TimeUnit enum. StyleList is a struct you can construct from a list of TimeValues.",1636],["Example**",1636],["```lang-cs",1636],["//Create a list that contains durations 2s and 500ms and use it to set transitionDuration.",1636],["List durations = new List();",1636],["durations.Add(new TimeValue(2f, TimeUnit.Second));",1636],["durations.Add(new TimeValue(500f, TimeUnit.Millisecond));",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionDuration = new StyleList(durations);",1636],["You can use implicit conversions to simplify the above code as follows:",1636],["```lang-cs",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionDuration = new List { 2, new (500, TimeUnit.Millisecond) };",1636],["IStyle.transitionTimingFunction",1636],["The IStyle.transitionTimingFunction property sets the easing functions for the transitions on a visual element.",1636],["The transitionTimingFunction property is of type StyleList<EasingFunction>. EasingFunction is a struct that you can construct from an EasingMode enum.",1636],["Example**",1636],["```lang-cs",1636],["//Create a list that contains the Linear easing function, and use it to set transitionTimingFunction.",1636],["List easingFunctions = new List();",1636],["easingFunctions.Add(new EasingFunction(EasingMode.Linear));",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionTimingFunction = new StyleList(easingFunctions);",1636],["You can use implicit conversions to simplify the above code as follows:",1636],["```lang-cs",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionTimingFunction = new List { EasingMode.Linear };",1636],["IStyle.transitionDelay",1636],["The IStyle.transitionDelay property sets the delays for the transitions on a visual element.",1636],["The transitionDelay property is of type StyleList<TimeValue>. TimeValue is a struct that you can construct from a number and a TimeUnit enum. StyleList is a struct you can construct from a list of TimeValues.",1636],["Example**",1636],["```lang-cs",1636],["//Create a list that contains delays 0.5s and 200ms, and use it to set transitionDelay.",1636],["List delays = new List();",1636],["delays.Add(new TimeValue(0.5f, TimeUnit.Second));",1636],["delays.Add(new TimeValue(200f, TimeUnit.Millisecond));",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionDelay = new StyleList(delays);",1636],["You can use implicit conversions to simplify the above code as follows:",1636],["```lang-cs",1636],["//Given a VisualElement named \"element\"...",1636],["element.style.transitionDelay = new List { 0.5f, new(200, TimeUnit.Millisecond) };",1636],["More examples",1636],["This section includes examples that apply transitions on multiple properties.",1636],["Example 1**: This example applies transitions on the scale and transform-origin properties:",1636],["\nThe first transition is on the scale property. It has a duration of 4s, a delay of 0s, and the ease-in-sine easing function.\n",1636],["\nThe second transition is on the transform-origin property. It has a duration of 3s, a delay of 600ms, and the ease-out-elastic easing function.\n",1636],["```lang-css",1636],[".classA {",1636],["transition-property: scale, transform-origin;",1636],["transition-duration: 4s, 3s;",1636],["transition-delay: 0s, 600ms;",1636],["transition-timing-function: ease-in-sine, ease-out-elastic;",1636],["Example 2**: In this example, the later transitions override earlier transitions, including transitions with the all keyword:",1636],["The first transition is on all properties. It applies a duration of 500 milliseconds, a delay of zero seconds, and the linear easing function.",1636],["The second transition is on the translate property. It overrides the transition with a duration of 1s, a delay of 1s, and the ease-in easing function. All other properties still have a duration of 500ms, a delay of 0s, and the linear easing function.",1636],["```lang-css",1636],[".classB {",1636],["transition-property: all, translate;",1636],["transition-duration: 500ms, 1s;",1636],["transition-delay: 0s, 1s;",1636],["transition-timing-function: linear, ease-in;",1636],["Example 3**:",1636],["This example shows what happens when property value lists are of different lengths. If any property's list of values is shorter than that for transition-property, Unity repeats its values to make them match. Similarly, if any property's value list is longer that for transition-property, Unity truncates it.",1636],["```lang-css",1636],[".classC {",1636],["transition-property: scale, rotate, translate;",1636],["transition-duration: 1s, 2s;",1636],["transition-delay: 1s, 2s, 3s, 4s, 5s, 6s, 7s;",1636],["The following table shows the final results for the example above:",1636],["Property Duration Delay Easing function ",1636],[":------------ :------------ :------------ :-------------------- ",1636],["scale 1s 1s ease ",1636],["rotate 2s 2s ease ",1636],["translate 1s 3s ease ",1636],["Important**: transition-property, transition-duration, transition-delay, and transition-timing-function are separate USS properties. If you leave any of them undefined, it's possible that they are defined elsewhere, such as in another USS rule or inline on the UXML element.",1636],["Additional resources",1636],["Theme Style Sheet (TSS)",1637],["Theme Style Sheet (TSS) files are regular USS files. UI Toolkit treats TSS as a distinct asset type and uses it for management purposes.",1637],["Regular USS syntax and format apply to TSS files, but usually, a theme file contains references to other USS files through the @import rule.",1637],["Note**: USS files also support the @import rule.",1637],["Create a TSS",1637],["You can create different TSS files for different themes and switch between them at runtime. Typically, you should use USS for styles. Consider TSS when you customize the look and feel for different platforms or devices, or when you use different fonts for different languages if your games or applications support multiple languages.",1637],["Note**: When you add your first UIDocument to a GameObject in your project, it generates a default runtime theme asset at Assets/UI Toolkit/UnityThemes/UnityDefaultTheme.tss. Although you can create a TSS from scratch, to get all the default UI controls to work, you must import the default runtime theme, and then overwrite or add new styles to create your custom theme.",1637],["To create a new TSS:",1637],["Create one or more USS files with your custom styles.",1637],["Do one of the following:",1637],["\nSelect Assets > Create > UI Toolkit > TSS Theme File to create an empty theme file and import the default theme.\n",1637],["\nSelect Assets > Create > UI Toolkit > Default Runtime Theme File to create a copy of the default runtime theme file. You can rename the file if you want.\n",1637],["Import your style USS files to your theme.",1637],["Preview a TSS",1637],["Your custom theme also appears in the theme list of the Viewport in UI Builder. To preview your theme, select it from the Viewport.",1637],["",1637],["Apply a TSS",1637],["You can reference a TSS in UXML or C# the same way as you do with USS.",1637],["You can also set a TSS as the default theme for a Panel Setting asset. If you have more than one Panel Setting, each one can use a different TSS file.",1637],["Note**: If you set a TSS for a Panel Setting asset, it doesn't make the TSS a global style for the whole project. You still need to reference the TSS in UXML or C#.",1637],["",1637],["Import a theme",1637],["You can use the TSS asset's Inspector window or the @import rule to import a theme.",1637],["Note**: If you define the USS variables or styles in both the current TSS and the imported style sheet, the current TSS overrides the imported style sheet.",1637],["Import a theme with the Inspector window",1637],["Select the TSS asset.",1637],["Go to the Inspector window > Inherited Themes.",1637],["Select +. This adds a new reference field.",1637],["Select the list icon in the reference field. A dropdown list displays with all the style sheets in your project.",1637],["Select the style sheet to use.",1637],["Select Apply.",1637],["Import the default theme with the @import rule",1637],["To import the default Unity runtime theme, you must use the following syntax:",1637],["```lang-css",1637],["@import url(\"unity-theme://default\");",1637],["Note**: This URL in this syntax is a special case and it refers the built-in default theme inside the engine. You can't use this syntax for any other themes.",1637],["Import other themes with the @import rule",1637],["To import a theme other than the default theme, or a USS file, use the following syntax:",1637],["```lang-css",1637],["@import url(\"/\");",1637],["Additional resources",1637],["UI Toolkit Debugger",1638],["The UI Toolkit Debugger is a tool that you can use to inspect and debug your UI elements in real-time. It provides a visual representation of your UI hierarchy. You use it to examine the state and properties of each UI element.",1638],["When you open the UI Toolkit Debugger, it displays a window that shows a live view of your UI hierarchy. You can select any element in the hierarchy to inspect its properties and state. The debugger also displays any errors or warnings related to your UI elements.",1638],["One of the key features of the UI Toolkit Debugger is the ability to view and edit the styles that are applied to your UI elements. This is done through the Style Inspector, which allows you to see all the style properties that are applied to a particular element. You can also edit these properties in real-time to see the effect they have on your UI.",1638],["Note**: Editing styles in the Debugger only changes the inline styles on the live elements themselves and the changes aren't saved anywhere and will be lost on the next UI regeneration.",1638],["To use the UI Toolkit Debugger:",1638],["Select Window > UI Toolkit > Debugger to open the UI Toolkit Debugger window.",1638],["Do the following:",1638],["\nTo debug elements in UI Builder, in the Viewport window of the UI Builder, click Preview to enable the Preview mode. Preview mode turns off the invisible elements in the Canvas. Those invisible elements absorb all mouse events and are used to pick elements for editing. UI Toolkit Debugger will pick them instead of your actual elements if they're not turned off.\n",1638],["\nTo debug elements in the scene view, select the GameObject and enter Play mode.\n",1638],["In the UI Toolkit Debugger window, select Pick Element.",1638],["In the Canvas of the UI Builder or in the Game view, select the element that you want to debug. The UI Toolkit Debugger window shows a live view of your UI hierarchy and displays the following:",1638],["All child elements of the VisualElement",1638],["All USS selectors for each component of the VisualElement",1638],["Detailed information for each USS selector",1638],["Tip**: You can also open the UI Toolkit Debugger window by clicking ⋮ in the UI Builder or the Game view, and then selecting UI Toolkit Debugger.",1638],["Additional resources",1638],["\nTest UI\n",1638],["UI Renderer",1639],["UI Renderer is a rendering system built directly on top of Unity’s graphics device layer that you can use to generate visual content.",1639],["Topic Description ",1639],["Generate 2D visual content Understand the Mesh API, the Vector API, and the types of graphics that you can create with the Vector API. ",1639],["Create a pie chart in the Editor and runtime UI Use the Vector API to create a pie chart. ",1639],["Use Vector API to create a radial progress indicator Use the Vector API to create a radial progress indicator custom control and add the custom control in a runtime UI. ",1639],["Use Mesh API to create a radial progress indicator Use the Mesh API to create a radial progress indicator custom control and add the custom control in a runtime UI. ",1639],["Additional resources",1639],["\nCreate custom controls\n",1639],["Find visual elements with UQuery",1640],["You can use UQuery to find elements from a visual tree. UQuery was inspired by JQuery and Linq, and is designed to limit dynamic memory allocation. This allows for optimal performance on mobile platforms.",1640],["Query methods",1640],["You can use UQuery through the following extension methods:",1640],["\nQ\n",1640],["\nQuery\n",1640],["Internally, the Q and Query methods use UQueryBuilder to construct a query. These extension methods reduce the verbosity of creating a UQueryBuilder.",1640],["To use UQuery to find elements, you must load and instantiate the UXML first, and then use Query or Q to construct selection rules on a root visual element.",1640],["Query returns a list of elements that match the selection rules. You can filter the return results of Query with the public methods of UQueryBuilder, such as First, Last, AtIndex, Children, and Where.",1640],["Q is the shorthand for Query<T>.First(). It returns the first element that matches the selection rules.",1640],["Query elements",1640],["You can query elements by their name, their USS class, or their element type (C# type). You can also query with a predicate or make complex hierarchical queries.",1640],["The following sections use this example UXML to demonstrate how to find elements:",1640],["```lang-xml",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["",1640],["Query by name",1640],["To find elements by their name, use Query(name: \"element-name\") or Q(name: \"element-name\"). You can omit the name as it's the first argument. For example:",1640],["The following example finds a list of elements named \"Ok\":",1640],["```lang-csharp",1640],["List result = root.Query(\"OK\").ToList();",1640],["The following example uses Query to find the first element named \"Ok\":",1640],["```lang-csharp",1640],["VisualElement result = root.Query(\"OK\").First(); //or VisualElement result = root.Q(\"OK\");",1640],["The following example uses Q to find the first element named \"Ok\":",1640],["```lang-csharp",1640],["VisualElement result = root.Q(\"OK\");",1640],["The following example finds the second element named \"Ok\":",1640],["```lang-csharp",1640],["VisualElement result3 = root.Query(\"OK\").AtIndex(1);",1640],["The following example finds the last element named \"Ok\":",1640],["```lang-csharp",1640],["VisualElement result4 = root.Query(\"OK\").Last();",1640],["",1640],["Query by USS class",1640],["To find elements by a USS class, use Query(className: \"class-name\") or Q(className: \"class-name\").",1640],["The following example finds all the elements that have the class \"yellow\" and assigns them to a list:",1640],["```lang-csharp",1640],["List result = root.Query(className: \"yellow\").ToList();",1640],["The following example finds the first element that has the class \"yellow\":",1640],["```lang-csharp",1640],["VisualElement result = root.Q(className: \"yellow\");",1640],["",1640],["Query by element type",1640],["To find elements by their element type(C# type), use Query<Type> or Q<Type>.",1640],["The following example finds the first button and adds a tooltip for it:",1640],["```lang-csharp",1640],["VisualElement result = root.Q();",1640],["result.tooltip = \"This is a tooltip!\";",1640],["The following example finds the third button:",1640],["```lang-csharp",1640],["VisualElement result = root.Query().AtIndex(2);",1640],["Note**: You can only query by the actual type of the element, not base classes.",1640],["",1640],["Query with a predicate",1640],["Other than to query elements by name, class, and type, you can also use the Where method to select all elements that satisfy a predicate. The predicate must be a function callback that takes a single VisualElement argument.",1640],["The following example finds all the elements with the \"yellow\" USS class that have no tooltips:",1640],["```lang-csharp",1640],["List result = root.Query(className: \"yellow\").Where(elem => elem.tooltip == \"\").ToList();",1640],["",1640],["Complex hierarchical queries",1640],["You can combine name, class, and type to make complex hierarchical queries.",1640],["The following example finds the first button named \"OK\" that has a class of \"yellow\":",1640],["```lang-csharp",1640],["VisualElement result = root.Query(className: \"yellow\", name: \"OK\").First();",1640],["The following example finds the child cancel button of the \"container2\":",1640],["```lang-csharp",1640],["VisualElement result = root.Query(\"container2\").Children(\"Cancel\").First();",1640],["Operate on results",1640],["You can use the ForEach method to operate directly on the query results.",1640],["The following example adds a tooltip for any elements that have no tooltips:",1640],["```lang-csharp",1640],["root.Query().Where(elem => elem.tooltip == \"\").ForEach(elem => elem.tooltip=\"This is a tooltip!\");",1640],["Best practices",1640],["Consider the following when you use UQuery:",1640],["UQuery traverses through the hierarchy to find elements by name, class or type. Cache results from UQuery at initialization.",1640],["If you need to retrieve multiple elements, use the QueryState struct (returned by the element.Query() method) and enumerate it to avoid creating lists. You can also construct a query once and execute it on different elements.",1640],["UI Toolkit doesn't destroy visual elements that are no longer needed, it uses C# garbage collector to collect them. Be mindful to not accidentally retain references to visual elements in a class that outlives the UIDocuments or Window where the elements came from.",1640],["Capture VisualElement variables inside closures.",1640],["When you create or release lots of elements, enable incremental garbage collection to avoid garbage collector spikes.",1640],["Additional resources",1640],["\nUSS selectors\n",1640],["\nIntroduction to visual elements and visual tree\n",1640],["\nLoad UXML and USS from C# scripts\n",1640],["\nInstantiate UXML with C#\n",1640],["USS built-in variable references",1641],["The following tables list all the USS built-in variables.",1641],["metrics",1641],["",1641],["Group Role/Control Name Description Professional Personal Runtime ",1641],["",1641],["metrics ",1641],[" `--unity-metrics-default-border_radius` The default border radius for controls `3px` `3px` `0px` \n",1641],[" `--unity-metrics-default-font_big_size` The big font size `14px` `14px` `15px` \n",1641],[" `--unity-metrics-default-font_normal_size` The normal font size `12px` `12px` `14px` \n",1641],[" `--unity-metrics-default-font_semi_small_size` The semi small font size `11px` `11px` `13px` \n",1641],[" `--unity-metrics-default-font_small_size` The small font size `10px` `10px` `12px` \n",1641],[" `--unity-metrics-default-font_tiny_size` The tiny font size `9px` `9px` `11px` \n",1641],[" `--unity-metrics-default-font_very_big_size` The very big font size `19px` `19px` `21px` \n",1641],[" `--unity-metrics-inspector_titlebar-height` The height of a title bar in an Inspector view `22px` `22px` Undefined \n",1641],[" `--unity-metrics-single_line-height` The usual height for a single-line Editor control, for example, a one-line text field.<br/> See EditorGUIUtility.singleLineHeight `18px` `18px` Undefined \n",1641],[" `--unity-metrics-single_line_large-height` The usual height for a large single-line Editor control, for example, an Inspector title bar label `20px` `20px` Undefined \n",1641],[" `--unity-metrics-single_line_small-height` The usual height for a small single-line Editor control, for example, a mini toggle or a mini text field `16px` `16px` Undefined \n",1641],[" `--unity-metrics-toolbar-height` The height of a toolbar control `21px` `21px` Undefined \n",1641],[" `--unity-metrics-toolbar_button-height` The height of a toolbar button control `20px` `20px` Undefined \n",1641],["",1641],[" `--current-font` `UIPackageResources/Fonts/Inter/Inter-Regular SDF.asset` `UIPackageResources/Fonts/Inter/Inter-Regular SDF.asset` Undefined \n",1641],["colors ",1641],[" alternated_rows \n",1641],[" `--unity-colors-alternated_rows-background` The alternate background color for views with alternating row colors `#3F3F3F` `#CACACA` Undefined \n",1641],[" app_toolbar \n",1641],[" `--unity-colors-app_toolbar-background` The background color for the main toolbar `#191919` `#8A8A8A` Undefined \n",1641],[" app_toolbar_button \n",1641],[" `--unity-colors-app_toolbar_button-background` The background color for a button in the main toolbar `#383838` `#C8C8C8` Undefined \n",1641],[" `--unity-colors-app_toolbar_button-background-checked` The background color for a button in the main toolbar when it is checked `#6A6A6A` `#656565` Undefined \n",1641],[" `--unity-colors-app_toolbar_button-background-hover` The background color for a button in the main toolbar when the mouse pointer hovers over them `#424242` `#BBBBBB` Undefined \n",1641],[" `--unity-colors-app_toolbar_button-background-pressed` The background color for a button in the main toolbar when it is pressed `#6A6A6A` `#656565` Undefined \n",1641],[" `--unity-colors-app_toolbar_button-border` The border color for a button in the main toolbar `#191919` `#6B6B6B` Undefined \n",1641],[" `--unity-colors-app_toolbar_button-border_accent` The accent border color for a button in the main toolbar `#222222` `#6B6B6B` Undefined \n",1641],[" box \n",1641],[" `--unity-colors-box-background` The background color for a box control `rgba(40, 40, 40, 0.3019608)` `rgba(185, 185, 185, 0.9019608)` `#DEDEDE` \n",1641],[" `--unity-colors-box-border` The border color for a box control `transparent` `transparent` `#555555` \n",1641],[" button \n",1641],[" `--unity-colors-button-background` The background color for a button control `#585858` `#E4E4E4` `#BCBCBC` \n",1641],[" `--unity-colors-button-background-disabled` Undefined Undefined `#959595` \n",1641],[" `--unity-colors-button-background-focus` The background color for a button control when it has focus `#6E6E6E` `#BEBEBE` Undefined \n",1641],[" `--unity-colors-button-background-hover` The background color for a button control when the mouse pointer hovers over it `#676767` `#ECECEC` `#D1D1D1` \n",1641],[" `--unity-colors-button-background-hover_pressed` The background color for a button control when it is hoverd and pressed `#4F657F` `#B0D2FC` Undefined \n",1641],[" `--unity-colors-button-background-pressed` The background color for a button control when it is pressed `#46607C` `#96C3FB` `#959595` \n",1641],[" `--unity-colors-button-border` The border color for a button control `#303030` `#B2B2B2` `#959595` \n",1641],[" `--unity-colors-button-border_accent` The border accent color for a button control `#242424` `#939393` Undefined \n",1641],[" `--unity-colors-button-border_accent-focus` The border accent color used for a button control when focused `#7BAEFA` `#018CFF` Undefined \n",1641],[" `--unity-colors-button-border-disabled` Undefined Undefined `#7E7E7E` \n",1641],[" `--unity-colors-button-border-focus` Undefined Undefined `#006AA6` \n",1641],[" `--unity-colors-button-border-hover` Undefined Undefined `#808080` \n",1641],[" `--unity-colors-button-border-pressed` The border color for a button control when it is pressed `#0D0D0D` `#707070` `#646464` \n",1641],[" `--unity-colors-button-text` The text color for a button control `#EEEEEE` `#090909` `#1B1B1B` \n",1641],[" `--unity-colors-button-text-disabled` Undefined Undefined `#2D2D2D` \n",1641],[" default \n",1641],[" `--unity-colors-default-background` The default background color for controls `#282828` `#A5A5A5` Undefined \n",1641],[" `--unity-colors-default-border` The default border color for controls `#232323` `#999999` `#959595` \n",1641],[" `--unity-colors-default-text` The default text color `#D2D2D2` `#090909` `#1B1B1B` \n",1641],[" `--unity-colors-default-text-hover` The default text color when the mouse pointer hovers over the text `#BDBDBD` `#090909` Undefined \n",1641],[" dropdown \n",1641],[" `--unity-colors-dropdown-background` The background color for a dropdown control `#515151` `#DFDFDF` `#DFDFDF` \n",1641],[" `--unity-colors-dropdown-background-hover` The background color for a dropdown control when the mouse pointer hovers over it `#585858` `#E4E4E4` `#E8E8E8` \n",1641],[" `--unity-colors-dropdown-border` The border color for a dropdown control `#303030` `#B2B2B2` `#999999` \n",1641],[" `--unity-colors-dropdown-border_accent` The border accent color for a dropdown control `#242424` `#939393` `#939393` \n",1641],[" `--unity-colors-dropdown-text` The text color for a dropdown control `#E4E4E4` `#090909` `#1B1B1B` \n",1641],[" error \n",1641],[" `--unity-colors-error-text` The text color for error messages `#D32222` `#5A0000` Undefined \n",1641],[" headerbar \n",1641],[" `--unity-colors-headerbar-background` The background color for a header bar control `#3C3C3C` `#CBCBCB` `#BCBCBC` \n",1641],[" headerbar_column \n",1641],[" `--unity-colors-headerbar_column-background` The background color used for a column control in a header bar `#3C3C3C` `#CBCBCB` `#BCBCBC` \n",1641],[" `--unity-colors-headerbar_column-background-hover` The background color used for a button control when hovered over `#464646` `#C1C1C1` `#D1D1D1` \n",1641],[" `--unity-colors-headerbar_column-background-pressed` The background color used for a button control when pressed `#505050` `#EFEFEF` `#959595` \n",1641],[" helpbox \n",1641],[" `--unity-colors-helpbox-background` The background color for a helpbox control `rgba(96, 96, 96, 0.2039216)` `rgba(235, 235, 235, 0.2039216)` Undefined \n",1641],[" `--unity-colors-helpbox-border` The border color for a helpbox control `#232323` `#A9A9A9` Undefined \n",1641],[" `--unity-colors-helpbox-text` The text color for a helpbox control `#BDBDBD` `#161616` Undefined \n",1641],[" highlight \n",1641],[" `--unity-colors-highlight-background` The background color for selected items or selected text `#2C5D87` `#3A72B0` Undefined \n",1641],[" `--unity-colors-highlight-background-hover` The background color for items when the mouse pointer hovers over them `rgba(256, 256, 256, 0.0627451)` `rgba(0, 0, 0, 0.0627451)` Undefined \n",1641],[" `--unity-colors-highlight-background-hover-lighter` `#5F5F5F` `#9A9A9A` Undefined \n",1641],[" `--unity-colors-highlight-background-inactive` The background color for selected items or selected text when the control does not have focus `#4D4D4D` `#AEAEAE` Undefined \n",1641],[" `--unity-colors-highlight-text` The text color for selected items or selected text `#4C7EFF` `#0032E6` Undefined \n",1641],[" `--unity-colors-highlight-text-inactive` The text color for selected items or selected text when the control does not have focus `#FFFFFF` `#FFFFFF` Undefined \n",1641],[" input_field \n",1641],[" `--unity-colors-input_field-background` The background color for an input field control `#2A2A2A` `#F0F0F0` `#F0F0F0` \n",1641],[" `--unity-colors-input_field-background-disabled` Undefined Undefined `#D1D1D1` \n",1641],[" `--unity-colors-input_field-border` The border color for an input field control `#212121` `#B7B7B7` `#646464` \n",1641],[" `--unity-colors-input_field-border_accent` The border accent color for an input field control `#0D0D0D` `#A0A0A0` Undefined \n",1641],[" `--unity-colors-input_field-border-focus` The border color for an input field control when it has focus `#3A79BB` `#1D5087` `#006AA6` \n",1641],[" `--unity-colors-input_field-border-hover` The border color for an input field control when the mouse pointer hovers over it `#656565` `#6C6C6C` `#323232` \n",1641],[" `--unity-colors-input_field-text-disabled` Undefined Undefined `#585858` \n",1641],[" inspector_titlebar \n",1641],[" `--unity-colors-inspector_titlebar-background` The background color for a title bar in an Inspector view `#3E3E3E` `#CBCBCB` Undefined \n",1641],[" `--unity-colors-inspector_titlebar-background-hover` The background color for a title bar in an Inspector view when the mouse pointer hovers over it `#474747` `#D6D6D6` Undefined \n",1641],[" `--unity-colors-inspector_titlebar-border` The border color for a title bar in an Inspector view `#1A1A1A` `#7F7F7F` Undefined \n",1641],[" `--unity-colors-inspector_titlebar-border_accent` The border accent color for a title bar in an Inspector view `#303030` `#BABABA` Undefined \n",1641],[" label \n",1641],[" `--unity-colors-label-text` The text color for a label control `#C4C4C4` `#090909` `#1B1B1B` \n",1641],[" `--unity-colors-label-text-disabled` Undefined Undefined `#585858` \n",1641],[" `--unity-colors-label-text-focus` The text color for a label when it has focus `#81B4FF` `#003C88` `#00526A` \n",1641],[" link \n",1641],[" `--unity-colors-link-text` The text color for unvisited links `#4C7EFF` `#4C7EFF` Undefined \n",1641],[" minmax_slider_thumb \n",1641],[" `--unity-colors-minmax_slider_thumb-background` Undefined Undefined `#BCBCBC` \n",1641],[" object_field \n",1641],[" `--unity-colors-object_field-background` The background color for an object field control `#282828` `#EDEDED` Undefined \n",1641],[" `--unity-colors-object_field-border` The border color for an object field control `#202020` `#B0B0B0` Undefined \n",1641],[" `--unity-colors-object_field-border-focus` The border color for an object field control when it has focus `#3A79BB` `#1D5087` Undefined \n",1641],[" `--unity-colors-object_field-border-hover` The border color for an object field control when the mouse pointer hovers over it `#656565` `#6C6C6C` Undefined \n",1641],[" object_field_button \n",1641],[" `--unity-colors-object_field_button-background` The background color for the button in an object field control `#373737` `#DEDEDE` Undefined \n",1641],[" `--unity-colors-object_field_button-background-hover` The background color for the button in an object field control when the mouse pointer hovers over it `#4C4C4C` `#CCCCCC` Undefined \n",1641],[" play_mode \n",1641],[" `--unity-colors-play_mode-background` The color used to tint the UI in Play Mode `#606060` `#ECECEC` Undefined \n",1641],[" popup \n",1641],[" `--unity-colors-popup-background` The background color for a popup window `#313131` `#C1C1C1` Undefined \n",1641],[" preview \n",1641],[" `--unity-colors-preview-background` The background color for a preview control `#313131` `#C1C1C1` Undefined \n",1641],[" `--unity-colors-preview-border` The border color for a preview control `#232323` `#999999` Undefined \n",1641],[" `--unity-colors-preview-text` The text color for a preview control `#BDBDBD` `#090909` Undefined \n",1641],[" preview_overlay \n",1641],[" `--unity-colors-preview_overlay-text` The text color for a preview control overlay `#DEDEDE` `#FFFFFF` Undefined \n",1641],[" progress \n",1641],[" `--unity-colors-progress-background` `#303030` `#606060` Undefined \n",1641],[" progress_bar \n",1641],[" `--unity-colors-progress_bar-background` Undefined Undefined `#BCBCBC` \n",1641],[" `--unity-colors-progress_bar-border` Undefined Undefined `#808080` \n",1641],[" `--unity-colors-progress_bar-text` Undefined Undefined `#1B1B1B` \n",1641],[" progress_bar_progress \n",1641],[" `--unity-colors-progress_bar_progress-background` Undefined Undefined `#E7E7E7` \n",1641],[" scrollbar_button \n",1641],[" `--unity-colors-scrollbar_button-background` The background color for a scrollbar's scroll buttons `rgba(0, 0, 0, 0.05098039)` `rgba(0, 0, 0, 0.05098039)` `#F0F0F0` \n",1641],[" `--unity-colors-scrollbar_button-background-hover` The background color for a scrollbar's scroll buttons when the mouse pointer hovers over them `#494949` `#A7A7A7` `#E7E7E7` \n",1641],[" `--unity-colors-scrollbar_button-border` Undefined Undefined `#959595` \n",1641],[" `--unity-colors-scrollbar_button-border-focus` Undefined Undefined `#006AA6` \n",1641],[" `--unity-colors-scrollbar_button-border-hover` Undefined Undefined `#959595` \n",1641],[" scrollbar_groove \n",1641],[" `--unity-colors-scrollbar_groove-background` The background color for a scrollbar's groove (background) `rgba(0, 0, 0, 0.05098039)` `rgba(0, 0, 0, 0.05098039)` `#BCBCBC` \n",1641],[" `--unity-colors-scrollbar_groove-border` The border color for a scrollbar's groove `rgba(0, 0, 0, 0.1019608)` `rgba(0, 0, 0, 0.1019608)` `#959595` \n",1641],[" scrollbar_thumb \n",1641],[" `--unity-colors-scrollbar_thumb-background` The background color for a scrollbar's thumb/handle `#5F5F5F` `#9A9A9A` `#E7E7E7` \n",1641],[" `--unity-colors-scrollbar_thumb-background-hover` The background color for a scrollbar's thumb/handle when the mouse pointer hovers over it `#686868` `#8E8E8E` `#F0F0F0` \n",1641],[" `--unity-colors-scrollbar_thumb-background-pressed` Undefined Undefined `#F0F0F0` \n",1641],[" `--unity-colors-scrollbar_thumb-border` The border color for a scrollbar's thumb/handle `#323232` `#B9B9B9` `transparent` \n",1641],[" `--unity-colors-scrollbar_thumb-border-focus` Undefined Undefined `#00516A` \n",1641],[" `--unity-colors-scrollbar_thumb-border-hover` The border color for a scrollbar's thumb/handle when the mouse pointer hovers over it `#686868` `#8E8E8E` `transparent` \n",1641],[" `--unity-colors-scrollbar_thumb-border-pressed` Undefined Undefined `transparent` \n",1641],[" slider_groove \n",1641],[" `--unity-colors-slider_groove-background` The background color for a slider's groove (background) `#5E5E5E` `#8F8F8F` `#7E7E7E` \n",1641],[" `--unity-colors-slider_groove-background-disabled` The background color for a slider's groove when it is disabled `#575757` `#A4A4A4` `#7E7E7E` \n",1641],[" `--unity-colors-slider_groove-background-focus` Undefined Undefined `#7E7E7E` \n",1641],[" `--unity-colors-slider_groove-background-hover` Undefined Undefined `#7E7E7E` \n",1641],[" `--unity-colors-slider_groove-border` Undefined Undefined `#646464` \n",1641],[" slider_thumb \n",1641],[" `--unity-colors-slider_thumb-background` The background color for a slider's thumb/handle `#999999` `#616161` `#F0F0F0` \n",1641],[" `--unity-colors-slider_thumb-background-disabled` The background color for a slider's thumb/handle when it is disabled `#666666` `#9B9B9B` `#808080` \n",1641],[" `--unity-colors-slider_thumb-background-focus` Undefined Undefined `#F0F0F0` \n",1641],[" `--unity-colors-slider_thumb-background-hover` The background color for a slider's thumb/handle when the mouse pointer hovers over it `#EAEAEA` `#4F4F4F` `#F0F0F0` \n",1641],[" `--unity-colors-slider_thumb-border` The border color for a slider's thumb `#999999` `#616161` `#646464` \n",1641],[" `--unity-colors-slider_thumb-border-disabled` The border color for a slider's thumb when it is disabled `#666666` `#666666` `#7E7E7E` \n",1641],[" `--unity-colors-slider_thumb-border-focus` Undefined Undefined `#006AA6` \n",1641],[" `--unity-colors-slider_thumb-border-hover` Undefined Undefined `#323232` \n",1641],[" slider_thumb_halo \n",1641],[" `--unity-colors-slider_thumb_halo-background` The background color for a slider's thumb halo `rgba(16, 111, 205, 0.5019608)` `rgba(12, 108, 203, 0.5019608)` `rgba(12, 108, 203, 0.5019608)` \n",1641],[" tab \n",1641],[" `--unity-colors-tab-background` The background color for an Editor window tab `#353535` `#B6B6B6` Undefined \n",1641],[" `--unity-colors-tab-background-checked` The background color for an Editor window tab when it is selected `#3C3C3C` `#CBCBCB` Undefined \n",1641],[" `--unity-colors-tab-background-hover` The background color for an Editor window tab when the mouse pointer hovers over it `#303030` `#B0B0B0` Undefined \n",1641],[" `--unity-colors-tab-text` The text color for an Editor window tab `#BDBDBD` `#090909` Undefined \n",1641],[" toggle \n",1641],[" `--unity-colors-toggle-text-disabled` Undefined Undefined `#585858` \n",1641],[" toggle_checkmark \n",1641],[" `--unity-colors-toggle_checkmark-background` Undefined Undefined `#F0F0F0` \n",1641],[" `--unity-colors-toggle_checkmark-background-disabled` Undefined Undefined `#959595` \n",1641],[" `--unity-colors-toggle_checkmark-border` Undefined Undefined `#646464` \n",1641],[" `--unity-colors-toggle_checkmark-border-disabled` Undefined Undefined `#7E7E7E` \n",1641],[" `--unity-colors-toggle_checkmark-border-focus` Undefined Undefined `#006AA6` \n",1641],[" `--unity-colors-toggle_checkmark-border-hover` Undefined Undefined `#323232` \n",1641],[" `--unity-colors-toggle_checkmark-border-pressed` Undefined Undefined `#323232` \n",1641],[" toolbar \n",1641],[" `--unity-colors-toolbar-background` The background color for a toolbar control `#3C3C3C` `#CBCBCB` Undefined \n",1641],[" `--unity-colors-toolbar-border` The border color for a toolbar control `#232323` `#999999` Undefined \n",1641],[" toolbar_button \n",1641],[" `--unity-colors-toolbar_button-background` The background color for a toolbar button control `#3C3C3C` `#CBCBCB` Undefined \n",1641],[" `--unity-colors-toolbar_button-background-checked` The background color for a toolbar button control when it is checked `#505050` `#EFEFEF` Undefined \n",1641],[" `--unity-colors-toolbar_button-background-focus` The background color for a toolbar button control when it has focus `#464646` `#C1C1C1` Undefined \n",1641],[" `--unity-colors-toolbar_button-background-hover` The background color for a toolbar button control when the mouse pointer hovers over it `#464646` `#C1C1C1` Undefined \n",1641],[" `--unity-colors-toolbar_button-border` The border color for a toolbar button control `#232323` `#999999` Undefined \n",1641],[" `--unity-colors-toolbar_button-text` The text color for a toolbar button control `#C4C4C4` `#090909` Undefined \n",1641],[" `--unity-colors-toolbar_button-text-checked` The text color for a toolbar button control when it is checked `#C4C4C4` `#090909` Undefined \n",1641],[" `--unity-colors-toolbar_button-text-hover` The text color for a toolbar button control `#BDBDBD` `#090909` Undefined \n",1641],[" tooltip \n",1641],[" `--unity-colors-tooltip-background` `#373737` `#DEDEDE` Undefined \n",1641],[" `--unity-colors-tooltip-border` `#191919` `#8A8A8A` Undefined \n",1641],[" visited_link \n",1641],[" `--unity-colors-visited_link-text` The text color for visited links `#FF00FF` `#AA00AA` Undefined \n",1641],[" warning \n",1641],[" `--unity-colors-warning-text` The text color for warning messages `#F4BC02` `#333308` Undefined \n",1641],[" window \n",1641],[" `--unity-colors-window-background` The background color for a window `#383838` `#C8C8C8` Undefined \n",1641],[" `--unity-colors-window-border` The border color for a window `#242424` `#939393` Undefined \n",1641],[" `--unity-colors-window-text` The text color for a window `#BDBDBD` `#090909` `#1B1B1B` \n",1641],["font ",1641],[" `--unity-font-button-padding-bottom` `1px` `1px` Undefined \n",1641],[" `--unity-font-button-padding-top` `1px` `1px` Undefined \n",1641],[" `--unity-font-popup-padding-bottom` `1px` `1px` Undefined \n",1641],[" `--unity-font-popup-padding-top` `0` `0` Undefined \n",1641],[" `--unity-font-standard-padding-bottom` `0` `0` Undefined \n",1641],[" `--unity-font-standard-padding-bottom-with-border` `0` `0` Undefined \n",1641],["icons ",1641],[" `--unity-icons-arrow_left` `Builtin Skins/DarkSkin/Images/ArrowNavigationLeft.png` `Builtin Skins/LightSkin/Images/ArrowNavigationLeft.png` Undefined \n",1641],[" `--unity-icons-arrow_right` `Builtin Skins/DarkSkin/Images/ArrowNavigationRight.png` `Builtin Skins/LightSkin/Images/ArrowNavigationRight.png` Undefined \n",1641],[" `--unity-icons-clear` `UIPackageResources/Images/d_clear.png` `UIPackageResources/Images/clear.png` Undefined \n",1641],[" `--unity-icons-color_picker` `UIPackageResources/Images/d_color_picker.png` `UIPackageResources/Images/color_picker.png` Undefined \n",1641],[" `--unity-icons-console_entry_error` `Icons/d_console.erroricon.png` `Icons/console.erroricon.png` Undefined \n",1641],[" `--unity-icons-console_entry_error_small` `Icons/d_console.erroricon.sml.png` `Icons/console.erroricon.sml.png` Undefined \n",1641],[" `--unity-icons-console_entry_info` `Icons/d_console.infoicon.png` `Icons/console.infoicon.png` Undefined \n",1641],[" `--unity-icons-console_entry_info_small` `Icons/d_console.infoicon.sml.png` `Icons/console.infoicon.sml.png` Undefined \n",1641],[" `--unity-icons-console_entry_warn` `Icons/d_console.warnicon.png` `Icons/console.warnicon.png` Undefined \n",1641],[" `--unity-icons-console_entry_warn_small` `Icons/d_console.warnicon.sml.png` `Icons/console.warnicon.sml.png` Undefined \n",1641],[" `--unity-icons-dropdown` `UIPackageResources/Images/d_dropdown.png` `UIPackageResources/Images/dropdown.png` Undefined \n",1641],[" `--unity-icons-dropdown_toggle` `UIPackageResources/Images/d_dropdown_toggle.png` `UIPackageResources/Images/dropdown_toggle.png` Undefined \n",1641],[" `--unity-icons-foldout` `UIPackageResources/Images/d_IN_foldout.png` `UIPackageResources/Images/IN_foldout.png` Undefined \n",1641],[" `--unity-icons-foldout-checked` `UIPackageResources/Images/d_IN_foldout_on.png` `UIPackageResources/Images/IN_foldout_on.png` Undefined \n",1641],[" `--unity-icons-foldout-checked_focus` `UIPackageResources/Images/d_IN_foldout_focus_on.png` `UIPackageResources/Images/IN_foldout_focus_on.png` Undefined \n",1641],[" `--unity-icons-foldout-checked_pressed` `UIPackageResources/Images/d_IN_foldout_act_on.png` `UIPackageResources/Images/IN_foldout_act_on.png` Undefined \n",1641],[" `--unity-icons-foldout-focus` `UIPackageResources/Images/d_IN_foldout_focus.png` `UIPackageResources/Images/IN_foldout_focus.png` Undefined \n",1641],[" `--unity-icons-foldout-pressed` `UIPackageResources/Images/d_IN_foldout_act.png` `UIPackageResources/Images/IN_foldout_act.png` Undefined \n",1641],[" `--unity-icons-link` `Icons/d_UnLinked.png` `Icons/UnLinked.png` Undefined \n",1641],[" `--unity-icons-link-checked` `Icons/d_Linked.png` `Icons/Linked.png` Undefined \n",1641],[" `--unity-icons-lock` `Builtin Skins/DarkSkin/Images/IN LockButton.png` `Builtin Skins/LightSkin/Images/IN LockButton.png` Undefined \n",1641],[" `--unity-icons-lock-checked` `Builtin Skins/DarkSkin/Images/IN LockButton on.png` `Builtin Skins/LightSkin/Images/IN LockButton on.png` Undefined \n",1641],[" `--unity-icons-lock-checked_pressed` `Builtin Skins/DarkSkin/Images/IN LockButton on act.png` `Builtin Skins/LightSkin/Images/IN LockButton on act.png` Undefined \n",1641],[" `--unity-icons-lock-pressed` `Builtin Skins/DarkSkin/Images/IN LockButton act.png` `Builtin Skins/LightSkin/Images/IN LockButton act.png` Undefined \n",1641],[" `--unity-icons-minus` `UIPackageResources/Images/d_ol_minus.png` `UIPackageResources/Images/ol_minus.png` Undefined \n",1641],[" `--unity-icons-minus-hover` `UIPackageResources/Images/d_ol_minus_act.png` `UIPackageResources/Images/ol_minus_act.png` Undefined \n",1641],[" `--unity-icons-pane_options` `Builtin Skins/DarkSkin/Images/pane options.png` `Builtin Skins/LightSkin/Images/pane options.png` Undefined \n",1641],[" `--unity-icons-picker` `UIPackageResources/Images/d_pick.png` `UIPackageResources/Images/pick.png` Undefined \n",1641],[" `--unity-icons-plus` `UIPackageResources/Images/d_ol_plus.png` `UIPackageResources/Images/ol_plus.png` Undefined \n",1641],[" `--unity-icons-plus-hover` `UIPackageResources/Images/d_ol_plus_act.png` `UIPackageResources/Images/ol_plus_act.png` Undefined \n",1641],[" `--unity-icons-profiler_timeline_digdown_arrow` `Profiler/d_ProfilerTimelineDigDownArrow.png` `Profiler/ProfilerTimelineDigDownArrow.png` Undefined \n",1641],[" `--unity-icons-profiler_timeline_rollup_arrow` `Profiler/d_ProfilerTimelineRollUpArrow.png` `Profiler/ProfilerTimelineRollUpArrow.png` Undefined \n",1641],[" `--unity-icons-pulldown` `UIPackageResources/Images/d_dropdown.png` `UIPackageResources/Images/dropdown.png` Undefined \n",1641],[" `--unity-icons-scroll_down` `UIPackageResources/Images/d_scrolldown.png` `UIPackageResources/Images/scrolldown.png` Undefined \n",1641],[" `--unity-icons-scroll_left` `UIPackageResources/Images/d_scrollleft.png` `UIPackageResources/Images/scrollleft.png` Undefined \n",1641],[" `--unity-icons-scroll_right` `UIPackageResources/Images/d_scrollright.png` `UIPackageResources/Images/scrollright.png` Undefined \n",1641],[" `--unity-icons-scroll_up` `UIPackageResources/Images/d_scrollup.png` `UIPackageResources/Images/scrollup.png` Undefined \n",1641],[" `--unity-icons-search` `UIPackageResources/Images/d_search_icon.png` `UIPackageResources/Images/search_icon.png` Undefined \n",1641],[" `--unity-icons-search_menu` `UIPackageResources/Images/d_search_menu.png` `UIPackageResources/Images/search_menu.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle-checked` `Builtin Skins/DarkSkin/Images/ShurikenToggleNormalOn.png` `Builtin Skins/LightSkin/Images/ShurikenToggleNormalOn.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle-checked_focus` `Builtin Skins/DarkSkin/Images/ShurikenToggleFocusedOn.png` `Builtin Skins/LightSkin/Images/ShurikenToggleFocusedOn.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle-checked_hover` `Builtin Skins/DarkSkin/Images/ShurikenToggleHoverOn.png` `Builtin Skins/LightSkin/Images/ShurikenToggleHoverOn.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle_bg` `Builtin Skins/DarkSkin/Images/ShurikenToggleNormal.png` `Builtin Skins/LightSkin/Images/ShurikenToggleNormal.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle_bg-focus` `Builtin Skins/DarkSkin/Images/ShurikenToggleFocused.png` `Builtin Skins/LightSkin/Images/ShurikenToggleFocused.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle_bg-focus_mixed` `Builtin Skins/DarkSkin/Images/ShurikenToggleFocusedMixed.png` `Builtin Skins/LightSkin/Images/ShurikenToggleFocusedMixed.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle_bg-hover` `Builtin Skins/DarkSkin/Images/ShurikenToggleHover.png` `Builtin Skins/LightSkin/Images/ShurikenToggleHover.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle_bg-hover_mixed` `Builtin Skins/DarkSkin/Images/ShurikenToggleHoverMixed.png` `Builtin Skins/LightSkin/Images/ShurikenToggleHoverMixed.png` Undefined \n",1641],[" `--unity-icons-shuriken_toggle_bg-mixed` `Builtin Skins/DarkSkin/Images/ShurikenToggleNormalMixed.png` `Builtin Skins/LightSkin/Images/ShurikenToggleNormalMixed.png` Undefined \n",1641],[" `--unity-icons-toggle-checked` `UIPackageResources/Images/d_toggle_on.png` `UIPackageResources/Images/toggle_on.png` Undefined \n",1641],[" `--unity-icons-toggle-checked_focus` `UIPackageResources/Images/d_toggle_on_focus.png` `UIPackageResources/Images/toggle_on_focus.png` Undefined \n",1641],[" `--unity-icons-toggle-checked_hover` `UIPackageResources/Images/d_toggle_on_hover.png` `UIPackageResources/Images/toggle_on_hover.png` Undefined \n",1641],[" `--unity-icons-toggle-focus_mixed` `UIPackageResources/Images/d_toggle_on_focus.png` `UIPackageResources/Images/toggle_on_focus.png` Undefined \n",1641],[" `--unity-icons-toggle-hover_mixed` `UIPackageResources/Images/d_toggle_on_hover.png` `UIPackageResources/Images/toggle_on_hover.png` Undefined \n",1641],[" `--unity-icons-toggle-mixed` `UIPackageResources/Images/d_toggle_on.png` `UIPackageResources/Images/toggle_on.png` Undefined \n",1641],[" `--unity-icons-toggle_bg` `UIPackageResources/Images/d_toggle_bg.png` `UIPackageResources/Images/toggle_bg.png` Undefined \n",1641],[" `--unity-icons-toggle_bg-focus` `UIPackageResources/Images/d_toggle_bg_focus.png` `UIPackageResources/Images/toggle_bg_focus.png` Undefined \n",1641],[" `--unity-icons-toggle_bg-focus_mixed` `UIPackageResources/Images/d_toggle_mixed_bg_focus.png` `UIPackageResources/Images/toggle_mixed_bg_focus.png` Undefined \n",1641],[" `--unity-icons-toggle_bg-hover` `UIPackageResources/Images/d_toggle_bg_hover.png` `UIPackageResources/Images/toggle_bg_hover.png` Undefined \n",1641],[" `--unity-icons-toggle_bg-hover_mixed` `UIPackageResources/Images/d_toggle_mixed_bg_hover.png` `UIPackageResources/Images/toggle_mixed_bg_hover.png` Undefined \n",1641],[" `--unity-icons-toggle_bg-mixed` `UIPackageResources/Images/d_toggle_mixed_bg.png` `UIPackageResources/Images/toggle_mixed_bg.png` Undefined \n",1641],[" `--unity-icons-window_button_close` `Icons/d_winbtn_win_close.png` `Icons/winbtn_win_close.png` Undefined \n",1641],[" `--unity-icons-window_button_max` `Icons/d_winbtn_win_max.png` `Icons/winbtn_win_max.png` Undefined \n",1641],[" `--unity-icons-window_button_restore` `Icons/d_winbtn_win_restore.png` `Icons/winbtn_win_restore.png` Undefined \n",1641],["",1641],["Additional resources",1641],["USS color keywords",1642],["The following table lists all the supported color keywords, their RGB hex values, and the sample colors.",1642],["Keyword RGB hex value Sample ",1642],["",1642],["aliceblue #f0f8ff ",1642],["antiquewhite #faebd7 ",1642],["aqua #00ffff ",1642],["aquamarine #7fffd4 ",1642],["azure #f0ffff ",1642],["beige #f5f5dc ",1642],["bisque #ffe4c4 ",1642],["black #000000 ",1642],["blanchedalmond #ffebcd ",1642],["blue #0000ff ",1642],["blueviolet #8a2be2 ",1642],["brown #a52a2a ",1642],["burlywood #deb887 ",1642],["cadetblue #5f9ea0 ",1642],["chartreuse #7fff00 ",1642],["chocolate #d2691e ",1642],["coral #ff7f50 ",1642],["cornflowerblue #6495ed ",1642],["cornsilk #fff8dc ",1642],["crimson #dc143c ",1642],["cyan #00ffff ",1642],["darkblue #00008b ",1642],["darkcyan #008b8b ",1642],["darkgoldenrod #b8860b ",1642],["darkgray #a9a9a9 ",1642],["darkgreen #006400 ",1642],["darkgrey #a9a9a9 ",1642],["darkkhaki #bdb76b ",1642],["darkmagenta #8b008b ",1642],["darkolivegreen #556b2f ",1642],["darkorange #ff8c00 ",1642],["darkorchid #9932cc ",1642],["darkred #8b0000 ",1642],["darksalmon #e9967a ",1642],["darkseagreen #8fbc8f ",1642],["darkslateblue #483d8b ",1642],["darkslategray #2f4f4f ",1642],["darkslategrey #2f4f4f ",1642],["darkturquoise #00ced1 ",1642],["darkviolet #9400d3 ",1642],["deeppink #ff1493 ",1642],["deepskyblue #00bfff ",1642],["dimgray #696969 ",1642],["dimgrey #696969 ",1642],["dodgerblue #1e90ff ",1642],["firebrick #b22222 ",1642],["floralwhite #fffaf0 ",1642],["forestgreen #228b22 ",1642],["gainsboro #dcdcdc ",1642],["ghostwhite #f8f8ff ",1642],["gold #ffd700 ",1642],["gray #808080 ",1642],["green #008000 ",1642],["goldenrod #daa520 ",1642],["greenyellow #adff2f ",1642],["grey #808080 ",1642],["honeydew #f0fff0 ",1642],["hotpink #ff69b4 ",1642],["indianred #cd5c5c ",1642],["indigo #4b0082 ",1642],["ivory #fffff0 ",1642],["khaki #f0e68c ",1642],["lavender #e6e6fa ",1642],["lavenderblush #fff0f5 ",1642],["lawngreen #7cfc00 ",1642],["lemonchiffon #fffacd ",1642],["lightblue #add8e6 ",1642],["lightcoral #f08080 ",1642],["lightcyan #e0ffff ",1642],["lightgoldenrodyellow #fafad2 ",1642],["lightgray #d3d3d3 ",1642],["lightgreen #90ee90 ",1642],["lightgrey #d3d3d3 ",1642],["lightpink #ffb6c1 ",1642],["lightsalmon #ffa07a ",1642],["lightseagreen #20b2aa ",1642],["lightskyblue #87cefa ",1642],["lightslategray #778899 ",1642],["lightslategrey #778899 ",1642],["lightsteelblue #b0c4de ",1642],["lightyellow #ffffe0 ",1642],["lime #00ff00 ",1642],["limegreen #32cd32 ",1642],["linen #faf0e6 ",1642],["magenta #ff00ff ",1642],["maroon #800000 ",1642],["mediumaquamarine #66cdaa ",1642],["mediumblue #0000cd ",1642],["mediumorchid #ba55d3 ",1642],["mediumpurple #9370db ",1642],["mediumseagreen #3cb371 ",1642],["mediumslateblue #7b68ee ",1642],["mediumspringgreen #00fa9a ",1642],["mediumturquoise #48d1cc ",1642],["mediumvioletred #c71585 ",1642],["midnightblue #191970 ",1642],["mintcream #f5fffa ",1642],["mistyrose #ffe4e1 ",1642],["moccasin #ffe4b5 ",1642],["navajowhite #ffdead ",1642],["navy #000080 ",1642],["oldlace #fdf5e6 ",1642],["olive #808000 ",1642],["olivedrab #6b8e23 ",1642],["orange #ffa500 ",1642],["orangered #ff4500 ",1642],["orchid #da70d6 ",1642],["palegoldenrod #eee8aa ",1642],["palegreen #98fb98 ",1642],["paleturquoise #afeeee ",1642],["palevioletred #db7093 ",1642],["papayawhip #ffefd5 ",1642],["peachpuff #ffdab9 ",1642],["peru #cd853f ",1642],["pink #ffc0cb ",1642],["plum #dda0dd ",1642],["powderblue #b0e0e6 ",1642],["purple #800080 ",1642],["rebeccapurple #663399 ",1642],["red #ff0000 ",1642],["rosybrown #bc8f8f ",1642],["royalblue #4169e1 ",1642],["saddlebrown #8b4513 ",1642],["salmon #fa8072 ",1642],["sandybrown #f4a460 ",1642],["seagreen #2e8b57 ",1642],["seashell #fff5ee ",1642],["sienna #a0522d ",1642],["silver #c0c0c0 ",1642],["skyblue #87ceeb ",1642],["slateblue #6a5acd ",1642],["slategray #708090 ",1642],["slategrey #708090 ",1642],["snow #fffafa ",1642],["springgreen #00ff7f ",1642],["steelblue #4682b4 ",1642],["tan #d2b48c ",1642],["teal #008080 ",1642],["thistle #d8bfd8 ",1642],["tomato #ff6347 ",1642],["transparent rgba(0,0,0,0) ",1642],["turquoise #40e0d0 ",1642],["violet #ee82ee ",1642],["wheat #f5deb3 ",1642],["white #ffffff ",1642],["whitesmoke #f5f5f5 ",1642],["yellow #ffff00 ",1642],["yellowgreen #9acd32 ",1642],["Additional resources",1642],["Create USS variables",1643],["You can create a USS variable and use it in other USS properties. When you update a USS variable, all of the USS properties that use that variable update. You can also specify default values for USS variables.",1643],["Create and use USS variables",1643],["To create a USS variable, prefix its name with a double-hyphen (--).",1643],["```lang-css",1643],["--color-1: red;",1643],["To use a USS variable value in another USS rule, use the var() function to call it.",1643],["```lang-css",1643],["var(--color-1);",1643],["When you update a variable, it updates all the USS properties that use it.",1643],["For example, the following USS snippet defines one style rule that declares two color variables, and two style rules that use those variables.",1643],["```lang-css",1643],[":root {",1643],["--color-1: blue;",1643],["--color-2: yellow;",1643],[".paragraph-regular {",1643],["color: var(--color-1);",1643],["background: var(--color-2);",1643],["padding: 2px;",1643],[".paragraph-reverse {",1643],["color: var(--color-2);",1643],["background: var(--color-1);",1643],["padding: 2px;",1643],["To update the color scheme, you can change the two variable values instead of the four color values.",1643],["Variables make it easier to manage styles for complex UI, where multiple rules, sometimes in different style sheets, use the same values.",1643],["Specify default values for USS variables",1643],["The var() function accepts an optional default value. The UI system uses the default value when it cannot resolve the variable. For example, if you remove a variable from a style sheet but forget to remove a reference to it.",1643],["To specify a default value for a variable, add it after the variable value, separated by a comma ,.",1643],["The following USS snippet calls the --color-1 variable. If the UI system can't resolve the variable, it uses the hex value for red (#FF0000).",1643],["```lang-css",1643],["var(--color-1, #FF0000);",1643],["Differences from CSS variables",1643],["Variables work mostly the same way in USS as they do in CSS. For detailed information about CSS variables, see the MDN documentation. However, USS doesn't support some of the functionalites of CSS:",1643],["\nUSS doesn't support the var() function inside of other functions, such as shown below:\n",1643],["```lang-css",1643],["background-color: rgb(var(--red), 0, 0);",1643],["\nUSS doesn't support mathematical operations on variables.\n",1643],["Additional resources",1643],["USS properties reference",1644],["The following table lists the USS properties in UI Toolkit.",1644],["The table indicates which properties are inherited and their animatability. For an inherited property, the element gets the value from its parent element if you don't specify a value for it. The following example uses an inherited property to set the font for all elements.",1644],["```lang-css",1644],[":root {",1644],["-unity-font: resource(\"Font/consola.ttf\");",1644],["Click the property name to see detailed information about that property.",1644],["Note**: The usage of a USS property that's the same as the CSS property links to the Mozilla developer documentation.",1644],["USS properties",1645],["A USS property assigns a style or behavior to a VisualElement. You can specify values for a USS property.",1645],["Topic Description ",1645],[":-------------------- :----------------------- ",1645],["USS property data types USS data types define typical values accepted by USS properties and functions. ",1645],["USS common properties Describes the most common USS properties, their syntax and accepted values, and differences from CSS. ",1645],["Position element with the layout engine Understand the basic USS layout properties. ",1645],["Relative and absolute positioning C# example Use relative and absolute positioning to lay out UI in C#. ",1645],["Set background images Learn how to set background image and 9-slice images with UI Toolkit. ",1645],["USS transform Understand the USS transform properties, their syntax, and accepted values. ",1645],["USS transition Understand the USS transition properties, their syntax, and accepted values. ",1645],["USS properties reference List of all USS properties, whether they're inherited and their animatability. ",1645],["USS color keywords List of all the color keywords. ",1645],["USS data types",1646],["USS data types define typical values, including keywords and units, that USS properties and functions accept.",1646],["Syntax",1646],["USS properties use the same syntax as W3C CSS documents:",1646],["\nKeyword values appear as is. For example: auto, baseline.\n",1646],["\nBasic data types appear between angle brackets ( < and >). For example: <length> and <color>.\n",1646],["\nNon-terminals that share the same name as a property appear between angle brackets and single straight quotes ( <' and '>). For example, <'width'>.\n",1646],["If a property value has more than one option, the following applies:",1646],["\nSide-by-side words mean that all options must occur in the given order.\n",1646],["\nA bar () separates two or more options. One of them must occur.\n",1646],["\nDouble bars ( `) separate two or more options. One or more of them must occur in any order.\n",1646],["\nDouble ampersands (&&`) separate two or more options. All options must occur.\n",1646],["\nSquare brackets ([ ]) denote grouping.\n",1646],["Every type, keyword, or angle-bracketed group might be followed by modifiers. The following table lists the possible modifiers:",1646],["Modifier The preceding type, keyword, or group ",1646],["",1646],["An asterisk (*) Occurs zero or more times ",1646],["A plus sign (+) Occurs one or more times ",1646],["A question mark (?) Is optional ",1646],["A pair of numbers in curly braces ({A,B}) Occurs at least A and at most B times ",1646],["Length",1646],["UI Toolkit supports pixels (px) and percentages (%) as units of measurement for length. Pixel values are absolute, while percentages are relative to the element's parent.",1646],["Examples:",1646],["\nwidth:200px; expresses a width of 200 pixels.\n",1646],["\nwidth:50%; expresses a width of half of the parent element's width.\n",1646],["It's important to specify the unit of measurement. If you don't specify a unit of measurement, UI Toolkit assumes that the property value is expressed in pixels.",1646],["Note:** 0 is a special value that doesn't require a unit of measurement.",1646],["Numeric",1646],["Numeric values are expressed as either floating points or integer literals. For example, flex:1.0.",1646],["Keywords",1646],["Specific keywords are supported for some built-in properties. Keywords give a descriptive name instead of a number. For example: position:absolute.",1646],["All properties support the initial global keyword which resets the default value of a property to an element.",1646],["In the following example, although you set the color of all the labels to red, the initial keyword of color restores the color of label1 to its default value:",1646],["```lang-css",1646],["/* Set the color of all the labels to red. */",1646],["Label {",1646],["color: red;",1646],["/* label1 is the name of a specific label. */",1646],["label1{",1646],["color: initial;",1646],["Color",1646],["UI Toolkit supports the following literal color values and functions:",1646],["\nA Hexadecimal value: #FFFF00 (RGBA one byte per channel), #0F0 (RGB)\n",1646],["\nThe RGB function: rgb(255, 255, 0)\n",1646],["\nThe RGBA function: rgba(255, 255, 0, 1.0)\n",1646],["\nColor keywords\n",1646],["",1646],["Assets",1646],["You can reference project assets such as fonts and textures from your USS files. For example, you might reference a texture to use as the background image for an element.",1646],["To reference an asset, you can use either the url() function or the resource() function:",1646],["\nresource(): Represents an asset in a Resources folder.\n",1646],["\nurl(): Represents an asset specified by a path. You can express it as either a relative path or an absolute path.\n",1646],["Use the url() function in most cases. However, the resource() function supports automatically loading different versions of image assets for different screen densities.",1646],["Reference assets with the URL function",1646],["When you reference an asset with the url() function, the path you specify can be relative or absolute:",1646],["\nRelative paths must be relative to the folder that contains the USS file that references the asset.\n",1646],["\nAbsolute paths are relative to the project.\n",1646],["The path must include the file extension.",1646],["For example, if your project has a USS folder that contains all your style sheets, and a Resources folder that contains all your image assets.",1646],["Assets",1646],["└─ Editor",1646],["└─ Resources",1646],["└─ USS",1646],["To reference an image named thumb.png, you can use one of the following paths:",1646],["Relative path Absolute path ",1646],["------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ",1646],["url(\"../Resources/thumb.png\") url(\"/Assets/Editor/Resources/thumb.png\") url(\"project:/Assets/Editor/Resources/thumb.png\") url(\"project:///Assets/Editor/Resources/thumb.png\") ",1646],["Reference assets with the resource function",1646],["The resource() function can reference assets in Unity's resource folders (Resources and Editor Default Resources). You reference an asset by name.",1646],["\nIf the file is in the Editor Default Resources Resources folder, you must include the file extension.\n",1646],["\nIf the file is in the Resources folder, you must not include the file extension.\n",1646],["For example:",1646],["Path to file Reference syntax ",1646],["----------------------------------------------------- -------------------------------------- ",1646],["Assets/Resources/Images/my-image.png resource(\"Images/my-image\") ",1646],["Assets/Editor Default Resources/Images/my-image.png resource(\"Images/default-image.png\") ",1646],["Reference image assets for High DPI/Retina screens",1646],["To support screens with different screen densities (DPI), do the following:",1646],["\nMake sure that the high DPI versions of your textures have a @2x suffix in their file names. For example the high DPI version of myimage.png should be myimage@2x.png\n",1646],["\nPlace the regular and high DPI versions of the texture assets in the same project folder.\n",1646],["When Unity loads the asset, it automatically chooses the correct version for the current screen DPI.",1646],["For example, if you use resource(\"myimage\") in USS, Unity loads either Resources/myimage.png or Resources/myimage@2x.png.",1646],["Strings",1646],["Use quotes to specify a string value. For example: --my-property: \"foo\".",1646],["Additional resources",1646],["\nUSS color keywords\n",1646],["\nUSS common properties\n",1646],["\nUSS properties reference\n",1646],["\nUSs custom properties.\n",1646],["\nStyle UI with UI Builder\n",1646],["Selector precedence",1647],["When an element matches more than one selector, Unity considers several factors to determine which selector takes precedence.",1647],["How Unity determines precedence depends on whether the conflicting selectors are in the same style sheet or in different style sheets.",1647],["Precedence for selectors in the same style sheet",1647],["When an element matches multiple selectors from the same style sheet, the selector with the highest specificity takes precedence.",1647],["If both selectors have the same specificity, the selector that appears last in the USS file takes precedence.",1647],["Precedence for selectors in different style sheets",1647],["When an element matches multiple selectors in different style sheets, Unity determines precedence according to the following factors in this order:",1647],["The type of style sheet: Selectors from user-defined style sheets takes precedence over selectors from default Unity style sheets.",1647],["Selector specificity: If both selectors are in the same type of style sheet, the selector with the highest specificity takes precedence",1647],["The style sheets' positions in the element hierarchy: If both selectors have the same specificity, the selector whose style sheet is applied lowest in the element hierarchy takes precedence.",1647],["The selectors' positions in their style sheets: If you apply both style sheets at the same level of the hierarchy, the selector closest to the end of its USS file takes precedence.",1647],["",1647],["Selector specificity",1647],["Selector specificity is a measure of relevance. The higher the specificity, the more relevant the selector is to the elements it matches.",1647],["Name** selectors are more specific than Class selectors.",1647],["Class** selectors are more specific than Type selectors.",1647],["Type** selectors are more specific than the Universal (*) selector.",1647],["Universal** selectors have the lowest specificity.",1647],["Style overrides",1647],["You can style an element in UI Toolkit by the following:",1647],["\nIn a USS file, write a selector that can affect the element.\n",1647],["\nIn the UXML document where the element is defined, set inline styles.\n",1647],["\nIn a C# script, get a reference to an element and set its inline style.\n",1647],["\nFor an inherited property, the element gets the value from its parent element.\n",1647],["If you apply multiple styling methods to an element, it will undergo style overrides.",1647],["Applied styles override inherited styles",1647],["Styles that target an element directly take precedence over styles that the element inherits, even if the inherited styles are defined in a selector with higher specificity.",1647],["Inline styles override USS styles",1647],["Inline styles that you apply to elements in a UXML document take precedence over USS styles. They have a higher specificity than USS selectors.",1647],["Note:** USS doesn't support the !important rule used to override style declarations in CSS.",1647],["C# styles override inline and USS styles",1647],["Styles that you set in a C# script override USS styles and inline styles set in a UXML document. They have the highest specificity.",1647],["Additional resources",1647],["Child selectors",1648],["USS child selectors match elements that are the child of another element in the visual tree.",1648],["Syntax",1648],["A child selector consists of multiple simple selectors separated by >.",1648],["```lang-css",1648],["selector1 > selector2 {...}",1648],["You can include the wildcard selector in complex selectors. For example, the following USS rule uses the wildcard selector in a child selector. This USS rule matches buttons that are children of elements that are children of an element with the USS class yellow assigned to it.",1648],["```lang-css",1648],[".yellow > * > Button{..}",1648],["Example",1648],["The following child selector style rule matches only the inner element. Element #OK, which has .yellow class, is a child of element #container2. #container2 is child of element #container1. Therefore, there is no direct descendant of #container1 that matches the .yellow selector.",1648],["```lang-css",1648],["container1 > .yellow {",1648],["background-color: yellow;",1648],["The UI looks like the following when you apply the style:",1648],["Additional resources",1648],["\nBest practices for USS\n",1648],["Class selectors",1649],["USS class selectors match elements that have specific USS classes assigned. USS class selectors are analogous to CSS class selectors.",1649],["Syntax",1649],["A class selector consists of the class name prefixed with a period. Class names are case-sensitive and can't begin with a numeral.",1649],["```lang-css",1649],[".className { ... }",1649],["Only use a period when you write the selector in a USS file. Don't include it when you assign the class to an element in a UXML or C# file. For example, don't use <Button class=\".yellow\" />.",1649],["In general, don't include a period in class names. Unity’s USS parser interprets a period as the beginning of a new class. For example, if you create a class called yellow.button, and create the following USS rule: .yellow.button{...}. The parser interprets the selector as a multiple selector, and tries to find elements that match both a .yellow class and a .button class.",1649],["When an element has more than one class assigned, a selector only has to match one of them to match the element.",1649],["You can also specify multiple classes in a selector, in which case an element must have all of those classes assigned in order to match. See Multiple selectors for details.",1649],["Example",1649],["The following name class selector style rule matches the element container2 and the button element OK, and changes their background to yellow.",1649],["```lang-css",1649],[".yellow {",1649],["background-color: yellow;",1649],["The UI looks like the following when you apply the style:",1649],["Additional resources",1649],["\nBest practices for USS\n",1649],["Descendant selectors",1650],["USS descendant selectors match elements that are the descendant of another element in the visual tree.",1650],["Syntax",1650],["A descendant selector consists of multiple simple selectors separated by a space:",1650],["```lang-css",1650],["selector1 selector2 {...}",1650],["Example",1650],["The following descendant selector style rule matches both the inner element and the first button.",1650],["```lang-css",1650],["container1 .yellow {",1650],["background-color: yellow;",1650],["The UI looks like the following when you apply the style:",1650],["Note**: Heavy use of descendant selectors could negatively affect performance. For more performance guidelines, see Best practices for USS.",1650],["Additional resources",1650],["\nBest practices for USS\n",1650],["Selector lists",1651],["A selector list is a comma-separated list of selectors that share the same style rule.",1651],["Syntax",1651],["A selector list consists of multiple selectors separated by commas:",1651],["```lang-css",1651],["selector1, selector2 {...}",1651],["Example",1651],["The following two USS snippets have the same effect.",1651],["```lang-css",1651],["container2 {",1651],["background-color: pink;",1651],["border-radius: 10px;",1651],["Button {",1651],["background-color: pink;",1651],["border-radius: 10px;",1651],["```lang-css",1651],["container2, Button {",1651],["background-color: pink;",1651],["border-radius: 10px;",1651],["Additional resources",1651],["\nBest practices for USS\n",1651],["Multiple selectors",1652],["A multiple selector is an combination of multiple simple selectors. It selects any elements that match all the simple selectors.",1652],["Syntax",1652],["A multiple selector consists of multiple simple selector without anything to separate them:",1652],["```lang-css",1652],["selector1selector2 {...}",1652],["The USS parser can't parse a multiple selector if it can't distinguish each selector in the combination.",1652],["For example, the following USS rule combines two type selectors: ListView, and Button.",1652],["```lang-css",1652],["ListViewButton{...}",1652],["The USS parser can't separate the two element types, it interprets them as a single class called ListViewButton, which might not be the desired result.",1652],["You can combine USS class selectors and name selectors into multiple selectors. Because they're are with the period (.) and number sign (#) respectively, the parser can clearly identify them. Type selectors have no identifying character, so you can only use one of them in a multiple selector, and it must be the first selector in the combination. For example:",1652],["```lang-css",1652],["ListView.yellow#vertical-list{...}",1652],["Example",1652],["The following name selector style rule matches the first button.",1652],["```lang-css",1652],["Button.yellow {",1652],["background-color: yellow;",1652],["The UI looks like the following when you apply the style:",1652],["Additional resources",1652],["\nBest practices for USS\n",1652],["Name selectors",1653],["USS name selectors match elements based on the name of an element. USS Name selectors are analogous to CSS ID selectors that match elements with a specific id attribute.",1653],["To set the name of an element:",1653],["\nIn C# script, use VisualElement.name.\n",1653],["\nIn UXML, use the name attribute. For example: <VisualElement name=\"my-nameName\">.\n",1653],["To avoid unexpected matches, make element names unique within a panel.",1653],["Syntax",1653],["A name selector consists of an element's assigned name prefixed with a number sign (#).",1653],["```lang-css",1653],["ElementName { ... }",1653],["Note**: Only use the number sign (#) when you write the selector in a USS file. Don't use it when you assign the name to an element in a UXML or C# file. An element name that includes the number sign is invalid. For example <Button name=\"#OK\" /> is invalid.",1653],["Example",1653],["The following name selector style rule matches the second Button element.",1653],["```lang-css",1653],["Cancel {",1653],["border-width: 2px;",1653],["border-color: DarkRed;",1653],["background-color: pink;",1653],["The UI looks like the following when you apply the style:",1653],["Additional resources",1653],["\nBest practices for USS\n",1653],["Pseudo-classes",1654],["A pseudo-class narrows a selector's scope so it only matches elements when they enter a specific state.",1654],["Append a pseudo-class to a simple selector to match specific elements when they're in a specific state. For example, the following USS rule uses the :hover pseudo-class to change the color of Button elements when a user hovers the pointer over them.",1654],["```lang-css",1654],["Button:hover {",1654],["background-color: palegreen;",1654],["Supported pseudo-classes",1654],["The following table lists supported pseudo-classes. You can't extend pseudo-classes or create custom ones.",1654],["Pseudo-class Matches an element when ",1654],["\n\n- \n\n",1654],[":hover The cursor is positioned over the element. ",1654],[":active A user interacts with the element. ",1654],[":inactive A user stops to interact with the element. ",1654],[":focus The element has focus. ",1654],[":selected USS doesn't support this pseudo-state. Use :checked instead. ",1654],[":disabled The element is in a disabled state. ",1654],[":enabled The element is in an enabled state. ",1654],[":checked The element is a Toggle or RadioButton element and it's selected. ",1654],[":root The element is the highest-level element in the visual tree. ",1654],["Chain pseudo-classes",1654],["You can chain pseudo-classes together to apply the same style for multiple concurrent states. For example, the following USS rule chains the :checked and :hover pseudo-classes together to change the color of checked Toggle elements when a user hovers the pointer over them.",1654],["```lang-css",1654],["Toggle:checked:hover {",1654],["background-color: yellow;",1654],["When the toggle is checked, but the pointer isn't hovering over it, the selector no longer matches.",1654],["",1654],["The root pseudo-class",1654],["The :root pseudo-class matches the highest element in a visual tree. It's slightly different from other supported pseudo-classes because you use it by itself to define default styles for the elements the style sheet affects.",1654],["For example, the following USS rule sets a default font. Any element that doesn't get its font from a more specific style rule uses that font.",1654],["```css",1654],[":root {",1654],["-unity-font: url(\"../Resources/fonts/OpenSans-Regular.ttf\");",1654],["A common use for the :root selector is to declare \"global\" variables (custom properties), that other style rules can use instead of specific values.",1654],["Additional resources",1654],["Type selectors",1655],["USS type selectors match elements based on their element types. USS type selectors are analogous to CSS type selectors that match HTML tags. For example, Button {...} in USS matches any Button elements in the same way that p {...} in CSS matches any paragraph (<p>) tag.",1655],["Syntax",1655],["The following is the syntax for a type selector:",1655],["```lang-css",1655],["TypeName { ... }",1655],["When you write type selectors, specify only the concrete object type. Don't include the namespace in the type name.",1655],["For example, this selector is valid:",1655],["```lang-css",1655],["Button { ... }",1655],["This selector is invalid:",1655],["```lang-css",1655],["UnityEngine.UIElements.Button { ... }",1655],["Example",1655],["The following type selector style rule matches the two Button elements:",1655],["```lang-css",1655],["Button {",1655],["border-radius: 8px;",1655],["width: 100px;",1655],["The UI looks like the following when you apply the style:",1655],["Additional resources",1655],["\nBest practices for USS\n",1655],["Universal selectors",1656],["A USS universal selector, also called the wildcard selector, matches any element. USS universal selectors are analogous to CSS universal selectors.",1656],["Syntax",1656],["The following is the syntax for a USS universal selector:",1656],["```lang-css",1656],["{ ... }",1656],["Example",1656],["The following universal class selector style rule matches every element, and changes its background color to yellow. This includes the main area of the window, because the stylesheet is applied to the window's root element.",1656],["```lang-css",1656],["background-color: yellow;",1656],["The UI looks like the following when you apply the style:",1656],["Additional resources",1656],["\nBest practices for USS\n",1656],["USS selectors",1657],["Selectors decide which elements that USS rules affect.",1657],["USS supports a set of simple selectors that are analogous, but not identical, to simple selectors in CSS. A simple selector matches elements by element type, USS class, element name, and wildcard.",1657],["You can combine simple selectors into complex selectors, or append pseudo-classes to them to target elements in specific states. USS supports descendant, child, and multiple complex selectors.",1657],["Topic Description ",1657],[":-------------------- :----------------------- ",1657],["Type selectors Match elements based on their element types. ",1657],["Name selectors Match elements based on the name of an element. ",1657],["Class selectors Match elements that have specific USS classes assigned. ",1657],["Universal selectors Match any element. ",1657],["Descendant selectors Match elements that are descendants of another element in the visual tree. ",1657],["Child selectors Match elements that are children of another element in the visual tree. ",1657],["Multiple selectors Select elements that match all the simple selectors. ",1657],["Selectors list Create a comma-separated list of selectors that share the same style rule. ",1657],["Pseudo-classes Use pseudo-classes with selectors to target elements that are in a specific state. ",1657],["Selector precedence Understand USS precedence when multiple USS rules target the same elements. ",1657],["Additional resources",1657],["\nBest practices for USS\n",1657],["USS common properties",1658],["This page introduces the common USS properties, their syntax and accepted values, and differences from CSS. For a complete list of USS properties, see USS properties reference.",1658],["Box model",1658],["Dimensions",1658],["```lang-css",1658],["width: auto",1658],["height: auto",1658],["min-width: auto",1658],["min-height: auto",1658],["max-width: none",1658],["max-height: none",1658],["The width and height specifies the size of the element. If width is not specified, the width is based on the width of the element's contents. If height is not specified, the height is based on the height of the element's contents.",1658],["Margins",1658],["```lang-css",1658],["margin-left: auto;",1658],["margin-top: auto",1658],["margin-right: auto",1658],["margin-bottom: auto",1658],["/* Shorthand */",1658],["margin: [ auto]{1,4}",1658],["Borders",1658],["```lang-css",1658],["border-left-width: ",1658],["border-top-width: ",1658],["border-right-width: ",1658],["border-bottom-width: ",1658],["/* Shorthand */",1658],["border-width: {1,4}",1658],["Padding",1658],["```lang-css",1658],["padding-left: ",1658],["padding-top: ",1658],["padding-right: ",1658],["padding-bottom: ",1658],["/* Shorthand */",1658],["padding: {1,4}",1658],["Differences from CSS",1658],["The alternative box model that USS uses is different from the standard CSS box model. In the standard CSS box model, width and height define the size of the content box. An element's rendered size is the sum of its padding, border-width, and width / height values.",1658],["Unity's model is equivalent to setting the CSS box-sizing property to border-box. See the MDN documentation for details.",1658],["",1658],["Flex layout",1658],["UI Toolkit includes a layout engine that positions visual elements based on layout and styling properties. The layout engine implements a subset of Flexbox, an HTML/CSS layout system.",1658],["By default, all items are vertically placed in their container.",1658],["```lang-css",1658],["/* Items */",1658],["flex-grow: ",1658],["flex-shrink: ",1658],["flex-basis: auto",1658],["flex: none [ <'flex-grow'> <'flex-shrink'>? <'flex-basis'> ]",1658],["align-self: auto flex-start flex-end center stretch",1658],["/* Containers */",1658],["flex-direction: row row-reverse column column-reverse",1658],["flex-wrap: nowrap wrap wrap-reverse",1658],["align-content: flex-start flex-end center stretch",1658],["/* The default value is stretch.",1658],["auto sets align-items to flex-end. */",1658],["align-items: auto flex-start flex-end center stretch",1658],["justify-content: flex-start flex-end center space-between space-around",1658],["Positioning",1658],["```lang-css",1658],["/* The default value is relative which positions the element based on its parent.",1658],["If sets to absolute, the element leaves its parent layout and values are specified based on the parent bounds.*/",1658],["position: absolute relative",1658],["/* The distance from the parent edge or the original position of the element. */",1658],["left: auto",1658],["top: auto",1658],["right: auto",1658],["bottom: auto",1658],["",1658],["Background",1658],["```lang-css",1658],["background-color: ",1658],["background-image: none",1658],["-unity-background-scale-mode: stretch-to-fill scale-and-crop scale-to-fit",1658],["-unity-background-image-tint-color: ",1658],["",1658],["Slicing",1658],["When assigning a background image, you draw it with respect to a simplified 9-slice specification:",1658],["```lang-css",1658],["-unity-slice-left: ",1658],["-unity-slice-top: ",1658],["-unity-slice-right: ",1658],["-unity-slice-bottom: ",1658],["-unity-slice-scale: ",1658],["Border color",1658],["```lang-css",1658],["border-color: ",1658],["",1658],["Border radius",1658],["```lang-css",1658],["border-top-left-radius: ",1658],["border-top-right-radius: ",1658],["border-bottom-left-radius: ",1658],["border-bottom-right-radius: ",1658],["/* Shorthand */",1658],["border-radius: {1,4}",1658],["Differences from CSS",1658],["Border radius properties work almost the same in USS and CSS. For detailed information about border-radius, see the MDN documentation.",1658],["However, there are two main differences:",1658],["Unity doesn't support the second-radius shorthand (border-radius: (first radius values) / (second radius values);) used to create elliptical corners.",1658],["Unity reduces border radius values to half of the element's size in pixels. For example, for a 100px x 100px element, any border-radius value greater than 50px is reduced to 50px. If you use percentage (%) values for border radius properties, Unity first resolves the percentage to pixels and then reduces the border-radius value to half of the resolved pixel value. If you have different radius values for two or more corners, Unity reduces any values greater than half of the element's size to half of the element's size.",1658],["",1658],["Appearance",1658],["```lang-css",1658],["overflow: hidden visible",1658],["-unity-overflow-clip-box: padding-box content-box",1658],["-unity-paragraph-spacing: ",1658],["opacity: ",1658],["visibility: visible hidden",1658],["display: flex none",1658],["The -unity-overflow-clip-box defines the clipping rectangle for the element content. The default is padding-box, the rectangle outside the padding area (the green rectangle in the box model image above); content-box represents the value inside the padding area (the blue rectangle in the box model image above).",1658],["",1658],["The display default value is flex. Set display to none to remove the element from the UI. Set the visibility to hidden to hide the element, but the element still occupies space in the layout.",1658],["Differences from CSS",1658],["The USS display property supports only a small subset of the CSS display property's available keyword values. The USS version supports keywords that work with the Yoga layout engine.",1658],["\nFor more information about Yoga, see Flexible Layouts with Yoga.\n",1658],["\nFor more information about the CSS display property, see the MDN documentation.\n",1658],["",1658],["Text properties",1658],["Text properties set the color, font, font size, and Unity specific properties for font resource, font style, alignment, word wrap, and clipping.",1658],["```lang-css",1658],["color: ",1658],["-unity-font: ",1658],["-unity-font-definition: ",1658],["font-size: ",1658],["-unity-font-style: normal italic bold bold-and-italic",1658],["-unity-text-align: upper-left middle-left lower-left upper-center middle-center lower-center upper-right middle-right lower-right",1658],["-unity-text-overflow-position: start middle end",1658],["white-space: normal nowrap",1658],["-unity-text-outline-width: ",1658],["-unity-text-outline-color: ",1658],["/* Shorthand */",1658],["-unity-text-outline: ",1658],["Note**: When setting up font in UI Builder, the Font control in the Inspector sets -unity-font, and the Font Asset control sets -unity-font-definition. Because -unity-font-definition takes precedence over -unity-font, if you want to use a font from the Font list, you must select None from Font Asset. Otherwise, the font you selected won't take effect.",1658],["",1658],["Cursor",1658],["The cursor property specifies the mouse cursor to be displayed when the mouse pointer is over an element.",1658],["```lang-css",1658],["cursor: [ [ ] [ ]? , ] [ arrow text resize-vertical resize-horizontal link slide-arrow resize-up-right resize-up-left move-arrow rotate-arrow scale-arrow arrow-plus arrow-minus pan orbit zoom fps split-resize-up-down split-resize-left-right ]",1658],["Note**: Cursor keywords are only available in the Editor UI. Cursor keywords do not work in runtime UI. In runtime UI, you must use a texture for custom cursors.",1658],["Differences from CSS",1658],["In CSS, you can specify multiple optional custom cursors and a mandatory keyword in a single cursor style declaration. When you specify multiple cursors, they form a fallback chain. If the browser can't load the first custom cursor, it tries each of the others in sequence until one of them loads or there are no more custom cursors to try. If the browser can't load any custom cursors, it uses the keyword.",1658],["In USS, custom cursors and keywords are mutually exclusive. A cursor style declaration can only have one custom cursor or one keyword.",1658],["For detailed information about the CSS cursor property, see the MDN documentation.",1658],["",1658],["Opacity",1658],["```lang-css",1658],["opacity: ",1658],["Differences from CSS",1658],["USS opacity is similar to CSS opacity. The opacity of parent elements affects the perceived opacity of child elements. The perceivability is different between USS opacity and CSS opacity.",1658],["In the following USS example, the blue square is a child of the red square. The red square has an opacity of 0.5.",1658],["```lang-css",1658],[".red {",1658],["background-color: red;",1658],["opacity: 0.5;",1658],[".blue {",1658],["background-color: blue;",1658],["left: 20px;",1658],["top: 20px;",1658],["Although the blue square doesn't have an opacity value, it has a perceived opacity of 0.5 from the red square. You can see the red square through the blue square.",1658],["In CSS, if you apply the same styles, both the red and blue squares are 50% transparent. However, you can't see the red square through the blue square, unless you also set the opacity of blue to be less than 1.",1658],["Additional resources",1658],["Introduction to USS built-in variables",1659],["USS built-in variables specify default values for Editor and runtime UI. You can use these variables in your own USS to match your custom interfaces with Unity style.",1659],["The name of each built-in variable indicates how and where the variable is used. A variable name consists of one or more parts, separated by hyphens. Each part consists of one or more words separated by underscores.",1659],["--unity-{group}-{role_and_control}-{sub_element}-{pseudo_state_sequence}",1659],["Each part of the name shows the types of USS rules that use the variable.",1659],["\nGroup: The kind of data the variable represents.\n",1659],["\nRole/Control: A conceptual grouping for the elements the variable affects.\n",1659],["\nSub-Element: An element or control the variable affects.\n",1659],["\nPseudo States: Lists the states Unity uses the variable for.\n",1659],["For example, the following variable name:",1659],["--unity-colors-button-text-hover",1659],["Provides the following information about how Unity uses the variable:",1659],["Value Meaning ",1659],["",1659],["Group colors Represents color data. ",1659],["Role/Control button Affects buttons. ",1659],["Sub-Element text Affects text. Its group is colors, so it affects text color. ",1659],["Pseudo-States hover Applies to elements when the mouse pointer hovers over them. ",1659],["This USS built-in variable changes the color of button text when a user hovers over the button.",1659],["",1659],["Group",1659],["The group specifies what kind of data the variable represents. Each group has several possible sub-elements.",1659],["The variable names have the following groups:",1659],["Group Used for ",1659],["\n\n- \n\n",1659],["colors Color properties, such as background-color and border-color ",1659],["metrics Properties that control dimensions and shapes. For example, border-radius, border-width, margin, and padding ",1659],["icons Standard Unity icon images ",1659],["",1659],["Role and Control",1659],["Roles and controls are two ways of grouping elements conceptually.",1659],["\nRole refers to a group of elements that have the same purpose, regardless of what type each element is. For example, the error role includes all elements that display error messages to users.\n",1659],["\nControl refers to a group of elements of the same type, regardless of what they do. For example, buttons includes all buttons in the Editor.\n",1659],["Each variable has either a role or a control.",1659],["The variable names have the following roles and controls:",1659],["Roles**",1659],["Role Description ",1659],["\n\n- \n\n",1659],["default Default style settings such as text color, background, and margin. ",1659],["alternated_rows Elements that display tabular data with alternating row colors. For example, list items in a list view. ",1659],["error Elements that communicate error states to users. ",1659],["highlight Highlighted parts of the UI. For example, text selections, or selected items in tree views. ",1659],["link Parts of the UI (typically text) that are clickable links. This is the un-clicked state. ",1659],["play_mode Elements displayed when the Editor is in Play mode. ",1659],["visited_link Parts of the UI, typically text, that are clickable links that a user has already clicked. ",1659],["warning Elements that communicate a warning message to users. ",1659],["Controls**",1659],["Control Description ",1659],["\n\n- \n\n",1659],["app_toolbar The main Unity toolbar ",1659],["app_toolbar_button Buttons in the main Unity toolbar ",1659],["box Boxes used to group elements in the Editor UI ",1659],["button Buttons in the UI, except for toolbars ",1659],["dropdown Dropdown lists or menus",1659],["helpbox Boxes used to display help information ",1659],["input_field Fields used to input text or numeric values ",1659],["label Text labels in the Editor UI ",1659],["object_field Fields used for object values. For example, property values for a GameObject or Asset. ",1659],["popup Popup menu and other popup controls ",1659],["preview Views used to display previews. For example, of Assets such as meshes and textures. ",1659],["scrollbar_groove The background element of a scrollbar in which users drag the scrollbar thumb ",1659],["scrollbar_thumb The draggable handle element in a scrollbar ",1659],["slider_groove The background element of a slider in which users drag the slider thumb ",1659],["slider_thumb The draggable handle element in a slider ",1659],["slider_thumb_halo An overlay displayed around the slider thumb when the user drags it ",1659],["tab Tab items in tab controls ",1659],["toolbar Any Editor toolbar except for the main Unity toolbar (app_toolbar) ",1659],["toolbar_button Buttons in an Editor toolbar ",1659],["window Editor windows ",1659],["",1659],["Sub-Element",1659],["The sub-element is the part of an element that the variable affects. Together with a variable's group, the sub-element shows what kind of data the variable represents.",1659],["For example, when you see a variable name with the colors group and the text sub-element, it means Unity uses the variable in styles that affect text color.",1659],["The variable names have the following sub-elements:",1659],["Group Sub-element Description ",1659],["",1659],["colors ",1659],["background An element's background color ",1659],["border An element's outer border color ",1659],["border_accent An element's inner border color. For example, Inspector windows have a two-tone border ",1659],["text Text color for elements that display text ",1659],["metrics ",1659],["margin_{left, top, right, bottom} An element's margin values ",1659],["padding_{left, top, right, bottom} An element's padding values ",1659],["border_{left, top, right, bottom}_width An element's border width values ",1659],["border_{left_top, left_bottom, right_top, right_bottom}_radius An element's border radius values values ",1659],["width, height An element's width and height values ",1659],["",1659],["Pseudo-States",1659],["The pseudo-state sequence is a list of UI states that Unity uses a variable for.",1659],["For example, when you see a variable name with the hover pseudo state, it means Unity uses the variable in styles that affect elements when a user hovers the pointer over them.",1659],["For example: --unity-colors-toolbar_button-text-hover.",1659],["A variable name can have more than one pseudo-state. Multiple pseudo states appear in alphabetical order, separated by underscores _.",1659],["For example: --unity-colors-toolbar_button-text-focus_selected.",1659],["Unity variable names can have any combination of the following pseudo-states:",1659],["Pseudo-state Description ",1659],["\n\n- \n\n",1659],["(none) Normal state ",1659],["checked A checkbox-type control is checked ",1659],["disabled A control is disabled ",1659],["focus A control has focus ",1659],["hover A user hovers over a control ",1659],["inactive A control doesn't have focus ",1659],["pressed A control is pressed ",1659],["selected A control is selected ",1659],["Additional resources",1659],["USS custom properties (variables)",1660],["USS variables, also called custom properties, define values that you can reuse in other USS rules. You can create variables for any type of USS property.",1660],["Topic Description ",1660],[":-------------------- :----------------------- ",1660],["Create USS variables Learn how to create, use, and specify default values for USS variables. ",1660],["Introduction to USS built-in variables Understand built-in USS variables and how to specify default values for Editor and runtime UI. ",1660],["USS built-in variable reference Reference of all the USS built-in variables and their default values. ",1660],["Best practices for USS",1661],["Follow these best practices when you write USS to style visual elements.",1661],["Avoid inline styles",1661],["Use USS files instead of inline styles when you can for more efficient memory usage.",1661],["Inline styles are per element and can cause memory overhead. When you use inline styles in a C# script or a UXML file on many elements, the memory usage becomes high quickly.",1661],["Selector architecture consideration",1661],["All USS selectors are applied at runtime so the architecture affects initialization performance. USS selectors are applied when an element first appears or when its classes change:",1661],["\nThe :hover selector is the main culprit for selectors to cause interactivity issues and a re-styling.\n",1661],["\nThe performance impact appears under the Update Styling in the Profiler.\n",1661],["Usually, it's not a problem if you have a lot of selectors because each USS file is turned into a lookup table. However, the performance decreases linearly as you add classes to an element. Each class in the list is used to query the lookup table. The complexity is N1 x N2, where:",1661],["\nN1 is the number of class on the element\n",1661],["\nN2 is the current number of applicable USS files\n",1661],["The number of elements in the hierarchy is the main fact that affects performance. Update Styling might be negligible for simple UIs but is significant for large UIs that have several thousands of elements. If an element matches a lot of selectors, it causes overhead to merge the styles coming from each rule.",1661],["Complex selectors hierarchy guidelines",1661],["In general, complex selectors have more impact on performance than simple selectors. Complex selectors depend on the ancestors of an element to match it. When possible, consider the following:",1661],["\nIf you want to have partial match, use the child selector (selector1 > selector2 > selector3) instead of the descendant selector (selector1 selector2 selector3).\n",1661],["\nAvoid using universal selector at the end of complex selectors (selector1 > selector2 > *) or the combination of descendant selector with the universal selector (selector1 * selector2). The universal selector tests every potential element against the selector which can impact performance.\n",1661],["\nAvoid using :hover pseudo-class in selectors on elements with many descendants, such as .yellow:hover > * > Button. Mouse movements invalidate the entire hierarchy of elements targeted by an :hover selector.\n",1661],["Use BEM to improve performance",1661],["You can use the Block Element Modifier(BEM) convention to reduce hierarchical selectors. With BEM, each element receives a class that combines its specific existence inside another element.",1661],["About BEM",1661],["BEM stands for Block Element Modifier. BEM is a simple system that helps you write structured, non-ambiguous, easy to maintain selectors. With BEM, you assign classes to elements and then use these classes as the selectors in style sheets.",1661],["BEM classes have up to three components:",1661],["\nBlock name: a block is a meaningful, standalone entity or control. For example, menu, button, list-view\n",1661],["\nElement name: a part of a block that has no standalone meaning and is semantically tied to its block. Element names are appended to the block name using two underscores. For example, menu__item, button__icon, or list-view__item\n",1661],["\nModifier: a flag that changes the appearance or behavior of a block or element. Append a modifier to a block or element name with two dashes. For example, menu--disabled, menu__item--disabled, button--small, or list-view__item--selected.\n",1661],["Each name part may consist of Latin letters, digits, and dashes. Each name part is joined together with either a double underscore __ or a double dash --.",1661],["The following example shows UXML code for a menu:",1661],["```lang-xml",1661],["",1661],["",1661],["",1661],["",1661],["",1661],["Each element is equipped with classes that describe its role and appearance, you can write most of your selectors with only one class name:",1661],["```lang-css",1661],[".menu {",1661],[".menu__item {",1661],[".menu__item--disabled {",1661],["You can style elements with a single class name. Sometimes, you might need to use complex selectors. For example, you can use a complex selector when the style of an element depends on the modifier of its block:",1661],["```lang-css",1661],[".button {",1661],[".button__icon {",1661],[".button--small {",1661],[".button--small .button__icon {",1661],["Note**:",1661],["\nAvoid specifying long selectors. A long selector could indicate inconsistencies in the graphic design of your UI.\n",1661],["\nAvoid using type names (Button, Label) or element names (#my-button) in your BEM selectors.\n",1661],["Make visual elements BEM-friendly",1661],["UI Toolkit adheres to BEM. Each visual element has the necessary class names attached. For example, all TextElement have the unity-text-element class. Each instance of Button, which derives from TextElement, has its class list populated with the unity-button and unity-text-element classes.",1661],["If you derive a new element from VisualElement or one of its descendants, following these guidelines to ensure that your element is easy to style using the BEM methodology:",1661],["\nUse AddToClassList() in the constructor to add the relevant USS classes to your element instances.\n",1661],["\nIf your new element instantiates child elements in its constructor, assign the relevant classes to the children. For example, my-block__first-child, my-block__other-child.\n",1661],["\nIf your element supports multiple states or variants, such as small and large, add and remove relevant classes when the element state changes or when the element variant is selected.\n",1661],["\nIf you use the element in other projects, consider prefixing your classes to avoid conflicts with existing user class names.\n",1661],["Additional resources",1661],["Style UI",1662],["You can style your UI with a Unity Style Sheet (USS). USS files are text files inspired by Cascading Style Sheets (CSS) from HTML. USS syntax is the same as CSS syntax, but USS includes overrides and customizations to work better with Unity.",1662],["Topic Description ",1662],[":-------------------- :----------------------- ",1662],["Introduction to USS Understand the fundamental building blocks of a USS. ",1662],["USS selectors Learn how to use USS selectors by examples. ",1662],["USS properties Learn everything about USS properties. ",1662],["USS custom properties (variables) Learn everything about USS custom properties. ",1662],["Apply styles with C# Learn how to apply style sheet to visual elements in a C# script. ",1662],["Best practices for USS Understand what you need to know when you write USS. ",1662],["Theme Style Sheet (TSS) Learn how to use TSS files for management purposes. ",1662],["Additional resources",1662],["\nStructure UI\n",1662],["\nStyle UI with UI Builder\n",1662],["UXML element BindableElement",1663],["BindableElement is the base class for all elements that you can bind to a data source. It provides the following properties:",1663],["\nbindingPath: The path to the data source property to bind to.\n",1663],["\nbinding: The binding object that represents the binding between the element and the data source.\n",1663],["Create a BindableElement",1663],["You can create a BindableElement with UXML or C#. The following C# example creates a BindableElement:",1663],["```lang-csharp",1663],["var bindableElement = new BindableElement();",1663],["C# base class and namespace",1663],["Additional resources",1663],["\nUXML element VisualElement\n",1663],["UXML element BoundsField",1664],["The BoundsField lets users enter a Bounds value in a UI.",1664],["Create a BoundsField",1664],["You can create a BoundsField with UI Builder, UXML, or C#. The following C# example creates a BoundsField with a default Bounds value:",1664],["```lang-csharp",1664],["var boundsField = new BoundsField();",1664],["boundsField.value = new Bounds(Vector3.zero, Vector3.one);",1664],["Example",1664],["The following UXML example creates a BoundsField:",1664],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/BoundsFieldSnippet.uxml)]",1664],["The following C# example illustrates some of the customizable functionalities of the BoundsField:",1664],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/BoundsFieldSnippet.cs#sample)]",1664],["C# class and namespace",1664],["Additional resources",1664],["\nUXML element BoundsIntField\n",1664],["UXML element BoundsIntField",1665],["The BoundsIntField lets users enter a BoundsInt value in a UI.",1665],["Create a BoundsIntField",1665],["You can create a BoundsIntField with UI Builder, UXML, or C#. The following C# example creates a BoundsIntField with a BoundsInt value:",1665],["```lang-csharp",1665],["var boundsIntField = new BoundsIntField();",1665],["boundsIntField.value = new BoundsInt(Vector3Int.zero, Vector3Int.one);",1665],["Example",1665],["The following UXML example creates a BoundsIntField:",1665],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/BoundsIntFieldSnippet.uxml)]",1665],["The following C# example illustrates some of the customizable functionalities of the BoundsIntField:",1665],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/BoundsIntFieldSnippet.cs#sample)]",1665],["C# class and namespace",1665],["Additional resources",1665],["\nUXML element BoundsField\n",1665],["UXML element Box",1666],["The Box element is a VisualElment with the following styling properties:",1666],["```lang-css",1666],[".unity-box {",1666],["background-color: env(--theme-box-background-color);",1666],["border-color: env(--theme-box-border-color);",1666],["border-width: 1px;",1666],["Create a Box",1666],["You can create a Box with UXML or C#. The following C# example creates a Box with a label and a text field:",1666],["```lang-csharp",1666],["var box = new Box();",1666],["box.Add(new Label(\"Name:\"));",1666],["box.Add(new TextField());",1666],["C# base class and namespace",1666],["Additional resources",1666],["\nUXML element VisualElement\n",1666],["UXML element Button",1667],["Use the Button element to create clickable buttons in a UI. For example, when a user clicks or taps on a Button element, it triggers an action or event, such as opening a new window, submitting a form, or playing a sound effect.",1667],["Create a Button",1667],["You can create a Button with UI Builder, UXML, or C#. The following C# example creates a Button with a label:",1667],["```lang-csharp",1667],["var button = new Button(() => { Debug.Log(\"Button clicked\"); }) { text = \"Click me\" };",1667],["Use sub-elements of a Button",1667],["You can use the text and the background-image properties of the Button to provide additional information to the user. You can also add sub-elements in a button's hierarchy, such as a Label or Image, to provide additional information to the user if you want to have more fine-grained control over the appearance and behavior of those elements.",1667],["In general, use sub-elements in the following situations:",1667],["\nCustomization: Using sub-elements allows you to customize the appearance and behavior of each individual element separately. For example, you may want to use a custom font or color for the label text or add a specific animation to the image. When you add an Image element to your Button, you can add the element from your scene directly. In addition, an Image element also supports scale mode and repeat mode.\n",1667],["\nDynamic content: If the content of the label or image is dynamic, using sub-elements allows you to update the content of each element separately without affecting the other properties of the button.\n",1667],["\nInteraction: If you want to add interactivity to a specific element within the button, such as allowing the user to click only the label (disregarding clicks on other elements of the button) to trigger an action, using sub-elements makes this possible.\n",1667],["Use properties for the following purposes:",1667],["\nSimple designs: If the design of the button is simple and doesn't require customization or dynamic content, using properties is recommended.\n",1667],["\nPerformance: If you have many buttons in your UI, using sub-elements for each one may negatively impact performance. In this case, it's more efficient to use properties to set the appearance of the button.\n",1667],["\nConsistency: If you want to maintain consistency across your UI, using properties can ensure that all buttons have a consistent appearance and behavior.\n",1667],["Examples",1667],["The following UXML example creates a Button:",1667],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/ButtonSnippet.uxml)]",1667],["The following C# example illustrates some of the customizable functionalities of the Button:",1667],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/ButtonSnippet.cs#sample)]",1667],["C# base class and namespace",1667],["Additional resources",1667],["\nUXML element Image\n",1667],["UXML element ColorField",1668],["A ColorField is an Editor-only control that lets users select a color from a color picker. It supports alpha channel and HDR colors. An alpha channel is an extra channel to represent the transparency level of a color. HDR colors are high-dynamic range colors that can represent a wider range of colors than standard colors.",1668],["Create a ColorField",1668],["You can create a ColorField with UI Builder, UXML, or C#. The following C# example creates a ColorField with a default color and enables the alpha channel, eye dropper, and treats the color as an HDR value.",1668],["```lang-csharp",1668],["using UnityEditor.UIElements;",1668],["...",1668],["var colorField = new ColorField();",1668],["colorField.value = new Color(0.5f, 0.5f, 0.5f, 1.0f);",1668],["colorField.showAlpha = true;",1668],["colorField.showEyeDropper = true;",1668],["colorField.hdr = true;",1668],["Example",1668],["The following UXML example creates a ColorField:",1668],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/ColorFieldSnippet.uxml)]",1668],["The following C# example illustrates some of the customizable functionalities of the ColorField:",1668],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/ColorFieldSnippet.cs#sample)]",1668],["C# base class and namespace",1668],["Additional resources",1668],["\nHDRColorPicker\n",1668],["\nHigh dynamic range\n",1668],["UXML element CurveField",1669],["A CurveField is an Editor-only control that lets users select a curve from a curve editor. You can use a CurveField to display a curve to visualize its properties or create and adjust curves for animatable properties in an Animation Clip, providing precise control over how these properties change over time.",1669],["Create a CurveField",1669],["You can create a CurveField with UI Builder, UXML, or C#. The following C# example creates a CurveField with a default curve:",1669],["```lang-csharp",1669],["using UnityEditor.UIElements;",1669],["...",1669],["// Create a CurveField",1669],["var curveField = new CurveField();",1669],["// Set the curve",1669],["curveField.value = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1), new Keyframe(2, 2), new Keyframe(3, 3));",1669],["// Set the width and height of the curve editor",1669],["curveField.style.width = 300;",1669],["curveField.style.height = 400;",1669],["Example",1669],["The following UXML example creates a CurveField:",1669],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/CurveFieldSnippet.uxml)]",1669],["The following C# example illustrates some of the customizable functionalities of the CurveField:",1669],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/CurveFieldSnippet.cs#sample)]",1669],["C# base class and namespace",1669],["Additional resources",1669],["\nAnimationClip\n",1669],["UXML element DoubleField",1670],["A DoubleField lets users input a numerical double value into an application. It accepts and displays text input. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1670],["Note**: To align a DoubleField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1670],["Create a DoubleField",1670],["You can create a DoubleField with UI Builder, UXML, and C#.",1670],["To create a DoubleField with C#, create a new instance of a DoubleField object. For example:",1670],["```lang-csharp",1670],["DoubleField myElement = new DoubleField(\"Label text\");",1670],["C# base class and namespace",1670],["Additional resources",1670],["\nWork with text\n",1670],["\nUXML element Label\n",1670],["\nUXML element TextField\n",1670],["\nUXML element IntegerField\n",1670],["\nUXML element LongField\n",1670],["\nUXML element FloatField\n",1670],["\nUXML element PropertyField\n",1670],["UXML element DropdownField",1671],["A DropdownField lets users choose a value from a list. When clicking on the control, it opens a drawer that presents multiple options, allowing users to select one. If you want to always display all the choices, use RadioButtonGroup.",1671],["Create a DropdownField",1671],["You can create a DropdownField with UI Builder, UXML, or C#.",1671],["UI Builder**",1671],["To add options for a DropdownField in UI Builder, in the Inspector panel of the DropdownField, enter the options separated by commas in Choices.",1671],["To set the default value, in the Inspector of the DropdownField, enter the numbering sequence of the option in Index, starting at 0.",1671],["C#**",1671],["The following C# example create a DropdownField with three options. The DropdownField selects the first option by default:",1671],["```lang-csharp",1671],["var dropdown = new DropdownField(\"Options\", new List { \"Option 1\", \"Option 2\", \"Option 3\" }, 0);",1671],["//Add another option",1671],["dropdown.choices.Add(\"Option 4\");",1671],["// To return int value instead of string",1671],["dropdown.index = 1; // Option 2",1671],["dropdown.value = \"Option3\";",1671],["Assert.IsTrue(myDropdown.index == 2);",1671],["// Register to the value changed callback",1671],["dropdown.RegisterValueChangedCallback(evt => Debug.Log(evt.newValue));",1671],["Change styles for a DropdownField",1671],["You can override the default Panel Settings fields in a USS file to change the styles of a DropdownField:",1671],["In the Hierarchy window, select your UI Document (.uxml).",1671],["Set Panel Settings as your Panel Settings asset. If you don't have an existing Panel Settings asset, follow the instructions in the dialog to create one.",1671],["In your Panel Settings asset, assign a Theme Style Sheet.",1671],["In the Project window, select your TSS file.",1671],["Go to Style Sheets and select the Add (+) button.",1671],["Set your Style Sheet as your USS file.",1671],["Examples",1671],["The following UXML example creates a DropdownField:",1671],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/DropdownFieldSnippet.uxml)]",1671],["The following C# example illustrates some of the customizable functionalities of the DropdownField:",1671],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/DropdownFieldSnippet.cs#sample)]",1671],["C# base class and namespace",1671],["Additional resources",1671],["\nRadioButtonGroup\n",1671],["UXML element EnumField",1672],["An EnumField lets users select a value from an enumeration.",1672],["Note**: To align an EnumField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1672],["Create an EnumField",1672],["You can create an EnumField with UI Builder, UXML, and C#.",1672],["Assume you have the following enumeration:",1672],["```lang-csharp",1672],["enum ColorOptions",1672],["Red,",1672],["Green,",1672],["Blue,",1672],["Yellow",1672],["The following C# example creates an EnumField with the ColorOptions enumeration and sets the default value to Red:",1672],["```lang-csharp",1672],["EnumField myElement = new EnumField(\"Label text\", ColorOptions.Red);",1672],["Example",1672],["The following UXML example creates an EnumField:",1672],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/EnumFieldSnippet.uxml)]",1672],["The following C# example illustrates some of the customizable functionalities of the EnumField:",1672],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/EnumFieldSnippet.cs#sample)]",1672],["C# base class and namespace",1672],["Additional resources",1672],["\nUXML element EnumFlagsField\n",1672],["UXML element EnumFlagsField",1673],["An EnumFlagsField lets users select multiple values from an enumeration that are marked with the Flags attribute.",1673],["Note**: To align an EnumFlagsField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1673],["Create an EnumFlagsField",1673],["You can create an EnumField with UXML and C#.",1673],["Assume you have the following enumeration:",1673],["```lang-csharp",1673],["[Flags]",1673],["enum MyEnum",1673],["None = 0,",1673],["First = 1,",1673],["Second = 2,",1673],["Third = 4",1673],["The following C# example creates an EnumFlagsField with the MyEnum enumeration and selects the first and second values:",1673],["```lang-csharp",1673],["var myEnumFlagsField = new EnumFlagsField(\"Select Options\", MyEnum.First MyEnum.Second);",1673],["Example",1673],["The following UXML example creates an EnumFlagsField element:",1673],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/EnumFlagsFieldSnippet.uxml)]",1673],["The following C# example illustrates some of the customizable functionalities of the EnumFlagsField element:",1673],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/EnumFlagsFieldSnippet.cs#sample)]",1673],["C# base class and namespace",1673],["Additional resources",1673],["\nUXML element EnumField\n",1673],["UXML element FloatField",1674],["A FloatField lets users input a numerical float value into an application. It accepts and displays text input. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1674],["Note**: To align a FloatField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1674],["Create a FloatField",1674],["You can create a FloatField with UI Builder, UXML, and C#. The following C# example creates a FloatField with a value change callback:",1674],["```lang-csharp",1674],["FloatField myElement = new FloatField(\"Label text\");",1674],["// Align the float field with the other fields.",1674],["myElement.AddToClassList(\"unity-base-field__aligned\");",1674],["myElement.value = 0.5f;",1674],["// To delay the value change callback until the user has finished editing the value, set the isDelayed property to true.",1674],["myElement.isDelayed = true;",1674],["myElement.RegisterValueChangedCallback(evt => Debug.Log(\"New value: \" + evt.newValue));",1674],["Example",1674],["The following UXML example creates a FloatField with a placeholder:",1674],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/FloatFieldSnippet.uxml)]",1674],["The following C# example illustrates some of the customizable functionalities of the FloatField:",1674],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/FloatFieldSnippet.cs#sample)]",1674],["C# base class and namespace",1674],["Additional resources",1674],["\nUXML element Label\n",1674],["\nUXML element TextField\n",1674],["\nUXML element IntegerField\n",1674],["\nUXML element DoubleField\n",1674],["\nUXML element LongField\n",1674],["\nUXML element PropertyField\n",1674],["UXML element Foldout",1675],["A Foldout is a collapsible section of a UI. The Foldout hides or reveals the elements it contains when you click its header.",1675],["Create a Foldout",1675],["A Foldout has the following elements:",1675],["Label**: A label you can use as the name of the Foldout.",1675],["Toggle**: Click the toggle to expand or collapse the container sub-element. It is styled to look like an arrow rather than the default checkbox. When the container is collapsed, the arrow points right. When the container is expanded, the arrow points down.",1675],["Container**: A container contains the visual elements that you want to show or hide when you toggle the Foldout.",1675],["You can add elements to a Foldout's container, and the show-or-hide function works automatically.",1675],["The following UI Document creates a Foldout with two buttons in its container. The two buttons show or hide when you toggle the Foldout.",1675],["```lang-xml",1675],["",1675],["",1675],["",1675],["",1675],["",1675],["",1675],["Respond to user actions",1675],["A Foldout and its Toggle sub-element respond to Change events. The Toggle hides or shows the Foldout container.",1675],["You can bind a Foldout to a Boolean variable or access its value through the INotifyValueChanged<bool> interface.",1675],["Examples",1675],["The following C# code snippet creates a Foldout and checks whether the foldout is expanded:",1675],["```lang-csharp",1675],["// Create a new foldout, add two elements to it and add it to the container",1675],["var cSharpFoldout = new Foldout {text = \"Elements\"};",1675],["cSharpFoldout.Add(new Label(\"Indented Label\"));",1675],["cSharpFoldout.Add(new Slider(\"Indented Slider\", 0, 100));",1675],["container.Add(cSharpFoldout);",1675],["cSharpFoldout.RegisterValueChangedCallback(e =>",1675],["// Check whether the foldout is expanded",1675],["if (cSharpFoldout.value)",1675],["Debug.Log(\"Foldout is expanded\");",1675],["else",1675],["Debug.Log(\"Foldout is collapsed\");",1675],["});",1675],["C# base class and namespace",1675],["Additional resource",1675],["\nChange events\n",1675],["\nToggle\n",1675],["UXML element GradientField",1676],["The GradientField is an Editor-only control that lets users set a color gradient from a Gradient Editor.",1676],["Create a GradientField",1676],["You can create a GradientField with UI Builder, UXML, or C#. The following C# example creates a GradientField with a default value:",1676],["```lang-csharp",1676],["var gradient = new GradientField();",1676],["gradient.value = new Gradient();",1676],["gradient.value.colorKeys = new GradientColorKey[]",1676],["new GradientColorKey(Color.red, 0),",1676],["new GradientColorKey(Color.blue, 10),",1676],["new GradientColorKey(Color.green, 20)",1676],["};",1676],["Example",1676],["The following UXML example creates a GradientField:",1676],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/GradientFieldSnippet.uxml)]",1676],["The following C# example illustrates some of the customizable functionalities of the GradientField:",1676],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/GradientFieldSnippet.cs#sample)]",1676],["C# base class and namespace",1676],["Additional resources",1676],["\nGradient\n",1676],["\nColorField\n",1676],["\nGradientMode\n",1676],["UXML element GroupBox",1677],["A GroupBox is a container element for a logical group of multiple visual elements. You can use a combination of GroupBox and RadioButton if you want to have multiple groups of options in the same panel.",1677],["If you want to treat your group of radio buttons as a single field, use RadioButtonGroup. In most cases, it's better to use RadioButtonGroup because you must register every single radio button when you use the GroupBox and RadioButton combo. However, use the combo if you want to add additional visual elements in the group.",1677],["Create a GroupBox with C# script",1677],["The following C# code snippets create a GroupBox and add three radio buttons to it so that they're logically grouped.",1677],["```lang-csharp",1677],["var group = new GroupBox(\"Group Example\");",1677],["// Must register change events on each radio button.",1677],["var choice1 = new RadioButton(\"First Choice\");",1677],["choice1.RegisterValueChangedCallback(v => Debug.Log(\"Choice 1 is : \" + v.newValue));",1677],["var choice2 = new RadioButton(\"Second Choice\");",1677],["choice2.RegisterValueChangedCallback(v => Debug.Log(\"Choice 2 is : \" + v.newValue));",1677],["var choice3 = new RadioButton(\"Third Choice\");",1677],["choice3.RegisterValueChangedCallback(v => Debug.Log(\"Choice 3 is : \" + v.newValue));",1677],["group.Add(choice1);",1677],["group.Add(choice2);",1677],["group.Add(choice3);",1677],["rootVisualElement.Add(group);",1677],["C# class and namespace",1677],["Additional resources",1677],["\nRadioButtonGroup\n",1677],["\nRadioButton\n",1677],["UXML element Hash128Field",1678],["The Hash128Field lets users enter a Hash128 value in a UI.",1678],["Create a Hash128Field",1678],["You can create a Hash128Field with UI Builder, UXML, or C#. The following C# example creates a Hash128Field with a Hash128 value:",1678],["```lang-csharp",1678],["var hash128Field = new Hash128Field();",1678],["hash128Field.label = \"Label text:\";",1678],["hash128Field.value = new Hash128(0x8f14e45f, 0xceea167a, 0x5a36dedd, 0x4bea2543);",1678],["C# class and namespace",1678],["Additional resources",1678],["\nUXML element Vector2Field\n",1678],["\nUXML element Vector3Field\n",1678],["\nUXML element Vector4Field\n",1678],["UXML element HelpBox",1679],["A HelpBox displays a message to the user. You can set the type of message to display, such as a warning or an error. You can also set the message to display as rich text.",1679],["Create a HelpBox",1679],["You can create a HelpBox with UXML and C#. The following C# example creates a HelpBox with the message \"Help text\" and the information icon:",1679],["```lang-csharp",1679],["HelpBox helpBox = new HelpBox(\"Help text\", HelpBoxMessageType.Info);",1679],["Example",1679],["The following UXML example creates a HelpBox with a warning message:",1679],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/HelpBoxSnippet.uxml)]",1679],["The following C# example illustrates some of the customizable functionalities of the HelpBox:",1679],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/HelpBoxSnippet.cs#sample)]",1679],["C# base class and namespace",1679],["Additional resources",1679],["\nWork with text\n",1679],["UXML element Image",1680],["Use the Image element to add graphical assets to your application. It's a versatile and powerful tool for displaying visual content in your UI, such as image galleries, product listings, a rendering preview, and user profiles.",1680],["Create an image",1680],["You must use either UXML or C# code to add an Image element in your UI and provide the image source to the --unity-image USS custom property.",1680],["You can set the image scale mode with the --unity-image-size USS custom property. You can also set the image tint color with the --unity-image-tint-color USS custom property.",1680],["The following UXML example uses an inline style to add an image source:",1680],["```lang-xml",1680],["",1680],["You can set the size and layout of the Image element, as well as the sizing and layout of the image within the element. This allows you to control how the image is displayed within your UI, such as resizing it to fit a particular area or aligning it with other UI elements. You can also add interactivity to the Image element, such as allowing the user to click or tap on the image to trigger an action. You can apply styles to the Image element and the image itself, such as adjusting the opacity or applying a color filter.",1680],["",1680],["Image versus VisualElement.backgroundImage",1680],["You can use both the Image element and the VisualElement.backgroundImage property to add visual content to your UI. The choice between the two depends on the specific usage and requirements of your application.",1680],["The Image element is typically used to display an image within a specific area of a UI, such as an image gallery or an avatar in a user profile. It provides more fine-grained control over the appearance of the image, including options for resizing, scaling, and cropping. Use Image when you want the size of an image to drive the size of an element in the layout. You can also add additional elements to the Image element to create overlays or add interactivity. However, for performance reasons, specify a fixed width and height if you use many instances of Image.",1680],["The VisualElement.backgroundImage property is used to set an image as the background of a UI element. This is useful when you want to add visual interest to an element without detracting from the main content or functionality of the UI. The VisualElement.backgroundImage property also allows the convenience of using USS to change the source image for many different elements.",1680],["In general, it's recommended to use the Image element when you need more control over the appearance and layout of an image; and to use the VisualElement.backgroundImage property when you simply want to add a background image to a UI element. However, both approaches are valid and you can use them together in the same UI if necessary.",1680],["Note**:",1680],["\nThe Image element also supports the backgroundImage property. The background image won't be visible if the Image element has an image source set and it's not transparent.\n",1680],["\nUI Builder partially supports the Image element. It reads from and writes to UXML, and allows basic authoring as a standard visual element. Most of the Image-specific settings are defined as USS custom properties and aren't visible in the Attributes section of the UI Builder Inspector.\n",1680],["C# base class and namespace",1680],["",1680],["USS custom properties",1680],["The following table outlines the custom properties that are available exclusively for the Image element in USS:",1680],["Property Type Description ",1680],["--unity-image string The source of the image file. For information on how to reference an image asset, refer to Assets. ",1680],["--unity-image-size string The image scale mode. Available values are stretch-to-fill, scale-and-crop and scale-to-fit. ",1680],["--unity-image-tint-color string The image tint color. ",1680],["Additional resources",1680],["\nSet background images\n",1680],["\nUXML element Button\n",1680],["UXML element IMGUIContainer",1681],["The IMGUIContainer element renders IMGUI code in a UI. You can use it to render complex UIs that aren't possible with the existing UI Toolkit elements.",1681],["Create an IMGUIContainer",1681],["You can create an IMGUIContainer with UXML or C#.",1681],["Assume you have an IMGUI code snippet like the following:",1681],["```lang-csharp",1681],["void IMGUICode()",1681],["GUILayout.BeginArea(new Rect(0, 0, 100, 100));",1681],["GUILayout.Button(\"Hello World\");",1681],["GUILayout.EndArea();",1681],["You can create an IMGUIContainer with the following:",1681],["UXML**",1681],["```lang-xml",1681],["",1681],["C#**",1681],["```lang-csharp",1681],["var imguiContainer = new IMGUIContainer(IMGUICode);",1681],["C# base class and namespace",1681],["Additional resources",1681],["\nUXML element VisualElement\n",1681],["\nImmediate Mode GUI (IMGUI)\n",1681],["UXML element InspectorElement",1682],["An InspectorElement is a UI control that displays the properties of a SerializedObject in the Inspector window. You can use it to display the properties of a SerializedObject in a custom Editor window.",1682],["Create an InspectorElement",1682],["You can create an InspectorElement with UXML or C#. The following C# example creates an InspectorElement and binds it to a SerializedObject:",1682],["```lang-csharp",1682],["using UnityEditor.UIElements;",1682],["...",1682],["var inspectorElement = new InspectorElement();",1682],["var serializedObject = new SerializedObject(myObject);",1682],["inspectorElement.Bind(serializedObject);",1682],["C# base class and namespace",1682],["Additional resources",1682],["\nUXML element VisualElement\n",1682],["UXML element IntegerField",1683],["An IntegerField lets users input a numerical integer value. It accepts and displays text input. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1683],["Note**: To align an IntegerField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1683],["Create an IntegerField",1683],["You can create an IntegerField with UI Builder, UXML, and C#. The following C# code creates an IntegerField:",1683],["```lang-csharp",1683],["var integerField = new IntegerField(\"Label text\");",1683],["Example",1683],["The following UXML example creates an IntegerField:",1683],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/IntegerFieldSnippet.uxml)]",1683],["The following C# example illustrates some of the customizable functionalities of the IntegerField:",1683],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/IntegerFieldSnippet.cs#sample)]",1683],["C# base class and namespace",1683],["Additional resources",1683],["\nUXML element UnsignedIntegerField\n",1683],["UXML element Label",1684],["A Label is a text element that you can use to display text. You can use a Label to display a title or a description for a control.",1684],["Create a Label",1684],["You can create a Label with UI Builder, UXML, or C#. The following C# example creates a Label with the text \"Hello World\" and sets the font size, font style, text alignment, and color:",1684],["```lang-csharp",1684],["var label = new Label(\"Hello World\");",1684],["label.style.fontSize = 14;",1684],["label.style.unityFontStyleAndWeight = FontStyle.Bold;",1684],["label.style.unityTextAlign = TextAnchor.MiddleCenter;",1684],["label.style.color = Color.red;",1684],["Example",1684],["The following UXML example creates a Label:",1684],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/LabelSnippet.uxml)]",1684],["The following C# example illustrates some of the customizable functionalities of the Label:",1684],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/LabelSnippet.cs#sample)]",1684],["C# base class and namespace",1684],["Additional resources",1684],["\nUXML element TextElement\n",1684],["UXML element LayerField",1685],["A LayerField allows the users to select a layer from a list of available layers.",1685],["Note**: To align a LayerField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1685],["Create a LayerField",1685],["You can create a LayerField with UI Builder, UXML, and C#. The following C# example creates a LayerField with the default value:",1685],["```lang-csharp",1685],["LayerField myElement = new LayerField(\"Label text\");",1685],["// Sets the default value to 2.",1685],["myElement.value = 2;",1685],["Example",1685],["The following UXML example creates a LayerField:",1685],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/LayerFieldSnippet.uxml)]",1685],["The following C# example illustrates some of the customizable functionalities of the LayerField:",1685],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/LayerFieldSnippet.cs#sample)]",1685],["C# base class and namespace",1685],["Additional resources",1685],["\nUXML element LayerMaskField\n",1685],["\nLayers\n",1685],["UXML element LayerMaskField",1686],["A LayerMaskField allows the users to select one or more layers from a list of available layers.",1686],["Note**: To align a LayerMaskField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1686],["Create a LayerMaskField",1686],["You can create a LayerMaskField with UI Builder, UXML, and C#. The following C# example creates a LayerMaskField with the default value:",1686],["```lang-csharp",1686],["LayerMaskField myElement = new LayerMaskField(\"Label text\");",1686],["// Sets the default value to 0.",1686],["myElement.value = 0;",1686],["Example",1686],["The following UXML example creates a LayerMaskField:",1686],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/LayerMaskFieldSnippet.uxml)]",1686],["The following C# example illustrates some of the customizable functionalities of the LayerMaskField:",1686],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/LayerMaskFieldSnippet.cs#sample)]",1686],["C# base class and namespace",1686],["Additional resources",1686],["\nUXML element LayerField\n",1686],["\nLayers\n",1686],["\nLayerMask\n",1686],["UXML element ListView",1687],["A ListView is a vertically scrollable area that links to and displays a list of items.",1687],["Note**: The horizontal and vertical Scroller elements are standard UI Toolkit Scrollers.",1687],["Create a ListView",1687],["You can create a ListView with UI Builder, UXML, and C#. The following C# example creates a ListView:",1687],["```lang-cs",1687],["var listView = new ListView();",1687],["ListView versus ScrollView",1687],["You can use a ScrollView control to create the same functionalities as using a ListView. However, a ListView is more efficient than a ScrollView when you do the following:",1687],["\nPopulate list items\n",1687],["\nManage item height\n",1687],["\nBind and unbind to objects\n",1687],["\nInstantiate the number of visual elements required to fill a page\n",1687],["\nRecycle visual elements to optimize memory handling\n",1687],["Set item height",1687],["To change how item height is used to drive content, use the VirtualizationMethod:",1687],["VirtualizationMethod.FixedHeight sets all items to the same height.",1687],["VirtualizationMethod.DynamicHeight allows items to have varying heights.",1687],["Control the scroll speed",1687],["To control the scroll speed of the ListView, override the USS built-in variable --unity-metrics-single_line-height. The default value is 18px. For example:",1687],["```lang-css",1687],[":root {",1687],["--unity-metrics-single_line-height: 500px;",1687],["Important**: When you use CloneTree() without parameter or Instantiate(), it adds a TemplateContainer that stops the line height from propagating. Use CloneTree(root) instead.",1687],["Examples",1687],["The following UXML example creates a ListView:",1687],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/ListViewSnippet.uxml)]",1687],["The following C# example illustrates some of the customizable functionalities of the ListView:",1687],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/ListViewSnippet.cs#sample)]",1687],["​",1687],["For more examples, refer to the following:",1687],["Create list and tree views: Use ListView, TreeView, MultiColumnListView, and MultiColumnTreeView to create list and tree views.",1687],["Create a complex list view: Use ListView to create a custom Editor window with a list of characters.",1687],["Bind to a list with ListView: Create a list of toggles and bind the list to an underlying list of GameSwitch objects.",1687],["C# base class and namespace",1687],["Additional resources",1687],["UXML element LongField",1688],["A LongField lets users input a numerical long integer value into an application. It accepts and displays text input. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1688],["Note**: To align a LongField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1688],["Create a LongField",1688],["You can create a LongField with UI Builder, UXML, and C#.",1688],["To create a LongField with C#, create a new instance of a LongField object. For example:",1688],["```lang-csharp",1688],["LongField myElement = new LongField(\"Label text\");",1688],["Examples",1688],["The following UXML example creates a LongField:",1688],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/LongFieldSnippet.uxml)]",1688],["The following C# example illustrates some of the customizable functionalities of the LongField:",1688],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/LongFieldSnippet.cs#sample)]",1688],["C# base class and namespace",1688],["Additional resources",1688],["\nWork with text\n",1688],["\nUXML element Label\n",1688],["\nUXML element TextField\n",1688],["\nUXML element IntegerField\n",1688],["\nUXML element DoubleField\n",1688],["\nUXML element FloatField\n",1688],["\nUXML element PropertyField\n",1688],["UXML element MaskField",1689],["The MaskField is an Editor-only control that lets users select one or more options from a list of options.",1689],["Create a MaskField",1689],["You can create a MaskField with UI Builder, UXML, or C#. The following C# example creates a MaskField with a default selection:",1689],["```lang-csharp",1689],["using UnityEditor.UIElements;",1689],["...",1689],["var maskField = new MaskField();",1689],["maskField.choices = new List { \"1\", \"2\", \"3\" };",1689],["maskField.value = 2;",1689],["maskField.label = \"Mask\";",1689],["Example",1689],["The following UXML example creates a MaskField:",1689],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/MaskFieldSnippet.uxml)]",1689],["The following C# example illustrates some of the customizable functionalities of the MaskField:",1689],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/MaskFieldSnippet.cs#sample)]",1689],["C# base class and namespace",1689],["Additional resources",1689],["\nUXML element TagField\n",1689],["UXML element MinMaxSlider",1690],["The MinMaxSlider element is a slider that lets users select a range of values within a specified minimum and maximum range. You can use it to set a range of values for various parameters, such as volume levels, character stats, or other numerical values in your UI. To use it, define the minimum and maximum values, and then slide the handle to select the range you want.",1690],["Create a MinMaxSlider",1690],["You can create a MinMaxSlider with UI Builder, UXML, or C#. The following C# example creates a MinMaxSlider with a default value, low limit, and high limit:",1690],["```lang-csharp",1690],["var minMaxSlider = new MinMaxSlider();",1690],["minMaxSlider.value = new Vector2(0.25f, 0.75f);",1690],["minMaxSlider.lowLimit = 0;",1690],["minMaxSlider.highLimit = 1;",1690],["Example",1690],["The following UXML example creates a MinMaxSlider:",1690],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/MinMaxSliderSnippet.uxml)]",1690],["The following C# example illustrates some of the customizable functionalities of the MinMaxSlider:",1690],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/MinMaxSliderSnippet.cs#sample)]",1690],["C# base class and namespace",1690],["Additional resources",1690],["\nUXML element Slider\n",1690],["\nUXML element SliderInt\n",1690],["UXML element MultiColumnListView",1691],["A MultiColumnListView is a UI control commonly used to display tabular or grid-like data with multiple columns. It allows you to present data in a structured format, where each row represents an item or entry, and each column represents a specific attribute or property of that item.",1691],["Create a MultiColumnListView",1691],["You can create a MultiColumnListView with UXML and C#. The following C# example creates a MultiColumnListView with two columns:",1691],["```lang-cs",1691],["var multiColumnListView = new MultiColumnListView();",1691],["multiColumnListView.columns.Add(new Column { title = \"Name\", width = 20 });",1691],["multiColumnListView.columns.Add(new Column { title = \"Power\", width = 80 });",1691],["Examples",1691],["Create list and tree views: Use ListView, TreeView, MultiColumnListView, and MultiColumnTreeView to create list and tree views.",1691],["Create a drag-and-drop list and tree views between windows: Use ListView, TreeView, and MultiColumnListView to create a drag-and-drop UI between windows.",1691],["C# base class and namespace",1691],["Additional resources",1691],["UXML element MultiColumnTreeView",1692],["A MultiColumnTreeView is a UI control commonly used to display tabular or grid-like data with multiple columns. Use a MultiColumnTreeView to present data in a structured format, where each row represents an item or entry, and each column represents a specific attribute or property of that item.",1692],["Create a MultiColumnTreeView",1692],["You can create a MultiColumnTreeView with UXML and C#. The following C# example creates a MultiColumnTreeView with two columns:",1692],["```lang-cs",1692],["var multiColumnTreeView = new MultiColumnTreeView();",1692],["multiColumnTreeView.columns.Add(new Column { title = \"Name\", width = 20 });",1692],["multiColumnTreeView.columns.Add(new Column { title = \"Power\", width = 80 });",1692],["Examples",1692],["Create list and tree views: Use ListView, TreeView, MultiColumnListView, and MultiColumnTreeView to create list and tree views.",1692],["C# base class and namespace",1692],["Additional resources",1692],["UXML element ObjectField",1693],["An ObjectField is an Editor-only element that lets users select a Unity object from a list of available objects. You can use it to select a Unity object to use as a reference, such as a material, a texture, a script, or a GameObject.",1693],["Create an ObjectField",1693],["You can create an ObjectField with UI Builder, UXML, or C#.",1693],["To restrict the type of objects that can be selected, use the type property. In UXML, the format of the type property is Type Name, Type assembly name.",1693],["Tip:** To find the assembly name of a type, use Debug.Log(theType.AssemblyQualifiedName); or find it in the type's Script API page.",1693],["The following examples create an ObjectField for selecting a 2D texture:",1693],["UXML**:",1693],["```lang-xml",1693],["",1693],["C#**:",1693],["```lang-csharp",1693],["using UnityEditor.UIElements;",1693],["...",1693],["var objectField = new ObjectField();",1693],["objectField.objectType = typeof(Texture2D);",1693],["objectField.label = \"Select an object:\";",1693],["Example",1693],["The following UXML example creates an ObjectField:",1693],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/ObjectFieldSnippet.uxml)]",1693],["The following C# example illustrates some of the customizable functionalities of the MinMaxSlider:",1693],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/ObjectFieldSnippet.cs#sample)]",1693],["C# base class and namespace",1693],["Additional resources",1693],["\nUXML element VisualElement\n",1693],["\nAssembly definitions\n",1693],["UXML element PopupWindow",1694],["PopupWindow is a text element with a background image and style. It's not a window of any kind and has no logic associated with it. It's equivalent to ShowPopup.",1694],["Note**: For full pop-up functionality, such as automatically closing when the window loses focus, use UnityEditor.PopupWindow. Refer to Create a popup window for an example.",1694],["C# base class and namespace",1694],["Additional resources",1694],["\nShowPopup\n",1694],["\nCreate a popup window\n",1694],["UXML element ProgressBar",1695],["A ProgressBar element displays the progress of an ongoing task or process. Use it to provide visual feedback to the user about the progress of a task, such as file downloads, game level loading, or any other task that may take a while to complete.",1695],["Create a ProgressBar",1695],["You can create a ProgressBar with UI Builder, UXML, and C#.",1695],["To create a ProgressBar with C#, create a new instance of a ProgressBar object. For example:",1695],["```lang-csharp",1695],["ProgressBar myElement = new ProgressBar(\"Label text\");",1695],["Customize the bar",1695],["To change the style of the bar, use the .unity-progress-bar__progress USS selector. For example, the following USS changes the size and the color of the bar:",1695],["```lang-css",1695],[".unity-progress-bar__progress {",1695],["width: 20px;",1695],["height: 50px;",1695],["background-color: yellow;",1695],["C# base class and namespace",1695],["Additional resources",1695],["\nUXML element Label\n",1695],["\nUXML element RadioButton\n",1695],["UXML element PropertyField",1696],["A PropertyField is a field element specifically designed to be bound to a SerializedProperty. Once you bind a property to a PropertyField, a nested BaseField element is created based on the property type. For example, if you bind an int property to a PropertyField, an IntegerField is nested inside the PropertyField.",1696],["Align a PropertyField with other fields in an Inspector window",1696],["By default, PropertyFields are created with the .unity-base-field__aligned USS class, which is also applied to each nested field that gets created upon binding. However, if you manually add a child BaseField element to a PropertyField, you must add the style class manually to that child field element. When the .unity-base-field__aligned class is present in an InspectorElement, the field calculates the label width to align with other fields in the Inspector window. If there are IMGUI fields present, UI Toolkit fields are aligned with them for consistency and compatibility.",1696],["C# base class and namespace",1696],["Additional resources",1696],["\nCreate a custom inspector\n",1696],["\nUXML element TextField\n",1696],["\nUXML element DoubleField\n",1696],["\nUXML element LongField\n",1696],["\nUXML element FloatField\n",1696],["\nUXML element IntegerField\n",1696],["UXML element RadioButton",1697],["A RadioButton lets users select a single choice when used along with other RadioButtons in a group. You can use a GroupBox to group RadioButtons. Otherwise, the panel acts as the default group.",1697],["Create a RadioButton",1697],["You can create a RadioButton with UI Builder, UXML, or C#. The following C# example creates two new radio buttons in the same container and logically groups them together in the panel.",1697],["```lang-csharp",1697],["var choice1 = new RadioButton() { text = \"Choice 1\" };",1697],["choice1.RegisterValueChangedCallback(v => Debug.Log(\"Choice 1 is : \" + v.newValue));",1697],["var choice2 = new RadioButton() { text = \"Choice 2\" };",1697],["choice2.RegisterValueChangedCallback(v => Debug.Log(\"Choice 2 is : \" + v.newValue));",1697],["container.Add(choice1);",1697],["container.Add(choice2);",1697],["Examples",1697],["The following UXML example creates a RadioButton:",1697],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/RadioButtonSnippet.uxml)]",1697],["The following C# example illustrates some of the customizable functionalities of the RadioButton:",1697],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/RadioButtonSnippet.cs#sample)]",1697],["C# class and namespace",1697],["Additional resources",1697],["\nRadioButtonGroup\n",1697],["\nGroupBox\n",1697],["UXML element RadioButtonGroup",1698],["A RadioButtonGroup offers a single selection out of a logical group of radio buttons. Selecting one cancels the others. RadioButtonGroup is similar to a DropdownField except that it exposes all choices in the UI.",1698],["Create a RadioButtonGroup",1698],["You can create a RadioButtonGroup with UI Builder, UXML, or C#.",1698],["UI BUilder**",1698],["In UI Builder, you can add options to a RadioButtonGroup by entering the choices you want separated by commas in the Choices field located within the Inspector panel of the RadioButtonGroup.",1698],["To set the default value, in the Inspector of the RadioButtonGroup, enter the numbering sequence of the option in Value, starting at 0.",1698],["C#**",1698],["The following C# example creates a new RadioButtonGroup with four options and registers to its value changed callback:",1698],["```lang-csharp",1698],["var radiogroup = new RadioButtonGroup(\"Options\", new List { \"Option 1\", \"Option 2\", \"Option 3\", \"Option 4\" });",1698],["radiogroup.RegisterValueChangedCallback(evt => Debug.Log(evt.newValue));",1698],["window.rootVisualElement.Add(radiogroup);",1698],["Examples",1698],["The following UXML example creates a RadioButtonGroup:",1698],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/RadioButtonGroupSnippet.uxml)]",1698],["The following C# example illustrates some of the customizable functionalities of the RadioButtonGroup:",1698],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/RadioButtonGroupSnippet.cs#sample)]",1698],["C# class and namespace",1698],["Additional resources",1698],["\nRadioButton\n",1698],["UXML element RectField",1699],["The RectField lets users enter a Rect value in a UI.",1699],["Create a RectField",1699],["You can create a RectField with UI Builder, UXML, or C#. The following C# example creates a RectField with a Rect value:",1699],["```lang-csharp",1699],["var rectField = new RectField();",1699],["rectField.value = new Rect(0, 0, 100, 100);",1699],["Example",1699],["The following UXML example creates a RectField:",1699],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/RectFieldSnippet.uxml)]",1699],["The following C# example illustrates some of the customizable functionalities of the RectField:",1699],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/RectFieldSnippet.cs#sample)]",1699],["C# class and namespace",1699],["Additional resources",1699],["\nUXML element RectIntField\n",1699],["UXML element RectIntField",1700],["The RectIntField lets users enter a RectInt value in a UI.",1700],["Create a RectIntField",1700],["You can create a RectIntField with UI Builder, UXML, or C#. The following C# example creates a RectIntField with a RectInt value:",1700],["```lang-csharp",1700],["var rectIntField = new RectIntField();",1700],["rectIntField.value = new RectInt(0, 0, 100, 100);",1700],["Example",1700],["The following UXML example creates a RectIntField:",1700],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/RectIntFieldSnippet.uxml)]",1700],["The following C# example illustrates some of the customizable functionalities of the RectIntField:",1700],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/RectIntFieldSnippet.cs#sample)]",1700],["C# class and namespace",1700],["Additional resources",1700],["\nUXML element RectField\n",1700],["UXML element RepeatButton",1701],["A RepeatButton performs a repetitive action when users press and hold it. You define the action, a delay, and an interval. When users press the RepeatButton, the initial delay must be met before the first action starts, and then it repeats at the specified interval.",1701],["Note**: A RepeatButton doesn't have the same styling as a regular Button. You can apply the .unity-button USS class to it to make it look like a regular Button.",1701],["Create a RepeatButton",1701],["Although you can create a RepeatButton with UXML, you must create the action logic in C#. The following C# example creates a RepeatButton that logs a console message when pressed and held:",1701],["```lang-csharp",1701],["// The logging delays 100ms before starting and repeats every 50ms.",1701],["var repeatButton = new RepeatButton(() => { Debug.Log(\"Button being pressed\"); }, 100, 50);",1701],["repeatButton.text = \"Press and hold me\";",1701],["// Apply the \".unity-button\" USS class to make the RepeatButton look like a regular Button.",1701],["repeatButton.AddToClassList(\"unity-button\");",1701],["C# base class and namespace",1701],["Additional resources",1701],["\nButton\n",1701],["UXML element Scroller",1702],["A Scroller lets users scroll through content in your user interface.",1702],["Create a Scroller",1702],["You can create a Scroller with UI Builder, UXML, or C#. The following C# example creates a Scroller with a default value, low limit, and high limit, and sets the direction of the Scroller:",1702],["```lang-csharp",1702],["var scroller = new Scroller();",1702],["scroller.value = 42;",1702],["scroller.lowValue = 0;",1702],["scroller.highValue = 100;",1702],["scroller.direction = SliderDirection.Vertical;",1702],["Example",1702],["The following UXML example creates a Scroller:",1702],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/ScrollerSnippet.uxml)]",1702],["The following C# example illustrates some of the customizable functionalities of the Scroller:",1702],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/ScrollerSnippet.cs#sample)]",1702],["C# base class and namespace",1702],["Additional resources",1702],["\nScrollView\n",1702],["UXML element ScrollView",1703],["ScrollView displays its content inside a scrollable area. When you add content to a ScrollView, the content is added to the content container (#unity-content-container) of the ScrollView.",1703],["Create a ScrollView",1703],["You can create a ScrollView with UI Builder, UXML, or C#. The following C# example creates a ScrollView with both horizontal and vertical scroll capabilities, that contains a title Label, and a number of Toggle elements:",1703],["```lang-csharp",1703],["var scrollView = new ScrollView(ScrollViewMode.VerticalAndHorizontal);",1703],["scrollView.style.width = 250;",1703],["scrollView.style.height = 400;",1703],["scrollView.Add(new Label(\"List of checkboxes:\"));",1703],["for (int i = 0; i < 100; ++i)",1703],["var toggle = new UnityEngine.UIElements.Toggle()",1703],["{ text = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\" };",1703],["scrollView.Add(toggle);",1703],["Manage the scroll bar visibility",1703],["You can specify the direction of the scroll bar movement, whether the horizontal or vertical scroll bars are visible, and control the speed of the scroll bars.",1703],["To set the direction of the scroll bar movement in UI Builder, in the Inspector window of the ScrollView, select one of the following options for Mode:",1703],["\nVertical (default)\n",1703],["\nHorizontal\n",1703],["\nVertical and Horizontal\n",1703],["To set the visibility of the scroll bar in UI Builder, in the Inspector window of the ScrollView, select one of the following options for Horizontal Scroller Visibility or Vertical Scroller Visibility:",1703],["\nAuto (default)\n",1703],["\nAlways Visible\n",1703],["\nHidden\n",1703],["Control the scroll speed",1703],["To control the scroll speed of the ScrollView, override the USS built-in variable --unity-metrics-single_line-height. The default value is 18px. For example:",1703],["```lang-css",1703],[":root {",1703],["--unity-metrics-single_line-height: 500px;",1703],["Important**: When you use CloneTree() without parameter or Instantiate(), it adds a TemplateContainer that stops the line height from propagating. Use CloneTree(root) instead.",1703],["",1703],["Wrap elements inside ScrollView",1703],["You can wrap visual elements inside a ScrollView so that the elements display in a row. If the row is full, the elements continue to display on the next line.",1703],["To wrap visual elements inside a ScrollView, set the ScrollView's content container flex direction to Row and flex wrap to Wrap.",1703],["In USS**:",1703],["```lang-css",1703],[".unity-scroll-view__content-container {",1703],["flex-direction: row;",1703],["flex-wrap: wrap;",1703],["In C#**:",1703],["```lang-csharp",1703],["scrollview.contentContainer.style.flexDirection = FlexDirection.Row;",1703],["scrollview.contentContainer.style.flexWrap = Wrap.Wrap;",1703],["",1703],["Wrap text of elements inside ScrollView",1703],["To wrap the text of an element inside a ScrollView, for example, the text of a Label element, do the following:",1703],["Style the Label element with any of the following methods:",1703],["\nIn UI Builder, in the Inspector window of the Label, select Text > Wrap > normal.\n",1703],["\nApply style white-space: normal; to the Label element in USS, UXML, or C#.\n",1703],["Create a VisualElement as a container inside the ScrollView. The original container element inside the ScrollView does not have bounds set (is infinite in size), so text won't properly wrap. This container VisualElement provides the finite size for text to wrap within.",1703],["Add the Label to the VisualElement container.",1703],["Examples",1703],["\nWrap content inside a ScrollView: This example demonstrates how to use styles to wrap content inside a scroll view.\n",1703],["C# class and namespace",1703],["Additional resources",1703],["\nListView\n",1703],["\nScroller\n",1703],["UXML element Slider",1704],["A Slider lets users select a floating-point value from a range of values. You can use a Slider to adjust a value, such as the volume of a sound or the brightness of a light. To set the value, you drag a thumb along a track, or click the track itself. A slider can also include a text input field, where you can modify the value directly.",1704],["Create a Slider",1704],["You can create a Slider with UI Builder, UXML, or C#. The following C# example creates a Slider with a default value, low value, and high value, and sets the direction of the slider:",1704],["```lang-csharp",1704],["var slider = new Slider();",1704],["slider.value = 0.5f;",1704],["slider.lowValue = 0;",1704],["slider.highValue = 100;",1704],["slider.direction = SliderDirection.Horizontal;",1704],["Set page size",1704],["The Slider control has a page-size property that controls how much the thumb moves, and how much the value changes, when you click the track to either side of the thumb.",1704],["If the page size value is 0, clicking the track moves the thumb to the cursor or pointer position, and updates the value accordingly.",1704],["If the page size value is greater than 0, clicking the track moves the thumb toward the cursor or pointer position by a specific amount. Slider controls treat page-size as a percentage of the total range.",1704],["For example, if the total range is 200, and the page size is 20, then the page size amount is 20% of 200, or 40. Each time you click the track, the thumb moves, and the value increases or decreases by 40.",1704],["Example",1704],["The following UXML example creates a Slider:",1704],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/SliderSnippet.uxml)]",1704],["The following C# example illustrates some of the customizable functionalities of the Slider:",1704],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/SliderSnippet.cs#sample)]",1704],["C# base class and namespace",1704],["Additional resources",1704],["\nUXML element SliderInt\n",1704],["\nUXML element MinMaxSlider\n",1704],["UXML element SliderInt",1705],["The SliderInt lets users select an integer value from a range of values. You can use a SliderInt to adjust a value, such as the number of lives in a game. To set the value, you drag a thumb along a track, or click the track itself. A slider can also include a text input field, where you can modify the value directly.",1705],["Create a SliderInt",1705],["You can create a SliderInt with UI Builder, UXML, or C#. The following C# example creates a SliderInt with a default value, low value, and high value, and sets the direction of the slider:",1705],["```lang-csharp",1705],["var sliderInt = new SliderInt();",1705],["sliderInt.value = 42;",1705],["sliderInt.lowValue = 0;",1705],["sliderInt.highValue = 100;",1705],["sliderInt.direction = SliderDirection.Horizontal;",1705],["Set page size",1705],["The SliderInt control has a page-size property that controls how much the thumb moves, and how much the value changes, when you click the track to either side of the thumb.",1705],["If the page size value is 0, clicking the track moves the thumb to the cursor or pointer position, and updates the value accordingly.",1705],["If the page size value is greater than 0, clicking the track moves the thumb toward the cursor or pointer position by a specific amount. SliderInt controls treat page-size as an absolute value.",1705],["For example, if the total range is 200, and the page size is 20, the page size amount is an absolute value of 20. Each time you click the track, the thumb moves, and the value increases or decreases by 20.​",1705],["Example",1705],["The following UXML example creates a SliderInt:",1705],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/SliderIntSnippet.uxml)]",1705],["The following C# example illustrates some of the customizable functionalities of the SliderInt:",1705],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/SliderIntSnippet.cs#sample)]",1705],["C# base class and namespace",1705],["Additional resources",1705],["\nUXML element Slider\n",1705],["\nUXML element MinMaxSlider\n",1705],["UXML element TagField",1706],["The TagField is an Editor-only control that lets users select a tag from a list of tags. It is commonly used in the Inspector window to allow users to select a tag for a GameObject.",1706],["Create a TagField element",1706],["You can create a TagField with UI Builder, UXML, or C#. The following C# example creates a TagField with a default tag:",1706],["```lang-csharp",1706],["using UnityEditor.UIElements;",1706],["...",1706],["var tagField = new TagField();",1706],["tagField.label = \"Tag\";",1706],["tagField.value = \"Player\";",1706],["Example",1706],["The following UXML example creates a TagField:",1706],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/TagFieldSnippet.uxml)]",1706],["The following C# example illustrates some of the customizable functionalities of the TagField:",1706],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/TagFieldSnippet.cs#sample)]",1706],["C# base class and namespace",1706],["Additional resources",1706],["\nUXML element MaskField\n",1706],["UXML element TemplateContainer",1707],["The TemplateContainer is the root element of a UXML file and acts as the parent of all other elements in the file.",1707],["A TemplateContainer instance is automatically generated for the following scenarios:",1707],["\nWhen you use VisualTreeAsset.Instantiate() in C#, a TemplateContainer instance is generated to represent the root of the hierarchy.\n",1707],["\nWhen you work with UXML templates, a TemplateContainer is generated to represent the template instance and inserted into the hierarchy of the parent UXML file.\n",1707],["C# base class and namespace",1707],["Additional resources",1707],["\nReuse UXML files\n",1707],["UXML element TextElement",1708],["The TextElement displays text in a UI. If you create a custom control for displaying text, you can inherit it from a TextElement.",1708],["Create a TextElement",1708],["You can create a TextElement with UXML or C#. The following C# example creates a TextElement with a text value and some styles:",1708],["```lang-csharp",1708],["var textElement = new TextElement()",1708],["text = \"Hello World\",",1708],["style =",1708],["fontSize = 14,",1708],["unityFontStyleAndWeight = FontStyle.Bold,",1708],["unityTextAlign = TextAnchor.MiddleCenter,",1708],["color = Color.red,",1708],["unityFontDefinition = new FontDefinition()",1708],["fontAsset = m_RobotoMonoRegular",1708],["C# base class and namespace",1708],["Additional resources",1708],["\nWork with text\n",1708],["\nUXML element TextField\n",1708],["UXML element TextField",1709],["A TextField lets users input text data into an application. It accepts and displays text input. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1709],["Note**: To align a TextField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1709],["Create a TextField",1709],["You can create a TextField with UI Builder, UXML, and C#. The following C# example creates a TextField that allows multiple lines text input:",1709],["```lang-csharp",1709],["var textField = new TextField();",1709],["textField.label = \"Enter your text here:\";",1709],["textField.multiline = true;",1709],["textField.maxLength = 140;",1709],["You can also style the selected text using the --unity-selection-color USS custom property. For example, the following USS sets the color of the selected input text to yellow:",1709],["```lang-css",1709],[".unity-base-text-field__input {",1709],["--unity-selection-color: yellow;",1709],["Enable a vertical scrollbar",1709],["If you have enabled multiline text on the TextField, you can display a vertical scrollbar for the text input field.",1709],["In C#, set the verticalScrollerVisibility property to ScrollerVisibility.Auto or ScrollerVisibility.AlwaysVisible:",1709],["```lang-csharp",1709],["// Set the multiline property to true to enable multiple lines of text",1709],["textField.multiline = true;",1709],["// Set the vertical scrollbar visibility to AlwaysVisible",1709],["textField.verticalScrollerVisibility = ScrollerVisibility.AlwaysVisible;",1709],["Control the behavior of the input text",1709],["You can use events to control the behavior of the input text.",1709],["For example, to override the default behaviors for the Enter and Shift + Tab keyboard events in a TextField, register a KeyDownEvent to the TrickleDown phase before they're handled by the TextElement base class:",1709],["```lang-csharp",1709],["myField.RegisterCallback((evt) => {",1709],["if (evt.keyCode == KeyCode.Enter evt.character == '/n')",1709],["// Submit logic",1709],["evt.StopPropagation();",1709],["evt.PreventDefault();",1709],["if (evt.modifiers == EventModifiers.Shift && (evt.keyCode == KeyCode.Tab evt.character == '/t'))",1709],["// Focus logic",1709],["evt.StopPropagation();",1709],["evt.PreventDefault();",1709],["}, TrickleDown.TrickleDown);",1709],["Example",1709],["The following UXML example creates a TextField:",1709],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/TextFieldSnippet.uxml)]",1709],["The following C# example illustrates some of the customizable functionalities of the TextField:",1709],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/TextFieldSnippet.cs#sample)]",1709],["C# base class and namespace",1709],["",1709],["USS custom properties",1709],["The following table outlines the custom properties that are available exclusively for the TextField element in USS:",1709],["Property Type Description ",1709],["--unity-cursor-color string The color code of the text caret. ",1709],["--unity-selection-color string The color code of the selected text. ",1709],["Additional resources",1709],["\nWork with text\n",1709],["\nUXML element Label\n",1709],["\nUXML element DoubleField\n",1709],["\nUXML element LongField\n",1709],["\nUXML element FloatField\n",1709],["\nUXML element IntegerField\n",1709],["\nUXML element PropertyField\n",1709],["UXML element Toggle",1710],["A Toggle includes an image and a label. Just like other standard UI Toolkit controls, such as a Button, a Toggle has a Clickable manipulator attached to it that registers to MouseUpEvent and PointerUpEvent. When one of those events triggers the manipulator, the Toggle's value changes from true to false or from false to true. You can read or set the current values of a Toggle. You can also bind a Toggle to a Boolean variable.",1710],["By default, a Toggle control appears as a checkbox. You can apply styles to make it look like a typical toggle switch.",1710],["You can display or hide elements based on other conditions, such as a selection from a drop-down, or an enabled option. An example of a conditional UI is the Unity Camera Inspector. It displays additional options when you activate Physical Camera mode.",1710],["Create a Toggle",1710],["You can create a Toggle with UI Builder, UXML, or C#.",1710],["The following C# examples creates a Toggle with a specific label:",1710],["```lang-cs",1710],["Toggle myToggle = new Toggle(\"Click me\");",1710],["Examples",1710],["The following UXML example creates a Toggle:",1710],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/ToggleSnippet.uxml)]",1710],["The following C# example illustrates some of the customizable functionalities of the Toggle:",1710],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/ToggleSnippet.cs#sample)]",1710],["For more examples, refer to the following:",1710],["\nCreate a conditional UI.\n",1710],["C# base class and namespace",1710],["Additional resources",1710],["UXML element Toolbar",1711],["A Toolbar is an Editor-only control that serves as a horizontal container. You can add any visual elements into a Toolbar, but to have a consistent visual style within the Toolbar, use the following elements because they have a predefined style that matches the Toolbar style:",1711],["\nToolbarButton instead of Button.\n",1711],["\nToolbarToggle instead of Toggle.\n",1711],["\nToolbarSearchField\n",1711],["\nToolbarPopupSearchField\n",1711],["\nToolbarMenu instead of DropdownField.\n",1711],["\nToolbarSpacer\n",1711],["\nToolbarBreadcrumbs\n",1711],["Create a Toolbar",1711],["You can create a Toolbar with UI Builder, UXML, or C#. The following C# example creates a Toolbar with a button and a toggle:",1711],["```lang-csharp",1711],["using UnityEditor.UIElements;",1711],["...",1711],["var toolbar = new Toolbar();",1711],["var button = new ToolbarButton(() => { Debug.Log(\"Button clicked\"); }) { text = \"Click me\" };",1711],["toolbar.Add(button);",1711],["toolbar.Add(new ToolbarToggle() { text = \"Toggle me\" });",1711],["C# base class and namespace",1711],["Additional resources",1711],["\nToolbarButton\n",1711],["\nToolbarToggle\n",1711],["\nToolbarSearchField\n",1711],["\nToolbarPopupSearchField\n",1711],["\nToolbarMenu\n",1711],["\nToolbarSpacer\n",1711],["\nToolbarBreadcrumbs\n",1711],["UXML element ToolbarBreadcrumbs",1712],["A ToolbarBreadcrumbs is an Editor-only control that serves as a breadcrumb navigation bar. It has a predefined style that matches the Toolbar style.",1712],["Create a ToolbarBreadcrumbs",1712],["You can create a ToolbarBreadcrumbs with UI Builder, UXML, or C#. The following C# example creates a ToolbarBreadcrumbs with three items:",1712],["```lang-csharp",1712],["using UnityEditor.UIElements;",1712],["...",1712],["var toolbarBreadcrumbs = new ToolbarBreadcrumbs();",1712],["// Use the PushItem() method to add an item to the breadcrumbs. The method takes a string and an optional callback.",1712],["toolbarBreadcrumbs.PushItem(\"myItemGrandParent\", GoToRoot);",1712],["// Use the PopItem() method to remove the last item from the breadcrumbs.",1712],["toolbarBreadcrumbs.PushItem(\"myItemParent\", () => toolbarBreadcrumbs.PopItem());",1712],["toolbarBreadcrumbs.PushItem(\"myItem\");",1712],["void GoToRoot()",1712],["while (toolbarBreadcrumbs.childCount > 1)",1712],["toolbarBreadcrumbs.PopItem();",1712],["C# base class and namespace",1712],["Additional resources",1712],["\nToolbar\n",1712],["UXML element ToolbarButton",1713],["A ToolbarButton is an Editor-only control that serves as a button in a Toolbar. It's a Button with a predefined style that matches the Toolbar style.",1713],["Create a ToolbarButton",1713],["You can create a ToolbarButton with UI Builder, UXML, or C#. The following C# example creates a ToolbarButton with a label:",1713],["```lang-csharp",1713],["using UnityEditor.UIElements;",1713],["...",1713],["var toolbarButton = new ToolbarButton(() => { Debug.Log(\"Button clicked\"); }) { text = \"Click me\" };",1713],["C# base class and namespace",1713],["Additional resources",1713],["\nToolbar\n",1713],["\nButton\n",1713],["UXML element ToolbarMenu",1714],["A ToolbarMenu is an Editor-only control that serves as a menu. It has a predefined style that matches the Toolbar style.",1714],["Create a ToolbarMenu",1714],["You can create a ToolbarMenu with UI Builder, UXML, or C#. The following C# example creates a ToolbarMenu with three menu items:",1714],["```lang-csharp",1714],["using UnityEditor.UIElements;",1714],["...",1714],["var toolbarMenu = new ToolbarMenu() { text = \"Menu Text\" };",1714],["toolbarMenu.menu.AppendAction(\"Menu item 1\", (a) => { Debug.Log(\"Menu item 1 clicked\"); });",1714],["toolbarMenu.menu.AppendAction(\"Menu item 2\", (a) => { Debug.Log(\"Menu item 2 clicked\"); });",1714],["toolbarMenu.menu.AppendAction(\"Menu item 3\", (a) => { Debug.Log(\"Menu item 3 clicked\"); });",1714],["C# base class and namespace",1714],["Additional resources",1714],["\nToolbar\n",1714],["UXML element ToolbarPopupSearchField",1715],["A ToolbarPopupSearchField is an Editor-only control that serves as a search field with a popup menu. It's a combination of a ToolbarMenu and ToolbarSearchField. You can add logic to the dropdown menu to filter the search results. To pop up the menu, the user hovers over the magnifying glass icon.",1715],["Create a ToolbarPopupSearchField",1715],["You can create a ToolbarPopupSearchField with UI Builder, UXML, or C#. The following C# example creates a ToolbarPopupSearchField with a menu, a placeholder text, and a value changed callback:",1715],["```lang-csharp",1715],["using UnityEditor.UIElements;",1715],["...",1715],["var toolbarPopupSearchField = new ToolbarPopupSearchField();",1715],["toolbarPopupSearchField.value = \"Search me\";",1715],["toolbarPopupSearchField.menu.AppendAction(\"Action 1\", action => Debug.Log(\"Action 1\"));",1715],["toolbarPopupSearchField.menu.AppendAction(\"Action 2\", action => Debug.Log(\"Action 2\"));",1715],["toolbarPopupSearchField.RegisterValueChangedCallback(evt => Debug.Log(\"New search value: \" + evt.newValue));",1715],["C# base class and namespace",1715],["Additional resources",1715],["\nToolbar\n",1715],["\nToolbarMenu\n",1715],["\nToolbarSearchField\n",1715],["\nTextField\n",1715],["UXML element ToolbarSearchField",1716],["A ToolbarSearchField is an Editor-only control that serves as a search field. It's a TextField with predefined styles that matches the Toolbar style.",1716],["Create a ToolbarSearchField",1716],["You can create a ToolbarSearchField with UI Builder, UXML, or C#. The following C# example creates a ToolbarSearchField a placeholder text and a value changed callback:",1716],["```lang-csharp",1716],["using UnityEditor.UIElements;",1716],["...",1716],["var toolbarSearchField = new ToolbarSearchField();",1716],["toolbarSearchField.value = \"Search me\";",1716],["toolbarSearchField.RegisterValueChangedCallback(evt => Debug.Log(\"New search value: \" + evt.newValue));",1716],["C# base class and namespace",1716],["Additional resources",1716],["\nToolbar\n",1716],["\nTextField\n",1716],["UXML element ToolbarSpacer",1717],["A ToolbarSpacer is an Editor-only control that creates empty spaces within a Toolbar for layout control and visual separation of elements. It's a VisualElement with a predefined style that matches the Toolbar style.",1717],["Create a ToolbarSpacer",1717],["You can create a ToolbarSpacer with UI Builder, UXML, or C#. The following C# example creates a ToolbarSpacer:",1717],["```lang-csharp",1717],["using UnityEditor.UIElements;",1717],["...",1717],["var toolbarSpacer = new ToolbarSpacer();",1717],["C# base class and namespace",1717],["Additional resources",1717],["\nToolbar\n",1717],["UXML element ToolbarToggle",1718],["A ToolbarToggle is an Editor-only control that serves as a toggle in a Toolbar. It's a Toggle with a predefined style that matches the Toolbar style. It looks like a button that you can toggle on and off.",1718],["Create a ToolbarToggle",1718],["You can create a ToolbarToggle with UI Builder, UXML, or C#. The following C# example creates a ToolbarToggle with a label:",1718],["```lang-csharp",1718],["using UnityEditor.UIElements;",1718],["...",1718],["var toolbarToggle = new ToolbarToggle() { text = \"Toggle me\" };",1718],["C# base class and namespace",1718],["Additional resources",1718],["\nToolbar\n",1718],["UXML element TreeView",1719],["Use TreeView to display hierarchical data in a tree-like structure. It's a powerful and flexible control that's commonly used to present data with parent-child relationships or nested structures.",1719],["Create a TreeView",1719],["You can create a TreeView with UI Builder, UXML, and C#. The following C# example creates a TreeView:",1719],["```lang-cs",1719],["var treeView = new TreeView();",1719],["Bind the TreeView to data",1719],["You can bind the TreeView to a data source. The data source can be a list of objects or a list of strings.",1719],["The following example binds a TreeView to a custom type.",1719],["```lang-cs",1719],["treeView.makeItem = () => new VisualElement();",1719],["treeView.bindItem = (i) =>",1719],["var c = treeView.GetItemDataForIndex(i);",1719],["};",1719],["Note**: In the above example, the TreeView.bindItem receives the Index. You must use the Index (not the ID) with GetItemDataForIndex<T>.",1719],["Examples",1719],["The following UXML example creates a TreeView:",1719],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/TreeViewSnippet.uxml)]",1719],["The following C# example illustrates some of the customizable functionalities of the TreeView:",1719],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/TreeViewSnippet.cs#sample)]",1719],["​",1719],["For more examples, refer to the following:",1719],["Create list and tree views: Use ListView, TreeView, MultiColumnListView, and MultiColumnTreeView to create list and tree views.",1719],["C# base class and namespace",1719],["Additional resources",1719],["UXML element UnsignedIntegerField",1720],["The UnsignedIntegerField lets users enter an unsigned integer. An unsigned integer is a 32-bit datum that encodes a non-negative integer in the range of 0 to 4294967295. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1720],["Note**: To align an UnsignedIntegerField with other fields in an Inspector window, apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1720],["Create an UnsignedIntegerField",1720],["You can create an UnsignedIntegerField with UI Builder, UXML, or C#. The following C# code creates an UnsignedIntegerField:",1720],["```lang-csharp",1720],["var unsignedIntegerField = new UnsignedIntegerField();",1720],["Example",1720],["The following UXML example creates an UnsignedIntegerField:",1720],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/UnsignedIntegerFieldSnippet.uxml)]",1720],["The following C# example illustrates some of the customizable functionalities of the UnsignedIntegerField:",1720],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/UnsignedIntegerFieldSnippet.cs#sample)]",1720],["C# base class and namespace",1720],["Additional resources",1720],["\nUXML element IntegerField\n",1720],["UXML element UnsignedLongField",1721],["The UnsignedLongField lets users enter an unsigned long integer. An unsigned long integer is a 64-bit datum that encodes a non-negative integer in the range 0 to 18446744073709551615. You can set placeholder text to provide hints or instructions to the user on what to enter. You can also add validation functions to ensure that the entered data meets certain requirements.",1721],["Note**: To align an UnsignedLongField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1721],["Create an UnsignedLongField",1721],["You can create an UnsignedLongField with UI Builder, UXML, or C#. The following C# code creates an UnsignedLongField:",1721],["```lang-csharp",1721],["var unsignedLongField = new UnsignedLongField();",1721],["Example",1721],["The following UXML example creates an UnsignedLongField:",1721],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/UnsignedLongFieldSnippet.uxml)]",1721],["The following C# example illustrates some of the customizable functionalities of the UnsignedLongField:",1721],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/UnsignedLongFieldSnippet.cs#sample)]",1721],["C# base class and namespace",1721],["Additional resources",1721],["\nUXML element LongField\n",1721],["UXML element Vector2Field",1722],["A Vector2Field lets users enter a Vector2 value.",1722],["Note**: To align a Vector2Field with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1722],["Create a Vector2Field",1722],["You can create a Vector2Field with UI Builder, UXML, and C#. The following C# example creates a Vector2Field and sets the default value to (15.5, 12.5):",1722],["```lang-csharp",1722],["Vector2Field myElement = new Vector2Field(\"Label text\");",1722],["// Set the default value to (15.5, 12.5).",1722],["myElement.value = new Vector2(15.5f, 12.5f);",1722],["Example",1722],["The following UXML example creates a Vector2Field with a placeholder:",1722],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/Vector2FieldSnippet.uxml)]",1722],["The following C# example illustrates some of the customizable functionalities of the Vector2Field:",1722],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/Vector2FieldSnippet.cs#sample)]",1722],["C# base class and namespace",1722],["Additional resources",1722],["\nUXML element Vector2IntField\n",1722],["\nUXML element Vector3Field\n",1722],["\nUXML element Vector3IntField\n",1722],["\nUXML element Vector4Field\n",1722],["UXML element Vector2IntField",1723],["A Vector2IntField lets users enter a Vector2Int value.",1723],["Note**: To align a Vector2IntField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1723],["Create a Vector2IntField",1723],["You can create a Vector2IntField with UI Builder, UXML, and C#. The following C# example creates a Vector2IntField with the default value (15, 12):",1723],["```lang-csharp",1723],["Vector2IntField myElement = new Vector2IntField(\"Label text\");",1723],["// Set the default value to (15, 12).",1723],["myElement.value = new Vector2Int(15, 12);",1723],["Example",1723],["The following UXML example creates a Vector2IntField with a placeholder:",1723],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/Vector2IntFieldSnippet.uxml)]",1723],["The following C# example illustrates some of the customizable functionalities of the Vector2IntField:",1723],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/Vector2IntFieldSnippet.cs#sample)]",1723],["C# base class and namespace",1723],["Additional resources",1723],["\nUXML element Vector2Field\n",1723],["\nUXML element Vector3Field\n",1723],["\nUXML element Vector3IntField\n",1723],["\nUXML element Vector4Field\n",1723],["UXML element Vector3Field",1724],["A Vector3Field lets users enter a Vector3 value.",1724],["Note**: To align a Vector3Field with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1724],["Create a Vector3Field",1724],["You can create a Vector3Field with UI Builder, UXML, and C#. The following C# example creates a Vector3Field with the default value (15.5, 12.5, 14.5):",1724],["```lang-csharp",1724],["Vector3Field myElement = new Vector3Field(\"Label text\");",1724],["// Set the default value to (15.5, 12.5, 14.5).",1724],["myElement.value = new Vector3(15.5f, 12.5f, 14.5f);",1724],["Example",1724],["The following UXML example creates a Vector3Field with a placeholder:",1724],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/Vector3FieldSnippet.uxml)]",1724],["The following C# example illustrates some of the customizable functionalities of the Vector3Field:",1724],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/Vector3FieldSnippet.cs#sample)]",1724],["C# base class and namespace",1724],["Additional resources",1724],["\nUXML element Vector2Field\n",1724],["\nUXML element Vector2IntField\n",1724],["\nUXML element Vector3IntField\n",1724],["\nUXML element Vector4Field\n",1724],["UXML element Vector3IntField",1725],["A Vector3IntField lets users enter a Vector3Int value.",1725],["Note**: To align a Vector3IntField with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1725],["Create a Vector3IntField",1725],["You can create a Vector3IntField with UI Builder, UXML, and C#. The following C# example creates a Vector3IntField with the default value (15, 12, 14):",1725],["```lang-csharp",1725],["```lang-csharp",1725],["Vector3IntField myElement = new Vector3IntField(\"Label text\");",1725],["// Set the default value to (15, 12, 14).",1725],["myElement.value = new Vector3Int(15, 12, 14);",1725],["Example",1725],["The following UXML example creates a Vector3IntField with a placeholder:",1725],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/Vector3IntFieldSnippet.uxml)]",1725],["The following C# example illustrates some of the customizable functionalities of the Vector3IntField:",1725],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/Vector3IntFieldSnippet.cs#sample)]",1725],["C# base class and namespace",1725],["Additional resources",1725],["\nUXML element Vector2Field\n",1725],["\nUXML element Vector2IntField\n",1725],["\nUXML element Vector3Field\n",1725],["\nUXML element Vector4Field\n",1725],["UXML element Vector4Field",1726],["A Vector4Field lets users enter a Vector4 value.",1726],["Note**: To align a Vector4Field with other fields in an Inspector window, simply apply the .unity-base-field__aligned USS class to it. For more information, refer to BaseField.",1726],["Create a Vector4Field",1726],["You can create a Vector4Field with UI Builder, UXML, and C#. The following C# example creates a Vector4Field and sets the default value to (0, 0, 0, 0):",1726],["```lang-csharp",1726],["Vector4Field myElement = new Vector4Field(\"Label text\");",1726],["// Set the default value to (0, 0, 0, 0).",1726],["myElement.value = Vector4.zero;",1726],["Example",1726],["The following UXML example creates a Vector4Field:",1726],["[!code-xml[(External/Resources/editor_resources/Assets/Editor Default Resources/UIPackageResources/Snippets/UXML/Vector4FieldSnippet.uxml)]",1726],["The following C# example illustrates some of the customizable functionalities of the Vector4Field:",1726],["[!code-cs[(Modules/UIElementsSamplesEditor/Snippets/Vector4FieldSnippet.cs#sample)]",1726],["C# base class and namespace",1726],["Additional resources",1726],["\nUXML element Vector2Field\n",1726],["\nUXML element Vector2IntField\n",1726],["\nUXML element Vector3Field\n",1726],["\nUXML element Vector3IntField\n",1726],["UXML element VisualElement",1727],["A VisualElement is the basic element that you can use as a container for other elements. You can use a VisualElement to group elements together and apply a common style to them. For example, you can use a VisualElement to group a label and a text field together, and then apply a common style to the VisualElement.",1727],["Create a VisualElement",1727],["You can create a VisualElement with UI Builder, UXML, or C#. The following C# example creates a VisualElement with a label and a text field:",1727],["```lang-csharp",1727],["var myElement = new VisualElement();",1727],["myElement.Add(new Label(\"Hello World\"));",1727],["myElement.Add(new TextField());",1727],["myElement.style.backgroundColor = Color.blue;",1727],["myElement.style.width = 200;",1727],["myElement.style.height = 200;",1727],["C# base class and namespace",1727],["Additional resources",1727],["\nUXML element Box\n",1727],["\nUXML element BindableElement\n",1727],["\nRelative and absolute positioning\n",1727],["Structure UI examples",1728],["The best way to learn how to structure UI is to try examples. The following examples demonstrate how to use built-in controls, and create and use custom controls in your UI.",1728],["Additional resources",1728],["Structure UI with UXML",1729],["Unity Extensible Markup Language (UXML) files are text files that define the structure of the UI. UXML along with USS makes it easier for less technical users to define the layout and the style of the UI. This leaves developers with technical tasks, such as importing assets, defining logic, and processing data.",1729],["Topic Description ",1729],[":------------------- :--------------------- ",1729],["Introduction to UXML Understand the format of the UXML. ",1729],["Add styles to UXML Learn how to reference a USS file in UXML. ",1729],["Reuse UXML files Learn how to import a UXML file and override the attributes. ",1729],["Reference other files from UXML Understand the src and the path attributes used to reference other files from UXML. ",1729],["Load UXML and USS from C# scripts Load UXML and USS as you would load a regular Unity asset. ",1729],["Instantiate UXML with C# Learn how to instantiate UXML with C# by an example. ",1729],["Find visual elements with UQuery Use UQuery to retrieve elements and learn UQuery best practices. ",1729],["View data persistence",1730],["View data persistence preserves the view data associated with visual elements in the UI. View data refers to the state of the user interface that's not part of the underlying data model of the UI. For example, view data could include the scroll position of a scroll bar or the selection of a list.",1730],["View data persistence addresses the issue of UI view data not persisting during certain events in the Editor:",1730],["\nDomain reloads, such as when entering Play mode or changing a script\n",1730],["\nWindow closes or reopens, such as when changing the Editor layout\n",1730],["\nEditor restarts\n",1730],["Note**: View data persistence only works in the Editor UI.",1730],["To enable view data persistence for the elements that support it, set the view data key to a unique string within the Editor window (the EditorWindow type). You can set it in UI Builder, UXML, or C#:",1730],["\nIn UI Builder, set the key to the View Data Key field in the Attributes section of the element's Inspector panel.\n",1730],["\nIn UXML, set the key with the view-data-key attribute.\n",1730],["\nIn C#, set the key with the viewDataKey property.\n",1730],["The following elements currently support view data persistence:",1730],["\nScrollView\n",1730],["\nListView\n",1730],["\nFoldout\n",1730],["\nTreeView \n",1730],["When you enable the view data persistence, those elements remember their internal view state:",1730],["\nFor ScrollView, it remembers the scroll position.\n",1730],["\nFor ListView, it remembers the selection.\n",1730],["\nFor Foldout, it remembers the expanded state.\n",1730],["\nFor TreeView, it remembers the selection. \n",1730],["To enable view data persistence for a read-only element, set the view data key on the parent element.",1730],["For example, a ScrollView has several read-only Scroller child elements. Each Scroller is given a view data key that's unique within the ScrollView element. If you set a view data key for the Foldout, the Foldout has its view data persisted. Although Scrollers have keys, their view data isn't persisted. You must set a view data key for their parent ScrollView to enable persistence. The Scrollers will combine their view data keys with the parent's view data key to create a unique global view data key.",1730],["Note**: Currently, the API necessary to add support for view data persistence is internal, which means you can't enable view data persistence for your custom controls.",1730],["Additional resources",1730],["\nviewDataKey\n",1730],["The visual tree",1731],["In your UI, you structure elements into a visual tree.",1731],["Topic Description ",1731],[":-------------------- :----------------------- ",1731],["Introduction to visual elements and visual tree Understand visual elements in the visual tree and how to use it. ",1731],["Panels Understand panels in the visual tree. ",1731],["Draw order Understand the elements ordering in the visual tree. ",1731],["Coordinate and position systems Understand relative and absolute coordinates and transformation between coordinate systems. ",1731],["Additional resources",1731],["Introduction to visual elements and the visual tree",1732],["The most basic building block in UI Toolkit is a visual element. The visual elements are ordered into a hierarchy tree with parent-child relationships. This is called the visual tree.",1732],["The diagram below displays a simplified example of the visual tree, and the rendered result in UI Toolkit.",1732],["The Root in the diagram represents the EditorWindow.rootVisualElement in the Editor UI and the UIDocument.rootVisualElement in a runtime UI.",1732],["The VisualElement class is the base for all nodes in the visual tree. The VisualElement base class contains properties such as styles, layout data, and event handlers. Visual elements can have children and descendant visual elements. For example, in the diagram above, the first Box visual element has three child visual elements: Label, Checkbox, and Slider.",1732],["You can customize the appearance of visual elements through inline styles and stylesheets. You can also use event callbacks to modify the behavior of a visual element.",1732],["VisualElement derives into subclasses that define additional behavior and functionality, such as controls. UI Toolkit includes a variety of built-in controls with specialized behavior. A control is an element of a graphical user interface. For example, the following items are available as built-in controls:",1732],["\nButtons\n",1732],["\nToggles\n",1732],["\nText input fields\n",1732],["A control includes the visual of the control, and the scripted logic to operate and interact with the control. It can consist of a single visual element, or a combination of multiple visual elements. For example, the Toggle control contains three elements:",1732],["\nA text label\n",1732],["\nAn image of a box\n",1732],["\nAn image of a checkmark\n",1732],["The implementation of the Toggle control defines the behavior of the control. It has an internal value of whether the toggle state is true or false. This logic alternates the visibility of the checkmark image when the value changes.",1732],["You can also combine visual elements together and modify their behavior to create custom controls.",1732],["To use a control in a UI, add it to the visual tree.",1732],["Additional resources",1732],["\nStructure UI with UXML\n",1732],["\nStructure UI with C# scripts\n",1732],["\nUXML elements Reference\n",1732],["Work with text",1733],["Text objects are defined by the following attributes of a UI control:",1733],["\nThe text attribute of some UI controls, such as Label or TextElement, that sets the display text.\n",1733],["\nThe value attribute of the TextField that accepts the input text, and the label attribute that sets the display text for TextField.\n",1733],["You can use USS text properties to style text, such as set the font size and color, etc.",1733],["You can also add a new font to style text. Convert fonts to font assets before you use them in your project. In addition to USS styling, you can use rich text tags to style certain words in a text string.",1733],["Topic Description ",1733],["-------------------- ----------------------- ",1733],["Get started with text Learn how to style text, create fonts, and style with rich text tags and style sheets by examples. ",1733],["Style text with USS Style text with USS text properties inline in UXML, a USS file, or directly in UI Builder. ",1733],["Style text with rich text tags Style words between tags in a text string. ",1733],["Supported rich text tags Find all the supported rich text tags. ",1733],["Font assets Understand different font assets and all their properties. ",1733],["Style sheet assets Create custom text styles to extend the rich text tags. ",1733],["Include sprites in text Create sprite assets to interpret emoji characters and include them in text. ",1733],["Color gradients Create color gradients to apply up to four colors for each character in a text string. ",1733],["Panel Text Settings assets Referenced by a Panel Settings asset and controls the default values for all text objects used within that Panel. ",1733],["Fallback font Add fallback font for missing character in a font asset. ",1733],["Wrap content inside a scroll view",1734],["Version**: 2021.3+",1734],["This example demonstrates how to use styles to wrap content inside a scroll view. For demonstration purposes, this guide is for the Editor UI. However, the instructions on styling the scroll view also apply to runtime UI.",1734],["Example overview",1734],["This example creates a custom Editor window with two scroll views:",1734],["\nOne has a label inside it. The text of the label displays in a line and displays to the next line if the line is full.\n",1734],["\nOne has 15 buttons inside it. The buttons display in a row and display to the next line if the row is full.\n",1734],["To wrap text of the label inside the scroll view, apply style to the Label control, and use a VisualElement to holder the label.",1734],["To wrap elements inside the scroll view, apply style to the content container of the scroll view.",1734],["You can find the completed files that this example creates in this GitHub repository.",1734],["Prerequisites",1734],["\nUXML\n",1734],["\nUSS\n",1734],["\nUI Builder\n",1734],["\nScrollView\n",1734],["Create the custom Editor window",1734],["To try the example, first create a custom Editor window with some default content.",1734],["Create a Unity project with any template.",1734],["Right-click in the Project window, and then select Create > UI Toolkit > Editor Window.",1734],["In the C# box of the UI Toolkit Editor Window Creator window, enter ScrollViewExample.",1734],["Select Confirm. This creates three files: ScrollViewExample.cs, ScrollViewExample.uxml, and ScrollViewExample.uss.",1734],["Create the scroll view",1734],["Define the basic scroll view structure in the UI Document (UXML file), style the visual elements in the USS file, and add 15 buttons inside the second scroll view in the C# script.",1734],["Replace the content of ScrollViewExample.uxml with the following:",1734],["```lang-xml",1734],["",1734],["",1734],["",1734],["",1734],["",1734],["",1734],["",1734],["",1734],["",1734],["Replace the content of ScrollViewExample.uss with the following:",1734],["```lang-css",1734],["Label {",1734],["font-size: 20px;",1734],["-unity-font-style: bold;",1734],["color: rgb(68, 138, 255);",1734],["/* Style to wrap text of the label */",1734],["white-space: normal;",1734],["/* Style to wrap elements inside the scroll view */",1734],["scroll-view-wrap-example .unity-scroll-view__content-container {",1734],["flex-direction: row;",1734],["flex-wrap: wrap;",1734],["Button {",1734],["width: 50px;",1734],["height: 50px;",1734],["Replace the content of ScrollViewExample.cs with the following:",1734],["```lang-csharp",1734],["using UnityEditor;",1734],["using UnityEngine;",1734],["using UnityEngine.UIElements;",1734],["using UnityEditor.UIElements;",1734],["public class ScrollViewExample : EditorWindow",1734],["[MenuItem(\"Example/ScrollView Wrapping Example\")]",1734],["public static void ShowExample()",1734],["var wnd = GetWindow();",1734],["public void CreateGUI()",1734],["// Each editor window contains a root VisualElement object.",1734],["VisualElement root = rootVisualElement;",1734],["// Import UXML.",1734],["var visualTree = AssetDatabase.LoadAssetAtPath(\"Assets/Editor/ScrollViewExample.uxml\");",1734],["VisualElement ScrollViewExample = visualTree.Instantiate();",1734],["root.Add(ScrollViewExample);",1734],["// Find the scroll view by name.",1734],["VisualElement scrollview = root.Query(\"scroll-view-wrap-example\");",1734],["// Add 15 buttons inside the scroll view.",1734],["for (int i = 0; i < 15; i++)",1734],["Button button = new Button();",1734],["button.text = \"Button\";",1734],["scrollview.Add(button);",1734],["To test the scroll view wrapping, from the menu, select Example > ScrollView Wrapping Example.",1734],["Additional resources",1734],["\nUQuery\n",1734],["\nScrollView\n",1734],["Introduction to UXML",1735],["The UXML format is inspired by HTML, XAML, and XML. If you've worked with these formats before, you'll find similarities in UXML. However, the UXML format includes small differences to provide an efficient way to work with Unity. This page introduces the format of UXML by an example.",1735],["The following is an example UXML file. It contains several built-in UI controls that prompt the user to make a choice:",1735],["```lang-xml",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["",1735],["UXML declaration",1735],["The first line of code in the above UXML example is the UXML declaration. The declaration is optional. If you do include the UXML declaration, you must put it on the first line. A UXML declaration requires a version. The encoding attribute is optional in a UXML declaration. If you include the encoding attribute, you must declare the character encoding of the file.",1735],["Document root",1735],["The next line defines the document root, <UXML>. The <UXML> element includes attributes for the namespace prefix definitions and the location of schema definition files. You can specify these attributes in any order.",1735],["Namespace",1735],["In UI Toolkit, each element is defined in either the UnityEngine.UIElements or the UnityEditor.UIElements namespace:",1735],["\nThe UnityEngine.UIElements namespace contains elements that are defined as part of the Unity runtime.\n",1735],["\nThe UnityEditor.UIElements namespace contains elements that are available in the Unity Editor. To fully specify an element, you must prefix it with its namespace.\n",1735],["For example, if you want to use the Button element in your UXML template, you must specify <UnityEngine.UIElements:Button />.",1735],["To make specifying namespaces easier, you can define a namespace prefix. For example, xmlns:engine=\"UnityEngine.UIElements\" defines the engine prefix as UnityEngine.UIElements. Once you define a namespace prefix, you can use it to specify namespaces. For example, <engine:Button /> is equivalent to <UnityEngine.UIElements:Button />",1735],["You can also define a default namespace by excluding a prefix. For example, xmlns=\"UnityEngine.UIElements\" defines UnityEngine.UIElements as the default namespace. This means that specifying, for example, <Button /> is equivalent to <UnityEngine.UIElements:Button />",1735],["To create a UXML file with automatically defined namespaces, select Asset > Create > UI Toolkit > UI Document.",1735],["Note**: If you define your own elements, don't define the custom control class in the UnityEngine.UIElements or UnityEditor.UIElements namespace. Otherwise, UI Builder will hide your custom controls.",1735],["Schema definition",1735],["The schema definition validates your UXML files. It specifies which attributes and child elements each UXML element can contain.",1735],["In a UXML file, the xsi:noNamespaceSchemaLocation or the xsi:schemaLocation attributes of the <UXML> root element specify the location of the schema definition files.",1735],["To create a UXML file with the latest schema definition, select Assets > Create > UI Toolkit > UI Document. This creates a file with the xsi:noNamespaceSchemaLocation attribute for the root element.",1735],["Note**: If your text editor doesn't recognize the xsi:noNamespaceSchemaLocation attribute, use the xsi:schemaLocation attribute instead.",1735],["To force an update of the UXML schema definition, select Assets > Update UXML Schema.",1735],["UXML elements",1735],["The definition of the UI is within the <UXML> root. The UI definition is a series of nested UXML elements, each representing a visual element.",1735],["The element name corresponds to the C# class name of the element to instantiate. Most elements have attributes and their values are mapped to the corresponding class properties in C#. Each element has its own set of attributes in addition to the inherited attributes of its parent class. VisualElement is the base class for all elements and it provides the following attributes for all elements:",1735],["\nname: An identifier for the element. The name should be unique.\n",1735],["\npicking-mode: Set to either Position to respond to mouse events or Ignore to ignore mouse events.\n",1735],["\nfocus-index: (OBSOLETE) Use tabIndex and focusable.\n",1735],["\ntabindex: An integer that defines the tabbing position of the current element.\n",1735],["\nfocusable: A Boolean that indicates whether the element is focusable.\n",1735],["\nclass: A space-separated list of identifiers that characterize the element. Use classes to assign visual styles to elements. You can also use classes to select a set of elements in UQuery.\n",1735],["\ntooltip: A string that displays as a tooltip when the mouse hovers over the element.\n",1735],["\nview-data-key : A string that defines the key used for serialization of the element.\n",1735],["Additional resources",1735],["UI Toolkit",1736],["UI Toolkit is a collection of features, resources, and tools for developing user interface (UI). You can use UI Toolkit to develop custom UI and extensions for the Unity Editor, runtime debugging tools, and runtime UI for games and applications.",1736],["UI Toolkit is inspired by standard web technologies. If you have experience developing web pages or applications, your knowledge is transferable and the core concepts are familiar.",1736],["Note**: Unity recommends you to use UI Toolkit for your new UI development projects. However, Unity UI (uGUI) and IMGUI are appropriate for certain use cases, and are required to support deprecated projects. For more information, see the Comparison of UI systems in Unity.",1736],["UI system",1736],["The core of UI Toolkit is a retained-mode UI system based on recognized web technologies. It supports stylesheets, and dynamic and contextual event handling.",1736],["The UI system includes the following features:",1736],["\nVisual tree: An object graph, made of lightweight nodes, that holds all the elements in a window or panel. It defines every UI you build with the UI Toolkit.\n",1736],["\nControls: A library of standard UI controls such as buttons, popups, list views, and color pickers. You can use them as is, customize them, or create your own controls.\n",1736],["\nData binding system: A system links properties to the controls that modify their values.\n",1736],["\nLayout Engine: A layout system based on the CSS Flexbox model. It positions elements based on layout and styling properties.\n",1736],["\nEvent System: A system communicates user interactions to elements, such as input, touch and pointer interactions, drag-and-drop operations, and other event types. The system includes a dispatcher, a handler, a synthesizer, and a library of event types.\n",1736],["\nUI Renderer: A rendering system built directly on top of Unity’s graphics device layer.\n",1736],["\nEditor UI support: A set of components to create Editor UI.\n",1736],["\nRuntime UI Support: A set of components to create runtime UI.\n",1736],["UI assets",1736],["Use the following asset types to build UI similar to how you develop web applications:",1736],["\nUXML documents: HTML and XML inspired markup language defines the structure of UI and reusable UI templates. Although you can build interfaces directly in C# files, Unity recommends using UXML documents if possible.\n",1736],["\nUnity Style Sheets (USS): Style sheets apply visual styles and behaviors to UI. They're similar to Cascading Style Sheets (CSS) used on the web, and support a subset of standard CSS properties. Although you can apply styles directly in C# files, Unity recommends using USS files if possible.\n",1736],["UI tools and resources",1736],["Use the following tools to create and debug your interfaces, and learn how to use the UI Toolkit:",1736],["\nUI Debugger: A diagnostic tool that resembles a web browser's debugging view. Use it to explore a hierarchy of elements and get information about its underlying UXML structure and USS styles. You can find it in the Editor under Window > UI Toolkit > Debugger.\n",1736],["\nUI Builder: A UI tool lets you visually create and edit UI Toolkit assets such as UXML and USS files.\n",1736],["\nUI Samples: A library of code samples for UI controls that you can view in the Editor under Window > UI Toolkit > Samples.\n",1736],["UI How Tos",1737],["In this section you can learn about solutions to common UI tasks.",1737],["Interaction Components",1738],["This section covers components in the UI system that handles interaction, such as mouse or touch events and interaction using a keyboard or controller.",1738],["The interaction components are not visible on their own, and must be combined with one or more visual components in order to work correctly.",1738],["Common Functionality",1738],["Most of the interaction components have some things in common. They are selectables, which means they have shared built-in functionality for visualising transitions between states (normal, highlighted, pressed, disabled), and for navigation to other selectables using keyboard or controller. This shared functionality is described on the Selectable page.",1738],["The interaction components have at least one UnityEvent that is invoked when user interacts with the component in specific way. The UI system catches and logs any exceptions that propagate out of code attached to UnityEvent.",1738],["Button",1738],["A Button has an OnClick UnityEvent to define what it will do when clicked.",1738],["See the Button page for details on using the Button component.",1738],["Toggle",1738],["A Toggle has an Is On checkbox that determines whether the Toggle is currently on or off. This value is flipped when the user clicks the Toggle, and a visual checkmark can be turned on or off accordingly. It also has an OnValueChanged UnityEvent to define what it will do when the value is changed.",1738],["See the Toggle page for details on using the Toggle component.",1738],["Toggle Group",1738],["A Toggle Group can be used to group a set of Toggles that are mutually exclusive. Toggles that belong to the same group are constrained so that only one of them can be selected at a time - selecting one of them automatically deselects all the others.",1738],["See the Toggle Group page for details on using the Toggle Group component.",1738],["Slider",1738],["A Slider has a decimal number Value that the user can drag between a minimum and maximum value. It can be either horizontal or vertical. It also has a OnValueChanged UnityEvent to define what it will do when the value is changed.",1738],["See the Slider page for details on using the Slider component.",1738],["Scrollbar",1738],["A Scrollbar has a decimal number Value between 0 and 1. When the user drags the scrollbar, the value changes accordingly.",1738],["Scrollbars are often used together with a Scroll Rect and a Mask to create a scroll view. The Scrollbar has a Size value between 0 and 1 that determines how big the handle is as a fraction of the entire scrollbar length. This is often controlled from another component to indicate how big a proportion of the content in a scroll view is visible. The Scroll Rect component can automatically do this.",1738],["The Scrollbar can be either horizontal or vertical. It also has a OnValueChanged UnityEvent to define what it will do when the value is changed.",1738],["See the Scrollbar page for details on using the Scrollbar component.",1738],["Dropdown",1738],["A Dropdown has a list of options to choose from. A text string and optionally an image can be specified for each option, and can be set either in the Inspector or dynamically from code. It has a OnValueChanged UnityEvent to define what it will do when the currently chosen option is changed.",1738],["See the Dropdown page for details on using the Dropdown component.",1738],["Input Field",1738],["An Input Field is used to make the text of a Text Element editable by the user. It has a UnityEvent to define what it will do when the text content is changed, and an another to define what it will do when the user has finished editing it.",1738],["See the Input Field page for details on using the Input Field component.",1738],["Scroll Rect (Scroll View)",1738],["A Scroll Rect can be used when content that takes up a lot of space needs to be displayed in a small area. The Scroll Rect provides functionality to scroll over this content.",1738],["Usually a Scroll Rect is combined with a Mask in order to create a scroll view, where only the scrollable content inside the Scroll Rect is visible. It can also additionally be combined with one or two Scrollbars that can be dragged to scroll horizontally or vertically.",1738],["See the Scroll Rect page for details on using the Scroll Rect component.",1738],["UI Reference",1739],["This section goes into more depth about Unity’s UI features.",1739],["User interface (UI)",1740],["Unity provides three UI systems that you can use to create user interfaces (UI) for the Unity Editor and applications made in the Unity Editor:",1740],["\nUI Toolkit\n",1740],["\nThe Unity UI package (uGUI)\n",1740],["\nIMGUI\n",1740],["This page provides an overview of each.",1740],["UI Toolkit",1740],["UI Toolkit is the newest UI system in Unity. It's designed to optimize performance across platforms, and is based on standard web technologies. You can use UI Toolkit to create extensions for the Unity Editor, and to create runtime UI for games and applications.",1740],["UI Toolkit includes:",1740],["\nA retained-mode UI system that contains the core features and functionality required to create user interfaces.\n",1740],["\nUI Asset types inspired by standard web formats such as HTML, XML, and CSS. Use them to structure and style UI.\n",1740],["\nTools and resources for learning to use UI Toolkit, and for creating and debugging your interfaces.\n",1740],["Unity intends for UI Toolkit to become the recommended UI system for new UI development projects, but it is still missing some features found in Unity UI (uGUI) and IMGUI.",1740],["The Unity UI (uGUI) package",1740],["The Unity User Interface (Unity UI) package (also called uGUI) is an older, GameObject-based UI system that you can use to develop runtime UI for games and applications. In Unity UI, you use components and the Game view to arrange, position, and style the user interface. It supports advanced rendering and text features.",1740],["See the Unity UI package documentation for the manual and API reference.",1740],["IMGUI",1740],["Immediate Mode Graphical User Interface (IMGUI) is a code-driven UI Toolkit that uses the OnGUI function, and scripts that implement it, to draw and manage user interfaces. You can use IMGUI to create custom Inspectors for script components, extensions for the Unity Editor, and in-game debugging displays. It is not recommended for building runtime UI.",1740],["Choosing a UI system for your project",1740],["Unity intends for UI Toolkit to become the recommended UI system for new UI development projects, but it is still missing some features found in Unity UI (uGUI) and IMGUI. These older systems are better in certain use cases, and are required to support legacy projects.",1740],["Your choice of UI system for a given project depends on the kind of UI you plan to develop, and the features you need support for.",1740],["For a comparison of the available UI systems, see the Comparison of UI systems in Unity.",1740],["Visual Components",1741],["With the introduction of the UI system, new Components have been added that will help you create GUI specific functionality. This section will cover the basics of the new Components that can be created.",1741],["Text",1741],["The Text component, which is also known as a Label, has a Text area for entering the text that will be displayed. It is possible to set the font, font style, font size and whether or not the text has rich text capability.",1741],["There are options to set the alignment of the text, settings for horizontal and vertical overflow which control what happens if the text is larger than the width or height of the rectangle, and a Best Fit option that makes the text resize to fit the available space.",1741],["Image",1741],["An Image has a Rect Transform component and an Image component. A sprite can be applied to the Image component under the Target Graphic field, and its colour can be set in the Color field. A material can also be applied to the Image component. The Image Type field defines how the applied sprite will appear, the options are:",1741],["Simple** - Scales the whole sprite equally.",1741],["Sliced** - Utilises the 3x3 sprite division so that resizing does not distort corners and only the center part is stretched.",1741],["Tiled** - Similar to Sliced, but tiles (repeats) the center part rather than stretching it. For sprites with no borders at all, the entire sprite is tiled.",1741],["Filled** - Shows the sprite in the same way as Simple does except that it fills in the sprite from an origin in a defined direction, method and amount.",1741],["The option to Set Native Size, which is shown when Simple or Filled is selected, resets the image to the original sprite size.",1741],["Images can be imported as UI sprites by selecting Sprite( 2D / UI) from the 'Texture Type' settings. Sprites have extra import settings compared to the old GUI sprites, the biggest difference is the addition of the sprite editor. The sprite editor provides the option of 9-slicing the image, this splits the image into 9 areas so that if the sprite is resized the corners are not stretched or distorted.",1741],["Raw Image",1741],["The Image component takes a sprite but Raw Image takes a texture (no borders etc). Raw Image should only be used if necessary otherwise Image will be suitable in the majority of cases.",1741],["Mask",1741],["A Mask is not a visible UI control but rather a way to modify the appearance of a control’s child elements. The mask restricts (ie, “masks”) the child elements to the shape of the parent. So, if the child is larger than the parent then only the part of the child that fits within the parent will be visible.",1741],["Effects",1741],["Visual components can also have various simple effects applied, such as a simple drop shadow or outline. See the UI Effects reference page for more information.",1741],["Understanding the View Frustum",1742],["The word frustum refers to a solid shape that looks like a pyramid with the top cut off parallel to the base. This is the shape of the region that can be seen and rendered by a perspective camera. The following thought experiment should help to explain why this is the case.",1742],["Imagine holding a straight rod (a broom handle or a pencil, for example) end-on to a camera and then taking a picture. If the rod were held in the centre of the picture, perpendicular to the camera lens, then only its end would be visible as a circle on the picture; all other parts of it would be obscured. If you moved it upward, the lower side would start to become visible but you could hide it again by angling the rod upward. If you continued moving the rod up and angling it further upward, the circular end would eventually reach the top edge of the picture. At this point, any object above the line traced by the rod in world space would not be visible on the picture.",1742],["The rod could just as easily be moved and rotated left, right, or down or any combination of horizontal and vertical. The angle of the \"hidden\" rod simply depends on its distance from the centre of the screen in both axes.",1742],["The meaning of this thought experiment is that any point in a camera's image actually corresponds to a line in world space and only a single point along that line is visible in the image. Everything behind that position on the line is obscured.",1742],["The outer edges of the image are defined by the diverging lines that correspond to the corners of the image. If those lines were traced backwards towards the camera, they would all eventually converge at a single point. In Unity, this point is located exactly at the camera's transform position and is known as the centre of perspective. The angle subtended by the lines converging from the top and bottom centres of the screen at the centre of perspective is called the field of view (often abbreviated to FOV).",1742],["As stated above, anything that falls outside the diverging lines at the edges of the image will not be visible to the camera, but there are also two other restrictions on what it will render. The near and far clipping planes are parallel to the camera's XY plane and each set at a certain distance along its centre line. Anything closer to the camera than the near clipping plane and anything farther away than the far clipping plane will not be rendered.",1742],["The diverging corner lines of the image along with the two clipping planes define a truncated pyramid - the view frustum.",1742],["The far clipping plane and floating point math",1742],["Objects, lights, and shadows might flicker if they're far away. The flickering occurs because distances are too large to calculate positions precisely with floating point math. In each frame, the object, light, or shadow is at a slightly different position, so it moves in and out of the view frustum.",1742],["Minimise flickering using one of the following approaches:",1742],["\nReduce the far clipping plane distance in the Camera component to avoid the distance of objects becoming too large for precise calculations.\n",1742],["\nMake everything in your scene smaller, to reduce distances across your whole scene.\n",1742],["Unity calculates lights and shadows with the world space position as the reference point, for example 0, 0, 0 in a 3D scene. Flickering occurs when lights and shadows are far away from the world space position. To minimise flickering, you can enable camera-relative culling, so Unity uses the camera position as the relative position for shadow calculations. See Culling settings in Graphics settings.",1742],["Undo",1743],["The Undo History window provides a visual way of navigating through your undo history, or undoing or redoing multiple actions in the Editor at once.",1743],["Undoing and redoing actions",1743],["To open the Undo History window, click the Undo icon (), or choose Edit > Undo History.",1743],["Select an entry in the Undo History window to revert your project back to that point automatically.",1743],["Once you have selected an action, redoable actions are indicated with a red line. Click any of the actions to add them back.",1743],["Changing action ordering",1743],["To change the order that actions are sorted in the Undo window, open the More Options (:) menu in the Undo History window and choose to show the latest action first or last.",1743],["Multiplayer and Networking",1744],["",1744],["",1744],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1744],["Unity Multiplayer remains under development, and UNet is a deprecated solution that is not recommended relative to other solutions. If you want to include multiplayer elements in your application the following solutions are available:",1744],["GameObjects networking",1744],["The Unity open-source MLAPI solution is being developed to become the new Unity netcode foundation. It is customizable and adaptable for the needs of many multiplayer game types. For more information on this experimental package, see the MLAPI documentation.",1744],["You can also use a wide variety of third-party solutions. For more information, see the Unity blog post on Choosing the right netcode for your game.",1744],["ECS-based networking",1744],["For an ECS-based solution, see the DOTS Netcode package. Note: The Entities core system is experimental.",1744],["Multiplayer Classes Reference",1745],["",1745],["",1745],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1745],["You can create scripts which inherit from these classes to customise the way Unity's networking works.",1745],["The NetworkBehaviour class works with GameObjects that have a Network Identity component. These scripts can perform high-level API functions such as Commands, ClientRPCs, SyncEvents and SyncVars.",1745],["The NetworkClient class manages a network connection from a client to a server, and can send and receive messages between the client and the server.",1745],["The NetworkConnection encapsulates a network connection. (NetworkClient)[class-NetworkClient] objects have a NetworkConnection, and NetworkServers have multiple connections - one from each client. NetworkConnections have the ability to send byte arrays, or serialized objects as network messages.",1745],["The NetworkServer manages connections from multiple clients, and provides game-related functionality such as spawning, local clients, and player manager.",1745],["The NetworkServerSimple is a basic server class with no game-related functionality. While the NetworkServer class handles game-like things such as spawning, local clients, and player manager, and has a static interface, the NetworkServerSimple class is a pure network server with no game related functionality. It also has no static interface or singleton, so more than one instance can exist in a process at a time.",1745],["Converting a single-player game to Unity Multiplayer",1746],["",1746],["",1746],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1746],["This document describes steps to converting a single player game to a multiplayer game, using the new Unity Multiplayer networking system. The process described here is a simplified, higher level version of the actual process for a real game; it doesn't always work exactly like this, but it provides a basic recipe for the process.",1746],["NetworkManager set-up",1746],["Add a new GameObject to the Scene and rename it \"NetworkManager\".",1746],["Add the NetworkManager component to the \"NetworkManager\" GameObject.",1746],["Add the NetworkManagerHUD component to the GameObject. This provides the default UI for managing the network game state.",1746],["See Using the NetworkManager.",1746],["Player Prefab set-up",1746],["Find the Prefab for the player GameObject in the game, or create a Prefab from the player GameObject",1746],["Add the NetworkIdentity component to the player Prefab",1746],["Check the LocalPlayerAuthority box on the NetworkIdentity",1746],["Set the playerPrefab in the NetworkManager's Spawn Info section to the player Prefab",1746],["Remove the player GameObject instance from the Scene if it exists in the Scene",1746],["Player movement",1746],["Add a NetworkTransform component to the player Prefab",1746],["Update input and control scripts to respect isLocalPlayer",1746],["Fix Camera to use spawned player and isLocalPlayer",1746],["For example, this script only processes input for the local player:",1746],["using UnityEngine;",1746],["using UnityEngine.Networking;",1746],["public class Controls : NetworkBehaviour",1746],["void Update()",1746],["if (!isLocalPlayer)",1746],["// exit from update if this is not the local player",1746],["return;",1746],["// handle player input for movement",1746],["Basic player game state",1746],["Make scripts that contain important data into NetworkBehaviours instead of MonoBehaviours",1746],["Make important member variables into SyncVars",1746],["Networked actions",1746],["Make scripts that perform important actions into NetworkBehaviours instead of MonoBehaviours",1746],["Update functions that perform important player actions to be commands",1746],["Non-player GameObjects",1746],["Fix non-player prefabs such as enemies:",1746],["Add the NetworkIdentify component",1746],["Add the NetworkTransform component",1746],["Register spawnable Prefabs with the NetworkManager",1746],["Update scripts with game state and actions",1746],["Spawners",1746],["Potentially change spawner scripts to be NetworkBehaviours",1746],["Modify spawners to only run on the server (use isServer property or the OnStartServer() function)",1746],["Call NetworkServer.Spawn() for created GameObjects",1746],["Spawn positions for players",1746],["Add a new GameObject and place it at player's start location",1746],["Add the NetworkStartPosition component to the new GameObject",1746],["Lobby",1746],["Create Lobby Scene",1746],["Add a new GameObject to the Scene and rename it to “NetworkLobbyManager”.",1746],["Add the NetworkLobbyManager component to the new GameObject.",1746],["Configure the Manager:",1746],["Scenes",1746],["Prefabs",1746],["Spawners",1746],["Debugging Information",1747],["",1747],["",1747],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1747],["Unity provides tools to get information about your game at run time. This information is useful for testing your multiplayer game.",1747],["When your game is running in the Editor in Play mode, the Network Manager HUD Inspector shows additional information about the state of the network at runtime. This includes:",1747],["Network connections",1747],["Active GameObjects on the server which have a Network Identity component",1747],["Active GameObjects on the client which have a Network Identity component",1747],["Client peers",1747],["Additionally, the Network Manager preview pane (at the bottom of the Inspector window) lists the registered message callback handlers.",1747],["Multiplayer Encryption Plug-ins",1748],["",1748],["",1748],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1748],["Unity Multiplayer can make use of an encryption Plug-in, so that all data you send over the network passes through the encryption plug-in before being sent. This allows you to protect your game against cheating by packet manipulation and attacks on your dedicated game servers.",1748],["Unity Multiplayer does not have a built-in encryption plug-in, so you must provide your own plug-in that implements an encryption algorithm, and which implements the mandatory functions listed further below.",1748],["The following diagram illustrates how Unity Multiplayer uses your encryption Plug-in, if you provide one.",1748],["How to use an Encryption Plug-in**",1748],["To instruct your game or app to use an encryption Plug-in, you must call UnityEngine.Networking.NetworkTransport.LoadEncryptionLibrary(path) where path is the path to your compiled plugin. Typically on Windows it will be string.Format(\"{0}/Plugins/UnetEncryption.dll\", Application.dataPath).",1748],["When you call this function, Unity checks the file exists, and that it implements all the mandatory functions (listed below). These are the functions that Unity's multiplayer system itself will call. If you create your own encryption plugin, you will likely need to add more functions that you call from your C# code. For example, to initialise your algorithm or to provide your plug-in with key values. You can do this in the usual way for native plugins callable from C#.",1748],["Note: The location of a plugin in the built version of your game is not necessarily the same as in your Assets folder, and it may differ between target platforms. You may need to write code that detects the current runtime environment and select the correct path based on that.",1748],["You can get a sample encryption plugin and a sample Unity project using it from Unity’s GitHub. This is provided to illustrate a starting point for implementing your own Plug-in.",1748],["Mandatory Functions**",1748],["Any encryption Plug-in you create or use must provide the following functions. Unity will fail to load the plug-in if it does not define these. These are the functions that will be called by the Unity runtime itself. Plugins will typically provide additional functions to be called from the user's C# code, for example for registering keys.",1748],["To Encrypt Data",1748],["int UNetEncryptionLib_Encrypt(",1748],["void * payload,",1748],["int payload_len,",1748],["void * dest,",1748],["int & dest_len,",1748],["int connection_id,",1748],["bool isConnect);",1748],["This function performs the encryption. This is called by Unity’s networking whenever a packet is to be sent over the network.",1748],["Parameters",1748],["payload is the data to be encrypted.",1748],["payload_len is the length of the payload buffer, in bytes.",1748],["dest is the buffer into which the plugin should write the encrypted data.",1748],["dest_len is the capacity in bytes of the dest buffer. The plugin must replace this value with the number of bytes actually written into dest.",1748],["connection_id is the local identifier of the connection.",1748],["isConnect is true if this packet is a connection request. When this is true, the plugin must have been told ahead of time (by game code) which key to use. When this is false, it is expected that the plugin already has a mapping from this value to a key to use. See the example plugin for an implementation.",1748],["Return value",1748],["Encrypt must return zero on success. On any other return value, the runtime will drop the packet without sending it.",1748],["To Decrypt Data",1748],["int UNetEncryptionLib_Decrypt(",1748],["void * payload,",1748],["int payload_len,",1748],["void * dest,",1748],["int & dest_len,",1748],["int & key_id);",1748],["This function performs the decryption. This is called by Unity networking whenever a packet is received from the network.",1748],["Parameters",1748],["payload is the received packet.",1748],["payload_len is the length in bytes of the payload buffer.",1748],["dest is the buffer into which the plugin should write the decrypted data.",1748],["dest_len is the capacity in bytes of the dest buffer. The plugin must replace this value with the number of bytes actually written into dest.",1748],["key_id is an integer identifier. The plugin should write a value that uniquely identifies the decryption key used. On the server this value will be passed back into ConnectionIdAssigned if a new connection is accepted.",1748],["Return value",1748],["Decrypt must return zero on success. On any other return value, the packet is dropped without being processed further.",1748],["SafeMaxPacketSize",1748],["unsigned short UNetEncryptionLib_SafeMaxPacketSize(",1748],["unsigned short mtu);",1748],["You should call this function from your game to modify ConnectionConfig.PacketSize (also known as the maximum transmission unit, or MTU) before calling NetworkTransport.AddHost.",1748],["For example, your game might normally use an MTU of 1000 bytes. If ConnectionConfig.PacketSize is set to 1000 bytes before passing it into NetworkTransport.AddHost (via HostConfig.DefaultConfig), then the NetworkTransport layer will send no more than 1000 bytes of cleartext in a single packet.",1748],["An encryption plugin will typically add some overhead due to header information placed before the payload, as well as rounding-up the payload to an encryption block size. For example, if you are sending 18 bytes of cleartext, and the plug-in needs to add 49 bytes of header and using AES to encrypt data with a block size of 16 bytes, then the algorithm would produce a packet of 81 bytes (18 bytes of cleartext rounds up to 32 bytes of ciphertext, and then an additional 49 bytes of header).",1748],["Unity calls this function to ensure that packets that are about to be sent do not go over the limit of what’s possible to send, given the network MTU and your encryption algorithm’s ciphertext expansion and padding.",1748],["Parameters",1748],["mtu is the maximum transmission unit. The largest packet size that you want the plugin to generate.",1748],["Return value",1748],["The maximum amount of cleartext that should be provided to a single call to Encrypt, in order for the plugin to generate packets not larger than the MTU.",1748],["You must set the maximum packet size in your connection config to tell Unity Multiplayer to split data up so that it fits your encryption requirements. If you notice that some of your messages do not successfully transmit over the network, it could be because they were dropped due to exceeding the maximum packet size.",1748],["ConnectionIdAssigned",1748],["void UNetEncryptionLib_ConnectionIdAssigned(",1748],["int key_id,",1748],["unsigned short connection_id);",1748],["This is called on the server when a new connection has been accepted and an ID assigned to it.",1748],["Parameters",1748],["key_id The key identifier, which was written by the corresponding previous call to Decrypt for this packet.",1748],["connection_id The connection id that will be used from this point forth. In particular, as a parameter to subsequent Encrypt calls when sending packets back to the client.",1748],["Setting up a multiplayer project",1749],["",1749],["",1749],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1749],["This page contains an overview of the most basic and common things you need when setting up a multiplayer project. In terms of what you require in your project, these are:",1749],["A Network Manager",1749],["A user interface (for players to find and join games)",1749],["Networked Player Prefabs (for players to control)",1749],["Scripts and GameObjects which are multiplayer-aware",1749],["There are variations on this list; for example, in a multiplayer chess game, or a real-time strategy (RTS) game, you don’t need a visible GameObject to represent the player. However, you might still want an invisible empty GameObject to represent the player, and attach scripts to it which relate to what the player is able to do.",1749],["This introductory page contains a brief description of each of the items listed above. However, each section links to more detailed documentation, which you need to continue reading to fully understand them.",1749],["There are also some important concepts that you need to understand and make choices about when building your game. These concepts can broadly be summarised as:",1749],["The relationship between a client, a server, and a host",1749],["The idea of authority over GameObjects and actions",1749],["The Network Manager",1749],["The Network Manager is responsible for managing the networking aspects of your multiplayer game. You should have one (and only one) Network Manager active in your Scene at a time.",1749],["Unity’s built-in Network Manager component wraps up all of the features for managing your multiplayer game into one single component. If you have custom requirements which aren’t covered by this component, you can write your own network manager in script instead of using this component. If you’re just starting out with multiplayer games, you should use this component.",1749],["To learn more, see documentation on the Network Manager.",1749],["A user interface for players to find and join games",1749],["Almost every multiplayer game provides players with a way to discover, create, and join individual game \"instances\" (also known as “matches”). This part of the game is commonly known as the “lobby”, and sometimes has extra features like chat.",1749],["Unity has an extremely basic built-in version of such an interface, called the NetworkManagerHUD. It can be extremely useful in the early stages of creating your game, because it allows you to easily create matches and test your game without needing to implement your own UI. However, it is very basic in both functionality and visual design, so you should replace this with your own UI before you finish your project.",1749],["To learn more, see documentation on the Network Manager HUD.",1749],["Networked player GameObjects",1749],["Most multiplayer games feature some kind of object that a player can control, like a character, a car, or something else. Some multiplayer games don’t feature a single visible \"player object\" but instead allow a player to control many units or items, like in chess or real-time strategy games. Others don’t even feature specific objects at all, like a shared-canvas painting game. In all of these situations, however, you usually need to create a GameObject that *conceptually *represents the player in your game. Make this GameObject a Prefab, and attach all the scripts to it which control what the player can do in your game.",1749],["If you are using Unity’s Network Manager component (see The Network Manager, above), assign the Prefab to the Player Prefab field.",1749],["When the game is running, the Network Manager creates a copy (an \"instance\") of your player Prefab for each player that connects to the match.",1749],["However - and this is where it can get confusing for people new to multiplayer programming - you need to make sure the scripts on your player Prefab instance are \"aware\" of whether the player controlling the instance is using the host computer (the computer that is managing the game) or a client computer (a different computer to the one that is managing the game).",1749],["This is because both situations will be occurring at the same time.",1749],["Multiplayer-aware Scripts",1749],["Writing scripts for a multiplayer game is different to writing scripts for a single-player game. This is because when you write a script for a multiplayer game, you need to think about the different contexts that the scripts run in.",1749],["For example, the scripts you place on your player Prefab should allow the \"owner\" of that player instance to control it, but it should not allow other people to control it.",1749],["You need to think about whether the server or the client has authority over what the script does. Sometimes, you want the script to run on both the server and the clients. Other times, you only want the script to run on the server, and you only want the clients to replicate how the GameObjects are moving (for example, in a game in which players pick up collectible GameObjects, the script should only run on the server so that the server can be the authority on the number of GameObjects collected).",1749],["Depending on what your script does, you need to decide which parts of your script should be active in which situations.",1749],["For player GameObjects, each person usually has active control over their own player instance. This means each client has local authority over its own player, and the server accepts what the client tells it about what the player is doing.",1749],["For non-player GameObjects, the server usually has authority over what happens (such as whether an item has been collected), and all clients accept what the server tells them about what has happened to that GameObject.",1749],["Using the Network Manager",1750],["",1750],["",1750],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1750],["The Network Manager is a component for managing the networking aspects of a multiplayer game.",1750],["The Network Manager features include:",1750],["Game state management",1750],["Spawn management",1750],["Scene management",1750],["Debugging information",1750],["Matchmaking",1750],["Customization",1750],["Getting Started with the Network Manager",1750],["The Network Manager is the core controlling component of a multiplayer game. To get started, create an empty GameObject in your starting Scene, and add the NetworkManager component. The newly added Network Manager component looks like this:",1750],["The Inspector for the Network Manager in the Editor allows you to configure and control many things related to networking.",1750],["Note**: You should only ever have one active Network Manager in each Scene. Do not place the Network Manager component on a networked GameObject (one which has a Network Identity component), because Unity disables these when the Scene loads.",1750],["If you are already familiar with multiplayer game development, you might find it useful to know that the Network Manager component is implemented entirely using the High-level API (HLAPI), so everything it does is also available to you through scripting. For advanced users, if you find that you need to expand on the Network Manager component’s features, you can use scripting to derive your own class from NetworkManager and customize its behaviour by overriding any of the virtual function hooks that it provides. However, the Network Manager component wraps up a lot of useful functionality into a single place, and makes creating, running and debugging multiplayer games as simple as possible.",1750],["Game state management",1750],["A Networking multiplayer game can run in three modes - as a client, as a dedicated server, or as a \"Host\" which is both a client and a server at the same time.",1750],["If you’re using the Network Manager HUD, it automatically tells the Network Manager which mode to start in, based on which options the player selects. If you’re writing your own UI that allows the player to start the game, you’ll need to call these from your own code. These methods are:",1750],["Whichever mode the game starts in (client, server, or host), the Network Address and Network Port properties are used. In client mode, the game attempts to connect to the address and port specified. In server or host mode, the game listens for incoming connections on the port specified.",1750],["During development of your game, it can be useful to put a fixed address and port setting into these properties. However, eventually you might want your players to be able to choose the host they want to connect to. When you get to that stage, the Network Discovery component can be used for broadcasting and finding addresses and ports on a local area network (LAN), and the Matchmaker service can be used for players to find internet matches to connect to (see Multiplayer Service).",1750],["Spawn management",1750],["Use the Network Manager to manage the spawning (networked instantiation) of networked GameObjects from Prefabs.",1750],["Most games have a Prefab which represents the player, so the Network Manager has a Player Prefab slot. You should assign this slot with your player Prefab. When you have a player Prefab set, a player GameObject is automatically spawned from that Prefab for each user in the game. This applies to the local player on a hosted server, and remote players on remote clients. You must attach a Network Identity component to the Player Prefab.",1750],["Once you have assigned a player Prefab, you can start the game as a host and see the player GameObject spawn. Stopping the game destroys the player GameObject. If you build and run another copy of the game and connect it as a client to localhost, the Network Manager makes another player GameObject appear. When you stop that client, it destroys that player’s GameObject.",1750],["In addition to the player Prefab, you must also register other Prefabs that you want to dynamically spawn during gameplay with the Network Manager.",1750],["You can add Prefabs to the list shown in the inspector labelled Registered Spawnable Prefabs. You can also can register prefabs via code, with the ClientScene.RegisterPrefab() method.",1750],["If you have only one Network Manager, you need to register to it all prefabs which might be spawned in any Scene. If you have a separate Network Manager in each Scene, you only need to register the prefabs relevant for that Scene.",1750],["Customizing Player Instantiation",1750],["The Network Manager spawns player GameObjects using its implementation of NetworkManager.OnServerAddPlayer(). If you want to customize the way player GameObjects are created, you can override that virtual function. This code shows an example of the default implementation:",1750],["public virtual void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)",1750],["var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity);",1750],["NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);",1750],["Note: **If you are implementing a custom version of OnServerAddPlayer, the method NetworkServer.AddPlayerForConnection() must be called for the newly created player GameObject, so that it is spawned and associated with the client’s connection. AddPlayerForConnection spawns the GameObject, so you do not need to use NetworkServer.Spawn().",1750],["Start positions",1750],["To control where players are spawned, you can use the Network Start Position component. To use these, attach a Network Start Position component to a GameObject in the Scene, and position the GameObject where you would like one of the players to start. You can add as many start positions to your Scene as you like. The Network Manager detects all start positions in your Scene, and when it spawns each player instance, it uses the position and orientation of one of them.",1750],["The Network Manager has a Player Spawn Method property, which allows you to configure how start positions are chosen.",1750],["Choose Random to spawn players at randomly chosen startPosition options.",1750],["Choose Round Robin to cycle through startPosition options in a set list.",1750],["If the Random or Round Robin modes don’t suit your game, you can customize how the start positions are selected by using code. You can access the available Network Start Position components by the list NetworkManager.startPositions, and you can use the helper method GetStartPosition() on the Network Manager that can be used in implementation of OnServerAddPlayer to find a start position.",1750],["Scene management",1750],["Most games have more than one Scene. At the very least, there is usually a title screen or starting menu Scene in addition to the Scene where the game is actually played. The Network Manager is designed to automatically manage Scene state and Scene transitions in a way that works for a multiplayer game.",1750],["There are two slots on the NetworkManager Inspector for scenes: the Offline Scene and the Online Scene. Dragging Scene assets into these slots activates networked Scene management.",1750],["When a server or host is started, the Online Scene is loaded. This then becomes the current network Scene. Any clients that connect to that server are instructed to also load that Scene. The name of this Scene is stored in the networkSceneName property.",1750],["When the network is stopped, by stopping the server or host or by a client disconnecting, the offline Scene is loaded. This allows the game to automatically return to a menu Scene when disconnected from a multiplayer game.",1750],["You can also change Scenes while the game is active by calling NetworkManager.ServerChangeScene(). This makes all the currently connected clients change Scene too, and updates networkSceneName so that new clients also load the new Scene.",1750],["While networked Scene management is active, any calls to game state management functions such as NetworkManager.StartHost() or NetworkManager.StopClient() can cause Scene changes. This applies to the runtime control UI. By setting up Scenes and calling these methods, you can control the flow of your multiplayer game.",1750],["Note that Scene changes cause all the GameObjects in the previous Scene to be destroyed.",1750],["You should normally make sure the Network Manager persists between Scenes, otherwise the network connection is broken upon a Scene change. To do this, ensure the Don’t Destroy On Load box is checked in the Inspector. However it is also possible to have a separate Network Manager in each Scene with different settings, which may be helpful if you wish to control incremental Prefab loading, or different Scene transitions.",1750],["Customization",1750],["There are virtual functions on the NetworkManager class that you can customize by creating your own derived class that inherits from NetworkManager. When implementing these functions, be sure to take care of the functionality that the default implementations provide. For example, in OnServerAddPlayer(), the function NetworkServer.AddPlayer must be called to activate the player GameObject for the connection.",1750],["These are all the callbacks that can happen for host/server and clients, in some cases it’s important to invoke the base class function to maintain default behaviour. To see the implementation itself you can view it in the networking bitbucket repository.",1750],["using UnityEngine;",1750],["using UnityEngine.Networking;",1750],["using UnityEngine.Networking.Match;",1750],["public class CustomManager : NetworkManager {",1750],["// Server callbacks",1750],["public override void OnServerConnect(NetworkConnection conn) {",1750],["Debug.Log(\"A client connected to the server: \" + conn);",1750],["public override void OnServerDisconnect(NetworkConnection conn) {",1750],["NetworkServer.DestroyPlayersForConnection(conn);",1750],["if (conn.lastError != NetworkError.Ok) {",1750],["if (LogFilter.logError) { Debug.LogError(\"ServerDisconnected due to error: \" + conn.lastError); }",1750],["Debug.Log(\"A client disconnected from the server: \" + conn);",1750],["public override void OnServerReady(NetworkConnection conn) {",1750],["NetworkServer.SetClientReady(conn);",1750],["Debug.Log(\"Client is set to the ready state (ready to receive state updates): \" + conn);",1750],["public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) {",1750],["var player = (GameObject)GameObject.Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);",1750],["NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);",1750],["Debug.Log(\"Client has requested to get his player added to the game\");",1750],["public override void OnServerRemovePlayer(NetworkConnection conn, PlayerController player) {",1750],["if (player.gameObject != null)",1750],["NetworkServer.Destroy(player.gameObject);",1750],["public override void OnServerError(NetworkConnection conn, int errorCode) {",1750],["Debug.Log(\"Server network error occurred: \" + (NetworkError)errorCode);",1750],["public override void OnStartHost() {",1750],["Debug.Log(\"Host has started\");",1750],["public override void OnStartServer() {",1750],["Debug.Log(\"Server has started\");",1750],["public override void OnStopServer() {",1750],["Debug.Log(\"Server has stopped\");",1750],["public override void OnStopHost() {",1750],["Debug.Log(\"Host has stopped\");",1750],["// Client callbacks",1750],["public override void OnClientConnect(NetworkConnection conn)",1750],["base.OnClientConnect(conn);",1750],["Debug.Log(\"Connected successfully to server, now to set up other stuff for the client...\");",1750],["public override void OnClientDisconnect(NetworkConnection conn) {",1750],["StopClient();",1750],["if (conn.lastError != NetworkError.Ok)",1750],["if (LogFilter.logError) { Debug.LogError(\"ClientDisconnected due to error: \" + conn.lastError); }",1750],["Debug.Log(\"Client disconnected from server: \" + conn);",1750],["public override void OnClientError(NetworkConnection conn, int errorCode) {",1750],["Debug.Log(\"Client network error occurred: \" + (NetworkError)errorCode);",1750],["public override void OnClientNotReady(NetworkConnection conn) {",1750],["Debug.Log(\"Server has set client to be not-ready (stop getting state updates)\");",1750],["public override void OnStartClient(NetworkClient client) {",1750],["Debug.Log(\"Client has started\");",1750],["public override void OnStopClient() {",1750],["Debug.Log(\"Client has stopped\");",1750],["public override void OnClientSceneChanged(NetworkConnection conn) {",1750],["base.OnClientSceneChanged(conn);",1750],["Debug.Log(\"Server triggered scene change and we've done the same, do any extra work here for the client...\");",1750],["The inspector for the NetworkManager provides the ability to change some connection parameters and timeouts. Some parameters have not been exposed here but can be changed through code.",1750],["using UnityEngine;",1750],["using UnityEngine.Networking;",1750],["public class CustomManager : NetworkManager {",1750],["// Set custom connection parameters early, so they are not too late to be enforced",1750],["void Start()",1750],["customConfig = true;",1750],["connectionConfig.MaxCombinedReliableMessageCount = 40;",1750],["connectionConfig.MaxCombinedReliableMessageSize = 800;",1750],["connectionConfig.MaxSentMessageQueueSize = 2048;",1750],["connectionConfig.IsAcksLong = true;",1750],["globalConfig.ThreadAwakeTimeout = 1;",1750],["Using the Network Manager HUD",1751],["",1751],["",1751],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1751],["Note: This documentation assumes that you understand fundamental networking concepts such as the relationship between a host, server and client.",1751],["Property: Function: ",1751],["Show Runtime GUI Tick this checkbox to show the Network Manager HUD GUI at run time. This allows you to reveal or hide it for quick debugging. ",1751],["GUI Horizontal Offset Set the horizontal pixel offset of the HUD, measured from the left edge of the screen. ",1751],["GUI Vertical Offset Set the vertical pixel offset of the HUD, measured from the top edge of the screen. ",1751],["The Network Manager HUD (\"heads-up display\") provides the basic functions so that people playing your game can start hosting a networked game, or find and join an existing networked game. Unity displays the Network Manager HUD as a collection of simple UI buttons in the Game view.",1751],["The Network Manager HUD is a quick-start tool to help you start building your multiplayer game straight away, without first having to build a user interface for game creation/connection/joining. It allows you to jump straight into your gameplay programming, and means you can build your own version of these controls later in your development schedule.",1751],["It is not, however, intended to be included in finished games. The idea is that these controls are useful to get you started, but you should create your own UI later on, to allow your players to find and join games in a way that suits your game. For example, you might want to stylize the design of the screens, buttons and list of available games to match the overall style of your game.",1751],["To start using the Network Manager HUD, create an empty GameObject in your Scene (menu: GameObject > Create Empty) and add the Network Manager HUD component to the new GameObject.",1751],["For a description of the properties shown in the inspector for the Network Manager HUD, see the Network Manager HUD reference page.",1751],["Using the HUD",1751],["The Network Manager HUD has two basic modes: LAN (Local Area Network) mode and Matchmaker mode. These modes match the two common types of multiplayer games. LAN mode is for creating or joining games hosted on a local area network (that is, multiple computers connected to the same network), and Matchmaker mode is for creating, finding and joining games across the internet (multiple computers connected to separate networks).",1751],["The Network Manager HUD starts in LAN mode, and displays buttons relating to hosting and joining a LAN-based multiplayer game. To switch the HUD to Matchmaker mode, click the Enable Match Maker (M) button.",1751],["Note**: Remember that the Network Manager HUD feature is a temporary aid to development. It allows you to get your multiplayer game running quickly, but you should replace it with your own UI controls when you are ready.",1751],["The Network Manager HUD in LAN mode",1752],["",1752],["",1752],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1752],["LAN Host",1752],["Click the LAN Host button to start a game as a host on the local network. This client is both the host *and *one of the players in the game. It uses the information from the Network Info section in the inspector to host the game.",1752],["When you click this button, the HUD switches to a simple display of network details, and a Stop (X) button which allows you to stop hosting the game and return to the main LAN menu.",1752],["When you have started a game as a host, other players of the game can then connect to the host to join the game.",1752],["Click the Stop (X) button to disconnect any players that are connected to the host player. Clicking Stop (X) also returns the HUD to the LAN menu.",1752],["LAN Client",1752],["To connect to a host on the local network, use the text field to the right of the LAN Client button to specify the address of the host. The default host address is \"localhost\", which means the client looks on its own computer for the game host. Click LAN Client (C) to attempt to connect to the host address you have specified.",1752],["Use the default “localhost” in this field if you are running multiple instances of your game on one computer, to test multiplayer interactivity. To do this, you can create a standalone build of your game, and then launch it multiple times on your computer. This is a common way to quickly test that your networked game interactions are functioning as you expect, without you needing to deploy your game to multiple computers or devices.",1752],["When you want to test your game on multiple machines within the same network (that is, on a LAN), you need to put the address of the person acting as host into the \"localhost*\"* text field.",1752],["The person acting as the host needs to tell their IP address to everyone running LAN clients, so that you can type this into the box.",1752],["Enter the IP address (or leave it as \"localhost\" if you are testing it on your own machine), then click LAN Client to attempt to connect to the host.",1752],["When the client is attempting to connect, the HUD displays a Cancel Connection Attempt button. Click this if you want to stop trying to connect to the host.",1752],["If the connection is successful, the HUD displays the Stop (X) button. Click this if you want to stop the game on the client and disconnect from the host:",1752],["Unity has a built-in Network Discovery system, which allows clients to automatically find hosts on the same local network. However, this is not built into the Network Manager HUD, so you need to enter the address manually. You can integrate the Network Discovery system into your game when you replace the Network Manager HUD with your own UI.",1752],["LAN Server Only",1752],["Click LAN Server Only to start a game which acts as a server that other clients can connect to, but which does not act as a client to the game itself. This type of game is often called a \"dedicated server\". A user cannot play the game on this particular instance of your game. All players must connect as clients, and nobody plays on the instance that is running as the server.",1752],["A dedicated server on a LAN results in better performance for all connected players, because the server doesn’t need to process a local player’s gameplay in addition to acting as server.",1752],["You might also choose this option if you want to host a game that can be played over the internet (rather than just within a local network), but want to maintain control of the server yourself - for example, to prevent cheating by one of the clients, because only the server has authority over the game. To do this, you would need to run the game in Server Only mode on a computer with a public IP address.",1752],["Enable Match Maker",1752],["Click Enable Match Maker (M) to change the HUD to Matchmaker mode. You need to use Matchmaker mode if you want to create or connect to games hosted on the internet using Unity’s Matchmaker multiplayer service. Click Enable Match Maker (M) to display the Matchmaker controls in the Network Manager HUD.",1752],["Note**: Remember that the Network Manager HUD feature is a temporary aid to development. It allows you to get your multiplayer game running quickly, but you should replace it with your own UI controls when you are ready.",1752],["The Network Manager HUD in Matchmaker mode",1753],["",1753],["",1753],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1753],["Matchmaker mode provides a simple interface that allows players to create, find and join matches hosted on Unity’s Multiplayer Service.",1753],["A \"match\" (also sometimes referred to as a game session, or a game instance), is a unique instance of your game hosted by Unity’s Multiplayer Service. With Unity’s Multiplayer Service, a certain limited number of players can join and play together. If lots of people are playing your game, you may have multiple matches, each with multiple players playing together.",1753],["In order to use Matchmaker mode, you must first enable Unity Multiplayer Service for your project. Once you have enabled Unity Multiplayer Service for your project, you can use the HUD in Matchmaker mode to create or connect to instances of your game (also sometimes referred to as \"matches\" or \"sessions\") hosted on the internet.",1753],["Create Internet Match**",1753],["Click Create Internet Match to start a new match. Unity’s Multiplayer Service creates a new instance of the game (a \"match\"), which other players can then find and join.",1753],["Find Internet Match",1753],["Click Find Internet Match to send a request to the Unity Multiplayer Service. The Unity Multiplayer Service returns a list of all matches that currently exist for this game.",1753],["For example, if two separate players connect, and create a match each named \"Match A\" and \"Match B\" respectively, when a third player connects and presses the Find Internet Match button, Match A and Match B are listed as available matches to join.",1753],["In the Network manager HUD, the available matches appear as a series of buttons, with the text \"Join Match: match name\" (where match name is the name chosen by the player who created the match).",1753],["To join one of the available matches, click on the \"Join Match: match name\" button for that match. Alternatively, click Back to Match Menu to go back to the Matchmaker menu.",1753],["When you replace the HUD with your own UI, there are better ways to list the available matches. Many multiplayer games display available matches in a scrollable list. You might want to make each entry on the list show the match name, the current and maximum number of players, and other information such as the match mode type, if your decide to make your game have different match modes (such as \"capture the flag\", \"1 vs 1\", or \"cooperative\").",1753],["Note**: There are some special characters which, if used in a match name, appear modified in the list of available matches in the Network manager HUD. These characters are:",1753],["Open square brace: [",1753],["percent symbol: %",1753],["Underscore: _",1753],["If a match name contains these characters, they are surrounded by square braces in the list of available matches. So a match named \"my_game\" is listed as \"my[_]game\".",1753],["Change MM Server",1753],["This button is designed for internal use by Unity engineers (for testing the Multiplayer service). It reveals buttons which assign one of three pre-defined URLs to the MatchMaker Host URI field in the Network Manager - \"local\", \"staging\" and \"internet\". However, the \"local\" and \"staging\"* *options are only intended for internal use by Unity engineers, and not intended for general use.",1753],["If you select the \"local\" or \"staging\" options, your game cannot connect to Unity’s Multiuser Service. Therefore you should always make sure this option is set to \"internet\" (which is the default).",1753],["MM Uri Display",1753],["This displays the current Matchmaker URI (Uniform Resource Identifier, a string of characters used for identification). To view the URI in the Inspector, navigate to the Network Manager component and see the MatchMaker Host URI field*. *By default this points to the global Unity Multiplayer Service, and for normal multiplayer games using the Unity Multiplayer Service. You should not need to change this. The Unity Multiplayer Service automatically groups the players of your game into regional servers around the world. This grouping ensures fast multiplayer response times between players in the same region, and means that players from Europe, the US, and Asia generally end up playing with other players from their same global region.",1753],["If you want to explicitly control which regional server your game connects to, override this value via scripting. For more information and for regional server URIs, see API reference documentation on NetworkMatch.baseUri.",1753],["For example, you might want to override the URI if you want to give your players the option of joining a server outside of their global region. If \"Player A\" in the US wants to connect to a match created via Matchmaker by \"Player B\" in Europe, they would need to be able to set their desired global region in your game. Therefore you would need to write a UI feature which allows them to select this.",1753],["Note**: Remember that the Network Manager HUD feature is a temporary aid to development. It allows you to get your multiplayer game running quickly, but you should replace it with your own UI controls when you are ready.",1753],["Multiplayer Overview",1754],["",1754],["",1754],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1754],["There are two kinds of users for the Networking feature:",1754],["Users making a Multiplayer game with Unity. These users should start with the NetworkManager or the High Level API.",1754],["Users building network infrastructure or advanced multiplayer games. These users should start with the NetworkTransport API.",1754],["High level scripting API",1754],["Unity's networking has a \"high-level\" scripting API (which we'll refer to as the HLAPI). Using this means you get access to commands which cover most of the common requirements for multiuser games without needing to worry about the \"lower level\" implementation details. The HLAPI allows you to:",1754],["Control the networked state of the game using a \"Network Manager\".",1754],["Operate \"client hosted\" games, where the host is also a player client.",1754],["Serialize data using a general-purpose serializer.",1754],["Send and receive network messages.",1754],["Send networked commands from clients to servers.",1754],["Make remote procedure calls (RPCs) from servers to clients.",1754],["Send networked events from servers to clients.",1754],["Engine and Editor integration",1754],["Unity's networking is integrated into the engine and the editor, allowing you to work with components and visual aids to build your multiplayer game. It provides:",1754],["A NetworkIdentity component for networked objects.",1754],["A NetworkBehaviour for networked scripts.",1754],["Configurable automatic synchronization of object transforms.",1754],["Automatic synchronization of script variables.",1754],["Support for placing networked objects in Unity scenes.",1754],["Internet Services",1754],["Unity offers Internet Services to support your game throughout production and release, which includes:",1754],["Matchmaking service",1754],["Create matches and advertise matches.",1754],["List available matches and join matches.",1754],["Relay server",1754],["Game-play over internet with no dedicated server.",1754],["Routing of messages for participants of matches.",1754],["NetworkTransport real-time transport layer",1754],["We include a Real-Time Transport Layer that offers:",1754],["Optimized UDP based protocol.",1754],["Multi-channel design to avoid head-of-line blocking issues",1754],["Support for a variety of levels of Quality of Service (QoS) per channel.",1754],["Flexible network topology that supports peer-to-peer or client-server architectures.",1754],["Authentication",1754],["Unity's networking implements simple built-in authentication features which provide basic support for validating sessions, but is not a robust authentication solution.",1754],["Robust authentication can be an important factor in developing a multiplayer project, as it helps to prevent malicious users from hijacking player sessions, impersonating other users, disconnecting legitimate players from games, or other malicious actions specific to your game or app.",1754],["Because Unity only provides simple built-in authentication, if you require robust protection against malicious actions in your game or app, you should use 3rd party authentication and encryption solutions, or implement them yourself using plugins such as this reference implementation and the NetworkTransport API.",1754],["Sample Projects",1754],["You can also dig into our multiplayer sample projects to see how these features are used together. The following sample projects can be found within this Unity Forum post:",1754],["Multiplayer 2D Tanks example game",1754],["Multiplayer Invaders game with Matchmaking",1754],["Multiplayer 2D space shooter with Matchmaking",1754],["Minimal Multiplayer project",1754],["Multiplayer Component Reference",1755],["",1755],["",1755],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1755],["This section gives details of the components used with the Unity multiplayer system.",1755],["Unity architecture",1756],["The Unity engine is built with native C/C++ internally, however it has a C# wrapper that you use to interact with it. As such, you need to be familiar with some of the key concepts of scripting in C#. This section of the User Manual contains information on how Unity implements .NET and C#, and any exceptions you might encounter as you code.",1756],["For information on how to get started scripting in Unity, and the fundamentals you need to know, see the documentation on Getting started scripting in Unity.",1756],["This section covers the following topics:",1756],["Page Description ",1756],["",1756],["Overview of .NET in Unity How the Unity engine uses the .NET framework, and any differences you might encounter if you have used .NET outside of Unity before. This area also contains information on how Unity manages memory, and how to reference additional profiles in your Project. ",1756],["Scripting backends Unity has two main scripting backends: Mono and IL2CPP. This section describes the differences between the backends and how and when to use them, plus their restrictions. It also contains information on managed code stripping, which removes unused code from your build. ",1756],["Code reloading in the Editor Information on domain reloads and how they impact on the performance of your application. Also contains information on running code on Editor launch, and how to quickly enter and exit Play mode with Configurable Enter Play Mode. ",1756],["Script serialization Serialization is the automatic process of transforming data structures or object states into a format that Unity can store and reconstruct later. This contains information on how to use serialization in your Project in an effective way. ",1756],["Script compilation How Unity compiles your scripts and in what order. Also contains information on Assembly Definitions and best practices around using them. ",1756],["The Unity linker",1757],["The Unity build process uses a tool called the Unity linker to strip managed code. The Unity linker is a version of the IL Linker customized to work with Unity. The custom Unity Engine specific parts of the Unity linker aren’t publicly available.",1757],["The Unity linker is responsible for both managed code stripping and part of the process of engine code stripping, which is a separate process available through the IL2CPP script backend that removes unused engine code. For more information, see PlayerSettings.StripEngineCode].",1757],["How the Unity linker works",1757],["The Unity linker analyzes all the assemblies in your project. First, it marks root types, methods, properties, and fields. For example, MonoBehaviour-derived classes you add to GameObjects in a Scene are root types. \\",1757],["The Unity linker then analyzes the roots it has marked to identify, and marks any managed code that these roots depend upon. Upon completion of this static analysis, any remaining unmarked code is unreachable by any execution path through your application code and the Unity linker deletes it from the assembly.",1757],["How the Unity linker strips assemblies",1757],["The Unity Editor creates a list of the assemblies that contain types used in any of the Scenes in your Unity project and passes this list to the Unity linker. The Unity linker then processes those assemblies, any references of those assemblies, any assemblies declared in a link.xml file, and any assemblies with the AlwaysLinkAssembly attribute. In general, the Unity linker doesn’t process assemblies included in your project that don’t fall under one of these categories, and excludes them from the Player build.",1757],["For each assembly the Unity linker processes, it follows a set of rules based on the classification of the assembly, whether the assembly contains types used in a Scene, and the Managed Stripping Level you have selected for the build.",1757],["For the purpose of these rules, assemblies fall into the following classifications:",1757],[".NET Class Library assemblies — Includes the Mono class libraries such as mscorlib.dll and System.dll, as well as .NET class library facade assemblies like netstandard.dll.",1757],["Platform SDK assemblies — Includes the managed assemblies specific to a platform SDK. For example, the windows.winmd assembly that is part of the Universal Windows Platform SDK.",1757],["Unity Engine Module assemblies — Includes the managed assemblies that make up the Unity Engine, such as UnityEngine.Core.dll.",1757],["Project assemblies — Includes the assemblies specific to a project such as:",1757],["Script assemblies such as Assembly-CSharp.dll",1757],["Precompiled assemblies",1757],["Package assemblies",1757],["Marking rules",1757],["When you build a project in Unity, the build process compiles your C# code to a .NET bytecode format called Common Intermediate Language (CIL). Unity packages this CIL byte code into files called assemblies. The .NET framework libraries and any C# libraries in the plugins you use in your project are also pre-packaged as assemblies of CIL bytecode.",1757],["When the Unity linker performs its static analysis, it follows sets of rules to determine which parts of the CIL bytecode the Unity linker marks as necessary for the build. Root marking rules determine how the Unity linker identifies and preserves top-level assemblies in the build. Dependency marking rules determine how the Unity linker identifies and preserves any code that the root assemblies depend on.",1757],["The Managed Stripping Level property changes the set of rules that the Unity linker uses. The following sections describe the marking rules for each possible setting for the Managed Stripping Level property.",1757],["Root marking rules",1757],["The following table describes how the Unity linker identifies the top-level types in an assembly:",1757],["Assembly type: Marking rules: ",1757],[":--- :--- :--- :--- :--- ",1757],[" __Minimal__ __Low__ __Medium__ __High__ \n",1757],[".NET Class & Platform SDK and UnityEngine Assemblies Applies precautionary preservations and any preservations defined in any link.xml file. Applies precautionary preservations and any preservations defined in any link.xml file. Applies any preservations defined in any link.xml file. Applies any preservations defined in any link.xml file. ",1757],["Assemblies with types referenced in a scene Marks all types and members in the assembly. Marks all types and members in the assembly. Marks the following:•All methods which have the [RuntimeInitializeOnLoadMethod] or [Preserve] attribute.•Preservations defined in any link.xml file.•Marks all types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. Marks the following:•All methods which have the [RuntimeInitializeOnLoadMethod] or [Preserve] attribute.•Preservations defined in any link.xml file.•Marks all types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. ",1757],["All other Marks all types and members in the assembly. Marks the following:•All public types and public members of those types.•All methods which have the [RuntimeInitializeOnLoadMethod] or [Preserve] attribute.•Preservations defined in any link.xml file.•All types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. Marks the following:•All public types and public members of those types.•All methods which have the [RuntimeInitializeOnLoadMethod] or [Preserve] attribute.•Preservations defined in any link.xml file.•All types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. Marks the following:•All methods which have the [RuntimeInitializeOnLoadMethod] or [Preserve] attribute.•Preservations defined in any link.xml file.•All types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. ",1757],["Test Marks any methods with the [UnityTest] attribute and any methods annotated with an Attribute defined in the NUnit.Framework. ",1757],["Dependency marking rules",1757],["After the Unity linker identifies the roots in an assembly, it needs to identify any code that those roots depend on. The following table describes how the Unity linker identifies dependencies of root types in an assembly:",1757],["Rule Target Action at each stripping level ",1757],[":--- :--- :--- :--- :--- ",1757],[" __Minimal__ __Low__ __Medium__ __High__ \n",1757],["MonoBehaviour The Unity linker marks all members of a MonoBehavior type when it marks the type. ",1757],["ScriptableObject The Unity linker marks all members of a ScriptableObject type when it marks the type. ",1757],["Attributes When the Unity linker marks an assembly, type or other code structure, it also marks all attributes of those structures. When the Unity linker marks an assembly, type or other code structure, it also marks all attributes of those structures. When the Unity linker marks an assembly, type or other code structure, it only marks attributes of those structures if the attribute type is also marked. When the Unity linker marks an assembly, type or other code structure, it only marks attributes of those structures if the attribute type is also marked. ",1757],["Debugging Attributes When script debugging is enabled, the Unity linker marks all members that have the [DebuggerDisplay] attribute, even when there isn't a code path that uses those members. When script debugging is enabled, the Unity linker marks all members that have the [DebuggerDisplay] attribute, even when there isn't a code path that uses those members. The Unity linker always removes debugging attributes such as DebuggerDisplayAttribute and DebuggerTypeProxyAttribute. The Unity linker always removes debugging attributes such as DebuggerDisplayAttribute and DebuggerTypeProxyAttribute. ",1757],[".NET Facade Class Library Removes facade assemblies since they aren't necessary at runtime. ",1757],["Link XML feature tag exclusions",1757],["Link.xml files support an uncommonly used “features” XML attribute. In the example, the mscorlib.xml file embedded in mscorlib.dll uses this attribute, but you can use it in any link.xml file, when appropriate.",1757],["When you use the High stripping level, the Unity linker excludes preservations for features that aren’t supported based on the settings for the current build:",1757],["remoting — Excluded when targeting the IL2CPP scripting backend.",1757],["sre — Excluded when targeting the IL2CPP scripting backend.",1757],["com — Excluded when targeting platforms that don’t support COM.",1757],["For example, the following link.xml file preserves one method of a type on platforms that support COM, and one method on all platforms:",1757],["```xml-doc",1757],["",1757],["",1757],["",1757],["",1757],["",1757],["",1757],["",1757],["",1757],["Editing of method bodies",1757],["When you use the High stripping level, the Unity linker edits method bodies to further reduce code size. This section summarizes some of the notable edits that the Unity linker makes to method bodies.",1757],["The Unity linker only edits method bodies in the .NET Class Library assemblies. After method body editing, the source code of the assembly no longer matches the compiled code in the assembly, which can make debugging more difficult.",1757],["The following list describes actions that the Unity linker can perform to edit a method body:",1757],["Remove unreachable branches - The Unity linker removes If-statement blocks that check System.Environment.OSVersion.Platform and aren’t reachable for the currently targeted platform.",1757],["Inline methods that only access fields - The Unity linker replaces calls to methods that get or set a field with direct access to the field. This often makes it possible to strip away the method entirely. When you use the Mono backend, the Unity linker only makes this change when the caller of the method is allowed to directly access the field, based on the field’s visibility. For IL2CPP, visibility rules don’t apply, so the Unity linker makes this change where appropriate.",1757],["Inline methods that return a const value - The Unity linker inlines calls to methods that only return a const value.",1757],["Remove empty non-returning calls - The Unity linker removes calls to methods that are empty and have a void return type.",1757],["Remove empty scope - The Unity linker removes Try/Finally blocks when the Finally block is empty. Removing empty calls can create empty Finally blocks. When that happens during method editing, Unity linker removes the entire Try/Finally block. One scenario where this can occur is when the compiler generates Try/Finally blocks as part of foreach loops in order to call Dispose().",1757],["Requirements and compatibility",1758],["Unity Remote supports Android, iOS, and tvOS devices.",1758],["Note**: Unity Remote replaces the iOS Remote and Android Remote applications from earlier versions of Unity. Unity no longer supports these older applications.",1758],["Set up Unity Remote",1758],["To set up Unity Remote:",1758],["Install the application on the target device.",1758],["Connect the target device to your computer.",1758],["Connect the Unity Editor to Unity Remote.",1758],["Install Unity Remote",1758],["Download the Unity Remote application rom the App Store.",1758],["Connect the target device to your computer",1758],["After you install Unity Remote on the target device, run Unity Remote then connect the target device to your computer. To do this for iOS or tvOS, use iTunes on Windows or a USB connection on OS X.",1758],["Connect Unity Remote to the Unity Editor",1758],["With the target device connected to your computer, the Unity Editor should be able to see it. To connect Unity Remote on the target device to the Unity Editor:",1758],["Open Editor settings (menu: Edit > Project Settings > Editor).",1758],["In the Unity Remote section, set Device to the device you want to use.",1758],["2D game development",1759],["While Unity is famous for its 3D capabilities, you can also use Unity to create 2D projects. Use this section to learn how to develop 2D projects in Unity, including how to use sprites, create Tilemaps, and use the 2D physics system in your projects.",1759],["Many areas of Unity’s documentation apply to both 2D and 3D development. This section focuses specifically on 2D-specific features and functionality. Refer to 2D or 3D Projects to decide what mode to create your project in. Refer to 2D and 3D mode settings for information on how the 2D and 3D modes differ.",1759],["Topic Description ",1759],[":--------------------------------------------------- :---------------------------------------------------------- ",1759],["Introduction to 2D Understand the available features of 2D projects in Unity. ",1759],["2D game development quickstart guide Create a 2D game with this quickstart guide. ",1759],["2D sorting Learn how sorting works in 2D projects. ",1759],["Work with sprites Use Sprites within your 2D game. ",1759],["Create Tilemaps Use the Tilemap system to create 2D levels. ",1759],["Physics 2D Reference Use Unity’s physics system to handle physics 2D components. ",1759],["Additional resources",1759],["Unity Accelerator",1760],["Overview",1760],["The Unity Accelerator is a caching proxy agent that keeps copies of a team's imported assets to speed up teamwork. The goal of the accelerator is to help teams reduce iteration time. An Accelerator coordinates asset sharing when your team is working on the same local network so that you don’t need to reimport portions of your project. This is done via the Asset Import Pipeline v2 Unity Editor capabilities.",1760],["When you install an Accelerator on your local network, the Unity Editor (version 2019.3 or higher; see Unity Editor requirements below) communicates with it to store and retrieve assets that other team members need, have changed, or built. The Accelerator keeps temporary copies of these assets to avoid wasting time and bandwidth retrieving or reimporting them.",1760],["Contents",1760],["",1760],["Installing an Accelerator",1760],["",1760],["Requirements",1760],["Local hosting requirements",1760],["Install an Accelerator on each network your team regularly works on. You must have a machine running on your local network that can host an Accelerator. When selecting a host, consider the following requirements:",1760],["The local host must run one of the following operating systems:",1760],["Linux (Ubuntu 16.04 or Ubuntu 18.04)",1760],["For Linux you must install Acccelerator as a root user.",1760],["Windows Server 2008R2 / Windows 7 or higher (64bit)",1760],["Mac OS X 10.12 or higher (64bit)",1760],["The local host must have sufficient local storage space to host most of your project's files, preferably on a solid-state drive separate from the drive that hosts your operating system.",1760],["The local host should have as much memory as is reasonably affordable. The minimum should be 2GB of RAM, but if more memory is available it will be used by the operating system to buffer cached items, resulting in higher performance for commonly accessed items. Usual recommendation is 32GB of RAM.",1760],["The local host must be attached to the same network as your team, or locally routable with appropriate firewall policies that allow access to the Accelerator's IP address and port (TCP).",1760],["Anyone with access to the host machine has access to your project’s files, regardless of permission structures within your Unity Organization. As such, Unity recommends restricting that machine so that only an Organization Owner or Manager can access and interact with the Accelerator.",1760],["Unity Editor requirements",1760],["Your Unity project must use version 2019.3 or higher of the Unity Engine.",1760],["",1760],["Installing an Accelerator via the Installer",1760],["You can download and install Unity Accelerator directly and uncheck the registration token during installation:",1760],["Download for Windows",1760],["Download for Mac OS X",1760],["Download for Linux",1760],["Note**: If installing Accelerator on a Linux system, see Verifying your Accelerator version.",1760],["You can also install the accelerator via Docker Hub.",1760],["Installing Accelerator on a \"headless\" machine",1760],["On each platform, you can run the installer from the command line. If you execute the installer with an argument of --help, it displays the various options available. To run a full install without any prompts, you should provide values for the following:",1760],["--storagedir sets the directory for the Accelerator to store files and configurations.",1760],["--registration-token specifies the token provided in the developer dashboard after creating the Accelerator.",1760],["Use --mode unattended for automated installations that should not query anything. This uses default values, or values from other option flags provided.",1760],["On Mac OS X, you need to mount the disk image (DMG) and run the binary located in the installer app's directory (located at Contents/MacOS/installbuilder.sh).",1760],["Configuring Editors to use an Accelerator",1760],["When installing an Accelerator, the final step of the setup wizard displays the IP address and Port to reference in your Editor, in the following format:",1760],["[IP]:[Port]",1760],["To configure your Editor to use that Accelerator as an Asset pipeline version 2 Cache Server, follow these steps:",1760],["In the Unity Editor, select Edit > Project Settings... (Windows) or Unity > Project Settings... (OSX).",1760],["Select Editor from the left menu.",1760],["Under the Cache Server section, set Mode to Enabled.",1760],["Fill in the IP address with Accelerator’s IP address from the setup wizard.",1760],["Press the Check Connection button to test connectivity.",1760],["You can optionally choose a different namespace prefix from the default, in case you wish to ensure isolation from other projects. You can also individually disable uploading or downloading as needed. For example, you might want a build system to only have uploading enabled, and developers' editors only have download enabled. Note the TLS/SSL option is only a feature in editor versions from 2020.1 onward and the accelerator must be configured for TLS as well.",1760],["In the main editor view, you can check the accelerator connectivity by looking at the status bar on the lower right (only in editor versions from 2020.1 onward):",1760],["If you'd like, you can configure the accelerator to use via the Global settings, which will be used by default for all projects unless overridden by the project settings. To configure the global settings, select the Edit > Preferences... menu item:",1760],["",1760],["Installing an Accelerator via Docker Hub",1760],["A container is provided on Docker Hub at https://hub.docker.com/repository/docker/unitytechnologies/accelerator.",1760],["First Time Setup",1760],["Unity recommends that you use a persistent storage area for hosting the Accelerator configuration and cache. To set this up for the first time, you will want to use one or more of the following variables when running the container for the first time (some examples will be below). The variables are only used if the startup does not find a configuration file so it's safe to run with them set on successive runs.",1760],["Variable Usage ",1760],["",1760],["DISABLE_USAGE_STATS Set to true to disable usage stats -- leaving usage stats enabled can help improve the Accelerator's features and performance by giving Unity valuable feedback. ",1760],["USER The user name for the local, built-in dashboard. ",1760],["PASSWORD The password for the local, built-in dashboard. ",1760],["CERT_HOSTNAME The hostname to use for TLS support. This is used for redirects, etc. and goes along with CERT_PEM and KEY_PEM below. ",1760],["CERT_PEM The path to a cert.pem to use for TLS support. If you set CERT_HOSTNAME but do not set CERT_PEM, \\/cert.pem will be assumed. ",1760],["KEY_PEM The path to a key.pem to use for TLS support. If you set CERT_HOSTNAME but do not set KEY_PEM, \\/key.pem will be assumed. ",1760],["To override TLS settings, ensure you have your cert.pem and key.pem in the /agent path specified and then include a CERT_HOSTNAME like this:",1760],["$ docker run --rm -ti -v \"${PWD}/agent:/agent\" -e 'CERT_HOSTNAME=myhostname.com' -e 'COLLAB_REGISTRATION_TOKEN=ft0bJvbRD' unitytechnologies/accelerator:latest",1760],["Subsequent Execution",1760],["You can also set any environment variables the accelerator would normally recognize. See unity-accelerator --all-help and look for options that indicate Default: $SOME_VARIABLE. There are two that the container will set if you do not:",1760],["variable usage ",1760],["",1760],["UNITY_ACCELERATOR_PERSIST Container default is /agent. This is the directory where unity-accelerator.cfg resides as well as other persisted data (cachedir possibly being different). ",1760],["UNITY_ACCELERATOR_LOG_STDOUT Container default is true. This, if true, will output logs to stdout only; false if you want actual log files written within the persist directory. ",1760],["Running the container",1760],["We sign our docker images so we strongly recommend you enable Docker Content Trust:",1760],["$ export DOCKER_CONTENT_TRUST=1",1760],["Normally, you should be able to run the Accelerator like the following:",1760],["$ docker run -p 80:80 -p 443:443 -p 10080:10080 -v \"${PWD}/agent:/agent\" unitytechnologies/accelerator:latest",1760],["However, If you would like to choose a different location for where the Accelerator will store the configuration and cached artifacts, you might choose to provide additional environment variable configuration values like this:",1760],["$ docker run -p 80:80 -p 443:443 -p 10080:10080 -v \"${PWD}/agent:/mnt/another_spot\" -e \"UNITY_ACCELERATOR_PERSIST=/mnt/another_spot\" -e \"UNITY_ACCELERATOR_DEBUG=true\" unitytechnologies/accelerator:latest",1760],["To set username and password for local dashboard, you can use USER and PASSWORD environment variables:",1760],["$ docker run -p 80:80 --env PASSWORD=[PASSWORD] --env USER=[USERNAME] unitytechnologies/accelerator:latest",1760],["Exposed Ports",1760],["The following are the default values for ports used by Unity Accelerator: 80, 443, 10080, 10443.",1760],["",1760],["Source asset security",1760],["When used with Unity Teams Advanced, each Accelerator receives its own security certificate to prove it has permission to access your Organization. Before an Accelerator uploads or downloads any content, the Unity Editor making the request uses SSL/TLS to securely connect to the Accelerator and verifies its authenticity. When Unity Editors discover and connect to an Accelerator, instead of passing a normal Unity user token, they receive a special token from the Unity Identity service. These tokens verify the user's identity and access to a single project within your Organization, thereby protecting access to any other Organizations and projects while using an Accelerator.",1760],["Alternatively you can provide the Accelerator Cache Server configuration details using command line arguments when launching the Unity Editor.",1760],["To specify that you want to use the Accelerator Cache Server, use the -EnableCacheServer argument, and to specify the address and port number, use -cacheServerEndpoint Address:Port, replacing Address and Port with the your Cache Server's details.",1760],["Note: The Accelerator Cache Server requires that your project uses Asset Database V2 (ADB2). You can force an upgrade to ADB2 when launching Unity from the commandline by using the -adb2 argument.",1760],["See command line arguments for more information.",1760],["",1760],["Monitoring Accelerators",1760],["",1760],["Local administrator dashboard",1760],["The Accelerator has a built-in dashboard for quick monitoring and configuration changes.",1760],["See the Command Line Tools section for information on how to find out what your dashboard URL is; though if you know the ip and port of the accelerator you can just use http://ip:port/dashboard and the accelerator will handle any needed redirects. For full metrics monitoring see Accessing Accelerator metrics directly and the full configuration of the Accelerator is available through its unity-accelerator.cfg file.",1760],["",1760],["Accessing Accelerator metrics directly",1760],["Each Accelerator hosts Prometheus metric reports as /metrics, which you can query from the local network. The following is a full list of metrics that you can access:",1760],["Metric Description ",1760],["process_resident_memory_bytes The amount of memory used by the Accelerator. ",1760],["uta_agent_sys_cpu_percent The amount of CPU used by the system. ",1760],["uta_agent_sys_mem_bytes_used The amount of memory used by the system. ",1760],["uta_agent_protobuf_connects The number of times Unity Editors have connected to the service for the Asset Import Pipeline. ",1760],["uta_agent_protobuf_bytes_in The number of bytes received from the Asset Import Pipeline. ",1760],["uta_agent_protobuf_bytes_out The number of bytes sent to the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"0\",method=\"get\"} The number of items sent to the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"1\",method=\"get\"} The number of errors occurring from items sent to the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"2\",method=\"get\"} The number of namespace errors occurring from items sent to the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"3\",method=\"get\"} The number of requests made from the Asset Import Pipeline for items that have not been cached. ",1760],["uta_agent_protobuf_requests{code=\"0\",method=\"put\"} The number of items received from the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"1\",method=\"put\"} The number of errors occurring from items received from the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"2\",method=\"put\"} The number of namespace errors occurring from items received from the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"0\",method=\"delete\"} The number of requests made from Asset Import Pipeline to remove items. ",1760],["uta_agent_protobuf_requests{code=\"1\",method=\"delete\"} The number of errors occurring from the Asset Import Pipeline removing items. ",1760],["uta_agent_protobuf_requests{code=\"2\",method=\"delete\"} The number of namespace errors occurring from requests to remove items by the Asset Import Pipeline. ",1760],["uta_agent_protobuf_requests{code=\"3\",method=\"delete\"} The number of requests to remove items made from the Asset Import Pipeline for items that have not been cached. ",1760],["uta_agent_cache_bytes_evicted_unscheduled Number of bytes evicted from cache during an \"unscheduled\" pass. Unscheduled evictions occur when running out of disk space while processing a request. Normally, scheduled background evictions should keep up with demand, so an increase in this metric's value indicates an overwhelmed server. Increasing the configuration's CacheMinFreeBytes or CacheMinFreePercent may help to give more of a free space buffer, or you may need to upgrade the underlying hardware or install an additional accelerator. ",1760],["uta_agent_cache_files_evicted_unscheduled Similar to the above uta_agent_cache_bytes_evicted_unscheduled metrics, but counts files evicted instead of byte count. This might be an easier metric to alert on. For example: Alert when files metric increases by more than 1 per second. ",1760],["uta_agent_protobuf_cache_hits Number of Asset Import Pipeline requests that were served from cache. ",1760],["uta_agent_protobuf_cache_misses Number of Asset Import Pipeline requests that could not be served from cache. ",1760],["uta_agent_protobuf_cache_bytes_out Number of bytes served from cache to the Asset Import Pipeline. ",1760],["uta_agent_protobuf_cache_bytes_in Number of bytes stored into the cache received from the Asset Import Pipeline. ",1760],["Unity Editor log debugging",1760],["The Unity Editor logs are useful for viewing debugging information.",1760],["The block below shows an example log output for the Accelerator using Asset Import Pipeline v2.",1760],["2019-10-07T11:34:51-0700 Using Asset Import Pipeline V2.",1760],["...",1760],["2019-08-08T09:04:03-0700 Start importing Assets/Scenes/tame-the-unicorn.png guid(07a0d449dcaef4d2ba104e9d9b350de6)",1760],["2019-08-08T09:04:05-0700 Done importing asset: 'Assets/Scenes/tame-the-unicorn.png' (target hash: 'd5fddd470dd9beedcd7261b6455e436a') in 1.082988 seconds",1760],["2019-08-08T09:04:05-0700 RemoteAssetCache::AddArtifactToCacheServer - artifactKey='Guid(07a0d449dcaef4d2ba104e9d9b350de6) Importer(-1,)' Target hash='d5fddd470dd9beedcd7261b6455e436a'",1760],["Querying for cacheable assets in Cache Server:",1760],["86ac778e1a44c9143864797ddacf8cc9:Assets/New Material.mat",1760],["RemoteAssetCache - Download - Metadata - success:true, namespace:81e94844d19a16919208533e08183531, key:8d71d5006046bb9d5e4a7172eec3f3b2",1760],["RemoteAssetCache - Download - Artifact - success:true, namespace:78b2fdc254b0a4f8a4693a81bb96598a, key:de1eef03efd25a722d1500658bf19038 for asset:'Assets/New Material.mat', time elapsed: 0.005171 seconds",1760],["RemoteAssetCache - Download - Artifact - success:true, namespace:78b2fdc254b0a4f8a4693a81bb96598a, key:b19c9d64967a9691abecdb66364ae392 for extension:'Assets/New Material.mat.info', time elapsed: 0.004721 seconds",1760],["",1760],["Stopping and restarting the Accelerator service",1760],["Accelerator runs as a background process for each platform.",1760],["Windows",1760],["Open the Services Panel by searching the term “Services” in the Settings menu, or running “services.msc” in the Run dialogue (WIN + R). Next, locate the \"Unity Accelerator\" service in the resulting list. The option to Stop the service or Restart the service appears on the left panel.",1760],["Mac OS X",1760],["Run the launchctl command from the terminal to control the “com.unity.accelerator” service from the LaunchControl utility. For more information, visit https://www.launchd.info/.",1760],["Linux",1760],["Use the service console utility to control the “unity-accelerator” service. For more information, visit http://manpages.ubuntu.com/manpages/bionic/man8/service.8.html.",1760],["Maintenance",1760],["The Accelerator service automatically updates itself during a maintenance period, currently set for 01:00 - 02:00 AM local time according to the machine running the Accelerator. This only occurs if the Accelerator discovers a newer version available.",1760],["Accelerator’s installation and uninstallation logs are saved in the operating system's standard temp directory as unity-accelerator-*install.log. Accelerator’s logs are saved in the storage directory as unity-accelerator.log.",1760],["",1760],["Command line tools",1760],["The Accelerator has a large set of command line tools you can use to troubleshoot, configure, and just generally make use of one or more accelerators. For ease of use, it's best to add the location of the unity-accelerator executable to your PATH. The executable was installed in the path you chose when running the installer, C:\\Program Files\\Unity\\accelerator for example.",1760],["The CLI tool has an extensive help system; you can run unity-accelerator with no arguments to get started:",1760],["$ unity-accelerator",1760],["Unity Accelerator v1.0.524+g96c5e18",1760],["Run on a local network to speed up transactions with Unity Services.",1760],[".....",1760],["You can also run unity-accelerator --all-help to output all the help text for all commands in one go. It's probably best to pipe the output through less or redirect output to a text file to read.",1760],["When working on a specific accelerator, to reconfigure it for example, it's best to change your working directory to the same as where the unity-accelerator.cfg file is. You can also set the UNITY_ACCELERATOR_PERSIST environment variable to that directory, or you can try to remember to always use the --persist <dir> option, but most find changing the working directory easiest.",1760],["One rather common set of cli tools used are the dashboard tools:",1760],["$ unity-accelerator dashboard password newaccount",1760],["Password: ",1760],["Again: ",1760],["$ unity-accelerator dashboard list",1760],["admin",1760],["newaccount",1760],["$ unity-accelerator dashboard url",1760],["http://172.18.37.249:8080/dashboard/",1760],["That final tool, dashboard url, is useful to find out what url to put in your browser to visit the built-in dashboard.",1760],["",1760],["Mirroring multiple accelerators",1760],["You can configure multiple accelerators to mirror the same cached data if desired. You might want to have two mirrored accelerators running on the same network for high availability -- if one crashes, has a hardware failure, or needs maintenance for whatever reason, the other accelerator can compensate. You might also mirror cache servers that are remote from each other, for example a main office might mirror its data to a branch office, providing copies of its cached data for use at the branch office as well.",1760],["For now, the mirroring features only provide outgoing data capabilities, also known as \"push\" or \"forwarding\". You can push/forward to multiple accelerators, or even chain them: A sending to B, with B sending to C, and even C sending back to A. You do not need to worry about circular chains; items are time stamped so a receiving accelerator will ignore any incoming items that aren't newer than what it already has.",1760],["Let's walk through an example where accelerator A has an ip:port of 1.1.1.1:1111 and accelerator B is 2.2.2.2:2222. Let's say both have no data to start with, so let's put an item into A and note that it is not in B.",1760],["$ echo test1 unity-accelerator cache put 1.1.1.1:1111 namespace1 key1",1760],["$ unity-accelerator cache get 1.1.1.1:1111 namespace1 key1",1760],["test1",1760],["$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1",1760],["key not found",1760],["Now let's configure A to forward to B. We do this by altering A's configuration, so log into the machine running accelerator A, shut down the accelerator and:",1760],["Shutdown Accelerator A",1760],["$ cd ",1760],["$ unity-accelerator config set ProtobufForwardPuts protobuf:2.2.2.2:2222",1760],["Start Accelerator A back up",1760],["We should now be able to put another item into A's cache and see it forwarded to B.",1760],["$ echo test2 unity-accelerator cache put 1.1.1.1:1111 namespace2 key2",1760],["$ unity-accelerator cache get 1.1.1.1:1111 namespace2 key2",1760],["test2",1760],["$ unity-accelerator cache get 2.2.2.2:2222 namespace2 key2",1760],["key not found",1760],["It will take up to a minute before the forwarding occurs, due to how the algorithm works with batching, etc. But within a minute or two you should see...",1760],["$ unity-accelerator cache get 2.2.2.2:2222 namespace2 key2",1760],["test2",1760],["However, this only covers new data (any new items put into accelerator A will be forwarded to accelerator B) but doesn't cover any existing data. In our example, the first item still is not in accelerator B.",1760],["$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1",1760],["key not found",1760],["To cover this case, and in cases where you just want to forward all data one time (could be useful when switching from one accelerator to a new one) you can use the \"push\" command line tool:",1760],["$ unity-accelerator cache push 1.1.1.1:1111 2.2.2.2:2222",1760],["{\"msg\":\"push completed\", \"destination\":\"2.2.2.2:2222\", \"namespaces\":2, \"keys\":2, \"bytes\":12, \"supercededs\":1, \"errors\":0, \"elapsed\":\"44.054078ms\"}",1760],["$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1",1760],["test1",1760],["The push tool will send a request to the first accelerator and ask it to send all its data to the second accelerator. When it is done, the first accelerator will send back the \"push completed\" response with detail as to what was done.",1760],["There are additional, advanced configuration options you can research by running unity-accelerator config help less and searching for Forward. You can specify the forwarding concurrency, queue size, error handling, etc.",1760],["Also note that you may wish to alter the configuration values for the MaintenanceStart and MaintenanceDuration of each mirrored accelerator so that they do not all shutdown for maintenance at the same time.",1760],["",1760],["Troubleshooting",1760],["If you’ve installed an Accelerator, but some Unity Editors are not using it, several things could cause this issue. The following troubleshooting options might help you fix it:",1760],["Check the Unity Editor versions in use",1760],["Each project contributor must be using an Editor version 2019.3 or higher to use an Accelerator.",1760],["Verify users are on the Accelerator’s local network",1760],["Make sure the Accelerator is running on the same local area network as the project contributors experiencing issues. Accelerator does not affect contributors who are working remotely.",1760],["Test the Accelerator’s connection",1760],["Check if the machine experiencing issues can reach the Accelerator.",1760],["Enter the Accelerator’s host IP address into the following URL path to display its health page:",1760],["[AcceleratorIP]:[AcceleratorPort]/api/agent-health",1760],["If the test fails, make sure all host and network firewalls allow access to the Accelerator's listening IP address and port (TCP). You might need to coordinate with your network administrator to allow access to this port.",1760],["",1760],["Verifying your Accelerator version",1760],["For Accelerator installations on Linux systems, all Linux executables have signature files that you can verify to ensure that no malicious entities have tampered with your downloaded Accelerator version. You can verify the signature files with a trusted version of GnuPG. The key below signs the current release. The public key block with the key is available at https://collab-accelerator.cloud.unity3d.com/.",1760],["pub rsa4096 2019-12-02",1760],["Key fingerprint = 9BC4 B04D F2E8 74E5 64AA 47E7 6D44 3B8B 002C F61F",1760],["uid Unity Technologies ApS (Accelerator signing key) sst-ops@unity3d.com",1760],["To download the key to your GPG store, use one of the following commands:",1760],["$ gpg --keyserver https://collab-accelerator.cloud.unity3d.com/ --search-key \"sst-ops@unity3d.com\"",1760],["$ gpg --keyserver https://collab-accelerator.cloud.unity3d.com/ --recv-key 9BC4B04DF2E874E564AA47E76D443B8B002CF62F",1760],["To check the version of Accelerator that you installed is original and unmodified, verify the file’s signature.",1760],["The Accelerator installation file comes with a signature file that is available at https://storage.googleapis.com/unity-accelerator-prd/unity-accelerator-installer.sig. Use this signature file to verify the Accelerator installer:",1760],["$ gpg --verify unity-accelerator-installer.sig unity-accelerator-linux-x64-installer.run",1760],["Before trusting the key, compare the fingerprint with what is shown in Forged or untrusted keys.",1760],["After trusting the key, you will see something like:",1760],["gpg: Signature made Thu Jan 16 12:29:14 2020 PST",1760],["gpg: using RSA key 9BC4B04DF2E874E564AA47E76D443B8B002CF61F",1760],["gpg: Good signature from \"Unity Technologies ApS (Accelerator signing key) sst-ops@unity3d.com\" [ultimate]",1760],["This means the signature is valid and that you trusted this key.",1760],["Incorrect keys",1760],["If you do not have the correct distribution key, the output of the above commands will look as follows:",1760],["gpg: Signature made Thu Jan 16 12:29:14 2020 PST",1760],["gpg: using RSA key 9BC4B04DF2E874E564AA47E76D443B8B002CF61F",1760],["gpg: Can't check signature: No public key",1760],["In this case, you must get the key using the instructions above.",1760],["Forged or untrusted keys",1760],["If you have a copy of the key with a valid signature, but either the key was not marked as trusted or the key is a forgery, the output will look as follows:",1760],["gpg: Signature made Thu Jan 16 12:29:14 2020 PST",1760],["gpg: using RSA key 9BC4B04DF2E874E564AA47E76D443B8B002CF61F",1760],["gpg: Good signature from \"Unity Technologies ApS (Accelerator signing key) sst-ops@unity3d.com\" [unknown]",1760],["gpg: WARNING: This key is not certified with a trusted signature!",1760],["gpg: There is no indication that the signature belongs to the owner.",1760],["Primary key fingerprint: 9BC4 B04D F2E8 74E5 64AA 47E7 6D44 3B8B 002C F61F",1760],["If the key has been forged, you must verify the fingerprint using the signature file.",1760],["If the key has not been marked as trusted, edit it to mark it as trusted. For more information, see https://www.gnupg.org/gph/en/manual/x334.html.",1760],["Support",1760],["For help regarding Accelerator with Asset Import Pipeline, please visit the Accelerator forums.",1760],["Unity Ads",1761],["Created by the leading mobile game engine, the Unity Ads SDK provides a comprehensive monetization framework for your game, whether you develop in Unity, xCode, or Android Studio. It streamlines ads, in-app purchasing and analytics, using cutting edge machine learning to maximize your revenue while maintaining a great player experience. Getting started is simple.",1761],["For comprehensive information detailing the Unity Ads platform and features, see the Unity Ads documentation.",1761],["2020-05-27 ",1761],["Unity Analytics",1762],["",1762],["",1762],["Important: For the latest Unity Analytics documentation, refer to docs.unity.com/analytics. ",1762],["Integrating Unity into Android applications",1763],["This page describes how to integrate the Unity Runtime Library into Android applications using the Unity as a Library feature.",1763],["You can use this feature to include Unity-powered features, such as 3D/2D Real-Time Rendering, AR Experience, 3D model interaction, or 2D mini-games, into your application. The Unity Runtime Library exposes controls to manage when and how to load, activate, and unload content within the application.",1763],["Important**: If you upgrade your project to Unity 2019.4 or above, the introduction of Unity as a Library might require you to adapt native and managed plug-ins to work properly for Android. Plug-ins that make changes to Gradle manifests need to use the the Gradle changes outlined in Using Unity as a library in native iOS/Android apps.",1763],["How it works",1763],["You don't need to do anything different when you build your Gradle project from Unity.",1763],["Every Android Gradle project that Unity generates has the following structure:",1763],["A library part in the unityLibrary module that you can integrate into any other Gradle project. This contains the Unity runtime and Player data.",1763],["A thin launcher part in the *launcher *module that contains the application name and its icons. This is a simple Android application that launches Unity. You can replace this module with your own application.",1763],["To integrate Unity into another Android Gradle project, you must include the unityLibrary module of the generated Android Gradle project in your Android Unity Project through the settings.gradle file.",1763],["This repository contains example Projects and plug-ins that demonstrate how to integrate Unity into an Android app, along with further documentation.",1763],["To control a Player, relay an Intent to launch Unity activity and extend it if needed. For more information, see Android developer documentation on Intents and Intent Filters. You can also use the UnityPlayer Java API.",1763],["IUnityPlayerLifecycleEvents",1763],["IUnityPlayerLifecycleEvents provides a way to interact with two important lifecycle events of the Unity Player:",1763],["Unload** - The application calls IUnityPlayerLifecycleEvents.onUnityPlayerUnloaded when Application.Unload or UnityPlayer.unload() unloads the Unity Player. This puts the Unity Player in a paused state where it unloads all Scenes, but keeps everything else loaded in the memory.",1763],["Quit** - The application calls IUnityPlayerLifecycleEvents.onUnityPlayerQuitted when the Unity Player quits. The process that was running Unity ends after this call.",1763],["You can pass an instance of IUnityPlayerLifecycleEvents to the UnityPlayer constructor, or to override methods in subclasses of UnityPlayer and UnityPlayerActivity.",1763],["Limitations",1763],["Unity doesn't control the runtime lifecycle, so Unity as a Library might not work for all possible use cases. Known limitations include:",1763],["Unity as a Library only supports full-screen rendering, and doesn't support rendering on part of the screen.",1763],["You can't load or integrate more than one instance of the Unity runtime.",1763],["You might need to adapt third-party plug-ins (both native and managed) to work with the Unity runtime.",1763],["Unity as a Library isn't compatible with the Xamarin app platform.",1763],["You can't integrate Unity Runtime Library as a dynamic module with Play Feature Delivery.",1763],["Additional resources",1763],["Integrating Unity into native iOS applications",1764],["This page describes how to integrate the Unity Runtime Library into iOS native applications with the Unity as a Library feature.",1764],["You can use this feature to include Unity-powered features, such as 3D/2D Real-Time Rendering, AR Experience, 3D model interaction, or 2D mini-games, in your native application. The Unity Runtime Library exposes controls to manage when and how to load, activate, and unload content in your native application.",1764],["How it works",1764],["To use Unity as a Library for iOS, first build your Xcode project as usual from Unity (for more information, see Build settings for iOS).",1764],["Every Unity iOS Xcode project has the following structure:",1764],["A library part in the UnityFramework target that includes the source, plug-ins, and dependent frameworks. It also produces a UnityFramework.framework file.",1764],["A thin launcher part in the Unity-iPhone *target that includes app representation data and runs the library. The *Unity-iPhone target has a single dependency on the UnityFramework target.",1764],["To integrate Unity into another Xcode project, you need to combine both Xcode projects (the native one and the one Unity generates) into a single Xcode workspace, and add the UnityFramework.framework file to the Embedded Binaries section of the Application target for the native Xcode project. Once you do this, you can use the UnityFramework class to control the Unity runtime.",1764],["This repository contains example Projects and plug-ins that demonstrate how to integrate Unity into an Xcode project, along with further documentation.",1764],["UnityFramework class",1764],["You can control the Unity runtime through an instance of the UnityFramework Objective-C class, which is a principal class of UnityFramework.framework:",1764],["Method Description ",1764],["+ (UnityFramework*)getInstance; Singleton class method that returns an instance to UnityFramework. ",1764],["- (UnityAppController*)appController; Returns the UnityAppController subclass of UIApplicationDelegate. This is the root Unity class on the native side, and can access the app's View-related objects, such as UIView, UIViewControllers, CADisplayLink, or DisplayConnection. ",1764],["- (void)setDataBundleId:(const char*)bundleId; Sets the Bundle where the Unity runtime should look for the Data folder. For more information, see documentation on the Data folder. Call this method before calling runUIApplicationMainWithArgc or runEmbeddedWithArgc. ",1764],["- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; The default way to run Unity from the main method where there are no other Views. ",1764],["- (void)runEmbeddedWithArgc:(int)argc argv:(char*[])argv appLaunchOpts:(NSDictionary*)appLaunchOpts; Call this method when you need to run Unity when other Views exist. ",1764],["- (void)unloadApplication; Call this to unload Unity and receive a callback to UnityFrameworkListener after the unload completes. Unity will release most of the memory it occupies, but not all of it. You will be able to run Unity again. ",1764],["- (void)registerFrameworkListener:(id<UnityFrameworkListener>)obj; Register the listener object that receives callbacks of UnityFramework lifecycle-related events. ",1764],["- (void)unregisterFrameworkListener:(id<UnityFrameworkListener>)obj; Unregister a listener object. ",1764],["- (void)showUnityWindow; Call this method while a non-Unity View is showing to also show a Unity View that's already running. ",1764],["- (void)pause:(bool)pause; Pause Unity. ",1764],["- (void)setExecuteHeader:(const MachHeader*)header; You must call this before running Unity in order for CrashReporter to work properly. ",1764],["- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; This method is a proxy to UnitySendMessage. It finds a game object by name and calls functionName with a single-string message parameter. ",1764],["(void)quitApplication:(int)exitCode; Call this to unload Unity completely and receive a callback to UnityFrameworkListener when Unity quits. Unity will release all memory.Note: You won’t be able to run Unity again in the same process after this call. You can set quitHandler on AppController to override the default process kill. ",1764],["Limitations",1764],["Unity doesn't control the runtime life cycle, so Unity as a Library might not work for all possible use cases. Known limitations include:",1764],["Unity as a Library only supports full-screen rendering, and doesn't support rendering on part of the screen.",1764],["You can't load more than one instance of the Unity runtime.",1764],["You might need to adapt third-party plug-ins (both native and managed) to work with the Unity runtime.",1764],["Unity as a Library for iOS added in 2019.3.NewIn20193",1764],["Integrate Unity into UWP applications",1765],["You can use the Unity as a Library feature to integrate the Unity Runtime Library in Universal Windows Platform (UWP) applications. The Unity Runtime Library exposes API controls to manage when and how to load, activate, and unload content within another UWP application.",1765],["This integration enables you to include Unity-powered features in your UWP application, such as:",1765],["3D/2D real-time rendering",1765],["AR experience",1765],["3D model interaction",1765],["2D mini-games",1765],["To integrate the Unity Runtime Library into a UWP application, complete these steps:",1765],["Open File > Build Settings.",1765],["In the Universal Windows Platform tab, select Build Type > XAML.",1765],["Build your project.",1765],["As a result, Unity creates a Visual Studio project, which you can use to embed the Unity Runtime Library into another UWP application. The project is a general XAML UWP project in the form of a MainPage.xaml file which contains a SwapChainPanel setup to load the Unity project. You can extend or replace this project with any other non-Unity application business logic.",1765],["Note:** The MainPage.xaml file is present only if you're building a UWP app using the XAML build type from the Unity editor.",1765],["When using a SwapchainPanel, Unity renders over other elements. This enables you to render a small object with a transparent background on top of other non-Unity application content. To do this, enable the PlayerSettings.WSA-transparentSwapchain option. You can unload the Unity engine to reclaim resources when Unity loads up with Application.Unload.",1765],["Limitations",1765],["If you use another application to host your Unity build, Unity won't control the runtime lifecycle, so your build might not work. You should also be aware of the following limitations:",1765],["You can’t load or integrate more than one instance of the Unity runtime.",1765],["You might need to adapt your native and managed plug-ins to work properly.",1765],["Additional resources",1765],["Integrating Unity into Windows applications",1766],["You can use the Unity as a Library feature to integrate the Unity Runtime Library in Windows applications.",1766],["This feature enables you to include Unity-powered features in your application, such as:",1766],["3D/2D Real-Time Rendering",1766],["AR Experience",1766],["3D model interaction",1766],["2D mini-games",1766],["The Unity Runtime Library exposes controls to manage when and how to load, activate, and unload content within the application.",1766],["On Windows, you can embed a Unity build into your application in the following ways:",1766],["Launch Unity as an external build from your application and specify a window in which Unity will initialize and render with the -parentHWND command line argument. This is the easier option.",1766],["Embed Unity within your existing operating system process. To do this, call into UnityPlayer.dll, which any Win32 application can load directly. The entry point signature is:",1766],["extern \"C\" UNITY_API int UnityMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd);",1766],["Use lpCmdLine to pass any command line arguments to Unity, for example, to control resolution, job threads or parent HWND. This enables you to run Unity within your process. For other valid Unity player command line arguments you can use, see Unity Standalone Player command line arguments.",1766],["Additional resources:",1766],["Unity as a Library added in 2019.3.",1766],["Using Unity as a Library in other applications",1767],["Unity as a Library is intended for specialist users who use native platform technologies such as Java/Android, Objective C/iOS, or Windows Win32/UWP, and want to include Unity-powered features in their games or applications.",1767],["This documentation assumes that you have experience with developing for native platform technologies such as Java/Android, Objective C/iOS, or Windows Win32/UWP, and that you are familiar with the structure of the project, language features and specific platform configuration options (for example, user permissions).",1767],["Starting with Unity 2019.3, you can use Unity as a Library in other applications by integrating your content and the Unity runtime components in a native platform project. This enables you to embed content that uses 3D or 2D real-time rendering, like AR experiences, interaction with 3D models, and 2D mini-games. The Unity Runtime Library exposes ways to manage loading, activating, and unloading within the native application.",1767],["The following platforms currently support Unity as a Library:",1767],["To determine platform versions and other dependencies, see the system requirements page.",1767],["Limitations",1767],["When hosted by another application, Unity doesn't control the runtime lifecycle, so it might not work in all scenarios. Known limitations include:",1767],["On Android and iOS:",1767],["Only full-screen rendering is supported. However, if you are a Unity Industry customer, the limitations and features might differ.",1767],["When Unity is in an unloaded state (after calling Application.Unload), it retains some amount of memory (between 80-180Mb) to be able to instantly switch back and run again in the same process. The amount of memory that's not released largely depends on the device's graphics resolution.",1767],["On iOS, if the Unity runtime quits entirely (after calling Application.Quit), it's not possible to reload Unity again in the same app session.",1767],["You can't load more than one instance of the Unity runtime, or integrate more than one Unity runtime.",1767],["You might need to adapt your native and managed plug-ins to work properly.",1767],["Unity as a Library added in 2019.3.NewIn20193",1767],["Unity Cloud Diagnostics",1768],["Unity Cloud Diagnostics is a suite of cloud-enabled tools that help you collect and identify issues that users encounter with your apps.",1768],["Cloud Diagnostics consists of the following features:",1768],["Crash and Exception Reporting (formerly Performance Reporting) - Collects automated managed exception and native crash reports.",1768],["User Reporting (formerly Bug Reporting) - Collects feedback and bug reports directly from testers and users.",1768],["For information documentation on Cloud Diagnostics, refer to the Cloud Diagnostics documentation site.",1768],["UnityEvents",1769],["UnityEvents are a way of allowing user driven callback to be persisted from edit time to run time without the need for additional programming and script configuration.",1769],["UnityEvents are useful for a number of things:",1769],["\nContent driven callbacks\n",1769],["\nDecoupling systems\n",1769],["\nPersistent callbacks\n",1769],["\nPreconfigured call events\n",1769],["UnityEvents can be added to any MonoBehaviour and are executed from code like a standard .net delegate. When a UnityEvent is added to a MonoBehaviour it appears in the Inspector and persistent callbacks can be added.",1769],["UnityEvents have similar limitations to standard delegates. That is, they hold references to the element that is the target and this stops the target being garbage collected. If you have a UnityEngine.Object as the target and the native representation disappears the callback will not be invoked.",1769],["Using UnityEvents",1769],["To configure a callback in the editor there are a few steps to take:",1769],["Make sure your script imports/uses UnityEngine.Events.",1769],["Select the + icon to add a slot for a callback",1769],["Select the UnityEngine.Object you wish to receive the callback (You can use the object selector for this)",1769],["Select the function you wish to be called",1769],["You can add more than one callback for the event",1769],["When configuring a UnityEvent in the Inspector there are two types of function calls that are supported:",1769],["\nStatic. Static calls are preconfigured calls, with preconfigured values that are set in the UI. This means that when the callback is invoked, the target function is invoked with the argument that has been entered into the UI.\n",1769],["\nDynamic. Dynamic calls are invoked using an argument that is sent from code, and this is bound to the type of UnityEvent that is being invoked. The UI filters the callbacks and only shows the dynamic calls that are valid for the UnityEvent.\n",1769],["Generic UnityEvents",1769],["By default a UnityEvent in a Monobehaviour binds dynamically to a void function. This does not have to be the case as dynamic invocation of UnityEvents supports binding to functions with up to 4 arguments. To do this you need to define a custom UnityEvent class that supports multiple arguments. This is quite easy to do:",1769],["[Serializable]",1769],["public class StringEvent : UnityEvent {}",1769],["By adding an instance of this to your class instead of the base UnityEvent it will allow the callback to bind dynamically to string functions.",1769],["This can then be invoked by calling the Invoke() function with a string as argument.",1769],["UnityEvents can be defined with up to 4 arguments in their generic definition.",1769],["Unity shortcuts",1770],["The Shortcuts Manager is the main tool for managing Keyboard shortcuts in Unity. You can also configure shortcuts for the Mac trackpad.",1770],["The Shortcuts Manager",1770],["The Shortcuts manager lets you view and manage keyboard shortcuts.",1770],["A shortcut is any key, or combination of keys, that is bound to a Unity command. A command is an action that is executed in the Editor. For example, the R key is bound to the command that activates the Scale tool in the Scene view.",1770],["You access the Shortcuts Manager from Unity’s main menu:",1770],["On Windows and Linux, select Edit > Shortcuts.",1770],["On macOS, select Unity > Shortcuts.",1770],["For more information about viewing and modifying shortcuts, see The Shortcuts Manager.",1770],["Mac trackpad shortcuts",1770],["The Mac trackpad also has a number of shortcuts for navigating the Scene view. See Scene view navigation to learn more about these.",1770],["Shortcut tables replaced with link to Shortcut Manager page in 2019.1",1770],["Unity IAP",1771],["Unity IAP makes it easy to implement in-app purchases in your application across the most popular app stores.",1771],["For more information about Unity IAP, see the Unity IAP package documentation.",1771],["Configuration for the Amazon Appstore",1772],["Introduction",1772],["This guide describes the process of setting up the Amazon Appstore for use with the Unity in-app purchasing (IAP) system. This includes establishing the digital records and relationships that are required to interact with the Unity IAP API, setting up an Amazon developer account, and testing and publishing a Unity IAP application.",1772],["As with other platforms, the Amazon store allows for the purchase of virtual goods and managed products. These digital products are identified using a string identifier and an additional type to define durability, with choices including subscription (capable of being subscribed to), consumable (capable of being rebought), and non-consumable (capable of being bought once).",1772],["Cross-store implementation of in-app purchases",1772],["There are cross-store installation issues with publishing to multiple Android IAP stores (for example, Amazon and Google) simultaneously and shared Android bundle identifiers. For more information, refer to Cross-store installation issues with Android in-app purchase stores.",1772],["Amazon Appstore",1772],["Getting started",1772],["Set up an Amazon developer account at the Amazon developer portal.",1772],["Write a game implementing the Unity IAP API. Refer to the guides on Unity IAP initialization. Use the Amazon Appstore for apps with no restrictions on IAP items.",1772],["Device setup",1772],["For Android devices, download and install the Amazon Appstore.",1772],["For FireOS devices, the Amazon Appstore should come pre-installed.",1772],["Note**: Although you can freely target FireOS devices, FireOS is not a Unity-supported platform.",1772],["After you have installed the Amazon Appstore, install the Amazon App Tester.",1772],["Set up the Android SDK",1772],["To install and watch the Android debug log, ensure you have the Android SDK installed. Download the relevant command line tools package from the Android SDK install page and extract them to your computer.",1772],["Confirm that the SDK recognizes the attached Android device through the command-line adb tool. For example:",1772],["[11:07:01] user@laptop:/Applications $ adb devices",1772],["List of devices attached",1772],["00DA0807526300W5 device",1772],["Unity app setup",1772],["Setting up to use Unity's IAP takes a few steps.",1772],["Import the Unity IAP plug-in. For more information, refer to Setting up Unity IAP (Unity 5.3 or later).",1772],["Set the IAP target store. You should already have an Android app set up. Set the target store using Unity IAP's Window > Unity IAP > Android > Target Amazon menu item. This is used to toggle between Google, Amazon, and other Android stores.",1772],["Alternatively, call the API:",1772],["UnityPurchasingEditor.TargetAndroidStore(AndroidStore.AmazonAppStore)",1772],["Amazon Appstore setup",1772],["You do not have to download Amazon's native IAP plug-in when preparing to use the Amazon stores, because all of the functionality that it provides is already included in Unity's IAP service.",1772],["Add your app. From the Amazon Developer Portal select Add a New App.",1772],["Set up your catalog. Using the product descriptions you prepared earlier, add the items to the Amazon catalog using the Amazon Developer Portal. Navigate to your app's page, and find the In-App Items section. Use the Add a Consumable, Add an Entitlement, or Add a Subscription buttons to set up your catalog.",1772],["Amazon Appstore and Amazon Underground Store",1773],["Extended functionality",1773],["Amazon User ID",1773],["To fetch the current Amazon User ID for other Amazon services, use the IAmazonExtensions:",1773],["public void OnInitialized",1773],["(IStoreController controller, IExtensionProvider extensions)",1773],["string amazonUserId =",1773],["extensions.GetExtension().amazonUserId;",1773],["// ...",1773],["Sandbox testing in Amazon",1773],["To use Amazon’s local Sandbox testing app, generate a JSON description of your product catalog on the device’s SD card using the IAmazonConfiguration extended configuration:",1773],["var builder = ConfigurationBuilder.Instance(",1773],["StandardPurchasingModule.Instance());",1773],["// Define your products.",1773],["builder.AddProduct(\"someConsumable\", ProductType.Consumable);",1773],["// Write a product description to the SD card",1773],["// in the appropriate location.",1773],["builder.Configure()",1773],[".WriteSandboxJSON(builder.products);",1773],["When using this method to write product descriptions to the SD card, declare the Android permission to write to external storage in the test app’s manifest:",1773],["",1773],["Remove this extra permission before publishing, if appropriate.",1773],["Amazon Sandbox is now set up for local testing. For more information, please see Amazon's App Tester documentation.",1773],["Configuring for Apple App Store and Mac App Store",1774],["Introduction",1774],["This guide describes the process of establishing the digital records and relationships necessary for a Unity game to interact with an In-App Purchase Store. The Unity IAP purchasing API is targeted.",1774],["In-App Purchase (IAP) is the process of transacting money for digital goods. A platform's Store allows purchase of Products, representing digital goods. These Products have an Identifier, typically of string datatype. Products have Types to represent their durability: subscription, consumable (capable of being rebought), and non-consumable (capable of being bought only once) are the most common.",1774],["Apple App Store",1774],["Getting Started",1774],["Write a game implementing Unity IAP. Refer to Unity IAP Initialization.",1774],["Keep the game's product identifiers on-hand for use in iTunes Connect later.",1774],["Register the Application",1774],["In the Apple Developer Center, navigate to the appropriate Identifiers section.",1774],["Add a new App ID to create a fundamental application entity with Apple.",1774],["NOTE:* Use an Explicit App ID. You cannot use Wildcard App IDs (com.example.) for applications that use In-App Purchases.",1774],["NOTE:** The App ID is available to use in iTunes Connect after you create it in the Developer Center.",1774],["Navigate to iTunes Connect and create an App, to establish a Store relationship with your game.",1774],["Use the newly created App ID for the app's Bundle ID.",1774],["Add In-App Purchases",1774],["Choose Features and add a new In-App Purchase with the plus (\"+\") button.",1774],["Choose a Product Type.",1774],["Specify the Product Identifier, and complete other fields as requested.",1774],["Note**: The \"Product ID\" here is the same identifier used in the game source code, added to the Unity IAP ConfigurationBuilder instance by using AddProduct() or AddProducts().",1774],["Note**: When targeting multiple Apple device groups (for example, shipping on both iOS and Mac) Apple requires usage of different, unique product identifiers for each distinct device group. Use Unity IAP's Purchasing.IDs class and define a one-to-many mapping Product IDs to the store-specific identifiers, and pass that mapping in when initializing IAP.",1774],["Result:",1774],["Test IAP",1774],["Create Sandbox Testers using iTunes Connect for use on your test device's iTunes Account. To do this, go to iTunes Connect > Users and Roles, and choose the plus (\"+\") button. You must review Apple's Sandbox Tester documentation as there are several additional important usage notes, and you must use a real email address to create Testers.",1774],["Note**: For more information, refer to the iOS and Mac App Store guides.",1774],["Tip**: To simplify managing the email address, use an email service capable of sub-addressing (emailaccount+subaddress@example.com) such as Gmail, iCloud, and Outlook.com. This allows one email account to receive email for multiple sub-addresses.",1774],["Complete the user creation wizard.",1774],["Build the Xcode project for your game by using Unity.",1774],["Note**: Ensure the Bundle Identifier in Unity (Edit > Project Settings, then select the Other Settings category, and navigate to the Bundle Identifier section) matches that used in iTunes Connect.",1774],["In your game's Xcode project, ensure the Team (Project Navigator > your game Target > General > Identity > Team) is set to that of your Apple Developer account.",1774],["For iOS",1774],["Using the target iOS device, sign out of any existing Apple ID accounts. Only sign in as the Sandbox Tester when prompted by the app, later. Any subsequent purchases are routed through the Apple Sandbox instead of the Production Store.",1774],["Build and run the game on your iOS device. UnityPurchasing.Initialize() succeeds if everything has been correctly configured.",1774],["Test the IAP by making a purchase in the game on the device. A modified purchase dialog displays, explaining that this purchase is being performed in the Sandbox Environment. Use the Sandbox User Tester password when prompted for purchase.",1774],["Warning**: If the indicator is not present, then an account is charged real money for the product.",1774],["For Mac",1774],["When building a desktop Mac build, select Mac App Store Validation within Unity's Mac Player settings.",1774],["After you have built your App, update its info.plist file with your bundle identifier and version strings. Right-click the .app file and select Show Package Contents, locate the info.plist file and update the CFBundleIdentifier string to your application's bundle identifier.",1774],["Sign, package, and install your application. Run the following commands from an OSX terminal, filling in \"your.app\" and \"your.pkg\" appropriately.",1774],["Tip**: To sign the bundle, you might first need to remove the Contents.meta file if it exists: your.app/Contents/Plugins/unitypurchasing.bundle/Contents.meta",1774],["codesign -f --deep -s \"3rd Party Mac Developer Application: \" your.app/Contents/Plugins/unitypurchasing.bundle",1774],["codesign -f --deep -s \"3rd Party Mac Developer Application: \" your.app",1774],["productbuild --component your.app /Applications --sign \"3rd Party Mac Developer Installer: \" your.pkg",1774],["To install the package correctly, delete the unpackaged .app file before you run the newly created package and install it.",1774],["Launch the app from the Applications folder. The first time you do so, you are prompted to enter your iTunes account details, for which you can then make test purchases against the sandbox environment.",1774],["For more information on Apple App Store testing and signing, refer to iOS and Mac Extended Functionality and Building your macOS application.",1774],["Browsing Product Metadata",1775],["Unity IAP retrieves localized product metadata during the initialization process, which you can access via the IStoreController's products field.",1775],["foreach (var product in controller.products.all) {",1775],["Debug.Log (product.metadata.localizedTitle);",1775],["Debug.Log (product.metadata.localizedDescription);",1775],["Debug.Log (product.metadata.localizedPriceString);",1775],["Codeless IAP",1776],["Codeless IAP is the easiest way to implement in-app purchases in your Unity app. The Unity Editor offers an interface for configuring basic IAP integration using minimal script writing.",1776],["Codeless IAP handles the actual IAP transaction without requiring any code. Implementing Codeless IAP is a two-step process using the Editor:",1776],["Add IAP Buttons to your game.",1776],["Define your Products in the IAP Catalog.",1776],["The Unity Purchasing system configures the Products you populate in the catalog at run time. When players select an IAP Button, it initiates the purchase flow for the associated Product.",1776],["Note**: You still need to use scripting to define how players access their newly purchased content. For more information, see the Purchase fulfillment section below.",1776],["Implementing Codeless IAP",1776],["Before starting, install the latest Unity IAP SDK. See documentation on Setting up Unity IAP for more information.",1776],["",1776],["Adding IAP Buttons to your Scene",1776],["To add an IAP Button to your Scene, in the Unity Editor, select Window > Unity IAP > Create IAP Button.",1776],["",1776],["Populating Products in the IAP Catalog",1776],["Open the IAP Catalog GUI one of two ways:",1776],["Select Window > Unity IAP > IAP Catalog.",1776],["Or, with your IAP Button selected, locate its IAP Button (Script) component in the Inspector, then click IAP Catalog….",1776],["Next, use the GUI to define the following attributes for each Product in your catalog.",1776],["A Product ID with which to communicate to app stores (note that you can override this ID with unique store-specific IDs through the Advanced option).",1776],["A Product Type (Consumable, Non-Consumable, or Subscription).",1776],["Note**: The IAP Catalog GUI provides additional tools for configuring your Products. Before exporting a catalog for upload to its respective store, you must populate description and pricing information as well. For detailed information on these settings, see documentation on Defining Products.",1776],["Automatically initializing UnityPurchasing",1776],["The IAP SDK must initialize in order for in-app purchasing to work. This occurs automatically when the first instance of a Codeless IAP Button or IAP Listener loads at run time. However, you may need to initialize the SDK before an IAP Button or IAP Listener appears in your game (for example, serving an IAP Promo offer after application launch). In these cases, check Automatically initialize UnityPurchasing (recommended) at the bottom of the IAP Catalog window. This ensures that UnityPurchasing initializes immediately when the application starts, and eliminates dependencies on the codeless instances’ lifecycles.",1776],["In order to work, your catalog must contain at least one Product.",1776],["Note**: You can use auto-initialize together with IAP Buttons or Listeners. In this case, the SDK initializes when the game starts instead of when the first instance of an IAP Button or Listener loads in the Scene. However, you should not enable auto-initialize if you also initialize manually in a script, as this may cause errors.",1776],["",1776],["Purchase fulfillment",1776],["When your catalog contains at least one Product, you can define IAP Button behavior when the purchase completes or fails.",1776],["Select your IAP Button in the Scene view, then locate its IAP Button (Script) component in the Inspector.",1776],["Select the Product to link to the IAP Button from the Product ID drop-down list.",1776],["Create your own function that provides purchase fulfillment, or import an Asset that does this (see code sample, below).",1776],["Apply your purchase fulfilment script to a GameObject as a component.",1776],["Return to the IAP Button (Script) component in the Inspector, and click the plus (+) button to add a function to the On Purchase Complete (Product) list.",1776],["Drag the GameObject with the purchase fulfillment script onto the On Purchase Complete (Product) event field (illustrated below), then select your function from the dropdown menu.",1776],["Fulfillment script code sample**:",1776],["public void GrantCredits (int credits){",1776],["userCredits = userCredits + credits;",1776],["Debug.Log(“You received “ + credits “ Credits!”);",1776],["Run your game to test the IAP Button.",1776],["Extended functionality",1776],["",1776],["Exporting to an app store",1776],["In order for purchases to function, you must configure your catalog on the corresponding app store. To do so, you can export your Product Catalog as a CSV file to Google Play, or as an XML file through Apple’s Application Loader to the iTunes Store.",1776],["Google Play",1776],["To export your Product Catalog for Google Play:",1776],["In the IAP Catalog window (Window > Unity IAP > IAP Catalog), ensure that each Product has the following defined:* ID * Type * Title and Description * Price or Pricing Template ID",1776],["Scroll down, and select App Store Export.",1776],["Select Google Play CSV.",1776],["Choose a location in which to save the CSV file.",1776],["For complete guidance on uploading your exported catalog to Google Play, see the Google in-app billing documentation on the Android Developers website.",1776],["Apple iTunes",1776],["To export your Product Catalog for Apple iTunes:",1776],["In the IAP Catalog window (Window > Unity IAP > IAP Catalog), ensure that each Product has the following defined:* ID * Type * Title and Description * Price Tier and Screenshot path *",1776],["Apple SKU** (found in iTunes Connect) * Apple Team ID (found on Apple’s developer website)",1776],["Scroll down, and select App Store Export.",1776],["Select Apple XML Delivery.",1776],["Choose a location in which to save the XML file.",1776],["For complete guidance on importing through Apple’s Application Loader, see the Application Loader documentation on the iTunes Connect website.",1776],["Restore Button",1776],["Some app stores, including iTunes, require apps to have a Restore button. Codeless IAP provides an easy way to implement a restore button in your app.",1776],["To add a Restore button:",1776],["Add an IAP Button to your Scene (Window > Unity IAP > Create IAP Button).",1776],["With your IAP Button selected, locate its IAP Button (Script) component in the Inspector, then select Restore from the Button Type drop-down menu (most of the component's other fields will disappear from the Inspector view).",1776],["When a user selects this button at run time, the button calls the purchase restoration API for the current store. This functionality works on the iOS App Store, the Mac App Store, and the Windows Store app store. You may want to hide the Restore button on other platforms.",1776],["If the restore succeeds, Unity IAP invokes the On Purchase Complete (Product) function on the IAP Button associated with that Product.",1776],["For more information, see the documentation on Restoring purchases.",1776],["",1776],["IAP Listeners",1776],["Codeless IAP dispatches successful and failed purchase events to an active IAP Button component in the hierarchy. However, there may be times when it is difficult or undesirable to have an active IAP Button when handling a successful purchase. For example, if a purchase is interrupted before completing, Unity IAP attempts to process the purchase again the next time it is initialized. You may want this to happen immediately after the app launches, in which case an IAP Button wouldn’t make sense. Codeless IAP includes the IAP Listener component precisely for these cases. An active IAP Listener in the Scene hierarchy receives any purchase events that cannot be dispatched to an IAP Button.",1776],["To add an IAP Listener:",1776],["In the Unity Editor, select Window > Unity IAP > Create IAP Listener.",1776],["Follow the steps for writing a purchase fulfillment script as a GameObject component.",1776],["Select the IAP Listener in the Scene and locate its IAP Listener (Script) component in the Inspector, then click the plus (+) button to add a function to the On Purchase Complete (Product) list.",1776],["Drag the GameObject with the purchase fulfillment script onto the event field in the component’s Inspector, then select your function from the dropdown menu.",1776],["Accessing Unity IAP’s extended functionality",1776],["The Codeless IAP feature does not expose most of Unity IAP’s extended functionality. However, Codeless IAP is implemented on top of the existing scripting APIs, so you can modify much of its functionality in the IAPButton.cs script (Assets/Plugins/UnityPurchasing/script/IAPButton.cs) to suit your needs.",1776],["To use Unity IAP’s extended functionality, access the Unity IAP IStoreController and IExtensionProvider instances returned by IStoreListener.OnInitialize.",1776],["2018-05-30 ",1776],["Cross-store installation issues with Android in-app purchase stores",1777],["There are cross-store installation issues when using shared Android bundle identifiers to publish to multiple Android in-app purchase stores (such as Google) simultaneously. This page describes the results of these conflicts, and how to resolve the issue.",1777],["The cross-store install scenario is one where a user installs an application from one store (store A), and then upgrades the installation with an application from another store (store B). The opportunity to upgrade a user's installation belongs to the store hosting the newest application version. This scenario can arise when both builds of the application use the same Android bundle identifier and signing key.",1777],["For example, com.foo.bar is published to Google Play and Amazon Appstore. A user who has both App stores installed could install com.foo.bar from Amazon Apps and receive an updated version from Google Play. This could result in them losing IAP digital product transactions, and being unable to restore previously made transactions.",1777],["Impact of cross-store installation issues",1777],["Cross-store conflict can cause intractable end-user problems with applications using IAP. Users may find they lose purchases upon uninstallation/reinstallation and lose any in-flight purchases interrupted by a cross-store upgrade.",1777],["The resulting IAP problems are:",1777],["Losing incomplete purchases.** This occurs if the user upgrades after a purchase has been approved but before the application has acknowledged receiving the purchase from the store's billing system. This can arise when an application fails to synchronize with a cloud inventory service in a timely fashion, or the app crashes before saving this new IAP to the local inventory database.",1777],["Withholding purchases from store A.** This occurs if a user reinstalls an application from store B after completing IAP transactions on store A. They will not be able to restore those transactions. Many stores explicitly disallow applications from accessing other stores' IAP systems. To workaround this utilize a cloud inventory system along with its dependent user identity service.",1777],["Divergent IAP product lists.** This occurs if the upgraded product list in store B's application diverges from the list in store A's version. You may provide divergent IAP cataloges. This may result in an application error when an inconsistent local inventory is read by the store B version, or the user may lose the inventory they previously purchased which is unavailable through the store B version.",1777],["Resolving cross-store installation issues",1777],["There are two ways to resolve cross-store conflicts:",1777],["use unique signing keys for each store (This results in upgrade error messages from the conflicting store), or",1777],["use unique bundle identifiers for each store (This may result in duplicate installed apps for the user).",1777],["Defining products",1778],["In order to use in-app purchases, your app must provide a list of Products for sale. You can do this through scripting, or using the Codeless IAP Catalog (Window > Unity IAP > IAP Catalog). Whichever implementation you use, you must define the appropriate attributes for each Product. This page covers these attributes in detail.",1778],["Product ID",1778],["Enter a cross-platform unique identifier to serve as the Product’s default ID when communicating with an app store.",1778],["Important**: The ID may only contain lowercase letters, numbers, underscores, or periods.",1778],["Product Type",1778],["Each Product must be of one of the following Types:",1778],["Type Description Examples ",1778],["Consumable Users can purchase the Product repeatedly. Consumable Products cannot be restored. * Virtual currencies * Health potions * Temporary power-ups. ",1778],["Non-Consumable Users can only purchased the Product once. Non-Consumable Products can be restored. * Weapons or armor * Access to extra content ",1778],["Subscription Users can access the Product for a finite period of time. Subscription Products can be restored. * Monthly access to an online game * VIP status granting daily bonuses * A free trial ",1778],["Note**: For more information on Subscription type support, see the section on Subscription Product support.",1778],["Advanced",1778],["This section defines the metadata associated with your Product for use in an in-game store.",1778],["Descriptions",1778],["Use the following fields to add descriptive text for your Product:",1778],["Field Data type Description Example ",1778],["Product Locale Enum Determines the app stores available in your region. English (U.S.) (Google Play, Apple) ",1778],["Product Title String The name of your Product as it appears in an app store. “Health Potion” ",1778],["Product Description String The descriptive text for your Product as it appears in an app store, usually an explanation of what the Product is. “Restores 50 HP.” ",1778],["Add Translations for the Title and Description fields by clicking the plus (+) icon and selecting an additional locale. You can add as many translations as you like.",1778],["Payouts",1778],["Use this section to add local, fixed definitions for the content you pay out to the purchaser. Payouts make it easier to manage in-game wallets or inventories. By labeling a Product with a name and quantity, developers can quickly adjust in-game counts of certain item types upon purchase (for example, coins or gems).",1778],["Note**: This functionality is only available in Unity 2017.2 or higher.",1778],["Field Data type Description Example ",1778],["Payout Type Enum Defines the category of content the purchaser receives. There are four possible Types. * Currency * Item * Resource * Other ",1778],["Payout Subtype String Provides a level of granularity to the content category. * “Gold” and “Silver” subtypes of a Currency type * “Potion” and “Boost” subtypes of an Item type ",1778],["Quantity Int Specifies the number of items, currency, and so on, that the purchaser receives in the payout. * 1 * >25* 100 ",1778],["Data Use this field any way you like as a property to reference in code. * Flag for a UI element * Item rarity ",1778],["Note**: You can add multiple Payouts to a single Product.",1778],["For more information on the PayoutDefinition class, see the Scripting Reference. You can always add Payout information to a Product in a script using this class. For example:",1778],["using UnityEngine.Purchasing;",1778],["new PayoutDefinition (PayoutType.Currency, \"Gold\", 100)",1778],["Note that the IAP Catalog acts as a Product catalog dictionary, not as an inventory manager. You must still implement the code that handles conveyance of the purchased content.",1778],["Store ID Overrides",1778],["By default, Unity IAP assumes that your Product has the same identifier (specified in the ID field, above) across all app stores. Unity recommends doing this where possible. However, there are occasions when this is not possible, such as when publishing to both iOS and Mac stores, which prohibit developers from using the same product ID across both.",1778],["In these cases, use the override fields to specify the Product's correct identifier where it differs from the cross-platform ID.",1778],["You can also do this programmatically, as follows:",1778],["using UnityEngine;",1778],["using UnityEngine.Purchasing;",1778],["public class MyIAPManager {",1778],["public MyIAPManager () {",1778],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1778],["builder.AddProduct(\"100_gold_coins\", ProductType.Consumable, new IDs",1778],["{\"100_gold_coins_google\", GooglePlay.Name},",1778],["{\"100_gold_coins_mac\", MacAppStore.Name}",1778],["});",1778],["// Initialize Unity IAP...",1778],["In this example, the Product identifies as \"100_gold_coins_google\" to Google Play and \"100_gold_coins_mac\" to the Apple App Store.",1778],["Note**: Overrides only change the identifier Unity IAP uses when communicating with app stores. You should still use the Product's cross-platform identifier when making API calls.",1778],["Important**: The ID may only contain lowercase letters, numbers, underscores, or periods.",1778],["Google Configuration (required for Google Play export)",1778],["Provide either a Product price, or an ID for a Pricing Template created in Google Play.",1778],["Apple Configuration (required for Apple export)",1778],["Select a Pricing Tier from the dropdown menu. Unity supports predefined Apple price points, but not arbitrary values.",1778],["Select a screenshot to upload.",1778],["For information on screenshot specs, see Apple’s publisher support documentation.",1778],["Defining Products in scripts",1778],["You can also declare your Product list programmatically using the Purchasing Configuration Builder. You must provide a unique cross-store Product ID and Product Type for each Product:",1778],["using UnityEngine;",1778],["using UnityEngine.Purchasing;",1778],["public class MyIAPManager {",1778],["public MyIAPManager () {",1778],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1778],["builder.AddProduct(\"100_gold_coins\", ProductType.Consumable);",1778],["// Initialize Unity IAP...",1778],["2018-05-30 ",1778],["Configuring for Google Play Store",1779],["Introduction",1779],["This guide describes the process of establishing the digital records and relationships necessary for a Unity game to interact with an In-App Purchase Store. The Unity IAP purchasing API is targeted.",1779],["In-App Purchase (IAP) is the process of transacting money for digital goods. A platform's Store allows the purchase of Products, representing digital goods. These Products have an Identifier, typically of string datatype. Products have Types to represent their durability: subscription, consumable (capable of being rebought), and non-consumable (capable of being bought once) are the most common.",1779],["Google Play Store",1779],["Getting Started",1779],["Write a game implementing Unity IAP. See Unity IAP Initialization and the Sample IAP Project.",1779],["Keep the game's product identifiers on-hand for Google Play Developer Console use later.",1779],["Build a signed non-Development Build Android APK from your game.",1779],["TIP:** Make sure you safely store your keystore file. The original keystore is always required to update a published Google Play application.",1779],["TIP:** Reuse the Bundle Version Code from your last uploaded APK during local testing to permit side-loading without first being required to upload the changed APK to the Developer Console. See the settings for the Android platform Player.",1779],["Register the Application",1779],["From the Google Account that will publish the game, register the Android application with the Google Play Developer Console.",1779],["NOTE:** This guide uses the Google Play License Testing approach for testing in-app purchase integration.",1779],["Choose Create app.",1779],["Give the application an App name and select the appropriate options for your game.",1779],["Navigate to Testing/Closed testing in the left nav and choose Create track. Select your APK and upload it. Also complete the basic Dashboard requirements, upload screenshots and add a Short and Full description. You can also create an Internal test track.",1779],["Add In-App Purchases",1779],["Now that you have uploaded our first binary, you can add the IAP products.",1779],["Navigate to In-app Products and choose Create product.",1779],["Define the Product ID , product details and price. Remember to activate the product after saving.",1779],["You can specify a consumable or non-consumable Product Type in Managed product. Subscription is also supported by Unity IAP.",1779],["NOTE**: The \"Product ID\" here is the same identifier used in the game source code, added to the [Unity IAP ConfigurationBuilder] instance via AddProduct() or AddProducts(), like \"gold50\".",1779],["Test IAP",1779],["Add your testers to License Testing.",1779],["Navigate to All Apps on your Google Developer dashboard.",1779],["Select Settings/License Testing. Add each Google Account email address. Save changes.",1779],["NOTE: There may be a delay of several hours from the time you publish the APK.",1779],["When available, share the Join on Android link with testers. Ensure that testers can install the application from the store.",1779],["Note: To test updates retaining permission to purchase IAPS's for free, you may side-load applications, updating the existing store-downladed APK install.",1779],["To test the IAP, make a purchase on a device logged in with a Tester Google Account. A modified purchase dialog box appears to confirm the fact this product is under test and is free.",1779],["WARNING**: If this dialog box does not appear, then the Tester Google Account will be charged real money for the product.",1779],["Google Play",1780],["Consumables",1780],["Unity IAP uses V3 of Google's Billing API, which features the concept of consumable products and explicit consumption API calls.",1780],["You should create all of your consumable products in the Google Publisher dashboard as 'Managed' products. Unity IAP will take care of consuming them when your application confirms a purchase.",1780],["Testing",1780],["Before publishing your application you must test your in-app purchases on an Android device as an alpha or beta distribution.",1780],["Note that whilst your Alpha or Beta APK must be published to test your IAPs, this does not mean your App has to be publicly visible in the Google Play store.",1780],["In order to perform a complete end-to-end test of your in-app purchases, you must do so whilst signed into a device using a test account.",1780],["Please note the following:",1780],["You must upload a signed, release version of your APK to Google Play that is published as an alpha or beta distribution.",1780],["The version number of the APK that you upload must match the version number of the APK that you test with.",1780],["After entering your purchase metadata into the Google Play publisher console, it may take up to 24 hours before you are able to purchase your in-app purchases using a test account.",1780],["Handling purchase failures",1781],["Purchases may fail for a number of reasons, including network failure, payment failure or device settings. You may wish to check the reason for a purchase failure and prompt the user to take action, though note that not all stores provide fine-grained failure information.",1781],["/// ",1781],["/// Called when a purchase fails.",1781],["/// ",1781],["public void OnPurchaseFailed (Product i, PurchaseFailureReason p)",1781],["if (p == PurchaseFailureReason.PurchasingUnavailable) {",1781],["// IAP may be disabled in device settings.",1781],["Implementing a Store",1782],["Your store must implement the IStore interface, the methods of which are detailed in following sections.",1782],["using UnityEngine.Purchasing.Extension;",1782],["public class MyStore : IStore",1782],["private IStoreCallback callback;",1782],["public void Initialize (IStoreCallback callback)",1782],["this.callback = callback;",1782],["public void RetrieveProducts (System.Collections.ObjectModel.ReadOnlyCollection products)",1782],["// Fetch product information and invoke callback.OnProductsRetrieved();",1782],["public void Purchase (UnityEngine.Purchasing.ProductDefinition product, string developerPayload)",1782],["// Start the purchase flow and call either callback.OnPurchaseSucceeded() or callback.OnPurchaseFailed()",1782],["public void FinishTransaction (UnityEngine.Purchasing.ProductDefinition product, string transactionId)",1782],["// Perform transaction related housekeeping",1782],["Initialization",1783],["You must provide an implementation of the IStoreListener interface which Unity IAP uses to inform your application of purchase-related events.",1783],["Call the UnityPurchasing.Initialize method to start the initialization process, supplying your listener implementation and configuration.",1783],["Note that initialization will not fail if the network is unavailable; Unity IAP will continue attempting to initialize in the background. Initialization will only fail if Unity IAP encounters an unrecoverable problem such as a misconfiguration or IAP being disabled in device settings.",1783],["Consequently Unity IAP may take an arbitrary period of time to initialize; indefinitely if the user is in airplane mode. You should design your store accordingly by preventing users from attempting to make purchases if initialization has not completed successfully.",1783],["using UnityEngine;",1783],["using UnityEngine.Purchasing;",1783],["public class MyIAPManager : IStoreListener {",1783],["private IStoreController controller;",1783],["private IExtensionProvider extensions;",1783],["public MyIAPManager () {",1783],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1783],["builder.AddProduct(\"100_gold_coins\", ProductType.Consumable, new IDs",1783],["{\"100_gold_coins_google\", GooglePlay.Name},",1783],["{\"100_gold_coins_mac\", MacAppStore.Name}",1783],["});",1783],["UnityPurchasing.Initialize (this, builder);",1783],["/// ",1783],["/// Called when Unity IAP is ready to make purchases.",1783],["/// ",1783],["public void OnInitialized (IStoreController controller, IExtensionProvider extensions)",1783],["this.controller = controller;",1783],["this.extensions = extensions;",1783],["/// ",1783],["/// Called when Unity IAP encounters an unrecoverable initialization error.",1783],["///",1783],["/// Note that this will not be called if Internet is unavailable; Unity IAP",1783],["/// will attempt initialization until it becomes available.",1783],["/// ",1783],["public void OnInitializeFailed (InitializationFailureReason error)",1783],["/// ",1783],["/// Called when a purchase completes.",1783],["///",1783],["/// May be called at any time after OnInitialized().",1783],["/// ",1783],["public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)",1783],["return PurchaseProcessingResult.Complete;",1783],["/// ",1783],["/// Called when a purchase fails.",1783],["/// ",1783],["public void OnPurchaseFailed (Product i, PurchaseFailureReason p)",1783],["Initiating Purchases",1784],["When the user wants to buy a product call the InitiatePurchase method of the IStoreController, identifying the product the user wants to buy.",1784],["// Example method called when the user presses a 'buy' button",1784],["// to start the purchase process.",1784],["public void OnPurchaseClicked(string productId) {",1784],["controller.InitiatePurchase(productId);",1784],["Your application will be notified asynchronously of the result, either with an invocation of ProcessPurchase for successful purchases or OnPurchaseFailed for failures.",1784],["iOS & Mac App Stores",1785],["Extended functionality",1785],["Reading the App Receipt",1785],["An App Receipt is stored on the device's local storage and can be read as follows:",1785],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1785],["string receipt = builder.Configure().appReceipt;",1785],["Checking for payment restrictions",1785],["In App Purchases may be restricted in a device's settings, which can be checked for as follows:",1785],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1785],["bool canMakePayments = builder.Configure().canMakePayments;",1785],["Restoring transactions",1785],["On Apple platforms users must enter their password to retrieve previous transactions so your application must provide users with a button letting them do so. During this process the ProcessPurchase method of your IStoreListener will be invoked for any items the user already owns.",1785],["/// ",1785],["/// Your IStoreListener implementation of OnInitialized.",1785],["/// ",1785],["public void OnInitialized(IStoreController controller, IExtensionProvider extensions)",1785],["extensions.GetExtension ().RestoreTransactions (result => {",1785],["if (result) {",1785],["// This does not mean anything was restored,",1785],["// merely that the restoration process succeeded.",1785],["} else {",1785],["// Restoration failed.",1785],["});",1785],["Refreshing the App Receipt",1785],["Apple provides a mechanism to fetch a new App Receipt from their servers, typically used when no receipt is currently cached in local storage; SKReceiptRefreshRequest.",1785],["Note that this will prompt the user for their password.",1785],["Unity IAP makes this method available as follows:",1785],["/// ",1785],["/// Your IStoreListener implementation of OnInitialized.",1785],["/// ",1785],["public void OnInitialized(IStoreController controller, IExtensionProvider extensions)",1785],["extensions.GetExtension ().RefreshAppReceipt (receipt => {",1785],["// This handler is invoked if the request is successful.",1785],["// Receipt will be the latest app receipt.",1785],["Console.WriteLine(receipt);",1785],["},",1785],["() => {",1785],["// This handler will be invoked if the request fails,",1785],["// such as if the network is unavailable or the user",1785],["// enters the wrong password.",1785],["});",1785],["Ask to Buy",1785],["iOS 8 introduced a new parental control feature called Ask to Buy.",1785],["Ask to Buy purchases defer for parent approval. When this occurs, Unity IAP sends your app a notification as follows:",1785],["/// This is called when Unity IAP has finished initialising.",1785],["public void OnInitialized(IStoreController controller, IExtensionProvider extensions)",1785],["extensions.GetExtension().RegisterPurchaseDeferredListener(product => {",1785],["Console.WriteLine(product.definition.id);",1785],["});",1785],["Enable \"Ask-to-Buy\" simulation in the Sandbox App Store",1785],["The sample class below demonstrates how to access IAppleExtensions in order to enable Ask-to-Buy simulation in the Sandbox App Store:",1785],["using UnityEngine;",1785],["using UnityEngine.Purchasing;",1785],["public class AppleSimulateAskToBuy : MonoBehaviour {",1785],["public void SetSimulateAskToBuy(bool shouldSimulateAskToBuy) {",1785],["if (Application.platform == RuntimePlatform.IPhonePlayer) {",1785],["IAppleExtensions extensions = IAPButton.IAPButtonStoreManager.Instance.ExtensionProvider.GetExtension();",1785],["extensions.simulateAskToBuy = shouldSimulateAskToBuy;",1785],["When the purchase is approved or rejected, your store's normal ProcessPurchase or OnPurchaseFailed listener methods are invoked.",1785],["Transaction Receipts",1785],["Sometimes consumable Ask to Buy purchases don't show up in the App Receipt, in which case you cannot validate them using that receipt. However, iOS provides a Transaction Receipt that contains all purchases, including Ask to Buy. Access the most recent Transaction Receipt string for a given Product using IAppleExtensions.",1785],["Note**: Transaction Receipts are not available for Mac builds. Requesting a Transaction Receipt on a Mac build results in an empty string.",1785],["if UNITY_PURCHASING",1785],["using System;",1785],["using UnityEngine;",1785],["using UnityEngine.Purchasing;",1785],["public class AskToBuy : MonoBehaviour, IStoreListener",1785],["// Unity IAP objects",1785],["private IStoreController m_Controller;",1785],["private IAppleExtensions m_AppleExtensions;",1785],["public AskToBuy ()",1785],["var builder = ConfigurationBuilder.Instance (StandardPurchasingModule.Instance ());",1785],["builder.AddProduct (\"100_gold_coins\", ProductType.Consumable, new IDs {",1785],["{ \"100_gold_coins_google\", GooglePlay.Name },",1785],["{ \"100_gold_coins_mac\", MacAppStore.Name }",1785],["});",1785],["UnityPurchasing.Initialize (this, builder);",1785],["/// ",1785],["/// This will be called when Unity IAP has finished initialising.",1785],["/// ",1785],["public void OnInitialized (IStoreController controller, IExtensionProvider extensions)",1785],["m_Controller = controller;",1785],["m_AppleExtensions = extensions.GetExtension ();",1785],["// On Apple platforms we need to handle deferred purchases caused by Apple's Ask to Buy feature.",1785],["// On non-Apple platforms this will have no effect; OnDeferred will never be called.",1785],["m_AppleExtensions.RegisterPurchaseDeferredListener (OnDeferred);",1785],["/// ",1785],["/// This will be called when a purchase completes.",1785],["/// ",1785],["public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)",1785],["if (Application.platform == RuntimePlatform.IPhonePlayer ",1785],["Application.platform == RuntimePlatform.tvOS) {",1785],["string transactionReceipt = m_AppleExtensions.GetTransactionReceiptForProduct (e.purchasedProduct);",1785],["Console.WriteLine (transactionReceipt);",1785],["// Send transaction receipt to server for validation",1785],["return PurchaseProcessingResult.Complete;",1785],["/// ",1785],["/// Called when Unity IAP encounters an unrecoverable initialization error.",1785],["///",1785],["/// Note that this will not be called if Internet is unavailable; Unity IAP",1785],["/// will attempt initialization until it becomes available.",1785],["/// ",1785],["public void OnInitializeFailed (InitializationFailureReason error)",1785],["/// ",1785],["/// Called when a purchase fails.",1785],["/// ",1785],["public void OnPurchaseFailed (Product i, PurchaseFailureReason p)",1785],["/// ",1785],["/// iOS Specific.",1785],["/// This is called as part of Apple's 'Ask to buy' functionality,",1785],["/// when a purchase is requested by a minor and referred to a parent",1785],["/// for approval.",1785],["///",1785],["/// When the purchase is approved or rejected, the normal purchase events",1785],["/// will fire.",1785],["/// ",1785],["/// Item.",1785],["private void OnDeferred (Product item)",1785],["Debug.Log (\"Purchase deferred: \" + item.definition.id);",1785],["endif // UNITY_PURCHASING",1785],["Unlike App Receipts, you cannot validate Transaction Receipts locally. Instead, you must send the receipt string to a remote server for validation. If you already use a remote server to validate App Receipts, send Transaction Receipts to the same Apple endpoint, to receive a JSON response.",1785],["Example JSON response:",1785],["\"receipt\": {",1785],["\"original_purchase_date_pst\": \"2017-11-15 15:25:20 America/Los_Angeles\",",1785],["\"purchase_date_ms\": \"1510788320209\",",1785],["\"unique_identifier\": \"0ea7808637555b2c633eb07aa1cb0894c821a6f9\",",1785],["\"original_transaction_id\": \"1000000352597239\",",1785],["\"bvrs\": \"0\",",1785],["\"transaction_id\": \"1000000352597239\",",1785],["\"quantity\": \"1\",",1785],["\"unique_vendor_identifier\": \"01B57C2E-9E91-42FF-9B0D-4983175D6694\",",1785],["\"item_id\": \"1141751870\",",1785],["\"original_purchase_date\": \"2017-11-15 23:25:20 Etc/GMT\",",1785],["\"product_id\": \"100.gold.coins\",",1785],["\"purchase_date\": \"2017-11-15 23:25:20 Etc/GMT\",",1785],["\"is_trial_period\": \"false\",",1785],["\"purchase_date_pst\": \"2017-11-15 15:25:20 America/Los_Angeles\",",1785],["\"bid\": \"com.unity3d.unityiap.demo\",",1785],["\"original_purchase_date_ms\": \"1510788320209\"",1785],["},",1785],["\"status\": 0",1785],["Intercepting Apple promotional purchases",1785],["Apple allows you to promote in-game purchases through your app’s product page. Unlike conventional in-app purchases, Apple promotional purchases initiate directly from the App Store on iOS and tvOS. The App Store then launches your app to complete the transaction, or prompts the user to download the app if it isn’t installed.",1785],["The IAppleConfiguration SetApplePromotionalPurchaseInterceptor callback method intercepts Apple promotional purchases. Use this callback to present parental gates, send analytics events, or perform other functions before sending the purchase to Apple. The callback uses the Product that the user attempted to purchase. You must call IAppleExtensions.ContinuePromotionalPurchases() to continue with the promotional purchase. This will initiate any queued-up payments.",1785],["If you do not set the callback, promotional purchases go through immediately and call ProcessPurchase with the result.",1785],["Note**: Calling these APIs on other platforms has no effect.",1785],["private IAppleExtensions m_AppleExtensions;",1785],["public void Awake() {",1785],["var module = StandardPurchasingModule.Instance();",1785],["var builder = ConfigurationBuilder.Instance(module);",1785],["// On iOS and tvOS we can intercept promotional purchases that come directly from",1785],["// the App Store.",1785],["// On other platforms this will have no effect; OnPromotionalPurchase will never be",1785],["// called.",1785],["builder.Configure().",1785],["SetApplePromotionalPurchaseInterceptorCallback(OnPromotionalPurchase);",1785],["Debug.Log(\"Setting Apple promotional purchase interceptor callback\");",1785],["public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {",1785],["m_AppleExtensions = extensions.GetExtension();",1785],["foreach (var item in controller.products.all) {",1785],["if (item.availableToPurchase) {",1785],["// Set all these products to be visible in the user's App Store",1785],["m_AppleExtensions.SetStorePromotionVisibility(item, AppleStorePromotionVisibility.Show);",1785],["private void OnPromotionalPurchase(Product item) {",1785],["Debug.Log(\"Attempted promotional purchase: \" + item.definition.id);",1785],["// Promotional purchase has been detected.",1785],["// Handle this event by, e.g. presenting a parental gate.",1785],["// Here, for demonstration purposes only, we will wait five seconds before continuing",1785],["// the purchase.",1785],["StartCoroutine(ContinuePromotionalPurchases());",1785],["private IEnumerator ContinuePromotionalPurchases() {",1785],["Debug.Log(\"Continuing promotional purchases in 5 seconds\");",1785],["yield return new WaitForSeconds(5);",1785],["Debug.Log(\"Continuing promotional purchases now\");",1785],["m_AppleExtensions.ContinuePromotionalPurchases (); // iOS and tvOS only",1785],["Testing",1785],["To test on Apple stores you must be using an iTunes connect test account, which can be created in iTunes connect.",1785],["Sign out of the App Store on the iOS device or laptop, launch your application and you will be prompted to log in when you attempt either a purchase or to restore transactions.",1785],["If you receive an initialization failure with a reason of NoProductsAvailable, follow this checklist:",1785],["iTunes Connect product identifiers must exactly match the product identifiers supplied to Unity IAP",1785],["In-App purchases must be enabled for your application in iTunes Connect",1785],["Products must be cleared for sale in iTunes Connect",1785],["It may take many hours for newly created iTunes Connect products to be available for purchase",1785],["You must agree to the latest iTunes Connect developer agreements and have active bank details",1785],["Mac App Store",1785],["When building a desktop Mac build you must select Mac App Store validation within Unity’s build settings.",1785],["Once you have built your App, you must update its info.plist file with your bundle identifier and version strings. Right click on the .app file and click show package contents, locate the info.plist file and update the CFBundleIdentifier string to your application's bundle identifier.",1785],["You must then sign, package and install your application. You will need to run the following commands from an OSX terminal:",1785],["codesign -f --deep -s \"3rd Party Mac Developer Application: \" your.app/Contents/Plugins/unitypurchasing.bundle",1785],["codesign -f --deep -s \"3rd Party Mac Developer Application: \" your.app",1785],["productbuild --component your.app /Applications --sign \"3rd Party Mac Developer Installer: \" your.pkg",1785],["To sign the bundle, you may first need to remove the Contents.meta file if it exists: your.app/Contents/Plugins/unitypurchasing.bundle/Contents.meta",1785],["In order to install the package correctly you must delete the unpackaged .app file before running the newly created package.",1785],["You must then launch your App from the Applications folder. The first time you do so, you will be prompted to enter your iTunes account details, for which you should enter your iTunes Connect test user account login. You will then be able to make test purchases against the sandbox environment.",1785],["2018-05-30 ",1785],["Ask to Buy, Transaction Receipts, and Intercepting Receipts added in 2017.3 NewIn20173",1785],["Handling purchases",1786],["Your Store's Purchase method is called when the user opts to make a purchase. Your store should take the user through the checkout process and call either the OnPurchaseSucceeded or OnPurchaseFailed method of the IStoreCallback.",1786],["Your store should supply a receipt and unique transaction ID; if the application has not already processed a purchase with the supplied tranasaction ID, Unity IAP will invoke the application's ProcessPurchase method.",1786],["Finishing Transactions",1786],["When the application acknowledges that a transaction has been processed, or if the transaction has already been processed, Unity IAP invokes your store’s FinishTransaction method.",1786],["Stores should use FinishTransaction to perform any housekeeping following a purchase, such as closing transactions or consuming consumable products.",1786],["Initialization",1787],["Your store’s Initialize method is called by Unity IAP with an IStoreCallback that your store uses to communicate back to Unity IAP asynchronously.",1787],["void Initialize(IStoreCallback callback) {",1787],["// Keep a reference to the callback for communicating with Unity IAP.",1787],["this.callback = callback;",1787],["Retrieving products",1788],["When your store's RetrieveProducts method is called it should fetch the latest product metadata and, optionally, ownership status for the current user.",1788],["When this process completes your store should call the OnProductsRetrieved method of the IStoreCallback supplied to your store upon initialisation, supplying a collection of ProductDescription that represent the items available for purchase.",1788],["Where products are owned by the user, your store may fill in the receipt and transaction ID fields of ProductDescription; Unity IAP will invoke the application’s ProcessPurchase method for any transactions the application has not already processed.",1788],["Note that if the user is offline your store should retry until the user regains connectivity, taking care to avoid impacting game performance through aggressive polling.",1788],["Handling errors",1788],["If products cannot be retrieved due to an unrecoverable error, such as the developer making an error with their store configuration, you should call the OnSetupFailed method of the IStoreCallback, indicating the InitializationFailureReason responsible.",1788],["Store Configuration",1789],["Your store may require developers to supply additional configuration information during initialization, for which your module can register a configuration instance that implements the IStoreConfiguration interface:",1789],["var config = new MyConfiguration(); // Implements IStoreConfiguration",1789],["BindConfiguration(new MyConfiguration());",1789],["When developers request an instance of your configuration type, Unity IAP first tries to cast your store implementation to the configuration type. Only if that cast fails will any instance bound via BindConfiguration will be used.",1789],["Store Extensions",1790],["Your store may offer additional functionality that does not fit into the cross platform purchase flow, for example the ability to refresh app receipts on Apple’s stores.",1790],["You should create an interface that defines the extended functionality, itself implementing the IStoreExtension interface:",1790],["/// ",1790],["/// Functionality specific to my store.",1790],["/// ",1790],["public interface IMyExtensions : IStoreExtension",1790],["// Hypothetical method for a store that provides User IDs.",1790],["String GetUserStoreId();",1790],["Applications request extended functionality via the IExtensionProvider. When they do so Unity IAP first tries to cast the active store implementation to the requested type.",1790],["If that cast fails, Unity IAP will provide any instance registered via a call your store module has provided via RegisterExtension, or null if no instance has been provided.",1790],["Modules should provide instances for the extension interfaces they define even when running on unsupported platforms, so as to avoid forcing application developers to use platform dependent compilation.",1790],["Registering your store",1791],["Call the RegisterStore method supplying a name for your store and your implementation, which must implement the IStore interface.",1791],["public override void Configure() {",1791],["RegisterStore(“GooglePlay”, InstantiateMyStore());",1791],["private void InstantiateMyStore() {",1791],["if (Application.platform == RuntimePlatform.Android) {",1791],["return new MyAlternativeGooglePlayImplementation ();",1791],["return null;",1791],["The store name must match the name developers use when defining products for your store so Unity IAP uses the correct product identifiers when addressing your store.",1791],["Store Modules",1792],["Store modules extend the AbstractPurchasingModule class, acting as factories Unity IAP can use to obtain an instance of your store along with any configuration and extensions.",1792],["Developers can supply multiple modules to Unity IAP, allowing them to use your custom store implementation alongside the default Unity-provided stores:",1792],["ConfigurationBuilder.Instance (MyCustomModule.Instance(), StandardPurchasingModule.Instance ());",1792],["Where two or more modules have implementations available for a given platform, precedence is given in order the modules were supplied to the ConfigurationBuilder; any implementation provided by MyCustomModule will be used in preference to StandardPurchasingModule.",1792],["Note that a module can support multiple stores; the StandardPurchasingModule handles all of Unity IAPs default store implementations.",1792],["Processing Purchases",1793],["The ProcessPurchase function of your store listener is called when a purchase completes. Your application should fulfil whatever the user has bought; for example, unlocking local content or sending purchase receipts to a server to update a server-side game model.",1793],["A result is returned to indicate whether or not your Application has finished processing the purchase:",1793],["Result Description ",1793],["PurchaseProcessingResult.Complete The application has finished processing the purchase and should not be informed of it again. ",1793],["PurchaseProcessingResult.Pending The application is still processing the purchase and ProcessPurchase will be called again the next time the Application starts, unless the ConfirmPendingPurchase function of IStoreController is called. ",1793],["Note that ProcessPurchase may be called at any point following a successful initialization. If your application crashes during execution of the ProcessPurchase handler, then it is invoked again the next time Unity IAP initializes, so you may wish to implement your own additional de-duplication.",1793],["Reliability",1793],["Unity IAP requires explicit acknowledgement of purchases to ensure that purchases are reliably fulfilled in the event of network outages or application crashes. Any purchases that complete while the application is offline will be sent to the application on next initialization.",1793],["Completing purchases immediately",1793],["When PurchaseProcessingResult.Complete is returned, Unity IAP finishes the transaction immediately (as shown in the diagram below).",1793],["You must not return PurchaseProcessingResult.Complete if you are selling consumable products and fulfilling them from a server (for example, providing currency in an online game).",1793],["If you do, there is a risk that consumable purchases will be lost if your Application is uninstalled before the cloud save takes place.",1793],["Saving purchases to the cloud",1793],["If you are saving consumable purchases to the cloud, you must return PurchaseProcessingResult.Pending and call ConfirmPendingPurchase only when you have successfully persisted the purchase.",1793],["When returning Pending, Unity IAP keeps transactions open on the underlying store until confirmed as processed, ensuring consumable purchases are not lost even if a user reinstalls your application while a consumable is in this state.",1793],["Purchase Receipts",1794],["Unity IAP provides purchase receipts as a JSON hash containing the following keys and values:",1794],["Key Value ",1794],["Store The name of the store in use, such as GooglePlay or AppleAppStore ",1794],["TransactionID This transaction’s unique identifier, provided by the store ",1794],["Payload Varies by platform, details below. ",1794],["iOS",1794],["Payload varies depending upon the device's iOS version.",1794],["iOS version Payload ",1794],["iOS >= 7 payload is a base 64 encoded App Receipt. ",1794],["iOS < 7 payload is a SKPaymentTransaction transactionReceipt. ",1794],["Mac App Store",1794],["Payload is a base 64 encoded App Receipt.",1794],["Google Play",1794],["Payload is a JSON hash with the following keys and values:",1794],["Key Value ",1794],["json A JSON encoded string provided by Google; INAPP_PURCHASE_DATA ",1794],["signature A signature for the json parameter, as provided by Google; INAPP_DATA_SIGNATURE ",1794],["Universal Windows Platform",1794],["Payload is an XML string as specified by Microsoft",1794],["• 2017-05-16 ",1794],["Restoring Transactions",1795],["When a user reinstalls your application they should be granted any Non-Consumable or renewable Subscription products they already own. App stores maintain a permanent record of each user's Non-Consumable and renewable Subscription products which Unity IAP can retrieve. Non-renewing subscriptions on Apple platforms cannot be restored. If you use non-renewing subscription products on Apple platforms, it is up to you to keep a record of the active subscriptions and sync the subscription between devices.",1795],["On platforms that support it (e.g. Google Play and Universal Windows Applications) Unity IAP automatically restores any products the user owns during the first initialization following reinstallation; the ProcessPurchase method of your IStoreListener will be called for each owned item.",1795],["On Apple platforms users must enter their password to retrieve previous transactions so your application must provide users with a button letting them do so. During this process the ProcessPurchase method of your IStoreListener will be invoked for any items the user already owns.",1795],["/// ",1795],["/// Your IStoreListener implementation of OnInitialized.",1795],["/// ",1795],["public void OnInitialized(IStoreController controller, IExtensionProvider extensions)",1795],["extensions.GetExtension ().RestoreTransactions (result => {",1795],["if (result) {",1795],["// This does not mean anything was restored,",1795],["// merely that the restoration process succeeded.",1795],["} else {",1795],["// Restoration failed.",1795],["});",1795],["Setting up Unity IAP",1796],["Note**: Screenshots and menu choices might differ between release versions.",1796],["Overview",1796],["This document explains how to activate In-App Purchasing (IAP).",1796],["The Unity IAP package provides coded and codeless approaches that you set up to:",1796],["\nAllow users to buy items in your games.\n",1796],["\nConnect to stores so that you can obtain revenue from these purchases.\n",1796],["Here is an overview of the steps:",1796],["\nDefine your In-app purchase strategy for this game.\n",1796],["\nSetup your project as a Unity service.\n",1796],["\nActivate IAP to automatically install the package.\n",1796],["\nConfigure settings.\n",1796],["\nCreate and catalog your the in-game items that you want to sell.\n",1796],["\nUse the Codeless IAP button to give users a way to buy items. Then, once you have the logic working, consider customizing the button look and feel. Or use the scripted IAP for a rich API to enhance this process.\n",1796],["\nConnect your app to the relevant app-stores, such as Google, Apple, or Android.\n",1796],["\nAdd items to the stores.\n",1796],["Put it all together:",1796],["\nConfigure your IAP using guidance from this doc, support, and the IAP forum.\n",1796],["\nTest everything.\n",1796],["\nMake it live.\n",1796],["You can also do many of these steps, or fine-tune what you create, with the In-App Purchasing API.",1796],["Note**: Versions of Unity IAP between 4.2.0 and 4.6.0 automatically install Unity Analytics. Unity Analytics is a paid service, and if your usage exceeds the free tier limits, you will be responsible for paying for your usage. To avoid using Unity Analytics, install Unity IAP 4.7.0 or later, and/or remove Unity Analytics from your project (which you can learn more about here).",1796],["Getting Started",1796],["Note**: The Samsung Galaxy store is now obsolete and is no longer supported in the Unity In-App Purchasing package 4.0.0 and later. This guide to configure the Samsung Galaxy store only applies to the IAP package version 3.1.0 and earlier. If you are using the Unity IAP package 4.0.0 and later and you want to implement a Samsung Galaxy store, use the Unity Distribution Platform instead.",1796],["Open your Unity project in the Unity Editor.",1796],["Choose Window\\General\\Services. The services window will appear.",1796],["Create a Project ID, then connect the project to an organization.",1796],["Answer the COPPA compliance questions.",1796],["The services window will display a list of services. Click In-App Purchasing.",1796],["The Project Settings window appears.",1796],["Activate the toggle next to In-App Purchasing Settings to ON.",1796],["This automatically installs the IAP package from the package manager, providing you with new features and menu items to help you manage IAP.",1796],["Next Steps",1796],["Define your In-App Purchase strategy",1796],["Your task will be to create items for players to buy and obtain their identifiers.",1796],["You must tie product identifiers (strings) to each item you are selling by using a specified format. Some stores require that you customize the Product ID for their stores.",1796],["Planning:",1796],["\nDefine your strategy to determine when/how users can buy things\n",1796],["\nDefine your pricing strategy\n",1796],["\nDefine the types of products (subscriber, consumable, non consumable)\n",1796],["Where to learn more",1796],["IAP Samples",1796],["From the IAP Project Settings Page, select Open Package Manager from Options.",1796],["Navigate to In App Purchasing. On the right information panel, find Samples.",1796],["Expand Samples, then select Import.",1796],["Forum tutorials",1796],["Visit the Unity forum.",1796],["Unity Learn IAP classes",1796],["Refer to the Unity Learn IAP classes.",1796],["Troubleshooting",1796],["How to resolve compilation errors during upgrades",1796],["Important notes if you are upgrading from Unity IAP version 2.x to future versions.**",1796],["If you are updating from Unity IAP (com.unity.purchasing + the Asset Store plugin) versions 2.x to future versions, to resolve compilation errors, complete the following actions:",1796],["\nMove IAPProductCatalog.json and BillingMode.jsonfrom Assets/Plugins/UnityPurchasing/Resources/ to Assets/Resources/\n",1796],["\nMove AppleTangle.cs and GooglePlayTangle.cs FROM: 'Assets/Plugins/UnityPurchasing/generated' TO: Assets/Scripts/UnityPurchasing/generated.\n",1796],["\nRemove all remaining Asset Store plugin folders and files in Assets/Plugins/UnityPurchasing from your\n",1796],["project.",1796],["Common Unity IAP integration compiler errors",1796],["The following error messages might indicate that Unity IAP is deactivated in the Unity Cloud Services window, or that Unity is disconnected from the Internet:",1796],["CS0246",1796],["System.Reflection.ReflectionTypeLoadException",1796],["UnityPurchasing/Bin/Stores.dll",1796],["UnityEngine.Purchasing",1796],["To resolve these errors:",1796],["Reload the Services window by closing, then reopening it. After reloading, ensure that the Unity IAP service is active.",1796],["If this doesn’t work, try to disconnect and reconnect to the Internet, then sign back into Unity Services and re-activate Unity IAP.",1796],["Note**: You must have an Owner or Manager role for the project.",1796],["Store Extensions",1797],["Stores may offer unique functionality that does not fit into the normal cross-platform purchase flow. This extended functionality is accessed via the IExtensionProvider which is provided to your application when Unity IAP initializes successfully.",1797],["It is not necessary to use platform-dependent compilation when using extensions; each extension comes with a fake no-op implementation which is used when running on a platform that does not offer the extended functionality.",1797],["For example, the following snippet accesses the RefreshReceipt mechanism Apple offers to fetch a refreshed App Receipt from Apple's servers. It can be compiled on any Unity IAP platform, and if you were to run it on a non Apple platform such as Android it would have no effect; the supplied lambda would never be invoked.",1797],["/// ",1797],["/// Called when Unity IAP is ready to make purchases.",1797],["/// ",1797],["public void OnInitialized (IStoreController controller, IExtensionProvider extensions)",1797],["extensions.GetExtension ().RefreshAppReceipt (result => {",1797],["if (result) {",1797],["// Refresh finished successfully.",1797],["} else {",1797],["// Refresh failed.",1797],["});",1797],["Subscription Product support",1798],["Unity IAP supports Product subscription information queries through the SubscriptionManager class. For example code, please review the IAPDemo.cs script included in the Unity IAP SDK 1.19+.",1798],["SubscriptionManager class methods",1798],["This class supports the Apple store and Google Play store. For Google Play, this class only supports Products purchased using IAP SDK 1.19+.",1798],["Method Description ",1798],["public SubscriptionInfo getSubscriptionInfo() Returns a SubscriptionInfo object (see below) ",1798],["SubscriptionInfo class methods",1798],["The SubscriptionInfo class is a container for a Product’s subscription-related information.",1798],["Method Description ",1798],["public string getProductId() Returns a Product’s store ID. ",1798],["public DateTime getPurchaseDate() Returns the Product’s purchase date. For Apple, the purchase date is the date when the subscription was either purchased or renewed. For Google, the purchase date is the date when the subscription was originally purchased. ",1798],["public Result isSubscribed() Returns a Result enum to indicate whether this Product is currently subscribed or not. Non-renewable Products in the Apple store return a Result.Unsupported value. Auto-renewable Products in the Apple store and subscription products in the Google Play store return a Result.True or Result.False value. ",1798],["public Result isExpired() Returns a Result enum to indicate whether this Product has expired or not. * Non-renewable Products in the Apple store return a Result.Unsupported value. * Auto-renewable Products in the Apple store and subscription products in the Google Play store return a Result.True or Result.False value. ",1798],["public Result isCancelled() Returns a Result enum to indicate whether this Product has been cancelled. A cancelled subscription means the Product is currently subscribed, but will not renew on the next billing date. Non-renewable Products in the Apple store return a Result.Unsupported value. Auto-renewable Products in the Apple store and subscription products in the Google Play store return a Result.True or Result.False value. ",1798],["public Result isFreeTrial() Returns a Result enum to indicate whether this Product is a free trial. * Products in the Google Play store return Result.Unsupported if the application does not support version 6+ of the Android in-app billing API. Non-renewable Products in the Apple store return a Result.Unsupported value. Auto-renewable Products in the Apple store and subscription products in the Google Play store return a Result.True or Result.False value. ",1798],["public Result isAutoRenewing() Returns a Result enum to indicate whether this Product is auto-renewable. Non-renewable Products in the Apple store return a Result.Unsupported value. Auto-renewable Products in the Apple store and subscription products in the Google Play store return a Result.True or Result.False value. ",1798],["public TimeSpan getRemainingTime() Returns a TimeSpan to indicate how much time remains until the next billing date. Products in the Google Play store return TimeSpan.MaxValue if the application does not support version 6+ of the Android in-app billing API. ",1798],["public Result isIntroductoryPricePeriod() Returns a Result enum to indicate whether this Product is within an introductory price period. On-renewable Products in the Apple store return a Result.Unsupported value. Auto-renewable Products in the Apple store and subscription products in the Google Play store return a Result.True or Result.False value. Products in the Google Play store return Result. Unsupported if the application does not support version 6+ of the Android in-app billing API. ",1798],["public TimeSpan getIntroductoryPricePeriod() Returns a TimeSpan to indicate how much time remains for the introductory price period. Subscription products with no introductory price period return TimeSpan.Zero. Products in the Apple store return TimeSpan.Zero if the application does not support iOS version 11.2+, macOS 10.13.2+, or tvOS 11.2+. ",1798],["public long getIntroductoryPricePeriodCycles() Returns the number of introductory price periods that can be applied to this Product.Products in the Apple store return 0 if the application does not support iOS version 11.2+, macOS 10.13.2+, or tvOS 11.2+. ",1798],["public string getIntroductoryPrice() Returns a string to indicate the introductory price of the Product.Products with no introductory price return a \"not available\" value. Apple store Products with an introductory price return a value formatted as “0.99USD”. Google Play Products with an introductory price return a value formatted as “$0.99”. Products in the Apple store return “not available” if the application does not support iOS version 11.2+, macOS 10.13.2+, or tvOS 11.2+. ",1798],["public DateTime getExpireDate() Returns the date of the Product’s next auto-renew or expiration (for a cancelled auto-renewing subscription).Products in the Google Play store return TimeSpan.MaxValue if the application does not support version 6+ of the Android in-app billing API. ",1798],["2018-05-30 ",1798],["Added Subscription Product support in 2018.1 NewIn20181",1798],["Universal Windows Platform",1799],["Simulator",1799],["Unity IAP features support for Microsoft's In App Purchase simulator, which allows you to test IAP purchase flows on devices before publishing your application.",1799],["The simulator can be enabled when configuring Unity IAP before initialization, as follows:",1799],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1799],["builder.Configure().useMockBillingSystem = true;",1799],["Make sure you disable the mock billing system before publishing your application.",1799],["• 2017-05-16 ",1799],["Receipt validation",1800],["Receipt validation helps you prevent users from accessing content they have not purchased.",1800],["Point of validation",1800],["It is best practice to validate the receipt at the point where your application’s content is distributed.",1800],["Local validation:** For client-side content, where all content is contained in the application and is enabled once purchased, the validation should take place on the target device, without the need to connect to a remote server. Unity IAP is designed to support local validation within your application. See Local validation below for more information.",1800],["Remote validation:** For server-side content, where content is downloaded once purchased, the validation should take place on the server before the content is released. Unity does not offer support for server-side validation; however, third-party solutions are available, such as Nobuyori Takahashi’s IAP project.",1800],["Local validation",1800],["Important**: While Unity IAP provides a local validation method, local validation is more vulnerable to fraud. Validating sensitive transactions server-side where possible is considered best practice. For more information, please see Apple and Android's documentation on fraud prevention.",1800],["If the content that the user is purchasing already exists on the device, the application simply needs to make a decision about whether to unlock it.",1800],["Unity IAP provides tools to help you hide content and to validate and parse receipts through Google Play and Apple stores.",1800],["Obfuscating encryption keys",1800],["Receipt validation is performed using known encryption keys. For your application, this is an encrypted Google Play public key, and/or Apple's root certificate.",1800],["If a user can replace these, they can defeat your receipt validation checks, so it is important to make it difficult for a user to easily find and modify these keys.",1800],["Unity IAP provides a tool that can help you obfuscate your encryption keys within your Application. This confuses or jumbles the keys so that it is much harder for a user to acces them. In the Unity menu bar, go to Window > Unity IAP > IAP Receipt Validation Obfuscator.",1800],["This window encodes both Apple's root certificate (which is bundled with Unity IAP) and your Google Play public key (from the application's Google Play Developer Console's Services & APIs page) into two different C# files: AppleTangle and GooglePlayTangle. These are added to your project for use in the next section.",1800],["Note that you do not have to provide a Google Play public key if you are only targeting Apple's stores, and vice versa.",1800],["Validating receipts",1800],["Use the CrossPlatformValidator class for validation across both Google Play and Apple stores.",1800],["You must supply this class with either your Google Play public key or Apple's root certificate, or both if you wish to validate across both platforms.",1800],["The CrossPlatformValidator performs two checks:",1800],["Receipt authenticity is checked via signature validation.",1800],["The application bundle identifier on the receipt is compared to the one in your application. An InvalidBundleId exception is thrown if they do not match.",1800],["Note that the validator only validates receipts generated on Google Play and Apple platforms. Receipts generated on any other platform, including fakes generated in the Editor, throw an IAPSecurityException.",1800],["If you try to validate a receipt for a platform that you haven't supplied a secret key for, a MissingStoreSecretException is thrown.",1800],["public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)",1800],["bool validPurchase = true; // Presume valid for platforms with no R.V.",1800],["// Unity IAP's validation logic is only included on these platforms.",1800],["if UNITY_ANDROID UNITY_IOS UNITY_STANDALONE_OSX",1800],["// Prepare the validator with the secrets we prepared in the Editor",1800],["// obfuscation window.",1800],["var validator = new CrossPlatformValidator(GooglePlayTangle.Data(),",1800],["AppleTangle.Data(), Application.bundleIdentifier);",1800],["try {",1800],["// On Google Play, result has a single product ID.",1800],["// On Apple stores, receipts contain multiple products.",1800],["var result = validator.Validate(e.purchasedProduct.receipt);",1800],["// For informational purposes, we list the receipt(s)",1800],["Debug.Log(\"Receipt is valid. Contents:\");",1800],["foreach (IPurchaseReceipt productReceipt in result) {",1800],["Debug.Log(productReceipt.productID);",1800],["Debug.Log(productReceipt.purchaseDate);",1800],["Debug.Log(productReceipt.transactionID);",1800],["} catch (IAPSecurityException) {",1800],["Debug.Log(\"Invalid receipt, not unlocking content\");",1800],["validPurchase = false;",1800],["endif",1800],["if (validPurchase) {",1800],["// Unlock the appropriate content here.",1800],["return PurchaseProcessingResult.Complete;",1800],["It is important you check not just that the receipt is valid, but also what information it contains. A common technique by users attempting to access content without purchase is to supply receipts from other products or applications. These receipts are genuine and do pass validation, so you should make decisions based on the product IDs parsed by the CrossPlatformValidator.",1800],["Store-specific details",1800],["Different stores have different fields in their purchase receipts. To access store-specific fields, IPurchaseReceipt can be downcast to two different subtypes: GooglePlayReceipt and AppleInAppPurchaseReceipt.",1800],["var result = validator.Validate(e.purchasedProduct.receipt);",1800],["Debug.Log(\"Receipt is valid. Contents:\");",1800],["foreach (IPurchaseReceipt productReceipt in result) {",1800],["Debug.Log(productReceipt.productID);",1800],["Debug.Log(productReceipt.purchaseDate);",1800],["Debug.Log(productReceipt.transactionID);",1800],["GooglePlayReceipt google = productReceipt as GooglePlayReceipt;",1800],["if (null != google) {",1800],["// This is Google's Order ID.",1800],["// Note that it is null when testing in the sandbox",1800],["// because Google's sandbox does not provide Order IDs.",1800],["Debug.Log(google.transactionID);",1800],["Debug.Log(google.purchaseState);",1800],["Debug.Log(google.purchaseToken);",1800],["AppleInAppPurchaseReceipt apple = productReceipt as AppleInAppPurchaseReceipt;",1800],["if (null != apple) {",1800],["Debug.Log(apple.originalTransactionIdentifier);",1800],["Debug.Log(apple.subscriptionExpirationDate);",1800],["Debug.Log(apple.cancellationDate);",1800],["Debug.Log(apple.quantity);",1800],["Parsing raw Apple receipts",1800],["Use the AppleValidator class to extract detailed information about an Apple receipt. Note that this class only works with iOS App receipts from version 7.0 onwards, not Apple's deprecated transaction receipts.",1800],["if UNITY_ANDROID UNITY_IOS UNITY_STANDALONE_OSX",1800],["var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());",1800],["// Get a reference to IAppleConfiguration during IAP initialization.",1800],["var appleConfig = builder.Configure();",1800],["var receiptData = System.Convert.FromBase64String(appleConfig.appReceipt);",1800],["AppleReceipt receipt = new AppleValidator(AppleTangle.Data()).Validate(receiptData);",1800],["Debug.Log(receipt.bundleID);",1800],["Debug.Log(receipt.receiptCreationDate);",1800],["foreach (AppleInAppPurchaseReceipt productReceipt in receipt.inAppPurchaseReceipts) {",1800],["Debug.Log(productReceipt.transactionIdentifier);",1800],["Debug.Log(productReceipt.productIdentifier);",1800],["endif",1800],["The AppleReceipt type models Apple's ASN1 receipt format. See Apple's documentation for an explanation of its fields.",1800],["Configuring for Windows Store",1801],["Introduction",1801],["This guide describes the process of establishing the digital records and relationships necessary for a Unity game to interact with an In-App Purchase Store. The Unity IAP purchasing API is targeted.",1801],["In-App Purchase (IAP) is the process of transacting money for digital goods. A platform's Store allows purchase of Products representing digital goods. These Products have an Identifier, typically of string datatype. Products have Types to represent their durability: subscription, consumable (capable of being rebought), and non-consumable (capable of being bought once) are the most common.",1801],["Windows Store",1801],["Introduction",1801],["Windows App Development offers both local and remote Windows Store client-server IAP testing.",1801],["This page covers local testing with the emulator and a simulated billing system, then Windows Store testing which limits app publication visibility to those with the app's link.",1801],["Note**: This guide targets Windows 10 Universal SDK. Other Windows targets are available.",1801],["Note**: Unity versions 5.6+ support IL2CPP Windows builds. Using Unity IAP for IL2CPP on Windows with earlier versions of Unity generates a compilation error.",1801],["Getting started",1801],["Write a game implementing Unity IAP. Refer to Unity IAP Initialization.",1801],["Keep the game's product identifiers on-hand for use in Microsoft's Windows Dev Center Dashboard to perform remote Windows Store testing later.",1801],["Test IAP locally",1801],["Microsoft offers a simulated billing system, permitting local testing of IAP. This removes the need to configure anything on the Windows Dev Center or communicate with the Windows Store via the app for initial integration testing.",1801],["Configuring local testing is far simpler than for remote Store testing, although it requires temporary code changes to the app which need to be removed before app publication.",1801],["To test IAP locally:",1801],["Activate the simulated billing system in code where Unity IAP is initialized with its ConfigurationBuilder instance.",1801],["Warning**: Remove these code changes after testing, before publishing to the Store; otherwise the app will not transact any real money via IAP!",1801],["Build the application in Unity for Universal Windows Platform.",1801],["Open the application in Visual Studio and run the Local Machine target for x86.",1801],["Test IAP.",1801],["Remove the simulated billing system from code.",1801],["Register the App on the Windows Store",1801],["Once basic IAP functionality has been tested locally, you can more confidently begin working with the Windows Store. This test confirms that the app has all necessary IAPs registered correctly to permit purchasing.",1801],["For testing IAP and publication use the Windows Dev Center and configure the app with a limited visibility. This limits the app's visibility to those who have its direct link.",1801],["Note**: Testing on the Store also requires Certification, which might serve as an obstacle to testing. It is therefore important to complete testing locally before proceeding to testing with Windows Store.",1801],["In the Dev Center create a new app.",1801],["Reserve the app name.",1801],["To test IAP with the Windows Store, the Windows Dev Center needs the published app. Click Pricing and availability and limit the app's Store visibility so that it is only available to users who have the app's direct link.",1801],["\"Distribution and visibility\" has a list of the Store's available publication behaviors. Select Hide this app in the Store.",1801],["Collect the direct link. This will be used to install the app on a Windows 10 device for testing.",1801],["Submit the app for Certification.",1801],["Submissions might take many hours to complete, and blocking issues might be raised by Microsoft Certification, which you will need to address before the submission passes successfully.",1801],["Add In-App Products on the Store",1801],["Add each IAP, setting the price to be \"free\" so that no money will be transacted during testing. After the test is completed, reconfigure the IAP with the desired price and republish it. Refer to IAP Submissions.",1801],["In the new app's \"App overview\" page, click Create a new IAP .",1801],["Enter the product ID.",1801],["Configure the type, price, and language.",1801],["Note**: For Pricing and availability choose free for testing purposes to avoid incurring unnecessary financial charges. When you finish testing, yo can then update and re-submit each IAP with the desired price in preparation for release to the public.",1801],["Select Properties to set the type.",1801],["Select Pricing and availability to set the price choosing Free as explained above.",1801],["Select Manage languages and declare the supported languages.",1801],["Select the declared language when returned to the IAP overview.",1801],["Populate the Title, Description and Icon.",1801],["Submit the IAP for Certification.",1801],["Similar to apps, IAP submissions might take many hours to complete, and blocking issues might be raised by Microsoft Certification, which you will need to address before the submission passes successfully.",1801],["Test IAP with the Store",1801],["These steps follow a branch of the beta test process made possible with Windows Store. This involves limiting the visibility of the app itself, negating discovery by the public through the \"Search Store\" function. For more information, refer to Windows Dev Center resources on beta testing and targeted distribution.",1801],["Confirm both the app and IAPs have completed Certification.",1801],["Install the app on a Windows 10 device via the direct link, generated above.",1801],["Test IAP.",1801],["After passing test, update the IAP with the desired public pricing, update the app visibility settings to share with the general public, and submit both kinds of changes for final Certification.",1801],["• 2017-05-16 ",1801],["Unity Integrations",1802],["Unity Integrations allow you to connect the following Unity Services in your development workflow to non-Unity tools:",1802],["To add an Integration, you must be an Owner or Manager on the Project. For information on assigning roles, see the Members & Groups section of Managing your Organization.",1802],["Unity Integrations supports the following non-Unity tools:",1802],["Webhooks: A user-defined callback that allows Unity to send POST requests to an external service.",1802],["Discord: Send notifications to your team’s Discord channel through a Discord-defined webhook.",1802],["Slack: Send notifications to your team’s Slack channel through a Slack-defined webhook.",1802],["Email: Send notifications to your team by Email.",1802],["JIRA: Create or update JIRA tickets using a JIRA-defined webhook.",1802],["Trello: Create and comment on Trello cards.",1802],["Integration limits",1802],["Unity Personal limits users to one Integration for all events, but multiple Unity services can use that Integration. Unity Teams, Plus, and Pro users can have up to 100 Integrations. If your Unity Teams, Pro, or Plus subscription expires, Unity keeps all of your current Integrations, but automatically disables them. If this happens, you can still sign into the Unity Services Dashboard and enable a single Integration.",1802],["Adding an Integration",1802],["To add an Integration to your workflow:",1802],["Sign in to the Unity Services Dashboard.",1802],["Select the Project that you want to add an Integration to.",1802],["In the left navigation bar, select Settings > Integrations.",1802],["The integrations dashboard appears. Click the NEW INTEGRATION button.",1802],["Select the Integration you want to enable.",1802],["Select the event(s) that you want to trigger the Integration, then click the NEXT button.",1802],["Configure the Integration options. These options vary depending on the Integration selected, and are described in detail in the sections below.",1802],["",1802],["Webhook Integrations",1802],["To configure a webhook Integration, supply the following information:",1802],["Parameter Description ",1802],["Display Name A name to identify the Integration in the Integrations list. ",1802],["Webhook URL The URL of the server endpoint that receives the webhook POST requests from the Unity service. ",1802],["Authentication Secret The client secret of your receiving application. ",1802],["Content Type The MIME type of the content. Select the content type of your data from the drop-down menu. ",1802],["Disable SSL/TLS Verification Tick this checkbox to disable verification of SSL/TLS security certificates. Verifying SSL/TLS certificates helps ensure that your data is sent securely to the above Webhook URL. Turning this option on is not recommended, so only do this if you absolutely know what you're doing. ",1802],["",1802],["Discord Integrations",1802],["To configure Discord Integrations, Unity calls an app that uses the Discord API to register a webhook to a Discord channel. If you do not have a Discord server, see How do I create a server? in the Discord documentation.",1802],["Important**: You must enable webhooks on the account with which you are integrating.",1802],["To complete the configuration:",1802],["Create a new Discord integration and select its events.",1802],["Click the NEXT button. Sign in on the Discord login screen.",1802],["The CONNECT TO DISCORD dialog screen appears.",1802],["From the Select a server drop-down menu, select your Discord server.",1802],["From the Select a channel menu, select a channel to post notifications to.",1802],["Click the Authorize button.",1802],["",1802],["Slack Integrations",1802],["To configure Slack Integrations, Unity calls an app that uses the Slack API to register a webhook to a Slack channel.",1802],["After creating a new Slack integration and configuring the events that you want to appear, you must authorize Unity to access your Slack server.",1802],["If you do not have a Slack server, see Create a Slack workspace in the Slack documentation.",1802],["To complete the configuration:",1802],["Sign in to your Slack account.",1802],["In the right-hand corner of the of the app, select a Slack workspace.",1802],["From the Post to drop-down menu, select the Slack channel to post notifications to.",1802],["Click the Authorize button.",1802],["",1802],["Email Integrations",1802],["Email Integrations notify team members when specified events for your Project occur.",1802],["Create an email integration from the dashboard to view the events menu.",1802],["Select the events for which you want to receive email notifications, then click the NEXT button.Note: Cloud Build handles email notification settings separately. You can configure them by clicking the here link at the bottom of the events menu.",1802],["Select the team members for whom you'd like notifications to be sent.",1802],["Select Send email to new team members if you'd like team members that you add in the future to automatically receive the emails that other team members receive.",1802],["",1802],["JIRA Integrations",1802],["The Unity JIRA Integration allows you to interact with JIRA as follows:",1802],["Cloud Diagnostics: Create a new issue when you receive a report. Unity creates the issue with one of the following labels: unity-user-report, unity-crash-report, or unity-exception-report. You must have permission to create an issue and modify the label column for these Integrations to work.",1802],["After you have entered the information for your JIRA instance, you must supply the following additional information for Cloud Diagnostics:",1802],["Parameter Description ",1802],["Create Issues In This Project Select the project in which to create the issues. ",1802],["Mark Incoming Issues As Select the type of issue to log the report as. ",1802],["",1802],["Trello Integrations",1802],["The Unity Trello Integration has the following features:",1802],["Cloud Diagnostics: When you receive a user report, Unity automatically creates and adds a new card to your board.",1802],["To configure a Trello Integration for Cloud Diagnostics:",1802],["Create a Trello Integration in your Unity Services Dashboard. To do this, select your Project from the dashboard then go to Settings > Integrations and choose Trello Integration from the window.",1802],["Select the services and events you'd like to integrate your Project with, then select Next.",1802],["Unity prompts you to sign into Trello, and it asks for permission to make changes to your Trello boards. This permission is needed so that Unity can create, update and comment on cards.",1802],["Fill out the configuration page with a summary of the Integration, including what board and list Unity should post to, and save the settings.",1802],["Managing existing Integrations",1802],["To manage existing Integrations:",1802],["Sign in to the Unity Services Dashboard.",1802],["Select the Project with the Integration you want to edit.",1802],["In the left navigation column, select Settings > Integrations.",1802],["To edit or delete an existing Integration, click EDIT next to the Integration you want to modify. The types of edits you can make depend on the Integration:",1802],["For Slack and Discord Integrations, you can update the display name or delete the Integration.",1802],["For webhook and JIRA Integrations, you can modify any of the configuration parameters that you supplied when you created them.",1802],["To enable or disable an existing Integration, click the Status toggle to enable or disable the Integration.",1802],["Unity User Manual 2022.3 (LTS)",1803],["Use the Unity Editor to create 2D and 3D games, apps, and experiences. Download the Editor at unity3d.com.",1803],["The Unity User Manual helps you learn how to use the Unity Editor and its associated services. You can read it from start to finish, or use it as a reference.",1803],["If it's your first time using Unity, take a look at the introductory documentation on Working with Unity, and refer to the Unity Tutorials.",1803],["",1803],["New**",1803],["Features introduced in 2022 LTS: What's New",1803],["Upgrading Unity projects from older versions of Unity: Upgrade Guide",1803],["",1803],["",1803],["Packages**",1803],["Learn about packages: Working with the Package Manager",1803],["Find documentation for a specific package: Verified packages and Preview packages",1803],["Learn how to build a custom package: Creating custom packages",1803],["",1803],["",1803],["Best Practice guides**",1803],["Best practices from Unity Support engineers: Advanced best practice guides",1803],["",1803],["",1803],["",1803],["Unity User Manual sections",1803],["",1803],["Working in Unity###",1803],["A complete introduction to the Unity Editor.",1803],["",1803],["",1803],["All of the Unity Editor's 2D-specific features including gameplay, sprites and physics.",1803],["",1803],["",1803],["The visual aspects of the Unity Editor including cameras and lighting.",1803],["",1803],["",1803],["Simulation of 3D motion, mass, gravity and collisions.",1803],["",1803],["",1803],["How to implement Multiplayer and networking.",1803],["",1803],["",1803],["Programming your games by using scripting in the Unity Editor.",1803],["",1803],["",1803],["Audio in the Unity Editor, including clips, sources, listeners, importing and sound settings.",1803],["",1803],["",1803],["Animation in the Unity Editor.",1803],["",1803],["",1803],["User interface toolkits available in the Unity Editor.",1803],["",1803],["",1803],["",1803],["",1803],["",1803],["",1803],["Information about the platforms that you can build your application for.",1803],["",1803],["",1803],["",1803],["Further sources of information",1803],["Unity Answers or Unity Forums - here you can ask questions and search answers.",1803],["The Unity Knowledge Base - a collection of answers to questions posed to Unity's Support teams.",1803],["Tutorials - step by step video and written guides to using the Unity Editor.",1803],["Asset Store help - help on Asset Store content sharing.",1803],["Known issues",1803],["Is a feature not working as you expect it to? It might be an existing Known Issue. Please check using the Issue Tracker at issuetracker.unity3d.com.",1803],["Multiplayer Services",1804],["Unity's Multiplayer Service is the easiest way to set up real-time, networked games for Unity. It's fast to implement and highly customizable. Unity-provided servers and matchmaking services ensure that your players can easily find and play with each other.",1804],["Working in Unity",1805],["This section explains the Unity interface, menu items, using Assets, creating Scenes, and publishing builds:",1805],["Downloading, installing, and activating Unity, using the Hub, and how to manage your licenses.",1805],["An in-depth look at each of the main windows you'll use every day in Unity, including useful shortcuts and hotkeys.",1805],["How to get started making Scenes, GameObjects and Components; reading input; and adding gameplay or interactivity to your Project.",1805],["How to get Assets into Unity from a variety of different sources, including graphics, art and sound from external programs, package files from other developers, and ready-made Assets from our Package Manager and the Asset Store.",1805],["Information about many of the Editor's powerful features, to help you customize your workflow, integrate with external tools, and extend the Editor itself.",1805],["Get performance information about your application with the Unity Profiler.",1805],["Important notes for upgrading projects that were authored with older versions of Unity.",1805],["Requirements and compatibility",1806],["Unity Remote supports Android, iOS, and tvOS devices. To connect Unity Remote to an Android device, you need to have the Android SDK on your development machine. For more information, refer to Android environment setup.",1806],["Note**: Unity Remote replaces the iOS Remote and Android Remote applications from earlier versions of Unity. Unity no longer supports these older applications.",1806],["Set up Unity Remote",1806],["To set up Unity Remote:",1806],["Install Unity Remote on the target device.",1806],["Setup the USB connection between the target device and your computer.",1806],["Connect the Unity Editor to Unity Remote.",1806],["Install Unity Remote",1806],["Download the Unity Remote application from Google Play.",1806],["Setup the USB connection",1806],["Before you connect the target device to your computer, enable USB debugging on the target device. For information on how to do this, refer to Debugging on an Android device. After you enable USB debugging, run Unity Remote then connect the target device to your computer via a USB connection.",1806],["Connect Unity Remote to the Unity Editor",1806],["With the target device connected to your computer, the Unity Editor should be able to detect it. To connect Unity Remote on the target device to the Unity Editor:",1806],["Open Editor settings (menu: Edit > Project Settings > Editor).",1806],["In the Unity Remote section, set Device to the device you want to use.",1806],["If the Device list doesn't include the target device, first disconnect and reconnect the target device. If that doesn't work, make sure that the USB connection is setup correctly. To test this, you can build and run your application to check whether Unity is able to install it on the target device. For information on how to do this, refer to Build your application for Android.",1806],["Important**: Unity doesn't support Unity Remote on multiple connected Android devices. To resolve this, Unity automatically picks the first Android device it finds. If you can have multiple iOS/tvOS devices and one Android device connected at the same time. All these connected devices appear in the Device lists.",1806],["Unity Services",1807],["Unity is more than an engine. It also brings a growing range of integrated services to engage, retain and monetize audiences. Unity provides a growing range of complimentary services to help developers make games and engage, retain and monetize audiences.",1807],["Our Unity Ads, Unity Analytics, Unity Cloud Build and Unity Multiplayer are fully integrated with the Unity Editor to make creating and managing games as smooth, simple and rewarding an experience as possible.",1807],["See the Knowledge Base Services section for tips, tricks and troubleshooting.",1807],["Creating DownloadHandlers",1808],["",1808],["",1808],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1808],["There are several types of DownloadHandlers:",1808],["DownloadHandlerBuffer is used for simple data storage.",1808],["DownloadHandlerFile is used for downloading and saving file to disk with low memory footprint.",1808],["DownloadHandlerTexture is used for downloading images.",1808],["DownloadHandlerAssetBundle is used for fetching AssetBundles.",1808],["DownloadHandlerAudioClip is used for downloading audio files.",1808],["DownloadHandlerMovieTexture is used for downloading video files. It's recommended that you use VideoPlayer for video download and movie playback since MovieTexture is deprecated.",1808],["DownloadHandlerScript is a special class. On its own, it does nothing. However, this class can be inherited by a user-defined class. This class receives callbacks from the UnityWebRequest system, which can then be used to perform completely custom handling of data as it arrives from the network.",1808],["The APIs are similar to DownloadHandlerTexture's interface.",1808],["UnityWebRequest has a property disposeDownloadHandlerOnDispose, which defaults to true. If this property is true, when UnityWebRequest object is disposed, Dispose() will also be called on attached download handler rendering it useless. If you keep a reference to download handler longer than the reference to UnityWebRequest, you should set disposeDownloadHandlerOnDispose to false.",1808],["DownloadHandlerBuffer",1808],["This Download Handler is the simplest, and handles the majority of use cases. It stores received data in a native code buffer. When the download is complete, you can access the buffered data either as an array of bytes or as a text string.",1808],["Example",1808],["using UnityEngine;",1808],["using UnityEngine.Networking;",1808],["using System.Collections;",1808],["public class MyBehaviour : MonoBehaviour {",1808],["void Start() {",1808],["StartCoroutine(GetText());",1808],["IEnumerator GetText() {",1808],["UnityWebRequest www = new UnityWebRequest(\"https://www.my-server.com\");",1808],["www.downloadHandler = new DownloadHandlerBuffer();",1808],["yield return www.SendWebRequest();",1808],["if (www.result != UnityWebRequest.Result.Success) {",1808],["Debug.Log(www.error);",1808],["else {",1808],["// Show results as text",1808],["Debug.Log(www.downloadHandler.text);",1808],["// Or retrieve results as binary data",1808],["byte[] results = www.downloadHandler.data;",1808],["DownloadHandlerFile",1808],["This is a special download handler for large files. It writes downloaded bytes directly to file, so the memory usage is low regardless of the size of the file being downloaded. The distinction from other download handlers is that you cannot get data out of this one, all data is saved to a file.",1808],["Example",1808],["using System.Collections;",1808],["using System.IO;",1808],["using UnityEngine;",1808],["using UnityEngine.Networking;",1808],["public class FileDownloader : MonoBehaviour {",1808],["void Start () {",1808],["StartCoroutine(DownloadFile());",1808],["IEnumerator DownloadFile() {",1808],["var uwr = new UnityWebRequest(\"https://unity3d.com/\", UnityWebRequest.kHttpVerbGET);",1808],["string path = Path.Combine(Application.persistentDataPath, \"unity3d.html\");",1808],["uwr.downloadHandler = new DownloadHandlerFile(path);",1808],["yield return uwr.SendWebRequest();",1808],["if (uwr.result != UnityWebRequest.Result.Success)",1808],["Debug.LogError(uwr.error);",1808],["else",1808],["Debug.Log(\"File successfully downloaded and saved to \" + path);",1808],["DownloadHandlerTexture",1808],["Instead of using a DownloadHandlerBuffer to download an image file and then creating a texture from the raw bytes using Texture.LoadImage, it's more efficient to use DownloadHandlerTexture.",1808],["This Download Handler stores received data in a UnityEngine.Texture. On download completion, it decodes JPEGs and PNGs into valid UnityEngine.Texture objects. Only one copy of the UnityEngine.Texture is created per DownloadHandlerTexture object. This reduces performance hits from garbage collection. The handler performs buffering, decompression and texture creation in native code. Additionally, decompression and texture creation are performed on a worker thread instead of the main thread, which can improve frame time when loading large textures.",1808],["Finally, DownloadHandlerTexture only allocates managed memory when finally creating the Texture itself, which eliminates the garbage collection overhead associated with performing the byte-to-texture conversion in script.",1808],["Example",1808],["The following example downloads a PNG file from the internet, converts it to a Sprite, and assigns it to an image:",1808],["using UnityEngine;",1808],["using UnityEngine.UI;",1808],["using UnityEngine.Networking;",1808],["using System.Collections;",1808],["[RequireComponent(typeof(Image))]",1808],["public class ImageDownloader : MonoBehaviour {",1808],["Image _img;",1808],["void Start () {",1808],["_img = GetComponent();",1808],["Download(\"https://www.mysite.com/myimage.png\");",1808],["public void Download(string url) {",1808],["StartCoroutine(LoadFromWeb(url));",1808],["IEnumerator LoadFromWeb(string url)",1808],["UnityWebRequest wr = new UnityWebRequest(url);",1808],["DownloadHandlerTexture texDl = new DownloadHandlerTexture(true);",1808],["wr.downloadHandler = texDl;",1808],["yield return wr.SendWebRequest();",1808],["if (wr.result == UnityWebRequest.Result.Success) {",1808],["Texture2D t = texDl.texture;",1808],["Sprite s = Sprite.Create(t, new Rect(0, 0, t.width, t.height),",1808],["Vector2.zero, 1f);",1808],["_img.sprite = s;",1808],["DownloadHandlerAssetBundle",1808],["The advantage to this specialized Download Handler is that it is capable of streaming data to Unity's AssetBundle system. Once the AssetBundle system has received enough data, the AssetBundle is available as a UnityEngine.AssetBundle object. Only one copy of the UnityEngine.AssetBundle object is created. This considerably reduces run-time memory allocation as well as the memory impact of loading your AssetBundle. It also allows AssetBundles to be partially used while not fully downloaded, so you can stream Assets.",1808],["All downloading and decompression occurs on worker threads.",1808],["AssetBundles are downloaded via a DownloadHandlerAssetBundle object, which has a special assetBundle property to retrieve the AssetBundle.",1808],["Due to the way the AssetBundle system works, all AssetBundle must have an address associated with them. Generally, this is the nominal URL at which they're located (meaning the URL before any redirects). In almost all cases, you should pass in the same URL as you passed to the UnityWebRequest. When using the High Level API (HLAPI), this is done for you.",1808],["Example",1808],["using UnityEngine;",1808],["using UnityEngine.Networking;",1808],["using System.Collections;",1808],["public class MyBehaviour : MonoBehaviour {",1808],["void Start() {",1808],["StartCoroutine(GetAssetBundle());",1808],["IEnumerator GetAssetBundle() {",1808],["UnityWebRequest www = new UnityWebRequest(\"https://www.my-server.com\");",1808],["DownloadHandlerAssetBundle handler = new DownloadHandlerAssetBundle(www.url, uint.MaxValue);",1808],["www.downloadHandler = handler;",1808],["yield return www.SendWebRequest();",1808],["if (www.result != UnityWebRequest.Result.Success) {",1808],["Debug.Log(www.error);",1808],["else {",1808],["// Extracts AssetBundle",1808],["AssetBundle bundle = handler.assetBundle;",1808],["DownloadHandlerAudioClip",1808],["This download handler is optimized to for downloading audio files. Instead of downloading raw bytes using DownloadHandlerBuffer and then creating AudioClip out of them, you can use this download handler to do it in a more convenient way.",1808],["Example",1808],["using System.Collections;",1808],["using UnityEngine;",1808],["using UnityEngine.Networking;",1808],["public class AudioDownloader : MonoBehaviour {",1808],["void Start () {",1808],["StartCoroutine(GetAudioClip());",1808],["IEnumerator GetAudioClip() {",1808],["using (var uwr = UnityWebRequestMultimedia.GetAudioClip(\"https://myserver.com/mysound.ogg\", AudioType.OGGVORBIS)) {",1808],["yield return uwr.SendWebRequest();",1808],["if (uwr.result != UnityWebRequest.Result.Success) {",1808],["Debug.LogError(uwr.error);",1808],["yield break;",1808],["AudioClip clip = DownloadHandlerAudioClip.GetContent(uwr);",1808],["// use audio clip",1808],["DownloadHandlerScript",1808],["For users who require full control over the processing of downloaded data, Unity provides the DownloadHandlerScript class.",1808],["By default, instances of this class do nothing. However, if you derive your own classes from DownloadHandlerScript, you may override certain functions and use them to receive callbacks as data arrives from the network.",1808],["Note:** The actual downloads occur on a worker thread, but all DownloadHandlerScript callbacks operate on the main thread. Avoid performing computationally heavy operations during these callbacks.",1808],["Functions to override",1808],["ReceiveContentLength()",1808],["protected void ReceiveContentLength(long contentLength);",1808],["This function is called when the Content-Length header is received. Note that this callback may occur multiple times if your server sends one or more redirect responses over the course of processing your UnityWebRequest.",1808],["OnContentComplete()",1808],["protected void OnContentComplete();",1808],["This function is called when the UnityWebRequest has fully downloaded all data from the server, and has forwarded all received data to the ReceiveData callback.",1808],["ReceiveData()",1808],["protected bool ReceiveData(byte[] data, long dataLength);",1808],["This function is called after data has arrived from the remote server, and is called once per frame. The data argument contains the raw bytes received from the remote server, and dataLength indicates the length of new data in the data array.",1808],["When not using pre-allocated data buffers, the system creates a new byte array each time it calls this callback, and dataLength is always equal to data.Length. When using pre-allocated data buffers, the data buffer is reused, and dataLength must be used to find the number of updated bytes.",1808],["This function requires a return value of either true or false. If you return false, the system immediately aborts the UnityWebRequest. If you return true, processing continues normally.",1808],["Avoiding garbage collection overhead",1808],["Many of Unity's more advanced users are concerned with reducing CPU spikes due to garbage collection. For these users, the UnityWebRequest system permits the pre-allocation of a managed-code byte array, which is used to deliver downloaded data to DownloadHandlerScript's ReceiveData callback.",1808],["Using this function completely eliminates managed-code memory allocation when using DownloadHandlerScript-derived classes to capture downloaded data.",1808],["To make a DownloadHandlerScript operate with a pre-allocated managed buffer, supply a byte array to the constructor of DownloadHandlerScript.",1808],["Note:** The size of the byte array limits the amount of data delivered to the ReceiveData callback each frame. If your data arrives slowly, over many frames, you may have provided too small of a byte array.",1808],["Example",1808],["using UnityEngine;",1808],["using UnityEngine.Networking;",1808],["public class LoggingDownloadHandler : DownloadHandlerScript {",1808],["// Standard scripted download handler - allocates memory on each ReceiveData callback",1808],["public LoggingDownloadHandler(): base() {",1808],["// Pre-allocated scripted download handler",1808],["// reuses the supplied byte array to deliver data.",1808],["// Eliminates memory allocation.",1808],["public LoggingDownloadHandler(byte[] buffer): base(buffer) {",1808],["// Required by DownloadHandler base class. Called when you address the 'bytes' property.",1808],["protected override byte[] GetData() { return null; }",1808],["// Called once per frame when data has been received from the network.",1808],["protected override bool ReceiveData(byte[] data, int dataLength) {",1808],["if(data == null data.Length < 1) {",1808],["Debug.Log(\"LoggingDownloadHandler :: ReceiveData - received a null/empty buffer\");",1808],["return false;",1808],["Debug.Log(string.Format(\"LoggingDownloadHandler :: ReceiveData - received {0} bytes\", dataLength));",1808],["return true;",1808],["// Called when all data has been received from the server and delivered via ReceiveData.",1808],["protected override void CompleteContent() {",1808],["Debug.Log(\"LoggingDownloadHandler :: CompleteContent - DOWNLOAD COMPLETE!\");",1808],["// Called when a Content-Length header is received from the server.",1808],["protected override void ReceiveContentLengthHeader(ulong contentLength) {",1808],["Debug.Log(string.Format(\"LoggingDownloadHandler :: ReceiveContentLength - length {0}\", contentLength));",1808],["Creating UnityWebRequests",1809],["",1809],["",1809],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1809],["WebRequests can be instantiated like any other object. Two constructors are available:",1809],["The standard, parameter-less constructor creates a new UnityWebRequest with all settings blank or default. The target URL is not set, no custom headers are set, and the redirect limit is set to 32.",1809],["The second constructor takes a string argument. It assigns the UnityWebRequest's target URL to the value of the string argument, and is otherwise identical to the parameter-less constructor.",1809],["Multiple other properties are available for setting up, tracking status and checking result or UnityWebRequest.",1809],["Example",1809],["UnityWebRequest wr = new UnityWebRequest(); // Completely blank",1809],["UnityWebRequest wr2 = new UnityWebRequest(\"https://www.mysite.com\"); // Target URL is set",1809],["// the following two are required to web requests to work",1809],["wr.url = \"https://www.mysite.com\";",1809],["wr.method = UnityWebRequest.kHttpVerbGET; // can be set to any custom method, common constants privided",1809],["wr.useHttpContinue = false;",1809],["wr.chunkedTransfer = false;",1809],["wr.redirectLimit = 0; // disable redirects",1809],["wr.timeout = 60; // don't make this small, web requests do take some time",1809],["Creating UploadHandlers",1810],["",1810],["",1810],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1810],["Currently, only one type of upload handler is available: UploadHandlerRaw. This class accepts a data buffer at construction time. This buffer is copied internally into native code memory and then used by the UnityWebRequest system when the remote server is ready to accept body data.",1810],["Upload Handlers also accept a Content Type string. This string is used for the value of the UnityWebRequest's Content-Type header if you set no Content-Type header on the UnityWebRequest itself. If you manually set a Content-Type header on the UnityWebRequest object, the Content-Type on the Upload Handler object is ignored.",1810],["If you do not set a Content-Type on either the UnityWebRequest or the UploadHandler, the system defaults to setting a Content-Type of application/octet-stream.",1810],["UnityWebRequest has a property disposeUploadHandlerOnDispose, which defaults to true. If this property is true, when UnityWebRequest object is disposed, Dispose() will also be called on attached upload handler rendering it useless. If you keep a reference to upload handler longer than the reference to UnityWebRequest, you should set disposeUploadHandlerOnDispose to false.",1810],["Example",1810],["byte[] payload = new byte[1024];",1810],["// ... fill payload with data ...",1810],["UnityWebRequest wr = new UnityWebRequest(\"https://www.mysite.com/data-upload\");",1810],["UploadHandler uploader = new UploadHandlerRaw(payload);",1810],["// Sends header: \"Content-Type: custom/content-type\";",1810],["uploader.contentType = \"custom/content-type\";",1810],["wr.uploadHandler = uploader;",1810],["Downloading an AssetBundle from an HTTP server (GET)",1811],["",1811],["",1811],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1811],["To download an AssetBundle from a remote server, you can use UnityWebRequest.GetAssetBundle. This function streams data into an internal buffer, which decodes and decompresses the AssetBundle's data on a worker thread.",1811],["The function's arguments take several forms. In its simplest form, it takes only the URL from which the AssetBundle should be downloaded. You may optionally provide a checksum to verify the integrity of the downloaded data.",1811],["Alternately, if you wish to use the AssetBundle caching system, you may provide either a version number or a Hash128 data structure. These are identical to the version numbers or Hash128 objects provided to the old system via WWW.LoadFromCacheOrDownload.",1811],["Details",1811],["This function creates a UnityWebRequest and sets the target URL to the supplied URL argument. It also sets the HTTP verb to GET, but sets no other flags or custom headers.",1811],["This function attaches a DownloadHandlerAssetBundle to the UnityWebRequest. This download handler has a special assetBundle property, which can be used to extract the AssetBundle once enough data has been downloaded and decoded to permit access to the resources inside the AssetBundle.",1811],["If you supply a version number or Hash128 object as arguments, it also passes those arguments to the DownloadHandlerAssetBundle. The download handler then employs the caching system.",1811],["Example",1811],["using UnityEngine;",1811],["using UnityEngine.Networking;",1811],["using System.Collections;",1811],["public class MyBehaviour : MonoBehaviour {",1811],["void Start() {",1811],["StartCoroutine(GetAssetBundle());",1811],["IEnumerator GetAssetBundle() {",1811],["UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(\"https://www.my-server.com/myData.unity3d\");",1811],["yield return www.SendWebRequest();",1811],["if (www.result != UnityWebRequest.Result.Success) {",1811],["Debug.Log(www.error);",1811],["else {",1811],["AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www);",1811],["Common operations: using the HLAPI",1812],["",1812],["",1812],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1812],["This section details the options available in the High-Level API and the scenarios they are intended to address.",1812],["Advanced operations: Using the LLAPI",1813],["",1813],["",1813],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1813],["While the HLAPI is designed to minimize boilerplate code, the Low-Level API (LLAPI) is designed to permit maximum flexibility. In general, using the LLAPI involves creating UnityWebRequests then creating appropriate DownloadHandlers or UploadHandlersand attaching them to your UnityWebRequests.",1813],["This section details the options available in the Low-Level API and the scenarios they are intended to address:",1813],["Note that the HLAPI and LLAPI are not mutually exclusive. You can always customize UnityWebRequest objects created via the HLAPI if you need to tweak a common scenario.",1813],["For full details on each of the objects described in this section, please refer to the Unity Scripting API.",1813],["Retrieving text or binary data from an HTTP Server (GET)",1814],["",1814],["",1814],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1814],["To retrieve simple data such as textual data or binary data from a standard HTTP or HTTPS web server, use the UnityWebRequest.GET call. This function takes a single string as an argument, with the string specifying the URL from which data is retrieved.",1814],["This function is analogous to the standard WWW constructor:",1814],["WWW myWww = new WWW(\"https://www.myserver.com/foo.txt\");",1814],["// ... is analogous to ...",1814],["UnityWebRequest myWr = UnityWebRequest.Get(\"https://www.myserver.com/foo.txt\");",1814],["Details",1814],["This function creates a UnityWebRequest and sets the target URL to the string argument. It sets no other custom flags or headers.",1814],["By default, this function attaches a standard DownloadHandlerBuffer to the UnityWebRequest. This handler buffers the data received from the server and make it available to your scripts when the request is complete.",1814],["By default, this function attaches no UploadHandler to the UnityWebRequest. You can attach one manually if you wish.",1814],["Example",1814],["using UnityEngine;",1814],["using System.Collections;",1814],["using UnityEngine.Networking;",1814],["public class MyBehaviour : MonoBehaviour {",1814],["void Start() {",1814],["StartCoroutine(GetText());",1814],["IEnumerator GetText() {",1814],["UnityWebRequest www = UnityWebRequest.Get(\"https://www.my-server.com\");",1814],["yield return www.SendWebRequest();",1814],["if (www.result != UnityWebRequest.Result.Success) {",1814],["Debug.Log(www.error);",1814],["else {",1814],["// Show results as text",1814],["Debug.Log(www.downloadHandler.text);",1814],["// Or retrieve results as binary data",1814],["byte[] results = www.downloadHandler.data;",1814],["Retrieving a Texture from an HTTP Server (GET)",1815],["",1815],["",1815],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1815],["To retrieve a Texture file from a remote server, you can use UnityWebRequest.Texture. This function is very similar to UnityWebRequest.GET but is optimized for downloading and storing textures efficiently.",1815],["This function takes a single string as an argument. The string specifies the URL from which you wish to download an image file for use as a Texture.",1815],["Details",1815],["This function creates a UnityWebRequest and sets the target URL to the string argument. This function sets no other flags or custom headers.",1815],["This function attaches a DownloadHandlerTexture object to the UnityWebRequest. DownloadHandlerTexture is a specialized Download Handler which is optimized for storing images which are to be used as Textures in the Unity Engine. Using this class significantly reduces memory reallocation compared with downloading raw bytes and creating a Texture manually in script.",1815],["By default, this function does not attach an Upload Handler. You can add one manually if you wish.",1815],["Example",1815],["using UnityEngine;",1815],["using System.Collections;",1815],["using UnityEngine.Networking;",1815],["public class MyBehaviour : MonoBehaviour {",1815],["void Start() {",1815],["StartCoroutine(GetTexture());",1815],["IEnumerator GetTexture() {",1815],["UnityWebRequest www = UnityWebRequestTexture.GetTexture(\"https://www.my-server.com/image.png\");",1815],["yield return www.SendWebRequest();",1815],["if (www.result != UnityWebRequest.Result.Success) {",1815],["Debug.Log(www.error);",1815],["else {",1815],["Texture myTexture = ((DownloadHandlerTexture)www.downloadHandler).texture;",1815],["Alternatively, you can implement GetTexture using a helper getter:",1815],["IEnumerator GetTexture() {",1815],["UnityWebRequest www = UnityWebRequestTexture.GetTexture(\"https://www.my-server.com/image.png\");",1815],["yield return www.SendWebRequest();",1815],["Texture myTexture = DownloadHandlerTexture.GetContent(www);",1815],["Sending a form to an HTTP server (POST)",1816],["",1816],["",1816],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1816],["There are two primary functions for sending data to a server formatted as a HTML form. If you are migrating over from the WWW system, see Using WWWForm, below.",1816],["Using IMultipartFormSection",1816],["To provide greater control over how you specify your form data, the UnityWebRequest system contains a user-implementable IMultipartFormSection interface. For standard applications, Unity also provides default implementations for data and file sections: MultipartFormDataSection and MultipartFormFileSection.",1816],["An overload of UnityWebRequest.POST accepts, as a second parameter, a List argument, whose members must all be IMultipartFormSections. The function signature is:",1816],["UnityWebRequest.Post(string url, List formSections);",1816],["Details",1816],["This function creates a UnityWebRequest and sets the target URL to the first string parameter. It also sets the Content-Type header of the UnityWebRequest appropriately for the form data specified in the list of IMultipartFormSection objects.",1816],["This function, by default, attaches a DownloadHandlerBuffer to the UnityWebRequest. This is for convenience - you can use this to check your server's replies.",1816],["Similar to the WWWForm POST function, this HLAPI function calls each supplied IMultipartFormSection in turn and formats them into a standard multipart form as specified in RFC 2616.",1816],["The preformatted form data is stored in a standard UploadHandlerRaw object, which is then attached to the UnityWebRequest. As a result, changes to the IMultipartFormSection objects performed after the UnityWebRequest.POST call are not reflected in the data sent to the server.",1816],["Example",1816],["using UnityEngine;",1816],["using UnityEngine.Networking;",1816],["using System.Collections;",1816],["using System.Collections.Generic;",1816],["public class MyBehavior : MonoBehaviour",1816],["void Start()",1816],["StartCoroutine(Upload());",1816],["IEnumerator Upload()",1816],["List formData = new List();",1816],["formData.Add(new MultipartFormDataSection(\"field1=foo&field2=bar\"));",1816],["formData.Add(new MultipartFormFileSection(\"my file data\", \"myfile.txt\"));",1816],["UnityWebRequest www = UnityWebRequest.Post(\"https://www.my-server.com/myform\", formData);",1816],["yield return www.SendWebRequest();",1816],["if (www.result != UnityWebRequest.Result.Success)",1816],["Debug.Log(www.error);",1816],["else",1816],["Debug.Log(\"Form upload complete!\");",1816],["",1816],["Using WWWForm (Legacy function)",1816],["To help migrate from the WWW system, the UnityWebRequest system permits you to use the old WWWForm object to provide form data.",1816],["In this case, the function signature is:",1816],["UnityWebRequest.Post(string url, WWWForm formData);",1816],["Details",1816],["This function creates a new UnityWebRequest and sets the target URL to the first string argument's value. It also reads any custom headers generated by the WWWForm argument (such as Content-Type) and copies them into the UnityWebRequest.",1816],["This function, by default, attaches a DownloadHandlerBuffer to the UnityWebRequest. This is for convenience - you can use this to check your server's replies.",1816],["This function reads the raw data generated by the WWWForm object and buffers it in an UploadHandlerRaw object, which is attached to the UnityWebRequest. Therefore, changes to the WWWForm object after calling UnityWebRequest.POST do not alter the contents of the UnityWebRequest.",1816],["Example",1816],["using UnityEngine;",1816],["using UnityEngine.Networking;",1816],["using System.Collections;",1816],["public class MyBehavior : MonoBehaviour {",1816],["void Start() {",1816],["StartCoroutine(Upload());",1816],["IEnumerator Upload() {",1816],["WWWForm form = new WWWForm();",1816],["form.AddField(\"myField\", \"myData\");",1816],["UnityWebRequest www = UnityWebRequest.Post(\"https://www.my-server.com/myform\", form);",1816],["yield return www.SendWebRequest();",1816],["if (www.result != UnityWebRequest.Result.Success) {",1816],["Debug.Log(www.error);",1816],["else {",1816],["Debug.Log(\"Form upload complete!\");",1816],["Uploading raw data to an HTTP server (PUT)",1817],["",1817],["",1817],["Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (Netcode for GameObjects) is under development. For more information and next steps see the information on the Unity Netcode for GameObjects website. ",1817],["Some modern web applications prefer that files be uploaded via the HTTP PUT verb. For this scenario, Unity provides the UnityWebRequest.PUT function.",1817],["This function takes two arguments. The first argument is a string and specifies the target URL for the request. The second argument may be either a string or a byte array, and specifies the payload data to be sent to the server.",1817],["Function signatures:",1817],["WebRequest.Put(string url, string data);",1817],["WebRequest.Put(string url, byte[] data);",1817],["Details",1817],["This function creates a UnityWebRequest and sets the content type to application/octet-stream.",1817],["This function attaches a standard DownloadHandlerBuffer to the UnityWebRequest. As with the POST functions, you can use this to return result data from your applications.",1817],["This function stores the input upload data in a standard UploadHandlerRaw object and attaches it to the UnityWebRequest. As a result, if using the byte[] function, changes made to the byte array performed after the UnityWebRequest.PUT call are not reflected in the data uploaded to the server.",1817],["Example",1817],["using UnityEngine;",1817],["using UnityEngine.Networking;",1817],["using System.Collections;",1817],["public class MyBehavior : MonoBehaviour {",1817],["void Start() {",1817],["StartCoroutine(Upload());",1817],["IEnumerator Upload() {",1817],["byte[] myData = System.Text.Encoding.UTF8.GetBytes(\"This is some test data\");",1817],["UnityWebRequest www = UnityWebRequest.Put(\"https://www.my-server.com/upload\", myData);",1817],["yield return www.SendWebRequest();",1817],["if (www.result != UnityWebRequest.Result.Success) {",1817],["Debug.Log(www.error);",1817],["else {",1817],["Debug.Log(\"Upload complete!\");",1817],["UnityWebRequest",1818],["UnityWebRequest provides a modular system for composing HTTP requests and handling HTTP responses. The primary goal of the UnityWebRequest system is to allow Unity games to interact with web browser back-ends. It also supports high-demand features such as chunked HTTP requests, streaming POST/PUT operations, and full control over HTTP headers and verbs.",1818],["The system consists of two layers:",1818],["A High-Level API (HLAPI) wraps the Low-Level API and provides a convenient interface for performing common operations",1818],["A Low-Level API (LLAPI) provides maximum flexibility for more advanced users",1818],["Supported platforms",1818],["The UnityWebRequest system supports most Unity platforms:",1818],["All versions of the Editor and Standalone players",1818],["WebGL",1818],["Mobile platforms: iOS, Android",1818],["Universal Windows Platform",1818],["Architecture",1818],["The UnityWebRequest ecosystem breaks down an HTTP transaction into three distinct operations:",1818],["Supplying data to the server",1818],["Receiving data from the server",1818],["HTTP flow control (for example, redirects and error handling)",1818],["To provide a better interface for advanced users, these operations are each governed by their own objects:",1818],["An UploadHandler object handles transmission of data to the server",1818],["A DownloadHandler object handles receipt, buffering and postprocessing of data received from the server",1818],["A UnityWebRequest object manages the other two objects, and also handles HTTP flow control. This object is where custom headers and URLs are defined, and where error and redirect information is stored.",1818],["For any HTTP transaction, the normal code flow is:",1818],["Create a Web Request object",1818],["Configure the Web Request object",1818],["Set custom headers",1818],["Set HTTP verb (such as GET, POST, HEAD - custom verbs are permitted on all platforms except for Android)",1818],["Set URL",1818],["(Optional) Create an Upload Handler and attach it to the Web Request",1818],["Provide data to be uploaded",1818],["Provide HTTP form to be uploaded",1818],["(Optional) Create a Download Handler and attach it to the Web Request",1818],["Send the Web Request",1818],["If inside a coroutine, you may Yield the result of the Send() call to wait for the request to complete",1818],["(Optional) Read received data from the Download Handler",1818],["(Optional) Read error information, HTTP status code and response headers from the UnityWebRequest object",1818],["UnityYAML",1819],["Unity uses a custom-optimized YAML library called UnityYAML. The UnityYAML library does not support the full YAML specification. This documentation outlines which parts of the YAML spec UnityYAML supports.",1819],["You cannot externally produce or edit UnityYAML files.",1819],["Supported features",1819],["Feature Support ",1819],["",1819],["Mappings UnityYAML supports both flow and block styles. ",1819],["Scalars UnityYAML supports double and single quoted scalars as well as plain scalars. You can split them onto multiple lines. Be aware that multi-line scalars can create performance and memory overheads during parsing.Plain scalars split onto multiple lines must be indented more than the previous line. See below this table for an example.You can use UTF-8 characters in scalars, but UnityYAML only decodes them when they are part of a double quoted scalar. ",1819],["Sequences UnityYAML supports mapping, block styles, and block sequences that contain block mappings. ",1819],["Example of indentation on multi-line plain scalars:",1819],["parent: This is a",1819],["multi-line scalar",1819],["^",1819],["",1819],["If there is no indentation, the scalar returns This is a and might trigger an Asset into further parsing.",1819],["Unsupported features",1819],["Feature Support ",1819],["",1819],["Chomping indicators UnityYAML does not support using + and characters to indicate how it should treat new lines within a multi-line string. If you use these characters, UnityYAML adds them to the scalar value. ",1819],["Comments UnityYAML does not support comments. ",1819],["Complex mapping keys UnityYAML does not support complex mapping keys. ",1819],["Multiple documents The reader skips document and tag prefixes at the top of files, but does not handle YAML input that consists of multiple documents. ",1819],["Raw block sequences Nearly all nodes are part of a mapping in UnityYAML, so all sequences must be values of a mapping to work correctly. See below this table for an example.Anonymous sequences increase the parser complexity. You cannot use indentation as a way of determining if a sequence element has finished in UnityYAML. ",1819],["Tags UnityYAML does not support tags. ",1819],["Example of a raw block sequence",1819],["var:",1819],["\n1\n",1819],["\n2\n",1819],["\n3\n",1819],["The sequence is designed for lookups upon var, so the following does not work:",1819],["\n1\n",1819],["\n2\n",1819],["\n3\n",1819],["2019-05-13 ",1819],["New in 2019.3 NewIn20193",1819],["Using the Universal Render Pipeline",1820],["The Universal Render Pipeline (URP) is a prebuilt Scriptable Render Pipeline, made by Unity. URP provides artist-friendly workflows that let you quickly and easily create optimized graphics across a range of platforms, from mobile to high-end consoles and PCs.",1820],["An earlier version of URP was called the Lightweight Render Pipeline (LWRP). URP replaces LWRP.",1820],["For information on how to use URP, see the URP documentation microsite",1820],["Unpacking Prefab instances",1821],["To return the contents of a Prefab instance into a regular GameObject, you unpack the Prefab instance. This is exactly the reverse operation of creating (packing) a Prefab, except that it doesn’t destroy the Prefab Asset but only affects the Prefab instance.",1821],["You can unpack a Prefab instance by right-clicking on it in the Hierarchy and selecting Unpack Prefab. The resulting GameObject in the Scene no longer has any link to its former Prefab Asset. The Prefab Asset itself is not affected by this operation and there may still be other instances of it in your Project.",1821],["If you had any overrides on your Prefab instance before you unpacked it, those will be \"baked\" onto the resulting GameObjects. That is, the values will stay the same, but will no longer have status as overrides, since there’s no Prefab to override.",1821],["If you unpack a Prefab that has nested Prefabs inside, the nested Prefabs remain Prefab instances and still have links to their respective Prefab Assets. Similarly, if you unpack a Prefab Variant, there will be a new Prefab instance at the root which is an instance of the base Prefab.",1821],["In general, unpacking a Prefab instance will give you the same objects you see if you go into Prefab Mode for that Prefab. This is because Prefab Mode shows the contents that is inside of a Prefab, and unpacking a Prefab instance unpacks the contents of a Prefab.",1821],["If you have a Prefab instance that you want to replace with plain GameObjects and completely remove all links to any Prefab Assets, you can right-click on it in the Hierarchy and select Unpack Prefab Completely. This is equivalent to unpacking the Prefab, and keeping on unpacking any Prefab instances that appear as a result because they were nested Prefabs or base Prefabs.",1821],["You can unpack Prefab instances that exist in Scenes, or which exist inside other Prefabs.",1821],["2018-07-31 ",1821],["Nested Prefabs and Prefab Variants added in 2018.3",1821],["Unused Overrides",1822],["Instance override values are stored as data in the scene or prefab in which they are defined. However, an override becomes \"unused\" if its target object is either invalid or its Property Path is unknown. In this case, the data becomes unused. It is still stored in the scene file, but is redundant.",1822],["For example, if you override the values of a public field on a script attached to a prefab, and then delete the script, the data that contains the override values becomes unused because it targets an object that no longer exists.",1822],["Override data also becomes unused if you delete the public field definition, or rename it, because the Property Path no longer matches the stored data, although the component object itself still exists.",1822],["Because Unity does not automatically delete unused override data, if you restore the deleted script, or field definition, the override data becomes used again and is applied as an override as before.",1822],["If you do not want to keep unused override data, you can check for and remove them using the Overrides menu in the inspector, or from the context menu in the Hierarchy window. The removal includes all unused overrides, and Unity writes details of what was removed to the Editor log.",1822],["The Unity Editor can't automatically determine when or whether your unused data should be cleaned up, because you may have temporarily or accidentally moved the object or property the data refers to, and you might reinstate it later. Removing unused override data that you know you no longer need can be thought of as good practice, because it means your scene file only contains useful data, which can help make version control and collaboration simpler.",1822],["Note**: You can rename public fields and preserve the associated overridden values by using FormerlySerializedAsAttribute, which performs name conversion to map the field’s old name to its new name.",1822],["The prefab overrides dropdown",1822],["To check for and remove unused overrides using the Inspector:",1822],["Select the GameObject(s) that you want to work on.",1822],["In the inspector, click the Overrides drop-down menu [A]. If there are any unused overrides present, the menu will show an \"Unused overrides\" option [B], otherwise the \"Unused overrides\" option is not displayed.",1822],["Click Unused Overrides to open the unused overrides panel.",1822],["The unused overrides panel [C] lists the unused overrides, and has a Remove button.",1822],["Click the Remove button to remove the unused overrides.",1822],["Note:** The unused overrides panel supports multiple selection, and shows the total number of unused overrides, and the number of instances affected, however it only shows the field name, GameObject name, and value, of up to three of the unused overrides, as shown in the example below:",1822],["The Hierarchy context menu",1822],["To check for and remove unused instance overrides from the Hierarchy window:",1822],["Select the GameObject(s) that you want to work on.",1822],["In the Hierarchy window, right-click on one of the selected objects, and select:",1822],["Prefab > Remove Unused Overrides**",1822],["Unity displays a dialog box showing the number of unused overrides, if any.",1822],["Click the Remove button to remove the unused overrides.",1822],["Note**: You can remove all unused overrides in an entire scene by right-clicking the scene's name in the hierarchy instead of individual GameObjects.",1822],["Upgrading to Unity 2019 LTS",1823],["",1823],["Note**: Follow the advice in this section in release order. For example, if you need to upgrade your project from 2020 to 2022, read the 2021 upgrade guides to see if there are any changes that you need to make before you read the 2022 upgrade guides.",1823],["This page lists changes in the Unity 2019 versions which might affect existing projects when you upgrade from any Unity 2018 version to 2019 LTS. If you're upgrading from a Unity 2017 version, first see the Upgrading to Unity 2018 LTS guide.",1823],["Note that 2019 LTS is also known as 2019.4.",1823],["Page outline",1823],["",1823],["Lightweight Render Pipeline (LWRP) becomes Universal Render Pipeline (URP)",1823],["The Lightweight Render Pipeline (LWRP) is now the Universal Render Pipeline (URP) in Unity 2019.3 and later.",1823],["If your Project uses LWRP, you will need to upgrade your Project to use URP. For a step by step guide to the upgrade process, see the LWRP to URP upgrade guide.",1823],["",1823],["ShaderUtil update",1823],["ShaderUtil.ClearShaderErrors() is replaced by ShaderUtil.ClearShaderMessages() for naming consistency and is now marked as obsolete. Your existing Project scripts are automatically upgraded when you open them in Unity 2019.4.",1823],["",1823],["Animation C# Jobs",1823],["Animation C# jobs are moving out of experimental namespace from UnityEngine.Experimental.Animations to UnityEngine.Animations.",1823],["Unity 2019.4 automatically updates most of your scripts except for scripts with the following Animator jobs extension methods:",1823],["BindStreamTransform",1823],["BindStreamProperty",1823],["BindCustomStreamProperty",1823],["BindSceneTransform",1823],["BindSceneProperty",1823],["OpenAnimationStream",1823],["CloseAnimationStream",1823],["ResolveAllStreamHandles",1823],["ResolveAllSceneHandles",1823],["You have to manually add using UnityEngine.Animations; statements to those scripts.",1823],["",1823],["Scripting Render Pipeline (SRP) API changes",1823],["The undocumented RenderPipeline.beginCameraRendering and RenderPipeline.beginFrameRendering events have been removed. You should replace these with events from the RenderPipelineManager class.",1823],["The RenderPipeline static protected functions BeginFrameRendering and BeginCameraRendering have been removed. You must replace these with the signature that takes a ScriptableRenderContext in a parameter. Additionally there are now EndCameraRendering and EndFrameRendering methods that you must call as well.",1823],["",1823],["Addressables",1823],["AsyncLoad is now obsolete. Use Async.LoadAssetAsync instead.",1823],["",1823],["New Asset Import Pipeline",1823],["The new Asset Import Pipeline is available with Unity 2019.3 and later. If you have an existing project, you can upgrade to the new Asset Import Pipeline using the Project Settings Window in the Editor:",1823],["Selecting Version 2 will tell the editor you now want to use the new Asset Import Pipeline together with this project, and restarting your project will re-import it using the new Asset Import Pipeline code. This essentially has the same effect as deleting your Library folder, but without deleting it. When switching to use Asset Import Pipeline V2, the Import Results from the original Asset Import Pipeline are not deleted as V2 creates its own folder structure to store its Import Results.",1823],["Projects that you’ve created in Unity 2019.2 or older will still use their original Asset Import Pipeline by default. When opening such a project in Unity 2019.3 for the first time, you’ll get an option to upgrade to the new Asset Import Pipeline. If you decline, your project will continue using the original Asset Import Pipeline. Furthermore, the selected version is stored in the EditorSettings.asset file of your project, so it can be version controlled.",1823],["New Projects created with the new Asset Import Pipeline",1823],["When creating a new Project with Unity 2019.3 or newer, the new Asset Import Pipeline has become the new default way to work. All new projects you create will be using it.",1823],["Behaviour changes to the New Asset Import Pipeline",1823],["Multiple versions of the same asset are cached in the Library folder ",1823],["Up until Unity 2019.2 (with the original Asset Import Pipeline), the Library folder was comprised of the GUIDs of Assets being their filename. Thus, switching from a platform to another platform would invalidate the Import Result in the Library folder, causing it to be re-imported every time you switch platforms.",1823],["Asset Import Pipeline V1",1823],["If you had to switch back and forth between platforms multiple times per day, this could easily take up hours, depending on your project size.",1823],["Some of you have figured out workarounds for this, such as having a copy of your project per platform on your machine, but that doesn’t scale very well.",1823],["With the new Asset Import Pipeline, we’ve removed the GUID to File Name mapping. Since dependencies for a particular Asset are tracked, we are able to Hash them all together to create a revision for the Import Result of an Asset. This allows us to have multiple revisions per Asset, which then means that we are no longer bound by a GUID to File Name mapping. Not having this requirement allows us to have Import Results which work across different configurations. For Fast Platform Switching, we could have an Import Result per platform, so that when you switch platforms back and forth the Import Result is already there, thus making the platform switch many orders of magnitude faster than with the Asset Import Pipeline V1.",1823],["Asset Import Pipeline V2",1823],["Caching and the Unity Accelerator ",1823],["Most of the importers have had significant work done to them in order to improve their determinsm and have a positive effect on caching. This means that if the Unity Accelerator is used, the import result will be uploaded to a centralized storage where other machines can connect to and benefit from the work done for the same Asset on a different machine. Assets with dynamic dependencies can be cached now (e.g. nested prefabs, shaders, etc.). For a more comprehensive list of Importers and their associated files, check out the new AssetDatabase Manual page",1823],["Caching of Scripted Importers: ",1823],["ScriptedImporters and importers with registered dependencies were not cached with the old Asset Import Pipeline.",1823],["\n Old Behaviour\n",1823],[">",1823],["\n \n With the old Asset Import Pipeline, the switching of platforms invalidated all imports as the Import Result was GUID based, thus switching a platform would overwrite the import result every time.\n \n",1823],["\n New Behaviour\n",1823],[">",1823],["\n \n In the new Asset Import Pipeline, switching platforms does not invalidate imports as the File on disk representing the import result is a hash of its own contents, thus ensuring that when switching platform the contents are different and result in a new file, thus keeping both versions of the Import Result around and simply switching between one or another, without having to import anything.\n \n",1823],["Number of Calls to OnPostProcessAllAssets",1823],["In the old Asset Import Pipeline, the number of calls to the OnPostProcessAllAssets function was non-deterministic. Meaning that this function could be called once, or multiple times, for the same changes. With the new Asset Import Pipeline, there will be a single call to OnPostProcessAllAssets for detected Script changes (.cs files), and one for non-script changes (think .png, .fbx, .wav files).",1823],["Synchronous Script Compilation",1823],["In the old Asset Import Pipeline, one could trigger a compilation and chain going into play mode while a compilation was happening. This was a big time saver in certain situations, having non-synchronous compilation could lead to non-deterministic results. With the new Asset Import Pipeline, this has been changed so that the Asset Import Pipeline drives the majority of Script Compilation, and as such it requires a deterministic approach, thus locking up the editor until Script Compilation completes.",1823],["",1823],["Tilemap Editor is now a Package",1823],["The Tilemap Editor is now a package. This package is automatically installed in new Unity Projects created with the 2D Project template. For more information on installing a package see Adding and removing packages.",1823],["All public classes have been moved to the UnityEditor.Tilemaps namespace. Unity compiles your scripts that reference these classes into the \"Unity.2D.Tilemap.Editor\" Assembly Definition Asset. These are:",1823],["GridBrush",1823],["GridBrushEditorBase",1823],["GridBrushEditor",1823],["GridSelection",1823],["Unity will attempt to update the relevant Tilemap using statements in your scripts but please check and change if needed.",1823],["If you are referencing the Tilemap Tooling classes with scripts which are part of an Assembly Definition, you should add the “Unity.2D.Tilemap.Editor” Assembly Definition as an Assembly Definition Reference under your Assembly Definition. Unity may have set this automatically for you but please change it if it hasn’t.",1823],["If you have precompiled assemblies referencing the Tilemap Tooling classes from a previous version of Unity, you will encounter issues when using them due to these changes. If possible, please update and recompile these assemblies against the new Tilemap Tooling assemblies.",1823],["If you have precompiled assemblies referencing the Tilemap Tooling classes from a previous version of Unity, you need to update and recompile these assemblies to reference the new Tilemap Tooling assemblies.",1823],["Examples of these issues when importing the precompiled assembly are (as errors in the Console window):",1823],["Failed to extract {Class in Precompiled Assembly} class of base type UnityEditor.GridBrush when inspecting {Precompiled Assembly}",1823],["Unloading broken assembly {Precompiled Assembly}, this assembly can cause crashes in the runtime",1823],["These errors can be caused by inheriting from one of the Tilemap Tooling classes such as the GridBrush.",1823],["Examples of these issues when using the precompiled assembly are (as errors in the Console window):",1823],["TypeLoadException: Could not resolve type with token 01000011 (from typeref, class/assembly UnityEditor.GridBrush, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)",1823],["Error: Could not load signature of {Method in Precompiled Assembly) due to: Could not resolve type with token 01000011 (from typeref, class/assembly UnityEditor.GridBrush, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) assembly:UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:UnityEditor.GridBrush member:(null) signature:",1823],["These errors can be caused by creating or calling one of the methods of the Tilemap Tooling classes such as the GridBrush.",1823],["",1823],["SpriteTooling is now a Package",1823],["Sprite Tooling (Sprite Editor Window) is now a package. For more information on installing a package see Adding and removing packages.",1823],["This package is not added to a new Unity Project by default, unless the new Project is created with the 2D Project template.",1823],["This package will be added to pre-existing Unity Projects (2019.1 and prior) when upgraded to Unity 2019.1. You can remove this package If your project doesn’t use 2D Sprites and doesn’t require the use of Sprite Tooling.",1823],["As part of converting the Sprite Tooling to a Package, the Experimental namespaces has been removed. If your project has scripts which reference classes related to Sprite Tooling, please ensure that they are using the correct namespace after the upgrade, eg. adding “using UnityEditor.U2D.Sprites” if required.",1823],["If you are referencing the Sprite classes with scripts which are part of an Assembly Definition, you need to add the “Unity.2D.Sprite.Editor” Assembly Definition as an Assembly Definition Reference under your Assembly Definition.",1823],["",1823],["Unity UI is now a Package",1823],["Unity UI (UGUI) is now a package, com.unity.ugui. You can access it from the Package Manager (menu: Window > Package Manager).",1823],["Unity UI is a core package that ships with Unity. You do not need to install it in new Projects.",1823],["When you upgrade existing Unity Projects, created with version 2019.2b1 and earlier, to Unity 2019.2, this package is added automatically.",1823],["Assembly definitions automatically get a reference to the uGUI assembly.",1823],["If you install Unity 2019.2 overtop of an older version of Unity, make sure that the GUISystem folder, located in \\Editor\\Data\\UnityExtensions\\Unity is removed. Otherwise you might get class redefinition errors.",1823],["The Unity UI source code is no longer published to BitBucket because Unity provides it with the package.",1823],["The Unity UI API documentation is no longer in the main Scripting API reference. You can access it from the Scripting API section of the Unity UI package documentation.",1823],["",1823],["UI Elements is now a standard feature and not experimental",1823],["See the UI Elements 2019.1 upgrade guide for more information.",1823],["",1823],[".NET 3.5 Equivalent Scripting Runtime Removal",1823],["The .NET 3.5 Equivalent option for Scripting Runtime Version has been removed. Projects are automatically migrated to use the .NET 4.x Equivalent option when opened in 2019.2.",1823],["",1823],["Lighting Improvements",1823],["Prior to 2019.1 Indirect Intensity slider only affected lightmaps when using the Progressive Lightmapper. For Enlighten, it was applied to both light probes and light maps. Now all backends apply Indirect Intensity value to both lightmaps and light probes.",1823],["Upon baking the lighting again, you might notice that the probes will appear brighter if the Indirect Intensity value was modified.",1823],["It is best to Clear Baked Data prior to baking lightmaps again after the upgrade.",1823],["",1823],["UnityAPICompatibilityVersionAttribute constructor change",1823],["The constructor that takes a single string is now obsolete. See the documentation for information on the supported overloads.",1823],["",1823],["Changed System Requirements",1823],["Projects made with Unity 2019 LTS require versions macOS 10.12 or Ubuntu 16.04 or later.",1823],["",1823],["Multiplayer (UNet) High level API has moved to a package",1823],["The multiplayer high level API has been moved from an extension to a package. This doesn’t affect the NetworkTransport class (the low level API). All dependencies which were in the Unity engine have been moved to the package. This means the high level API is now independent except for some hooks into the profiler which couldn’t be migrated at this time.",1823],["Older Projects containing the high level API will have the package automatically added to prevent compiler errors. This does not happen for new Projects and you can add it if required from the Package Manager window. See the multiplayer high level API documentation.",1823],["",1823],["The UNITY_ADS directive was removed",1823],["As of 2019.4, Unity no automatically defines UNITY_ADS. You need to either stop using UNITY_ADS in your scripts, or create a new custom global #define for it. See the Platform Dependent Compilation page for guidance on how to create a new custom global #define.",1823],["Upgrading to Unity 2020 LTS",1824],["",1824],["Note**: Follow the advice in this section in release order. For example, if you need to upgrade your project from 2020 to 2022, read the 2021 upgrade guides to see if there are any changes that you need to make before you read the 2022 upgrade guides.",1824],["This page lists changes in the Unity 2020 LTS version which might affect existing projects when you upgrade from a 2019 version to 2020 LTS.",1824],["Note that 2020 LTS is also known as 2020.3.",1824],["Page outline",1824],["",1824],["All Mesh vertices are transformed for better UV unwrapping",1824],["Unity might change the Mesh UVs of 3D objects you import to a project.",1824],["Unity transforms the positions of all imported Mesh vertices to scale in Unity units automatically.",1824],["From Unity 2020.1, Unity generates lightmap UVs using the transformed Mesh vertices, if you’ve enabled Generate Lightmap UVs. Prior to Unity 2020.1, Unity generated lightmap UV maps using the original imported Mesh vertex positions, before the automatic position transformation.",1824],["UVs generated after the vertex transformation are more accurate to the original shape and scale of your imported object.",1824],["",1824],["All Asset bundle hashes are different so all bundles are built",1824],["From Unity 2020.1, Unity generates a different hash for all asset bundles in your project. This ensures all bundles are built, including the ones with the same content but with different loadable paths.",1824],["",1824],["The multiplayer HLAPI package is not automatically installed in project upgrades",1824],["From Unity 2020.1, install the multiplayer HLAPI package from the Package Manager if the project you’re upgrading has scripts that use the multiplayer HLAPI.",1824],["From Unity 2019.1 to 2019.4, Unity automatically installed the multiplayer HLAPI package when you upgraded a project created in Unity 2018.4 or earlier.",1824],["",1824],["Improved LOD baking with the Progressive Lightmapper",1824],["Unity’s Progressive Lightmapper consists of the CPU and GPU lightmappers.",1824],["From Unity 2020.1, the GPU lightmapper supports level of detail (LOD) baking.",1824],["The CPU lightmapper uses the same baking algorithm and this lets Unity use all available CPU cores for faster baking times in Scenes with LOD values above 0.",1824],["To upgrade the LOD in your Scene, clear the baked lightmap and then regenerate it. To do this:",1824],["In the Unity Editor, Open Window > Rendering > Lighting Settings.",1824],["In Debug Settings, select the drop-down menu on the Generate Lighting button, then select Clear Baked Data.",1824],["Select Generate Lighting.",1824],["",1824],["Adaptive Performance breaking changes",1824],["To update Adaptive Performance from 1.0 to 2.0, see the Adaptive Performance upgrade guide.",1824],["",1824],["Xcode Project Generation",1824],["The MacOS Standalone Xcode project building path selection has changed. Now you must provide the path to the desired directory, and the .xcodeproj and accompanying files are created inside the target directory.",1824],["The MacOS build folder can not be inside the project directory.",1824],["See the manual page for Xcode project structure.",1824],["",1824],["Particle System Force Field changes",1824],["To ensure consistent behavior of the Force Field properties, Unity now uses a reference frame rate of 30fps as the basis for simulation.",1824],["If your app uses a different frame rate, this change might affect the following Force Field properties:",1824],["Gravity",1824],["Rotation",1824],["Vector Fields",1824],["If these settings behave differently to earlier Unity versions, adjust their values.",1824],["",1824],["Changes to UGUI Graphic Class",1824],["UnityEngine.UI.Graphic no longer includes the RequireComponent attribute for the CanvasRenderer component. To update your user-written classes that inherit from Graphic and render in the UGUI canvas, add the following RequireComponent attribute:",1824],["using UnityEngine;",1824],["[RequireComponent(typeof (CanvasRenderer))]",1824],["public class exampleClass: Graphic",1824],["...",1824],["",1824],["Set up Code Optimization in order to continue using Code Coverage",1824],["The introduction of Code Optimization changes how the Code Coverage package works. To continue using the Code Coverage package with your project in 2020LTS, set up Code Optimization to compile scripts in Debug mode. Debug mode enables C# debugging and it is required in order to obtain accurate code coverage results.",1824],["To ensure Code Optimization is set to Debug mode, you can do one of the following:",1824],["Switch to Debug mode in the Editor (bottom right corner, select the Bug icon > Switch to debug mode).",1824],["Using the CompilationPipeline API, set CompilationPipeline.codeOptimization = CodeOptimization.Debug.",1824],["Pass -debugCodeOptimization to the command line.",1824],["",1824],["AR/VR Platforms Support",1824],["This document provides a guide for upgrading existing AR/VR projects that are using Unity versions prior to Unity 2020 releases.",1824],["Enable AR/VR in Project Settings",1824],["When upgrading your existing project to Unity 2020 releases and later, you should receive a notification that states the deprecated XR integration (previously in Player/XR Settings) has been disabled.",1824],["To enable AR/VR, use XR Plug-in Management in Project Settings and select your target platforms.",1824],["Virtual reality",1824],["Platform Build target Plug-in provider ",1824],["Oculus Quest Android Oculus ",1824],["Oculus Rift & Rift S Desktop Oculus ",1824],["Windows Mixed Reality VR UWP Windows Mixed Reality ",1824],["Augmented reality",1824],["Platform Build target Plug-in provider ",1824],["ARCore devices Android ARCore ",1824],["ARKit devices iOS ARKit ",1824],["HoloLens UWP Windows Mixed Reality ",1824],["Magic Leap One Lumin Magic Leap ",1824],["Use optimal Player settings",1824],["Make sure your project's rendering and quality settings are optimal. The tables below detail recommended settings by target platform.",1824],["Virtual reality",1824],["Platform Graphics API Stereo rendering mode ",1824],["Oculus Quest OpenGL ES 3.0 Multiview ",1824],["Oculus Rift & Rift S DX11 Single Pass Instanced ",1824],["Windows Mixed Reality VR DX11 Single Pass Instanced ",1824],["Augmented reality",1824],["Platform Graphics API Stereo rendering mode ",1824],["ARCore devices OpenGL ES 3.0 N/A ",1824],["ARKit devices Metal N/A ",1824],["HoloLens DX11 Single Pass Instanced ",1824],["Magic Leap One OpenGL ES 3.2 Single Pass Instanced ",1824],["Note:** “Single Pass” is no longer a rendering mode option, as “Single Pass Instanced” is more performant. If you are upgrading from “single pass” to “single pass instanced”, you may have to update custom shaders in your project.",1824],["Render Pipeline",1824],["The built-in render pipeline, Universal Render Pipeline, and High-Definition Render Pipeline are all supported in 2020.1. There are benefits to using our latest scriptable render pipelines, but it is not a requirement in this upgrade process.",1824],["Note:** If you are using third-party assets and/or custom shaders, you might need to update assets with shaders compatible with “single passed instanced”.",1824],["Camera in Scene",1824],["If you are using the XR Interaction Toolkit, no change is required for camera tracking.",1824],["If you are using a third-party toolkit for camera tracking (OVRCameraRig, etc), make sure you have updated to the latest version. Note that upgrading to latest versions of third-party tools might cause script errors, please reference third-party documentation.",1824],["If you are using a Tracked Pose Driver for camera tracking, see our Migration Guide.",1824],["Upgrading third-Party Toolkits",1824],["If you use any toolkits developed by our supported platforms (Oculus Integration package, MRTK, MLTK), make sure you’re using the latest version. Note that upgrading to the latest versions of third-party tools might cause upgrade-related script errors, and you may need to reference corresponding documentation of those toolkits.",1824],["FAQ",1824],["Why can’t I install XR Plug-in Management in Project Settings?",1824],["You may have upgrade-related script errors that must be fixed before installing XR Plug-in Management.",1824],["Why are OpenVR and Google Cardboard missing from XR Plug-in Management?",1824],["The OpenVR and Google Cardboard XR Plug-ins are developed and maintained by Valve and Google, respectively. Links to installation instructions for both platforms can be found in our documentation.",1824],["Is the Unity input system supported?",1824],["Yes, our supported platform integrations are compatible with the Unity input system.",1824],["Are the Universal Render Pipeline and High-Definition Render Pipeline supported?",1824],["Yes, our supported platform integrations are compatible with both the Universal Render Pipeline and High-Definition Render Pipeline.",1824],["Why can’t I view the XR Interaction Toolkit in Package Manager?",1824],["The XR Interaction Toolkit is still in preview. To view preview packages in 2020.1, you must enable it using the Package Manager tab in Project Settings. When enabled, preview packages are displayed in the Unity Registry of the Package Manager.",1824],["Why doesn’t Play in Editor work for my provider?",1824],["Play in editor support only works for providers that have standalone support for their provider. If the provider is not listed in the standalone section of the XR Plug-in Management provider selection UI then Play in Editor will not work. Check your provider documentation as they may support some other means of integrating Play in Editor support.",1824],["Why can’t I use “single pass” rendering mode?",1824],["“Single pass” is no longer supported in 2020.1 as “single pass instanced” is most performant. If your project used “single pass” rendering, you may have to update shaders in your project. Third-party libraries that use custom shaders for “single pass” may also need to be updated. You can choose to upgrade from “single pass” to “multipass” and shaders should work, but we recommend targeting “single pass instanced” for maximum performance.",1824],["How do I configure graphics API?",1824],["Graphics API is configured in Player settings (“Edit” > “Project Settings” > “Player”).",1824],["How do I configure stereo rendering mode?",1824],["Rendering mode is configured in provider-specific settings nested under XR Plug-in Management in Project Settings.",1824],["Why am I getting errors with renderScale using the XR Settings API?",1824],["renderScale has been removed and replaced with eyeTextureResolutionScale but that has been a script updater task since 2019.3. If you are upgrading from a Unity version prior to 2019.3, you must manually replace renderScale with eyeTextureResolutionScale.",1824],["Why isn’t input from my controllers (e.g. button presses) recognized by the XR Interaction Toolkit?",1824],["The headset needs to be detected before any device inputs can be detected. One common issue when testing, is that many people let their headsets rest on a table while debugging their interactions. The controllers aren't recognized until you wear the headset (or the proximity sensor inside the headset gets activated). If you don’t get any input from your device, put on your headset after starting the app, or cover the proximity sensor.",1824],["Can I use the wide-angle camera on iPhones in AR Foundation apps?",1824],["ARKit does not provide the option of changing FOV of the camera.",1824],["Upgrading to Unity 2021.1",1825],["Note**: Follow the advice in this section in release order. For example, if you need to upgrade your project from 2020 to 2022, read the 2021 upgrade guides to see if there are any changes that you need to make before you read the 2022 upgrade guides.",1825],["This page lists changes in the Unity 2021.1 version which might affect existing projects when you upgrade from 2020 LTS to 2021.1.",1825],["Device Simulator",1825],["The Device Simulator is now part of the Editor and is accessible from the Game window.",1825],["To set up the Device Simulator, add the UnityEngine.Device namespace to the Screen, Application, and SystemInfo classes:",1825],["UnityEngine.Device.Screen;",1825],["UnityEngine.Device.Application;",1825],["UnityEngine.Device.SystemInfo;",1825],["To switch to UnityEngine.Device, add the following logic to each script you want to use with the simulator:",1825],["using Screen = UnityEngine.Device.Screen;",1825],["using Application = UnityEngine.Device.Application;",1825],["using SystemInfo = UnityEngine.Device.SystemInfo;",1825],["The new namespace UnityEngine.Device transitions smoothly from Simulator (when in Editor) to actual device API with a runtime build.",1825],["Environment Lighting",1825],["The Editor now automatically bakes the default skybox probe and ambient probe and retains that data until you manually bake the Scene. When you upgrade, Scenes with no ambient light contribution might visually change. To restore the original look of these Scenes, set the Environment lighting intensity multiplier to 0. Alternatively, set the skybox to black, bake the scene, then reset the skybox to your preferred sky color.",1825],["Enable Code Coverage preference",1825],["The user interface for managing Code Coverage has moved from General Preferences to within the Code Coverage package.",1825],["The Code Coverage package is available as a released package via the Package Manager for Unity 2019.3 and above. The latest version is 1.0.0.",1825],["You can use one of the following methods to enable code coverage:",1825],["Install the Code Coverage package, open the Code Coverage window (Window > Analysis > Code Coverage) and select Enable Code Coverage.",1825],["Use the Command line argument -enableCodeCoverage in batchmode.",1825],["Use the Coverage.enabled API. Example class:",1825],["// Create a new C# script called CodeCoverageMenuItem and place it",1825],["// under the Editor folder.",1825],["// This class creates a toggle menu item under Code Coverage > Enable",1825],["// Code Coverage. Use it to enable/disable Code Coverage.",1825],["using UnityEditor;",1825],["using UnityEngine.TestTools;",1825],["class CodeCoverageMenuItem",1825],["const string EnableCodeCoverageItemName = \"Code Coverage/Enable Code Coverage\";",1825],["[MenuItem(EnableCodeCoverageItemName, false)]",1825],["static void EnableCodeCoverage()",1825],["Coverage.enabled = !Coverage.enabled;",1825],["[MenuItem(EnableCodeCoverageItemName, true)]",1825],["static bool EnableCodeCoverageValidate()",1825],["Menu.SetChecked(EnableCodeCoverageItemName, Coverage.enabled);",1825],["return true;",1825],["Upgrading to Unity 2021.2",1826],["Note**: Follow the advice in this section in release order. For example, if you need to upgrade your project from 2020 to 2022, read the 2021 upgrade guides to see if there are any changes that you need to make before you read the 2022 upgrade guides.",1826],["This page lists changes in the Unity 2021.2 version which might affect existing projects when you upgrade from version 2021.1 beta to 2021.2.",1826],["Environment lighting: Ambient probe and skybox reflection probe are now automatically baked",1826],["Unity’s Progressive Lightmapper now automatically generates the ambient probe and the skybox reflection probe for every scene by default. This means that a scene automatically receives environment lighting in accordance with the settings in the Environment tab in the Lighting settings panel. The Editor updates the ambient probe and skybox reflection probe every time the environment lighting changes, until you generate lighting. When you bake with the Generate Lighting control, the Editor stops updating the probes, and only updates them again at the next bake. When you enable the Auto Generate option, the Editor continues to update the probes every time the environment lighting changes. If you generate lighting and then delete this lighting data by removing the Lighting Data Asset from the project, the Editor automatically generates the ambient probe and skybox reflection probe again.",1826],["There is one situation which requires action when you upgrade a project. This is when you don't wish to have any Environment lighting contribution in a project which also:",1826],["Doesn't have a Lighting Data Asset.",1826],["Doesn't have Auto Generate enabled.",1826],["Has an Environment contribution set to a color other than black.",1826],["In this situation, navigate to Window > Rendering > Lighting Settings > Environment and disable the environment contribution of the automatically generated ambient probe and skybox reflection probe by making one of the following changes:",1826],["Option 1: Set the Intensity Multiplier to 0.",1826],["Option 2: Use a black Skybox Material.",1826],["Option 3: Use a black color in either Color or Gradient mode for the Source.",1826],["Particle System Force Fields",1826],["Previously, some Force Field properties behaved differently at different frame rates (or if using the Time Scale in the Time Manager settings)",1826],["The Particle System now uses a reference frame rate of 30fps to serve as the basis for the simulation. If your app runs at a different frame rate, the following settings might behave differently compared to earlier versions of Unity:",1826],["Gravity",1826],["Rotation",1826],["Vector Fields",1826],["If these settings are affected, adjust the strengths of the affected areas to get the desired appearance.",1826],["Particle System Start Delay + Rate over Distance emission",1826],["Previously, Rate over Distance emission ignored the Start Delay setting. Now, if the Start Delay setting is defined, it delays the start for the distance-based emission.",1826],["If this field was previously set, you might need to adjust it.",1826],["BuildReport - PackedAssets",1826],["PackedAssets.file has been marked obsolete without a direct replacement. Previously this held an integer signifying a file id or index into BuildReport.files",1826],["To look up BuildReport files now, use PackedAssets.shortPath.",1826],["Terrain APIs out of experimental (WIP)",1826],["The experimental Terrain APIs have been moved to non-experimental namespaces. There have also been some other minor changes to the Terrain API. If you used the experimental Terrain APIs, use the following APIs instead:",1826],["UnityEngine.TerrainTools;",1826],["UnityEditor.TerrainTools;",1826],["UnityEngine.TerrainUtils;",1826],["Here is the full list of API changes:",1826],["In most cases, UnityEngine.Experimental.TerrainAPI and UnityEditor.Experimental.TerrainAPI are now UnityEngine.TerrainTools and UnityEditor.TerrainTools, respectively. Some runtime APIs have moved to a new UnityEngine.TerrainUtils namespace.",1826],["The GetDesc() of the TerrainPaintTool<T> class was renamed to GetDescription().",1826],["The TerrainUtility class has moved from UnityEngine.Experimental.TerrainAPI to UnityEngine.TerrainUtils.",1826],["The TerrainUtility.TerrainMap class is no longer an inner-class and belongs to the UnityEngine.TerrainUtils namespace.",1826],["The TerrainMap.TileCoord structure is no longer in the TerrainMap class, has been renamed to TerrainTileCoord, and is now also part of the UnityEngine.TerrainUtils namespace.",1826],["The UnityEditor.Experimental.TerrainAPI.BrushPreviewMode enum has been renamed to TerrainBrushPreviewMode and moved to the UnityEditor.TerrainTools namespace.",1826],["The TerrainPaintUtilityEditor.BuiltinPaintMaterialPasses enum has moved from the TerrainPaintUtilityEditor class and into the UnityEditor.TerrainTools namespace. It has also been renamed to TerrainBuiltinPaintMaterialPasses.",1826],["The three ShowBrushGUI functions in IOnInspectorGUI have been merged into one function with default parameter values instead of the different overloaded functions.",1826],["TerrainFilter has been removed. Use System.Predicate<Terrain> instead.",1826],["Texture2D.Resize renamed to Reinitialize",1826],["Texture2D.Resize and its overloads have been renamed to Texture2D.Reinitialize.",1826],["The API Updater should rename this automatically. If not, change any usage of Texture2D.Resize to Texture2D.Reinitialize.",1826],["Android changes",1826],["A large part of the Android build pipeline is now incremental and Unity removed the following features that were in the previous build pipeline:",1826],["Unity no longer copies Gradle project assets located in Assets/Plugins/Android/[res, assets] to the Gradle project.",1826],["Previously you could place Gradle resources in this folder and Unity copied them into the Gradle project. You should now use AAR or androidlib plug-ins to pass additional Gradle resources to the application.",1826],["If you place project assets in this folder, Unity shows a build error message.",1826],["Unity no longer ignores files inside the GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN comment.",1826],["Previously Unity wouldn't overwrite files if you removed this comment. If you didn't remove the comment, Unity always regenerated build.gradle, manifest, and UnityPlayerActivity files.",1826],["If you want your changes to persist using the new build pipeline, use templates.",1826],["When you export an Android project, Unity no longer creates a symbols zip package. The symbols are now available in the unityLibrary\\symbols directory which you can zip. The reason for this change is that not all symbols files are available when you export a project; Gradle produces the libil2cpp.so symbols when it builds the application.",1826],["Changed how Unity checks to see if an obb is compatible with an apk. Both the apk and obb now have unity_obb_guid file inside them and if the contents match between them, Unity treats them as being compatible.",1826],["For custom build scripts that use PatchPackage, note that Patch/Patch & Run now works with all types of assets and doesn't require a Script Only Build.",1826],["UI Toolkit - Default scaleMode for Image changed",1826],["Default Image.scaleMode was changed from ScaleAndCrop to ScaleToFit.",1826],["The expected behavior for an image is to scale to the size of the element, so we changed the default value of Image.scaleMode to ScaleToFit.",1826],["If you didn’t override the Image scale mode, some cropped images might shrink to fit the size of the element.",1826],["If ScaleAndCrop was the expected mode for your images, you can override their style by adding the following value in your UXML file inline style:",1826],["-unity-background-scale-mode: scale-and-crop;",1826],["You can also create a style class with the override and apply it to images that require ScaleAndCrop.",1826],["Mono upgrade behavior changes",1826],["The underlying C# runtime, Mono, has been upgraded in the latest version. This includes many fixes from the upstream version of Mono, and some notable changes in behavior.",1826],["Directory.GetFiles is no longer guaranteed to return a sorted list.",1826],["Previously, this always returned an alphabetically sorted list of items. If your project needs items to be returned in the same order every time, sort the returned list. For example:",1826],["var files = Directory.GetFiles(dir).OrderBy(f => f);",1826],["Object.GetHashCode now returns a different value and shouldn't be relied on as a deterministic hashing algorithm between operating systems.",1826],["In general, you shouldn’t use the result of GetHashCode outside of the current process, that is don’t serialize it or expect it to be the same the next time the code runs in a new process. Unity recommends using a deterministic hashing algorithm such as MD5.",1826],["Some bug fixes have resulted in new exceptions being thrown. Additionally, the content of some exception messages have changed.",1826],["This new behavior will be particularly noticeable in automated testing scenarios and may require changing the expected behavior if the tests are parsing the logs for specific exception messages.",1826],["Adaptive Performance",1826],["Version 3.0 of the Adaptive Performance package is now available. For information on how to upgrade to version 3.0, see the Adaptive Performance upgrade guides.",1826],["RenderTexture DepthStencilFormat",1826],["Previously, if you set the RenderTexture.depth property to 32-bit, you could get D24_S8 depending on the platform. Now if you set it to 32-bit, you get D32_S8 with 32-bit for the depth component if that format is supported on the current platform. However, this doubles the memory usage for that depth buffer.",1826],["The new RenderTexture.depthStencilFormat property returns the format that the graphics API uses to create the resource in video memory. You can also use this property to request a specific format. However, not all platforms support all depth stencil formats. When you set the DepthStencilFormat property to an unsupported format, Unity automatically selects a compatible format that has the equal or greater amount of bits for the depth and stencil components.",1826],["Upgrading",1826],["The RenderTexture asset now serializes the depth stencil format that you selected. If you use an API that takes a number of bits instead of a format, these bits get mapped to a format and that format is serialized. RenderTexture assets from previous versions that had the depth set to more than 16-bits are automatically upgraded to use D24_S8.",1826],["On some platforms (for example Windows) that use the DirectX graphics API, this results in a format with fewer depth bits because the graphics backend selects the D32_S8 format internally if you set bits>16. To ensure consistent upgrades across all platforms, D24_S8 is used on all platforms for the automatic upgrader. However, this might introduce visual artifacts in the render output of your project if you have RenderTexture assets in your project. Review these assets and change the depth stencil format to D32_S8 when needed. The following issues might occur:",1826],["The memory size might increase for the RenderTextures that you use. However, the memory reported is now correct.",1826],["Now that setting the depth property to 32-bit gives you a 32-bit depth component, the memory usage increases. To avoid this, set the bits to 24 and use D24_S8 if that is supported on your platform.",1826],["If a platform doesn't support D24_S8, Unity falls back to the compatible format D32_S8 by default. To prevent this, in the Inspector window, disable the Enable Compatible Format property on an asset. If Unity doesn't support the format D32_S8 and it can’t fall back, you see the error message “RenderTexture.Create failed: depth/stencil format unsupported. There is no compatible format on this platform or this fallback to a compatible format is disabled in the import inspector.”. In most cases, to fix the issue you can turn on Enable Compatible Format.",1826],["Graphics formats DepthAuto, ShadowAuto and VideoAuto are deprecated",1826],["The following graphics formats have now been deprecated:",1826],["DepthAuto",1826],["ShadowAuto",1826],["VideoAuto",1826],["These “Auto” formats are unclear about the exact format that’s used and might vary by platform.",1826],["The steps to remove the use of these deprecated formats depends on the format and use case.",1826],["For VideoAuto",1826],["To get the current platform’s automatic video format, use SystemInfo.GetGraphicsFormat(DefaultFormat.Video).",1826],["For DepthAuto/ShadowAuto used to indicate a depth-only render texture.",1826],["The GraphicsFormat API often uses DepthAuto or ShadowAuto to create render textures with depth-only rendering, and no color buffer. Examples of this use case are:",1826],["renderTextureDescriptor.graphicsFormat = GraphicsFormat.ShadowAuto",1826],["RenderTexture.GetTemporary(width, height, bits, GraphicsFormat.ShadowAuto)",1826],["To indicate depth-only (non-color) rendering, use GraphicsFormat.None as the new color format.",1826],["renderTextureDescriptor.graphicsFormat = GraphicsFormat.None;",1826],["If you used ShadowAuto, set the shadowSamplingMode of your RenderTextureDescriptor to ShadowSamplingMode.CompareDepths to enable depth-compare sampling on the depth texture, and change the code to use an overload that takes a RenderTextureDescriptor.",1826],["renderTextureDescriptor.shadowSamplingMode = ShadowSamplingMode.CompareDepths;",1826],["For DepthAuto/ShadowAuto in other situations",1826],["In some situations the DepthAuto/ShadowAuto formats represented an “automatically selected depth format appropriate for the current platform”. To replace the deprecated values in this case, use SystemInfo.GetGraphicsFormat(DefaultFormat.Depth/Shadow)",1826],["WebGL: Updated Emscripten to 2.0.19",1826],["The asm.js Linker target that was available for advanced users is no longer available.",1826],["In Unity 2021.2, the underlying Emscripten compiler used by the WebGL platform was updated to version 2.0.19. This upgraded the native code object file format, and therefore requires recompiling all native code plugins (C/C++ code plugins) in a project. If you are using closed source 3rd-party plugins from Unity Asset Store, for example, remember to ask the author for an updated version for Unity 2021.2.",1826],["The Emscripten runtime JavaScript function Pointer_stringify()is now deprecated. Instead, call the function UTF8ToString() to marshal a UTF8-encoded null-terminated C string from the WebAssembly heap to a JavaScript string.",1826],["Progressive GPU Lightmapper dropped support for CPU OpenCL devices",1826],["The Progressive GPU Lightmapper no longer supports CPU OpenCL devices. If no supported GPU is found but a CPU OpenCL device is detected, a warning message informs you that the device is skipped and falls back to the Progressive CPU Lightmapper. The Progressive CPU Lightmapper offers better performance for CPU-based computation of lightmaps.",1826],["This change of behavior will happen automatically and lightmaps should be computed as expected.",1826],["When Unity calls InitializeOnLoad methods during the asset import process, asset loading can fail. During asset import, the asset database is in an update state and Unity can’t determine which assets have already been imported. InitializeOnLoad methods can’t load assets that haven’t been imported.",1826],["To improve the asset import process, the OnPostprocessAllAssets callback has been enhanced. In particular, the OnPostprocessAllAssets callback:",1826],["Can perform initialization after a domain reload, when the asset database is guaranteed to be in a ready state.",1826],["Contains the didDomainReload parameter, which is set to true if the domain has reloaded.",1826],["Supports asset operations. This includes asset loading, which behaves in the same way as loading assets via a menu item.",1826],["Has moved out of the asset database importing loop. Callback processing is postponed until asset import is complete.",1826],["Move any domain-related initialization logic that requires asset operations to the OnPostprocessAllAsset callback; do not perform asset operations inside InitializeOnLoad methods.",1826],["The following behavior change code examples show how asset operations were previously postponed.",1826],["Example 1:",1826],["public class AssetPostprocessorTester1 : AssetPostprocessor",1826],["static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)",1826],["var assetPath = \"Assets/hello.txt\";",1826],["if (File.Exists(assetPath))",1826],["var txtObj = AssetDatabase.LoadAssetAtPath(\"Assets/hello.txt\");",1826],["AssetDatabase.DeleteAsset(\"Assets/hello.txt\");",1826],["if (txtObj == null)",1826],["Debug.Log(\"New Behaviour: Asset object is unloaded\");",1826],["else",1826],["Debug.Log(\"Old Behaviour: Asset is loaded for deleted asset!!\");",1826],["Example 2:",1826],["public class AssetPostprocessorTester2 : AssetPostprocessor",1826],["static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)",1826],["var assetPath = \"Assets/SomeText.txt\";",1826],["if (!File.Exists(assetPath))",1826],["File.WriteAllText(assetPath, \"hello world\");",1826],["AssetDatabase.ImportAsset(assetPath);",1826],["var txtObj = AssetDatabase.LoadAssetAtPath(assetPath);",1826],["if (txtObj == null)",1826],["Debug.Log(\"Old Behaviour: Asset hasn't been imported yet\");",1826],["else",1826],["Debug.Log(\"New Behaviour: Asset is imported and loaded\");",1826],["The following example has the new OnPostprocessAllAssets variant with the didDomainReload parameter:",1826],["static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths, bool didDomainReload)",1826],["if (didDomainReload)",1826],["Debug.Log(\"Domain has been reloaded\");",1826],["else",1826],["Debug.Log(\"Domain did not reload during import\");",1826],["All domain reloads are now processed inside the asset database.",1826],["OnPostprocessAllAssets now works better with asset operations, but any processing in this callback increases asset database refresh and domain reload time. InitializeOnLoad methods also add to domain reload time. It is best practice to minimize processing in these callbacks to improve Editor responsiveness between iterations.",1826],["Shader keyword system improvements",1826],["The shader keyword system now allows up to 65534 local keywords per shader or compute shader and 2^32-2 global keywords per project. All keywords you declare in a shader or compute shader are now local to this shader. Keywords you declare in a directive with the _local suffix aren’t affected by the state of global keywords.",1826],["Example:",1826],["A pass in a shader declares the following keywords:",1826],["#pragma shader_feature FOO BAR",1826],["#pragma shader_feature_local BOO BAZ",1826],["When using this pass, keywords FOO and BAR are enabled if they’re enabled either globally or on the material. Keywords BOO and BAZ are only enabled if they’re enabled on the material.",1826],["Unity supports .NET Standard 2.1 APIs",1826],["Unity now supports many additional APIs in the .NET base class libraries, including all APIs in the .NET Standard 2.1 API. Your project might fail to compile if any of your code has conflicts with new APIs.",1826],["To avoid errors when you upgrade projects created in previous versions of Unity, check and update your code to ensure that there are no conflicts with types and methods that are now available in .NET Standard 2.1.",1826],["Sources of conflict include the following:",1826],["ambiguous references",1826],["extension methods",1826],["precompiled assemblies",1826],["Resolve ambiguous references",1826],["If your code implements types or methods with a name that conflicts with types or methods that .NET Standard 2.1 adds, your code fails to compile. Name conflicts can lead to C# compiler errors due to ambiguous references.",1826],["For example, if you add a type named MyCompany.MyCode.Range to your project’s code, this might conflict with the existing System.Range type. Code that contains both using System; and using MyCompany; statements fails to compile.",1826],["To prevent errors, fully specify the namespace in the C# code for any types that have conflicting names.",1826],["Resolve conflicting extension methods",1826],["If your existing code has an extension method that .NET Standard 2.1 now implements on a type directly, you can choose to rename your extension methods or to use the methods implemented by the base class library.",1826],["For example, code in your project might implement an extension method named CopyTo on the ArraySegment type. In .NET Standard 2.1, ArraySegment has a built-in CopyTo method. You can choose to rename your CopyTo extension method, or eliminate it entirely and use the built-in one.",1826],["Resolve conflicting assemblies",1826],["If your project uses precompiled assemblies (that is, managed plugins) that implement types and methods that are now part of the base class library, then remove these assemblies from your project and use the built-in implementations.",1826],["For example, in previous versions of Unity, you needed to use the System.Memory.dll assembly from NuGet to access the System.Span value type. Now, .NET Standard 2.1 provides System.Span in the base class library. If you try to use the System.Memory.dll managed plugin in Unity 2021.2, the project fails to build.",1826],["Windows XR plugin removed",1826],["Microsoft has deprecated the Windows XR plugin and now supports Windows Mixed Reality (WMR) features and devices through the OpenXR plugin.",1826],["The Windows XR plugin has been removed as of Unity 2021.2.",1826],["When you open an existing project in Unity 2021.2, the update process removes the Windows XR plugin, if present.",1826],["To continue to use the project for Windows Mixed Reality, you must enable the Unity OpenXR plugin.",1826],["Depending on which features you are using, you must also install Microsoft’s Mixed Reality OpenXR support plugin and possibly additional tools from the Microsoft Mixed Reality Toolkit.",1826],["To upgrade to the Unity OpenXR plugin:",1826],["Open the Project Settings window.",1826],["In the XR Plug-in Management section, enable OpenXR in the Plug-in Providers list.",1826],["If needed, Unity downloads and installs the OpenXR plugin.",1826],["Once the OpenXR plugin is enabled, you can use the Mixed Reality Feature Tool provided by Microsoft to install the required supporting packages.",1826],["To install or update WMR features, tools, and samples:",1826],["Download and run the Mixed Reality Feature Tool.",1826],["Choose the Unity Project to update and click Discover Features.",1826],["Under Platform Support, select the Mixed Reality OpenXR Plugin.",1826],["Select any additional features you wish to add.",1826],["Click Get features.",1826],["Click Import and then Approve to complete the process.",1826],["Return to the XR Plug-in Management section of your Unity Project Settings and enable and configure the added features.",1826],["For more information about setting up new and updated Unity projects to use Windows Mixed Reality, see Setting up your XR configuration on Microsoft's documentation site.",1826],["Upgrading to Unity 2021 LTS",1827],["Note**: Follow the advice in this section in release order. For example, if you need to upgrade your project from 2020 to 2022, read the 2021 upgrade guides to see if there are any changes that you need to make before you read the 2022 upgrade guides.",1827],["This page lists changes in the Unity 2021 LTS version which might affect existing projects when you upgrade from a 2020 version to 2021 LTS.",1827],["Note**: 2021LTS is also known as 2021.3.",1827],["Page Outline",1827],["",1827],["Device Simulator",1827],["The Device Simulator is now part of the Editor and is accessible from the Game window.",1827],["To set up the Device Simulator, add the UnityEngine.Device namespace to the Screen, Application, and SystemInfo classes:",1827],["UnityEngine.Device.Screen;",1827],["UnityEngine.Device.Application;",1827],["UnityEngine.Device.SystemInfo;",1827],["To switch to UnityEngine.Device, add the following logic to each script you want to use with the simulator:",1827],["using Screen = UnityEngine.Device.Screen;",1827],["using Application = UnityEngine.Device.Application;",1827],["using SystemInfo = UnityEngine.Device.SystemInfo;",1827],["The new namespace UnityEngine.Device transitions smoothly from Simulator (when in Editor) to actual device API with a runtime build.",1827],["",1827],["Environment Lighting",1827],["The Editor now automatically bakes the default skybox probe and ambient probe and retains that data until you manually bake the Scene. When you upgrade, Scenes with no ambient light contribution might visually change. To restore the original look of these Scenes, set the Environment lighting intensity multiplier to 0. Alternatively, set the skybox to black, bake the scene, then reset the skybox to your preferred sky color.",1827],["",1827],["Environment lighting: Ambient probe and skybox reflection probe are now automatically baked",1827],["Unity's Progressive Lightmapper now automatically generates the ambient probe and the skybox reflection probe for every scene by default. This means that a scene automatically receives environment lighting in accordance with the settings in the Environment tab in the Lighting settings panel. The Editor updates the ambient probe and skybox reflection probe every time the environment lighting changes, until you generate lighting. When you bake with the Generate Lighting control, the Editor stops updating the probes, and only updates them again at the next bake. When you enable the Auto Generate option, the Editor continues to update the probes every time the environment lighting changes. If you generate lighting and then delete this lighting data by removing the Lighting Data Asset from the project, the Editor automatically generates the ambient probe and skybox reflection probe again.",1827],["There is one situation which requires action when you upgrade a project. This is when you don't wish to have any Environment lighting contribution in a project which also:",1827],["Doesn't have a Lighting Data Asset.",1827],["Doesn't have Auto Generate enabled.",1827],["Has an Environment contribution set to a color other than black.",1827],["In this situation, navigate to Window > Rendering > Lighting Settings > Environment and disable the environment contribution of the automatically generated ambient probe and skybox reflection probe by making one of the following changes:",1827],["Option 1: Set the Intensity Multiplier to 0.",1827],["Option 2: Use a black Skybox Material.",1827],["Option 3: Use a black color in either Color or Gradient mode for the Source.",1827],["",1827],["Enable Code Coverage preference",1827],["The user interface for managing Code Coverage has moved from General Preferences to within the Code Coverage package.",1827],["The Code Coverage package is available as a released package via the Package Manager for Unity 2019.3 and above. The latest version is 1.0.0.",1827],["You can use one of the following methods to enable code coverage:",1827],["Install the Code Coverage package, open the Code Coverage window (Window > Analysis > Code Coverage) and select Enable Code Coverage.",1827],["Use the Command line argument -enableCodeCoverage in batchmode.",1827],["Use the Coverage.enabled API. Example class:",1827],["// Create a new C# script called CodeCoverageMenuItem and place it",1827],["// under the Editor folder.",1827],["// This class creates a toggle menu item under Code Coverage > Enable",1827],["// Code Coverage. Use it to enable/disable Code Coverage.",1827],["using UnityEditor;",1827],["using UnityEngine.TestTools;",1827],["class CodeCoverageMenuItem",1827],["const string EnableCodeCoverageItemName = \"Code Coverage/Enable Code Coverage\";",1827],["[MenuItem(EnableCodeCoverageItemName, false)]",1827],["static void EnableCodeCoverage()",1827],["Coverage.enabled = !Coverage.enabled;",1827],["[MenuItem(EnableCodeCoverageItemName, true)]",1827],["static bool EnableCodeCoverageValidate()",1827],["Menu.SetChecked(EnableCodeCoverageItemName, Coverage.enabled);",1827],["return true;",1827],["",1827],["Particle System Force Fields",1827],["Previously, some Force Field properties behaved differently at different frame rates (or if using the Time Scale in the Time Manager settings)",1827],["The Particle System now uses a reference frame rate of 30fps to serve as the basis for the simulation. If your app runs at a different frame rate, the following settings might behave differently compared to earlier versions of Unity:",1827],["Gravity",1827],["Rotation",1827],["Vector Fields",1827],["If these settings are affected, adjust the strengths of the affected areas to get the desired appearance.",1827],["",1827],["Particle System Start Delay + Rate over Distance emission",1827],["Previously, Rate over Distance emission ignored the Start Delay setting. Now, if the Start Delay setting is defined, it delays the start for the distance-based emission.",1827],["If this field was previously set, you might need to adjust it.",1827],["",1827],["BuildReport - PackedAssets",1827],["PackedAssets.file has been marked obsolete without a direct replacement. Previously this held an integer signifying a file id or index into BuildReport.files",1827],["To look up BuildReport files now, use PackedAssets.shortPath.",1827],["",1827],["Terrain APIs out of experimental (WIP)",1827],["The experimental Terrain APIs have been moved to non-experimental namespaces. There have also been some other minor changes to the Terrain API. If you used the experimental Terrain APIs, use the following APIs instead:",1827],["UnityEngine.TerrainTools;",1827],["UnityEditor.TerrainTools;",1827],["UnityEngine.TerrainUtils;",1827],["Here is the full list of API changes:",1827],["In most cases, UnityEngine.Experimental.TerrainAPI and UnityEditor.Experimental.TerrainAPI are now UnityEngine.TerrainTools and UnityEditor.TerrainTools, respectively. Some runtime APIs have moved to a new UnityEngine.TerrainUtils namespace.",1827],["The GetDesc() of the TerrainPaintTool<T> class was renamed to GetDescription().",1827],["The TerrainUtility class has moved from UnityEngine.Experimental.TerrainAPI to UnityEngine.TerrainUtils.",1827],["The TerrainUtility.TerrainMap class is no longer an inner-class and belongs to the UnityEngine.TerrainUtils namespace.",1827],["The TerrainMap.TileCoord structure is no longer in the TerrainMap class, has been renamed to TerrainTileCoord, and is now also part of the UnityEngine.TerrainUtils namespace.",1827],["The UnityEditor.Experimental.TerrainAPI.BrushPreviewMode enum has been renamed to TerrainBrushPreviewMode and moved to the UnityEditor.TerrainTools namespace.",1827],["The TerrainPaintUtilityEditor.BuiltinPaintMaterialPasses enum has moved from the TerrainPaintUtilityEditor class and into the UnityEditor.TerrainTools namespace. It has also been renamed to TerrainBuiltinPaintMaterialPasses.",1827],["The three ShowBrushGUI functions in IOnInspectorGUI have been merged into one function with default parameter values instead of the different overloaded functions.",1827],["TerrainFilter has been removed. Use System.Predicate<Terrain> instead.",1827],["",1827],["Texture2D.Resize renamed to Reinitialize",1827],["Texture2D.Resize and its overloads have been renamed to Texture2D.Reinitialize.",1827],["The API Updater should rename this automatically. If not, change any usage of Texture2D.Resize to Texture2D.Reinitialize.",1827],["",1827],["Android changes",1827],["A large part of the Android build pipeline is now incremental and Unity removed the following features that were in the previous build pipeline:",1827],["Unity no longer copies Gradle project assets located in Assets/Plugins/Android/[res, assets] to the Gradle project.",1827],["Previously you could place Gradle resources in this folder and Unity copied them into the Gradle project. You should now use AAR or androidlib plug-ins to pass additional Gradle resources to the application.",1827],["If you place project assets in this folder, Unity shows a build error message.",1827],["Unity no longer ignores files inside the GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN comment.",1827],["Previously Unity wouldn't overwrite files if you removed this comment. If you didn't remove the comment, Unity always regenerated build.gradle, manifest, and UnityPlayerActivity files.",1827],["If you want your changes to persist using the new build pipeline, use templates.",1827],["When you export an Android project, Unity no longer creates a symbols zip package. The symbols are now available in the unityLibrary\\symbols directory which you can zip. The reason for this change is that not all symbols files are available when you export a project; Gradle produces the libil2cpp.so symbols when it builds the application.",1827],["Changed how Unity checks to see if an obb is compatible with an apk. Both the apk and obb now have unity_obb_guid file inside them and if the contents match between them, Unity treats them as being compatible.",1827],["For custom build scripts that use PatchPackage, note that Patch/Patch & Run now works with all types of assets and doesn't require a Script Only Build.",1827],["The default mainTemplate.gradle file has changed. If you use a custom main template, you must regenerate it and reapply your changes on top. Otherwise, your application can experience performance regressions if it uses Resources.Load.",1827],["",1827],["UI Toolkit - Default scaleMode for Image changed",1827],["Default Image.scaleMode was changed from ScaleAndCrop to ScaleToFit.",1827],["The expected behavior for an image is to scale to the size of the element, so we changed the default value of Image.scaleMode to ScaleToFit.",1827],["If you didn't override the Image scale mode, some cropped images might shrink to fit the size of the element.",1827],["If ScaleAndCrop was the expected mode for your images, you can override their style by adding the following value in your UXML file inline style:",1827],["-unity-background-scale-mode: scale-and-crop;",1827],["You can also create a style class with the override and apply it to images that require ScaleAndCrop.",1827],["",1827],["Mono upgrade behavior changes",1827],["The underlying C# runtime, Mono, has been upgraded in the latest version. This includes many fixes from the upstream version of Mono, and some notable changes in behavior.",1827],["Directory.GetFiles is no longer guaranteed to return a sorted list.",1827],["Previously, this always returned an alphabetically sorted list of items. If your project needs items to be returned in the same order every time, sort the returned list. For example:",1827],["var files = Directory.GetFiles(dir).OrderBy(f => f);",1827],["Object.GetHashCode now returns a different value and shouldn't be relied on as a deterministic hashing algorithm between operating systems.",1827],["In general, you shouldn’t use the result of GetHashCode outside of the current process, that is don’t serialize it or expect it to be the same the next time the code runs in a new process. Unity recommends using a deterministic hashing algorithm such as MD5.",1827],["Some bug fixes have resulted in new exceptions being thrown. Additionally, the content of some exception messages have changed.",1827],["This new behavior will be particularly noticeable in automated testing scenarios and may require changing the expected behavior if the tests are parsing the logs for specific exception messages.",1827],["",1827],["Adaptive Performance",1827],["Version 3.0 of the Adaptive Performance package is now available. For information on how to upgrade to version 3.0, see the Adaptive Performance upgrade guides.",1827],["",1827],["RenderTexture DepthStencilFormat",1827],["Previously, if you set the RenderTexture.depth property to 32-bit, you could get D24_S8 depending on the platform. Now if you set it to 32-bit, you get D32_S8 with 32-bit for the depth component if that format is supported on the current platform. However, this doubles the memory usage for that depth buffer.",1827],["The new RenderTexture.depthStencilFormat property returns the format that the graphics API uses to create the resource in video memory. You can also use this property to request a specific format. However, not all platforms support all depth stencil formats. When you set the DepthStencilFormat property to an unsupported format, Unity automatically selects a compatible format that has the equal or greater amount of bits for the depth and stencil components.",1827],["Upgrading",1827],["The RenderTexture asset now serializes the depth stencil format that you selected. If you use an API that takes a number of bits instead of a format, these bits get mapped to a format and that format is serialized. RenderTexture assets from previous versions that had the depth set to more than 16-bits are automatically upgraded to use D24_S8.",1827],["On some platforms (for example Windows) that use the DirectX graphics API, this results in a format with fewer depth bits because the graphics backend selects the D32_S8 format internally if you set bits>16. To ensure consistent upgrades across all platforms, D24_S8 is used on all platforms for the automatic upgrader. However, this might introduce visual artifacts in the render output of your project if you have RenderTexture assets in your project. Review these assets and change the depth stencil format to D32_S8 when needed. The following issues might occur:",1827],["The memory size might increase for the RenderTextures that you use. However, the memory reported is now correct.",1827],["Now that setting the depth property to 32-bit gives you a 32-bit depth component, the memory usage increases. To avoid this, set the bits to 24 and use D24_S8 if that is supported on your platform.",1827],["If a platform doesn't support D24_S8, Unity falls back to the compatible format D32_S8 by default. To prevent this, in the Inspector window, disable the Enable Compatible Format property on an asset. If Unity doesn't support the format D32_S8 and it can’t fall back, you see the error message: RenderTexture.Create failed: depth/stencil format unsupported. There is no compatible format on this platform or this fallback to a compatible format is disabled in the import inspector.. In most cases, to fix the issue you can turn on Enable Compatible Format.",1827],["",1827],["Graphics formats DepthAuto, ShadowAuto and VideoAuto are deprecated",1827],["The following graphics formats have now been deprecated:",1827],["DepthAuto",1827],["ShadowAuto",1827],["VideoAuto",1827],["These Auto formats are unclear about the exact format that's used and might vary by platform.",1827],["The steps to remove the use of these deprecated formats depends on the format and use case.",1827],["For VideoAuto",1827],["To get the current platform's automatic video format, use SystemInfo.GetGraphicsFormat(DefaultFormat.Video).",1827],["For DepthAuto/ShadowAuto used to indicate a depth-only render texture.",1827],["The GraphicsFormat API often uses DepthAuto or ShadowAuto to create render textures with depth-only rendering, and no color buffer. Examples of this use case are:",1827],["renderTextureDescriptor.graphicsFormat = GraphicsFormat.ShadowAuto",1827],["RenderTexture.GetTemporary(width, height, bits, GraphicsFormat.ShadowAuto)",1827],["To indicate depth-only (non-color) rendering, use GraphicsFormat.None as the new color format.",1827],["renderTextureDescriptor.graphicsFormat = GraphicsFormat.None;",1827],["If you used ShadowAuto, set the shadowSamplingMode of your RenderTextureDescriptor to ShadowSamplingMode.CompareDepths to enable depth-compare sampling on the depth texture, and change the code to use an overload that takes a RenderTextureDescriptor.",1827],["renderTextureDescriptor.shadowSamplingMode = ShadowSamplingMode.CompareDepths;",1827],["For DepthAuto/ShadowAuto in other situations",1827],["In some situations the DepthAuto/ShadowAuto formats represented an automatically selected depth format appropriate for the current platform. To replace the deprecated values in this case, use SystemInfo.GetGraphicsFormat(DefaultFormat.Depth/Shadow)",1827],["",1827],["WebGL: Updated Emscripten to 2.0.19",1827],["The asm.js Linker target that was available for advanced users is no longer available.",1827],["In Unity 2021.2, the underlying Emscripten compiler used by the WebGL platform was updated to version 2.0.19. This upgraded the native code object file format, and therefore requires recompiling all native code plugins (C/C++ code plugins) in a project. If you are using closed source 3rd-party plugins from Unity Asset Store, for example, remember to ask the author for an updated version for Unity 2021.2.",1827],["The Emscripten runtime JavaScript function Pointer_stringify()is now deprecated. Instead, call the function UTF8ToString() to marshal a UTF8-encoded null-terminated C string from the WebAssembly heap to a JavaScript string.",1827],["",1827],["Progressive GPU Lightmapper dropped support for CPU OpenCL devices",1827],["The Progressive GPU Lightmapper no longer supports CPU OpenCL devices. If no supported GPU is found but a CPU OpenCL device is detected, a warning message informs you that the device is skipped and falls back to the Progressive CPU Lightmapper. The Progressive CPU Lightmapper offers better performance for CPU-based computation of lightmaps.",1827],["This change of behavior will happen automatically and lightmaps should be computed as expected.",1827],["",1827],["When Unity calls InitializeOnLoad methods during the asset import process, asset loading can fail. During asset import, the asset database is in an update state and Unity can’t determine which assets have already been imported. InitializeOnLoad methods can’t load assets that haven’t been imported.",1827],["To improve the asset import process, the OnPostprocessAllAssets callback has been enhanced. In particular, the OnPostprocessAllAssets callback:",1827],["Can perform initialization after a domain reload, when the asset database is guaranteed to be in a ready state.",1827],["Contains the didDomainReload parameter, which is set to true if the domain has reloaded.",1827],["Supports asset operations. This includes asset loading, which behaves in the same way as loading assets via a menu item.",1827],["Has moved out of the asset database importing loop. Callback processing is postponed until asset import is complete.",1827],["Move any domain-related initialization logic that requires asset operations to the OnPostprocessAllAsset callback; do not perform asset operations inside InitializeOnLoad methods.",1827],["The following behavior change code examples show how asset operations were previously postponed.",1827],["Example 1:",1827],["public class AssetPostprocessorTester1 : AssetPostprocessor",1827],["static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)",1827],["var assetPath = \"Assets/hello.txt\";",1827],["if (File.Exists(assetPath))",1827],["var txtObj = AssetDatabase.LoadAssetAtPath(\"Assets/hello.txt\");",1827],["AssetDatabase.DeleteAsset(\"Assets/hello.txt\");",1827],["if (txtObj == null)",1827],["Debug.Log(\"New Behaviour: Asset object is unloaded\");",1827],["else",1827],["Debug.Log(\"Old Behaviour: Asset is loaded for deleted asset!!\");",1827],["Example 2:",1827],["public class AssetPostprocessorTester2 : AssetPostprocessor",1827],["static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)",1827],["var assetPath = \"Assets/SomeText.txt\";",1827],["if (!File.Exists(assetPath))",1827],["File.WriteAllText(assetPath, \"hello world\");",1827],["AssetDatabase.ImportAsset(assetPath);",1827],["var txtObj = AssetDatabase.LoadAssetAtPath(assetPath);",1827],["if (txtObj == null)",1827],["Debug.Log(\"Old Behaviour: Asset hasn't been imported yet\");",1827],["else",1827],["Debug.Log(\"New Behaviour: Asset is imported and loaded\");",1827],["The following example has the new OnPostprocessAllAssets variant with the didDomainReload parameter:",1827],["static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths, bool didDomainReload)",1827],["if (didDomainReload)",1827],["Debug.Log(\"Domain has been reloaded\");",1827],["else",1827],["Debug.Log(\"Domain did not reload during import\");",1827],["All domain reloads are now processed inside the asset database.",1827],["OnPostprocessAllAssets now works better with asset operations, but any processing in this callback increases asset database refresh and domain reload time. InitializeOnLoad methods also add to domain reload time. It is best practice to minimize processing in these callbacks to improve Editor responsiveness between iterations.",1827],["",1827],["Mixed point and spot lights with no shadows bake direct light in subtractive lighting mode",1827],["Mixed mode point and spot lights now consistently contribute baked direct light in Scenes using Subtractive lighting mode, regardless of their Shadow Type setting. As a result, specular lighting for Static GameObjects may appear to be missing in affected Scenes. To resolve this issue, replace affected Mixed mode lights with Realtime mode Lights. Alternatively, use Baked Indirect or Shadowmask lighting mode(s) with Mixed lights.",1827],["",1827],["Shader keyword system improvements",1827],["The shader keyword system now allows up to 65534 local keywords per shader or compute shader and 2^32-2 global keywords per project. All keywords you declare in a shader or compute shader are now local to this shader. Keywords you declare in a directive with the _local suffix aren’t affected by the state of global keywords.",1827],["Example:",1827],["A pass in a shader declares the following keywords:",1827],["#pragma shader_feature FOO BAR",1827],["#pragma shader_feature_local BOO BAZ",1827],["When using this pass, keywords FOO and BAR are enabled if they're enabled either globally or on the material. Keywords BOO and BAZ are only enabled if they're enabled on the material.",1827],["",1827],["Unity supports .NET Standard 2.1 APIs",1827],["Unity now supports many additional APIs in the .NET base class libraries, including all APIs in the .NET Standard 2.1 API. Your project might fail to compile if any of your code has conflicts with new APIs.",1827],["To avoid errors when you upgrade projects created in previous versions of Unity, check and update your code to ensure that there are no conflicts with types and methods that are now available in .NET Standard 2.1.",1827],["Sources of conflict include the following:",1827],["ambiguous references",1827],["extension methods",1827],["precompiled assemblies",1827],["Resolve ambiguous references",1827],["If your code implements types or methods with a name that conflicts with types or methods that .NET Standard 2.1 adds, your code fails to compile. Name conflicts can lead to C# compiler errors due to ambiguous references.",1827],["For example, if you add a type named MyCompany.MyCode.Range to your project’s code, this might conflict with the existing System.Range type. Code that contains both using System; and using MyCompany; statements fails to compile.",1827],["To prevent errors, fully specify the namespace in the C# code for any types that have conflicting names.",1827],["Resolve conflicting extension methods",1827],["If your existing code has an extension method that .NET Standard 2.1 now implements on a type directly, you can choose to rename your extension methods or to use the methods implemented by the base class library.",1827],["For example, code in your project might implement an extension method named CopyTo on the ArraySegment type. In .NET Standard 2.1, ArraySegment has a built-in CopyTo method. You can choose to rename your CopyTo extension method, or eliminate it entirely and use the built-in one.",1827],["Resolve conflicting assemblies",1827],["If your project uses precompiled assemblies (that is, managed plugins) that implement types and methods that are now part of the base class library, then remove these assemblies from your project and use the built-in implementations.",1827],["For example, in previous versions of Unity, you needed to use the System.Memory.dll assembly from NuGet to access the System.Span value type. Now, .NET Standard 2.1 provides System.Span in the base class library. If you try to use the System.Memory.dll managed plugin in Unity 2021.2, the project fails to build.",1827],["",1827],["Windows XR plugin removed",1827],["Microsoft has deprecated the Windows XR plugin and now supports Windows Mixed Reality (WMR) features and devices through the OpenXR plugin.",1827],["The Windows XR plugin has been removed as of Unity 2021.2.",1827],["When you open an existing project in Unity 2021.2, the update process removes the Windows XR plugin, if present.",1827],["To continue to use the project for Windows Mixed Reality, you must enable the Unity OpenXR plugin.",1827],["Depending on which features you are using, you must also install Microsoft's Mixed Reality OpenXR support plugin and possibly additional tools from the Microsoft Mixed Reality Toolkit.",1827],["To upgrade to the Unity OpenXR plugin:",1827],["Open the Project Settings window.",1827],["In the XR Plug-in Management section, enable OpenXR in the Plug-in Providers list.",1827],["If needed, Unity downloads and installs the OpenXR plugin.",1827],["Once the OpenXR plugin is enabled, you can use the Mixed Reality Feature Tool provided by Microsoft to install the required supporting packages.",1827],["To install or update WMR features, tools, and samples:",1827],["Download and run the Mixed Reality Feature Tool.",1827],["Choose the Unity Project to update and click Discover Features.",1827],["Under Platform Support, select the Mixed Reality OpenXR Plugin.",1827],["Select any additional features you wish to add.",1827],["Click Get features.",1827],["Click Import and then Approve to complete the process.",1827],["Return to the XR Plug-in Management section of your Unity Project Settings and enable and configure the added features.",1827],["For more information about setting up new and updated Unity projects to use Windows Mixed Reality, see Setting up your XR configuration on Microsoft's documentation site.",1827],["Upgrade to Unity 2022.1",1828],["Note:** Follow the advice in this section in release order.",1828],["To upgrade between LTS versions, such as 2019LTS to 2021LTS, you need to read the LTS upgrade guides between the versions, so go through the 2019LTS upgrade guide and then the 2021LTS upgrade guide.",1828],["To upgrade between regular (non-LTS) versions, such as 2019.4 to 2021.1, you need to read the LTS upgrade guides between those versions and then any minor version upgrade guides between the last LTS version and the version you want to upgrade to - so read the 2019LTS, 2020LTS, and 2021.1 upgrade guides in that order.",1828],["This page lists changes in the Unity 2022.1 version which might affect existing projects when you upgrade from the 2021 LTS version to 2022.1.",1828],["Note**: 2021 LTS is also known as 2021.3.",1828],["Page outline",1828],["",1828],["Articulation Drive forceLimit property has been fixed to accept force input instead of impulse",1828],["The Articulation Drive forceLimit feature was used as an impulse limit when it should have been a force limit. This made the force limit dependent on the fixedDeltaTime value.",1828],["If you have already adapted to the use of this value as an impulse, when you upgrade, your values for forceLimit in your Articulation Drive in the Articulation Body component will be incorrect by a large scale.",1828],["There are checks for when you open an older project. When you upgrade a project, Unity automatically divides the relevant values by the Time.fixedDeltaTime set in the ProjectSettings > Time page to avoid the incorrect configuration. This catches most cases where robots are simulated based on the project set Time value.",1828],["If you use custom time values from script to simulate your robots, then you need to manually correct these values.",1828],["",1828],["Change to generated lightmap UVs",1828],["Unity's UV generation procedure has changed. As a result, lightmaps may appear corrupted in projects that use the Generate Lightmap UVs option in Model Import Settings. To resolve this problem, rebake all of the lightmaps in your project.",1828],["This change only affects projects that use Generate Lightmap UVs.",1828],["",1828],["Change to GradientField in the UI Toolkit",1828],["From Unity 2022.1, the color picker in GradientField doesn’t have HDR enabled by default. Existing projects that use GradientField now use a regular color picker instead of the HDR color picker.",1828],["To continue the use of a HDR color picker, you can enable it using the HDR property in GradientField.",1828],["",1828],["UI Toolkit Numeric and Compound fields are available at runtime",1828],["The following fields are now available that work automatically at runtime:",1828],["DoubleField",1828],["FloatField",1828],["IntegerField",1828],["LongField",1828],["Hash128Field",1828],["RectField",1828],["RectIntField",1828],["Vector2Field",1828],["Vector3Field",1828],["Vector4Field",1828],["Vector2IntField",1828],["Vector3IntField",1828],["BoundsField",1828],["BoundsIntField",1828],["The UXML files in your projects don’t update and work upon upgrading. However, when you add new promoted types through the UI Builder, it breaks the backwards compatibility of UXML assets with older Unity versions. To keep the UXML assets backwards compatible, you need to use the old types (UnityEditor.UIElements namespace) in UXML files.",1828],["",1828],["The Physical Keys option in Input Managed is enabled by default",1828],["The Physical keys option allows you to map key codes to the physical keyboard layout, rather than to the language-specific layout that may vary between users in different regions. For example, on some keyboards the first row of letters reads “QWERTY”, and on others it reads “AZERTY”. This means if you scripted specific controls to use the well known “WASD” keys for movement, they would not be in the correct physical arrangement (like the arrow-key arrangement) on an AZERTY-layout keyboard. With Physical Keys enabled, Unity uses a generic ANSI/ISO “Qwerty” layout to represent the physical location of the keys regardless of the user’s actual layout. This means if you specify the “Q” key, it will always be the left-most letter on the first row of letter keys, even if the user’s keyboard has a different letter in that position.",1828],["As of 2022.1 the option is enabled by default with intent of deprecating and removing old behavior in the future.",1828],["",1828],["Added support for BatchRendererGroup",1828],["The BatchRendererGroup API was originally written for the MegaCity demo but was never fully documented or usable without a lot of implementation details. This API has been rewritten from the ground up and is fully documented and supported.",1828],["For information on how to use the new interface, see the BatchRendererGroup page.",1828],["Upgrade to Unity 2022.2",1829],["Page outline",1829],["",1829],["Render pipelines",1829],["This upgrade guide describes how to upgrade to version 2022.2 of Unity's built-in render pipeline.",1829],["To upgrade to other render pipelines to version 2022.2, see:",1829],["\nThe URP upgrade guide\n",1829],["\nThe HDRP upgrade guide\n",1829],["To upgrade other packages, refer to the documentation for the packages you are using.",1829],["",1829],["Enlighten Baked Global Illumination is deprecated",1829],["The Enlighten Baked Global Illumination lightmapping backend is no longer available by default. When you upgrade a project to this version, Unity removes the Enlighten baking backend from the lightmapper selection dropdown and substitutes a Progressive Lightmapper in every Scene where you've selected the Enlighten baking backend.",1829],["On Apple silicon devices, Unity substitutes the Progressive GPU Lightmapper for the Enlighten baking backend. On all other devices, Unity selects the CPU Progressive Lightmapper.",1829],["To continue using the Enlighten baking back end, open Edit > Project Settings > Editor and in the Graphics section of that menu, activate Enable Enlighten for Baked GI (Legacy). However, this option isn't available in 2023.1 and later.",1829],["",1829],["Minimum Bounces is not available in the Lighting window",1829],["The Minimum Bounces property of the Progressive Lightmapper is no longer available in the Lighting window.",1829],["When you upgrade a project to 2022.2, Unity resets the Minimum Bounces value to 2, the recommended number of minimum bounces for lightmapping.",1829],["To change this value, edit the LightingSettings API property minBounces.",1829],["",1829],["Unity's default Gradle templates have changed",1829],["In 2022.2, Unity updated the default versions of all tools used by Android. The new versions are as follows:",1829],["Tool Version ",1829],["SDK ",1829],[" Cmdline-tools component version 6.0 \n",1829],[" Build-tools component version 32.0.0 \n",1829],[" Platform-tools component 32.0.0 \n",1829],[" Platform (API level) 31 and 32 added by default \n",1829],[" Tools component Removed \n",1829],["NDK r23b ",1829],["JDK (OpenJDK) 11.0.14.1+1 ",1829],["Gradle 7.2 ",1829],["Android Gradle Plugin 7.1.2 ",1829],["The update to Gradle version 7.2 changed some build.gradle file configuration options. This required significant changes to Unity's default gradle templates. Unity won't attempt to upgrade custom Gradle templates to match the new format which means projects that contain custom template files might fail to build. To solve this, recreate any custom template files based on the new default template files.",1829],["For information about the build.gradle configuration option changes, refer to the Android Gradle Plugin release notes.",1829],["",1829],["Navigation and Pathfinding is moving from the Unity core to the AI Navigation package",1829],["The package documentation is located here: https://docs.unity3d.com/Packages/com.unity.ai.navigation@latest",1829],["If you have projects that were created with the Navigation feature in previous versions of the Unity engine you can do one of the following:",1829],["Continue to use your projects as they are",1829],["Convert your projects to use the new package",1829],["In either case, the AI Navigation package is automatically installed and added to your project.",1829],["To start using the new package you need to convert your project as follows:",1829],["Go to Window > AI > NavMesh Updater.",1829],["In the NavMesh Updater window, select which kind of data to convert.",1829],["Click Initialize Converters to detect and display the types of data you selected.",1829],["Select the data to be converted.",1829],["Click Convert Assets to complete the conversion.",1829],["As part of the conversion process, the NavMesh Updater makes the following changes:",1829],["Any NavMesh that was previously baked and embedded in the scene is now referenced from a NavMeshSurface component created on a new GameObject called Navigation.",1829],["Any object that was marked with Navigation Static will now have a NavMeshModifier component with the appropriate settings.",1829],["If the NavMeshes in different scenes are baked with different agent settings then you need to create new Agent types to match those settings. To create the Agent types do the following:",1829],["Go to Window > AI > Navigation.",1829],["Select Agents.",1829],["Create new entries and specify the relevant settings.",1829],["When you have created the new entries you then need to do the following:",1829],["Assign the newly created agent types to their respective NavMeshSurfaces in the Navigation created for that scene,",1829],["Assign the agent types to the NavMeshAgents intended to use that NavMesh.",1829],["To find the settings that were used for each existing NavMesh, select the NavMesh .asset file in the Project window. The NavMesh settings will be displayed in the Inspector.",1829],["If your project uses the NavMeshSurface, NavMeshModifier, NavMeshModifierVolume or NavMeshLink components defined by scripts downloaded from Unity's NavMeshComponents GitHub repository , then remove those scripts and any associated files before you add the AI Navigation package to your project. If you don't remove these scripts, you might get conflicts and errors related to these components in the Console. The new components mirror the same behavior as the old components do in your project except when using the following components:",1829],["The NavMeshSurface component now includes an option to use only the objects that have a NavMeshModifier in the baking process.",1829],["You can now specify whether or not to apply the NavMeshModifier component to child objects in the hierarchy.",1829],["Upgrading to Unity 2022 LTS",1830],["This page lists changes in Unity 2022 LTS version which might affect existing projects when you upgrade them from a 2021 version to 2022 LTS.",1830],["Note**: 2022 LTS is also known as 2022.3.0.",1830],["Page Outline",1830],["",1830],["Articulation Drive forceLimit property now accepts force input instead of impulse",1830],["The Articulation Drive forceLimit feature was used previously as an impulse limit instead of a force limit. This made the force limit dependent on the fixedDeltaTime value.",1830],["If you have already adapted to the use of this value as an impulse, when you upgrade, your values for forceLimit in your Articulation Drive in the Articulation Body component will be incorrect by a large scale.",1830],["There are checks for when you open an older project. When you upgrade a project, Unity automatically divides the relevant values by the Time.fixedDeltaTime set in the ProjectSettings > Time page to avoid the incorrect configuration. This catches most cases where robots are simulated based on the project set Time value.",1830],["If you use custom time values from script to simulate your robots, then you need to manually correct these values.",1830],["",1830],["Change to generated lightmap UVs",1830],["Unity's UV generation procedure has changed. Lightmaps might appear corrupted in projects that use the Generate Lightmap UVs option in Model Import Settings. To resolve this problem, rebake all of the lightmaps in your project.",1830],["This change only affects projects that use Generate Lightmap UVs.",1830],["",1830],["Change to GradientField in the UI Toolkit",1830],["From Unity 2022.1, the color picker in GradientField doesn’t have HDR enabled by default. Existing projects that use GradientField now use a regular color picker instead of the HDR color picker.",1830],["To continue the use of a HDR color picker, you can enable it using the HDR property in GradientField.",1830],["",1830],["UI Toolkit Numeric and Compound fields are available at runtime",1830],["The following fields are now available that work automatically at runtime:",1830],["DoubleField",1830],["FloatField",1830],["IntegerField",1830],["LongField",1830],["Hash128Field",1830],["RectField",1830],["RectIntField",1830],["Vector2Field",1830],["Vector3Field",1830],["Vector4Field",1830],["Vector2IntField",1830],["Vector3IntField",1830],["BoundsField",1830],["BoundsIntField",1830],["The UXML files in your projects don’t update and work upon upgrading. However, when you add new promoted types through the UI Builder, it breaks the backwards compatibility of UXML assets with older Unity versions. To keep the UXML assets backwards compatible, you need to use the old types (UnityEditor.UIElements namespace) in UXML files.",1830],["",1830],["The Physical Keys option in Input Managed is enabled by default",1830],["The Physical keys option allows you to map key codes to the physical keyboard layout, rather than to the language-specific layout that may vary between users in different regions. For example, on some keyboards the first row of letters reads “QWERTY”, and on others it reads “AZERTY”. This means if you scripted specific controls to use the well known “WASD” keys for movement, they would not be in the correct physical arrangement (like the arrow-key arrangement) on an AZERTY-layout keyboard. With Physical Keys enabled, Unity uses a generic ANSI/ISO “Qwerty” layout to represent the physical location of the keys regardless of the user’s actual layout. This means if you specify the “Q” key, it will always be the left-most letter on the first row of letter keys, even if the user’s keyboard has a different letter in that position.",1830],["As of 2022.1 the option is enabled by default with intent of deprecating and removing old behavior in the future.",1830],["",1830],["Added support for BatchRendererGroup",1830],["The BatchRendererGroup API was originally written for the MegaCity demo but was never fully documented or usable without a lot of implementation details. This API has been rewritten from the ground up and is fully documented and supported.",1830],["For information on how to use the new interface, refer to the BatchRendererGroup page.",1830],["",1830],["Render pipelines",1830],["This upgrade guide describes how to upgrade to version 2022.2 of Unity's built-in render pipeline.",1830],["To upgrade to other render pipelines to version 2022.2, refer to the documentation for the render pipeline you're using:",1830],["\nThe URP upgrade guide\n",1830],["\nThe HDRP upgrade guide\n",1830],["To upgrade other packages, refer to the documentation for the packages you are using.",1830],["",1830],["Enlighten Baked Global Illumination is deprecated",1830],["The Enlighten Baked Global Illumination lightmapping backend is no longer available by default. When you upgrade a project to this version, Unity removes the Enlighten baking backend from the lightmapper selection dropdown and substitutes a Progressive Lightmapper in every Scene where you've selected the Enlighten baking backend.",1830],["On Apple silicon devices, Unity substitutes the Progressive GPU Lightmapper for the Enlighten baking backend. On all other devices, Unity selects the CPU Progressive Lightmapper.",1830],["To continue using the Enlighten baking back end, open Edit > Project Settings > Editor and in the Graphics section of that menu, activate Enable Enlighten for Baked GI (Legacy). However, this option isn't available in 2023.1 and later.",1830],["",1830],["Minimum Bounces is not available in the Lighting window",1830],["The Minimum Bounces property of the Progressive Lightmapper is no longer available in the Lighting window.",1830],["When you upgrade a project to 2022.2, Unity resets the Minimum Bounces value to 2, the recommended number of minimum bounces for lightmapping.",1830],["To change this value, edit the LightingSettings API property minBounces.",1830],["",1830],["Unity's default Gradle templates have changed",1830],["In 2022.2, Unity updated the default versions of all tools used by Android. The new versions are as follows:",1830],["Tool Version ",1830],["SDK ",1830],[" Cmdline-tools component version 6.0 \n",1830],[" Build-tools component version 32.0.0 \n",1830],[" Platform-tools component 32.0.0 \n",1830],[" Platform (API level) 31 and 32 added by default \n",1830],[" Tools component Removed \n",1830],["NDK r23b ",1830],["JDK (OpenJDK) 11.0.14.1+1 ",1830],["Gradle 7.2 ",1830],["Android Gradle Plugin 7.1.2 ",1830],["The update to Gradle version 7.2 changed some build.gradle file configuration options. This required significant changes to Unity's default gradle templates. Unity won't attempt to upgrade custom Gradle templates to match the new format which means projects that contain custom template files might fail to build. To solve this, recreate any custom template files based on the new default template files.",1830],["For information about the build.gradle configuration option changes, refer to the Android Gradle Plugin release notes.",1830],["",1830],["Navigation and Pathfinding is moving from the Unity core to the AI Navigation package",1830],["The package documentation is located here: https://docs.unity3d.com/Packages/com.unity.ai.navigation@latest",1830],["If you have projects that were created with the Navigation feature in previous versions of the Unity engine you can do one of the following:",1830],["Continue to use your projects as they are",1830],["Convert your projects to use the new package",1830],["In either case, the AI Navigation package is automatically installed and added to your project.",1830],["To start using the new package you need to convert your project as follows:",1830],["Go to Window > AI > NavMesh Updater.",1830],["In the NavMesh Updater window, select which kind of data to convert.",1830],["Click Initialize Converters to detect and display the types of data you selected.",1830],["Select the data to be converted.",1830],["Click Convert Assets to complete the conversion.",1830],["As part of the conversion process, the NavMesh Updater makes the following changes:",1830],["Any NavMesh that was previously baked and embedded in the scene is now referenced from a NavMeshSurface component created on a new GameObject called Navigation.",1830],["Any object that was marked with Navigation Static will now have a NavMeshModifier component with the appropriate settings.",1830],["If the NavMeshes in different scenes are baked with different agent settings then you need to create new Agent types to match those settings. To create the Agent types do the following:",1830],["Go to Window > AI > Navigation.",1830],["Select Agents.",1830],["Create new entries and specify the relevant settings.",1830],["When you have created the new entries you then need to do the following:",1830],["Assign the newly created agent types to their respective NavMeshSurfaces in the Navigation created for that scene,",1830],["Assign the agent types to the NavMeshAgents intended to use that NavMesh.",1830],["To find the settings that were used for each existing NavMesh, select the NavMesh .asset file in the Project window. The NavMesh settings is displayed in the Inspector.",1830],["If your project uses the NavMeshSurface, NavMeshModifier, NavMeshModifierVolume or NavMeshLink components defined by scripts downloaded from Unity's NavMeshComponents GitHub repository , then remove those scripts and any associated files before you add the AI Navigation package to your project. If you don't remove these scripts, you might get conflicts and errors related to these components in the Console. The new components mirror the same behavior as the old components do in your project except when using the following components:",1830],["The NavMeshSurface component now includes an option to use only the objects that have a NavMeshModifier in the baking process.",1830],["You can now specify whether or not to apply the NavMeshModifier component to child objects in the hierarchy.",1830],["Upgrading Unity",1831],["Note**: Follow the advice in this section in release order. For example, if you need to upgrade your project from 2020 to 2022, read the 2021 upgrade guides to see if there are any changes that you need to make before you read the 2022 upgrade guides.",1831],["Visit the pages below for information about upgrading to later versions of Unity.",1831],["Note:** 2021.x and 2022.x Tech release guides have been compiled into the LTS guides. You can still view the version specific guides in their own section of the documentation such as the 2021.2 guide.",1831],["Supported Versions",1831],["Legacy Versions",1831],["Scripting API for packages",1832],["You can use the Package Manager scripting API to interact with the Package Manager using C# scripts. For example, you might want to install a specific package or version depending on the platform of the target machine.",1832],["The system relies heavily on the PackageManager.Client class, which you can use to find packages, browse the list of packages, and install and uninstall packages through scripting.",1832],["Another important class is PackageManager.PackageInfo, which contains the state of a package, including metadata obtained from the package manifest and the registry. For example, you can get a list of versions available for the package, or the list of any errors that might occur while locating or installing the package.",1832],["",1832],["Adding a package to the project",1832],["This example demonstrates how to use the Client class to install or add a package to the project.",1832],["You can use Client.Add to add a package. When you call the Client.Add method, you can specify just the package name, or the name with a specific version. For example, using Client.Add(\"com.unity.textmeshpro\") installs (or updates to) the latest version of the TextMesh Pro package; using Client.Add(\"com.unity.textmeshpro@1.3.0\") installs version 1.3.0 of the TextMesh Pro package.",1832],["The Client.Add method returns an AddRequest instance, which you can use to get the status, any errors, or a Request response that contains the PackageInfo information for the newly added package.",1832],["```lang-csharp",1832],["using System;",1832],["using UnityEditor;",1832],["using UnityEditor.PackageManager.Requests;",1832],["using UnityEditor.PackageManager;",1832],["using UnityEngine;",1832],["namespace Unity.Editor.Example {",1832],["static class AddPackageExample",1832],["static AddRequest Request;",1832],["[MenuItem(\"Window/Add Package Example\")]",1832],["static void Add()",1832],["// Add a package to the project",1832],["Request = Client.Add(\"com.unity.textmeshpro\");",1832],["EditorApplication.update += Progress;",1832],["static void Progress()",1832],["if (Request.IsCompleted)",1832],["if (Request.Status == StatusCode.Success)",1832],["Debug.Log(\"Installed: \" + Request.Result.packageId);",1832],["else if (Request.Status >= StatusCode.Failure)",1832],["Debug.Log(Request.Error.message);",1832],["EditorApplication.update -= Progress;",1832],["",1832],["Browsing the list of packages in a project",1832],["This example demonstrates how to use the Client class to iterate over the packages in the project.",1832],["The Client.List method returns a ListRequest instance, which you can use to get the status of the List operation, any errors, or a Request response that contains the PackageCollection which you can iterate.",1832],["```lang-csharp",1832],["using System;",1832],["using UnityEditor;",1832],["using UnityEditor.PackageManager.Requests;",1832],["using UnityEditor.PackageManager;",1832],["using UnityEngine;",1832],["namespace Unity.Editor.Example {",1832],["static class ListPackageExample",1832],["static ListRequest Request;",1832],["[MenuItem(\"Window/List Package Example\")]",1832],["static void List()",1832],["Request = Client.List(); // List packages installed for the project",1832],["EditorApplication.update += Progress;",1832],["static void Progress()",1832],["if (Request.IsCompleted)",1832],["if (Request.Status == StatusCode.Success)",1832],["foreach (var package in Request.Result)",1832],["Debug.Log(\"Package name: \" + package.name);",1832],["else if (Request.Status >= StatusCode.Failure)",1832],["Debug.Log(Request.Error.message);",1832],["EditorApplication.update -= Progress;",1832],["",1832],["Embedding a package in the project",1832],["This example demonstrates how to use the Client class to embed one of the packages already installed in your project. The main method is the Client.Embed method, which makes a copy of the package and stores it under the Packages folder of your project.",1832],["The Client.Embed method returns an EmbedRequest instance, which you can use to get the status of the Embed operation, any errors, or a Request response that contains the PackageInfo information for the newly embedded package.",1832],["This example also uses the Client.List method to access the collection of packages currently installed in your project and picks out the first one that is neither embedded nor built-in.",1832],["The Client.List method returns a ListRequest instance, which you can use to get the status of the List operation, any errors, or a Request response that contains the PackageCollection which you can iterate.",1832],["```lang-csharp",1832],["using System;",1832],["using System.Collections;",1832],["using System.Collections.Generic;",1832],["using UnityEditor;",1832],["using UnityEditor.PackageManager.Requests;",1832],["using UnityEditor.PackageManager;",1832],["using UnityEngine;",1832],["namespace Unity.Editor.Example",1832],["static class EmbedPackageExample",1832],["static String targetPackage;",1832],["static EmbedRequest Request;",1832],["static ListRequest LRequest;",1832],["[MenuItem(\"Window/Embed Package Example\")]",1832],["static void GetPackageName()",1832],["// First get the name of an installed package",1832],["LRequest = Client.List();",1832],["EditorApplication.update += LProgress;",1832],["static void LProgress()",1832],["if (LRequest.IsCompleted)",1832],["if (LRequest.Status == StatusCode.Success)",1832],["foreach (var package in LRequest.Result)",1832],["// Only retrieve packages that are currently installed in the",1832],["// project (and are neither Built-In nor already Embedded)",1832],["if (package.isDirectDependency && package.source",1832],["!= PackageSource.BuiltIn && package.source",1832],["!= PackageSource.Embedded)",1832],["targetPackage = package.name;",1832],["break;",1832],["else",1832],["Debug.Log(LRequest.Error.message);",1832],["EditorApplication.update -= LProgress;",1832],["Embed(targetPackage);",1832],["static void Embed(string inTarget)",1832],["// Embed a package in the project",1832],["Debug.Log(\"Embed('\" + inTarget + \"') called\");",1832],["Request = Client.Embed(inTarget);",1832],["EditorApplication.update += Progress;",1832],["static void Progress()",1832],["if (Request.IsCompleted)",1832],["if (Request.Status == StatusCode.Success)",1832],["Debug.Log(\"Embedded: \" + Request.Result.packageId);",1832],["else if (Request.Status >= StatusCode.Failure)",1832],["Debug.Log(Request.Error.message);",1832],["EditorApplication.update -= Progress;",1832],["",1832],["",1832],["Package Manager events",1832],["Use the Events class to register an event handler with the Package Manager. The Events class contains two events you can subscribe to, which the Package Manager raises at these points:",1832],["Immediately before the Package Manager changes the list of dependencies (registeringPackages)",1832],["After the Package Manager imports and compiles the changed list of package dependencies (registeredPackages)",1832],["The following examples demonstrate how to use both of these events.",1832],["Example of using the registeringPackages event",1832],["```lang-csharp",1832],["using UnityEditor.PackageManager;",1832],["using UnityEngine;",1832],["namespace Unity.Editor.Example",1832],["public class EventSubscribingExample_RegisteringPackages",1832],["public EventSubscribingExample_RegisteringPackages()",1832],["// Subscribe to the event using the addition assignment operator (+=).",1832],["// This executes the code in the handler whenever the event is fired.",1832],["Events.registeringPackages += RegisteringPackagesEventHandler;",1832],["// The method is expected to receive a PackageRegistrationEventArgs event argument.",1832],["void RegisteringPackagesEventHandler(PackageRegistrationEventArgs packageRegistrationEventArgs)",1832],["Debug.Log(\"The list of registered packages is about to change!\");",1832],["foreach (var addedPackage in packageRegistrationEventArgs.added)",1832],["Debug.Log($\"Adding {addedPackage.displayName}\");",1832],["foreach (var removedPackage in packageRegistrationEventArgs.removed)",1832],["Debug.Log($\"Removing {removedPackage.displayName}\");",1832],["// The changedFrom and changedTo collections contain the packages that are about to be updated.",1832],["// Both collections are guaranteed to be the same size with indices matching the same package name.",1832],["for (int i = 0; i <= packageRegistrationEventArgs.changedFrom.Count; i++)",1832],["var oldPackage = packageRegistrationEventArgs.changedFrom[i];",1832],["var newPackage = packageRegistrationEventArgs.changedTo[i];",1832],["Debug.Log($\"Changing ${oldPackage.displayName} version from ${oldPackage.version} to ${newPackage.version}\");",1832],["Example of using the registeredPackages event",1832],["```lang-csharp",1832],["using UnityEditor;",1832],["using UnityEditor.PackageManager;",1832],["using UnityEngine;",1832],["namespace Unity.Editor.Example",1832],["public class EventSubscribingExample_RegisteredPackages",1832],["// You must use '[InitializeOnLoadMethod]' or '[InitializeOnLoad]' to subscribe to this event.",1832],["[InitializeOnLoadMethod]",1832],["static void SubscribeToEvent()",1832],["// This causes the method to be invoked after the Editor registers the new list of packages.",1832],["Events.registeredPackages += RegisteredPackagesEventHandler;",1832],["static void RegisteredPackagesEventHandler(PackageRegistrationEventArgs packageRegistrationEventArgs)",1832],["// Code executed here can safely assume that the Editor has finished compiling the new list of packages",1832],["Debug.Log(\"The list of registered packages has changed!\");",1832],["Accessing package assets",1833],["This section explains how to access or refer to assets that are defined inside a package:",1833],["Note**: Package Manager doesn't support streaming assets in packages. Use the Addressables package instead.",1833],["",1833],["Referring to package paths",1833],["To refer to assets that are defined inside a package, use this path scheme:",1833],["```lang-csharp",1833],["\"Packages//...\"",1833],["The path of the asset inside a package begins with Packages/ and the package name (not the display name).",1833],["By contrast, you access project assets using this scheme:",1833],["```lang-csharp",1833],["\"Assets/...\"",1833],["For example, the path for the file image.png in the package subfolder /Example/Images of the com.unity.images-library package is:",1833],["```lang-csharp",1833],["\"Packages/com.unity.images-library/Example/Images/image.png\"",1833],["",1833],["Loading a Texture inside a package",1833],["To load a Texture stored inside a package, use the LoadAssetAtPath method, which requires the using UnityEditor directive. Specify the path following the Packages/<package-name>/ path scheme as demonstrated in this example:",1833],["```lang-csharp",1833],["using UnityEditor;",1833],["// ...",1833],["Texture2D texture = (Texture2D)AssetDatabase.LoadAssetAtPath(\"Packages/com.unity.images-library/Example/Images/image.png\", typeof(Texture2D));",1833],["",1833],["Resolving absolute paths",1833],["To get the absolute path of a packaged asset, use the Path.GetFullPath() method, which requires the using System.IO directive. For example:",1833],["```lang-csharp",1833],["using System.IO;",1833],["// ...",1833],["string absolute = Path.GetFullPath(\"Packages/com.unity.images-library/Example/Images/image.png\");",1833],["Additional resources",1833],["Global Cache",1834],["When the Unity Package Manager downloads package contents and metadata from a registry, it stores them in a global cache. This makes reusing and sharing packages more efficient, and allows you to install and update stored packages even when offline.",1834],["Note**: The global cache doesn't include packages in the .unitypackage format that come the Asset Store. The Package Manager stores these types of packages in a separate cache. For more information, see Asset Store packages.",1834],["Location",1834],["By default, Unity stores the global cache in a root directory that depends on the operating system (and the user account type on Windows):",1834],["Operating system Default root directory ",1834],["------------------------------------------------------------ ------------------------------- ",1834],["Windows (user account) %LOCALAPPDATA%\\Unity\\cache ",1834],["Windows (system user account) %ALLUSERSPROFILE%\\Unity\\cache ",1834],["macOS $HOME/Library/Unity/cache ",1834],["Linux $HOME/.config/unity3d/cache ",1834],["Tip**: You can override the location of this root directory. See Customize the global cache location for more information.",1834],["Structure",1834],["The Package Manager global cache uses two different subsidiary caches, each serving a different purpose. The Package Manager stores these subsidiary caches in subdirectories under the folder of the global cache:",1834],["Subfolder Description ",1834],["------------- ------------------------------------------------------------ ",1834],["npm Stores data obtained from registries using the npm protocol. This includes package metadata and package tarballs. ",1834],["packages This cache contains the uncompressed contents of package tarballs fetched from a registry. ",1834],["Inside each of these subfolders, each registry has its own path so that packages hosted on different registries aren't mixed up.",1834],["Tip**: You can override the location of these folders. See Customize the global cache location for more information.",1834],["Requirements",1834],["The user account running the Unity Editor process must have full write permissions on the root directory and its contents. Without these permissions, the Package Manager can't download and save the package metadata and contents in the cache.",1834],["",1834],["Concepts",1835],["This section explains many of the concepts surrounding the Unity Package Manager functionality:",1835],["",1835],["Versions",1835],["Multiple versions of each package are available, marking changes to that package along its life cycle. Every time a developer updates the package, they give it a new version number. A change in package version tells you whether it contains a breaking change (major), new backward-compatible functionality (minor), or bug fixes only (patch), following Semantic Versioning.",1835],["To view the list of versions available for a specific package, see Finding a specific version.",1835],["",1835],["Manifests",1835],["There are two types of manifest files:",1835],["Project manifests (manifest.json) store information that the Package Manager needs to locate and load the right packages, including a list of packages and versions declared as dependencies.",1835],["Package manifests (package.json) store information about a specific package, and a list of packages and versions that the package requires.",1835],["Both files use JSON (JavaScript Object Notation) syntax.",1835],["",1835],["Registry",1835],["In the domain of Unity's Package Manager, a package registry is a server that stores package contents and information (metadata) on each package version. Unity maintains a central registry of official packages that are available for distribution. By default, all projects use the official Unity package registry, but you can add additional registries to store and distribute private packages or stage custom packages while you are developing them.",1835],["",1835],["Package Management",1835],["The Unity Package Manager is a tool that manages the entire package system. Its primary tasks include the following:",1835],["It communicates with the Unity package registry server and any additional registries you specify.",1835],["It reads your project manifest and fetches package contents and metadata.",1835],["It installs, upgrades, and uninstalls packages, whether they are dependencies of the project or one of the installed packages.",1835],["It imports Asset Store packages that you previously downloaded or purchased.",1835],["It enables and disables Unity's built-in packages.",1835],["It displays information about every version of every package.",1835],["It resolves conflicts when the project and its packages require more than one package version.",1835],["The Unity Package Manager installs samples, tools, and assets on a per-project basis, rather than installing them across all projects for a specific machine or device. It uses a global cache to store downloaded package metadata and contents. Once installed in a project, Unity treats package assets just like any other asset in the project, except that these assets are stored inside the package folder and are immutable. You can permanently change content only from Local and Embedded package sources.",1835],["",1835],["Package sources",1835],["Sources describe where the package came from:",1835],["Source Description ",1835],["----------------------------------------- ------------------------------------------------------------ ",1835],["Registry The Unity Package Manager downloads most packages from a package registry server into a global cache on your computer as you request them. These packages are immutable, so you can use them in your project, but you cannot modify them or change their package manifests. ",1835],["Built-in These packages allow you to enable or disable Unity features (for example, Terrain Physics, Animation, etc.). They are immutable. For more information, see Built-in packages. ",1835],["Embedded Any package stored inside your project folder is embedded. This source corresponds with the Custom state because you typically put all the scripts, libraries, samples, and other assets your new package needs in a folder under your project folder when you begin development on a custom package. ",1835],["Local You can install a package from any folder on your computer (for example, if you have cloned a development repository locally). ",1835],["Tarball (local) You can install a package from a tarball file on your computer. The Package Manager extracts the package from the tarball and stores it in the cache. However, these packages are immutable, unlike installations from a local folder. ",1835],["Git The Package Manager installs Git-based packages directly from a Git repository instead of from the package registry server. ",1835],["To edit the package manifest for a package, see Inspecting packages.",1835],["The Package Manager window displays a label that corresponds to some of these sources. For more information, see Labels.",1835],["Note**: The Package Manager stores packages that you download from the Asset Store in a cache which is separate from the global cache. See Asset Store packages for more information.",1835],["Customize the Asset Store cache location",1836],["The Package Manager maintains a cache for packages that you get from the Asset Store. The Package Manager stores this cache in a default location, which you can override.",1836],["You might want to override the Asset Store cache location for several reasons:",1836],["You want to save space on your internal drive.",1836],["You want to store the cache on a shared drive, which is accessible to others.",1836],["You want to store the cache in a folder that’s not in a system directory.",1836],["By default, the Package Manager uses the following folder structure for its Asset Store package cache:",1836],["",1836],["└── Asset Store-5.x",1836],["└── ",1836],["For information on the default location of the Asset Store package cache root, refer to Location of downloaded asset files.",1836],["Note**: The Package Manager maintains separate caches for registry packages and Asset Store packages. For information on overriding the default location for the global cache, refer to Customize the global cache location.",1836],["To override the default location of the Package Manager’s cache for Asset Store packages, you can use the following methods:",1836],["The Preferences window is the recommended method because of its ease and permanence. When you change the package cache location using this method, Unity stores the preference for the current session and future sessions.",1836],["The ASSETSTORE_CACHE_PATH environment variable method isn’t permanent, but advanced users might find it preferable in specific use cases.",1836],["Important notes before you begin",1836],["Regardless of the method you choose, changing the cache location tells the Package Manager to use that location going forward. Existing packages that Package Manager stored in the original location remain in that folder structure.",1836],["If you used the environment variable method to change the cache location, then you can't use the Preferences window to change the location.",1836],["",1836],["Using the Preferences window",1836],["To use the Preferences window to override the default location of the Asset Store package cache, follow these steps.",1836],["Use one of the following methods to open the Preferences window:",1836],["Use the Unity Editor's menus, as described in Preferences.",1836],["Open the Package Manager window, click the settings icon , and select Preferences.",1836],["Select the Package Manager category.",1836],["Under My Assets open the menu beside Cache Location .",1836],["Choose Change Location.",1836],["Choose a new location for the Asset Store package cache.",1836],["",1836],["Using the environment variable",1836],["In scenarios that involve automation or continuous integration, it's less practical and more error prone to configure settings in a configuration file or a preferences window. In such scenarios, you might consider setting the ASSETSTORE_CACHE_PATH environment variable to override the default location of the Asset Store package cache.",1836],["Important**: Follow these guidelines when you use this method:",1836],["Close the Unity Editor and Unity Hub if they’re already running before setting the environment variable.",1836],["Launch the Unity Editor or Unity Hub from the same command prompt or terminal session where you set the environment variable.",1836],["You must set the ASSETSTORE_CACHE_PATH environment variable every time you launch Unity.",1836],["For information on setting environment variables, refer to the documentation for your operating system. For an introduction to environment variables, refer to https://en.wikipedia.org/wiki/Environment_variable.",1836],["Customize the global cache location",1837],["The Package Manager maintains a global cache for registry data and uncompressed packages. The global cache includes subsidiary caches, each serving a different purpose. The Package Manager stores the global caches in a default location, which you can override.",1837],["You might want to override the cache location for several reasons:",1837],["You want to save space on your internal drive.",1837],["You want to store the cache on a shared drive, which is accessible to others.",1837],["You want to store the cache in a folder that’s not in a system directory.",1837],["By default, the Package Manager uses the following folder structure for the global cache:",1837],["",1837],["├── npm",1837],["│ └── ",1837],["├── packages",1837],["│ └── ",1837],["└── git-lfs (if enabled)",1837],["└── ",1837],["For information on the default location of the global cache root, refer to global cache.",1837],["Note**: The Package Manager maintains separate caches for the global cache and the Asset Store package cache. For information on overriding the default location for the Asset Store cache, refer to Customize the Asset Store cache location.",1837],["To override the default location of the global cache root, you can use the following methods:",1837],["The Preferences window is the recommended method because of its ease and permanence. When you change the package cache location using this method, Unity stores the preference for the current session and future sessions.",1837],["Note**: Using the Preferences window sets the cacheRoot property in a user configuration file. If you want to set the user configuration file manually, refer to Using the user configuration file.",1837],["The environment variable method isn’t permanent, but advanced users might find it preferable in specific use cases.",1837],["Important notes before you begin",1837],["Regardless of the method you choose, changing the cache location tells the Package Manager to use that location going forward. Existing packages that Package Manager stored in the original location remain in that folder structure.",1837],["You can use environment variables to override the location of the global cache root or its subsidiary caches (registry data cache, uncompressed packages cache, and the Git LFS [Large File Storage] cache). However, environment variables and configuration file properties aren't equivalent, so using different methods to configure settings can produce unexpected results.",1837],["There are several factors that affect how setting several values with different methods work together:",1837],["If you used the environment variable method to change the cache location, then you can't use the Preferences window to change the location.",1837],["When you use a user configuration file, your change applies to the current user account. Although a global configuration file exists, you can't set the global cache location in the global configuration file.",1837],["If you set different values for the global cache root with both the UPM_CACHE_ROOT environment variable and the cacheRoot property, Package Manager uses the location in the UPM_CACHE_ROOT environment variable.",1837],["If you set an environment variable for the registry data cache (UPM_NPM_CACHE_PATH), the uncompressed packages cache (UPM_CACHE_PATH), or the Git LFS cache (UPM_GIT_LFS_CACHE_PATH), Package Manager uses the location specified by the environment variable, regardless of where the global cache root is.",1837],["If you enable the Git LFS cache (UPM_ENABLE_GIT_LFS_CACHE) without explicitly setting its path (UPM_GIT_LFS_CACHE_PATH), Package Manager uses the git-lfs folder under the global cache root as its location.",1837],["",1837],["Using the Preferences window",1837],["To use the Preferences window to override the default location of the global cache, follow these steps.",1837],["Use one of the following methods to open the Preferences window:",1837],["Use the Unity Editor's menus, as described in Preferences.",1837],["Open the Package Manager window, open the Advanced menu, and select Preferences.",1837],["Select the Package Manager category.",1837],["Under Packages, open the menu beside Cache Location .",1837],["Choose Change Location.",1837],["Choose a new location for the global cache.",1837],["",1837],["Using the user configuration file",1837],["You can manually edit the user configuration file to override the location of the global cache root. Although a global configuration file exists, you can't set the global cache location in the global configuration file.",1837],["Follow these steps to edit the user configuration file:",1837],["Locate the .upmconfig.toml user configuration file. To find the file location, refer to Configuration files. If the file doesn't exist, create an empty text file.",1837],["Add the cacheRoot key and set its value as an absolute path to a custom location. ",1837],["Windows example**",1837],["```lang-toml",1837],["cacheRoot = \"E:\\Unity\\cache\"",1837],["macOS and Linux example**",1837],["```lang-toml",1837],["cacheRoot = \"/dev/external/shared/Unity/cache\"",1837],["You don't need to restart the Unity Editor or the Hub after setting the cacheRoot key for the change to take effect.",1837],["",1837],["Using environment variables",1837],["In scenarios that involve automation or continuous integration, it's less practical and more error prone to configure settings in the user configuration file or the Preferences window. In such scenarios, you might consider using environment variables to configure settings for the global cache and its subsidiary caches. The following environment variables are available:",1837],["Environment variable: Description: ",1837],["-------------------------- ------------------------------------------------------------ ",1837],["UPM_CACHE_ROOT Specify the location of the global cache (the root folder containing the registry data and uncompressed packages caches). ",1837],["UPM_NPM_CACHE_PATH Specify the absolute path to the location where you want Package Manager to store package metadata and tarballs. By default, this is the npm subdirectory under the global cache root. ",1837],["UPM_CACHE_PATH Specify the absolute path to the location where you want Package Manager to store the uncompressed contents of package tarballs. By default, this is the packages subdirectory under the global cache root. ",1837],["UPM_ENABLE_GIT_LFS_CACHE Specify any value except empty (\"\") to enable the Git LFS cache. By default, Package Manager uses the git-lfs subdirectory under the global cache root, unless you specify a different path using the UPM_GIT_LFS_CACHE_PATH environment variable. ",1837],["UPM_GIT_LFS_CACHE_PATH Specify the absolute path to the location where you want Package Manager to store the Git LFS cache. By setting this path, you automatically enable the Git LFS cache. ",1837],["Important**: Follow these guidelines when you use this method:",1837],["Close the Unity Editor and Unity Hub if they’re already running before setting environment variables.",1837],["Launch the Unity Editor or Unity Hub from the same command prompt or terminal session where you set the environment variables.",1837],["Any environment variables you set in the preceding table must be set every time you launch Unity.",1837],["For information on setting environment variables, refer to the documentation for your operating system. For an introduction to environment variables, refer to https://en.wikipedia.org/wiki/Environment_variable.",1837],["Additional resources",1837],["Using private repositories with HTTPS Git URLs",1838],["When you use Git in a terminal to access a private repository over HTTPS, Git prompts you to enter a username and password. Then, Git submits these credentials to the server and proceeds with the command if the server accepts those credentials and allows access to the repository.",1838],["When the Unity Package Manager fetches packages using Git URLs, there's no terminal for users to enter credentials. As a result, when the server requests credentials from Git, Git doesn't issue a prompt. Instead, it reports an error to the Unity Package Manager. To solve this problem, you must configure Git with a Git credential helper, and that helper must already have the required credentials loaded for that repository. If the credentials are valid, Git can successfully run the commands issued by the Unity Package Manager.",1838],["Note**: A Git credential helper has no effect when using Git URLs with the SSH protocol, including the SCP-like syntax. Using passphrase-protected SSH keys with SSH Git URLs. -->",1838],["Git Credential Manager",1838],["Although Git supports several credential helpers to store credentials, the Git Credential Manager (GCM) is the recommended credential helper. GCM is flexible, easy to install, and is actively supported. It's built on .NET, which means it can run on Windows, macOS, and Linux distributions that support .NET.",1838],["By default, GCM uses Windows Credential Manager (on Windows) and macOS Keychain (on macOS) as the configured credential store. GCM doesn’t have a default store configured for Linux. Refer to the GCM credential stores documentation for more information on the different credential store configurations supported by GCM.",1838],["Prerequisites",1838],["Before you can fetch packages from private Git repositories using HTTPS URLs, make sure you install GCM.",1838],["The Git for Windows installer includes a step to install and configure GCM automatically. You can also install GCM separately if you:",1838],["Used a different method to install Git on Windows.",1838],["Use macOS or Linux.",1838],["Refer to the GCM install instructions for more information about installing GCM.",1838],["Procedure",1838],["Follow these steps to access packages in private repositories that use HTTPS Git URLs:",1838],["Configure Git to use GCM by running the following command in a terminal:",1838],["```lang-bash",1838],["git config --global credential.helper manager",1838],["Access the repository one time by using a terminal. For example, run the following command:",1838],["```lang-bash",1838],["git ls-remote --heads https:// HEAD",1838],["When Git prompts you, enter your credentials. If your user account has access to the remote Git server and the server accepts your credentials, then the Git credential helper will securely store your credentials.",1838],["Use the Unity Package Manager. It will use your stored credentials, when necessary, to fetch packages from HTTPS-based repositories that you have permissions to access.",1838],["Solving network issues",1839],["Use these procedures to:",1839],["Configure your firewall settings so that Unity has access to the Package Manager registry server.",1839],["Configure your proxy server, either by setting environment variables for the Hub or custom certificate authority (CA) certificates.",1839],["",1839],["Configuring your firewall",1839],["Add these to your firewall's list of allowed domains:",1839],["packages.unity.com",1839],["download.packages.unity.com",1839],["upm-cdn.unity.com (or upm-cdn-china.unitychina.cn for locations in China)",1839],["This ensures that the Unity Package Manager can access these domain names using HTTPS.",1839],["Tip**: Refer to your operating system's help to learn how to add a domain name to the firewall's safe list.",1839],["",1839],["Configuring your proxy server",1839],["When using a proxy server, configure the HTTP_PROXY and HTTPS_PROXY environment variables for the Unity Package Manager to use when performing requests against the Unity package registry.",1839],["You can set these variables globally (either system or user variables) according to your operating system. Alternatively, you can set them only for the Unity Hub when it launches.",1839],["For environments where you are behind a proxy server using a certificate that Package Manager does not recognize, you can configure a custom certificate authority.",1839],["",1839],["Custom certificate authority",1839],["In some corporations and institutions, users can only access the internet through a proxy server. Some proxies unpack the HTTPS content and repack it with their own SSL certificate. In some cases, Unity Package Manager's underlying HTTPS layer rejects these certificates because it does not recognize the certificate authority that emitted them, and treats the connection as a possible man-in-the-middle attack. This means that you can't use many features in Unity, including the Package Manager, unless you configure additional SSL certificate authorities to allow these certificates.",1839],["To configure additional SSL certificate authorities:",1839],["Locate the upmconfig.toml global configuration file. If the file does not already exist, create an empty text file.",1839],["Create a text file with one or more certificates for custom certificate authorities. The file should consist of one or more trusted certificates in the Privacy-Enhanced Mail (PEM) format. For example:",1839],["```lang-pem",1839],["-----BEGIN CERTIFICATE-----",1839],["MIIC+zCCAeOgAwIBAgIJAO0U6hVJnbvjMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV",1839],["BAMMCWxvY2FsaG9zdDAeFw0xOTAzMTIwMTIxMzRaFw0yOTAzMDkwMTIxMzRaMBQx",1839],["EjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC",1839],["ggEBAKNh0EM7j57pXorGs5OHzlk9TYeUqITtXXdWfY1fbqRdj+a8qLNs4m/nDsDW",1839],["KgibHYG3FUqIidjPL61DLQuWUPY9Zo+uQaccIe0E5wb+To9mwMlLuhMD6iCPFRpe",1839],["jcDhNj4vG1RVARMO1jupeZqdb+xHBZqtmMJmtiDOBxt662Z4hvoH8mdqNEuSkozz",1839],["HqXmcdigrTO37DspGRBx08GJlHFHUs7C+hYOsOdNjME3dH/8uihjKYiqQb1E12dN",1839],["PNL7jYm3AZv+qUmDFM3BJE0hSmAP00GuTJxbe31Kh4e7N5/XSiLsnqwircOj/Hfi",1839],["eWjtsoXbCNDIiWUQtXBeLD/BdvkCAwEAAaNQME4wHQYDVR0OBBYEFDFw8VDkgMne",1839],["mDjgo+b1iaPfUkdVMB8GA1UdIwQYMBaAFDFw8VDkgMnemDjgo+b1iaPfUkdVMAwG",1839],["A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAFEjUWGz1r3xSsbwUJsRhbMc",1839],["M7Jjf9/r833H7eq31mbl/JbXPnpo8IctMuWyw42ccMtgq7i+coQeKwvWnHtI5rhe",1839],["vshEkIqNPAoCnpW5NLprYDDTG1PDEhv6FYpW8Alq65i03tptzaoHlH3sH+97E/h0",1839],["qSYI7yNHWMC5u0r1DB0BR+lZsj6RnwWPySMSuXx5sSiKIS/HkkMVwwmxKa4ZwuwS",1839],["LFwHSUdqk0lJK4b0mCwyTHNvYO1IDziE5EKwfuaKVgOa62iCHVahgIVa+een4EfS",1839],["hCCr3M3cq11Mi+mnRi1scxxrOno4OEEChWg2szZLlxBrkVJllrrq620XJ6RLB/8=",1839],["-----END CERTIFICATE-----",1839],["-----BEGIN CERTIFICATE-----",1839],["MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl",1839],["MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3",1839],["d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv",1839],["b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG",1839],["EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl",1839],["cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi",1839],["MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c",1839],["JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP",1839],["mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+",1839],["wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4",1839],["VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/",1839],["AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB",1839],["AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW",1839],["BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun",1839],["pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC",1839],["dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf",1839],["fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm",1839],["NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx",1839],["H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe",1839],["+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==",1839],["-----END CERTIFICATE-----",1839],["Save this file to the same folder as the global configuration file if possible, although Unity supports any location on the file system.",1839],["In the global configuration file, add the caFile key and set its value as an absolute file path to your PEM file. ",1839],["Windows example**",1839],["```lang-toml",1839],["caFile = \"C:\\ProgramData\\Unity\\config\\cert.pem\"",1839],["macOS and Linux example**",1839],["```lang-toml",1839],["caFile = \"/etc/cert.pem\"",1839],["",1839],["Setting environment variables for the Unity Hub",1839],["This section provides instructions for creating a command file you can run from a Windows command prompt or a macOS or Linux terminal. Alternatively, you can copy and paste the commands directly into the prompt or terminal window.",1839],["Note:** Before you run the command file, shut down the Hub completely. If the Hub is already running, the script switches focus to the Hub without relaunching, so it does not apply the changed proxy settings.",1839],["",1839],["Windows",1839],["These instructions create a command file on Windows.",1839],["The file launches the Hub with the environment variables set. You can either double-click the file, or invoke it from the command prompt. Unity passes these environment variables on to any Unity Editor process launched from the Hub.",1839],["Open a text editor such as Notepad.",1839],["Enter the following text, replacing proxy-url with the correct proxy server URL and adjusting the Hub install path if needed:",1839],["```lang-powershell",1839],["@echo off",1839],["set HTTP_PROXY=proxy-url",1839],["set HTTPS_PROXY=proxy-url",1839],["start \"\" \"C:\\Program Files\\Unity Hub\\Unity Hub.exe\"",1839],["Note:** If there are spaces in the path, you must use double quotes around the path to the program.",1839],["Save the file to a location where you can easily find it (such as the Desktop), and make sure the file has the .cmd (for example, launchUnityHub.cmd).",1839],["",1839],["macOS",1839],["These instructions create the launchUnityHub.command file on macOS.",1839],["The file launches the Hub with the environment variables set. You can either double-click the file, or invoke it from a Bash terminal. Unity passes these environment variables on to any Unity Editor process launched from the Hub.",1839],["Note:** Double-clicking the command file opens a Terminal window or tab and leaves it open, even after the script finishes. You can change this behavior in the preferences for the Terminal.app.",1839],["Open a Terminal window.",1839],["Enter the following script, replacing proxy-url with the correct proxy server URL and adjusting the Hub install path if needed:",1839],["```lang-bash",1839],["echo '#!/bin/bash",1839],["export HTTP_PROXY=proxy-url",1839],["export HTTPS_PROXY=proxy-url",1839],["nohup \"/Applications/Unity Hub.app/Contents/MacOS/Unity Hub\" &>/dev/null &' > launchUnityHub.command",1839],["chmod +x launchUnityHub.command",1839],["Note:** If there are spaces in the path, you must use double quotes around the path to the program.",1839],["Move the launchUnityHub.command file to a convenient location (for example, the Desktop), if you prefer.",1839],["Scoped registry authentication",1840],["Some organizations host their own packages on private package registries that require authentication to access. If you are an employee or customer of one of those organizations, you must configure a scoped registry with npm authentication. To set this up, get an npm authentication token and then add that token to your user configuration file.",1840],["",1840],["1) Fetch the npm authentication token",1840],["The process of creating and accessing an npm authentication token is different for each registry provider. For example, JFrog's Artifactory repository manager uses a different procedure to generate the authentication token from npm. This is an example of a typical procedure, but you need to follow the process recommended by the specific package registry provider for your scoped registry.",1840],["To fetch an authentication token from npm:",1840],["Install npm locally on your computer.",1840],["From a terminal, enter the following command to log in to the registry:",1840],["$ npm login --registry <registry url>",1840],["Locate and open the generated .npmrc file.",1840],["Locate either the _authToken or the _auth entry and copy its value (refer to the example below).",1840],["Depending on the registry, the token string can be either a globally unique identifier (GUID), a token, or a proprietary-formatted string.",1840],["Examples of .npmrc files",1840],["This is an example of an .npmrc file containing an _authToken attribute:",1840],["```lang-toml",1840],["registry=https://example.com:1234/mylocation/",1840],["//example.com:1234/mylocation/:_authToken=",1840],["This is an example of an .npmrc file containing an_auth attribute:",1840],["```lang-toml",1840],["registry=https://example.com:1234/mylocation",1840],["_auth=",1840],["email=",1840],["always-auth=true",1840],["",1840],["2) Configure authentication information",1840],["Store your token information for each scoped registry that requires authentication in the .upmconfig.toml user configuration file using the npmAuth configuration schema. Once you save this information to the configuration file, Package Manager will provide your authentication information on every request made to each registry in the file.",1840],["After you save this information to the configuration file, Package Manager will provide your authentication information on every request made to each registry in the file.",1840],["Follow these instructions to add your authentication information to the user configuration file:",1840],["Locate the .upmconfig.toml user configuration file. If the file does not already exist, create an empty text file.",1840],["Format your authentication information using a schema, depending on whether you are using a Bearer (token-based) or Basic (Base64-encrypted) authentication mechanism.",1840],["```lang-toml",1840],["[npmAuth.\"\"]",1840],[" = \"\"",1840],["email = \"\"",1840],["alwaysAuth = ",1840],["The information in the following table explains how to specify the configuration file values:",1840],["Entry: Description: ",1840],["------------------------------------ ------------------------------------------------------------ ",1840],["[npmAuth.\"<REGISTRY-URL>\"] Required. URL for the registry. For example, [npmAuth.\"https://example.com:8081/mylocation\"]. ",1840],["<TOKEN-PROPERTY> = \"<TOKEN-VALUE>\" Required. The authentication token generated from the npm registry. This can be a GUID, a token, or a proprietary-formatted string. For example, this can be either token = \"<AUTH TOKEN>\" (Bearer) or _auth = \"<BASE64 TOKEN>\" (Basic). ",1840],["email Optional. Email address for the user matching the user's email on the registry. ",1840],["alwaysAuth Optional. Set to true if the package metadata and tarballs are not located on the same server. Typically, you can copy the value from the .npmrc file you generated. ",1840],["",1840],["Example using bearer authentication",1840],["```lang-toml",1840],["[npmAuth.\"http://localhost:8081/myrepository/mylocation\"]",1840],["token = \"NpmToken.2348c7ea-6f86-3dbe-86b6-f257e86569a8\"",1840],["alwaysAuth = true",1840],["[npmAuth.\"http://localhost:4873\"]",1840],["token = \"eaJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWFsX2dyb3VwcyI6WyJwYXNjYWxsIl0sIm5hbWUiOiJwYXNjYWxsIiwiZ3JvdXBzIjpbIn\"",1840],["[npmAuth.\"https://api.bintray.example/npm/mycompany/myregistry\"]",1840],["token = \"aGFzY2FsbDo4ZWIwNTM5NzBjNTI3OTIwYjQ4MDVkYzY2YWEzNmQxOTkyNDYzZjky\"",1840],["email = \"username@example.com\"",1840],["alwaysAuth = true",1840],["",1840],["Configure basic authentication information",1840],["These steps use Azure DevOps as an example, but the process is similar for any platform that uses a personal access token (PAT).",1840],["Before you begin, install Node.js if it's not already installed.",1840],["Get your Azure DevOps personal access token (PAT), and have it ready for a later step. If you need to regenerate your PAT, log in to Azure DevOps (https://dev.azure.com) and go to User settings > Personal access tokens. For information about using PATs, refer to the Microsoft article, Use personal access tokens.",1840],["From a command line, run the following command:",1840],["```lang-shell",1840],["node -e \"require('readline').createInterface({input:process.stdin,output:process.stdout,historySize:0}).question('Enter PAT> ',p => {b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit();})\"",1840],["At the Enter PAT prompt, type email:PAT, replacing:",1840],["email with the email associated with your Azure DevOps account and the email specified in the .upmconfig.toml file",1840],["PAT with your PAT from the earlier step",1840],["The command returns a Base64-encrypted string. Copy that string and assign it as the value for the _auth key in the .upmconfig.toml file.",1840],["",1840],["Example using basic authentication",1840],["```lang-toml",1840],["[npmAuth.\"http://localhost:8081/myrepository/mylocation\"]",1840],["_auth = \"c19kaW5pcm9AaG90bWFpbC4jb206d3FzdzVhemU9Q==\"",1840],["email = \"username@example.com\"",1840],["alwaysAuth = true",1840],["Loading SSH keys automatically on macOS",1841],["If you use macOS, follow these steps to configure the OpenSSH client so you can use your passphrase-protected SSH key without prompts.",1841],["Prerequisites",1841],["macOS 10.13 or later.",1841],["Before you begin",1841],["If you don't have an SSH key:",1841],["",1841],["",1841],["Procedure",1841],["Check your home folder for an .ssh subdirectory and check if it contains a config file. Note: .ssh is a hidden subdirectory.",1841],["Create the ~/.ssh/config file if it doesn't exist.",1841],["Add the following content to ~/.ssh/config to set the key to load in the authentication agent and specify its use by the target server. Make sure you add this entry before any global settings marked as Host *.",1841],["```lang-toml",1841],["Host SERVER_NAME",1841],["UseKeychain yes",1841],["IdentitiesOnly yes",1841],["IdentityFile FILE_PATH",1841],["SERVER_NAME is the server that uses the file specified by IdentityFile. A sample value is github.com.",1841],["FILE_PATH is the path to the SSH file you created. A sample value is ~/.ssh/<FILE>, where <FILE> might be id_rsa, id_ecdsa, id_ed25519, or a custom name.",1841],["Example:",1841],["```lang-toml",1841],["Host github.com",1841],["UseKeychain yes",1841],["IdentitiesOnly yes",1841],["IdentityFile ~/.ssh/id_ed25519",1841],["Open the Terminal application.",1841],["Load your key file into the ssh-agent, replacing <FILE> with the actual file name of your key, then type your passphrase, if prompted.",1841],["```lang-bash",1841],["ssh-add ~/.ssh/",1841],["Example:",1841],["```lang-bash",1841],["ssh-add ~/.ssh/id_ed25519",1841],["Configuration is complete. macOS starts ssh-agent by default, so you can now use the Unity Package Manager to fetch packages from that Git repository over SSH using your passphrase-protected SSH key.",1841],["Additional resources",1841],["Loading SSH keys automatically on Windows (PuTTY)",1842],["Follow these steps if you use PuTTY and its authentication agent (Pageant) instead of Windows' built-in OpenSSH client. For example, if you use SourceTree as your Git client, it comes with PuTTY (and Pageant) to use instead of OpenSSH.",1842],["Before you begin",1842],["Make sure you've installed the PuTTY suite, which includes Pageant. If it's not installed, its download link is available at https://www.putty.org/.",1842],["If you don't have an SSH key:",1842],["Use the PuTTYgen application to generate a private/public key pair, saving it as private key. Refer to Using PuTTYgen, the PuTTY key generator in the PuTTY User Manual.",1842],["",1842],["Procedure",1842],["Follow these steps to load keys and passphrases automatically on Windows:",1842],["Start Pageant from the PuTTY folder: Start-Menu > All Programs > PuTTY > Pageant",1842],["Find the Pageant icon in the system tray. ",1842],["Right-click the Pageant icon in the system tray and select View Keys. The Pageant Key List window opens.",1842],["Click Add Key.",1842],["Use the File Explorer window to select your SSH key file to load. Make sure you select a file with a .ppk extension, then click Open.",1842],["If the key is passphrase-protected, enter your passphrase.",1842],["Make sure the key you selected is now listed in the Pageant Key List window. This key is now available to connect to any server during your PuTTY sessions.",1842],["You might have configured Git already to use PuTTY's plink.exe program. To check if Git uses Pageant when using SSH keys:",1842],["Check if you have a GIT_SSH_COMMAND environment variable. If not, create it.",1842],["Set its value to the fully qualified path of PuTTY's plink.exe file. By default, this location is \"C:\\Program Files\\PuTTY\\plink.exe\". Important: If the path includes spaces, make sure you enclose the value in quotation marks.",1842],["To load private keys automatically on Startup:",1842],["Open the Start Menu and right-click Pageant.",1842],["Select More > Open file location. A File Explorer window opens.",1842],["Right-click Pageant and select Properties. The Pageant Properties window opens.",1842],["Update the Target field by appending the full paths of the private keys you want to load on startup. Separate each key with a space. Example:",1842],["```lang-toml",1842],["\"C:\\Program Files\\PuTTY\\pageant.exe\" \"C:\\Users\\user1\\myKeys\\privatekey.ppk\"",1842],["Select Apply then select OK.",1842],["Test your configuration by opening a command line and running a git command in your repository, to make sure you can complete the operation without prompts for your passphrase.",1842],["When Pageant is running and you enter your passphrase, you can use the Unity Package Manager to fetch packages from that Git repository over SSH using your passphrase-protected SSH key.",1842],["The next time Pageant starts, it prompts you for the passphrase, if it's passphrase-protected.",1842],["To load Pageant automatically when Windows starts, refer to the Microsoft Support article, Add an app to run automatically at startup in Windows 10.",1842],["Additional resources",1842],["PuTTY User Manual",1842],["Loading SSH keys automatically on Windows (OpenSSH)",1843],["If you use Windows and its built-in OpenSSH client, follow these steps to configure the OpenSSH client so you can use your passphrase-protected SSH key without prompts.",1843],["Prerequisites",1843],["Windows 10 or later.",1843],["Before you begin",1843],["If you don't have an SSH key:",1843],["",1843],["",1843],["Procedure",1843],["Check if C:\\Users\\<YourUserName>\\.ssh\\config exists. Note: In some applications, such as Git Bash, .ssh is a hidden subdirectory.",1843],["Create C:\\Users\\<YourUserName>\\.ssh\\config if it doesn't exist.",1843],["Add the following content to C:\\Users\\<YourUserName>\\.ssh\\config to set the key to load in the authentication agent and specify its use by the target server. Make sure you add this entry before any global settings marked as Host *.",1843],["```lang-toml",1843],["Host SERVER_NAME",1843],["IdentitiesOnly yes",1843],["IdentityFile FILE_PATH",1843],["SERVER_NAME is the server that uses the file specified by IdentityFile. A sample value is github.com.",1843],["FILE_PATH is the fully qualified path to the SSH file you created. A sample value is C:\\Users\\<YourUserName>\\.ssh\\<FILE>, where <FILE> might be id_rsa, id_ecdsa, id_ed25519, or a custom name.",1843],["Example:",1843],["```lang-toml",1843],["Host github.com",1843],["IdentitiesOnly yes",1843],["IdentityFile C:/Users/user1/.ssh/id_ed25519",1843],["Open the Windows PowerShell, making sure you open it by selecting Run as Administrator.",1843],["Configure the SSH Authentication Agent service so it starts each time you reboot your computer, by running the following command:",1843],["```lang-powershell",1843],["Get-Service ssh-agent Set-Service -StartupType Automatic",1843],["Start the service, by running the following command:",1843],["```lang-powershell",1843],["Start-Service ssh-agent",1843],["Check that the service is running, by running the following command and confirming that the Status value is Running:",1843],["```lang-powershell",1843],["Get-Service ssh-agent",1843],["Load your key file into the ssh-agent, replacing <FILE> with the actual file name of your key, then type your passphrase, if prompted.",1843],["```lang-powershell",1843],["ssh-add $env:USERPROFILE.ssh\\",1843],["Example:",1843],["```lang-powershell",1843],["ssh-add $env:USERPROFILE.ssh\\id_ed25519",1843],["Make sure Git uses the Windows OpenSSH client instead of the SSH client included with Git, by using either of the following methods:",1843],["For system-wide configuration, create an environment variable named GIT_SSH_COMMAND with a value of C:/Windows/System32/OpenSSH/ssh.exe. Important: Make sure you use forward slashes in the path.",1843],["To set the configuration for a specific scope, run the following git config command in a terminal. Refer to the git config documentation for details. For example:",1843],["```lang-powershell",1843],["git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe",1843],["Important**: Make sure you use forward slashes in the path.",1843],["You can now use the Unity Package Manager to fetch packages from that Git repository over SSH using your passphrase-protected SSH key.",1843],["Additional resources",1843],["Using passphrase-protected SSH keys with SSH Git URLs",1844],["When you use Git to access a private repository over SSH, Git uses an SSH client to establish a secure connection with the server. While establishing the connection, Git uses your configured SSH key during the SSH handshaking phase. During this phase, the SSH client needs to be able to read your key. However, if you encrypted your key with a passphrase, the SSH client can't use the key directly. In this case, you're prompted to type in the passphrase in the terminal. After you enter the correct passphrase, the SSH connection completes and the Git command runs using that connection.",1844],["When the Unity Package Manager fetches packages using Git URLs, there's no interface for you to enter credentials requested by the SSH client. As a result, if you protected your SSH key file with a passphrase, the SSH client fails to establish the connection and Git reports an error. To solve this, an authentication agent for SSH must be running and loaded with the SSH key, so that the SSH client can use it without requiring its passphrase.",1844],["The method varies, depending on your operating system and the SSH client that you use:",1844],["If you use Windows 10 or later and its built-in OpenSSH client, refer to Loading SSH keys automatically on Windows (OpenSSH).",1844],["If you use Windows and PuTTY and its authentication agent (Pageant), refer to Loading SSH keys automatically on Windows (PuTTY).",1844],["If you use macOS, refer to Loading SSH keys automatically on macOS.",1844],["Additional resources",1844],["Configuration",1845],["This section shows you how to configure the following for the Package Manager:",1845],["Network configuration: get around a firewall and set up a proxy server.",1845],["Scoped registry authentication: create and provide Package Manager with an authentication token for any scoped package registry servers that require it.",1845],["Customize the global cache location: override the location of the global cache folders.",1845],["Customize the Asset Store cache location: override the location of the Asset Store package cache folder.",1845],["In addition, you can find the location of the Package Manager configuration files under Configuration files.",1845],["",1845],["Configuration files",1845],["Package Manager supports two configuration files: a global configuration file and a user configuration file. Both of these files use the TOML format and they appear in different locations:",1845],["Global** configuration files apply to all users on the machine. For example, you can define additional SSL certificate authorities when setting up a proxy server for the entire machine.",1845],["User** configuration files apply to a single user. For example, you can set up authentication tokens to use for custom package registry servers that you access with scoped registries. These tokens authenticate a specific user account.",1845],["",1845],["Global configuration file location",1845],["Package Manager uses a global configuration file named upmconfig.toml. This file isn't created when you install the Unity Hub or Editor, but you can create it in the following location if you need to customize your configuration:",1845],["Environment: Location: ",1845],["---------------- ----------------------------------------------- ",1845],["Windows %ALLUSERSPROFILE%\\Unity\\config\\upmconfig.toml (for example, C:\\ProgramData\\Unity\\config\\upmconfig.toml) ",1845],["macOS and Linux /etc/upmconfig.toml ",1845],["You can define a custom location that overrides the default location for your configuration file. To do this, create a UPM_GLOBAL_CONFIG_FILE environment variable and set its value to the absolute path of your configuration file, including the file name.",1845],["",1845],["User configuration file location",1845],["Package Manager uses a user configuration file named .upmconfig.toml. This file isn't created when you install the Unity Hub or Editor, but you can create it in the following location if you need to customize your configuration:",1845],["Environment: Location: ",1845],["------------------------------------------------------------ ------------------------------------------------------------ ",1845],["Windows (user account) %USERPROFILE%\\.upmconfig.toml (for example, C:\\Users\\myusername\\.upmconfig.toml) ",1845],["Windows (system user account) %ALLUSERSPROFILE%\\Unity\\config\\ServiceAccounts\\.upmconfig.toml (for example, C:\\Users\\Public\\Unity\\config\\ServiceAccounts\\.upmconfig.toml) ",1845],["macOS and Linux ~/.upmconfig.toml (for example, /Users/myusername/.upmconfig.toml) ",1845],["You can define a custom location that overrides the default location for your configuration file. To do this, create a UPM_USER_CONFIG_FILE environment variable and set its value to the absolute path of your configuration file, including the file name.",1845],["Lock files",1846],["A lock file contains the results of the Package Manager's dependency resolution for a project. Package managers use lock files to provide a deterministic result when resolving a package dependency graph. When the Unity Package Manager computes a successful resolution, it stores that resolution inside the project's Packages folder in a JSON file called packages-lock.json. Any modification to the project manifest or to a mutable package's manifest (either embedded or installed from local folder) can potentially compel the Package Manager to recalculate the resolved package versions. But as long as the version of a package in the lock file satisfies the range implied by the dependency version and the resolution strategy, the package remains locked at that version.",1846],["For example, here is a typical entry in the lock file:",1846],["```lang-json",1846],["\"com.unity.textmeshpro\": {",1846],["\"version\": \"2.0.1\",",1846],["\"depth\": 0,",1846],["\"source\": \"registry\",",1846],["\"dependencies\": {",1846],["\"com.unity.ugui\": \"1.0.0\"",1846],["},",1846],["\"url\": \"https://packages.unity.com\"",1846],["},",1846],["etc.",1846],["When the Package Manager resolves any conflicting indirect dependencies, it tries to re-use as many locked packages as possible. This guarantees that subsequent dependency resolution produces the same results for the same set of dependencies. It also minimizes time-consuming operations such as downloading, extracting, or copying packages.",1846],["If there is no solution that only includes locked packages, then the Package Manager chooses the set of packages with the least risky upgrades, preferring patch upgrades over minor or major upgrades, and minor upgrades over major upgrades. In fact, you can customize the level of risk for upgrading. For more information, see Customizing resolution strategies.",1846],["To force a refresh of indirect dependency versions, delete the lock file.",1846],["Don't manually modify the lock file: the Package Manager creates and maintains the lock file, so it overwrites any changes you make to the file.",1846],["Put the lock file under source control so you can consistently reproduce the same package set to ensure your project remains consistent over time and on different machines.",1846],["Disabling the lock file",1846],["By default, the Package Manager creates or updates the lock file when it successfully computes a dependency graph. If you see unexpected results, you can set the enableLockFile property to false in your project manifest to disable locking. However, if you disable the lock file, the Package Manager clones Git URL packages again, which leads to reduced performance and additional network usage. It might also lead to non-deterministic results if you push newer commits to the remote Git repository between two resolutions.",1846],["",1846],["",1846],["SAT solver feature added in Unity 2019.4 NewIn20194",1846],["Resolution and conflict",1847],["When you add a package to a project manifest, Unity considers that package a dependency of the project (a direct dependency). However, a package can also have dependencies on other packages, which create indirect dependencies in any projects that require that package.",1847],["Since most projects require more than one package in order to develop games and apps, the Package Manager has to evaluate all the requested package versions to retrieve from the registry (whether direct or indirect), and decide which among those package versions to install. To do this, it computes the set of packages that satisfies all direct and indirect dependencies in the project, starting with the project dependencies and recursively exploring each indirect dependency, collecting all the dependency information, then picking a set of packages that satisfies the dependency requirements without any conflict. For example, this dependency graph represents a project with four direct dependencies and all of their indirect dependencies:",1847],["In this example:",1847],["The light blue nodes represent the project's direct dependencies.",1847],["The dark blue nodes show the same package and version as indirect dependencies in this project.",1847],["The red nodes show two different versions of the same package, which is a conflict.",1847],["Note**: Only package dependencies declared with versions need to be resolved. The Package Manager selects packages installed from other sources, such as embedded packages, and dependencies declared with local paths, Git URLs, and built-in packages over version-based dependencies.",1847],["Choosing the best solution",1847],["Depending on the set of packages defined in the project manifest, it could take a long time to evaluate all possible package combinations: a project could potentially depend on hundreds of packages, each of which depend on hundreds of other packages, most requiring different versions.",1847],["Lock files and resolutionStrategy",1847],["To provide the most efficient solution, the Package Manager prioritizes package versions that it previously used by tracking them in a lock file. This guarantees that subsequent dependency resolution using the same inputs results in the same outputs. It also minimizes time-consuming operations such as downloading, extracting, or copying packages.",1847],["Sometimes, the Package Manager cannot find a solution that only includes locked packages. In this case, the Package Manager uses the solution with the least risky upgrades, preferring patch upgrades over minor or major upgrades, and minor upgrades over major upgrades by default. However, you can customize how aggressive you want the Package Manager to be when considering a higher version with the resolutionStrategy property.",1847],["Example",1847],["In this example, there are multiple versions of the following packages requested:",1847],["burst@1.2.2 (twice) and burst@1.3.0-preview.3",1847],["collections@0.5.1-preview.11 and collections@0.5.2-preview.8",1847],["jobs@0.2.4-preview.11 (twice) and jobs@0.2.5-preview.20",1847],["Using the set of direct and indirect dependencies, the Package Manager selects the highest version of the burst package (burst@1.3.0-preview.3), which satisfies the collections@0.5.2-preview.8 package's dependency:",1847],["",1847],["",1847],["New package dependency solver (SAT) added in Unity 2019.4 NewIn20194",1847],["",1847],["Delete a package from the Asset Store cache",1848],["When you download a .unitypackage file, the Unity Package Manager stores it in the Asset Store cache. Each time you import a downloaded package or a custom package, the Unity Package Manager stores it in the Assets directory in your project.",1848],["You might want to delete a package from the Asset Store cache to free up space on your local hard drive. If drive space is your main reason for deleting packages from the Asset Store cache, consider changing the location of the Asset Store cache.",1848],["Important**: Deleting a package from the Asset Store cache doesn’t remove the same package from any projects where you use that package. If you also want to remove the same package from a project, see Remove imported assets from a project.",1848],["To delete a package from the Asset Store cache:",1848],["Open the Package Manager window.",1848],["Open the Packages menu and select the My Assets context.",1848],["Select the package you want to delete.",1848],["Take note of two important values, which you need for a later step:",1848],["The publisher’s name, located below the display name in the details section of the Package Manager window.",1848],["The Display name value, located in the Inspector window.",1848],["Go to the root of the Asset Store cache directory:",1848],["For Unity Editor 2022.1 or later:",1848],["a) Open the Unity Editor’s Preferences window.",1848],["b) Select the Package Manager category.",1848],["c) Click the folder icon beside My Assets > Cache Location.",1848],["d) Select Show in Explorer (Windows) or Reveal in Finder (macOS).",1848],["For Unity Editor 2021.3 or earlier:",1848],["a) Refer to Location of downloaded asset files to determine the cache location for your operating system.",1848],["b) Use your operating system’s file manager application to go to that directory.",1848],["Select the subdirectory that corresponds to the publisher’s name, which you recorded in an earlier step.",1848],["The publisher’s directory has one or more subdirectories. The publisher determines the names of these subdirectories:",1848],["If there is one subdirectory, go into it.",1848],["If there is more than one subdirectory, explore the subdirectories until you find the one that contains the package you want to delete.",1848],["Select the <name>.unitypackage file, where <name> corresponds to the Inspector window’s Display name value that you identified in an earlier step.",1848],["Delete the file.",1848],["This package is now removed from the Asset Store cache, but any imported assets remain in any projects where they’re in use.",1848],["Adding the deleted package back to your Asset Store cache",1848],["If the package that you deleted was an Asset Store package, and you want to add this package back to your Asset Store cache, see Importing an Asset Store package.",1848],["Additional resources",1848],["Dependency and resolution",1849],["When you work in the Package Manager window, you can install packages from several sources (a registry, a local folder or tarball, and a Git URL). However, while the Package Manager installs packages from these sources seamlessly, it first has to make a series of calculations to decide which version to install, and which other packages and versions to install to support it.",1849],["Direct dependencies**",1849],["When you select a package version to install through the Package Manager window, you are adding a \"dependency\" to your project manifest. This is a declaration that you need a specific version of a particular package in order for the project to work. To add a dependency to your project, you add a reference to the package and version in the form package-name@package-version to the dependencies property of the <project-root>/Packages/manifest.json file. These are called \"direct\" dependencies because your project directly depends on them.",1849],["Indirect dependencies**",1849],["Packages can also require other packages in order to work. These are called \"indirect\" (or transitive) dependencies. The package developer adds these to the dependencies property of the package manifest file during development (<package-root>/package.json). For example, in the diagram below, the alembic@1.0.7 package has a dependency on the timeline@1.0.0 package, so the timeline package is an \"indirect\" dependency. On the other hand, the project has dependencies on the cinemachine@2.6.0 and alembic@1.0.7 packages, so those are both \"direct\" dependencies.",1849],["",1849],["Version overrides**",1849],["When you add a package version as a dependency, that version is not necessarily the version that the Package Manager installs, because it has to consider all of the dependencies in your project, whether direct or indirect. For example, in this case, the XR Plugin Management package requested was version 4.0.3, but the installed version is actually version 4.0.6 because another package depended on the higher version, as indicated in the information message (B):",1849],["Dependency graph**",1849],["The Package Manager can only install one package version at a time, so it has to construct a dependency graph, which is a list of every direct and indirect dependency for the project. The dependency graph determines which version of each package to install.",1849],["Lock file**",1849],["When the Package Manager successfully resolves all version conflicts, it saves the resolution in a lock file to ensure determinism (so that the same packages are reliably installed every time), and to reduce the amount of time and resources it takes to compute the dependency graph again.",1849],["",1849],["Finding package documentation",1850],["The Unity Manual provides documentation for a specific version of Unity. For package documentation, each package has its own version, so each package provides documentation for a specific version of that package. For this reason, the package documentation isn't part of the main Unity Manual documentation; instead, documentation for each package lives on its own micro-site on Unity's documentation server.",1850],["To access the documentation for a specific package, you have two options:",1850],["Get documentation for the latest version (from the Unity Manual).",1850],["Get documentation for a specific package version (from the Package Manager window).",1850],["When the package page opens, you can see four links at the top of the page (A), and a drop-down menu (B) where you can select a different version:",1850],["Use the links at the top of the page to view the documentation for the package's core usage (Manual), the package's Scripting API documentation, the Changelog for the package, and the License information for the package.",1850],["",1850],["Getting documentation for the latest version",1850],["Each version of the Unity Manual documentation provides a list of verified and preview packages, a list of built-in packages, and a list of keywords with links to the matching package documentation which you can use with that version of Unity:",1850],["Note**: Only packages that are compatible with the version of Unity matching the documentation appear in these lists.",1850],["You can expand the entries in the sidebar navigation (A) to access specific information about each package, including the list of compatible versions, a brief description of the package, and any associated keywords. Or you can click the link on the list pages (B) to directly open the most compatible version of that package documentation that matches the documentation version.",1850],["If you can't find the package you want in this list, there might be several reasons:",1850],["It isn't compatible with this version of Unity.",1850],["It is an experimental or private package. Some packages are not available to everyone because someone outside of Unity is developing them or because they are under a special license.",1850],["You might be able to access the documentation through the Package Manager window for packages released in another version of Unity. In the case of private packages, try to contact the developer directly to request access.",1850],["",1850],["Getting documentation for a specific package version",1850],["You can find out more about a package by viewing its documentation, changelog, or license information.",1850],["To access any of these pages, you can click the View documentation, View changelog, or View licenses links from inside the Package Manager window.",1850],["To access the documentation for a specific package version:",1850],["Open the Package Manager window in Unity.",1850],["Follow the guidelines in Finding packages to locate the specific package and version number you want.",1850],["Click the View documentation link to open the documentation for the selected version of the package.",1850],["Note**: If you are offline when you click the View documentation link and the package is already installed, the Package Manager opens the <package-root-folder>/Documentation~ folder in your file browser. If the Package Manager is not installed, a message appears to let you know that the package is not available offline.",1850],["You can follow this procedure for any version of any package. Note that the documentation is not necessarily different for each package version release, since some version updates (patches) involve only bug fixes or trivial changes.",1850],["Embedded dependencies",1851],["Any package that appears under your project's Packages folder is embedded in that project. You can create an embedded package in several ways:",1851],["Create a new package directly in your project's Packages folder.",1851],["Manually copy a Unity package from the project's package cache into your project's Packages folder.",1851],["Use a C# script to embed a version of a package that's already installed.",1851],["Embedded packages don't need to appear in the project manifest as a dependency. However, if you embedded a version of an installed package, your project manifest still lists the dependency on the original installed version. In that case, the package on disk takes priority over the version of the package listed as a dependency, so it doesn't need to be removed from the project manifest. For example, if the project manifest specifies a dependency on version 1.3.1 of the com.unity.example package but the project also has an embedded package with that name, the Package Manager uses the embedded package, regardless of its apparent version, instead of downloading version 1.3.1 from the registry.",1851],["Make sure you track the contents of your embedded packages, and any changes you make to it. If your Unity project is under source control, add any packages embedded in that project to the same source control.",1851],["",1851],["Creating a new custom package",1851],["To embed a new package, create your new package content inside a folder under the Packages folder. For more information, follow the instructions for creating your own custom package.",1851],["Typically, your new package remains embedded in your project until you are ready to share it with other users and test it in other projects. Then you can publish it to a scoped package registry.",1851],["",1851],["Copying a Unity package from the cache",1851],["A package installed from a registry is immutable, which means you can't edit it. If you want to edit a package, you can make it mutable by copying it to your Projects folder. This package type is called an embedded package, and it overrides what's in your package cache. Later, you can delete that embedded package's folder from the Project folder, and the Package Manager will automatically change to the immutable, cached package.",1851],["The most reliable way to find your package's folder in the cache is to locate the installed version directly in the Unity Editor:",1851],["Open the Project window by opening the Window menu and selecting General > Project.",1851],["From the Project window, find the installed package you want to embed.",1851],["Right-click the folder of the selected package and select Show in Explorer (Windows) or Reveal in Finder (macOS). That package's folder opens directly in a file browser and uses the <package-name>@<package-version> naming convention.",1851],["Note**: If the package you want to embed isn't in your project, you can get it directly from your project's package cache (<project>/Library/PackageCache) by using your file browser or command line and navigating to the correct folder. However, it's more reliable to let the Editor find it for you, because in addition to locating packages in the project cache, it also locates packages that are installed from a local folder or tarball, and packages that are already embedded.",1851],["Copy the package folder and paste it directly into your project's Packages folder. Don't put it inside the Assets folder, because the Package Manager doesn't scan that folder for packages.",1851],["Remove the @<package-version> part of the folder name.",1851],["Add the newly embedded package to source control if your project is already under source control.",1851],["Note**: You can also find package folders under the global cache, but the global cache contains packages from all versions of the Unity Editor that have ever been installed on your system, so be careful to pick a version that's compatible with your project's Editor version.",1851],["If you want to delete the embedded package, use your file browser or command line to locate that package in your Packages folder. Consider backing up the folder for the embedded package, otherwise you'll lose any changes you made to the package. Then, delete the folder for that package from your Packages folder. The Package Manager will automatically revert to the immutable, cached package.",1851],["Additional resources",1851],["Troubleshooting",1852],["This section provides information on the following issues:",1852],["Type of error: Error message: ",1852],["------------------------------------ ------------------------------------------------------------ ",1852],["General startup issues - Error messages in the Package Manager window- Package Manager missing or window doesn't open- Problems after upgrading Unity to new version- Resetting your project's package configuration ",1852],["Package installation issues - Package installation fails- Unable to add package from Git URL- Insufficient drive space ",1852],["Package signature issues - Package version has no signature- Package version doesn't have a valid signature ",1852],["Problems installing git dependencies - No 'git' executable was found- git-lfs: command not found- Repository not found- Could not read Username: terminal prompts disabled- Can't update Git version ",1852],["Asset Store packages (My Assets) - 'Failed to parse Http response' in My Assets context ",1852],["Scoped registries - Missing 'My Registries' in the Package Manager window ",1852],["Issues when building packages - Missing MonoBehaviour errors- Loading error for hostfxr.dll on Windows ",1852],["You can also run the Unity Package Manager Diagnostics tool if you are experiencing problems that might be network-related. For more information, see Diagnose network issues.",1852],["",1852],["",1852],["Error messages in the Package Manager window",1852],["The Package Manager displays error indicators in the Package Manager window when it encounters problems.",1852],["System-wide issues",1852],["Network connection issues**",1852],["Error messages appear in the status bar when the Package Manager has detected an issue that isn't related to a specific package. For example, if the Package Manager can't access the package registry server, it displays this message in the status bar:",1852],["Error refreshing assets (or Error refreshing packages)**",1852],["If your network can't reach the package registry server, it's probably because there is a connection problem with the network. When you or your system administrator diagnose and fix the network error, the status bar clears.",1852],["If your network connection is working, but you aren't signed into your Unity account, the Package Manager doesn’t display any Asset Store packages. When you try to use the My Assets context, the Package Manager displays an error in the status bar:",1852],["Click the Sign in button inside the list view to sign into your Unity account through the Unity Hub.",1852],["Package-specific issues",1852],["If a specific package has a problem when loading or installing (for example, when determining which package versions to load), the error icon () appears in the package list next to the compromised package (A). To find out what the problem is, check the compromised package's details view to see the detailed error message (B):",1852],["",1852],["",1852],["Package Manager missing or window doesn't open",1852],["The Package Manager window might get moved offscreen or hidden by another window. When this happens, it looks like the Package Manager window failed to open. In this case, you can try to reset the window layout (Window > Layouts > Default) and reopen the Package Manager window again.",1852],["If the Package Manager window still doesn't appear, check your Unity Console window:",1852],["Failed to resolve packages: The file [/Packages/manifest.json] is not valid JSON:",1852],["Unexpected token '}' at 44:1",1852],["This error message indicates that your manifest.json file is malformed. It also tells you the line number where the Package Manager failed to parse the file, so you can fix the JSON. There are a number of online validators that you can use to try to correct the problem. Once you save the corrected file, Unity reloads the Package Manager window.",1852],["If you upgraded from an early version of the Unity Editor, there may be other problems with your package manifest file:",1852],["As of 2019.3, your manifest.json file should not contain any references to the com.unity.package-manager-ui package. You can either reset your project's package configuration or remove the following line from the manifest's dependencies list:",1852],["```lang-json",1852],["\"com.unity.package-manager-ui\": \"2.1.1\",",1852],["Check to see if your project manifest uses \"exclude\" as a package version. This is an obsolete value for the dependencies property. If you find any lines like these, remove the entire line. Package Manager only installs packages that are explicitly included as a dependency in your project, so once you remove that entry, Package Manager ignores the package and doesn't install it.",1852],["If the Package Manager still fails to load, follow the procedure under Resetting your project's package configuration.",1852],["",1852],["",1852],["Problems after upgrading Unity to new version",1852],["When you upgrade a project to a newer Unity version, the Package Manager automatically updates incompatible packages to newer compatible versions. However, if your package doesn't compile, the Package Manager displays error messages in the Console.",1852],["To correct these messages, read the error messages and fix any problems you can. For example, a package might be missing a dependency on another package or version. In that case, you can try and install the package yourself.",1852],["You can also try the following sequence of solutions until you find something that works:",1852],["Back up and then delete the Packages folder under your project.",1852],["Back up and then delete the package sources in your project's Packages folder, leaving only the manifest.json file. Then try to reload the project.",1852],["Create a new empty project. If the Package Manager window loads successfully, replace the Library/PackageCache/com.unity.package-manager-ui@<version> folder in the failing project with the same folder from the newly created project.",1852],["As a last resort, you can reset your project to the default package configuration and add back packages one at a time until it works.",1852],["",1852],["",1852],["Resetting your project's package configuration",1852],["If a project has too many package issues, you can reset your project back to the default package configuration for the Editor's version of Unity. This operation resets all packages in your project. This might not fix the source of the problem, but it can help you figure out what the problem is.",1852],["Note:** You can't undo resetting your package configuration, so make sure you back up the manifest.json file first or make sure your project is under source control. You can also take extra precautions by cloning your project and testing out the operation on the clone before proceeding.",1852],["To return to the default package configuration, select Reset Packages to defaults from the Help menu.",1852],["",1852],["Resetting a clone of your project",1852],["You can also test the return to the default packages before you perform the final change:",1852],["Clone your project by copy-pasting your project folder and renaming it so that it is easy to find (for example, if your project is called MyProject then you could use something like clone_MyProject).",1852],["Load your newly cloned project.",1852],["From the Help menu, select Reset Packages to defaults.",1852],["Depending on the size of your project, this might take a few minutes.",1852],["Check that it successfully reset the packages. If so, you can perform the operation safely on the original project.",1852],["",1852],["",1852],["Package installation fails",1852],["If you are trying to install a new package from the registry and it is not working, it might be due to permission problems.",1852],["You must have full permissions on the cache folder:",1852],["Windows: C:\\Users\\yourname\\AppData\\Local\\Unity\\cache",1852],["macOS: ~/Library/Unity/cache",1852],["Linux: ~/.config/unity3d/cache",1852],["It might be a problem with the network. Check your firewall and proxy settings.",1852],["Sometimes institutional environments, such as schools, government offices, or network-protected workplaces set up proxy servers to control traffic between the network and the Internet, and use their own server certificates which are not recognized by Unity or the Package Manager. Talk to your network administrator.",1852],["",1852],["",1852],["Unable to add package from Git URL",1852],["See Repository not found.",1852],["",1852],["",1852],["Insufficient drive space",1852],["If your installation drive is out of space or low on space, consider changing the location of the package caches:",1852],["To change the global cache, see Customize the global cache location.",1852],["To change the Asset Store cache, see Customize the Asset Store cache location.",1852],["",1852],["",1852],["Package version has no signature",1852],["This message can appear when you fetch a Unity package from a scoped registry. Unity signs packages that it creates, except for older packages, which aren’t necessarily re-signed in later releases. If you copy an unsigned Unity package from a scoped registry to another registry, Package Manager can't determine if the package content is safe and identical to the original package.",1852],["If you encounter this message, try these solutions:",1852],["Use another version of the package.",1852],["Fetch the Unity package from the Unity Registry.",1852],["If you own the scoped registry, make sure you copy the newest version of the package from the Unity Registry.",1852],["",1852],["",1852],["Package version doesn't have a valid signature",1852],["Packages have a signature to ensure that the content wasn't changed before or during transit. An invalid signature typically occurs in the following situations:",1852],["Someone published the package with modifications on their own registry.",1852],["An error occurred while transferring the file to the end user.",1852],["In both cases, Package Manager considers the package to be potentially malicious.",1852],["When you encounter an invalid signature, you can try to install a different version of the package. You should also avoid using Unity packages from a registry other than the Unity Registry.",1852],["If you are sharing a Unity package that contains a fix, consider using a Git URL or embedding the package in your project.",1852],["",1852],["",1852],["No 'git' executable was found",1852],["If you try to install a package from a git URL, a message similar to this appears:",1852],["```lang-shell",1852],["Cannot perform upm operation: Unable to add package",1852],["[https://github.example.com/myuser/myrepository.git]:",1852],["No 'git' executable was found. Please install Git on your system and restart Unity [NotFound]",1852],["UnityEditor.EditorApplication:Internal_CallUpdateFunctions()",1852],["",1852],["",1852],["git-lfs: command not found",1852],["If you are trying to download a package that uses Git LFS (Large File Storage), you might see this error message:",1852],["```lang-shell",1852],["Error when executing git command. git-lfs filter-process: command not found.",1852],["This indicates that Git LFS is probably not installed on your computer. To make sure, you could test it on the command line:",1852],["```lang-shell",1852],["git lfs --version",1852],["If you see something like this, Git LFS is installed:",1852],["```lang-shell",1852],["git-lfs/2.8.0 (GitHub; darwin amd64; go 1.12.7)",1852],["Otherwise, you can install it by following the Bitbucket GitHub instructions.",1852],["",1852],["",1852],["Repository not found",1852],["If you specify a location that does not exist, a message similar to this one appears in the Unity Console:",1852],["Cannot perform upm operation: Unable to add package [https://mycompany.github.com/gitproject/com.mycompany.mypackage.git]:",1852],["Error when executing git command. fatal: repository 'https://mycompany.github.com/gitproject/com.mycompany.mypackage.git/' not found",1852],["[NotFound]",1852],["UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)",1852],["Check your spelling. To make sure you are using the correct URL, go to the repository's page and copy the URL from the Clone button:",1852],["Click the button to the right of the URL on GitHub (A) or GitLab (B) to copy the URL to your clipboard.",1852],["If the location of the repository is correct, there may be another problem with the URL:",1852],["If you are targeting a specific revision, make sure your revision comes last. For example: ",1852],["https://github.example.com/myuser/myrepository1.git#revision",1852],["If you are targeting a revision and the package is not at the root, make sure the path query parameter precedes the revision anchor. For example:https://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3",1852],["",1852],["",1852],["Could not read Username: terminal prompts disabled",1852],["If you are trying to install a package from a private repository that requires authentication, a message similar to this one appears in the Unity Console:",1852],["Cannot perform upm operation: Unable to add package [https://mycompany.github.com/gitproject/com.mycompany.mypackage.git]:",1852],["Error when executing git command. fatal: could not read Username for 'https://mycompany.github.com': terminal prompts disabled",1852],["[NotFound]",1852],["UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)",1852],["This message is likely due to the fact that Package Manager does not provide an interactive terminal or dialog where you can enter your username and password for HTTP, or your passphrase to unlock your SSH key:",1852],["With HTTP(S), every time you log onto BitBucket, GitHub, or GitLab you need to enter your username and password in a terminal or a dialog box. However, the Package Manager does not provide an interactive terminal or dialog where you can enter your username and password for HTTP(S).",1852],["To bypass this, use one of the workarounds suggested in Solutions for HTTPS.",1852],["SSH** uses a pair of public and private SSH keys. You can add your public SSH key to Bitbucket, GitHub, or GitLab and then access repositories without having to enter a username and password.",1852],["However, if you have set up a passphrase to keep your SSH key safe, you still have to enter that passphrase in a terminal or a dialog box in order to authorize your key. In that case, you can use an SSH agent that can unlock your SSH key to authenticate with the Package Manager on your behalf.",1852],["",1852],["Solutions for HTTPS",1852],["The Package Manager does not provide an interactive terminal or dialog where you can enter your HTTP(S) username and password. To bypass this, use one of these workarounds:",1852],["Use a credential manager (Git Credential Manager for Windows or OSXKeyChain). Credential managers handle sending the password without having to use a terminal or a command prompt.",1852],["Use git-credentials from a terminal or command prompt, then launch the Hub from the same terminal so that Unity has access to the cached or stored credentials.",1852],["Use SSH to authenticate instead. If you set up your SSH key without a passphrase, the Package Manager doesn't have to decrypt it to authenticate with the Git server. If you decide to use a passphrase for added security, you can use the ssh-agent on either macOS or Windows to get around the authentication problem.",1852],["",1852],["Solutions for SSH",1852],["If you use the SSH protocol to install a package by Git URL, you might get an authentication error from Git. This typically happens when you set up a private SSH key on your local computer that is protected by a passphrase.",1852],["The solution to this problem is to set up an SSH agent that can unlock your SSH key to authenticate with the Package Manager on your behalf. Follow the instructions in the section that corresponds to your operating system:",1852],["",1852],["Setting up OpenSSH for Windows",1852],["The native Windows OpenSSH version of the ssh-agent works better than the version available by default with Git for Windows. This procedure explains how to set up the OpenSSH client and add your key to its ssh-agent. If you are using Git for Windows, you can also prioritize the native Windows OpenSSH over the Git for Windows SSH agent:",1852],["Make sure the OpenSSH Client is installed. To do this, search for it in the Windows Settings Optional features window (Start > Settings, then search for \"Optional features\"). This applies to Windows 10+.",1852],["Check your %PATH% environment variable to make sure the native Windows OpenSSH location appears (for example, C:\\WINDOWS\\System32\\OpenSSH\\).",1852],["Note**: If you're already using Git for Windows, make sure the native Windows OpenSSH location appears before the Git for Windows SSH location in your %PATH% variable. This ensures that Windows uses the native Windows OpenSSH agent over the Git for Windows SSH agent.",1852],["In a PowerShell terminal, start the ssh-agent process and make sure it starts automatically:",1852],["```lang-powershell",1852],["Set the ssh-agent service to start automatically and manually start it now",1852],["Get-Service ssh-agent Set-Service -StartupType Automatic",1852],["Run the ssh-agent process to start the ssh-agent service",1852],["ssh-agent",1852],["Import your key into the ssh-agent. To do this, run ssh-add on the command line and then follow the instructions. By default, the agent adds the %USERPROFILE%\\.ssh\\id_rsa key and prompts you for the password.",1852],["```lang-powershell",1852],["Import the key",1852],["ssh-add",1852],["To use a different key, you can specify it as an argument:",1852],["```lang-powershell",1852],["Set the ssh-agent service to start automatically and manually start it now",1852],["ssh-add ",1852],["If you can't remember the name of your key, use the following command to list your keys:",1852],["```lang-powershell",1852],["ssh-add -l",1852],["If you installed Git for Windows, reset the %GIT-SSH% environment variable to make sure that Git always uses the native Windows OpenSSH version of the ssh-agent:",1852],["```lang-powershell",1852],["",1852],["Adding SSH keys to your SSH Agent for macOS",1852],["Use the ssh-add command to add your SSH keys to the ssh-agent running on your macOS system. The command parameter you use depends on your version of macOS:",1852],["Prior to macOS 12, use:",1852],["```lang-bash",1852],["ssh-add -K ~/.ssh/",1852],["Starting with macOS 12, use:",1852],["```lang-bash",1852],["ssh-add --apple-use-keychain ~/.ssh/",1852],["After you run this command, the terminal asks for the password to unlock your SSH key and then adds it to the macOS keychain. However, once you restart your system, every key stored in the ssh-agent is reset.",1852],["To make sure you don’t need to re-enter your password after you restart your system, open the ~/.ssh/config file (or create one if you don't find it), and add the following:",1852],["```lang-bash",1852],["Host *",1852],["UseKeychain yes",1852],["AddKeysToAgent yes",1852],["IdentityFile ~/.ssh/",1852],["Restart your computer to apply these changes.",1852],["",1852],["",1852],["Can't update Git version",1852],["If you are trying to update your Git dependency to a newer version from the repository, but it's not working, it's probably because your Git dependency is locked. If you want to update your Git dependency to a newer version from the repository, use the Add package from git URL button and enter a Git URL. For more information, see Locked Git dependencies.",1852],["",1852],["",1852],["'Failed to parse http response' in My Assets context",1852],["If you see the following message in the Console window when you try to download an Asset Store package, there might be a problem with your Asset Store cache:",1852],["[PackageManager] Error Failed to parse response. UnityEditor.AsyncHTTPClient![:D](https://forum.unity.com/styles/default/xenforo/clear.png)one(State, Int32)",1852],["To solve this problem, delete all downloaded assets from the Asset Store package directory and then try to download the assets again.",1852],["Warning**: If your project contains a lot of asset data, it might take a lot of time and bandwidth to re-download everything.",1852],["",1852],["",1852],["Missing 'My Registries' in the Package Manager window",1852],["Not all registry providers are compatible with Unity's Package Manager. If the package registry server you added does not implement the /-/v1/search or /-/all endpoints, your scoped registry is not compatible with Unity's Package Manager, and doesn't appear in the My Registries context in the Package Manager window.",1852],["",1852],["",1852],["Missing MonoBehaviour errors",1852],["While building, if there are a lot of errors about Missing Behavior, the UnityLinker might be mistakenly stripping out a component that it thinks is unreferenced. It often does this because the stripping level is too aggressive. For example, if you have a prefab in an AssetBundle that references the SpriteShape component in the 2D SpriteShape package, the object might be missing and might generate compiler warnings.",1852],["To fix this, you can either lower the stripping level for the UnityLinker or declare the package's assemblies inside the link.xml file in order to preserve them from being stripped:",1852],["```lang-xml",1852],["",1852],["",1852],["",1852],["",1852],["For more information on stripping levels and the UnityLinker, see Managed code stripping.",1852],["",1852],["",1852],["Loading error for hostfxr.dll on Windows",1852],["If the Console reports that the hostfxr.dll library was found, but Unity failed to load it from C:\\<path_to_app>\\hostfxr.dll, you can fix this error on Windows 7 or Windows Server 2008 R2 by installing both KB2999226 and KB2533623 patches.",1852],["",1852],["Git dependencies",1853],["When the Package Manager fetches a package from a Git repository, it adds the package locally to your project. This allows you to test unpublished changes, but you can't use it to contribute to that Git repository. To set up an existing local Git repository as a dependency in your project, use a path to your local Git repository instead.",1853],["Note**: You can't specify Git dependencies in a package.json file because the Package Manager doesn't support Git dependencies between packages. It supports Git dependencies only for projects, so you can declare Git dependencies only in the project's manifest.json file.",1853],["Tip**: If you want to update your Git dependency to a specific version (revision) from the repository, see Locked Git dependencies.",1853],["This section includes the following topics:",1853],["",1853],["",1853],["Requirements",1853],["To use Git dependencies in a project, make sure you installed the Git client (minimum version 2.14.0) on your computer and that you have added the Git executable path to the PATH system environment variable.",1853],["Warning:** Unity tested the Package Manager to work with Git 2.14.0 and above. Unity can't guarantee the results if you use Git versions below 2.14.0.",1853],["If the repository tracks files with Git LFS, make sure the Git LFS client is also installed on your machine. If it's not installed, the Package Manager can't retrieve the files stored on the LFS server and instead checks out the LFS pointer files without any error or warning messages.",1853],["You can use the Package Manager window to install a package directly from a Git repository. For more information, see Installing from a Git URL.",1853],["",1853],["Git URLs and extended syntax",1853],["The Package Manager supports all Git protocols, with the exception of local file paths. To specify a Git URL as a dependency, add the name of the package to add with a Git URL instead of the version number or local file path to the project manifest. For example, this demonstrates how to specify a remote Git using different protocols:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"https://github.example.com/myuser/myrepository1.git\",",1853],["\"com.mycompany.mypackage2\": \"ssh://git@github.example.com/myuser/myrepository2.git\",",1853],["\"com.mycompany.mypackage3\": \"file://localhost/github.example.com/myuser/myrepository3.git\",",1853],["\"com.mycompany.mypackage4\": \"git://github.example.com/myuser/myrepository4.git\",",1853],["etc.",1853],["The Package Manager recognizes that a dependency formatted as a URL is a Git URL by looking for the .git file extension at the end of the repository path. Some Git repository hosting services don't support URLs with this extension while others enforce it. For this reason, the Git dependency syntax allows you to omit the extension if you use the GIT protocol, or if you add a special git+ prefix to the HTTP/HTTPS, SSH, or FILE URL.",1853],["Note:** The git+ prefix is a special marker in the manifest.json file that indicates that the dependency is Git based. The Package Manager doesn't pass it to Git when cloning the repository.",1853],["For more information about the format of Git-supported URLs, see the documentation for the git clone command. For an overview of the difference between the protocols that Git uses, see the Git documentation for using protocols.",1853],["You can also use extended syntax for Git dependencies:",1853],["If the package you want isn't at the root of the repository, you can specify a path to a package's subfolder in the repository. This is necessary only if the package you want isn't at the root of the repository. For example, the string ?path=/folder1/folder2 in:",1853],["\"https://github.example.com/myuser/myrepository.git?path=/folder1/folder2\".",1853],["For more information, see Specifying a package in a subfolder.",1853],["You can specify a Git revision, which can be a tag, branch name, or a specific commit hash to lock onto. This ensures that the Package Manager always loads that exact revision. If you don't specify a revision, the Package Manager clones the repository at the default branch and latest commit and locks onto that revision. For example, the string #v2.0.0 in:",1853],["\"https://github.example.com/myuser/myrepository.git#v2.0.0\"",1853],["For more information, see Targeting a specific revision.",1853],["",1853],["Using the HTTP/HTTPS protocol",1853],["You can use the HTTPS protocol with the full URL:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage\": \"https://github.example.com/myuser/myrepository.git\"",1853],["If your Git server doesn't support the .git extension, you can add the special git+ prefix, with or without the extension:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"git+https://github.example.com/myuser/myrepository1.git\",",1853],["\"com.mycompany.mypackage2\": \"git+https://github.example.com/myuser/myrepository2\"",1853],["Note**: Alternatively, you can use the GIT protocol instead of the git+ prefix. For more information, see Using the GIT protocol.",1853],["If the repository is publicly accessible, HTTPS is the recommended scheme for sharing Git URLs with users because you can copy and paste the URL directly from the Git repository hosting service web page.",1853],["If the repository isn't publicly accessible and you are using HTTPS, the repository server fails to authenticate you because you can't interact with the server to provide your credentials. In this case, the Editor notifies you that authentication failed.",1853],["To work around these authentication issues, you can either use a Git credentials helper to authenticate beforehand, or use the SSH protocol instead. If you set up and configure an SSH key pair with the Git repository hosting service, the Package Manager can authenticate the request seamlessly on your behalf.",1853],["",1853],["Using the SSH protocol",1853],["You can use the SSH protocol with the full URL:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage\": \"ssh://git@mycompany.github.com/gitproject/com.mycompany.mypackage.git\"",1853],["If your Git server doesn't support the .git extension, you can add the special git+ prefix, with or without the extension:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"git+ssh://git@github.example.com/myuser/myrepository1.git\",",1853],["\"com.mycompany.mypackage2\": \"git+ssh://git@github.example.com/myuser/myrepository2\"",1853],["Note**: Alternatively, you can use the GIT protocol instead of the git+ prefix. For more information, see Using the GIT protocol.",1853],["You can also use the SCP-like shorthand, which the Package Manager always recognizes as a Git dependency:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage\": \"git@mycompany.github.com:gitproject/com.mycompany.mypackage.git\"",1853],["Using PuTTY on Windows",1853],["Git uses the keys at the default location when you use SSH to authenticate. However, if you are using PuTTY as the SSH client on Windows, you need to configure the GIT_SSH environment variable to make it point to plink.exe.",1853],["Authenticating with SSH",1853],["If you want to use the SSH protocol, you need to set up SSH keys outside of Unity. For more information on setting up authentication for a specific host, see the help pages for Bitbucket, GitLab, and GitHub.",1853],["Note**: If you encrypted your SSH key with a passphrase, the Package Manager can't retrieve the package, because it doesn't provide a way to enter the passphrase in a terminal or command line. In this case, the Editor notifies you that authentication failed. For help with using the ssh-agent for authentication, see Solutions for SSH.",1853],["",1853],["Using the FILE protocol",1853],["The Package Manager doesn't recognize Git URLs with the file: prefix as Git dependencies unless they're properly formatted. This means you must use either the git+file: protocol, or the .git suffix with the file: protocol:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"git+file://github.example.com/myuser/myrepository1\",",1853],["\"com.mycompany.mypackage2\": \"git+file:///github.example.com/myuser/myrepository2\",",1853],["\"com.mycompany.mypackage3\": \"file:///github.example.com/myuser/myrepository3.git\"",1853],["Note**: Alternatively, you can use the GIT protocol instead of the git+ prefix. For more information, see Using the GIT protocol.",1853],["The Package Manager interprets any other syntax as a local path instead.",1853],["",1853],["Using the GIT protocol",1853],["The Package Manager recognizes the git: protocol, with or without the .git path suffix:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"git://github.example.com/myuser/myrepository1.git\",",1853],["\"com.mycompany.mypackage2\": \"git://github.example.com/myuser/myrepository2\"",1853],["The GIT protocol doesn't need or support the git+ prefix.",1853],["",1853],["Targeting a specific revision",1853],["To declare a specific revision that you want the Package Manager to clone, add the revision prefixed by the number sign (#) at the end of the URL:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"https://github.example.com/myuser/myrepository1.git#revision\",",1853],["\"com.mycompany.mypackage2\": \"git+https://github.example.com/myuser/myrepository2#revision\"",1853],["The revision can be any tag, branch or commit hash. You must provide a full commit hash. Unity doesn't support shortened SHA-1 hashes. This table shows examples for specifying revisions:",1853],["Syntax: URL example ",1853],["--------------------- ------------------------------------------------------------ ",1853],["Latest default branch \"https://github.example.com/myuser/myrepository.git\" ",1853],["Specific branch \"https://github.example.com/myuser/myrepository.git#my-branch\" ",1853],["Specific version \"https://github.example.com/myuser/myrepository.git#v2.0.0\" ",1853],["Commit hash \"https://github.example.com/myuser/myrepository.git#9e72f9d5a6a3dadc38d813d8399e1b0e86781a49\" ",1853],["",1853],["Specifying a package in a subfolder of the repository",1853],["If you specify a repository using the Git URL syntax, the Package Manager assumes that the package must be at the root of the repository. However, some packages aren't located at the root level of their repository, and some repositories contain more than one package.",1853],["You can use the path query parameter in the Git URL to notify the Package Manager where to find the package. The path you specify must be relative to the root of the repository, and the subfolder you specify must contain the package manifest (package.json file).",1853],["To specify a repository subfolder for a Git dependency, use the path query parameter:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage\": \"https://github.example.com/myuser/myrepository.git?path=/subfolder\"",1853],["In this case, the Package Manager registers the package located in the specified repository subfolder and disregards the rest of the repository.",1853],["Sometimes a repository contains several related packages. If you want to add more than one package from the same repository, you must add two separate entries to your project manifest:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage1\": \"https://github.example.com/myuser/myrepository.git?path=/subfolder1\",",1853],["\"com.mycompany.mypackage3\": \"https://github.example.com/myuser/myrepository.git?path=/subfolder2/subfolder3\"",1853],["Note**: If you specify the same repository multiple times, the Package Manager clones the same repository multiple times, which leads to reduced performance and additional network usage.",1853],["",1853],["Using paths and revisions at the same time",1853],["The path query parameter always precedes the revision anchor. The reverse order fails. This is an example of the correct order to use:",1853],["```lang-json",1853],["\"dependencies\": {",1853],["\"com.mycompany.mypackage\": \"https://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3\"",1853],["",1853],["Locked Git dependencies",1853],["One of the core principles of the Package Manager is determinism. If you share your project with other users, the Package Manager should install the same set of package dependencies and versions, and that includes packages that it fetches from Git. To achieve this, the Package Manager tracks commit hashes of Git dependencies by using a lock file.",1853],["When you add a Git dependency with a revision set to a branch or a tag, the Package Manager fetches the corresponding commit hash to store in the lock file. Over time, branches and tags can point to different commits on the Git repository. For example, a branch can have newer commits added to it.",1853],["To update the package to a different commit that a branch or tag points to, use the Add package from git URL button and enter a Git URL. You can use the same Git URL, because the Package Manager ignores the locked commit hash when you submit a new request. However, you can also specify a new revision number, tag, or branch as a revision instead.",1853],["Alternatively, you could create a script with the Client.Add C# API method with that Git URL.",1853],["",1853],["",1853],["Git LFS Support",1853],["The Package Manager supports Git dependencies with repositories using Git LFS. Since Git LFS is designed to work with minimal configuration overhead, it supports both HTTPS and SSH authentication:",1853],["For information about HTTPS authentication, see Using the HTTP/HTTPS protocol.",1853],["For information about SSH authentication, see Using the SSH protocol.",1853],["Retrieval of files stored on the LFS server fails if users need authentication and don't have valid credentials with permission to access the remote repository.",1853],["Package authors can help the Git LFS client locate the LFS Server by providing it with the URL in the .lfsconfig configuration file in the repository. There are two ways to do this:",1853],["```lang-json",1853],["Option 1: global setting",1853],["[lfs]",1853],["url = ssh://git@HOSTNAME/path/to/repo.git",1853],["Option 2: per-remote setting",1853],["[remote \"origin\"]",1853],["lfsurl = ssh://git@HOSTNAME/path/to/repo.git",1853],["If the repository contains a .lfsconfig file, make sure you include it in the .npmignore file to avoid including it in published releases of the package.",1853],["Git LFS cache",1853],["As of Unity 2021.2, you can optionally enable a Git LFS cache for the Package Manager to use when checking out Git-based dependencies. This avoids having to download the same file every time you check out a different revision of the repository.",1853],["The Git LFS cache for the Package Manager is different from the Git LFS cache in the .git/lfs folder of your Git repository. The Package Manager can't use the default Git cache because it doesn't keep cloned repositories after it copies packages to the project cache.",1853],["To enable the Git LFS cache for the Package Manager, choose one of the following options:",1853],["To enable the Git LFS cache and use the git-lfs subfolder under the default global cache root as its location, set the UPM_ENABLE_GIT_LFS_CACHE environment variable to any (non-empty) value.",1853],["To enable the Git LFS cache and use a custom location for it, set the UPM_GIT_LFS_CACHE_PATH environment variable to the custom path. When you set the location, the Git LFS cache option is automatically enabled.",1853],["For more information about how to set environment variables for the global cache, see Customize the global cache location.",1853],["Note:** This optimization requires extra disk space when using Git LFS-enabled packages. You need to decide which is the greater benefit: Git LFS file caching costs disk space but saves you from downloading the same files again. However, some situations can't make use of the cache and use up disk space without reusing the files. For example, your Git dependencies might resolve to revisions that reference different LFS-tracked file content, such as these scenarios:",1853],["Using different Git revisions in dependencies in multiple projects",1853],["Frequently updating a package to revisions that contain different changed LFS files",1853],["Additional resources",1853],["Git Large File Storage (LFS)",1853],["Git on the Server - The Protocols",1853],["",1853],["",1853],["Lock files added in Unity 2019.4 NewIn20194",1853],["Git dependencies in subfolders added in Unity 2019.4 NewIn20194",1853],["Git LFS caching for Git dependencies added in Unity 2019.4 NewIn20194",1853],["Inspecting packages",1854],["The Project view displays the list of packages currently installed in your project from all sources. This means that immutable packages that you installed from a package registry are visible, as well as mutable packages (such as embedded and local packages).",1854],["You can inspect the contents of any package that appears in the Project view. You can also inspect the package manifest through a dedicated Inspector.",1854],["To inspect a package manifest, click on it in the Project view.",1854],["For embedded or local packages, you can change the package contents and edit the package manifest.",1854],["",1854],["Package states and lifecycle",1855],["Starting from Unity Editor version 2021.1, a package may travel through the following states during its lifecycle:",1855],["",1855],["",1855],["Birth (A) While the package developer creates the package, it is in the \"Custom\" state. When it is ready for Unity users to test it and provide feedback, a package enters the \"Experimental\" state. Unity does not support experimental packages and does not guarantee that experimental packages will be fully released and verified to be safe to use in production until they enter the release track. Experimental packages either use 0 as the major portion of their version or the -exp.# suffix on the patch portion of their version. For example, mypackage@0.1.2 or mypackage@1.2.3-exp.1. ",1855],["Release track As soon as a package passes quality testing and doesn't contain any experimental features or functionality (including having dependencies on experimental packages), it enters the \"Pre-release\" state, which is on the release track. That means that Unity fully supports it and commits to officially releasing them by the end of the current LTS cycle (for example, 2021.3) at the latest. For a list of pre-release packages available for this version, see Pre-release packages. Unity's release management only grants a package the \"Released\" status after it passes several testing stages and validation procedures, which also include checks for appropriate documentation, changelog, and license files. Packages in this state appear in the Unity Editor with the label and never use non-numeric suffixes as part of their version. For a list of released packages available for this version, see Released packages. If the package developer updates or changes a released package, that package might return to another state depending on the severity: ",1855],[" **Type of change:** **New state:** **Version bump:** \n",1855],["(B) Major API change that breaks an API Experimental 1.2.3 => 2.0.0-exp ",1855],["(C) Minor API change that does not break the API but affects usage Pre-release 1.2.3 => 1.3.0-pre ",1855],["(D) Bug fixes, trivial changes, and documentation updates typical of patch updates Released (same state) 1.2.3 => 1.2.4 ",1855],["Death (E) Packages that reach their end of life are no longer supported in Editors where they're marked \"Deprecated\". Packages in that state shouldn't be used as they might be nonfunctional or unsafe to use.Specific package versions can also be individually marked as deprecated across all Editors. Unity usually applies this designation when they discover a critical issue in a specific version of a package that hasn't yet reached its end of life. Custom package authors can also apply this designation based on their own deprecation flow.Some experimental packages go directly to the deprecated state without passing through the release cycle track. ",1855],["The Package Manager window displays a label that corresponds to some of these states.",1855],["Note**: These package states only apply to packages that Unity develops internally. Contact third-party package developers to ask about their specific processes.",1855],["",1855],["",1855],["Some advanced or support packages are no longer discoverable in the Package Manager window 2020.1 NewIn20201",1855],["New package lifecycle (V2) for the Package Manager 2021.1 NewIn20211",1855],["Local folder or tarball paths",1856],["You can specify a dependency as any local folder or tarball that contains a package. This feature is helpful for local offline development and testing.",1856],["Note**: If you want to reference a package on the local file system as a Git dependency, use the file://<url> format instead. Unity doesn't support directly referencing a locally accessible Git repository with a file path. For more information on the file://<url> format, refer to Git dependencies.",1856],["This section describes how to use the project manifest to set up a local dependency. If you want to use the Package Manager window instead, follow the instructions on these pages:",1856],["The path reference always begins with the file: prefix, and uses forward slashes (/) for path separators.",1856],["Note**: On Windows, you can also use backslashes (\\), but only if you escape each one (for example, \"file:..\\\\github\\\\my_package_folder\" or \"file:C:\\\\Users\\\\my_username\\\\github\\\\my_package_folder\"). These paths aren't as easy to read as the forward slashes, they're prone to typing errors, and you can't use them anywhere but on a Windows machine. For these reasons, using forward slashes is preferable.",1856],["You can use either absolute paths, or paths that are relative to the project's Packages folder (that is, the root folder of the project manifest). In other words, a path preceded with two dots (..) refers to the root of the project path, so that ../another_folder is a sibling of the Packages folder.",1856],["Tip**: Relative paths with forward-slashes offer better portability across different machines and operating systems when tracking a project and packages in the same repository.",1856],["For Windows absolute paths, the drive letter and its colon (usually C:) follows the file: prefix but is otherwise the same as Linux or macOS paths.",1856],["Example of a relative path",1856],["After the file: prefix, the path is a standard relative path. In the following example:",1856],["The project's Packages folder is C:\\Users\\my_username\\Projects\\my_project\\Packages.",1856],["The Projects, github, and Downloads folders are peer folders.",1856],["my_package_c is an embedded package (a package whose folder was copied into the Packages folder, to make it mutable).",1856],["```lang-json",1856],["\"dependencies\": {",1856],["\"my_package_a\": \"file:../github/my_package_folder\",",1856],["\"my_package_b\": \"file:../Downloads/my_package_tarball.tgz\"",1856],["\"my_package_c\": \"file:com.unity.textmeshpro\"",1856],["Example of an absolute path in Linux or macOS",1856],["After the file: prefix, the path is a standard Portable Operating System Interface (POSIX) path, starting with a forward slash /:",1856],["```lang-json",1856],["\"dependencies\": {",1856],["\"my_package_a\": \"file:/Users/my_username/github/my_package_folder\",",1856],["\"my_package_b\": \"file:/Users/my_username/Downloads/my_package_tarball.tgz\"",1856],["Example of an absolute path in Windows",1856],["Notice that the drive letter immediately follows the file: prefix:",1856],["```lang-json",1856],["\"dependencies\": {",1856],["\"my_package_a\": \"file:C:/Users/my_username/github/my_package_folder\",",1856],["\"my_package_b\": \"file:C:/Users/my_username/Downloads/my_package_tarball.tgz\"",1856],["",1856],["Package manifest",1857],["Unity uses a package manifest file (package.json) to manage information about a specific version of a specific package. The package manifest is always at the root of the package and has crucial information about the package, such as its registered name and version number.",1857],["The package manifest also defines useful information to communicate to the user, such as:",1857],["A user-friendly name that appears in the UI.",1857],["A brief description of the package.",1857],["The earliest version of the Unity Editor the package is compatible with.",1857],["The package manifest uses the JSON (JavaScript Object Notation) syntax to describe what's inside the package. The file's format is similar to npm's package.json format, but uses different semantics for some of its properties. Refer to the example for a sample package manifest file.",1857],["The Package Manager reads this manifest to find out the package's contents, how to unpack its contents, and what information to display the user in the Package Manager window. The manifest stores this information in a series of required, recommended, and optional properties.",1857],["",1857],["Required properties",1857],["If these properties aren't present, either the registry refuses the package when it's published, or the Package Manager can't fetch or load the package.",1857],["Property JSON Type Description ",1857],["--------------------------------- ------------- ------------------------------------------------------------ ",1857],["name String A unique identifier that conforms to the Unity Package Manager naming convention, which uses reverse domain name notation. For more information about the naming convention, refer to Naming your package.Note: The name identifier is different than the user-friendly name that appears in the list view in the Package Manager window. ",1857],["version string The package version number (MAJOR.MINOR.PATCH). For example, \"3.2.1\" indicates that this is the 3rd major release, the 2nd minor release, and the first patch. This value must respect Semantic Versioning. For more information, refer to Versioning. ",1857],["",1857],["Recommended properties",1857],["The Package Manager can install packages in a project even if the recommended properties don't have valid values or are missing.",1857],["However, the recommended best practice is to assign values for these properties to ensure that your package is discoverable and to offer a better experience for users.",1857],["Property JSON Type Description ",1857],["----------------------------------------- ------------- ------------------------------------------------------------ ",1857],["description String A brief description of the package. This is the text that appears in the details view of the Package Manager window. This field supports UTF-8 character codes. This means that you can use special formatting character codes, such as line breaks (\\n) and bullets (\\u25AA). ",1857],["displayName String A user-friendly name to appear in the Unity Editor (for example, in the Project Browser, the Package Manager window, etc.). For example, Unity Timeline, ProBuilder, In App Purchasing. ",1857],["unity String Indicates the lowest Unity version the package is compatible with. If omitted, the Package Manager considers the package compatible with all Unity versions. The expected format is \"<MAJOR>.<MINOR>\" (for example, 2018.3). To point to a specific patch, use the unityRelease property as well.Note: A package that isn't compatible with Unity doesn't appear in the Package Manager window. ",1857],["",1857],["Optional properties",1857],["These properties are optional, meaning that you can omit them. However, if they're present, they must have a valid value.",1857],["Property JSON Type Description ",1857],["--------------------------------------------------- ---------------- ------------------------------------------------------------ ",1857],["author Object or string The author of the package. This property has one required field, name, and two optional fields, email and url. You can specify these fields as a JSON object, or collapse them into a single string whose key is author.Object example: {   \"name\" : \"John Doe\",   \"email\" : \"john.doe@example.com\",   \"url\" : \"http://john.doe.example.com/\"} String example: \"John Doe <john.doe@example.com> (http://john.doe.example.com/)\" ",1857],["changelogUrl String Custom location for this package's changelog specified as a URL. For example:\"changelogUrl\": \"https://example.com/changelog.html\"Note: When the Package Manager can't reach the URL location (for example, if there is a network issue), it does the following:- If the package is installed, the Package Manager opens a file browser displaying the CHANGELOG.md file in the package cache. - If the package isn't installed, the Package Manager displays a warning that an offline changelog isn't available. ",1857],["dependencies Object A map of package dependencies. Keys are package names, and values are specific versions. They identify other packages that this package depends on. Note: The Package Manager doesn't support range syntax, only SemVer versions. ",1857],["documentationUrl String Custom location for this package's documentation specified as a URL. For example:\"documentationUrl\": \"https://example.com/\"Note: When the Package Manager can't reach the URL location (for example, if there is a network issue), it does the following:- If the package is installed, the Package Manager opens a file browser displaying the Documentation~ folder in the package cache. - If the package isn't installed, the Package Manager displays a warning that offline documentation isn't available. ",1857],["hideInEditor Boolean By default, a package's assets are hidden in the Project window and omitted from the results when you use the Object Picker in the Inspector window. Set this property to \"false\" to make sure that this package's assets are always visible. ",1857],["keywords Array of Strings An array of keywords used by the Package Manager search APIs. This helps users find relevant packages. ",1857],["license String Identifier for an OSS license using the SPDX identifier format, or a string such as \"See LICENSE.md file\".Note: If you omit this property in your package manifest, your package must contain a LICENSE.md file. ",1857],["licensesUrl String Custom location for this package's license information specified as a URL. For example:\"licensesUrl\": \"https://example.com/licensing.html\"Note: When the Package Manager can't reach the URL location (for example, if there is a network issue), it does the following:- If the package is installed, it opens a file browser displaying the LICENSE.md file in the package cache. - If the package isn't installed, the Package Manager displays a warning that offline license information isn't available. ",1857],["samples Array of Objects List of samples included in the package. Each sample has a display name, a description, and the path to the sample folder starting at the Samples~ folder itself:{   \"displayName\": \"<name-to-appear-in-the-UI>\",   \"description\": \"<brief-description>\",   \"path\": \"Samples~/<sample-subfolder>\"} For more information, refer to Creating samples for packages. ",1857],["type String A constant that provides additional information to the Package Manager. Reserved for internal use. ",1857],["unityRelease String Part of a Unity version indicating the specific release of Unity that the package is compatible with. You can use this property when an updated package requires changes made during the Unity alpha/beta development cycle. This might be the case if the package needs newly introduced APIs, or uses existing APIs that have changed in a non-backward-compatible way without API Updater rules. The expected format is \"<UPDATE><RELEASE>\" (for example, 0b4). Note: If you omit the recommended unity property, this property has no effect. A package that isn't compatible with Unity doesn't appear in the Package Manager window. ",1857],["",1857],["Package manifest example",1857],["```lang-json",1857],["\"name\": \"com.[company-name].[package-name]\",",1857],["\"version\": \"1.2.3\",",1857],["\"displayName\": \"Package Example\",",1857],["\"description\": \"This is an example package\",",1857],["\"unity\": \"2019.1\",",1857],["\"unityRelease\": \"0b5\",",1857],["\"documentationUrl\": \"https://example.com/\",",1857],["\"changelogUrl\": \"https://example.com/changelog.html\",",1857],["\"licensesUrl\": \"https://example.com/licensing.html\",",1857],["\"dependencies\": {",1857],["\"com.[company-name].some-package\": \"1.0.0\",",1857],["\"com.[company-name].other-package\": \"2.0.0\"",1857],["},",1857],["\"keywords\": [",1857],["\"keyword1\",",1857],["\"keyword2\",",1857],["\"keyword3\"",1857],["],",1857],["\"author\": {",1857],["\"name\": \"Unity\",",1857],["\"email\": \"unity@example.com\",",1857],["\"url\": \"https://www.unity3d.com\"",1857],["Additional resources",1857],["Project manifest",1858],["When Unity loads a project, the Unity Package Manager reads the project manifest so that it can compute a list of which packages to retrieve and load. When a user installs or uninstalls a package through the Package Manager window, the Package Manager stores those changes in the project manifest file. The project manifest file manages the list of packages through the dependencies object.",1858],["In addition, the project manifest serves as a configuration file for the Package Manager, which uses the manifest to customize the registry URL and register custom registries.",1858],["You can find the project manifest file, called manifest.json, in the Packages folder under the root folder of your Unity project. Like the package manifest file, the project manifest file uses JSON (JavaScript Object Notation) syntax.",1858],["Properties",1858],["All properties are optional. However, if your project manifest file does not contain any values, the Package Manager window doesn't load, and the Package Manager doesn't load any packages.",1858],["Tip**: At any time, you can fix any problems with your registry by choosing Reset packages to defaults from the main Unity Help menu. However, be aware that this action resets all changes you made to the dependencies of your project so it is best to do this as a last resort.",1858],["Key JSON Type Description ",1858],["------------------------------------------------------- ---------------- ------------------------------------------------------------ ",1858],["dependencies Object Collection of packages required for your project. This includes only direct dependencies (indirect dependencies are listed in package manifests). Each entry maps the package name to the minimum version required for the project: {  \"dependencies\": {    \"com.my-package\": \"2.3.1\",    \"com.my-other-package\": \"1.0.1-preview.1\",      etc.  }}Specifying a version number indicates that you want the Package Manager to download the package from the package registry (that is, the source of the package is the registry). However, in addition to using versions, you can also specify a path to a local folder or tarball file, or a Git URL. Note: You do not need to specify embedded packages here because the Package Manager finds them inside your project's Packages folder and loads them automatically. The Package Manager ignores any entry if there is an embedded package with the same name in its own package manifest. ",1858],["enableLockFile Boolean Enables a lock file to ensure that dependencies are resolved in a deterministic manner. This is set to true by default. For more information, see Using lock files. ",1858],["resolutionStrategy String Upgrades indirect dependencies based on Semantic Versioning rules. This is set to lowest by default. For more information, see Setting a resolution strategy below. ",1858],["scopedRegistries Array of Objects Specify custom registries in addition to the default registry. This allows you to host your own packages. See Scoped Registries for more details. ",1858],["testables Array of Strings Lists the names of packages whose tests you want to load in the Unity Test Framework. For more information, see Adding tests to a package.Note: You do not need to specify embedded packages here because the Unity Test Framework assumes they are testable by default. ",1858],["",1858],["Example",1858],["```lang-json",1858],["\"scopedRegistries\": [{",1858],["\"name\": \"My internal registry\",",1858],["\"url\": \"https://my.internal.registry.com\",",1858],["\"scopes\": [",1858],["\"com.company\"",1858],["}],",1858],["\"dependencies\": {",1858],["\"com.unity.package-1\": \"1.0.0\",",1858],["\"com.unity.package-2\": \"2.0.0\",",1858],["\"com.company.my-package\": \"3.0.0\",",1858],["\"com.unity.my-local-package\": \"file:/my_package_folder\",",1858],["\"com.unity.my-local-tarball\": \"file:/my_package_tarball.tgz\",",1858],["\"com.unity.my-git-package\": \"https://my.repository/my-package.git#v1.2.3\"",1858],["},",1858],["\"enableLockFile\": true,",1858],["\"resolutionStrategy\": \"highestMinor\",",1858],["\"testables\": [ \"com.unity.package-1\", \"com.unity.package-2\" ]",1858],["",1858],["Setting a resolution strategy",1858],["While you can force Unity's package dependency resolution to use higher versions of indirect dependencies by adding them explicitly to the project manifest, this isn't a good strategy, for two reasons:",1858],["It puts more responsibility on the project owner to maintain dependency versions.",1858],["Over time, you might have dependencies that are not required by the project.",1858],["A better approach is to customize how the Package Manager selects indirect dependencies based on Semantic Versioning rules by setting the resolutionStrategy property:",1858],["Value: Description: ",1858],["---------------- ------------------------------------------------------------ ",1858],["lowest Do not upgrade indirect dependencies. Instead, it uses exactly the requested version. This is the default mode. ",1858],["highestPatch Upgrade to the highest version with the same Major and Minor components. For example, with the requested version 1.2.3, this strategy selects the highest version in the range [1.2.3, 1.3.0) (that is, >= 1.2.3 and < 1.3.0). ",1858],["highestMinor Upgrade to the highest version with the same Major component. For example, with the requested version 1.2.3, this strategy selects the highest version in the range [1.2.3, 2.0.0) (that is, >= 1.2.3 and < 2.0.0).Note: Version 1.0.0 marks the first stable, production-ready version. Below that, versions 0.X.Y indicate that their API is not yet stable, and successive minor versions might introduce breaking changes. This part of the SemVer specification allows releasing early versions of a package without hampering rapid development. Because of this, when the target version is 0.X.Y, highestMinor behaves like highestPatch in order to ensure choosing a backward-compatible version. For example, with the requested version 0.1.3, this strategy selects the highest version in the range [0.1.3,0.2.0). ",1858],["highest Upgrade to the highest version. For example, with the requested version 1.2.3, this strategy selects the highest version in the range [1.2.3,) (that is, >= 1.2.3 with no upper bound) ",1858],["Note**: These ranges never allow a dependency to jump from a stable release to an experimental or pre-release package.",1858],["Diagnose network issues",1859],["Use the Unity Package Manager Diagnostics tool to help diagnose common network issues associated with Unity Package Manager. The Diagnostics tool runs some basic network tests and creates files that the Unity support team needs to diagnose common network problems. After you run the tool, you can share the results with the Unity support team who can better guide you in resolving those issues.",1859],["To diagnose network issues:",1859],["Run the Unity Package Manager Diagnostics tool by using either the Unity Package Manager Error dialog or by Manually running the script.",1859],["View the test results in the shell window. The tool output also lists the location of the upm-diagnostic-report.txt report and the upm-diag.log file that it created.",1859],["If you need help from the Unity support team, include upm-diagnostic-report.txt and upm-diag.log when you submit a bug.",1859],["",1859],["Method 1: Use the Unity Package Manager Error dialog",1859],["When Unity tries to launch, it starts the Package Manager process before it loads the project. If it encounters a critical error with Package Manager, Unity displays the following error message:",1859],["To run the Diagnostics tool, click Diagnose. Unity closes and launches the Diagnostics tool in a new window.",1859],["",1859],["Method 2: Manually run the script",1859],["Locate the RunUnityPackageManagerDiagnostics script in the Diagnostics folder within the installation folder for your Unity Editor:",1859],["Operating system: Path to Diagnostics command line tool: ",1859],["--------------------- ------------------------------------------------------------ ",1859],["Windows <path-to-unity-installation-folder>   \\Unity      \\Data         \\Resources            \\PackageManager               \\Diagnostics                  \\RunUnityPackageManagerDiagnostics.bat ",1859],["macOSLinux <path-to-unity-installation-folder>   \\Unity.app      \\Contents         \\Resources            \\PackageManager               \\Diagnostics                  \\RunUnityPackageManagerDiagnostics ",1859],["To launch the tool, either:",1859],["Run the script file from the command line.",1859],["Double-click the script file in your file browser. Note: On macOS, you must right-click Unity.app and select Show Package Contents to access the contents of Unity.app.",1859],["Sample output",1859],["Additional resources",1859],["How Unity works with packages",1860],["When Unity opens a Project, the Unity Package Manager reads the Project manifest (1) to figure out what packages to load in the Project. Then it sends a request (2) to the package registry server (3) for each package that appears as a dependency in the manifest. The package registry then sends the requested information and data back to the Package Manager (4), which then installs those packages (5) in the Project. Each Project has its own manifest which lists the packages to load as \"dependencies\" of the Project.",1860],["Adding a package to a project requires an update to the project manifest, to ensure the Package Manager includes the package in the list of dependencies. Although you can modify the project manifest directly, it's safer and easier to work with the Package Manager window, which manages the project manifest modifications for you.",1860],["Additional resources",1860],["Scoped registries",1861],["Scoped registries allow Unity to communicate the location of any custom package registry server to the Package Manager so that the user has access to several collections of packages at the same time. Here are some important concepts to help you understand this feature:",1861],["Concept: Description: ",1861],["--------------------------- ------------------------------------------------------------ ",1861],["package registry server An application that keeps track of packages and provides a place to store them. In Unity's Package Manager window, all packages registered on Unity's registry appear in the list view when you select the Unity Registry context. ",1861],["package manager An application that tells the user what packages are available, and downloads and installs whatever package the user requests for their project. Unity has implemented its own version of a package manager, but there are several similar applications in other organizations. ",1861],["scope Defines a package name or namespace (in reverse domain format), such as com.example.mycompany.animation or com.example. When a user requests a package, the Package Manager fetches the package from the registry that best matches the scope. For more information, see Managing scoped registries for a project below. ",1861],["",1861],["",1861],["The way you interact with scoped registries depends on your role:",1861],["Package providers set up custom registry servers to host and distribute custom packages in addition to the Unity registry.",1861],["Package consumers set up scoped registries for each project to access a custom package provider's registry server.",1861],["Integrity and security of scoped registries",1861],["As a package provider, make sure any package registry servers you set up conform to Unity's Terms of Service and Unity's Package Guiding Principles & Guidelines. Unity provides access to the Package Manager to facilitate sharing knowledge and creations, but not as a marketplace for third-party products.",1861],["As a package consumer, when you install a scoped registry, use the same level of caution that you use when installing any other third-party software:",1861],["Install scoped registries only from trusted sources, since the packages in those registries can contain executable code.",1861],["Beware of third-party registries that may be harmful or capture data without appropriate controls. Also beware of third parties misrepresenting themselves as Unity, or sanctioned or supported by Unity.",1861],["",1861],["Benefits of scoped registries",1861],["Scoped registries can help to:",1861],["Provide new functionality by distributing tools, libraries, and other assets**.",1861],["As a provider, you can create your own registry to distribute tools and scripts (or other types of assets) with version numbers that indicate how mature the package is. Version numbers also indicate whether updates introduce breaking API changes or minor fixes, based on Semantic Versioning. Your code can depend on code in other packages, because the Package Manager supports package dependencies.",1861],["As a consumer, your experience of browsing and installing third-party custom packages in the Package Manager is the same as browsing Unity's packages.",1861],["Extend existing Unity's package features**.",1861],["As a consumer, you can have a seamless experience where the custom package overrides the Unity package without having to manually switch registries or explicitly install a different package version. This is because you can map packages to a specific registry so that Package Manager fetches from either the Unity registry or a custom package registry server.",1861],["Access packages in a closed network environment**.",1861],["Some organizations work inside a closed network, which makes it difficult to access Unity's own package registry. In these cases, the organization can set up their own package registry on a server inside their closed network. The network administrators can then periodically synchronize with Unity's package registry to make sure the scoped registry has the latest set of packages available.",1861],["If you are a package consumer, see Managing scoped registries for a project for information about connecting to an existing custom package registry server in your Unity project. If you are a package producer, see Sharing your package for information about supported package registry servers, and to get links to information on how to set them up to use with scoped registries.",1861],["Note:** If you are setting up a scoped registry that points to a package registry server with restricted access, you can configure Package Manager to pass your npm authentication token to the server. For more information, see Scoped registry authentication.",1861],["Importing scoped registries",1861],["If you are working in a shared project, and another user adds a scoped registry to the project, Unity warns you that another user added a new scoped registry.",1861],["When you click the Close button, the Package Manager project settings window appears so you can add, modify, or remove scoped registries for your project.",1861],["",1861],["If you click the Read more button instead, Unity opens the page you're currently reading in your default web browser.",1861],["Tip:** To access the Package Manager project settings window at any time, use the main menu in Unity (Edit > Project Settings, then the Package Manager category) or select Advanced Project Settings from the advanced settings menu in the Package Manager window.",1861],["Managing scoped registries for a project",1861],["",1861],["To manage the scoped package registries in your project, you can either edit your project manifest file directly or use the Package Manager project settings window to let Unity modify the manifest for you.",1861],["",1861],["The project manifest uses a scopedRegistries property, which contains an array of scoped registry configuration objects. Each object contains the following properties:",1861],["",1861],["Property JSON Type Description ",1861],["------------------------------- ---------------- ------------------------------------------------------------ ",1861],["name String The scope name as it appears in the user interface. The Package Manager window displays this name in the package details view. For example, \"name\": \"Tools\". ",1861],["url String The URL to the npm-compatible registry server. For example, \"url\": \"https://mycompany.example.com/tools-registry\"Note: Not all registry providers are compatible with Unity's Package Manager. Make sure the package registry server you are trying to add implements the /-/v1/search or /-/all endpoints. ",1861],["scopes Array of Strings Array of scopes that you can map to a package name, either as an exact match on the package name, or as a namespace. Wildcards and other glob patterns aren't supported.For example, \"scopes\": [ \"com.example\", \"com.example.tools.physics\" ] Note: This configuration type assumes that packages follow the Reverse domain name notation. This ensures that com.unity is equivalent to any package name that matches the com.unity namespace, such as com.unity.timeline or com.unity.2d.animation.Warning: Unity doesn't support npm's scope notation. ",1861],["When the Package Manager decides which registry to fetch a package from, it compares the package name to the scopes values and finds the registry whose scopes value is the closest match.",1861],["For example, in the project manifest below, there are two scoped registries, \"General\" and \"Tools\":",1861],["```lang-json",1861],["\"scopedRegistries\": [",1861],["\"name\": \"General\",",1861],["\"url\": \"https://example.com/registry\",",1861],["\"scopes\": [",1861],["\"com.example\", \"com.example.tools.physics\"",1861],["},",1861],["\"name\": \"Tools\",",1861],["\"url\": \"https://mycompany.example.com/tools-registry\",",1861],["\"scopes\": [",1861],["\"com.example.mycompany.tools\"",1861],["],",1861],["\"dependencies\": {",1861],["\"com.unity.animation\": \"1.0.0\",",1861],["\"com.example.mycompany.tools.animation\": \"1.0.0\",",1861],["\"com.example.tools.physics\": \"1.0.0\",",1861],["\"com.example.animation\": \"1.0.0\"",1861],["When the Package Manager looks up the com.example.animation package, it finds that the com.example namespace is the closest match to its name, and fetches that package from the \"General\" registry.",1861],["When the Package Manager looks up the com.example.tools.physics package, the \"General\" registry has a scope that exactly matches the package name.",1861],["When the Package Manager looks up the com.example.mycompany.tools.animation package, the Package Manager finds that the com.example.mycompany.tools namespace is the closest match to its name and fetches that package from the \"Tools\" registry. Even though it also matches the \"General\" scope, the com.example namespace isn't as close a match.",1861],["When the Package Manager looks up the com.unity.animation package, the Package Manager doesn't find a match in any of the scoped registries, so it fetches the package from the default registry.",1861],["",1861],["Versioning",1862],["Packages must follow Semantic Versioning (SemVer). Semantic Versioning is a strategy that allows package authors to provide information on the type of changes included in a given version, compared to the previous version, in a format that automated tools can use.",1862],["Semantic Versioning expresses versions as MAJOR.MINOR.PATCH, where MAJOR introduces one or more breaking changes, MINOR introduces one or more backward-compatible API changes, and PATCH only introduces bug fixes with no API changes at all.",1862],["When you begin to develop a package, start the version number at 0.1.0. The MAJOR version number 0 is reserved for packages in their initial development phase. During initial development, package APIs change often, frequently in a breaking manner, so keep the MAJOR version number at 0 until you consider your package stable enough and ready for use in production.",1862],["After a package is officially ready for use in production, increment the MAJOR version to 1 and adhere to the following guidelines for subsequent changes:",1862],["Increment this value: Under these conditions: Example: ",1862],["--------------------------------------------- ------------------------------------------------------------ ------------------------------------------------------------ ",1862],["MAJOR There is at least one breaking change and neither version of the package can be substituted for the other. A breaking change includes:• Changing the API surface (the exposed part of the API) or features in a way that risks compilation or runtime errors.• Removing non-API features, including removing Assets or changing an Asset's GUID. • Removing or renaming assemblies and Assets (because) the compiler might fail to locate them).Note: When incrementing the major version, always reset the PATCH and MINOR values to 0. Versions 1.2.3 and 2.0.0 are not compatible and cannot be used interchangeably without risk. ",1862],["MINOR (same MAJOR value) The highest MINOR introduces functionality in a backward-compatible way. A backward-compatible (or non-breaking) API change includes: • Changing the API surface or features without risking compilation or runtime errors. • Adding non-API features. • Adding assemblies and Assets (because new items don't have pre-existing references).Note: When incrementing the minor version, always reset the PATCH version to 0. You can use Version 1.3.0 to fulfill a dependency on 1.2.0, because 1.3.0 is backward-compatible. You can't use 1.2.0 to fulfill a dependency on 1.3.0. ",1862],["PATCH (same MAJOR.MINOR values) The highest PATCH introduces bug fixes without changing the API at all, in a backward-compatible way. The API doesn't change if: • The API surface is identical and the features remain unchanged. • The changes don't alter the public API. Versions 1.3.0 and 1.3.1 should be interchangeable because they have the same API, even though 1.3.1 contains a bug fix not present in 1.3.0. ",1862],["Following these versioning practices allows the Package Manager to automatically solve conflicts (when possible), or upgrade packages to newer, backward-compatible versions.",1862],["The following sections describe scenarios to help you determine how these rules affect various package elements:",1862],["General assets (such as Audio, Textures, and Models).",1862],["In addition to these scenarios, there is another factor that can affect some changes that would normally require only a MINOR or PATCH version increase: whether the Auto Referenced property is enabled or disabled.",1862],["",1862],["Automatic referencing",1862],["One of the properties you can set for your assembly definitions is the Auto Referenced property, which controls whether Unity automatically references the file during compilation. When this property is enabled, some changes that would normally require only a MINOR or PATCH version increase now become breaking changes.",1862],["When you disable auto-referencing, if you make any change that results in a new assembly being available, you are introducing a backward-compatible change to the API. Backward-compatible API changes, such as adding platforms, disabling Unity Test References, adding a new .asmdef, or removing Define Constraints, only require a MINOR increase.",1862],["However, when you enable auto-referencing, that newly-added assembly is implicitly added to the references of various other assemblies. Since those cases can lead to compilation errors in those other assemblies, so it requires a MAJOR increase.",1862],["Another common case occurs when you add or change versions for a package dependency. Most of the time, changing the package dependency only requires a PATCH increase. However, the new package version might contain an assembly with the Auto Referenced property enabled, which becomes a breaking change, and therefore requires a MAJOR increase.",1862],["To avoid problems like these, always try to avoid putting a third-party DLL file into an unrelated package (such as including Newtonsoft.Json.dll in a SaveGameManager package).",1862],["",1862],["Assets",1862],["A project can reference any asset that is visible to the Asset Database. The Asset Database tracks these assets uniquely using the GUIDs defined in their .meta files.",1862],["When you introduce one of these changes to the public API, this requires a new MAJOR release, because they are breaking changes:",1862],["Scenario: Why these are breaking changes: ",1862],[":------------------------------------------------------ :----------------------------------------------------------- ",1862],["Removing an Asset that is visible to the Asset Database If you remove an Asset, this might break references in user Projects or other packages. ",1862],["Changing the GUID of an Asset If you change an Asset GUID, the Asset Database understands this as removing the original Asset and then adding a new (identical) Asset. This results in a broken reference, because the original GUID no longer points to the Asset, so the Asset Database cannot resolve the reference. ",1862],["",1862],["Assemblies",1862],["Assembly definitions (.asmdef) define a group of scripts which the Unity Editor's compilation pipeline turns into separate managed assemblies (.dll). These .asmdef assets include properties that drive the resulting assembly's properties. This includes:",1862],["Importer settings, such as included and excluded platforms",1862],["Compilation-related properties, such as output assembly names and references fed to the compiler to build the assembly.",1862],["Most properties have an impact on the consumers of the assembly, so changing any of these properties constitutes a change to the package's public API. Other properties have no impact on the consumers of the assembly, so changing any of these is not considered changing the package API.",1862],["Warning**: The Auto Referenced property is a special case, because many of the changes that would normally not change the API at all or would change the API in a backward-compatible way could cause compilation errors, depending on whether or not it is enabled. For more information, see Automatic referencing.",1862],["Unity can either pre-compile assemblies, or compile them from scripts and an assembly definition. Therefore, anything that applies to assembly definitions generally also applies to precompiled assemblies.",1862],["This section details changes in assembly definitions and precompiled assemblies, and the impact on the package version:",1862],["",1862],["MAJOR only: breaking changes",1862],["When you introduce a breaking change to the public API, this requires a new MAJOR release, because it might cause compilation and runtime errors. These scenarios all remove or hide an assembly from any other assemblies that reference it. When an assembly using a type defined in a referenced assembly is compiled, if the compiler cannot find that other assembly, that results in compilation errors. For more information about working with assemblies and assembly definitions, see Assembly Definitions.",1862],["Note that the following applies to both run-time and Editor assemblies that packages consume and use. It doesn't apply to test assemblies, because packages do not normally consume them, so they are not part of a package's API.",1862],["Scenario: Why the compiler can't find the referenced assembly: ",1862],["------------------------------------------------------------ ------------------------------------------------------------ ",1862],["Removing an assembly definition or a precompiled assembly Removing an assembly definition file prevents the compilation pipeline from generating the corresponding assembly. Note: As of 2019.1, missing references are allowed to support the \"optional reference\" use case, but renaming an assembly that Unity needs to compile an assembly definition causes compilation errors. Likewise, if compiled code needs a type from an assembly, renaming that assembly can result in run-time errors such as TypeLoadException. ",1862],["Changing an assembly name (either in the .asmdef file or renaming the .dll file) Changing the assembly name is equivalent to removing the assembly and then adding a new one with a different name. This means Unity considers the original assembly to be missing, even though the API still contains the same assembly code under another name. ",1862],["Adding a define constraint to an .asmdef If you add a define constraint, Unity skips compiling the assembly whenever the define constraint is not met. This creates cases where the assembly is missing, even though it was previously available. ",1862],["Removing platforms If you remove support for a specific platform, Unity no longer imports the assembly on that platform, which is equivalent to removing the assembly. You can remove a platform by enabling one of these properties:• includePlatforms, which breaks compatibility with all unlisted platforms• excludePlatforms, which adds entries to it ",1862],["Moving public APIs from one assembly to another When you move publicly accessible code from Assembly A to Assembly B, any assembly that references A but not B fails to compile.For assembly definitions, if you move scripts around, you might be moving public APIs to a different assembly. ",1862],["Changing the Auto Referenced property When you disable the Auto Referenced property, you can no longer use the public API of this assembly without an explicit reference:• For precompiled assemblies, disabling this property prevents Unity from implicitly adding the precompiled assembly as a reference to assembly definitions and project-compiled assemblies.• For assembly definitions, disabling this property prevents Unity from implicitly adding the resulting assembly as a reference to project-compiled assemblies.When you enable the Auto Referenced property, it potentially introduces conflicts with other changes to the API, properties, or dependencies. For more information, see the Automatic referencing section. ",1862],["Enabling the Unity References → Test Assemblies property in assembly definitions Enabling the Unity References → Test Assemblies property marks this assembly as a test assembly, and Unity doesn't normally include it in builds (or compile it in some cases). When this happens, any assembly referencing the missing assembly fails to locate it, unless it is also a test assembly. ",1862],["",1862],["MAJOR, MINOR: non-breaking API changes",1862],["The following changes are backward-compatible, or non-breaking, API changes. These scenarios all add an assembly, unlike breaking changes which remove an assembly. Since adding an assembly increases the API surface (the exposed part of the API), it is considered an API change. However, there are no existing references, so adding a new assembly won't affect other assemblies created with an earlier API.",1862],["Backward-compatible changes require at least a new MINOR release. If you are including other updates that are breaking changes, then these can also be part of the new MAJOR release.",1862],["Warning**: These changes are only backward-compatible if the Auto Referenced property is disabled. When the Auto Referenced property is enabled, the changes listed in this table might result in breaking changes. For more information, see the Automatic referencing section.",1862],["Scenario Why these changes don't break compilation ",1862],["------------------------------------------------------------ ------------------------------------------------------------ ",1862],["Removing a define constraint to an .asmdef Removing a define constraint means that the compilation and scripting pipelines no longer skip this assembly. Because Unity always builds that assembly, the compiler can always resolve references to it, regardless of whether or not that define constraint is met. ",1862],["Adding platforms Adding platforms has no effect on existing platform support, so it is backwards-compatible. This is an API change because it increases the API surface.You can add platforms by modifying these properties:• Add entries to the includePlatforms property.• Remove the includePlatforms property completely. This is equivalent to adding all platforms that were not already in the includePlatforms property.• Remove entries from the excludePlatforms property. ",1862],["Creating an assembly definition with new scripts (not previously under a different .asmdef file) Adding a new assembly increases the API surface (the exposed part of the API) without altering any existing implementations. ",1862],["Disabling the Unity References → Test Assemblies property in assembly definition files Disabling the Unity References → Test Assemblies property marks this assembly as a regular assembly, so Unity no longer treats it differently from any assembly definition. This is an API change because it increases the API surface. ",1862],["",1862],["MAJOR, MINOR, PATCH: no API changes",1862],["The following changes do not affect the public API and are allowed in PATCH releases. The changes in these scenarios don't alter the public API because they don't affect the API surface (the exposed part of the API) and don't change anything for other consumers.",1862],["Changes that don't alter the public API require at least a new PATCH release. If you are including other updates that introduce either breaking or non-breaking changes, then you can also include them in MAJOR or MINOR releases.",1862],["Scenario Why these changes don't impact other consumers ",1862],["------------------------------------------------------------ ------------------------------------------------------------ ",1862],["Changing the list of referenced assemblies and assembly definitions in .asmdef files An assembly that references another assembly does not automatically reference that other assembly's own references, but has to explicitly list them. Therefore, changing references in an assembly definition or assembly does not impact other consumers. ",1862],["Changing the Allow unsafe code property in assembly definitions This property controls whether the compiler is allowed to compile code that has the unsafe modifier. Changing that flag on its own does not alter the public API. ",1862],["Changing the Override References property in assembly definitions This property controls how Unity invokes the compiler for this assembly, and has no effect on consumers of the resulting assembly. Changing that flag on its own does not alter the public API. ",1862],["",1862],["Package manifest files",1862],["The package manifest file (package.json) specifies the name, version, package dependencies, and other metadata about the package itself.",1862],["This section details changes in package manifest files, and the impact on the package version:",1862],["",1862],["Name changes (not allowed)",1862],["Changing the name property is the equivalent of removing one package and adding a new package with a different name, and it is not supported. You cannot rename a package by trying to release an update: you have to release it as an entirely new package. Name changes aren't allowed because existing projects and packages cannot interpret the names as synonyms.",1862],["",1862],["Dependency changes",1862],["Changing a dependency in a project does not in itself require a different MAJOR or MINOR version, unless it is part of an API change or if the Auto Referenced property is enabled.",1862],["This section provides examples of dependency changes and the contexts in which they apply (assuming that the Auto Referenced property is disabled and there is no API change other than what each case describes):",1862],["Dependency change Context Minimum version change ",1862],["----------------------- ------------------------------------------------------------ -------------------------- ",1862],["Adding a new dependency • Uses the new package without changing functional behavior, and doesn't change the API surface. PATCH ",1862],[" &#8226; Uses the new package to introduce new behavior, without modifying the API surface.<br />&#8226; Creates new APIs that expose types defined in the new package. MINOR \n",1862],[" &#8226; Uses the new package to change existing behavior in a way that is not backwards-compatible, without modifying the API surface.<br />&#8226; Modifies existing APIs in a way that is not backwards-compatible to expose types defined in the new package. MAJOR \n",1862],["Removing a dependency • Removes the package without changing functional behavior, and doesn't change the API surface. PATCH ",1862],[" &#8226; Removing the package results in a change in existing behavior in a way that is not backwards-compatible, without changing the API surface.<br />&#8226; Removes APIs that expose types defined in that dependency. MAJOR \n",1862],["Changing a dependency • Uses the modified package without changing functional behavior, and doesn't change the API surface. PATCH ",1862],[" &#8226; Uses the modified package to introduce new behavior, without modifying the API surface.<br />&#8226; Creates new APIs that expose types defined in the modified package. MINOR \n",1862],[" &#8226; Uses the modified package to change existing behavior in a way that is not backwards-compatible, without modifying the API surface.<br />&#8226; Changes existing APIs in a way that is not backwards-compatible to expose types defined in the modified package.<br />&#8226; Exposes some types in APIs that are changed in a non-backward-compatible way in the modified package.<br />&#8226; Exposes some types in APIs that are no longer defined in the modified package. MAJOR \n",1862],["",1862],["MAJOR, MINOR or PATCH: other changes",1862],["You can change package manifest attributes that have no special effect on the Package Manager, the build pipeline, the scripting pipeline or the Asset Database in any release version. This includes changing the description, the category, the keywords, or the displayName.",1862],["If you change these fields, that might indicate that your changes involve more than just bug fixes. Always consider whether other changes in the new version actually mandate a new MINOR or MAJOR release rather than a PATCH release.",1862],["Note**: Changes to the unity or unityRelease properties in a package's manifest always require either a MINOR or MAJOR release. Although the properties do not affect the package API itself, increasing the Unity version excludes a package version from working on previous Unity editors and might break a dependent project or package. Decreasing the Unity version makes the package available to older Unity editors.",1862],["",1862],["Deprecated and obsolete APIs",1862],["When you want to remove some functionality from your API, first release at least one MINOR version containing the deprecation. This warns users about the impending removal, so they can transition to the new API smoothly. Then you can remove the functionality in a new MAJOR release.",1862],["If another developer marks a package obsolete with a warning and you enabled Warnings as Errors in your project, the obsolete package might technically break your project, even though it is not a true break because the code still works as it did previously.",1862],["In this case, you can choose how you want to fix the warning-as-error (in descending order of typical desirability):",1862],["Change your code so you no longer use the API.",1862],["Wrap your code that uses the API in #pragma warning directives to silence the warning.",1862],["Disable warnings CS0612 (Obsolete) and CS0618 (Obsolete with a message).",1862],["Disable Warnings as Errors in your project.",1862],["Access the Package Manager window",1863],["To open the Package Manager window, navigate to Unity's main menu and go to Window > Package Manager.",1863],["Additional resources",1863],["",1863],["Adding and removing",1864],["You can perform a variety of tasks through the Package Manager window:",1864],["The procedures described in these sections obscure a lot of the details of what the Package Manager is actually doing behind the scenes. The Package Manager window provides an intuitive interface to install and uninstall packages, by adding and removing packages as project dependencies in your project's manifest, and then selecting the correct version to install. The version that Package Manager selects doesn't always match the version you indicated. For more information, see Dependency and resolution.",1864],["",1864],["Details view",1865],["In the Package Manager window, the pane on the right displays details of the selected package.",1865],["These details include the following information:",1865],["(A)** The display name.",1865],["(B)** The package version, the date the package was published to the registry or the Asset Store, and any source or asset labels. Other information might display, if applicable:",1865],["The information button might also appear before the version. When you click the information button, Unity displays information about the package (for example, if the package version you requested does not match the version installed).",1865],["For Unity packages, a lock icon () appears before the version number when an installed feature set requires the selected package. It prevents you from accidentally changing the version of the package so the feature set continues to work effectively.",1865],["(C)** The registry that hosts the package and the package author (Unity packages only), or the package publisher (Asset Store).",1865],["(D)** The package name.",1865],["(E)** For Unity packages, the links to open the package documentation page, the package change log (if available), and the license information. For Asset Store packages, the links to open the Asset Store package's official page on the Asset Store, and if available, links to the publisher's website and their support page.",1865],["(F)** Package details tabs, which vary by package type:",1865],["For Unity packages:",1865],["Description**: A brief description of the package.",1865],["Version History**: Package Manager always lists the installed or recommended package versions, with action buttons to install, update, or remove. Package Manager also lists other supported versions, if available. Expand each entry to see the release date, changelog for that version, and a link to the full changelog.",1865],["Dependencies**: Dependency information for the package. This section lists dependencies in two directions:",1865],["Is using**: Whether this package depends on another package, and if so, which version. Installed packages display the status of the dependencies after the version number.",1865],["Used by**: Whether another package depends on this one, and if so, which version.",1865],["Samples**: This tab displays only if the package author provided samples. The tab displays a description and an Import button next to the sample.",1865],["For Asset Store packages:",1865],["Overview**: Information about the package:",1865],["Any custom labels you assigned this Asset Store package.",1865],["The supported versions of Unity.",1865],["The disk space required.",1865],["The date you purchased the Asset Store package.",1865],["A brief description of the package.",1865],["Releases**: Release information, including when the package was originally released and when the current version was released.",1865],["Images**: Thumbnails of the marketing images, audio, and video available on the Asset Store for Asset Store packages.",1865],["(G)** Button(s) to unlock, install, update, remove, or disable the Unity package.",1865],["(H)** Button(s) to download, import, or update the Asset Store package.",1865],["",1865],["Labels",1865],["Some packages and Asset Store packages display labels next to the package name or version number. These labels provide information about the source or state of the package:",1865],["Source label types indicate where the package originates from (for example, whether it comes from a local folder or is downloaded from the package registry).",1865],["State label types indicate the package's stage of the development cycle. For example, whether it is custom, an experimental package, or on the release track for a specific Unity version.",1865],["Asset Store labels indicate that the Asset Store package originated from the Asset Store and may also indicate some special status (for example, deprecated).",1865],["Some source labels imply state labels and vice versa (for example, if a package is embedded in your project, then Unity automatically assumes it is a custom package in development, so only the custom label appears in the details view).",1865],["The Package Manager window displays the following values:",1865],["Label Type Meaning ",1865],["---------------------------------- -------- ------------------------------------------------------------ ",1865],["Released state Unity officially released this package and fully supports it. The Quality Assurance team has tested this version of the package and guarantees that it works with a specific version of the Editor and all other packages released for that Editor version. ",1865],["Release Candidate state This version of the package is on track to be fully \"released\" within the next TECH stage of the current release cycle. ",1865],["Pre-Release state This version of the package is at an earlier stage of development, but Unity guarantees to release it by the end of the LTS release cycle. It might not have complete documentation, or it might not be fully validated by either the development team or Unity's Quality Assurance team. ",1865],["Experimental state These packages are either new packages or contain experimental modifications. Unity does not support Experimental packages because they are in the early stages of development. ",1865],["Custom statesource This package is embedded in your project. Most custom package developers start by embedding a new package in their project, which is why the \"Custom\" label appears. ",1865],["local source The Package Manager installed this package from a folder or tarball file on your local disk external to your Unity project folder. ",1865],["git source The Package Manager installed this package in your project directly from a Git repository. ",1865],["asset store asset This is an Asset Store package that you purchased or downloaded from the Asset Store. ",1865],["deprecated asset This package is no longer available on the Asset Store unless you have downloaded or purchased it previously. That is, it is no longer discoverable by new customers.Note: This label applies only to Asset Store packages. Unity packages that have been deprecated never appear in the Unity Editor. ",1865],["",1865],["Disabling a built-in package",1866],["You can disable a Built-in package if you don't need some modules and you want to save resources. However, when you disable a built-in package, the corresponding Unity functionality is no longer available. This results in the following:",1866],["If you use a Scripting API implemented by a disabled package, you get compiler errors.",1866],["Components implemented by the disabled built-in package are also disabled, which means you cannot add them to any GameObjects. If you have a GameObject that already has one of these components, Unity ignores them in Play mode. You can see them in the Inspector window but they are greyed out to indicate that they are not available.",1866],["When building a game, Unity strips all disabled components. For build targets which support engine code stripping (like WebGL, iOS, and Android), Unity doesn't add any code from a disabled built-in package.",1866],["To disable a built-in package:",1866],["Open the Package Manager window and select Built-in packages from the Packages drop-down menu.",1866],["Select the built-in package you want to disable. Its information appears in the details view.",1866],["Click the Disable button.",1866],["When the progress bar finishes, the check mark no longer appears next to the built-in package and the Disable button becomes an Enable button.",1866],["If you want to re-enable a disabled built-in package, click the Enable button.",1866],["Note**: You can disable multiple built-in packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1866],["",1866],["Packages list context",1867],["To change which packages appear in the list, select the context you want from the Packages drop-down menu on the Package Manager window.",1867],["You can select from these options:",1867],["Context: Description: ",1867],["------------------ ------------------------------------------------------------ ",1867],["Unity Registry Displays all feature sets and packages on the Unity package registry, regardless of whether they are already installed in your project. This does not include packages installed from any other location or from any scoped registry.This is the default list context. ",1867],["My Registries Displays any packages available from any scoped registry installed in this project.Note: If you added a scoped registry but you don't see it in the My Registries context or the My Registries context isn't available at all, it might be because the package registry server you added does not implement either of the /-/v1/search or /-/all endpoints, which means that it is not compatible with Unity's Package Manager. ",1867],["In Project Displays all feature sets and packages currently installed in your project, including local, git, and embedded packages, and packages installed from any registry. ",1867],["My Assets Displays all Asset Store packages (.unitypackage) that you have purchased using the Unity ID you are currently logged in with. ",1867],["Built-in Displays only built-in Unity packages, which represent some of the core Unity features. You can use these packages to turn Unity modules on and off.Tip: You can find out more about what each built-in package (module) implements in the Unity Scripting API. Each module assembly page lists which APIs the built-in package implements. ",1867],["When you select a new context, your choice appears on the Packages drop-down menu and the list displays the feature sets and packages matching your choice.",1867],["Note**: If you entered any text in the search box or set any filters, the list only displays feature sets and packages which match the context, the search criteria, and the active filters.",1867],["",1867],["My Assets context added in Unity 2019.3 NewIn20193",1867],["Unity Registry context replaced the All packages context and the My Registries context added in Unity 2019.4 NewIn20194",1867],["Filtering Asset Store packages added in Unity 2020.1 NewIn20201",1867],["",1867],["Filtering the list",1868],["To narrow down which packages appear in the list, select the Filters menu from the Package Manager window.",1868],["Using the My Assets list as an example, you can use the following types of filter options to narrow down the list of Asset Store packages displayed:",1868],["The Status group lets you choose one Status to remove any package that doesn’t match. For example, if you choose Unlabeled, then only those Asset Store packages that you never assigned a label to appear in the list.",1868],["Choose any of the Categories to keep all Asset Store packages that match any selection.",1868],["Choose any of the Labels that you applied to your Asset Store packages before. You can search for the label name if you don’t see it right away. If you select more than one label, then only those packages that match any one label remain in the list.",1868],["If you need to start over, click Clear Filters beside the Filters menu to reset all filter options to their default values.",1868],["",1868],["Filtering Asset Store packages added in Unity 2020.1 NewIn20201",1868],["Finding packages and feature sets",1869],["The Package Manager window provides several ways to help you find a specific package or feature set:",1869],["",1869],["",1869],["(A) Packages list context Choose the \"context\" that determines what appears in the list. The context might be the source of the package, such as a registry server, the Asset Store, or the Unity Editor itself (for built-in packages). However, the In Project context displays only those packages and feature sets that are already installed in the current project, regardless of their origin.For example, you can choose the My Assets context to display only Asset Store packages available to you in the list, or choose the In Project context to display only Unity packages and feature sets that are already installed in your project. ",1869],["(B) Sort Sort the list in either ascending or descending order by name, published date (Unity Registry, My Registries, In Project only), purchased date (Asset Store packages only), or recently updated (In Project and My Assets only). For example, if you want to find a Unity package that had a recent update but you can't remember the name of it, try sorting by Recently updated in descending order and browse the list from the top down to find it. Sorting affects the items under each expander, but leaves the expanders in place. If you sort from Z-A, the Package Manager reorders all the feature sets from Z- A inside its expander, and all the packages under each expander but doesn't mix the content in the list. ",1869],["(C) Filters Select options to narrow down the packages listed. Packages listed in My Assets have enhanced filtering options:- Status (Downloaded, Update available, Unlabeled, Hidden, Deprecated)- Categories (2D, 3D, Audio, Templates, Tools, etc.)- Labels (Custom labels you define in the Asset Store) ",1869],["(D) Search Use the search box to look for a Unity package or an Asset Store package by name. ",1869],["These controls help narrow down which packages and feature sets appear in the list view and in what order. This makes it easier to find what you are looking for or help you browse when you don't know exactly what you want.",1869],["When you use several of these controls at the same time, you narrow the set of matches that appears in the list.",1869],["After you find the Unity package you need, you can select it, then potentially locate a specific version in the details view. For feature sets, there's always only one version available, so you can either install it or remove it.",1869],["",1869],["Finding a specific version",1869],["To find a specific package version:",1869],["In Unity, open the Package Manager window (navigate to Unity’s main menu and go to Window > Package Manager).",1869],["If you are looking for a pre-release package, follow these steps:",1869],["Select Project Settings under the Advanced menu.",1869],["The Package Manager Project Settings window appears.",1869],["Under the Advanced Settings group, enable the Enable Pre-release Packages option.",1869],["Close the Project Settings window. Any pre-release packages now appear in the list with the indicator.",1869],["You can either browse the list of packages or find a specific package using one of these methods:",1869],["Search for a package by name or keyword.",1869],["Sort the list (for example, by last updated in descending order to find the most recently updated packages).",1869],["Apply filters to the list.",1869],["Select a package from the list of packages.",1869],["In the details view, select the Version History tab. If multiple versions are available, expand the entries to see information specific to each version.",1869],["You can perform a variety of actions when you expand a specific version in the Version History tab:",1869],["You can view the changelog for that version and click Changelog to see the full list of changes across versions.",1869],["If you don't already have this package installed in your project, you can install this version.",1869],["If another version of this package is already installed in your project, you can update the package to this version.",1869],["If you installed this package in your project but don't want it anymore, you can remove the package from your project.",1869],["",1869],["Install a package from a Git URL",1870],["The Package Manager can load a package from a Git repository on a remote server.",1870],["Prerequisites",1870],["Install the Git client (minimum version 2.14.0) on your computer.",1870],["On Windows, add the Git executable path to the PATH system environment variable.",1870],["If the target repository tracks files with Git LFS, install the Git LFS client on your computer.",1870],["Read the information about using Git dependencies in your project.",1870],["Procedure",1870],["To load a package from a Git URL:",1870],["Open the add menu in the Package Manager's toolbar.",1870],["The options for adding packages appear.",1870],["Select Add package from git URL from the add menu. A text box and an Add button appear.",1870],["Enter a valid Git URL in the text box and click Add. For more information about how to construct a valid Git URL, see Git URLs and extended syntax. Unity supports several Git protocols and some custom or extended syntax.",1870],["If Unity was able to install the package successfully, the package now appears in the package list with the label. If Unity wasn't able to install the package, the Unity Console displays an error message, such as:",1870],["Click on an error message link to get some help for it on the Troubleshooting page.",1870],["Tip**: If you want to check for updates and update your Git dependency to the latest version from the repository, click Update. You can also use the Add package from git URL menu item to update your Git dependency. For information on Git dependencies, see Locked Git dependencies.",1870],["",1870],["Importing an Asset Store package",1871],["You can import an Asset Store package in the Package Manager window:",1871],["Open the Package Manager window and select My Assets from the Packages menu.",1871],["The list view displays any Asset Store packages that you have purchased.",1871],["If many Asset Store packages appear in the My Assets list, you can search for a specific Asset Store package by name or version number.",1871],["Select the Asset Store package you want to import from the list of packages. The Asset Store package information appears in the details view.",1871],["If you haven't downloaded the Asset Store package to this computer or device before, the Download button appears. Otherwise, the Import button appears instead and you can skip to step 6 to import the Asset Store package right away.",1871],["Click the Download button to download the Asset Store package if it appears in the details view.",1871],["While the Asset Store package downloads to your computer, a progress bar appears and Pause and Cancel buttons replace the Download button you clicked.",1871],["These buttons give you control over the download progress:",1871],["Click the Cancel button to stop the download entirely.",1871],["Click the Pause button to pause downloading. You can click the Play button to continue.",1871],["When the download finishes, the Package Manager replaces Download with Re-Download, and an Import button appears next to Re-Download.",1871],["Click the Import button to import the selected Asset Store package.",1871],["If the Asset Store package is a complete project, a confirmation dialog appears. See Importing a complete project from the Asset Store.",1871],["For all other Asset Store packages, the Import Unity Package window displays all the items already selected in the package, ready to install.",1871],["Clear any items you don't want to import and click Import.",1871],["The Package Manager puts the contents of the imported Asset Store package into the Assets folder, so that you can access them from your project window.",1871],["Note**: You can download multiple packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1871],["",1871],["Importing a complete project from the Asset Store",1871],["A complete project contains assets and project settings. The process for importing a complete project is similar to other Asset Store packages, except for an additional step for project settings.",1871],["The project settings in the complete project might conflict with settings in your project, so when you import a complete project from Asset Store, the Package Manager offers a choice.",1871],["Choose Import if you’re sure that you want to add the package’s assets to your project. An Import Unity Package dialog box appears, like the one pictured below. Clear any asset content you don’t want to import and click Next. The second step of the dialog box lists the package’s project settings. If you have any of those project settings in your project, Package Manager identifies them with an Override flag; they will be overwritten with the project settings from the package unless you clear the selection. Clear any project settings you don’t want to import and click Import.",1871],["Choose Switch Project if you want to explore the package’s assets and project settings in a safe environment. Choosing Switch Project creates a new, temporary project that contains only that package’s assets and project settings. After exploring the temporary project, you can close it without saving. If you want to continue to use that package in your main project, return to your main project and import the package again. Choose Import on the warning dialog box that appears.",1871],["",1871],["Additional resources",1871],["Install a package from a registry",1872],["Note**: When you install a package through the Package Manager window, the Package Manager evaluates other packages and their dependencies to see if there are any version conflicts with the version you selected. If it detects any conflicts or restrictions, it installs whatever version resolves these issues. For more information, see Dependency and resolution.",1872],["Use the same process for installing a package from either the Unity registry or any scoped registry defined in your project. The only difference is what you choose from the Packages drop-down menu:",1872],["Open the Package Manager window and select Unity Registry from the Packages drop-down menu. If you set up a scoped registry and you want to install a package from a scoped registry, choose My Registries instead.",1872],["Note**: If you haven't defined any scoped registries for this project, My Registries doesn't appear in the drop-down menu.",1872],["Select the package you want to install from the list of packages. The package information appears in the details view.",1872],["Note:** If you don't see the package you want to install in the list of packages, it might be an undiscoverable package, such as experimental and pre-release packages. The Package Manager doesn't display experimental packages unless they are already installed, but pre-release packages appear in the Package Manager when you enable the Enable Pre-release Packages project setting.",1872],["Select the version to install. For more information on available versions, see Finding a specific version.",1872],["Click the Install button.",1872],["When the progress bar finishes, the new package is ready to use.",1872],["Note**: You can install multiple packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1872],["",1872],["List view",1873],["The Package Manager window displays the list of feature sets, packages, or Asset Store packages according to the criteria that you select by filtering, including, or searching:",1873],["(A)** Feature sets appear at the top of the list view, indicated with the feature set icon (). Toggle the expander icon to show or hide the list of feature sets. When you select a feature set from the list, details about it appear on the right, including a brief description, a list of included packages, and a link to the QuickStart guide for that feature set.",1873],["(B)** Registry groups organize the list of packages installed in your project (or available for installation when you are in the My Registries context). Select the expander on the left to show or hide the list of packages for each registry.",1873],["",1873],["(C)** Icons display in this column when a package is locked () or installed as a dependency (), and more.",1873],["(D)** The package version displays the version of the package that's installed. If the package is not yet installed, the version that appears is the recommended version. Special icons often appear beside the version number indicating its state:",1873],["For Asset Store packages, the version that appears is either the version you already downloaded or the version that is available for download from the Asset Store.",1873],["(E)** These icons display the status of the package or Asset Store package:",1873],["Icon: Description ",1873],["------------------------------------- ------------------------------------------------------------ ",1873],[" A check mark indicates that the package or feature set is already installed or enabled.Note: Installed Asset Store packages display the import icon () if they are up to date. ",1873],[" The update icon indicates that the package has an available update. To update your package, follow the instructions for either type of package:- For Unity packages, see Switching to another package version. - For Asset Store packages, see Updating your Asset Store package.- Feature set versions are fixed to the Editor version and can't be updated. ",1873],[" The import icon indicates that there is an Asset Store package available to import. It also appears when you have imported the Asset Store package in the project already. ",1873],[" The download icon indicates that there is an Asset Store package available to download. ",1873],[" An error icon indicates that something went wrong during installation or loading. For more advice on resolving errors, see Error messages. ",1873],["(F)** The My Assets context displays a counter showing the number of Asset Store packages available but not shown in the list. To load more Asset Store packages, click the Load link.",1873],["Note**: If you select the My Assets context but you don't see any packages, see Error messages in the Package Manager window for an explanation and solution.",1873],["(G)** The status bar displays messages about the package load status and network warnings.",1873],["(H)** Click the reload button to force Package Manager to reload your packages and feature sets.",1873],["By default, the Package Manager window displays the list of all packages and feature sets available in the selected context, but you can filter the list to display packages and feature sets that meet your criteria. While viewing the Unity Registry or In Project context, you can also switch from the All tab to the Services tab to display services only.",1873],["You can also include pre-release packages in the list and search for a specific package or feature set by name (ID) or display name.",1873],["",1873],["Install a package from a local folder",1874],["The Package Manager can load a package from anywhere on your computer even if you saved it outside your Unity project folder (for example, if you have a package called com.unity.my-local-package and you save it on the Desktop but your Unity project is under the Documents folder).",1874],["You can also use a folder inside your project folder, provided that it is not one of the reserved project sub-folders.",1874],["To load a package from your local disk:",1874],["Open the Package Manager window, if it's not already open.",1874],["Click the add button in the status bar. The options for adding packages appear.",1874],["Select Add package from disk from the add menu to bring up a file browser.",1874],["Navigate to the folder root of your local package.",1874],["Double-click the package.json file in the file browser.",1874],["The file browser closes, and the package now appears in the package list with the label.",1874],["Remember that if you updated to the registry version but you made changes locally to your project, the registry version will overwrite your local changes.",1874],["",1874],["Local packages inside your project",1874],["You can place a local package anywhere inside your project except under these folders:",1874],["Project folder: Reason: ",1874],["------------------- ------------------------------------------------------------ ",1874],["Assets If you place a package inside this folder, the Asset Database imports any assets under this folder twice: once as assets and once as package contents. ",1874],["Library Do not modify the contents of this folder. ",1874],["ProjectSettings This folder is for settings assets only. ",1874],["Packages If you place a package under this folder, the Package Manager automatically interprets it as an Embedded package, regardless of the reference in the project manifest. ",1874],["",1874],["Perform an action on multiple packages",1875],["You can select multiple packages or feature sets in the Package Manager list view and perform an operation on all selected items at once.",1875],["For example, you can use this feature to update multiple packages to their latest versions in one operation.",1875],["The following table lists shortcuts you can use to select multiple items.",1875],["Selection type Keyboard shortcut ",1875],["---------------------------------- ------------------------------------------ ",1875],["Select all items in the list Command + a (macOS) or Ctrl + a (Windows and Linux). ",1875],["Select a range with keyboard and mouse Select the first item in the range, hold the Shift key, then select the last item in the range. ",1875],["Select a range with arrows keys Select the first item in the range, hold the Shift key, then use the Up arrow key or Down arrow key to extend the range. ",1875],["Select multiple items that aren't grouped together Select an item, hold Command (macOS) or Ctrl (Windows or Linux), then select additional items. ",1875],["To apply an operation to multiple packages or feature sets, follow these steps:",1875],["Open the Package Manager window and select a context from the Packages menu.",1875],["Select an appropriate list.",1875],["Optional: Use the filter controls to narrow your list.",1875],["Optional: Use the sort controls to order your list.",1875],["Select multiple packages or feature sets from the list by using one of the shortcuts in the table above.",1875],["Optional: Open the expander in the details view to see more information about the selected items, such as the packages' version number.",1875],["Click the action button in the details view to perform that operation on the selected items.",1875],["Note**: The Import and Re-Download operations from the My Assets list aren't supported if you select multiple packages.",1875],["Additional resources",1875],["Install a package from a registry by name",1876],["If you know the exact name of the package you want to install, you can use the Add package by name option to install it. This is a quick way to install a package from a registry.",1876],["Specifying the version is optional. If you don't know which version to install, or want to install the latest compatible version, enter only the package name.",1876],["Note:** The latest compatible version might not be the latest published package. If there is a released package version and a newer pre-release or experimental version, Package Manager selects the released package version, unless you explicitly input a value in the optional Version field.",1876],["",1876],["Before you begin",1876],["Make sure you know the package's name. The package name is a unique identifier, not the display name used on user interfaces and documentation.",1876],["For packages in the Unity registry, the name's unique identifier uses reverse domain name notation, in the format com.unity.example. For packages in a scoped registry, the name might not follow the same pattern.",1876],["For the Unity registry and any scoped registry you've added, if you can see the package in Package Manager, select it and view its details in the Inspector window. The Name value is the package name.",1876],["Other ways of determining a package name vary, depending on the registry that hosts it:",1876],["For a package in the Unity registry:",1876],["Use the lists in Released packages and Pre-release packages to identify a package by its display name, such as 2D Animation. The hyperlink value is the name of that package; in this case, com.unity.2d.animation.",1876],["The package documentation might have installation instructions that explicitly provide the name value.",1876],["The package documentation URL often nests the package name in its address. Using the AR Foundation",1876],["package as an example, its package documentation URL is https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/manual/index.html; the com.unity.xr.arfoundation component is that package's name.",1876],["For a package in a scoped registry, if you can't determine its name by using the Package Manager and Inspector windows, contact the package creator and request the package name. The package creator recorded this value as a required property in the package manifest file (package.json).",1876],["Procedure",1876],["To add a registry package by name, follow these steps:",1876],["Open the Package Manager window, if it's not already open.",1876],["Click the add button in the status bar. The options for adding packages appear.",1876],["Select Add package by name from the add menu. Two text boxes and an Add button appear.",1876],["Enter the package Name, as determined in the Before you begin section.",1876],["Note**: If you enter an invalid package name or version, Package Manager warns you that it can't find that name or version. Verify that the package name and version are correct and try again.",1876],["(Optional) If you know which version you want to install, enter the full package version, such as 1.3.0-pre.2, in the Version (optional) box.",1876],["Click Add. If Unity was able to install the package successfully, the package now appears in the package list like any other package installed from the registry.",1876],["Note**: This method works for any package and version that is currently hosted on the Unity package registry or any scoped package registry you have set up for the current project.",1876],["Remove imported assets from a project",1877],["When you import Asset Store assets, the Unity Package Manager places them in the Assets directory in your project.",1877],["You can manually remove assets from a project if you know the assets aren’t in use. You might consider this action to unclutter your project directory or to free up space on your local hard drive.",1877],["Warning**: Make sure your project isn’t using any of the assets you remove. Unlike installed packages, the Package Manager doesn’t track imported packages, so it can’t detect when you remove dependent assets.",1877],["Before you begin",1877],["Make sure you understand these important notes before you begin:",1877],["Use this procedure to remove assets only if you added them to the current project by importing them by following the Importing an Asset Store package procedure or by importing a custom package. Don’t use this procedure to attempt to remove packages that you installed from a registry. For information about removing packages that you installed from a registry, see Removing an installed package from a project.",1877],["This procedure removes assets from the current project. It doesn't remove the same assets that might exist in other projects. It also doesn't remove the package from the Asset Store cache. To completely remove an Asset Store package and its assets from your computer, you must remove them from multiple locations:",1877],["Use the following procedure to remove the assets from each project that uses them.",1877],["Delete this package from your Asset Store cache. See Delete a package from the Asset Store cache.",1877],["Procedure",1877],["To remove imported assets from your project:",1877],["Open your project.",1877],["Open the Package Manager window.",1877],["Open the Packages menu and select the My Assets context.",1877],["Select the package you want to remove from your project and take note of the package name (A) and the publisher name (B). These names might help you identify the asset directory in a later step.",1877],["Open the Project window.",1877],["Expand the Assets directory.",1877],["Locate the subdirectory for the package you identified in the Package Manager window in a previous step.",1877],["Explore the directory structure that the publisher created (C), confirm it’s the correct package, and identify the assets you want to delete (D). Note: Unity doesn’t impose directory names or structures on publishers, so their assets might not be in an easily identifiable directory. The directory structure might be simple or complex.",1877],["Select the asset or assets you want to delete. Your selection can be a single asset, multiple assets, all assets in a subdirectory, or more.",1877],["Right-click the selected items, and select Delete.",1877],["Important**:",1877],["Scenes that depend on deleted assets aren’t reported as errors in the Console window. If you suspect the removal caused issues, import the package again. Refer to Importing an Asset Store package.",1877],["Assets that you remove from your project remain in the My Assets list view. To remove those assets from My Assets, refer to Delete a package from the Asset Store cache.",1877],["Additional resources",1877],["Removing an installed package from a project",1878],["When you \"remove\" a package from your project, the Package Manager is actually removing the project's direct dependency from your project manifest. The result of removing the direct dependency varies, based on the dependencies for the package you are removing:",1878],["If there are no other packages or feature sets that have a dependency on this package, any Editor or run-time functionality that it implemented is no longer available in your project. For more information about direct and indirect dependencies, see Dependency and resolution.",1878],["If another installed package or an installed feature set depends on the package you are trying to remove, this procedure removes only the dependency from your project manifest. The package itself and all its functionality is still installed in your project, and appears in the In Project list context with the dependency icon .",1878],["",1878],["Before you begin",1878],["Make sure you understand these important notes before you begin:",1878],["Use this procedure to remove a package only if you added it to the current project by installing it, such as (but not limited to) Installing a feature set, Installing from a registry, and installing custom packages. Don’t use this procedure to attempt to remove packages that you imported to your project, such as an Asset Store package that you downloaded and imported. For information about removing Asset Store packages that you downloaded and imported, see Remove imported assets from a project.",1878],["If you use this procedure to remove a package that you installed from a registry, the operation removes the package from the current project. It doesn't remove the same package that might exist in other projects. It also doesn't remove the package from the global cache; this action isn't supported by the Package Manager, and manually manipulating the global cache is discouraged.",1878],["If you use this procedure to remove a package that you embedded in your project, the Package Manager deletes the entire package folder from your computer. However, removing packages installed from any other source (including local packages) removes only the reference to the package in the manifest but leaves the package itself and its contents intact.",1878],["Procedure",1878],["To remove an installed package:",1878],["Open the Package Manager window and select In Project from the Packages drop-down menu.",1878],["Select the package you want to remove from the list of packages. The details view now displays that package's information.",1878],["Click the Remove button. If this button is:",1878],["Not displayed, you might be viewing the My Assets list. See Before you begin.",1878],["Disabled, you can't remove this package. For more information, see Locked and non-removable packages.",1878],["When the progress bar finishes, the package disappears from the list.",1878],["If you want to restore a removed package, follow the instructions for installing a package.",1878],["Note**: You can remove multiple packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1878],["",1878],["",1878],["Locked and non-removable packages",1878],["You can only remove packages which are not required by another package or a feature set. The Package Manager enforces this by disabling the Remove button for all required packages.",1878],["Required by: Description: ",1878],["----------------------------------- ------------------------------------------------------------ ",1878],["A feature set If a feature set requires the package, it displays a lock icon () in both the list view and in the details view. The details view also displays the name of the feature set that requires the package below the package name in the details view. However, even if you click the Unlock button, you still can't remove the package from your project until you remove all feature sets which require it. Unlocking the package lets you request a different version for your project, but it still doesn't let you remove it. ",1878],["Another package If one or more packages require the selected package, the Remove button is disabled. You can find the name of the package that has the dependency from the Dependencies tab in the details view. If you don't need the other packages, you can remove them and the Package Manager automatically removes this package too. ",1878],["Note**: You can unlock multiple packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1878],["",1878],["Search box",1879],["You can use the search box at the top of the Package Manager window to find any packages or feature sets that match the text you enter. The Package Manager updates the list as you enter text, displaying every package or feature set within the current context that matches. For example, if you enter web in the search box, the list displays different results depending on whether you choose the Built-in packages list context or the Unity Registry list context:",1879],["You can look for a package or a feature set by its name (ID) or its display name. You can search for either the display name as it appears in the Package Manager window or, for Unity packages and feature sets, the registered package name that begins with com.unity.",1879],["Your search text could match the beginning, middle, or end of the name. The Package Manager updates the list dynamically.",1879],["Note**: You can search for either Unity packages and feature sets or Asset Store packages. The list context you choose defines where the Package Manager searches:",1879],["List context: Where the Package Manager searches: ",1879],["--------------------- ------------------------------------------------------------ ",1879],["Unity Registry The list of packages and feature sets on the Unity registry ",1879],["My Registries Any scoped registry defined for your project ",1879],["In Project The package cache and the Packages folder under your current project ",1879],["My Assets The list of Asset Store packages available with your Unity account ",1879],["Built-in packages The list of built-in packages on the Unity registry ",1879],["",1879],["Sorting the list",1880],["You can always sort in ascending or descending order on the name of the feature set or package. Depending on the list context, you might also have one or more dates you can sort on.",1880],["Context: Menu options: Description: ",1880],["------------------ ------------------------------------------- ------------------------------------------------------------ ",1880],["Unity Registry - Name- The date the creator published this feature set or package to the Unity registry ",1880],["My Registries - Name- The date the creator published this package to the scoped registry ",1880],["In Project - Name- The date the creator published this feature set or package to either the Unity or scoped registry - The date of the last update for this feature set or package ",1880],["My Assets - Name- The date you acquired this package from the Asset Store- The date of the last update for this Asset Store package ",1880],["Built-in - Name is the only sorting option ",1880],["Install a package from a local tarball file",1881],["The Package Manager can load a package from a tarball file stored locally. This is for advanced scenarios where you break your package publishing workflow into parts and your users can use the intermediate product of one of those parts.",1881],["For example, if you have set up continuous integration (CI) on your custom package repository, you can use the npm pack or Unity Package Manager's Pack API to create a Gzip tarball file from a package folder. In that case, you likely want to test the tarball file before you publish it to a custom registry.",1881],["To load a package from a local tarball file:",1881],["Open the Package Manager window, if it's not already open.",1881],["Click the add button in the status bar. The options for adding packages appear.",1881],["Select Add package from tarball from the add menu to bring up a file browser.",1881],["Navigate to the folder where you saved your tarball.",1881],["Note*: The Package Manager only recognizes tarballs with the *.tgz extension.",1881],["Double-click the tarball file in the file browser.",1881],["The file browser closes, and the package now appears in the package list with the label.",1881],["",1881],["Switching to another package version",1882],["Use the information on this page to update packages that were installed from the Unity Registry or a scoped registry, or from a local source.",1882],["If you want to install a specific version of a package, install the package by name and follow its optional step to specify a version.",1882],["If you want to update packages that were installed from a Git URL, you can use any of the following methods:",1882],["Locate the package in the Package Manager, select it, then click the Update button.",1882],["Reinstall it as a Git dependency using a new revision. For more information about how to specify revisions with Git dependencies, see Targeting a specific revision.",1882],["Reinstall it from the Unity Registry.",1882],["To update a package while in the In Project, Unity Registry, or My Registries context:",1882],["Open the Package Manager window and select In Project from the Packages menu.",1882],["An arrow icon () appears next to any packages that have updates available.",1882],["Select the installed package you want to update from the list of packages. The package information appears in the details view. ",1882],["The lock icon () indicates that this package and version is locked to an installed feature set. To unlock the package and select another version, click the Unlock button.",1882],["Note**: The package is temporarily unlocked. If you change to a different list context, or close either the Package Manager or the Editor, the package reverts to a locked state again. However, if you switch versions when the package is unlocked (for example, with the Install a package from a registry by name method), the package stays unlocked.",1882],["Select a package in the list of packages.",1882],["In the details view, select the Version History tab. If multiple versions are available, expand the entries to see information specific to each version.",1882],["Click the Update to button, or click the Update button beside the version listed in the Version History tab.",1882],["When the progress bar finishes, any new functionality is immediately available.",1882],["Notes:**",1882],["If you switch to an older version of a package, you might have to run the API Updater on the package contents.",1882],["You can switch versions for multiple packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1882],["",1882],["Updating your Asset Store package",1883],["You can update an Asset Store package in the Package Manager window:",1883],["Open the Package Manager window and select My Assets from the Packages menu.",1883],["An arrow indicator appears next to any Asset Store packages that have updates available.",1883],["To see the most recent updates for your Asset Store packages, sort the list by Recently updated.",1883],["Select the Asset Store package you want to update from the list of packages. The Asset Store package information appears in the details view.",1883],["Select the Releases tab to review the changes in the latest versions of the package.",1883],["Click the Update button.",1883],["Note**: If the downloaded version of your package isn’t compatible with your version of the Unity Editor, a message appears in the details view and an alternate Update button displays, which lets you download a compatible version of the package.",1883],["When the progress bar finishes, the new Asset Store package version information appears in the details view, and is immediately available.",1883],["Additional resources",1883],["You can update multiple Asset Store packages with one click by using the multiple select feature. For more information, see Perform an action on multiple packages or feature sets.",1883],["",1883],["",1883],["My Assets filter added in Unity 2019.3 NewIn20193",1883],["",1883],["Package Manager window",1884],["Use the Package Manager window (in Unity’s top menu: Window > Package Manager) to view which packages and feature sets are available for installation or already installed in your project. You can also use this window to see which package versions are available, and install, remove, disable, or update packages and feature sets for each project.",1884],["The Package Manager window displays:",1884],["(A)** The experimental package indicator, which warns you if your project contains experimental packages.",1884],["(B)** The add button, which you can click to install a package directly into your project by entering a git URL, a local path, or a package name.",1884],["(C)** The Packages menu, which you can use to change what appears in the list (context).",1884],["(D)** The Sort menu, which you can use to sort the list of packages and feature sets by name or date.",1884],["(E)** The Filters menu and the Clear Filters button display on all lists except the Built-in list. Filtering allows you to narrow down which packages appear in the list.",1884],["(F)** The Advanced menu , which you can use to access the project settings for the Package Manager and more. See Advanced settings for details.",1884],["(G)** The search box, which you can use to look for packages and feature sets by name.",1884],["(H)** The list view, which displays packages that match the filter and search parameters you specify. The All tab lists all packages that meet your filter and search criteria, while the Services tab filters the list further to display services.",1884],["(I)** The detail view, which displays information specific to the feature set or package selected in the list.",1884],["(J)** The package details tabs, which display further information about the selected feature set or package. The tabs are dynamic, based on the selected item. For information about these tabs, see Details view.",1884],["(K)** Buttons to perform any of the following actions at the project level:",1884],["Install, update, or remove packages",1884],["Download and import, or update Asset Store packages",1884],["Disable or enable built-in packages",1884],["(L)** The status bar, which displays information when the Package Manager loads packages and feature sets. This information includes errors and warning messages, the number of Asset Store packages available, and a link to load more Asset Store packages.",1884],["(M)** The Refresh list button lets you refresh the list of packages displayed. In the My Assets context, Refresh list is a menu, which contains a Check for updates option, so you can check for updates to all packages on your computer; not just the ones that are visible in the My Assets context.",1884],["",1884],["Advanced settings",1884],["The advanced settings menu allows you to perform these actions:",1884],["Menu item Action results ",1884],["------------------------------ ------------------------------------------------------------ ",1884],["Project Settings Select this item to open the Package Manager project settings, where you can:- Add, edit, and remove scoped registries in your project. - List pre-release packages when browsing the Unity Registry. ",1884],["Manual resolve Select this item to force the Package Manager to resolve the project's packages. If needed, it reinstalls altered or missing packages and removes extraneous packages. ",1884],["Preferences Select this item to view and set Preferences for the Unity Editor and related windows and tools. ",1884],["Reset Packages to defaults Select this item to return to Package Manager default settings. Warning: This removes all customization from your project manifest file. Use this action only as a last resort when you can't figure out what's wrong with your project manifest file. ",1884],["",1884],["Status bar",1884],["The Package Manager displays messages in the status bar at the bottom left of the Package Manager window.",1884],["There are typically four status messages that you might see:",1884],["The first time you open the Package Manager window in a new project, the Refreshing packages and features message appears briefly:",1884],["This message also appears when you click Refresh list ",1884],["When the My Assets context is active, the load bar appears above the date. It displays the number of Asset Store packages and a Load link:",1884],["Most of the time the status bar displays the date and time of when the Package Manager window last refreshed its information. However, if the Package Manager detects a problem, such as a network issue, the Package Manager displays an error in the status bar:",1884],["If your network connection is working, but you aren't signed into your Unity account, the Package Manager doesn't display any Asset Store packages. When you try to use the My Assets context, the Package Manager displays an error in the status bar:",1884],["In the list view, click Sign in to sign in to your Unity account through the Unity Hub.",1884],["For information on how to resolve these errors and more, see Error messages.",1884],["",1884],["Additional resources",1884],["Uses of layers in Unity",1885],["You can use layers to optimize your project and workflow. Common uses of layers include:",1885],["Layer-based rendering.",1885],["Layer-based collision.",1885],["Use the Camera culling mask with layers.",1885],["You can render only the objects in a particular layer, or selection of layers, if you use the Camera’s culling mask. To change the culling mask, select the camera you want to use, and select the Culling Mask dropdown in the Inspector window. If you clear the checkbox of a layer, it doesn’t render in the scene.",1885],["Note**: UI elements and screen space canvas children are exceptions to this and render regardless.",1885],["Ray cast with layers",1885],["You can use layers to specify which GameObjects that a ray cast can intersect with. To make a ray cast ignore a GameObject, you can assign it to the Ignore Raycast layer, or pass a LayerMask to the ray cast API call.",1885],["If you don't pass a LayerMask to the ray cast API call, Unity uses Physics.DefaultRaycastLayers which matches every layer except Ignore Raycast.",1885],["The Physics.Raycast function uses a bitmask, and each bit determines if a layer is ignored by rays or not. If all bits in the layerMask are on, the ray collides against all colliders. If the layerMask = 0, there are no collisions.",1885],["For example, if you want to cast a ray on layer 8, see the code sample below:",1885],["int layerMask = 1 << 8;",1885],["// Does the ray intersect any objects which are in layer 8?",1885],["if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))",1885],["Debug.Log(\"The ray hit the player\");",1885],["You can then do the inverse, so that the ray collides with all layers except layer 8.",1885],["void Update ()",1885],["// Bit shift the index of the layer (8) to get a bit mask",1885],["int layerMask = 1 << 8;",1885],["// This casts rays only against colliders in layer 8.",1885],["// But to collide against everything except layer 8, use the ~ operator because it inverts a bitmask.",1885],["layerMask = ~layerMask;",1885],["RaycastHit hit;",1885],["// Does the ray intersect any objects excluding layer 8.",1885],["if (Physics.Raycast(transform.position, transform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layerMask))",1885],["Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow);",1885],["Debug.Log(\"Did Hit\");",1885],["else",1885],["Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white);",1885],["Debug.Log(\"Did not Hit\");",1885],["Note**: If you don't pass a layerMask to the Raycast function, it still ignores colliders that use the IgnoreRaycast layer.",1885],["SkyManager",1886],["Understanding the SkyManager",1886],["Unity includes a dedicated manager—the SkyManager—to ensure that environment lighting affects your scene by default. The SkyManager automatically generates an ambient probe and default reflection probe to capture environment lighting.",1886],["Unity updates these probes each time environment lighting in your scene changes, until the moment you generate lighting. After you generate lighting, Unity bakes the current environment light values into the probes.",1886],["When you specifically use the Generate Lighting control to manually bake your lighting, Unity stops updating the probes from that point onward and only updates them again at the next bake. If you want Unity to continue to update the probes each time the environment lighting changes, enable the Auto Generate option.",1886],["If you remove the Lighting Data Asset from your project, Unity continues to update the probes each time the environment lighting changes.",1886],["",1886],["Disabling the SkyManager",1886],["To prevent the environment contribution from automatically affecting the lighting result for a scene or GameObject that does not have manually created light maps and Light Probes, disable the default Reflection Probe and the ambient probe.",1886],["To disable these probes, navigate to Window > Rendering > Lighting Settings > Environment, then make one of the following changes:",1886],["Option 1: Set Intensity Multiplier to 0.",1886],["Option 2: Use a black Skybox Material.",1886],["Option 3: Set either the Color or Gradient for the Source to black.",1886],["Disable the SkyManager for all scenes",1886],["To prevent the environment contribution from automatically affecting the lighting result for all scenes, navigate to Window > Rendering > Lighting Settings > Scene, then disable Recalculate Environment Lighting.",1886],["Use components",1887],["You can use different components to change or add functions to your GameObjects. You can use the Inspector window to change the properties of any component, or you can use scripts.",1887],["For more information on how to use your components with scripts, see the components script reference page.",1887],["Add components",1887],["You can add components to the selected GameObject through the Component menu. To add a Rigidbody component, select the GameObject and select Component > Physics > Rigidbody from the menu. The Inspector displays the Rigidbody's properties. If you press Play while you have the empty GameObject selected, the Y position of the GameObject's transform decreases. This is because the physics system in Unity causes the GameObject to fall under gravity.",1887],["You can also add components in the Component browser. To open the Component browser, select Add Component in the Inspector.",1887],["You can navigate the components by category in the browser or use the search box to locate components by name.",1887],["You can attach any number or combination of components to a single GameObject. Some components work best in combination with others. For example, the Rigidbody works with a Collider.",1887],["For more information about a particular component, see the relevant Component reference page. You can also access the reference page for a component from Unity if you select the help icon (?) on the component's header in the Inspector.",1887],["Edit components",1887],["When you attach a component to a GameObject, the component’s properties contain default values. You can edit these values in the Editor while you build a game, or in scripts when you run the game.",1887],["There are two main types of properties: values and references.",1887],["You can edit value properties in the Inspector. There are various types of values, including text, toggles and dropdowns.",1887],["For reference properties, you can drag a file from the Project view into the property, or use the object picker (circle icon) on the property. Reference properties can reference other types of components, GameObjects, or assets.",1887],["For more information about the different property types, see Editing Properties.",1887],["The image below shows a GameObject with an Audio Source component. The values of the Audio Source in the Inspector show how you can adjust aspects of a component to suit your project.",1887],["Component context menu commands",1887],["Right click on a component for the context menu with several useful commands.",1887],["The same commands are also available from the kebab menu (⋮) in the top-right of the component panel in the Inspector window.",1887],["The table below describes the commands available so you can adjust your components:",1887],["Command: Description: ",1887],[":--------------- :-------------------------- ",1887],["Reset Restores the values the component’s properties had before the most recent editing session. ",1887],["Remove Component Removes the component from the GameObject. Note: Some combinations of components depend on each other (Hinge Joint only works when attached to a Rigidbody); a warning message is displayed if you try to remove components that others depend on. ",1887],["Move Up Moves the component up in the Inspector. You can also drag and drop components in the Inspector to reorder them. ",1887],["Move Down Moves the component down in the Inspector. ",1887],["Copy Component Copies the type and current property settings of a component. ",1887],["Paste Component As New Pastes the copied property settings of a component as a new component. ",1887],["Paste Component Values Pastes the copied property settings of a component into another component of the same type. ",1887],["Testing properties",1887],["In Play Mode, you can change properties of a component in the Inspector. This lets you see how different values for a property affect gameplay. For example, you can experiment with different heights of jumping. If you create a Jump Height property in a script, you can enter Play Mode, change the value, and press the jump button to see what happens. Then, without exiting Play Mode, you can change it again and see the results within seconds. When you exit Play Mode, the properties revert to their pre-Play Mode values. With this workflow, you can experiment, adjust, and refine your gameplay in less time.",1887],["Custom Editor tools",1888],["You can create Editor tools with the EditorTool API.",1888],["An Editor tool's context determines what that tool affects in the Editor. Tools can be either global tools or component tools.",1888],["Access Editor tools in the Scene view from these overlays:",1888],["The Tools overlay",1888],["The Tools Settings overlay",1888],["",1888],["Tool context",1888],["The EditorToolContext API changes what the Editor's built-in Transform tools affect.",1888],["The default tool context is GameObject. A tool with the GameObject tool context affects the Transform values of a GameObject. Other contexts can affect different elements. For example, the Spline tool context makes it so the Move, Rotate, and Scale tools affect Spline knots and tangents.",1888],["If your project contains multiple tool contexts, you can use the first button in the Tools overlay to select a tool context. If the tool context button isn't selected, then the default GameObject tool context is active. The tool context button isn't available from the Tools overlay if there are no extra tool contexts in your project.",1888],["",1888],["Global tools vs. component tools",1888],["Tools you create with the EditorTool API can either be global or component tools.",1888],["",1888],["Global tools",1888],["A global tool affects any GameObject.",1888],["A global tool is always available regardless of the type of GameObject you select. For example, you can always access a Transform tool because the Transform tool works with any GameObject.",1888],["The Tools overlay displays global tools in the section after the built-in Transform tools, such as Move, Rotate, Scale, and Rect.",1888],["",1888],["Component tools",1888],["A component tool affects a specific component.",1888],["A component tool is only available when you select a GameObject with the component the tool comes from attached to it. For example, you can only use a custom manipulator tool for lights when you select a GameObject with a Light component.",1888],["The last buttons in the Tools overlay are component tools. Component tools are divided into groups based on their component. The availability of component tools depends on what you have actively selected in the Scene view or Hierarchy window.",1888],["Additional resources",1888],["Managed plug-ins",1889],["Managed plug-ins are .NET assemblies you create and compile outside of Unity, into a dynamically linked library (DLL) with tools such as Visual Studio.",1889],["This is a different process from standard C# scripts, which Unity stores as source files in the Assets folder in your Unity project. Unity compiles standard C# scripts whenever they change, whereas DLLs are pre-compiled and don’t change. You can add a compiled .dll file to your project and attach the classes it contains to GameObjects in the same way as standard scripts.",1889],["For more information about managed code in C#, see Microsoft’s What is managed code? documentation.",1889],["Managed plug-ins contain only .NET code, which means they can’t access any features that the .NET libraries don’t support. However, managed code is accessible to the standard .NET tools that Unity uses to compile scripts.",1889],["When you work with DLLs in Unity, you must complete more steps than when you work with scripts. However, there are situations where you might find it helpful to create and add a .dll file to your Unity project instead, for example:",1889],["You want to use compilers in your code that Unity doesn’t support.",1889],["You want to add third-party .NET code in a .dll file.",1889],["You want to supply code to Unity without the source.",1889],["This page explains a general method you can use to create managed plug-ins, as well as how you can create managed plug-ins and set up a debug session using Visual Studio.",1889],["Creating a managed plug-in",1889],["To create a managed plug-in, you need to create a DLL. To do this, you need a suitable compiler, such as:",1889],["Not all compilers that produce .NET code are compatible with Unity, so you should test the compiler with some available code before doing significant work with it. The method you use to create a DLL depends on if the DLL contains Unity API code:",1889],["If the DLL contains Unity API code, you need to make Unity’s own DLLs available to the compiler before compiling:",1889],["To find the Unity DLLs:",1889],["On Windows, go to: C:\\Program Files\\Unity\\Hub\\Editor\\<version-number>\\Editor\\Data\\Managed\\UnityEngine",1889],["On macOS:",1889],["Find the Unity.app file on your computer. The path to the Unity DLLs on macOS is: /Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine",1889],["Right click on Unity.app",1889],["Select Show Package Contents.",1889],["The UnityEngine folder contains the .dll files for a number of modules. Reference them to make them available to your script. Some namespaces also require a reference to a compiled library from a Unity project (for example, UnityEngine.UI). Locate this in the project folder’s directory: ~\\Library\\ScriptAssemblies",1889],["If the DLL does not contain Unity API code, or if you've already made the Unity DLLs available, follow your compiler’s documentation to compile a .dll file.The exact options you use to compile the DLL depend on the compiler you use. As an example, the command line for the Roslyn compiler, csc, might look like this on macOS:",1889],["csc /r:/Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine.dll /target:library /out:MyManagedAssembly.dll /recurse:*.cs",1889],["In this example:",1889],["Use the /r option to specify a path to a library to include in the build, in this case, the UnityEngine library.",1889],["Use the /target option to specify the type of build you require; “library” signifies a DLL build.",1889],["Use /out to specify the name of the library, which in this case is “MyManagedAssembly.dll”.",1889],["Add the name of the source files to be included. Use the /recurse method to add all the files ending in “.cs'' in your current working directory and any subfolders. The resulting .dll file appears in the same folder as the source files.",1889],["Using a managed plug-in",1889],["After you’ve compiled the DLL, you can drag the .dll file into the Unity project like any other asset. You can then:",1889],["Expand the managed plug-in to view the separate classes inside the library.",1889],["Drag classes that derive from MonoBehaviour onto Game Objects.",1889],["Use non-MonoBehaviour classes directly from other scripts.",1889],["Create a DLL with Visual Studio",1889],["This section explains:",1889],["How to build and integrate a simple DLL example with Visual Studio",1889],["How to prepare a debugging session for the DLL in Unity.",1889],["Setting up the Project",1889],["Open Visual Studio and create a new project.",1889],["Select File > New > Project > Visual C# > .Net Standard > Class Library (.NET Standard).",1889],["Add the following information to the new library:",1889],["Name**: The namespace (for this example, use DLLTest as the name).",1889],["Location**: The parent folder of the project.",1889],["Solution name**: The folder of the project.",1889],["Make the Unity DLLs available to your script. In Visual Studio, open the contextual menu for References in the Solution Explorer and select Add Reference > Browse > Select File.",1889],["Select the required .dll file, located in the UnityEngine folder.",1889],["Coding the DLL",1889],["For this example, rename the default class to MyUtilities in the Solution browser.",1889],["Replace its code with the following:",1889],["using System;",1889],["using UnityEngine;",1889],["namespace DLLTest {",1889],["public class MyUtilities {",1889],["public int c;",1889],["public void AddValues(int a, int b) {",1889],["c = a + b;",1889],["public static int GenerateRandom(int min, int max) {",1889],["System.Random rand = new System.Random();",1889],["return rand.Next(min, max);",1889],["Build the project to generate the DLL file along with its debug symbols.",1889],["Debugging a DLL in Unity",1889],["To set up a debugging session for a DLL in Unity:",1889],["Create a new project in Unity and copy your built .dll file (for example, <project folder>/bin/Debug/DLLTest.dll) into the Assets folder.",1889],["Create a C# script called Test in the Assets folder.",1889],["Replace its contents with a script that creates a new instance of the class you created in your DLL, uses its functions and displays the output in the Console window. For example, to create a test script for the DLL from the section above, copy the following code:",1889],["using UnityEngine;",1889],["using System.Collections;",1889],["using DLLTest;",1889],["public class Test : MonoBehaviour {",1889],["void Start () {",1889],["MyUtilities utils = new MyUtilities();",1889],["utils.AddValues(2, 3);",1889],["print(\"2 + 3 = \" + utils.c);",1889],["void Update () {",1889],["print(MyUtilities.GenerateRandom(0, 100));",1889],["Attach this script to a GameObject in the Scene and click Play.",1889],["Unity displays the output of the code from the DLL in the Console window",1889],["Compiling unsafe C# code",1889],["Unsafe C# code is code that is able to access memory directly. It is not enabled by default because the compiler can’t verify that it won’t introduce security risks.",1889],["You might want to use unsafe code to:",1889],["Access memory using pointers.",1889],["Allocate raw memory.",1889],["Call methods using pointers.",1889],["To enable support for compiling unsafe C# code go to Edit > Project Settings > Player > Other Settings and enable Allow Unsafe Code.",1889],["For more information, see Microsoft’s documentation of unsafe code.",1889],["DirectX",1890],["You can choose to set DirectX11 (DX11) or DirectX12 (DX12) as your default Graphics API in the Editor or Standalone Player. To do that:",1890],["Go to Edit > Project Settings > Player settings > Other Settings.",1890],["In the Rendering section, disable the Auto Graphics API for a platform (Windows/Mac/Linux) option.",1890],["Click + to select DirectX11 or DirectX12 from the list of the supported Graphic APIs. For more information, see Graphics API support.",1890],["Surface Shaders",1890],["Some parts of the Surface Shader compilation pipeline don't understand DX11-specific HLSL syntax, so if you’re using HLSL features like StructuredBuffers, RWTextures and other non-DX9 syntax, you need to wrap it into a DX11-only preprocessor macro. See documentation on Platform-specific differences for more information.",1890],["Tessellation & Geometry Shaders",1890],["Surface Shaders have support for simple tessellation and displacement. See documentation on Surface Shader Tessellation for more information.",1890],["When manually writing Shader programs, you can use the full set of DX11 Shader model 5.0 features, including Geometry, Hull and Domain Shaders.",1890],["Tessellation and geometry shaders are only supported by a subset of graphics APIs, which are controlled by the Shader Compilation Target level.",1890],["Compute Shaders",1890],["Compute Shaders run on the graphics card and can speed up rendering. See documentation on Compute Shaders for more information.",1890],["Creating models for animation",1891],["This page contains guidance on creating a model for use with Unity's Animation System.",1891],["For general best practice guidance on creating all types of models, see Creating models for optimal performance. For information on importing a model with animations into Unity, see Importing a model with humanoid animations or Importing a model with non-humanoid (generic) animations.",1891],["There are two types of models that you can use with Unity's Animation System:",1891],["A Humanoid model is a specific structure, containing at least 15 bones organized in a way that loosely conforms to an actual human skeleton.",1891],["A Generic model is everything else. This might be anything from a teakettle to a dragon.",1891],["Both require a rigged, skinned model. The stages of creating such a model are:",1891],["Modeling: Creating the model. The model contains the mesh, textures, and so on.",1891],["Rigging: Creating the skeleton, also called the rig or joint hierarchy. This defines the bones inside the mesh, and their movement in relation to one another.",1891],["Skinning: Joining the mesh to the skeleton. This defines which parts of the character mesh move when a given joint is animated.",1891],["You usually perform all of these steps in 3D modeling software (such as Autodesk® 3ds Max®, Autodesk® Maya®, or Blender), export the resulting model, and import it into Unity.",1891],["",1891],["Modeling",1891],["There are a few guidelines you can follow to ensure a model works well with animation in a Unity Project:",1891],["Use a topology with a well-formed structure. Generally, you should consider how the vertices and triangles of the model distort as it animates. A good topology allows the model to move without distorting the mesh. Study existing character meshes to see how the topology is arranged and why.",1891],["Check the scale of your mesh. Do a test import and compare the size of your imported Model with a \"meter cube\". The standard Unity cube primitive has a side length of one unit, so it can be taken as a 1m cube for most purposes. Check the units your 3D modeling software uses and adjust the export settings so that the size of the Model is in correct proportion to the cube.",1891],["While you are building, clean up your model. Where possible, cap holes, weld vertices, and remove hidden faces. This helps with skinning, especially automated skinning processes.",1891],["If your character has feet, arrange the mesh so that they stand on the local origin or \"anchor point\" of the model. It makes walking much easier to handle if a character's anchor point (that is, its transform position) is directly on the floor.",1891],["If your character is a biped, model in a T-pose. This gives you space to refine polygon detail where you need it (such as the underarms). This also makes it easier to position your rig inside the Mesh.",1891],["",1891],["Rigging",1891],["3D modeling software provides a number of ways to create joints for your rig.",1891],["For a Humanoid model, there are specific requirements for the skeleton so that Unity can match it to a Humanoid Avatar:",1891],["A minimum of 15 bones. Your skeleton needs to have at least the required bones in place.",1891],["In order to improve your chances for finding a match to the Avatar, name your bones in a way that reflects the body parts they represent. For example, \"LeftArm\" and \"RightForearm\" make it clear what these bones control.",1891],["The joint/bone hierachy should follow a natural structure for the character you are creating. Given that arms and legs come in pairs, you should use a consistent convention for naming them (for example, \"arm_L\" for the left arm, \"arm_R\" for the right arm). Possible structures for the hierarchy include:",1891],["HIPS - spine - chest - shoulders - arm - forearm - hand",1891],["HIPS - spine - chest - neck - head",1891],["HIPS - UpLeg - Leg - foot - toe - toe_end",1891],["For a Generic model, the only requirement is that the skeleton contains a bone that you can designate as the Root node when you import the model. This effectively defines the model's center of mass.",1891],["",1891],["Skinning",1891],["The initial setup is typically automated. Skinning usually requires a fair amount of work and testing with animations in order to ensure satisfactory results for the skin deformation.",1891],["Some general guidelines for this process include:",1891],["Use an automated process initially to set up some of the skinning (see the skinning tutorials available for your 3D modeling software).",1891],["Create a simple animation for your rig or import some animation data to act as a test for the skinning. This should give you a quick way to evaluate whether or not the skinning looks good in motion.",1891],["Incrementally edit and refine your skinning solution.",1891],["For performance reasons, consider limiting the number of influences when using a soft bind to a maximum of four. This is the maximum number that Unity supports by default. If your Mesh uses more than four influences, you can choose either of these options:",1891],["Increase the maximum number of influences using the Skin Weights property.",1891],["Bake the deformation joints before exporting your Model from Maya, using the Bake Deformer tool (from Maya's top menu: Skin > Bake Deformers to Skin Weights). For more information, see Bake deformers on a character in the Autodesk documentation.",1891],["Exporting and verifying your model",1891],["Unity imports a number of different generic and native 3D file formats, but the recommended file format is .fbx. For more information, see Model file formats.",1891],["When you use .fbx, you can:",1891],["Export the Mesh with the skeleton hierarchy, normals, textures and animation.",1891],["Re-import the Mesh into your 3D modeling software to verify your animated Model looks as expected.",1891],["Export animations without the Mesh.",1891],["Using Lights",1892],["Lights are easy to use in Unity - you need to create a light of the desired type (for example, from the menu GameObject > Light > Point Light) and place it where you want it in the scene. If you enable scene view lighting (the \"lightbulb\" button on the toolbar) then you can see a preview of how the lighting will look as you move light objects and set their parameters.",1892],["A directional light can be placed anywhere in the scene (unless it's using a Cookie) with the forward/Z axis indicating the direction. A Spot Light also has a direction but since it has a limited range, its position does matter. The shape parameters of spot, point, and area lights can be adjusted from the inspector or by using the lights' Gizmos directly in the scene view.",1892],["Guidelines for Placing Lights",1892],["A directional light often represents the sun and has a significant effect on the look of a scene. The direction of the light should point slightly downwards but you will usually want to make sure that it also makes a slight angle with major objects in the scene. For example, a roughly cubic object will be more interestingly shaded and appear to \"pop\" out in 3D much more if the light isn't coming head-on to one of the faces.",1892],["Spot lights and point lights usually represent artificial light sources and so their positions are usually determined by scene objects. One common pitfall with these lights is that they appear to have no effect at all when you first add them to the scene. This happens when you adjust the range of the light to fit neatly within the scene. The range of a light is the limit at which the light's brightness dims to zero. If you set, say, a spot light so the base of the cone neatly lands on the floor then the light will have little or no effect unless another object passes underneath it. If you want the level geometry to be illuminated then you should expand point and spot lights so they pass through the walls and floors.",1892],["Color and Intensity",1892],["A light's color and intensity (brightness) are properties you can set from the inspector. The default intensity and white color are fine for \"ordinary\" lighting that you use to apply shading to objects but you might want to vary the properties to produce special effects. For example, a glowing green forcefield might be bright enough to bathe surrounding objects in intense green light; car headlights (especially on older cars) typically have a slight yellow color rather than brilliant white. These effects are most often used with point and spot lights but you might change the color of a directional light if, say, your game is set on a distant planet with a red sun.",1892],["Generating lighting data",1893],["In Unity, precomputed lighting is generated in the background either as an automatic process or when manually initiated. It is possible to continue working in the editor while these processes run.",1893],["The Editor follows different steps to calculate Enlighten Realtime Global Illumination and Baked Global Illumination. The progress bar displays information about the current process.",1893],["The stages of lighting precomputation are listed below:",1893],["Enlighten Realtime Global Illumination**",1893],["Create Geometry",1893],["Layout Systems",1893],["Create Systems",1893],["Create Atlas",1893],["Clustering",1893],["Visibility",1893],["Light Transport",1893],["Tetrahedralize Probes",1893],["Create ProbeSet",1893],["Probes**",1893],["Ambient Probes",1893],["Baked/Realtime Ref. Probes",1893],["Enlighten Baked Global Illumination**",1893],["Create Geometry",1893],["Atlassing",1893],["Create Baked Systems",1893],["Baked Resources",1893],["Bake AO",1893],["Export Baked Texture",1893],["Bake Visibility",1893],["Bake Direct",1893],["Ambient and Emissive",1893],["Create Bake Systems",1893],["Bake Runtime",1893],["Upsampling Visibility",1893],["Bake Indirect",1893],["Final Gather",1893],["Bake ProbesSet",1893],["Compositing",1893],["Generating data",1893],["Unity’s precomputed lighting solutions only consider static geometry. To begin the lighting precompute process, you need at least one Static GameObject in your Scene.",1893],["When you manually initiate a precompute, the Unity Editor evaluates and computes all aspects of your Scene lighting. To recalculate and bake only Reflection Probes, select the Generate Lighting option Reflection Probes Lighting Window.",1893],["Before you build",1893],["Before building your game, disable the Auto Generate option in the Lighting Window and generate the lighting data manually for all your Scenes, to ensure that you do not lose any lighting data.",1893],["When you deactivate Auto Generate and manually generate lighting for your Scene, Unity saves your lighting data as Asset files in your project directory. This ensures that the data you need is part of your build.",1893],["Auto-Generate** is not recommended for multi-scene workflows.",1893],["Using Reflection Probes",1894],["The default Reflection Probe",1894],["Unity includes a dedicated manager—the SkyManager—to ensure that environment lighting affects your scene by default. The SkyManager automatically generates an ambient probe and default reflection probe to capture environment lighting.",1894],["To disable the environment contribution in the lighting result for a scene or GameObject that does not have manually created light maps and Light Probes, disable the default Reflection Probe and the ambient probe. To disable these probes, see Disabling the SkyManager.",1894],["Adding Reflection Probes",1894],["You can add the Reflection Probe component to any object in a Scene but it's standard to add each probe to a separate empty GameObject. The usual workflow is:",1894],["Create a new empty GameObject (menu: GameObject > Create Empty) and then add the Reflection Probe component to it (menu: Component > Rendering > Reflection Probe). Alternatively, if you already have a probe in the scene you will probably find it easier to duplicate that instead (menu: Edit > Duplicate).",1894],["Place the new probe in the desired location and set its Offset point and the size of its zone of effect.",1894],["Optionally set other properties on the probe to customise its behaviour.",1894],["Continue adding probes until all required locations have been assigned.",1894],["To see the reflections, you will also need at least one reflective object in the scene. A simple test object can be created as follows:",1894],["Add a primitive object such as a Sphere to the scene (menu: GameObject > 3D Object > Sphere).",1894],["Create a new material (menu: Assets > Create > Material) and leave the default Standard shader in place.",1894],["Make the material reflective by setting both the Metallic and Smoothness properties to 1.0.",1894],["Drag the newly-created material onto the sphere object to assign it.",1894],["The sphere can now show the reflections obtained from the probes. A simple arrangement with a single probe is enough to see the basic effect of the reflections.",1894],["Finally, the probes must be baked before the reflections become visible. If you have the Auto Generate option enabled in the Lighting window (this is the default setting) then the reflections will update as you position or change objects in the scene, although the response is not instantaneous. If you disable auto baking then you must click the Bake button in the Reflection Probe inspector to update the probes. The main reason for disabling auto baking is that the baking process can take quite some time for a complicated scene with many probes.",1894],["Positioning probes",1894],["The position of a probe is primarily determined by the position of its GameObject and so you can simply drag the object to the desired location. Having done this, you should set the probe’s zone of effect; this is an axis-aligned box shape whose dimensions are set by the Box Size property. You can set the size values directly or enable the size editing mode in the inspector and drag the sides of the box in the Scene view (see the Reflection Probe component page for details). The zones of the full set of probes should collectively cover all areas of the scene where a reflective object might pass.",1894],["You should place probes close to any large objects in the scene that would be reflected noticeably. Areas around the centres and corners of walls are good candidate locations for probes. Smaller objects might require probes close by if they have a strong visual effect. For example, you would probably want the flames of a campfire to be reflected even if the object itself is small and otherwise insignificant.",1894],["When you have probes in all the appropriate places, you then need to define the zone of effect for each probe, which you can do using the Box Size property as mentioned above. A wall might need just a single probe zone along most of its length (at least if it has a fairly uniform appearance) but the zone might be relatively narrow in the direction perpendicular to the wall; this would imply that the wall is only reflected by objects that are fairly close to it. An open space whose appearance varies little from place to place can often be covered by a single probe. Note that a probe’s zone is aligned to the main world axes (X, Y and Z) and can’t be rotated. This means that sometimes a group of probes might be needed along a uniform wall if it is not axis-aligned.",1894],["By default, a probe’s zone of effect is centred on its view point but this may not be the ideal position for capturing the reflection cubemap. For example, the probe zone for a very high wall might extend some distance from the wall but you might want the reflection to be captured from a point close to it rather than the zone’s centre. You can optionally add an offset to view point using the Box Offset property (ie, the offset is the position in the GameObject’s local space that the probe’s cubemap view is generated from). Using this, you can easily place the view point anywhere within the zone of effect or indeed outside the zone altogether.",1894],["Overlapping probe zones",1894],["It would be very difficult to position the zones of neighbouring reflection probes without them overlapping and fortunately, it is not necessary to do so. However, this leaves the issue of choosing which probe to use in the overlap areas. By default, Unity calculates the intersection between the reflective object’s bounding box and each of the overlapping probe zones; the zone which has the largest volume of intersection with the bounding box is the one that will be selected.",1894],["You can modify the calculation using the probes’ Importance properties. Probes with a higher importance value have priority over those of lower importance within overlap zones. This is useful, say, if you have a small probe zone that is contained completely inside a larger zone (ie, the intersection of the character’s bounding box with the enclosing zone might always be larger and so the small zone would never be used).",1894],["Blending",1894],["To enable Reflection Probe blending navigate to Graphic Settings > Tier settings. Tier settings are only available in Unity's Built-in Render Pipeline. When blending is enabled, Unity gradually fades out one probe’s cubemap while fading in the other’s as the reflective object passes from one zone to the other. This gradual transition avoids the situation where a distinctive object suddenly “pops” into the reflection as an object crosses the zone boundary.",1894],["Blending is controlled using the Reflection Probes property of the Mesh Renderer component. Four blending options are available:",1894],["Off - Reflection probe blending is disabled. Only the skybox will be used for reflection",1894],["Blend Probes - Blends only adjacent probes and ignores the skybox. You should use this for objects that are “indoors” or in covered parts of the scene (eg, caves and tunnels) since the sky is not visible from these place and so should never appear in the reflections.",1894],["Blend Probes and Skybox - Works like Blend Probes but also allows the skybox to be used in the blending. You should use this option for objects in the open air, where the sky would always be visible.",1894],["Simple - Disables blending between probes when there are two overlapping reflection probe volumes.",1894],["When probes have equal Importance values, the blending weight for a given probe zone is calculated by dividing its intersection (volume) with the object’s bounding box by the sum of all probes’ intersections with the box. For example, if the box intersects probe A’s zone by 1.0 cubic units and intersects probe B’s zone by 2.0 cubic units then the blending values will be:",1894],["Probe A: 1.0 / (1.0 + 2.0) = 0.33",1894],["Probe B: 2.0 / (1.0 + 2.0) = 0.67",1894],["In other words, the blend will incorporate 33% of probe A's reflection and 67% of probe B's reflection.",1894],["The calculation must be handled slightly differently in the case where one probe is entirely contained within the other, since the inner zone overlaps entirely with the outer. If the object’s bounding box is entirely within the inner zone then that zone’s blending weight is 1.0 (ie, the outer zone is not used at all). When the object is partially outside the inner zone, the intersection volume of its bounding box with the inner zone is divided by the total volume of the box. For example, if the intersection volume is 1.0 cubic units and the bounding box’s volume is 4.0 cubic units, then the blending weight of the inner probe will be 1.0 / 4.0 = 0.25. This value is then subtracted from 1.0 to get the weight for the outer probe which in this case will be 0.75.",1894],["When one probe involved in the blend has a higher Importance value than another, the more important probe overrides the other in the usual way.",1894],["",1894],["",1894],["Updated in 5.6",1894],["2017-06-06 ",1894],["Unity's interface",1895],["This section provides a detailed tour of the most common editor windows, and how to make full use of them.",1895],["(A)** The Toolbar provides access to your Unity Account and Unity Cloud Services. It also contains controls for Play mode; Undo history; Unity Search; a layer visibility menu; and the Editor layout menu.",1895],["(B)** The Hierarchy window is a hierarchical text representation of every GameObject in the Scene. Each item in the Scene has an entry in the hierarchy, so the two windows are inherently linked. The hierarchy reveals the structure of how GameObjects attach to each other.",1895],["(C)** The Game view simulates what your final rendered game will look like through your Scene Cameras. When you click the Play button, the simulation begins.",1895],["(D)** The Scene view allows you to visually navigate and edit your Scene. The Scene view can display a 3D or 2D perspective, depending on the type of Project you are working on.",1895],["(E)** Overlays contain the basic tools for manipulating the Scene view and the GameObjects within it. You can also add custom Overlays to improve your workflow.",1895],["(F)** The Inspector window allows you to view and edit all the properties of the currently selected GameObject. Because different types of GameObjects have different sets of properties, the layout and contents of the Inspector window change each time you select a different GameObject.",1895],["(G)** The Project window displays your library of Assets that are available to use in your Project. When you import Assets into your Project, they appear here.",1895],["(H)** The status bar provides notifications about various Unity processes, and quick access to related tools and settings.",1895],["The Inspector window",1896],["Use the Inspector window to view and edit properties and settings for almost everything in the Unity Editor, including GameObjects, Unity components, Assets, Materials, and in-Editor settings and preferences.",1896],["Open an Inspector window",1896],["To open an Inspector window, do one of the following:",1896],["\nFrom the menu, select Windows > General > Inspector to open a floating Inspector window.\n",1896],["\nFrom any window's More Items menu (⋮), select Add Tab > Inspector to open an Inspector in a new tab.\n",1896],["You can open as many Inspector windows as you want, and reposition, dock, and resize them in the same way you can any other window.",1896],["Control Inspector window focus",1896],["By default, an Inspector window displays properties for the current selection. The contents of the Inspector change whenever the selection changes. To keep the same set of properties open, regardless of the current selection, do one of the following:",1896],["\nLock the Inspector window to the current selection. When you lock an Inspector window, it no longer updates if you change the selection.\n",1896],["\nOpen a focused Inspector for a GameObject, Asset, or component. Focused Inspectors only ever display the properties of the items you opened them for.\n",1896],["Inspect items",1896],["What you can see and edit in an Inspector window depends on what you select. This section describes what an Inspector window displays for different types of items you can select.",1896],["Inspecting GameObjects",1896],["When you select a GameObject (for example, in the Hierarchy or Scene view), the Inspector displays the properties of all of its components and Materials. You can edit the properties, and reorder the components in the Inspector window.",1896],["Inspect custom script components",1896],["When GameObjects have custom script components attached, the Inspector displays the scripts' public variables. You can edit script variables in the same way as you edit any other properties, which means that you can set parameters and default values in your scripts without modifying the code.",1896],["For more information, see Variables and the Inspector in the Scripting section.",1896],["Inspect Assets",1896],["When you select an Asset (for example, from the Project window), the Inspector displays settings that control how Unity imports and uses the Asset at runtime.",1896],["Each type of Asset has its own settings. Examples of Asset import settings that you edit in an Inspector window include the:",1896],["\nModel Import Settings window.\n",1896],["\nAudio Clip Import Settings window.\n",1896],["\nTexture Import Settings window.\n",1896],["Inspect settings and preferences",1896],["When you open the Project Settings (menu: Edit > Project Settings), Unity displays them in an Inspector window.",1896],["Inspect Prefabs",1896],["When you work with Prefabs, the Inspector window displays some additional information and provides some additional options. For example:",1896],["\nWhen you Edit a Prefab Instance, the Inspector window provides options for working with the Prefab Asset and applying overrides.\n",1896],["\nWhen you apply Instance overrides, the Inspector window displays the names of properties you override in bold.\n",1896],["For more information about working with Prefabs in the Inspector window, see the Prefabs section.",1896],["",1896],["Inspect multiple Items",1896],["When you have two or more items selected, you can edit all of the properties they have in common in an Inspector window. Unity copies the values you supply to all the selected items. The Inspector window displays a count of the number of selected items.",1896],["Multiple GameObjects",1896],["When you select multiple GameObjects, the Inspector window displays all of the components they have in common.",1896],["\nFor property values that are different across two or more selected GameObjects, the Inspector displays a dash (-) (1 in the screenshot below).\n",1896],["\nFor property values that are the same across all selected GameObjects, the Inspector displays the actual values (2 in the screenshot below).\n",1896],["\nTo apply a property value from one selected GameObject to all of the selected GameObjects, right-click the property name and select Set to Value of [Name of GameObject] from the context menu (3 in the screenshot below).\n",1896],["\nIf any of the selected GameObjects has components that are not present on the other selected objects, the Inspector displays a message that some components are hidden.\n",1896],["Multiple Assets",1896],["When you select multiple Assets of the same type, the Inspector window displays all of the properties they have in common.",1896],["\nFor property values that are the same across all selected Assets, the Inspector displays the actual values.\n",1896],["\nFor property values that are different across two or more selected Assets, the Inspector displays a dash (-) (1 in the screenshot below).\n",1896],["\nFor properties that you cannot edit for all of the selected Assets at once, the Inspector grays them out (2 in the screenshot below).\n",1896],["When you select multiple Assets of different types, the Inspector displays a list that shows how many of each type of Asset are selected. Click any item in the list to Inspect all Assets of that type.",1896],["Multiple Prefabs",1896],["You can inspect multiple selected instances of a Prefab in the same way as you edit multiple GameObjects, but the Inspector hides the Select, Revert, and Apply buttons (see Editing a Prefab via its instances).",1896],["Locate an Inspector window's source",1896],["When you open a GameObject or Asset in an Inspector window, you can locate it in the Scene view or Project View using the Ping command.",1896],["From the Inspector window's More Items (⋮) menu, select Ping. Unity highlights the item in the Hierarchy view or the Project view.",1896],["Component drag and drop added in Unity 5.6",1896],["Reorganized Inspector section pages in Unity 2020.1",1896],["Using the Mesh Class",1897],["The Mesh class is the basic script interface to an object's mesh geometry. It uses arrays to represent the triangles, vertex positions, normals and texture coordinates and also supplies a number of other useful properties and functions to assist mesh generation.",1897],["Accessing an Object's Mesh",1897],["The mesh data is attached to an object using the Mesh Filter component (and the object will also need a MeshRenderer to make the geometry visible). This component is accessed using the familiar GetComponent function:",1897],["using UnityEngine;",1897],["public class ExampleScript : MonoBehaviour",1897],["MeshFilter mf;",1897],["void Start()",1897],["//if this gameObject has a MeshFilter, mf will reference the component",1897],["mf = GetComponent();",1897],["Adding the Mesh Data",1897],["The Mesh object has properties for the vertices and their associated data (normals and UV coordinates) and also for the triangle data. The vertices may be supplied in any order but the arrays of normals and UVs must be ordered so that the indices all correspond with the vertices (ie, element 0 of the normals array supplies the normal for vertex 0, etc). The vertices are Vector3s representing points in the object's local space. The normals are normalised Vector3s representing the directions, again in local coordinates. The UVs are specified as Vector2s, but since the Vector2 type doesn't have fields called U and V, you must mentally convert them to X and Y respectively.",1897],["The triangles are specified as triples of integers that act as indices into the vertex array. Rather than use a special class to represent a triangle the array is just a simple list of integer indices. These are taken in groups of three for each triangle, so the first three elements define the first triangle, the next three define the second triangle, and so on. An important detail of the triangles is the ordering of the corner vertices. They should be arranged so that the corners go around clockwise as you look down on the visible outer surface of the triangle, although it doesn't matter which corner you start with.",1897],["Advanced Mesh API",1897],["The Mesh class also has a lower-level advanced API",1897],["that enables you to work with raw mesh vertex and index buffer data. This is useful in situations that require maximum performance or the lowest amount of memory allocations.",1897],["Mesh.SetIndexBufferParams and Mesh.SetIndexBufferData for setting up size, format of the index buffer, and updating data inside it.",1897],["Mesh.SetVertexBufferParams and Mesh.SetVertexBufferData for setting up size, format of the vertex buffer(s), and updating data inside them.",1897],["Mesh.SetSubMesh for setting up index buffer topology and ranges.",1897],["See Also",1897],["Anatomy of a Mesh page.",1897],["Mesh scripting class reference.",1897],["2019-08-14 ",1897],["The Scene view",1898],["The Scene view is where you visualize and interact with the world you create in the Editor. In the Scene view, you can select, manipulate, and modify GameObjects that act as scenery, characters, cameras, lights, and more.",1898],["Topic Description ",1898],["----- ----------- ",1898],["Overlays Manage the persistent, customizable panels and toolbars that contain Scene view authoring tools. ",1898],["Position GameObjects Modify the Transform values of GameObjects. ",1898],["Scene view navigation Move around the Scene view efficiently. ",1898],["Scene view Camera Configure the Scene Camera. ",1898],["Pick and select GameObjects Select GameObjects in the Scene view and manage their pickability. ",1898],["Scene visibility Hide and display GameObjects in the Scene view. ",1898],["Scene view View Options toolbar Select view options for the Scene View and enable or disable lighting and audio. ",1898],["Gizmos menu Hide and display gizmos in the Scene view. ",1898],["Custom Editor tools Create Editor tools to use in the Scene view. ",1898],["Build and deliver for Universal Windows Platform",1899],["Before you build and deliver your Universal Windows Platform (UWP) application, you can learn more about build settings and deployment.",1899],["Topic Description ",1899],["----------------------------------------------------------------- ----------------------------------------------------------------- ",1899],["UWP build settings Refer to the UI description of UWP Build Settings. ",1899],["Generate a Visual Studio C++ solution Understand the Visual Studio C++ solution that Unity automatically generates. ",1899],["Package a UWP app in Visual Studio Create and install an app package for UWP. ",1899],["Deploy a UWP application Deploy a UWP build with Visual Studio. ",1899],["Deploy a UWP app with the Windows Device Portal Use the Device Portal to build and run your application on a remote device. ",1899],["Debug C# code",1900],["Before you can debug C# code with IL2CPP for your Universal Windows Platform (UWP) application, you need to do the following:",1900],["In File > Build Settings, enable Script Debugging.",1900],["In Player settings, enable the InternetClient, InternetClientServer, and PrivateNetworkClientServer capabilities.",1900],["Note: You can also enable these capabilities in the manifest. You will need to change these capabilities from the Visual Studio manifest editor because the manifest isn't overwritten when you build on top of an earlier build.",1900],["The debugging procedure for UWP applications is the same as for other platforms. For more information on how to debug C# code, refer to Debug C# code in Unity.",1900],["Additional resources",1900],["Debug generated C++ code",1901],["You can debug generated C++ code for your Universal Windows Platform (UWP) application using Visual Studio.",1901],["Understand class and method naming in generated C++ code",1901],["IL2CPP classes",1901],["IL2CPP classes follow the format of <ClassName>_t#number, where:",1901],["<ClassName> is the class name",1901],["The optional #number is a unique type number",1901],["Example IL2CPP classes:",1901],["String_t - String class",1901],["Object_t - Object class",1901],["Type_t - Type class",1901],["StringBuilder_t26 - StringBuilder class",1901],["IL2CPP methods",1901],["IL2CPP methods follow the format of <ClassName>_<MethodName>_m#number, where:",1901],["<ClassName> is the class name of the method’s declaring type",1901],["<MethodName> is the method name",1901],["#number is a unique method number",1901],["Example IL2CPP methods:",1901],["ConfigurationSection_DoDeserializeSection_m1275 - DeserializationSection method of the ConfigurationSection class",1901],["String_Format_m4102 - Format method of the String class",1901],["Mathf_Sqrt_m289 - Sqrt method of the Mathf class",1901],["IL2CPP static field structures",1901],["Static fields structures follow the format of <ClassName>_t#number_StaticFields, where the first part of the structure name is the same as the declaring type.",1901],["Example static fields structures:",1901],["StringBuilder_t26_StaticFields",1901],["Thing_t24_StaticFields",1901],["C++ comments",1901],["Preceding each class or method definition, C++ automatically generates a comment stating the full class or method name.",1901],["Example C++ comment:",1901],["// System.Text.StringBuilder",1901],["struct StringBuilder_t26 : public Object_t",1901],["// System.Int32 System.Text.StringBuilder::_length",1901],["int32_t length_1;",1901],["// System.Int32 System.Text.StringBuilder::_maxCapacity",1901],["int32_t maxCapacity_2;",1901],["};",1901],["Observe variable values",1901],["You can debug your generated C++ code by observing the values of your variables using the Visual Studio debugger.",1901],["You can set breakpoints in Visual Studio where you want the debugger to stop so you can observe your variables. Visual Studio allows you to observe your variable values by either mousing over the variable or using a Watch window.",1901],["Observe a static field",1901],["In IL2CPP, Unity stores static fields in an Il2CppClass instance. To observe the values of the static field, you need to:",1901],["Find the pointer to the Il2CppClass structure of that type in your code.",1901],["Note: These pointers are in scope of the methods that use them, but after observing it once, it will remain at the same memory address during the application run.",1901],["Retrieve the value of the static_fields field from that pointer. This is a pointer to a memory block containing static fields for that particular type.",1901],["Cast the value to the corresponding static field structure.",1901],["Observe the value in the Visual Studio debugger.",1901],["Investigate exceptions",1901],["IL2CPP uses native C++ exceptions to implement .NET exceptions.",1901],["To investigate the exceptions in your code, you can:",1901],["Inspect the exception objects in the watch window",1901],["Enable the debugger to break on C++ exceptions",1901],["Additional resources",1901],["UWP scripting symbols",1902],["Unity has a range of built-in scripting symbols which represent options that you can use in your scripts to selectively include or exclude portions of code from compilation. For more information on conditional compilation, refer to Conditional compilation.",1902],["Note:** You can also refer to scripting symbols can as define symbols, preprocessor defines, or defines.",1902],["Unity automatically defines these scripting symbols for Universal Windows Platform (UWP):",1902],["Scripting symbol Description ",1902],["------------------------ ----------------------------------------------------------------- ",1902],["UNITY_WINRT Defined on all scripts. ",1902],["UNITY_WSA Defined on all scripts. ",1902],["UNITY_WINRT_10_0 Defined on all scripts. ",1902],["UNITY_WSA_10_0 Defined on all scripts. ",1902],["ENABLE_IL2CPP Defined on all scripts when using IL2CPP scripting backend. ",1902],["WINDOWS_UWP Defined on all scripts when building for UWP. ",1902],["ENABLE_WINMD_SUPPORT Defined on all scripts when building for UWP. ",1902],["Additional resources",1902],["Develop for Universal Windows Platform",1903],["Before you develop for Universal Windows Platform (UWP), you can find out more about the following topics:",1903],["Topic Description ",1903],["------------------------------------------------------------------ ----------------------------------------------------------------- ",1903],["Use deep linking on UWP Use deep linking on UWP devices. ",1903],["Connect the profiler to UWP Connect Unity's profiler to your UWP application. ",1903],["UWP scripting symbols Learn what scripting symbols are available for UWP. ",1903],["IL2CPP scripting backend for UWP Use plug-ins and debug your UWP applications with IL2CPP. ",1903],["WinRT API in C# scripts for UWP Use WinRT API directly in Unity scripts for UWP. ",1903],["AppCallbacks class reference Call the AppCallbacks class in your UWP application. ",1903],["Command line arguments for UWP Use command line arguments in your UWP application. ",1903],["Association launching for UWP Launch the user's default app for file type or a protocol. ",1903],["Set up your environment for UWP",1904],["To create a Unity application for Universal Windows Platform (UWP), you first need to set up your Unity project to support UWP. To support UWP, a Unity project requires the UWP Build Support module.",1904],["Before you get started, check UWP Requirements and compatibility to make sure you’re aware of any limitations for developing a Unity application for this platform.",1904],["Install dependencies",1904],["Unity distributes dependencies as modules which means you use the Unity Hub to install them. The module you need is UWP Build Support. You can install it either when you install a new Unity Editor version, or add it to an existing Unity Editor install. To install modules:",1904],["At install time, refer to Downloading and installing Editors and modules with the Unity Hub.",1904],["To an existing install, refer to Add modules.",1904],["Additional resources",1904],["Get started with Universal Windows Platform",1905],["Before you get started with Universal Windows Platform (UWP), learn about UWP-specific settings and how to set up a project for UWP development.",1905],["Topic Description ",1905],["---------------------------------------------- ----------------------------------------------------------- ",1905],["Set up your environment for UWP Set up your Unity Project for UWP development. ",1905],["UWP Player settings Refer to the UI description of UWP Player settings. ",1905],["Debug UWP applications with IL2CPP",1906],["Debugging is the process of removing errors from your code. You can debug both C# code and the generated C++ code with IL2CPP, using the Visual Studio debugger.",1906],["Topic Description ",1906],["----------------------------------------------------- --------------------------------------------------------------------- ",1906],["Debug C# code Understand how to use Visual Studio to debug your C# code. ",1906],["Debug generated C++ code Understand how to use Visual Studio to debug your generated C++ code. ",1906],["Additional resources",1906],["Use UWP plug-ins with IL2CPP",1907],["You can use plug-ins to call code created outside of Unity from your C# scripts. The plug-in model for Universal Windows Platform (UWP) is similar to other Unity-supported platforms. For more information about plug-ins with Unity, refer to Plug-ins.",1907],["Topic Description ",1907],["-------------------------------------------------------------- ----------------------------------------------------------- ",1907],["Use managed UWP plug-ins Understand how to use managed plug-ins. ",1907],["Call and implement native UWP plug-ins Understand how to call and implement native plug-ins. ",1907],["Author native UWP plug-ins Understand how to author native plug-ins. ",1907],["Use P/Invoke Learn the rules and limitations of using P/invoke. ",1907],["Additional resources",1907],["IL2CPP scripting backend for UWP",1908],["IL2CPP is the only scripting backend Unity supports to build Universal Windows Platform (UWP) applications. When you build a project using IL2CPP, Unity converts the Microsoft Intermediate Language code from your scripts into C++ before creating a native binary file. For more information on IL2CPP, refer to IL2CPP overview.",1908],["Topic Description ",1908],["---------------------------------------------------------- ---------------------------------------------------------- ",1908],["Use UWP plug-ins with IL2CPP Understand how to use managed and native plug-ins for UWP. ",1908],["Debug UWP applications with IL2CPP Debug your code with IL2CPP. ",1908],["Additional resources",1908],["Introduction to Universal Windows Platform",1909],["You can use this page to understand key requirements and concepts for Universal Windows Platform (UWP) before starting to develop and build your Unity application.",1909],["Topic Description ",1909],["-------------------------------------------------------------- ---------------------------------------------------------------- ",1909],["UWP requirements and compatibility Understand the available supported versions and requirements for UWP development in Unity. ",1909],["Integrate Unity into UWP applications Integrate the Unity Runtime Library into UWP applications. ",1909],["Use managed UWP plug-ins",1910],["Managed plug-ins are managed .NET assemblies that are managed outside of Unity and compiled into dynamically-linked libraries (DLLs). For information about how to create and use managed plug-ins, refer to Managed plug-ins.",1910],["The IL2CPP scripting backend exposes the same .NET API surface as the Unity Editor and standalone Player. As a result, you can use the same plug-ins and you don't have to compile separate versions to target different .NET APIs for Universal Windows Platform (UWP).",1910],["Additional resources",1910],["Author native UWP plug-ins",1911],["To author native Universal Windows Platform (UWP) plug-ins, you need to know how to create native plug-ins for Unity. For more information about native plug-ins and their uses, refer to Native plug-ins.",1911],["To author native UWP plug-ins, you can use either a precompiled dynamic-link library (DLL) or the C++ source code.",1911],["Precompiled native plug-ins",1911],["To P/Invoke into precompiled native plug-ins, you need to:",1911],["Load the DLL at runtime.",1911],["Find the function entry point.",1911],["Call the plug-in.",1911],["You need to compile the DLLs against the appropriate Windows SDK for the target CPU architecture. You also need to configure the DLLs in the Plug-in Inspector when you add them to a Unity project.",1911],["C++ source code native plug-ins",1911],["You can add C++ (.cpp) code files directly into a Unity project, which will act as a plug-in in the Plug-in Inspector. If you configure the plug-ins to be compatible with UWP and the IL2CPP scripting backend, Unity compiles these C++ files together with the C++ code that it generates from managed assemblies.",1911],["Additional resources",1911],["Call and implement native UWP plug-ins",1912],["To call and implement native Universal Windows Platform (UWP) plug-ins, you need to know how to create native plug-ins for Unity. For more information about native plug-ins and their uses, refer to Native plug-ins.",1912],["IL2CPP scripting backend supports the P/Invoke mechanism for native plug-ins. This means that you can call into native plug-ins directly from your C# code. To do this, you specify the native function prototype and then call it.",1912],["The following examples show you how to implement a native plug-in and call it from a C# script.",1912],["Create a new .cpp file in your Unity project and insert the following native plug-in code:",1912],["extern \"C\" __declspec(dllexport)",1912],["int _stdcall CountLettersInString(wchart* str)",1912],["int length = 0;",1912],["while (*str++ != nullptr)",1912],["length++;",1912],["return length;",1912],["Create a new C# script and replace its contents with the following code:",1912],["[DllImport(\"MyPlugin.dll\")]",1912],["private static extern int CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);",1912],["private void Start()",1912],["Debug.Log(CountLettersInString(\"Hello, native plug-in!\"));",1912],["Add the component to a GameObject in your scene and enter Play mode. The console will print 22.",1912],["using UnityEngine;",1912],["public class ExamplePlugin : MonoBehaviour",1912],["[DllImport(\"MyPlugin.dll\")]",1912],["private static extern int CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);",1912],["private void Start()",1912],["Debug.Log(CountLettersInString(\"Hello, native plug-in!\"));",1912],["Additional resources",1912],["Package a UWP app in Visual Studio",1913],["Before you distribute your Universal Windows Platform (UWP) application, you need to package it in Visual Studio. For more information, refer to Microsoft documentation on packaging a desktop or UWP app in Visual Studio.",1913],["Create an app package in Visual Studio",1913],["To create an app package in Visual Studio:",1913],["Open your built UWP project in Visual Studio.",1913],["In the Solution Explorer, right-click on your main project.",1913],["Go to Publish > Create App Packages. The Create App Packages wizard appears.",1913],["Select Microsoft Store using a new app name and then click Next. Note: If you choose Sideloading, Visual Studio will not generate the app package upload file for Partner Center submissions. You can select the Sideloading option if you only want to create a MSIX package for non-Store distribution.",1913],["On the next page, sign in to the Partner Center with your developer account. If you don't have a developer account yet, the wizard will show you how to create one.",1913],["Select the app name for your package from the list of apps currently registered to your account, or reserve a new name in the Partner Center.",1913],["In the Select and Configure Packages dialog, select the architectures you want to target based on the devices you want to deploy your application to.",1913],["In the Generate app bundle listbox, select Always.",1913],["Click Create to generate the app package.",1913],["Your app is now successfully packaged.",1913],["Install your package on your machine",1913],["After you create your app package, use the following steps to install the package on your machine:",1913],["Open the folder which contains your package.",1913],["Right-click on the Add-AppxPackage <yourappx>.appx file. Choose Run with PowerShell and follow the prompts.",1913],["If you signed your file, the file will now install on your machine.Note: If you’re re-installing an .appx file, you must uninstall the file that was previously installed by right-clicking the file icon, and then clicking Uninstall.",1913],["Use P/Invoke",1914],["P/Invoke is a technology that allows you to access structs, callbacks, and functions in native code from your managed code. The default calling convention for P/Invoke functions on x86 is __stdcall. For more information, refer to Microsoft documentation on [P/Invoke] (https://learn.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke).",1914],["P/invoke marshaling rules",1914],["P/Invoke marshaling rules are the same as those for .NET marshaling. However, Unity doesn’t support the following types:",1914],["AnsiBStr",1914],["Currency",1914],["SAFEARRAY",1914],["IDispatch",1914],["TBStr",1914],["VBByRefStr",1914],["P/invoke limitations",1914],["On Universal Windows Platform (UWP), you can't specify the dynamic-link library (DLL) name to P/Invoke into specific system libraries. If you try to P/Invoke into any DLL that exists outside of the project, it will result in a DllNotFoundException at runtime. Therefore, it’s possible to use the __Internal keyword in place of the DLL name, which will use the C++ linker to resolve the functions when you build your project, rather than when you load them at runtime:",1914],["[DllImport(\"__Internal\")]",1914],["private static extern int CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);",1914],["If you make an error when you declare a function in your managed code, it will produce a linker error, rather than an error at runtime. This means that no dynamic loading needs to take place at runtime and the function is called directly, which decreases the overhead of a P/Invoke call.",1914],["Additional resources",1914],["UWP requirements and compatibility",1915],["This page contains system requirements and compatibility information for Universal Windows Platform (UWP) development in Unity.",1915],["UWP application support",1915],["Unity supports four CPU architectures when targeting UWP:",1915],["x86",1915],["x64",1915],["ARM",1915],["ARM64",1915],["Unity supports the following operating system versions:",1915],["Windows 10+",1915],["HoloLens",1915],["Unity supports GPUs capable of running:",1915],["DX10",1915],["DX11",1915],["DX12",1915],["You need the following additional software to develop with UWP:",1915],["Windows 10+ SDK",1915],["Visual Studio 2019 (or later)",1915],["Activate Windows Developer Mode",1915],["You need to activate Windows Developer Mode on your PC and any other testing devices to be able to develop an application for UWP. When you open a UWP project in Visual Studio for the first time, a dialog will open that instructs you on how to select Developer Mode in your settings page. For more information, refer to the Microsoft documentation on how to enable your device for development.",1915],["Player log",1915],["You can locate the player log under <user>\\AppData\\Local\\Packages\\<productname>\\TempState. For more information, refer to log files.",1915],["Variables and the Inspector",1916],["When you create a script in the Editor, Unity automatically provides a template script which inherits from the MonoBehaviour class. Inheriting from the MonoBehaviour class means your script can behave like a type of component, and you can attach it to GameObjects like any other component.",1916],["When your script inherits from MonoBehaviour, you can include properties and values in your script which you can then edit from the Editor Inspector, like you can with any other component.",1916],["The example code below declares a public variable called myName. When you place this script on a GameObject in your scene, the variable becomes visible in the Inspector as a field labelled \"My Name\". The default value of \"none\" declared in the script becomes the default value in the field in the Inspector, which you can then change by typing into the field.",1916],["using UnityEngine;",1916],["using System.Collections;",1916],["public class MainPlayer : MonoBehaviour",1916],["public string myName = \"none\";",1916],["// Use this for initialization",1916],["void Start ()",1916],["Debug.Log(\"I am alive and my name is \" + myName);",1916],["Each GameObject that you place your script component on can have its own unique value for the field.",1916],["To create the Inspector label, Unity inserts a space between lowercase and uppercase characters in the variable name, and applies several other rules (see Variable name to label conversion). However, these changes are purely for display purposes. You should always use the variable name within your code.",1916],["In the Inspector, if you edit the My Name value and press Play, the console message should now include the text that you entered.",1916],["In C#, the simplest way to make a variable editable in the Inspector is to declare it as public. If you want to make a private field editable in the inspector, you can use the SerializeField attribute. Conversely, you can use the [HideInInspector] attribute(ScriptRef:HideInInspector) to prevent a public variable from being displayed in the Inspector.",1916],["Note**: You can change the value of a script's variables in the Editor while running in play mode. This is very useful for seeing the effects of changes directly without having to stop and restart. However, when you stop play mode, the values of the variables reset to whatever they were before you entered play mode (as is the case for all scripts and components).",1916],["",1916],["Object reference fields",1916],["As well as bool, string, and numeric fields, you can also make any field whose type inherits from UnityEngine.Object editable in the inspector. This includes all built-in component types (such as Transform, AudioSource, Camera, Light), your own MonoBehaviour script types, and many asset types.",1916],["This allows you to make use of the Unity Editor's powerful drag-and-drop system in your own scripted components. For example, if you create a public Transform field in your script and add it to one GameObject, you can then drag another GameObject into that field in the inspector to set up a reference to that GameObject's Transform component, which you can then access at run time in your script.",1916],["For example, this \"Follow\" script makes one GameObject follow another:",1916],["using UnityEngine;",1916],["public class Follow : MonoBehaviour",1916],["public Transform objectToFollow;",1916],["public float followSpeed = 1;",1916],["void Update()",1916],["// calculate the distance between this object and the target object",1916],["// and move a small portion of that distance each frame:",1916],["var delta = objectToFollow.position - transform.position;",1916],["transform.position += delta * Time.deltaTime * followSpeed;",1916],["The script has a public field of type Transform which appears in the Editor as an assignable field. You can drag and drop a different GameObject from your Hierarchy window into this field, and the Editor assigns a reference to the Transform component attached to that dropped GameObject.",1916],["In the screenshot below, the script is placed on the Sphere GameObject, and the Cube has been dragged and dropped from the Hierarchy into the \"Object To Follow\" field.",1916],["Note: you can also set up default object references for public object reference fields in your MonoBehaviour scripts.",1916],["",1916],["",1916],["",1916],["",1916],["Variable name to label conversion",1916],["The Inspector applies several rules when it converts your variable name to a label in the Inspector. For example, the variable names in the examples above have been converted from myName to \"My Name\", and from objectToFollow to \"Object To Follow\". The rules are as follows:",1916],["Capitalize the first letter",1916],["Add a space between lowercase and uppercase characters",1916],["Add a space between an acronym and an uppercase character at the beginning of the next word",1916],["Remove \"m_\" from the beginning",1916],["Remove \"k\" from the beginning",1916],["Remove \"_\" from the beginning",1916],["There are some special cases, such as \"iPad\" or \"x64\", where these rules are not applied.",1916],["Variant Sprite Atlas",1917],["A Variant Sprite Atlas is a type of Sprite Atlas that does not contain its own list of selected Textures as it has no Objects for Packing list in its properties. Instead, it receives a copy of the content from the Sprite Atlas set as its Master Atlas.",1917],["Variant Sprite Atlases are an optional step in the Sprite Atlas Workflow. Their main purpose is to create a variation of another Sprite Atlas' Textures but with a different scaled resolution.",1917],["To create a Variant Sprite Atlas:.",1917],["Prepare the Sprite Atlas that will be the Variant Atlas' Master Atlas. It contains the Texture Assets that the Variant Atlas will derive its own content from.",1917],["Create a new Sprite Atlas, and set its Type to 'Variant'.",1917],["Assign the Sprite Atlas prepared in Step 1 to this property to set it as the Variant's Master.",1917],["As a Variant Atlas without a Master Atlas contains no content on its own, Unity will not pack it into a .spriteatlas Asset.",1917],["In a Project that includes both a Master and a Variant Sprite Atlas, if both are Included in the Build, then the Textured used by mutual Sprites can come from either Sprite Atlas (refer to Scenario 3 of the Resolving different Sprite Atlas scenarios page).",1917],["To automatically load Sprite Textures from the Variant Atlas instead of the Master Atlas, enable Include in Build for the Variant Atlas only and disable it for the Master Atlas. The build then automatically loads the Variant Sprite Atlas instead of the Master Atlas at run time.",1917],["Scale the Textures of a Variant Sprite Atlas",1917],["A Variant Sprite Atlas scales the Textures it gets from its Master Atlas via its Scale property. The resolution of the Variant Atlas’ Texture is the result of the Master Atlas’ Texture multiplied by the Scale factor.",1917],["Set the Scale of the Variant Atlas from the range of 0.1 to 1:",1917],["Create multiple Variant Atlases with the same Master Atlas and different Scale values to create lower-resolution copies of the Atlas Texture. This is useful if you want to create various Variant Atlases for a range of platforms with different hardware limitations.",1917],["Vectors",1918],["Vectors are a fundamental mathematical concept which allow you to describe a direction and magnitude. In games and apps, vectors are often used to describe some of the fundamental properties such as the position of a character, the speed something is moving, or the distance between two objects.",1918],["Vector arithmetic is fundamental to many aspects of computer programming such as graphics, physics and animation, and it is useful to understand it in depth to get the most out of Unity.",1918],["Vectors can be expressed in multiple dimensions, and Unity provides the Vector2, Vector3 and Vector4 classes for working with 2D, 3D, and 4D vectors.",1918],["These three types of Vector classes all share many of the same functions, such as magnitude, so most of the information on this page applies to all three types of Vector unless otherwise specified.",1918],["This page provides an overview of the Vector classes and their common uses when scripting with them. For an exhaustive reference of every member of the vector classes, see the script reference pages for Vector2, Vector3 and Vector4.",1918],["Understanding Vector Arithmetic",1918],["Addition",1918],["When two vectors are added together, the result is equivalent to taking the original vectors as \"steps\", one after the other. Note that the order of the two parameters doesn't matter, since the result is the same either way.",1918],["If the first vector is taken as a point in space then the second can be interpreted as an offset or \"jump\" from that position. For example, to find a point 5 units above a location on the ground, you could use the following calculation:-",1918],["var pointInAir = pointOnGround + new Vector2(0, 5);",1918],["If the vectors represent forces then it is more intuitive to think of them in terms of their direction and magnitude (the magnitude indicates the size of the force). Adding two force vectors results in a new vector equivalent to the combination of the forces. This concept is often useful when applying forces with several separate components acting at once (eg, a rocket being propelled forward may also be affected by a crosswind).",1918],["Although the examples here show 2D vectors, the same concept applies to 3D and 4D vectors.",1918],["Subtraction",1918],["Vector subtraction is most often used to get the direction and distance from one object to another. Note that the order of the two parameters does matter with subtraction:-",1918],["// The vector d has the same magnitude as c but points in the opposite direction.",1918],["var c = b - a;",1918],["var d = a - b;",1918],["As with numbers, adding the negative of a vector is the same as subtracting the positive.",1918],["// These both give the same result.",1918],["var c = a - b;",1918],["var c = a + -b;",1918],["The negative of a vector has the same magnitude as the original and points along the same line but in the exact opposite direction.",1918],["Direction and Distance from One Object to Another",1918],["If one point in space is subtracted from another, then the result is a vector that \"points\" from one object to the other:",1918],["// Gets a vector that points from the player's position to the target's.",1918],["var heading = target.position - player.position;",1918],["As well as pointing in the direction of the target object, this vector's magnitude is equal to the distance between the two positions. You may need a \"normalized\" vector giving the direction to the target, but with a fixed distance (say for directing a projectile). You can normalize a vector by dividing it by its own magnitude:",1918],["var distance = heading.magnitude;",1918],["var direction = heading / distance; // This is now the normalized direction.",1918],["This approach is preferable to using both the magnitude and normalized properties separately, since they are both quite CPU-hungry (they both involve calculating a square root).",1918],["If you only need to use the distance for comparison (for a proximity check, say) then you can avoid the magnitude calculation altogether. The sqrMagnitude property gives the square of the magnitude value, and is calculated like the magnitude but without the time-consuming square root operation. Rather than compare the magnitude against a known distance, you can compare the squared magnitude against the squared distance:-",1918],["if (heading.sqrMagnitude < maxRange * maxRange) {",1918],["// Target is within range.",1918],["This is much more efficient than using the true magnitude in the comparison.",1918],["Sometimes, when working in 3D, you might need an \"overground heading\" to a target. For example, imagine a player standing on the ground who needs to approach a target floating in the air. If you subtract the player's position from the target's then the resulting vector will point upwards towards the target. This is not suitable for orienting the player's transform since they will also point upwards; what is really needed is a vector from the player's position to the position on the ground directly below the target. You can obtain this by taking the result of the subtraction and setting the Y coordinate to zero:-",1918],["var heading = target.position - player.position;",1918],["heading.y = 0; // This is the overground heading.",1918],["Scalar Multiplication and Division",1918],["When discussing vectors, it is common to refer to an ordinary number (eg, a float value) as a scalar. The meaning of this is that a scalar only has \"scale\" or magnitude whereas a vector has both magnitude and direction.",1918],["Multiplying a vector by a scalar results in a vector that points in the same direction as the original. However, the new vector's magnitude is equal to the original magnitude multiplied by the scalar value.",1918],["Likewise, scalar division divides the original vector's magnitude by the scalar.",1918],["These operations are useful when the vector represents a movement offset or a force. They allow you to change the magnitude of the vector without affecting its direction.",1918],["When any vector is divided by its own magnitude, the result is a vector with a magnitude of 1, which is known as a normalized vector. If a normalized vector is multiplied by a scalar then the magnitude of the result will be equal to that scalar value. This is useful when the direction of a force is constant but the strength is controllable (eg, the force from a car's wheel always pushes forwards but the power is controlled by the driver).",1918],["Dot Product",1918],["The dot product takes two vectors and returns a scalar. This scalar is equal to the magnitudes of the two vectors multiplied together and the result multiplied by the cosine of the angle between the vectors. When both vectors are normalized, the cosine essentially states how far the first vector extends in the second's direction (or vice-versa - the order of the parameters doesn't matter).",1918],["Below you can see a comparison of how vectors of varying angles compared with a reference vector return a dot product value between 1 and -1 :",1918],["The dot product is a mathematically simpler operation than calculating the cosine, so it can be used in place of the Mathf.Cos function or the vector magnitude operation in some circumstances (it doesn't do exactly the same thing but sometimes the effect is equivalent). However, calculating the dot product function takes much less CPU time and so it can be a valuable optimization.",1918],["The dot product is useful if you want to calculate the amount of one vector's magnitude that lies in the direction of another vector.",1918],["For example, a car's speedometer typically works by measuring the rotational speed of the wheels. The car may not be moving directly forward (it may be skidding sideways, for example) in which case part of the motion will not be in the direction the car is facing - and so won't be measured by the speedometer. The magnitude of an object's rigidbody.velocity vector will give the speed in its direction of overall motion but to isolate the speed in the forward direction, you should use the dot product:",1918],["var fwdSpeed = Vector3.Dot(rigidbody.velocity, transform.forward);",1918],["Naturally, the direction can be anything you like but the direction vector must always be normalized for this calculation. Not only is the result more correct than the magnitude of the velocity, it also avoids the slow square root operation involved in finding the magnitude.",1918],["Cross Product",1918],["The cross product is only meaningful for 3D vectors. It takes two 3D vectors as input and returns another 3D vector as its result.",1918],["The result vector is perpendicular to the two input vectors. You can use the \"right hand screw rule\" to remember the direction of the output vector from the ordering of the input vectors. If you can curl your fingers in the order of the input vectors, your thumb points in the direction of the output vector. If the order of the parameters is reversed then the resulting vector will point in the exact opposite direction but will have the same magnitude.",1918],["The magnitude of the result is equal to the magnitudes of the input vectors multiplied together and then that value multiplied by the sine of the angle between them. Some useful values of the sine function are shown below:-",1918],["The cross product can seem complicated since it combines several useful pieces of information in its return value. However, like the dot product, it is very efficient mathematically and can be used to optimize code that would otherwise depend on slower transcendental functions such as sine and cosine.",1918],["Computing a Normal/Perpendicular vector",1918],["A \"normal\" vector (ie. a vector perpendicular to a plane) is required frequently during mesh generation and is also useful in path following and other situations. Given three points in the plane, say the corner points of a mesh triangle, you can find the normal as follows:",1918],["\nPick one of the three points\n",1918],["\nSubtract it from each of the two other points separately (resulting in two new vectors, \"Side 1\" and \"Side 2\")\n",1918],["\nCalculate the cross product of the vectors \"Side 1\" and \"Side 2\"\n",1918],["\nThe result of the cross product is a new vector that is perpendicular to the plane the three original points lie on - the \"normal\".\n",1918],["Vector3 a;",1918],["Vector3 b;",1918],["Vector3 c;",1918],["Vector3 side1 = b - a;",1918],["Vector3 side2 = c - a;",1918],["Vector3 normal = Vector3.Cross(side1, side2);",1918],["The \"left hand rule\" can be used to decide the order in which the two vectors should be passed to the cross product function. As you look down at the top side of the surface (from which the normal will point outwards) the first vector should sweep around clockwise to the second:",1918],["The result will point in exactly the opposite direction if the order of the input vectors is reversed.",1918],["For meshes, the normal vector must also be normalized. This can be done with the normalized property, but there is another trick which is occasionally useful. You can also normalize the perpendicular vector by dividing it by its magnitude:-",1918],["float perpLength = perp.magnitude;",1918],["perp /= perpLength;",1918],["Another useful note is that the area of the triangle is equal to perpLength / 2. This is useful if you need to find the surface area of the whole mesh or want to choose triangles randomly with probability based on their relative areas.",1918],["Check For Updates",1919],["Unity checks whether updates are available. This check happens either when Unity is started, or when you choose the Help->Check for Updates menu item. The update check sends the current Unity revision number (the five digit number that appears in brackets after the version name in the About Unity dialog) to the update server where is it compared with the most-up-to-date released version. If a newer version of Unity is available the following dialog is shown:",1919],["If the version in use is the most up-to-date then the following dialog is shown:",1919],["Click the Download new version button to be taken to the website where you can download the new version.",1919],["Update Check Frequency",1919],["The response from the server also contains a time interval which suggests when the next update check should be made. This allows the update check to be made less frequently when Unity is not expecting updates to be made available.",1919],["Skipping Update Versions",1919],["If you are in the middle of a project you may not want to update to a new version of Unity. Ticking the Skip this version button on the Unity Editor Update Check dialog will prevent Unity from telling you about this update.",1919],["Disabling the Update Check",1919],["It is not possible to disable the check for updates. The Check For Updates tick box on the dialog controls whether you are notified of updates (if they are available) when Unity starts. Even if you have unticked the Check for Updates option you can still check for updates by using the Help->Check for Updates menu item.",1919],["2017-11-10  ",1919],["Version Control",1920],["You can use Unity in conjunction with most common version control tools, including Perforce and PlasticSCM. This section gives details of the tools and options available and how to work with them.",1920],["Version control integrations",1921],["Unity has integrations with two version control systems: Perforce and Plastic SCM. To use the version control integrations in Unity, you need to have either a Perforce or Plastic SCM server set up for your Unity Project.",1921],["Setting up version control in Unity",1921],["Open a Unity Project, go to Edit > Project Settings, and then select the Editor category.",1921],["Under Version Control there are the following settings:",1921],["Property Function ",1921],["",1921],["Mode Select the version control mode. ",1921],["Hidden meta files Hides the .meta files in your operating system’s file explorer. Unity does not show .meta files in the Project view, no matter which mode you choose. ",1921],["Visible meta files Select this option to work with a version control system that Unity doesn’t support. This is the default setting. You can then manage the source Assets and metadata for those Assets with a version control system of your choice. ",1921],["Perforce Select this option if you use Perforce as your version control system. ",1921],["Plastic SCM Select this option if you use Plastic SCM as your version control system. ",1921],["Username (Perforce only) Enter the username associated with your Perforce account. ",1921],["Password (Perforce only) Enter the password associated with your Perforce account. ",1921],["Workspace (Perforce only) Enter your workspace (for example, Example_Workspace_1). ",1921],["Server (Perforce only) Enter the server your Unity Project is on (for example, localhost:1666). ",1921],["Host (Perforce only) Enter the hostname that your computer should impersonate (for example, workstation123.perforce.com) ",1921],["Log Level Select how much version control information to receive in Unity’s console log. ",1921],["Verbose Unity logs every operation related to version control. This option provides very detailed logging, and is useful if you want to debug your version control setup. ",1921],["Info Unity logs errors, warnings, and information related to version control. ",1921],["Notice Unity logs errors and warnings. ",1921],["Fatal Unity prints only fatal errors to the console. ",1921],["Status Displays information on the status of the connection to the version control system. If you are not connected, select Connect to connect to the system you have configured. ",1921],["Automatic Add When this setting is enabled, Unity automatically adds your files to the version control system when you add them to the Project, either via the Editor or the folder on disk. When this setting is disabled, you need to add files manually to the version control system. This setting is enabled by default. ",1921],["Work Offline (Perforce only) Enable this setting to work offline. When this setting is enabled, you need to reconcile offline work in P4V or use the reconcile command in P4 to bring the Perforce server depot up to date with the work you did while offline. For more information, see Working offline with Perforce ",1921],["Allow Async Update (Perforce only) Enable this setting to use asynchronous version control status queries. When enabled, Perforce updates the version control status of files without stalling the Unity Editor. Use this setting when the connection to your version control server has high latency. Note: Only status queries are asynchronous. Unity synchronously performs operations that change the state of files, or require up-to-date knowledge of a file status. ",1921],["Show Failed Checkouts (Perforce only) Enable this property to show a dialog when Perforce can’t perform the check out operation. This might happen if you lose connection, or if another user has exclusively checked out the Asset you want to edit. ",1921],["Overwrite Failed Checkout Assets (Perforce only) When you enable this setting, Unity saves any Assets that can not be checked out. This means Unity forces through a save to a file, even if Perforce cannot check out the file. This is enabled by default. If you disable it, Unity doesn’t force your files to save if Perforce can’t check them out. ",1921],["Overlay Icons Enable this setting to display version control status icons in the Editor. ",1921],["Smart Merge Smart Merge makes it easier for Unity to merge files that have changes on the same line. This is useful if several users are working on the same Project at the same time. ",1921],["Off Disable Smart Merge. ",1921],["Ask Enable Smart Merge, but receive a notification before you merge, if a conflict happens. This is the default setting. ",1921],["Premerge Automatically use Smart Merge. ",1921],["Configure the Version Control settings, then select the Connect button next to the status area to connect to the version control system. When Unity connects to the system, Connected displays in the status area.",1921],["To adjust your revision control tool, open Preferences and then select the External Tools section. You can choose a new tool under Revision Control Diff/Merge.",1921],["Using version control in Unity",1921],["When you set the Editor up to work with your version control system, you can perform version control operations via the Editor, instead of in the version control client. To do this, right-click on the Asset in the Project view.",1921],["The version control operations vary depending on which version control you use. The following table displays what actions are available for each version control:",1921],["Version control operation Description Perforce Plastic SCM ",1921],["",1921],["Get Latest This updates the files on your machine to match those in the version control system. Yes No. To get the latest changes and update the file, you need to use the version control window (Window > Asset Management > Version Control). ",1921],["Submit Submits the current state of the files to the version control system. Yes Yes ",1921],["Check Out Allows changes to be made to the files. Yes Yes ",1921],["Check Out (Other) Select whether to check out both the Asset and its .meta file, or only the Asset, or only the .meta file. Yes No ",1921],["Mark Add Adds the files into version control. Yes Yes ",1921],["Revert Discards changes to open changed files. Yes Yes ",1921],["Revert Unchanged Removes the checked out status from files that have previously been checked out but you haven’t modified. Yes Yes ",1921],["Resolve Conflicts Resolves conflicts on files that have been changed by multiple users. Yes No. Conflicts appear in the version control menu, but you need to resolve them in the Plastic SCM GUI. ",1921],["Lock Prevents other users from submitting changes to the files. Yes No. To lock or unlock files in Plastic SCM, you must edit a specific Plastic SCM lock file externally. For more information, see the page on Plastic SCM Integration. ",1921],["Unlock Releases the lock and allows anyone to submit changes. Yes No. To lock or unlock files in Plastic SCM, you must edit a specific Plastic SCM lock file externally. For more information, see the page on Plastic SCM Integration. ",1921],["Diff Compares the differences between the local files on your computer and the files on the server. You can choose to diff only the Asset file, or the Asset file and its .meta file. Yes Yes ",1921],["Checking out files",1921],["In some version control systems, such as Perforce, versioned files are read-only by default,",1921],["and require you to check them out before you edit them (unless you have enabled the Work offline setting). When you work with versioned Assets from the Editor, the Inspector displays a Check Out button that enables file editing. Additionally, Project Settings inspectors have a Checkout button that you can use to check out specific Project settings.",1921],["If you have custom Editor script code that disables parts of another custom editing tool",1921],["for read-only Assets, or if you are writing to versioned files manually, use the",1921],["AssetDatabase.IsOpenForEdit and",1921],["AssetDatabase.MakeEditable APIs to",1921],["check for file editability and to perform check out operations.",1921],["The Version Control integration also exposes",1921],["and Provider.PreSubmitCallback",1921],["C# callbacks for custom version control operation validation logic.",1921],["Unity writes any Assets you modify or mark as modified in the Editor to the disk when it performs a Save Project operation. The Assets are then checked out in version control if needed. This might lead to Assets getting checked out even if no actual changes to the file happens. This most often happens when an Editor script calls EditorUtility.SetDirty on an Asset, without checking if it was modified.",1921],["Note:** If Unity cannot commit your changes to your version control client (for example, if the server is down or if license issues occur), it stores your changes in a separate changeset.",1921],["When you save your changes to a .scene file, Unity automatically checks it out. If you use Plastic SCM, it also automatically checks out automatically generated Assets, such as light maps.",1921],["",1921],["Version Control window",1921],["You can use the Version Control window to view the files in your changelist. To access the window navigate to Window > Asset Management > Version Control.",1921],["The Outgoing tab lists all of the local changes that are pending a commit into version control. The Incoming tab lists all of the changes that need to be pulled from version control.",1921],["Right-click Assets or changelists in the window to perform operations on them. To move Assets between changelists, drag them from one changelist to the header of the target changelist.",1921],["Icons",1921],["The Editor displays the following icons to visualize the version control status for files and Assets:",1921],["Icon Purpose ",1921],[" File added locally, and pending addition into version control. ",1921],[" File added to version control by another user, and pending addition into version control. ",1921],[" File is checked out locally. ",1921],[" File is checked out by another user remotely. ",1921],[" There has been a conflict merging this file and it needs to be resolved. ",1921],[" File has been deleted locally, and is pending deletion in version control. ",1921],[" File has been deleted by another user and is pending deletion in version control. ",1921],[" File is not yet under version control. You can use the Mark Add operation to add the file manually. ",1921],[" File is locked by you and other users cannot modify it. ",1921],[" File is locked by another user and you cannot modify it. ",1921],[" Another user has checked in a new version of this file. Use the Apply Incoming Changes operation to get the latest version. ",1921],[" The server is requesting the version control status of this file, or is waiting for a response. This only appears if you use a centralized version control system like Perforce. ",1921],["Visual Effect Graph",1922],["The Visual Effect Graph is a package that you can use to create large-scale visual effects for your Unity Project. The Visual Effect Graph simulates particle behavior on the GPU, which allows it to simulate many more particles than the Built-in Particle System. If you want to create visual effects that include a large number of particles and need highly customisable behavior, use the Visual Effect Graph instead of the Built-in Particle System. For information on how to install and use the Visual Effect Graph, see the getting started guide.",1922],["Video sources",1923],["The Video Player component plays content imported from a variety of sources, such as video clips, URLs, Asset Bundles, and from the Streaming Assets folder.",1923],["Video Clip",1923],["The Video Player component plays videos from a Video Clip Asset. To create and use a Video Clip Asset, you must first import a video file.",1923],["There are two ways to import a video file into Unity:",1923],["Drag a video file and drop it into the Project window to create a Video Clip.",1923],["Navigate to Assets > Import New Asset... to import a video file.",1923],["After the video file is imported, you can select the newly created Video Clip in the Video Player component window using the Select VideoClip option by clicking the circle button to the right of the video clip, or by dragging and dropping the Video Clip Asset into the corresponding Video Player component field.",1923],["",1923],["URLs",1923],["Use the Source drop-down to set the video source to URL. By default, the Source is set to Video Clip.",1923],["On native build platforms, setting Source to URL allows direct use of files in the filesystem, with or without a file:// prefix. On WebGL platform however, the Source must point to a web URL because playback from local filesystem and Application.persistentDataPath isn't supported.",1923],["Note:** Certain web browsers allow you to manually disable browser CORS security for file:// URL access for local development and testing purposes. For example, in Chrome, you can start the browser with the --allow-file-access-from-files command line option, but this isn't a recommended approach.",1923],["The URL source option bypasses Asset management; therefore, you must manually ensure that Unity is able to locate the source video. For example, a web URL needs a web server to host the source video, while a normal file must be located somewhere where Unity can find it, indicated with scripting. This helps in situations where the content isn't under Unity’s direct control, or if you want to avoid storing large video files locally.",1923],["You can also set the Video Player component source to URL to read videos from web sources via http:// and https://. In these cases, Unity performs the necessary pre-buffering and error management.",1923],["Asset Bundles",1923],["Video Clips can also be read from Asset Bundles.",1923],["After the video clips are imported, you can use them by assigning it in the Video Player component window Video Clip field.",1923],["Streaming Assets",1923],["Files placed in Unity’s StreamingAssets folder are used via the Video Player component’s URL option, or by using the platform-specific path Application.streamingAssetsPath.",1923],["Additional resources",1923],["StreamingAssets folder",1923],["Panoramic video",1924],["Unity's panoramic video feature enables you to:",1924],["Easily include real-world video shot in 360 degrees.",1924],["Reduce Scene complexity in VR by including a pre-rendered backdrop video instead of real geometry.",1924],["Unity supports 180 and 360 degree videos in either an equirectangular layout (longitude and latitude) or a cubemap layout (6 frames).",1924],["Equirectangular 2D videos should have an aspect ratio of exactly 2:1 for 360 content, or 1:1 for 180 content.",1924],["Cubemap 2D videos should have an aspect ratio of 1:6, 3:4, 4:3, or 6:1, depending on face layout:",1924],["To use the panoramic video features in the Unity Editor, you must have access to panoramic video clips, or know how to author them.",1924],["This page describes the following steps to display any panoramic video in the Editor:",1924],["Set up a Video Player to play the video source to a Render Texture.",1924],["Set up a Skybox Material that receives the Render Texture.",1924],["Set the Scene to use the Skybox Material.",1924],["Note**: This is a resource-intensive feature. For best visual results, use panoramic videos in the highest possible resolution (often 4K or 8K). Large videos require more computing power and resources for decoding. Most systems have specific limits on maximum video decoding resolutions (for example, many mobiles are limited to HD or 2K, and older desktops might be limited to 2K or 4K).",1924],["Video player setup",1924],["Import your video into Unity as an Asset. To create a Video Player, drag the video Asset from the Project view to an empty area of Unity's Hierarchy view. By default, this sets up the component to play the video full-screen for the default Camera. Press Play to view this.",1924],["You should change this behaviour so that it renders to a Render Texture. That way, you can control exactly how it is displayed. To do this, go to Assets > Create > Render Texture.",1924],["Set the Render Texture’s Size to match your video exactly. To check the dimensions of your video, select the video in your Assets folder and view the Inspector window. Scroll to the section where Unity previews your video, select your video’s name in the preview window, and change it to Source Info.",1924],["Next, set your Render Texture’s Depth Buffer option to No depth buffer.",1924],["Now, open the Video Player Inspector and switch the Render Mode to Render Texture. Drag your new Render Texture from the Asset view to the Target Texture slot.",1924],["Enter Play mode to verify that this is functioning correctly.",1924],["The video doesn’t render in the Game window, but you can select the Render Texture Asset to see that its content updating with each video frame.",1924],["Create a Skybox Material",1924],["You need to replace the default Skybox with your video content to render the panoramic video as a backdrop to your Scene.",1924],["To do this, create a new Material (Assets > Create > Material). Go to your new Material’s Inspector and set the Material’s Shader to Skybox/Panoramic (go to Shader > Skybox > Panoramic).",1924],["Drag the Render Texture from the Asset view to the Texture slot in the new Material’s Inspector.",1924],["You must correctly identify the type of content in the video (cubemap or equirectangular) for the panoramic video to display properly. For cubemap content (such as a cross and strip layout, as is common for static Skybox Textures), set Mapping to 6 Frames Layout.",1924],["For equirectangular content, set Mapping to Latitude Longitude Layout, and then either the 360 degree or 180 degree sub-option. Choose the 360 degree option if the video covers a full 360-degree view. Choose 180 degree if the video is just a front-facing 180-degree view.",1924],["Look at the Preview at the bottom of the Material Inspector. Pan around and check that the content looks correct.",1924],["Render the panoramic video to the Skybox",1924],["Finally, you must connect your new Skybox Material to the Scene.",1924],["Open up the Lighting window (menu: Window > General > Lighting).",1924],["Drag and drop the new Skybox Material Asset to the first slot under Environment.",1924],["Press Play to show the video as a Scene backdrop on the Skybox.",1924],["Change the Scene Camera orientation to show a different portion of the Skybox (and therefore a different portion of the panoramic video).",1924],["3D panoramic video",1924],["Turn on Virtual Reality Support in the Player settings (menu: Edit > Project Settings, then select the Player category, and open the XR Settings panel), especially if your source video has stereo content. This unlocks an extra 3D Layout option in the Skybox/Panoramic Material. The 3D Layout has three options : Side by Side, Over Under, and None (default value).",1924],["Use the Side by Side settings if the video contains the left eye's content on the left and the right eye's content on the right. Choose Over Under if the left and right content are positioned above and below one another in the video. Unity detects which eye is currently being rendered and sends this information to the Skybox/Panoramic shader using Single Pass Stereo rendering. The shader contains the logic to select the correct half of the video based on this information when Unity renders each eye’s content in VR.",1924],["For non-360 3D video (where you shouldn’t use a Skybox Material), the same 3D Layout is available directly in the Video Player component when using the Camera Near/Far Plane Render Modes.",1924],["Alternate Render Texture type for cubemap videos",1924],["When working with cubemap videos, instead of the Video Player rendering to a 2D Render Texture and preserving the exact cube map layout, you can render the Video Player directly to a Render Texture Cube.",1924],["To achieve this, change the Render Texture Asset’s Dimension from 2D to Cube and set the Render Texture’s __Size to be exactly the dimensions of the individual faces of the source video.",1924],["For example, if you have a 4 x 3 horizontal cross cubemap layout video with dimensions 4096 x 3072, set the Render Texture’s Size to 1024 x 1024 (4096 / 4 and 3072 / 3).",1924],["While rendering to a Cube Target Texture, the Video Player assumes that the source video contains a cube map in either a cross or a strip layout (which it determines using the video aspect ratio). The Video Player then fills out the Render Texture’s faces with the correct cube faces.",1924],["Use the resulting Render Texture Cube as a Skybox. To do this, create a Material and assign Skybox/Cubemap as the Shader(Shader > Skybox > Cubemap) instead of the Skybox/Panoramic Material described above.",1924],["Video dimensions and transcoding",1924],["Including 3D content requires double either the width or the height of the video (corresponding to Side-by-Side or Over-Under layouts).",1924],["Keep in mind that many desktop hardware video decoders are limited to 4K resolutions and mobile hardware video decoders are often limited to 2K or less which limits the resolution of playback in real-time on those platforms.",1924],["You can use video transcoding to produce lower resolution versions of panoramic videos, but take precautions to avoid introducing bleeding at the edge between left and right 3D content, or,",1924],["between cube map faces and adjacent black areas. In general, you should author video in power-of-two dimensions and transcoding to other power-of-two dimensions to reduce visual artifacts.",1924],["2017-10-25 ",1924],["Added 2D and 3D panoramic video support in 2017.3 NewIn20173",1924],["Migrating from MovieTexture to VideoPlayer",1925],["If you have projects that use the legacy MovieTexture component to download and play movies, you can update them to use the newer VideoPlayer component.",1925],["To help you migrate from MovieTexture to VideoPlayer, this page provides examples of how to download and play back a movie using each component.",1925],["Playing a Movie",1925],["MovieTexture",1925],["using UnityEngine;",1925],["public class PlayMovieMT : MonoBehaviour",1925],["public AudioClip movieAudioClip;",1925],["public MovieTexture movieTexture;",1925],["void Start()",1925],["var audioSource = gameObject.AddComponent();",1925],["audioSource.clip = movieAudioClip;",1925],["void Update()",1925],["if (Input.GetButtonDown(\"Jump\"))",1925],["var audioSource = GetComponent();",1925],["GetComponent().material.mainTexture = movieTexture;",1925],["if (movieTexture.isPlaying)",1925],["movieTexture.Pause();",1925],["audioSource.Pause();",1925],["else",1925],["movieTexture.Play();",1925],["audioSource.Play();",1925],["VideoPlayer",1925],["using UnityEngine;",1925],["public class PlayMovieVP : MonoBehaviour",1925],["public UnityEngine.Video.VideoClip videoClip;",1925],["void Start()",1925],["var videoPlayer = gameObject.AddComponent();",1925],["var audioSource = gameObject.AddComponent();",1925],["videoPlayer.playOnAwake = false;",1925],["videoPlayer.clip = videoClip;",1925],["videoPlayer.renderMode = UnityEngine.Video.VideoRenderMode.MaterialOverride;",1925],["videoPlayer.targetMaterialRenderer = GetComponent();",1925],["videoPlayer.targetMaterialProperty = \"_MainTex\";",1925],["videoPlayer.audioOutputMode = UnityEngine.Video.VideoAudioOutputMode.AudioSource;",1925],["videoPlayer.SetTargetAudioSource(0, audioSource);",1925],["void Update()",1925],["if (Input.GetButtonDown(\"Jump\"))",1925],["var vp = GetComponent();",1925],["if (vp.isPlaying)",1925],["vp.Pause();",1925],["else",1925],["vp.Play();",1925],["Downloading a Movie",1925],["MovieTexture",1925],["using UnityEngine;",1925],["public class DownloadMovieMT : MonoBehaviour",1925],["void Start()",1925],["StartCoroutine(GetMovieTexture());",1925],["IEnumerator GetMovieTexture()",1925],["using (var uwr = UnityWebRequestMultimedia.GetMovieTexture(\"https://myserver.com/mymovie.ogv\"))",1925],["yield return uwr.SendWebRequest();",1925],["if (uwr.isNetworkError uwr.isHttpError)",1925],["Debug.LogError(uwr.error);",1925],["yield break;",1925],["MovieTexture movie = DownloadHandlerMovieTexture.GetContent(uwr);",1925],["GetComponent().material.mainTexture = movie;",1925],["movie.loop = true;",1925],["movie.Play();",1925],["VideoPlayer",1925],["using UnityEngine;",1925],["public class DownloadMovieVP : MonoBehaviour",1925],["void Start()",1925],["var vp = gameObject.AddComponent();",1925],["vp.url = \"https://myserver.com/mymovie.mp4\";",1925],["vp.isLooping = true;",1925],["vp.renderMode = UnityEngine.Video.VideoRenderMode.MaterialOverride;",1925],["vp.targetMaterialRenderer = GetComponent();",1925],["vp.targetMaterialProperty = \"_MainTex\";",1925],["vp.Play();",1925],["2019-05-07 ",1925],["Video overview",1926],["Use Unity’s video system to integrate video into your game. Video footage can add realism, save on rendering complexity, or help you integrate content available externally.",1926],["To use video in Unity, import Video Clips and configure them using the Video Player component. The system allows you to feed video footage directly into the Texture parameter of any component that has one. Unity then plays the Video on that Texture at run time.",1926],["Unity’s video features include the hardware-accelerated and software decoding of Video files, transparency support, multiple audio tracks, and network streaming.",1926],["2017-06-15 ",1926],["Video player support for PS4 added in 2017.1 NewIn20171",1926],["New feature in Unity 5.6",1926],["Video file compatibility",1927],["You can import many video file formats into Unity. Unity stores imported video files as VideoClip assets.",1927],["For Unity to preview video files, the files must be compatible with the platform where you run the Unity Editor. Your files must also be compatible with the target build platforms. Unity provides options for transcoding files to commonly supported formats, but you can also manage compatibility yourself. See Compatibility with target platforms below for more information.",1927],["",1927],["Compatibility with Editor platforms",1927],["Video source files must use a format that your Editor platform supports. Each platform supports different video file formats.",1927],["Extension Windows macOS Linux ",1927],[".asf ✓ ",1927],[".avi ✓ ",1927],[".dv ✓ ✓ ",1927],[".m4v ✓ ✓ ",1927],[".mov ✓ ✓ ",1927],[".mp4 ✓ ✓ ",1927],[".mpg ✓ ✓ ",1927],[".mpeg ✓ ✓ ",1927],[".ogv ✓ ✓ ✓ ",1927],[".vp8 ✓ ✓ ✓ ",1927],[".webm ✓ ✓ ✓ ",1927],[".wmv ✓ ",1927],["Encoding for video file tracks must use a supported codec. Each platform supports specific codecs that can change with each version of the platform.",1927],["Video files that use unsupported codecs trigger an error message in the Editor and you must convert them to a compatible codec before you can use them.",1927],["H.264 is the optimal supported video codec for most platforms. It offers the best cross-platform compatibility, but the Linux Editor doesn't support this codec.",1927],["For Linux, the optimal encoding is a .webm container with the following codecs:",1927],["\nFor video tracks, VP8.\n",1927],["\nFor audio, Vorbis.\n",1927],["For information about codec support, see the official platform documentation for your Editor. See the links below for codec compatibility for Windows and macOS:",1927],["Video Clip Importer",1927],["The Video Clip Importer can transcode video files that you import into Unity. This is useful when your videos use a codec that the Editor platform supports, but the files aren't compatible with your target platform.",1927],["Using unsupported video files in the Editor",1927],["To use video files that are compatible with your target platforms, but not your Editor platform, set them up as streaming assets. For example, you might want to use the VP9 codec for an Android build, even though the Editor only supports VP8.",1927],["To set video files up as streaming assets, place them in the StreamingAssets folder of your project. Use the URL property to point the Video Player component to streaming assets.",1927],["You can also use Application.streamingAssetsPath to access platform-specific paths to streaming assets via scripts. You can't preview these paths in the Editor.",1927],["If you want to have placeholder versions that are compatible with your Editor but use a different version for your target platform, you can include both versions in your project, use Editor-compatible versions as placeholders, and decide which version to use at run time.",1927],["The example below demonstrates how to use different video URLs for different platforms. For more information, see the documentation on Platform-dependent compilation.",1927],["void SetupMovieFile(VideoPlayer vp)",1927],["if UNITY_EDITOR UNITY_LINUX",1927],["vp.url = pathToMyVp8File;",1927],["elif UNITY_ANDROID",1927],["vp.url = pathToMyVp9File;",1927],["elif UNITY_STANDALONE_WIN",1927],["vp.url = pathToMyWmvFile;",1927],["else",1927],["vp.url = pathToMyMp4File;",1927],["endif",1927],["",1927],["Compatibility with target platforms",1927],["The Video Player component uses the native audio and video decoding libraries of your Editor platform to play video files in the Editor. You must confirm that the files also meet the requirements for the target platform.",1927],["Encoding recommendations",1927],["The best natively supported video codec for hardware acceleration is H.264",1927],["When cross-platform support is a high priority, VP8 is a good choice. It's widely supported and has a comprehensive feature set, but it consumes more resources than hardware-accelerated codecs such as H.264.",1927],["H.265 is available on devices that support it. See H.265 Compatibility below, for more information.",1927],["Android supports VP8 using native libraries, so VP8 might also be hardware-assisted on some Android devices.",1927],["The Unity Editor supports the .ogv format, but it isn't widely supported on other platforms. Transcode .ogv files into .mp4 (H.264) or .webm (VP8) depending on the target platform.",1927],["Key encoding values",1927],["The table below lists key values to look for in your encoding parameters:",1927],["Parameter Description ",1927],["Video Codec H.264, H.265 or VP8. ",1927],["Resolution The resolution of your display. For example: 1280 × 720. ",1927],["Profile The profile is a set of capabilities and constraints, often specified by the vendor, such as Baseline or Main. Applies to H.264/H.265.See H.264 or H.265. ",1927],["Profile Level Applies for H.264/H.265. Within a given profile, the level specifies performance requirements, for example, Baseline 3.1. ",1927],["Audio Codec AAC (for mp4 videos using H.264/H.265) or Vorbis (for webm videos using VP8). ",1927],["Audio Channels Dependent on the platform. Refer to the developer guide for your platform. For example, the article on Supported media formats for Android. ",1927],["Transcoding VideoClips",1927],["The Video Clip Importer provides the option to transcode VideoClip assets into one of the following video codecs:",1927],["Transcoded VideoClips use the appropriate audio codec automatically:",1927],["AAC videos encoded with H.264 or H.265",1927],["Vorbis for videos encoded with VP8",1927],["Note**: The Video Clip Importer provides only basic transcoding options. Depending on how your source files are encoded, you might not get optimal performance from clips transcoded with the importer options. In that case, you might get better results with an external transcoding program.",1927],["Encoding VideoClips with an external program",1927],["If you use videos that the target system definitely supports, you can leave the Video Clip Importer's transcoding options disabled. If disabled, Unity doesn't modify the files. You can manage encoding with an external program, which allows for finer control.",1927],["Compatibility notes",1927],["This section provides useful information about video compatibility, and links to external resources.",1927],["Vendor recommendations for media support",1927],["Follow vendor recommendations for codec support. On older mobile platforms, codec choices are limited . You might need to inspect and convert or re-encode videos that you intend to include in a game running on multiple devices.",1927],["Android:** Supported Media Formats",1927],["Windows:** Supported Media Formats, H.265",1927],["iPhone:** Compare iPhone Models",1927],["UWP:** Supported Codecs",1927],["",1927],["H.265 compatibility",1927],["The table below provides platform-specific requirements and information for the H.265 codec.",1927],["Platform Requirements Encoding/Decoding Notes ",1927],["",1927],["macOS SDK 10.13+ Hardware encoding: 6th Generation Intel Core processor Software encoding: All Macs Hardware decoding: 6th Generation Intel Core processor Software decoding: All Macs ",1927],["Windows Windows 10 + HEVC extensions EncoderDecoder HEVC extension (Hardware only)HEVC extension (Hardware + software support) ",1927],["iOS SDK 11.0+ Hardware decoding: A9 Chip Software decoding: All iOS Devices ",1927],["tvOS SDK 11.0+ ",1927],["UWP Windows 10+ If a device lists support for H.265, that might not apply to all devices within the device family. ",1927],["Android 5.0+ ",1927],["2019-05-07 ",1927],["New feature in Unity 5.6",1927],["Understanding video files",1928],["Video files are more accurately described as \"containers\". This is because they can contain not only the video itself but also additional tracks including audio, subtitles, and further video footage. There can also be more than one of each type of track in a container, for example:",1928],["Multiple points of view",1928],["Stereo or 5.1 versions of the audio mix",1928],["Subtitles in different languages",1928],["Dialogue in different languages",1928],["To save on bandwidth and storage, each track’s content is encoded using a \"codec\", which compresses and decompresses data as required.",1928],["A common video codec format is H.264, and a common audio codec format is AAC.",1928],["File extensions such as .mp4, .mov, .webm or .avi indicate that the data in the video file is arranged using a certain container format.",1928],["Hardware and software decoding",1928],["Most modern devices have hardware dedicated to decoding videos. This hardware typically requires less power to do this task than, for example, the CPU, and means that the resources can be used for tasks other than decoding videos.",1928],["This hardware acceleration is made possible by native custom APIs, which vary from platform to platform. Unity’s video architecture hides these differences by providing a common UI and Scripting API in order to access these capabilities.",1928],["Unity is also capable of software-based video decoding. This uses the VP8 video codec and Vorbis audio codec, and is useful for situations where a platform’s hardware decoding results in unwanted restrictions in terms of resolution, the presence of multiple audio tracks, or support of alpha channel (see documentation on Transparency for more information).",1928],["2017-06-15 ",1928],["New feature in Unity 5.6",1928],["Video transparency support",1929],["Unity’s Video Clips and Video Player component support alpha, which is the standard term used to refer to transparency.",1929],["In graphics terminology, \"alpha\" is another way of saying “transparency”. Alpha is a continuous value, not something that can be switched on or off.",1929],["The lowest alpha value means an image is fully transparent (not visible at all), while the highest alpha value means it is fully opaque (the image is solid and cannot be seen through). Intermediate values make the image partially transparent, allowing you to see both the image and the background behind it simultaneously.",1929],["The Video Player component supports a global alpha value when playing its content in a Camera’s near or far planes. However, videos can have per-pixel alpha values, meaning that transparency can vary across the video image. This per-pixel transparency control is done in applications that produce images and videos (such as NUKE or After Effects), and not in the Unity Editor.",1929],["Some platforms have limitations for rendering videos with transparency. For more information, see:",1929],["Unity supports two types of sources that have per-pixel alpha:",1929],["Apple ProRes 4444",1929],["The Apple ProRes 4444 codec is a high-quality version of Apple ProRes for 4:4:4:4 image sources, including alpha channels. It offers the same level of visual fidelity as the source video.",1929],["Apple ProRes 4444 is only supported on OSX because this is the only platform where it is available natively. It normally appears in .mov files.",1929],["When importing a video that uses this codec, enable both the Transcode and Keep Alpha options by ticking the relevant checkboxes in the Video Clip Importer. Your operating system's video playback software may have the functionality to identify which codecs your video uses.",1929],["During transcoding, Unity inserts the alpha into the color stream so it can be used both with H.264 or VP8.",1929],["Omitting the transcode operation leaves the ProRes representation in the Asset, meaning the target platform has to support this codec (see documentation on video file compatibility for more information).",1929],["This codec also usually produces large files, which increases storage and bandwidth requirements.",1929],["Webm with VP8",1929],["The .webm file format has a specification refinement that allows it to carry alpha information natively when combined with the VP8 video codec. This means any Editor platform can read videos with transparency with this format.",1929],["Because most of Unity’s supported platforms use a software implementation for decoding these files, they don’t need to be transcoded for these platforms.",1929],["One notable exception is Android. This platform’s native VP8 support does not include transparency support, which means transcoding must be enabled so Unity uses its internal alpha representation.",1929],["2017-06-15 ",1929],["New feature in Unity 5.6",1929],["Scene view View Options toolbar",1930],["You can use the Scene view View Options toolbar overlay to choose various options for viewing the Scene and to enable/disable lighting and audio. These controls only affect the Scene view during development and have no effect on the built game.",1930],["Draw mode menu",1930],["The first dropdown menu selects which Draw Mode will be used to depict the Scene. The available options are:",1930],["Draw Mode Function ",1930],["-------------------------------- ----------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ",1930],["Shading Mode ",1930],[" Shaded Show surfaces with their textures visible. \n",1930],[" Wireframe Draw meshes with a wireframe representation. \n",1930],[" Shaded Wireframe Show meshes textured and with wireframes overlaid. \n",1930],["Miscellaneous ",1930],[" Shadow Cascades Show directional light [shadow cascades](shadow-cascades). \n",1930],[" Render Paths Show the [rendering path](RenderingPaths) for each GameObject using a color code: <br/><br/>Blue indicates [deferred shading](RenderTech-DeferredShading)<br/> Yellow indicates [forward rendering](RenderTech-ForwardRendering)<br/>Red indicates [vertex lit](RenderTech-VertexLit) \n",1930],[" Alpha Channel Render colors with alpha. \n",1930],[" Overdraw Render GameObjects as transparent \"silhouettes\". The transparent colors accumulate, making it easy to spot places where one object is drawn over another. \n",1930],[" Mipmaps Show ideal texture sizes using a color code: <br/><br/>Red indicates that the texture is larger than necessary (at the current distance and resolution)<br/>Blue indicates that the texture might be larger. The ideal texture sizes depend on the resolution at which your application will run and how close the Camera can get to particular surfaces. \n",1930],[" Texture Streaming Tint GameObjects green, red, or blue, depending on their status in the [Texture Streaming](TextureStreaming) system. For more information, see documentation on [Texture Streaming debugging](TextureStreaming-API#DebuggingAPI). \n",1930],[" Sprite Mask Sprite Masks are used to either hide or reveal parts of a Sprite or group of Sprites. See [Sprite Masks](class-SpriteMask) for more information. \n",1930],["Deferred These modes let you view each of the elements of the G-buffer (Albedo, Specular, Smoothness and Normal) in isolation. See documentation on Deferred Shading for more information. ",1930],["Global Illumination The following modes are available to help visualize aspects of the Global Illumination system: Systems, Clustering, Lit Clustering, UV Charts, and Contributors/Receivers. See documentation on GI Visualisations for information about each of these modes. ",1930],["Realtime Global Illumination The following modes are available to help visualize aspects of the Enlighten Realtime Global Illumination system: Albedo, Emissive, Indirect, and Directionality. See documentation on GI Visualisations for information about each of these modes. ",1930],["Baked Global Illumination The following modes are available to help visualize aspects of the Baked Global Illumination system: Baked Light Map, Directionality, Shadowmask, Albedo, Emissive, UV Charts, Texel Validity, UV Overlap, Baked Lightmap Culling, Lightmap Indices, and Light Overlap. See documentation on GI Visualisations for information about each of these modes. ",1930],["Material Validator There are two Material Validator modes: Albedo and Metal Specular. These allow you to check whether your physically-based materials use values within the recommended ranges. See Physically Based Material Validator for more information.",1930],["2D, lighting and Audio switches",1930],["To the right of the Render Mode menu are three buttons that switch certain Scene view options on or off:",1930],["2D: switches between 2D and 3D view for the Scene. In 2D mode the camera is oriented looking towards positive z, with the x-axis pointing right and the y-axis pointing up.",1930],["Lighting: turns Scene view lighting (lights, object shading, etc) on or off.",1930],["Audio: turns Scene view audio effects on or off.",1930],["Effects button and menu",1930],["The menu (activated by the icon to the right of the Audio button) has options to enable or disable rendering effects in the Scene view.",1930],["Skybox: a skybox texture rendered in the Scene's background",1930],["Fog: gradual fading of the view to a flat color with distance from the camera.",1930],["Flares: lens flares on lights.",1930],["Always Refresh: Defines whether animated materials display the animation. When selected, any time-based effects (for example, Shaders) will animate. For example, Scene effects (like grass waving on a Terrain).",1930],["Post Processing: Shows Post-processing effects.",1930],["Particle Systems: Shows Particle System effects.",1930],["The Effects button itself acts as a switch that enables or disables all the selected effects at once.",1930],["Scene visibility switch",1930],["The Scene visibility switch toggles Scene visibility for GameObjects on and off. When it’s on, Unity applies the Scene visibility settings. When it’s off, Unity ignores them.",1930],["For more information, see the documentation on Scene Visibility.",1930],["Camera settings menu",1930],["The Camera settings menu contains options for configuring the Scene view camera. For more information, see the documentation on Camera settings.",1930],["Gizmos menu",1930],["The Gizmos menu contains options for how objects, icons, and gizmos are displayed. This menu is available in both the Scene view and the Game view. See documentation on the Gizmos Menu manual page for more information.",1930],["Additional resources",1930],["visionOS",1931],["visionOS is the operating system used on the Vision Pro, Apple’s latest spatial computing device. Unity developers can leverage existing 3D scenes and assets to build games or applications for visionOS. For more information about visionOS, see Apple’s visionOS Overview.",1931],["\n visionOS platform support is currently experimental. Experimental releases are not supported for production, but they provide early access for those who want to start testing our solutions for the visionOS platform. This also helps us improve our development process through your feedback.\n",1931],["visionOS provides a few different modes in which apps can be displayed: Windows, Volumes or Spaces. Users can use Windows to present 2D or 3D content, or use Volumes to present 3D content and objects. With Volumes, users have the flexibility to walk around and interact with 3D content from any angle.",1931],["By default, visionOS apps open in a Shared Space and exist side-by-side with other apps. The Shared Space works similar to the desktop of a personal computer, which can show Windows from more than one application. For more immersive experiences, users can also develop for a dedicated Full Space, which displays only the app's own content.",1931],["Getting Started",1931],["Use the Unity Hub to add the visionOS module to the Unity Editor. The visionOS module is available for Unity 2022.3.5f1+, and you can create Windowed Apps for visionOS today.",1931],["To create Volumes or to develop for a dedicated Full Space, you must also install the Unity PolySpatial packages, which are currently in closed beta. You can apply to be part of the Beta program here.",1931],["Windowed Apps for visionOS",1931],["Unity describes applications that live within Windows as Windowed Apps. By default, your Unity content will become Windowed Apps in visionOS if you build a Unity application targeted at the visionOS platform without enabling the PolySpatial Runtime or visionOS plugin via the XR Plugin Manager.",1931],["To detect interactions on the Unity application within a Window component on visionOS, users can leverage “Touch Support” provided by the input system package (com.unity.inputsystem). To learn more about designing for the Window component on visionOS, visit Apple’s Human Interface Guidelines for visionOS.",1931],["Mixed Reality (Immersive) and Virtual Reality (Fully Immersive) Apps for visionOS",1931],["Developing mixed reality (immersive) and virtual reality (fully immersive) apps require Unity packages that are currently in closed beta. Please apply here.",1931],["Decals and projectors",1932],["Decals are materials that decorate the surface of other materials. They are most commonly used for effects like paint splatters and stickers.",1932],["Unity projects these materials into a scene so that they wrap around other scene geometry. This means that you can also use them for effects that simulate projected light, such as blob shadows.",1932],["Render pipeline information",1932],["How you work with decals and projectors depends on the render pipeline you use.",1932],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1932],["Decal and projectors YesUse the Projector component. YesUse the Decal Renderer Feature. YesUse the Decal Projector. ",1932],["Lens flares and halos",1933],["Lens flares and halos are lighting effects that can add atmosphere to your scene.",1933],["Render pipeline information",1933],["How you work with lens flare and halos depends on the render pipeline you use.",1933],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1933],["Lens flares YesUse a Flare asset and, optionally, a Lens Flare component. YesUse a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. YesUse a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. ",1933],["Halos YesUse a Halo component. YesUse a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. YesUse a Lens Flare (SRP) Data asset and a Lens Flare (SRP) component. ",1933],["Lines, trails, and billboards",1934],["Unity uses specialised components to configure and render lines, trails, and billboards.",1934],["Render pipeline information",1934],["How you work with lines, trails, and billboards depends on the render pipeline you use.",1934],["Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) ",1934],["Line Renderer component Yes. Yes. Yes. ",1934],["Trail Renderer component Yes. Yes.You can also use VFX Graph to create a custom trail effect. Yes.You can also use VFX Graph to create a custom trail effect. ",1934],["Billboard Renderer component Yes. Yes. Yes.Only with VFX Graph. ",1934],["Visual effects",1935],["This section provides information on the visual effects available in Unity.",1935],["Page Description ",1935],["",1935],["Post-processing and full-screen effects How to set up and use post-processing and other full-screen effects in Unity. ",1935],["Particle systems How to choose between Unity's different particle systems, and use them in your project. ",1935],["Decals and projectors How to create decal and projector effects. ",1935],["Lens flares and halos How to create lens flare and halo effects. ",1935],["Lines, trails, and billboards How to render lines, trails, and billboards. ",1935],["Visual Studio C# integration",1936],["Unity integrates with Microsoft Visual Studio through the Code Editor Package for Visual Studio. This package is pre-installed when you install Unity. If Visual Studio is installed at the time you install Unity, then Unity uses Visual Studio to open and edit scripts by default.",1936],["Set Visual Studio as your default script editor",1936],["Unity automatically uses Visual Studio as its default script editor if Visual Studio is installed when you install Unity, or if you install Visual Studio as part of the Unity installation process. You can install Visual Studio as a module into an existing Unity installation. For more information, see Downloading and installing Editors and modules with the Unity Hub.",1936],["To set your default script editor manually:",1936],["Go to Edit > Preferences (macOS: Unity > Settings) in the main menu to open the Preferences window.",1936],["Open the External Tools menu.",1936],["Click on the External Script Editor dropdown and select Microsoft Visual Studio. The appearance of this option changes depending on the version of Microsoft Visual Studio you have installed.",1936],["A: The External Script Editor dropdown menu, which displays the name and version of the selected script editor.",1936],["B: The name and version of the Unity package that integrates with the selected script editor.",1936],["Unity uses Visual Studio’s C# compiler to compile scripts. When you use the Visual Studio Editor package with Visual Studio, both Unity and Visual Studio display details of any errors in your scripts.",1936],["Unity automatically creates and maintains a Visual Studio .sln and .csproj file. You can control whether Unity generates .csproj files for certain elements of your project in the External Tools menu in the Preferences window, as in the above screenshot. Enable or disable the checkboxes to toggle whether Unity generates .csproj files for a given option.",1936],["Unity regenerates the .sln and .csproj files in your project whenever a contributor makes changes to the state of a file, for example, editing an existing file or creating a new one. You can also add files to your solution from Visual Studio. Unity imports any new files, and the next time Unity creates the project files again, it creates them with the new files included.",1936],["Visual Studio project generation for Windows",1937],["The Create Visual Studio Solution Build Setting makes Unity generate a Visual Studio Solution instead of build a Player.",1937],["Generating a Visual Studio Solution enables you to change your build process. For example, you can:",1937],["Modify your application’s manifest.",1937],["Add C++ code.",1937],["Modify embedded resources.",1937],["Launch your application with the debugger attached.",1937],["Note**: This option is only available when you are using the Windows build target.",1937],["Create a Visual Studio Solution",1937],["Warning:** Make sure you save and back up any changes you make in Visual Studio before rebuilding your Unity project. If you do not back up your changes, Unity overwrites them during the build process.",1937],["Go to File > Build Settings > Target Platform.",1937],["Select the Windows build target.",1937],["Enable the Create Visual Studio Solution build setting.",1937],["Select Build to generate the solution.",1937],["By default, Unity stores the Visual Studio Solution you generate in the same directory as your built project.",1937],["Scripting backends",1937],["Depending on which scripting backend your Unity project uses, the Visual Studio Solution that Unity generates includes a different number of projects. For the Mono scripting backend, the solution includes three projects. For the IL2CPP scripting backend, the solution includes four projects.",1937],["Note**: You can only build Windows IL2CPP on a Windows machine.",1937],["Project retarget wizard",1937],["Unity generates a Visual Studio Solution that targets Visual Studio 2015. If you are using a newer version of Visual Studio, you might see the Retarget Projects dialog box when you open your Visual Studio Solution.",1937],["The Retarget Projects dialog prompts you to upgrade your Visual Studio Solution to match the Visual Studio version you have installed. Select OK to accept this suggestion.",1937],["Solution contents",1937],["Below is a list of the projects Unity generates for your Visual Studio Solution.",1937],["Project Description ",1937],["projectName (represents your project name) This is your main project. Visual Studio builds this project into the final application executable. You are most likely to make changes here. ",1937],["UnityData (stored inside the projectName project) This project contains all the Unity-specific files you need to build your project, such as assets. ",1937],["UnityPlayerStub This is a stub library for UnityPlayer.dll. Unity uses this to link your executable to the UnityPlayer.dll and expose the available UnityPlayer.dll API. ",1937],["Il2CppOutputProject (IL2CPP scripting backend only) This project contains: • The generated C++ code which Unity converts from managed assemblies.• The source code for IL2CPP runtime.• The IL2CPP garbage collector. You can debug this code from inside Visual Studio. ",1937],["Build configuration options in Visual Studio",1937],["Visual Studio provides a variety of build configuration options. All optimization and debug references in this section refer to the Visual Studio Solution only. To select your options, click on Release and choose from the drop-down menu.",1937],["Types of build configurations",1937],["Configuration Use Description ",1937],["Debug Use the Debug configuration when debugging C++ code. • Disables all optimization.• Preserves all debugging information in the code.• Results in code that runs slowly. ",1937],["Release Use the Release configuration to profile your game. • Enables code optimizations. ",1937],["Master Use the Master configuration for game submission and final testing. • Disables the profiler.• Results in the same build time as the Release configuration. ",1937],["MasterWithLTCG .Only available with the IL2CPP scripting backend is enabled. If you are using the IL2CPP scripting backend, you can choose either Master or MasterWithLTCG for game submission and final testing. • Enables link time code generation for generated C++ code, IL2CPP runtime and IL2CPP garbage collection.• Results in much longer build times compared to the Master configuration.• Resulting application executes faster. ",1937],["Audio Spatializers",1938],["Audio spatializers use \"physical\" characteristics of a scene, such as the distance and angle between an AudioListener and an AudioSource, to modify the properties of sound transmitted to the user. Spatialization can improve the perception that a sound originates from a specific location in a scene.",1938],["The Unity audio engine supports spatialization through plug-ins built with the Unity Audio Spatializer SDK. Unity does not provide any built-in spatializer plug-ins itself, but several plug-in implementations are available in third-party 3D audio SDKs. These audio SDKs typically provide additional Unity components and tools for 3D audio.",1938],["The following is a non-comprehensive list of third-party audio SDKs that provide Unity audio spatialization plug-ins:",1938],["Maker Name Platforms Documentation ",1938],[":---- :---- :-------- :------------ ",1938],["Microsoft Microsoft Spatializer Windows, Android https://learn.microsoft.com/en-us/windows/mixed-reality/develop/unity/spatial-sound-in-unity ",1938],["Oculus Oculus Spatializer Unity Windows, Android https://developer.oculus.com/documentation/unity/unity-audio/ ",1938],["Qualcomm Qualcomm 3D Audio Plugin for Unity Windows, Android https://developer.qualcomm.com/software/3d-audio-plugin-unity ",1938],["Steam Steam Audio Windows, MacOS, Linux, Android https://valvesoftware.github.io/steam-audio/doc/unity/index.html ",1938],["Vive 3DSP Audio SDK Windows, Android https://hub.vive.com/storage/3dsp/ ",1938],["Google (now open source) Resonance Audio Android, iOS, Web ",1938],["In some cases, spatializer plug-ins are included with the XR provider plug-in for an associated XR device. For example, the Oculus provider plug-in includes the OculusSpatializer plug-in and the Windows Mixed Reality feature group for OpenXR includes the MS HRTF Spatializer plug-in. Note that these provider plug-ins do not include any additional components that might be available in the full SDK packages from their maker.",1938],["Note:** Although many spatializer plug-ins were developed for use with VR devices, their use is not limited to VR games or applications.",1938],["Enable an audio spatializer plug-in",1938],["After you have added the package containing an audio spatializer plug-in to your project, you can enable the plug-in in the project audio settings.",1938],["To enable a plug-in:",1938],["Open the Project Settings window (menu: Edit > Project Settings).",1938],["Select the Audio category.",1938],["Choose the plug-in from the Spatializer Plugin dropdown menu.",1938],["VR feature set",1939],["Create immersive virtual reality experiences with Unity's VR feature set. The VR feature set provides a starting point for VR development, installing all relevant packages necessary to add interactivity to your apps.",1939],["Getting started",1939],["The Unity VR feature set pre-installs the packages you need for VR development. With OpenXR, you can simplify your VR development by targeting a wide range of VR devices. Alternatively, develop directly for the Oculus platform with the Oculus XR Plugin.",1939],["Unity directly supports the following VR platforms:",1939],["For more information on how to start developing applications for these platforms in Unity, see the documentation in the list above.",1939],["If you plan to target Valve’s OpenVR platform, you must download Valve’s OpenVR Unity XR Plugin and SteamVR Unity Plugin for input.",1939],["Configuration",1939],["To configure your Unity project for AR, see Configuring your Unity project for XR.",1939],["Packages",1939],["The VR feature set contains the following packages:",1939],["Resources",1939],["To learn more about Unity’s full suite of XR platforms, watch the Getting Started with XR session from Unite Now.",1939],["Related forums",1939],["Reach out and connect with our developer community in Unity’s VR forum.",1939],["Public roadmap",1939],["We’re on a mission to provide the best development platform for creating AR/VR experiences that distribute seamlessly to your target platforms. To understand our future trajectory, refer to the AR/VR product roadmap.",1939],["VR frame timing",1940],["Frame timing in VR mode works exactly like it does in VSync-enabled non-VR mode (see documentation on the Execution order of event functions). The only difference is that Unity does not depend on the underlying 3D SDK’s VSync, but instead whichever VR SDK it currently renders with. There is no benefit to rendering faster than the display can refresh. Instead, Unity focuses on utilizing the time most efficiently.",1940],["In multithreaded rendering, Unity synchronizes the simulation thread and the rendering thread on the CPU. This reduces latency. The simulation thread primarily executes the scripts, sounds, AI, and other tasks needed for the simulation to run. The render thread focuses on submitting draw calls to the graphics driver, which in turn validates them and sends them to the GPU. To achieve the greatest parallelism between threads, Unity executes graphics commands as they come in, and simulates the next frame at the same time.",1940],["Unity waits for the GPU to completely render and display the last frame, then submits rendering commands for the next frame.",1940],["Lowest possible latency",1940],["Before Unity can submit the first rendering command that depends on the view transformation matrix, it must first get the view matrix from the VR SDK. To keep latency as low as possible, the VR SDK predicts the head transform twice per frame:",1940],["One prediction to render the current frame. This prediction corresponds with where your head actually is, in real space, when the frame arrives on the screen.",1940],["One prediction to simulate the following frame.",1940],["Unity applies the rendering prediction for the current frame to cameras, controllers, and anything that needs information for Scene rendering. Unity uses the simulation prediction for the following frame if it is unable to render the following frame.",1940],["For more information on how the hardware handles rendering, see the manufacturer documentation for your head-mounted display.",1940],["What happens when Unity drops a frame?",1940],["If Unity doesn’t submit the fully rendered frame in time for it to be ready for the next display refresh, a few things might happen, depending on which VR SDK is active. The VR SDK might:",1940],["Display the previously submitted frame. This looks like judder, and greatly reduces the quality of the experience.",1940],["Rotationally reproject the previously submitted frame based on the current head pose. This is a crude approximation that works well as a fallback for static content, but any content with animation or positional movement does not look correct.",1940],["Apply some form of positional reprojection. This might be temporal to fill in missing details.",1940],["For more information on reprojection (sometimes called time warping), see the XinReality wiki entry on Timewarp.",1940],["This all happens automatically. At this point, it’s usually too late for Unity to successfully finish the next frame that it should already be rendering. Instead, the VR SDK takes the last frame it received and reprojects it to the latest predicted pose, and Unity waits until the next opportunity to render a full frame to get back on track. If your app continually drops frames, Unity only renders every other frame.",1940],["For more information on how the hardware handles rendering, see the manufacturer documentation for your head-mounted display.",1940],["GPU-bound vs. CPU-bound in VR",1940],["Each display has a specific refresh rate that Unity is bound to. You can get this at run time with VRDevice.refreshRate. A value of 1 divided by the refreshRate gives you the time allocated to a single frame.",1940],["For example, this might be 11.1 milliseconds in the case of a refresh rate of 90 hz.",1940],["If your app is GPU-bound, the Unity Profiler displays XR.WaitForGPU in excess of one frame’s time in milliseconds.",1940],["If your app is CPU-bound, a frame takes longer than the designated frame time, but the Unity Profiler displays XR.WaitForGPU shorter than the one frame.",1940],["VR development in Unity",1941],["VR development shares common workflows and design considerations with any real-time 3D development in Unity. However, distinguishing factors include:",1941],["Richer user input**: in addition to \"traditional\" button and joystick controllers, VR devices provide spatial head, controller, and (in some cases) hand and finger tracking.",1941],["More \"intimate\" interaction with the environment**: in conjunction with the possibilities of richer input, VR raises the expectations of much closer and \"physical\" interaction with the environment than typical 3D games and applications. Users expect to be able to pick things up and interact with objects in the environment. With head tracking, the camera can get much closer to the walls and other boundaries of the environment -- even passing through them.",1941],["User comfort concerns**: many people experience motion sickness in VR when camera movement doesn't match the movement of their head. You can mitigate the causes of motion sickness by maintaining a high frame rate, offering a range of locomotion options so that users can choose a mode they are comfortable with, and avoiding moving the camera independently of the user's head tracking.",1941],["To get started with VR development, use the XR Plug-in Management system to install and enable XR provider plug-ins for the devices you want to support. See XR Project set up for more information.",1941],["Basic VR scene elements",1941],["A basic VR scene should contain an XR Origin, which defines the 3D origin for tracking data. This collection of GameObjects and components also contains the main scene Camera and the GameObjects representing the user's controllers. See Set up an XR scene for instructions on setting up a basic VR scene.",1941],["Beyond the basics, you typically need a way for the user to move around and to interact with the 3D world you have created. The XR Interaction Toolkit provides components for creating interactions like selecting and grabbing objects. It also provides a customizable locomotion system. You can use the Input System in addition to or instead of the XR Interaction Toolkit.",1941],["VR packages",1941],["Most of the features and APIs used for VR development in Unity are provided through packages. These packages include:",1941],["",1941],["VR provider plug-ins",1941],["To build VR apps in Unity, use the XR Plug-in Management system to add and enable provider plug-ins for the devices you want to support. See XR Project set up for instructions.",1941],["The VR provider plug-ins supported by Unity include:",1941],["Oculus for Oculus Rift, Meta Quest 2, and Quest Pro.",1941],["OpenXR for any device with an OpenXR runtime, including Meta headsets, Vive headsets, Valve SteamVR, HoloLens, Windows Mixed Reality, and others.",1941],["PlayStation VR (available to registered PlayStation developers) for Sony PS VR and PS VR2 devices. See PlayStation Partners for more information.",1941],["Mock HMD for simulating a VR headset in the Unity Editor Play mode view.",1941],["Note:** Many headset makers are working toward using the OpenXR runtime as a standard. However, this process is not complete and there can be feature discrepancies between OpenXR and a headset maker's own provider plug-in or SDK",1941],["",1941],["XR Interaction Toolkit",1941],["The XR Interaction Toolkit can make it easier and faster to develop VR applications. The XR Interaction Toolkit provides:",1941],["An XR Origin set up with controllers.",1941],["XR controller setups with Input System presets for basic interactions like select and grab.",1941],["Interactor and Interactable components for creating object manipulation.",1941],["A configurable locomotion system.",1941],["XR UI input.",1941],["",1941],["XR Core Utilities",1941],["The XR Core Utilities package contains software utilities used by other Unity XR plug-ins and packages. Typically, this package gets installed in your project as a dependency of other XR packages.",1941],["",1941],["Input System",1941],["The Unity Input System package not only supports accessing user input from VR controller buttons and joysticks, but also provides access to XR tracking data and haptics. The Input System package is required if you use the XR Interaction Toolkit or the OpenXR provider plug-in.",1941],["",1941],["VR template",1941],["Unity’s VR Project Template provides a starting point for virtual reality development in Unity. The template configures project settings, pre-installs the right packages, and includes a sample scene with various pre-configured example assets to demonstrate how to set up a project that is ready for VR. Access the VR template through the Unity Hub when you create a new project. Refer to Create a new project for information about creating a project with the template.",1941],["For more information about the template assets and how the sample scene is set up, refer to About the VR Project Template.",1941],["",1941],["Hand tracking",1941],["Hand tracking is a feature that allows users to interact with a VR application using their hands. Hand tracking is supported by the XR Hands package.",1941],["The Hands package provides:",1941],["A standard hand data model.",1941],["An API for accessing hand tracking data.",1941],["The XR Hand Skeleton Driver component, which maps a set of Transforms to their corresponding hand joints and updates those Transforms as tracking data is received.",1941],["The XR Hand Mesh Controller, which enables and disables a mesh as hand tracking is acquired or lost.",1941],["A HandVisualizer sample that demonstrates how to use the hand tracking API.",1941],["Framebuffer orientation",1942],["If your application's framebuffer orientation doesn't match the device's native display orientation (portrait, for most devices), Android rotates the application's framebuffer to match the device's display every frame. Depending on the device's hardware capabilities, this additional rotation can negatively affect performance. If your application uses the Vulkan Graphics API and the device supports Vulkan, Unity can apply this rotation during rendering which reduces the performance impact of the rotation. This is called pre-rotation.",1942],["Using pre-rotation in Unity",1942],["To make Unity apply pre-rotation, you can use C# scripts or the Unity editor:",1942],["Through C# scripts: Set PlayerSettings.vulkanEnablePreTransform to true.",1942],["Through the Unity Editor:",1942],["Select Edit > Project Settings.",1942],["In the Project settings window, select the Player tab, then open Android Player Settings:",1942],["In the Other Settings section, enable Apply display rotation during rendering.",1942],["How Unity applies pre-rotation",1942],["Unity applies pre-rotation when it renders directly to the device's backbuffer, not when it renders to a Render Texture. To apply the rotation, Unity modifies the projection matrix which affects the UNITY_MATRIX_MVP and UNITY_MATRIX_P Built-in shader variables. This means that Unity applies the rotation in the vertex shader.",1942],["Using pre-rotation doesn't affect the behavior of Unity’s C# API. For example, you can still use Screen.width to access the width of the screen. The same applies to viewports and scissor rects. Unity adjusts these as needed, and also handles readback operations from the backbuffer such as Grab Pass, ReadPixels, or Screenshot.",1942],["Unity provides utility macros to handle special cases in shaders (for more information, see the Limitations section below).",1942],["The macro UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION is only defined if all of the following conditions are true (otherwise, it's undefined):",1942],["preTransform is enabled in the Player Settings",1942],["the platform is set to Android",1942],["the graphics API is set to Vulkan",1942],["UNITY_DISPLAY_ORIENTATION_PRETRANSFORM is a constant that is set to the current preTransform rotation. Its value is one of the following:",1942],["UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_0",1942],["UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_90",1942],["UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_180",1942],["UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_270",1942],["If UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION is undefined, or when rendering to a Render Texture, the value of UNITY_DISPLAY_ORIENTATION_PRETRANSFORM is UNITY_DISPLAY_ORIENTATION_0.",1942],["UNITY_DISPLAY_ORIENTATION_PRETRANSFORM is translated into a Vulkan specialization constant, which makes it efficient to use in if or switch statements.",1942],["",1942],["Limitations",1942],["In the following cases, it's likely that enabling preTransform requires additional modifications to your Unity Project before you can use it:",1942],["Shaders that don’t use Unity’s projection matrix",1942],["Shaders that depend on the current pixel position in the fragment shader (SV_Position)",1942],["Shaders that use screen space derivatives (ddx, ddy)",1942],["Native rendering plugins that use the Vulkan swapchain image might need to be modified",1942],["Use of backbuffer with Unity RenderPass API in an MRT setup together with other Render Textures",1942],["These cases only apply when rendering directly to the backbuffer.",1942],["Additional resources",1942],["Vulkan Design Guidelines on the Android developer website.",1942],["Vulkan Mobile Best Practice - Appropriate Use of Surface Rotation on the arm community website.",1942],["Reduce load times with AssetBundles",1943],["As you must download all your asset data before your content starts, consider moving assets out of your main data files and into AssetBundles. Moving the assets to AssetBundles lets you create a small loader scene for your content, which dynamically loads assets on-demand as the user proceeds through your content. AssetBundles also help with Asset data memory management. You can unload asset data from memory for assets that you don’t need any more by calling AssetBundle.Unload.",1943],["The following considerations apply when using AssetBundles on the WebGL platform:",1943],["When you use class types in your AssetBundle which aren't used in your main build, Unity might strip the code for those classes from the build. This can cause a fail when trying to load Assets from the AssetBundle. Use BuildPlayerOptions.assetBundleManifestPath to fix that, or refer to Distribution size and code stripping for other options.",1943],["WebGL doesn't support threading. As HTTP downloads become available only after they're downloaded, Unity WebGL builds need to decompress AssetBundle data on the main thread after the download is complete, blocking the main thread. To avoid this interruption, LZMA AssetBundle compression isn't available for AssetBundles on WebGL and instead compresses using LZ4, which is de-compressed efficiently on-demand. If you need smaller compression sizes than what LZ4 delivers, you can configure your web server to use gzip or Brotli compression (on top of LZ4 compression) on your AssetBundles. For more information on how to do this, refer to Deploying compressed builds.",1943],["WebGL supports AssetBundle caching with UnityWebRequestAssetBundle.GetAssetBundle. This method uses the IndexedDB API from your browser to store a cache on the user's device. Some browsers might have limited support for IndexedDB and any browsers might request the user's authorization to store data on the disk. For more information, refer to WebGL browser compatibility.",1943],["Audio in WebGL",1944],["This page only provides information about audio capabilities in WebGL. To learn how to use audio in your Unity project, see the Audio Overview.",1944],["Because Unity uses FMOD to manage audio for platforms, Unity WebGL supports limited audio functionality, which only includes the basic features. FMOD relies on threads, which WebGL doesn't support. For this reason, Unity uses an implementation based on the internal Web Audio API, which enables the browser to handle audio playback and mixing.",1944],["Note:** Google Chrome's new Autoplay policy prevents autoplay of audio and video under certain conditions. For example, while your game might be set to autoplay some background music soon after the game loads, it won't play automatically unless you click or tap on the website. For more information on how to enable or disable this policy, see Google Chrome's documentation on Autoplay policy in Chrome.",1944],["Supported classes",1944],["Unity WebGL supports the following API classes:",1944],["Class WebGL Support status ",1944],["AudioSource WebGL supports some APIs. See AudioSource for specific support details. ",1944],["AudioListener All APIs supported. ",1944],["AudioClip WebGL supports some APIs. See AudioClip for specific support details. ",1944],["SystemInfo.supportsAudio The browser provides audio support for WebGL. For this reason, SystemInfo.supportsAudio is always true. ",1944],["Microphone Not supported. ",1944],["AudioSource",1944],["The AudioSource API supports basic positional audio playback, including:",1944],["Pausing and resuming",1944],["Panning",1944],["Rolloff",1944],["Pitch setting",1944],["Doppler effect support",1944],["Unity WebGL supports the following AudioSource APIs:",1944],["Settings Description ",1944],["Clip Determines the audio clip that plays next. ",1944],["dopplerLevel Sets the Doppler scale for the AudioSource. ",1944],["ignoreListenerPause Allows AudioSource to ignore AudioListener.pause and continue to play audio. ",1944],["ignoreListenerVolume Ignores the end-user’s AudioSource volume. ",1944],["isPlaying Returns true if the AudioSource.clip is playing. ",1944],["loop Allows the application to loop the AudioSource.clip. ",1944],["maxDistance Sets the maximum distance at which the AudioSource.clip stops attenuating or becomes inaudible. ",1944],["minDistance Sets the minimum distance at which the AudioSource.clip no longer rises in volumes. The sound starts to attenuate beyond the minimum distance. ",1944],["mute Mutes the AudioSource. ",1944],["pitch Sets the pitch of the AudioSource.clip. WebGL only supports positive pitch values. ",1944],["playOnAwake Plays the AudioSource on Awake. ",1944],["rolloffMode Sets the AudioSource attenuation over distance. ",1944],["time Sets the playback position in seconds. ",1944],["timeSamples Sets the playback position in Pulse-code modulation (PCM) samples.",1944],["velocityUpdateMode Sets whether the AudioSource updates in the fixed or dynamic update loop. ",1944],["volume Sets the volume of the AudioSource (0.0 to 1.0). ",1944],["Pause Pauses the AudioSource.clip. ",1944],["Play Plays the AudioSource.clip. ",1944],["PlayDelayed Plays the AudioSource.clip with a delay you specify in seconds. ",1944],["PlayOneShot Plays an AudioClip and scales the AudioSource volume by volumeScale. ",1944],["PlayScheduled Plays the AudioSource at a time you specify. ",1944],["SetScheduledEndTime Sets a time that a scheduled AudioSource.clip ends. ",1944],["SetScheduledStartTime Sets the time that a scheduled AudioSource.clip starts. ",1944],["Stop Stops playing the AudioSource.clip. ",1944],["UnPause Unpauses a paused AudioSource.clip. ",1944],["PlayClipAtPoint Plays an AudioSource.clip at a given position in the worldspace.",1944],["AudioClip ",1944],["Unity WebGL imports AudioClip files in the AAC Format, which is supported by most browsers. Unity WebGL supports the following AudioClip APIs:",1944],["Properties Description ",1944],["length The length of the AudioClip in seconds. ",1944],["loadState Returns the current load state of the audio data associated with an AudioClip. ",1944],["samples The length of the AudioClip in samples. ",1944],["loadType The load type of the clip. You can set the AudioClip load type in the Inspector. ",1944],["Method Description Additional information ",1944],["AudioClip.Create Creates an AudioClip with a name and length you specify. Unity WebGL partially supports AudioClip.Create. Browsers don't support dynamic streaming, so to use AudioClip.Create, set the Stream to false. ",1944],["AudioClip.SetData Sets sample data in an AudioSource.clip. Unity WebGL partially supports AudioClip.SetData. You can only use this method to replace the contents of an AudioClip. On WebGL, Unity ignores the offsetSample parameter. ",1944],["Note:** For audio clip support on Linux, make sure you've installed the ffmpeg package.",1944],["Compressed Audio",1944],["To use compressed audio with WebGL in Unity, set the AudioClip loadType to one of the following options:",1944],["Compression method Description Considerations ",1944],["CompressedInMemory Use this to compress the audio on disk and have it remain compressed after it loads into your application memory. Compressed audio can cause latency and is less precise when it comes to audio playback. However, compressed audio uses less memory in your application than decompressed audio. It's best practise to use CompressedInMemory for audio that's unaffected by precision for example, background music. ",1944],["DecompressOnLoad Use this to compress the audio on disk, similar to CompressedInMemory, and decompress when it loads into your application memory. Decompressed audio uses a significant amount of memory compared to compressed audio but has lower latency and more audio flexibility. Use DecompressedOnLoad for audio that's affected by precision (for example, character dialog or sound effects). ",1944],["Audio Playback and Browser Security",1944],["For security reasons, browsers don’t allow audio playback until an end user interacts with your application webpage via a mouse click, touch event or key press. Use a loading screen to allow the end user to interact with your application and start audio playback before your main content begins.",1944],["WebGL browser access to device features",1945],["Unity WebGL supports WebCam access. To allow a WebGL application to access the webcam on a device, the browser must request its user to provide access to the camera. Without the permission to access the camera, the browser returns incomplete or inaccurate information.",1945],["Note:** Currently, Unity WebGL supports WebCam devices only.",1945],["To request browser permission to access the webcam, use the Application.RequestUserAuthorization API:",1945],["using UnityEngine;",1945],["using UnityEngine.iOS;",1945],["using System.Collections;",1945],["// Get WebCam information from the browser",1945],["public class ExampleClass : MonoBehaviour",1945],["private WebCamDevice[] devices;",1945],["// Use this for initialization",1945],["IEnumerator Start()",1945],["yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);",1945],["if (Application.HasUserAuthorization(UserAuthorization.WebCam))",1945],["Debug.Log(\"webcam found\");",1945],["devices = WebCamTexture.devices;",1945],["for (int cameraIndex = 0; cameraIndex < devices.Length; ++cameraIndex)",1945],["Debug.Log(\"devices[cameraIndex].name: \");",1945],["Debug.Log(devices[cameraIndex].name);",1945],["Debug.Log(\"devices[cameraIndex].isFrontFacing\");",1945],["Debug.Log(devices[cameraIndex].isFrontFacing);",1945],["else",1945],["Debug.Log(\"no webcams found\");",1945],["Note:** Unity recommends to use the MediaDevices.getUserMedia() API to request user permission for accessing the device. This feature is available only in secure contexts (HTTPS).",1945],["WebGL browser compatibility",1946],["Unity's WebGL support for desktop browsers differs depending on the browser. It supports browsers providing the following conditions are true:",1946],["The browser is WebGL 2 capable. Note: Unity no longer provides support for WebGL 1 in builds created with the Auto Graphics API option. For more details, see WebGL 1 deprecation.",1946],["The browser is HTML 5 standards-compliant.",1946],["The browser is 64-bit and supports WebAssembly.",1946],["Unity WebGL doesn't support mobile devices. It might work on high-end devices, but current devices are often not powerful and don't have enough memory to support Unity WebGL content.",1946],["Unity WebGL supports some compressed texture formats. For information on the compressed texture formats that Unity WebGL supports, see Recommended, default, and supported texture compression formats, by platform.",1946],["Desktop Browser Desktop Platforms ",1946],["------------------- --------------------- ",1946],["Google Chrome Windows, macOS, Linux ",1946],["Mozilla Firefox Windows, macOS, Linux ",1946],["Apple Safari macOS ",1946],["Microsoft Edge Windows, macOS, Linux ",1946],["Notes:**",1946],["Unity WebGL also supports the latest version of the Chromium-based Edge browser.",1946],["Apple Safari doesn't support WebGL 2 in versions before Safari 15.",1946],["Apple Safari doesn't support IndexedDB for content running in an iFrame.",1946],["On Linux, you might have to install Advanced Audio Coding (AAC) codec support via a package manager (for example, the GStreamer package).",1946],["",1946],["WebGL 1 deprecation",1946],["From Unity 2022.1, the Auto Graphics API setting no longer includes WebGL 1 Graphics API. However, if you still need to add support for WebGL 1 in your project then follow these steps:",1946],["Open the Player Settings window and expand the Other Settings section.",1946],["Disable the Auto Graphics API option and explicitly add WebGL 1 (Deprecated) to the Graphics API list.",1946],["WebGL 1 graphics card blocklists",1946],["GPU blocklists apply. Older graphics cards might not support WebGL. For more information, see:",1946],["Mozilla's documentation on Blocklisting/Blocked Graphics Drivers.",1946],["Khronos's documentation on Blacklists and Whitelists.",1946],["WebGL 1 deprecated from the Auto Graphics API list in 2022.1",1946],["Brotli compression first documented on this page in User Manual 5.6",1946],["Updated with most recent compatibility information in 2019.1",1946],["Build and distribute a WebGL application",1947],["Before building and distributing a WebGL application, find out how to perform the following tasks:",1947],["Page Description ",1947],["",1947],["Build your WebGL application Build a WebGL application. ",1947],["WebGL templates Learn how to access WebGL templates. ",1947],["Deploy WebGL application Deploy a WebGL build. ",1947],["WebGL server configuration code samples Code samples to configure Nginx, Apache, and IIS servers with WebGL builds. ",1947],["Additional resources:",1947],["Build your WebGL application",1948],["To create a build for WebGL, go to File > Build Settings from Unity’s main menu. In the Platform list, select WebGL and then click Switch Platform.",1948],["When you have configured the Build Settings, choose one the following options:",1948],["Build**: Builds your application into a Player.",1948],["Build and Run**: Builds your application in a Player, and opens that Player on your target platform.",1948],["The Unity build system for WebGL supports the following settings:",1948],["Setting Function ",1948],["",1948],["Texture Compression The texture compression format to use for the build. For more information, refer to WebGL texture compression. The available options are: ",1948],["Use Player Settings This is the default selection. It uses the texture compression format you set in the Player settings window. ",1948],["ETC2 Uses ETC2 format, which is widely supported on mobile devices. ",1948],["ASTC Uses ASTC format, which is widely supported on mobile devices. ",1948],["DXT Uses DXT format, which is widely supported on desktop devices. ",1948],["Development Build Enable this setting to include scripting debug symbols and the Profiler in your build. When you enable this, Unity sets the DEVELOPMENT_BUILD scripting define. Use this setting only when you want to test your application because development builds don't minify content, they're large to distribute. ",1948],["Code Optimization Select the optimization mode to use for compiling the WebGL code. ",1948],["Shorter Build Time This is the default setting. Select this option to generate WebGL code that takes the least amount of time to build. ",1948],["Runtime Speed Select this option to generate WebGL code that's optimized for runtime performance, at the expense of taking a longer time to build. ",1948],["Runtime Speed with LTO This is the same as Runtime Speed, but with an additional Link Time Optimizations (LTO) stage (sometimes called Whole Program Optimization). Enable LTO when compiling Master shipping builds for deployment to end users. ",1948],["Disk Size Select this option to favor optimizations that minimize build size, at the expense of taking a longer time to build. The recommended best practice is to select this option when targeting mobile web browsers, that may have limits on the size of WebAssembly files that can be loaded. Smaller disk sizes generally result in shorter page startup times. ",1948],["Disk Size with LTO This is the same as Disk Size, but enables additional Link Time Optimizations (LTO) stage (sometimes called Whole Program Optimization). Select this option when compiling Master shipping builds for deployment to end users. ",1948],["Autoconnect Profiler Typically, when enabled, this setting allows you to automatically connect the Unity Profiler to your build. However for WebGL, as you can't connect the Profiler to a running build, use this option to connect the content to the Unity Editor instead. This is because the Profiler connection is handled using WebSockets on WebGL, but a web browser only allows outgoing connections from the content. For this setting to be available, you must enable the Development Build option. ",1948],["Deep Profiling Enable this setting to activate Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application and returns more detailed profiling data. When you enable Deep Profiling Support, it might slow down script execution. This option is only available if you enable the Development Build option. ",1948],["Build Use it to build your application. ",1948],["Build And Run Use it to view the WebGL Player locally. Unity uses a local web server to host your build, and opens it from a localhost URL. Alternatively, you can use a custom local web server with properly configured response headers. For more information, see Compressed builds and server configuration. ",1948],["For changing the settings for Asset Import Overrides, refer to Build Settings.",1948],["Build folder",1948],["The Build folder has the following files, where [ExampleBuild] represents the name of the target build folder.",1948],["File name Contains ",1948],["[ExampleBuild].loader.js The JavaScript code that the web page needs to load the Unity content. ",1948],["[ExampleBuild].framework.js JavaScript runtime and plugins. ",1948],["[ExampleBuild].wasm WebAssembly binary. ",1948],["[ExampleBuild].mem A binary image to initialize the heap memory for your Player. Unity generates this file for multi-threaded WebAssembly builds only. ",1948],["[ExampleBuild].data Asset data and Scenes. ",1948],["[ExampleBuild].symbols.json Debug symbol names necessary to demangle an error stack trace. This file is only generated for Release builds when you enable the Debug Symbols option (File > Build Settings > Player Settings.) ",1948],["[ExampleBuild].jpg A background image, which displays while the build is loading. This file is only generated when a Background Image is available in the Player Settings (File > Build Settings > Player Settings > Splash Image). For more information, see Splash Screen. ",1948],["If you enable a Compression Method for your build, Unity identifies the extension that corresponds with the compression method and adds this extension to the names of the files inside the Build sub folder. If you enable Decompression Fallback, Unity appends the extension .unityweb to the build file names. Otherwise, Unity appends the extension .gz for the Gzip compression method, or .br for the Brotli compression method.",1948],["For more information, refer to Compressed builds and server configuration.",1948],["If you enable Name Files As Hashes in the Player Settings, Unity uses the hash of the file content instead of the default file name. This applies to each file in the build folder. This option allows you to upload updated versions of the game builds into the same folder on the server, and only upload the files which have changed between build iterations.",1948],["Note**: Opening a Player directly from the file system might not work in some browsers. This is due to security restrictions applied to local file URLs.",1948],["Enable exceptions",1948],["Use Enable Exceptions to specify how unexpected code behavior (also known as errors) is handled at runtime. To access Enable Exceptions, go to the Publishing Settings section in WebGL Player Settings.",1948],["It has the following options:",1948],["None**: Select this if you don’t need any exception support. This gives the best performance and smallest builds. With this option, any exception thrown causes your content to stop with an error in that setting.",1948],["Explicitly Thrown Exceptions Only** (default): Select this to capture exceptions which are explicitly specified from a throw statement in your scripts and to also ensure finally blocks are called. Note that selecting this option makes the generated JavaScript code from your scripts longer and slower; This might only be an issue if scripts are the main bottleneck in your project.",1948],["Full Without Stacktrace**: Select this option to capture:",1948],["Exceptions which are explicitly specified from throw statements in your scripts (the same as in the Explicitly Thrown Exceptions Only option)",1948],["Null References",1948],["Out of Bounds Array accesses",1948],["Full With Stacktrace**: This option is similar to the option above but it also captures Stack traces. Unity generates these exceptions by embedding checks for them in the code, so this option decreases performance and increases browser memory usage. Only use this for debugging, and always test in a 64-bit browser.",1948],["Cache behavior in WebGL",1949],["In Unity WebGL, the Cache API lets you store the asset data cached in .data files and AssetBundles within the browser cache. Storage limits for the browser cache such as maximum file size, maximum overall cache size, and eviction criteria are dependent on the browser and platform that you're using. For more information, see Browser storage limits and eviction criteria.",1949],["Data Caching",1949],["To access Data Caching, open the Publishing Setings for WebGL from File > Build Settings > Player Settings. This enables the browser to cache the main data files into the IndexedDB database.",1949],["Using the default browser HTTP cache doesn't guarantee that the browser caches a particular response. This is because the browser HTTP cache has limited space, and the browser might not be able to cache files that are too large.",1949],["To improve your loading speed, IndexedDB allows you to cache files above the browser limit. When you cache more files, you increase the chance that downloaded content is available on the user's machine during the next run of the build.",1949],["Data Caching only caches the .data files in the IndexedDB cache for HTTP responses. To cache AssetBundles, you need to enable Data Caching and override unityInstance.Module.cacheControl().",1949],["To do this, make sure Module.cacheControl(url) returns must-revalidate for the requested AssetBundle URL. For example, you can override the unityInstance.Module.cacheControl() function in the fulfillment callback of the Promise that createUnityInstance() returns.",1949],["For further information on createUnityInstance(), see Compressed builds and server configuration.",1949],["Customize the WebGL Cache behavior",1949],["By default, the WebGL Cache stores the asset data file .data and AssetBundle files .bundle, and revalidates them before loading them from the cache. You can change this behavior by adding a new WebGL Template that changes the UnityLoader configuration.",1949],["The following example shows adding a custom cacheControl function to the UnityLoader configuration within the index.html file.",1949],["var config = {",1949],["// ...",1949],["if USE_DATA_CACHING",1949],["cacheControl: function (url) {",1949],["// Caching enabled for .data and .bundle files.",1949],["// Revalidate if file is up to date before loading from cache",1949],["if (url.match(/.data/) url.match(/.bundle/)) {",1949],["return \"must-revalidate\";",1949],["// Caching enabled for .mp4 and .custom files",1949],["// Load file from cache without revalidation.",1949],["if (url.match(/.mp4/) url.match(/.custom/)) {",1949],["return \"immutable\";",1949],["// Disable explicit caching for all other files.",1949],["// Note: the default browser cache may cache them anyway.",1949],["return \"no-store\";",1949],["},",1949],["endif",1949],["// ...",1949],["The cacheControl function takes the url of a request as a parameter and returns one of the following:",1949],["must-revalidate - If the function returns must-revalidate, the cache returns to an enabled state and the file is revalidated before being loaded from the cache.",1949],["immutable - If the function returns immutable, the cache is enabled and the file is loaded from the cache without revalidation.",1949],["no-store - If the function returns no-store, the cache is disabled.",1949],["The browser automatically stores (caches) certain file types such as .html, .js, .css, .json, .jpg, .png, so they don't need to be explicitly stored in the WebGL Cache. Typical candidates for the WebGL cache include large files and files that use a custom file format.",1949],["Configure a WebGL Canvas size",1950],["In a WebGL app, the canvas element is where the browser draws the graphics when rendering a game. This section describes how to configure the visible size of the WebGL canvas element, and the resolution that the game renders to.",1950],["To configure your WebGL Canvas size, you must consider the following types of canvas size:",1950],["Canvas Size elements Description ",1950],["",1950],["Canvas element CSS size This Document Object Model (DOM) specifies the visible area on the web page that the canvas takes up. You can configure the canvas size using HTML or JavaScript. ",1950],["WebGL render target size This size specifies the pixel resolution that the GPU renders your game to. You can manage this size in sync with the CSS size to provide pixel-perfect rendering, or decouple it from the CSS size. ",1950],["If the above two canvas size elements don't match, the browser will stretch the rendered WebGL output to fill the visible canvas area on the web page.",1950],["Decouple the render resolution",1950],["Decoupling the render resolution is useful when implementing downscaled low DPI (Dots per inch) rendering on high DPI display. This helps to not only conserve the GPU fill rate power but also helps if your application is sensitive to the rendering resolution. For example, if your application logic uses screen space pixel units, but for the application itself to work properly, it requires a specific resolution.",1950],["By default, Unity keeps the canvas element CSS size and the WebGL render target size in sync and provides 1:1 pixel perfect rendering. If the web page in JavaScript modifies the canvas CSS size, Unity will automatically adjust the WebGL render target size to match it. By default, this match is done to implement high DPI rendering.",1950],["Override DPI scale",1950],["If you want to override the DPI scale, open the index.html file and add the Unity Instance configuration variable devicePixelRatio=<double>. For example, setting devicePixelRatio=1 on the WebGL site template page will force Unity to always apply low DPI rendering. See Using WebGL templates for an example.",1950],["Manually change the WebGL canvas render size",1950],["To manually configure the canvas size, you must first disable the automatic size synchronization. To do so, in the index.html file of the WebGL template, set the Unity Instance configuration variable to false: matchWebGLToCanvasSize=false.",1950],["When this is set, Unity leaves the render target size of the canvas as-is but you can always configure the size, if required.",1950],["For example, to change the css size of the canvas, edit the following text in the index.html file:",1950],["",1950],["",1950],["",1950],["Cursor locking and full-screen mode in WebGL",1951],["Unity WebGL supports features such as cursor locking and full-screen mode that are implemented using the HTML5 APIs, Element.requestPointerLock and Element.requestFullscreen.",1951],["Note:** As browser support for cursor locking and full-screen mode varies, refer to the Mozilla documentation on cursor locking and full screen.",1951],["Cursor locking",1951],["Cursor locking lets players lock their mouse cursor to the center of the game window. When the cursor is locked, it appears hidden in Unity and doesn't move when the mouse moves. This is particularly helpful when playing first-person games, where the mouse cursor is typically used to control the orientation of the player's angle.",1951],["To lock the cursor, use the Cursor.lockState property. For example, the following code shows the cursor in locked state when the user clicks the left mouse button:",1951],["void Update()",1951],["if (Input.GetMouseButtonDown(0))",1951],["Cursor.lockState = CursorLockMode.Locked;",1951],["The cursor is automatically unlocked when you press the Esc key.",1951],["Sticky cursor lock",1951],["Use stickyCursorLock to ensure that the state of Cursor.lockState is persistent, even if the browser releases the cursor lock from the Unity canvas (typically using the Esc key), in which case the cursor is locked again the next time the canvas is in focus. The stickyCursorLock property is commonly used in first-person games, where maintaining the cursor lock mode is particularly beneficial regardless of the browser behavior.",1951],["Therefore, if you set WebGLInput._stickyCursorLock to true, the Cursor.lockState remains in CursorLockMode.Locked state even if the Unity canvas HTML element is forced to unlock the cursor. If you set WebGLInput._stickyCursorLock to false, then Cursor.lockState remains synchronized with the browser's cursor lock state, and changes to CursorLockMode.None if the canvas cursor lock is canceled by pressing the Esc key.",1951],["Note:** In WebGL, stickyCursorLock is set to true by default.",1951],["Full-screen mode",1951],["Use the full-screen mode to use the entire computer screen for your game. You can perform the following actions in full-screen mode:",1951],["Use the entire screen for your game.",1951],["Hide the browser user interface (UI) elements such as the address bar and tabs.",1951],["Hide the Unity player UI elements such as the title bar and toolbar.",1951],["To enable full-screen mode, use the Screen.fullScreen property. For example, the following code shows the game in full-screen mode when the user presses the F key:",1951],["void Update()",1951],["if (Input.GetKeyDown(KeyCode.F))",1951],["Screen.fullScreen = true;",1951],["Note:** The Screen.fullScreen property is set to false by default.",1951],["To exit full-screen mode, press ESC again, or hover the mouse pointer to the top of the screen to access the address bar and tabs.",1951],["Additional considerations",1951],["Due to security concerns, browsers allow cursor locking and full-screen mode only in direct response to a user-initiated event such as a mouse-click or key press. Because Unity doesn't support separate events and rendering loops, it defers event handling until the browser no longer acknowledges full-screen or cursor lock requests issued from Unity scripting as a direct response to the event which triggered it. Therefore, Unity triggers the request on the next user-initiated event, instead of the event that triggered the cursor lock or full-screen request.",1951],["To enable cursor lock or full-screen modes with acceptable results, set projects to trigger appropriate requests using mouse/key down events, instead of mouse/key up events. This way you can ensure that the deferred request is guaranteed to be triggered by the corresponding mouse/key up event if not by a user-initiated event earlier.",1951],["You can also use Unity's UI.Button component to achieve the desired behavior by creating a subclass of Button, which overrides the OnPointerDown method.",1951],["Note:** Some browsers might display a notification message or prompt the user to grant permission before entering full-screen mode or locking the cursor.",1951],["Debug and troubleshoot WebGL builds",1952],["Visual Studio doesn't support debugging Unity WebGL content. Use the following tips to get your build information.",1952],["Browser's JavaScript console",1952],["Unity WebGL doesn't have access to your file system, so it doesn't write a log file like other platforms. However, it does write all logging information such as Debug.Log, Console.WriteLine or Unity's internal logging to the browser's JavaScript console.",1952],["To open the JavaScript console:",1952],["In Firefox, press Ctrl-Shift-K on Windows or Command-Option-K on a Mac.",1952],["In Chrome, press Ctrl-Shift-J on Windows or Command-Option-J on a Mac.",1952],["In Safari, go to Preferences > Advanced > Develop, and press Command-Option-C.",1952],["In Microsoft Edge or Internet Explorer, press F12.",1952],["Development builds",1952],["For debugging purposes, you might want to make a development build in Unity (open the Build Settings window and enabled the Development Build checkbox). Development builds allow you to connect the profiler, and Unity doesn't minify them, so the emitted JavaScript code still contains human-readable (though C++-mangled) function names.",1952],["The browser uses these to display stack traces if you run into a browser error, when using Debug.LogError, or when an exception occurs and exception support is disabled. Unlike the managed stack traces that can occur when you have full exception support, these stack traces have mangled names, and contain not only managed code, but also the internal UnityEngine code.",1952],["Exception support",1952],["WebGL has different levels of exception support, but by default, Unity WebGL only supports explicitly thrown exceptions. For more information, refer to Build your WebGL application. You can enable Full exception support, which emits additional checks in the IL2CPP-generated code, to catch access to null references and out-of-bounds array elements in your managed code. These additional checks significantly impact performance and increase code size and load times, so you must only use it for debugging.",1952],["Full exception support also emits function names to generate stack traces for your managed code. For this reason, stack traces appear in the console for uncaught exceptions and for Debug.Log statements. Use System.Environment.Stacktrace to get a stack trace string.",1952],["Troubleshooting",1952],["Problem: The build runs out of memory",1952],["This is a common problem, especially on 32-bit browsers. For more information on WebGL memory issues and how to fix them, refer to the documentation on Memory in Unity WebGL.",1952],["Error message: Incorrect header check",1952],["The browser console log usually prints this error due to incorrect server configuration. For more information on how to deploy a release build, refer to documentation on Deploying compressed builds.",1952],["Error message: Decompressing this format (1) isn't supported on this platform",1952],["The browser console log prints this error when the content tries to load an AssetBundle compressed using LZMA, which Unity WebGL doesn't support. Re-compress the AssetBundle using LZ4 compression to solve this problem. For more information on compression for WebGL, refer to documentation on WebGL building, particularly the AssetBundles section.",1952],["Deploy WebGL application",1953],["To deploy a WebGL build, you must configure your server and make sure you're using the correct response headers, so that the browser receives a proper response and processes it correctly.",1953],["There are two main settings in Unity that affect how you set up the server:",1953],["Compression Format**: Determines how Unity compresses files during the build step.",1953],["Decompression Fallback**: Determines how Unity processes downloaded files when the build runs in the browser.",1953],["Compression Format ",1953],["Choose the compression type from the WebGL Player Settings window (menu: Edit > Project Settings > Player, then select WebGL and expand the Publishing Settings section):",1953],["Compression method Description ",1953],["gzip This is the default option. Gzip files are bigger than Brotli files, but faster to build, and natively supported by all browsers over both HTTP and HTTPS.",1953],["Brotli Brotli compression offers the best compression ratios. Brotli compressed files are smaller than gzip, but take a longer time to compress, which increases your iteration times on release builds. Chrome and Firefox only natively support Brotli compression over HTTPS. ",1953],["Disabled Disables compression. Use this option if you want to implement your own compression in post-processing scripts. You should also use it if you plan to use static compression on the hosting server. ",1953],["For more information on browser support for selected compression methods, see documentation on WebGL browser compatibility.",1953],["Web server configuration",1953],["You might need to adjust your server configuration to match your specific build setup. In particular, there might be issues if you already have another server-side configuration to compress hosted files, which could interfere with this setup.",1953],["To make the browser perform decompression natively while it downloads your application, append a Content-Encoding header to the server response. This header must correspond to the type of compression Unity uses at build time.",1953],["For code samples, see Server Configuration Code Samples.",1953],["Decompression fallback",1953],["The decompression fallback option enables Unity to automatically embed a JavaScript decompressor into your build. This decompressor corresponds to your selected compression method, and decompresses your content if the browser fails to do so.",1953],["Enable decompression fallback",1953],["Enable decompression fallback from the Player Settings window (menu: Edit > Project Settings > Player, then select WebGL and expand the Publishing Settings section).",1953],["When you enable decompression fallback, Unity adds a .unityweb extension to the build files.",1953],["You should consider using Decompression Fallback if you have less experience with server configuration, or if server configuration is unavailable to you.",1953],["Note**: Enabling decompression fallback results in a large loader size and a less efficient loading scheme for the build files.",1953],["Disable decompression fallback",1953],["The Decompression Fallback option is disabled by default. Therefore, by default, build files include an extension that corresponds to the compression method you select.",1953],["There are two compression methods to choose from: gzip or Brotli. For further information see the compression format section.",1953],["To enable browsers to natively decompress Unity build files while they're downloading, you need to configure your web server to serve the compressed files with the appropriate HTTP headers. This is called native browser decompression. It's faster than the JavaScript decompression fallback, which can reduce your application's startup time.",1953],["The setup process for native browser decompression depends on your web server. For code samples, see Server Configuration Code Samples.",1953],["Content-Encoding headers ",1953],["A Content-Encoding header tells the browser which type of compression Unity has used for the compressed files. This allows the browser to decompress the files natively.",1953],["Set the Content-Encoding response header to the compression method selected in the Player Settings.",1953],["Compression method File extension Response header ",1953],["gzip .gz Content-Encoding: gzip ",1953],["Brotli .br Content-Encoding: br ",1953],["WebAssembly streaming (higher level header)",1953],["WebAssembly streaming allows the browser to compile the WebAssembly code while it's still downloading the code. This significantly improves loading times.",1953],["For WebAssembly streaming compilation to work, the server needs to return WebAssembly files with an application/wasm MIME type.",1953],["To use WebAssembly streaming, you need to serve WebAssembly files with the Content-Type: application/wasm response header.",1953],["A Content-Type header tells the server which media type the content is. This value should be set to application/wasm for WebAssembly files.",1953],["File extension Response header ",1953],[".wasm, .wasm.gz, .wasm.br Content-Type: application/wasm ",1953],["Note**: WebAssembly streaming doesn't work together with JavaScript decompression when the Decompression Fallback option is enabled. The downloaded WebAssembly file must first go through the JavaScript decompressor because the browser can't stream it during download.",1953],["Additional headers",1953],["If your file contains JavaScript, you should add the application/javascript Content-Type header. Some servers might include this automatically, while others don't.",1953],["File extension Response header ",1953],[".js, .js.gz, js.br Content-Type: application/javascript ",1953],["Updated page to account for server configuration in 2020.1",1953],["2019-09-04 WebAssembly streaming added in 2019.2 ",1953],["WebGL development",1954],["Before you start developing apps on Unity WebGL, you might want to consider reading this section.",1954],["This section covers the following WebGL topics:",1954],["Page Description ",1954],["",1954],["WebGL Player settings Refer to the UI description of WebGL Player settings. ",1954],["Interaction with browser scripting The different methods used for browser scripting in WebGL. ",1954],["WebGL Native plug-ins for Emscripten WebGL native plug-ins for Emscripten. ",1954],["Memory in WebGL How to manage memory in WebGL. ",1954],["Caching in WebGL Customize the WebGL cache behavior. ",1954],["WebGL graphics How to use the WebGL Graphics API. ",1954],["Audio in WebGL Information about audio capabilities in WebGL. ",1954],["Texture compression in WebGL Information about using texture compression in WebGL. ",1954],["Embedded resources on WebGL Information about embedded resources in WebGL. ",1954],["Input in WebGL The various input types that Unity WebGL supports. ",1954],["Configure a WebGL Canvas size Configure the visible size of the WebGL canvas element. ",1954],["WebGL browser access Manage browser authorization to access a device feature (webcam). ",1954],["WebGL networking How to use networking in WebGL. ",1954],["Cursor locking and full-screen mode in WebGL Cursor locking and full-screen mode support in WebGL. ",1954],["WebGL performance considerations WebGL performance considerations. ",1954],["Debug and troubleshoot WebGL builds Debug and troubleshoot WebGL builds. ",1954],["Additional resources",1954],["Distribution size and code stripping",1955],["When publishing for WebGL, it is important to keep your build size low so users get reasonable download times before the content starts. For generic tips on reducing asset sizes, see documentation on Reducing the file size of the build.",1955],["Hints and tips specific to WebGL",1955],["Specify the Crunch texture compression format for all your compressed textures in the Texture Importer.",1955],["Don’t deploy development builds; they're not compressed or minified, and so have much larger file sizes.",1955],["In the Player settings window, (click Edit > Project Settings > WebGL) expand Publishing Settings, and set Enable Exceptions to None if you don’t need exceptions in your build.",1955],["Enable Strip Engine Code in the Player settings > Other Settings panel, to ensure an efficient build.",1955],["When using third-party managed dlls, be aware that it might come with dependencies that increase the generated code size.",1955],["If you make a release build, Unity compresses the build output files according to the Compression Format selected in the Publishing Settings panel of the WebGL Player settings.",1955],["For more information on how to publish compressed builds, see Deploying compressed builds.",1955],["Code stripping",1955],["Unity removes all unused code from your build by default. You can change this via the Player settings (menu: Edit > Project Settings, then select the Player category): Select the Other Settings panel to access the Strip Engine Code option. It is better to build with stripping enabled.",1955],["With code stripping, Unity scans your project for any UnityObject-derived classes used (either by being referenced in your script code, or in the serialized data in your Scenes). It then removes from the build any Unity subsystems which have none of their classes used. This makes your build have less code, resulting in both smaller downloads and less code to parse (so code runs faster and uses less memory).",1955],["Issues with code stripping",1955],["Code stripping might cause issues with your project if it strips code which is actually necessary. This can be the case when you load AssetBundles at run time which contain classes that are not included in the main build, and have therefore been stripped from the project. Error messages appear in your browser’s JavaScript console when this happens (possibly followed by more errors). For example:",1955],["Could not produce class with ID XXX",1955],["To troubleshoot these errors, look up the ID (such as XXX in the example above) in the Class ID Reference to see which class it is trying to create an instance of. In such cases, you can force Unity to include the code for that class in the build, either by adding a reference to that class to your scripts or to your Scenes, or by adding a link.xml file to your project.",1955],["Below is an example which makes sure that the Collider class and the Physics module gets preserved in a project. Add this XML code to a file called link.xml, and put that file into your Assets folder.",1955],["",1955],["",1955],["",1955],["",1955],["",1955],["If you suspect that stripping is causing problems with your build, you can also try disabling the Strip Engine Code option during testing.",1955],["Unity does not provide a convenient way to see which modules and classes are included in a build, which would allow you to optimize your project to strip well. However, to get an overview of included classes and modules, you can look at the generated file Temp/StagingArea/Data/il2cppOutput/UnityClassRegistration.cpp after making a build.",1955],["Note that the Strip Engine Code option only affects Unity engine code. IL2CPP always strips byte code from your managed dlls and scripts. This can cause problems when you need to reference managed types dynamically through reflection rather than through static references in your code. If you need to access types through reflection, you may also need to set up a link.xml file to preserve those types. See the documentation page on iOS Build size optimization for more information on link.xml files.",1955],["Moving build output files",1955],["To change the location of your Build folder, modify the buildUrl variable in the WebGL Template index.html file.",1955],["To change the location of the files inside the Build folder, change their URLs (that is, dataUrl, wasmCodeUrl, wasmMemoryUrl, and wasmFrameworkUrl) in the parameters to the config variable in the index.html file.",1955],["You can specify URLs on external servers for these if you want to host your files on a content distribution network (CDN), but you need to make sure that the hosting server has enabled Cross Origin Resource Sharing (CORS) for this to work. See the manual page on WebGL networking for more information about CORS.",1955],["Incremental builds",1955],["The C++ code generated for your project by IL2CPP is compiled incrementally; that is, only generated C++ code that has changed since the last build is compiled again. Unchanged source code re-uses the same object files generated for the previous build. The object files used for incremental C++ builds are stored in the Library/il2cpp_cache directory in your Unity project.",1955],["To perform a clean, from-scratch build of the generated C++ code which doesn’t use incremental compiling, delete the Library/il2cpp_cache directory in your Unity project. Note that if the Unity Editor version differs from the one used for the previous WebGL build, Unity does a clean, from-scratch build automatically.",1955],["Full Without Stacktrace added in Unity 2017.3",1955],["Embedded resources in WebGL",1956],[".NET assemblies can contain embedded resources. An embedded resource is a collection of binary data that's part of the .NET assembly. You can access this binary data in code via a file-like API.",1956],["By default, WebGL builds don’t include embedded resources. This helps to keep the size of the final binary lower, because embedded resources can be rather large. However, some user code and .NET class library APIs depend on the presence of embedded resources to work properly. For example, string comparisons that use the StringComparison.InvariantCultureIgnoreCase value use embedded resources when comparing non-ASCII characters.",1956],["You can use the following script in the Unity Editor to enable embedded resources for a WebGL build:",1956],["using UnityEditor;",1956],["public class WebGLEditorScript",1956],["[MenuItem(\"WebGL/Enable Embedded Resources\")]",1956],["public static void EnableEmbeddedResources()",1956],["PlayerSettings.WebGL.useEmbeddedResources = true;",1956],["When this Player setting is enabled, the WebGL build includes any embedded resources in any .NET assemblies the Project uses.",1956],["WebGL prerequisites",1957],["This page describes the prerequisite steps that you must complete before building a WebGL application.",1957],["Install the Unity Hub and add required modules",1957],["To build a WebGL application, you must first install the Unity Hub and then add the WebGL Build Support module.",1957],["Refer to install the Unity Hub and Add modules to the Unity Editor for information about how to complete these steps.",1957],["WebGL graphics",1958],["WebGL is an API for rendering graphics in web browsers, which is based on the functionality of the OpenGL ES graphics library. WebGL 1.0 roughly matches OpenGL ES 2.0 functionality, and WebGL 2.0 roughly matches OpenGL ES 3.0 functionality.",1958],["Camera clear",1958],["By default, Unity WebGL clears the drawing buffer after each frame, which means the content of the frame buffer clears regardless of the Camera.clearFlags setting. However, you can change this behavior at instantiation time. To do this, set webglContextAttributes.preserveDrawingBuffer to true in your WebGL template:",1958],["script.onload = () => {",1958],["config['webglContextAttributes'] = {\"preserveDrawingBuffer\": true}; // Add this line to the index.html file in a WebGL Template",1958],["createUnityInstance(canvas, config, (progress) => }",1958],["Deferred rendering",1958],["Unity WebGL only supports Deferred Rendering Path if WebGL2.0 is available. On WebGL 1.0, Unity WebGL runtime falls back to Forward Rendering.",1958],["Global illumination",1958],["Unity WebGL only supports baked GI. Realtime Global Illumination isn't currently supported in WebGL. In addition, Unity WebGL supports Non-Directional lightmaps only.",1958],["Linear rendering",1958],["Unity WebGL only supports linear color space rendering with WebGL 2.0. Linear color space rendering doesn't have fallback support for WebGL 1.0. To build a WebGL player using linear color space rendering, you need to remove WebGL 1.0 API in the Player settings, open the Other Settings panel, disable the Automatic Graphics API setting.",1958],["Some web browsers don't support sRGB DXT texture compression. This can decrease the quality of rendering performance when using linear rendering, due to runtime decompression of all the DXT textures.",1958],["Video clip importer",1958],["You can't use VideoClipImporter to import video clips to your Unity project, because it might increase the initial asset data download size and prevent network streaming. For video playback, use the URL option in the VideoPlayer component and place the asset in the StreamingAssets/ directory to use the built-in network streaming of your browser.",1958],["WebGL shader code restrictions",1958],["The WebGL 1.0 specification imposes some limitations on GLSLS shader code, which are more restrictive than most OpenGL ES 2.0 implementations. This is mostly relevant when you write your own shaders.",1958],["WebGL has specific restrictions on which values to use to index arrays or matrices. For example, WebGL only allows dynamic indexing with constant expressions, loop indices or a combination, except for uniform access in vertex shaders, which you can index using any expression.",1958],["Note for WebGL 1.0:** Additional restrictions apply on control structures in WebGL 1.0, where it doesn't allow while loops and most type of for loops. However, it allows counting for loops, where the field initializer sets a variable to a constant, the update adds a constant to or subtracts a constant from the variable, and the continuation test compares the variable to a constant.",1958],["Note:** Due to limited available memory in WebGL, you should avoid including unneeded shader variants which can lead to unnecessary memory usage. Therefore, Unity recommends familiarizing yourself with shader variants and shader stripping, and take extra care to ensure that you don’t add shaders with too many variants (for example, Unity's Standard Shader) to the [Always-included Shaders] section(class-GraphicsSettings#Always) in Graphics Settings.",1958],["Font rendering",1958],["Unity WebGL supports dynamic font rendering similar to other Unity platforms. However, as it doesn't have access to the fonts installed on the user's machine, if you want to use any fonts, make sure to include them in the project folder (including any fallback fonts for international characters, or bold/italic versions of fonts), and set as fallback font names.",1958],["Anti-aliasing",1958],["WebGL supports anti-aliasing on most (but not on all) combinations of browsers and GPUs. To use it, anti-aliasing must be enabled in the default Quality setting for the WebGL platform.",1958],["Reflection probes",1958],["Unity WebGL supports all reflection probes. Note: WebGL 1.0 doesn't support Smooth realtime reflection probes.",1958],["WebGL 2.0 support",1958],["Unity includes support for the WebGL 2.0 API, which brings OpenGL ES 3.0-level rendering capabilities to the web.",1958],["By default, Unity WebGL builds support the WebGL 2.0 API. You can configure this in the WebGL Player settings > Other Settings panel by disabling the Automatic Graphics API property and adding the WebGL 1.0 API to your project.",1958],["Browsers with WebGL 2.0 support have the following advantages:",1958],["The content in the Standard Shader is of high quality.",1958],["Support for GPU Instancing and directional lightmap.",1958],["There's no restrictions on indexing and loops in shader code",1958],["Better performance.",1958],["You can use SystemInfo.graphicsDeviceType at run time to determine whether the Unity instance is rendering with OpenGLES3 (WebGL2.0) or OpenGLES2 (WebGL1.0).",1958],["Additional resources:",1958],["Linear rendering for WebGL 2.0 added in 2017.2 NewIn20172",1958],["Input in WebGL",1959],["Gamepad and Joystick support",1959],["Unity WebGL supports Input and InputSystem for gamepads and joysticks for browsers that support the HTML5 Gamepad API.",1959],["Some browsers allow access to input devices only after the end user interacts with the device while the application is in focus. This type of security measure prevents the end user from using connected devices for browser fingerprinting purposes. Therefore, your application should instruct the user to press a button on their gamepad/joystick before you call Input.GetJoystickNames() to check for connected devices.",1959],["The WebGL game controller mapping for the old input system aligns with the W3 spec, where the button mapping layout is laid out as follows:",1959],["Buttons Description ",1959],["buttons[0] Bottom button in right cluster = CROSS (X) ",1959],["buttons[1] Right button in right cluster = CIRCLE ",1959],["buttons[2] Left button in right cluster = SQUARE ",1959],["buttons[3] Top button in right cluster = TRIANGLE ",1959],["Note:** As WebGL follows the W3 spec, it might not be consistent with other platforms, and requires unique handling if you're targeting multiple platforms simultaneously, such as Windows and Web.",1959],["Touch support",1959],["Unity WebGL doesn't officially support mobile devices (see WebGL browser compatibility) yet, but it does implement Input.touches and other related APIs in browsers and devices with touch support. By default, mobile devices display a soft keyboard on the touch screen for entering text into UI input fields. To disable this behavior, use the WebGLInput.mobileKeyboardSupport property.",1959],["Keyboard input and focus handling",1959],["By default, Unity WebGL processes all keyboard input the web page receives, regardless of whether the WebGL canvas has focus or not. This allows the end user use a keyboard-based application without the need to click on the WebGL canvas.",1959],["The following notes apply to specific keyboard inputs as described below:",1959],["Keyboard input behavior Description ",1959],["HTML elements (such as text fields) Typically, introducing HTML elements (such as text fields) can cause errors if included in the web page that's meant to receive keyboard inputs. Unity consumes the input events before the rest of the page can receive them. To make HTML elements receive a keyboard input, set WebGLInput.captureAllKeyboardInput to false. This way, the application receives input only if the WebGL canvas has focus. ",1959],["Esc key Because the Esc key is protected in the web environment, some browsers like Safari block the ability to use it to switch to full-screen mode and others like Google Chrome behave unpredictably. When the browser is in full-screen mode, the Esc key is reserved for the action of exiting the full-screen mode. Depending on your browser type, clicking the Esc key might not always trigger the event to forward from the browser to the application. ",1959],["HideMobileInput The HideMobileInput option in TextMeshPro (also known as TMP) input fields has no effect on the Web platform. This is because a text input field is required to trigger the virtual keyboard in browsers. The Web platform instantiates a text input field to trigger the virtual keyboard when the Unity player is expecting text entry, which appears above the virtual keyboard much like other platforms. Because the virtual keyboard relies on the mobile text input field, it can't appear hidden on the web platform. ",1959],["Mobile Sensor support",1959],["Unity WebGL doesn't officially support mobile devices (see WebGL browser compatibility), but for browsers and mobile devices with touch support, Unity WebGL includes support for the following sensors:",1959],["Accelerometer with Input.acceleration",1959],["LinearAcceleration with Gyroscope.userAcceleration",1959],["Gyroscope with Gyroscope.rotationRate",1959],["Gravity with Gyroscope.gravity",1959],["Attitude with Gyroscope.attitude",1959],["The Input System package also supports these sensors.",1959],["Important**: Browsers allow sensor input only in secure contexts. That is, you must serve the page over HTTPS. The single exception is http://localhost, which you can use during development.",1959],["Additional resources:",1959],["Interaction with browser scripting",1960],["When building content for the web, you might need to communicate with other elements on your web page. Or you might want to implement functionality using Web APIs which Unity doesn't currently expose by default. In both cases, you need to directly interface with the browser’s JavaScript engine. Unity WebGL provides different methods to do this.",1960],["Calling JavaScript functions from Unity scripts",1960],["The recommended way of using browser JavaScript in your project is to add your JavaScript sources to your project, and then call those functions directly from your script code. To do so, place files with JavaScript code using the .jslib extension under a \"Plugins\" subfolder in your Assets folder. The plugin file needs to have a syntax like this:",1960],["mergeInto(LibraryManager.library, {",1960],["Hello: function () {",1960],["window.alert(\"Hello, world!\");",1960],["},",1960],["HelloString: function (str) {",1960],["window.alert(UTF8ToString(str));",1960],["},",1960],["PrintFloatArray: function (array, size) {",1960],["for(var i = 0; i < size; i++)",1960],["console.log(HEAPF32[(array >> 2) + i]);",1960],["},",1960],["AddNumbers: function (x, y) {",1960],["return x + y;",1960],["},",1960],["StringReturnValueFunction: function () {",1960],["var returnStr = \"bla\";",1960],["var bufferSize = lengthBytesUTF8(returnStr) + 1;",1960],["var buffer = _malloc(bufferSize);",1960],["stringToUTF8(returnStr, buffer, bufferSize);",1960],["return buffer;",1960],["},",1960],["BindWebGLTexture: function (texture) {",1960],["GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]);",1960],["},",1960],["});",1960],["Then you can call these functions from your C# scripts like this:",1960],["using UnityEngine;",1960],["using System.Runtime.InteropServices;",1960],["public class NewBehaviourScript : MonoBehaviour {",1960],["[DllImport(\"__Internal\")]",1960],["private static extern void Hello();",1960],["[DllImport(\"__Internal\")]",1960],["private static extern void HelloString(string str);",1960],["[DllImport(\"__Internal\")]",1960],["private static extern void PrintFloatArray(float[] array, int size);",1960],["[DllImport(\"__Internal\")]",1960],["private static extern int AddNumbers(int x, int y);",1960],["[DllImport(\"__Internal\")]",1960],["private static extern string StringReturnValueFunction();",1960],["[DllImport(\"__Internal\")]",1960],["private static extern void BindWebGLTexture(int texture);",1960],["void Start() {",1960],["Hello();",1960],["HelloString(\"This is a string.\");",1960],["float[] myArray = new float[10];",1960],["PrintFloatArray(myArray, myArray.Length);",1960],["int result = AddNumbers(5, 7);",1960],["Debug.Log(result);",1960],["Debug.Log(StringReturnValueFunction());",1960],["var texture = new Texture2D(0, 0, TextureFormat.ARGB32, false);",1960],["BindWebGLTexture(texture.GetNativeTexturePtr());",1960],["You can pass simple numeric types to JavaScript in function parameters without doing any conversion. You can pass other data types as a pointer in the emscripten heap which is just a big array in JavaScript.",1960],["For strings, you can use the UTF8ToString helper function to convert to a JavaScript string.",1960],["To return a string value, call _malloc to allocate some memory and the stringToUTF8 helper function to write a JavaScript string to it. If the string is a return value, then the IL2CPP runtime automatically frees up the memory for you.",1960],["For arrays of primitive types, emscripten provides different ArrayBufferViews into its heap for different sizes of integer, unsigned integer or floating point representations of memory: HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64.",1960],["To access a texture in WebGL, emscripten provides the GL.textures array which maps native texture IDs from Unity to WebGL texture objects. You can call WebGL functions on emscripten’s WebGL context, GLctx.",1960],["For more information on how to interact with JavaScript, refer to the emscripten documentation.",1960],["In addition, note that in the Unity installation folder there are several plugins that you can use as reference, in PlaybackEngines/WebGLSupport/BuildTools/lib and PlaybackEngines/WebGLSupport/BuildTools/Emscripten/src/library*.",1960],["Code visibility",1960],["The recommended approach is to execute all the build code in its own scope. This allows you to embed your content on an arbitrary page without causing conflicts with the embedding page code, and lets you embed more than one build on the same page.",1960],["If you have all your JavaScript code in the form of .jslib plugins inside your project, then this JavaScript code will run inside the same scope as the compiled build and your code should work the same way as in previous versions of Unity. For example, the following objects and functions should be directly visible from the JavaScript plugin code: Module, SendMessage, HEAP8, ccall etc..",1960],["However, if you are planning to call the internal JavaScript functions from the global scope of the embedding page, you must use the unityInstance variable in your WebGL Template index.html. Do this after the Unity engine instantiation succeeds, for example:",1960],["var myGameInstance = null;",1960],["script.onload = () => {",1960],["createUnityInstance(canvas, config, (progress) => {...}).then((unityInstance) => {",1960],["myGameInstance = unityInstance;",1960],["…",1960],["Then you can send a message to the build using myGameInstance.SendMessage(), or access the build Module object using myGameInstance.Module.",1960],["Calling Unity scripts functions from JavaScript",1960],["Sometimes you need to send some data or notification to the Unity script from the browser’s JavaScript. The recommended way of doing it's to call methods on GameObjects in your content. If you are making the call from a JavaScript plugin, embedded in your project, you can use the following code:",1960],["MyGameInstance.SendMessage(objectName, methodName, value);",1960],["Where objectName _is the name of an object in your scene; methodName is the name of a method in the script, currently attached to that object; value _can be a string, a number, or can be empty. For example:",1960],["MyGameInstance.SendMessage('MyGameObject', 'MyFunction');",1960],["MyGameInstance.SendMessage('MyGameObject', 'MyFunction', 5);",1960],["MyGameInstance.SendMessage('MyGameObject', 'MyFunction', 'MyString');",1960],["If you would like to make a call from the global scope of the embedding page, see the Code Visibility section below.",1960],["Calling C functions from Unity scripts",1960],["Unity compiles your sources into JavaScript from C/C++ code using emscripten, so you can also write plugins in C/C++ code, and call these functions from C#. So, instead of the jslib file in the example above, you could have a C/C++ file in your project - it will automatically get compiled with your scripts, and you can call functions from it, just like in the JavaScript example above.",1960],["If you are using C++ (.cpp) to implement the plugin then you must ensure the functions are declared with C linkage to avoid name mangling issues:",1960],["include ",1960],["extern \"C\" void Hello ()",1960],["printf(\"Hello, world!\\n\");",1960],["extern \"C\" int AddNumbers (int x, int y)",1960],["return x + y;",1960],["Note:** Unity is using the Emscripten version 2.0.19 toolchain.",1960],["replaced Pointer__stringify() with UTF8ToString in 2021.2 onwards",1960],[" unity.Instance replaced with createUnityInstance in 2020.1",1960],["Fixed error in code example.",1960],["WebGL instance renamed from gameInstance to unityInstance in 2019.1",1960],["WebGL introduction",1961],["The WebGL option in the Unity Editor allows you to publish content as JavaScript programs which use HTML5/JavaScript, WebAssembly, WebGL rendering API, and other web standards to run Unity content in a web browser.",1961],["This section covers the following WebGL topics:",1961],["Page Description ",1961],["",1961],["WebGL browser compatibility A list of the supported browsers for WebGL. ",1961],["Advanced overview Access useful technical information required for WebGL application development. ",1961],["WebGL prerequisites Lists prerequisites needed for Unity development for the WebGL platform. ",1961],["Memory in Unity WebGL",1962],["Memory constraints in Unity WebGL can restrict the complexity of the content you run.",1962],["WebGL content runs in the browser. The browser allocates the memory in its memory space that your application needs to run your content.",1962],["The amount of available memory varies depending on:",1962],["The device you use",1962],["The operating system you use",1962],["The browser you use, and whether it runs on a 32 or 64 processor",1962],["How much memory the browser’s JavaScript engine requires to parse your code",1962],["Whether the browser uses separate processes for each tab, or your content needs to share a memory space with all other open tabs.",1962],["Note:** For information on security risks related to WebGL memory, refer to Security and Memory Resources.",1962],["Memory usage in Unity WebGL",1962],["The following areas of Unity WebGL content require the browser to allocate significant amounts of memory.",1962],["",1962],["Unity heap",1962],["Unity uses a memory heap to store all Unity engine runtime objects. These include managed and native objects, loaded Assets, Scenes, and shaders. This is like the memory that Unity Players use on any other platform.",1962],["The Unity heap is a contiguous block of allocated memory. Unity supports automatic resizing for the heap to suit the needs of the application. The heap size expands as an application runs, and can expand up to 2GB. Unity creates this memory heap as a Memory object. The Memory object’s buffer property is a re-sizable ArrayBuffer that holds the raw bytes of memory accessed by WebAssembly code.",1962],["Automatic resizing of the heap can cause your application to crash if the browser fails to allocate a contiguous memory block in the address space. For this reason, it's important to keep the Unity heap size as small as possible. Therefore, be mindful when you are planning the memory usage of your application. If you want to test the size of your Unity heap, you can use the Profiler to profile the contents of the memory block.",1962],["The default options are configured to work well for all desktop use cases. However, for mobile browsers you need to use the advanced tuning options. For mobile browsers, it's recommended to configure the Initial Memory Size to the typical heap usage of the application.",1962],["",1962],["Asset data",1962],["When you create a Unity WebGL build, Unity generates a .data file. This contains all the Scenes and Assets the application needs to launch. Because Unity WebGL doesn't have access to the real file system, it creates a virtual memory file system, and the browser unpacks the .data file here. The Emscripten framework (JavaScript) allocates this memory file system in the browser memory space. While your content runs, the browser memory keeps the uncompressed data. To keep both download times and memory usage low, try to keep this uncompressed data as small as possible.",1962],["To reduce memory use, you can pack your Asset data into AssetBundles. AssetBundles offer full control over your asset downloads. You can control when your application downloads an asset, and when the runtime unloads it. You can unload unused assets to free up memory.",1962],["AssetBundles are downloaded directly into the Unity heap, so these don't result in extra allocation by the browser.",1962],["Enable Data Caching to automatically cache the Asset data in your content on the user's machine. This means you don’t need to re-download that data during later runs. The Unity WebGL loader implements Data Caching with the IndexedDB API. This option lets you to cache files which are too large for the browser to cache natively.",1962],["Data caching enables the browser to store application data on the user’s machine. Browsers often limit the amount you can store in their cache and the maximum file size that can be cached. This is often not enough for an application to run smoothly. The Unity WebGL loader Caching with the IndexedDB API that lets Unity store the data in the IndexedDB instead of the browser cache.",1962],["To enable the Data Caching option go to File > Build Settings > Player Settings > Publishing Settings.",1962],["Large-Allocation HTTP header",1962],["Your server can emit the Large-Allocation HTTP header for your content. This tells supported browsers (currently only Mozilla Firefox) about your memory needs. This information allows the supported browser to spawn a new process using unfragmented memory space. The browser can also do extra housekeeping to make sure the large allocation succeeds.",1962],["This can solve issues where the browser runs out of memory when trying to allocate the Unity heap. This is especially important on 32-bit browsers. -->",1962],["",1962],["Garbage collection",1962],["Garbage collection is the process of locating and freeing up unused memory. After the garbage collector collects unused memory it reallocates it inside the Unity heap. The garbage collector will then inspect the stacks and register for loaded object references. If the garbage collector finds an object that's no longer referenced, it frees up the memory used by that object.",1962],["For an overview on how Unity garbage collection works, refer to Automatic Memory Management. WebGL garbage collection runs when the stack is empty. The stack is a part of the Unity heap but not the heap itself. As you cannot debug in JavaScript, the garbage collector will only run in WebGL in situations where the stack is empty. This currently happens once after every frame.",1962],["On most other platforms, the garbage collection process is different, where the collector pauses all running threads so it can inspect the stack. You can debug the garbage collection process using the Unity Profiler.",1962],["The garbage collector runs on the main thread. That is, if you have a long-running loop, the following code might fail when you run it on WebGL because the collector doesn't get a chance to run the garbage collector between iterations of the loop. This means the garbage collector can't free up memory that the intermediate string objects use, and runs out of memory in the Unity heap.",1962],["string hugeString = \"\";",1962],["for (int i = 0; i < 100000; i++)",1962],["hugeString += \"foo\";",1962],["Additional resources",1962],["WebGL native plug-ins for Emscripten",1963],["Unity uses the Emscripten compiler toolchain to cross-compile the Unity runtime code written in C and C++ into WebAssembly (also called Wasm). Emscripten generates small code, is load-time and memory efficient, and aims to deliver close to native speed execution. For more information about Wasm in Unity, refer to the WebAssembly is here blog post.",1963],["Unity uses IL2CPP to convert the .NET game code in your C# scripts to Wasm. IL2CPP takes .NET bytecode and converts it to corresponding C++ source files, which is then compiled using Emscripten to convert your scripts to Wasm.",1963],["Targeted versions",1963],["Unity bundles the Emscripten compiler with the WebGL platform package, so that you don't have to manually download it. The version of Emscripten that the Editor uses varies by Editor version:",1963],["Unity Version Emscripten version Supported native plug-in file formats ",1963],["Unity 2022.2 and later Emscripten 3.1.8-unity .a, .bc ",1963],["Unity 2021.2 and later Emscripten 2.0.19.6-unity .a, .bc ",1963],["Unity 2019.2 to 2021.2 1.38.11-unity .bc ",1963],["Unity 2018.4 up until Unity 2019.2 1.37.40-unity .bc ",1963],["Unity 2018.2 up until Unity 2018.4 1.37.33-unity .bc ",1963],["Notes:**",1963],["The following list provides expansion for the acronyms of file formats listed in the above table:",1963],["GNU archive file format (.a)",1963],["WebAssembly Object Files (.o)",1963],["LLVM Bitcode file format (.bc)",1963],["With Emscripten versions before Emscripten 2.0, Unity recommends building Bitcode plug-ins (files of type .bc). From Emscripten 2.0 onwards, Unity recommends to build Wasm Object File plug-ins that are Wasm object files of type .o, bundled into GNU archive files of type .a.",1963],["You can determine the path to the exact version of Emscripten toolchain from the emscripten-version.txt located at:",1963],["C:\\Program Files\\Unity\\Hub\\Editor\\\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\Emscripten\\emscripten\\emscripten-version.txt",1963],["Compile native plug-ins with Emscripten",1963],["If you're creating native C/C++ plug-ins for your Unity application, you can either bundle the C/C++ code with your project (see Native plug-ins) or build the native code to a plug-in archive ahead of time with the Emscripten compiler toolchain.",1963],["If you choose to build plug-in code in advance, you should use the Emscripten compiler toolchain. To ensure LLVM binary format compatibility, the version of Emscripten that's used to compile the plug-ins must match the version of Emscripten that Unity uses.",1963],["Typically, plug-ins are compiled to a static library archive format. For versions before Unity 2021.2 (Emscripten 2.0), LLVM Bitcode file format (.bc) is the preferred plug-in format.",1963],["From Unity 2021.2, the preferred plug-in format is GNU archive file format (.a) that contain WebAssembly Object Files (.o). Although, earlier LLVM Bitcode .bc plug-in files are still supported, using them might have a negative impact to compilation times.",1963],["Note:** When migrating a native plugin from one Unity version to a version that uses a different version of Emscripten, Unity recommends to recompile the Unity plug-in from source, because the LLVM compiler project doesn't guarantee binary compatibility of build artifact files across compiler versions.",1963],["Additional resources:",1963],["WebGL networking",1964],["You can use networking in WebGL in the following two ways:",1964],["UnityWebRequest class",1964],["Optionally, you can use WebSockets or WebRTC from JavaScript to implement your own networking. You can't use any .NET networking classes within the WebGL platform because JavaScript code doesn't have direct access to internet protocol (IP) sockets to implement network connectivity. Specifically, WebGL doesn't support any .NET classes within the System.Net namespace.",1964],["Use the UnityWebRequest class in WebGL",1964],["Unity supports the UnityWebRequest class in WebGL. To implement the UnityWebRequest class, Unity uses the JavaScript Fetch API, which uses the browser to handle web requests. This imposes security restrictions on accessing cross-domain resources.",1964],["If you send a web request to a server other than the one that hosts the Unity content, the server you’re sending it to must authorize the Unity content.",1964],["To access cross-domain web resources in WebGL, the server you are trying to access needs to use cross-origin resource sharing (CORS) to authorize cross-domain web resources.",1964],["If you try to access content using UnityWebRequest, and the remote server doesn't have CORS set up or configured correctly, an error like the following appears in the browser console:",1964],["Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver.com/. This can be fixed by moving the resource to the same domain or enabling CORS.",1964],["The server needs to add Access-Control headers to the http responses it sends out, to indicate which web pages have permission to read that information from a web browser.",1964],["For a demonstration of how to add Access-Control headers that allow Unity WebGL to access resources on a web server from any origin, refer to the following example. This example includes common request headers and allows the GET, POST or OPTIONS methods:",1964],["\"Access-Control-Allow-Credentials\": \"true\",",1964],["\"Access-Control-Allow-Headers\": \"Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time\",",1964],["\"Access-Control-Allow-Methods\": \"GET, POST, OPTIONS\",",1964],["\"Access-Control-Allow-Origin\": \"*\",",1964],["UnityWebRequest downloads**",1964],["Don't use code that blocks a UnityWebRequest download, such as this:",1964],["while(!www.isDone) {}",1964],["You can't block the thread to wait for a UnityWebRequest download to finish otherwise your application freezes. Because WebGL is single threaded, and the fetch API in JavaScript is asynchronous, your download might not finish unless you return control to the browser. Instead, use a Coroutine and a yield statement to wait for the download to finish. For more information, see Examples of coroutines using UnityWebRequest.",1964],["Using Unity Multiplayer**",1964],["Unity Multiplayer enables communication via the WebSockets protocol. Refer to NetworkServer.useWebSockets.",1964],["Using WebSockets or WebRTC from JavaScript ",1964],["WebGL doesn't allow direct access to IP sockets, but you can use WebSockets or WebRTC (the two most common networking protocols supported by browsers) to get around this. While WebSockets are widely supported, WebRTC allows peer-to-peer connections between browsers and unreliable connections. Unity doesn't have a built-in API that allows you to use WebSockets or WebRTC, but you can use a JavaScript plug-in to implement this. You can find plug-ins that implement WebSocket networking on the Unity Asset Store.",1964],["WebGL performance considerations",1965],["In general, the WebGL performance is close to native apps on the GPU, because the WebGL graphics API uses your GPU for hardware-accelerated rendering. The only exception is the slight overhead for translating WebGL API calls and shaders to your OS graphics API (typically DirectX on Windows, OpenGL on Mac, and Linux).",1965],["On the CPU, Emscripten translates your code into WebAssembly, the performance of which depends on the web browser you're using. For more information, see the Unity blog post WebAssembly Load Times and Performance.",1965],["Following are the additional considerations that you must be aware of:",1965],["The JavaScript language does not support multi-threading or SIMD.",1965],["Any code that benefits from these features are likely to be slower than other code.",1965],["You cannot write threading or SIMD code in WebGL in your scripts, but as some engine parts are multi-threaded or SIMD optimized, they offer low performance on WebGL. For example, WebGL Skinning is both multi-threaded and SIMD-optimized.",1965],["Tip:** To see how Unity distributes work to different threads on non-WebGL platforms, see the new timeline Profiler in Unity.",1965],["WebGL-specific settings which affect performance",1965],["To improve performance, set Exception support to None in the Player settings for WebGL by expanding Other Settings > Stack Trace.",1965],["Profiling WebGL",1965],["WebGL supports the Unity profiler. See the Profiler documentation to learn how to set it up.",1965],["WebGL content in background tabs",1965],["If Run in background is enabled in the Player settings for the WebGL platform, or if you enable Application.runInBackground, your content continues to run when the canvas or the browser window loses focus.",1965],["However, some browsers can throttle content running in background tabs. If the tab with your content isn't visible, your content only updates once per second in most browsers. Note that this causes Time.time to progress slower than usual with the default settings, as the default value of Time.maximumDeltaTime is lower than one second.",1965],["Throttling WebGL performance",1965],["You might want to run your WebGL content at a lower frame rate in some situations to reduce CPU usage. For example, on other platforms, you can use the Application.targetFrameRate API to do so.",1965],["When you don't want to throttle performance, set this API to the default value of -1, rather than to a high value. This allows the browser to adjust the frame rate for the smoothest animation in the browser's render loop, and might produce better results than Unity trying to do its own main loop timing to match a target frame rate.",1965],["Server configuration code samples",1966],["Use the code samples below to configure your server when working with WebGL. The following samples apply to Nginx, Apache, and IIS servers. For further information on WebGL server configuration, see Compressed builds and server configuration.",1966],["Server configuration for WebGL builds (Nginx)",1966],["http {",1966],["...",1966],["server {",1966],["Add the following config within http server configuration",1966],["...",1966],["On-disk Brotli-precompressed data files should be served with compression enabled:",1966],["location ~ .+.(data symbols.json).br$ {",1966],["Because this file is already pre-compressed on disk, disable the on-demand compression on it.",1966],["Otherwise nginx would attempt double compression.",1966],["gzip off;",1966],["add_header Content-Encoding br;",1966],["default_type application/octet-stream;",1966],["On-disk Brotli-precompressed JavaScript code files:",1966],["location ~ .+.js.br$ {",1966],["gzip off; # Do not attempt dynamic gzip compression on an already compressed file",1966],["add_header Content-Encoding br;",1966],["default_type application/javascript;",1966],["On-disk Brotli-precompressed WebAssembly files:",1966],["location ~ .+.wasm.br$ {",1966],["gzip off; # Do not attempt dynamic gzip compression on an already compressed file",1966],["add_header Content-Encoding br;",1966],["Enable streaming WebAssembly compilation by specifying the correct MIME type for",1966],["Wasm files.",1966],["default_type application/wasm;",1966],["On-disk gzip-precompressed data files should be served with compression enabled:",1966],["location ~ .+.(data symbols.json).gz$ {",1966],["gzip off; # Do not attempt dynamic gzip compression on an already compressed file",1966],["add_header Content-Encoding gzip;",1966],["default_type application/gzip;",1966],["On-disk gzip-precompressed JavaScript code files:",1966],["location ~ .+.js.gz$ {",1966],["gzip off; # Do not attempt dynamic gzip compression on an already compressed file",1966],["add_header Content-Encoding gzip; # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.",1966],["default_type application/javascript;",1966],["On-disk gzip-precompressed WebAssembly files:",1966],["location ~ .+.wasm.gz$ {",1966],["gzip off; # Do not attempt dynamic gzip compression on an already compressed file",1966],["add_header Content-Encoding gzip;",1966],["Enable streaming WebAssembly compilation by specifying the correct MIME type for",1966],["Wasm files.",1966],["default_type application/wasm;",1966],["Server configuration for WebGL builds (Apache)",1966],["You can configure WebGL builds in Apache using one of the two methods: Virtual Host in httpd.conf, or .htaccess. Unity recommends configuring a virtual host in Apache's httpd.conf, if you have access to that configuration.",1966],["To configure WebGL builds using the Virtual Host in httpd.conf method:**",1966],["",1966],["",1966],["RemoveType .gz",1966],["AddEncoding gzip .gz",1966],["The correct MIME type for .data.gz would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it is preferable to use MIME Type application/gzip instead.",1966],["AddType application/octet-stream .data.gz",1966],["AddType application/gzip .data.gz",1966],["AddType application/wasm .wasm.gz",1966],["AddType application/javascript .js.gz",1966],["AddType application/octet-stream .symbols.json.gz",1966],["RemoveType .br",1966],["AddEncoding br .br",1966],["AddType application/octet-stream .data.br",1966],["AddType application/wasm .wasm.br",1966],["AddType application/javascript .js.br",1966],["AddType application/octet-stream .symbols.json.br",1966],["",1966],["",1966],["To configure WebGL builds using the .htaccess method:**",1966],["If you're unable to modify httpd.conf, for example, due to unavailable admin rights to your web hosting, but your Apache supports .htaccess, then you can configure .htaccess in the following way:",1966],["```lang-apacheconf",1966],["This configuration file should be uploaded to the server as \"/Build/.htaccess\"",1966],["NOTE: \"mod_mime\" Apache module must be enabled for this configuration to work.",1966],["",1966],["The following lines are required for builds without decompression fallback, compressed with gzip",1966],["RemoveType .gz",1966],["AddEncoding gzip .gz",1966],["AddType application/gzip .data.gz # The correct MIME type here would be application/octet-stream, but due to Safari bug https://bugs.webkit.org/show_bug.cgi?id=247421, it's preferable to use MIME Type application/gzip instead.",1966],["AddType application/wasm .wasm.gz",1966],["AddType application/javascript .js.gz",1966],["AddType application/octet-stream .symbols.json.gz",1966],["The following lines are required for builds without decompression fallback, compressed with Brotli",1966],["RemoveType .br",1966],["RemoveLanguage .br",1966],["AddEncoding br .br",1966],["AddType application/octet-stream .data.br",1966],["AddType application/wasm .wasm.br",1966],["AddType application/javascript .js.br",1966],["AddType application/octet-stream .symbols.json.br",1966],["The following line improves loading performance for uncompressed builds",1966],["AddType application/wasm .wasm",1966],["Uncomment the following line to improve loading performance for gzip-compressed builds with decompression fallback",1966],["AddEncoding gzip .unityweb",1966],["Uncomment the following line to improve loading performance for brotli-compressed builds with decompression fallback",1966],["AddEncoding br .unityweb",1966],["",1966],["Server configuration for compressed WebGL builds without decompression fallback (IIS)",1966],["```lang-xml",1966],["",1966],["The following server configuration can be used for compressed WebGL builds without decompression fallback.",1966],["This configuration file should be uploaded to the server as \"/Build/web.config\".",1966],["NOTE: To host compressed WebGL builds without decompression fallback, you need to install the \"URL Rewrite\" IIS module on the server.",1966],["Otherwise, IIS will throw an exception when using this configuration file.",1966],["This module is available at https://www.iis.net/downloads/microsoft/url-rewrite.",1966],["-->",1966],["",1966],["",1966],["Compressed Unity builds without decompression fallback can't be properly hosted on a server which",1966],["has static compression enabled because this might result in the build files being compressed twice.",1966],["The following line disables static server compression.",1966],["-->",1966],["",1966],["",1966],["NOTE: IIS will throw an exception if a mimeType is specified multiple times for the same extension.",1966],["To avoid possible conflicts with configurations that are already on the server, you should remove the mimeType for the corresponding extension using the element,",1966],["before adding mimeType using the element.",1966],["-->",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["Hosting compressed Unity builds without decompression fallback relies on native browser decompression,",1966],["therefore a proper \"Content-Encoding\" response header should be added for the compressed build files.",1966],["NOTE: IIS will throw an exception if the following section is used without the \"URL Rewrite\" module installed.",1966],["Download the \"URL Rewrite\" module from https://www.iis.net/downloads/microsoft/url-rewrite",1966],["-->",1966],["",1966],["",1966],["NOTE: IIS will throw an exception if the same rule name is used multiple times.",1966],["To avoid possible conflicts with configurations that are already on the server, you should remove the mimeType for the corresponding extension using the element,",1966],["before adding mimeType using the element.",1966],["-->",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["Server configuration for uncompressed WebGL builds (IIS)",1966],["```lang-xml",1966],["",1966],["The following server configuration can be used for uncompressed WebGL builds.",1966],["This configuration file should be uploaded to the server as \"/Build/web.config\"",1966],["-->",1966],["",1966],["",1966],["IIS does not provide default handlers for .data and .wasm files (and in some cases .json files),",1966],["therefore these files won’t be served unless their mimeType is explicitly specified.",1966],["-->",1966],["",1966],["NOTE: IIS will throw an exception if a mimeType is specified multiple times for the same extension.",1966],["To avoid possible conflicts with configurations that are already on the server, you should remove the mimeType for the corresponding extension using the element,",1966],["before adding mimeType using the element.",1966],["-->",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["",1966],["Advanced overview",1967],["This section provides an overview of the platform support and other useful technical information required to build your app using WebGL.",1967],["Platform support",1967],["Most popular desktop browser versions support the Unity WebGL content, but do note that different browsers offer different level of support. For example, Unity WebGL doesn't support Mobile devices.",1967],["The following features in WebGL builds are either not available or limited due to constraints of the platform itself:",1967],["Debugging of WebGL builds in Visual Studio. See Debug and troubleshoot WebGL builds.",1967],["WebGL builds don't support the Unity Cache and Caching Scripting API due to restricted access to the filesystem in browsers. Network requests to asset data and AssetBundles are instead cached in the browser cache. See Cache behavior in WebGL.",1967],["Threads aren't supported due to the lack of threading support in JavaScript. This applies to both Unity's internal use of threads to speed up performance, and to the use of threads in script code and managed dlls. Essentially, anything in the System.Threading namespace isn't supported.",1967],["Browsers don't allow direct access to IP sockets for networking due to security concerns. See WebGL Networking.",1967],["Limitations with the WebGL graphics API, which is based on the functionality of the OpenGL ES graphics library. See: WebGL Graphics.",1967],["WebGL builds use a custom backend for Audio based on the Web Audio API, but it only supports the basic audio functionality. See: Using Audio in WebGL.",1967],["WebGL is an AOT platform, so it doesn't allow dynamic generation of code using System.Reflection.Emit. This is the same on all other IL2CPP platforms, iOS, and most consoles.",1967],["Copy and Paste works only within Unity UI. You can't copy and paste from the system clipboard, that is, you can't copy or paste to or from external applications.",1967],["WebGL templates",1968],["Important:** To use the templates feature in WebGL, you need prior knowledge of JavaScript concepts and terminology.",1968],["When you build a WebGL project, Unity embeds the Player in a HTML page such that a browser can open it. A WebGL template is a configuration setting that lets you control the appearance of this HTML page, so that you can: test, demonstrate, and preview your WebGL application in a browser.",1968],["To access WebGL templates:",1968],["Go to Player settings (menu: Edit > Project Settings > Player), and set the platform-specific settings to WebGL.",1968],["Open Resolution and Presentation.",1968],["By default, the WebGL Template setting has the following options:",1968],["Default**: A white page with a loading bar on a grey canvas.",1968],["Minimal**: A minimal WebGL template with that includes the necessary boilerplate code to run the WebGL content.",1968],["PWA:** A Progressive Web App including a web manifest file and service worker code.",1968],["These built-in HTML pages are useful for testing and demonstrating a minimal Player.",1968],["You can also use JavaScript to build and supply your own WebGL templates to host the Player. This is useful for production purposes, so that you can preview the Player hosted in the page where it's eventually deployed. For example, if the Unity Player content interacts with other elements in the page via the external call interface, you should test it with a page that contains those interacting elements.",1968],["Add a WebGL template",1968],["To add custom templates to your project, navigate to your Project's Assets folder and create a folder called WebGLTemplates. Each template is a subfolder within the WebGLTemplates folder. Each template subfolder contains an index.html file along with any other resources the page needs, such as images or stylesheets.",1968],["The easiest way to create a new custom WebGL template is to make a copy of the built-in Default or Minimal templates, which are stored in corresponding subfolders under <Unity Installation>/PlaybackEngines/WebGLSupport/BuildTools/WebGLTemplates/. Every Unity Project includes these templates by default. Copy a template and place it in your own Project/Assets/WebGLTemplates folder, and rename it to something meaningful so you can identify your template later.",1968],["Note:** On Mac, you can locate the Unity Installation folder in the Applications folder.",1968],["Templates in your Project’s WebGLTemplates folder appear in the Unity Player Settings’ WebGL Template setting. The name of the template is the same as its folder. To give this option a thumbnail image for easy reference, add a 128x128-pixel image to the template folder and name it thumbnail.png.",1968],["Template variables, macros, and conditional directives",1968],["During the build process, Unity pre-processes template files and evaluates all macros and conditional directives included in those files. As part of this process, Unity finds and replaces all macro declarations with the values the Editor supplies. Unity automatically pre-processes all .html, .php, .css, .js and .json files in the template folder.",1968],["Internal preprocessor variables",1968],["The following internal preprocessor variables refer to data in the Project, and Unity assigns value to them at build time according to the values the Editor supplies. Javascript macros and conditional directives can use these internal preprocessor variables.",1968],["Variable Type Description ",1968],["COMPANY_NAME String The Company Name defined in the Player Settings. ",1968],["PRODUCT_NAME String The Product Name defined in the Player Settings. ",1968],["PRODUCT_VERSION String The Version defined in the Player Settings. ",1968],["WIDTH Integer The Default Canvas Width defined in the Player Settings > Resolution and Presentation. ",1968],["HEIGHT Integer The Default Canvas Height in the Player Settings > Resolution and Presentation. ",1968],["SPLASH_SCREEN_STYLE String This's set to the “Dark” value when Splash Style Player Settings > Splash Image is set to Light on Dark, otherwise it's set to the “Light” value. ",1968],["BACKGROUND_COLOR String Represents the Background Color defined in a form of a hex triplet. ",1968],["UNITY_VERSION String The Unity version. ",1968],["DEVELOPMENT_PLAYER Boolean This's set to true if the Development Build option is enabled. ",1968],["DECOMPRESSION_FALLBACK String This's set to Gzip or Brotli, depending on the compression method you use and the type of decompressor included in the build. If neither is included, the variable is set to an empty string. ",1968],["INITIAL_MEMORY Integer The initial size of the WASM memory heap in megabytes (MB). ",1968],["USE_WASM Boolean This is set to true if the current build is a WebAssembly build. ",1968],["USE_THREADS Boolean This is set to true if the current build uses threads. ",1968],["USE_WEBGL_1_0 Boolean This is set to true if the current build supports the WebGL1.0 graphics API. ",1968],["USE_WEBGL_2_0 Boolean This is set to true if the current build supports the WebGL2.0 graphics API. ",1968],["USE_DATA_CACHING Boolean This is set to true if the current build uses indexedDB caching for the downloaded files. ",1968],["LOADER_FILENAME String This is set to the filename of the build loader script. ",1968],["DATA_FILENAME String This is set to the filename of the main data file. ",1968],["FRAMEWORK_FILENAME String This is set to the filename of the build framework script. ",1968],["CODE_FILENAME String This is set to the filename of the WebAssembly module when the current build is a WebAssembly build, otherwise it's set to the filename of the asm.js module. ",1968],["MEMORY_FILENAME String This is set to the filename of the memory file when memory is stored in an external file, otherwise it's set to an empty string. ",1968],["SYMBOLS_FILENAME String This is set to the filename of the JSON file containing debug symbols when the current build is using debug symbols, otherwise it's set to an empty string. ",1968],["BACKGROUND_FILENAME String This is set to the filename of the background image when the background image is selected in the Player Settings > Splash Image, otherwise it's set to an empty string. ",1968],["JavaScript macros",1968],["JavaScript macros are blocks of JavaScript code in template files, surrounded by three sets of curly brackets. This JavaScript code can use the internal preprocessor variables listed above. These variables are assigned at build time according to the values the Editor supplies. During the build, the preprocessor evaluates all macros and replaces them with the output of the variable.",1968],["You can use JavaScript macros to preprocess values supplied by the Editor. These macros can be as complex as you like. They can include multiple operators, loops, functions, and any other JavaScript constructs.",1968],["The following example line is from the index.html file used in the Default template:",1968],["<div id=\"unity-build-title\">{{{ PRODUCT_NAME }}}</div>",1968],["If the value of the Product Name in the Player Settings is set to My WebGL Game, the internal preprocessor variable PRODUCT_NAME has the value My WebGL Game. In the output index.html file, the line appears as:",1968],["<div id=\"unity-build-title\">My WebGL Game</div>",1968],["Below is a more complex example from the same index.html template file:",1968],["canvas.style.background = \"url('\" + buildUrl + \"/{{{ BACKGROUND_FILENAME.replace(/'/g, '%27') }}}') center / cover\";",1968],["If the target build folder is called Let’s try WebGL, and if you select a background image in the Player Settings, the internal preprocessor variable BACKGROUND_FILENAME has the value Let’s try WebGL.jpg. In the output index.html file, the line changes into:",1968],["canvas.style.background = \"url('\" + buildUrl + \"/Let%27s try WebGL.jpg') center / cover\";",1968],["Conditional directives",1968],["Conditional directives #if, #else, and #endif control whether Unity includes a specific portion of the preprocessed file in the output file, or discards it for the current build.",1968],["Code that starts with an #if directive and ends with an #endif directive is called a conditional group. Conditional groups can also include #else directives. Unity evaluates the expression written after the #if as a JavaScript expression. If this expression has a truthy value that translates to true when evaluated in a Boolean context, then Unity keeps the line group immediately following the #if directive in the output file. If the #if expression is false, and an #else directive is included in the conditional group, Unity keeps the line group immediately following the #else directive in the output.",1968],["An example of a conditional group is as follows:",1968],["```lang-js",1968],["if EXPRESSION",1968],["// this block is included in the output if EXPRESSION has a truthy value",1968],["else",1968],["// this block is included in the output otherwise",1968],["endif",1968],["Evaluated JavaScript expressions can include brackets, logical operators and other JavaScript constructs. Conditional directives can be nested.",1968],["Custom user variables",1968],["When you select a WebGL template, Unity parses the template and looks for Javascript macros and conditional directives.",1968],["JavaScript variables are treated as custom user variables if they're:",1968],["Used inside JavaScript macros and conditional directives.",1968],["Not declared in the template code.",1968],["Not internal pre-processor variables.",1968],["Unity automatically adds these custom user variables to the Resolution and Presentation section in the Player Settings window.",1968],["As an example, if you want to control the title of the generated index.html page directly from the Player Settings window, you first need to modify the &lt;title&gt; line of the index.html in your custom template, like this:",1968],["{{{ PAGE_TITLE }}}",1968],["After you've done this, re-select your custom template. This parses the template again, and you should find a Page Title field in the Resolution and Presentation > WebGL Template section of the Player Settings window.",1968],["When you enter text into this field and build your Project, the custom variable PAGE_TITLE used in the template macro automatically becomes the text in the Page Title field.",1968],["If you would like to use custom integer or float variables in your macros, use parseInt() or parseFloat() JavaScript functions in your macros to preprocess string values supplied by the Editor. This is because custom user variables are always assigned a string value.",1968],["Note**: Underscore characters in variable names display as spaces inside the field to improve readability.",1968],["Structure of the index.html file",1968],["The index.html contains the code necessary to load the build and should include the following:",1968],["A <canvas> element. Unity runtime uses the <canvas> element to render the application.",1968],["JavaScript code to download the build loader. For example:",1968],["```lang-js",1968],["var buildUrl = \"Build\";",1968],["var loaderUrl = buildUrl + \"/{{{ LOADER_FILENAME }}}\";",1968],["var script = document.createElement(\"script\");",1968],["script.src = loaderUrl;",1968],["script.onload = () => {",1968],["// code for instantiating the build",1968],["};",1968],["document.body.appendChild(script);`",1968],["In this example, {{{ LOADER_FILENAME }}} is automatically resolved by the template preprocessor when the build is generated.",1968],["Alternatively, you can download the build loader using a script tag, for example:",1968],["```lang-js",1968],["",1968],["JavaScript code for instantiating a build. Unity builds are instantiated using the createUnityInstance() function, which is defined in the build loader script.",1968],["The instantiation function: createUnityInstance()",1968],["The createUnityInstance() function creates a new instance of your content. You can use it like this:",1968],["createUnityInstance(canvas, config, onProgress).then(onSuccess).catch(onError);",1968],["This function returns a Promise object, where:",1968],["Object Use ",1968],["canvas Unity runtime uses the canvas object to render the game. ",1968],["config The config object contains the build configuration, such as the code and data URLs, product and company name, and version. For more information on config definition, see the Build Configuration section on this page.",1968],["onProgress(progress) {...} The WebGL loader calls the onProgress callback object every time the download progress updates. The progress argument that comes with the onProgress callback determines the loading progress as a value between 0.0 and 1.0. ",1968],["onSuccess(unityInstance) {...} The onSuccess callback is called after the build has successfully instantiated. The created Unity instance object is provided as an argument. This object can be used for interaction with the build. ",1968],["onError(message) {...} The onError callback is called if an error occurs during build instantiation. An error message is provided as an argument. ",1968],["The createUnityInstance() function is defined in the build loader script and is specific to the instantiated build. Therefore, if you are embedding two or more builds in the same HTML document, make sure that the createUnityInstance() function is called from an onload callback of the corresponding build loader script. For more information about the Unity WebGL Loader, see Building and Running a WebGL Project.",1968],["Build configuration ",1968],["The configuration object contains the build configuration, which consists of code and data URLs, product name, company name, and version. You can define it using the following code:",1968],["```lang-js",1968],["var buildUrl = \"Build\";",1968],["var config = {",1968],["dataUrl: buildUrl + \"/{{{ DATA_FILENAME }}}\",",1968],["frameworkUrl: buildUrl + \"/{{{ FRAMEWORK_FILENAME }}}\",",1968],["codeUrl: buildUrl + \"/{{{ CODE_FILENAME }}}\",",1968],["if MEMORY_FILENAME",1968],["memoryUrl: buildUrl + \"/{{{ MEMORY_FILENAME }}}\",",1968],["endif",1968],["if SYMBOLS_FILENAME",1968],["symbolsUrl: buildUrl + \"/{{{ SYMBOLS_FILENAME }}}\",",1968],["endif",1968],["streamingAssetsUrl: \"StreamingAssets\",",1968],["companyName: \"{{{ COMPANY_NAME }}}\",",1968],["productName: \"{{{ PRODUCT_NAME }}}\",",1968],["productVersion: \"{{{ PRODUCT_VERSION }}}\",",1968],["};",1968],["In the example above, the build folder URL is stored as a separate variable called buildUrl. This is useful in cases where you don't know the relationship between the embedding page and build folder on the hosting server. It enables you to reuse the embedding code in other HTML documents. An example of when to use this is if you move the Build folder to another location on your server. You can adjust the value of the buildUrl variable on the embedding page, and you can use the same embedding code. This also applies to the StreamingAssets folder (streamingAssetsUrl).",1968],["Build interaction",1968],["After the build has successfully instantiated, the fulfilment handler callback of the Promise object receives the newly created Unity instance object as an argument. To interact with the build, call the following methods of the Unity instance:",1968],["Method Use ",1968],["unityInstance.SetFullscreen(fullscreen) The SetFullscreen method toggles full screen mode. This method doesn't return a value. - Full screen mode is activated when the fullscreen argument has a value of 1. - Full screen mode is disabled when the fullscreen argument has a value of 0. ",1968],["unityInstance.SendMessage(objectName, methodName, value) The SendMessage method sends messages to the GameObjects. This method doesn't return a value. - objectName is the name of an object in your Scene. - methodName is the name of a method in the script, currently attached to that object. - value can be a string, a number, or it can be empty.",1968],["unityInstance.Quit().then(onQuit) Use the Quit() method to quit the runtime and clean up the memory used by the Unity instance. This method returns a Promise object. - onQuit callback is called after the build runtime has quit. ",1968],["Texture compression in WebGL",1969],["Use texture compression in WebGL to create builds that target platforms based on the texture compression formats they support.",1969],["Texture compression formats",1969],["Desktop and mobile devices support different texture compression formats. If you want your WebGL application to use compressed textures on both types of browsers, you must first choose a supported texture compression format.",1969],["To run your game on both desktop and mobile browsers with compressed textures, you might want to create two builds targeting:",1969],["Desktop browsers with DXT set as the texture compression format.",1969],["Mobile browsers with adaptable scalable texture compression (ASTC) set as the texture compression format.",1969],["Precedence for compression format settings",1969],["You can set the default texture compression format for your WebGL application from either the WebGL Build Settings window or the WebGL Player Settings window. Before you set the texture compression format, it’s important to decide which of these settings take precedence. The texture compression format value you set in Build Settings has priority over the value you set in Player Settings. By default, the Unity Editor sets the Build Settings value to Use Player Settings.",1969],["Note that Editor serializes the texture compression in Build Settings in the Library folder. This means that it’s not managed by version control.",1969],["You can also customize the texture compression format for individual textures. The value you set for an individual texture overrides the default texture compression format value. For information on how to change the texture format of individual textures, refer to Texture Import Settings.",1969],["Set the default compression format",1969],["You can set the default texture compression format for your WebGL application using either Build Settings or Player Settings. The texture compression format value you set in Build Settings has priority over the value you set in Player Settings. By default, the Unity Editor sets the Build Settings value to Use Player Settings.",1969],["To select a default texture compression format using Build Settings:",1969],["Select File > Build Settings.",1969],["From the list of platforms in the Platform pane, select Web.",1969],["Select a compression format from the Texture Compression drop-down menu.",1969],["To select a default texture compression format using Player Settings:",1969],["Select File > Build Settings.",1969],["From the list of platforms in the Platform pane, select Web.",1969],["Select Player Settings > Other Settings.",1969],["Select a compression format from the Texture compression format drop-down menu.",1969],["For an example on how to simultaneously create builds for both desktop browsers and mobile browsers with their corresponding texture compression formats, refer to Create builds for desktop and mobile browsers from a script.",1969],["Create builds for desktop and mobile browsers from a script",1969],["You can run a build for both desktop browsers and mobile browsers with the corresponding texture compression formats simultaneously using a script. For example:",1969],["using System.Collections;",1969],["using System.Collections.Generic;",1969],["using UnityEngine;",1969],["using UnityEditor;",1969],["using System.Diagnostics;",1969],["using System.IO;",1969],["using UnityEditor.Build.Reporting;",1969],["public class comboBuild",1969],["//This creates a menu item to trigger the dual builds https://docs.unity3d.com/ScriptReference/MenuItem.html",1969],["[MenuItem(\"Game Build Menu/Dual Build\")]",1969],["public static void BuildGame()",1969],["//This builds the player twice: a build with desktop-specific texture settings (WebGL_Build) as well as mobile-specific texture settings (WebGL_Mobile), and combines the necessary files into one directory (WebGL_Build)",1969],["string dualBuildPath = \"WebGLBuilds\";",1969],["string desktopBuildName = \"WebGL_Build\";",1969],["string mobileBuildName = \"WebGL_Mobile\";",1969],["string desktopPath = Path.Combine(dualBuildPath, desktopBuildName);",1969],["string mobilePath = Path.Combine(dualBuildPath, mobileBuildName);",1969],["string[] scenes = new string[] {\"Assets/scene.unity\"};",1969],["EditorUserBuildSettings.webGLBuildSubtarget = WebGLTextureSubtarget.DXT;",1969],["BuildPipeline.BuildPlayer(scenes, desktopPath, BuildTarget.WebGL, BuildOptions.Development);",1969],["EditorUserBuildSettings.webGLBuildSubtarget = WebGLTextureSubtarget.ASTC;",1969],["BuildPipeline.BuildPlayer(scenes, mobilePath, BuildTarget.WebGL, BuildOptions.Development);",1969],["// Copy the mobile.data file to the desktop build directory to consolidate them both",1969],["FileUtil.CopyFileOrDirectory(Path.Combine(mobilePath, \"Build\", mobileBuildName + \".data\"), Path.Combine(desktopPath, \"Build\", mobileBuildName + \".data\"));",1969],["You can modify the WebGL template’s index.html file to select the appropriate data file if there’s support for the texture compression format extension:",1969],["// choose the data file based on whether there's support for the ASTC texture compression format",1969],["var dataFile = \"/{{{ DATA_FILENAME }}}\";",1969],["var c = document.createElement(\"canvas\");",1969],["var gl = c.getContext(\"webgl\");",1969],["var gl2 = c.getContext(\"webgl2\");",1969],["if ((gl && gl.getExtension('WEBGL_compressed_texture_astc')) (gl2 &&",1969],["gl2.getExtension('WEBGL_compressed_texture_astc'))) {",1969],["dataFile = \"/WebGL_Mobile.data\";",1969],["var buildUrl = \"Build\";",1969],["var loaderUrl = buildUrl + \"/{{{ LOADER_FILENAME }}}\";",1969],["var config = {",1969],["dataUrl: buildUrl + dataFile,",1969],["frameworkUrl: buildUrl + \"/{{{ FRAMEWORK_FILENAME }}}\",",1969],["if USE_WASM",1969],["codeUrl: buildUrl + \"/{{{ CODE_FILENAME }}}\",",1969],["endif",1969],["if MEMORY_FILENAME",1969],["memoryUrl: buildUrl + \"/{{{ MEMORY_FILENAME }}}\",",1969],["endif",1969],["if SYMBOLS_FILENAME",1969],["symbolsUrl: buildUrl + \"/{{{ SYMBOLS_FILENAME }}}\",",1969],["endif",1969],["streamingAssetsUrl: \"StreamingAssets\",",1969],["companyName: {{{ JSON.stringify(COMPANY_NAME) }}},",1969],["productName: {{{ JSON.stringify(PRODUCT_NAME) }}},",1969],["productVersion: {{{ JSON.stringify(PRODUCT_VERSION) }}},",1969],["showBanner: unityShowBanner,",1969],["};",1969],["Additional resources",1969],["WebGL",1970],["Unity provides support for developing games on the WebGL platform. WebGL lets you publish real-time interactive 3d graphics into a browser.",1970],["For information on getting started with a WebGL application, refer to the following sections:",1970],["Page Description ",1970],["",1970],["Introduction Introduction to WebGL development in Unity ",1970],["WebGL development WebGL specific development information such as memory, input, and networking. ",1970],["Build and distribute a WebGL application Information about building and testing your content for WebGL. ",1970],["New in Unity 2022.1",1971],["Release Notes",1971],["To find out more about the new features, changes, and improvements to this Unity version, see the 2022.1 Release Notes.",1971],["Upgrade Guide",1971],["If you are upgrading existing projects from 2021LTS, read the Upgrade Guide to 2022.1 for information about how your project may be affected.",1971],["What’s new",1971],["See what’s changed in Unity 2022.1 since 2021LTS and view the documentation for the affected areas.",1971],["Editor and Workflow",1971],["Visual search queries provide a consistent and intuitive user experience for building search queries. This enables users to discover and leverage the powerful capabilities of Search for finding items.",1971],["The Dependency Viewer provides an accessible, quick and reliable way for you to reason about dependencies in your project, regardless of the amount of assets it contains.",1971],["UI Toolkit for Editor UI",1971],["Tool developers can now use the UI Toolkit for more of their Editor UI authoring needs. In 2022.1, you have access to more UI widgets, can programmatically draw custom shapes, and can write property drawers using UI Toolkit.",1971],["Enter Play Mode optimizations",1971],["The Enter Play Mode performance is optimized to speed up iteration times. This improvement includes faster scene saving, increased use of multi threading to speed up static batching and particle prewarming, and a reduced cost on some package initialisation times (e.g. TerrainTools and Visual Studio packages).",1971],["Editor workflow optimizations for large scale projects",1971],["Common editor workflows are optimized in large scale projects involving large object and asset counts. These improvements include:",1971],["Faster hierarchy scrolling and picking of objects.",1971],["Optimized multi-selection of game objects.",1971],["Improved performance when you preview many textures.",1971],["Reduced hitches when you change to large Prefabs.",1971],["Small file import optimizations",1971],["Small file import times are reduced by up to 60%.",1971],["Undo system improvements and optimisations",1971],["With the undo UI button, the overall performance of this feature is improved. The undo operations that feature large arrays are up to 100 times faster. You can also clear the redo stack around 30 times faster and delete large selections of undos around 2 times faster.",1971],["Accelerator corruption detection",1971],["Accelerator cached assets can be corrupted (modified bytes) on storage or during transmission. A hash of the content detects corrupt content; when content is seen as invalid, it’s discarded and imports locally. You can configure this behavior using the Content Validation setting in the Project Settings window (Editor/Cache Server/Content Validation). Enabled is the default setting, and the following options are available:",1971],["Option Description ",1971],["--- --- ",1971],["Enabled Uses hashes when available but doesn’t require it. ",1971],["Disabled Ignores any hashes provided by the accelerator. ",1971],["Required Fails downloads if no hash is available from the accelerator. ",1971],["UploadOnly Only does hashing when uploading, and ignores hashing on downloads. ",1971],["The System Metrics Mali package allows you to access low-level system or hardware performance metrics on mobile devices for profiling or runtime performance adjustments. For example, you could use the package to:",1971],["Monitor low-level GPU metrics in Unity Profiler to assess performance bottlenecks.",1971],["Access the same metrics using Recorder API in runtime and adjust graphics quality based on the current bottleneck.",1971],["Automate performance testing, by collecting extensive performance measurements with your continuous integration test runs.",1971],["The Splines package helps you work with curves and paths. You can use the package to generate objects and behaviors along paths, create trajectories, and draw shapes.",1971],["The Splines package contains:",1971],["The tools to create and manipulate splines in the Unity Editor.",1971],["The framework to customize the standard spline editing tools in this package.",1971],["A standard data format and storage model for commonly used splines.",1971],["Samples of implementations that address common spline use cases, such as to create a road, animate a GameObject position and rotation along a spline, instantiate prefabs along a spline to create environments, and more.",1971],["Material Variants",1971],["Material Variants allow for reuse and improve management of materials that share most surface properties and differ only through others.",1971],["With Material variants, you can create templates or material prefabs. Based on a base template, you can create variants that share common properties with the template material and override only the properties that differ. If you change common and non overridden properties in the template material, the changes automatically reflect in the variant material. You can also lock certain properties on material so they can’t be overridden in the variants.",1971],["In a more complex setup, you can create variations of a variant material. The material inheritance hierarchy promotes reusability and improves iteration speed and scalability of material authoring in your project.",1971],["Package Manager improvements",1971],["The Package Manager improvements include:",1971],["A new feature to set the storage location for the package cache and asset store package cache by using the Preferences window.",1971],["Support for multiple selection in the Package Manager window, so you can apply the same operation to multiple packages at once, rather than applying each operation individually.",1971],["An enhanced flow for when you import complete projects from the Asset Store. The enhancements include an option to import complete projects into a temporary project where you can safely explore the package without impacting your main project.",1971],["Redesigned Filters and Sorting controls in the Unity Registry, My Registries, In Project, and My Assets lists.",1971],["A Check for updates option in the Refresh list in the My Assets list. You can use this option to check for updates to all packages on your computer, not just the ones that are visible in the My Assets list.",1971],["A new Update button to automatically update a Git package to the latest version, so you don’t have to add the package to the project again with Add package from git URL.",1971],["Moved the Manual resolve action from the Refresh list button to the Package Manager settings menu.",1971],["Added Delaunay Mesh Support for 2D Colliders",1971],["Polygons and outlines on the PolygonCollider2D, CompositeCollider2D & TilemapCollider2D are produced via libtess2. Often those polygons can be too thin or small the physics engine filters them out. Delaunay tessellation produces superior results in these cases; it not only stops producing polygons that are too thin or small but also produces fewer polygons to cover the same area.",1971],["Sprite Atlas V2 (Out of Preview)",1971],["Sprite Atlas v2, which was introduced previously, will be out of preview in 2022.1. This brings support for Accelerator and as of 2021.2 provides full support for folders as packable objects.",1971],["The 2D PSD Importer now has support for importing files with the PSD file extension. You can control which layers to import from a Photoshop file if you select them from a new tab in the PSD Importer inspector. You can also set padding between Sprites in mosaic mode. Alongside this, there are a set of APIs for PSDImporter’s import settings.",1971],["Graphics",1971],["Frame Timing Manager improvements",1971],["The Frame Timing Manager supports all platforms, works in Editor, and provides more information about frame timing. These improvements allow you to build performance adaption, profiling, and reporting tools on every platform.",1971],["The Sprite Swap feature is improved in the 2D Animation package, with streamlined Sprite Swap keyframing in the Animation window.",1971],["The Animation quality of life for 2D has support for Sprite deformation, Sprite Swap, and IK Solvers in Animation preview windows. There is also an added Character Pivot tool in the Skinning Editor. You can use the new asset upgrading tool to upgrade older Sprite Library Assets and Animation Clips to the latest version.",1971],["The 2D Pixel Perfect Camera is enhanced with the addition of a new upscale filter to reduce blurriness.",1971],["You can write scripts to customize the Sprite Shape geometry after it’s generated. There are also added vertex colors for the Sprite Shape vertices.",1971],["Platforms",1971],["Incremental build pipeline support for more platforms",1971],["Added incremental build pipeline support for iOS, tvOS and other platforms. This makes Player builds faster for these platforms by removing redundant work in subsequent builds.",1971],["Advanced video encoder parameters for macOS",1971],["The Unity Recorder can use advanced parameters with the MediaEncoder on macOS (backed by Apple’s AVFoundation encoder API). This results in a consistent API across macOS and Windows and means the Unity Recorder can encode higher quality videos, such as YouTube compliant videos.",1971],["Artist and Cinematic tools",1971],["Blackmagic Video for M&E Enterprise Customers",1971],["You can leverage video capture cards from Blackmagic Design to input and output pro-grade video and audio in the Unity Editor and runtime builds. This allows you to unlock new workflows for users working in film, virtual production, live events, and broadcast. The package includes support for standard video formats, HDR, interlacing, and more.",1971],["There is support for time code synchronization to the Live Capture package, which lets you synchronize compatible Live Capture devices connected to the Unity Editor.",1971],["For example, you can synchronize data capture of the Unity Face Capture and Unity Virtual Camera companion apps. Future third-party motion capture and performance capture plugins can use this functionality to synchronize with any other plugin that implements the provided APIs.",1971],["Scene Handles and Overlays for Cinemachine Virtual Cameras",1971],["You can modify the camera constraint properties on the Cinemachine Virtual Cameras if you use Scene Overlays and purpose-built scene handles, instead of the property fields in the Inspector. Scene Handles and Overlays let you adjust properties like field of view, clipping planes, offsets, and damping directly in the Scene view.",1971],["The Shadergraph Sprite Lit, Sprite Unlit, and Sprite Custom Lit master stacks support several blending modes.",1971],["This support allows you to create shaders that can blend using Alpha, Premultiply, Additive, and Multiply blending modes. These changes are included in the Universal Render Pipeline package.",1971],["Enhanced User Experiences and Performance Improvements For Cinematic Studio",1971],["There are improvements to sequences and Alembic updates that include support for SubD (sub division modeling) and Inferred Material Mapping.",1971],["Programmer tools",1971],["Netcode for GameObjects is an open-source networking library built for the Unity game engine. It’s available to users under a permissive, MIT license.The first release focuses on enabling the creation of small-scale, cooperative, client-hosted games. You can also choose to extend the library and leverage the available support for dedicated servers.",1971],["IL2CPP full generic sharing fallback",1971],["The IL2CPP scripting backend always generates fully shared versions of all generic methods. This allows you to use generic type combinations that are not present at compile time. This improvement avoids a whole class of difficult to detect errors that can occur only at runtime.",1971],["IL2CPP run time performance improvements",1971],["The IL2CPP scripting backend emits code that improves the performance of delegate invocation at runtime. More information about delegate invocation is cached initially, so that each delegate call is much faster.",1971],["Visual scripting interpreter dependency on reflection removed",1971],["This improvement brings faster initialization and execution of Visual Scripting graphs without the need to sacrifice the flexibility of runtime graph modifications.",1971],["This is achieved through the introduction of an interpreted representation of VS graphs at runtime while you preserve the ability to modify and execute MonoBehavior-based graphs at execution time.",1971],["New in Unity 2022.2",1972],["Release Notes",1972],["To find out more about the new features, changes, and improvements to this Unity version, refer to the 2022.3 Release Notes.",1972],["Upgrade Guide",1972],["If you are upgrading existing projects from 2022.2, read the Upgrade Guide to 2022LTS for information about how your project might be affected.",1972],["What's new",1972],["See what's changed in Unity 2022.2 since 2022.1 and view the documentation for the affected areas.",1972],["Editor and Workflow",1972],["The Device Simulator device list now includes a new button to install the com.unity.device-simulator.devices package, which contains the latest device definitions from Unity.",1972],["You now have the option to block shortcuts from triggering during Play mode while the Game view window is focused.",1972],["Added an Edit mode preview Overlay for the Trail Renderer",1972],["Added Context column to ShortcutManager.",1972],["Added functionality to import and export profiles in the Shortcuts manager.",1972],["Added MinMaxCurveProperty Drawer to UIToolkit Inspector.",1972],["You can now run tests in a specified order from a test list.",1972],["Memory Profiler",1972],["Memory Profiler 1.0.0 includes the following features:",1972],["A new All Of Memory snapshots comparison tab.",1972],["A Close button to close snapshots, which means, single-clicking a selected snapshot no longer closes it.",1972],["Unity Objects breakdown comparison between two captures.",1972],["For a summary of changes, refer to What's new in Memory Profiler 1.0.0.",1972],["UI Toolkit for Editor UI",1972],["Added support for background-position, background-size and background-repeat for background rendering.",1972],["Added new UI Toolkit versions for ColorBlockDrawer and NavigationDrawer.",1972],["Improved UI/UX of the Inspector displaying appropriate visual cues according to the statuses of properties and provided more details about how properties' values are bound and resolved.",1972],["Improved the UI Builder Inspector.",1972],["Added library icons to UI Builder.",1972],["Added the align-self field to the UI Builder style Inspector.",1972],["Added call to implement DecoratorDrawers.",1972],["Synchronized TextCore's text generation with the latest code from TextMeshPro.",1972],["Graphics",1972],["Added access to the bounds of the current renderer in the per object constant buffer for SRPs.",1972],["Implemented custom error/loading shader support for the BatchRendererGroup.",1972],["Added visual debug tool for buffer load/store actions.",1972],["OpenGL ES 3.1 support for BatchRendererGroup.",1972],["Terrain heightmap support in RayTracingAccelerationStructure when using RayTracingAccelerationStructure.CullInstances function.",1972],["Added gaze foveated rendering (GFR) on Vulkan using fragment density map offset.",1972],["The Texture2D importer and constructor now allow excluding the texture from mipmap limits, ensuring that all mips can get uploaded regardless of the quality settings.",1972],["Added the runtime-modifiable Texture2D property to toggle excluding the texture from mipmap limits (only for readable Texture2Ds).",1972],["The Texture2D importer and constructor can now be used to add the texture to a project-defined mipmap limit group for more fine-grained control of how texture quality gets affected per quality level.",1972],["Added mipmap limit groups for more fine-grained configurability over the single value that applies to all mipmapped Texture2Ds.",1972],["Added shader variant loading settings in Player Settings to control how much memory shaders use at runtime.",1972],["Shader Warmup can now compile pipeline state objects asynchronously.",1972],["Foveated Rendering support for D3D12/Vulkan.",1972],["URP",1972],["For a complete description of new features and improvements in URP, refer to the What's new in URP 14 (Unity 2022.2) page.",1972],["New features",1972],["Added Full Screen Pass Renderer feature.",1972],["Added Custom post-processing effects with Full Screen Pass Renderer feature.",1972],["Added Rendering Layers.",1972],["Added Forward+ Rendering Path.",1972],["Added LOD Cross-fade.",1972],["Shader stripping improvement: added light cookies stripping.",1972],["Changed light and decal layers to rendering layers.",1972],["Improvements",1972],["Performance and usability improvements to Screen space ambient occlusion (SSAO).",1972],["New 64-bit high precision HDR render target format.",1972],["New bloom quality settings.",1972],["Improvements to the Render Pipeline Converter.",1972],["Full screen draws in URP now use the SRP Core Bliter API.",1972],["More consistent lighting behavior on different platforms.",1972],["New XRSystem API.",1972],["Shader stripping improvements",1972],["CPU performance improvements for light-heavy scenes.",1972],["HDRP",1972],["New features",1972],["Added Fullscreen material type and sample set.",1972],["Added Ray tracing support for Terrain.",1972],["Added the Water System.",1972],["Volumetric material support for local volumetric fog volumes.",1972],["Added transparency sample scene.",1972],["Added color monitors to the Rendering Debugger.",1972],["Added a new Eye Shader type called Eye Cinematic with Caustic.",1972],["The Ray Tracing Settings volume includes Culling Mode properties to define the algorithm that performs Ray Tracing culling.",1972],["Improvements",1972],["Replaced the Diffusion Profile Scattering Color HDR color picker with an LDR color picker.",1972],["Added properties to the Screen Space Reflection component to control how the PBR Accumulation SSR algorithm behaves.",1972],["Added a property called Target in the Custom pass drawer to access the current custom pass instance.",1972],["Added Asymmetric projection and Screen Coordinates Override Frame settings.",1972],["Adapted post-processing effects to support Screen Coordinates Override.",1972],["Added settings to overwrite diffusion profile IOR on StackLit.",1972],["Added the Occlusion remap Curve property to the Lens Flare component.",1972],["Added Probe Touchup Volumes for tuning Probe Volumes, and you can now bake separate lighting scenarios using Probe Volumes and blend between them.",1972],["Package Manager",1972],["Moved the package action toolbar in the package details header and implemented new design changes on the details header.",1972],["Reorganized Package Details into tab-based display. Packages now have individual tabs for Description, Version History, Samples, and Dependencies, while Asset Store Packages have tabs for Overview, Releases, and Images.",1972],["Added a runtime module from the com.unity.properties package that enables the use of a generalized visitor pattern.",1972],["Updated the scripting API by adding the isDeprecated and deprecationMessage properties to the UnityEditor.PackageManager.PackageInfo class, which are set when a given package version is labeled as deprecated on the registry by its author.",1972],["Updated the scripting API by adding the deprecated property to the UnityEditor.PackageManager.VersionsInfo class (usually accessed through the versions property of a UnityEditor.PackageManager.PackageInfo instance), which lists all versions of that package that are labeled as deprecated on the registry.",1972],["Authoring Tools",1972],["Animation",1972],["Modified fields on SerializeReference instances of MonoBehaviour so they can be animated like fields directly on MonoBehaviour classes.",1972],["Added support to edit multiple Animation Clips at once.",1972],["Navigation and Pathfinding",1972],["Released a new AI Navigation package which will eventually replace the core Navigation and Pathfinding feature.",1972],["Removed the Bake and Object tabs from the Navigation window as they're no longer necessary. However, you can still find them in the Navigation (Obsolete) window.",1972],["The Navigation Static and Off Mesh Link Generation options are no longer available in the Static Editor Flags dropdown menu. However, you can still find them in the Navigation (Obsolete) window > Object tab.",1972],["Terrain",1972],["Added Quality Settings to control various Terrain settings at different quality levels.",1972],["Audio",1972],["Added clock management options with the Video Player component.",1972],["2D",1972],["2D now supports the following features:",1972],["New 2D Physics Profiler Area with Custom Profile Counters.",1972],["New Editor Preference editor for 2D Physics that allows the configuration of Gizmo colors and settings.",1972],["The ability for 2D Physics Collider Gizmos to optionally draw Outlines and Filled Colliders. These are new options in the Physics 2D Project Settings Editor.",1972],["The ability to select per-Collider2D, which layers that contacts:",1972],["Are captured for querying and producing physics callbacks.",1972],["Will produce a physics callbacks for.",1972],["An option to override Layer collisions for Colliders, Rigidbody components, ArticulationBodies and Character Controllers, which allows to fine tune which bodies should collide with what layers.",1972],["2D Physics improvements",1972],["You can now allow the following in 2D Physics:",1972],["A Rigidbody2D/Collider2D to explicitly override (include or exclude) contact layers, so it can override the Layer Collision Matrix per-object.",1972],["A Collider2D to control Send and Receive forces per-layer upon contact with another Collider2D.",1972],["A Rigidbody2D to read or write the total force or torque that has been applied to it directly via add force or add torque calls.",1972],["A Joint2D to select one of four modes that control an action to be taken when the joint breaks. These are Ignore, CallbackOnly, Disable, or Destroy. Previously, Destroy was the fixed action and is still the default.",1972],["Burst",1972],["Added support for detecting managed breakpoints in code compiled with Burst, and automatically switching the affected code to the mono execution path to allow managed debugging. Requires Burst 1.8.",1972],["VFX Graph",1972],["VFX Instancing now optimizes both CPU and GPU VFX runtime.",1972],["Activation Boolean port on blocks.",1972],["Added passthrough space (None).",1972],["Skinned Mesh Sampling out of experimental.",1972],["Added a new lighting model for smoke: Six-way lighting.",1972],["Platforms",1972],["Added preliminary support for Magic Leap 2 in Android.",1972],["Introduced a new WebGL player setting to display diagnostics information (currently limited to memory usage) in WebGL applications.",1972],["WebGL VideoPlayer now has a configurable time update mode, to support game time, unscaled game time, and audio display time.",1972],["Artist and Cinematic tools",1972],["ShaderGraph",1972],["Added access to the renderer bounds in Shader Graph through the object node.",1972],["Programmer tools",1972],["AI",1972],["Added an option to create a height mesh when you build the NavMesh at runtime.",1972],["Kernel",1972],["Added a new Memory Manager Plug-in interface to allow Unity's native Memory Manager to do native memory allocations.",1972],["Serialization improvements",1972],["Changed so fields on SerializeReference instances of MonoBehaviours can now be animated like fields directly on MonoBehaviours.",1972],["Made EditorSerializationUtility services to access and manipulate SerializeReference instances with IDs available at runtime in Serialization.ManagedReferenceUtility.",1972],["Version Control",1972],["Added branch name column in changeset view.",1972],["Asset Store",1972],["Added Verified Solutions program, a library of third-party assets and solutions that Unity curates.",1972],["XR",1972],["Added profiler markers for some XR Display subsystem entry points. Markers are named XR.Display.*",1972],["Added support for late latch debug mode to help verify late latch functionality to the Oculus XR plug-in",1972],["Unity Mars is now included with Unity Pro, Unity Enterprise, and Unity Industrial Collection.",1972],["XR package changes",1972],["Version updates:**",1972],["com.unity.xr.arcore: 4.2.1 → 5.0.2",1972],["com.unity.xr.arfoundation: 4.2.1 → 5.0.2",1972],["com.unity.xr.arkit: 4.2.1 → 5.0.2",1972],["com.unity.xr.core-utils: 2.0.0-pre.5 → 2.1.0",1972],["com.unity.xr.interaction.toolkit: 2.0.0-pre.5 → 2.1.1",1972],["com.unity.xr.legacyinputhelpers: 2.1.8 → 2.1.10",1972],["com.unity.xr.oculus: 1.11.0 → 3.2.1",1972],["com.unity.xr.openxr: 1.3.0 → 1.5.3",1972],["Removed the deprecated unity.xr.arkit-face-tracking package from the AR Feature set. (APIs are now in the main ARKit package.)",1972],["AR Foundation 5.0.2",1972],["Added AR Debug Menu to provide visualization for AR debug information.",1972],["Added XR Simulation to allow testing of AR apps in a simulated environment within the editor (previously a Mars only feature).",1972],["Merged the com.unity.xr.arsubsystems package into AR Foundation.",1972],["Renamed XRDepthSubsystem to XRPointCloudSubsystem and XRDepthSubsystemDescriptor to XRPointCloudSubsystemDescriptor.",1972],["ARCore 5.0.2",1972],["Added project validation rules, which can identify configuration and settings issues in your app.",1972],["Added an option to OcclusionPreferenceMode to disable occlusion rendering.",1972],["Added support for changing the camera background rendering order.",1972],["Updated the package to use Google's ARCore 1.31.",1972],["Updated depth data to 16 bit, which increases range from 8 meters to 65 meters.",1972],["Added the CancelPermissionRequest method to allow developers to handle permission requests. Resolves issue: ARFOUNDATION: CAMERA REQUEST PERMISSION WINDOW IS NOT SHOWN WHEN APP IS MINIMIZED AND OPENED AGAIN ON ANDROID DEVICE.",1972],["ARKit 5.0.2",1972],["Expanded face tracking capabilities to include tracking multiple faces with both the front and rear cameras at the same time. The device must support Apple ARKit 3.",1972],["Merged the com.unity.arkit-face-tracking package into the ARKit package. The separate ARKit Face Tracking package is no longer needed.",1972],["Oculus 3.2.1",1972],["Added optional support for Symmetric Projection on Quest 2 when using Vulkan and Multiview. This mode can improve GPU performance when using Multiview due to more common workloads between the left and right eye. Enable Symmetric Projection in the Oculus settings under XR Plug-in Management.",1972],["Added Quest Pro to the list of target devices in the Oculus settings under XR Plug-in Management. Enable this option to add the Quest Pro to the app's Android manifest.",1972],["OpenXR 1.5.3",1972],["Added Project Validation support (requires XR Core Utilities 2.1.0+). Project validation evaluates the project settings to identify possible problems.",1972],["Added support for setting the Environment Blend Mode.",1972],["Added support for XR_MSFT_holographic_windown_attachment extension on UWP so that installing Microsoft Mixed Reality OpenXR Plug-in is no longer required if targeting HoloLens V2 devices.",1972],["Added support for XR_FB_foveation, XR_FB_foveation_configuration, XR_FB_swapchain_update_state, XR_FB_foveation_vulkan and XR_FB_space_warp extensions.",1972],["Applications now attempt to recover after the Oculus Link is lost and reconnected.",1972],["XR Interaction Toolkit 2.1.1",1972],["Added an option to make the attachment point used when grabbing objects dynamic. Refer to XR Grab Interactable for more information.",1972],["Added \"intention\" filtering that uses a weighted score to choose which object to select when more than one otherwise qualifies. Refer to Target filters for more information.",1972],["Added an option to activate a comfort mode vignette during locomotion. Refer to Tunneling Vignette Controller for more info.",1972],["New in Unity 2022 LTS",1973],["Long-term Support (LTS)",1973],["Unity 2022.3 is an LTS release, containing features released in 2022.1 and 2022.2, and is supported for three years. Refer to the LTS release page for more information and other available LTS installers.",1973],["Release Notes",1973],["To find out more about the new features, changes, and improvements to Unity 2022 releases, refer to:",1973],["Upgrade guides",1973],["If you are upgrading existing projects from an earlier version of Unity, read the Upgrade Guides for information about how your project might be affected. Here are the LTS specific upgrade guides:",1973],["What's new",1973],["Find out what's changed in Unity 2022 LTS since 2021 LTS and view the documentation for the affected areas:",1973],["Create a vehicle with Wheel Colliders",1974],["The Wheel Collider component is powered by the PhysX 3 Vehicles SDK.",1974],["This tutorial takes you through the process of creating a basic functioning car.",1974],["To start, select GameObject > 3D Object > Plane. This is the ground the car is going to drive on. To keep it simple, make sure the ground has a Transform of 0 (on the Transform component in the Inspector Window, click the Settings cog and click Reset). Increase the Transform's Scale fields to 100 to make the Plane bigger.",1974],["Create a basic car skeleton",1974],["First, add a GameObject to act as the car root GameObject. To do this, go to GameObject > Create Empty. Change the GameObject's name to car_root.",1974],["Add a Physics 3D Rigidbody component to car_root. The default mass of 1kg is too light for the default suspension settings; change it to 1500kg to make it much heavier.",1974],["Next, create the car body Collider. Go to GameObject > 3D Object > Cube. Make this cube a child GameObject under car_root. Reset the Transform to 0 to make it perfectly aligned in local space. The car is oriented along the Z axis, so set the Transform's Z Scale to 3.",1974],["Add the wheels root. Select car_root and GameObject > Create Empty Child. Change the name to wheels. Reset the Transform on it. This GameObject is not mandatory, but it is useful for tuning and debugging later.",1974],["To create the first wheel, select the wheels GameObject, go to GameObject > Create Empty Child, and name it frontLeft. Reset the Transform, then set the Transform Position X to -1, Y to 0, and Z to 1. To add a Collider to the wheel, go to Add component > Physics > Wheel Collider.",1974],["Duplicate the frontLeft GameObject. Change the Transform's X position to 1. Change the name to frontRight.",1974],["Select both the frontLeft and frontRight GameObjects. Duplicate them. Change the Transform's Z position of both GameObjects to -1. Change the names to rearLeft and rearRight respectively.",1974],["Finally, select the car_root GameObject and use the Move Tool to raise it slightly above the ground.",1974],["Now you should be able to see something like this:",1974],["To make this car actually drivable, you need to write a controller for it. The following code sample works as a controller:",1974],["using UnityEngine;",1974],["using System.Collections;",1974],["using System.Collections.Generic;",1974],["public class SimpleCarController : MonoBehaviour {",1974],["public List axleInfos; // the information about each individual axle",1974],["public float maxMotorTorque; // maximum torque the motor can apply to wheel",1974],["public float maxSteeringAngle; // maximum steer angle the wheel can have",1974],["public void FixedUpdate()",1974],["float motor = maxMotorTorque * Input.GetAxis(\"Vertical\");",1974],["float steering = maxSteeringAngle * Input.GetAxis(\"Horizontal\");",1974],["foreach (AxleInfo axleInfo in axleInfos) {",1974],["if (axleInfo.steering) {",1974],["axleInfo.leftWheel.steerAngle = steering;",1974],["axleInfo.rightWheel.steerAngle = steering;",1974],["if (axleInfo.motor) {",1974],["axleInfo.leftWheel.motorTorque = motor;",1974],["axleInfo.rightWheel.motorTorque = motor;",1974],["[System.Serializable]",1974],["public class AxleInfo {",1974],["public WheelCollider leftWheel;",1974],["public WheelCollider rightWheel;",1974],["public bool motor; // is this wheel attached to motor?",1974],["public bool steering; // does this wheel apply steer angle?",1974],["Create a new C# script (Add Component > New Script), on the car_root GameObject, copy this sample into the script file and save it. You can tune the script parameters as shown below; experiment with the settings and enter Play Mode to test the results.",1974],["The following settings are very effective as a car controller:",1974],["Hint: Make sure to increase the size of AxleInfo.",1974],["You can have up to 20 wheels on a single vehicle instance, with each of them applying steering, motor or braking torque.",1974],["Next, move on to visual wheels. As you can see, a Wheel Collider doesn't apply the simulated wheel position and rotation back to the Wheel Collider's Transform, so adding visual wheel requires some tricks.",1974],["You need some wheel geometry here. You can make a simple wheel shape out of a cylinder. There could be several approaches to adding visual wheels: making it so that you have to assign visual wheels manually in script properties, or writing some logic to find the corresponding visual wheel automatically. This tutorial follows the second approach. Attach the visual wheels to the Wheel Collider GameObjects.",1974],["Next, change the controller script:",1974],["using UnityEngine;",1974],["using System.Collections;",1974],["using System.Collections.Generic;",1974],["[System.Serializable]",1974],["public class AxleInfo {",1974],["public WheelCollider leftWheel;",1974],["public WheelCollider rightWheel;",1974],["public bool motor;",1974],["public bool steering;",1974],["public class SimpleCarController : MonoBehaviour {",1974],["public List axleInfos;",1974],["public float maxMotorTorque;",1974],["public float maxSteeringAngle;",1974],["// finds the corresponding visual wheel",1974],["// correctly applies the transform",1974],["public void ApplyLocalPositionToVisuals(WheelCollider collider)",1974],["if (collider.transform.childCount == 0) {",1974],["return;",1974],["Transform visualWheel = collider.transform.GetChild(0);",1974],["Vector3 position;",1974],["Quaternion rotation;",1974],["collider.GetWorldPose(out position, out rotation);",1974],["visualWheel.transform.position = position;",1974],["visualWheel.transform.rotation = rotation;",1974],["public void FixedUpdate()",1974],["float motor = maxMotorTorque * Input.GetAxis(\"Vertical\");",1974],["float steering = maxSteeringAngle * Input.GetAxis(\"Horizontal\");",1974],["foreach (AxleInfo axleInfo in axleInfos) {",1974],["if (axleInfo.steering) {",1974],["axleInfo.leftWheel.steerAngle = steering;",1974],["axleInfo.rightWheel.steerAngle = steering;",1974],["if (axleInfo.motor) {",1974],["axleInfo.leftWheel.motorTorque = motor;",1974],["axleInfo.rightWheel.motorTorque = motor;",1974],["ApplyLocalPositionToVisuals(axleInfo.leftWheel);",1974],["ApplyLocalPositionToVisuals(axleInfo.rightWheel);",1974],["One important parameter of the Wheel Collider component is Force App Point Distance. This is the distance from the base of the resting wheel to the point where the wheel forces are applied. The default value is 0, which means to apply the forces at the base of the resting wheel, but actually, it is wise to have this point located somewhere slightly below the car's centre of mass.",1974],["Develop for Windows",1975],["When you are developing applications for Windows, you might want to know how to use Visual Studio for project generation or debug your Windows application. This section provides information on how to do these tasks.",1975],["Page Description ",1975],["",1975],["Visual Studio project generation for Windows Standalone Introduces Visual Studio project generation for Windows and how to use it. ",1975],["Windows debugging Explains how to debug your Windows Unity project. ",1975],["WindowsLowIntegrity Details the effects of running the Windows player at a Low Integrity level. ",1975],["IL2CPP Scripting Backend Introduces IL2CPP scripting backend for the Windows platform. ",1975],["Windows",1976],["Unity provides support for developing games on the Windows platform. For information on getting started with Windows, refer to the following sections:",1976],["Page Description ",1976],["Requirements and compatibility Know the supported versions and compatibility information before you start developing for Windows. ",1976],["Integrating Unity into Windows and UWP applications Describes how to integrate the Unity Runtime Library into Windows. ",1976],["Windows Player settings Details the player settings to configure your built Windows platform application. For a description of the general Player Settings, see Player Settings ",1976],["Windows debugging",1977],["Unity provides several options for debugging on Windows for forensic or live debugging of game and Editor processes. Unity allows two types of debugging: native C++ debugging and C# managed debugging.",1977],["Native Debugging stores symbols in Program Database (PDB) for the associated binary files, such as exe and dll.",1977],["On Windows, the standard .NET managed symbols are stored in PDB files with a .pdb extension.",1977],["Symbols",1977],["You can use Unity's Symbol Store for accessing the Unity server URL in Windows Debugger (WinDbg), or Visual Studio 2019 and later for automatic symbol resolution and downloading.",1977],["Windows Debugger (WinDbg)setup",1977],["To add a symbol store on WinDbg, use the .sympath command:",1977],["\n .sympath+ SRV*c:\\symbols-cache*http://symbolserver.unity3d.com/\n",1977],["Where:",1977],["\n .sympath+\n",1977],["The + addition, leaves the existing symbol path alone, and appends this symbol store lookup.",1977],["\n SRV*c:\\symbols-cache\n",1977],["The SRV indicates a remote server to fetch from, while the c:\\symbols is a local path to cache the downloaded symbols and to look there first before downloading again.",1977],["\n *http://symbolserver.unity3d.com/\n",1977],["The path to the symbol store to fetch from.",1977],["",1977],["Visual Studio setup",1977],["To configure Visual Studio for debugging, follow these steps:",1977],["Go to Tools > Options.",1977],["Expand the Debugging section and then select Symbols.",1977],["Specify a cache directory if not already specified.",1977],["Add a Symbol file (.pdb) location, such as Unity's Symbol Store.",1977],["Live debugging",1977],["Live debugging is the scenario of attaching a debugger to a process that's already running, or to a process where an exception has been caught. For the debugger to spot the issue, you must include the symbols in the build using the steps described in the Visual Studio setup section. In addtion, if the game executable has the same name as your game name, the debugger might have issues finding the correct .pdb file, espectially if it doesn't have access to the renamed executable.",1977],["Setting up automatic exception debugging",1977],["On Windows, Microsoft automatically sets up application crashes to send to Dr Watson/Error Reporting to Microsoft. However, if you have Visual Studio or WinDbg installed, Microsoft provides an option to instead opt to debug the crashes.",1977],["Follow this registry file contents to install:",1977],["Windows Registry Editor Version 5.00",1977],["[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug]",1977],["\"Auto\"=\"1\"",1977],["[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug]",1977],["\"Auto\"=\"1\"",1977],["Additional content for Editor debugging:",1977],["\n Unity.exe -dbgbreak\n",1977],["Will launch Unity and promptly offer a debugger to connect if the automatic crash handling is set up.",1977],["Post-Mortem/Forensic debugging",1977],["Windows provides facilities to investigate crash dump files (.dmp or .mdmp). Depending on the crash dump, you might either see stack information or the entire process memory. The contents of the dump file determine the cause of the crash, which typically has at least a stack to investigate (as long as it's a valid stack).",1977],["To investigate a dump file, you can load it up via Visual Studio or WinDbg. While Visual Studio is easy to use, WinDbg provids additional features, which makes it a preferred debugging tool.",1977],["Debugging hints and tricks",1977],["When running Visual Studio, you can use the UnityMixedCallstack extension for VS Code by Unity that makes debugging even easier.",1977],["Managed exceptions in native land",1977],["A NullReferenceException typically looks like this:",1977],["1b45558c()",1977],["\n mono-2.0-bdwgc.dll!malloc(unsigned int size=12) Line 163 + 0x5f bytes C\n",1977],["mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232) Line 204 + 0x7 bytes C",1977],["mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c) Line 4889 + 0xc bytes C",1977],["Managed stack frames",1977],["Managed stack frames typically resemble this:",1977],["1b45558c()",1977],["\n mono-2.0-bdwgc.dll!malloc(unsigned int size=12) Line 163 + 0x5f bytes C\n",1977],["mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232) Line 204 + 0x7 bytes C",1977],["mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c) Line 4889 + 0xc bytes C",1977],["The lines without any information are managed frames. You can get the managed stack information in mono using its built-in function called mono_pmip, which accepts the address of a stack frame and returns a char* with information. You can invoke mono_pmip in the Visual Studio Immediate window for debugging.",1977],["\n ?(char*){,,mono-2.0-bdwgc.dll}mono_pmip((void*)0x1b45558c)\n",1977],["0x26a296c0 \" Tiles:OnPostRender () + 0x1e4 (1B4553A8 1B4555DC) [065C6BD0 - Unity Child Domain]\"`",1977],["Note:** This only works where mono-2.0-bdwgc.dll symbols are loaded properly.",1977],["Force Applications to Create Dumps",1977],["Ocassionally, an application doesn't crash despite having the debugger attached, or it crashes on a remote device where the debugger isn't available. In such cases, you can get useful information from the dump file using the following steps:",1977],["Note:** These instructions apply to both Windows Standalone and Universal Windows platforms when running on desktop.",1977],["Open the Windows registry.",1977],["Navigate to HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting.",1977],["Create LocalDumps folder if it’s not there.",1977],["Add following keys:",1977],["“DumpFolder”=&lt;FolderPath goes here> , e.g., C:\\Temp",1977],["“DumpCount”=dword:00000010",1977],["“DumpType”=dword:00000002",1977],["Launch the application via the Universal Windows Platform or Windows Standalone executable.",1977],["Reproduce the crash. The dump file is created in the folder you specified earlier. You can open the dump file with your preferred debugging tool, such as Visual Studio or WinDbg.",1977],["Windows integrity control",1978],["The Mandatory Integrity Control security feature on Windows devices allocates an integrity level (IL) to all applications and processes. The device’s operating system or database constrains a user’s or initiator’s ability to access or perform other operations on an_ object/target_ (such as files, memory, or directories). Both the initiator and the object are allocated an IL, with low as the most restricted access. When the initiator attempts to access the object, their ILs are compared. The initiator can’t access the object if it has a lower IL than the object.",1978],["For more information about integrity levels, see Microsoft’s Mandatory Integrity Control documentation.",1978],["Windows Standalone player can detect if it’s running at low integrity ievel. For more information, see Microsoft’s documentation on Designing Applications to Run at a Low Integrity Level. In this case, one of the following things might happen:",1978],["The log file is written to %USERPROFILE%\\AppData\\LocalLow\\CompanyName\\ProductName",1978],["PlayerPrefs is saved to HKCU\\Software\\AppDataLow\\Software\\CompanyName\\ProductName",1978],["Windows Player: IL2CPP Scripting Backend",1979],["You can use IL2CPP as an alternative to Mono for scripting backend when building projects for Windows Player.",1979],["When you build a Project using IL2CPP, Unity converts IL code from scripts and assemblies to C++ before creating a native binary. See IL2CPP for more information.",1979],["C++ source code plugins for IL2CPP",1979],["You can add C++ (.cpp) code files directly into a Unity Project when using the IL2CPP scripting backend. The C++ files act as plugins within the Plugin Inspector. If you configure the C++ files to be compatible with Windows Player, Unity compiles them together with C++ code that gets generated from managed assemblies.",1979],["To view the plugin importer settings for C++ files, click a .cpp file and select the appropriate Windows option in the Platform settings section of the Inspector:",1979],["Because the functions are linked together with generated C++ code, there is no separate DLL to _P/Invoke into. Due to this, you can use the “__Internal” keyword in place of the DLL name, which makes it the C++ linker’s responsibility to resolve the functions, rather than loading them at run time, as the following example shows:",1979],["[DllImport(\"__Internal\")]",1979],["private static extern int",1979],["CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);",1979],["You can define this kind of function in NativeFunctions.cpp as follows:",1979],["extern \"C\" declspec(dllexport) int _stdcall CountLettersInString(wchart* str)",1979],["int length = 0;",1979],["while (*str++ != L'\\0')",1979],["length++;",1979],["return length;",1979],["Because the linker resolves the function call, any error made in the function declaration on the managed side (C# code that executes under managed run time) produces a linker error instead of a run-time error. This means, no dynamic loading can take place during run time, and the function is called directly from C#, which significantly decreases the performance overhead of a P/Invoke call.",1979],["Unity compiles source code plug-ins with the same C++ compiler arguments as the generated C++ code, which can't be modified. If some plug-in source code requires control over C++ compiler arguments, you must build a native plug-in instead. For more information, see Native plug-in.",1979],["IL2CPP build files",1979],["A project using the IL2CPP scripting backend typically produces these files:",1979],["The following files are common to projects that use IL2CPP:",1979],["File: Description: ",1979],["a_Data Folder with game data. ",1979],["a.exe Main game executable. ",1979],["UnityCrashHandler64.exe Crash handler executable. ",1979],["UnityPlayer.dll Unity Player library containing all native code. ",1979],["WinPixEventRuntime.dll PIX for Windows runtime. This file is present only in development builds. ",1979],["a_BackUpThisFolder_ButDontShipItWithYourGame Folder containing data required to debug your game, including PDB (debug info) files and C++ code generated from your scripts. You should back up this folder for every build you ship, but don’t redistribute it. ",1979],["GameAssembly.dll Library that contains the IL2CPP runtime and all your script code. ",1979],["SymbolMap File containing a list of all managed function addresses and their lengths. IL2CPP needs this to resolve managed stack traces. If you delete it, you can still run your game but there's no gurantee that exceptions will generate sensible call stacks. ",1979],["Additional resources:",1979],["Windows Build Settings",1980],["To create a build for Windows, go to Build Settings (menu: File > Build Settings).",1980],["In the Platform list, select Windows, then select Switch Platform.",1980],["Use these settings to configure how Unity builds your application.",1980],["Setting Function ",1980],["",1980],["Target platform Select Windows to build your app for the Windows platform. ",1980],["Architecture Select the CPU to build for (only applies to Build And Run). ",1980],["Intel 64-bit Intel/AMD 64-bit CPU architecture. ",1980],["Intel 32-bit Intel 32-bit CPU architecture. ",1980],["Copy PDB files Enable this setting to include Microsoft program database (PDB) files in the built Windows Player. PDB files contain debugging information for your application, but might increase the size of your Player. For more information, see Windows debugging. ",1980],["Create Visual Studio Solution Enable this setting to generate Visual Studio solution files for the project such that you can build the project from Microsoft Visual Studio directly. ",1980],["Development Build Enable this setting to include scripting debug symbols and the Profiler in your build. When you enable this, Unity sets the DEVELOPMENT_BUILD#define for testing purposes. When you select Development Build, Autoconnect Profiler, Deep Profiling Support, Script Debugging, and Wait for Managed Debugger settings also become available. ",1980],["Autoconnect Profiler Enable this setting to automatically connect the Unity Profiler to your build. ",1980],["Deep Profiling Support Enable this setting to select Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application and returns more detailed profiling data. When you enable Deep Profiling Support, it might slow down script execution. ",1980],["Script debugging Enable this setting to allow your script code to be debugged. Not available on WebGL. ",1980],["Wait for Managed Debugger Enable this setting to be prompted to attach a debugger before Unity executes any script code. ",1980],["Compression Method (Not available on the WebGL platform) Compress the data in your application when you build your application. This includes Assets, Scenes, Player settings, and GI data. Choose from the following methods:",1980],["**Default** On Windows, Mac, Linux, and iOS, there is no compression by default. On Android, the default compression is ZIP, which provides better compression results than LZ4HC; however, data is slower to decompress.\n",1980],["**LZ4** A fast compression format that's useful for development builds. For more information, see [BuildOptions.CompressWithLz4](ScriptRef:BuildOptions.CompressWithLz4.html).\n",1980],["**LZ4HC** A high compression variant of LZ4 that's slower to build but produces better results for release builds. For more information, see [BuildOptions.CompressWithLz4HC](ScriptRef:BuildOptions.CompressWithLz4HC.html).\n",1980],["Asset Import Overrides ",1980],["Use Asset Import Overrides to locally override all texture import settings to speed up import and platform switch time. You must avoid shipping your final build with any import overrides, but you can use this setting during development to speed up iteration time, especially if assets such as low resolution textures are not of any concern.",1980],["Setting Function ",1980],["",1980],["Max Texture Size Override the maximum imported texture size. Unity imports textures in the lower of two values: this value, or the Max Size value specified in Texture import settings. The time it takes to import a texture is roughly proportional to the amount of pixels it contains; therefore, reducing maximum allowed texture size can speed up the import times. As this setting might result in lower resolution textures, use it only for development purposes. ",1980],["Texture Compression Override the texture compression options set in Texture import settings. This only affects textures imported into one of the compressed texture formats. ",1980],["_Force Fast Compressor_ Use a faster yet lower quality texture compression mode for formats where this is applicable (BC7, BC6H, ASTC, ETC, ETC2). Typically, this results in more compression artifacts, but for many formats the compression itself is many times faster (2 to 20 times faster). <br/><br/> This setting also disables the **Crunch** texture compression format on any textures that have it. <br/><br/> The effect is the same as if all textures had their **Compressor Quality** set to **Fast** setting in their platform's [Texture import settings](class-TextureImporter). \n",1980],["_Force Uncompressed_ Don't compress the textures; use uncompressed formats instead. Note that while this is faster to import because it skips the whole texture compression process, the resulting textures take up more memory, game data size, and can impact rendering performance. [Texture import settings](class-TextureImporter). <br/><br/> This option has the same effect as all textures that have their **Compression** set to **None** in their platforms' [Texture Import settings](class-TextureImporter). \n",1980],["You can also set Asset import override settings using -overrideMaxTextureSize and -overrideTextureCompression Editor Command line arguments to change any initial application import.",1980],["Building your Windows application",1980],["To build your application, select from one of the following options:",1980],["Build**: Compile your application. The default build is incremental, except for the first build, which is always a full non-incremental (clean) build. To force a clean build instead of an incremental build, select Clean Build from the dropdown menu.",1980],["Build and run**: Compile your application and open it in your native platform. This option always uses the incremental build.",1980],["Windows Player build binaries",1980],["When you build a Unity title on the Windows platform, Unity produces the following files, where ProjectName is the name of your application:",1980],["ProjectName.exe - The project executable file, i.e. your project application. This contains the program entry point which calls into the Unity engine when launched.",1980],["UnityPlayer.dll - The DLL file that contains all the native Unity engine code. It's signed with the Unity Technologies certificate, which lets you verify that no malicious entities have tampered with your engine.",1980],["*.pdb files - Symbol files for debugging. Unity copies these to the build directory if you enable Copy PDB files in the Build Settings window.",1980],["WinPixEventRuntime.dll - This DLL enables Introducing PIX on Windows (beta) support. Unity only creates this file if you enable the Development Build option in the Build Settings window.",1980],["ProjectName_Data folder - This folder contains all the data needed to run your application.",1980],["How to rebuild your application**",1980],["The path to the source code for ProjectName.exe is in the WindowsPlayer folder: Editor\\Data\\PlaybackEngines\\WindowsStandaloneSupport\\Source\\WindowsPlayer.",1980],["To modify your application, or ship the code which you built yourself (if you want to sign it, for example), you must rebuild it and place it in your built game directory.",1980],["To build your application outside of Unity, you need Visual Studio 2019 or 2022 with Desktop development with C++ workload installed.",1980],["Windows standalone Player build binaries changed in 2017.2 NewIn20172",1980],["Windows XP support in Standalone Player removed in 2018.1",1980],["AppCallbacks class reference",1981],["You can use the AppCallbacks class to connect your main application to the Unity engine.",1981],["Example: How to use the AppCallbacks class",1981],["App.xaml.cpp file",1981],["App::App()",1981],["InitializeComponent();",1981],["SetupOrientation();",1981],["m_AppCallbacks = ref new AppCallbacks();",1981],["void App::OnLaunched(LaunchActivatedEventArgs^ e)",1981],["m_SplashScreen = e->SplashScreen;",1981],["InitializeUnity(e->Arguments);",1981],["void App::InitializeUnity(String^ args)",1981],["ApplicationView::GetForCurrentView()->SuppressSystemOverlays = true;",1981],["m_AppCallbacks->SetAppArguments(args);",1981],["auto rootFrame = safe_cast(Window::Current->Content);",1981],["// Do not repeat app initialization when the Window already has content,",1981],["// just ensure that the window is active",1981],["if (rootFrame == nullptr && !m_AppCallbacks->IsInitialized())",1981],["rootFrame = ref new Frame();",1981],["Window::Current->Content = rootFrame;",1981],["if !UNITY_HOLOGRAPHIC",1981],["Window::Current->Activate();",1981],["endif",1981],["rootFrame->Navigate(TypeName(MainPage::typeid ));",1981],["Window::Current->Activate();",1981],["MainPage.xaml.cpp file",1981],["MainPage::MainPage()",1981],["m_SplashScreenRemovalEventToken.Value = 0;",1981],["m_OnResizeRegistrationToken.Value = 0;",1981],["InitializeComponent();",1981],["NavigationCacheMode = ::NavigationCacheMode::Required;",1981],["auto appCallbacks = AppCallbacks::Instance;",1981],["bool isWindowsHolographic = false;",1981],["if UNITY_HOLOGRAPHIC",1981],["// If application was exported as Holographic check if the device actually supports it",1981],["// Otherwise, we treat this as a normal XAML application",1981],["isWindowsHolographic = AppCallbacks::IsMixedRealitySupported();",1981],["endif",1981],["if (isWindowsHolographic)",1981],["appCallbacks->InitializeViewManager(Window::Current->CoreWindow);",1981],["else",1981],["m_SplashScreenRemovalEventToken = appCallbacks->RenderingStarted += ref new RenderingStartedHandler(this, &MainPage::RemoveSplashScreen);",1981],["appCallbacks->SetSwapChainPanel(m_DXSwapChainPanel);",1981],["// Subscribes to all needed system events",1981],["appCallbacks->SetCoreWindowEvents(Window::Current->CoreWindow);",1981],["// This is the main initialization function for Unity",1981],["// Initializes engine graphics, DirectX, and gamepad and joystick input",1981],["// Loads IL2CPP and all engine subsystems except graphics",1981],["appCallbacks->InitializeD3DXAML();",1981],["// At this point, when Unity finishes loading the first level, it enters the main loop.",1981],["m_SplashScreen = safe_cast(App::Current)->GetSplashScreen();",1981],["auto dispatcher = CoreWindow::GetForCurrentThread()->Dispatcher;",1981],["ThreadPool::RunAsync(ref new WorkItemHandler(this, dispatcher",1981],["GetSplashBackgroundColor(dispatcher);",1981],["}));",1981],["OnResize();",1981],["m_OnResizeRegistrationToken = Window::Current->SizeChanged += ref new WindowSizeChangedEventHandler([this](Object^, WindowSizeChangedEventArgs^)",1981],["OnResize();",1981],["});",1981],["Create an app thread",1981],["Unity doesn’t run your app on the UI thread because the UI could become unresponsive when loading large apps. For more information on UI threads, refer to Microsoft documentation on Keeping the UI thread responsive.",1981],["When you create the AppCallbacks class using m_AppCallbacks = ref new AppCallbacks();, Unity creates a new thread called App Thread. Unity creates this new thread due to a Microsoft restriction: if your application doesn't become responsive after 5 seconds, you’ll fail to pass the Windows App Certification Kit tests. For more information, refer to Microsoft documentation on the Windows App Certification Kit.",1981],["Note:** Code located in the App.xaml.cpp and MainPage.xaml.cpp files always runs on the UI thread, unless called from the InvokeOnAppThread function.",1981],["Command line arguments",1981],["You can pass custom command line arguments as string arrays into the AppCallbacks constructor. For more information, refer to UWP Command line arguments.",1981],["AppCallbacks functions",1981],["Function Description ",1981],["------------------------------------------------------- ------------------------------------------------------------- ",1981],["appCallbacks->InitializeD3DXAML(); Initializes your DirectX 11 device and loads the first level. ",1981],["appCallbacks->SetCoreWindowEvents(Window::Current->CoreWindow); Sets the core window for Unity. Unity subscribes to the following system events: - VisibilityChanged- Closed- PointerCursor- SizeChanged- Activated- CharacterReceived- PointerPressed- PointerReleased- PointerMoved- PointerCaptureLost- PointerWheelChanged - AcceleratorKeyActivated ",1981],["appCallbacks->SetSwapChainPanel(m_DXSwapChainPanel); Passes a XAML control to Unity which is used as a render target for DirectX 11. ",1981],["void GetSwapChainPanel() Returns the SwapChainPanel object, which you can set via the SetSwapChainPanel method. ",1981],["void Initialized() Returns whether the engine is initialized enough to run the main game loop. ",1981],["void InitializeD3DWindow() Initializes engine graphics, DirectX, and gamepad and joystick input for D3D applications. ",1981],["void Instance() Retrieves a singleton instance of a previously created AppCallbacks object. ",1981],["void InvokeOnAppThread(AppCallbackItem item, bool waitUntilDone) Invokes a delegate on the application thread. This function is useful when you want to execute your script function from a UI thread. ",1981],["void InvokeOnUIThread(AppCallbackItem item, bool waitUntilDone) Invokes a delegate on the UI thread. This function is useful when you want to invoke an XAML-specific API from your scripts. ",1981],["bool IsInitialized() Returns true when the first level of your application is fully loaded. ",1981],["void RenderingStarted() Starts after Unity renders its first frame. ",1981],["void Run() Enables D3D applications to enter the main loop. ",1981],["bool RunningOnAppThread() Returns true if you’re currently running in an application thread. ",1981],["bool RunningOnUIThread() Returns true if you’re currently running in a UI thread. ",1981],["void SetAppArguments(string arg) / string GetAppArguments() Sets your application arguments, which you can then access from UnityEngine.WSA.Application.arguments. ",1981],["void SetCoreApplicationViewEvents() Subscribes to the CoreApplicationView::Activated event and loads the IL2CPP scripting backend and all engine subsystems except graphics. ",1981],["bool UnityGetInput() Returns true if Unity processes incoming input. ",1981],["void UnitySetInput(bool enabled) Enables or disables input processing. ",1981],["bool UnityPause(int pause) Pauses Unity if you pass 1 and unpauses if you pass 0. This function is useful if you want to temporarily freeze your game. ",1981],["Additional resources",1981],["Association launching for UWP",1982],["You can use the association launching API to launch the user’s default app for a file type or protocol. For more information, refer to UnityEngine.WSA.Launcher. You can also enable your app to be the default app for a file type or protocol in Player settings > File and Protocol Associations. More settings are available in Package.appxmanifest > Declarations.",1982],["Additional resources",1982],["Microsoft documentation on Association launching",1982],["UWP build settings",1983],["Use the Universal Windows Platform (UWP) Build Settings to configure and build your application for UWP. The UWP Build Settings are part of the Build Settings window.",1983],["To build your application for UWP:",1983],["Select File > Build Settings.",1983],["From the list of platforms in the Platform pane, select UWP.Note: Universal Windows Platform only shows in the Platform list if you’re using Unity on a Windows computer.If UWP appears dimmed, refer to UWP environment setup.",1983],["If the Build button isn't visible and Build And Run appears dimmed, select Switch Platform. The UWP Build Settings now have an effect on the build.",1983],["Click either Build or Build and Run.Build builds your application into a Player. Build and Run builds your application in a Player, and opens that Player on your target platform.",1983],["Select the destination for Unity to place the application.If you selected Build and Run, Unity also installs the application on the run device.",1983],["Click Save. This starts the build.",1983],["You can configure the following settings for your build:",1983],["Property Description ",1983],[":-------------------- :---------------------- :----------------------- ",1983],["Architecture Select from the following CPU architectures to build (only applies to Build And Run) for UWP. ",1983],[" **Intel 64-bit** 64-bit Intel CPU. \n",1983],[" **Intel 32-bit** 32-bit Intel CPU. \n",1983],[" **ARM 64-bit** 64-bit ARM CPU. \n",1983],[" **ARM 32-bit** 32-bit ARM CPU. \n",1983],["Build Type Select the Visual Studio project or build type to generate. ",1983],[" **XAML Project** Integrates Unity within a full XAML environment. This results in some performance loss, but lets you use XAML elements in your application. \n",1983],[" **D3D Project** Integrates Unity in a basic app window. This results in the best performance. \n",1983],[" **Executable Only** Hosts the project in a pre-built executable for rapid iteration. This setting has the quickest iteration speed because it doesn't require you to build the generated project in Visual Studio. It offers the same performance as D3D Project builds. \n",1983],["Target SDK Version Select the Windows 10 SDK installed on the local PC to build the application against. This setting is relevant only when calling Windows 10 APIs directly from scripts.Note: Unity requires the base Windows 10 SDK version 10.0.10240.0 or higher for building UWP apps, and doesn't support Windows 8/8.1 SDKs. ",1983],["Minimum Platform Version Select the minimum Windows 10 release version required to run the app. Note: This setting is only relevant if you’re using Windows features or APIs that aren’t available in the base Windows 10 version (10.0.10240). ",1983],["Visual Studio Version Specify the Visual Studio version if you have multiple versions installed. ",1983],["Build and Run on Select the target device or transport to deploy and launch the app during Build And Run. ",1983],[" **Local Machine** Deploys and launches the app on the local PC. \n",1983],[" **Remote Device (via Device Portal)** Deploys and launches the app to a connected device over the Device Portal transport. For more information, refer to [Windows Device Portal deployment](windowsstore-deviceportal). \n",1983],["Build Configuration Select the build configuration (only applies to Build And Run).Note: These build configurations are the same as those available in the Visual Studio project that Unity generates. ",1983],[" **Debug** Produces a build that contains additional code you can use for debugging, and enables the [Profiler](windowsstore-profiler) for your build. \n",1983],[" **Release** Produces a build that has debug code stripped out, and enables the [Profiler](windowsstore-profiler) for your build. \n",1983],[" **Master** Produces a build that's fully optimized for release. \n",1983],["Copy References Disable this setting to allow the generated solution to reference Unity files from Unity's installation folder instead of copying them to the build folder. This can save up to 10 GB of disk space, but you can't copy the build folder to another PC. Unity also builds your application faster when you disable this setting. ",1983],["Copy PDB files Enable this setting to include Microsoft program database (PDB) files in the built Player. PDB files contain debugging information for your application, but might increase the size of your Player. For more information, refer to Windows debugging. ",1983],["Development Build A development build includes scripting debug symbols. When you select this option, Unity sets the DEVELOPMENT_BUILD scripting define. Your build then includes preprocessor directives that set DEVELOPMENT_BUILD as a condition. For more information, refer to Platform dependent compilation. ",1983],["Autoconnect Profiler Indicates whether to automatically connect the Profiler to the built application when it runs.This property is visible only when Development Build is enabled. ",1983],["Deep Profiling Indicates whether to enable Deep Profiling in the Profiler. This makes the Profiler instrument every function call in your application so it returns more detailed profiling data. This option might slow down script execution.This property is visible only when Development Build is enabled. ",1983],["Script Debugging Indicates whether to allow debugging for the application’s script code.This property is visible only when Development Build is enabled. ",1983],["Compression Method Specifies the method Unity uses to compress the data in your Project when it builds the Player. This includes Assets, Scenes, Player settings, and GI data. ",1983],[" **Default** The Default compression is set to None. \n",1983],[" **LZ4** LZ4 is a fast compression format that's useful for development builds. This compression can improve loading time of applications built with Unity. For more information, see [BuildOptions.CompressWithLz4](ScriptRef:BuildOptions.CompressWithLz4.html). \n",1983],[" **LZ4HC** LZ4HC is a high compression variant of LZ4 that's slower to build but produces better results for release builds. This compression can improve loading time of applications built with Unity. For more information, see [BuildOptions.CompressWithLz4HC](ScriptRef:BuildOptions.CompressWithLz4HC.html). \n",1983],["Additional resources",1983],["Command line arguments for UWP",1984],["You can launch Unity Players from the command line and pass in arguments to change how the Player executes. Universal Windows Platform (UWP) apps don’t accept command line arguments by default, so you have to pass them to an AppCallbacks constructor in App.xaml.cpp or App.cpp to specify them.",1984],["This code example demonstrates how to do this:",1984],["m_AppCallbacks =",1984],["ref new AppCallbacks",1984],["ref new Platform::Array",1984],["L\"-force-gfx-direct\"",1984],[");",1984],["For more information on command line arguments for UWP, refer to Unity Standalone Player command line arguments.",1984],["Deploy a UWP application",1985],["To deploy your Universal Windows Platform (UWP) application, you first need to build your project. After Unity generates your Visual Studio solution, you can deploy your application. For more information, refer to Microsoft documentation on deploying UWP apps from Visual Studio.",1985],["Use the following steps to deploy your UWP application:",1985],["On the Visual Studio debugger toolbar, choose the deployment target from the dropdown list next to the Start Debugging button.If you are deploying to a remote device, refer to Microsoft documentation on how to specify a remote device.",1985],["On the Build menu, choose Deploy.",1985],["Additional resources",1985],["Deploy a UWP app with the Windows Device Portal",1986],["You can use the Windows Device Portal to build and run Universal Windows Platform (UWP) applications to a remote Windows 10+ device directly from the Unity Editor, alleviating the need to generate a Visual Studio project. Being connected remotely to a remote Windows device allows you to make faster iterations for testing your Unity Project.",1986],["Set up the Device Portal",1986],["Before you set up the Device Portal in Unity, make sure that you enable Developer Mode and Device Portal on your Windows device using the For Developer section in Settings (Settings > Privacy & security > For developers).",1986],["To access the Device Portal settings for your Unity project:",1986],["Go to File > Build Settings.",1986],["From the list of platforms in the Platform panel, select UWP.",1986],["Set Build and Run on as Remote Device (via Device Portal).",1986],["Fill in the following fields that appear.",1986],["Setting Description ",1986],["------------------------------------------------------------------ ----------------------------------------------------------------- ",1986],["Device Portal Address Enter the IP address and port number for the Device Portal. On Windows, locate the address in Privacy & security > For Developers > Device Portal > Connect using. ",1986],["Device Portal Username Enter the username for the Device Portal. This is optional if you enable WDP authentication. ",1986],["Device Portal Password Enter the password for the Device Portal. This is optional if you enable WDP authentication. ",1986],["Unity saves the Device Portal Address and Device Portal Username fields in Project settings. For security purposes, Unity doesn’t save your Device Portal password, so you might need to re-enter your password when you restart the Editor or load a new project.",1986],["Tip:** You can also use the Executable Only build type with Device Portal deployment. This makes iteration times faster on devices like HoloLens.",1986],["Run your app on the remote device",1986],["When you have completed the setup for the Device Portal, select Build and Run. This builds the UWP app, deploys it to the remote device, and then launches it.",1986],["Generate your Visual Studio C++ solution",1987],["When you build a project from Unity for Universal Windows Platform (UWP), Unity automatically generates a Visual Studio solution.",1987],["Create your Visual Studio C++ solution",1987],["Unity generates a Visual Studio solution containing the following projects:",1987],["Project Description ",1987],["------------------------------------------------------------------ ----------------------------------------------------------------- ",1987],["projectName Contains your main project code. Visual Studio builds this project into an application package, which you can deploy to a device or uploaded to the Microsoft Store. Note: Unity doesn’t overwrite this project when you build on top of it. ",1987],["Unity Data Contains all the Unity-specific files you need to build your project, such as assets. ",1987],["Il2CppOutputProject Contains the generated C++ code which Unity converts from managed assemblies. Note: This project is overwritten every time you build over it. ",1987],["Visual Studio build configurations",1987],["Unity provides the following build configuration options in Visual Studio:",1987],["Configuration Description ",1987],["------------------------------------------------------------------ ----------------------------------------------------------------- ",1987],["Debug Use Debug to debug your code. This configuration: - Disables all optimization. - Preserves all debugging information in the code. - Results in code that runs slowly. - Results in the fastest build time. ",1987],["Release Use Release to profile your game. This configuration: - Enables code optimizations. ",1987],["Master Use Master for game submission and final testing. This configuration: - Disables the profiler. - Results in the same build time as the Release configuration. - Results in the same build time as the Release configuration. ",1987],["MasterWithLTCG Use MasterWithLTCG for game submission and final testing. This configuration: - Enables link time code generation for generated C++ code, IL2CPP runtime, and IL2CPP garbage collection. - Results in much longer build times compared to the Master configuration. - Results in an application that executes faster than the Master configuration. ",1987],["Connect the profiler to UWP",1988],["You can use the Unity profiler to get performance information about your application. For more information, refer to Profiling your application.",1988],["Due to restrictions with UWP, you won’t be able to connect the profiler if the Unity Editor is running on the same machine as UWP. Therefore, make sure to run the Unity Editor and UWP on separate machines. For example, if you’re running the Unity Editor and UWP on the same PC, you won't be able to connect the profiler. The only exception to this rule is the Autoconnect Profiler build option, which makes the application connect to the Editor instead.",1988],["You must also ensure that the machine where the Unity Editor is running and the machine where the Universal Windows App is running are on the same subnet.",1988],["Note:** The profiler doesn’t work on Master configuration.",1988],["Connect the Unity profiler",1988],["To connect the Unity profiler to a running Universal Windows application, perform the following steps:",1988],["Go to Edit > Project Settings > Player.",1988],["Select the Publishing Settings > Capabilities section.",1988],["Enable Private Networks Capability.",1988],["Enable Internet (Client & Server) Capability.",1988],["If you’ve already selected the Autoconnect Profiler checkbox in Build Settings, the profiler should connect automatically to the Universal Windows App. If not, you have to explicitly select it in Unity in Window > Analysis > Profiler > Active Profiler.",1988],["Build the Universal Windows App Visual Studio solution from Unity.",1988],["Select Build and Run.",1988],["WinRT API in C# scripts for UWP",1989],["You can use the WinRT API directly in Unity scripts when you have Windows Runtime support enabled. For information on how to use the WinRT API and enable Windows Runtime support, refer to Windows Runtime support.",1989],["You need to meet the following requirements to use WinRT API in your Unity scripts:",1989],["Your scripts must be written in C#.",1989],["Your API compatibility level must be set to .NET 4.6 or .NET Standard 2.0 in the Player settings.",1989],["All the code that uses WinRT API must be under the ENABLE_WINMD_SUPPORT directive. This is necessary because the Editor uses Mono, which doesn't support WinRT APIs.",1989],["This code example demonstrates how to get advertising using WinRT API directly:",1989],["```C#",1989],["using UnityEngine;",1989],["public class WinRTAPI : MonoBehaviour",1989],["void Update()",1989],["auto adId = GetAdvertisingId();",1989],["// ...",1989],["string GetAdvertisingId()",1989],["if ENABLE_WINMD_SUPPORT",1989],["return Windows.System.UserProfile.AdvertisingManager.AdvertisingId;",1989],["else",1989],["return \"\";",1989],["endif",1989],["Additional resources",1989],["Universal Windows Platform",1990],["Universal Windows Platform (UWP) provides a common app platform on every device that runs Windows, such as Windows 10+, HoloLens, and more. You can use UWP to build your Unity apps for any Windows device and publish them to the Microsoft Store, without needing to rewrite the app for each platform.",1990],["Topic Description ",1990],["------------------------------------------------------------------------ ----------------------------------------------------------- ",1990],["Introduction to Universal Windows Platform Understand the key requirements and concepts for UWP. ",1990],["Get started with Universal Windows Platform Learn about UWP-specific settings and how to set up a project for UWP development. ",1990],["Develop for Universal Windows Platform Understand UWP-specific development information, such as deep linking, profiler connection, and more advanced topics. ",1990],["Build and deliver for Universal Windows Platform Build and deliver your content for UWP. ",1990],["Additional resources",1990],["\"Windows Store\" platform renamed as \"Universal Windows Platform\" in Unity 2017.1 NewIn20171",1990],["Create a ragdoll",1991],["Unity has a simple wizard that lets you quickly create your own ragdoll. You simply have to drag the different limbs on the respective properties in the wizard. Then select create and Unity will automatically generate all Colliders, Rigidbodies and Joints that make up the Ragdoll for you.",1991],["Create the character",1991],["Ragdolls make use of Skinned Meshes, that is a character mesh rigged up with bones in the 3D modeling application. For this reason, you must build ragdoll characters in a 3D package like Autodesk® Maya®.",1991],["When you've created your character and rigged it, save the asset normally in your Project Folder. When you switch to Unity, you'll see the character asset file. Select that file and the Import Settings dialog will appear inside the inspector. Make sure that Mesh Colliders is not enabled.",1991],["Use the Ragdoll Wizard",1991],["It's not possible to make the actual source asset into a ragdoll. This would require modifying the source asset file, and is therefore impossible. You will make an instance of the character asset into a ragdoll, which can then be saved as a Prefab for re-use.",1991],["Create an instance of the character by dragging it from the Project View to the Hierarchy View. Expand its Transform Hierarchy by clicking the small arrow to the left of the instance's name in the Hierarchy. Now you are ready to start assigning your ragdoll parts.",1991],["Open the Ragdoll Wizard by choosing GameObject > 3D Object > Ragdoll... from the menu bar. You will now see the Wizard itself.",1991],["Assigning parts to the wizard should be self-explanatory. Drag the different Transforms of your character instance to the appropriate property on the wizard. This should be especially easy if you created the character asset yourself.",1991],["When you are done, click the Create Button. Now when you enter Play Mode, you will see your character go limp as a ragdoll.",1991],["The final step is to save the setup ragdoll as a Prefab. Choose Assets -> Create -> Prefab from the menu bar. You will see a New Prefab appear in the Project View. Rename it to \"Ragdoll Prefab\". Drag the ragdoll character instance from the Hierarchy on top of the \"Ragdoll Prefab\". You now have a completely set-up, re-usable ragdoll character to use as much as you like in your game.",1991],["Note",1991],["For Character Joints made with the Ragdoll wizard, the joint's Twist axis corresponds with the limb's largest swing axis, the joint's Swing 1 axis corresponds with the limb's smaller swing axis, and the joint's Swing 2 axis is for twisting the limb. This naming scheme is for legacy reasons.",1991],["3D World Building feature set",1992],["Create 3D, open-world environments with the 3D World Building feature set, and round-trip assets between your preferred 3D modeling software using FBX interoperability to realize your creative intent. Create geometry, sculpt meshes and terrain, Blend textures, and place objects and vegetation throughout your scene using artist friendly tools to create believable, interactive environments.",1992],["Packages",1992],["The 3D World Building feature set contains the following packages:",1992],["Samples",1992],["Asset Store",1992],["Package samples",1992],["The following packages have package samples:",1992],["Related forums",1992],["Public roadmap",1992],["Find out about upcoming features in the 3D World Building roadmap.",1992],["Xcode frame debugger Unity integration",1993],["The Xcodeframe debugger tool lets you capture a frame of your application to see the commands that the GPU performed during that frame, examine data in GPU memory, and identify bottlenecks in your shaders. This lets you analyze GPU performance in fine detail.",1993],["Unity integrates with the Xcode frame debugger in the following ways:",1993],["On macOS, iOS, and tvOS, you can use Xcode frame debugger to analyze frames from your application while it's running on the target device.",1993],["On macOS, you can use Xcode frame debugger to analyze frames from the Unity Editor.",1993],["Important:**",1993],["Frame debugging only works if the application is running on a platform and graphics API that Xcode supports.",1993],["Xcode only supports macOS with Metal graphics.",1993],["If Unity uses another API, the Xcode integration is disabled until you select a supported graphics API.",1993],["Capture a frame from your application",1993],["To use the Xcode frame debugger to capture a frame from do one of the following:",1993],["Launch your application from Xcode and either use the Xcode UI or the FrameCapture API to request frame captures. You can analyze the frame captures in Xcode immediately, or save them to disk. This workflow is supported on all platforms that use Metal.",1993],["Launch your application directly from the command line without an Xcode project, and use the FrameCapture API to save frame captures to disk. Note: iOS doesn't support this workflow.",1993],["Capture a frame from your application with Xcode",1993],["This section describes how to launch your application and perform a frame capture using the Xcode UI or the FrameCapture API. This workflow is supported on all platforms that use Metal.",1993],["Create an Xcode project.**",1993],["You can either create an Xcode project from the Unity Editor, or use any other Xcode project to launch macOS applications.",1993],["To build an Xcode project from the Unity Editor:",1993],["Open the Build Settings window (File > Build Settings).",1993],["macOS only: Enable Create Xcode Project.",1993],["Click Build.",1993],["To use another Xcode project to launch macOS applications:",1993],["In Xcode, create a new, empty macOS project, or open an existing macOS project.",1993],["Go to Product > Scheme > Edit scheme, and open the Info tab.",1993],["Set Executable to your built Unity application.",1993],["Edit the Xcode project scheme so that you can perform frame captures.**",1993],["Either, use the Xcode GUI. To do this, follow the Enabling Frame Capture guide in the Xcode documentation to set your project scheme’s GPU Frame Capture setting to Metal.",1993],["You can also use the XcScheme API to configure an Xcode project scheme, which is useful for automated builds. For more information, see the XcScheme API documentation.",1993],["Launch your project from Xcode, and perform a frame capture.**",1993],["In Xcode, press the Frame Capture button (camera icon) to capture the next frame of data.",1993],["You can also use the FrameCapture API to perform a frame capture from a script. For information on analyzing frame capture data in Xcode, see the Xcode frame debugger documentation.",1993],["Capture a frame from your application with the command line",1993],["This section describes how to launch your application from the command line, perform a frame capture using the FrameCapture API, and save the results to disk. Important: This workflow isn't supported on iOS. To perform frame captures on iOS, you must always launch your application from Xcode.",1993],["Add calls to FrameCapture.BeginCaptureToFile and EndCapture to your code, so that you can perform frame captures as required.",1993],["Launch your application from the command line, with the following flag: -enable-metal-capture. Xcode performs frame captures when your code requests them, and saves the results to disk.",1993],["For information on how to analyze this data in Xcode, see Apple’s Xcode frame debugger documentation.",1993],["Capture a frame from the Unity Editor",1993],["On macOS, you can use Xcode frame debugger to analyze frames from the Unity Editor. If you use Xcode to launch the Unity Editor, you can request frame captures from the Unity Editor UI.",1993],["Capture a frame from Unity Editor with Xcode",1993],["Follow these steps to launch the Unity Editor from Xcode and perform a frame capture using the Unity Editor UI, the Xcode UI, or the FrameCapture API. You can analyze the frame capture immediately, or save the results to disk. This workflow is supported on macOS.",1993],["Preqrequisite:** If the Unity Editor is open, close it.",1993],["In Xcode, create a new, empty macOS project, or open an existing macOS project.",1993],["Go to Product > Scheme > Edit scheme, and open the Info tab.",1993],["Set Executable to Unity Editor.",1993],["Follow the Enabling Frame Capture guide in the Xcode documentation to set your project scheme’s GPU Frame Capture setting to Metal.",1993],["Optional - If you have the Unity Hub installed: Go to the Arguments tab in the Xcode Scheme settings window and pass the path to your Unity project as an argument using -projectPath. This is to prevent the Unity Hub from opening when Xcode launches the Editor and instead directly debug the Editor with your project.",1993],["Run the Xcode project to launch the Unity Editor.",1993],["Perform a frame capture using one of the following methods:",1993],["Unity Editor:** Use the Xcode Capture button to the right of the Scene view or Game view to perform a frame capture.",1993],["Xcode:** Select the Frame Capture button (camera icon) to capture the next frame of data.",1993],["Script:** Use the FrameCapture API. For more information, see the FrameCapture API documentation.",1993],["For information on analyzing frame capture data in Xcode, see Apple’s Xcode frame debugger documentation.",1993],["Capture a frame from the Unity Editor with the command line",1993],["This workflow describes how to launch the Unity Editor from the command line, use the FrameCapture API to perform a frame capture, and save the frame capture to disk. This workflow is supported on macOS.",1993],["Add calls to FrameCapture.BeginCaptureToFile and EndCapture to your code, so that you can perform frame captures as required.",1993],["Launch the Unity Editor from the command line, with the following flag: -enable-metal-capture. Xcode performs frame captures when your code requests them, and saves the results to disk.",1993],["For information on how to analyze this data in Xcode, see the Xcode frame debugger documentation.",1993],["Additional resources:",1993],["XR audio",1994],["You can use 3D audio to enhance the immersiveness of your VR game or application. 3D audio goes beyond typical stereo or multi-speaker audio set ups that typically change only the relative volume of point audio sources in each speaker.",1994],["An ambisonic decoder plug-in decodes specially recorded ambisonic audio. Ambisonic encoding is often used for ambient sound sources, sometimes described as an \"audio skybox.\" While you can use ambisonic",1994],["You can use both spatializer and ambisonic decoder plug-ins outside of VR applications, although they might not have the same fidelity without head tracking.",1994],["Choose XR provider plug-ins",1995],["Provider plug-ins are packages created to support XR devices and platforms.",1995],["Use the XR Plug-in Management settings to manage which XR devices and platforms your project supports. You can also configure key settings for these XR provider plug-ins.",1995],["See XR provider plug-in framework for information about provider plug-ins and how they work.",1995],["Prerequisites",1995],["Before you can enable XR plug-ins, you must install the XR Plug-in Management package. You can install the package directly from the Project Settings window:",1995],["Open the Project Settings window (menu: Edit > Project Settings).",1995],["Select XR Plug-in Management from the list of settings areas along the left side of the settings window.",1995],["Before installing the XR Plug-in Management package",1995],["If necessary, click Install XR Plug-in Management.",1995],["After installing the XR Plug-in Management package",1995],["The XR Plug-in Management settings page displays a tab for each available build target. Each tab displays the list of available XR provider plug-ins for that platform. This list contains the plug-ins officially supported by Unity or its partners and also any third-party provider plug-ins you have installed with the Package Manager.",1995],["Tip:** Use the Unity Hub to install platform modules, such as Android or iOS, to add support for additional build targets. See Add modules in the Unity Hub documentation for instructions.",1995],["Enable provider plug-ins",1995],["When you enable a plug-in, XR Plug-in Management installs the associated package.",1995],["To enable a provider plug-in:",1995],["Open the Project Settings window (menu: Edit > Project Settings) and select the XR Plug-in Management section.",1995],["Select the tab for the target build platform. For example, to enable a plug-in for a device that runs the Android operating system, click the tab with the Android icon.",1995],["Android build platform with the ARCore provider enabled",1995],["Enable the desired provider plug-in.",1995],["Repeat for additional plug-ins.",1995],["Notes:**",1995],["Disabling a provider does not remove the package; to remove a provider plug-in, remove the associated package with the Package Manager.",1995],["If you do not see a provider in the list, you might need to install the associated package with the Package Manager. Some provider plug-in packages are distributed by the device maker, not by Unity.",1995],["Set provider plug-in options",1995],["After you enable a provider plug-in and Unity installs the associated package, any settings for the provider are displayed as subsections under the XR Plug-in Management settings.",1995],["Oculus provider plug-in settings under XR Plug-in Management",1995],["If a plug-in supports more than one build target, its settings page includes a tab so that you can configure the settings for each target independently.",1995],["To configure the settings for a provider plug-in:",1995],["Open the Project Settings window (menu: Edit > Project Settings).",1995],["Under XR Plug-in Management, select the name of the provider plug-in.",1995],["If present, select the tab for the platform build target. For example, to configure settings for Android devices, click the tab with the Android icon. (The tabs are only shown when a plug-in supports more than one build target.)",1995],["Configure the settings as required.",1995],["See the documentation of individual plug-ins for information about plug-in settings. You can access the documentation using the View documentation link in the Package Manager.",1995],["Use the View documentation link to access plug-in documentation",1995],["Project validation",1995],["Some provider plug-ins and other packages implement project validation checks to help ensure that your project is set up correctly. You can view the status of these checks on the Project Validation section underneath XR Plug-in Management on the Player Settings window.",1995],["Project validation checks",1995],["If a validation check is followed by a Fix button, you can click the button to automatically fix the issue. Otherwise, you must fix the issue manually. Clicking Edit opens the settings UI to the appropriate section so that you can make any needed changes. Validation checks marked with a red stop icon must be corrected. Checks marked with a yellow warning icon can be ignored or deffered, but you should fix them if possible for best performance or compatibility.",1995],["Refer to XR project validation window for additional information.",1995],["Support multiple provider plug-ins",1995],["You can enable more than one provider plug-in to support multiple XR devices and platforms in the same project.",1995],["Note:** In some cases, one provider plug-in can support more than one device and operating system. For example, the OpenXR plug-in supports multiple XR devices, operating systems, and build targets.",1995],["Unity includes all the enabled plug-ins for the current build target when you make a build. At runtime, Unity uses the first plug-in that loads successfully. Unity attempts to load provider plug-ins in the order they are shown in the XR Plug-in Management list, which is in alphabetical order by default. If you need more control over which plug-in is loaded, you can do one of the following:",1995],["Disable Initialize XR at startup and include your own application logic for selecting the provider at runtime.",1995],["Include your own custom build script to sort the list of providers in the desired order.",1995],["Manually enable only the desired provider before building.",1995],["See XR loading for more information about customizing how provider plug-ins are loaded and initialized.",1995],["Note**: The Mock HMD Loader plug-in only works in the Unity Editor during Play mode and does not affect builds.",1995],["Create an XR project",1996],["To create an XR project, you can use an XR template from the Unity Hub or start with a non-XR project.",1996],["Prerequisites",1996],["To create an XR project, you must first perform the following tasks:",1996],["Install the Unity Editor.",1996],["Add Editor modules to support the platform build targets on which the XR devices that you want to support run. For example, to support Android devices with ARCore or Meta Quest devices, you must add the Android module to your Editor using the Unity Hub.",1996],["Note:** The makers of some XR devices might impose additional requirements, such as signing up for a developer account, in order to create applications for their platform. Such requirements are outside the scope of Unity documentation.",1996],["",1996],["Create a new XR project",1996],["The quickest way to create a new XR project is with the AR or VR template in the Unity Hub. Projects you create with one of these templates are already configured with the XR Plug-in Management system, common XR plug-in and support packages, and a starting scene set up with the basic XR components.",1996],["Open the Unity Hub.",1996],["In the Hub, click the New Project button.",1996],["To start from a template, select the VR Core or AR Core template.",1996],["If necessary, click Download template.",1996],["Set a project name and save location.",1996],["Click Create project.",1996],["After the project opens in the Editor, configure the project's XR plug-ins with the XR Plug-in Management system.",1996],["Add additional XR packages, such as AR Foundation and the XR Interaction Toolkit, using the Package Manager.",1996],["Set up an XR scene.",1996],["Tip:** After you create an XR project, go to the XR Plug-in Management section in your Project Settings and enable the plug-ins for the platforms you want to support. If you don't see a platform tab on the XR Plug-in Management page, add the platform module to your Editor installation using the Unity Hub.",1996],["",1996],["Start from a non-XR project",1996],["You can always convert an existing non-XR project:",1996],["Use the Unity Hub to open the project.",1996],["In the Editor, configure the project's XR plug-ins with the XR Plug-in Management system.",1996],["Add additional XR packages, such as AR Foundation and the XR Interaction Toolkit, using the Package Manager.",1996],["Set up an XR scene.",1996],["Remove example assets",1996],["If you create a project using one of the XR templates, but do not intend to use the included example assets, you can remove them:",1996],["In the Project window, open the Assets folder.",1996],["Right-click the ExampleAssets folder.",1996],["Select Delete.",1996],["In the dialog that appears, click Delete.",1996],["Note:** The sample scenes in the templates use assets in the ExampleAssets folder. If you remove the folder, you should also remove the following items from the sample scenes:",1996],["AnchorCreator script from the AR Session Origin GameObject (AR template)",1996],["XRControllerLeft GameObject (VR template)",1996],["XRControllerRight GameObject (VR template)",1996],["Plane GameObject (VR template)",1996],["XR graphics",1997],["Graphics and rendering in an XR app follow the same principles as they do in any Unity application, with some differences arising from the need for stereo rendering and increased efficiency.",1997],["XR apps generally require very high and consistent framerates for user comfort. At the same time, rendering in stereo means that every visible object must be drawn twice from different perspectives. Techniques like single-pass rendering can improve rendering efficiency by reducing the duplication of effort, but also require changes to shader code.",1997],["XR input options",1998],["The main options to handle input in an XR game or application include:",1998],["The XR Interaction Toolkit",1998],["OpenXR interaction profiles",1998],["\"Traditional\" input through the Input System or Input Manager",1998],["The XR.InputDevice and XR.Node APIs",1998],["Third-party input libraries",1998],["In some cases, you might use more than one of these options at the same time. For example, you could use the XR Interaction Toolkit to allow the user to pick up objects in the environment, use the Input System to bind a pause function to a controller button, and use the XR.Node API to read the hardware state so that you can animate the controller GameObject.",1998],["Note:** The OpenXR plug-in, which supports many different XR devices and controllers, provides its own, additional way to access XR input and tracking data. You can still use the XR Interaction Toolkit, the Input System, or the XR.InputDevice and XR.Node APIs. (The legacy Input Manager is not supported when you use the OpenXR plugin.) See Input in Unity OpenXR for more information.",1998],["XR Interaction Toolkit",1998],["The XR Interaction Toolkit builds on the Input System and the base UnityEngine.XR API to support XR input. It provides a near ready-to-use set of components for handling XR input and defining interactions between the user and the environment and the scene UI. Even if you choose not to use the toolkit's interaction system, you can use the input components as a starting point to save set-up effort. The toolkit provides two basic approaches to handling input:",1998],["Action-based** input provides the most flexibility and makes it easier to support multiple controller and input schemes. The XR Interaction Toolkit defines actions for common XR input needs. To use these actions, add the XR Controller (Action-Based) component to your controller GameObjects. This component is already part of XR Origin configuration that you can add to your XR scene (unless you choose the device-based option).",1998],["Device-based** input is simpler to set up than action-based input, but is not as flexible. To use device-based input with the XR Interaction Toolkit, add the XR Controller (Device-Based) component to your controller GameObjects. This component is already part of the XR Origin configuration when you add it to the scene with the GameObject > XR > Device-based > XR Origin menu command.",1998],["See Actions for more information about Input System Actions.",1998],["Tip:** The Starter Assets available in the XR Interaction Toolkit provide presets and input actions that remove most of the rote setup work involved in using action-based input.",1998],["The XR Interaction Toolkit defines the following base interactions:",1998],["Select**: intended for selecting Interactables in the environment",1998],["Activate**: intended for activating Interactables in the environment",1998],["UI Press**: intended for pressing a control, such as a button, in a UI",1998],["Rotate anchor**: intended for rotating an object held at a distance (with the X-Ray Interactor)",1998],["Translate anchor**: intended for moving an object held at a distance (with the X-Ray Interactor)",1998],["The XR Interaction Toolkit uses these interactions with additional components to let the user interact with the environment. For example, if you add a GrabInteractable component to an object, the user can trigger Select to grab it. By default, select is bound to the grip button of an XR controller, but you can change the binding as you see fit. You can also use your own actions and bindings alongside those defined by the toolkit.",1998],["Input System or Input Manager",1998],["You can access the controls of XR Controllers, such as buttons and joysticks, in the same ways you would access any game controller. To access tracking data, use the XR.InputTracking API in code. You can also use the Input System TrackedPoseDriver component to control a GameObject with a tracked device such as a HMD or controller. The TrackedPoseDriver component is also available from the Legacy Input Helpers package, in case you are not using the Input System.",1998],["Note:** When you use the OpenXR plug-in, you must use the Input System. The Input Manager is not supported.",1998],["XR Hand tracking input",1998],["The XR Hands package provides access to hand tracking data from XR devices that support it. To access this data, you must also use an XR provider plug-in that has been updated to support hand tracking, such as OpenXR version 1.7.",1998],["The XR Hands package provides the following:",1998],["The XRHandTrackingSubsystem which allows an XR device to send hand data to a Unity app.",1998],["A hand tracking API Unity apps can use to access the data.",1998],["Support for the OpenXR Meta Aim Hand feature extension, which provides a gesture aiming system along with OpenXR input bindings for hand tracking data.",1998],["XR Input APIs",1998],["The XR Input APIs provide direct access to XR input. The API lets you find connected XR devices and read their tracking data and state of their input hardware.",1998],["See Unity XR Input for more information about the XR input API.",1998],["Third-party input APIs",1998],["Device makers and other third parties often provide their own input and interaction APIs that you can use instead of or in addition to those provided by Unity.",1998],["XR Origin",1999],["The XR Origin serves as the center of tracking space in an XR scene.",1999],["An XR Origin configuration is a set of GameObjects and components that work together to transform data from the XR tracking subsystems into world space. For example, the TrackedPoseDriver component on the Main Camera GameObject moves the Camera relative to the XR Origin using the tracking data for the user's headset or handheld device. See XR Origin for more information about the XR Origin.",1999],["XR devices provide tracking data in real-world units relative to a point chosen by the XR system at initialization. Unity aligns the XR Origin GameObject in a scene with this initial point.",1999],["GameObjects representing tracked entities, such as the user's headset or hand-held device, are children of the XR Origin GameObject in the scene hierarchy. This means that changes in position and rotation based on tracking updates are relative to the XR Origin. As the user moves in the real world, these child GameObjects move relative to the XR Origin in the scene. The XR Origin doesn't move on its own. However, you can move the XR Origin with a script to allow the user to teleport or move via controller input.",1999],["XR Origin configurations",1999],["The Unity XR packages provide a number of XR Origin configurations tailored for different types of XR applications. You can use the GameObject > XR menu to add an XR Origin to the current Scene. The available options depend on which packages you have added to your project.",1999],["XR type Rig Menu option Package Notes ",1999],[":------ :-- :---------- :------ :---- ",1999],["VR, MR XR Rig Convert Main Camera To XR Rig XR Legacy Input Helpers (installed with the XR Plug-in Management package) Replaces the standard Camera in a basic Unity Scene. The logic used to replace the main camera can fail in complex scenes. Unity removes this option when you install the XR Interaction Tools package. The XR Rig GameObject created by this menu option is slightly different than the XR Origin and might not be as compatible with other Unity XR features. ",1999],["VR, MR XR Origin XR Origin XR Core Utils (installed with the XR Interaction Toolkit package) Does not include GameObjects for controllers. ",1999],["VR, MR XR Origin (VR) XR Origin (VR) XR Interaction Toolkit Includes controller GameObjects set up for action-based input. ",1999],["VR, MR XR Origin (VR) Device-based > XR Origin (VR) XR Interaction Toolkit Includes controller GameObjects set up for device-based input. ",1999],["AR, MR XR Origin (AR) XR Origin (AR) AR Foundation Serves as the tracking origin for hand-held AR applications. Includes controller GameObjects. This option is available if you have the XR Interaction Toolkit installed. ",1999],["AR XR Origin (Mobile AR) XR Origin (Mobile AR) AR Foundation Serves as the tracking origin for hand-held AR applications. Does not include controller GameObjects. This option is replaced with XR Origin (AR) if you have the XR Interaction Toolkit installed. ",1999],["Notes:**",1999],["In the latest versions of the Unity XR packages, the XR Rig has been replaced with the XR Origin.",1999],["The XROrigin component also replaces the CameraOffset component, providing a few additional settings. See XR Origin component for more information.",1999],["The AR Session Origin configuration has been replaced with XR Origin (Mobile) and XR Origin (AR) in AR Foundation 5.0+.",1999],["The XR Origin (Mobile) and XR Origin (AR) configurations are not compatible with earlier versions of the AR Foundation package.",1999],["XR Plug-in Management settings",2000],["Use the XR Plug-in Management settings to configure XR support in a Unity project.",2000],["These settings let you choose which platforms and devices the project can target. After you have enabled an XR plug-in, you can find settings for that plug-in in its own section underneath XR Plug-in Management.",2000],[" The XR Plug-in Management section of the Project Settings",2000],["The XR Plug-in Management settings:",2000],["Label Setting Purpose ",2000],[":-: :------ :------ ",2000],["A Build target tabs A tab is shown for each platform build target installed for the current Unity Editor. You can add additional platform support modules with the Unity Hub. ",2000],["B Initialize XR on Startup Whether the game or application should start in XR mode immediately. If disabled, then your application logic is responsible for initializing XR at the appropriate time. For example, your app could start with a normal desktop display and then switch to XR on demand. See Automatic XR loading for more information. ",2000],["C Plug-in Providers The list of known XR provider plug-ins. This list contains the plug-ins officially supported by Unity or its strategic partners as well as any third-party provider plug-ins you have installed with the Package Manager. When you enable a provider plug-in, Unity adds the associated package to the project if it is not already installed. Disabling a plug-in does not remove the package. (You can remove packages with the Package Manager.) ",2000],["D Provider plug-in settings The settings for each installed XR provider plug-in appear in their own pages within the XR Plug-in Management section. For information about the available settings for a specific plug-in refer to that plug-in's documentation. You can find a list of plug-ins and links to their documentation in Provider plug-ins. ",2000],["E Project Validation Displays the results of project validation checks for the plug-ins you have enabled. To view the checks, select the Project Validation page inside the XR Plug-in Management section of your Project Settings. ",2000],["E XR Simulation settings The AR Foundation package provides an XR Simulation feature, which lets you test AR Scenes in the Unity Editor. See XR Simulation project settings for a description of these settings and options. ",2000],["",2000],["Project Validation",2000],["The project validation system helps you avoid common scene and project configuration issues for the XR packages you have installed. The XR packages you have installed can include rules for the validation system. The system evaluates these rules when you make a build and whenever you have the Project Validation window open. To open the window, go to your project settings (menu: Edit > Project Settings) and then select Project Validation in the XR Plug-in Management section. The rules are checked per platform build target. Some rules may examine the current scene to verify that the project settings support features used in that scene.",2000],["The Project Validation section of the XR Plug-in Management settings",2000],["Property Description ",2000],["Platform tabs The validation checks for each platform are grouped by platform. You can select a platform tab to view the validation checks for that platform. ",2000],["Issue list The list of issues found in the project when evaluating the rules. Each issue has a severity level, description, and action button. ",2000],["Show all Select to show all issues, regardless of severity. Issues marked with a green check indicate validation checks that passed and do not require any action. Successful checks are only displayed when you enable Show all. ",2000],["Ignore build errors Select to ignore build errors. This option can sometimes be useful when debugging build problems. ",2000],["Fix all Click to correct all issues that have a fix available. ",2000],["Tip:** If the issue has scene objects associated with it, you can click on the message to select or highlight these objects in the Unity Editor.",2000],["Severity level",2000],["The status icons to the left of an individual validation issue indicate the status and severity of the issue.",2000],["Status info ",2000],["--------------------------------------------------------------------- ----------- ",2000],[" Validation passed because the project and scene are either set up correctly, or the rule is not applicable. Successful checks are hidden in the project validation issue list unless you enable the Show all option. ",2000],[" Validation failed, but does not block building the project. You can safely ignore these if you have set up your project differently than recommended. ",2000],[" Validation failed and will block building the project. These issues cannot be ignored. You must fix them in order to build the project. ",2000],["Fix and Edit buttons",2000],["The Fix button automatically fixes the issue in your project or Scene. The Edit button takes you to the appropriate place in the Unity Editor where you can correct the issue in your project. Both the Fix and Edit buttons provide a tooltip explaining the steps to manually correct the issue.",2000],["Universal Render Pipeline compatibility in XR",2001],["Support for XR features in the Universal Render Pipeline (URP) varies by URP package version. This page details compatibility between XR features in Unity 2022.3 and the latest compatible URP version.",2001],["To determine which version of URP is compatible with your current Unity version, see the Requirements and compatibility page in the Universal Render Pipeline documentation.",2001],["Unity 2022.3 supports the following AR and VR features in the Universal Render Pipeline:",2001],["Feature Supported in XR ",2001],[":--- :--- ",2001],["Post-processing effects: Bloom Yes ",2001],["Post-processing effects: MotionBlur Yes ",2001],["Post-processing effects: Lens Distortion No ",2001],["Post-processing effects: Depth of Field Yes ",2001],["Post-processing effects: ToneMapping Yes ",2001],["Other post-processing effects (color adjustment, etc.) Yes ",2001],["GI (Global Illumination) Yes ",2001],["HDR Yes ",2001],["MSAA Yes ",2001],["Physical Camera No ",2001],["CopyColor / ColorDepth Yes ",2001],["Multi Display No ",2001],["Camera Stacking Yes ",2001],["Cascaded Shadow Yes ",2001],["sRGB Yes ",2001],["Skybox Yes ",2001],["Fog Yes ",2001],["Billboard Yes ",2001],["Shader Graph Yes (1) ",2001],["Particles Yes ",2001],["Terrain Yes ",2001],["2D UI (Canvas Renderer, Text Mesh Pro) Yes ",2001],["URP Debug (Scene View Mode, Frame Debug) Yes (2) ",2001],["(1) Although Shader Graph shaders can run in XR, Shader Graph doesn't currently support the XR utility feature to create SPI-compatible shader input textures. Unity will expand support for Shader Graph functionality in future releases.",2001],["(2) Unity supports frame debugging for mock HMDs. Currently, there is no support for Meta/Oculus.",2001],["To learn more about post-processing effects, see the Effect list page in the Universal Render Pipeline documentation.",2001],["Run an XR application",2002],["Running an XR app developed in Unity works the same as running any type of app on a device. In most cases, you can use the Unity Build and Run function to both build and run an app on a connected device.",2002],["Note:** The method you use to install an already built app on a device varies by platform, and you should refer to the platform's documentation for detailed information.",2002],["Build and Run",2002],["To build your game or application and run it on a device:",2002],["Connect the target device to your build computer.",2002],["Open the Build settings window (menu: File > Build Settings).",2002],["If necessary, choose the target platform and click Switch platform.",2002],["Choose the connected XR device from the Run device options in the build settings. (Not required on all platforms.)",2002],["Ensure the other build settings are correct.",2002],["Click Build And Run.",2002],["Tip:** After you have configured your build settings, you can build and run your project directly with the File > Build And Run menu command.",2002],["See Publishing Builds for more information about building Unity projects.",2002],["Play mode",2002],["On the Windows platform, some XR provider plug-ins support a \"hybrid\" play mode in which the project runs on a connected XR device when you enter Play mode. The Unity Game view mirrors the headset display. You have the choice of the following options for the Game view:",2002],["Left Eye**: shows the left eye only",2002],["Right Eye**: shows the right eye only",2002],["Both Eyes**: shows both eyes, side by side",2002],["Occlusion mesh**: shows the both eyes, side by side, mapped onto a mesh similar to that used by headsets to compensate for lens distortion.",2002],["Tip:** When developing for the Quest 2 or Pro, you can switch to the Windows platform and use the Quest Link to take advantage of the faster iteration turn around provided by Play mode compared to building and uploading your project to the device.",2002],["Mock HMD",2002],["The Mock HMD package provides a simulated HMD in the Unity Game view in Play mode. The Mock HMD is a provider plug-in that simulates the presence of a head-mounted device. Enable the Mock HMD in the XR Plug-in Management settings section. Input and tracking are not simulated.",2002],["See the Mock HMD documentation for more information.",2002],["Tip:** The XR Interaction Toolkit package provides an XR Device Simulator that translates keyboard and mouse input into movement and interaction.",2002],["XR Simulation",2002],["The AR Foundation package provides an XR Simulation feature that you can use to test AR apps in the Editor. The XR Simulation provides pre-built test environments that you can use in Play Mode. The simulation reports detected planes and other AR features as if you were navigating within a real environment. You can modify the provided environments and create your own.",2002],["See XR Simulation for more information.",2002],["Additional resources",2002],["Most XR devices use one of the existing OS platforms. For additional information about running projects on these platforms, see:",2002],["Set up an XR scene",2003],["To set up an XR scene, add an XR Origin.",2003],["These objects are collections of GameObjects and components that provide a frame of reference for transforming spatial tracking data into the scene, including controlling the scene camera. When you add an XR Origin to a scene, it controls the attached camera to track the user's head-mounted (VR) or hand-held (AR) device. In addition, the versions of the XR Origin that contain GameObjects for controllers will move them to track the user's controllers.",2003],["Notes**:",2003],["The older XR Rig name has been changed from \"rig\" to \"origin\" to better reflect the object's role in a Unity scene. In addition, the XR Origin component has replaced the Camera Offset component and provides a few additional settings. Refer to XR Origin component for more information.",2003],["The option to Convert Camera to XR Rig still appears in the GameObject > XR menu if you do not have the XR Interaction Toolkit package installed in the project. Although this option still works, Unity recommends using the appropriate XR Origin option from the XR Interaction Toolkit or AR Foundation packages for best compatibility with other XR features.",2003],["The AR Session Origin has been replaced by the XR Origin (AR) and XR Origin (Mobile AR) options in version 5 of the AR Foundation package.",2003],["The controller GameObjects included with some XR Origin objects do not have visual components, such as a mesh, and are not configured to receive user input other than tracking data. You must add 3D models and the components or scripts necessary to act upon user input, if desired. The XR Interaction Toolkit package provides components for handling user input.",2003],["Refer to XR Origin for a description of the XR Origin options available to use in a scene.",2003],["Prerequisites",2003],["Before you can set up a scene for XR, you must first:",2003],["Set up the project for XR.",2003],["Add the AR Foundation to the project, if you are developing an AR app.",2003],["Add the XR Interaction Toolkit package, if you plan to use it (recommended).",2003],["If you use the XR Interaction Toolkit, import the Starter Assets. These assets contain Input System actions and presets that you can use to configure XR controller input.",2003],["Set up a scene for XR",2003],["The basic steps to set up a scene for XR include:",2003],["Create or open the scene in the Unity Editor.",2003],["Add one of the XR Origin options to the scene with the GameObject > XR menu. You will see different options in the menu depending on which XR packages you have added to your project. Refer to XR Origin for a description of the available XR Origin options.",2003],["Configure XR input. See XR input options for more information.",2003],["For AR projects, refer to Scene setup in the AR Foundation manual for additional set up steps and more detailed instructions.",2003],["For VR projects using the XR Interaction Toolkit, see General Setup in the Interaction Toolkit manual for additional information.",2003],["Detect whether XR is enabled",2003],["If you have a scene that can be used in both XR and non-XR contexts, you can use the XRSettings.enabled property to detect whether the XR subsystems are currently loaded and active. With that information you can activate or deactivate the appropriate sets of GameObjects and components.",2003],["```lang-csharp",2003],["public void CheckXRStatus()",2003],["if (UnityEngine.XR.XRSettings.enabled)",2003],["Debug.Log(\"XR is active.\");",2003],["else",2003],["Debug.Log(\"XR is not available.\");",2003],["Note:** you can read the value of the XRSettings.enabled property to determine the XR status. However, setting the value is no longer supported and does nothing. For information about how to dynamically turn XR on and off at runtime, refer to Managing XR Loader Lifecycles Manually.",2003],["Unity XR SDK",2004],["The Unity XR SDK is aimed at specialist users who want to develop their own XR providers that work with Unity. To download XR SDK, you must sign up for access on this page.",2004],["The XR SDK package allows multiple backends (called \"providers\") to implement a single engine feature (called a \"subsystem\") in Unity. User applications can select and activate providers at runtime.",2004],["Subsystems",2004],["A single subsystem consists of:",2004],["A developer-facing C# interface",2004],["A native interface that multiple backends (Providers) implement via dynamic libraries",2004],["Common engine code which handles communicating with the C# interface, the native interface, and the rest of the engine",2004],["Subsystem descriptor",2004],["A subsystem descriptor is metadata about a subsystem which can be inspected before loading or initializing a subsystem. This comes from a manifest file and is accessed via a C# interface. A Create method activates the subsystem and provides an instance of it to the user's scripts.",2004],["For more information, see the Runtime discovery and activation of subsystems page.",2004],["Subsystem instance",2004],["When Create is called on a subsystem descriptor, this creates a subsystem instance. Scripting code interacts with these instances in order to communicate with the subsystem. The subsystem itself has its own lifecycle: it can be started, stopped, and shut down.",2004],["Provider",2004],["A provider is the native implementation of a subsystem. One subsystem can have multiple providers. Some subsystems can allow multiple providers to be active at a time, but others might be mutually exclusive.",2004],["Providers conform to the Unity native plug-in interface, with some additional lifecycle support built on top. The entry point is the UnityPluginLoad method. From there, the provider must register with all subsystems it intends to implement.",2004],["```c++",2004],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API",2004],["UnityPluginLoad(IUnityInterfaces* unityInterfaces)",2004],["s_XrDisplay = unityInterfaces->Get();",2004],["UnityLifecycleProvider displayLifecycleHandler =",2004],["NULL, // This can be any object you want to be passed as userData to the following functions",2004],["&Lifecycle_Initialize,",2004],["&Lifecycle_Start,",2004],["&Lifecycle_Stop,",2004],["&Lifecycle_Shutdown",2004],["};",2004],["s_XrDisplay->RegisterLifecycleProvider(\"Provider Plugin Name\", \"Display0\", &displayLifecycleHandler);",2004],["// Register with other subsystems...",2004],["Overview",2005],["Unity supports XR development on multiple platforms and devices through its XR plug-in framework. In addition, Unity provides a set of packages that add features and developer tools for building XR games and applications. This section provides an overview of the supported platforms and describes the software architecture behind the XR plug-in framework.",2005],["Topic Description ",2005],[":--- :--- ",2005],["XR packages Plug-ins and other packages that support XR development. ",2005],["AR overview Describes the basics of AR development in Unity. ",2005],["VR overview Describes the basics of VR development in Unity. ",2005],["XR architecture Describes the XR plug-in framework. ",2005],["See Project set up for instructions on how to add XR plug-ins to your project using the XR Plug-in Management system.",2005],["XR packages",2006],["The Unity packages that support XR development fall into two broad categories:",2006],["XR provider plug-ins: provider plug-ins enable support for XR devices and platforms. For example, the Apple ARKit plug-in allows AR applications to run on the iOS platform and the OpenXR plug-in allows applications to run on several VR and MR systems.",2006],["Feature and tool support packages: these packages provide features and tools for developing XR applications.",2006],["",2006],["XR provider plug-ins",2006],["The Unity XR plug-in framework provides the basis for XR development in Unity. You can add support for an XR device to a project by installing and enabling the relevant XR plug-in. You can add or remove plug-ins to the project at any time.",2006],["See XR Project set up for instructions on how to add XR plug-ins to your project using the XR Plug-in Management system.",2006],["Unity supports the following XR plug-ins:",2006],["Plug-in Supported devices ",2006],[":------ :---------------- ",2006],["Apple ARKit iOS devices ",2006],["Google ARCore Handheld Android devices ",2006],["Magic Leap Magic Leap 2 ",2006],["Microsoft HoloLens HoloLens, HoloLens 2 ",2006],["Microsoft Windows Mixed Reality Microsoft supported package for HoloLens and Windows Mixed Reality headsets (various manufacturers). Note: In Unity 2021+. use the OpenXR provider plug-in for Windows Mixed Reality. The previous WMR provider package is not supported beyond Unity 2020.3. Refer to Windows Mixed Reality support for more information. ",2006],["Oculus Oculus Rift, Meta Quest 2, Quest Pro ",2006],["OpenXR Any device with an OpenXR runtime, including Meta headsets, Vive headsets, Valve SteamVR, HoloLens, Windows Mixed Reality, and others. ",2006],["PlayStation VR (available to registered PlayStation developers) Sony PS VR and PS VR2 devices. See PlayStation Partners for more information. ",2006],["Refer to XR Platform System Requirements for system requirements for developing XR projects in Unity.",2006],["Notes:**",2006],["One plug-in can support more than one type of XR device and more than one operating system.",2006],["Plug-ins for additional XR devices might be available from their platform creators or other third parties.",2006],["Unity does not directly support XR on WebGL. Projects that add support for WebXR, such as Needle Engine, SimpleWebXR, and WebXR Export, are available.",2006],["",2006],["XR support packages",2006],["Unity's XR packages build on the XR plug-in framework to add additional application-level features and developer tools.",2006],["The XR packages include:",2006],["Package Description ",2006],[":------ :---------- ",2006],["XR Plug-in Management Adds Project Settings for managing the platforms and plug-ins used by a Unity XR project. See Project setup for information about managing XR plug-ins. ",2006],["AR Foundation Provides cross-platform AR features, such as plane detection, meshing, and object tracking. Required for developing AR applications with the Unity XR packages. ",2006],["XR Interaction Toolkit Provides interaction components for adding controller-based interaction and manipulation, UI interaction, and movement. Supports VR, MR, and AR. ",2006],["XR Hands Provides an interface for accessing hand tracking data in an XR application. You must also use a provider plug-in that has been updated to support hand tracking, such as OpenXR version 1.7. ",2006],["Unity Mars Provides components and tools for adapting AR content to the user's surroundings. For example, it supplies a standard way of querying the environment to find suitable locations for adding your digital content to the scene. Requires a license that includes Unity Mars. See Unity Mars for information about license requirements. ",2006],["XR Core Utilities Contains software utilities used by other XR plug-ins and packages. Typically installed in your project as a dependency of other XR packages. ",2006],["XR Legacy Input Helpers Contains software utilities related to XR input. This package is being phased out, but is still installed as a dependency by some XR packages. ",2006],["Note:** If you use the AR Foundation package in a project, the version numbers of AR Foundation, ARCore, and ARKit must all match. In other words, if you are using version 4.2 of the AR Foundation package, you must also use version 4.2 of the ARCore and ARKit packages.",2006],["",2006],["XR package changes in Unity 2022.3",2006],["The following information describes the changes to XR packages in Unity 2022.3:",2006],["",2006],["Magic Leap support",2006],["Developing for the Magic Leap 1 is not supported after Unity 2020.3.",2006],["Unity version Package version Device model ",2006],[":-- :-- :-- ",2006],["Unity 2019.4-2020.3 com.unity.xr.magicleap@6.4 Magic Leap 1 ",2006],["Unity 2021.1-2022.1 No version supported. None ",2006],["Unity 2022.2+ com.unity.xr.magicleap@7.0 Magic Leap 2 ",2006],["",2006],["Windows Mixed Reality support",2006],["Use the OpenXR provider plug-in to develop for Windows Mixed Reality devices.",2006],["To configure the OpenXR provider plug-in for Windows MR:",2006],["In the Unity Editor, open Edit > Project Settings",2006],["Select the XR Plug-in Management category.",2006],["Choose the Windows, Mac, Linux tab.",2006],["In the Plug-in Providers list, enable OpenXR.",2006],["The OpenXR package installs, if necessary.",2006],["Click the Help icon next to the Windows Mixed Reality feature group option to open the Microsoft Mixed Reality OpenXR Plugin setup instructions.",2006],["Follow the the instructions to install the Microsoft Mixed Reality OpenXR plug-in. (The Microsoft Mixed Reality Feature Tool program lists the plug-in under its Platform Support category.)",2006],["Enable the Windows Mixed Reality feature group.",2006],["After you have installed the plug-in, review the OpenXR settings under XR Plug-in Management.",2006],["",2006],["Meta Quest support",2006],["",2006],["Quest 1 support",2006],["Meta has dropped support for the Quest 1 device as of version 51.0 of their Platform SDK. The Platform SDK is included in version 51.0 of the Oculus Integration package on the Unity Asset Store. To continue developing for the Quest 1, you must use version 50 or earlier of the Oculus Integration package. If needed, you can download this version from the Meta Quest downloads page: https://developer.oculus.com/downloads/package/unity-integration/50.0.",2006],["In addition, version 4+ of the Oculus provider plug-in package no longer supports Quest 1 development. You must use an earlier version of the Oculus provider plug-in to continue developing for the Quest 1. Because Oculus 4.0 is the verified package version on Unity 2022.3, you must downgrade to the lower package version.",2006],["To install version 3.3.0 of the Oculus package:",2006],["Open your project in the Unity Editor.",2006],["Click Oculus XR plug-in version 3.3.0.",2006],["The Editor Package Manager window opens, showing the Add package by name dialog",2006],["Click Add to install the last compatible version of the plugin.",2006],["Alternately, you can open the Add package by name dialog manually and enter the package id and version. You can also edit the project's package manifest file directly to reference the required package version:",2006],["\"com.unity.xr.oculus\": \"3.3.0\"",2006],["XR",2007],["XR is an umbrella term that includes the following types of applications:",2007],["Virtual Reality (VR): The application simulates a self-contained environment around the user.",2007],["Mixed Reality (MR): The application combines its own environment with the user’s real-world environment and allows them to interact with each other.",2007],["Augmented Reality (AR): The application layers content over a view of the real world.",2007],["The span between virtual to augmented reality is a continuum, with mixed reality falling somewhere in the middle, depending on the capabilities of a particular device and the intent of your application.",2007],["This documentation discusses how to develop XR applications in Unity:",2007],["Topic Description ",2007],[":--- :--- ",2007],["Overview An overview of how Unity supports XR development. ",2007],["Set up an XR Project How to set up a project for an XR game or application. ",2007],["Set up an XR scene How to add the GameObjects and components needed by an XR scene. ",2007],["Run an XR application How to build and run Unity XR projects during development. ",2007],["XR graphics XR-specific graphics topics. ",2007],["Unity XR SDK About the SDK available to headset and device makers for adding support for their hardware to Unity. ",2007],["Additional resources",2007],["Topic Description ",2007],[":-- :-- ",2007],["XR Interaction Toolkit samples Github repository with code samples using the XR Interaction Toolkit ",2007],["AR Foundation Samples Github repository of code samples using AR Foundation ",2007],["Unity Learn Free XR tutorials, projects and courses in Unity's online learning platform ",2007],["Unity Forum The Unity forum for XR ",2007],["Unity Blog XR posts on the Unity Blog ",2007],["What is AR, VR, MR, XR, 360? A glossary of XR terms ",2007],["XR architecture",2008],["Unity supports XR development through its plug-in framework and a set of feature and tool packages. Go to the XR Plug-in Management category in Project Settings to enable XR support in a Unity project and to choose the plug-ins for the XR platforms that your project supports. Use the Unity Package Manager to install the additional feature packages.",2008],["The following diagram illustrates the current Unity XR plug-in framework structure and how it works with platform provider implementations:",2008],["XR subsystems define a common interface for XR features. XR plug-ins implement these subsystem interfaces to provide data to the subsystem at runtime. Your XR application can access data for an XR feature through Unity Engine and package APIs.",2008],["",2008],["XR provider plug-in framework",2008],["An XR provider plug-in is a Unity plug-in that supports one or more XR device platforms. For example, the ARCore plugin supports the Android AR platform on hand-held Android devices, while the OpenXR plug-in supports several XR devices on multiple operating systems.",2008],["An XR provider plug-in implements interfaces defined by the Unity XR SDK. These interfaces are called subsystems. A plug-in that implements one or more subsystems is called a provider plug-in. Typically, a provider plug-in uses the device platform's native libraries to implement the Unity interfaces for their devices.",2008],["Unity uses subsystem interfaces to communicate with providers for various platforms, powering the XR features of your application. Because of these interfaces, you can reuse the same feature code in your application across all XR devices that have a provider for that feature.",2008],["Subsystems",2008],["XR subsystems give you access to XR features in your Unity app. The Unity XR SDK defines a common interface for subsystems so that all provider plug-ins implementing a feature generally work the same way in your app. Often you can change the active provider and rebuild your app to run on a different XR platform, as long as the platforms are largely similar.",2008],["The Unity Engine defines a set of fundamental XR subsystems. Unity packages can provide additional subsystems. For example, the AR Subsystems package contains many of the AR-specific subsystem interfaces.",2008],["The subsystems defined in the Unity Engine include:",2008],["Subsystem Description ",2008],[":-- :-- ",2008],["Display Stereo XR display. ",2008],["Input Spatial tracking and controller input. ",2008],["Meshing Generate 3D meshes from environment scans. ",2008],["Note:** Unity applications typically do not interact with subsystems directly. Instead, the features provided by a subsystem are exposed to the application through an XR plug-in or package. For example, the ARMeshManager component in the AR Foundation package lets you add the meshes created by the Meshing subsystem to a scene.",2008],["XR SDK Display subsystem",2009],["The XR SDK Display subsystem provides an interface for texture allocation, frame lifecycle, and blocking for cadence.",2009],["Texture allocation",2009],["Several device SDKs require that a texture is allocated through the SDK itself rather than the usual graphics APIs. If you use the XR SDK Display subsystem, you no longer need to rely on external plug-ins to blit or copy into the SDK texture.",2009],["The Display subsystem enables a plug-in provider to allocate the texture. Where possible, Unity renders directly to the texture to avoid unnecessary copies. Unity can also allocate the texture for you if needed.",2009],["In the following cases, Unity can't render directly to the texture and instead renders to intermediate textures and then blits or copies to your texture:",2009],["If image effects are in use, your texture will be last in the chain.",2009],["On PC with MSAA, Unity renders to a multisampled texture and then resolves into your texture at the end of the camera stack.",2009],["On mobile, with the multisample auto resolve extension, the texture will be implicitly resolved when the texture is flushed or used as a source or destination for any operation other than drawing to it. See EXT_multisampled_render_to_texture extension.",2009],["Deferred rendering, HDR, and command buffers cause Unity to render to intermediate textures.",2009],["If rendering to a subset of the screen, Unity renders to intermediate textures.",2009],["If the \"texture layout\" doesn’t match what Unity is rendering to (for example, Unity is rendering each eye to separate textures, but the RenderPass is configured to render to a texture array or a single texture).",2009],["If the kUnityXRRenderTextureFlagsLockedWidthHeight flag is set and renderScale is not 1.0.",2009],["If the kUnityXRRenderTextureFlagsWriteOnly flag is set and Unity needs to read back from the texture.",2009],["MSAA",2009],["On both PC and mobile, the engine always resolves to the provider's texture. The engine performs implicit resolve (on mobiles with multi-sample render to texture extension) or explicit resolve.",2009],["On mobile, providers should enable the kUnityXRRenderTextureFlagsAutoResolve flag and create their textures with 1 sample.",2009],["sRGB",2009],["Use UnityXRFrameSetupHints.appSetup.sRGB to check if Unity expects to render to sRGB texture formats. The provider ultimately selects the output texture format from the colorFormat field of UnityXRRenderTextureDesc. If the format is an sRGB type, Unity turns sRGB writes on or off depending on the color space that the active project selects. You should always sample from any sRGB textures with sRGB to linear conversion in your compositor.",2009],["Depth textures",2009],["If your SDK needs depth information, you can obtain the depth buffer in the same way as the color buffer above. The nativeDepthTex value on the UnityXRRenderTextureDesc specifies the native resource. By default, Unity tries to share the depth buffer between textures with a similar desc if nativeDepthTex is set to kUnityXRRenderTextureIdDontCare.",2009],["If your SDK does not need depth information, you should set UnityXRRenderTextureDesc::depthFormat to kUnityXRDepthTextureFormatNone to avoid unnecessary resolves.",2009],["Handling double and triple buffering",2009],["During submission (see the Submitting frames in-flight section below), you can specify a different texture ID each frame in order to handle the case where the SDK needs to double- or triple-buffer images that Unity is rendering to. The provider plug-in is responsible for managing the collection of UnityXRRenderTextureIds.",2009],["Frame lifecycle",2009],["There are two methods responsible for the lifecycle of a frame: PopulateNextFrameDesc, which happens right before rendering begins, and SubmitCurrentFrame, which happens immediately after rendering has completed. Both methods are called on the graphics thread.",2009],["During PopulateNextFrameDesc, the display provider is expected to do the following:",2009],["Wait for cadence (wait until Unity should start submitting rendering commands again). Alternatively, this can be done in SubmitCurrentFrame.",2009],["Acquire the next image and tell Unity what texture IDs to render to next via the nextFrame parameter.",2009],["During the SubmitCurrentFrame method, the display provider is expected to do the following:",2009],["Submit the last frame in-flight (for example, eye textures or depth textures) to display on the screen.",2009],["Wait for cadence, as an alternative to waiting during PopulateNextFrameDesc.",2009],["Blocking for cadence",2009],["To maintain the lowest possible latency and maximal throughput when rendering to an HMD display, you need to ensure precise timing when you obtain poses and submit textures. Each HMD has a native refresh rate that their compositor runs at. Rendering any faster than that rate results in a sub-optimal experience because of mismatched timing or redundant work.",2009],["Unity expects the display provider to block, or wait for frame cadence, during the frame lifecycle. Unity starts submitting rendering commands shortly after 'waking up' from the blocking call. You should synchronize the wake-up time to your compositor within a particular window. Some SDKs provide a floating wake-up time window based on heuristics. Meta/Oculus calls this the \"queue ahead\" (see Oculus developer documentation for more information). Valve calls it \"running start\" (see slides 18 and 19 of this presentation).",2009],["Unity waits on the frame lifecycle to complete before it starts submitting pose-dependent graphics commands.",2009],["Where to wait for cadence",2009],["Providers can wait for cadence in either PopulateNextFrameDesc or in SubmitCurrentFrame.",2009],["While Unity submits graphics commands for a frame on the graphics thread, the next frame's simulation loop is running on the main thread. It contains physics, script logic, etc. PopulateNextFrameDesc is called on the graphics thread after all rendering commands have been submitted, and only after the simulation of the next frame and all graphics jobs scheduled on it are complete. One of the graphics job that PopulateNextFrameDesc waits for is SubmitCurrentFrame for the current frame. This is why it's valid to wait for cadence in SubmitCurrentFrame. Furthermore, Unity doesn't start rendering until PopulateNextFrameDesc is complete.",2009],["With these details in mind, there are some trade-offs to waiting for cadence in SubmitCurrentFrame as opposed to PopulateNextFrameDesc. For example, waiting for cadence in SubmitCurrentFrame can cause performance issues if the application schedules expensive graphics jobs during simulation. Because SubmitCurrentFrame is scheduled to run after rendering, the graphics jobs that the application scheduled will run after SubmitCurrentFrame, but before PopulateNextFrameDesc. In this case, the provider is waiting in SubmitCurrentFrame, then it wakes up expecting Unity to begin rendering. However, Unity processes the graphics jobs the application scheduled before it calls PopulateNextFrameDesc, which in turn allows Unity to start rendering. This delay between waking up for rendering and processing the graphics jobs scheduled in the update method could cause latency. Developers can optimize this by scheduling their graphics jobs after rendering to ensure the graphics jobs are scheduled before SubmitCurrentFrame.",2009],["While the Provider waiting for cadence in SubmitCurrentFrame allows computing graphics jobs to run in parallel to the main thread, waiting for cadence in PopulateNextFrameDesc blocks the Unity main thread entirely. This is acceptable because simulation and other graphics jobs have already completed. Problems might occur when the simulation or graphics thread take up far too much time and exceed the device's target frame rate. This can cause frame rates to be cut in half while PopulateNextFrameDesc waits for the next cycle in the cadence.",2009],["",2009],["Submitting frames in-flight",2009],["When Unity calls SubmitCurrentFrame, the textures that you've set up last frame have been rendered to, or Unity has submitted render commands to the graphics driver to render them. Unity is now done with them and you can pass them on to your compositor.",2009],["Filling out next frame descriptor",2009],["After blocking or acquiring the next frame to render to, you must tell Unity which textures to render to in the next frame, and what's the layout of the render passes (see Render Passes below).",2009],["Render passes",2009],["A UnityXRRenderPass can involve a culling pass and a scene graph traversal. This is a resource-intensive operation, and you should try to limit the number of times Unity performs it via tricks like single-pass rendering.",2009],["Each UnityXRRenderPass contains an output texture (which can be a texture array), and output UnityXRRenderParams such as view, projection matrices, and the rect to render to or the texture array slice.",2009],["For each frame, the display Provider sets up a UnityXRRenderPass and fills out the UnityXRRenderTextureIds that Unity will render to the next frame.",2009],["Use cases for UnityXRRenderPass include the following:",2009],["Two-pass stereo rendering (2 RenderPass x 1 RenderParams)",2009],["Single-pass stereo rendering (1 RenderPass x 2 RenderParams)",2009],["The API supports these additional cases (but Unity might not react correctly right now):",2009],["Quad pass wide FOV stereo rendering (4 RenderPass x 1 RenderParams)",2009],["Single-pass + wide FOV stereo rendering (1 RenderPass x 2 RenderParams + 2 RenderPass x 1 RenderParams)",2009],["Foveated rendering:",2009],["Two separate textures for each eye (inner and outer)",2009],["One texture, UV fitting",2009],["External view scenario (HoloLens BEV, Mayo 3rd eye) (extra RenderPass)",2009],["Near / far rendering for compositing objects or people in scene (2 RenderPass, different projections, different targets)",2009],["It's safe to make these assumptions:",2009],["One texture per pass (singlepass is a one texture-array)",2009],["If single-pass, two pose / projections per pass (or foveated rendering)",2009],["Note:** The Unity project and XR SDK must use the same setting (enabled/disabled) for single-pass rendering, because this setting affects user shaders. To check if single-pass rendering is enabled, use UnityXRFrameSetupHints.appSetup.singlePassRendering.",2009],["Culling passes",2009],["Two rendering passes can share a culling pass if their cullingPassIndexes are set to the same value. The cullingPassIndex selects which UnityXRCullingPass to use. Culling passes must be filled out in UnityXRNextFrameDesc.",2009],["XR SDK Input subsystem",2010],["The XR SDK Input Subsystem is an interface for reporting button, axis, and tracking device information. This is the core subsystem for getting user-controlled data into the various input endpoints of the Unity engine. Unity reports your input information to InputDevices and the Input System depending on the type of information available.",2010],["Creating a basic XR Input provider",2010],["To create a basic, working XR Input provider, follow these steps:",2010],["Report your device connections and disconnections",2010],["Fill in all connected device's definition information",2010],["Update the device's state whenever Unity requests this",2010],["Respond to all relevant events and queries",2010],["Report your device layouts to the new input system",2010],["Terms",2010],["This guide uses the following terms:",2010],["Devices",2010],["Most Input Subsystem APIs rely on devices. A device is a container of input features referenced by a unique ID that you choose. This can be something concrete, like a gamepad or headset, or it can represent abstract objects such as a detected hand skeleton. A device has a fixed number of features that you cannot change while the device is connected.",2010],["Feature",2010],["Input Features are anything you can get sensor or user modified data from. That can be a button, or a positional tracking element, or battery life. They are grouped into various types of data, identified by UnityXRInputFeatureType. These are the currently supported data types that can be on an input device:",2010],["UnityXRInputFeatureType Data Type ",2010],[":--- :--- ",2010],["kUnityXRInputFeatureTypeCustom char[] (up to 1024 elements) ",2010],["kUnityXRInputFeatureTypeBinary bool ",2010],["kUnityXRInputFeatureTypeDiscreteStates unsigned int ",2010],["kUnityXRInputFeatureTypeAxis1D float ",2010],["kUnityXRInputFeatureTypeAxis2D UnityXRVector2 ",2010],["kUnityXRInputFeatureTypeAxis3D UnityXRVector3 ",2010],["kUnityXRInputFeatureTypeRotation UnityXRVector4 ",2010],["kUnityXRInputFeatureTypeHand UnityXRHand ",2010],["kUnityXRInputFeatureTypeBone UnityXRBone ",2010],["kUnityXRInputFeatureTypeEyes UnityXREyes ",2010],["Usage",2010],["A usage provides context to a feature. It identifies how the developer should use the feature. For example, the feature can be a 2D axis, but the usage tells the developer it's a touchpad. Usage can also inform the developer that a one-dimensional axis feature is reporting battery life. You can create your own usages, but you need to use as many Unity-developed usages as possible, because they enable cross-platform utility for developers. For a list of common usages available to all, see the Feature usages section below.",2010],["UnityXRInternalInputDeviceId",2010],["A UnityXRInternalInputDeviceId identifies all devices. Consider these identifiers to be unique IDs that both Unity and a provider share to reference a specific device. You define which Ids map to which devices, with the only constraint being that you cannot use the same Id for two devices connected at the same time. When you report a specific Id as connecting, Unity requests information about what the device is capable of and the current state of that device using that Id, and sends device-specific events using that Id.",2010],["",2010],["Device connection and disconnection",2010],["Two APIs on the IUnityXRInputInterface handle device connection and disconnection:",2010],["IUnityXRInputInterface.InputSubsystem_DeviceConnected",2010],["This reports a new device. The UnityXRInternalInputDeviceId the provider supplies can be any value, so long as it represents an internally unique device and no two devices are connected with the same Id from the same provider. Devices can only be connected between the Start and Stop events of the input provider's lifecycle. Any device that is already connected when IUnityXRInputProvider.Start is called should be reported during that callback.",2010],["Once a device is reported as connected, Unity calls*IUnityXRInputProvider.FillDeviceDefinition* on the next input update loop with the supplied UnityXRInternalInputDeviceId in order to get specific information about that device.",2010],["IUnityXRInputInterface.InputSubsystem_DeviceDisconnected",2010],["This reports that an input device is no longer available. You can only report an input device as disconnected after you have already reported it as connected. When you receive IUnityXRInputProvider.Stop, you must report all input devices currently connected as disconnected.",2010],["The two calls above are thread safe, and can be called at any time.",2010],["",2010],["Device definitions",2010],["A Device Definition describes the features that your device can report to Unity. Features consist of device identifying information, such as the device name, role, manufacturer, and serial number. A Device Definition also contains an indexed list of all individual input features available.",2010],["When a device is reported as being connected, Unity calls your provider via IUnityXRInputProvider.FillDeviceDefinition. The UnityXRInputDeviceDefinition parameter acts as a handle that can be passed into any methods prefixed with DeviceDefinition on IUnityXRInputInterface. Those methods are as follows:",2010],["Setting identifying information",2010],["Developers use some data on the device to identify specific devices or the general functionality of a newly connected device.",2010],["IUnityXRInputInterface.DeviceDefinition_SetName",2010],["This allows the provider to set the device name. The name must be clear, succinct, and recognizable by mass market consumers. This should not include the manufacturer’s name. This name is available to developers via UnityEngine.XR.InputDevice.name and as InputDevice.product in the Input System. Don’t leave this blank.",2010],["IUnityXRInputInterface.DeviceDefinition_SetCharacteristics",2010],["This allows the provider to specify the type of device that connected. UnityXRInputDeviceCharacteristics are a series of flags that help define what a device is capable of. These change the Input System usage of the InputDevice.",2010],["IUnityXRInputInterface.DeviceDefinition_SetManufacturer",2010],["This allows the provider to set the manufacturer of the device. The manufacturer must be clear, succinct, and recognizable by mass market consumers. This string is available to developers via UnityEngine.XR.InputDevice.manufacturer and as InputDevice.manufacturer in the Input System. Don’t leave this blank.",2010],["IUnityXRInputInterface.DeviceDefinition_SetSerialNumber",2010],["This allows the provider to set the serial number of the device. This string is available to developers via UnityEngine.XR.InputDevice.serialNumber and as InputDevice.serialNumber in the Input System. This must be an identifier unique to this specific device, or you should leave it blank.",2010],["Adding Features",2010],["You can add Input Features to your device definition via the following API calls.",2010],["IUnityXRInputInterface.DeviceDefinition_AddFeature",2010],["This adds a feature of a set type (except kUnityXRInputFeatureTypeCustom), and returns the UnityXRInputFeatureIndex of that new feature.",2010],["IUnityXRInputInterface.DeviceDefinition_AddCustomFeature",2010],["This adds a kUnityXRInputFeatureTypeCustom feature. These are variable buffers, up to 1024 bytes. You can use these to create custom types, unknown to Unity, and require an explicit size. This method returns the UnityXRInputFeatureIndex of that new feature.",2010],["IUnityXRInputInterface.DeviceDefinition_AddFeatureWithUsage",2010],["This adds a feature, but also includes one feature usage. This method is a helper that combines DeviceDefinition_AddFeature and DeviceDefinition_AddUsageAtIndex, and returns the UnityXRInputFeatureIndex of that new feature.",2010],["IUnityXRInputInterface.DeviceDefinition_AddUsageAtIndex",2010],["This adds a feature usage to an existing feature. It takes the UnityXRInputFeatureIndex from one of the methods that adds a feature. You can add as many usages to a single feature as required.",2010],["Note:** Returned UnityXRInputFeatureIndex values are all in the sequential order they are added.",2010],["",2010],["Device states",2010],["Device states are data structures that contain the current state of the device. The structure of the UnityXRInputDeviceState is described by the UnityXRInputDeviceDefinition.",2010],["Note:** Features contained within the Device State are accessed with a UnityXRInputFeatureIndex as reported when declaring that feature in the device definition.",2010],["Device state update types",2010],["Once a definition is declared, Unity requests device states twice a frame via IUnityXRInputProvider.UpdateDeviceState. The UnityXRInputUpdateType parameter specifies what kind of update Unity expects:",2010],["kUnityXRInputUpdateTypeDynamic** is an update before Unity iterates over MonoBehaviour.Update calls and coroutine continuations. These should represent where the device currently is.",2010],["kUnityXRInputUpdateTypeBeforeRender** is called right before Unity prepares to render to the headset, and just before Application.OnBeforeRender is invoked. These calls should use a forward predicted tracking position, and represent where you’d like to render the scene at the time it takes to display it.",2010],["Device state methods",2010],["The UnityXRInputDeviceState parameter acts as a handle that can be passed into any methods prefixed with DeviceState on IUnityXRInputInterface.",2010],["IUnityXRInputInterface.DeviceState_SetCustomValue",2010],["This sets a feature of type kUnityXRInputFeatureTypeCustom at the supplied UnityXRInputFeatureIndex. When setting custom value features, the provider must always set the value with the full size of the declared feature; there is no partial value setting. Also, you must declare all custom features to Unity during submission with a detailed explanation of what kind of data they contain and why they cannot exist using the other individual feature types.",2010],["IUnityXRInputInterface.DeviceState_SetBinaryValue",2010],["This sets a boolean (on/off) feature of type kUnityXRInputFeatureTypeBinary. The default, resting, or unused state of this feature must be false.",2010],["IUnityXRInputInterface.DeviceState_SetDiscreteStateValue",2010],["This sets a 32-bit unsigned integer value. This can also be used to represent enumerations. The default, unused value must be 0, and if used for an enumeration, 0 must represent the value of null, none, unset, or invalid.",2010],["IUnityXRInputInterface.DeviceState_SetAxis1DValue",2010],["This sets a 32-bit floating point value. The default, unused value must be 0.0.",2010],["IUnityXRInputInterface.DeviceState_SetAxis2DValue",2010],["This sets a value of type UnityXRVector2. UnityXRVector2 structures are a pair of (X, Y) 32-bit floats. The default, unused value must be (0.0, 0.0).",2010],["IUnityXRInputInterface.DeviceState_SetAxis3DValue",2010],["This sets a value of type UnityXRVector3. UnityXRVector2 structures are a pair of (X, Y, Z) 32-bit floats. The default, unused value must be (0.0, 0.0, 0.0).",2010],["IUnityXRInputInterface.DeviceState_SetRotationValue",2010],["This sets a value of type UnityXRVector4, formatted as a quaternion. The default, unused value must be (0, 0, 0, 1). See documentation on quaternions for more information.",2010],["IUnityXRInputInterface.DeviceState_SetBoneValue",2010],["This sets a value of type UnityXRBone.",2010],["IUnityXRInputInterface.DeviceState_SetHandValue",2010],["This sets a value of type UnityXRHand.",2010],["IUnityXRInputInterface.DeviceState_SetEyesValue",2010],["This sets a value of type UnityXREyes.",2010],["Note:** The UnityXRInputFeatureUsageIndex passed in is the same one returned when adding that individual feature to the device definition when filling out the UnityXRInputFeatureDefinition.",2010],["Feature-specific structs",2010],["The following advanced types are special feature types that are used to contain data from multiple data sources.",2010],["",2010],["UnityXRBone",2010],["These represent a bone or one element of a hierarchical pose in space. The position member represents a three-dimensional position in meters, using left-handed coordinates where Y is up. The rotation member represents an orientation in space for that bone, represented by a normalized quaternion in radians. The parentBoneIndex is a UnityXRInputFeatureIndex that must point to the UnityXRBone that is upwards in the hierarchy, or kUnityInvalidXRInputFeatureIndex if it is the root for this skeleton.",2010],["",2010],["UnityXRHand",2010],["These represent a hand-like structure of bones. They organize the bone hierarchy into fingers and root for easy traversal. The rootBoneIndex must always point to a valid index that is of type kUnityXRInputFeatureTypeBone, which represents the palm or center of the hand. fingerBoneIndices must be stacked such that the first dimension or the array maps to individual fingers, following UnityXRHandFinger enumeration values, and the second dimension of the array are the individual finger bones from root to tip.",2010],["",2010],["UnityXREyes",2010],["These represent a pair of eyes, their fixation point, and current blink data. The leftEyePose and rightEyePose are of type UnityXRPose, where the position member represents a three-dimensional position in meters, using left-handed coordinates, where Y is up, and the rotation member represents a normalized quaternion in radians. The fixationPoint represents where the left and right eyes converge, and is also a three-dimensional position in meters, using left-handed coordinates, where Y is up. The leftOpenAmount and rightOpenAmount represent the openness of the eyes, where 0 is closed, and 1 is fully open. They cannot exceed the [0,1] range.",2010],["",2010],["Event handling",2010],["Outside of device state and definition updating, Unity expects you to react and respond to various events.",2010],["Generic event",2010],["UnityXRInputProvider.HandleEvent",2010],["This is for private events, specific to this provider. The eventType parameter is a custom code used to identify the payload. If the provider does not understand that event, it must return kUnitySubsystemErrorCodeFailure.",2010],["Tracking origin events",2010],["The tracking origin refers to a point in real-world space that tracked devices are relative to. It is effectively the point in real-world space where a device would report a position of (0, 0, 0). Unity supports a variety of tracking origin modes, and providers can choose to opt into those that they support. The tracking origin modes are listed under UnityXRInputTrackingOriginModeFlags.",2010],["kUnityXRInputTrackingOriginModeDevice** places the origin at the primary device’s location and yaw at the time of startup, or at the location of the last UnityXRInputProvider.HandleRecenter event.",2010],["kUnityXRInputTrackingOriginModeFloor** places the origin somewhere on the floor. The location on the floor is up to the provider, so long as it lets the developer understand the height difference between the floor and various devices.",2010],["kUnityXRInputTrackingOriginModeTrackingReference** places the origin at the location of a specific InputDevice with the kUnityXRInputDeviceCharacteristicsTrackingReference characteristic.",2010],["Finally, kUnityXRInputTrackingOriginModeUnknown is an error case, and should not be returned by the provider.",2010],["UnityXRInputProvider.HandleRecenter",2010],["When the tracking origin mode is set to kUnityXRInputTrackingOriginModeDevice, a call to recenter should set the current location of the primary device to be the new origin.",2010],["UnityXRInputProvider.QueryTrackingOriginMode",2010],["This is a request from Unity to get the current tracking origin mode that the provider is using. The provider is expected to set the trackingOriginMode parameter and return kUnitySubsystemErrorCodeSuccess. The returned parameter must only be a single flag value.",2010],["UnityXRInputProvider.QuerySupportedTrackingOriginModes",2010],["This is a request for which tracking origin modes are supported. The provider is expected to set the supportedTrackingOriginModes parameter and return kUnitySubsystemErrorCodeSuccess. The returned parameter should be a cumulative list of all UnityXRInputTrackingOriginModeFlags that UnityXRInputProvider.HandleSetTrackingOriginMode is able to support.",2010],["UnityXRInputProvider.HandleSetTrackingOriginMode",2010],["This is a request from Unity to change the current tracking origin mode. The trackingOriginMode parameter is the desired tracking origin mode. The provider is expected to return kUnitySubsystemErrorCodeSuccess if the origin was able to be changed, and kUnitySubsystemErrorCodeSuccess otherwise. If the tracking origin mode is already the desired mode, the provider should do nothing and return kUnitySubsystemErrorCodeSuccess.",2010],["IUnityXRInputInterface.InputSubsystem_TrackingOriginUpdated",2010],["This is an event the provider can send that notifies Unity that the location of the tracking origin has changed. This must be called when UnityXRInputProvider.HandleSetTrackingOriginMode succeeds and moves the origin. This can also be called if the provider has had to change the origin due to a change in overall tracking information.",2010],["IUnityXRInputInterface.InputSubsystem_SetTrackingBoundary",2010],["This is an event the provider can send that notifies Unity that there is a tracking boundary available, or that the tracking boundary has changed. This must be called if there is a boundary, and the tracking origin has changed such that it has moved the relative position of the boundary. This can be called with null, and 0 points in order to remove an existing tracking boundary.",2010],["Haptic events",2010],["UnityXRInputProvider.QueryHapticCapabilities",2010],["This is a request for the haptic capabilities of a given device that the provider fills in. Setting supportsImpulse to true enables events for UnityXRInputProvider.HandleHapticImpulse. Setting supportsBuffer to true enables events for UnityXRInputProvider.HandleHapticBuffer.",2010],["Note:** The capabilities structure allows the provider to set the number of channels and requests to start and stop haptics containing a channel index. This allows the provider to have multiple motors inside of a single device that can be rumbled independently. The first channel should be the most common motor to use, but subsequent ordering is provider-dependent.",2010],["UnityXRInputProvider.HandleHapticImpulse",2010],["This is a request for a device to rumble at a set amplitude, for a set duration. Unity fills in the data for this request. The buffer parameter is of type UnityXRHapticImpulse.",2010],["UnityXRInputProvider.HandleHapticBuffer",2010],["This is a request for a device to rumble a pattern, given a set buffer. Unity fills in the data for this request. The buffer parameter is of type UnityXRHapticUpdate.",2010],["The bufferSize is never more than the UnityXRHapticCapabilities.bufferMaxSize returned from the UnityXRInputProvider.QueryHapticCapabilities event.",2010],["UnityXRInputProvider.HandleHapticStop",2010],["This is a request from Unity for any haptic effects to stop. This should stop either impulse or buffered haptic effects on the supplied UnityXRInternalInputDeviceId.",2010],["",2010],["Feature Usages",2010],["Feature usages are simple string tags that provide context about your features and help Unity developers access your device in a generic way. You can declare your device as having a trigger, a device position, a menu button, or other shared concept of an input feature. Developers can access these and interact with your device without knowing exactly what it is. These are also used to route input data into UnityEngine.Input and UnityEngine.XR.InputTracking and decide on indices. A single input feature can have multiple usages, but each input feature you declare must have at least one usage assigned. If you chose to not use the usages Unity provides by default, you must let Unity know what you've used when submitting for certification, and be prepared to update your usage strings based on Unity's feedback.",2010],["All world space usages are in meters, m/s, m/s^2, or radians where appropriate. Space should be oriented as left-handed, z-forward, y-up. The space origin should be the position of the device on connection. This space is your own, and does not map directly into Unity world space.",2010],["These are the common usages available within Unity:",2010],["Pose and tracking",2010],["The following features are for devices that supply tracking in the real world. They are useful for identifying the current tracking capability:",2010],["kUnityXRInputFeatureUsageIsTracked** is a boolean that specifies if the device is currently tracking properly. True means fully tracked, false means either partially or not tracked.",2010],["kUnityXRInputFeatureUsageTrackingState** is a discrete state feature, backed by the UnityXRInputTrackingStateFlags enumeration, that identifies which actual tracking features are currently available and updating. This value must never be above kUnityXRInputTrackingStateAll.",2010],["The remaining tracking features relay individual data about specific 'nodes', such as the device, left eye, or a colour camera. They are grouped into sets of six, depending on the type of data. These must be updated in conjunction with the current value in kUnityXRInputFeatureUsageTrackingState. That is, if the tracking state says position is available, all position usages must be updating correctly.",2010],["The usage prefixes are as follows:",2010],["Prefix Description ",2010],["kUnityXRInputFeatureUsageDevice Generalized position of the input device ",2010],["kUnityXRInputFeatureUsageCenterEye Centralized average of all eye rendering locations ",2010],["kUnityXRInputFeatureUsageLeftEye Rendering location for a left eye ",2010],["kUnityXRInputFeatureUsageRightEye Rendering location for a right eye ",2010],["kUnityXRInputFeatureUsageColorCamera Location of any incoming camera feed ",2010],["Each of those prefixes has a series of available suffixes that represent various tracking attributes, and are as follows:",2010],["Position**",2010],["Rotation**",2010],["Velocity**",2010],["AngularVelocity**",2010],["Acceleration**",2010],["AngularAcceleration**",2010],["Not including these in the definition means they are never available. Including them, but tagging them as not available via a kUnityXRInputFeatureUsageTrackingState feature, means that feature is not available currently, but could be available later.",2010],["Device information",2010],["These contain generalized device information rather than user-actuated controls. They are features of the device that the user does not have direct control over.",2010],["kUnityXRInputFeatureUsageBatteryLevel** is a 1D axis feature that represents the current battery level of the device, where 0 is no battery, and 1 is fully charged. It must always be within the [0-1] range.",2010],["kUnityXRInputFeatureUsageUserPresence** is a boolean that returns true when a user is currently wearing the headset.",2010],["2D axes",2010],["These are two-dimensional analog float values, such as touchpads and joysticks. These controls are usually moved with the thumb. They provide both an X and Y, and should always be in the range of ([-1,1],[-1,1]).",2010],["kUnityXRInputFeatureUsagePrimary2DAxis** is a 2D axis feature that represents a touchpad or joystick. 0,0 is the idle position and Y-positive is away from the controller user.",2010],["kUnityXRInputFeatureUsageSecondary2DAxis** is a 2D axis representing a second joystick or touchpad, used in addition to kUnityXRInputFeatureUsagePrimary2DAxis. 0,0 is the idle position and Y-positive is away from the controller user.",2010],["1D Axes",2010],["These are all single dimensional, analog float values. Buttons, triggers, and other controls that can be 'half pressed' are identified here.",2010],["kUnityXRInputFeatureUsageTrigger** is a 1D axis that maps to an index-actuated trigger. This must always be within the range of [0,1] where 0 is open and 1 is fully squeezed. If this is implemented, the device must also implement kUnityXRInputFeatureUsageTriggerButton.",2010],["kUnityXRInputFeatureUsageGrip** is a 1D axis that maps to a hand squeeze activated grip. This must always be within the range of [0,1] where 0 is open and 1 is fully squeezed. If this is implemented, the device must also implement kUnityXRInputFeatureUsageGripButton.",2010],["Binary",2010],["These are single dimensional, digital values. They can be actuated or not, but there is no further granularity.",2010],["kUnityXRInputFeatureUsagePrimaryButton** is a binary feature representing the primary button on a controller. This would commonly be used as an accept or advance button in menus. If this is actuated, then kUnityXRInputFeatureUsagePrimaryTouch must be actuated as well, if it exists.",2010],["kUnityXRInputFeatureUsagePrimaryTouch** is a binary feature representing the touch state of a primary button on the controller. If this is implemented, the device must implement kUnityXRInputFeatureUsagePrimaryButton.",2010],["kUnityXRInputFeatureUsageSecondaryButton** is a binary feature representing the secondary button on a controller. This would commonly be used as a back or alternate button. If this is actuated, then kUnityXRInputFeatureUsageSecondaryTouch must be actuated as well if it exists.",2010],["kUnityXRInputFeatureUsageSecondaryTouch** is a binary feature representing the touch state of a secondary button on the controller. If this is implemented, the device must implement kUnityXRInputFeatureUsageSecondaryButton.",2010],["kUnityXRInputFeatureUsageGripButton** is a binary feature representing whether a hand-actuated squeeze is triggered. If this is implemented, the device must also implement kUnityXRInputFeatureUsageGrip.",2010],["kUnityXRInputFeatureUsageTriggerButton** is a boolean feature representing whether a hand-actuated squeeze is triggered. If this is implemented, the device must also implement kUnityXRInputFeatureUsageTrigger.",2010],["kUnityXRInputFeatureUsageMenuButton** is a binary feature representing a non-gameplay pause or menu button. This is normally not in easy reach for the user.",2010],["kUnityXRInputFeatureUsagePrimary2DAxisClick** is a binary feature representing a depression or click of the kUnityXRInputFeatureUsagePrimary2DAxis 2D axis. If this is implemented, the device must implement kUnityXRInputFeatureUsagePrimary2DAxis. If this is actuated, then kUnityXRInputFeatureUsagePrimary2DAxisTouch must be actuated as well, if it exists.",2010],["kUnityXRInputFeatureUsagePrimary2DAxisTouch** is a binary feature representing a light touch of the kUnityXRInputFeatureUsagePrimary2DAxis 2D axis. If this is implemented, the device must implement kUnityXRInputFeatureUsagePrimary2DAxis.",2010],["kUnityXRInputFeatureUsageSecondary2DAxisClick** is a binary feature representing a depression or click of the kUnityXRInputFeatureUsageSecondary2DAxis 2D axis. If this is implemented, the device must implement kUnityXRInputFeatureUsageSecondary2DAxis. If this is actuated, then kUnityXRInputFeatureUsageSecondary2DAxisTouch must be actuated as well, if it exists.",2010],["kUnityXRInputFeatureUsageSecondary2DAxisTouch** is a binary feature representing a light touch of the kUnityXRInputFeatureUsageSecondary2DAxis 2D axis. If this is implemented, the device must implement kUnityXRInputFeatureUsageSecondary2DAxis.",2010],["Sensor Based",2010],["These represent individual sensor types. They are used as shorthand to search for hand and eye type data.",2010],["kUnityXRInputFeatureUsageHandData** is a UnityXRHands feature representing hand tracking data.",2010],["kUnityXRInputFeatureUsageEyesData** is a UnityXREyes feature representing eye tracking data.",2010],["",2010],["New Input System device layouts",2010],["To enable users to bind to and use code to access your device properties when using the new Input System, you need to provide device layout descriptions as part of your input provider.",2010],["You should provide a device layout for each device type you define in the input provider.",2010],["If you don't provide an explicit device layout for a device you register, users won't be able to use the new Input System UI to bind to features on your device. The Input System will still receive device data, and users will be able to manually create bindings to your new device features.",2010],["For more information on Input System device layouts, see the Input System documentation. An example is provided below for ease of implementation.",2010],["Example device layout",2010],["This example provides a layout for a new Example VR Controller.",2010],["The Example VR Controller's XRSDK layout definition is described as having:",2010],["\nAn Additional kUnityXRInputFeatureTypeBinary which is called exampleButton\n",2010],["\nA kUnityXRInputFeatureTypeAxis3D value called examplePosition\n",2010],["\nA kUnityXRInputFeatureTypeRotation value called exampleRotation\n",2010],["To allow users to bind and control the device using the new Input System, you must provide a device layout for your new Example VR Controller.",2010],["First, you need to provide an InputControlLayout attribute, and also provide an explicit name for use with the New Input System UI. Use the [Preseve] attribute to ensure that these elements are not stripped from the compilation step.",2010],["[Preserve]",2010],["[InputControlLayout(displayName = \"Example VR Controller\")]",2010],["public class ExampleVRController : XRController",2010],["Next, provide InputControl mappings for the various elements defined in the XRSDK Layout.",2010],["Use [Preserve] again to ensure that these elements are not stripped from the build. The use of the aliases keyword allows the new Input System to perform common matching based on the aliases you provide.",2010],["[Preserve]",2010],["[InputControl(aliases = new[] { \"PrimaryButton\" })]",2010],["public ButtonControl exampleButton { get; private set; }",2010],["[Preserve]",2010],["[InputControl]",2010],["public Vector3Control examplePosition { get; private set; }",2010],["[Preserve]",2010],["[InputControl]",2010],["public QuaternionControl exampleRotation { get; private set; }",2010],["Finally, provide an implementation of the FinishSetup method which binds the control mapping to the instance of the control. Ensure you also call the base class's FinishSetup, otherwise the base controls are not bound.",2010],["protected override void FinishSetup()",2010],["base.FinishSetup();",2010],["exampleButton = GetChildControl(\"exampleButton\");",2010],["examplePosition = GetChildControl(\"examplePosition\");",2010],["exampleRotation = GetChildControl(\"exampleRotation\");",2010],["Registering your layouts",2010],["The last step you need to perform is to register the new device layouts with the New Input System when you start the XRSDK Loader for these devices. The following code is an example of this implementation.",2010],["You must fill out the REGEX THAT MATCHES YOUR DEVICE section with the correct matching strings to the product, or other strings provided by your XRSDK Input Provider when the device is connected.",2010],["public override bool Initialize()",2010],["if UNITY_INPUT_SYSTEM",2010],["InputLayoutLoader.RegisterInputLayouts();",2010],["endif",2010],["if UNITY_INPUT_SYSTEM",2010],["if UNITY_EDITOR",2010],["[InitializeOnLoad]",2010],["endif",2010],["static class InputLayoutLoader",2010],["static InputLayoutLoader()",2010],["RegisterInputLayouts();",2010],["public static void RegisterInputLayouts()",2010],["UnityEngine.InputSystem.InputSystem.RegisterLayout(",2010],["matches: new InputDeviceMatcher()",2010],[".WithInterface(XRUtilities.InterfaceMatchAnyVersion)",2010],[".WithProduct(\"\")",2010],[");",2010],["Checklist for creating your own input provider",2010],["Set up basic lifecycle registration:",2010],["IUnityXRInputInterface.RegisterLifecycleProvider** with function pointers for Initialize, Start, Stop, Shutdown.",2010],["IUnityXRInputInterface.RegisterInputProvider** called from UnityLifecycleProvider.Initialize callback with Input Provider calls filled out.",2010],["Call IUnityXRInputInterface.InputSubsystem_DeviceConnected with a unique Id for each connected device.",2010],["Fill out valid device definitions for each device in UnityXRInputProvider.FillDeviceDefinition:",2010],["Add a valid name.",2010],["Add a valid role.",2010],["Add at least one Input Feature.",2010],["Update the device state in UnityXRInputProvider.UpdateDeviceState for each connected device.",2010],["If you can forward predict tracking positions for rendering, do so when an update is of type kUnityXRInputUpdateTypeBeforeRender.",2010],["Call IUnityXRInputInterface.InputSubsystem_SetBoundaryPoints with any bounding box.",2010],["Implement UnityXRInputProvider.QueryTrackingOriginMode, UnityXRInputProvider.QuerySupportedTrackingOriginModes, and UnityXRInputProvider.HandleSetTrackingOriginMode.",2010],["Implement UnityXRInputProvider.TryRecenter.",2010],["Provide new Input System device layouts for your devices.",2010],["XR SDK Meshing subsystem",2011],["The Meshing subsystem extracts mesh data from an external Provider and converts it to a UnityEngine.Mesh. It can also generate an optional UnityEngine.MeshCollider without incurring any main thread stalls.",2011],["The main use case for the Meshing subsystem is to surface procedurally-generated meshes, generally from a spatial mapping algorithm like the one generated from a depth camera. There is no limit on the size of the mesh, or the frequency of updates.",2011],["Mesh generation occurs asynchronously on a background thread, so extracting data from an external provider doesn't block the main thread to, for example, bake the mesh collider.",2011],["Control flow",2011],["The Meshing subsystem has two basic queries:",2011],["Get the state of all tracked meshes (for example, New, Changed, Unchanged, Removed).",2011],["Generate a particular mesh. Meshes are identified using the MeshId identifier.",2011],["Getting MeshInfos",2011],["C# users can get the mesh infos from the XRMeshSubsystem instance method:",2011],["```csharp",2011],["public bool TryGetMeshInfos(List meshInfosOut);",2011],["This maps directly to the C call to UnityXRMeshProvider::GetMeshInfos and is typically called once per frame to obtain the current list of tracked meshes.",2011],["The following C implementation can use the provided allocator object to allocate an array of UnityXRMeshInfos which it should then fill out:",2011],["```c",2011],["UnitySubsystemErrorCode(UNITY_INTERFACE_API * GetMeshInfos)(",2011],["UnitySubsystemHandle handle, void* pluginData, UnityXRMeshInfoAllocator * allocator);",2011],["The allocated memory is owned by Unity (typically using a stack allocator, so allocations are very fast):",2011],["```c",2011],["typedef struct UnityXRMeshInfo",2011],["UnityXRMeshId meshId;",2011],["bool updated;",2011],["int priorityHint;",2011],["} UnityXRMeshInfo;",2011],["If nothing has changed since the last call to TryGetMeshInfos, you can return false to avoid filling out the array each frame.",2011],["Field Description ",2011],["meshId A 128-bit unique identifier. The Provider generates these values, which can be a pointer to mesh data, but you need to be able to generate a specific mesh by its ID. ",2011],["updated The only state Unity needs is whether the mesh has been updated since the last time it was generated. Determining whether the mesh was added or removed is done automatically; reporting the existence of a mesh that Unity doesn't know about is surfaced as Added, while not reporting a mesh that was previously reported marks the mesh as Removed. ",2011],["priorityHint C# interprets this value, but you might want to, for example, provide a C# component that prioritizes which mesh to generate based on it. Unity doesn't use this value. ",2011],["In C#, TryGetMeshInfos populates a List<MeshInfo>, which includes the mesh state:",2011],["```csharp",2011],["public enum MeshChangeState",2011],["Added,",2011],["Updated,",2011],["Removed,",2011],["Unchanged",2011],["Based on the mesh change state and the priority hint value, a C# component can then decide which mesh(es) to generate next.",2011],["Mesh generation",2011],["From C#, you can generate a specific mesh asynchronously using the XRMeshSubsystem instance method:",2011],["```csharp",2011],["public extern void GenerateMeshAsync(",2011],["MeshId meshId,",2011],["Mesh mesh,",2011],["MeshCollider meshCollider,",2011],["MeshVertexAttributes attributes,",2011],["Action onMeshGenerationComplete);",2011],["This enqueues a mesh for generation. You can enqueue as many meshes as you need, but you might want to limit the number of meshes that are concurrently generated to a few at a time.",2011],["Unity always calls the provided onMeshGenerationComplete delegate, even if an error occurs.",2011],["Meshes are generated in two phases, following an acquire and release model:",2011],["```c",2011],["UnitySubsystemErrorCode(UNITY_INTERFACE_API * AcquireMesh)(",2011],["UnitySubsystemHandle handle,",2011],["void* pluginData,",2011],["const UnityXRMeshId * meshId,",2011],["UnityXRMeshDataAllocator * allocator);",2011],["AcquireMesh is called on a background thread, so you can do as much processing in this method as you like, including computationally-intensive work such as generating the mesh itself. This function can return immediately or span several frames.",2011],["If you provide a MeshCollider to GenerateMeshAsync, Unity also computes the MeshCollider's acceleration structure (\"Bake Physics\" in the above diagram). This can be time-consuming for large meshes, so it also occurs on the worker thread.",2011],["Finally, when the data is ready, Unity writes it to the UnityEngine.Mesh and/or UnityEngine.MeshCollider on the main thread. Afterwards, Unity calls ReleaseMesh, also on the main thread:",2011],["```c",2011],["UnitySubsystemErrorCode(UNITY_INTERFACE_API * ReleaseMesh)(",2011],["UnitySubsystemHandle handle,",2011],["void* pluginData,",2011],["const UnityXRMeshId * meshId,",2011],["const UnityXRMeshDescriptor * mesh,",2011],["void* userData);",2011],["BecauseReleaseMesh is called on the main thread, it should return quickly. Typically, this is used to free resources allocated during AcquireMesh.",2011],["Memory management",2011],["AcquireMesh offers two means of providing mesh data to Unity: Unity-managed and provider-managed.",2011],["Unity-managed memory",2011],["To let Unity manage the memory, use:",2011],["```c",2011],["UnityXRMeshDescriptor* (UNITY_INTERFACE_API * MeshDataAllocator_AllocateMesh)(",2011],["UnityXRMeshDataAllocator * allocator,",2011],["size_t vertexCount,",2011],["size_t indexCount,",2011],["UnityXRIndexFormat indexFormat,",2011],["UnityXRMeshVertexAttributeFlags attributes,",2011],["UnityXRMeshTopology topology);",2011],["This returns a struct with pointers to buffers based on an intersection of these attributes and the vertex attributes requested from C#. The provider should then copy the appropriate data to the buffers.",2011],["When you use this paradigm, you don't have to free the memory, because Unity will recycle the memory after the call to ReleaseMesh.",2011],["Provider-managed memory",2011],["Instead of letting Unity manage the memory, you can point it at your own data. The data must remain valid until ReleaseMesh is called.",2011],["Use MeshDataAllocator_SetMesh to provide your own UnityXRMeshDescriptor whose non-null pointers point to valid data:",2011],["```c",2011],["void(UNITY_INTERFACE_API * MeshDataAllocator_SetMesh)(",2011],["UnityXRMeshDataAllocator * allocator, const UnityXRMeshDescriptor * meshDescriptor);",2011],["User data",2011],["Your AcquireMesh implementation can call:",2011],["```c",2011],["void(UNITY_INTERFACE_API * MeshDataAllocator_SetUserData)(",2011],["UnityXRMeshDataAllocator * allocator, void* userData);",2011],["Unity passes the userData pointer back to your ReleaseMesh implementation. This is particularly useful when you're using provider-managed memory.",2011],["Example C# component",2011],["```csharp",2011],["void Update()",2011],["if (s_MeshSubsystem.TryGetMeshInfos(s_MeshInfos))",2011],["foreach (var meshInfo in s_MeshInfos)",2011],["switch (meshInfo.ChangeState)",2011],["case MeshChangeState.Added:",2011],["case MeshChangeState.Updated:",2011],["AddToQueueIfNecessary(meshInfo);",2011],["break;",2011],["case MeshChangeState.Removed:",2011],["RaiseMeshRemoved(meshInfo.MeshId);",2011],["// Remove from processing queue",2011],["m_MeshesNeedingGeneration.Remove(meshInfo.MeshId);",2011],["// Destroy the GameObject",2011],["GameObject meshGameObject;",2011],["if (meshIdToGameObjectMap.TryGetValue(meshInfo.MeshId, out meshGameObject))",2011],["Destroy(meshGameObject);",2011],["meshIdToGameObjectMap.Remove(meshInfo.MeshId);",2011],["break;",2011],["default:",2011],["break;",2011],["// ...",2011],["while (m_MeshesBeingGenerated.Count < meshQueueSize && m_MeshesNeedingGeneration.Count > 0)",2011],["// Get the next mesh to generate. Could be based on the mesh's",2011],["// priorityHint, whether it is new vs updated, etc.",2011],["var meshId = GetNextMeshToGenerate();",2011],["// Gather the necessary Unity objects for the generation request",2011],["var meshGameObject = GetOrCreateGameObjectForMesh(meshId);",2011],["var meshCollider = meshGameObject.GetComponent();",2011],["var mesh = meshGameObject.GetComponent().mesh;",2011],["var meshAttributes = shouldComputeNormals ? MeshVertexAttributes.Normals : MeshVertexAttributes.None;",2011],["// Request generation",2011],["s_MeshSubsystem.GenerateMeshAsync(meshId, mesh, meshCollider, meshAttributes, OnMeshGenerated);",2011],["// Update internal state",2011],["m_MeshesBeingGenerated.Add(meshId, m_MeshesNeedingGeneration[meshId]);",2011],["m_MeshesNeedingGeneration.Remove(meshId);",2011],["void OnMeshGenerated(MeshGenerationResult result)",2011],["if (result.Status != MeshGenerationStatus.Success)",2011],["// Handle error, regenerate, etc.",2011],["m_MeshesBeingGenerated.Remove(result.MeshId);",2011],["XR SDK PreInit interface",2012],["This interface allows you to configure the graphics device before it's created. Common use cases include choosing a specific GPU in multi-GPU scenarios, enabling graphics extensions, and modifying buffer creation.",2012],["Overview",2012],["Your provider can export the native symbol XRSDKPreInit, which is called early in runtime initialization, before graphics device creation. It should fill out a UnityXRPreInitProvider structure with the relevant entry points for providing the engine with information it might need during early initialization. Some providers need this because the graphics device is created before providers are able to initialize.",2012],["Discovery",2012],["The Unity project build process requires the name of your provider library before it can call XRSDKPreInit() at engine startup. To do this, implement the IXRLoaderPreInit.GetPreInitLibraryName interface on your XRLoader:",2012],["```csharp",2012],["public string GetPreInitLibraryName(BuildTarget buildTarget, BuildTargetGroup buildTargetGroup)",2012],["return \"XRSDKMyProviderLibraryName\";",2012],["When Unity starts up, it runs the code above to load the library. Then, Unity opens that library, looks for the XRSDKPreInit export, and calls it. At that point, XRSDKPreInit should register a UnityXRPreInitProvider.",2012],["Registration in XRSDKPreInit",2012],["Here's a simple example that registers all of the callbacks that you can use for early engine initialization:",2012],["```cpp",2012],["XRSDKPreInit(IUnityInterfaces * interfaces)",2012],["IUnityXRPreInit* preInit = (IUnityXRPreInit*)interfaces->GetInterface(GetUnityInterfaceGUID());",2012],["UnityXRPreInitProvider provider = { 0 };",2012],["provider.userData = nullptr;",2012],["provider.GetPreInitFlags = GetPreInitFlags;",2012],["provider.GetGraphicsAdapterId = GetGraphicsAdapterId;",2012],["provider.GetVulkanInstanceExtensions = GetVulkanInstanceExtensions;",2012],["provider.GetVulkanDeviceExtensions = GetVulkanDeviceExtensions;",2012],["preInit->RegisterPreInitProvider(&provider);",2012],["Set any callbacks that you don't need to nullptr.",2012],["Callbacks",2012],["GetPreInitFlags",2012],["GetPreInitFlags returns a 64-bit bitfield of flags. The following flags are currently exposed:",2012],["\nkUnityXRPreInitFlagsEGLUsePBuffer - On EGL platforms (Android, standalone Meta/Oculus devices, etc.), EGL should be initialized using PBuffers.\n",2012],["\nkUnityXRPreInitFlagsEGLUseNoErrorContext - On EGL platforms, EGL should be initialized with a NO_ERROR context.\n",2012],["Providers shouldn't set any undefined bits, as they might be used for future expansion.",2012],["GetGraphicsAdapterId",2012],["GetGraphicsAdapterId sets the graphics adapter that the Unity runtime graphics device uses for graphics API initialization. For example, if a user plugs a headset into a different GPU than the user's primary display device, Unity might need to initialize the graphics API that explicitly targets the secondary GPU.",2012],["GetVulkanDeviceExtensions and GetVulkanInstanceExtensions",2012],["GetVulkanDeviceExtensions and GetVulkanInstanceExtensions are used if the provider needs Unity to initialize Vulkan with specific extensions for the device and instance. This is often used for compositor surface sharing. Both of these return a space-separated string of extensions.",2012],["Known issues",2012],["Currently, GetPreInitLibraryName is only called on the first XRLoader in the XRManager prefab, so only the first Provider in the list can provide PreInit entry points at runtime.",2012],["PreInit requires a native library to expose the entry point during early engine initialization.",2012],["PreInit doesn't apply to the Editor at this time.",2012],["Creating an XR provider",2013],["An XR provider is part of a Unity project and minimally consists of a manifest file and one or more native plug-ins. It can also include other assets such as scripts and images. As long as these are in your project when you launch the Editor, Unity discovers them.",2013],["Note:** You must relaunch Unity whenever you change a provider's manifest or Editor native plug-in.",2013],["",2013],["File layout",2013],["Native plug-ins must be in a subfolder relative to UnitySubsystemsManifest.json. If your provider is not part of a package, Unity only finds UnitySubsystemsManifest.json files that are up to one level deep in the Assets folder.",2013],["UnitySubsystemsManifest.json",2013],["This manifest contains information about your provider, such as the subsystems it provides and the plug-in name.",2013],["For more information, see the UnitySubsystemsManifest.json page.",2013],["Building a provider plug-in",2013],["To learn how to build a native plug-in for your targeted platform, see documentation on the Unity native plugin interface. After you get your dynamic library into Unity, ensure that all of the options (such as the target platform in the Plug-in Settings) are correct.",2013],["You need to register a lifecycle handler for the subsystems that you intend to implement. For example:",2013],["```c++",2013],["extern \"C\" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API",2013],["UnityPluginLoad(IUnityInterfaces* unityInterfaces)",2013],["s_XrDisplay = unityInterfaces->Get();",2013],["UnityLifecycleProvider displayLifecycleHandler =",2013],["NULL, // This can be any object you want to pass as userData to the following functions",2013],["&Lifecycle_Initialize,",2013],["&Lifecycle_Start,",2013],["&Lifecycle_Stop,",2013],["&Lifecycle_Shutdown",2013],["};",2013],["s_XrDisplay->RegisterLifecycleProvider(\"Provider Plugin Name\", \"Display0\", &displayLifecycleHandler);",2013],["// Register with other subsystems",2013],["Note:** The parameters passed to RegisterLifecycleProvider must match the name and id fields in your manifest file.",2013],["When you call your Initialize method at a later point, you get an instance handle you can use to call methods that take a UnitySubsystemHandle. Example:",2013],["```c++",2013],["/// Callback executed when a subsystem should initialize in preparation for becoming active.",2013],["static UnitySubsystemErrorCode UNITY_INTERFACE_API Lifecycle_Initialize(UnitySubsystemHandle handle, void* data)",2013],["// Register for callbacks on the graphics thread.",2013],["UnityXRDisplayGraphicsThreadProvider gfxThreadProvider = { NULL, NULL, &GfxThread_WaitForNextFrameDesc, NULL };",2013],["s_XrDisplay->RegisterProviderForGraphicsThread(handle, &gfxThreadProvider);",2013],["return kUnitySubsystemErrorCodeSuccess;",2013],["The SDK package includes an example project that builds sample plug-ins.",2013],["Loading in Unity",2013],["For more information about loading your provider in Unity, see the Runtime discovery and activation of subsystems page.",2013],["Runtime discovery and activation of subsystems",2014],["Add the following script to your project in order to scan for and create or start a Display subsystem with the id of Display0. You can change the match variable if you want to load other Display subsystems:",2014],["```csharp",2014],["using System;",2014],["using System.Collections;",2014],["using System.Collections.Generic;",2014],["using UnityEngine;",2014],["using UnityEngine.Experimental.XR;",2014],["using UnityEngine.XR;",2014],["public class Display : MonoBehaviour",2014],["public string match = \"Display0\";",2014],["// Use this for initialization",2014],["void Start ()",2014],["List displays = new List();",2014],["SubsystemManager.GetSubsystemDescriptors(displays);",2014],["Debug.Log(\"Number of display providers found: \" + displays.Count);",2014],["foreach (var d in displays)",2014],["Debug.Log(\"Scanning display id: \" + d.id);",2014],["if (d.id.Contains(match))",2014],["Debug.Log(\"Creating display \" + d.id);",2014],["XRDisplaySubsystem dispInst = d.Create();",2014],["if (dispInst != null)",2014],["Debug.Log(\"Starting display \" + d.id);",2014],["dispInst.Start();",2014],["The XR Management package is the user-facing UI used to configure loading of subsystems at runtime. It uses the same underlying APIs (described above) to create and manage subsystems. If you want your provider to show up in the XR Settings UI, write an XRLoader.",2014],["If your plug-in fails to load, see the troubleshooting section below.",2014],["",2014],["Troubleshooting plug-in discovery at runtime",2014],["To troubleshoot the initialization or starting of your subsystem Provider, check the editor log or player output log for lines that start with [XR] or [Subsystems].",2014],["No subsystems found in C#",2014],["If you just added a .json and plug-in files, make sure you relaunch Unity. Currently, Unity only discovers these files at start-up. Also, make sure that the Provider uses the correct file layout.",2014],["Errors finding and parsing the UnitySubsystemsManifest.json file",2014],["Error Description ",2014],["[XR] 3 'displays' descriptors matched in Assets/UnityXRDisplayExample/UnitySubsystemsManifest.json Unity successfully found display descriptors and registers three different ids for this plug-in. ",2014],["[XR] No descriptors matched for inputs in Assets/UnityXRDisplayExample/UnitySubsystemsManifest.json. The .json file contains no input descriptors. This is normal if you're not implementing an input subsystem.If you were expecting Unity to find descriptors in your .json file, they could be malformed. See documentation on UnitySubsystemsManifest.json for the correct format to use. ",2014],["[XR] Failed to parse json header for Assets/UnityXRDisplayExample/UnitySubsystemsManifest.json (did you forget to include name or libraryName fields?) This likely means you have a malformed .json file. Run it through a validation tool, such as json linter. ",2014],["Errors finding and loading the provider plug-in",2014],["Error Description ",2014],["[XR] PluginName failed to register Provider for DisplayId (json name or id doesn't match?) This means that the first two arguments to RegisterLifecycleProvider don't match the .json file.The first argument, pluginName, should match the name field in the .json file.The second argument, id, should match the id field of the subsystem in the .json file. ",2014],["[XR] Unable to load plugin PluginName for subsystem DisplayId Your plug-in couldn't be found, it was built for the wrong architecture, or it has missing dependencies that need to be loaded. In the later case, you can use the Dependency Walker tool to find out if there are missing dependencies. ",2014],["Errors initializing the provider",2014],["Error Description ",2014],["[XR] Failed to initialize subsystem DisplayId [error: 1] Unity called out to your Initialize method, but it returned kUnitySubsystemErrorCodeFailure. Double-check the implementation of your Initialize method. ",2014],["XR SDK Stats interface",2015],["The XR SDK Stats interface is used for registering and managing statistics data.",2015],["Overview",2015],["Use the XR Stats interface to record stats among the various subsystems. The only supported stat primitive is a floating point number.",2015],["Use the UnityPluginLoad entry point method to acquire a pointer to the XRStats interface:",2015],["```cpp",2015],["IUnityXRStats* sXRStats = nullptr;",2015],["extern \"C\" void UNITY_INTERFACE_EXPORT UnityPluginLoad(IUnityInterfaces* unityInterfaces)",2015],["sXRStats = (IUnityXRStats*)unityInterfaces->GetInterface(UNITY_GET_INTERFACE_GUID(IUnityXRStats));",2015],["//...",2015],["Usage",2015],["Register your subsystem and individual stat definitions with the stats interface:",2015],["```cpp",2015],["static UnityXRStatId m_GPUFrameTimeID;",2015],["static UnityXRStatId m_DroppedFrameCountID;",2015],["static UnityXRStatId m_WorkThreadStat;",2015],["static UnitySubsystemErrorCode ExampleDisplayProvider_Start(UnitySubsystemHandle handle)",2015],["if (sXRStats)",2015],["sXRStats->RegisterStatSource(handle);",2015],["m_GPUFrameTimeID = sXRStats->RegisterStatDefinition(handle, \"Example.GPUTime\", kUnityXRStatOptionNone);",2015],["m_DroppedFrameCountID = sXRStats->RegisterStatDefinition(handle, \"Example.DroppedFrame\", kUnityXRStatOptionNone);",2015],["m_WorkThreadStat = sXRStats->RegisterStatDefinition(handle, \"Example.WorkerThreadStat\", kUnityXRStatOptionNone);",2015],["return kUnitySubsystemErrorCodeSuccess;",2015],["Update stats on the Gfx Thread:",2015],["```cpp",2015],["extern float GetLastGPUTime(); //provided by your runtime",2015],["static void ExampleDisplayProvider_GfxThreadCall(UnitySubsystemHandle handle)",2015],["sXRStats->SetStatFloat(m_GPUFrameTimeID, GetLastGPUTime());",2015],["// Do gfx thread things",2015],["Update stats on the main thread:",2015],["```cpp",2015],["extern float GetDroppedFrameCount(); //provided by your runtime",2015],["static void ExampleDisplayProvider_MainThreadCall(UnitySubsystemHandle handle)",2015],["sXRStats->SetStatFloat(m_DroppedFrameCountID, GetDroppedFrameCount());",2015],["// Do main thread things",2015],["Update stats on your own threads, but be sure to call IncrementStatFrame to keep the current frame for that thread in sync with the other threads (this is managed internally for the main and graphics threads):",2015],["```cpp",2015],["extern float GetWorkerThreadStat(); //provided by your runtime",2015],["static void ExampleDisplayProvider_MyWorkerThread(UnitySubsystemHandle handle)",2015],["sXRStats->IncrementStatFrame();",2015],["sXRStats->SetStatFloat(m_WorkThreadStat, GetWorkerThreadStat());",2015],["// Do worker thread things",2015],["Unregister the stat source when the subsystem stops:",2015],["```cpp",2015],["static void ExampleDisplayProvider_Stop(UnitySubsystemHandle handle)",2015],["sXRStats->UnregisterStatSource(handle);",2015],["Thread safety",2015],["Updating stats via SetStatFloat is thread safe. However, registering and unregistering stat sources is not thread safe and should only be done on the main thread during the Start and Stop functions of the stat source's lifecycle.",2015],["Limitations",2015],["The queue size for processing stats is 2000. This queue is shared amongst all threads and all subsystems and is only serviced upon frame completion. For this reason, you should keep the number of calls to SetStatFloat low to avoid filling up the queue.",2015],["Note:** Any stat recorded when the queue is full will be lost.",2015],["Exposing stats to users",2015],["In the UnityEngine.XR.Provider namespace, use public static bool TryGetStat(Experimental.IntegratedSubsystem xrSubsystem, string tag, out float value) to get stats registered and updated with your provider:",2015],["```csharp",2015],["using UnityEngine.XR.Provider;",2015],["using System.Collections.Generic;",2015],["using UnityEngine.Experimental.XR;",2015],["using UnityEngine.Experimental;",2015],["using UnityEngine;",2015],["public static class ExampleProviderStats",2015],["public static float GPUFrameTime()",2015],["float tmp;",2015],["XRStats.TryGetStat(GetFirstDisplaySubsystem(), \"Example.GPUTime\", out tmp);",2015],["return tmp;",2015],["public static int DroppedFrameCount()",2015],["float tmp;",2015],["XRStats.TryGetStat(GetFirstDisplaySubsystem(), \"Example.DroppedFrame\", out tmp);",2015],["return (int)tmp;",2015],["public static float MyWorkerThreadStat()",2015],["float tmp;",2015],["XRStats.TryGetStat(GetFirstDisplaySubsystem(), \"Example.WorkerThreadStat\", out tmp);",2015],["return tmp;",2015],["// etc...",2015],["private static IntegratedSubsystem GetFirstDisplaySubsystem()",2015],["List displays = new List();",2015],["SubsystemManager.GetInstances(displays);",2015],["if (displays.Count == 0)",2015],["Debug.Log(\"No display subsystem found.\");",2015],["return null;",2015],["return displays[0];",2015],["Writing public accessor methods such as the example above can help users acquire stats without the need to sift through provider documentation and find the subsystem with which stats are registered.",2015],["Additionally, some subsystems have predefined stat tags. Your provider can provide stats for the predefined stats APIs that Unity exposes by registering subsystem specific stat tags (for example: Headers/XR/UnityXRDisplayStats.h).",2015],["UnitySubsystemsManifest.json",2016],["UnitySubsystemsManifest.json contains metadata about your provider that can be queried before your plugin is loaded. The values in this dictionary are used to populate specific instances of SubsystemDescriptors in C#. For example, information within the displays list is used to populate XRDisplaySubsystemDescriptors.",2016],["Example .json file:",2016],["```json",2016],["\"name\": \"PluginName\",",2016],["\"version\": \"1.0.0\",",2016],["\"libraryName\": \"UnityXRDisplayExample\",",2016],["\"displays\": [",2016],["\"id\": \"Display0\",",2016],["\"supportedMirrorBlitReservedModes\" : [\"leftEye\",\"rightEye\", \"sideBySide\"]",2016],["],",2016],["\"inputs:\": [",2016],["\"id\": \"MockHMD Head Tracking Stationary\"",2016],["},",2016],["\"id\": \"MockHMD Head Tracking Simulated\"",2016],["Metadata Description ",2016],["name The name of your provider. Must match the first parameter of your native plug-in's RegisterLifecycleHandler call. Likely to show up in UI in the future. ",2016],["version Unused currently. Likely to show up in UI in the future. ",2016],["libraryName Must match the name of your provider's native plug-in binary without the extension. ",2016],["displays Collection of Display subsystem providers. ",2016],["id Identifier for this display plug-in configuration. The id must match the string you pass into your native plug-in's RegisterLifecycleHandler call for that subsystem. You can have more than one display, as long as your native plugin calls RegisterLifecycleHandler for each. ",2016],["inputs Collection of Input subsystem providers. ",2016],["Your manifest file can include other displays after id - subsystems specify which parameters are valid.",2016],["Unity XR Input",2017],["This section of the Unity User Manual provides information about all of the Unity-supported input devices for virtual reality, augmented reality, and Windows Mixed Reality applications. This page covers the following topics:",2017],["XR platforms have a rich variety of input features that you can take advantage of when you design user interactions. Your application can use specific data that references positions, rotations, touch, buttons, joysticks, and finger sensors. However, access to these input features can vary a lot between platforms. For instance, there are small differences between the Vive and the Oculus Rift, but a VR-enabled desktop platform and a mobile platform like Daydream differ a lot more.",2017],["Unity provides a C# struct called InputFeatureUsage, which defines a standard set of physical device controls (such as buttons and triggers) to access user input on any platform. These help you identify input types by name. See XR.Input.CommonUsages for a definition of each InputFeatureUsage.",2017],["Each InputFeatureUsage corresponds to a common input action or type. For example, Unity defines the InputFeatureUsage called trigger as a single-axis input that the index finger controls, regardless of which XR platform you use. You can use InputFeatureUsage to get the trigger state using its name, so you don’t need to set up an axis (or a button on some XR platforms) for the conventional Unity Input system.",2017],["",2017],["XR input mappings",2017],["The following table lists the standard controller InputFeatureUsage names and how they map to the controllers of popular XR systems:",2017],["",2017],["InputFeatureUsage Feature type Legacy input index (left controller/right controller) WMR Oculus GearVR Daydream OpenVR (Full) Vive Oculus via OpenVR WMR via OpenVR ",2017],["primary2DAxis 2D axis [(1,2)/(4,5)] Touchpad Joystick Touchpad Touchpad Trackpad/Joystick Trackpad Joystick Joystick ",2017],["trigger Axis [9/10] Trigger Trigger Trigger Trigger Trigger Trigger Trigger Trigger ",2017],["grip Axis [11/12] Grip Grip Bumper Grip Grip Grip Grip ",2017],["secondary2DAxis 2D axis [(17,18)/(19,20)] Joystick Touchpad ",2017],["secondary2DAxisClick Button [18/19] Joystick - Click ",2017],["primaryButton Button [2/0] [X/A] - Press App Primary Primary (sandwich button)(1) Primary (Y/B) Menu ",2017],["primaryTouch Button [12/10] [X/A] - Touch ",2017],["secondaryButton Button [3/1] [Y/B] - Press Alternate Alternate (X/A) ",2017],["secondaryTouch Button [13/11] [Y/B] - Touch ",2017],["gripButton Button [4/5] Grip - Press Grip - Press Grip - Press Grip - Press Grip - Press Grip - Press ",2017],["triggerButton Button [14/15] Trigger - Press Trigger - Press Trigger - Press Trigger - Press Trigger - Press Trigger - Press Trigger - Touch Trigger - Press ",2017],["menuButton Button [6/7] Menu Start (left controller only) ",2017],["primary2DAxisClick Button [8/9] Touchpad - Click Thumbstick - Press Touchpad - Press Touchpad - Press Trackpad/Joystick - Press Trackpad - Press Joystick - Press Touchpad - Press ",2017],["primary2DAxisTouch Button [16/17] Touchpad - Touch Thumbstick - Touch Touchpad - Touch Touchpad - Touch Trackpad/Joystick - Touch Trackpad - Touch Joystick - Touch Touchpad - Touch ",2017],["batteryLevel Axis Battery level ",2017],["userPresence Button User presence User presence ",2017],["",2017],["(1) Sandwich button refers to the Vive menu button. This button is mapped to primaryButton, rather than menuButton, in order to better handle cross-platform applications.",2017],["See XR.Input.CommonUsages for a definition of each InputFeatureUsage.",2017],["",2017],["Accessing input devices",2017],["An InputDevice represents any physical device, such as a controller, mobile phone, or headset. It can contain information about device tracking, buttons, joysticks, and other input controls. For more information on the InputDevice API, see documentation on InputDevice.",2017],["Use the XR.InputDevices class to access input devices that are currently connected to the XR system. To get a list of all connected devices, use InputDevices.GetDevices:",2017],["var inputDevices = new List();",2017],["UnityEngine.XR.InputDevices.GetDevices(inputDevices);",2017],["foreach (var device in inputDevices)",2017],["Debug.Log(string.Format(\"Device found with name '{0}' and role '{1}'\", device.name, device.role.ToString()));",2017],["An input device remains valid across frames until the XR system disconnects it. Use the InputDevice.IsValid property to determine whether an InputDevice still represents an active controller.",2017],["You can access input devices by:",2017],["Characteristics",2017],["Role",2017],["XR node",2017],["Accessing input devices by characteristics",2017],["Device characteristics describe what a device is capable of, or what it's used for (for example, whether it is head-mounted). The InputDeviceCharacteristics is a series of flags you can add to your code to search for devices that fit a certain specification. You can filter devices by the following characteristics:",2017],["Device Characteristic ",2017],["HeadMounted The device is attached to the user's head. It has device tracking and center eye tracking. This flag is most commonly used to identify head-mounted displays (HMDs). ",2017],["Camera The device has camera tracking. ",2017],["HeldInHand The user holds the device in their hand. ",2017],["HandTracking The device represents a physically-tracked hand. It has device tracking, and might contain hand and bone data. ",2017],["EyeTracking The device can perform eye tracking and has an EyesData feature. ",2017],["TrackedDevice The device can be tracked in 3D space. It has device tracking. ",2017],["Controller The device has input data for buttons and axes, and can be used as a controller. ",2017],["TrackingReference The device represents a static tracking reference object. It has device tracking, but that tracking data shouldn't change. ",2017],["Left Use this characteristic in combination with the HeldInHand or HandTracking characteristics to identify the device as associated with the left hand. ",2017],["Right Use this characteristic in combination with the HeldInHand or HandTracking characteristics to identify the device as associated with the right hand. ",2017],["Simulated6DOF The device reports 6DOF data, but only has 3DOF sensors. Unity simulates the positional data. ",2017],["The underlying XR SDK reports these characteristics. You can look them up with InputDevice.Characteristics. A device can, and often should, have multiple characteristics that you can filter and access with bit flags.",2017],["InputDevices.GetDevicesWithCharacteristics provides a way to search for all devices with a given set of characteristics. For example, you can search for Left, HeldInHand, Controller InputDevices available in the system with the following code:",2017],["var leftHandedControllers = new List();",2017],["var desiredCharacteristics = UnityEngine.XR.InputDeviceCharacteristics.HeldInHand UnityEngine.XR.InputDeviceCharacteristics.Left UnityEngine.XR.InputDeviceCharacteristics.Controller;",2017],["UnityEngine.XR.InputDevices.GetDevicesWithCharacteristics(desiredCharacteristics, leftHandedControllers);",2017],["foreach (var device in leftHandedControllers)",2017],["Debug.Log(string.Format(\"Device name '{0}' has characteristics '{1}'\", device.name, device.characteristics.ToString()));",2017],["Devices this function finds contain at least the characteristics specified, but might contain additional characteristics. For example, to find a left handed controller you can look for InputDeviceCharacteristic.Left only, and not InputDeviceCharacteristic.Controller.",2017],["Accessing input devices by role",2017],["A device role describes the general function of an input device. Use the InputDeviceRole enumeration to specify a device role. The defined roles are:",2017],["Role Description ",2017],["GameController A console-style game controller. ",2017],["Generic A device that represents the core XR device, such as a head-mounted display or mobile device. ",2017],["HardwareTracker A tracking device. ",2017],["LeftHanded A device associated with the user’s left hand. ",2017],["RightHanded A device associated with the user’s right hand. ",2017],["TrackingReference A device that tracks other devices, such as an Oculus tracking camera. ",2017],["The underlying XR SDK reports these roles, but different providers might organize their device roles differently. Additionally, a user can switch hands, so the role assignment might not match the hand in which the user holds the input device. For example, a user must set up the Daydream controller as right or left-handed, but can choose to hold the controller in their opposite hand.",2017],["GetDevicesWithRole provides a list of any devices with a specific InputDeviceRole. For example, you can use InputDeviceRole.GameController to get any connected GameController devices:",2017],["var gameControllers = new List();",2017],["UnityEngine.XR.InputDevices.GetDevicesWithRole(UnityEngine.XR.InputDeviceRole.GameController, gameControllers);",2017],["foreach (var device in gameControllers)",2017],["Debug.Log(string.Format(\"Device name '{0}' has role '{1}'\", device.name, device.role.ToString()));",2017],["Accessing input devices by XR node",2017],["XR nodes represent the physical points of reference in the XR system (for example, the user’s head position, their right and left hands, or a tracking reference such as an Oculus camera).",2017],["The XRNode enumeration defines the following nodes:",2017],["XR node Description ",2017],["CenterEye A point midway between the pupils of the user’s eyes. ",2017],["GameController A console-style game controller. Your app can have multiple game controller devices. ",2017],["HardwareTracker A hardware tracking device, typically attached to the user or a physical item. Multiple hardware tracker nodes can exist. ",2017],["Head The center point of the user’s head, as calculated by the XR system. ",2017],["LeftEye The user’s left eye. ",2017],["LeftHand The user’s left hand. ",2017],["RightEye The user’s right eye. ",2017],["RightHand The user’s right hand. ",2017],["TrackingReference A tracking reference point, such as the Oculus camera. Multiple tracking reference nodes can exist. ",2017],["Use InputDevices.GetDevicesAtXRNode to get a list of devices associated with a specific XRNode. The following example demonstrates how to get a left-handed controller:",2017],["var leftHandDevices = new List();",2017],["UnityEngine.XR.InputDevices.GetDevicesAtXRNode(UnityEngine.XR.XRNode.LeftHand, leftHandDevices);",2017],["if(leftHandDevices.Count == 1)",2017],["UnityEngine.XR.InputDevice device = leftHandDevices[0];",2017],["Debug.Log(string.Format(\"Device name '{0}' with role '{1}'\", device.name, device.role.ToString()));",2017],["else if(leftHandDevices.Count > 1)",2017],["Debug.Log(\"Found more than one left hand!\");",2017],["Listening for device connections and disconnections",2017],["Input devices are consistent from frame to frame, but can connect or disconnect at any time. To avoid repeatedly checking if a device is connected to the platform, use InputDevices.deviceConnected and InputDevices.deviceDisconnected to notify your application when a device connects or disconnects. These also provide you with a reference to the newly connected input device.",2017],["Since you can retain these references over multiple frames, a device might disconnect, or is otherwise no longer available. To check if a device’s inputs are still available, use InputDevice.isValid. Scripts that access input devices should check this at the start of each frame before they attempt to use that device.",2017],["",2017],["Accessing input features on an input device",2017],["You can read an input feature, such as the state of a trigger button, from a specific InputDevice. For example, to read the state of the right trigger, follow these steps:",2017],["Use InputDeviceRole.RightHanded or XRNode.RightHand to get an instance of the right-handed device.",2017],["Once you have the correct device, use the InputDevice.TryGetFeatureValue method to access the current state.",2017],["TryGetFeatureValue() attempts to access the current value of a feature, and returns:",2017],["true if it successfully retrieves the specified feature value",2017],["false if the current device doesn't support the specified feature, or the device is invalid (that is, the controller is no longer active)",2017],["To get a particular button, touch input, or joystick axis value, use the CommonUsages class. CommonUsages includes each InputFeatureUsage in the XR input mapping table, as well as tracking features like position and rotation. The following code example uses CommonUsages.triggerButton to detect whether the user is currently pressing the trigger button on a particular InputDevice instance:",2017],["bool triggerValue;",2017],["if (device.TryGetFeatureValue(UnityEngine.XR.CommonUsages.triggerButton, out triggerValue) && triggerValue)",2017],["Debug.Log(\"Trigger button is pressed.\");",2017],["You can also use the InputDevice.TryGetFeatureUsages method to get a list of every InputFeatureUsage that a device provides. This function returns a list of InputFeatureUsage items, which have a type and a name property that describes the feature. The following example enumerates all of the Boolean features that a given input device provides:",2017],["var inputFeatures = new List();",2017],["if (device.TryGetFeatureUsages(inputFeatures))",2017],["foreach (var feature in inputFeatures)",2017],["if (feature.type == typeof(bool))",2017],["bool featureValue;",2017],["if (device.TryGetFeatureValue(feature.As(), out featureValue))",2017],["Debug.Log(string.Format(\"Bool feature {0}'s value is {1}\", feature.name, featureValue.ToString()));",2017],["Example for primaryButton",2017],["Different controller configurations provide access to different features. For example, you might have multiple controllers on one system, different controllers on different systems, or different buttons on the same controllers with different SDKs. This diversity makes it more complicated to support input from a range of XR systems. The Unity InputFeatureUsage API helps you get input that isn't platform-dependent.",2017],["The following example accesses the InputFeatureUsage called primaryButton, no matter which controller or input device provides it. The example includes a class that scans the available devices for the primaryButton as they connect. The class monitors the value of the feature on any connected device and, if the value changes, the class dispatches a UnityEvent.",2017],["To use this class, add it as a component to any GameObject in the Scene. For example:",2017],["using System.Collections.Generic;",2017],["using UnityEngine;",2017],["using UnityEngine.Events;",2017],["using UnityEngine.XR;",2017],["[System.Serializable]",2017],["public class PrimaryButtonEvent : UnityEvent { }",2017],["public class PrimaryButtonWatcher : MonoBehaviour",2017],["public PrimaryButtonEvent primaryButtonPress;",2017],["private bool lastButtonState = false;",2017],["private List devicesWithPrimaryButton;",2017],["private void Awake()",2017],["if (primaryButtonPress == null)",2017],["primaryButtonPress = new PrimaryButtonEvent();",2017],["devicesWithPrimaryButton = new List();",2017],["void OnEnable()",2017],["List allDevices = new List();",2017],["InputDevices.GetDevices(allDevices);",2017],["foreach(InputDevice device in allDevices)",2017],["InputDevices_deviceConnected(device);",2017],["InputDevices.deviceConnected += InputDevices_deviceConnected;",2017],["InputDevices.deviceDisconnected += InputDevices_deviceDisconnected;",2017],["private void OnDisable()",2017],["InputDevices.deviceConnected -= InputDevices_deviceConnected;",2017],["InputDevices.deviceDisconnected -= InputDevices_deviceDisconnected;",2017],["devicesWithPrimaryButton.Clear();",2017],["private void InputDevices_deviceConnected(InputDevice device)",2017],["bool discardedValue;",2017],["if (device.TryGetFeatureValue(CommonUsages.primaryButton, out discardedValue))",2017],["devicesWithPrimaryButton.Add(device); // Add any devices that have a primary button.",2017],["private void InputDevices_deviceDisconnected(InputDevice device)",2017],["if (devicesWithPrimaryButton.Contains(device))",2017],["devicesWithPrimaryButton.Remove(device);",2017],["void Update()",2017],["bool tempState = false;",2017],["foreach (var device in devicesWithPrimaryButton)",2017],["bool primaryButtonState = false;",2017],["tempState = device.TryGetFeatureValue(CommonUsages.primaryButton, out primaryButtonState) // did get a value",2017],["&& primaryButtonState // the value we got",2017],["tempState; // cumulative result from other controllers",2017],["if (tempState != lastButtonState) // Button state changed since last frame",2017],["primaryButtonPress.Invoke(tempState);",2017],["lastButtonState = tempState;",2017],["The following PrimaryReactor class uses the PrimaryButtonWatcher to detect when you press a primary button and, in response to a press, rotates its parent GameObject. To use this class, add it to a visible GameObject, such as a Cube, and drag the PrimaryButtonWatcher reference to the Watcher property.",2017],["using System.Collections;",2017],["using UnityEngine;",2017],["public class PrimaryReactor : MonoBehaviour",2017],["public PrimaryButtonWatcher watcher;",2017],["public bool IsPressed = false; // used to display button state in the Unity Inspector window",2017],["public Vector3 rotationAngle = new Vector3(45, 45, 45);",2017],["public float rotationDuration = 0.25f; // seconds",2017],["private Quaternion offRotation;",2017],["private Quaternion onRotation;",2017],["private Coroutine rotator;",2017],["void Start()",2017],["watcher.primaryButtonPress.AddListener(onPrimaryButtonEvent);",2017],["offRotation = this.transform.rotation;",2017],["onRotation = Quaternion.Euler(rotationAngle) * offRotation;",2017],["public void onPrimaryButtonEvent(bool pressed)",2017],["IsPressed = pressed;",2017],["if (rotator != null)",2017],["StopCoroutine(rotator);",2017],["if (pressed)",2017],["rotator = StartCoroutine(AnimateRotation(this.transform.rotation, onRotation));",2017],["else",2017],["rotator = StartCoroutine(AnimateRotation(this.transform.rotation, offRotation));",2017],["private IEnumerator AnimateRotation(Quaternion fromRotation, Quaternion toRotation)",2017],["float t = 0;",2017],["while (t < rotationDuration)",2017],["transform.rotation = Quaternion.Lerp(fromRotation, toRotation, t / rotationDuration);",2017],["t += Time.deltaTime;",2017],["yield return null;",2017],["Accessing hand-tracking data",2017],["InputDevices support hand-tracking devices. A hand-tracking device always:",2017],["has the HandTracking characteristic",2017],["contains a CommonUsages.HandData usage of the Hand type",2017],["Hand-tracking data consists of a Hand object and a series of up to 21 Bone input features. Each Bone has a position and orientation, as well as references to both its parent and any child bones in the hierarchy. The Hand object can get either the root bone, or a list of bones for each individual finger.",2017],["When Hand.TryGetRootBone gets the root bone, it retrieves an object that represents a bone located just above the wrist. You can also get a list of bones that represents each individual finger. Calling Hand.TryGetFingerBones returns a list, from knuckle to tip, of the bones that represents that finger.",2017],["Accessing eye-tracking data",2017],["Input devices support eye-tracking devices, as well as hand-tracking devices. Eye-tracking consists of the left and right eye positions, the location in 3D space where the user is looking, and the amount that each individual eye is blinking. Its data type is Eyes. To retrieve it from a device, use CommonUsages.eyesData.",2017],["XRInputSubsystem and InputDevice association",2017],["Unity provides two input systems: the legacy input system, and the XR plugin architecture introduced in 2019.2. In the new setup, each InputDevice is associated with an XRInputSubsystem. These subsystem objects control global input behavior that isn't associated with any specific input device (for example, managing the tracking origin, or recentering tracked devices).",2017],["Each InputDevice contains a reference to its associated subsystem. This reference is null if the device comes from an integrated platform. You can also get all active XRInputSubsystem objects with SubsystemManager.GetInstances<XRInputSubsystem>, and each XRInputSubsystem can get its devices with XRInputSubsystem.TryGetInputDevices.",2017],["You can use the Input Subsystem to recenter devices with UnityEngine.XR.XRInputSubsystem. Recenter sets the current position of the HMD as the new origin for all devices. It returns false for devices that can't be recentered, or if the platform doesn't support recentering.",2017],["To retrieve the tracking boundary, use TryGetBoundaryPoints. This consists of a series of clockwise-ordered 3D points, where the y-value is at floor level, and they mark out the user-specified ‘safe zone’ to place content and interactions. You can listen for changes to this boundary with XRInputSubsystem.boundaryChanged.",2017],["The XRInputSubsystem is also responsible for the tracking origin mode, which provides context for where the origin of the tracking world is. Unity supports the following tracking origin modes:",2017],["Device: The origin’s location is at the first known location of the primary display device; often an HMD or a phone.",2017],["Floor: The origin’s location is at a known location on the floor.",2017],["Tracking Reference: The origin’s location is on an InputDevice with the TrackingReference characteristic set.",2017],["Unknown: The type of tracking origin is unknown. This can be because of a system failure or lack of tracking origin-mode support.",2017],["There are three APIs you can use to manage the tracking origin mode:",2017],["XRInputSubsystem.TrySetTrackingOriginMode sets the tracking origin mode",2017],["XRInputSubystem.GetTrackingOriginMode retrieves the tracking origin mode",2017],["XRInputSubsystem.GetSupportedTrackingOriginModes retrieves all tracking origin modes that the SDK supports",2017],["",2017],["XR input through the legacy input system",2017],["You can still use the legacy input system, consisting of Input and XR.InputTracking, to retrieve XR input features. To do this, use the appropriate legacy input indices from the XR input mappings table on this page. In the Input section of the Player Settings (menu: Edit > Project Settings > Input), create an axis mapping to add the appropriate mapping from input name to axis index for the platform device’s feature. To retrieve the button or axis value, use Input.GetAxis or Input.GetButton and pass in the now-mapped axis or button name.",2017],["For more information about how to use the button and joystick axes, see documentation on the InputManager.",2017],["",2017],["Haptics",2017],["You can send haptic events to an InputDevice. Haptics take on the form of an impulse, with an amplitude and duration.",2017],["Not all platforms support all types of haptics, but you can query a device for haptic capabilities. The following example gets an input device for the right hand, checks to see if the device is capable of haptics, and then plays back an impulse if it's capable:",2017],["List devices = new List();",2017],["UnityEngine.XR.InputDevices.GetDevicesWithRole(UnityEngine.XR.InputDeviceRole.RightHanded, devices);",2017],["foreach (var device in devices)",2017],["UnityEngine.XR.HapticCapabilities capabilities;",2017],["if (device.TryGetHapticCapabilities(out capabilities))",2017],["if (capabilities.supportsImpulse)",2017],["uint channel = 0;",2017],["float amplitude = 0.5f;",2017],["float duration = 1.0f;",2017],["device.SendHapticImpulse(channel, amplitude, duration);",2017],["An Example of a YAML Scene File",2018],["An example of a simple but complete scene is given below. The scene contains just a camera and a cube object. Note that the file must start with the two lines",2018],["%YAML 1.1",2018],["%TAG !u! tag:unity3d.com,2011:",2018],["...in order to be accepted by Unity. Otherwise, the import process is designed to be tolerant of omissions - default values will be supplied for missing property data as far as possible.",2018],["%YAML 1.1",2018],["%TAG !u! tag:unity3d.com,2011:",2018],["--- !u!header",2018],["SerializedFile:",2018],["m_TargetPlatform: 4294967294",2018],["m_UserInformation:",2018],["--- !u!29 &1",2018],["Scene:",2018],["m_ObjectHideFlags: 0",2018],["m_PVSData:",2018],["m_QueryMode: 1",2018],["m_PVSObjectsArray: []",2018],["m_PVSPortalsArray: []",2018],["m_ViewCellSize: 1.000000",2018],["--- !u!104 &2",2018],["RenderSettings:",2018],["m_Fog: 0",2018],["m_FogColor: {r: 0.500000, g: 0.500000, b: 0.500000, a: 1.000000}",2018],["m_FogMode: 3",2018],["m_FogDensity: 0.010000",2018],["m_LinearFogStart: 0.000000",2018],["m_LinearFogEnd: 300.000000",2018],["m_AmbientLight: {r: 0.200000, g: 0.200000, b: 0.200000, a: 1.000000}",2018],["m_SkyboxMaterial: {fileID: 0}",2018],["m_HaloStrength: 0.500000",2018],["m_FlareStrength: 1.000000",2018],["m_HaloTexture: {fileID: 0}",2018],["m_SpotCookie: {fileID: 0}",2018],["m_ObjectHideFlags: 0",2018],["--- !u!127 &3",2018],["GameManager:",2018],["m_ObjectHideFlags: 0",2018],["--- !u!157 &4",2018],["LightmapSettings:",2018],["m_ObjectHideFlags: 0",2018],["m_LightProbeCloud: {fileID: 0}",2018],["m_Lightmaps: []",2018],["m_LightmapsMode: 1",2018],["m_BakedColorSpace: 0",2018],["m_UseDualLightmapsInForward: 0",2018],["m_LightmapEditorSettings:",2018],["m_Resolution: 50.000000",2018],["m_LastUsedResolution: 0.000000",2018],["m_TextureWidth: 1024",2018],["m_TextureHeight: 1024",2018],["m_BounceBoost: 1.000000",2018],["m_BounceIntensity: 1.000000",2018],["m_SkyLightColor: {r: 0.860000, g: 0.930000, b: 1.000000, a: 1.000000}",2018],["m_SkyLightIntensity: 0.000000",2018],["m_Quality: 0",2018],["m_Bounces: 1",2018],["m_FinalGatherRays: 1000",2018],["m_FinalGatherContrastThreshold: 0.050000",2018],["m_FinalGatherGradientThreshold: 0.000000",2018],["m_FinalGatherInterpolationPoints: 15",2018],["m_AOAmount: 0.000000",2018],["m_AOMaxDistance: 0.100000",2018],["m_AOContrast: 1.000000",2018],["m_TextureCompression: 0",2018],["m_LockAtlas: 0",2018],["--- !u!196 &5",2018],["NavMeshSettings:",2018],["m_ObjectHideFlags: 0",2018],["m_BuildSettings:",2018],["cellSize: 0.200000",2018],["cellHeight: 0.100000",2018],["agentSlope: 45.000000",2018],["agentClimb: 0.900000",2018],["ledgeDropHeight: 0.000000",2018],["maxJumpAcrossDistance: 0.000000",2018],["agentRadius: 0.400000",2018],["agentHeight: 1.800000",2018],["maxEdgeLength: 12",2018],["maxSimplificationError: 1.300000",2018],["regionMinSize: 8",2018],["regionMergeSize: 20",2018],["tileSize: 500",2018],["detailSampleDistance: 6.000000",2018],["detailSampleMaxError: 1.000000",2018],["accuratePlacement: 0",2018],["m_NavMesh: {fileID: 0}",2018],["--- !u!1 &6",2018],["GameObject:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["importerVersion: 3",2018],["m_Component:",2018],["\n4: {fileID: 8}\n",2018],["\n33: {fileID: 12}\n",2018],["\n65: {fileID: 13}\n",2018],["\n23: {fileID: 11}\n",2018],["m_Layer: 0",2018],["m_Name: Cube",2018],["m_TagString: Untagged",2018],["m_Icon: {fileID: 0}",2018],["m_NavMeshLayer: 0",2018],["m_StaticEditorFlags: 0",2018],["m_IsActive: 1",2018],["--- !u!1 &7",2018],["GameObject:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["importerVersion: 3",2018],["m_Component:",2018],["\n4: {fileID: 9}\n",2018],["\n20: {fileID: 10}\n",2018],["\n92: {fileID: 15}\n",2018],["\n124: {fileID: 16}\n",2018],["\n81: {fileID: 14}\n",2018],["m_Layer: 0",2018],["m_Name: Main Camera",2018],["m_TagString: MainCamera",2018],["m_Icon: {fileID: 0}",2018],["m_NavMeshLayer: 0",2018],["m_StaticEditorFlags: 0",2018],["m_IsActive: 1",2018],["--- !u!4 &8",2018],["Transform:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 6}",2018],["m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}",2018],["m_LocalPosition: {x: -2.618721, y: 1.028581, z: 1.131627}",2018],["m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}",2018],["m_Children: []",2018],["m_Father: {fileID: 0}",2018],["--- !u!4 &9",2018],["Transform:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 7}",2018],["m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}",2018],["m_LocalPosition: {x: 0.000000, y: 1.000000, z: -10.000000}",2018],["m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}",2018],["m_Children: []",2018],["m_Father: {fileID: 0}",2018],["--- !u!20 &10",2018],["Camera:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 7}",2018],["m_Enabled: 1",2018],["importerVersion: 2",2018],["m_ClearFlags: 1",2018],["m_BackGroundColor: {r: 0.192157, g: 0.301961, b: 0.474510, a: 0.019608}",2018],["m_NormalizedViewPortRect:",2018],["importerVersion: 2",2018],["x: 0.000000",2018],["y: 0.000000",2018],["width: 1.000000",2018],["height: 1.000000",2018],["near clip plane: 0.300000",2018],["far clip plane: 1000.000000",2018],["field of view: 60.000000",2018],["orthographic: 0",2018],["orthographic size: 100.000000",2018],["m_Depth: -1.000000",2018],["m_CullingMask:",2018],["importerVersion: 2",2018],["m_Bits: 4294967295",2018],["m_RenderingPath: -1",2018],["m_TargetTexture: {fileID: 0}",2018],["m_HDR: 0",2018],["--- !u!23 &11",2018],["Renderer:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 6}",2018],["m_Enabled: 1",2018],["m_CastShadows: 1",2018],["m_ReceiveShadows: 1",2018],["m_LightmapIndex: 255",2018],["m_LightmapTilingOffset: {x: 1.000000, y: 1.000000, z: 0.000000, w: 0.000000}",2018],["m_Materials:",2018],["\n{fileID: 10302, guid: 0000000000000000e000000000000000, type: 0}\n",2018],["m_SubsetIndices:",2018],["m_StaticBatchRoot: {fileID: 0}",2018],["m_LightProbeAnchor: {fileID: 0}",2018],["m_UseLightProbes: 0",2018],["m_ScaleInLightmap: 1.000000",2018],["--- !u!33 &12",2018],["MeshFilter:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 6}",2018],["m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}",2018],["--- !u!65 &13",2018],["BoxCollider:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 6}",2018],["m_Material: {fileID: 0}",2018],["m_IsTrigger: 0",2018],["m_Enabled: 1",2018],["importerVersion: 2",2018],["m_Size: {x: 1.000000, y: 1.000000, z: 1.000000}",2018],["m_Center: {x: 0.000000, y: 0.000000, z: 0.000000}",2018],["--- !u!81 &14",2018],["AudioListener:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 7}",2018],["m_Enabled: 1",2018],["--- !u!92 &15",2018],["Behaviour:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 7}",2018],["m_Enabled: 1",2018],["--- !u!124 &16",2018],["Behaviour:",2018],["m_ObjectHideFlags: 0",2018],["m_PrefabParentObject: {fileID: 0}",2018],["m_PrefabInternal: {fileID: 0}",2018],["m_GameObject: {fileID: 7}",2018],["m_Enabled: 1",2018],["--- !u!1026 &17",2018],["HierarchyState:",2018],["m_ObjectHideFlags: 0",2018],["expanded: []",2018],["selection: []",2018],["scrollposition_x: 0.000000",2018],["scrollposition_y: 0.000000",2018]],"common":{"also":1,"get":1,"see":1,"class":1,"and":1,"you":1,"be":1,"as":1,"that":1,"this":1,"attached":1,"both":1,"on":1,"to":1,"none":1,"if":1,"is":1,"from":1,"for":1,"var":1,"function":1,"when":1,"use":1,"in":1,"at":1,"will":1,"print":1,"of":1,"with":1,"ref":1,"by":1,"returns":1,"the":1,"only":1,"used":1,"can":1,"wiki":1,"set":1,"a":1,"are":1,"not":1,"or":1,"it":1,"an":1},"searchIndex":{"lies":[13096,21206,58145,72336],"few":[11,64,1982,2192,2345,3998,4184,4772,5017,5288,5497,5980,6831,8146,8436,9653,9982,10080,10711,11315,12506,13028,14710,14821,14849,18535,20222,20714,21180,21322,22661,24468,24766,24794,24968,25062,26725,26908,27143,28439,28667,29248,29713,30358,31720,33088,33424,35746,35894,36223,37627,37724,40174,40555,40650,40741,41339,42365,43224,45740,47262,48335,49355,49651,51952,52673,54560,55687,55839,60450,62610,66931,66984,70413,71771,72788,72926,75122,75223,75784],"kunityxrinputfeatureusageeyesdata":[75668],"viewing":[2196,2263,2387,2422,3229,4385,4412,6758,8122,8834,9929,10737,19451,21255,22411,25084,27512,27818,28848,29439,30401,36713,39252,39740,42939,43287,48683,49446,49530,66674,66955,70319,71319,71430,72741],"ish":[42256],"moveend":[51548],"onboxclicked":[55845],"assetdatabase":[2472,3087,3493,3582,3673,3721,3775,8703,13956,14026,14117,18951,19482,30666,40753,48174,48556,48756,51457,51607,51702,51815,54878,56553,56828,58818,59055,60148,60184,60866,61575,61680,65834,68614,68969,69216,69683,72432],"subemitter":[31840],"gpos":[58459],"zfail":[21758,45859],"shader_target":[43947],"4gb+":[36608],"maya®'s":[24660],"level":[250,687,921,1104,1402,1491,1518,1661,2360,3468,3484,3855,4145,4467,4773,4832,5074,5207,5730,5829,5969,6046,6797,6859,6937,7374,7517,7685,7715,7735,7791,7873,7878,8003,8065,8118,8765,8834,9464,9964,10080,10326,10737,10803,10984,11001,11066,11177,11199,11221,11707,12179,12366,12554,12865,13220,13364,13412,13598,13826,14029,14336,14718,14826,14860,15838,16106,16869,16883,17000,17030,17723,17835,17993,18454,18509,18568,18669,19219,19296,20216,21307,21447,21867,22061,22186,22534,23449,23498,23619,23781,24371,24526,24792,24929,25141,25268,25436,25901,26070,26253,26661,27450,27687,27747,27912,27936,28050,28061,28457,28465,29138,29157,29373,29416,29923,30001,30184,30292,30327,30373,30489,30502,30862,31142,33083,33392,33515,33829,34230,34305,34391,34510,34624,34682,34930,35000,35741,35959,36006,36060,36219,36399,36703,36746,36822,36823,36977,37235,37345,37526,37639,37678,37684,37694,38251,38298,38435,38455,38751,39097,39512,39996,40151,40169,40256,40446,40734,41375,41963,42195,43122,43198,43942,44428,44903,45255,45435,45478,45517,45735,45939,46718,46877,47098,48225,48268,48802,49170,49182,49282,49357,49470,49474,49486,49496,49505,49540,49631,49659,50003,50058,50131,50148,50361,50537,50614,50683,50703,50960,51013,51849,52224,52598,53249,53734,54068,54107,55545,55633,55894,56159,56837,57797,58101,59064,60219,61314,63817,63972,64468,65031,66034,66043,66225,66402,66468,67186,68160,68304,68309,68460,68681,68709,69366,69470,70225,70571,70686,70953,71529,71755,71809,71972,72393,72673,72728,73345,73458,73896,74160,74259,74503,74581,74713,74866,75144,75314,75642,75913,76117],"pnl7jym3azv+qumdfm3bje0hsmap00gutjxbe31kh4e7n5":[69914],"product_names":[53602],"viewportpointtoray":[6723],"materialpropertyblocks":[23362,49321],"myelement4":[61582],"paramdefs":[4892],"panes":[54471,59064],"plateaus":[50537],"illuminated":[22902,26925,38354,42530,42535,42540,42545,42575,42580,42585,42590,43154,43177,45194,45632,47708,71809],"hierarchystate":[15244,76563],"removal":[11394,11653,20647,43729,68545,68667,71108,71412],"textureexternal":[44372],"squelch":[34943],"otherexamplerenderpipelineasset":[44223],"min16int4":[8468],"profilerrecordapi":[21914],"unitygi":[46514,46653],"buildlinux64player":[21058],"discouraged":[43959,59872,71423],"miniature":[21975],"seldom":[29728,30164],"negated":[13919,45285],"arcade":[5898,29827,53285],"connectionconfig":[66157,66321],"drawcallsrecorder":[36408],"redbox":[60869],"cosine":[4916,20694,47100,72333],"smaa":[34861,37957],"supporting":[652,2063,2990,10584,16378,16392,17092,20244,23032,24649,27169,28054,30282,37901,43336,44360,45568,47666,49904,50286,52702,52748,69029,69282],"gettype":[36863,37070,49807],"merge":[1003,1266,1376,8379,13385,23403,26381,27058,35092,36092,48052,49762,64328,72405],"3gp":[10764],"setter":[28526],"bases":[18665,21550,36638],"minimally":[40790,75909],"clibatchmodecoroutines":[17936],"indexcount":[75812],"degenerate":[7325,10573],"hl":[53007],"cancelled":[4665,5277,29600,53476,57814,60776,67732],"150x150":[12464],"completed":[2827,3823,4084,4539,4665,21325,22151,22339,26463,26478,32154,33083,35719,35951,36898,37160,51549,51954,53218,53271,53813,54509,54912,54964,55064,55163,55236,55310,55370,56126,56213,56274,56328,56395,56478,56524,56593,56737,56800,56983,57126,57338,58595,58999,59272,59577,59911,60675,60882,60983,61198,61595,61750,62342,62498,62644,65780,66747,67296,67873,74830,75431],"tighter":[18611],"unitywebrequestwww":[16801,30945],"suggestions":[3981,4043,11916,12367,12555,18481,19220,34306,34392,34511,37672],"floatvalue1":[52353],"editorcoroutines":[16249,31330,31420],"uta_agent_protobuf_bytes_in":[66654],"rgba8_snorm":[8462],"meshtopology":[345],"loudest":[7670,7793],"setbool":[2013,24819,29107],"exampleassets":[75058],"hotspots":[33346],"basecols":[8666],"s_gradientto":[56759],"unity_setup_brdf_input":[29512],"diffusely":[29551],"leftwheel":[74442],"int4":[8467],"dzd":[53672],"plum":[63623],"unitypluginload":[27893,27970,29926,34633,75265,75922,75992],"referential":[38674,56117],"posed":[68037],"playscheduled":[73068],"visualelement'":[54543],"octave":[7697,32221],"screenlayout":[825],"extremumslip":[14968],"committed":[36225],"remotely":[6476,22409,66759,72452,74814],"uidocument":[57206,57701,58149,58584,59390,59567,59787,60471,60526,60610,60742,61318,61522,62745,63069,65735],"rezheight":[20485],"basecol":[8674],"hotspot":[11678,60402],"sudo":[19631,25478],"cachedirectory":[1441],"alternatively":[179,2191,2332,2419,4169,4428,7865,7939,7986,8074,8575,10370,12783,13208,13552,13816,13903,18682,18896,18991,20597,21037,22036,23417,23697,24641,25147,25365,25680,25952,26034,26356,27095,34663,34771,35782,43128,43195,43277,44272,47190,48662,50542,50583,52994,54901,56310,66382,66636,66987,68367,68825,69058,69897,70627,71859,72901,73178,74000,75433],"m_onresizeregistrationtoken":[74692],"“red”":[45077],"xrcontrollerright":[75064],"audiomixersnapshotcontroller":[15206],"destinationfactor":[43741],"about":[12,14,62,218,494,514,618,870,882,894,938,963,1096,1202,1243,1384,1520,1787,1891,1994,2063,2211,2216,2460,2764,2952,2958,3066,3256,3289,3325,3418,3506,3511,3593,3839,3870,3897,3996,4105,4161,4170,4206,4217,4245,4374,4400,4427,4445,4501,4531,4651,4722,4776,4959,5165,5176,5181,5274,5674,5829,5921,6056,6321,6725,6752,6762,6790,6795,6807,6920,6937,7113,7179,7287,7482,7569,7576,7625,7766,7944,7995,8039,8124,8226,8398,8427,9021,9033,9193,9324,9328,9513,9557,9621,9712,9756,9777,9939,9994,10096,10112,10328,10415,10491,10581,10695,10727,10757,11191,11312,11370,11404,11461,11565,11687,11895,12097,12320,12663,12731,12895,12989,13018,13133,13190,13208,13355,13582,13622,13699,13704,13799,13884,13904,14277,14313,14754,14817,14860,15017,15814,16043,16168,16527,17735,17939,17963,17999,18243,18456,18539,18585,18659,18670,18926,19026,19050,19120,19152,19281,19287,19316,19336,19364,19618,19663,19675,20091,20210,20383,20402,20438,21006,21024,21173,21299,21400,21446,21599,21636,21639,21685,21694,21846,21865,21962,22002,22019,22029,22109,22147,22234,22632,23252,23381,24096,24276,24503,24528,24638,24745,24793,24951,25043,25106,25150,25169,25229,25396,25684,25720,25751,25828,25835,26040,26084,26179,26374,26582,26695,26824,26950,27060,27075,27114,27189,27217,27270,27312,27330,27478,27482,27496,27544,27756,28105,28119,28127,28252,28310,28404,28480,28605,28829,28862,28957,29019,29150,29406,29411,29468,29482,29581,29619,29759,29774,29832,30033,30138,30151,30166,30273,30320,30364,30397,30516,30824,31016,31366,31382,31386,31602,31613,31703,32775,33069,33296,33393,33463,33607,33655,33775,33883,34612,34645,34661,34846,35089,35264,35366,35603,35622,35756,35769,35793,35901,35924,35957,35979,36031,36118,36189,36286,36296,36354,36446,36463,36576,36742,36901,37050,37275,37285,37322,37556,37637,37679,38253,38324,38446,38533,38681,39071,39099,39128,39179,39347,39450,39495,39580,39648,39791,39900,40064,40134,40156,40173,40439,40516,40676,40683,40775,41379,41424,41554,41768,41816,42106,42328,42354,42449,42597,42816,43003,43100,43150,43223,43336,44300,44513,44687,44896,45726,47825,48165,48205,48237,48302,48872,48940,49066,49311,49421,49465,49533,49562,49644,49669,49710,49728,49764,49893,50323,50407,50499,50547,50575,50616,50628,50649,50678,50691,50708,50757,50917,50934,50952,50993,51133,51174,51222,51232,51274,51820,52095,52239,52496,52558,52706,52739,52849,53309,53750,54008,54227,55993,56063,56163,57798,58069,58173,58213,58270,58338,58731,59191,59732,59957,60196,60761,62030,62767,62935,63689,63701,64138,64214,64336,64378,65031,65916,65920,65955,66099,66160,66185,66405,66721,66955,66961,67659,67759,67987,68050,68935,69179,69373,69477,69507,69636,69725,69871,70044,70312,70571,70608,70763,70801,70966,71049,71128,71194,71249,71301,71359,71395,71417,71484,71528,71612,71663,71814,71904,71935,71995,72077,72097,72110,72132,72136,72148,72364,72639,72759,72786,72910,72974,73028,73370,73410,73429,73626,73639,74014,74127,74130,74222,74410,74434,74582,74849,74887,74916,74982,75082,75107,75135,75189,75202,75249,75259,75318,75377,75503,75765,75915,76071,76094],"resorting":[59852],"shell":[779,18922,19627,26036,28616,28679,32434,35619,35866,36558,70046,70456,70917],"meshwritedata":[61070],"lightingwraplambert":[46580],"haven't":[3909,4066,4238,4366,4459,13115,26849,31368,43199,53380,53851,61624,62017,67774,71266,71291],"compresswithlz4hc":[6376,6436,6480,28174,74637,74796],"supportsraytracing":[19776],"workers":[26361,29315,31642],"vicinity":[51787,51813],"centerofmass":[33674],"attempting":[1888,3307,3396,3566,6059,6123,9734,13564,13670,13863,13970,14994,30135,40711,43186,52043,52609,58776,66359,67295,67800],"normalizedtime":[2167],"difficult":[2439,3447,3949,5921,5998,6844,6892,9321,18509,23454,24580,24923,24984,25849,26084,28457,31662,33404,34897,35029,36480,36680,39308,39964,40177,41251,43414,44541,45577,50651,61443,62833,66518,67136,67763,70965,71876,74214],"someconsumable":[67007],"feel":[3252,3455,5116,8203,24728,27575,37399,53324,54795,62836,63068,67651],"reconstruction":[27468],"unitywebrequesttexture":[16793,30944,68361],"rebought":[66965,67019,67230,67841],"filling":[1919,4055,4244,39591,39714,51533,53979,67054,75450,75568,75762,76037],"wastes":[27003,41813],"help":[65,78,470,583,931,1325,1653,1703,1706,1755,2272,2395,2543,2586,3004,3866,3906,3949,4033,4132,4267,4379,4426,4510,4537,4653,5764,5829,6819,6859,6936,7215,7831,8189,8286,8787,8972,9058,10725,11589,11808,12157,12419,13347,13616,16470,17268,17398,17759,17865,18112,18215,18322,18413,18505,18662,18716,19286,19653,20612,20834,21344,21439,21607,21832,21956,22132,22651,23434,23668,23818,24526,24778,24916,25097,25845,25980,26258,26271,26838,27015,27125,27815,27980,28895,28946,29121,29153,29595,29714,31592,31720,32115,32319,32360,32701,32924,34222,35080,35264,35622,36074,36231,36296,36509,37463,37519,37585,37606,37618,37681,38262,38736,38873,39138,39246,39322,39797,40541,40544,41320,41347,41430,42949,43110,43185,43981,44625,45229,45616,48188,48329,48376,49148,49659,50289,50583,51269,51405,52008,52554,52849,53147,53255,54121,54760,59892,64257,64733,65979,65998,66336,66555,66916,67669,67760,68039,68050,68072,68406,68546,69893,70404,70650,70872,70914,70940,71020,71212,71257,71404,71612,72364,72538,72608,72759,73022,74365,75015,75346,75522,76068,76096],"dae":[6699,21464,29754],"set's":[21982],"#3e3e3e":[63321],"sienna":[63635],"pointerdownevent":[56913,57456,57571,60253,60768],"ctrl+":[23737],"glancing":[49530],"dir_gradleproject":[23510],"keypadenter":[61817],"addcursorrect":[59592],"job’s":[26376,26509,31653],"deliverytype":[486],"visualtree":[56360,56437,56828,58000,58818,60587,60866,61680,65834],"jumptarget":[50331],"flowers":[50401,50626,52206],"tracks":[2172,2324,3465,6125,6783,7784,9200,9843,14801,14876,18315,21325,25097,26459,33457,35266,35404,35969,36023,36120,36233,36298,38501,39614,52095,53491,55547,60223,70594,71032,71248,72610,72633,72706,76165],"historically":[27500],"x64":[17558,17675,17690,17705,31092,31460,34575,50168,66776,72211,72273],"rt4":[38358],"regula":[58675],"mipmapped":[74260],"unityshadervariables":[43915],"travelled":[31860],"windzone":[15040,15158,16835],"deferredshading":[38377,72752],"what":[14,64,169,234,431,554,572,921,960,1113,1127,1353,1355,1497,1570,2004,2089,2197,2232,2353,3242,3520,3728,3826,3839,3949,4140,4206,4256,4388,4434,4531,4707,4801,4845,4877,5038,5138,5231,5347,5350,5641,5690,5901,6102,6755,7029,7164,7391,7621,8054,8838,8972,9329,10345,10711,11075,11245,11306,12222,12345,12452,12895,12990,13263,13363,13427,13538,13797,14224,14717,17398,17986,17992,18091,18357,18665,18746,18795,18910,19122,19938,20240,20891,20963,21002,21029,21195,21447,21636,22013,22029,22189,22540,24098,24169,24519,24728,24745,24906,25030,25043,25113,25197,25346,25358,26110,26248,26459,26666,27052,27934,28071,28110,28404,28493,28990,29012,29108,29133,29413,29662,29720,29759,30184,30261,30273,30320,30826,32648,32755,33527,33715,34192,34318,34511,34855,34956,35031,35504,35684,35793,35901,36081,36337,36354,36463,36710,37315,37475,37654,37678,37688,37738,38641,38862,39078,39167,39290,39447,39807,39822,39921,40104,40486,40521,40541,41320,41754,42106,42354,42402,42449,42677,42811,42949,43508,43611,43920,44165,44533,44702,44808,44868,45211,45567,45724,45858,46248,46722,47415,48607,49035,49421,49523,49614,50945,50962,51032,51228,51788,51814,51965,52095,52124,52204,52584,52921,52951,53318,53713,54043,54558,54789,58131,59564,61388,61443,61496,61749,63049,64224,64381,64511,64610,64808,64914,65312,65537,65552,65928,65982,66003,66178,66459,66543,66645,67179,67658,67800,67921,68545,70376,70807,70936,70944,71090,71121,71194,71215,71289,71521,71634,71637,71663,71782,71899,71917,72082,72323,72413,72925,73025,74329,75386,75417,75503,76136],"traverse":[55602],"kunitysubsystemerrorcodesuccess":[75595,75941,76010],"overwhelmingly":[2197],"kinds":[7928,10793,20540,21164,22703,25921,29994,34637,38850,46766,50942,55886,66401,67890],"shadow_coords":[47811],"coplanar":[13385,36454,39732],"gettypes":[30894],"unity_sample_tex2darray_lod":[14035,44010],"characterclass":[40747,54381,59317],"command+shift+g":[24549],"refreshappreceipt":[67371,67713],"propertyforsize":[55106],"don’t":[205,480,554,2721,5017,7965,8358,8872,9163,9333,10095,10544,10609,12226,12308,12604,12728,12779,13208,14742,18292,19138,20222,20276,21029,21870,23264,24946,26126,26252,26354,26452,26488,27141,27263,27931,27993,28115,28452,28609,28771,29317,29360,29766,29814,30902,30916,31014,31717,33081,33362,33410,33419,33579,33883,34179,34214,34615,35462,35697,35779,35888,36172,36348,36489,37405,37651,37671,38851,39880,44903,48262,49639,50369,50483,50913,51052,52794,52877,52973,53303,53781,57929,58358,66183,66249,66467,66555,68807,68916,69157,69330,69436,70546,71207,71283,71395,71422,71662,72736,73012,73022,73091,73197,73385,73417,73450,73622,74181,74613,74799,75520,76097],"behaving":[23047,26925,32402],"trained":[21164],"measurement":[4867,5183,13386,21870,22770,63737],"windowbposition":[57524],"__skinnedmeshrenderer__":[32454],"ramp":[7955,14133,18233,20682,32609,32631,46596],"datum":[65537,65552],"responsible":[1711,1855,2701,3814,28266,33478,34156,36432,38862,39512,42149,49495,50344,52112,53714,58177,66189,66462,67553,67659,75133,75429,76304],"dolphins":[22368],"awkward":[39255],"jointbreaks":[35750],"leads":[2131,7017,9720,11628,12515,13534,24489,27013,27575,33296,34723,36590,36678,36785,43023,43188,44134,50670,51993,70230,70698],"popupfield":[55472,55529,59684],"getcards":[57707],"hotkey":[34771],"directional":[24,5179,6285,6322,6840,7807,9477,9859,9869,9957,11563,11629,12936,14146,14239,15023,18346,20288,21493,22170,22200,22938,26800,26859,26916,27112,27266,27331,35022,36008,36661,37787,38375,38386,42364,42392,42779,43110,43154,43203,43543,44015,44577,45194,45588,46550,46781,47109,47666,49428,50612,50713,50769,52485,52767,58131,59735,60508,71806,72751,73440],"contextclickeditem":[52470],"perspective":[4,26,67,113,362,6757,6797,7133,8022,9442,10083,12859,13407,17993,21483,22786,30142,30248,33538,33721,37302,37329,37475,39235,39254,42362,43110,43897,47090,48879,51166,51244,51366,54769,65998,71900],"truthy":[73964],"scoretext":[33176],"intentionally":[4997,6792,15042,21525,22057,23395,26361,27055,35142,39638,49362,51148,56580],"iproperty":[37059],"arbitrary":[2360,3770,4509,4519,5000,8367,8427,10725,17077,17092,21168,21575,23940,24984,29091,32452,33784,38213,38347,43177,45727,50366,67214,67296,73561],"‘binary2text’":[25135],"language":[1472,2216,2235,2995,3465,4070,4263,7179,8411,9771,12630,14882,18358,18522,20086,21639,22890,23619,24943,25032,28261,28485,29908,30005,30855,31139,33774,34670,36253,36401,37537,40513,41160,41346,42018,42662,43945,44229,44359,44873,45175,45597,45664,45838,47371,52854,52978,53294,53773,65687,65912,66478,66902,67876,69333,69439,72119,73692],"teeter":[8566],"throttle":[34994,73702],"unconvincing":[37684],"america":[53647,67463],"getaudioclip":[68186],"paintpreview":[51506],"fading":[5262,8137,10329,12305,18267,25284,42799,46766,48319,49571,51342,71879,72771],"eventtype":[28004,29954,51511,58008,62411,75585],"sensible":[5953,10087,74615],"importexample":[3606],"focusable":[56672,57845,59693,59749,60518,61490,65888],"__spriterenderer__":[32485],"buoyancy":[7997,15818,21148],"level++":[27450],"deeppink":[63548],"someconditionthatbreaksthesearch":[2682],"allitems":[52280],"editorstyles":[20908,49981],"brightnesses":[27506],"described":[246,913,2316,3298,3538,3785,4522,4964,5056,5958,6105,7800,7942,8363,8506,9384,13268,14967,18364,19031,20276,20415,20445,23882,24785,25081,25475,26567,27323,27927,28676,29801,29861,30043,30506,33064,33575,34745,36674,37712,38664,40682,41307,41349,41675,42354,45074,49098,49557,49679,50402,50585,51998,52574,53280,53840,56692,61795,65925,66043,67912,68312,69777,69824,71121,72528,72706,73483,74535,74977,75540,75969],"4bd9140e19d2e44782f1131172e514ba":[25125],"heavier":[2243,74421],"font's":[9288,58278,62026],"srps":[6833,38267,74251],"leftupperleg":[29903],"fmod":[22603,35973,73029],"getmovietexture":[72584],"spec":[35882,44485,45364,46628,46839,68492,73472],"treated":[3587,3733,8490,13970,18568,22778,30096,34536,38382,40064,48132,48331,49549,51202,54268,73975],"bev":[75465],"quad's":[21230],"openxr":[2983,17877,17909,31040,31444,50248,69020,69273,72890,72901,72954,74376,75021,75072,75290,75393],"middlemousebuttonpressed":[60461],"sidebar":[1958,3946,3956,3988,4042,70312],"insufficient":[23468,33438,70357],"invariantculture":[36896],"rotate":[258,1588,2284,3005,6962,7271,8515,9017,9184,9215,9321,9711,9723,10403,10509,11442,11763,12713,12986,13181,13243,13261,13275,13391,13706,13838,13881,14678,15001,15835,18101,18157,20072,22203,22236,22695,23671,24660,24912,25667,25881,26563,26589,32255,32344,32346,32398,33533,33672,34773,34935,35066,36713,37281,42779,43224,48685,49678,50403,50615,51332,51380,51536,51605,51712,51880,52235,52763,54460,54712,62030,62192,62643,62890,64179,71644,75088],"getchildcontrol":[75700],"loop":[1920,2069,3785,5939,6179,7077,7500,7783,10258,10739,14728,14850,18282,19030,19143,19480,21154,21326,22513,24164,26049,27812,32186,32412,32864,33135,33480,35690,36086,36333,36845,37231,37540,37798,38673,40164,40620,43081,43456,44268,44822,48445,48975,49356,51957,57705,62493,62636,68961,69208,72593,73053,73448,73633,73705,74713,75444,75509],"registerthread":[27953],"button":[4,178,548,807,1113,1514,1578,1877,2012,2080,2244,2254,2272,2284,2331,2363,2395,2772,3233,3928,3998,4070,4158,4179,4196,4215,4238,4269,4396,4411,4444,4454,4466,4489,4498,4813,5315,5335,6265,6314,6464,7059,7190,7316,7679,7867,7956,7984,8281,9561,9663,9674,9768,9913,10058,10223,10698,10723,11380,11403,11463,12096,12288,12776,12874,13148,13361,13379,13587,13846,13901,14680,14787,15714,17980,18072,18141,18504,18757,18970,19022,19072,20016,20130,20592,20627,20708,21173,21386,21607,21854,21979,22000,22038,22081,22128,22222,22687,23617,23693,23788,23890,24055,24284,24459,24727,24749,24774,24792,24955,25054,25223,25242,25326,25427,25448,25569,25764,25871,26832,26980,27168,27666,27824,28153,28400,29620,30043,30198,30238,30389,30452,30486,30646,32754,32847,34523,34825,34911,34954,34993,35379,35637,35776,36045,36285,36444,36480,37271,37723,38280,38324,38741,38876,38931,39054,39089,39159,39278,39342,39351,39384,39490,39519,39526,39819,39824,40000,40269,41689,41765,43297,43535,46803,48072,48225,48340,48507,48595,48626,48643,48681,48938,49410,49655,49902,49914,50355,50371,50413,50432,50520,50543,50581,50917,51111,51369,51884,52087,52177,52236,52389,52599,52682,52745,52754,52958,54211,54224,54411,54569,54626,54720,54809,54873,54989,55109,55454,55642,55792,55805,55975,56045,56477,56523,57836,58586,58673,59558,59734,59833,60221,60363,60497,60570,60780,61490,61612,62338,62766,62853,63189,63248,63848,63863,63882,63902,63918,63943,63956,63989,64213,64333,64443,64552,64697,64772,64781,65133,65368,65387,65432,65501,65817,65872,65927,66342,66349,66380,66597,67032,67073,67335,67351,67626,67651,67909,68553,68713,70374,70709,70970,71128,71180,71254,71266,71295,71318,71327,71360,71382,71429,71472,71483,71507,71520,71634,71645,71805,71869,71899,72366,72409,72470,72768,72940,73264,73471,74151,74228,74761,74810,74902,74946,75017,75039,75076,75144,75474,76097],"proguard_release":[23506],"anded":[36710],"behaviour":[185,2356,3319,3609,4713,4861,6793,7998,8555,10068,11011,11610,13815,13894,13970,14960,15052,18483,18566,21378,22180,22539,23279,26927,29551,31637,32219,34177,36632,36891,37609,37735,38346,38519,39794,39994,40145,40643,42779,48163,49650,51545,51609,51753,51806,54220,66225,68605,68972,69219,71861,72500,76549],"expressionevaluator":[20679],"doublefloat":[55503],"materialpropertydrawer":[42025,45091],"unity_pass_forwardadd":[44016,46418,47893],"guns":[26590],"updatecustomstyles":[60949,61055],"folder’s":[71680],"amiga":[52094],"unpackaged":[67059,67532],"rg16f":[8450],"onpointerenter":[49887],"trait":[40746],"currentclip":[34126],"begin":[180,478,1095,1516,1807,2247,2281,2370,2427,3379,4271,7180,7793,9268,9518,10075,10745,11149,12804,14731,16060,18580,18991,19277,20590,23420,24012,24400,24914,25827,26103,27674,27813,27999,28052,28413,30179,30344,32754,33008,34948,36080,36725,37271,37653,39663,40163,42613,45072,46513,47191,48662,48979,49623,49663,49893,50144,51262,51373,51517,58756,59750,63860,67862,69748,69770,69811,69906,70043,70063,70095,70130,71012,71368,71393,71420,71847,75445],"createscenetemplate":[38977],"unique_vendor_identifier":[67470],"trims":[48599],"incrementally":[4535,7484,23703,24613,24634,26046,33080,52691,71794,73412],"unity_sample_screenspace_texture":[1703,43376],"getdamage":[56143],"explanation":[6762,11802,12345,17938,18662,24766,28959,28984,29044,34272,34480,39444,42352,55545,67179,67837,71316,75549],"simpletreeviewwindow":[52324],"plaftorms":[43979],"“touch":[72795],"intersects":[11551,41510,44750,71885],"atlasgroups":[48787],"satisfy":[7391,35934,37618,38469,63199],"savedassetbundle":[25963],"toolbarbutton":[30521,55425,59630,65387,65431],"echoes":[5162],"equal":[84,1888,6139,8555,8962,9890,10015,10574,11732,12051,13032,18316,22292,27011,29168,29663,30149,32091,32260,33736,40749,40848,41477,43581,45863,47997,50515,50637,51137,51238,52011,58320,62910,68209,68923,69166,71885,72315],"replacecontextmenu":[56019],"_geometry":[44554],"serialnumber":[75526],"behaves":[183,730,1190,3672,3866,5040,7798,8827,9347,10465,11636,13684,13761,13789,13858,14546,14710,14764,19967,23619,25170,26263,26496,26672,26913,27063,33347,37453,37622,38548,38576,38624,39856,42811,44830,48163,52039,54990,62840,68960,69207,70910,74296],"presentframe":[35714],"enforcing":[5937],"yes1":[37812],"“gray”":[45077],"mousedownevent":[57836,57880,60363],"m_":[21661,48142,72270],"compress":[567,987,1343,3300,3500,3569,3871,5950,6373,6433,6477,7019,9964,10496,11258,11280,12007,13412,14291,14330,21509,23521,25162,28171,28292,29330,29417,35039,37676,46673,50483,50672,52638,73088,73310,73320,74634,74793],"awakes":[21168],"fixtures":[6854,11576],"arrownavigationleft":[63439],"xcodebuild":[25917,49784],"responsibility":[1071,3346,20240,50344,70903,74592],"received":[1749,4062,4394,11007,11060,11891,17452,26789,27114,29431,30440,39793,40032,40122,47948,52555,55790,56070,57595,58253,66145,66654,67105,68090,68324,68475,72931,72982],"keystroke":[18506,50642,59720,59766],"keyword_a":[42107],"eventmask":[39704],"assembly":[2745,3019,3810,4510,7357,7426,10695,11859,12183,12370,12558,18622,18720,18844,18926,19223,20192,21029,22613,24971,25128,26079,28452,28494,30894,34309,34395,34514,34605,36048,36754,38719,38841,39452,40171,40441,52333,52674,57309,58088,58776,59033,65001,66459,66465,68630,69018,69270,71025,71194,73416],"parallelism":[35137,41812,72917],"shining":[29556,42363,42447,42548],"shadowmaps":[26798,43963],"unicode":[9278,58343,58455,61910,61941,62071],"designated":[2034,4710,7025,10768,13879,19316,19336,19351,19376,23011,23434,24398,37376,53046,72937],"arppu":[22338,53503],"clickablelabel":[55689],"kajiya":[38011],"cacheable":[25115,66681],"headers":[12403,25410,27647,28069,35641,37668,68246,68283,68323,68350,68410,68458,73178,73312,73674,76069],"computescreenpos":[32982,43900],"shiny":[22902,28947,37684,46294,49465,49513,49629,50932],"disposing":[26112,35545],"“channel”":[50179],"newin20202":[51151],"fiscal":[234],"_connect":[19071],"unity_declare_shadowmap":[43983],"theory":[4725,5159,13063],"encompassing":[23162],"wonder":[24728],"twirl":[52119,52199],"promoting":[4353],"maxdamage":[56138],"'width'":[63722],"15f":[57085],"elementtoolbar":[30721],"unitygui":[9281,9607,20893,23816,23892,24061,51591],"myrarelyupdatedvariables":[43992],"recalculation":[54279,62193],"uielementsmodule":[16750,30970],"currentheapsize":[12415],"textureasset":[54923],"json’":[38684],"depthnormals":[44061],"videocapture":[22941],"leaderboard":[52744],"“subfolder”":[38781],"imposes":[11450,18746,22107,73447,73669],"m_center":[76540],"ccall":[73562],"mindist":[36015,46953],"keyboardeventbase":[59737],"ios":[2764,2981,3043,3989,4961,5707,5977,6051,6374,6434,6460,7663,8405,9058,10761,11691,11758,12037,12432,12883,14014,14297,14308,16072,16091,16579,17045,17370,19335,19651,19861,20048,20448,21060,21951,23126,24620,24970,25037,25319,25671,25687,25694,25716,25732,25737,25813,25818,25825,25834,25844,25854,25891,25899,25927,25972,25980,26037,26054,26061,26069,26099,27136,27530,27799,28172,28422,29450,29455,29614,29810,29825,29831,30018,31136,31429,33474,33522,33800,34274,34371,34486,34577,34683,35714,35836,36170,37776,38321,38417,39630,40548,43030,43940,44055,44914,45440,45593,45738,48201,49737,49752,50192,50653,52485,52545,52683,52696,52702,52706,52715,52730,52749,66526,66812,66834,66901,67036,67131,67195,67340,67608,67737,67824,68054,68466,68759,71176,72699,72889,73097,73406,73904,74197,74635,74920,74991,75290],"newsprite":[48421],"b’s":[71885],"polygonal":[49518],"beside":[3931,3969,4196,4489,5117,18140,18896,24405,24665,31386,50691,54264,69780,69827,70272,71208,71305,71494],"undesired":[10098],"shuffle":[13067],"unreachable":[28463,43484,66465],"#008b8b":[63530],"mycustomeditor":[59023,61600],"#96c3fb":[63272],"ingredient":[20923,40643],"getdata":[68227],"animators":[1989,2067,5961,6152,32318],"compatibility":[414,435,665,696,968,1099,1303,1515,1599,4654,5691,5816,6688,6804,6940,6985,7404,8794,9100,11044,11821,12110,12366,12554,12881,13539,14338,14790,15699,18242,18330,19219,19288,20216,20382,20404,20439,21049,21957,23247,23380,24502,24929,24969,25312,25741,25831,25834,26091,28841,29452,29477,29832,30876,33829,34305,34391,34510,34578,34844,36577,37681,39964,40279,41825,41938,42313,42599,42689,42693,42717,42733,42758,43456,43500,43509,43558,43566,43656,43684,43730,43802,44098,44135,44167,44200,44321,44338,44378,44422,44592,44628,44672,44760,44791,45056,45185,45261,45391,45487,45524,45846,45853,45933,45963,46139,46506,46530,46713,46820,47158,47953,47986,48024,49310,49670,50030,50075,50151,50171,52110,52607,52710,52729,56616,58414,60373,65051,66525,68053,69330,69436,71056,72090,72129,72206,72614,72732,73026,73116,73322,73480,73596,73659,74508,74866,75017,75158,75224],"tiles’":[50348,51879],"“samsung":[53825],"frameselectedwithlock":[55903],"multipart":[53103,68384],"vblank":[23027,36031],"globalmaximumlod":[45533],"sketch":[13375],"loadfromfileexample":[3369,3543],"supportdata":[53746],"r89+":[50194],"verticallayoutgroup":[36439,40143,62798],"cone’s":[32407],"ev":[22770,59798],"stereo":[1028,1671,4737,4957,5037,5210,5980,7468,7625,7662,7771,12358,22578,34216,34292,38352,43335,43454,68765,72520,72708,74976,75067,75402,75457],"reopening":[67702],"containspoint":[57834],"reportprogress":[30088],"darken":[34256,34337,34463,42256,43835,47519],"eviction":[73205],"cards":[9905,13067,16675,25177,30437,38349,43987,45293,57707,67901,73140,74202],"damaged":[28947,52513],"myname":[72231],"unresponsive":[3718,5300,28395,32112,35878,53709,53991,55554,74724],"flattening":[25307,30164],"healthsystem":[40744],"issuepluginevent":[29974],"counter":[3695,5006,13113,18282,20130,21913,23019,29594,30899,35280,35404,35484,35522,35778,36223,51573,54736,55187,55333,62030,71315],"demands":[4085,52058],"“unity”":[18752],"multiplier":[7706,9875,11498,14852,14973,15036,26866,27130,31813,31854,32090,32110,32190,32221,32285,32725,32886,32907,36594,37642,39836,43155,47095,52124,68825,68858,69058,71599],"m_progressattribute":[60903,61003],"onrenderobject":[21356,38199],"unless":[165,234,1192,3078,3299,3342,3738,3852,4392,4737,5238,6804,7427,7507,8534,11508,11791,12400,13384,13824,18734,20278,20572,21505,22057,23134,23277,23437,25221,26972,27262,27330,28677,30906,32609,33166,34201,34597,34994,35337,35700,35942,37654,38399,38903,38931,39614,39888,40203,40606,41370,41448,41544,42016,44207,45085,47752,48225,48686,49780,50342,51965,55511,58044,58799,64201,66600,67591,68650,69851,69901,70654,71059,71170,71283,71293,71366,71806,72292,72429,73030,73683,73877,74726,75080,75153],"highlighted":[6266,8987,11588,12185,18149,19000,19075,28424,32322,35066,36110,36685,39607,39807,39822,48669,48682,51263,51392,52232,54212,64244,65925],"headerbar":[63295],"io":[2902,3327,3355,3527,4663,12903,19458,25965,40459,52074,53933,68113,69686,72887,74071],"minmaxslider":[55445,59676,64954,65017,65242,65266],"fitnessfitness":[53725],"unity_iphone":[25855,29984,30017,33801],"recover":[74401],"compatible":[415,1541,1677,1731,2999,3466,4273,4427,5688,5721,5730,5764,6679,6833,6915,8788,9197,9243,9484,9670,9845,11376,11417,11738,12677,12831,12881,13204,14802,15906,15939,15954,15971,15986,16009,16024,16047,16064,16079,16095,16110,16124,16141,16155,16172,16187,16216,16231,16245,16260,16279,16334,16349,16368,16382,16396,16410,16427,16442,16457,16474,16491,16514,16531,16546,16568,16583,16854,16873,16887,16923,16937,16973,16988,17004,17019,17034,17049,17066,17081,17096,17118,17137,17156,17173,17189,17210,17224,17244,17258,17272,17286,17300,17316,17330,17346,17358,17374,17388,17402,17414,17426,17439,17454,17478,17492,17510,17528,17550,17565,17580,17595,17610,17631,17646,17665,17682,17697,17712,17727,17752,17759,17777,17792,17807,17822,17839,17854,17869,17884,17899,17916,18359,18672,18819,20572,20657,21625,21859,22181,23389,24493,24598,25928,26079,27113,28265,28919,29453,29482,30337,30889,32282,33909,34290,34596,34663,34845,36578,36738,37958,38280,38680,41756,41826,42189,42333,42603,43758,43850,44327,44688,45024,45415,45446,45993,48981,49151,49179,49318,49819,50249,50412,51618,52110,52576,52735,54002,54221,54500,55561,66831,68778,68901,69139,69330,69436,69719,70311,70349,70394,70805,70910,70983,71011,71191,71365,71508,71672,72145,72616,74203,74590,75114,75159,75360],"manipulators":[54696,58023,60208],"certificates":[1178,12154,12647,20233,28211,67921,69885,70424],"mynativeplugin":[27924],"listen":[5006,11043,11204,12642,17474,21074,28407,30906,39003,55731,56697,57898,59734,60497,76303],"term":[1923,5037,6213,11160,12804,18137,21640,22738,25032,28797,31366,34157,35992,36632,36710,40711,41331,41603,41677,42811,43070,43244,43984,48976,49444,50401,60358,66690,72721,74407,75364],"kunityxrpreinitflagseglusenoerrorcontext":[75898],"unity_x_y":[33813],"simplebindingpropertyexample":[55377],"transition's":[62585],"getproperties":[36850,37256],"m_bounceintensity":[76382],"fade":[2070,7688,9217,9857,10329,12908,18262,22225,23101,23272,26895,26922,31760,31925,32114,32631,32776,32997,37653,37688,37804,39825,40076,41764,42798,45305,46081,46418,46767,47153,48317,49571,50464,52121,52201,74271],"algorithm’s":[66160],"placements":[36680],"typetreehash":[3269],"managed":[566,633,653,4510,4651,4959,5763,5985,6126,6368,6429,14562,17240,18009,19201,20211,20223,22573,24915,24928,24948,25724,25844,26023,26083,26434,26488,27928,27937,28170,28265,28379,28462,29815,29974,30860,33075,33091,33381,33399,33418,33448,34536,34638,34653,34708,35695,36071,36236,36497,37706,38841,39881,40522,40555,49392,49758,52552,53147,66456,66461,66812,66864,66883,66913,66918,66965,67248,68131,69017,69269,69332,69438,70578,71040,71660,72113,72122,72131,72145,72191,72869,73300,73388,73613,73900,74050,74337,74512,74590,74629,74839,75805,76023],"ultimate":[4784,17642,35966,66781],"blen":[6017],"chunkedtransfer":[68256],"anyway":[37671,38865,44092,54262,73229],"writeline":[38697,67374,73292],"“target”":[39147,39318],"carrier":[6121],"yesmultiple":[37792],"calculations":[4705,5371,5515,5964,8501,9466,10002,10439,11319,11534,12885,13115,13914,14525,14557,15967,18566,21323,21604,21971,22117,22146,22734,24492,26707,26960,27046,27068,27089,27175,27299,27303,27314,27508,27522,27553,27591,29736,30175,30264,33548,33676,36029,36439,36591,37287,37658,38467,38478,38515,42010,42360,42804,42813,43140,44231,44870,45565,47423,49491,49534,49609,49710,50697,52040,54271,59832,66008,70288],"m_open":[24809],"contactpoint":[36352],"some_variable":[66617],"setoutlines":[48495],"lives":[21188,26089,31917,37628,38797,50500,65244,70302],"tire":[14943,23119,58864],"interfacematchanyversion":[75720],"prone":[18948,33866,69785,69845,70773],"covariant":[18529],"flex":[7163,13696,54312,56198,56871,57164,57359,59300,59698,59836,61391,62465,62567,63744,64081,65195,65815],"template's":[18472,39051,39116],"hides":[2039,5306,11348,11469,13764,13792,18132,20080,20587,21388,22271,26669,26738,32290,39332,39630,39797,41498,41727,44830,53409,57158,64636,71952,72384,72716],"installer":[3319,6325,6455,19049,25444,28382,28784,50180,66576,67058,67530,69868],"docks":[34760],"focus_selected":[64296],"kformatrgb_bc6h_sfloat":[50102],"isempty":[760],"validator’s":[28909],"label1":[63748],"inactivity":[22413],"title":[3986,4250,4467,5117,7265,18665,19013,20007,25087,33194,35110,35213,39041,41256,41400,41691,52839,53284,55219,56808,57798,59037,63243,64823,64978,64991,65166,66251,67113,67178,67882,73277,73955,74652],"getblendshapebuffer":[369],"localuser":[30071],"explode":[32650],"iterator":[19657,41289],"callbackorderattribute":[4718],"cavities":[47519],"photographic":[49541],"directional_cookie":[44579],"facilitator":[21181],"wikipedia":[3852,9542,20393,26950,27511,34362,36636,38343,43151,44873,69790,69857],"drawmeshnow":[21356,51075],"kinematics":[1948,5267,7862,22499,25621,29735,49656],"reducing":[2243,3570,4776,6153,6381,11546,17488,18260,21525,23537,26044,26070,27267,28179,29720,30348,35697,37666,40589,43188,44377,50611,52595,68212,73382,74642,75068],"contextualactionposition":[2515],"invalid":[3585,5769,7389,10012,11842,12154,22180,24984,25329,26112,26848,28916,29063,34372,40226,44702,45077,48628,50041,52522,52796,53041,63943,63998,67794,68541,70446,71385,74153,75553,76203],"unlocks":[51422,72520],"nativecontainerattribute":[26129],"times":[250,356,456,1343,2408,2720,3248,3303,3311,3430,3468,3491,4091,4773,5727,5770,5994,6054,6094,6126,6381,6432,6472,6807,7482,9275,9961,10658,11320,13465,13618,14296,14728,14852,18292,19197,19633,21006,21175,21312,21964,22145,22389,23377,23434,23583,23798,24784,24972,25524,25994,26044,26494,26711,26878,27065,27738,28179,29332,29594,30237,30325,30353,30885,31703,31790,32360,32691,32864,33093,33472,34930,35338,35799,35924,36007,36040,36303,36360,36569,36786,37623,38317,38336,38403,38738,38828,39493,40162,41795,41898,41944,42148,42204,42818,42944,42946,43013,43023,43729,44134,44377,45055,45564,49473,49560,49565,49706,50064,50140,50661,51073,51975,53097,53460,54031,54281,54759,55623,57628,58066,58586,60786,61354,61689,63732,66205,66355,66393,66653,67136,68202,68609,68710,70698,72877,73021,73173,73302,73320,73382,73619,73661,73690,73816,74141,74642,74828,74847,75453],"notation":[1431,12596,18747,18819,27468,37293,40313,41104,43589,56693,69726,70806,70869,70984,71370],"upgrading":[3876,4075,4446,16151,43308,44020,48562,52628,67689,67983,68052,68564,68687,68810,68848,69039,69330,69401,69505,70225,70356,74132,74224,74412],"“library”":[71685],"alphatest":[6493,42383,43573,45591,45721,46018,46766],"original's":[2238],"clones":[5006,10012,33504,38966,39017,39033,39085,39115,39192,70230,70613],"tightpackerpolicy":[48687],"quality'":[42971],"targetvelocity":[7303,8576],"v0":[46952],"transparent":[104,6494,8131,8721,10002,10149,11297,12475,13724,13797,14135,14395,18354,18987,19936,20395,21434,23101,23645,23676,29710,30185,30363,32273,32941,33524,35252,35947,36178,37838,38297,38347,41764,42262,42820,42825,42831,42836,42842,42847,42853,42858,42863,42868,42874,42894,42922,42928,43200,43591,44178,44393,45549,45592,45627,46014,48022,48642,48874,49470,49568,50155,51202,51236,52488,59890,63265,63648,64201,64760,66879,72723,72754],"m_uselightprobes":[76520],"registercreatedobjectundo":[30673],"sandwich":[76108],"faq":[4243,4302,4379,4402,29088,52450,53257,58127,61998,68785],"downward":[20724,28352,44833,50941,51916],"user1":[70148],"providing":[1233,4016,4132,4439,9904,10692,16183,16510,17342,17412,18665,23482,24098,24213,24436,26961,27158,29551,31388,44914,47901,50676,53714,57595,64489,66720,67597,67669,70718,72716,73117,75122,75805,75874],"fixedupdates":[26015],"guaranteed":[3719,5466,5611,14328,20076,20260,22046,23011,25225,30873,31366,33444,38827,68912,69153,69642,73286],"tax":[4117,4230,4386],"canada":[53625,57148],"smoothest":[73705],"detects":[2708,3812,3846,8616,13251,14540,14851,19944,21175,21572,23055,24697,25106,25153,25696,26245,26485,29098,31627,33498,35092,35493,35759,35806,36488,36683,38842,41801,43376,48864,49356,53921,60157,61800,66116,66245,71288,71551,72521,74153],"normally":[253,1789,3602,3731,3848,5350,10093,10908,14027,15861,20047,20078,20265,21032,21346,21460,22048,23275,24402,24732,24740,25284,25399,27567,28422,29434,30149,34637,34956,37668,38317,39890,40359,43223,44133,45055,45620,48022,49518,49563,50929,52044,52120,52200,54718,66158,66258,66617,68210,71022,72729,74896,75660],"numberincluding":[53719],"con":[11024],"scrubbing":[7137],"counters":[21891,35280,35402,35470,35580,35606,35692,35768,36201,36399,44268,74323],"skybox":[28,257,4291,6496,7912,8020,13142,13537,15069,19938,22750,23642,25289,26856,26927,30351,35056,36593,37738,37883,42690,42714,42730,42755,43489,43492,43508,43553,45635,46113,47145,47374,49139,49425,50443,68825,68851,69058,71600,71881,72495,72770,74977,75179],"#x33":[66781],"astc_rgb_4x4":[48740],"placeholder":[9,86,2191,4574,35239,39627,41842,44309,48603,48900,50534,51148,58190,59388,64511,64610,64808,64914,65312,65460,65478,65537,65552,65576,65596,65616,65637,72646],"rowgui":[52393],"ret":[3623],"vector4field":[55461,55539,59711,64729,65585,65605,65625,65646,65647,69325,69431],"endorsement":[50344],"netfx_core":[33804],"editorguilayout":[20699,20805,20893,21000,40497,49980,59595],"#elif":[41800,44539],"searchitemdescriptionformat":[2650],"npm":[18819,69708,69799,69987,70967,71469],"summaryofmetrics":[4685],"files\\unity\\hub\\editor\\2022":[28632,28726],"dylib":[4874,6705,34550,34663],"shade":[21230,42813,50945,51149],"reserialized":[3065],"shader_stage_geometry":[43957],"unity_particle_instancing_enabled":[32041],"observers":[10847,11092],"mynewvalue":[57914],"norwegian":[53638],"tails":[4866],"nativecontainer":[26107,26128,26242,26276,26295,26434],"bottlenecks":[74161,74918],"rear":[8066,29879,38405,74391],"getrows":[52456],"occuring":[30205,52013],"emailaddress":[29693],"searchicon":[2479],"executedefaultactions":[57955],"unselected":[1962,2278,2412,57178],"effort":[5011,5911,6123,16151,16345,21007,33429,37708,45255,75068,75079],"countries":[17803,53069,53194,53416],"manner":[3452,4445,4879,5911,5994,18620,37144,43376,70876,71012],"clarify":[23818],"noalpha":[37838],"isolate":[18500,21699,33615,35876,39335,48364,57797,72337],"treess":[29297],"forklift":[8574],"movies":[6783,17169,21628,35261,72537],"proceed":[4005,4240,11395,19122,24629,25911,30070,47337,48067,52976,53134],"newer":[1662,3065,3377,3672,3725,3892,4219,7378,12217,16151,20246,21067,29587,33825,34627,35364,36343,36608,38845,42615,48380,48674,50209,52493,66696,68604,70230,70394,70708,71019,71366,72364,72537,72861],"integrate":[478,580,876,944,993,1190,1846,5012,17152,17254,17312,17326,17437,18562,18909,23194,25727,25920,30000,36340,41705,66361,66810,66835,66866,66886,66912,67964,68050,71695,72130,72608,74509],"#v2":[70613],"powered":[580,944,9723,17356,18511,30326,66811,66836,66868,66887,66901,74416],"glass":[6494,29556,41420,41597,41678,42809,42896,49570,65458],"transformorigin":[62276],"accessory":[12222],"onstophost":[66292],"broader":[45487],"imguicontainer":[59579,64773],"vshekiqnpaocnpw5nlpryddtg1pdehv6fypw8alq65i03tptzaohlh3sh+97e":[69919],"danger":[25436],"meshchangestate":[75769],"产品2":[53683],"beginhorizontal":[24391,49980,59600],"timings":[1880,6111,18068,20525,21870,22077,22466,33524,35353,35793,35969,36023,36120,36174,36298,36507],"vector's":[13096,33722,72315],"overcome":[427,872,27549],"effectsharder":[6910],"rgba16f":[8448],"quality_ultra":[43056],"satisfied":[3928,6977,7374,7661,10403,11447,12759,13280,13297,18229,18317,27536,34623,35883,40294,44723,54297],"gameobject__":[18183],"gamemanager":[15053,76366],"m_startsize":[60240],"sha1":[52893],"gargore":[40789],"产品描述1":[53602],"beyond":[4485,5998,6798,7794,8546,9222,9643,12310,12856,12903,13580,18357,18617,22245,22774,27230,34790,35092,40643,43133,47952,49540,50436,52044,72946,73055,74976,75303],"2+opengl":[45478],"protanopia":[36501],"objecttoworld":[5426,5570],"button02":[55799],"particlecount":[35459],"ctrl+u":[51284],"velocityx":[6289],"chunky":[43113],"oscillator":[4915,7446,7463],"sdk80":[34578],"buffer":[336,1029,2926,5353,5561,5945,6494,6943,7444,7461,7484,7664,7763,8072,8427,8879,9457,11739,12948,13206,13427,13534,13708,20237,20432,21526,21697,22753,23258,23421,23628,24492,26156,26437,27538,27705,29995,31870,32183,34288,34485,35765,36131,36395,36512,36569,37958,38358,39675,39734,42100,42394,42677,42798,43376,43592,43743,43979,44051,44097,44376,44638,44879,45720,45850,46778,47089,47751,48022,49327,49668,50397,66131,66570,68090,68263,68279,68922,69165,70047,71973,72502,72758,73433,73519,73614,74251,75426,75609,75872],"waypoints":[9386,22203,22673,25435],"mix":[3455,4790,4814,4897,5039,5119,5163,5207,6295,6322,6817,7437,7454,7557,7715,7735,7760,7789,8893,18501,20000,20893,22600,27068,34188,39117,39420,40318,49666,61547,71216,72708],"assetloadingsubsystem":[4671],"retry":[67551],"watcher":[76262],"toolbarstrings":[23948],"publishing":[427,525,535,589,903,1137,1150,1311,1340,3881,4029,4055,4204,4220,4264,4358,4414,4421,4483,4561,11685,11962,12320,12583,18426,19179,19321,19370,22435,23491,26096,27674,30847,33883,34257,34338,37267,37341,48855,52771,52917,53079,53303,54052,66964,67014,67195,67264,67745,67856,68045,71468,73195,73207,73317,73382,73624,74856,75202],"studio’s":[40666,53580,72839],"let's":[2085,14901,23795,24244,24796,25635,29785,37051,38393,40618,46158,46667,47234,52174,66722],"0xf1f60a":[61947],"smoothing":[9251,21456,25212,29767,38564,38594,50551,52040,52137],"mesh3dsimporter":[6702,15239],"supportsvibration":[19716],"resolved":[21989,38869,54884,60950,61056,62594,62772,64141,70211,70241,70876,72453,73999,74244,75414],"omits":[8021,12958],"downloading":[1602,2834,3340,3380,3446,3974,21070,25744,25940,39399,49457,49737,66598,68046,68081,68275,68347,70224,70245,70332,70734,71271,72093,72579,72832,73337,74516],"f2e8":[66769],"registervaluechangedcallback":[30613,55730,56070,56514,57021,57906,59596,64545,64621,64662,64704,65066,65091,65468,65484],"containerwindow":[30625],"adpcm":[4774,7482,25841],"ssds":[24977],"bryce":[50491],"“active”":[18898],"executecommandbuffer":[23626,49041,49287],"library":[239,464,813,876,982,1044,1103,1201,1226,1236,1245,1284,1300,1357,1396,1727,1811,1832,1997,2191,2764,3580,3729,3856,4025,4224,4720,4908,6154,7368,9267,11875,12180,12367,12555,16183,16510,16933,17106,19220,20178,20208,20339,20747,22559,23482,23559,24520,24607,25064,25135,25156,25727,25960,26073,27671,27780,28224,28266,30006,30166,30277,30840,30873,30991,33497,34237,34306,34392,34511,34599,34652,34660,37680,38686,38850,38917,39310,40173,41187,41839,42615,43305,48211,48556,48984,49148,49752,51612,52509,52575,54309,54405,54498,54538,54545,54578,56716,56792,58799,61614,61890,65903,66470,66810,66835,66867,66886,66900,68492,68601,69014,69266,69674,69701,70345,70399,71339,71661,71903,72130,72137,72201,72868,73412,73417,73431,73502,73660,73902,74050,74192,74246,74509,74611,75876,75918],"0xc":[74557],"specially":[1970,8614,15857,37531,47416,74977],"visualeffectresource":[15365],"cloneobject":[33504],"hours":[67254,67270,67522,67871,68609],"boundaries":[7615,8568,9641,10333,11624,27090,33567,34865,38477,48364,50522,62829,72941],"unityplayerstub":[72868],"getscenemanagersetup":[40689],"3x":[20691],"tilebase":[51714,51753,51784,51812],"app's":[12105,12451,66588,66848,66992,67030,67845,72789,74395],"'view":[16564],"portal":[4049,4162,4188,4234,4395,4407,4415,4422,4442,4453,4487,4496,11332,17045,17059,31031,31471,52871,52948,53695,53857,54000,66970,72002,74782,74813],"adequately":[10095],"haptic":[75604,76319],"connecting":[694,841,4153,4154,4369,8368,9754,10059,14723,17723,18131,28455,32723,34222,35800,50356,70966,75503],"scrollers":[64879,65719],"opengl":[754,1520,1672,3500,8402,11804,14013,14344,21087,21716,21877,23550,23611,25267,25998,27533,29444,29830,29993,30281,34205,36161,37798,38275,38321,38350,38425,41849,42150,43458,43757,43832,43937,44055,44240,44359,44427,44559,44832,45201,45211,45302,45436,45474,45579,45615,45735,46818,48164,49516,50169,68766,73431,73689,73902,74254],"mylicense":[18742],"mainherocharacter":[9407],"dpi'":[39427],"linestartactive":[51436],"xrsettings":[75242],"income":[53730],"waitforlastpresentgfxdeviced3d12":[35718],"xxx":[28194,73396],"llpv":[37865],"categorizes":[1772,35691,35887,38905],"planetsmulticolumnlistview":[60027],"meshrenderers":[5973,26992],"rpl":[6705,34558],"around":[67,237,315,456,1996,2064,2243,2254,2332,2405,2958,4845,4960,6294,6794,7155,7184,7252,7968,8208,8230,8355,8507,8594,8860,9032,9155,9215,9641,9669,9686,9723,10080,10392,11468,11489,11638,11792,12400,12990,13103,13258,13475,14000,14261,14668,15839,17206,18225,18268,18536,18977,19306,20073,20546,20605,22189,22243,22628,25599,25624,26560,26589,26783,26807,26893,27054,27330,27691,27748,27760,29340,29634,29915,30141,30174,30202,31838,32196,32230,32284,32412,32904,33095,33456,33605,33612,33649,34779,34880,34930,35252,36015,37286,37547,37617,37740,38394,38541,38599,38668,39135,39170,39246,39368,39382,39467,39673,39721,40001,40180,42014,42705,42726,42731,42779,43183,43555,43618,44988,46576,47417,48322,48514,48526,48649,49423,49454,49496,49527,50347,50642,50905,51880,52119,52199,52235,52387,52624,52737,52763,54690,54720,55642,59556,60805,60881,60982,62576,64098,64267,66393,66459,68622,69969,70183,70506,70630,71057,71872,71970,71987,72357,72512,72788,72800,72946,73687,74151,75209,75365],"priorities":[146,35177],"m_lightmaptilingoffset":[76514],"darkgoldenrod":[63531],"safety":[26110,26139,26242,26294,26458,26484,35138,36086,76034],"intpopup":[59664],"sdf8":[58400],"notifications":[4012,4040,12218,12676,16576,17448,29570,31030,31439,49728,53392,54021,58018,67897,71904],"letter":[168,478,9268,9773,11792,39618,40332,53350,69333,69439,70776,72267],"iframe":[73132],"fronds":[52112],"airplay":[12222],"createelement":[73993,74093],"presenttimestamp":[21934],"rotationally":[72928],"xb1":[38322],"scrollposition_y":[76568],"nc":[50343],"peaks":[29249,49610],"d3cuzglnawnlcnquy29tmsqwigydvqqdexteawdpq2vydcbbc3n1cmvkieleifjv":[69927],"__email":[39619],"oncollisionexit":[11612,15851,21175,33728,35749,38605],"occur":[1069,1912,2215,2324,2751,3306,3820,5774,5919,6125,7116,7178,8046,8188,10716,11245,11642,13457,14707,14717,15847,18427,19129,19286,20271,21154,21312,22303,23626,24984,26041,26566,26934,27540,27702,28439,29663,29915,30345,31726,33420,36798,37286,37618,38477,38571,38601,38635,38844,39524,39794,39827,40226,43186,44830,48563,50031,50652,51999,52481,52614,53322,53992,54720,55806,57976,58189,59732,60357,60495,60543,61558,62198,62836,63724,66524,66667,67945,68198,68926,69169,69514,72439,73300,74214,75446],"ice":[11508,15844,23039],"triggervalue":[76205],"#8b0000":[63540],"transvertexlit":[42932],"geography":[22380],"alteration":[14322],"mirrors":[248,8066,13213,45852,50352,75204],"levelgamemanager":[15048],"ambientanddiffuse":[44444],"wip":[68874,69110],"paid":[234,3975,4078,4230,4454,4493,30489,36712,53547,67659],"linecap":[58498,60965],"spriteshape":[16002,31226,31394,37373,37499,70571],"optimizing":[5910,13364,19124,21006,21509,23126,23454,23537,23601,24972,25725,26053,26061,26069,27745,27822,29150,29757,30319,30358,31621,35965,37340,37659,38324,38406,45563,46393,47308,48592,52594],"oscillates":[9172,13680,13865,14989],"exerted":[14967,38458],"texturally":[49851],"yesdepth":[38140],"et":[53622,65174],"toggle_on_hover":[63489],"causes":[1896,3719,4720,5772,5921,6965,9253,9961,10012,10068,10595,11445,12757,13278,13295,13755,14960,18169,18234,20072,21031,22057,25047,25104,26119,26928,29062,29974,30135,30380,30893,31836,32162,32781,32864,34673,35764,35888,36513,38332,38843,39965,40571,41844,44294,44695,45593,47804,50031,51030,51173,51239,52478,52548,52769,54733,60929,61032,61489,62867,64328,69657,71053,71608,72942,73197,73702],"proceeds":[27506,52046,69860,73022],"reduces":[889,3321,5968,6472,7514,8514,9180,9294,9972,10070,10658,11191,11570,11602,12903,13430,13665,14525,18149,18307,19138,20438,21529,22042,22653,24512,24979,25733,26077,26663,27058,27736,28467,29331,30148,30324,30375,30861,30916,31857,33087,33406,33429,34486,35924,36554,36608,40589,41813,42059,43140,44251,48510,48595,49309,50007,50064,50140,50453,50550,50960,50997,51202,58833,59085,62193,64141,68130,68351,72917,72986],"purple":[49546,49873,50019,61201,63625],"accelerating":[50941],"six":[2053,3750,8607,12866,14254,17956,22750,26606,35250,37687,37693,37731,42691,42715,43165,50568,50583,74343,75624],"isolates":[26487,39339],"beginscrollview":[24013,59602],"theorem":[11612],"handled":[1359,1373,2172,4509,7620,7944,18376,21170,24468,33296,33781,34900,35090,40102,40454,40641,46779,47890,50939,51592,52243,54213,55554,62178,65335,71889,73175],"‘multiple’":[18981,48653],"mltk":[68784],"slider_thumb_halo":[63391,64267],"unity_ambientground":[47144],"downgrade":[21134,75355],"underexpose":[24519],"perfect":[5808,8108,9682,11521,11648,15844,15964,17642,23081,27089,29714,31022,31392,37419,37496,37589,38166,48614,50672,73245,74193],"il2cppsetoptionattribute":[24988],"avatar's":[18060,29891],"sm2":[9970],"glosses":[42467],"suffixes":[40343,42617,44244,44549,45016,57149,70756,75632],"translations":[16470,29904,67180],"vert":[1686,6519,8724,9276,10156,14046,14166,23334,31888,32948,42000,43354,44035,44400,44853,44984,45606,45677,46355,47203,47917,49001],"mass":[6148,7092,7211,7230,8294,8555,9357,11604,12713,13238,13881,14947,15818,22070,22496,33586,33640,37623,38479,38532,38541,38576,38624,38643,38652,50589,68009,71787,74421,75520],"lightcoral":[63575],"mybehavior":[68391,68446],"suggestion":[11859,72862],"stone_door":[41471],"cooked":[10572],"albedo":[9973,10439,21392,22160,23295,27081,27158,28879,29484,31879,33013,35063,36152,37990,41765,42713,42729,42754,42793,46153,46505,46547,46721,46865,49450,49465,49466,49473,49498,49509,49536,49596,49614,49631,49636,72758],"arfoundation":[17788,31040,31406,71377,74370],"pointermoveevents":[56881],"configchanges":[825],"cameradepthtexture":[32995],"getbool":[24876],"spenders":[22328,53496],"environment":[73,167,250,442,547,655,692,987,1277,1593,2726,3520,5810,5888,6463,7227,7645,8078,8608,9095,9718,9939,10000,10092,10698,12007,12334,12515,13120,13215,13423,14254,16542,17803,19018,20587,21031,21520,22011,22120,22312,23545,24473,25208,25737,25976,26690,26818,26927,27330,27468,27490,27654,28285,29774,33419,33453,33586,33616,33783,34673,35870,36125,36590,37373,37480,37498,37563,37663,37685,37921,38839,40649,40656,42691,42776,43484,43525,47373,48295,49438,49509,49611,49628,49706,50170,50613,51820,53013,53210,53358,53686,54015,58141,66116,66520,66617,67049,67533,68054,68824,68851,69057,69769,69810,69885,70110,70166,70196,70515,70592,70964,71247,71284,71591,71855,72088,72100,72516,72941,73303,73486,74380,74760,75076,75215,75322,75365,75404],"relative":[1127,1784,3012,5046,5161,5221,5948,6314,7238,7720,7741,8039,8245,8311,8534,8593,8603,8951,9163,9307,9527,9713,9745,9965,10135,10523,10651,10719,11536,11602,12111,12408,12968,13042,13100,13133,13158,13576,13665,14670,14730,14822,14905,14962,15010,15835,17925,18568,19698,20736,21032,21576,21711,22306,24299,24734,25061,25622,26359,26587,26972,29731,29858,32165,32262,32727,33572,34779,35285,35392,35676,36017,36231,37714,37979,38437,38479,38496,38652,38738,39234,39650,39694,40536,43140,44164,46021,48146,48179,48515,49524,50380,50498,50538,50612,51240,51390,52046,52114,52194,54709,54886,56098,58291,59854,60391,60616,60778,61186,61193,61915,62015,62194,62811,63710,63737,64101,65682,65730,66010,66023,70687,70774,72362,74976,75107,75587,75913],"gputhe":[36588],"usdforunity":[40511],"classname":[21031,55103,56623,56684,56940,57248,57438,61787,62385,63179,63862,72014],"backgroundcolor":[54875,55842,56261,57074,59624,60341,61223,62592,65675],"lowering":[7447,7464,10012,12903,37625],"informs":[222,20807,26576,57878,68954,69200],"_zbufferparams":[47089],"errorcode":[52798,66284],"navigationcachemode":[74694],"bounced":[9875,9967,10090,26787,27329,27486,27754,29551,38089,49423],"#d2691e":[63523],"#f08080":[63575],"lifecycles":[67090,75249],"research":[53724,66751],"shoulders":[71784],"unmirrored":[6317],"influential":[13477],"layerfield":[55421,59668,64840,64874],"colourful":[10651],"silver":[42812,49875,63636],"xml":[818,1003,1243,4509,6033,6712,9109,12002,12598,13949,19322,20188,26079,28109,28477,35089,49778,52616,54481,54618,54850,54949,55040,55142,55211,55272,55339,55871,56340,56418,56536,56632,56843,57188,57329,57345,57666,58069,58601,58804,59279,59552,59844,60000,60545,60623,60845,61182,61273,61335,61448,61608,62426,62545,63144,64344,64406,64421,64461,64481,64504,64556,64579,64603,64624,64644,64687,64738,64750,64785,64816,64834,64851,64869,64903,64923,64948,64965,65005,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65545,65560,65577,65597,65617,65638,65658,65795,65849,65912,65966,66467,67110,67621,70572,73397,73800],"thickness":[8358,32390,35157,42769,58292],"networkmanager's":[66053],"t624":[14345],"0x0062564c":[52569],"lettering":[49537,49632],"#f0e68c":[63569],"getter":[6083,28526,36760,68367],"collisions":[209,1735,6794,6945,7961,8165,8203,8241,8265,8375,8568,8767,9001,9028,9151,9166,9296,9343,9708,9726,10577,10716,11536,11607,11648,11653,12724,12909,13162,13251,13267,13552,13662,13672,13894,14503,14982,15816,15831,15884,18224,19005,21150,21175,22810,31689,33614,33755,33762,37350,37532,37609,38474,38477,38524,38542,38575,38641,50505,56721,68009,71567,74329],"zone’s":[71874],"probes’":[71877],"block__first":[64368],"itemcount":[57011],"unity_proj_coord":[43973],"coupon":[4013],"htaccess":[73751],"sortingcriteria":[45967],"toolbarbreadcrumbs":[65393,65412],"‘2d'":[26581],"devicestate_setaxis1dvalue":[75554],"npcs":[5059,13075,22663,34928],"disabled":[28,208,271,559,608,1039,2181,4065,5945,6125,7013,7159,7494,7782,7924,8132,8232,8553,9079,9688,9901,9953,10059,10274,10400,10522,10572,11079,11329,11352,11370,11467,11553,11608,11660,11733,12398,12599,12881,13127,13246,13417,13482,13709,13822,14597,14790,15861,17992,18245,18310,19151,20124,20341,21378,21475,21989,24761,24983,25115,26030,26145,26908,27716,28410,28473,29343,29903,30173,30862,31717,32175,32255,32688,32775,33078,33387,33403,33701,34197,34257,34611,35030,35398,35680,35692,35801,36045,36481,36590,38275,38355,38550,38584,38609,38633,38667,38897,39235,39256,39311,39607,39806,39822,40088,40094,41375,41963,42063,42109,42346,42797,42809,43198,44349,44564,45255,48022,48324,48536,48543,48680,48855,49880,50965,51052,51336,51388,52236,52475,53804,54212,56080,57822,61828,63268,63969,64302,64341,65925,67278,67295,68749,68929,69172,70359,71022,71174,71431,71881,72399,72683,73237,73300,73321,74038,74157,74925,75133,75470],"particle":[1880,2349,5964,6119,6494,6682,6896,6933,8296,10107,10215,11458,11472,11638,12909,13605,14560,14577,15020,16679,16835,17661,18564,20392,20402,20542,20713,22466,23597,25525,27717,28858,28875,29604,30916,31647,31658,31660,31670,31731,31749,31763,31777,31802,31825,31840,31862,32078,32095,32119,32141,32204,32238,32242,32328,32348,32374,32596,32617,32637,32667,32714,32747,32846,32893,32915,33500,35315,35453,35530,37424,38116,41829,42383,42780,43200,44586,45633,49320,50934,52488,68724,68861,69094,72462,72775,72825,74141],"methodologies":[24054],"diffmerge":[35096],"meshattributes":[75861],"store's":[3975,4391,53756,67153,67398,67537,67548,67868],"gloss":[46729,46867,52184],"aab":[478,492,524,540,557,581,899,962,1255,1333,33883,52775,53087,53300,54059],"s\\":[62422],"rewarding":[68073],"strategies":[3455,3523,3893,4561,17370,18092,22375,23445,30345,37365,70225],"text's":[62009],"_stepsize":[14159],"defaultasset":[15246],"subemitters":[31840],"bursts":[31790,32136],"customize":[727,1562,1616,3582,3721,4228,6873,6944,8496,9115,9135,10339,11284,11560,11712,12042,12275,12323,12441,13361,13626,17092,17110,18388,18896,19123,19182,20100,20918,21390,22158,22638,23625,23673,24051,27935,29150,31605,32064,32321,34248,34331,34455,34692,34961,35498,35603,35959,37385,38249,39097,41291,41394,41421,41549,42766,46522,48120,48324,48937,49457,50587,50738,51078,51254,52717,54848,56702,57300,57302,57864,58888,61933,63068,64452,65037,65737,65903,66225,67673,68050,68311,69703,69755,69791,70185,70225,70246,70433,70733,70868,73213,73368,74051,74167],"defaultbrush":[51616],"fontdefinition":[65305],"we'll":[9594,20972,23796,24041,24244,24307,24904,39828,46143,46643,47306,52172,54709,66405],"flashing":[23799],"iaccesscontainerwindow":[30564],"publickeytoken":[20196,68644],"m_useduallightmapsinforward":[76375],"fulfilled":[10201,67594],"cs''":[71687],"tabs":[4051,4373,7829,9135,11669,13626,18896,21704,21981,26718,26953,29893,30229,33639,41379,53267,57124,71133,71528,73276,73607,73700,74305,75010,75132],"il2cppsetoption":[24980],"relationships":[10412,14695,27169,29013,34155,54543,65512,65733,66964,67018,67229,67840],"foot":[1886,6318,7931,9138,13812,22544,27813,38668,50321,71786],"cbuffer_start":[43991,45042],"tabbed":[18898,57120,62001],"hooks":[10692,24297,35888,38188,66225,68682],"mycolumns":[52412],"25f1":[40327],"getassetpath":[3642],"unity_speccube0":[47403],"director":[5826,16639,30925],"gethashcode":[68915,69156],"lightdatagi":[36657],"texcoord3":[10179,47474,47940],"osx":[4874,12358,21035,33860,34292,36724,48066,52101,52474,66593,67054,67527,72729],"captureframerate":[52058],"engage":[23198,36331,68072],"hlapi":[11221,22959,66225,66405,68160,68300,68309,68384,68460,68703],"exc":[52563,74557],"bin":[1016,34672,38712,67699,69979,71722],"copyfileordirectory":[6338,74089],"locates":[20660,70345],"cil":[66478],"tvalue":[36936,37001,37244],"loadedassetbundle":[3400],"count”":[36400],"unity_no_linear_colorspace":[43964],"mecanim's":[2211,38652],"windows'":[70094],"numexit":[32797],"void":[773,801,1052,1454,2020,2503,2544,2739,2787,2910,3330,3370,3530,3607,3704,3745,5406,5550,5747,5789,5931,6099,6130,6247,6331,6730,8417,8656,8985,9352,10749,10837,11012,11345,12994,13068,13332,14093,14891,15288,15733,18262,18372,18551,18587,19392,19476,20019,20136,20300,20483,20775,20874,20946,21120,21157,21260,21921,22196,23315,23785,23888,24072,24185,24291,24458,24480,24818,24936,25510,25645,25713,25774,25934,26141,26314,26402,26502,26641,26766,27357,27839,27963,28506,29426,29539,29605,29840,29870,29930,30028,30068,30107,30158,30602,31902,32792,33040,33112,33852,33917,34700,35458,35545,36262,36410,36649,36839,36992,37244,38696,38835,38996,39213,39349,40379,40463,40575,40635,42072,44214,44615,44899,45646,45988,46152,46546,46760,46854,48389,48745,48936,49054,49227,49296,49922,50298,50332,50966,51225,51438,51528,51555,51632,51747,51761,51786,51973,52331,52611,54527,54930,55018,55083,55183,55261,55330,55387,55682,55738,55821,55939,55978,56187,56236,56294,56362,56412,56495,56549,56626,56771,56821,57006,57228,57440,57658,57886,58004,58062,58181,58241,58469,58632,59041,59406,59791,60010,60146,60245,60446,60524,60582,60660,60702,60861,60907,61007,61214,61665,61802,62142,62373,62519,62697,62820,64779,65425,65828,66063,66122,66240,66523,66849,66941,66997,67103,67276,67284,67312,67337,67355,67544,67573,67630,67712,68096,68291,68331,68358,68392,68447,68842,68966,69087,69530,71574,71714,71965,72161,72237,72545,72648,73265,73422,73532,74076,74437,74556,74672,74872,75244,75267,75698,75754,75921,75957,75995,76230],"dv":[6715,72623],"function's":[3609,8642,46772,68280],"pong":[22517,32456,32865],"timeslicing":[37724],"encounters":[4573,13036,42177,67295,67437,70367,70921],"networkinstanceid":[10804,11071],"unrotated":[36454],"forceapppointdistance":[14951],"current":[362,526,740,921,1160,1433,1575,1881,2133,2260,2267,2291,2391,2431,3039,3436,3767,3871,3890,4253,4565,4599,4813,5027,5115,5287,5337,6182,6760,6962,6984,7154,7187,7211,7238,7765,8074,8317,8439,8529,8675,8883,9006,9261,9339,9459,9823,9869,9919,10118,10222,10338,10561,10659,10768,11203,11253,11357,11442,11999,12408,12675,12710,12754,12870,13196,13249,13275,13292,13337,13620,13665,13705,13862,14724,16212,17735,17994,18183,18224,19022,19310,19381,19451,20073,20587,20636,20688,21041,21335,21501,21607,21842,21909,22136,22538,23545,23664,24162,24519,24774,24812,24955,25096,25352,25401,25588,26126,26206,26248,26717,26835,26953,27172,27330,27567,27606,27953,28404,28783,28835,28874,29109,29128,29255,29608,29820,29855,30198,30260,30279,31366,31574,31852,32253,32856,32907,33072,33483,34197,34672,35029,35199,35364,35521,35714,36017,36045,36285,36343,36480,36615,36826,36979,37627,38329,38388,38507,38906,38949,39221,39241,39252,39351,39416,39634,39754,39785,39989,40033,40081,40104,40327,40442,40689,40715,40794,40963,41488,41571,41859,42195,42800,43017,43132,43331,44062,44562,44687,44914,45042,45182,45419,45446,45851,46827,47067,47803,48599,48855,48925,49055,49185,49290,49340,49642,49732,50014,50157,50186,50339,50431,50557,50574,50691,50996,51323,51382,51511,51596,51787,51987,52229,52250,52766,54106,54279,54427,54589,54674,54713,54885,55397,55869,56186,56246,56306,56371,56725,57210,57568,57809,57965,58110,58139,58313,58497,58653,58845,59100,60392,60515,60787,61147,61446,62014,62052,62608,62827,62839,63086,63250,63796,64327,65368,65889,66116,66253,66383,66502,66767,66996,67131,67548,67903,68916,69157,69768,69808,70756,71148,71215,71388,71395,71422,71446,71592,71630,71687,71814,71913,72364,72417,72755,72921,73002,73078,73121,73939,74162,74251,74678,75022,75111,75132,75160,75389,75444,75503,75750,76023,76200],"async":[2569,3397,4606,6880,12903,18005,27726,30903,34212,35765,68597,72401],"gridbrush":[51387,51435,51564,51601,68631],"asf":[6715,10733,72621],"gathered":[8386],"filtermode":[8669,40744,48767],"stair":[8196],"selectionclick":[52462],"unity_declare_tex2d_nosampler":[44005,45231],"packageregistrationeventargs":[69634],"financial":[12647,53726,67877],"m_allocatorlabel":[26143],"inbound":[12645],"amazon":[17045,66962,66993,67149],"pinch":[18506,35252],"table":[536,703,909,969,1304,1585,1622,1706,2742,2958,3245,4295,4489,4672,5342,5693,5812,6819,6859,6937,7164,7249,8444,8565,8806,9268,9991,12803,13748,13788,14230,14333,15702,20225,21562,21893,25878,26954,27139,27655,28902,28947,29155,29374,29761,31595,33369,33575,34573,34846,34911,35280,35381,35640,35741,36037,36158,36227,36633,36799,37315,37475,37492,39519,39553,40544,41090,41307,41384,41462,41541,41616,42793,43168,49850,51069,51264,51889,52013,52779,53280,53905,54070,54109,54823,55498,55624,57614,58321,58436,59582,60215,60375,60780,61460,61501,61536,61901,61944,62005,62599,62761,62872,63505,63696,63729,63961,64325,64765,65355,66482,68498,68807,69856,70021,70677,71064,71346,71623,72413,72668,73650,76100],"intuitive":[1933,2360,16005,22024,22516,50642,59501,71121,72299,74136],"#00ff00":[63589],"idrophandler":[49896],"synchronized":[1917,5006,10797,10811,11254,11275,12888,29133,36079,52954,53335,73271,74249],"getpreinitflags":[75888],"smooth":[2067,2356,4772,5882,7508,7928,7979,10357,13247,13894,14778,14965,20571,21545,26985,27090,29645,32217,33404,36637,37398,38502,41767,42796,46738,46826,48268,49449,49455,49511,49526,49609,49630,50548,50573,50599,50947,52040,58388,68073,73456],"gearvr":[76102],"kilobytes":[6028,33092],"yml":[3025],"getwindowlongptr":[34237],"mypackage3":[70603],"strictshadervariantmatching":[41985],"spriteatlas":[6703,13702,15319,26600,48536,48554,48581,72281],"bp++":[6021],"uidocuments":[63221],"onpostprocessallassets":[3788,19513,68623,68957,69204],"buffering":[8892,35901,35992,68130,68475,72477,75428],"zone’":[76303],"rendersettings":[15107,41745,44344,49140,76351],"sustained":[11894],"necessities":[23777],"summed":[35354],"lowpassfilteraccelerometer":[29657],"metal3v1":[12232],"atlasses":[35947],"_on":[43071],"wanted":[1957,1966,29485,38377,45911,49465],"drawline":[8988,51519],"currencies":[52968,53330,67168],"comfort":[54115,72942,74405,75068],"blendshapes":[6222,10525,11960,12271,12392,12581,13476,19263,21456,21711,25207,27715,34322,34446,34534],"terrain2d":[31246],"playercontrollers":[11009],"slice++":[27461],"deferred":[6873,7494,8024,9462,12912,17118,21935,22656,23634,24512,24598,26883,29220,30143,34868,36180,37797,38289,38342,42360,42394,43203,43482,44017,44090,44584,45190,46484,46519,46529,46717,47115,48235,52475,67423,72752,73286,73437,75415],"compared":[2958,4460,5999,6206,7015,7488,9690,9878,20238,20572,20608,21540,22798,24904,25496,25841,26664,27575,27917,28483,29108,29470,29614,30890,31642,31863,32412,35285,38888,40340,43113,43457,43571,48874,49473,51163,51964,58381,62800,65990,67772,68351,68863,69096,71010,72334,72364,72877,73089,74581,74847,75209],"descriptions":[1005,2549,4875,9991,18676,35484,40063,45474,51951,52851,52975,53602,57625,58089,66992,67012,67174,75671],"voices":[5238,7620,7669,35973],"isrenaming":[52403],"available”":[67739],"unityshadercompilerextevent":[28066],"animator’s":[7154],"tagmanager":[13856,15092,38919],"+1g":[29619],"unityxrhands":[75667],"spender":[53505],"graphically":[7319,40076],"unchanged":[466,722,1588,3462,3892,6302,14681,25176,25381,25882,33071,48204,51138,51239,51879,54718,58824,71018,72422,73412,75744],"hey":[47313],"manipulation":[2262,2386,2435,5984,6079,6149,22203,40832,66110,72963,75320],"instrumentation":[17015,27939,36496],"cachedassetbundle":[25964],"proportionately":[35156],"nodynlightmap":[46789,47826],"formatstring":[40878],"unity's":[889,1035,1184,1192,1471,1556,1599,1712,1791,1855,1862,1894,1980,2058,2063,2183,2896,3292,3483,3816,3852,3989,4024,4129,4184,4356,4370,4502,4532,4722,4960,5158,5259,5265,5809,6346,6482,6683,6810,6932,6943,6984,7170,7828,8981,9055,9205,9426,9483,9765,10215,10443,10691,11376,11546,11808,12099,12768,12833,12888,12975,13028,13263,14577,15022,16120,16212,16241,16406,16510,16611,16627,16659,16683,16715,16739,16755,16883,16933,17185,17398,17642,17773,17803,17980,18052,18335,18357,18399,18408,18432,18481,18537,18562,18681,18819,18893,19030,19938,20091,20381,21389,21453,21592,21639,21837,21962,22064,22868,23398,23488,23542,23590,23625,23777,24051,24456,24509,24665,25140,25165,25194,25732,26251,26274,26508,26558,26571,26629,26695,27667,27747,27913,29093,29128,29334,29391,29439,29482,29727,29742,29750,29834,29890,30056,30170,30268,30365,30913,31010,31586,31648,33382,33476,33507,33624,33749,33765,34379,34846,35427,35473,35684,36116,36220,36762,38248,38287,38343,38381,38432,38502,39094,39308,40150,40168,40480,40526,40767,42167,42614,43019,43086,43203,43990,44231,44343,44804,44880,45077,45403,45474,45545,45583,45599,46046,46643,47029,47067,47369,48976,49282,49332,49440,49549,49575,49646,49764,50575,50615,50647,50939,51849,51950,52503,52642,54120,54208,54452,54711,60155,61990,63784,64079,66033,66115,66405,66984,67052,68037,68043,68157,69061,69307,69343,69413,69729,70302,70567,70756,70902,70943,71116,71164,71191,71759,71879,71895,72081,72486,72825,72899,73117,73287,73292,73450,73900,74355,74516,74787,75314,75383,75617],"zapier":[4071],"purposes":[142,583,1448,1967,2180,2191,2812,3732,4140,4999,5150,5182,6368,6688,6758,6984,8114,8872,9878,11307,12692,13920,13956,15816,15831,15884,16378,16392,18105,18330,18562,19637,21360,21676,22093,22798,25263,26300,26387,26871,27488,28179,29440,29721,30048,34791,36233,37350,37728,39591,39714,43128,44234,48170,48529,48690,49345,49549,50289,50945,53013,53291,53770,54632,54711,57694,58067,58653,61201,63064,64382,64455,65773,67507,67787,67877,71773,72240,72475,73299,73471,73917,74629,74827],"g900a":[396],"arrives":[20569,35942,36597,68086,72921],"handshaking":[70174],"il2cpp_cache":[73412],"gargoresearches":[40789],"mod_mime":[73775],"throttling":[11895,34994,55553,73703],"guiskin":[6703,9288,9554,24052],"rangeattribute":[20967],"prefer":[4327,6834,7836,9457,9555,9622,14285,21525,22127,25487,27691,33377,36689,50697,52242,61627,68433,69985],"atlasgroup":[48790],"tracing":[6803,6880,17092,22870,23440,23627,27938,36568,42012,74287],"normalbumpeddiffuse":[42234],"sendevent":[58000],"aabb":[11564,18229,23103,41509],"outweigh":[6034],"usesnamedpass":[47172],"nearlyinstantaneousthreshold":[62365],"materialeditor":[28973,29019,44214,45104],"assembly1":[21029],"lower":[554,1784,1950,2095,2663,2777,4257,4460,4980,5730,6139,6344,6378,6443,6843,7017,7264,7487,7588,7597,7606,7634,7643,7653,7660,8004,8031,8203,8235,8518,9060,9291,9737,9875,9966,9998,11258,11280,11536,11612,11729,12307,12895,13058,13106,13133,13175,13412,13486,13567,13597,13657,13729,13760,13794,14318,14545,14864,14976,18511,18566,19077,19286,20419,21221,21509,22139,22586,23450,23560,24735,24774,26004,26046,26056,26665,27013,27221,27749,27758,28179,28477,29331,29732,29880,30243,30478,31701,31745,32136,32223,32273,32660,32855,35175,35926,36060,36189,36294,36355,36596,36632,37365,37700,37728,38289,38404,38498,38574,38652,39986,40851,41370,41795,43165,44234,45520,45565,48529,48586,48875,49518,50007,50058,50375,50409,50435,50525,50540,50550,50569,50669,50683,50960,51031,51168,51941,51991,52126,53377,53734,54705,54732,56725,58451,61526,64167,65999,66405,66599,70572,71877,71972,72287,72532,73089,73417,73702,74581,74642,75355],"getpropertyname":[36885,37059],"beta":[701,25446,28790,31379,40334,50178,67264,67886,68850,70839,72792,74656],"lemonchiffon":[63573],"gl_arb_draw_buffers_blend":[43757],"getdroppedframecount":[76019],"flash":[9585],"mediumblue":[63595],"atomic":[8441,45508],"chrome's":[73030],"depthauto":[68930,69174],"fontsize":[24152,57090,64828,65301],"tintcolor":[10194,32459,59625],"transformz":[10266,14603],"addedassets":[19569],"kformatr8g8_unorm":[50109],"next":[178,1031,1886,1908,2178,2328,2418,2451,2772,3309,3502,3675,3729,3793,3930,3968,4280,4480,4911,5092,5494,5761,5805,6325,6352,6403,7920,8080,8883,9269,9518,9594,9641,9715,9777,10342,10501,10609,10633,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11303,11998,13250,13341,13499,13708,13771,13799,13818,13925,14724,16933,17752,18080,18229,18339,19592,20105,20344,20517,20569,20600,20708,20787,21221,21336,21844,21938,22281,23028,23618,23729,23797,24223,24593,25179,25263,25326,25633,26026,26356,26461,27055,27099,27752,27993,28424,28537,28638,29058,29282,29663,30110,30167,30408,31379,31997,32299,32414,32863,32924,33083,33239,33415,33659,34120,34736,34825,34994,35218,35380,35714,35999,36031,36303,36481,37051,38281,38513,38532,38566,38596,39310,39368,39574,39619,39650,39819,39929,40620,41400,41619,41693,41777,41954,46831,47609,48516,48683,48925,49503,49531,49642,49734,50353,50455,50521,50534,50606,50697,51338,51788,52034,52320,52842,52992,53223,53344,53813,54257,54370,54419,54762,55107,56835,58131,58336,60094,60511,61916,62020,62066,62831,63108,65194,65776,65867,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66690,67085,67591,67668,67732,67765,67911,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68852,69061,70122,70376,71140,71181,71272,71488,71503,71593,71718,71970,72178,72269,72368,72409,72502,72841,72917,73048,73209,73270,74422,74810,74946,75346,75434,75509,75774],"important":[80,273,475,501,532,682,697,720,739,975,1024,1087,1256,1352,1378,1416,1483,1628,1736,1762,1886,1893,2130,2439,3307,3431,3760,3858,4327,4381,4531,4970,5038,5181,6094,6138,6432,6758,6818,6856,7566,7573,7767,7784,7928,9187,9513,9894,10091,10574,10651,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11570,11803,12154,12287,12430,12599,12896,12970,13249,14288,14702,14965,15854,17045,17985,18058,18257,18670,18951,19026,19197,19512,21154,21221,22010,22341,23362,24310,24783,24794,26294,26451,26783,26859,27015,27488,27591,28437,28477,28753,28874,28895,29150,29444,29792,30322,30345,30875,31760,33402,33426,33446,33885,34372,34618,35888,36240,37667,37683,37700,38293,38333,38385,38516,38560,38590,39099,39168,39787,39827,40527,42110,42354,42405,42946,43024,43591,44093,45194,45448,45521,45572,45643,47111,47308,48380,48510,49423,49453,49468,50005,50661,50726,51060,51950,52224,52245,52592,53714,54115,54635,54786,54898,55030,59825,59868,60515,62015,62837,63741,63836,64900,65191,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66808,66812,67039,67164,67689,67758,67864,67925,68052,68070,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,69514,69770,69811,70111,70166,70260,70940,71394,71421,71890,71970,73382,73496,73615,73907,74049,74496,74922],"crooked":[52139],"enablecodecoverageitemname":[68840,69085],"ericw":[51458],"button1":[61618],"#656565":[63258],"smile":[10560],"upgradable":[37971],"certain":[1404,1912,1994,2192,2215,2702,3455,3491,3576,3725,4803,4845,5725,5924,5998,6105,6767,7178,7307,7663,7879,8012,8128,8496,8999,9081,9343,9464,9975,10068,10477,10505,10708,11434,11510,11907,12104,12617,13552,13613,13670,14717,18063,18113,19017,20777,20918,21154,21346,21964,22052,22073,22468,23585,23627,24493,24624,25860,26438,26566,26569,26587,26714,27267,27764,28051,28062,29695,29769,29924,30001,30062,30175,30328,30404,30443,30865,31627,31797,32637,33008,33098,33450,33483,33583,33774,34194,34566,34791,34930,35256,35694,36352,36465,36590,37052,37237,37749,38734,39508,39663,40358,41566,41877,42156,42430,43106,43576,44097,44549,45181,45419,45446,45618,47370,48174,49338,49438,49481,49653,50128,50321,50956,51618,51966,52483,52511,52715,52877,53295,53756,53782,54106,54227,54496,55060,55973,56125,57124,59501,62879,64511,64610,64808,64914,65312,65537,65552,65699,65758,65898,65975,66003,66374,67182,68197,68626,72475,72713,72764,72840,73030,73238,74172,76136],"bumped":[42230,42235,42295,42433,42438,42813,42820,42825,42831,42836,45558,46813,48691,49540],"counteract":[13837],"mismatched":[75439],"choice2":[64705,65067],"evt":[18587,30614,55018,55137,55690,55738,55821,55959,56023,56070,56514,56771,56913,57021,57237,57719,57886,58007,58252,58642,59572,60458,60532,60599,60872,60943,61049,61732,61797,62124,62401,62533,62722,62820,64545,64621,65091,65337,65468,65484],"stats":[11820,12355,20459,21876,22051,25982,30205,34286,34498,35029,36242,36480,38324,64955,66608,75988],"imported":[65,1864,1879,1894,1911,1968,1986,2037,2055,2177,2184,2188,3580,3728,3781,3856,3904,4531,4776,5924,6222,6381,6443,7000,7175,7941,8621,9136,9290,10742,11681,13358,13397,13629,13945,13998,14285,14669,14786,18063,19151,19470,21052,21394,21453,21565,22073,22466,24650,25043,25222,25243,27553,27594,28179,29097,29750,29918,31629,34610,35039,35250,37551,37670,38440,38661,38850,39594,48239,48264,48335,48559,48867,49536,50419,50603,50647,50934,51131,51231,52222,52860,54603,58266,58358,59501,60157,61562,63086,65990,66555,68607,68696,68956,69203,70260,71277,71312,71389,71422,71773,72464,72615,74642],"note":[138,199,251,271,319,385,424,478,541,547,601,625,691,727,842,919,948,1010,1038,1131,1163,1181,1200,1215,1266,1271,1333,1359,1376,1431,1512,1566,1588,1677,1724,1772,1840,1888,1896,2181,2194,2232,2287,2360,2409,2447,2463,2636,2702,2777,2985,3088,3229,3241,3303,3338,3377,3470,3493,3512,3571,3598,3697,3828,3879,3897,3923,4178,4204,4231,4250,4387,4392,4418,4438,4445,4468,4494,4591,4663,4720,4794,4838,4879,5062,5354,5498,5721,5769,5939,5991,6126,6269,6315,6384,6463,6496,6818,7013,7195,7249,7364,7484,7662,7749,7767,7807,7920,7944,7959,8002,8024,8118,8131,8163,8221,8260,8387,8407,8636,8810,8989,9120,9134,9172,9197,9243,9256,9347,9457,9555,9622,9670,9774,9845,9890,9961,10010,10120,10342,10439,10475,10587,10609,10633,10696,10722,10730,10789,10805,11166,11242,11300,11308,11376,11520,11526,11597,11650,11736,12119,12280,12319,12443,12721,12769,12831,12885,12988,13034,13115,13149,13174,13240,13264,13344,13427,13478,13627,13680,13816,13834,13847,13862,13894,13956,13977,14146,14220,14501,14708,14734,14802,14963,14989,15042,15818,15844,16091,16330,17240,17370,18050,18208,18217,18310,18344,18376,18449,18743,18753,18760,18894,18917,19026,19045,19072,19162,19210,19346,19359,19783,19987,20072,20106,20212,20242,20400,20403,20702,20766,20862,20917,21024,21168,21203,21302,21381,21433,21456,21609,21716,21853,21881,21991,22090,22139,22226,23410,23427,23543,23627,23685,24475,24521,24535,24632,24638,24933,25179,25194,25265,25331,25402,25455,25500,25686,25861,25908,25928,25979,26074,26439,26567,26883,27005,27041,27133,27184,27300,27519,27555,27686,27705,27754,27765,27992,28089,28142,28153,28186,28283,28421,28613,28677,28723,28791,28874,28880,29063,29122,29152,29334,29440,29553,29614,29695,29721,29766,29792,29904,29919,29973,30039,30050,30073,30154,30184,30225,30275,30380,30412,30479,30718,31008,31368,31703,32193,32299,32384,32609,32658,32705,32776,32886,33065,33367,33384,33410,33473,33579,33769,33785,33879,34163,34214,34258,34339,34465,34613,34678,34693,34755,34791,34852,34956,34994,35203,35290,35388,35692,35853,35925,35994,36045,36156,36242,36303,36464,36574,36640,36715,37272,37303,37484,37509,37649,37679,37704,37737,38274,38351,38394,38549,38583,38622,38624,38667,38680,38860,38908,39025,39110,39137,39186,39257,39524,39618,39740,39796,39819,39872,39977,40088,40099,40102,40165,40214,40449,40454,40589,40616,40664,40789,40825,41193,41295,41323,41390,41421,41467,41571,41603,41703,41803,41842,41992,42101,42121,42231,42236,42241,42248,42253,42261,42291,42296,42301,42306,42434,42439,42445,42454,42461,42466,42509,42514,42520,42526,42531,42536,42541,42546,42576,42581,42586,42591,42598,42689,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42875,42895,42923,42929,43041,43193,43264,43372,43459,43521,43566,43684,43728,43814,43987,44069,44304,44338,44360,44384,44422,44603,44678,44759,44797,44891,45009,45075,45149,45254,45261,45470,45521,45599,45643,45721,45841,45863,45975,46370,46520,46552,46809,48151,48168,48181,48315,48377,48431,48502,48557,48601,48615,48674,49217,49289,49406,49454,49468,49633,49688,49772,49832,50016,50065,50286,50322,50388,50455,50563,50604,50726,50901,50969,51030,51080,51297,51616,51722,51878,51984,52104,52236,52238,52501,52590,52737,52747,52764,52888,52937,52952,53083,53292,53693,53831,54104,54423,54561,54636,54684,54705,54736,54821,54883,55346,55399,55506,55559,56248,56299,56674,57694,58015,58066,58156,58313,58414,58459,58653,58774,59031,59398,59580,60164,60515,60980,61323,61439,61446,61490,61570,61593,61908,62052,62202,62670,62751,62856,63066,63108,63196,63702,63742,63836,63887,63943,64174,64361,64512,64564,64587,64611,64759,64809,64842,64860,64879,64915,65025,65133,65313,65525,65538,65553,65568,65588,65608,65628,65649,65703,65876,65898,66028,66116,66224,66330,66368,66384,66527,66581,66859,66878,66975,67027,67074,67171,67240,67265,67272,67295,67365,67551,67585,67592,67639,67766,67846,67947,68055,68198,68311,68547,68566,68689,68811,68849,69040,69293,69403,69506,69664,69694,69754,69766,69806,69862,69957,70068,70135,70241,70265,70311,70345,70405,70586,70763,70770,70813,70875,70932,70967,71016,71170,71183,71191,71278,71288,71310,71361,71366,71404,71434,71449,71475,71491,71508,71563,71627,71873,72007,72052,72064,72178,72243,72296,72401,72475,72497,72681,72849,72890,72957,73030,73094,73118,73193,73229,73261,73333,73406,73449,73478,73559,73608,73662,73702,73775,73896,73921,74050,74567,74645,74726,74760,74837,74852,74904,74929,75021,75034,75077,75192,75249,75303,75405,75470,75537,75910,76038,76332],"regions":[6046,9771,12663,14869,17803,23410,50522,69333,69439],"echaracterclass":[59377],"space":[140,280,413,1655,1704,1933,2172,2271,2394,2764,3294,3580,3739,3807,4142,5042,5158,5178,5353,6152,6293,6317,6723,6754,6834,6896,7204,7323,7496,7792,7861,7920,7934,7952,7959,8003,8078,8104,8154,8182,8199,8230,8263,8291,8499,8862,9002,9051,9075,9167,9297,9477,9532,9635,9686,9723,9767,10080,10127,10204,10337,10747,11477,11724,12114,12345,12663,12958,13090,13136,13163,13552,13642,13651,13673,13711,13816,13861,13930,13985,14037,14122,14295,14502,14670,14823,14950,14983,15847,18513,18991,19128,19620,20418,20712,20785,21029,21230,21392,21525,21964,22130,22183,22506,23412,23462,23530,23645,23816,24004,24325,24532,24755,24899,25623,25692,25887,26206,26547,26557,26580,26812,26919,26968,27054,27088,27130,27263,27333,27482,27499,27514,27544,27583,27643,28881,29153,29338,29617,30048,30354,30433,31708,31835,31856,32130,32165,32291,32727,32903,33383,33433,33607,34272,34360,34480,34781,34875,35126,35247,36068,36340,36548,36616,36679,36696,37283,37345,37627,37674,37684,37820,38361,38463,38653,39132,39377,39428,39546,39579,39646,39721,39731,39764,39964,40133,41327,41694,41768,41813,41866,42060,43140,43188,43376,43875,43964,44061,44234,44410,44583,44836,45025,45093,45166,45198,45420,45457,45573,45724,46074,46249,46726,47086,47286,48323,48595,48662,48676,49438,49668,50007,50455,50538,50677,50889,51917,52389,52739,54140,54237,54337,54713,54765,56103,58132,58326,58403,58440,59064,59323,59646,59854,60411,61558,61816,62034,62464,62576,62827,62952,63878,64098,65210,65812,65891,65951,65982,65999,66442,66569,69758,69794,70116,70259,70357,70734,71145,71391,71563,71776,71873,71969,72240,72297,72789,72921,73014,73208,73248,73442,73601,74275,74422,74787,75106,75424,75573,75903,76143],"screenmanager":[24792],"stuff":[5043,10838,40180,52591,66297],"volumescale":[73067],"enabledkeywords":[42097],"graybox":[31123],"clearshadererrors":[68576],"submeshes":[21524],"onperformculling":[5345,5407,5496,5732,5774],"somegenerictype":[40565],"preferable":[3346,4861,18105,22093,30520,69769,69810,70773,72318,73741],"labeltoshow":[56492],"webkit":[73741],"indicator":[390,1908,2328,5272,7139,7390,10768,11767,12086,24592,25864,27820,31366,31386,34893,35029,36480,49735,56997,58031,58579,60495,60877,60977,63127,67050,71230,71503,71519],"m_buffer":[26141],"presenting":[67506],"customcollider2d":[8782],"yesrequires":[37940],"oggvorbis":[68188],"scaleinlightmap":[10651],"+20db":[4819],"logos":[4289,12275,12458,50341],"linearacceleration":[73491],"you've":[7511,11407,11669,18902,18961,24079,25329,26357,30411,33844,35074,44269,46295,52186,53070,53602,55014,61925,65849,69350,69454,70096,71371,71681,73084,73982,74896,75449,75617],"walkies":[4956],"breaktorque":[26576],"modeled":[52094],"manipulator's":[57549],"showcase":[4327],"buildassetbundlesparameters":[19086],"res":[1005,2832,8415,27701,37987,49540,68894,69132],"italian":[53007,53632],"module":[492,531,913,993,1232,1336,1595,3325,4784,6358,6416,6942,7410,7469,11462,11473,12401,12909,15039,16564,16595,16603,16611,16619,16627,16635,16643,16651,16659,16667,16675,16683,16691,16699,16707,16715,16723,16731,16739,16747,16755,16763,16771,16779,16787,16795,16803,16811,16819,16827,16835,16843,18318,18530,18969,19271,21184,21884,22040,22578,23524,24950,25345,25739,27645,28096,28859,31667,31730,31746,31762,31776,31801,31822,31839,31868,32077,32092,32116,32140,32203,32239,32327,32345,32370,32593,32616,32636,32664,32711,32746,32867,32890,32916,33391,33879,35263,35365,35441,35465,35497,35604,35621,35691,35767,35887,35900,35923,35967,36019,36117,36154,36196,36295,36353,36432,36472,37631,38341,39512,39703,39999,40101,40303,41979,48617,48651,49886,52095,52673,52746,58155,61493,66472,66816,67488,67555,67569,67585,71194,72089,72791,72832,73210,73398,73428,73562,73775,73947,74306,75033],"outnormal":[46518],"parametrization":[38011],"secondarytouch":[76111],"v2f":[1680,6527,8733,10173,14052,14176,23342,31948,32963,42036,43346,44038,44403,44921,45679,47212,47920],"setdata":[5446,5590,73083],"kformatr16g16_sfloat":[50116],"reopen":[2717,18927,24521,25356,35779,59133,70380],"inadvertently":[5921,43024],"listening":[11059,11179,11207,11229,53763,60497,66764,76193],"unity_spotdirection":[47133],"google_app_id":[52875],"attenuate":[5053,7793,73055],"pt":[12116,53640],"width":[4994,6762,7959,8034,8155,8197,8565,8632,8671,8864,9274,9648,9961,10206,10329,11719,12115,12310,12326,12858,13104,13754,14573,14805,19681,20456,20958,21206,21504,21775,21971,22732,23816,23984,24177,24305,24760,24784,24906,25261,25534,26922,29855,32189,32610,32635,32732,33529,34220,34900,39375,39417,39457,39555,39575,39644,39724,39798,40140,43154,45161,47088,48319,48373,48484,48515,49526,49852,50375,50420,50476,50593,50889,51137,51156,51238,52161,52338,54214,54229,54326,54466,54716,54812,54858,54886,56560,56777,56861,57102,57376,57626,58298,58447,58497,58799,59308,59624,59855,60314,60637,60961,61074,61220,61530,61835,62043,62449,62965,63739,63948,64006,64046,64229,64433,64499,64756,64978,64991,65041,65051,65169,65676,65818,65982,68153,68942,69186,72530,72996,73931,76490],"ease":[8319,11136,11152,17974,31659,35054,37750,38437,39239,62461,62848,66700,69768,69808,75674],"variant's":[10411,28963,72280],"unsuccessful":[35625,53093],"multicast":[52645],"#3c3c3c":[63296],"cubeimportereditor":[40493],"photoshop":[47,4501,15982,25236,37497,37670,49450,50411,50491,74187],"reloads":[3767,3780,15810,17983,19027,30900,35139,39159,39913,54454,65700,66457,68993,69240,70384],"desireddivisor":[33278],"refers":[2277,2411,3342,3672,3833,4157,4539,5037,9555,9622,9767,11078,13850,14319,19127,19340,19354,20657,21640,24467,25032,26263,27512,32130,36632,37373,39812,41096,42818,44084,48546,49449,50378,55557,58403,59540,60358,62753,63098,64234,65698,65998,68546,70774,75587,76120],"modified":[2216,2308,2353,2429,3595,3769,3793,5183,7156,7566,7573,7749,7765,7800,9653,17994,20634,22061,22228,23045,25083,25164,25329,25347,25423,29327,31627,32808,34903,34955,35051,36327,38377,38932,39160,40705,43263,48132,49497,49505,49534,51908,52099,55030,62586,66384,67049,67257,68672,71098,72422,73015,74153,74311,74603,75487],"ishotcontrol":[51587],"key":[235,617,1095,1107,1118,1134,1161,1178,1807,1886,2080,2256,2262,2283,2327,2386,2435,2547,4262,5105,5832,6155,6352,7022,7184,9052,9279,9767,10501,11044,11964,12235,12474,19000,19277,19443,19490,20104,20545,20616,20718,21156,21405,22411,23677,23810,24277,25679,25827,26103,28103,28192,28326,28975,29021,29411,30826,32858,33472,34260,34341,34467,34811,35603,36057,37048,39136,39263,39351,39618,39819,39899,40150,41266,42336,43100,43209,44767,44787,45648,45940,45962,48123,48262,48315,48669,48797,49232,50511,50527,50585,50642,51191,51275,52243,52789,52829,52877,53105,53369,53782,54561,54650,54726,55975,57958,57983,59550,59732,60221,60388,60497,60790,61798,62744,63107,65704,65893,66115,66450,66613,66951,67148,67604,67762,69333,69439,69835,69947,70051,70060,70097,70127,70174,70496,70630,70829,70873,71350,72126,72667,73091,73268,73486,74556,74886,74981],"nonperformant":[5945],"thepluginname":[34678],"trysettrackingoriginmode":[76310],"++page":[48810],"customisable":[72462],"labeltext":[24175,62175],"guiskins":[9553,24057],"sony":[23160,44891,72955,75306],"armadillo":[52286],"1px":[61841,63432,64433],"yeshdri":[38064],"currentactivity":[1439],"gives":[78,567,1896,1975,2211,2324,3725,4385,4883,6434,6793,6840,6935,7940,8245,8948,9060,9844,9879,10009,10061,12667,12941,13021,13538,13611,14338,14968,15015,16168,17118,17326,18503,20240,20456,21540,22061,23089,24629,25597,25911,26023,26489,26510,27500,27520,27557,28402,29895,29920,30110,30241,30399,30489,32220,32408,34362,34988,35793,36198,36366,36713,37480,37708,38437,39818,41935,42793,42813,43286,48510,49526,49834,50929,50991,52143,52235,52882,54886,55891,60508,66448,68928,69171,71776,72319,72375,72934,73197],"_stickycursorlock":[73271],"++m_clickcount":[61734],"400x240":[52721],"complexity":[2178,3492,4574,6816,9033,9898,12731,13430,16060,18519,20117,20457,21529,26060,29714,37662,38354,39159,42368,43023,43080,44022,46717,49449,50164,51964,64325,68513,72488,72608,73600],"levelplay":[16091,17370,31398],"otherstring":[5996],"validatecommandevent":[55909],"leftleft":[62234],"constantforce2d":[8605,15208],"raytracingshader":[15321],"vector2intfield":[55458,55536,59708,65582,65586,65623,65644,65664,69326,69432],"tilepalettefocusdropdown":[51102],"slice":[176,1672,8718,8964,12947,14121,14263,27461,27740,32705,33407,37373,48364,48510,49534,54605,54772,59538,61071,61589,63711,64118,75454],"locating":[3889,18474,33383,53884,69514,70345,73630],"shieldarea":[22210],"need":[69,158,176,222,478,495,518,617,633,649,655,693,698,726,840,889,944,1192,1234,1384,1468,1499,1552,1594,1674,1832,2004,2067,2213,2247,2271,2394,2609,2746,2776,2972,3292,3309,3379,3501,3566,3681,3736,3861,3949,3976,4133,4168,4209,4223,4230,4254,4381,4405,4421,4535,4628,4832,4881,5187,5351,5761,5766,5965,5999,6056,6193,6264,6289,6318,6325,6360,6409,6834,6872,7017,7178,7487,7767,7782,7870,7878,7933,8122,8133,8146,8258,8326,8434,8558,8788,9003,9024,9159,9163,9229,9247,9298,9364,9489,9588,9711,9728,9954,10014,10092,10205,10369,10477,10585,10606,10733,10833,11074,11149,11160,11176,11244,11271,11308,11333,11382,11600,11660,11669,11764,12586,12875,13036,13167,13308,13430,13556,13618,13645,13674,13733,13879,13961,14001,14009,14277,14332,14577,14895,14984,15816,15831,15884,17118,17412,17955,18076,18258,18354,18357,18389,18414,18449,18506,18575,18662,18728,18749,18812,18847,19005,19026,19052,19122,19138,19366,19378,19514,19622,20124,20222,20239,20452,20607,20860,20981,21029,21205,21323,21405,21525,21572,21624,21832,21867,21962,22004,22011,22029,22085,22139,22544,23262,23427,23672,23798,24169,24276,24643,24724,24759,24768,24790,24906,24947,25035,25142,25178,25187,25331,25353,25407,25733,25738,25961,26049,26122,26252,26293,26434,26479,26494,26562,26587,26690,26695,26784,26791,26964,27033,27065,27143,27268,27488,27519,27562,27583,27638,27748,27928,28052,28110,28232,28266,28286,28390,28488,28604,28677,28757,28774,28794,28880,29136,29365,29434,29443,29467,29486,29721,29760,29809,29825,29834,29861,29882,30005,30141,30243,30265,30324,30426,30443,30493,30500,30718,30881,31621,31646,31717,32196,32478,32665,32767,33007,33065,33081,33152,33419,33456,33598,33722,33763,33883,34161,34237,34362,34600,34696,35037,35220,35379,35565,35609,35637,35769,35834,35944,36172,36463,36623,36883,37227,37268,37295,37321,37329,37489,37604,37627,37671,37694,37728,38355,38403,38451,38459,38483,38532,38541,38607,38865,38938,39208,39678,39797,39888,40098,40298,40570,40630,40643,40668,40825,41200,41384,41559,41694,41885,42005,42058,42456,42614,42698,42738,42810,42949,43165,43186,43223,43335,43955,44053,44269,44541,44591,44671,44830,45121,45290,45567,45643,45662,45840,45858,46224,46520,46552,46721,47253,47932,47952,48023,48162,48174,48337,48503,48578,48690,48883,49158,49372,49396,49437,49541,49713,49752,49832,49950,50010,50018,50148,50159,50288,50321,50369,50582,50673,50969,51009,51164,51237,51787,52104,52184,52527,52599,52693,52699,52732,52746,52754,52785,52878,52973,53099,53303,53692,53850,54018,54124,54209,54296,54545,55512,55558,56428,56610,56689,57125,57570,57662,58190,58310,58369,58448,58673,58756,59122,60643,61476,61486,61779,61920,62178,63082,63220,64355,64381,64758,65976,66115,66178,66225,66356,66393,66450,66555,66812,66842,66883,66913,66922,67055,67074,67423,67755,67852,68054,68311,68546,68566,68689,68811,68849,69040,69294,69381,69410,69506,69842,69990,70195,70241,70265,70290,70332,70497,70648,70875,70918,71173,71208,71221,71442,71671,71751,71776,71805,71847,71863,71961,72004,72050,72089,72136,72148,72172,72221,72315,72377,72462,72507,72687,72736,72867,72901,72946,73015,73022,73136,73197,73210,73324,73386,73442,73482,73499,73616,73804,73907,74218,74429,74661,74808,74814,74838,74864,75002,75067,75409,75501,75764,75874,75919,75984,76068,76097],"'unityengine":[2738],"worldnormalvector":[46814],"grace":[4461],"purpose":[73,979,2086,2994,3013,9279,13206,14230,19559,19990,21893,21982,24768,25347,25678,27041,28560,29012,31765,33573,33820,37369,37480,37533,38248,38264,38291,39929,40063,40343,40430,42665,49388,50672,52034,52532,52754,53715,54333,57081,58844,59122,61593,64234,66408,66469,69705,69792,72276,72448,74206,75130],"#939393":[63274],"emmisive":[44486,45365],"material's":[10421,21240,23398,29786,41891,42031,47189],"payload_len":[66123],"oldrect":[59821],"positives":[4387,11624,52629],"shadowauto":[68930,69174],"subscribetoevent":[69656],"ilayoutcontroller":[54274],"ai":[16103,16591,18566,22310,29141,30919,31400,36599,37919,40643,69375,69479,72917,74314],"ended":[29599,35394,35737,36079],"handletool":[51587],"timemanager":[14565,15050,38921],"cpucapacity":[1771],"propelled":[72299],"setoutline":[48478],"undefined":[4902,5774,7375,8081,8438,11824,12359,20271,24758,34293,34503,34623,48163,58015,63061,63243,72998,75899],"aliased":[50513],"getsplashbackgroundcolor":[74717],"contextualmenumanager":[60427],"shadowcastingmode":[48234,50437],"standards":[5845,5924,10764,50224,73119,73592],"icon’s":[22272],"recenter":[75593,76302],"cleaner":[36554],"supportsgeometryshaders":[19747],"horizontalslider":[23962,24169,24408,59661],"cache":[463,1432,2605,3289,3342,3584,3733,4223,4562,6025,9089,12395,14318,21064,22123,22787,24819,25116,25178,25965,26509,26909,27171,27654,29157,30893,31059,31605,31703,34973,35926,36816,38850,40024,40114,41841,41962,48557,48702,49733,50000,50055,50141,50317,51035,57750,60813,63219,66592,69692,69740,69755,69791,70185,70257,70330,70419,70727,70830,71396,71423,71454,73026,73204,73368,73622,73899,74153,74519],"recursive":[3493,21418,37897,39966,52627],"#fffafa":[63641],"source":[29,266,556,811,1001,1070,1094,1243,1271,1285,1302,1399,1721,1822,1830,1894,1961,1997,2034,2347,2690,2701,3229,3346,3579,3728,3778,4530,4629,4796,4819,4996,5160,5178,5452,5596,5984,6054,6101,6199,6679,6813,6883,6958,7061,7496,7565,7573,7615,7770,7836,7989,8488,8848,9065,9856,9891,10392,10425,10510,10811,11069,11438,12627,12698,12751,13272,13289,13361,14018,14078,14229,14711,14729,14787,14841,18077,18166,18352,18500,18521,19055,20272,20541,21029,21149,21405,21487,21582,22087,22580,24607,24625,24920,24988,25090,25113,25153,25391,25841,25847,26046,26495,26783,26859,26919,26986,27293,27540,27855,28264,28373,28947,29109,29782,29813,29915,30853,31231,32066,32467,34600,34640,34657,34691,35071,35381,35729,36003,36636,37670,37738,38251,38283,38405,38677,39310,39594,39921,40655,41840,41882,41993,42026,42049,42142,42620,42689,42777,43017,43327,43494,43532,43566,43684,43737,43811,44306,44338,44363,44422,44838,45037,45175,45261,46046,47156,47374,48262,48295,48528,48569,48685,48856,48990,49150,49372,49395,49438,49457,49483,49520,49575,49616,50659,50726,50847,50877,51400,52265,52581,52951,54043,55498,55604,57112,57206,58303,58375,58439,58584,58673,58733,59390,59720,60559,61294,61320,61604,61897,61905,61925,64387,64747,65518,66025,66518,66634,66840,67035,67249,68661,68860,69069,69596,69744,70217,70333,70404,70875,71127,71215,71424,71480,71601,71619,71662,71953,72137,72385,72473,72494,72619,72728,72869,72889,73412,73640,74212,74589,74659,74898,75414,76030],"sending":[218,1384,9330,10821,11210,11252,11276,17452,17723,21180,23169,24493,27507,30349,34983,35719,39490,40015,50941,62415,66137,66721,67483,67587,68372,70504,73670],"clearrendertarget":[49057,49299],"emulators":[1550],"noting":[3247,36782],"api#debuggingapi":[72756],"unity_compiler_hlsl":[43978],"#x6f":[66770],"dominant":[6156,7940,9969,22170,27114,55890],"truncated":[6762,22786,61557,66004],"#8942":[2462,23757,24535,25380,25401,36048,36694,41454,41491,41644,41719,49339,53230,54437,71622,71910],"viewport":[8025,15967,22716,29879,32274,39234,39776,54307,54404,54499,54593,54648,54690,56636,56692,56792,58706,59841,61614,63077,63112],"manuallicensefile":[21098,28701,28740],"r16g16b16a16_snorm":[8461],"active":[1114,1706,2287,2564,3430,4793,4865,5123,5275,5337,5961,6962,7187,7870,8306,9088,9336,9435,9628,9762,9918,10337,10397,10439,10547,10720,10870,10994,11175,11202,11225,11442,11987,12666,12754,12865,13130,13275,13292,13456,13656,13911,14721,15033,18180,18903,19040,19242,19986,20048,20288,21060,21192,21306,21872,22316,23437,23568,23703,23940,24575,25650,26824,27532,28436,28703,28742,28778,29354,29701,30215,30233,31721,31797,32269,33101,33383,33483,34428,34491,34815,35072,35344,35441,35582,35636,35690,35809,36302,36489,36574,37960,38269,39027,39137,39170,39492,39512,40011,40107,41320,41723,42196,42774,43221,44208,44618,46023,47413,48323,48593,49030,49172,49680,51074,51080,51103,51261,51371,51893,51964,52166,52216,53229,53499,54123,54419,54641,56503,58254,58362,60650,61484,61533,61908,63965,66102,66189,66224,67136,67523,67568,67624,67702,71196,71550,71645,72926,74680,74859,75242,75264,75397,75424,75936,76130],"anatomy":[1232,18365,23809,71978],"0b1111":[1781],"combined":[4819,6999,7171,7760,7940,8008,8159,8387,9639,10003,11511,13706,17925,17998,22407,24768,25459,26110,29861,29906,30331,32220,36376,36493,37369,38332,38403,39603,39765,42475,42566,42698,42792,42813,42882,42902,44936,45293,46224,48354,48588,49536,49668,50006,51780,52064,65923,72735],"consequence":[2181,43177],"re":[156,167,229,466,556,617,1123,1227,1960,1972,2180,2190,2440,3437,3450,3489,3585,3696,3790,3856,3876,3891,4209,4428,4641,6360,6419,7510,9603,9954,11118,12198,12400,12896,12973,13628,17282,18076,18207,18224,18993,19473,20125,20450,21405,22085,22555,24215,24669,25043,25153,25695,25841,27736,28455,28791,29771,31703,32180,32233,32808,33231,33443,36555,37670,38532,38866,39157,39329,40505,43269,48225,48260,48665,49733,50179,50602,52533,52634,53050,54454,57750,58186,60637,61625,62788,64323,67703,67877,68601,70224,70438,71182,71272,71361,71802,72189,72687,73310,73412,73614,73982,74827,74898],"noout":[52894,53831],"gl2":[74095],"vertexlight_on":[44578],"interrupts":[21910,33408],"shallowest":[61388],"holds":[1574,3574,10605,11112,11764,13897,22754,23625,25867,26247,28103,28135,33581,54302,54885,56706,57479,57844,57900,58143,59372,60540,60611,62749,65902,73614,76140],"subsample":[35714],"born":[31853],"onscreen":[6725,8066,8120,12888,17926,29879,39630,43154,49830],"unity_holographic":[74684],"setreplacementshader":[45619],"chinese":[4263,25031,53602,58115,58369],"transmit":[66165],"procedure":[2834,3363,10984,17957,18920,21134,22964,28613,28676,28762,48077,52570,66411,69307,69413,69872,69990,70067,70100,70134,70326,70390,71250,71379,71395,71418,72008],"drawray":[8988,71583],"buildcompression":[2918],"limp":[74902],"resourcename":[2824],"particlemeshescustom":[31926],"rendertexturedescriptor":[68941,69185],"forgotten":[30098],"sparsetex":[45513],"exercise":[25212,53725],"onbecamevisible":[10715,21353,38201],"transforms":[1909,2172,5204,5965,7125,7159,9532,11555,11615,14660,15836,20380,21349,21589,22532,23284,26545,29113,30332,31680,35247,35344,36320,40675,41083,43875,46074,47370,49668,51878,54246,54716,56117,60638,66417,68696,72982,74901],"localizationasset":[15368],"shadergui":[44210,45104],"dithercrossfade":[46802],"uvsetindex":[50976],"usegoogleservice":[52793],"callbacks":[3680,3820,4904,5924,6125,6483,7976,8180,8277,8395,8780,9045,9337,10819,11553,12739,14515,15849,18313,18616,19143,21346,23194,24619,24634,25328,27978,28051,28062,29141,29924,33477,33866,35271,35701,38605,39874,40161,52470,52691,54284,54898,55609,55705,55754,55990,56072,56121,56208,56676,56881,57416,57556,57638,57854,59121,59596,60209,60455,60520,60868,61820,62389,62730,62815,65737,66261,66853,66924,68086,68994,69241,72191,72437,74327,75882,75938],"yesunlimited":[38049],"m_trailparticlesystem":[35453],"unity_dots_instanced_prop":[20254],"sketching":[7981],"27s":[73961],"flatter":[49550],"merely":[4773,52584,67359,67634],"seidel":[11629],"limbs":[2190,7348,8368,15864,21592,22504,74893],"dimensional":[67,6111,6754,8819,12968,13199,14101,22292,29617,31708,37283,43484,50403,75501],"heldinhand":[76140],"constrain":[6981,8561,10406,11454,12763,13284,13301,18168,20702,38613],"fountain":[2349],"crossplatformvalidator":[67768],"sourceassetpath":[19587],"multipliers":[62257],"fogexample":[44352],"acquired":[71465,72983],"suppresssystemoverlays":[74676],"itilemap":[51632,51725,51761,51786],"windowsstoreapps":[21060],"dt":[47101],"categorisation":[5056],"str":[25935,28270,52662,72153,72203,73506,74595],"subscriptionmanager":[67720],"#ffff00":[63654,63758],"wakeup":[38473],"projector":[12825,15117,38147,51068,72804,72826],"away":[253,362,2310,3958,4091,4494,5998,6293,7045,7796,7878,8204,8286,9019,9184,9220,9528,9776,9859,9884,10013,10272,10357,11625,13038,13180,13576,14609,15010,18617,21345,25465,26664,26916,27003,27567,32269,32460,32631,32906,36638,37365,38404,39533,39819,40099,42799,43113,43139,43177,43591,44166,44634,45784,47708,47963,48599,48875,49474,49496,49533,50379,52216,54210,54712,58190,59890,66003,66336,66521,71207,71266,75646],"shader_api_gles":[43938],"iot":[12692],"server's":[66637,68383],"sunset":[26928],"mainstream":[52099],"scaler":[8125,23212,24778,31216,39401,62747],"alt+tab":[34466],"alldevices":[76235],"“find":[39951],"film":[6951,8039,16542,22862,33546,34840,37428,38103,74202],"cacheserver":[25113],"unity_orthoparams":[47090],"focus":[2440,2616,3773,7184,9629,10424,11469,11487,12328,12473,18898,19999,20075,20605,21006,21054,21862,22036,22756,24018,30050,30658,34869,35714,36060,36715,39627,39813,39931,43131,43281,47180,51103,51340,52465,52746,55912,56523,56712,57827,57981,58164,58188,59648,59719,59749,60495,60610,61323,61490,61798,62211,62831,63269,63967,64303,65025,65343,65888,69957,71912,73270,73471,73701],"gamestats":[35418],"visualisation":[10526,21360,27336],"appdata":[1686,6514,8729,14173,23338,27785,31942,43304,43338,46846,47208],"wrist":[76296],"reprojection":[72929],"pointerup":[40032,40122],"iplayableoutput":[34158],"bottleneck":[11813,12349,25980,34279,34493,35717,48329,50669,73198,74162],"obstructs":[19936],"thicker":[36080],"npot":[25262],"weld's":[52155],"marshalas":[28270,40607,72160,72203,74595],"setupyoyo":[62526],"exampletagvalue":[44780],"mostly":[73,4451,6884,8068,13364,14278,14314,15856,20743,22180,25203,28051,28068,29021,30295,30377,37349,42358,42548,43729,44052,44296,45595,45613,45714,46090,50141,58399,61474,63689,73447],"etc2comp":[9112],"libs":[987,12007],"unity_can_compile_tessellation":[43976],"reveals":[3734,4857,13704,30377,51004,64636,66390,71898],"atan":[10452,21970],"preprocesser":[41897],"keepalpha":[31888,46772],"preloadasync":[2826],"m_button":[62766],"realized":[6129],"facade":[66470],"\\users\\my_username\\projects\\my_project\\packages":[70779],"b":[171,265,1885,2207,3909,3950,3998,4034,4123,4173,4768,6008,6073,6539,7004,7681,7830,9016,9461,9805,10418,10617,11359,11404,12162,12869,13376,13923,14223,17370,18005,18118,19448,20682,21401,21448,21606,21804,21977,23372,24226,25227,25800,26312,26374,26519,27474,29567,29894,32367,33596,34618,35175,35470,35616,36050,36235,36471,36897,37039,37997,39154,39326,40334,41425,41716,43216,44071,44109,44272,45291,48075,48243,48268,48548,49820,51279,52023,52766,53605,54383,57527,57843,58288,58669,61387,61449,62012,62496,63735,66380,66721,67148,68551,70271,70295,70306,70376,70758,71057,71127,71216,71302,71404,71520,71714,71887,71898,72304,72838,75133,76108,76353],"m_value":[36770,56644,60691],"straight":[1934,2260,6264,6285,9024,9301,9776,10204,13164,18234,20580,22542,26573,27090,27567,27705,33534,38660,44439,49642,51788,54210,58497,63722,65999,66336],"meshid":[5665,75745],"mycode":[69011,69263],"focuses":[2064,6910,25926,34238,50642,57981,59549,62740,66543,72916,74212],"indefinitely":[2181,8510,38492,67296],"runtimeexampletest":[18705,18843],"applicationview":[74676],"inject":[12664,28062],"unittestassembly":[40368],"vcs":[3865,31277],"uiviewcontrollers":[66848],"easing":[39239,62836],"_tintcolor":[10147,32937],"consequently":[2120,6811,10572,29721,30164,33552,44231,50670,67296],"packagecollection":[69544],"combat":[10937,22663],"kernels":[8411],"symbols":[559,932,1705,1755,3032,6368,6397,6473,7374,12401,12803,19016,19238,22619,25031,26072,28166,29707,33774,34424,34522,34623,39617,40192,44306,45037,52570,58453,68900,69138,71719,72062,72082,73168,73715,73949,74513,74629,74789],"ol_minus":[63463],"lightweight":[5260,7505,13239,18681,20240,23241,35141,55511,65902,68528,68571],"kunityxrrendertextureiddontcare":[75426],"planar":[2958,37854,47610],"deprecating":[4066,4403,69334,69440],"smoothdampangle":[10473],"requests":[1107,1373,1495,4445,4701,7494,12903,17342,21088,22987,33382,34210,35949,36650,41273,45648,50002,50056,50156,51748,53746,61496,66659,67896,68252,68458,69523,69861,69896,70944,73285,73669,73899,74389,74951,75479],"desiredcharacteristics":[76152],"pageant":[70094,70178],"“push”":[38468],"resort":[1896,21134,22128,70400,70872,71543],"asterisk":[39620,40817,41400,41715,54419,58704,61967,63732],"pi":[10454,20692,25560,27447,60778,62314],"appdata_particles":[33007],"pathtomyvp9file":[72652],"lrequest":[69584],"waitforjobgroupid":[26357,35738],"panel’s":[179],"adadad":[40748],"valued":[6062,33306],"rigidbody's":[13256,38504,71608],"xrsubsystem":[76040],"noticed":[37716],"max_price":[40788],"creator":[9,6797,21253,37544,48602,48900,52184,52222,56533,56811,58271,58300,58433,58434,58682,61204,61600,62350,62507,65790,71378,71462],"reasons":[617,1178,5038,6035,6059,8086,8260,9223,11964,12110,13427,13477,14582,14795,15844,18611,20288,21000,21526,21988,25095,26145,27034,27167,27507,29733,30361,30876,33866,34578,35760,36454,37397,37692,41811,42023,45075,45740,45846,47026,47659,48333,50026,52548,54174,54264,58727,64756,67272,69757,69793,70313,70773,70902,71795,73091,74905],"hud":[11156,14234,42896,50783,54139,62827,66100,66195,66228,66326,66344,66369],"applereceipt":[67830],"orthogonal":[5040,8247,8505],"b's":[67155,71888],"badges":[34892],"extensions":[1302,1672,1832,3814,4025,4502,4778,5156,9109,10764,12797,14786,17880,21087,22559,24469,28050,28064,28386,30310,34205,34541,34735,35090,40453,41373,43477,44371,45479,45599,48067,65896,65963,66998,67301,67355,67559,67581,67630,67705,72698,72713,74400,75872],"'#pragma":[45472],"wqeawibhjapbgnvhrmbaf8ebtadaqh":[69937],"spoon":[20927],"tessfixed":[46892],"rearright":[74426],"skadnetwork":[16075],"divide":[5006,9274,14264,24985,29189,47642,49421,54051,61931],"directories":[475,1735,12797,24631,35038,53997,74581],"basefile":[48112],"geforce":[30288,36608,38349,52474],"kotlin":[556,790,1070,1399,1401,1822,1830,34650],"getbutton":[50336,76315],"vector2":[2338,21241,24009,25778,36892,37079,39785,39866,48447,55535,56117,56497,56577,56907,57521,58507,59174,60240,60721,60969,62298,62376,62729,64960,65567,68154,71969,72291],"oncollisionsay":[33728],"#676767":[63270],"originate":[5161,35690,38505,57828,59541],"sanity":[29771],"getgenericdata":[57588],"navmeshdata":[15201],"machheader":[66857],"reclaimed":[33428],"inlined":[6198,24923,25849,54391,54475,54634],"adhere":[26258,26967,44702,49778,71013],"visualelment":[64428],"console's":[67765],"recompilation":[34986,38797],"sort":[115,2598,3994,4041,5466,5611,5826,6041,6344,6507,9440,13486,13590,13765,14536,17356,21461,24523,25076,29784,32267,33249,34993,35963,37365,37639,39064,39695,40843,41195,41541,48023,48873,48898,49130,51166,51202,51253,51363,53340,61307,61488,61526,62747,68913,69154,71216,71357,71459,71504,71522,75024],"testables":[18885,70879],"onkeydownevent":[61799],"swizzle":[9542,51093],"appointment":[12665],"fixationpoint":[75579],"remoteassetcache":[66680],"sse2":[50168],"getunitytargetname":[49795],"mpeg":[4779,6715,10733,14819,72628],"dispatching":[57808,57862,60540,60610,62822],"heart":[11066,29790],"emails":[4354,53743,67949],"generated":[494,509,935,1302,3262,3318,3344,3496,3729,3837,4634,4961,5019,5322,6025,6110,6798,7767,9033,9258,9400,10124,10872,11244,11274,11467,11883,12157,12630,12731,13075,13151,13208,13360,13914,14517,17045,17485,17503,18125,18315,18977,20402,21156,22144,22203,22626,24625,24966,25068,25107,25229,25903,26030,26046,26451,26849,26995,27087,27171,28265,28464,28698,28736,28895,30260,30274,30875,31477,32233,32413,32723,33287,34735,36352,36450,36754,37723,38557,38587,38719,40570,41374,43040,44345,44397,46766,46825,47662,48225,48376,48614,48649,48677,49390,49450,49506,49737,49755,50375,50435,50656,50877,51018,51141,51237,51371,51721,51808,51827,52124,52204,52651,52784,52887,53381,53746,54012,57329,58316,58722,58803,59529,65287,66818,67692,67773,67888,68410,68697,68857,69066,69306,69412,69995,71813,71874,72010,72103,72440,72869,73188,73302,73388,73980,74194,74590,74776,74839,75740],"artifactkey":[66680],"discord":[67897],"uninstallcustomsignalhandlers":[1064],"color_green":[42119,43050],"comparisonoperation":[45863],"uploadfile":[52791,53105],"cuda":[8402],"account’s":[53760],"nullchecks":[24992],"accompanying":[3523,4525,5898,10003,10759,14786,24930,26077,61516,68720],"ellipsoid":[2349],"iap’s":[52940,53954,67142],"isintroductorypriceperiod":[67736],"date":[1736,3595,3826,3994,4087,8883,11075,12609,13115,17092,26712,27015,27170,30280,30439,49914,50197,52042,52110,52481,52491,53444,67729,71127,71216,71310,71462,71522,72364,72400,73221],"primitives":[84,9425,10564,37098,43174,48615,52192],"iunityrenderingextensions":[28053],"alterations":[52177],"unityxrinternalinputdeviceid":[75502],"confirmed":[1158,67601],"repels":[12709],"focusing":[49430],"showmyeditor":[59036],"indow":[25543],"pointerwheelchanged":[74733],"“metallic”":[49636],"parallaxoffset":[43881],"tell":[3681,5160,7127,9659,10744,11075,14264,18585,20981,22070,26374,26581,26975,30096,32864,34897,35582,35606,36689,40486,41783,42312,43106,43690,43961,44999,45389,45618,45851,46011,49028,49201,49282,49553,50697,51018,53077,53877,54690,58854,66165,66357,68601,75434],"shadows":[67,5330,5674,5725,5863,6816,7895,8068,9454,9876,9955,10009,10272,12828,12929,13141,14609,18239,20420,22657,23302,23639,26784,26798,26860,26934,27175,27187,27214,27266,27293,27304,27495,27754,29528,30354,31886,32115,32293,32739,33022,34876,36179,36397,37421,37589,37652,37807,38301,38337,38345,38396,38420,38435,42365,43110,43125,43130,43147,43172,43204,43543,44097,44580,44811,44936,45192,45852,45970,46779,47377,47971,48230,48295,49451,50437,52482,58392,66006,69243,72800],"anchoredjoint2d":[13187,15192],"animationclipplayable":[33909,34157],"demonstrates":[362,1917,2669,3853,6235,7033,13768,14887,18674,18795,20010,20459,20787,23291,25769,26129,27576,29187,29934,30574,33243,33909,34743,36824,36977,39357,41993,42067,43675,43791,43860,44123,44155,44188,44218,44330,44351,44389,44640,44775,44840,45107,45405,45421,45917,45947,47965,48003,48036,48993,49290,49916,54506,54909,54961,55061,55160,55231,55307,55367,55670,55732,55995,56210,56271,56325,56390,56521,56590,56734,56797,56980,57122,57335,58002,58652,59269,59904,60672,60837,60879,60979,61194,61594,61747,62336,62493,62635,62641,65214,65773,67390,69517,70598,72647,72984,74800,74868,76185],"#7b68ee":[63599],"modelled":[1935,22490,49518],"formats":[78,147,346,430,553,590,1556,2188,3289,3466,3500,3580,4506,4551,4726,4765,4774,4909,5158,5952,6360,6419,6693,6951,7469,9142,9247,10780,13945,14233,14303,16338,16353,16651,17185,18398,21042,21777,22578,24636,25153,25255,25841,27145,28180,29331,30369,31298,31401,31763,33526,33813,35039,35953,37192,37551,37670,38425,40452,48164,48601,48765,50095,50658,50712,50743,50770,50783,50796,50809,50822,50835,50860,50930,52096,65849,65966,68384,68923,69166,71799,72615,73122,73643,74042,74202,74643,75424],"assettypeid":[4671],"onstarthost":[66286],"games":[47,64,2067,3491,4545,5064,5265,5820,5974,6844,6857,7619,8080,10443,11040,11134,12319,12645,15859,16091,16542,16984,17062,17118,17398,17412,17474,17488,17744,18413,18503,19274,21156,21624,22292,23606,24051,24598,24768,25597,26044,27536,29827,30377,33098,33404,34256,34337,34463,35966,36511,37274,37302,37314,37345,37474,37483,37527,37639,37683,39277,39977,40539,43484,43618,48875,50321,50936,51155,51245,51976,52099,52821,52871,52921,52957,53084,53259,53687,53775,54002,54795,57122,63068,65896,65963,66180,66225,66337,66367,66383,66403,66811,66836,66872,66891,66901,67643,67977,68043,68072,68458,70236,72289,72786,72891,72941,73263,74121,74212,74506,75280],"concentrate":[10406,18509],"ships":[39108,68657],"tier2":[23551],"treemodel":[52349],"redirectlimit":[68257],"novertexlights":[46787],"caps":[10263,14558,14600,20565,22713,35256,58497],"post":[1702,1900,3766,3781,4301,7128,7778,7920,8094,10009,11764,12881,14238,14754,16981,20457,21358,21424,22740,23594,23629,24492,24662,26946,27538,27745,31447,34839,35718,36181,36597,37424,38032,38244,38297,38427,38841,43000,43370,44051,44864,49720,50796,52101,52787,53101,66026,66439,67896,68372,68440,68458,72774,72824,73321,73639,73675,73690,74268,74547,75164],"raytracingaccelerationstructure":[74255],"inspectassets":[3744],"duplicate":[1611,3315,4392,4976,5107,9800,9919,10065,10430,18979,21525,24555,36721,38784,39965,40916,41863,42751,44524,48651,54551,54659,55901,67159,71859,74425],"roundtoint":[13065],"unitylightingcommon":[47108,47682],"swizzles":[32933],"unity_branch":[43961],"stutter":[4867,33502],"other's":[2098,13159,22307,26590],"kformata2b10g10r10_unormpack32":[50123],"processingcloth":[35747],"optimize":[582,878,914,1324,1761,2764,3296,3311,4206,4537,5879,5963,6059,7491,7664,10438,10651,11589,11734,12419,13412,17045,17152,18408,18516,18662,20341,20403,21515,21588,21634,22697,23455,25206,26510,27059,27815,29148,29446,29479,29570,29759,30322,30357,32861,33088,35714,35962,36463,36815,37669,37704,39853,45565,48579,48905,49354,64890,65963,71558,72344,73405,75445],"keepparent":[28300],"runtimecontrollersample":[33984],"simpleplayer":[2017],"aw":[41309],"cultural":[5989],"vector2s":[71969],"repeated":[5984,6094,18292,32360,33133,44456,49473,51961],"onstateexit":[21336],"followed":[409,3253,4902,5117,8421,12809,20256,21359,32065,33496,35390,39357,41849,45284,45457,45531,46805,47309,53602,55806,63729,73395,75017],"m_widthscale":[20475],"compilepass":[4649],"synchronised":[37715],"wheelcollider":[14962,15138,16811,74449],"#2e8b57":[63633],"regularity":[32360,32702],"tomato":[63647],"getfloatparametercallback":[4981],"networkmatch":[66394],"emitter’s":[31852,32411],"construct":[1429,8566,9017,9184,9320,9751,13179,13579,13695,13879,15012,18617,21202,26216,29608,35250,36798,44094,51820,52242,55582,58557,62278,62972,63137,70297,71255],"#3a79bb":[63317],"unity_tvos":[2798,33803],"lppvs":[6798],"creators":[46,5859,16151,75310],"developerpayload":[67288],"exponential":[9505,22767,37824],"runtimeexample":[18698,18836],"comparetag":[2031,9345],"request":[217,368,511,879,886,1267,1372,1486,2825,3379,3556,4016,4390,4485,4994,6143,8385,8882,10833,16767,16775,16783,16791,16799,18620,22377,25672,25729,26700,28192,28669,28713,28755,28760,30077,30312,30941,33419,33502,36784,45250,48554,50002,50060,50148,51065,53746,54033,66135,66379,66635,67372,67558,67568,68324,68434,68478,68923,69166,69519,69746,70011,70316,70630,70936,71378,71441,73026,73093,73234,73285,73670,74389,74928,75595,75857],"relax":[60652],"spectral":[29552],"years":[1169,6846,74408],"categorize":[58096],"unityaudioeffectstate":[4924,5189],"unity_ios":[7380,19995,33800,34698,67778],"colormask":[10151,21728,32943,42383,42673,44095,45595],"really":[2173,4997,5056,14969,24276,45302,45577,45726,47420,49524,52181,52586,62026,72323],"cascading":[24054,64373,65913],"nuisance":[9386],"internetreachability":[1262,1387,20087],"numenter":[32796],"contentnamesuffix":[57224],"type":[71,124,177,257,281,909,1351,1393,1415,1732,1822,1832,1899,1919,1953,2060,2238,2256,2360,2509,2522,2771,2894,2972,3396,3464,3520,3585,3729,3814,3855,4296,4455,4505,4673,4863,5378,5522,5764,5994,6068,6109,6263,6283,6396,6793,6968,6992,7016,7219,7481,7771,7930,8032,8311,8379,8426,8615,8765,8786,8979,9058,9163,9348,9481,9553,9788,9869,10384,10496,10722,10776,10826,11101,11189,11227,11245,11310,11416,11616,11738,12044,12475,12775,12874,13127,13185,13193,13251,13347,13405,13680,13704,13855,13858,14222,14517,14719,14841,14989,18054,18137,18195,18277,18350,18375,18441,18536,18736,18848,19254,19454,20196,20263,20392,20540,20660,20831,20938,21009,21017,21485,21566,21715,22066,22271,22300,23260,23452,23491,23811,24060,24669,24726,24745,24944,25095,25170,25215,25432,25582,25696,25763,26150,26242,26275,26448,26494,26593,26646,26870,26912,26953,27525,27589,27770,27984,28097,28495,28828,28897,29032,29098,29154,29337,29466,29741,29761,29916,30173,30186,30332,30520,30894,31652,32065,32455,32651,32755,33134,33425,33449,33581,33744,33777,34161,34229,34318,34372,34580,34770,34930,35087,35275,35387,35414,35646,35807,35988,36234,36460,36550,36600,36660,36696,36737,36751,36798,36864,37051,37227,37395,37587,37668,37722,37799,38287,38531,38540,38573,38623,38647,38750,38820,38896,39066,39086,39108,39169,39526,39534,39612,39754,39771,39862,39992,40005,40081,40208,40486,40531,40561,40711,40812,40911,41200,41320,41348,41388,41427,41447,41467,41504,41608,41677,41813,41883,41988,42010,42028,42123,42320,42751,42967,43161,43202,43244,43376,43484,43903,43975,44066,44208,44233,44315,44376,44508,44978,45065,45121,45184,45249,45498,45576,45701,47070,47299,48073,48358,48364,48502,48698,48861,48893,49219,49404,49515,49567,49642,49726,50030,50466,50585,50712,50743,50756,50770,50783,50796,50809,50822,50835,50860,50941,51088,51124,51133,51160,51175,51181,51232,51359,51511,51597,51746,51827,51877,52124,52186,52204,52558,52761,52785,53077,53097,53339,53773,53809,54039,54436,54545,54579,54679,54815,54909,54959,55495,55621,55655,55726,55857,56110,56592,56671,57319,57632,57811,57907,58008,58077,58825,59505,59808,59824,60157,60775,61461,61568,61929,62201,62774,62972,63064,63142,63729,63814,63918,63988,64025,64234,64310,64363,64731,64766,65001,65049,65356,65519,65704,65984,66357,66383,66483,66875,66939,66965,67033,67087,67165,67248,67558,67568,67837,67876,67920,68263,68382,68439,68640,69011,69244,69696,70048,70085,70159,70174,70340,70354,70757,70811,70873,70980,71010,71133,71311,71347,71630,71652,71685,71805,71900,71925,71969,72016,72087,72229,72275,72510,72706,73080,73317,73449,73471,73654,73730,73927,74214,74286,74753,74773,74828,75112,75191,75309,75424,75474,76097,76516],"preliminary":[18666,31365,74345],"incrementing":[71016],"waitforfixedupdate":[15706,21368],"frame's":[2170,75444],"chromatic":[34865,38092],"espectially":[74535],"dbgbreak":[74545],"bg":[53611],"providade":[24845],"splatmap":[13913,50487],"official":[4356,5156,11412,18671,18712,18745,18905,25491,31010,31379,50170,52481,53582,69729,71132,72639],"datathe":[53745],"downs":[20675],"inadvertent":[5962],"name":[11,229,395,409,424,474,517,816,994,1166,1190,1243,1271,1285,1429,1706,1888,1915,2037,2277,2381,2411,2418,2493,2561,2643,2777,3039,3255,3422,3520,3735,3801,3888,3919,3954,3983,4034,4081,4160,4173,4198,4219,4261,4409,4452,4489,4673,4808,4970,5029,5092,5258,5283,5337,5694,6063,6355,6490,7065,7362,7429,7838,8263,8430,8950,9129,9261,9338,9608,9625,9761,9777,10531,10609,10695,10723,10879,11308,11381,11412,11462,11588,11673,11841,12227,12399,12449,12809,12866,13323,13846,14031,14719,14788,14875,15817,15851,18091,18131,18217,18327,18363,18449,18464,18626,18728,18736,18745,18794,18850,18902,18918,19021,19039,19204,19371,19532,19673,20106,20256,20753,20768,20931,21002,21032,21250,21401,21461,21605,21661,21692,21710,21977,22090,22353,23260,23835,24020,24060,24569,25070,25107,25140,25225,25382,25490,25514,25797,25935,26150,26258,26565,26581,26597,26718,27685,27801,27833,27923,27953,28052,28194,28266,28297,28328,28420,28629,28869,28886,28997,29036,29104,29284,29502,29907,30008,30053,30109,30211,30390,30453,30530,31640,31765,32142,32304,33299,33496,33664,33906,34664,34693,34858,34891,35032,35200,35282,35380,35411,35476,35554,35643,35776,35806,36068,36712,36905,36998,37272,38718,38820,38953,38998,39041,39133,39192,39352,40005,40203,40444,40601,40623,40681,40711,40775,40813,41200,41369,41466,41511,41550,41634,41678,41715,41765,41827,42053,42142,42314,42356,42629,43071,43469,43568,43657,43686,43731,43803,43977,44099,44136,44168,44201,44322,44340,44379,44424,44523,44589,44629,44673,44761,44792,45002,45057,45121,45186,45244,45263,45392,45525,45599,45854,45934,45964,46140,46507,46531,46714,46821,47072,47157,47236,47954,47987,48025,48170,48252,48342,48422,48515,48607,48620,48685,49259,49822,50048,50288,50388,50534,50607,51076,51264,51353,51589,51617,51874,52076,52357,52873,52981,53172,53303,53717,53779,54302,54419,54524,54545,54579,54667,54679,54815,55089,55159,55234,55331,55369,55570,55767,55869,56055,56212,56273,56327,56393,56705,56808,57014,57149,57300,57303,57471,57620,58059,58142,58281,58712,58823,59036,59271,59695,59748,59930,60394,60562,60807,60904,61004,61334,61449,61619,61911,61937,61972,62035,62075,62387,62530,62774,62846,63142,63233,63660,63701,63722,63821,63860,63922,63933,63994,64025,64205,64339,64438,64639,64978,64991,65001,65837,65885,66253,66381,66609,66817,66858,67178,67242,67305,67413,67572,67605,67866,67917,68547,68611,69010,69262,69518,69670,69893,70077,70143,70200,70266,70290,70332,70531,70598,70801,70875,70945,71054,71126,71207,71216,71264,71320,71363,71404,71441,71447,71459,71481,71520,71610,71686,71782,71943,72015,72178,72201,72231,72364,72501,72803,72809,72816,72837,72866,72882,73082,73109,73181,73573,73677,73844,73922,74360,74420,74535,74592,74652,74899,75009,75042,75223,75277,75359,75515,75876,75915,75980,76074,76096],"iridescence":[37989],"quaternion's":[8582],"npmauth":[70011],"overheadcamera":[29867],"outer":[3696,7756,11483,30042,32390,34911,59965,61023,64281,66002,71889,71970,75463],"feature":[4,45,665,698,1099,1332,1378,1487,1542,1908,1981,2067,2768,2936,2972,3239,3668,4569,5694,6780,6804,6864,6938,6946,7983,8787,9086,9485,9994,10110,11813,12349,12823,12898,13540,13634,13740,13912,13964,14031,14828,15840,15967,16020,16470,17000,17092,17627,17986,18243,18674,18934,19292,19646,19967,20385,20407,20441,20556,21623,21868,21958,21975,21996,22022,22061,22109,22435,23248,23385,23427,23543,24456,24492,25038,25265,25310,25675,25831,26934,27060,27075,27087,27189,27217,27270,27333,27527,27678,27765,27981,28059,28072,28399,28790,28842,29152,29416,29459,29477,29569,29908,30000,30366,30917,31110,31592,31609,31627,31657,31818,31925,33898,34230,34279,34379,34499,35228,36574,37637,37683,37745,38263,38641,39137,39260,39451,39932,40168,41827,41939,42127,42314,42384,42600,42694,42718,42734,42759,43071,43169,43501,43510,43559,43568,43657,43686,43731,43803,43942,44058,44099,44136,44168,44201,44322,44340,44379,44424,44562,44593,44629,44673,44761,44792,44903,45057,45186,45259,45263,45392,45435,45478,45521,45744,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,49313,49447,49651,49673,49999,50011,50133,50140,50430,50558,50610,50657,50708,51052,52759,52860,52972,53290,53850,54107,54727,56797,58734,66197,66343,66368,66395,66401,66500,66598,66810,66835,66867,66886,67143,67382,68041,68495,68664,69029,69282,69301,69377,69407,70233,70769,70940,71129,71183,71190,71211,71278,71297,71300,71344,71417,71446,71459,71490,71511,71517,72486,72613,72663,72719,72739,72803,72809,72816,72890,72898,72957,73115,73375,73907,74151,74267,74581,74906,75099,75137,75162,75215,75252,75291,75388,75486,76102],"aps":[18732,66770],"reverbs":[7734],"onerror":[74006],"phones":[629,678,719,4956,11718,25031],"projections":[6758,44133,47644,75466],"200ms":[63018],"reflected":[253,1842,5160,24728,26878,27065,34883,34925,37684,42467,47422,49611,51329,52225,56625,62586,68385,68441,71872],"macappstore":[67205,67306,67414],"authorize":[4371,67932,70500,73670],"semantics":[316,23619,27996,44876,45660,47309,47935,70806],"smartphone":[53286],"patchpackage":[450,68902,69140],"trailing":[13182,32065,61966],"shortcut":[610,2533,2616,10076,18462,20616,20723,21986,23696,24576,25367,25912,35898,36462,36716,38399,39078,39183,39269,40323,41420,41599,43209,44581,50641,51190,51275,51374,51582,54452,57906,66951,71347],"assemblylister":[40377],"arsubsystems":[74381],"createinstance":[40565,49973,51457,51607,51702,51815,56550,57532],"“scene":[17986],"held":[2967,13696,21175,22303,25031,25871,27690,29267,29630,35631,59745,60790,65135,65999,68872,69107,75088,75109,75221,75393],"handdata":[76294],"palm":[48312,75576],"maker":[66342,66366,72882,75002],"greybox":[31124],"resamples":[1900,2052],"m_status":[58041],"megabytes":[1655,5921,12404,12948,27737,33092,35650,73938],"ctrl+\\":[23696],"gl_khr_blend_equation_advanced":[43850],"extract":[7,417,1224,1280,2192,3325,6121,9139,13629,21386,25197,29550,29766,32813,36661,36804,36883,37259,38742,46792,48252,48335,48501,49541,50873,54297,54632,54848,66978,67824,68284,68640],"#ffe4e1":[63605],"networkstartposition":[11232,66086],"setstreamingtexturematerialdebugproperties":[50981],"precomputed":[9982,22107,22127,22874,26805,26812,27031,27157,27167,27209,37644,38027,71813],"ron":[53664],"perhaps":[2243,6046,7836,7927,26784,31838,49425,49524,49832],"friendly":[298,3241,3512,12597,13037,17126,21629,42811,56808,58728,64364,68527,70803,74907],"checking":[3344,11189,11636,12491,21092,26084,26615,28880,30076,32476,33865,35344,44702,67346,68248,70728,72427,76194],"localappdata":[27789,69699],"durations":[62836],"mycustomplayablebehaviour":[34176],"monoscript":[15113,56498],"java":[462,493,556,741,790,987,1038,1234,1396,1401,1598,1812,1820,1830,6705,12007,16603,18358,23480,33377,34645,66820,66901],"ever":[3476,4567,11954,18575,19257,20155,20337,23584,25404,29906,33098,34439,38469,39797,40585,58133,66224,70349,71915],"scriptablerendercontext":[40158,44822,46048,48936,48998,49281,68594],"yellow":[2441,8184,10076,10233,13148,14680,22155,22193,27819,28885,30132,30260,33407,34781,49878,53454,54549,54656,56787,57050,60837,63180,63654,63671,63846,63863,63884,63928,63977,64017,64333,64573,65043,65321,71583,71811,72752,75017],"wise":[37724,74496],"driveposition":[7303],"recipient":[28990,29053],"potionresult":[20935],"numpad":[9808],"spriteid":[48423],"righthanded":[76164],"gettemporary":[68942,69186],"setikposition":[25627],"solo":[2200,4838,5027,5119,13815],"joynum":[9790],"visualizations":[6853,6932,9997,33637,35608,36684,39128,50982,51059],"ipreprocessshaders":[42998],"frustrating":[30112],"labelfromuxml":[56829,61681,62715],"parallax":[75,38015,42278,42290,42295,42375,42492,42508,42513,42566,42575,42580,42863,42868,42915,43881,45561,46807,49495,49601],"latitude":[8618,13215,13390,14255,42738,53733,72489],"playersettingsandroid":[12036],"\\nscalefactor":[20508],"lack":[6834,27209,28718,73900,76308],"torque":[7211,7296,8240,8515,8594,8599,9009,9150,9173,9302,9707,9723,12713,13165,13234,13569,13661,13681,13866,14994,23061,26573,33672,38461,74334,74435],"slicesize":[61093],"m_innerradius":[27350],"mips":[13219,14257,50683,50703,50978,51010,74257],"technical":[4134,4313,5729,5820,10083,10693,13018,17118,23417,26073,27126,27466,29549,38343,40676,52758,53770,54120,54265,56040,65687,73597,73894],"atlasing":[20393,32705,59534],"7mb":[29249],"labelslider":[24174],"clickevent":[55018,55137,55805,57237,57719,58642,59572,61732,61796,62401,62766],"missing":[3431,3450,4866,6094,9386,12044,14797,18112,19230,20181,22439,24799,24923,25849,28789,29007,29063,29769,33382,34416,34615,34673,35933,38847,41899,41949,43133,48163,48318,52610,52801,53041,53451,58111,61184,61907,62068,62867,65770,65968,68788,69244,70356,70817,71053,71541,72929,75984,76335],"layer_name_2":[50049],"sweeping":[18224],"unmanageable":[5016],"decrement":[3695,45901],"overexpose":[24519],"pressedbutton":[60381,60794],"unity_use_dither_mask_for_alphablended_shadows":[9454],"hpslider":[57096],"potions":[67168],"lightning":[7562,32114],"complex":[1772,1950,1982,2197,2201,2334,4558,4569,4797,4819,4869,5019,5156,5291,5497,6037,6213,6807,6892,6949,7878,8786,9231,10080,10204,11320,13616,17591,17661,17984,18239,18454,19559,20452,20701,20811,22828,24580,24670,25180,25521,26264,26703,27015,27175,27309,28916,28971,29095,29128,29765,30047,30365,32180,32651,33243,33612,33757,34723,34926,36511,37281,38376,39159,39308,41160,41335,41462,41914,42101,42946,43174,43320,44080,44234,44758,45104,45213,45581,46717,47454,48984,49495,49565,49659,50630,50648,54174,54388,54814,56722,56979,57796,58398,59090,59601,59842,63142,63681,63846,64026,64329,64774,64909,68511,71408,73953,74173,75114],"milliseconds":[4574,6196,7579,7688,12947,21896,25075,25994,26040,27741,33403,34997,35658,35727,36094,36195,50058,62534,62610,63040,72935],"getapps":[53839],"b470eee7144904e59a1064b70fa1b086":[3094],"decay":[4867,7539,7552,7718,7739,13239],"tilemaprenderer":[14552,15310],"registerextension":[67569],"fourth":[21816,28894,41668,52229,52694,55887,61455],"extracts":[7909,21439,25182,29499,38980,41083,41173,50067,68176,69750,75739],"astc_rgba_12x12":[48740],"standardised":[48163],"maxplayersperconnection":[11124],"lowerresblittexture":[15345],"features":[46,245,386,580,652,661,703,879,880,944,1024,1218,1243,1370,1572,1668,1984,2183,2236,2764,2941,2989,3591,3721,4357,4511,4550,4722,4843,5265,5350,5856,5973,6790,6798,6858,7064,7879,7981,8068,8493,9463,9986,10817,11134,11886,13370,14471,14887,15700,16020,16595,16919,17000,17045,17092,17240,17384,17474,17506,17539,17642,17773,17788,17803,17936,17980,18233,18241,18357,18404,18526,18819,18906,19663,19935,19974,20538,20605,21002,21141,21382,21592,21636,21974,21997,22023,22375,23558,23590,24646,25053,25672,25692,25729,25855,26081,26812,27075,27917,27980,28378,28781,29391,29453,29581,29832,30005,30056,30282,30426,30489,30500,30916,31587,31610,32590,32705,34638,34645,35011,37227,37433,37565,37730,37749,38263,38305,38425,38437,39888,40039,40526,40671,40682,41674,41830,42430,42781,42809,42989,44561,44906,45009,45419,45445,46816,49446,50537,50549,50573,50620,50647,52349,52754,53777,54067,54106,54496,54711,59904,63107,65896,65955,65965,66190,66214,66435,66502,66543,66608,66803,66811,66836,66868,66887,66901,66917,67032,67261,67669,67745,67960,67982,68050,68458,68494,68893,69131,69747,69901,70514,70756,70962,71016,71194,71548,71664,71751,72492,72610,72948,73029,73092,73260,73693,73897,74130,74222,74408,74549,74778,74916,75114,75140,75159,75215,75224,75280,75291,75390,75485,76095],"rununitypackagemanagerdiagnostics":[70925],"shadows_high":[42976],"potioningredients":[20936],"playabledirector":[15228,16643],"noticeably":[37685,52590,71872],"editortoolbardropdowntoggle":[30524,55487],"cachedspriteatlas":[15180],"forcesupported":[8721],"setupdepthsfromparentsandchildren":[52262],"autoreferenced":[3027,18647],"lowvalue":[57096,65152,65226,65250],"test1":[66723],"individual’s":[53760],"selector1":[54834,63845,63880,63895,64331],"onpurchasesucceeded":[67289,67537],"liable":[50344],"basedamagefield":[56168],"particular":[422,505,581,1181,1393,1495,1561,1888,2050,2190,2459,2764,3325,3682,3767,4091,4227,4863,5266,6844,7251,8072,8574,8982,9333,9589,9659,9743,11078,11519,12621,13155,13181,13734,13854,13894,14681,15857,18360,18500,18568,20242,20735,21104,21154,21832,21956,22277,22744,23525,23611,25032,25529,25624,25980,26126,26361,26438,27648,28304,28585,28877,30050,30175,30337,32458,32686,32755,32909,33267,33456,33491,33604,33612,34379,34883,34924,35692,35822,36040,36193,37369,39921,41689,42101,42691,42726,42748,42779,43203,43222,43374,43521,44080,44562,45181,45725,48163,49363,49541,49642,49650,49738,50946,51560,52040,53756,63107,64752,66173,66363,68611,68957,69204,70290,71562,71612,72053,72755,73208,73324,75368,75440,75745,76204],"kformatr8g8_srgb":[50108],"view’s":[18899,28878],"onpurchasefailed":[67276,67289,67332,67339,67398,67537],"confine":[36705],"subscriber":[67677],"mycallbackwithdata":[57894],"sample's":[18796],"_density":[47584],"linearly":[7173,12717,20727,21842,26886,29212,32742,61547,64325],"dolore":[65174],"player's":[1880,2088,8065,10357,10811,22466,38405,61367,66085,72313,73263],"purchase":[67602],"halving":[51138],"colorformat":[75424],"sfx":[7711],"shifting":[9138,30148],"ja":[53633],"bindscenetransform":[68584],"proportionally":[7790,24782,32252,32609,39579,40133,43654],"unity_obb_guid":[415,68901,69139],"targetguid":[49797],"history":[12670,19077,20619,24669,30438,36546,41613,52089,53456,53857,66012,71136,71236,71493,71897,74305],"thirdly":[32056],"clearrequestedmipmaplevel":[50974],"meshcolliders":[11608,33700],"alignment":[5634,9640,10264,13987,14601,24728,24760,27854,32249,34899,39382,39546,39585,40053,40139,41550,48448,59838,62009,64160,64825,65982],"inputdevicecharacteristic":[76156],"figurative":[4070],"pointermoveevent":[56920,57573,60263,60770],"genuinecheckavailable":[25861],"#rrggbbaa":[6079,49850],"management":[211,867,1809,1990,2984,3432,4558,6844,11222,14562,16060,17220,17237,17326,17412,17506,17862,17912,18038,18515,18905,19129,22617,26688,26701,27638,27913,28757,31038,31410,31594,33075,33087,33421,33447,35727,35881,36093,40538,41871,43462,50000,51963,52496,52739,53787,54148,63064,64382,66215,68750,69027,69280,69731,70295,70756,72416,72476,72943,73022,73631,74171,74320,74981,75037,75114,75125,75211,75287,75295,75388,75804,75969],"assemblydefinitionasset":[15335],"pores":[49476],"m_trackmesh":[61019],"forces":[5769,5938,7198,7302,7973,8003,8177,8204,8274,8302,8392,8546,8586,8598,8777,9042,9163,9321,9953,11473,11520,11575,11610,12698,12736,13128,13234,13267,13552,13829,14512,14951,15039,15859,16091,21075,21144,22301,23288,25113,26547,26557,26571,26580,27184,27300,27711,28599,30143,31710,31801,31823,33631,33655,33756,33762,35293,36340,36454,37457,37596,38458,38483,38515,38541,38574,38611,38797,40107,45038,50996,62013,72299,72403,74333,74496],"colors":[325,2296,5152,5437,5581,6542,6703,8307,10261,10522,11562,11807,12942,14102,14319,14598,14664,17000,20602,20655,21392,21711,22142,22227,23743,24495,24520,24651,26863,26929,27538,27566,27983,28846,28877,29382,29510,29721,30627,31760,31920,32114,32291,32394,32742,32870,33715,34274,34484,34865,34969,36501,37016,37318,38372,39127,39825,40097,42256,42354,42793,43382,43690,44238,44389,44445,45129,45298,45574,45718,47113,47240,47912,49468,49630,49850,50381,51150,52386,55856,56736,60710,60950,61056,61834,63251,63505,64213,64468,65768,72753,74194,74324],"selectabletransition":[39850],"profilermodule’s":[35429],"tile’s":[50348,51173,51710,51753,51806,51874],"rt3":[38362],"playback":[1567,1903,1914,2063,2183,2284,2372,2429,4776,4816,6944,7007,7496,7659,7786,7870,10730,12648,14761,14823,14848,18130,21837,25841,32849,33930,35911,36017,52010,68085,72474,72531,72730,73029,73445],"baking":[2360,5269,6041,6806,9099,9970,10072,13145,21007,22145,23434,26840,27089,27097,27118,27175,27187,27262,27747,28895,29311,29484,30195,30273,35126,36569,37696,37723,38665,42400,49450,49731,50514,68672,68707,69350,69454,71869],"trail":[10206,10614,13454,14566,20392,22935,25525,30050,32266,32712,35411,35618,38123,72818,74230],"defaultrenderpipelineasset":[49225],"simplelambert":[46559],"16mb":[12414,21114,29246,36565],"begintogglegroup":[20910,59603],"animationplayableutilities":[33930],"lod0":[30184],"hrk":[53678],"employee":[30385,69987],"frequent":[18516,27931,33297,37706,51993,60637],"dropdownmenu":[55983],"tortoisemerge":[35092],"boneweight1":[332],"examplebuild":[73181],"mouse":[680,718,1668,2254,2266,2332,2390,2611,6266,6725,7956,8139,8328,9627,9776,10243,10508,11903,12627,13880,14236,14680,17972,18503,19986,20460,20546,21173,21180,21359,22043,23169,23860,23890,24881,25347,27824,28951,29613,30646,31163,32849,33652,34770,36057,39241,39269,39351,39395,39977,40000,43237,49897,50743,51377,51427,51594,52235,52243,54459,54499,54712,55638,55805,55975,56713,57581,57825,57864,57984,58001,58129,59541,59734,60212,60356,60761,61749,62114,63112,63259,64177,64220,64333,65887,65922,71350,73091,73263,75213],"books":[18360,42796],"shadows_screen":[44577],"ushort":[10826,61116],"dictating":[24167],"n2":[18230,64325],"slot":[4852,5123,10724,11130,25546,35008,40270,47190,49447,49536,50027,52186,56799,66233,66933,72503],"codes":[214,9771,37670,52795,53606,69333,69439,70821],"subfolder":[3735,18757,18932,21029,21417,24632,34575,37273,38735,48178,69674,69706,70610,70837,73501,73919,75913],"mytools":[6330],"doublefield":[55034,55462,55497,59616,64510,64632,64932,65056,65362,69316,69422],"preloads":[9518],"onmouseover":[21173],"1gb+":[50197],"lengthwise":[8157],"wall":[253,2958,4861,7924,7955,8078,9712,18564,24912,25529,30174,30180,31716,37618,40740,42243,42548,49426,49477,49500,49542,52034,71873],"exact":[732,936,1619,1977,2178,2429,3254,4307,4966,6320,8208,10003,10345,13665,14123,14699,14728,15816,15831,17999,18139,22498,26564,29880,32702,33069,34042,35282,36110,36298,37684,38324,39650,40313,40713,40789,41471,42211,44694,45066,46057,48179,49363,49479,50592,50697,50972,52689,53041,53514,59628,68935,69179,70613,70984,71364,71681,72310,72524,73655],"heavy":[3500,6139,13239,13962,15864,21937,26050,29153,33094,33503,36334,47656,48227,48268,50005,51999,63887,68198,74283],"check":[156,263,292,511,581,1352,1497,1516,1599,2556,2750,2771,3262,3338,3498,3793,3990,4343,4375,4479,4590,4978,5299,6234,6977,7202,7868,8001,8070,9098,9345,9674,10070,10403,10543,10849,11188,11447,11588,11622,11810,12348,12586,12759,12821,13042,13135,13207,13280,13297,13363,13561,13705,14527,14726,18080,18190,18380,18593,19040,19096,19614,19622,20459,20674,21052,22226,24473,24783,24815,24933,25036,25100,25492,25685,25695,25741,25858,25892,25941,26096,26172,26249,26611,27498,27532,27608,27729,28115,28443,28639,28686,28724,28835,28880,29277,29368,29769,29843,30122,30265,30637,30869,31707,32072,32193,32477,32615,32635,32738,33610,33744,33777,34237,34277,34594,34698,34897,35008,35250,35694,35794,36335,39170,39677,40251,40731,41530,41560,41693,41872,41915,41943,42067,42949,43009,43028,43197,43955,44140,44294,44852,46418,48232,49192,49329,49554,49621,50431,50597,50652,50973,52332,52501,52640,52689,52939,53009,53127,53363,53697,53986,54435,54695,55807,56146,57329,57928,58721,58847,59596,60664,62108,64663,66052,66520,66597,67090,67272,67800,68041,68069,68383,68545,68614,68797,69004,69256,70068,70109,70135,70376,70728,71181,71258,71310,71534,71773,72090,72319,72363,72402,72501,72762,73307,73471,74180,74698,75017,75145,75424,75973,76195],"gameobjects’":[22253,39127],"profilermodule":[35435,35468,35571],"manifest":[509,573,580,786,944,982,1101,1189,1201,1229,1242,1355,1371,1495,1546,1812,3255,3415,6712,11401,11803,12333,12524,18715,18761,18885,18918,19318,22981,23524,24601,25329,30838,30917,31595,31620,53883,67012,68898,69136,69514,69723,70211,70235,70290,70332,70382,70586,70747,70771,70800,70866,70936,70976,71081,71121,71341,71378,71416,71543,72007,72845,73915,74395,75259,75361,75909,76092],"setupmoviefile":[72648],"addressing":[67041,67579],"planetsingroup":[59985],"cell":[9532,10135,11623,14263,14522,30255,39542,41554,48372,51090,51124,51137,51156,51169,51182,51235,51360,51594,51724,51830,51874,52414,60053],"curved":[7174,8170,32365,49526,52233],"appxmanifest":[12280,12457,74753],"editortoolcontext":[71643],"overlappingslots":[56941],"createandmountarchive":[2910],"hosts":[17240,17474,33883,66361,66569,71130,71372,73670,74776],"bullseye":[29070],"redesigned":[74179],"discardedvalue":[76246],"onrebuildobservers":[10847],"reporter":[22128],"strafe":[2028,6310],"unity_single_pass_stereo":[42170],"currenthp":[57015],"passwordfield":[29680,59681],"taps":[719,20043,29594,29680,37822,52766,53763,64444],"+64k":[14389],"showalpha":[64476],"ispritenamefileiddataprovider":[48432],"becauses":[24164],"supportedtrackingoriginmodes":[75597],"redistribution":[26510],"udpfilecontents":[53934],"result":[248,518,695,717,738,1000,1227,1904,2045,2170,3468,3668,3728,3812,4978,5160,6035,6146,6381,6945,6981,7378,8031,8355,8387,8488,8761,8859,8996,9061,9970,9998,10083,10230,10406,10560,11454,11534,11612,12903,13021,13120,13284,13836,14134,14257,14348,14713,18167,18615,19667,20343,20438,20679,21550,21687,21938,22071,22122,22596,23439,23584,24461,24751,24784,25096,25104,26044,26081,26313,26393,26455,26520,26635,26664,27011,27063,27080,27089,27119,27167,27508,27566,28108,28179,28278,28510,28836,29663,29922,30088,30243,30268,30359,30893,31719,32702,32767,32874,33093,33528,33583,34855,35322,35691,35812,36281,36511,36592,37261,37619,37665,38399,38844,39438,39575,40129,40616,40819,40837,41163,41337,41427,41554,41618,41795,41841,42148,43022,43115,43160,43177,43491,43654,44298,44384,45273,45448,46551,46783,47609,47952,48163,48227,48528,48542,48601,48676,49423,49536,49627,49713,49839,50317,50339,51236,52044,52099,52642,54016,54736,55651,57833,58397,58459,58560,60382,60795,61296,62886,63164,63921,65734,66877,67037,67149,67339,67356,67588,67631,67713,67730,67784,68102,68248,68296,68336,68363,68385,68440,68488,68536,68607,68916,69157,69307,69537,69861,70175,70211,71053,71416,71597,71856,72133,72201,72285,72296,73173,73548,73621,73811,74642,75867,76258],"lodcrossfade":[20289],"category":[17,134,3988,4249,4711,5019,7624,7657,8364,9055,9430,10148,10720,11176,11357,11596,12800,12865,13843,14554,17946,20211,20459,20624,22650,23613,23743,24929,25766,26614,27254,27550,27833,27983,30284,32940,34374,35141,35279,35409,35600,35691,35812,36024,36175,36201,36298,36429,37620,38377,39074,40775,40831,42009,42378,42667,43217,43494,44658,48680,50641,52769,53285,67044,67185,69779,69826,70271,70973,71103,71610,72379,72520,72896,73392,75342,75388],"asynchronous":[2630,3403,4568,5269,6143,9127,10708,16060,18258,18620,19030,27694,30062,33503,34720,41289,41842,41928,45041,49731,50056,51009,72401,73683],"audiomixer":[4858,5087,7523,7588,7606,7628,7648,7683,7821,15202],"netstandard2_1":[33836],"sweep":[11622,13253,18221,33297,72357],"stable":[701,8554,11370,11600,12938,14975,15967,20205,20457,22496,26572,31015,31369,31381,37294,37496,37617,37817,38652,39887,50194,52903,70910,71012],"droppedframecount":[76052],"switching":[14,3665,5995,6133,7829,10327,10769,13894,18566,20181,24122,27321,28176,29862,29893,30321,32702,33842,34235,35691,40085,66745,68601,71311,71479,74337],"yeseye":[38010],"geo":[13389,16969],"scream":[4786,52097],"upm_cache_root":[69817],"footstep":[1912,22468],"findobjectsoftype":[36330],"specifying":[1267,4865,6314,7869,9348,11438,19031,21576,24060,25469,26926,32852,39663,44218,44670,44770,45181,45456,45943,49468,51427,64362,65873,68317,70612,70875,71365,73730],"2008r2":[66567],"newtemplateinstantiated":[39022,39213],"winding":[359,20287],"john":[70829],"bindvariant":[2851],"unity_compiler_cg":[43978],"leftshoulder":[29903],"decaying":[4998],"distanced":[37884],"because":[69,146,177,229,518,532,554,661,682,889,1069,1087,1118,1135,1430,1967,2053,2153,2287,2439,2608,2668,3287,3292,3319,3377,3491,3580,3695,3733,3806,3853,3890,3898,4065,4256,4390,4449,4508,4773,4866,4959,5049,5265,5284,5451,5595,5726,5919,6036,6105,6360,6446,6493,6597,6718,6762,6807,6892,7037,7316,7396,7429,7493,8094,8203,8439,8546,8888,9071,9261,9339,9589,9712,9774,9961,10012,10087,10108,10406,10439,10547,10595,11074,11298,11314,11370,11630,11764,12279,12319,12520,13000,13054,13264,13309,13430,13464,13621,13897,14702,14833,14965,15711,17978,17986,18105,18169,18225,18315,18377,18389,18449,18511,18537,18818,18884,18951,19028,19043,19052,19133,19348,19361,19494,20124,20263,20394,20423,20810,21052,21181,21221,21323,21504,21929,21989,22019,22093,22107,22128,22145,22439,23264,23420,24018,24370,24521,24916,25068,25179,25215,25465,25496,25733,25849,25861,26078,26119,26138,26247,26295,26375,26434,26472,26572,26646,26709,26931,27031,27055,27088,27131,27175,27207,27267,27299,27310,27331,27508,27520,27554,27716,27751,27814,27931,28182,28249,28439,28464,28613,28915,29182,29360,29551,29568,29718,29766,29784,29904,30008,30043,30110,30322,30385,30660,30875,31007,31388,31634,31662,31719,31870,32245,32705,32776,32847,33074,33291,33400,33420,33449,33487,33842,34379,34618,34673,34696,34783,34897,34918,34924,34954,35029,35250,35337,35691,35795,36011,36069,36172,36203,36330,36397,36480,36569,36678,37098,37259,37294,37413,37639,37667,37704,38437,38483,38508,38541,38574,38719,38840,39109,39150,39168,39238,39272,39309,39797,39819,39856,40180,40561,41807,41836,41899,42190,42356,42447,42800,43114,43131,43165,43177,43205,43281,43416,43484,43535,43592,44026,44252,44557,44882,45531,45615,46294,46529,47658,48275,48546,48913,49358,49470,49497,49507,49519,49571,49608,49662,49669,49710,49738,49843,49905,50008,50065,50131,50146,50366,50513,50969,51057,51155,51964,52182,52252,52475,52673,52769,53321,53997,54264,54590,55030,55512,55581,55732,56674,57628,57929,58156,58378,58823,59749,59838,60420,60497,61558,61735,61823,62193,62867,63922,63981,64017,64174,64325,64697,65386,66006,66165,66194,66224,66364,66437,66990,67813,68535,68542,68661,68926,69169,69748,69768,69808,69901,70290,70315,70345,70372,70586,70875,70960,71016,71165,71191,71578,71608,71652,71738,71902,72007,72474,72706,72729,73029,73168,73208,73285,73352,73417,73445,73486,73619,73662,73667,73689,73716,73984,74592,74645,74724,74776,74867,75153,75355,75395,75439,75501,75817,75874,76308],"corporations":[69901],"29f1":[527,33894,40327],"savefolderpanel":[6333],"ticket":[28310],"favorite":[5017,25601,41618],"leftshift":[49233],"camerafieldofview":[21970],"bitrate":[5981,14822],"oncreate":[773,801,1079,20019],"actually":[620,2179,3242,3740,4327,4776,4852,5231,5350,5980,6061,9339,10342,11546,12954,13042,13904,15844,18175,18563,20239,20606,21676,21988,23089,24881,25465,25635,25850,26647,27025,27575,27629,31797,32776,33545,35008,37285,37668,38408,40274,42354,43484,44848,48682,49496,49531,52011,52234,55399,56248,61388,66001,66133,66251,70295,71104,71121,71416,72921,73395,74429,74698],"gchandletype":[26160],"yesthis":[38209,45970],"atlas":[3495,9104,10003,10414,13701,14348,20393,22295,23274,23410,26597,27090,28828,29561,37368,37826,48352,48528,48537,48555,48571,48674,48852,48905,49542,49631,51203,51252,54162,58300,58370,58435,58673,59534,60641,61529,61905,61920,71820,72274,74185],"kformatr8_unorm":[50107],"parameterstip":[35129],"unmanagedtype":[28270,72160,72203,74595],"quicktime":[10733,52065],"nn":[40339],"fledged":[44481,59628],"#00516a":[63373],"screen's":[8117,11712,12323,12469,24299,34248,34331,34455],"fetchresults":[35744],"setenabled":[56088,56515,59597],"innocuous":[6026],"background_color":[73934],"bumpedspecular":[45559],"logging":[223,2725,6096,8974,11951,12267,12389,12578,16484,18132,19254,31101,31472,34317,34436,34530,35997,41944,43009,49389,52498,53782,65137,72394,73292],"shinier":[49513],"moderation":[17409,17506,31372],"hub":[229,1277,1601,3009,3955,3976,4339,6358,6413,6850,6922,12691,18050,18947,19059,19616,21018,22100,24950,25743,26688,27762,28605,28672,28742,28759,28760,28787,30490,37518,41701,50178,52496,54002,66582,68046,69787,69842,69885,70195,70374,71553,71677,72092,72791,72832,72888,72974,73427,74962,74991,75029,75132],"es":[754,1520,1672,3500,8407,11804,14015,14344,21089,21949,23550,25267,25998,27533,29444,29830,30293,37798,38321,38350,38426,41849,43458,43757,43848,43938,44055,44240,44559,44834,45211,45302,45436,45478,45579,45735,50196,53647,68766,73431,73902,74254,75774],"kunityxrinputfeaturetyperotation":[75496],"shift":[2267,2316,2391,2616,4965,7703,8030,8690,9767,13408,20075,20550,21485,22045,25367,26635,30145,33532,34779,35782,36498,36718,39136,39255,39338,39355,39757,40495,41668,43234,45498,48373,49232,50511,50527,50542,50585,50635,51301,51879,54570,54726,59745,60388,60790,65335,71350,71575,73294],"dots_instancing_on":[20247],"m_icon":[21655,76431],"flexdirection":[57092,59895,65203],"bitmaps":[39430],"preload":[7495,9517,29307,33503],"schemalocation":[58105,65879],"staticcounterexample":[20132],"authenticating":[70649],"textareastring":[23927],"grounded":[14943,23119],"property1":[54805],"handlehapticstop":[75613],"fastest":[8614,10575,26450,29242,30241,38434,48308,51965,74844],"8xxx":[38349],"sharedassets":[27687],"rectangle":[2266,2390,7959,8066,9538,9869,13100,13707,14867,15823,18236,19667,20552,21504,21964,23207,23817,24741,24772,26917,29879,30630,32570,33498,33550,34790,37790,39135,39373,39508,39591,39714,39727,40055,43191,48642,48686,51355,54166,54711,54759,57832,58561,59831,62121,64151,65982],"#c71585":[63602],"customers":[4066,4206,4256,4367,4389,4404,4439,4449,18819,71170,74201],"nextpoweroftwo":[10462,43162],"utf8tostring":[68952,69197,73507],"myvisualelement":[62809],"playercontroller":[29907,66281],"recalculate":[10332,26849,70211,71603,71848],"inaccessible":[33450,59176],"boring":[46158],"ribbons":[32729],"audiodistortionfilter":[7537,15154],"showtoggle":[56490],"files\\putty\\plink":[70111],"clouds":[11459,22854,31856,32196,32311,36593,38074,43484],"lightprobe":[38397],"atlases":[3496,5955,9102,10003,13704,22906,26597,28827,29561,35947,46122,48354,48527,48538,48556,48575,48676,48855,58393,58447,61921,72276],"depth+normals":[44051,45643],"stdout":[21035,27786,66621,70047],"simplify":[3,2198,10229,13267,17912,21005,29759,30048,33930,35137,47265,49659,62283,62980,67041,72901],"best":[149,532,617,930,1069,1272,1378,1444,1489,1557,1592,1701,1836,2041,2063,2956,3247,4256,4355,4508,5719,5736,5819,5910,5920,5987,6082,6147,6285,6837,6857,7073,7175,7348,7486,7621,7666,7927,8210,8435,9113,9145,9223,9348,9464,10579,11527,11916,12290,12367,12520,12865,13247,13266,13898,14002,14538,14582,14962,18258,18339,18400,18483,18608,18662,18935,19220,19310,20052,20260,20393,21087,21509,21566,21989,22675,23421,23454,23615,23883,24632,24774,25194,25678,26042,26081,26302,26387,26434,26698,29121,29153,29467,29758,29835,30270,30310,30871,31606,31818,32412,33083,33085,33506,34273,34343,34469,34897,35248,35793,35963,36518,37548,38503,38679,38839,39794,39899,40057,41427,42106,42178,42699,42742,42810,43075,43542,44876,45255,45729,48311,48370,48676,49402,49738,50366,50671,52258,52532,52640,52735,54483,54845,54869,54892,55622,55923,56718,57946,58423,59891,61795,61958,62194,63217,63856,63874,63887,63910,63932,63953,64009,64022,64040,64316,64381,65684,65696,65982,66459,66700,67754,67992,68673,68994,69241,70242,70818,70872,70945,71611,71760,72497,72635,72914,73020,73088,73173,73320,74775,75017,75224],"fronttoback":[6503],"13px":[59340,63239],"glctx":[73524],"allows":[167,234,254,332,501,725,1315,1645,1775,1870,1890,1933,1962,1966,1989,2063,2213,2234,2238,2251,2263,2313,2387,2434,2571,2768,3249,3452,3729,4356,4485,4530,4653,4790,4814,4959,5026,5084,5238,6036,6071,6320,6378,6683,6934,6980,7137,7153,7178,7217,7492,7657,7763,7789,8115,8162,8225,8314,8386,8426,8563,8859,8972,9008,9071,9196,9265,9400,9434,9555,9622,9723,9765,10000,10107,10273,10393,10465,10507,10692,10788,10933,11039,11077,11101,11149,11163,11172,11291,11452,11463,11546,11796,12094,12274,12340,12527,12762,12768,12858,12865,13144,13206,13283,13300,13552,13598,13648,13670,13843,14123,14297,14336,14610,14734,14860,14960,16005,16060,16212,16241,16603,17077,17282,17312,17326,17342,17370,17452,17627,17752,17968,17980,17994,18088,18254,18357,18575,18906,19182,19503,19617,19636,20327,20438,20583,20631,21052,21575,22093,22104,22183,22189,22307,23261,23625,23852,23900,24055,24392,24468,24490,24588,25031,25044,25177,25272,25333,25526,25970,26049,26118,26244,26264,26381,26462,26563,26651,26665,26716,26788,26863,26952,26987,27055,27209,27500,27514,27583,27897,27913,28450,28868,28877,29091,29315,29331,29391,29420,29488,29645,29890,29972,30000,30257,30366,30397,31642,31688,31763,31819,32114,32188,32231,32317,32365,32413,32594,32637,32690,32738,32747,32849,32891,32933,33088,33462,33532,33585,33784,34188,34235,34251,34333,34458,34837,34872,34911,34923,34988,36496,36570,36691,36736,36846,37360,37497,37536,37610,37712,37724,37958,38467,38607,38841,39160,39252,39619,39689,39699,39740,39826,39899,39977,40069,40168,40271,40452,40538,40817,40971,41258,41356,41426,41447,41624,41676,41716,41775,41808,41990,42024,42105,42255,42365,42704,42725,42747,42772,43215,43416,43490,43689,44020,45046,45213,46766,47985,48067,48243,48349,48641,49449,49481,49549,49567,49607,49629,49650,49913,50003,50150,50346,50397,50415,50491,50509,50519,50653,51042,51081,51101,51155,51212,51224,51245,51323,51541,51602,51753,51782,52124,52235,54208,54223,54513,54724,54740,55547,55621,55725,56723,57943,58074,58160,58407,58651,58732,59189,60506,61490,61782,62814,63107,63132,64452,64752,64841,64859,64894,64973,65315,66110,66194,66223,66332,66350,66373,66405,66965,67019,67230,67482,67745,67841,67896,68157,68611,68996,69247,69333,69439,69693,69860,70585,70878,71010,71523,71772,71883,71900,72048,72191,72247,72368,72418,72462,72474,72609,72683,72735,72978,73050,73175,73209,73340,73448,73482,73561,73592,73626,73675,73705,74160,74324,74512,74814,75097,75252,75290,75366,75445,75520,75872],"unity_4lightposx0":[47111],"setobliqueness":[30158],"sdf16":[58399],"bitcode":[52737,73653],"samplerstates":[45251],"aware":[505,579,665,698,929,938,1465,1516,1599,2180,2351,4772,6120,7482,11066,12835,14076,21294,24783,25741,25835,28084,28681,28719,28875,29714,30337,30564,31366,32705,33006,33442,33450,33599,36234,36786,39551,39906,41583,44697,48227,49376,50522,50540,52710,66182,66881,68498,70872,72090,73388,73691],"shape":[104,205,367,2328,4964,6223,6323,6756,7956,7959,7979,8149,8162,8210,8263,8368,8373,8615,8765,9024,9537,9634,10501,10579,11480,11960,12271,12392,12581,12721,12895,13148,13241,13783,13887,14021,14081,14223,14502,14711,14969,15816,15831,15884,15998,18239,18344,18968,19263,19936,20058,20569,21205,21456,21711,22455,24671,25289,26058,26915,27011,27490,28838,29384,29719,29767,29774,31226,31690,32168,32370,33743,34322,34446,34534,34871,35240,35269,37350,37499,37529,37690,37796,38458,38483,39666,42741,42793,43154,43194,46109,48377,48519,48607,48635,48641,48906,49518,49569,50521,50557,50574,50629,50712,50743,50756,50770,50783,50796,50809,50822,50835,50860,50929,51236,51306,51719,51808,51827,52131,52209,52233,58484,59852,65994,65998,68698,71806,71871,74194,74458],"dragupdatedevent":[57490,57565],"trackingreference":[76145],"unityxrinputtrackingoriginmodeflags":[75587],"ascertain":[53321],"loses":[646,3859,12328,12473,21862,31683,37289,40358,52466,55641,57839,58189,65025,73701],"scans":[3793,16919,18596,24974,30893,33414,73393,75404,76218],"inputmanager":[9840,15055,38918,76316],"updatemanager":[33484],"proxies":[2996,69901],"malloctracked":[26158,26251,35139],"cameraevents":[23633],"getrenderer":[29957],"00da0807526300w5":[66982],"ess":[2690],"tick":[205,8030,8351,9890,11068,11163,11175,11190,11262,26954,26978,27015,34995,39513,41695,49898,53702,66332,67921,72372],"assetimport":[3828,22860],"55f":[57053],"carry":[8203,8510,27510,28919,33409,34939,36508,44231,54054,72735],"racial":[53737],"skydata":[47403],"downcast":[67802],"preservation":[28483],"procedural_on":[44588],"2unity":[21029],"il2cppclass":[72050],"fatal":[52584,70479,72397],"touchup":[37871,74302],"confirmpendingpurchase":[67591],"recalibrate":[18509],"stapling":[28310],"anythingcompiling":[4636],"dkk":[53671],"hkkmvwwmxka4zwuws":[69920],"selling":[67597,67673],"issue":[215,1113,1570,1789,3866,4391,4495,4768,6198,8188,12221,12888,13622,13837,14501,18112,18226,18513,18536,20204,23270,25106,27089,28639,28909,29434,29922,30312,31719,33069,33296,35337,35714,36337,39170,48354,50007,51205,52674,52769,53322,53783,58484,60637,65699,66755,67147,67953,68041,68807,68929,69172,69861,70370,70761,70830,71551,71876,73198,74389,74535,75017,75144],"fragcoord":[45479],"profilerdriver":[35554],"objectfield":[24895,52442,55429,55528,59680,64997],"clears":[5316,18126,29267,36829,36982,43293,50405,58230,60813,61327,70372,73433],"spawning":[10804,11082,11172,11221,32397,37618,66037,66232],"additions":[3,19667,20832,23252],"mediation":[16091,17367,31398,53318],"0x26a296c0":[74566],"mouseoverevent":[60371],"checkxrstatus":[75244],"drawtexture":[30643,52420,59625],"_object":[27029],"adreno":[14345],"80px":[56839],"bake":[251,5321,6802,7014,9937,10010,10072,11319,11338,21007,21054,21455,22116,22128,23412,23434,24710,26812,26938,27015,27073,27114,27168,27210,27484,27523,29556,29765,29886,30166,30171,30177,30209,30229,30274,30354,36570,37723,37924,38659,38940,39309,40682,49720,50452,58375,68825,68852,69058,71593,71797,71834,71869,74302,75741],"painted":[26784,37687,50455,50591,51122,51186,51239,51360,51554],"stereo_instancing_on":[42170],"intractable":[67151],"nod":[29895],"imperfections":[10602],"clicks":[723,4866,18502,18681,18757,19316,19336,19351,19364,21170,24895,28951,39393,39472,51427,53763,55805,55973,57210,57977,59561,59734,60212,61302,64444,65931,73264],"#88":[84,62011],"iprintvalue":[36870],"_basecolor":[5449,5593],"exponentially":[26889],"csproj":[16364,16378,16392,35089,40441,72840],"d_profilertimelinedigdownarrow":[63469],"createsomesingleton":[6092],"brushtiles":[16020],"charactercontroller":[6775,8223,15135],"nativecontainers":[26435],"picked":[2007,5161,6821,7619,7670,9397,11303,13062,30135,35746,39138,51327,51514],"256px":[51239],"easy":[1985,2172,4116,4550,4882,5954,6047,7779,8091,8643,9909,11133,12866,13017,13316,13962,17000,17169,17642,18500,21200,22023,22504,24030,24300,24900,29678,30101,32115,32651,33265,33467,34926,36697,40540,43024,51849,54130,54759,55577,57001,59077,64337,66941,66960,67127,69864,70410,70773,71805,72754,73922,74549,74901,75576],"bindcell":[60057],"cable":[840,35797,52694],"playstation":[5709,6880,37772,43474,45438,50200,72955,75306],"openanimationstream":[68586],"paypal":[4009,4230],"dummy":[1273,9127,29855,34739,47460,52610],"mechanism":[3453,4792,10909,18581,26121,28443,33583,48556,50058,54901,67364,67708,70015,72149],"unpin":[52992,53344],"tradeoff":[26056,37662],"caught":[8162,74535],"usesecondaryversion":[26122,26220],"measuring":[86,4158,5002,25978,26066,53770,72337],"'m'":[1958],"distinguishing":[72939],"size_t":[27848,75811],"unity_apply_fog_color":[10196,46473,47894],"deg2rad":[10454,21966,61133],"finished":[2667,2737,2836,3690,4123,4258,4479,4580,4705,4867,5276,9127,9418,10058,11136,11383,12334,13401,18061,18813,21040,21154,21325,21897,24868,25223,25549,26374,26461,26482,26613,29974,32174,34986,35714,36984,37473,40233,41962,45037,52044,57187,58786,60213,61663,64619,65948,66337,67384,67588,67715,68513,69660],"amended":[42005],"sequentially":[12302,31624,32412,37286],"id_rsa":[70077,70143],"functionally":[43586],"capturemouse":[55697,57837],"mixers":[4722,4794,4865,4960,5026,5079,7767,33946],"setlayoutvertical":[54276],"temporarycachepath":[1448,25961],"spread":[5209,6045,7771,10080,13096,18254,32412,33093,37712,49609,50378,52114],"lobbyplayerprefab":[11125],"navigationdrawer":[74243],"#282828":[63283],"underpins":[40168],"beginvertical":[24391,59604],"deciphers":[936],"organizes":[21684,42325,45390],"dx12":[9457,21078,23627,34278,34492,37901,50169,71746,72220],"awotanbgkqhkig9w0baqufadbl":[69925],"file2":[21460],"regular":[96,120,317,457,1415,2188,3013,3766,4356,4545,6023,7217,8280,8434,9095,10082,10732,11204,11624,12888,13193,13452,14956,17963,18292,18346,20047,20263,20593,20923,21155,21356,21466,22880,23568,23900,24442,24632,25351,26567,29389,29500,31708,31870,32705,33424,33573,33782,34682,38828,38886,39650,39891,40703,41314,41458,41917,41989,42011,42150,42255,42400,42689,43101,43566,43684,43788,44231,44338,44422,44503,44764,44996,45139,45261,45720,45970,46513,47063,47348,48372,49533,49650,49666,49750,49823,50065,50142,50397,50726,50946,51019,51155,51163,52058,53012,54611,54715,54773,55550,56725,58282,58693,59177,60155,61566,62194,63064,63250,63672,63795,63985,65133,65694,68531,69295,69417,71070],"fitter":[24741,39370,39454,39551,54235],"outervertex":[61136],"supply":[6122,37725,38736,52608,62838,67538,67555,67582,67769,67915,68214,68285,71668,71938,73917,75621],"scriptedimporterattribute":[25115],"settexture":[28872,43602,44481,45266,50132],"intensities":[22174,27131,27510,27576],"lbqrisxwxmdnsiumh0djaorotghhtoredmtpyoeb6pnnvfzf1rov9iq4":[69935],"deffered":[75017],"appears":[191,557,1114,1158,1894,1915,2002,2304,2363,2663,3537,3718,3901,3909,3998,4120,4159,4182,4190,4199,4212,4236,4245,4425,4454,4473,4489,4579,4845,5091,6468,7015,7241,7400,7828,7859,7935,7956,7985,8281,8385,9485,9856,10002,10328,10759,11298,11380,11425,11674,11715,12087,12275,12316,12444,12781,12865,13247,13401,13743,13784,13912,14219,14679,14882,14933,14938,18080,18138,18233,18312,18471,18757,18954,18995,19074,19241,19683,19967,20058,20630,21043,21173,21589,21854,21976,21999,22090,22228,22687,23673,24573,24696,24782,25065,25161,25410,25503,25679,26858,26978,27108,27491,27600,27820,28194,28424,29060,29368,29559,29695,30138,30142,30329,31013,31366,31815,32066,32142,32365,32458,32857,33299,33473,33649,34293,34372,34503,34781,34953,34998,35196,35260,35398,35498,35680,35772,35807,36093,36457,36519,36625,37272,38377,38502,38526,38718,39030,39156,39252,39327,39650,40076,41400,41603,41767,41907,42752,42768,43177,43525,45398,48244,48269,48365,48514,48546,48583,48607,48620,48667,49513,49526,49706,49734,49824,49986,50041,50065,50448,50917,51554,52108,52556,54360,54436,54549,54579,54642,55407,56205,56265,56320,56384,56664,56792,57030,59271,61388,62338,62804,63077,63811,64322,65369,66690,66928,67090,67178,67257,67667,67909,70325,70328,70376,70747,70803,70936,70970,71129,71179,71195,71215,71256,71265,71292,71305,71331,71387,71418,71447,71477,71488,71503,71521,71687,72177,72258,72364,72460,72729,73263,73487,73672,73956,74760,75060,75224],"informtion":[11486],"dispatches":[1795,25345,56689,57808,61495,61823,67136,76218],"_objects":[27329],"samplercube":[8966,44280,45133,45210,46288,47415],"transform's":[14670,74418],"wallet":[53990],"nominal":[53691,68160],"#2":[12998],"unticks":[31816],"profilercategory":[21922,35415,35591,36252,36411],"deviceportal":[74782],"g++":[34672],"nativedisableunsafeptrrestriction":[26140],"annotation":[28585],"runtimeplatform":[67395,67576],"pointerpress":[40023,40113],"graphicsmultithreaded":[19734],"deprecates":[4066],"thai":[53651],"focustextincontrol":[59649],"packedmatrix":[5378,5522,20351],"targetjoint2d":[13885,15218],"2d’s":[8183,38531,38545,38579,38622,38628],"defaultpackerpolicy":[48686],"togglerect":[52428],"initial_memory":[73938],"ball's":[9322],"superset":[53280,54430],"switchdefaultrenderpipeline":[49234],"‘’":[41136],"lorem":[65174],"known":[7,206,248,665,690,698,1980,2208,3249,3311,3799,4672,5006,5261,5904,5998,6758,7128,7927,8085,8188,9772,10003,10698,12472,13067,13374,13457,14009,14378,14695,15842,17642,18673,20205,21154,21969,22359,24456,25622,26576,26783,26919,26938,27174,27214,27266,27292,27302,27467,27507,27598,27675,28189,29338,29721,30273,33401,34188,35344,37227,37480,38657,39425,42812,43118,43177,44864,45718,48123,48162,48235,48676,49495,49507,49516,49631,49640,49709,51045,52550,52710,52730,54771,56770,58375,60390,65981,66002,66157,66193,66721,66827,66861,66907,67762,68040,68568,68691,69042,69297,69403,72319,73195,73487,75134,75904,76305],"stitching":[10001,10652,27086],"steep":[8195,8834,10737,13220,22728,49550,49562,50529,51464],"dir_unityproject":[23511],"eventdie":[10952],"setbumpsecondaryversiononschedulewrite":[26122,26171],"unity_interface_export":[27893,27970,29930,75267,75921,75995],"_rimpower":[46202],"u2d":[48386,68652],"onwards":[2768,6066,18224,21394,21527,22106,23146,45785,48557,48674,52110,67824,73587,73654],"0x7":[74556],"checkerboard":[9098,10520,13906,21711,36459,45771,47580,50019],"glowing":[9669,22796,31745,49484,71811],"enables":[4,205,609,2204,2989,3346,4384,4876,5121,5972,6397,6801,7777,7913,7965,8059,8241,9151,9484,9708,9828,9953,10571,11718,12642,12728,14133,14238,14539,15950,16345,17030,17206,17326,17880,18132,18231,21041,21840,21892,22456,24969,25031,26560,26883,27520,27914,29449,29926,30874,31779,32242,32374,33884,34485,34735,35129,35583,36107,36753,37227,38604,38953,39769,40572,41935,41994,42413,42671,43653,43752,44109,44132,44671,45087,45181,48030,49345,49644,50354,50412,50444,50581,50796,51005,51244,54010,64470,66868,66887,66903,68740,69737,70876,71973,72429,72486,72776,72844,72983,73029,73174,73207,73328,73623,73685,74034,74136,74306,74656,74743,74784,74845,75410,75606],"#charactername":[54382],"modifierfield":[56169],"mood":[5065,9855,27490,37585],"paneleventstestwindow":[60573],"example_waitforsecondsrealtime_coroutine":[15780],"represented":[1893,2011,2353,5116,5938,5994,6294,8184,9338,9882,14672,14728,22742,23554,23932,27943,29588,30049,33907,35944,37687,38459,38490,38511,45102,45883,49515,49609,49643,50465,54711,56112,58141,68948,69192,75573],"desires":[29790],"uta_agent_protobuf_cache_hits":[66669],"carrying":[18104],"setsimulateasktobuy":[67394],"fixedheight":[64893],"a12":[19876],"atomicsafetyhandlecompares":[26115],"intact":[8023,9424,11395,25597,47852,71424],"principle":[33582],"rint":[8473],"revert":[7829,11380,11407,12896,13379,17994,18072,18982,19239,20630,21608,22081,25223,26897,28962,28992,29041,29893,33071,33645,34425,34523,39094,44957,48244,48269,48511,48566,48654,51096,61935,66015,70350,71634,71952,72421],"examplepassname":[42629,44779,45954],"shadercache":[41839],"reflectiveparallaxdiffuse":[42512],"counttexture":[36243],"distributed":[1276,3340,8084,28115,30986,38674,52118,52198,67754,75002],"efficiency":[7,3380,3470,6879,14820,18519,22904,38620,39296,40039,44165,48894,50436,75067],"rank":[17356],"ugui":[17742,30994,31268,33489,54106,58138,60354,60540,61491,62738,65898,65959,68656,68732,70219],"rules":[1003,2995,4547,5937,5989,8429,12667,16020,17092,21390,22993,26459,26967,27341,28467,31214,31635,35836,37382,38751,39618,39855,40298,45040,45572,45726,53879,54672,54794,54883,57160,61187,62105,62227,62853,63138,63667,63986,64024,64207,64310,66468,70839,70877,71020,72116,72192,72240,74384,75140],"mystring":[5996,20898,54530],"fireballs":[32311,32632],"pst":[66779],"mimics":[22856,42810,46643],"unity_dots_instanced_prop_override_disabled":[20324],"jas":[6699,24684,29752],"visitlist":[37139],"stability":[8295,11520,22993,23439,28477,37614,37615],"model's":[7865,10368,18087,21592,22070,29736,47454,49510,71787],"fortunately":[2131,71876],"imaging":[22740],"supportssetconstantbuffer":[19777],"tonal":[42704,42725,42747,42772],"showborder":[52378,57039],"unityproj_coord":[32995],"indonesian":[53631],"operatingsystemfamily":[19708],"violations":[26112,26260],"endbuildtargetselectiongrouping":[59632],"towards":[96,8529,9019,9694,9973,10196,10602,11284,11486,12044,15031,18233,20580,20777,21164,25669,26356,29661,32401,32906,34829,35691,42176,43879,44177,44345,50381,50612,52921,57818,60511,66002,72323,72765],"k":[2316,28298,41420,41601,60716,70541,71529,72271,73294],"setstatfloat":[76015],"captures":[10092,13120,19082,21852,21865,22876,33510,33529,35582,36220,42800,55641,57918,60832,73203,74239,74928],"settriggerparticles":[32809],"xrinputsubsystem":[76299],"unitysetinput":[74749],"backface":[10012,11608,22180,30243,32296,43128,45792],"getrendereventfunc":[29981],"typing":[6271,6297,19021,24213,29695,31765,35172,61968,70773,72231],"rotary":[8573],"deeper":[3242,35769],"#c8c8c8":[63257],"#ffdab9":[63620],"gfr":[74256],"nosee":[37881],"notifies":[4744,70629,75601],"isolation":[9368,20586,39336,54590,66598,72758],"shininess":[44451,45366],"scoping":[58096],"restored":[18023,67168,67358,67624],"requestlightsdelegate":[36650],"misconfiguration":[67295],"setstaticeditorflags":[9341,49715],"forearm":[71784],"playersettingswebgl":[12435],"continuations":[75544],"naming":[3893,4908,5845,7025,7364,8260,9129,9803,10387,18624,18744,18950,21154,21401,25143,29907,35129,42059,45214,48349,50043,54547,58018,68576,70344,70813,71783,72012,74905],"decelerate":[13808],"quadruped":[21571],"onnavcancelevent":[60529],"maxcomputeworkgroupsizey":[19771],"continuously":[8599,12888,21154,30893,32188,33075,35809,38612,39240,42779,52009],"uint3":[8417],"lowleveldevices":[12668],"raster_hinte":[58389],"setvertexbufferparams":[71975],"daemons":[1653],"“stolen”":[35738],"spawn":[5290,10804,11071,13075,13337,18565,31840,32413,51716,66053,66216,73626],"thesrp":[49357],"excludeplatforms":[3038,18643,18869,71056],"speccolor":[20331],"roughly":[3321,5160,5994,6381,6443,8555,23105,29728,32260,41814,42368,46877,50960,71808,73431,74642],"logwarning":[8977,33125,51655],"systemmetrics":[17038,31318,31461],"basetreeview":[55438],"kunityxrinputfeatureusagesecondary2daxisclick":[75663],"zy":[14483],"gettouch":[33362],"h":[171,712,1302,2024,4740,4879,6705,7139,8052,10765,11024,14820,26030,27888,27918,27943,28053,28063,29926,34551,34735,38392,39317,39724,41281,41338,43881,44245,46625,49762,57843,58353,61913,62038,71151,71318,71526,71904,72635,72712,72731,76069],"corresponding":[165,251,367,1883,1916,2296,2972,3014,3690,3856,4902,5029,5186,6266,6291,6321,6737,6760,6775,6978,8444,8631,9532,10832,11448,12760,13062,13281,13298,13902,14450,14866,15885,17000,17952,18173,18493,21175,22892,23547,25169,25769,26548,27261,28997,29108,32611,32869,33586,34164,34374,34723,35280,36004,36227,36517,37622,38520,39260,39927,40441,41166,43705,44024,45169,45884,48374,49542,49823,50620,50945,51149,52099,52235,52754,52893,53488,53701,53825,54724,55652,58142,58825,60359,61096,62895,65885,66172,67110,68784,70708,71053,71173,72054,72470,72530,72982,73286,73640,73817,73920,74063,74458],"substituted":[29471,71016],"draggable":[20736,22189,57558,64264],"cluttered":[20605],"kunitygfxdeviceeventshutdown":[29960],"motionbuilder®":[18190],"dosomething":[33318,52660],"videosthe":[53744],"themes":[4799,5063,54443,54672,63068],"kb2533623":[70582],"art":[51,5823,6758,15950,15967,16542,18360,21624,26784,26800,27077,28897,31044,37277,37302,37314,37329,37496,49520,49638,58387,68049],"narrowing":[7514],"decodefloatrgba":[43885],"copytexturesupport":[19745],"contrasting":[10080],"savegamemanager":[71029],"fillrule":[58574],"enabling":[2261,2612,4586,4659,4797,4845,5968,6272,6810,7567,7574,9214,9673,11951,12419,12475,12818,13838,14878,16043,17759,18244,18883,19254,20075,21460,22045,22161,22981,24761,24980,28022,28135,29440,29755,29863,29904,30145,30283,30916,31367,31819,34436,36106,37453,37657,38604,38609,39146,40271,42095,42161,42624,42798,43729,46766,48561,50009,51002,52673,71056,72794,73011,73333,73673,74212,74943,75294,75872],"cutting":[2192,24597,38250,38266,50965,66802],"advance":[9277,9399,14029,21168,22953,27068,27175,27316,30331,32776,34042,36017,36333,42941,58355,61916,73659,75654],"fontsettings":[6703],"visualmode":[57491,57585],"leverage":[22024,24167,52754,52871,53777,55610,62493,62636,72786,74136],"recalculatenormals":[21238],"pad":[4920,25763,33883,39297,39775,52767,60495],"treeviewitem":[52243],"pcm":[4774,7486,11612,52095,73061],"car":[5160,9718,9754,9894,14962,15850,26923,30142,31662,31856,32400,32702,37684,38405,48501,49484,58756,66197,71811,72337,74417],"_yoyolabel":[62516],"keyframe":[1886,1894,2052,2292,2327,2408,2429,7015,22507,24670,24796,32882,37574,37679,54213,64498],"unity_vertex_output_stereo":[1679,32973,43346],"overall":[4865,5067,5290,6803,7390,8357,10260,11895,13927,14593,15026,21525,22224,23213,26000,26044,26783,29714,30351,32886,33400,33582,34866,34980,35285,36005,36093,39402,40176,42358,45177,45721,47308,49442,49560,50472,50589,52142,52812,53773,59872,60912,61012,61784,66337,72337,73205,74151,75601],"distant":[257,5193,6765,7789,7873,14149,26663,26799,26858,26925,27215,29416,30351,37700,38405,43115,43131,43484,43592,50579,50685,71811],"waypointmanager":[9388],"instantiates":[5259,9427,13346,20009,23243,24724,25554,35566,38984,39208,39886,48915,50291,51774,54585,57318,59397,64368,73487],"bookmarks":[25492],"animatorstates":[13813],"audiocompressor":[7521],"unity_x_y_z":[33813],"capture":[1865,1994,4799,5025,6754,7975,8012,8179,8276,8394,8611,8779,9044,10092,12358,12649,12738,13127,14514,14846,16450,16564,16703,17077,19047,19265,21113,21832,23932,26253,26947,27482,27980,30933,31062,31431,33319,33533,34256,34337,34463,35028,35379,35519,35603,35622,35779,35898,35941,36224,36479,37349,37531,37728,38272,38661,39053,52056,55637,56912,57835,57917,57975,58015,60212,60397,60810,63222,66383,68213,70955,71591,71855,73198,74202,74918],"unchecked":[9015,14752],"knots":[71644],"“q”":[69333,69439],"fun":[5006,47336,56841],"yesraytracing":[37838],"jitter":[8197,8254,9705,11602,38500,50377],"brighten":[39836,42256],"junior":[33763],"unclear":[68935,69179],"'readline'":[70047],"lips":[49481],"downloadhandlertexture's":[68087],"compositionstring":[9774],"#808000ff":[49871],"standardized":[22417,25756,52756],"v1":[9104,11376,18819,46952,48556,48856,66703,68608,70567,70983,71191],"localizeddescription":[67066],"burlywood":[63520],"govern":[26569],"defeat":[67763],"unity_worldtransformparams":[47490],"ogre's":[2243],"quality_med":[44529],"safely":[5330,15857,25169,25545,26267,26302,26461,30913,31366,38405,39929,61326,67236,69660,70414,74178,75154],"tend":[3466,7870,9878,10009,22896,27549,31720,31745,32196,32631,37743,49450,49546,49609,50551],"'d5fddd470dd9beedcd7261b6455e436a'":[66679],"faces":[336,2958,6966,8608,8861,10002,10264,10533,10580,10656,13131,13385,14261,14601,22736,26970,27088,33734,36678,37688,37693,37731,37877,39266,42691,42729,42754,42797,43165,46877,49530,71774,71808,72525,74391],"rings":[46322],"analyzing":[4705,18079,18311,19047,33469,36197,74947],"namespaces":[18751,18819,29905,52616,55411,57610,59590,65873,66747,68652,68875,69111,71680],"creategui":[55390,55686,55765,55838,55948,56008,56239,56297,56365,56499,56552,56824,58246,59047,59585,60012,60449,60585,60737,60864,61217,61649,62145,62377,62522,62700,62751,65830],"99”":[67739],"according":[104,254,2180,2295,2657,2839,3770,3856,6263,6283,7264,7408,7491,7804,7927,8311,8506,8792,9081,9218,9953,10384,11333,11519,11701,12403,12438,13120,13371,14959,17968,18500,21889,22136,22224,22450,24631,24745,25143,25622,26670,27139,27325,27341,29714,31717,31731,31797,31997,32251,32328,32594,32617,33544,33592,33762,36031,36334,37365,37710,38324,38542,38751,39437,39574,39891,40128,40253,40923,41197,41516,45863,48594,49102,49470,49524,49629,49661,49849,50044,50611,50885,52040,53921,54224,54436,61314,61411,61488,63813,66696,69897,71300,73389,73926,74244],"scene1":[454,6334,19409,21122],"uiviewcontroller":[52642],"older":[298,754,1665,1770,3377,3501,6482,6837,11612,12865,14337,16151,20572,22042,23629,25263,27509,28306,28318,28797,29587,29922,30168,30881,33104,34274,34361,35363,35828,36342,38845,42614,43308,45211,45293,45579,46829,48380,49556,52493,54124,65970,66527,67983,68052,68055,68602,69303,69409,70438,71105,71497,71811,72497,72687,73140,74192,75223],"editorjsonutility":[39937],"generaterandom":[71716],"interruptions":[14754,33399],"worst":[14558,26057,41813],"maintenanceduration":[66752],"ap":[6009,31035],"countgc":[36250],"currenttarget":[56725,57238,57823,57859,60948,61054,61737,61803,62723],"simulated6dof":[76148],"hence":[8134,30097,44093,45599],"drawcommandsbegin":[5672],"kbytesperinstance":[5375,5519],"eventrespawn":[10954],"contactoffset":[11546,36352],"tempjob":[5498,26338,26383,26451,26525],"suspends":[4867,18132,33404],"findpass":[44602],"word":[3954,4034,4271,9250,9582,9641,17642,17956,23185,23982,25540,32065,39618,40064,40711,40787,40995,41466,41504,41677,42014,49824,50288,53285,58704,61443,62020,64160,65998,72269],"maxdistance":[5217,7794,73054],"advertisement":[16088,17370,31027,31399],"association":[4959,12619,36099,72087,74752,76299],"applyto":[19505,49941],"searchtext":[2529,2657],"solving":[11537,18232,18481,23089,35268,69882],"s_mypluginmarker":[27961],"releases":[526,701,5498,22993,33094,33435,33458,33893,35130,39393,40342,52629,54062,54123,55641,57581,59741,60364,68747,70438,70726,71073,71148,71506,72425,72787,73270,74305,74410,75187],"“texcoord”":[33008],"transcutbumpeddiffuse":[42835],"narrow":[3956,3989,4033,23088,35882,36340,41382,43184,71203,71217,71356,71523,71873],"_offsetunitscale":[45111],"pointeroutevent":[60774,62724],"presetmanager":[12824,15342],"accommodate":[2277,2411,2764,25692,29276,30885,33381,33438,39507,50007],"ondeeplinkactivated":[19395],"wrapper_runtime_invoke_object_runtime_invoke_void__this___object_intptr_intptr_intptr":[52562],"optimised":[49447,52649],"ambisonic":[256,4731,4736,7477,7672,74977],"slotslist":[56957],"penetrations":[11635],"nosuggested":[38147],"lz4":[567,2898,3247,3291,3338,3348,3569,6375,6435,6479,27710,28173,35129,51009,73025,73310,74636,74795],"aif":[4783,6696,7469,22578,52099],"updaterexample":[21029],"“muscle":[7168],"_stdcall":[28273,72153,74597],"tabletop":[51155],"maxheight":[48771,59673],"jittering":[8355,11638,37620],"transparentcutout":[45634,46050],"appstore":[25859,66962,66993,67149],"observations":[52584],"enablecodecoveragevalidate":[68845,69090],"playmovie":[49737],"hills":[50529,50543],"isdebugbuild":[33842],"analytics":[4151,4154,4177,4369,16759,17045,17092,17203,17452,21001,22315,30400,30940,31402,33807,34983,52871,53734,66802,66805,67483,67659,68073],"registered":[223,2462,3518,4970,5494,5660,5768,10991,11205,11226,17803,20116,36508,36753,37145,38641,39522,40453,50341,52872,53182,53446,53778,56022,57320,57449,57824,57868,66105,66236,67569,67862,68616,69636,70801,70943,71447,72180,72955,75306,76040],"del":[18995,48667],"plantation":[50595],"hoverd":[63271],"slider_groove":[61834,63376,64265],"bypassed":[4932,27525],"dog":[62012],"s_unityinterfaces":[29937],"fall":[554,2720,6774,6792,6837,7220,8074,9261,9515,12939,14702,15862,20276,20653,25608,27262,27570,28877,29182,29390,30265,30352,31838,32866,33548,34343,34469,36034,36242,36631,42663,43801,52040,56125,59541,66467,68929,69172,71608,75289],"strictly":[5015,8094,18734,26059,34897,49819,50342],"ellipse":[13645],"initialized":[1420,6063,8430,8839,18022,29947,32154,33286,44874,52255,59086,60019,67136,67855,74736,75026,75897],"strips":[9498,12014,21460,23279,28467,30862,37671,41958,42981,66466,71176,73395],"rgbslider":[24220],"iextensionprovider":[66998,67144,67301,67355,67568,67630,67706],"runuiapplicationmainwithargc":[66849],"m_editorasset":[55204],"governing":[6152,48319],"asset2":[3676],"78f":[50338],"deck":[13067],"a10":[27469],"protects":[26485,28967],"tabbedmenucontroller":[57211],"built":[7,40,164,255,261,391,563,881,1000,1295,1406,1487,1534,1679,1755,2812,2994,3241,3306,3344,3348,3453,3483,3512,3569,3667,3816,4502,4526,4729,4738,4826,4869,5179,5350,5694,5863,5982,5989,6078,6146,6325,6481,6485,6510,6678,6682,6688,6690,6804,6865,6935,7385,7980,8017,8118,8807,9197,9242,9286,9343,9448,9670,9845,9866,10214,10384,10654,10686,10835,11134,11309,11685,11824,12099,12359,12649,12831,12885,13032,13125,13540,13914,14237,14576,14943,15699,16597,16605,16613,16621,16629,16637,16645,16653,16661,16669,16677,16685,16693,16701,16709,16717,16725,16733,16741,16749,16757,16765,16773,16781,16789,16797,16805,16813,16821,16829,16837,16845,16883,16933,17062,17118,17934,18329,18342,18357,18389,18408,19018,19052,19096,19210,19292,19332,19450,20049,20263,20378,20407,20441,20863,20967,21029,21361,21841,21958,22014,22029,22128,22203,22228,22604,23248,23385,23542,23611,23622,24133,24510,24597,24641,24947,25348,25585,25865,25898,25978,26066,26069,26434,26858,27103,27250,27307,27648,27673,27681,28058,28204,28296,28463,28842,28875,28897,29398,29459,29486,29616,30143,30205,30268,30330,30365,30555,30914,31616,31665,31869,32238,32307,32747,32846,32917,33304,33395,33455,33748,33764,33776,34293,34503,34625,34671,34745,34849,35075,35473,35604,35622,35692,35768,35798,35959,36098,36177,36198,36558,37225,37484,37516,37565,37667,37749,38247,38264,38286,38343,38381,38414,38432,38771,39083,39106,39167,39866,40039,40063,40152,40372,40528,41802,41823,41864,41939,41975,42172,42180,42314,42351,42385,42600,42694,42718,42734,42759,42781,42809,42988,43078,43091,43106,43122,43135,43167,43182,43335,43482,43489,43501,43510,43559,43568,43657,43686,43731,43803,43869,43906,43932,44099,44136,44168,44201,44272,44322,44340,44379,44424,44576,44593,44629,44673,44761,44789,44851,45018,45057,45144,45184,45229,45263,45392,45427,45525,45565,45616,45618,45721,45845,45854,45934,45964,46137,46505,46531,46712,46819,47066,47159,47176,47949,47954,47987,48025,48615,48855,49126,49175,49313,49391,49462,49575,49673,49758,50094,50144,50308,50362,50409,50442,50521,50629,50647,50712,51055,52257,52488,52594,53081,54225,54443,54556,54603,54963,55497,55740,56063,56674,56797,57341,57613,58022,59811,59833,60428,60648,61562,62750,63098,63123,63229,63746,64203,64314,64896,65187,65684,65738,65850,65907,65925,66111,66190,66361,66435,66450,66556,67053,67526,68700,69015,69267,69343,69447,69570,69737,69864,70094,70127,70177,70241,70310,71172,71194,71215,71446,71466,71523,71643,71722,71879,72063,72175,72246,72462,72741,72803,72809,72816,72856,72880,72995,73445,73687,73916,74206,74510,74564,74627,74776,74941,75192,75265,75984],"flips":[13749,32283,44835,50422,51539,51575,51606,56052],"stalls":[4574,7494,26360,42204,42944,51052,75739],"odrtag":[2824],"development_build#define":[6368,74629],"smartphones":[1094],"#ffa07a":[63582],"_t#number_staticfields":[72032],"unityxrvector4":[75496],"thin":[7955,10586,14965,18898,32254,40151,45784,49760,50594,52387,58319,62017,66817,66841,74184],"lpcmdline":[66896],"reverse":[7364,18717,18747,22518,35864,39994,40596,43828,43979,44974,49832,51086,61414,62841,63676,64092,68531,70701,70813,70945,71370],"wanttoclose":[24872],"physicsmodule":[16694,30963],"unitylibrary\\symbols":[68900,69138],"periods":[11895,18750,39619,53601,67164,67738],"input":[317,387,649,661,680,716,867,1086,1552,1668,1809,2014,2070,4911,5037,5117,5829,6514,6732,7615,7765,7940,8132,8897,9764,10242,10602,10686,10750,10890,11902,12627,13961,14968,16403,16564,17835,17895,18047,18280,18357,18482,19944,19977,20137,20496,20678,21049,21158,21180,21359,22629,23257,24030,24167,25030,25099,25330,25332,25344,25579,25694,25717,25756,25762,25813,25818,25855,26044,26105,26374,26445,26960,27044,27510,27569,28936,29434,29533,29582,29678,30377,31105,31428,31895,32925,33146,33839,34203,34361,34864,36126,36531,37354,37536,37627,38718,38918,39388,39475,39512,39602,39743,39793,39806,39980,39999,40072,40101,40482,40643,42727,42749,42756,43337,43764,43900,43928,43975,44899,45273,45503,45662,46149,46542,46721,46857,47306,47904,48132,48611,49233,49646,49885,50145,50336,51362,51966,52243,52478,52601,52699,52712,52742,52745,52748,53006,54155,54693,56619,56673,57417,57918,57982,58127,58378,58638,58997,59718,59743,60219,60495,60761,61299,61484,61767,61990,63313,64258,64511,64610,64808,64914,65220,65244,65312,65741,65756,65906,65947,66057,68048,68441,68512,68790,69300,69406,70047,71366,72341,72549,72795,72904,72940,73266,73373,73468,74126,74202,74438,74710,75069,75109,75187,75211,75226,75324,75403,75473,75979,76091,76093],"selector":[5117,7135,11428,12523,12782,21697,21841,35178,35198,40764,40838,41173,41548,46158,48611,52978,53535,54360,54452,54646,54676,54798,56090,56706,62213,62662,62858,63118,63806,63843,63860,63878,63890,63912,63940,63956,63991,64011,64025,64321,65038,66934],"r8_uint":[8484],"painter2d":[58483,60703,60963],"voip":[12661],"projection":[75,126,246,8022,8546,9451,12860,12936,13135,13406,13777,19451,21483,22291,30145,34874,37619,37817,38297,38351,38655,39235,39252,43154,44071,44850,47073,47292,48879,51174,51182,72995,74298,75454],"lights'":[71806],"onload":[8845,73434,73565,73995],"squred":[12718],"m_instancecounter++":[62176],"halo":[9480,9668,9890,15120,22795,26893,38156,45636,63392,72811,72827],"dialog":[777,1282,1507,2717,3537,3884,4180,4201,4239,4282,4473,5059,5091,7508,7838,11394,12599,12896,13400,18134,18441,18461,21033,24477,25682,25939,26047,29000,29031,29769,34379,34949,35040,35199,35807,36722,37272,38853,38956,39005,39030,39082,39176,43291,48058,48351,48511,51081,51142,51347,52478,54639,55675,64549,67049,67257,67929,68561,70496,70916,71274,72181,72225,72364,72402,72861,73089,74896,75060,75359],"exhausting":[6846],"implying":[10764],"uta_agent_sys_cpu_percent":[66651],"hardcore":[52181],"counterpart":[13100,13261,26581,30896,42456],"didn’t":[53696,68906],"dontconnectacceleratorevent":[34222],"reverting":[20633,24856,29043],"hd":[2842,10780,24770,30288,50006,72497],"m_profiledepth":[58869],"nans":[8438,44295],"whitetexture":[30643],"\\packagemanager":[70928],"summarize":[4653],"numberofframes":[21113,36564],"checkboxes":[2296,3930,3968,4343,13815,22277,35220,35843,53416,57945,59021,61205,65171,72730,72840],"argv":[66850],"gfx":[29157,34208,35714,36237,74804,76011],"4px":[59310],"_disptex":[46835],"renameasset":[3619],"ds":[21765],"heap32":[73556],"leftdown":[27402],"getdistance":[18593],"maintextexelsize":[44845],"0b11110000":[1780],"humaninterfacedevice":[12653],"optimum":[690,58445],"designer":[5064,5982,49644,54121,54468],"achievements":[30059,53777],"absolutely":[2181,3468,6807,47263,49833,67921],"java_com_unity3d_player_unityplayeractivity_installcustomsignalhandlersfromjava":[1062],"#003c88":[63328],"prefab":[1920,3318,3361,3550,3731,3806,6127,6706,9094,9136,11078,11125,11291,12852,13306,13618,13628,15330,16060,18432,20582,20625,20948,21306,21460,22532,24593,24725,25233,25418,25497,25939,27170,28974,29020,30035,32104,33099,34811,34882,34905,34923,34937,35694,36705,38908,39921,40456,40687,40693,40946,41170,41359,41471,41518,48053,48226,50374,50452,50582,51080,51184,51398,57628,62774,66049,66197,66233,68530,68541,70571,71933,74898,75905],"granite":[50142],"ol_minus_act":[63464],"10kb":[29771],"imprecision":[5968],"abcd":[52627],"protect":[4876,12607,28108,52491,53184,53370,66110],"grown":[39663],"ssr":[74296],"parametercount":[33373],"local":[229,1006,1322,1727,2194,3247,3342,3365,3541,3588,3872,3896,4226,4314,5204,7204,7316,7952,7959,8154,8168,8230,8263,8378,8502,8593,8770,9031,9067,9532,9686,10127,10274,10808,11039,11069,11208,11221,11263,11292,11477,11661,12603,12729,13168,13258,13642,13652,14507,14699,14905,14950,15835,16060,16579,18131,18315,18816,18924,19426,20233,21230,21417,21766,22866,24996,25112,26465,26920,28441,28785,29160,31603,31718,31835,32130,32165,32279,32727,32903,33275,33382,33674,34072,34794,35247,35627,35803,37882,38412,38463,41962,42023,42047,42124,44542,44876,48084,49152,49744,50538,50615,50909,52993,54713,54880,55185,55331,55857,56112,58119,58332,61907,62063,66037,66059,66134,66207,66230,66341,66349,66390,66555,67003,67153,67182,67237,67343,67587,67755,67844,68996,69247,69740,70211,70241,70259,70288,70345,70509,70585,70746,70768,70875,71155,71192,71322,71391,71424,71467,71480,71520,71775,71874,71969,72426,72474,73178,74289,74422,74524,74777],"fullscreen":[688,11682,11715,12065,12474,19683,19980,20075,34218,34256,34337,34463,38198,38375,50061,73278,74038,74286],"desc":[40912,41228,75426],"foveated":[74256,75462],"dealing":[3413,3565,4884,9384,12971,13378,21449,25191,37052],"promo":[4136,4176,67090],"└──":[18695,18767,18833,69763,69800],"stage":[249,1266,1375,1679,5238,6834,16470,19079,20616,21716,22142,23007,23275,23663,24971,27044,31379,36124,42125,42424,42955,43038,43690,43956,44556,45294,45453,49028,50147,53309,66230,69729,71156,73172],"m_modification":[48128],"editoruserbuildsettings":[1740,2797,3252,15260,74084],"populates":[8651,14087,21852,29327,32767,35400,35521,35682,41681,43150,58825,59720,75767],"ars":[53660],"already":[8,64,269,1499,2102,2372,2608,2649,2772,3581,3731,3846,3886,3903,3909,3951,3976,4065,4204,4339,4366,4404,4459,4635,4832,5770,6833,7816,8104,8893,9256,10354,10547,11150,11193,11264,11285,11291,11374,11467,11508,12586,12779,12903,15022,18050,18076,18330,18440,18961,19013,19653,20192,20288,20893,21154,22036,22085,22999,23483,24472,24629,24759,24792,24901,24969,25047,25329,25911,25920,26078,26289,26723,26964,27263,27566,27638,27687,27705,28383,28918,29731,29947,31013,32154,33126,33439,33661,34181,34192,34238,34646,35224,35748,35877,36334,36395,36731,38281,39170,39305,40454,40618,41320,43261,43335,43591,43738,43990,45455,45900,48009,48067,48257,48315,48336,48372,48674,49428,49642,49684,50008,50056,50322,50686,51304,51398,52181,52332,52631,52936,53004,53204,53283,53695,53788,54209,54564,54635,54681,54732,54758,55602,55740,57838,58633,59490,59534,60544,61658,61812,62483,64247,66135,66225,66721,66855,66986,67351,67538,67550,67624,67759,68611,68956,69203,69302,69408,69568,69787,69854,69861,69903,70014,70109,70325,70331,70516,71068,71175,71190,71215,71275,71293,71306,71326,71381,71471,71517,71681,71859,72931,73324,73716,74532,74679,74859,75037,75080,75134,75192,75446,75508],"rgfloat":[8449],"ellipses":[6359],"spawnable":[66078,66236],"cyan":[4579,30627,41929,49550,49850,63528],"windowsplayer":[74659],"plans":[2999,5011,12275,26695],"intersections":[12912,23101,42798,44700,71885],"vive":[72888,72954,75305,76095],"transaction_id":[67468],"umbramodule":[16758,30971],"incremental":[3894,6388,6398,14501,17133,23525,23686,24611,24633,25308,26045,30867,33386,33397,35727,39678,40339,52690,53147,63223,66258,68893,69131,73411,74196,74649],"false":[752,1067,1589,2011,2344,3024,3300,3432,4387,4600,5935,5990,6246,8132,9884,10975,11624,14099,14728,14897,18299,18606,18644,19420,19525,19896,21071,23932,24730,24797,24992,25642,25702,25860,26760,27691,27962,29107,29703,29871,32106,32172,33116,35764,39806,40745,41525,42053,44146,46064,47963,48083,48724,49984,50966,51434,51772,51792,52444,52629,52766,53603,55133,55185,55331,55685,55822,56088,56191,56953,57037,57331,58085,58173,58604,59597,59940,60244,60953,61152,61277,61481,62429,62550,62725,65368,65746,66135,66621,67475,67730,67795,68088,68255,68266,68841,69086,70230,70833,72565,73082,73253,73271,73485,73551,73964,74696,75551,75762,76203],"havok's":[15902],"russian":[53643],"clamp01":[10480,33971],"suspend":[4867,21364],"locales":[5990],"stringtoutf8":[73520],"warm":[23424],"desirable":[12988,20457,23468,24776,49631,54264],"rightright":[62235],"hyphens":[18750,64205],"ndsdw":[69910],"destruction":[35694],"finding":[2356,3419,3948,3980,9330,11040,11315,16595,17954,18091,18567,19077,22312,25224,31619,40193,41157,50917,52248,62771,66230,66341,69720,70301,71211,71294,71782,72339,74136,74535,75976],"#ff4500":[63613],"dfs":[57843],"tasks":[1406,5268,5733,7056,11606,11813,12349,12675,17152,17998,18254,21023,21322,22958,26360,26478,26689,27691,27695,28607,30391,30903,33619,34279,34493,35256,35746,36128,36338,38330,40650,49731,54051,61686,65687,65920,69732,71120,72715,72917,73147,74498,75031],"readonly":[2640,6209,20976,26151,26294,26442,26516,26733,30627,35419,35486,35572,36761,36837,36989,39861,55941,56160,56758,57225,57521,59953,60913,61013,61773,62365],"winbtn_win_close":[63499],"muscular":[2243],"release":[567,701,1351,1471,2080,2272,2395,2595,3923,3964,4254,4561,5498,6376,6396,6469,6843,7519,11358,11417,12013,12155,12398,14680,17092,17362,17418,17430,20047,21041,21626,21873,23011,23427,23505,24922,25309,25446,25848,26070,26114,26234,26449,27691,27952,28163,28403,28782,29192,31008,31363,31377,31613,33094,33419,33457,33816,34764,34828,34988,35280,35461,35797,35957,36227,36368,37467,38711,40031,40121,40328,41292,49059,49301,49732,50178,52570,52832,52913,53133,53276,53686,54086,54106,55652,56927,57560,57838,58313,58653,59732,60194,60223,60769,61446,62052,63223,66421,66767,66852,67268,67639,67877,68566,68689,68811,68849,69040,69293,69373,69477,69506,70326,70755,70814,70912,71033,71136,71226,71293,71320,71366,71540,72871,73188,73308,73320,73389,74129,74221,74408,74637,74778,74845,75786],"object's":[2418,2427,6793,7952,8154,8502,9145,9357,9711,9969,13155,13642,13652,15847,18224,21154,21373,21659,22016,22061,22840,26258,29091,37167,37685,37958,38410,41921,42366,44448,45623,46023,47067,49423,49473,49497,49611,51975,52487,55869,61938,71959,72337,75223],"slides":[29704,75440],"af":[22728,53609],"samplesuniversalrp":[18782],"bodies":[3012,7215,8241,8302,8534,9015,9151,9708,11519,11575,11603,12707,13268,13684,18220,22512,26060,26547,26557,33572,33682,33757,35273,36302,37609,38459,38519,66516,74329],"maxcomputebufferinputsfragment":[19764],"meantime":[4574,10768,41842],"boss":[2190],"#808080ff":[49865],"alternative":[1890,2058,3241,3512,6039,9515,9783,12311,13736,16406,17925,18292,20397,22870,24943,25404,25904,28262,33368,37426,38147,38284,39961,42456,45582,49750,51156,52319,54109,60881,60982,64078,74587,75437],"tangentsign":[47490],"acceptable":[6094,7506,8547,9878,10080,18511,22798,26056,26356,29365,37639,37678,37684,37728,50579,52044,73286,75446],"cornsilk":[63526],"bidding":[17370],"videoslibrary":[12648],"previewing":[2191,2287,7673,8705,10327,11464,14118,29847,29899],"unix":[9122],"newrect":[59822],"0x80000000":[5461,5606],"sample_depth_texture_proj":[32995],"unityplayeractivity":[737,784,1018,1072,1771,1855,35866,66825,68898,69136],"dragging":[2272,2293,2395,4820,4964,6269,6297,7815,8359,13997,18098,18167,18379,18444,18896,18993,20548,20659,24721,24774,25517,32849,34779,36694,39518,39977,40000,40096,40103,48514,48665,49893,51207,51760,54712,54763,57471,58800,66252,72470,74899],"getgraphicsadapterid":[75889],"interested":[2198,4635,4704,5910,6125,18611,19076,25070,29510,30637],"hprevinstance":[66896],"dllexport":[28273,72152,74597],"condensed":[10080,30142],"worldreflectionvector":[46295,46813],"binds":[5352,20434,33958,39009,49356,49774,50056,54911,54963,55063,55162,55346,55578,56074,56212,56327,56449,56986,64797,65519,66941,75697],"parse":[6040,7836,41462,41860,63917,67760,70360,73393,73606,75980],"yesmostly":[37820],"former":[4357,8368,59725,59821,68532],"cameras":[5866,6749,6753,8012,12899,13393,13538,13822,16345,16453,16984,18424,18612,20452,21447,22011,22029,22224,22640,23593,24523,24656,24904,25209,25416,29769,29861,30151,30265,33525,37349,37480,37531,37953,38297,38886,39138,43456,43489,44050,48936,49054,49296,50964,51005,68006,71899,71982,72923,74205,74391],"a2b10g10r10_uintpack32":[8485],"firewall's":[69888],"__alphanumeric__":[39617],"tlsf":[29157],"supplying":[4865,5995,67294,67549,67572,68470],"halfheight":[48485,61075],"idictionaryelementproperty":[37061],"renderdoc":[21962,38271],"swept":[35311],"hostname":[66611,70722,72392],"#160":[7211,8023,9210,9582,9643,9692,12710,13107,14954,15031,39374,39406,39772,49617],"rapid":[12903,17986,43070,70910,74776],"crossfading":[2089,6322],"dr":[74537],"filealias":[2914],"batchmode":[15702,19636,21051,28617,28684,28722,34203,68831,69076],"scheme":[4884,5351,8260,9128,11815,12351,12617,19340,19354,19366,21154,23796,25763,25917,27141,33769,34281,34494,35129,36459,40064,48349,52754,63680,69667,70628,73333,74905,74940],"parts":[86,1926,1950,1966,1991,2201,2414,2427,4591,4873,5266,6803,7841,7844,7930,8012,8402,10108,12310,13062,13617,13696,13718,14149,18091,18179,18448,18481,18611,19467,20181,20336,21550,21592,22032,22139,22470,25309,25526,26489,28465,29218,29724,30243,30376,30871,32933,33081,33449,33548,35888,36803,37376,38485,38657,38865,39958,40001,40327,40604,41292,41459,42156,42333,42548,42876,43205,43456,43591,44363,44456,44527,44758,44905,46816,47026,47192,48168,48501,48904,49426,49562,50552,50652,50881,52591,52736,57293,61072,61333,64205,65999,66206,66461,68492,71468,71751,71767,71882,72430,72757,73694,74899],"3gb":[12231],"smallestscreensize":[825],"phew":[47517],"#515151":[63288],"n1":[18230,64325],"envy":[49838],"assetid":[11082],"divider":[41717,59076],"registerlayout":[75718],"property":[122,182,250,298,393,987,1112,1141,1154,1262,1387,1575,1915,1957,2284,2323,2429,2738,3380,3484,3799,4713,4970,5026,5192,5938,6061,6143,6274,6299,6466,6500,6765,6813,6961,6987,7011,7149,7201,7228,7363,7428,7436,7453,7480,7516,7525,7533,7541,7554,7581,7590,7599,7608,7630,7639,7650,7658,7678,7687,7695,7705,7714,7733,7754,7773,7889,7949,7960,7988,8000,8018,8106,8130,8151,8164,8194,8228,8264,8283,8374,8498,8591,8601,8630,8766,8791,9000,9025,9056,9147,9165,9200,9249,9295,9439,9533,9558,9624,9673,9684,9725,9762,9779,9849,9868,9945,9995,10056,10118,10245,10328,10396,10413,10494,10566,10608,10627,10736,10790,10807,10987,11003,11042,11067,11121,11149,11162,11174,11186,11201,11224,11243,11273,11294,11323,11342,11405,11441,11465,11478,11507,11530,11599,11646,11656,11672,11705,12154,12380,12447,12701,12722,12753,12772,12854,12874,13102,13126,13161,13197,13237,13274,13291,13383,13474,13547,13553,13594,13639,13650,13671,13703,13722,13746,13786,13806,13825,13832,13859,13889,13910,13958,13980,14229,14472,14500,14534,14556,14592,14666,14725,14793,14833,14946,14981,15025,15847,18075,18173,18503,18676,18936,18974,19040,19164,19228,19343,19357,19376,19671,20007,20084,20216,20237,20459,20659,20777,20879,20916,21219,21382,21387,21452,21567,21661,21715,21876,22084,22115,22153,22223,22637,23260,23509,23731,24103,24516,24634,24658,24735,24750,24785,24898,24909,24959,25385,25668,25860,25996,26253,26559,26603,26627,26718,26788,26796,26830,26912,26984,27174,27186,27213,27265,27292,27302,27312,27823,28102,28131,28197,28467,28828,28857,28884,28987,29070,29091,29148,29343,29559,29586,29685,29786,29823,29863,30173,30194,30275,30284,30624,30862,31642,31678,31741,31757,31787,31802,31833,31850,32088,32103,32127,32151,32214,32247,32338,32356,32371,32604,32627,32647,32675,32722,32754,32857,32901,33308,33410,33542,33650,34184,34255,34336,34462,34611,34886,34910,34923,34941,34981,35187,35396,35453,35678,35816,36005,36068,36229,36512,36593,36635,36700,36739,36750,36788,36823,36976,37224,37285,37453,37618,37702,37722,38021,38454,38467,38483,38498,38511,38533,38544,38578,38609,38627,38648,38953,38987,39038,39170,39232,39291,39372,39387,39404,39456,39474,39515,39532,39540,39582,39593,39605,39650,39668,39683,39692,39701,39710,39716,39742,39767,39805,39811,39830,39891,39971,39979,40004,40044,40071,40093,40106,40136,40144,40220,40628,40730,40806,40842,41173,41306,41375,41469,41520,41545,41762,41891,42027,42053,42701,42722,42744,42764,42791,43122,43127,43130,43167,43185,43526,43589,44086,44433,45046,45136,45270,45409,46024,47242,48248,48273,48358,48590,48646,48685,49217,49343,49467,49488,49504,49608,49624,49711,49738,49779,49880,50145,50349,50388,50418,50429,50538,50584,50719,50748,50762,50775,50788,50801,50814,50827,50840,50866,51025,51124,51137,51237,51294,51347,51760,51822,51867,51976,52184,52227,52249,52691,52746,53281,54186,54243,54312,54532,54601,54635,54674,54800,54879,54903,54947,54967,55089,55159,55268,55346,55374,55497,55547,55557,55919,56051,56110,56183,56208,56280,56327,56592,56692,57041,57331,57828,57859,58054,58119,58144,58270,58279,58437,58734,59037,59398,59504,59586,59736,59837,60229,60375,60508,60611,60780,60902,61002,61312,61520,61572,61662,61823,61902,61976,61995,62057,62109,62196,62586,62799,62836,63697,63704,63722,63830,64079,64260,64310,64388,64619,64747,64973,64986,65001,65049,65230,65254,65321,65707,66082,66246,66331,66480,67188,68088,68266,68284,68541,68922,69165,69300,69355,69406,69809,70025,70230,70246,70290,70389,70811,70905,70978,71022,71378,71617,71796,71871,71941,72280,72319,72381,72644,73264,73459,73480,73614,74139,74258,74766,74901,75142,75242,76130,76335],"sku":[67121],"simd":[16510,73692],"measurable":[5284],"items":[1880,2506,2524,2549,2626,3571,3903,3989,4519,4903,6981,7955,9013,10406,10724,11454,12785,13035,13284,13714,17788,18068,18167,19170,20738,21005,21607,21640,22011,22054,22077,22203,22228,22466,24737,25163,25372,25399,26081,26370,27785,29237,30554,33152,33656,34820,34939,35158,35203,35248,36048,36530,36697,37051,37345,38459,39138,39311,39493,39804,40961,41161,41320,41427,41541,41592,45452,48582,49905,50288,51099,51602,52243,52940,52953,53334,53946,54036,54313,55987,57003,57362,59085,59301,59838,60427,60506,62463,62577,62828,63306,64083,64242,64878,65415,65446,65738,66184,66570,66971,67187,67351,67549,67626,67643,68045,68913,69154,71017,71216,71275,71344,71410,71910,74136,75061,76208],"achieves":[14582],"'skin'":[1932,22536],"meaning":[205,368,2439,2616,3486,6266,6293,10130,10364,10793,10811,11312,12811,13818,14790,18500,24897,27510,28890,29484,30149,32882,34161,34778,39107,42811,44874,46074,47309,54246,58731,64215,64340,66001,68160,68624,70826,71160,72327,72724],"l++":[27404],"endhlsl":[42623,45609,49018],"pointer":[4908,5637,11887,18538,21173,21195,24890,25388,26110,26203,27854,27991,34723,36068,39773,40001,40103,40591,43237,49887,54459,55640,55806,56713,56806,57417,57581,57836,57917,57987,58015,58139,60222,60607,60760,61488,61796,62108,63259,63956,64177,64220,65231,65255,65906,70594,72051,73283,73553,75764,75992],"inputussclassname":[56623,61774],"nav":[29312,67243],"accept":[1510,1919,2708,4021,4181,4832,6025,7832,8132,11312,13379,20660,21051,23217,23932,29898,34203,36791,36846,37010,37231,39388,39475,39591,39714,39743,39806,39980,40072,43302,44896,45134,48057,49547,53292,57587,58089,59736,61179,63717,66208,68263,69300,72862,73677,74799,75654],"qsyi7ynhwmc5u0r1db0br+lzsj6rnwwpysmsuxx5ssikis":[69920],"boundsfieldsnippet":[64406],"getreflectionprobecolumns":[26758],"yo":[9019,62496,67877],"onnavsubmitevent":[60531],"policies":[48685,66571],"unlit":[14155,28875,30365,37841,41830,42369,42444,42803,43202,45549,45673,47184,48988,49325,50144,74207],"iphone3gs":[45302],"m_currentclipindex":[34106],"bintray":[70036],"onstylesresolved":[56769],"characteristics":[890,1483,1979,4566,8068,9969,12683,13854,19992,22864,25734,27296,29561,30885,35603,38258,38287,45591,50587,57971,58025,72879,76132],"optional":[280,1321,1797,2115,2539,2643,2768,3024,4141,4178,4875,5158,7113,7833,8229,9148,9685,9747,11821,12607,13575,18081,18255,18935,19133,19669,20910,21029,23146,23255,24060,24950,26979,32767,34573,35429,37419,37489,39032,39479,39627,39777,40838,41200,41820,42329,44773,45002,45065,45249,45401,45863,45945,46765,48576,48984,49154,49207,49621,49909,52752,52789,52821,53095,53280,54739,62307,63683,63734,64182,65420,65865,68483,70026,70514,70807,70871,71053,71356,71365,71481,72016,72276,74394,74825,74962,75739],"box's":[7956,10341,13148],"#unity":[65164],"d_toggle_on":[63487],"ongeneratevisualcontent":[58469],"spots":[9898,10070,22186],"getstringfromsourcegenerator":[38724],"stitch":[10652,27090],"cheap":[4952,6834,38354,42233,42250,42308,42436,42449,42463,42533,42543,42593,42823,42834,42845,42856,42861,42931],"wraps":[315,1038,1246,1404,13341,29216,33945,35252,42731,46576,66190,66225,68460],"executedefaultaction":[57858,62112],"fat":[46367],"unprocessed":[22600],"cacheminfreepercent":[66667],"privacy":[17474,21013,22347,53438,69904,74816],"lefthandedcontrollers":[76151],"insensitive":[4960,45245,53603],"polluted":[4634],"transportrecieve":[11012],"mediumvioletred":[63602],"maintexture":[10746,45096,51060,72551],"“rendertexture":[68929],"fluttering":[50611],"main_styles":[60188],"gizmo's":[34804,35016],"m_depth":[76497],"aov":[31034,38213],"randomised":[32193],"lightingsimplelambert":[46560],"fixedupdatemanager":[33486],"acquiremesh":[75788],"drivers":[21087,24670,30314,33467,34209,36234,50170,52475,52500,73141],"pulsate":[2346],"worldbound":[56113,56556,56924,62154],"achieve":[1901,2192,6122,7789,7924,8065,8535,9154,9890,11569,14560,14965,20427,20580,21624,22675,23440,23629,27065,27077,27267,29714,30154,30174,30358,30913,32074,32609,32631,33607,33763,34855,34955,36762,37588,37654,38297,39671,44377,44627,45618,46551,47985,49158,49355,49474,49496,49510,49629,49638,50367,56728,58442,59852,60642,61092,70707,72525,72917,73287],"lplibfilename":[18547],"reverberated":[7807],"item_id":[67471],"exceeded":[2181,9009,9173,9303,9739,10246,13170,13569,13681,13866,14995,31727,32174,52034],"avfoundation":[74199],"imply":[33828,50344,71158,71873],"scriptablecullingparameters":[49066],"especially":[3413,4883,5726,5964,6198,6378,6432,6858,7364,7483,9260,14702,14975,19306,20208,20733,24471,24505,25263,26574,27209,27309,27738,28484,29259,29882,29906,30864,32115,32136,33264,33417,33582,33722,35892,36592,36684,37052,37481,37667,41374,41912,42802,44936,45572,46484,46597,49402,49702,52597,53321,55602,71774,71811,72520,73306,73627,74639,74901],"wsa":[12475,34578,66879,74746,74753],"overridecontroller":[6703],"abilities":[25521],"r32ui":[8482],"openexr":[13140],"targetpackage":[69582],"discussed":[3419,5940,10873,19086,23814],"link":[471,1044,1843,3437,3917,3950,3998,4071,4157,4212,4237,4263,4424,7189,7250,9384,9715,10705,11436,16564,18164,18476,18681,18818,18936,19316,19336,19351,19364,19376,21980,22002,22351,23711,24526,25487,28266,28477,30279,33603,34165,35203,36110,41697,41928,49417,49725,50135,52616,52818,52895,53292,53711,53785,54012,55557,61468,63329,64179,64245,66467,66958,67097,67255,67845,67947,68532,70096,70312,70572,71136,71257,71301,71533,72137,72201,72868,73172,73397,74316,74847,75012,75209],"lightprobes":[15219,23416,26707],"standalone":[3252,3721,4566,4774,4959,6051,6362,6434,7673,15700,17931,19048,19096,19651,20448,21034,21962,22860,24626,25314,25345,27147,27528,27637,27671,28095,28172,30284,30555,33777,33878,34200,34248,34334,34455,34594,34675,35826,36552,38274,38716,39999,40549,44309,48068,49886,50180,50653,52746,52931,58776,61493,64339,66355,66897,68464,68720,71746,72133,74501,74570,74583,74662,74806,75897],"protrusions":[49495],"planets":[35252,59907],"lightmapper__":[10008],"audiences":[17092,23198,68072],"pointers":[5498,18531,26108,26138,30097,55670,71740,72052,75725,75816],"avoided":[5946,21520,29907,30139,35344,38560,38590,39663,42255],"meanings":[44810,49522],"cacheminfreebytes":[66667],"lookatconstraint":[10407,15337],"0f":[4894,5254,6243,8663,10978,14104,14920,15794,20469,20970,21966,23370,23969,24161,24184,24354,25778,27348,28938,29627,30011,33002,33972,44949,46469,48891,50966,51687,52439,57052,58502,60690,60801,60946,61052,64475,76329],"dropchoice":[30598],"pointerdownevents":[56881],"visually":[2044,5152,12520,13064,13743,13784,20601,20735,22651,23982,27751,27983,29784,30048,32776,33715,37504,38405,39389,39476,39744,39981,40073,41935,51173,51239,51329,54121,54736,54738,54848,57502,58459,58732,59552,59868,61302,61607,62586,62784,65917,68825,69058,71900],"ctrlplayable":[33979],"releasemouse":[55701,57838,60274],"billboard":[7872,7877,10382,12925,22239,22735,26669,31863,32248,38155,48232,48330,50369,50463,50615,72819,75181],"capturinglabel":[55693],"'number'":[40885],"unityloader":[73214],"inout":[23315,29539,31902,33040,44899,46152,46523,46546,46760,46854],"setindexbufferparams":[71974],"getchild":[74478],"shader_api_desktop":[42960,43943,44991],"unitywebrequestwwwmodule":[16806,30977],"saw's":[9752],"‍to":[30826],"while":[11,226,519,633,813,1227,1378,1469,1947,1957,2089,2211,2263,2296,2344,2387,2419,2442,2676,3246,3351,3500,3719,3736,3790,4267,4356,4366,4579,4773,4801,4814,4965,5258,5911,5922,5999,6055,6068,6105,6384,6542,6723,6794,6807,6958,7156,7390,7483,7620,7628,7637,7648,7764,7928,8120,8189,8421,8566,8892,8972,9010,9127,9172,9304,9399,9740,9762,9956,10058,10651,10708,10769,11106,11149,11221,11518,11588,11603,11648,11683,12116,12279,12520,12747,12888,12988,13062,13107,13171,13242,13309,13364,13564,13666,13680,13754,13865,13915,13961,14680,14989,15835,16060,17092,17642,17928,17985,18104,18180,18236,18454,18563,18980,19096,19123,19133,19281,20000,20075,20543,20608,20777,21052,21173,21575,22043,22192,22234,22472,23439,23671,23902,24539,24640,24774,24873,24969,25181,25399,25521,25704,25946,26059,26080,26463,26572,26586,27263,27330,27483,27490,27500,27549,27691,27695,28182,28275,28373,29119,29154,29619,29736,29879,29906,30035,30154,30248,30306,30475,30871,31720,31745,32180,32219,32344,32408,32610,33082,33119,33457,33473,33672,34237,34671,34778,34869,34882,34984,35195,35690,35809,35926,35957,36017,36057,36432,36481,36569,36695,37286,37668,37683,37733,38274,38574,38683,38828,38886,38909,39137,39241,39302,39340,39377,39492,39591,39650,39714,39912,40226,40541,41677,41843,41886,42060,42354,42793,43115,43193,43728,43974,44851,45220,46979,48235,48510,48528,48652,49409,49437,49474,49496,49627,49720,50034,50126,50466,50511,50527,50544,50553,50585,50642,50693,50929,50955,51010,51202,51250,51301,51411,51545,51556,51952,52143,52229,52547,52747,52749,53292,53997,54375,54564,54590,54709,54898,55133,57469,57840,58190,58366,58441,58727,59064,59743,59855,60213,60396,60653,60822,61196,63737,65031,65426,66038,66255,66542,66635,66802,66855,67594,67758,68157,68309,68626,68807,69514,69729,70174,70288,70448,70606,70755,70902,71268,71319,71486,71526,71608,71774,71813,71879,72155,72243,72400,72476,72527,72723,73030,73189,73325,73449,73471,73619,73682,74219,74229,74524,74599,74645,74920,74977,75393,75444,75485,75765,76287],"augmented":[2937,2958,11686,21630,23130,31049,68756,75367,76094],"#0000a0ff":[49862],"border_radius":[63236],"skills":[33763],"criteria":[4354,9440,12797,13599,20415,22229,27100,31601,31613,32755,33703,40843,41678,48874,49679,51405,53243,53921,54814,71196,71300,71526,73205],"asset'":[40469],"checkouts":[72402],"pixelstopoints":[59682],"desiredformat":[48749],"erroneous":[53452],"busy":[52640],"rgba32i":[8467],"operating":[220,391,661,1094,1243,1397,1762,1821,1855,9121,11669,11740,19364,25031,25672,25738,25826,25865,25904,26545,27648,27764,28613,33075,33444,34639,34645,36205,37505,40805,41305,48221,50167,52528,52706,54551,57808,57994,58381,60764,66564,66895,68915,69156,69696,69790,69857,69893,70176,70275,70510,70775,70926,72214,72384,72730,72786,73604,74581,74996,75309,75393],"isvalidfolder":[19478],"editor”":[68636],"prelinkall":[40612],"setfullscreen":[74038],"unitymixedcallstack":[74551],"subdivide":[10237,22142,52229],"bindproperty":[55068,55367,55573,56254,59601],"structure":[281,478,952,991,1100,1229,1960,2216,2238,2614,3259,3520,3870,4217,4793,4903,5094,5189,5267,5845,5964,6116,6572,7831,8907,10012,10575,12154,14244,17169,18054,18481,18585,18659,18662,18712,18757,18925,19340,19354,21422,21592,21640,22066,22482,23257,23780,25215,25311,25524,25833,26108,26707,27169,28677,28921,29391,29588,29891,30840,31708,32925,33424,33715,33782,34188,34237,35622,36041,36187,36695,36736,37227,37399,38437,39887,40441,41869,42325,44883,45177,45390,45694,46295,46721,46873,47905,48983,49751,52179,52223,52242,52776,54746,55621,56039,56674,57515,57628,59269,59554,59904,61950,62742,64384,65512,65683,65686,65724,65750,65793,65912,65966,66497,66815,66839,66902,68281,68601,68722,68884,69120,69704,69761,69797,71408,71762,71898,72032,73986,75389,75540,75794,75874],"uitoolkitexamples":[54926,54973,55079,55179,55324,55383,56136,56232,56290,56357,56455,56606,56751],"numberofprefabstocreate":[13321],"fluid":[1996,2179,7998,11459,21148,22852,50941],"initiates":[48683,67073],"begingroup":[24299,59599],"zipper":[5262],"#303030":[63273],"usewebsockets":[11215,73685],"processes":[434,931,962,1031,2463,3346,3680,3728,3781,3842,5186,7434,7451,8550,8963,10569,11606,14845,18001,18309,19129,19332,19344,19358,19372,21203,21343,21687,22810,23640,25176,26482,27052,27172,27694,28584,31624,32182,33478,34237,35037,35266,35747,35894,36330,38331,39167,41843,44839,49728,50056,52524,52584,58015,66059,66467,70763,71774,71813,71904,73312,73482,73607,73924,74512,74581,74748,75445],"terrainmap":[68883,69119],"caustics_low":[42978],"cracks":[49477],"listviewexample":[56989],"splitpath":[57475],"setuplist":[55088],"spells":[31721,42792],"leaning":[2140,6264,7927],"alloc_default_main":[29175],"validtargets":[51553,51611],"probeset":[71825],"alpha":[1557,3500,6493,8131,9898,11764,12840,13724,13768,13797,13911,14135,14297,14322,14794,14860,18260,18343,20724,21730,23320,25251,27130,29546,31379,31760,31765,31913,32109,32395,32920,34993,36454,37802,39669,39686,39836,39974,40333,40748,42243,42264,42440,42467,42515,42521,42547,42670,42793,42827,42838,42849,42870,42878,42896,42924,43565,43653,43754,43850,44113,44345,45276,45583,45721,46480,46564,46730,47060,47752,48510,48683,49470,49511,49570,49617,49630,49850,50401,50850,50901,57056,59508,62011,64468,67264,70839,72717,72721,72753,74208],"expense":[7486,12865,14560,18224,26049,26056,40589,73171],"worldanchor":[15233],"quick":[78,1975,2440,2543,3889,3950,3998,4035,4552,4628,5262,6832,7929,8598,9335,11160,14123,17384,18676,24051,24640,29594,35881,36172,41348,41433,44377,49728,50642,54823,62019,66332,66644,71364,71793,71904,74137],"unity_display_orientation_pretransform_0":[73003],"diverse":[25204,32233],"physics2draycaster":[39697],"primarybuttonstate":[76255],"rec2020":[34288,34501],"switch":[14,69,222,548,2215,2261,2310,2372,2459,2772,3668,3695,3908,3953,5080,5713,5826,6318,6346,6418,6464,6841,6858,7178,7830,11775,12474,12889,13375,14717,16564,17092,18143,19412,20061,20556,21525,22030,22476,23268,23449,24121,25095,25597,27137,27520,27666,28005,28153,28331,28404,28874,29863,29955,30251,30833,32190,32702,33842,34260,34341,34467,34799,35082,35363,35714,36066,36342,36473,36660,36715,37060,37775,38269,39332,40069,40091,40291,41090,41749,41885,42969,43215,45443,48683,49232,49579,49642,49732,50179,51190,51282,51403,51661,52417,52682,52766,53260,55226,57041,57288,58163,59895,61747,63068,65369,66342,66910,68607,68742,68819,69051,70963,71284,71319,71491,72503,72764,73008,73156,73486,74619,74761,74896,75133,75197,75835,76166],"supportstexturewrapmirroronce":[19758],"scrollto":[59691],"‘inverse":[26919],"hk":[53614],"shift+b":[51287],"invisible":[8086,9337,10002,15816,15831,18260,18591,21353,22203,23053,25285,27088,31758,37690,39672,43128,48188,48536,48546,49569,59854,63112,66183],"one'":[4810],"borderradius":[59625],"agreement":[4170,4445,16043,17030],"good":[234,1904,2776,2958,3411,3472,4628,4853,4997,6150,6439,6811,7396,7429,7496,7667,7981,8197,8834,9154,9397,9904,9964,10055,10737,11335,12013,13220,15839,17925,18364,18511,18672,18717,18822,20397,21100,22728,23555,24906,24923,25292,25849,26041,26081,26510,26967,27520,29360,29835,30180,30241,30664,33155,34890,35711,36627,37614,37740,38293,38332,38413,38516,38660,42106,42365,42456,43603,44079,45565,45721,47310,48594,48720,49425,49503,49518,49638,50068,50412,50579,52080,52597,53026,54713,57286,58407,58727,60638,66781,68546,70902,71772,71872,72663],"5px":[56863,57367,61465,62032,62474],"predispatch":[57962],"skeleton's":[18062],"inotifyvaluechanged":[54918,55497,55570,55726,56671,64653],"protocols":[18818,70598,71255,73687],"eyetextureresolutionscale":[68805],"noshadowmask":[46795],"defaultrotate":[62709],"guicontent":[20946,23852,26733,30604,40495,49959,51585,52344,55389,55684,55764,55837,56007,56238,56296,56364,56460,56823,58243,59044,60448,60584,60736,60863,61216,61699,62144,62375,62521,62699],"oscillating":[8575,13665],"forward":[362,1031,2027,6062,6285,6756,6837,7014,8024,8579,8610,9381,9462,9830,9901,12880,14957,17118,18224,20427,21162,21232,22219,22499,23289,23649,24511,24598,25581,25622,26922,29735,30143,30355,32115,32433,35862,36491,37283,37687,37797,38289,38347,38380,38418,38493,38661,39266,41781,42361,42392,43203,43224,43890,44015,45189,45588,46063,46417,46515,46529,46717,47105,47237,48344,49619,51962,52485,55894,60511,61470,66721,69771,69812,70166,70772,71571,71806,72299,72752,73438,73486,75545],"interpolators15":[45480],"offrotation":[76270],"boxing":[33289,36785,37261],"0s":[62847],"caves":[50509,71882],"r16g16b16a16_sfloat":[8448],"getversion":[48691],"donus":[32551],"getsummaryofmetrics":[4681],"gradient":[8325,10108,10214,14576,20711,26863,27506,31742,31758,31765,32742,32869,37925,47142,55522,55856,56758,56997,58407,58662,62018,62054,64674,68860,69069,71601],"leaves":[5033,5655,7496,10715,11467,14870,20569,22709,30385,32650,32723,43592,45638,45784,48290,49569,50601,52179,52194,52222,53376,60368,60772,64102,65687,69975,71216,71424,71876,72732,73254,74522],"toggle_checkmark":[63400],"yoga":[59828,64155],"graph":[1945,2209,2324,2437,5040,5856,6896,6936,7700,7795,7936,8811,14730,14781,14924,14927,14933,14938,17535,17748,20732,21332,22462,27823,28961,30993,31103,31666,32854,33400,33902,34157,34192,35266,37504,37900,40146,41803,41934,42019,42027,42121,42322,42956,43040,43080,43086,45187,46141,46508,46532,46715,46822,48150,49154,49371,49643,50018,50071,50077,50143,50390,50699,52037,53740,60679,65902,70211,70236,70296,72461,72818,74218,74338,75182,75453],"lyd":[53672],"additional":[76,78,135,191,241,249,280,383,402,420,425,489,498,522,533,542,775,840,892,953,1092,1105,1115,1132,1147,1176,1188,1233,1241,1272,1289,1297,1309,1313,1368,1391,1400,1406,1485,1564,1674,1727,1818,1829,1844,1853,1860,1880,1912,2056,2131,2405,2415,2768,2977,3256,3414,3462,3574,3789,3839,4148,4356,4379,4434,4733,4879,5049,5169,5339,5966,6037,6116,6311,6390,6397,6471,6542,6929,7249,7612,7654,7885,7971,8175,8272,8382,8419,8775,9020,9040,9109,9192,9201,9323,9579,9755,9887,9970,10003,10254,10440,10502,10585,10620,11464,11590,11631,11875,12221,12358,12506,12730,13189,13206,13269,13471,13581,13698,13704,13883,13940,14337,14491,14510,14589,14714,15016,15829,15835,16227,17591,17642,17952,18251,18341,18391,18409,18428,18440,18525,18660,18751,18820,18900,18926,19006,19053,19125,19131,19163,19239,19272,19282,19349,19362,19452,19637,20112,20163,20178,20218,20425,20725,20893,21026,21152,21164,21954,22116,23181,23275,23522,23964,24470,24500,24515,24635,24761,25149,25715,25736,25754,25761,25812,25817,25824,25888,25918,26086,26240,26261,26372,26439,26492,26578,26590,26620,26625,26643,26649,26660,26691,26702,26859,26949,27118,27187,27214,27572,27635,27639,27676,27932,28105,28129,28165,28253,28279,28315,28319,28347,28368,28559,28668,28758,28981,29016,29087,29128,29192,29367,29391,29445,29480,29731,29834,29888,29896,30165,30225,30244,30276,30443,30475,30502,30505,30661,30835,31012,31608,31622,31650,32221,32637,32704,32813,32934,33081,33416,33433,33633,33770,33875,33881,33883,34164,34205,34292,34425,34523,34566,34698,34765,34838,34942,35340,35395,35498,35677,36199,36476,36713,36747,36787,36806,36971,37219,37262,37300,37310,37658,37730,38254,38270,38309,38391,38529,38539,38571,38601,38635,38649,38683,39244,39344,39588,39647,39828,39937,40142,40260,40555,40691,41317,41449,41647,41742,41990,42243,42255,42331,42364,42788,44218,44301,44978,45151,45715,46779,47419,48227,48267,48380,48617,48638,48907,48940,49306,49337,49560,49663,49706,49720,49733,49803,50056,50087,50142,50170,50319,50500,50516,50630,50647,50673,50925,51123,51163,51560,51588,51609,51865,52083,52407,52544,52627,52724,52739,52757,52831,52871,53131,53307,53714,53777,54096,54206,54238,54394,54450,54500,54541,54556,54597,54606,54630,54668,54685,54707,54739,54790,54843,54867,54890,54904,54958,55057,55156,55228,55304,55364,55409,55493,55512,55543,55555,55636,55892,56038,56094,56112,56207,56268,56322,56387,56471,56517,56665,56731,56794,56978,57119,57284,57301,57330,57553,57717,57806,57809,57928,57992,58016,58108,58111,58187,58272,58367,58378,58460,58575,58649,58725,58731,59021,59499,59535,59717,59752,59825,59868,60134,60151,60205,60346,60538,60570,60612,60667,60759,60761,60976,61177,61190,61297,61329,61440,61449,61517,61560,61586,61744,61899,61918,61949,61962,61974,61983,62000,62045,62106,62328,62486,62579,62638,62736,62834,63062,63103,63120,63129,63224,63503,63656,63694,63800,63839,63855,63873,63888,63909,63931,63952,63987,64008,64021,64039,64202,64308,64371,64383,64395,64410,64425,64441,64450,64485,64508,64519,64560,64583,64607,64628,64670,64691,64697,64726,64742,64756,64791,64805,64820,64838,64855,64873,64912,64927,64952,64969,64984,64996,65020,65027,65045,65053,65077,65099,65114,65129,65143,65161,65216,65240,65264,65283,65291,65308,65359,65370,65404,65429,65440,65455,65470,65486,65498,65509,65535,65549,65564,65581,65601,65621,65642,65662,65679,65685,65721,65731,65738,65845,65894,66100,66119,66455,66552,66627,66833,66884,66898,66922,66965,67039,67088,67180,67555,67560,67592,67954,68895,69133,69691,69729,69858,69901,70092,70124,70172,70180,70191,70230,70286,70351,70698,70838,70934,70938,71117,71281,71352,71414,71510,71556,71659,71932,72009,72061,72075,72095,72108,72117,72124,72134,72146,72170,72205,72221,72483,72706,72784,72880,72986,73081,73154,73172,73284,73302,73353,73380,73449,73497,73637,73663,73691,74119,74544,74616,74751,74754,74784,74812,74881,74890,74974,74991,75034,75077,75122,75132,75217,75223,75265,75310,75378,75388,75459,75678,76156],"lockbutton":[63459],"isn’t":[697,2772,3306,6209,10127,10547,13903,14842,18236,20194,20233,21087,22165,23618,26245,26569,27928,28153,29364,30873,33381,34207,36069,36346,36554,41921,51788,67482,68806,69769,69810,71392,71508],"shadervariantcollections":[3506],"tablet":[715,1588,12588,50210,53286],"tilepaletteelement":[51114],"lasts":[10368,51999,62643],"listenerpos_z":[5235],"allclients":[10994],"programming":[1990,2216,2235,4547,5882,6050,7179,10938,13961,18358,21156,23181,29439,33087,37537,37708,39856,41192,44231,45597,45838,66200,66336,66922,68015,72290],"prometheus":[66648],"sink":[8004,31719],"menubar":[9554],"onpromotionalpurchase":[67492],"threadawaketimeout":[66325],"setchecked":[68846,69091],"begincapturetofile":[74950],"targetobject":[48415,56190],"add_header":[73719],"estimations":[6844],"gone":[62043],"artifactgarbagecollection":[25066],"nowrap":[59701,64093],"draganddropeventbase":[57561],"zar":[53678],"shift+command":[34816],"d_ol_minus":[63463],"0x065c3960":[74556],"wwwform":[68376],"“sd”":[2842],"candidate":[6836,11604,18511,30184,31379,31614,35051,38660,39614,71163,71872],"cullingcontext":[5486,5631,5753,5797],"considerable":[6031,37712,37724,52057],"sensitive":[223,5490,5684,5757,5801,6118,9792,12803,25455,25672,27509,29707,30493,33264,38718,44701,49738,50185,53735,53906,54821,60804,63860,67758,73248],"annotations":[3006,28465,30865,35029,36480],"jobworker":[1794],"assetstore_cache_path":[69769],"downscaled":[73248],"onafterdeserialize":[18028,39902],"http":[3342,4278,14843,16771,16803,18258,20194,49744,51458,52542,52599,53103,58603,61275,61635,62428,62547,66645,68275,68313,68343,68372,68429,68458,70031,70360,70606,70829,72477,73025,73208,73319,73496,73625,73673,73709,74519],"rendererpriority":[13486],"toolbar2":[23948],"setpropertyblock":[23375,50132],"slowing":[25083,33478,36465,52010],"meshdataallocator_allocatemesh":[75809],"3”":[40966],"transactionid":[67290,67606,67792],"registerstore":[67572],"initialvalues":[49931],"unintentional":[12973],"visibly":[23444,37684,38515],"refining":[18991,48662],"pln":[53662],"maxcomputeworkgroupsizex":[19770],"imovehandler":[49901],"even":[69,205,715,1416,1589,1762,1895,2131,2191,2215,2334,2990,3249,3340,3569,3895,4065,4298,4574,4713,4776,4865,4959,5222,6024,6128,6765,6833,7061,7158,7178,7305,7484,7765,7771,8117,8188,8222,8302,8439,8569,9138,9224,9490,9773,10028,10085,11011,11546,12202,12949,13056,13465,13904,14289,14338,14794,15838,18050,18233,18516,18575,18748,18795,19045,19161,20140,20260,20420,20615,20811,21053,21460,22127,22186,22389,23439,24521,24728,24773,25162,25350,25462,25669,26044,26084,26482,26510,26790,26954,27510,27514,27560,27678,27711,28586,28874,29091,29153,29551,29732,29895,29915,30341,31010,31642,31838,32115,32196,32255,32412,32727,32852,33094,33437,33668,34361,34594,35228,35692,35809,36100,36199,36334,36497,37657,37744,38354,38841,39141,39306,39627,39758,39797,39914,40274,40529,40643,40706,41174,41845,42134,42812,43174,43591,45042,45564,46772,46826,47311,48621,49158,49169,49484,49555,49628,50011,50288,50540,50630,50652,50901,50932,51030,52012,52477,52530,54711,55727,55923,57836,58559,58651,59085,59729,60157,60822,61323,63833,66197,66498,66721,67570,67601,69333,69439,69693,69975,70817,71006,71018,71323,71441,71872,72372,72403,72643,72941,73270,74551,75079,75785],"conserves":[9515],"s++":[27419],"hqxmcdigrto37dspgrbx08gjlhfhus7c+hyosodnjme3dh":[69913],"horizobl":[30158],"fluctuations":[52040],"cy":[47646],"decisions":[7970,8174,8271,8389,8774,9039,12733,14509,17206,18611,21002,25044,35603,36463,51155,51245,67800],"iqd":[53662],"iscrollhandler":[49897],"#1":[12991],"spriteatlasimporter":[15338],"kemar":[5183],"hitches":[42101,74147],"exports":[952,1007,1746,3889,21032,30001,53053],"compatilibity":[12369,34308,34513],"cardboard":[75,68788],"gettexture":[68359],"focuscontroller":[59653,61323],"maintargetguid":[49805],"acknowledged":[67153],"signs":[9279,13995,24984,28114,28248,53829,66767,70438],"custombutton":[24081],"floatvalue3":[52353],"usekeychain":[70073,70549],"monochrome":[29555],"modelimportermeshcompression":[5969,29373],"forwards":[1031,32849,39357,72331],"finger":[18503,19987,20460,26563,29136,29586,39260,60775,72940,75576,76095],"jpgsearches":[41467],"highresolution":[9974],"#191919":[63255],"customdependencies":[19514],"lightingbasic":[6908],"iunityprofiler":[27939],"newvalue":[29659,30615,55722,56514,56626,57025,58647,61154,61826,64545,64621,64704,65066,65091,65468,65484],"resulting":[4964,6209,6378,6443,6815,7036,7496,8080,9180,10091,10130,10572,11606,13096,13453,13732,14020,14080,14347,14812,15836,18597,21029,21536,25106,25184,26360,26461,26922,26987,27109,27549,27854,28182,33504,33582,35876,38850,41199,43739,44838,45284,47028,47368,48374,49103,52642,66570,67152,68532,71040,71687,71768,72323,72528,72877,73393,74645],"kformatr8g8b8a8_srgb":[50112],"origins":[10013],"load":[410,475,518,616,1111,1133,1156,1180,1791,2872,3247,3301,3307,3344,3348,3468,3503,3541,3569,3611,3721,3955,4521,4652,4909,5193,5330,5351,5601,5721,5818,5948,6044,6138,7475,7839,9075,9928,11175,11403,11824,12206,12279,12359,12902,13826,13966,14445,14915,15737,16619,19095,19138,19499,20243,21304,21937,21986,23555,25881,25952,26597,26665,26706,27124,27678,27694,28345,28452,29036,29212,29619,29929,30023,30207,30269,30292,30369,31602,33477,33620,34293,34408,34503,34588,34982,35364,35372,35779,35878,35968,36343,36498,37712,38278,38850,39172,39905,41718,41795,41868,41911,42209,42364,42941,46783,47098,48180,48533,50007,50056,50067,50150,50534,50661,50956,50996,51975,52092,52586,54589,54878,54895,55011,57620,57694,58792,59670,60136,60154,61575,62785,63138,64182,65694,66119,66253,66811,66836,66867,66892,66912,67256,68645,68956,69141,69679,69724,70070,70101,70137,70376,70810,70867,70936,71244,71315,71323,71468,71533,72140,72201,72283,73021,73078,73183,73225,73302,73395,73639,73690,73987,74253,74549,74827,75022,75880,75946],"simplewebxr":[75311],"diverting":[26042],"\\appdata\\roaming\\unityhub\\logs\\info":[27811],"_texturesampleadd":[47154],"transitionrun":[62413],"aligns":[315,6959,11759,50376,58387,73472,75108],"viewable":[6760,22746,24002],"comparefunction":[45883],"transcoded":[14802,72678,72736],"tank":[35416,35481,35530,35615,55243,56410],"#adff2f":[63562],"situation":[229,248,3439,3719,3859,5770,10097,13818,18268,26112,26245,26448,27532,29714,31856,33382,33415,33437,34197,40055,42106,44848,49518,50321,52010,52250,57924,68853,69062,71879],"predictably":[20343],"hue":[28886,29551,34867,49535,50062],"insights":[17206,22333],"get_rigidbody":[2739],"tint":[2307,6542,8695,9213,9855,10147,13912,14475,27331,32937,34876,35054,37688,37840,39825,42703,42724,42746,42770,45142,46396,49490,49570,49627,50381,50472,51826,58471,61138,61938,63342,64115,64748,72756],"dynamiclightmap_on":[42171,44577,46698],"assetdatabaseioexample":[3620],"notauthenticated":[52798],"upfront":[41836],"ol_plus":[63467],"\\u00f1f60a":[61948],"customstyleresolvedevent":[56771,60947,61053],"kunityxrinputfeatureusagetriggerbutton":[75650],"character’s":[10560,11439,18187,71877],"reimports":[3581,3843,5938,25108,40502,40804,41304],"pack'":[482],"sky's":[42772],"maintains":[1469,3296,3593,3870,4217,5987,9015,9190,11624,13187,13209,18282,35130,42056,43591,48371,69729,69756,69792,70227,72840],"executed":[1071,2501,3767,6028,6194,10722,19655,21344,23788,23892,24467,26015,26302,28485,29428,29664,30910,33395,33495,34161,35728,43209,47307,55920,66928,66951,69660,75936],"transparently":[18503,43239],"ar":[2936,2957,16843,17785,17835,17912,18039,21630,23129,25340,31038,31406,38185,43460,66811,66836,66870,66889,66903,68746,71376,72906,74377,75037,75118,75137,75161,75215,75221,75284,75290,75367,75393],"curvefield":[55419,55520,59615,64488],"loadstate":[7494,73078],"multidimensional":[6106,39872],"extended":[5265,8225,10937,12666,14543,14956,23049,25347,25696,25763,35007,41389,43959,44471,52097,52351,52727,58450,66994,67061,67107,67341,67561,67706,70597,71255],"prefetching":[50150],"upside":[1579,11760,14799,20072,25872,39255,44835],"logarithmically":[38369],"untextured":[47758],"dropdownfield":[55463,64527,65081,65391],"yesalso":[37983],"#474747":[63322],"gettriggerparticles":[32767],"colorchangertransitionclass":[62368],"yesdisabled":[38225],"prefabtopool":[33109],"broadcasting":[9398,11048,66230],"localtoworld":[56118,56969],"“f”":[10513],"was":[457,526,1935,1981,2179,2249,3344,3497,3672,3729,3780,3867,4392,4480,5041,5911,6079,6154,6688,6723,6818,6984,7113,7496,9113,9261,9859,10363,11007,11078,11312,12105,13076,18081,18375,20315,20403,20606,20963,21440,21528,21673,21710,22490,23629,24031,24573,24832,24906,25043,25138,25229,25859,25941,26253,26302,26954,27210,27468,27924,29181,29599,29769,29790,29922,30134,31857,32264,32849,33421,33498,33842,33893,34042,34599,34919,35354,35643,35714,35942,36081,36240,36336,36540,38661,38846,39141,39516,40034,40124,40288,42053,42356,45403,47370,48683,48965,49033,49526,51760,51794,52034,52094,52108,52251,52651,52828,52874,53127,53461,53780,54264,55625,56313,57235,57824,58644,60508,61542,61741,62414,63132,66172,66700,66824,67358,67633,67729,68528,68545,68607,68870,69104,69301,69388,69407,70285,70295,70359,70781,71055,71127,71256,71387,72189,72438,74186,74335,74698,75599,75765,75984],"heapf64":[73556],"toolkits":[68024,68783],"#b6b6b6":[63394],"ijobparallelfor":[26267,26361,26494],"collider2d’s":[209],"50mm":[9231],"persists":[11111,31838,39141,49359,52361,52674,66258],"pascal":[56693],"m_clickcount":[61702],"ipurchasereceipt":[67789],"setupbuttonhandler":[61724],"multiview":[1672,38184,43458,68766,74394],"ghost":[18233,57584],"transparency":[131,1568,8131,9440,10360,14860,16075,20724,25279,29554,31747,33716,41765,42285,42876,42898,43597,43777,45087,45634,46766,48364,48516,48874,49466,49567,49596,49850,51166,51217,51363,59508,64468,72610,72717,72720,74290],"displaylifecyclehandler":[75270,75924],"glslinc":[6708,44364],"physic":[11503,11650,14960,15844,15898,23073,29804],"primitiveid":[8953],"“a”":[33146],"computeshader":[8426,15089,42054],"backfacing":[39530],"configuration":[878,986,1027,1212,1253,1333,1571,1760,2002,2772,2944,3227,4152,4737,6121,6430,7217,7765,7824,8185,8233,8355,8558,8782,8787,9113,9689,11112,11606,11848,12160,12362,12542,12834,12870,14098,15859,17312,17326,18061,18819,19184,19341,19356,19443,20101,20220,21025,21598,23181,23480,24392,24916,24929,24956,25345,25525,25679,25845,25993,26072,26441,26674,27567,27621,27644,28070,28103,28265,28322,28356,28886,29821,30332,30848,31083,31605,32925,33386,33401,33472,33593,34301,34381,34508,34749,34857,35191,37559,38681,39097,41603,41820,44053,44313,44430,48121,48940,49447,50157,50170,52726,52871,53435,53777,54213,66605,66902,66922,66962,67003,67211,67294,67553,67554,67581,67926,69038,69291,69303,69372,69409,69785,69809,69903,69987,70091,70120,70166,70181,70356,70714,70868,70978,72870,72905,73153,73178,73212,73251,73308,73323,73706,73908,74324,74783,74841,74852,75080,75107,75140,76090],"distancecutoffsquared":[27389],"events":[680,724,1890,1910,2959,6944,7067,7950,8111,8139,8152,9337,10568,10692,10823,10984,11617,11678,11903,12627,13640,14557,15862,15884,16487,17092,17206,17835,17972,17999,18069,18256,18357,19076,19986,21002,21154,21180,21322,21684,21842,21956,22078,22332,25345,27939,28051,28062,29141,29269,29421,29664,29702,29924,30001,30661,30906,31105,32658,32767,33498,35736,35997,36073,36305,36531,37354,37536,37627,38989,39209,39345,39391,39485,39517,39522,39632,39752,39775,39990,40000,40079,40103,40164,40643,43320,49646,49656,49884,52877,53782,54156,55637,55712,55804,55893,55972,56072,56689,56806,57295,57335,57554,57805,57807,57851,57971,57993,58017,58173,58188,59539,59554,59718,59731,59814,60209,60356,60494,60539,60613,60760,60987,61484,61756,62116,62340,62502,62584,62649,62767,63112,64652,64702,65334,65368,65699,65887,65922,66412,66822,66853,66927,67136,67293,67453,67903,68593,69619,73285,73485,74202,74707,75480,76222],"industry":[3451,5820,6951,18358,28605,66909],"geomerics'":[27468],"analysed":[49541],"#non":[32262],"apple's":[2764,10770,19348,19361,25751,25826,25898,25920,28160,28306,34377,50197,67039,67423,67708,67762],"pipe":[12811,27599,50186,66706],"gl_nv_blend_equation_advanced":[43850],"ogles":[25998],"services":[244,427,541,577,581,937,1039,1243,1315,1325,1557,4314,4548,11040,16771,16803,17045,17214,17220,17248,17254,17276,17282,17296,17312,17334,17342,17356,17378,17392,17398,17418,17424,17435,17450,17482,17496,17514,17532,18681,18818,19639,23192,25751,25924,28115,30415,30452,30467,31371,31398,33885,41696,49770,50344,52087,52104,52615,52793,52878,52939,53183,53309,53734,53774,66420,66690,66996,67663,67765,67893,67978,68042,68071,70606,71319,71526,71897,74358],"clientid":[52778],"attaches":[8500,8999,22540,26563,28452,32754,57210,58922,59481,60564,68284,68324,68351,68383,68440],"tangents":[311,2358,5970,6622,10273,10524,14610,20568,21464,21711,25212,29340,32066,32738,47480,71644],"vendor":[2812,3502,12671,23439,50170,52481,72672],"maxcubemapsize":[19762],"mediaplayer":[12666],"shuts":[11178,31642,33075],"mandatory":[2584,4241,8926,32064,39494,52457,52751,52789,53280,64182,66111,74423,74581],"lifecycle_shutdown":[75275,75929],"devicename":[395],"enumerate":[12643,59056,63220],"must":[80,161,222,249,346,405,422,427,475,506,517,541,613,631,661,695,717,810,881,890,897,938,1003,1042,1118,1135,1181,1285,1416,1483,1495,1601,1679,1735,1955,2179,2194,2286,2376,2464,2535,2635,2702,2768,2958,3039,3247,3292,3442,3453,3463,3489,3585,3694,3828,3858,4131,4245,4356,4386,4391,4468,4565,4654,4738,4832,4871,5098,5258,5318,5354,5498,5716,5763,5961,5986,6068,6121,6378,6407,7330,7364,7617,7829,7930,8104,8397,8419,8547,8650,8904,9088,9154,9218,9242,9262,9348,9596,9654,9938,10012,10054,10118,10587,10744,10804,11071,11150,11192,11264,11285,11299,11329,11543,11605,11818,12097,12285,12353,12442,12721,12804,12833,12988,13076,13154,13344,13478,13580,14581,14734,14790,14858,15852,17978,18050,18077,18217,18255,18375,18449,18550,18623,18747,18822,19026,19072,19269,19572,19620,19675,20006,20140,20196,20237,20395,20425,20570,20807,20869,20972,21031,21164,21192,21221,21575,21859,21964,22070,22836,23263,23398,23430,23555,23912,24095,24467,24505,24601,24621,24753,25141,25194,25429,25462,25672,25734,25747,25904,25928,26112,26148,26242,26286,26374,26448,26507,26665,26791,26908,26962,27041,27100,27125,27210,27294,27320,27333,27523,27699,27749,27758,27785,27813,28052,28100,28186,28281,28317,28448,28509,28838,28875,28951,29053,29173,29342,29701,29721,29764,29855,29893,29907,29926,30008,30180,30207,30269,30345,30396,30467,30500,30528,30905,31613,31650,31868,32312,32478,32705,32726,32883,33082,33087,33401,33425,33463,33585,33619,33885,33909,34171,34175,34218,34284,34372,34496,34594,34668,34693,35403,35476,35505,35778,35802,35925,36071,36330,36541,36679,36754,36886,36986,37688,37693,38277,38347,38403,38477,38575,38687,38989,39027,39208,39260,39492,39594,39603,39681,39789,39827,39856,39969,40097,40208,40474,40555,40789,41337,41364,41697,41796,41992,42028,42066,42128,42611,43034,43127,43165,43172,43414,43476,43709,43800,43986,44306,44363,44439,44599,44678,44875,45058,45267,45521,45621,45848,46370,46755,47878,47935,48170,48528,48701,48909,48979,49179,49319,49547,49679,49737,49823,49907,50007,50041,50138,50144,50186,50321,50394,50479,50520,50541,50602,50726,51041,51126,51398,51527,51552,51785,51850,52103,52248,52487,52501,52744,52757,52843,52876,52953,53147,53303,53686,53713,53954,54012,54532,54673,54757,54794,55030,55576,55732,56611,56667,56837,57625,57680,57836,57890,58015,58033,58146,58375,58448,58673,58776,59033,59481,59554,59750,60136,60541,60610,61189,61323,61456,61540,61568,61658,61925,62025,62054,62115,62772,62839,63069,63138,63724,63866,63922,64174,64697,64747,65051,65132,65525,65719,65865,65923,66111,66233,66363,66375,66563,66818,66857,67039,67088,67161,67264,67280,67293,67351,67572,67597,67626,67673,67769,67894,68160,68379,68498,68594,68720,69023,69141,69654,69713,69789,69856,69861,69969,69987,70175,70419,70654,70814,70932,71010,71396,71665,71869,71969,72189,72339,72424,72466,72492,72616,72737,72792,72904,72920,73022,73093,73175,73211,73241,73302,73312,73426,73454,73496,73563,73659,73670,73691,73775,74044,74391,74535,74603,74639,74851,74865,74895,74949,74984,75031,75068,75093,75155,75226,75251,75321,75451,75511,75819,75910,76086,76166,76332],"keyframing":[74191],"cola":[33000],"lookat":[2173,20776,21166,21487],"angleaxis":[12979,37291],"istoreconfiguration":[67555],"ps":[32787,50200,72955,75306],"secondary2daxisclick":[76107],"tire_property":[58978],"seconds":[2303,4574,5288,7139,7718,7739,8858,8989,9982,11047,11188,11244,11274,11543,11600,12304,12513,14560,14594,14729,25062,26895,28639,31643,31720,31791,32155,36018,36625,39368,39837,40010,41960,47095,48339,50058,51953,60788,62611,62643,63040,66679,67507,71634,73060,74725,76269],"directx":[5701,8403,14328,19046,19299,20448,21942,23550,23611,25265,30292,34206,36161,37767,38275,41848,42210,43476,44303,44904,45010,45435,45474,45613,46815,46819,48164,50089,68926,69169,71745,73689,74710],"identifying":[1166,1769,9343,12151,21565,25083,30346,33298,35054,46040,50652,51584,63922,67334,75515],"endpoints":[11376,18819,70567,70983,71191,75474],"framerate":[2178,6139,12865,14557,18519,23077,26049,36031,37706,40538,52058,52480],"sed":[65174],"gles3":[11803,23587,30295,43850,44371,44919,45437],"vec3":[44369],"cataloges":[67155],"tangent":[306,2360,6623,7174,10524,11629,13829,14968,20423,20569,21553,21711,25229,29356,32918,41768,43697,43929,44366,46726,46848,47455,47910,49687],"enemies":[18296,18565,23020,66075],"indication":[18746,66795],"coloured":[14681],"conehandlecap":[22219],"service":[577,581,938,4011,4071,4181,4541,11039,12333,12671,17092,17240,17326,17342,17356,17474,22333,26096,28609,30416,52110,53777,54012,66230,66367,66373,66422,66635,66990,67041,67153,67647,67896,68043,70150,70519,70628,70952,73915],"loadmainassetatpath":[3611],"asn1":[67837],"innerx":[61140],"iskeywordenabled":[42084],"once":[222,1488,1589,1886,2022,2065,2247,2263,2281,2332,2387,2836,2896,2989,3247,3411,3521,3681,3769,3795,3912,3967,4242,4367,4397,4405,4449,4534,4639,5044,5083,5324,5944,6045,6192,6216,6293,7307,8845,9354,10268,10369,10742,11463,11589,11670,12419,12775,13075,13130,13214,13847,14578,14728,15024,16060,17062,17997,18061,18139,18373,18439,18993,20135,20260,20491,20546,20619,20638,20681,21154,21294,21305,21607,23690,24275,24468,24664,24755,24775,25198,25488,25615,25942,26259,26282,26296,26409,26461,26478,26496,26711,26932,27065,27303,27335,27491,27613,27738,28022,28392,28880,28963,29053,29098,29428,29834,29882,29891,30043,30411,30899,31727,31853,32155,32731,32864,33093,33401,33428,33480,33687,34778,35254,35782,35883,36011,36040,36352,36710,36753,37551,37709,37728,37877,38355,38674,38870,39141,39222,39256,39347,39472,39663,40083,40233,40500,41566,41694,42177,42360,43165,44363,44386,45036,45096,45194,45718,46576,47126,47422,48354,48665,48677,49556,49668,50073,50304,50629,50726,50934,51052,51124,51291,51897,51961,52252,52972,53081,53304,53687,54028,54435,54712,55633,57808,57866,58096,58410,59556,60137,61473,61935,63220,65049,65873,66012,66234,66375,66842,66965,67019,67169,67230,67526,67651,67755,67841,68157,68284,68624,69029,69282,69740,70011,70384,71338,71344,71949,72052,72299,72776,73631,73702,74177,74312,75509,75750,76200],"toolkit":[2967,16120,17832,18039,20766,20862,20917,21381,23241,31135,31486,35561,52238,54106,54306,54398,54511,54543,54605,54706,54738,54772,54848,55497,55545,55638,55753,55828,55938,56037,56063,56097,56532,56689,56797,57122,57529,57598,57614,57628,57805,57808,57852,57969,57994,58018,58027,58044,58127,58234,58421,58598,58651,58732,59001,59269,59529,59541,59548,59753,59828,59904,60209,60354,60394,60575,60635,60755,60762,61203,61309,61484,61523,61589,61591,61976,61990,62048,62134,62349,62506,62586,62654,62738,62836,63064,63104,63221,63696,63711,63737,63826,64082,64365,64774,64879,65051,65368,65733,65789,65869,65895,65958,68780,68903,69143,69310,69416,72946,74138,74241,75045,75071,75115,75213,75224,75320,75381],"deathtimer":[10946],"raw":[1234,5222,5413,5498,11298,13113,21112,23220,26138,35129,36042,36188,36563,37668,39591,39713,44359,49535,49742,50412,50491,54736,65991,67823,68129,68351,68412,68429,68513,71741,71973,73614],"+z":[8963,14254,42706],"observe":[11342,13228,23812,24058,25670,30202,33722,49577,54902,60646,72046],"android_crash_handler":[1045],"addpass":[46773],"aren’t":[690,701,8429,19130,19144,20192,21929,26119,26355,28488,30902,34594,35949,44896,46979,53075,66190,66461,68996,69247,70438,71391,74778],"skinnedmesh":[6242],"won't":[1039,2141,7645,8199,9311,11292,14707,20336,21552,24632,25960,26374,26646,27176,37744,38665,39913,42973,46370,46783,52493,54302,54718,55642,57822,57915,58015,60506,60822,61323,62611,62832,64174,64760,65211,66881,69372,69476,71062,72337,73030,74850,75673],"composed":[8386,13696,22296,30554,47249,53601],"gamecenter":[25731,30061],"aaa":[6838,16527,24598],"setnetworkconnectionclass":[11016],"v2":[3667,9106,16984,24506,38087,46952,48362,48555,48858,66555,68601,70767,74185,74399],"spritesby":[37365],"leveraging":[5898,17488],"ultra":[19314],"persist":[556,8254,9705,12673,12949,18315,20477,23181,32196,35139,39310,45050,49357,52248,66621,68899,69137],"chart’s":[35266,35369,35625,35903,35969,36023,36120,36174,36298,36435],"'hello'":[41219,59049],"inflating":[18230],"m_vertices":[33336],"holographic":[12511,50237,74698],"quality_medium":[43054],"assetpostprocessortester1":[68965,69212],"passoperation":[45863],"'unsafe'":[18540,19241,34427,34525],"k_counters":[35436,35484,35572],"casino":[53285],"int64":[28049],"enlighten":[30,6801,7898,9466,9875,9908,9993,10090,10654,12885,21054,22105,22124,22144,22763,26787,26809,26900,26947,27073,27113,27169,27307,27468,27749,27755,29550,35129,36118,36586,36640,37633,37790,42400,47810,49720,50440,68671,69349,69453,71814,72760],"pointercapturelost":[74733],"generators":[38677,40655],"incidentally":[45627],"properly":[176,715,2580,3253,3463,6056,6198,7619,9276,10591,11315,18058,18720,21302,21575,22530,24020,24670,24797,26168,26245,27813,28439,29891,34653,38850,39732,40620,44896,46370,47808,48380,48530,50227,51164,52903,53944,53999,54015,54898,59086,65211,66812,66857,66883,66913,70654,72510,73178,73248,73417,73810,74567,75622],"digitally":[613],"cannonball":[34932],"speedometer":[72337],"freeing":[33383,34492,73630],"320x480":[11789],"vr2":[50200,72955,75306],"carefully":[4170,10091,18058,33075,37724,42106,45474,52558],"almost":[4566,4772,6792,10082,20427,20438,25529,29091,29242,29551,30414,31008,31368,40174,45478,47752,49554,49594,51155,62371,64138,66193,68160,71906],"gently":[8570],"“unity":[66694,68636],"uxmlnamespace":[57316],"plays":[270,1957,2203,4865,7501,7615,7771,10770,11348,13805,14833,22592,27813,32863,33909,34943,35901,35999,58176,66363,72464,72609,73048,76320],"muted":[7776,36010,41322],"insight":[25980,35366,35684,36116],"getpreinitlibraryname":[75876],"togglename":[61739],"m_rightpane":[59137],"beware":[70955],"valve’s":[72904],"implicit":[7302,40063,56428,58855,62283,62980,75421],"assigned":[2003,2006,2249,2363,3306,3457,3484,3522,3855,3909,3957,6293,6321,6829,7145,7810,8782,8897,9453,9713,9932,10020,10702,10724,11077,11308,11533,11601,12303,12442,12817,13357,13384,13651,13807,13826,13904,14521,18025,19504,21385,21659,22263,22437,23677,24095,24721,25089,25434,25540,25634,26108,26249,26482,26788,26824,27923,30416,30443,30489,32106,32686,32724,32754,34184,34611,34884,35452,39489,39879,40474,40877,41689,41921,42777,43216,44619,45094,48181,49197,49471,49500,49510,49607,49630,50025,50288,50388,50988,51387,51836,51875,53756,54674,54816,55865,56636,61327,63846,63858,63940,64031,66170,66234,71143,71205,71862,73952,75617],"created":[65,532,1396,1471,1866,1930,1986,2174,2213,2221,2358,2383,2426,2609,2780,2959,3086,3256,3521,3628,3812,3868,3898,4182,4220,4338,4481,4520,4819,5068,5820,6063,6145,6793,7014,7395,7816,7839,8091,8104,8633,8761,9100,9134,9256,9416,9593,9776,10247,10378,10832,11110,11236,11244,11274,11413,11649,12609,12796,13150,13330,13357,13627,13771,14000,14215,17642,18017,18245,18362,18432,18902,18926,19063,19479,20787,20891,21221,21307,21395,21475,22015,22061,22122,22524,23629,24102,24167,24467,24535,24728,24895,24923,25092,25153,25546,25929,26226,26253,27525,27559,27923,28052,28114,28185,28457,28686,28724,28828,29695,29781,29861,30443,30531,31797,31857,32106,32141,32632,32637,33134,33428,33902,34164,34197,34206,34611,34637,34645,35322,35411,35779,36614,37585,37665,38370,38621,38638,38846,39208,39430,39493,40063,40211,40526,41100,41359,41609,41702,41723,41936,42027,43086,44272,44804,47375,48221,48252,48373,48590,48607,48674,48912,49021,49387,49638,49655,50584,50941,51088,51121,51262,51353,51612,51760,51842,52117,52174,52192,52251,52884,53460,53874,54430,54500,54651,54758,55363,55509,55828,56692,57208,57295,57706,58068,58234,58274,58618,58808,59038,61485,61616,61925,62022,62603,62717,62785,65049,65979,66083,66239,66381,66802,67030,67212,67516,67974,68130,68311,68602,68705,69004,69256,69377,69481,70077,70143,70195,70399,70917,71062,71408,71597,71724,71856,72110,72470,72946,73118,74012,74579,74738,74896,74980,75114,75405,75872],"refines":[36569],"“_maintex”":[45217],"us\\":[234],"compresswithlz4":[567,6375,6435,6479,28173,74636,74795],"unsubscribed":[6133],"favors":[12954],"createview":[35507],"appendindex":[36812],"'playableextensions’":[34163],"installation":[499,1331,1611,2194,2764,3230,6468,10733,11994,18671,19617,22101,24950,25135,25450,27919,27943,28388,28630,28671,28715,29573,31610,33879,34594,35092,38277,38740,40664,48120,49737,51126,52503,52739,66577,66967,67146,68789,70357,70925,71302,71375,71517,72832,73559,73920,74787,75047],"engaging":[2937,33714],"gl_vertex":[44366],"view's":[2441,14000,34771],"steer":[74436],"least":[687,925,1087,1124,1429,1494,1770,3769,4418,4438,4440,4841,5098,6120,6750,7379,7784,8214,8419,9400,9507,10086,10200,11261,11283,13206,15832,18054,18791,19545,19675,20248,22066,22343,23431,24764,24923,25633,25696,25849,26569,26999,27299,27533,28474,29879,30293,31365,33619,35294,35778,35943,36509,38273,38347,38624,42347,45302,45495,45585,49217,50534,50945,52952,53293,53687,53926,56159,57038,59556,63735,65926,66251,67091,70225,70246,71016,71762,71847,71863,73170,74548,75617,76156],"iaps":[53339,53689,53993,54044,67265,67585,67862],"fox":[3984,62012],"gettopology":[344],"standardvertexcolor":[18781],"distances":[75,7032,8045,18621,24782,26664,30352,39235,50691,50956,66006],"spriteatlasasset":[15312],"anymethod":[25000],"slovak":[53645],"rg32f":[8449],"worldspace":[10655,73073],"enemycontroller":[29907],"disallows":[73673],"communicates":[24639,28450,45184,65906,66556,69733],"lightslategrey":[63586],"temperatureunit":[54974],"writes":[3300,3854,8437,13813,21035,21341,21640,26122,26459,27701,27803,29906,31870,34215,36147,39676,40606,43743,44097,45858,46813,58845,64761,68110,68545,72438,75424,75795],"metapassshader":[29489],"prevvalue":[29658],"glslprogram":[8490,44362],"onrotation":[76271],"packagecache":[70345,70399],"subsytems":[4710],"selectionstrings":[23959],"home":[1129,1578,4156,4299,9810,12220,12645,19070,25871,29620,52721,52766,53720,69701,70068],"wasted":[10083,26664,30265,42148,43075,43131,48676,49713,51236],"pin":[18472,39043],"littesselation":[38024],"listview":[54322,54900,55058,55157,55470,55947,56980,59007,59410,59679,59972,60506,61999,63918,64877,64981,64994,65217,65533,65710],"openmouseover":[25389],"ppv2":[34858],"maxcombinedreliablemessagesize":[66322],"__medium":[14825],"reusing":[4223,4514,4639,7835,69693,70734],"pub":[66768],"login2":[33065],"stringbuilder_t26_staticfields":[72034],"togglesnippet":[65378],"#117":[66770],"ask":[1512,4148,4394,16060,24792,38853,42204,42944,48058,52581,53181,66750,67381,68036,68951,69196,70763,72407],"dragon":[5826,18055,22067,71763],"stringvalue":[56260],"maybe":[24169,24728,24749,29794,32923],"yesprocedural":[38069],"skycolor":[47405],"formal":[41200],"src2":[45273],"sorts":[104,2641,6486,13601,29858,32269,40843,41197,47368,48874,51085,51208],"ikcontrol":[25635],"appsetup":[75424],"ranging":[7992,8555,35269,50972,58319],"lwrp":[68528,68571],"droppedobject":[57433],"hanrahan's":[27468],"registeredpackages":[69622],"substancearchive":[15160],"hello":[18383,20898,24163,24460,30550,38810,41138,41213,52665,59052,61661,62146,62704,64781,64825,65299,65673,68967,69214,72162,73503],"justify":[54313,57386,59302,59839,62464,62576,64098],"versions":[11,237,284,457,526,997,1038,1181,1569,1611,1762,2248,3065,3466,3584,3991,4427,4654,5041,6007,6066,6195,6431,7408,9057,9262,11011,11417,11709,12104,13894,14342,15907,15940,15955,15972,15987,16010,16025,16048,16065,16080,16096,16111,16125,16142,16156,16173,16188,16217,16232,16246,16261,16280,16335,16350,16369,16383,16397,16411,16428,16443,16458,16475,16492,16515,16532,16547,16569,16584,16855,16874,16888,16924,16938,16974,16989,17005,17020,17035,17045,17067,17082,17097,17138,17157,17174,17190,17211,17225,17245,17259,17273,17287,17301,17317,17331,17347,17359,17375,17389,17403,17415,17427,17442,17457,17479,17493,17511,17529,17551,17566,17581,17596,17611,17632,17647,17666,17683,17698,17713,17728,17764,17778,17793,17808,17823,17840,17855,17870,17885,17900,17917,18245,18514,18672,20225,21024,21395,21881,21988,23059,24641,25096,25177,25446,25598,26252,28779,28947,29392,30306,30365,30872,30987,31379,31599,33194,33481,33524,33893,34856,35363,36342,37303,37509,38273,39964,40208,41859,43017,43203,43955,44684,45290,48057,48698,49151,49325,49540,49785,50016,50167,50654,50683,51080,52012,52492,52888,52924,53142,53394,53785,58320,63768,66527,66598,66905,67639,67847,67983,68052,68055,68464,68567,68730,68863,69096,69294,69360,69436,69507,69514,69718,70211,70236,70288,70312,70349,70376,70593,70761,70823,70875,71011,71136,71236,71294,71311,71345,71491,71506,71517,72129,72133,72214,72369,72532,72646,72708,73131,73192,73452,73562,73641,73896,74214,74243,74508,74779,75121,75221],"reload":[3441,3763,3811,4663,4960,17982,17991,20122,21312,33616,35888,36294,38277,38796,39161,52250,59191,66911,67702,68958,69205,70398,71318],"sans":[9264],"ellipsis":[49339],"blocksize":[29277],"demanding":[11606,45519],"png'":[66679],"integration":[4541,5116,6142,11040,16364,16378,16392,17488,17773,17803,18233,19030,19647,21031,23196,25920,28625,31647,33061,33749,34734,35357,37920,38271,38877,40662,49752,52941,53387,54013,54150,54207,66413,66868,67069,67240,67695,67852,67894,68749,69785,69845,71469,72424,72829,74163,74917,75354],"radiobuttonsnippet":[65073],"subsystemdescriptors":[76071],"obscure":[71121],"devicestate_setbinaryvalue":[75550],"500ms":[62989],"identically":[5958,23984,32402],"win81":[34578],"“roslynanalyzer”":[38718],"statstext":[21919,36258,36406],"gate”":[33544],"__vp8__":[14821],"japanese":[4263,9279,25031,53633,58115],"uiwindow":[52642],"sphere's":[10406],"profile":[633,890,1482,1757,3950,4050,4171,4230,4366,5879,6059,10765,11875,12154,13784,14455,14822,15890,16527,16916,18318,19653,20179,20210,20214,20419,21087,21342,21870,25734,25763,27917,27938,28718,29325,30307,30345,30440,30882,31449,33081,33395,33470,33512,34209,35366,35427,35492,35612,35691,35789,35948,35959,36034,36155,36203,36441,36470,37390,38275,39167,41814,43215,48329,52590,53214,53575,54102,58913,60635,64756,72672,72875,73615,74295,74845],"neighbourhoods":[36679],"dividebyzeroexception":[24985],"interactions":[787,889,1407,1855,1989,2579,3002,3505,6767,7155,11606,13732,13894,15853,17835,18503,19990,21322,22856,25733,34651,38532,42810,52754,57705,58191,60212,60761,62761,65906,66355,68807,72795,72946,75079,76095],"reopens":[1588,65701],"dynamicdelivery":[485],"onpreprocessmodel":[5926],"dont":[11175,43641],"supplementary":[5910],"overdraw":[30205,30268,30363,33717,36460,72754],"monoobject":[15280,74557],"modules":[978,1601,4727,5166,6120,6356,6415,7408,7469,11461,11669,16593,16601,16609,16617,16625,16633,16641,16649,16657,16665,16673,16681,16689,16697,16705,16713,16721,16729,16737,16745,16753,16761,16769,16777,16785,16793,16801,16809,16817,16825,16833,16841,18654,21181,23480,24950,25344,25743,27645,28096,30919,31658,32170,32237,32243,32847,35367,35464,35604,35623,35692,35768,35885,36432,36465,37505,39513,49885,52093,58156,61496,64408,64423,64463,64483,64506,64558,64581,64605,64626,64689,64740,64818,64836,64853,64871,64905,64925,64950,64967,65018,65075,65097,65112,65127,65159,65238,65262,65281,65351,65380,65530,65547,65562,65579,65599,65619,65640,65660,67570,67580,71173,71194,71680,72092,72832,73405,73427,74991,75033,75132],"#000080":[63608],"dates":[71459],"beneficial":[3589,20419,26714,50687,55512,73270],"kunityxrinputfeaturetypehand":[75497],"ondragupdate":[57446],"profiles":[4386,18318,20181,20215,28211,30057,30876,31191,35799,36472,37975,43215,64745,66455,74232,75072],"octopus":[2190],"region":[5284,6756,8169,9963,17474,22786,26109,26922,32372,36015,65998,66393,67177],"isadditive":[38996],"indexes'":[41370],"lengthunit":[62282],"expensive":[4450,5964,5984,6068,6837,7350,11630,11815,12917,18575,26710,29130,34281,35276,38292,38355,38541,41876,42238,42245,42258,42293,42298,42303,42372,42442,42458,42511,42517,42523,42528,42538,42578,42583,42588,42800,42829,42840,42851,42866,42872,42926,43165,43174,47026,49479,49495,60637,75445],"1+opengl":[45483],"capped":[56161],"paddingtop":[35537,57083],"tells":[3690,4751,9251,18230,18760,20807,21067,22886,25112,26135,26507,28446,30138,30320,32052,35523,38810,42317,43359,45090,45993,48123,49176,50697,66207,66228,69719,69771,69812,70384,70944,73340,73626,75501],"obscures":[26888],"iunityprofilercreatemarkercallback":[27991],"motorcycles":[10651],"cookbook":[4979,5853],"propertybag":[36849,37254],"encountered":[37145],"spatialperception":[12663],"onbeforerender":[75545],"msaa":[8061,12881,34861,37955,43654,75172,75413],"unity_winrt_10_0":[72070],"documentation'":[16564],"touched":[3309,29596,40104],"slopes":[8195],"selecttab":[57243],"preprocess":[3821,13366,73953],"newin20171":[2321,8969,13715,13740,14564,21559,28059,28072,31729,32200,32235,32589,32708,34153,34173,34186,34199,45259,72612,74891],"game":[24,48,67,275,1880,1925,2067,2190,2211,2215,2234,2239,2261,2334,2415,2768,3340,3468,3571,3579,3856,4510,4519,4591,4776,4813,4879,5028,5084,5158,5829,5963,6043,6150,6333,6384,6446,6750,6792,6835,6990,7178,7621,7669,7764,7927,8012,8134,8342,8402,8972,9059,9154,9368,9462,9588,9774,10071,10357,10658,10744,10832,11075,11101,11160,11172,11191,11221,11296,11631,11643,11681,11799,12097,12288,12334,12473,12889,13067,13182,13222,13412,13880,13961,14554,14846,15967,16060,16091,16659,17045,17062,17092,17169,17206,17282,17296,17326,17356,17384,17452,17474,17488,17661,17744,17985,18357,18424,18454,18485,19450,19643,19998,20061,20863,21156,21255,21319,21453,21588,21627,21687,21697,21852,22011,22028,22139,22189,22222,22307,23605,23797,24276,24463,24724,24743,24774,24891,25162,25229,25238,25348,25436,25509,25668,25693,25751,25755,25762,25823,25889,25920,26041,26926,27109,27330,27495,27673,27678,28182,28947,29009,29091,29421,29632,29750,29784,29827,29879,29906,30061,30110,30142,30205,30377,30500,30511,32196,32923,33083,33099,33529,33790,34245,34328,34452,34820,34884,34931,34939,34984,35865,36248,36337,36464,37301,37315,37328,37474,37492,37507,37520,37671,38277,38324,38404,38655,39053,39097,39308,39397,39466,39723,39996,40039,40085,40174,40542,40643,41845,41952,42358,42548,45096,45568,47179,48335,49030,49178,49423,49520,49646,49750,49752,50200,50318,50363,50534,50926,50934,51060,51716,51952,52088,52094,52179,52547,52727,52744,52756,52771,52811,52871,52921,52954,53079,53260,53685,53756,53777,53989,54002,54119,54227,54467,54757,54796,55226,55725,57210,57628,58176,58582,59498,60408,61298,61360,61524,61994,62827,63115,65031,65244,65970,66025,66037,66039,66099,66110,66183,66213,66335,66349,66374,66402,66541,66802,66858,66971,67018,67071,67170,67229,67482,67551,67587,67646,67840,68814,69046,71176,71614,71691,71811,71850,71899,72505,72608,72687,72741,72875,73030,73192,73240,73263,73472,73640,73956,74045,74145,74229,74512,74608,74645,74736,74845,74903,74965,74976,75070,75133,75194,75373,76160],"namephonepad":[29692],"color’s":[24515],"iscancelled":[67732],"ship":[3501,6439,40263,43091,49394,53944,74613,74660],"+x":[8963,14254,42708,69983],"includeplatforms":[3039,18642,18853,71056],"“contact":[53711],"unscheduled":[66667],"canstopmanipulation":[60271],"simulate":[888,1756,1960,2348,3013,4387,4956,5161,6810,6936,7528,7536,7562,7645,7673,8022,8568,8625,8872,9196,9752,10590,11466,11550,13238,13873,13899,14073,14559,14973,14979,15844,18239,18354,19675,19971,20050,20069,20097,21148,21455,22292,25597,25722,25733,26567,26858,26926,27065,29143,31745,32179,32230,32400,33526,33573,33622,33756,33762,34840,35338,35714,36335,37428,37480,37609,37684,37796,38459,38640,39260,42548,50610,50932,51175,51245,52042,62711,69304,69410,72462,72800,72922],"posts":[35250,75385],"abc123":[58456],"_monomethod":[74557],"remaps":[7990,34878,39017,48258],"inherently":[71898],"audiosettings":[7763],"command’s":[43263],"networkclient":[10980,11001,66035,66307],"enablelockfile":[70230,70876],"lightmodel":[46758],"version":[234,397,521,526,701,755,968,1100,1227,1243,1336,1411,1491,1539,1601,2699,2768,3065,3300,3346,3446,3564,3580,3725,3803,3864,3892,3975,4061,4186,4219,4249,4372,4437,4448,4562,4962,5183,5845,6358,6408,6468,7407,9068,9982,10393,10730,10811,11045,11086,11368,11404,11669,11804,12155,12290,12596,13412,13628,14322,15903,15936,15951,15968,15983,15999,16006,16021,16037,16044,16061,16076,16092,16107,16121,16138,16151,16165,16184,16213,16228,16242,16257,16276,16331,16346,16365,16379,16393,16407,16424,16439,16454,16471,16488,16511,16528,16543,16565,16580,16596,16604,16612,16620,16628,16636,16644,16652,16660,16668,16676,16684,16692,16700,16708,16716,16724,16732,16740,16748,16756,16764,16772,16780,16788,16796,16804,16812,16820,16828,16836,16844,16851,16870,16884,16920,16934,16970,16985,17001,17016,17031,17045,17063,17078,17093,17111,17119,17127,17134,17153,17170,17186,17207,17221,17241,17255,17269,17283,17297,17313,17327,17343,17357,17371,17385,17399,17413,17425,17438,17453,17475,17489,17507,17525,17540,17547,17562,17577,17592,17607,17628,17643,17662,17679,17694,17709,17724,17745,17753,17760,17774,17789,17804,17819,17836,17851,17866,17881,17896,17913,17933,17951,18522,18736,18918,19018,19052,19085,19213,19270,19674,20048,20196,20228,20276,21018,21142,21422,21509,21570,21625,21985,22334,23480,23629,24631,24950,25092,25144,25177,25229,25423,25487,25597,25743,25836,25979,26079,26111,26170,26716,26908,28164,28306,28318,28447,28672,28715,28782,29551,29769,30168,30279,30292,30905,30986,31008,31050,31366,31381,31385,31606,31613,33064,33104,33524,33783,33904,34209,34373,34618,34849,35178,35363,36204,36342,36578,37054,37485,37517,37747,38268,38273,38377,38684,38840,39167,40293,40589,40790,41625,42184,42255,43308,43954,44471,44671,45474,48053,48224,48556,48671,48691,49151,49170,49460,49520,49753,50015,50167,50656,50683,50703,51052,51794,52110,52493,52581,52794,52854,52933,53093,53303,53839,54505,54908,54960,55059,55158,55230,55306,55366,56122,56209,56270,56324,56389,56520,56589,56733,56796,57121,57334,59268,60671,60878,60978,61746,62335,62492,62640,62827,63794,64155,65772,65865,66043,66116,66194,66243,66336,66461,66556,67053,67148,67237,67268,67526,67609,67661,67733,67824,68281,68528,68546,68567,68690,68812,68850,69041,69295,69343,69402,69508,69512,69719,70211,70239,70288,70302,70331,70356,70587,70752,70801,70875,70944,71010,71121,71127,71221,71246,71264,71288,71305,71332,71359,71365,71441,71479,71508,71675,72092,72364,72374,72376,72633,72728,72836,72861,73130,73413,73586,73642,73930,74050,74130,74222,74412,74539,74777,75095,75159,75225,75321,76075],"bliter":[74279],"try":[217,410,518,1380,3682,4450,5006,7307,7621,7800,8218,9261,9365,11607,11859,12367,12555,13463,14149,17169,18101,18533,19096,19220,19499,20181,21302,22130,25530,25670,26041,26161,26361,26463,26569,28443,28775,30096,30372,30907,32233,33095,33583,34306,34392,34511,34640,34738,36943,37617,37675,38402,38759,40057,40963,41400,42060,42378,43317,44377,45593,46196,48123,49388,50008,50613,52044,52526,52624,53672,54259,55155,55635,56516,58586,61743,62484,62838,64182,65684,65787,66524,66707,67703,67774,69018,69270,70316,70373,71029,71216,71385,71552,71627,72201,73404,73619,73672,73960,75453],"lifo":[29160],"textured":[4327,9258,22736,35073,35250,43494,47761,50361,50685,72282,72749],"ismixedrealitysupported":[74700],"elastic":[8509,11536,13665,26564,39771,62926],"exclamation":[34626,40288],"customizationvfx":[6898],"hlslcc_bytecode_disassembly":[45039],"texel":[9098,9962,9998,10658,22179,22806,26999,27054,27088,27261,27699,36570,43970,44062,44234,44843,49533,72761],"label":[824,2313,2555,2645,2776,3909,3957,4127,5281,7165,9288,9563,10348,20014,20672,20908,20946,21172,21695,21838,22687,23814,23883,24064,24169,25434,27009,28352,30550,31013,31380,32849,34891,35517,36549,36706,38718,40063,40346,40740,41084,41227,41544,41678,45729,49883,52393,53140,53412,53854,54377,54560,54612,54635,54682,55469,55689,55949,55973,56164,56212,56476,56615,56673,57063,57129,57289,57430,57654,57864,58420,58586,58701,58778,59009,59396,59629,59793,59996,60483,60518,60571,60881,60982,61226,61334,61612,61749,61947,62146,62362,62516,62662,62764,63245,63751,64259,64363,64435,64446,64517,64576,64615,64639,64723,64813,64822,64846,64864,64920,64945,65013,65036,65051,65166,65275,65318,65368,65434,65503,65572,65592,65612,65633,65653,65668,65736,65755,65776,65981,67953,69753,70756,71155,71205,71256,71331,71477,72240,75130],"unity_editor_linux":[33793],"detecting":[1574,3447,4632,25867,31702,37627,74337],"proportioned":[9276],"allocator":[2926,5467,5498,26126,26143,26338,26383,26449,26525,27833,27915,29149,33297,61100,75751],"yet":[2308,2363,2426,3768,3909,4169,4238,5921,6383,11370,13115,18890,19028,19502,21052,21230,23007,25038,25540,27679,28181,30346,30901,31008,31368,32754,34594,35942,36352,36753,38932,41845,46873,47803,50150,54124,55547,57657,68984,69231,70761,70910,71305,72179,72456,73480,74644],"kunitygfxrenderernull":[29939],"configurable":[1786,7488,8495,9113,13183,13573,14360,15813,17118,17979,23058,26561,29186,36352,48939,62836,66417,66457,72964,74347],"arbitrarily":[21147,21659,28450,54259],"beforetemplateinstantiation":[38989],"structuredbuffer":[44909],"myeditorwindow_somesettings":[49964],"setpass":[36355,36524,38336],"tenth":[18300],"provids":[74549],"lppv":[10107,23411],"41s":[41962],"whose":[2613,3450,3478,3729,4354,5285,7484,7866,8535,10003,10586,11546,20743,22437,25221,25385,26859,30053,30368,30410,32393,33008,35988,36712,37728,38735,39836,40627,40746,40990,41184,41505,43576,45659,49726,52034,53839,58394,59408,61357,63816,68379,70781,70829,70879,70985,71871,72246,75820],"ondrawgizmosselected":[22196,22265],"framework_filename":[73946,74103],"bars":[2404,9567,11735,12472,39740,41678,63726,65177],"tileflags":[51639,51706,51758,51805,51882],"screenshot":[2294,5281,10540,14832,22186,27924,28436,32920,33474,34930,34954,36091,36281,50577,52063,67120,67215,71941,72259,72840,72996],"r8g8b8a8_unorm":[8456,61558],"year":[234,4448,4493,12609,25062,40328],"spills":[29170],"arrive":[13067],"blendindices":[10500],"unlocking":[67587,67794,71441],"combinemeshes":[17929,30333],"acos":[10451],"windowaposition":[57523],"unity'":[53886],"barbed":[50401],"showfirstpersonview":[29875],"averages":[50550],"halfside":[27369],"sec":[13563],"endglsl":[8490,44362],"additiveload":[39213],"mynewsprite":[48422],"overlay":[2133,4980,6495,8107,9098,10347,12278,12402,12744,13850,16227,19442,19665,20099,22051,22161,22790,23679,28320,28350,30514,30825,34746,34771,35073,37366,38173,38324,39229,39291,39332,41775,42793,43834,45627,46020,49473,51089,54131,54690,54766,59872,62025,63350,64267,71639,72404,72741,74230],"polymorphic":[55621],"virtualizationmethod":[64892],"reptiles":[52287],"bt":[52558],"targetandroidstore":[66988],"deceleration":[39774],"trygetmeshinfos":[75749],"dice":[23039],"__box__":[32433],"interval":[11047,11154,11188,14557,15027,23028,31794,33444,51957,55550,65132,72368],"middleware":[1846,6801,22604,30000,37634],"toolbars":[28358,30564,30824,34760,55482,64255,71985],"m_texture2d":[56761],"maxval":[4977],"unity_vpos_type":[43975,45745],"mysettingsreceiver":[49927],"steering":[8579,18487,52754,74439],"raise":[2211,8574,20457,38770,50409,50525,50550,50569,74427],"executeevents":[29436],"d_ol_plus":[63467],"unobtrusive":[49764],"smooths":[12881,27087,50549,50611],"m1":[50168],"vanish":[32728],"sampled":[1947,2176,2351,10109,10260,14009,14593,21335,22183,22472,27143,27549,27591,29128,35354,36679,37685,45220,45512,48623,50057,50071,50147],"moderately":[14825,42238,42303,42442,42523,42538,42588,42829,42840,42851,42926,50397],"0b5":[70848],"touchpad":[680,718,11903,75501,76103],"submitted":[4437,18513,25859,52951,53207,53264,54041,72927,75444],"#8b4513":[63630],"failoperation":[45863],"pointeffector2d":[12719,15211],"storeid":[53966],"3rd":[1867,1994,7440,7457,12367,12560,21961,28140,34306,34511,47122,47940,66437,67056,67528,68951,69196,70814,75465],"later":[229,701,2768,3298,3346,3437,4537,4639,4876,5039,7493,10060,10720,14455,14969,18364,18536,19266,19270,19471,23146,23288,23814,24641,24728,25572,26347,26427,27080,27567,27682,28288,28771,28874,29470,30501,31703,33094,34915,36156,36294,36337,36541,37485,37517,38273,38349,38866,38938,38956,39852,40307,43955,44541,48607,48765,50178,50304,52695,52733,54762,54897,60980,62115,63039,66336,66458,66985,67023,67234,67659,67850,68546,68572,68749,69352,69456,69507,70044,70062,70129,70177,70265,70340,70438,71404,72223,73622,73644,73920,74423,74516,75639,75934,75984],"progressively":[35992,36569,50140,50683,61072],"yellow#vertical":[63924],"refresh":[560,851,3652,3675,3773,4475,12216,12884,13130,19545,20076,20125,22046,22713,26000,31627,34997,37707,37724,41577,50603,51748,51787,53806,67560,67715,68994,69241,70226,71534,72773,72916,74180,75439],"displayp3":[12233,34274],"subtasks":[5289,49731],"mnt":[66628],"hold":[2080,2265,2389,2456,4821,4965,6168,6266,7841,9052,9184,10352,12745,18575,19000,20548,20616,22090,23707,23900,25503,26112,26249,27820,29620,30554,33420,34753,34779,35782,35931,36057,36498,36695,36901,37273,39136,39266,39353,39479,41562,43236,47470,48669,48940,50585,51291,52351,54322,54450,54726,54897,55317,55740,57899,58006,60476,65132,66929,71350,76166],"compiles":[1044,1302,1832,2717,3507,3779,4573,5737,7365,12358,23263,24625,24944,28265,29813,30856,34292,35728,38811,39447,40174,40441,40514,41808,41835,41944,42121,42689,42998,43008,43017,43103,43566,43684,44338,44360,44422,44583,45261,45419,45450,45840,47810,48380,49735,52610,66459,66478,68630,69622,71662,72145,73579,74590],"uta_agent_protobuf_requests":[66656],"formatprovider":[36896],"setapplepromotionalpurchaseinterceptorcallback":[67495],"emulation":[680,717,11902,50171],"optimally":[27816,29761,49540],"aberration":[34865,38092],"setswapchainpanel":[74706],"oneminusdstcolor":[43773],"libmain":[1019,1711],"conflict":[20263,21990,24758,31606,43239,44936,48058,52769,67151,69005,69257,70234,71282,72407],"club's":[7620],"val":[57903],"ui”":[20624],"formulas":[45284],"health":[10829,32923,40744,53548,53722,55244,57655,66762,67168],"alleviating":[74814],"acknowledgements":[54021],"strategic":[37685,51155,75134],"#eaeaea":[63386],"d":[172,805,1053,3911,3955,4041,4175,5820,7006,7832,8078,10619,11406,12164,13378,14225,18120,19450,21608,21979,25459,25763,29896,36473,36721,37746,38393,39156,39285,39328,41427,43218,43820,46855,48245,48270,51285,52023,52767,57843,58160,58288,60495,70273,70561,70760,71131,71218,71305,71408,71522,71900,72303,75135,75961],"setpreloading":[50965],"bitangents":[6648],"tcp":[28430,35862,52645,66571],"triangles":[351,8358,10533,10567,11608,12940,13418,17642,21203,21515,22814,24686,25599,26003,26664,26972,30205,30372,32455,35258,36355,36524,38333,38346,43193,44133,45725,46979,49540,61092,71772,71959,72362],"approximates":[8187],"locate":[3493,3901,4209,4218,4969,6155,6468,6725,9384,11673,12515,16060,18476,18500,18949,21415,25088,25379,27621,28196,28383,30344,30457,31618,33382,38743,40230,41407,48188,49203,49460,49577,50180,51416,52105,53857,56723,57636,60185,66690,67053,67084,67526,69724,69834,69903,69995,70323,70341,70718,70925,71016,71221,71407,71483,71610,71680,71953,72227,72476,73921,74824],"canvas_width":[24909],"viable":[3489],"provider's":[2560,41315,41453,70950,75421,75508,75910,76088],"probably":[4484,6837,7620,8065,18511,24749,24904,38405,40573,57293,66706,70372,71859],"ijob":[26263,26287,26398,26496],"limb":[8260,74905],"rgint":[8470],"sitting":[2239,27681],"ap++":[6020],"indent":[20953,36829,36982,62020],"signifying":[68872,69107],"cupisz’s":[27478],"precaution":[3340],"devicestate_setdiscretestatevalue":[75552],"modal":[7725,7748,49989,62829],"creategpuprogram":[42229],"acceleratorport":[66763],"depression":[75661],"middle":[2254,3342,3791,10096,10511,13755,18900,20567,22043,28914,36058,39299,39509,51138,51320,54304,54409,54725,58393,60380,60785,61472,64167,69901,71448,72370,75368],"\\programdata\\unity\\config\\cert":[69950],"unloadapplication":[66852],"customskin":[9598],"phone’s":[12202],"produced":[248,3734,4961,5041,7579,8622,13120,18354,24607,25096,25622,26790,45725,49539,49565,52224,74184],"#0f0":[63758],"localabstract":[35862],"return":[222,738,1273,1415,1691,2080,2314,2464,2522,2586,2635,2790,3335,3359,3549,3768,3944,4178,4215,4283,4357,4462,4479,4792,4901,5256,5417,5561,5736,5764,6014,6093,6131,6535,8437,8570,8747,8924,9365,9810,10190,10870,11015,11551,11609,12431,13001,13050,14063,14193,15738,16060,18254,18488,18529,18955,19043,20007,20289,20521,20556,21031,21930,21990,23354,23764,23892,24179,24479,24823,24995,25084,25441,25712,25887,25947,26000,26184,26464,26689,26699,26712,26735,27395,27896,27973,28277,28413,28605,28685,28723,28757,28942,29518,29660,29702,29794,29897,29982,30011,30551,30901,31964,32990,33123,34119,35543,36843,36996,37627,38704,38820,38839,39253,39626,40601,41163,41337,41471,41491,41679,43234,43369,43897,44046,44415,44862,45689,46565,46902,47224,47929,48691,48928,49015,49746,49964,50607,50697,51456,51658,51792,52293,52603,52766,53833,54021,54898,54945,55001,55110,55209,55297,55360,55579,55849,56144,56440,56578,56659,56955,57028,57246,57314,58094,58778,59153,59455,59670,59743,59952,60256,60666,60698,61077,61815,62496,63139,64540,66066,66136,66254,66350,66522,67100,67328,67435,67577,67597,67730,67799,68101,68295,68335,68362,68399,68440,68531,68847,68912,69092,70406,70756,71284,71543,71718,72157,72334,72587,73104,73223,73347,73514,73683,74038,74477,74601,74877,75585,75762,75879,75941,76010,76290],"‘skybox’":[26928],"decrsat":[45901],"my_username":[70791],"cbuffer":[44880,45042,45058],"music":[3468,4519,4773,5006,5053,5116,5155,5158,7488,7573,7620,7784,12637,37460,37593,40085,52095,53285,53763,55725,73030],"giving":[4493,9905,12663,13692,13876,13964,17642,17986,18616,21175,27335,28867,30142,30493,37683,43177,49534,49611,61490,66608,72315],"variations":[1812,6807,7446,7463,14775,28947,34882,34938,38532,40616,49837,50378,50941,51997,58369,66183,74173],"tileother":[16020],"url":[3234,3342,3555,4132,4157,11381,12205,14843,18743,18818,18918,19337,19351,19364,19382,22993,25492,25945,27678,29689,34407,39723,49744,53004,53283,58421,61570,62008,63097,63765,63985,66645,67918,68144,68246,68280,68317,68348,68380,68434,68482,69963,69994,70221,70288,70357,70595,70770,70829,70868,70983,71243,71376,71482,71520,72473,72600,72644,73178,73211,73445,73804,73959,74181,74516],"conventional":[45072,67482,76097],"examplerenderpipelineasset":[26730,44222,48916],"usagehints":[60627,62866],"assembly2":[21029],"beginner":[37311,37355,37543],"100k":[6000],"ibindable":[55571,56698],"tinge":[49546],"curates":[74362],"they":[67,155,214,257,399,509,554,690,1102,1230,1311,1355,1378,1404,1499,1621,1904,1944,2000,2008,2089,2191,2279,2384,2413,2425,2608,2769,3013,3430,3457,3602,3692,3728,3827,3853,3885,3937,4016,4033,4220,4256,4387,4390,4445,4450,4484,4493,4567,4665,4773,4832,4959,5041,5162,5258,5764,6024,6057,6082,6120,6284,6314,6378,6398,6691,6758,6807,6857,6981,6999,7215,7369,7427,7749,7752,7841,7870,7878,7928,7964,7981,8012,8115,8146,8203,8225,8306,8397,8402,8496,8786,9017,9184,9229,9281,9320,9333,9508,9594,9682,9751,9772,9854,9878,9953,10015,10071,10122,10274,10406,10704,10722,10832,11044,11075,11125,11149,11303,11454,11467,11520,11546,11602,11642,11660,11764,12717,12727,12895,13042,13112,13180,13263,13284,13430,13549,13579,13585,13648,13695,13712,13854,13882,13940,13956,14003,14009,14717,14823,14969,15012,15839,17384,17412,17488,17994,18091,18112,18167,18233,18319,18330,18357,18418,18432,18454,18570,18678,18816,19028,19144,19348,19361,19447,19702,20192,20260,20394,20415,20573,20605,20644,20712,20959,21040,21154,21188,21230,21296,21525,22012,22029,22180,22189,22234,22305,23285,23583,23626,23892,24169,24297,24646,24751,24772,24904,24923,24933,25068,25099,25164,25276,25309,25348,25352,25434,25492,25523,25849,25860,25980,26059,26081,26249,26263,26355,26478,26592,26645,26666,26787,26926,26934,27088,27119,27171,27325,27330,27510,27567,27591,27688,27751,27813,28114,28135,28185,28366,28378,28890,29101,29185,29330,29403,29421,29468,29568,29587,29714,29775,29915,30097,30142,30301,30332,30365,30384,30489,30657,30875,31009,31379,31717,31745,31760,31819,31838,31856,32063,32114,32136,32183,32249,32343,32346,32402,32609,32631,32648,32747,33383,33400,33446,33546,33573,33739,33945,34361,34596,34638,34645,34760,34837,34893,34905,34931,34956,35036,35205,35268,35635,35695,35888,35941,36040,36201,36394,36594,36678,36696,36855,37142,37354,37551,37618,37627,37650,37668,37724,38263,38345,38393,38479,38557,38587,38624,38646,38653,38734,38884,39109,39149,39238,39320,39497,39546,39585,39672,39819,39880,40086,40139,40359,40591,40643,41462,41491,41753,41830,41845,41988,42010,42026,42049,42134,42198,42262,42360,42547,42614,42798,42811,42944,42952,43021,43110,43149,43177,43205,43216,43505,43850,43897,43957,44091,44133,44164,44297,44364,44447,44603,44627,44682,44797,44830,44978,45050,45170,45253,45302,45474,45601,45620,45845,45975,46370,46780,47083,47371,48132,48163,48685,49453,49470,49495,49506,49515,49635,49644,49659,49698,49778,49824,49885,50056,50140,50289,50355,50368,50432,50615,50652,50659,50687,50932,50956,51018,51148,51155,51874,51951,52099,52488,52558,52766,53781,54032,54120,54227,54545,54635,54725,54762,55633,55731,56077,56172,57928,58378,58831,59541,59837,60209,60763,61323,61470,62609,62772,63061,63107,63689,63835,63955,64182,64235,65386,65925,66002,66165,66230,66388,66457,66499,66635,66929,67151,67568,67624,67752,68304,68310,68498,68536,68541,68652,68797,69333,69378,69439,69719,70190,70315,70755,70826,70879,71018,71165,71175,71190,71283,71293,71310,71662,71775,71809,71872,71903,71938,71970,72243,72318,72372,72706,72736,72787,72799,72917,72942,73238,73694,73953,74042,74172,74311,74978,74982,75067,75487,75899,75979,76100],"mirroring":[5964,6316,13810,20396,66719],"compile":[385,813,1044,1227,1274,1284,3506,3809,4574,4654,4761,4876,6025,6207,6388,6458,7373,8411,9127,10871,11846,13362,14049,18359,18521,20179,20314,21006,21029,23257,23423,23585,24969,26046,26473,26646,28415,29907,30006,30306,30880,31656,31870,33783,34600,34640,38683,39947,40298,40545,41160,41346,41791,41836,41880,41921,42127,43034,43978,44306,44671,44875,45002,45237,45419,45448,46520,46529,46753,47824,49752,52609,68740,69003,69255,70394,71045,71661,72133,72143,72839,73346,73639,74214,74262,74649],"films":[6750,6947,21631,37683],"selectorforlabel":[41082],"wdp":[74825],"magicleap":[17858,31150,31434,75334],"subsystemregistration":[20140],"delayedintfield":[59618],"pooling":[5904,6119,26479,54897],"visualstudio":[16386,31483],"disp":[46835],"icjab7wmu_q7aojrslh8yw":[53900],"foundations":[46],"pathtoyourapplication":[25963],"blendone":[6243],"position":[25,128,249,294,725,1701,1871,1915,1994,2039,2268,2292,2334,2392,2439,4828,5006,5161,5224,6152,6285,6514,6723,6756,7023,7152,7211,7217,7620,7787,7952,7959,8049,8154,8170,8232,8263,8309,8500,8642,8730,8994,9012,9050,9163,9200,9307,9368,9527,9541,9639,9686,9744,9773,9843,9891,9998,10061,10135,10243,10342,10493,10574,10724,11236,11253,11271,11295,11319,11340,11439,11521,11535,11678,12310,12515,12698,12746,12750,12785,12888,13062,13103,13137,13159,13234,13263,13389,13552,13596,13642,13653,13684,13749,13862,13983,14058,14141,14485,14567,14661,14851,14951,14999,17744,18155,18230,18297,18503,18611,18993,20106,20423,20571,20606,20826,20891,20946,21156,21254,21325,21525,21575,22018,22197,22239,22307,23339,23752,23811,23964,24519,24559,24650,24734,24740,24906,25401,25511,25622,25792,26438,26564,26569,26580,26859,26925,27210,27320,27330,27389,27814,28370,29091,29360,29591,29700,30260,30332,30646,30825,31725,31943,32226,32280,32397,32637,32877,32905,32917,33101,33498,34127,34237,34746,34769,34900,35088,35247,36593,37283,37347,37528,37627,37732,38461,38503,38532,38542,38587,38657,39351,39377,39508,39671,39707,39749,39785,39887,39994,40456,40534,40638,40674,41554,42774,43140,43205,43341,43695,43879,43928,43975,44891,45668,46321,46809,46847,47086,47179,47904,48188,48231,48287,48370,48515,48519,48635,48665,48682,48874,49006,49687,49852,50301,50337,50377,50452,50540,50601,50642,50726,50917,50977,50996,51138,51168,51186,51212,51224,51239,51250,51295,51388,51438,51528,51559,51594,51635,51878,52114,52182,52194,52338,54459,54709,54748,54759,54818,55993,56049,56096,56875,57541,57832,58145,58291,58466,58799,59594,59819,59827,60343,60390,60763,61137,61196,61857,61908,62029,62182,62194,62796,63709,63746,64103,65231,65255,65698,65730,65887,65970,66001,66245,68697,69333,69439,71571,71608,71775,71806,71869,71986,72256,72289,73013,73060,74169,74242,74424,75109,75545,76173],"compilationpipeline":[3039,40372,68743],"setcustomparticledata":[32921],"formula":[7302,8575,21965,29801,42364,43161,45296,59855],"#35":[38975,38988,39205],"ditto":[28298],"presubmitcallback":[72436],"dependsonartifact":[19508],"quicker":[4867,41795],"getassetpackstateasync":[518],"encoderdecoder":[72698],"app_toolbar_button":[63256,64253],"addressables":[506,3241,3428,3494,3512,4537,4652,6055,9488,16057,17240,18917,31046,31397,41871,49750,50135,60193,68596,69664],"unsure":[235,27654,37273],"_auth":[69996],"puzzle":[8065,37318,53285],"renderbufferloadaction":[21725],"uploadhandlers":[68259],"clutchshortcutattribute":[43326],"consideration":[4567,40555,42440,42478,42515,42521,42568,42827,42838,42849,42870,42924,42946,51211,54108,60617,61997,64321],"floor":[179,2958,6774,6792,7931,7955,8834,10120,10481,10737,13220,22728,24912,25292,32256,34875,45775,47603,71775,71809,75589,76303],"coupons":[4013],"getfirstdisplaysubsystem":[76050],"getters":[39910],"writesandboxjson":[67011],"sufficiently":[2409,6155,26050],"onpostprocessallasset":[68962,69209],"resampled":[1903,4994,7015],"#endif":[6102,41800,44363,44539,47898,73963],"72th":[12116],"forensic":[74512],"resave":[48224],"#373737":[63339],"logicaland":[43822],"torotation":[76285],"tile's":[50348,50489,51169,51820],"lag":[13182,13249,26572,30378,38509,41491],"wasd":[9772,58132],"labeling":[67182],"overlays":[2958,13763,13791,14548,19443,19937,20100,20646,22235,22776,23692,28326,28352,30515,30823,32267,34747,34870,39292,52083,59872,64756,71638,71901,71985,74205],"useful":[124,167,257,495,518,556,580,845,944,1210,1384,1404,1574,1611,1727,1807,1821,1832,1886,1960,2082,2201,2375,2415,2440,2748,3256,3413,3570,3734,3881,4372,4563,4634,4719,4772,4841,4879,5122,5216,5291,5353,5726,5770,5949,6055,6211,6288,6320,6375,6435,6479,6513,6723,6767,7156,7231,7478,7789,7841,7913,7955,8093,8368,8496,8586,8623,8893,9071,9347,9440,9875,10002,10135,10460,10585,10686,10692,10850,11077,11175,11265,11312,11466,11660,11775,12419,12490,12889,13019,13212,13239,13306,13364,13423,13538,13961,14009,14260,14562,14684,14775,15024,17591,18129,18319,18376,19005,19277,19286,20076,20272,20622,20681,20777,21023,21142,21164,21202,21342,21509,21697,21854,21964,22018,22046,22061,22151,22203,22407,23270,23377,23585,24580,24601,24621,24733,24968,25047,25323,25381,25399,25459,25523,25623,25928,26084,26103,26545,26562,26587,26718,26784,26790,26920,27176,27268,27304,27325,27678,28038,28173,28474,29139,29154,29365,29485,29707,29799,29879,30048,30329,30376,30881,31662,31709,31765,31797,31856,32136,32167,32263,32360,32400,32651,32686,32712,32776,32848,33104,33450,33487,33526,33652,34203,34785,34938,35089,35248,35581,35697,35769,35794,35958,35972,36081,36354,36459,36509,36684,37281,37349,37481,37501,37639,37709,37740,38324,38563,38593,38820,39121,39254,39308,40063,40097,40363,41062,41374,41559,41624,42023,42548,42705,42726,42748,42792,42816,43375,43534,43891,43957,44085,44133,44234,45239,45523,45579,45629,45714,46014,46484,46576,47148,47313,47952,48372,48515,48693,49390,49437,49468,49484,49511,49569,49630,49702,49851,50290,50403,50411,50537,50551,50558,50648,50656,50947,50956,51342,51562,51601,51705,51806,51812,52012,52137,52470,53253,53854,54727,54771,56075,57319,57628,58190,59837,62020,64757,66099,66194,66225,66337,66674,66923,68047,68546,70802,71621,71877,71959,72243,72287,72290,72394,72641,72717,73248,73597,73894,73916,74423,74569,74636,74739,74795,74944,75146,75621,75829],"average":[4697,6310,7685,7944,10406,11512,13218,22319,25994,29664,35354,35650,38652,40858,41243,47145,50591,52040,53502,75628],"2ios":[23550],"e262144":[29305],"cannot":[208,234,249,1256,2179,2190,2356,2702,3340,3502,3672,3963,4288,4387,4494,4850,5286,6198,6794,7281,8337,8562,9013,9191,9261,9673,9937,10058,10107,10561,10726,11244,11274,12014,12769,13188,13240,13645,13818,13847,15012,15711,15836,17744,18179,19479,20605,20660,21302,21433,22226,22822,23439,23641,23883,24165,24664,25132,25353,25408,27082,27088,27122,27181,27332,27695,28358,28403,28834,29006,29919,30172,30202,30271,30414,30446,31649,32064,32705,33069,33622,33655,34166,34222,34486,34594,34890,34955,35772,35834,35920,35994,36084,36155,36555,36599,36693,37273,37625,37725,38462,38886,39109,39150,39238,39617,40180,40442,40454,40559,41451,41783,41803,41871,42053,42141,42354,43149,43234,44383,44698,44830,45055,45182,45858,48163,49728,49841,50011,50065,50132,50155,50540,51297,51710,51875,52040,52229,53077,53147,63683,66363,66391,67027,67136,67168,67400,67553,67624,68110,68493,69746,70246,70457,71016,71175,71949,72403,72723,73631,73694,75155,75485],"toolbar":[4,5273,8707,9203,9674,9851,13901,14127,17980,18117,18902,19080,20063,22032,22222,23234,23679,23940,24912,25051,30515,35711,35896,35997,36071,36457,36485,36698,38280,38876,39311,48365,48628,48683,50371,50413,50427,50581,50622,51101,51270,51382,51586,51618,51886,52081,52234,52599,54404,54690,54711,55674,55753,59630,60575,60843,62134,62743,63247,64252,65385,65413,65432,65444,65471,65476,65490,65501,71252,71805,71897,71991,72740,73277,74304,74810],"parent”":[24565],"invoked":[3780,6155,8419,10835,18309,21326,28071,30632,30904,33494,39487,39634,39754,39785,39899,39992,40081,46776,46825,53990,55986,59193,65926,66929,67351,67592,67626,67708,69657,75545],"underline":[58291,62040],"“food”":[11314],"devicemodel":[396,19705],"xcode":[2834,4961,6468,12097,24621,25740,25833,25845,25888,25893,25902,26030,26067,26070,27799,28079,28098,28162,28186,28280,29439,34600,34658,34735,49751,50197,52547,52684,52695,52703,52733,52744,66802,66838,67043,68719,74917],"selfillumbumpeddiffuse":[42534],"tcontainer":[36849,37001,37244],"inform":[1501,2722,3006,3652,4182,33416,52642,53293,54263,55638,62585,67293,75501],"scattered":[25551,40358,48290,50405,62833],"'half":[75649],"hinges":[9718,33583],"streamline":[17591,17759,33518,35228,50648],"preprocessed":[13366,73963],"simplestinstancedshader":[23326],"lightgoldenrodyellow":[63577],"headroom":[7493],"justified":[17642,62009],"sidethe":[54021],"aliqua":[65174],"exe":[2729,4539,6336,15717,19627,21022,24943,25461,28632,28715,44314,48061,69968,70109,70166,70648,74513,74609,74653],"evaluator":[32861],"motionvectors":[42396,44062],"r8g8_sint":[8472],"xxxx":[28304,28617,52778],"multithread":[5964],"cloned":[34184,39067,39117,39192,69749,70411,70729],"'expose":[4856],"province":[1174],"jungles":[14775],"path'":[41064],"yespreview":[37892],"abc":[16330,31024],"instancesortingpositionfloatcount":[5657],"disconnection":[75505],"movetowardsangle":[10471],"radiobuttons":[65061],"compilations":[562,6425,19239,28166,34425,34523],"fromtorotation":[12980],"recalculateuvdistributionmetrics":[51074],"documentationurl":[18682,18941,70832],"postprocess":[3822,6330,22862,36181],"getwindowsize":[56577],"getcomponentinchildren":[38450,62771],"toolbox":[31258,50647],"32gb":[66570],"somewhat":[7488,9145,21170,30048,37688,42449],"cover":[2236,2357,4300,5670,8078,8332,10095,12114,18611,27333,29863,32316,35988,37322,39378,39412,40529,43114,43195,43592,45585,47176,49511,49630,49791,51239,52036,53293,54312,59085,65979,66405,66742,68807,71871,73959,74184],"inspecting":[6110,13355,20808,21856,25358,31603,54432,68640,69752,70745,71918],"'cube'":[40468],"pertaining":[59554],"_cameradepth":[44939],"resultindices":[18598],"copy":[165,234,379,419,423,556,1238,1292,1825,1972,2078,2199,2781,3306,3438,3590,3723,3879,4162,4530,4810,5224,6135,6325,8698,8894,9416,9800,10413,11739,12097,13307,13361,13417,13709,14112,18076,18979,19022,19456,19626,20398,20743,21251,21514,21580,21832,22085,22129,23377,23794,24559,24989,25153,25307,25452,25515,25896,26108,26159,26278,26295,26429,26434,26487,28219,28772,28785,28829,28951,29766,33286,33424,33848,34379,34600,34736,34925,36061,36204,38713,38865,39011,39069,39083,39365,39493,39900,40803,41303,41428,43317,43818,44669,48651,48917,49151,49373,49706,49912,50069,50448,50673,52735,52902,53591,53832,54428,54551,54659,55673,55752,55827,55896,58233,58362,58459,58757,60437,60574,60840,61908,62133,63074,66199,66234,66790,68130,68610,69568,69956,69996,70330,70410,70628,71630,71722,72275,73905,73920,74088,74453,74627,74787,75409,75816],"overwhelm":[18675,33415],"sided":[7898,10439,10580,22894,32296,37850,41784,42690,42729,42750,42797,43128,43185,43495,44178,48290,48614,50440,50897],"‘table’":[34913],"compatability":[665],"yestranslucent":[37988],"recommendation":[5999,29614,54110,66570],"interrupted":[14721,21336,52547,62630,67136,67151],"tiledata":[51640,51763,51789,51796],"limited":[4566,6794,6896,7264,8499,8864,9749,10260,10567,12419,12667,13058,13437,13566,13977,14593,18513,18812,20229,20241,20422,23049,24489,26091,26690,27141,29153,29553,30362,30868,34190,34708,37724,38139,38248,38264,38297,38347,38625,38840,42219,42384,42958,43728,43950,45477,45735,47659,49497,49850,50184,52036,52741,53718,54725,56722,58110,59123,59831,60495,61558,66374,67863,71422,71806,72497,72687,72891,73026,73029,73208,73450,73897,74346],"collectresources":[2788],"ideally":[19557,25261,27088,33082,33095,48594,49541,52009],"transformed":[32225,32240,58394,58651,68694],"uv8":[319],"flipped":[14799,20287,44838,47087,65931],"polygon2d":[15287],"asyncuploadbuffersize":[27739],"finalizing":[53124],"“germslimetarget”":[34956],"proportion":[167,6840,8510,10370,13665,24776,28895,30377,31854,32105,32186,32221,32283,32343,32390,32724,39662,39994,65941,71773],"sprite's":[84,8387,13754,48515,48607,51137,51829],"hacd":[38487],"radiosity":[36128],"arraytofill":[33236],"tampered":[3344,66767,74654],"apiexamples":[3703],"maintenance":[18319,54177,59872,66695],"computers":[229,1130,2178,11292,12588,19617,22104,22557,28762,52095,66341,66355],"#ff000088":[62014],"argument":[738,1035,1771,3432,4662,4970,5995,6844,9608,9653,14029,15702,18585,19116,19239,19511,20197,20264,20693,21029,23816,23942,25102,25462,27793,30310,33265,34214,34425,34523,35088,35429,35481,35583,35817,36559,38903,39634,39754,39785,39992,40081,40482,40571,40963,44915,45285,51226,51794,52395,56022,56619,59670,62278,63161,66584,66894,66938,68208,68247,68283,68317,68348,68379,68434,68831,69076,69634,70527,74011,74962,75983],"skydome":[49428],"monopinvokecallback":[34723,40593,52663],"filestream":[25965],"4x4":[5221,9238,10010,10135,10658,14336,44275,45772,48613],"enable_virtualtexturing":[50014],"assetpack":[483],"stat":[36242,75991],"walking":[1886,1920,1944,1950,2080,2239,6291,7841,7927,9138,18104,22470,25599,27813,39266,48335,49642,71775],"notes":[645,1530,3964,5006,5697,6108,13543,14297,14444,17045,19295,20444,22003,23388,24896,25271,27565,29810,33892,34593,43504,43513,43562,43756,43847,45486,49747,49846,50178,51458,52710,52730,53140,53397,67039,67689,68052,69373,69477,69770,69811,71394,71421,71496,72684,73129,73483,73649,74129,74221,74409,75000,75112,75222,75308],"had":[1966,3419,3692,3867,5231,6281,6314,6383,6445,7765,13089,13894,19999,21328,28181,29181,31008,32154,34884,34949,35920,36337,39149,39320,43308,60515,68533,68609,68925,69168,71216,71626,74644,75601],"gettileflags":[51741],"n++":[4947],"m_numsteps":[61109],"‘global":[26790],"forth":[250,7137,8570,10338,26878,57679,61898,66173,68609],"onpreprocess":[5924],"reflectivebumpedspecular":[42443],"25f":[64960,76269],"concatenate":[738,33153],"getwindowwithrect":[20891],"format":[149,258,424,427,487,525,535,553,589,712,1227,1311,1331,1556,1894,1997,2052,2567,2894,3019,3247,3292,3451,3502,3579,3879,4506,4565,4737,4772,4959,5379,5523,5951,5998,6375,6435,6479,7020,7478,8032,8443,8647,8823,9075,9457,9759,10136,10742,11021,11764,12350,12839,13140,13204,13427,13945,14009,14096,14238,14323,14802,15042,15982,16330,16667,18659,18662,18717,18934,20486,21042,21504,21638,21724,22578,23492,24508,24637,25062,25177,25194,25258,25841,26874,27139,27261,27491,27500,27552,28138,28173,28193,28304,29338,29765,30844,33820,33883,34280,34361,34494,35089,35931,36041,36187,36895,37551,37670,38359,39852,40199,40868,41199,41543,42750,43521,43986,44211,44691,45064,47154,48201,48528,48601,48763,49516,49818,50001,50184,50412,50483,50656,50660,50796,52076,52097,52668,53012,54533,58086,58802,61557,63065,64973,64986,65001,65690,65849,66114,66458,66478,66590,67673,67837,68233,68922,69165,69372,69476,69694,69904,70015,70190,70608,70770,70806,70945,71010,71370,71799,71974,72014,72619,72712,72735,73075,73163,73238,73309,73314,73384,73651,74044,74168,74276,74636,74795,75424,75979,76129],"use_new_apis":[40307],"p":[2539,2562,3434,4279,4914,18495,20599,25367,25491,25580,28278,32800,40337,40596,41275,41331,41470,41520,48075,62027,63989,66626,67276,67332,67446,70047,72116,72139,72149,72190,74602],"evident":[23780],"transbumpedspecular":[42830],"mother":[18168],"onparticletrigger":[32747],"lfsconfig":[70718],"mycallback":[57876],"displacement":[22496,37999,38652,46825,56961,71753],"shadow":[463,1704,5972,6816,7858,7896,9456,9875,9955,10072,10272,12840,12932,13141,13447,14609,17970,18239,20420,22138,22798,23663,26798,26860,27183,27187,27214,27267,27306,30356,31887,32293,32739,36179,36397,37422,37653,37813,38296,38337,38355,38425,39968,40066,41342,43109,43126,43129,43146,43170,43376,43972,44066,44576,44625,44959,45629,46058,46485,46717,47114,47749,47952,48231,49426,50437,52483,54557,59629,65996,66006,68948,69192,72751,75177],"l1":[23417,25810,27472,60511],"invalidate":[10012,26122,58823,64333,68607],"narratives":[6784],"is”":[18734,50342],"scrollrect":[39495,39793],"dismiss":[31014,53454],"logo":[4129,4172,4299,12275,12442],"pyramidal":[6762],"cmd+b":[610,25912,51283],"archiving":[30445,53225],"ruleset":[38678,38895],"getapparguments":[74746],"128x128":[9276,50933,73922],"relevant":[938,1108,1118,1135,1393,2334,2375,2614,3837,4400,4997,5911,6818,7386,7573,9974,13208,13854,14781,16043,17030,18179,19089,19123,20391,21024,21739,21892,22186,23617,24933,25738,27992,29466,29806,30420,32091,33865,34299,34580,35087,35498,36080,37322,37330,37481,37522,37670,40202,43466,47067,49465,52186,56713,58203,60212,62384,62867,63820,64367,66237,66978,67652,68635,69303,69393,69409,70834,71612,72730,72899,73447,74777,75294,75480,75874],"consistencychecksourcemode":[25113],"#0032e6":[63310],"alf":[21096,28681,28719,28771],"concavity":[6807],"projectionmatrix":[30159,44964],"instantiationexample":[25506],"point":[97,116,343,554,736,783,1243,1888,1914,2004,2067,2290,2429,2896,2937,3009,3564,3728,4820,4879,5033,5461,5606,5733,5774,5968,6070,6293,6723,6758,6797,7210,7243,7508,7752,7794,8046,8208,8230,8431,8501,8831,9002,9034,9167,9297,9460,9711,9723,9869,9969,10083,10108,10233,10380,11008,11482,11518,11563,11629,11678,12116,12671,12697,13021,13100,13163,13217,13337,13408,13555,13651,13673,13724,13765,13818,13838,13860,13919,13986,14171,14594,14848,14951,14983,15864,18130,18166,18225,18277,18346,18364,18580,18671,18743,18980,19028,20425,20545,20724,20767,21149,21164,21356,21580,21676,21956,22118,22500,23626,23670,24371,24490,24618,24787,24906,25492,25622,26295,26429,26514,26547,26557,26589,26812,26914,26935,27141,27263,27323,27467,27538,27566,27823,27884,29338,29470,29484,29785,30056,30376,31009,31758,32073,32180,32285,32408,32613,32631,32856,33487,33729,34800,34933,34956,35022,35736,36637,36679,37009,37685,37738,37789,38354,38384,38558,38588,38668,38854,38987,39236,39272,39351,39616,39756,39887,40163,40288,40529,40744,42060,43074,43154,43589,43875,43968,44231,44573,44870,45244,46781,47111,47607,48146,48231,48515,48526,48652,49043,49438,49526,49611,50339,50409,50601,50696,50714,50941,51155,51427,51728,51941,51966,52162,52235,52566,54725,55632,58081,58283,58393,58440,58543,58651,58777,61470,61559,62198,62748,65220,65999,66015,66117,66895,67592,67753,69243,70648,70823,71593,71775,71805,71860,72141,72297,72474,72644,72899,72931,72974,73556,74403,74496,74653,74713,74976,75079,75108,75265,75555,75819,75880,75934,75991,76176],"then":[17,132,159,177,222,270,355,409,511,561,595,643,738,813,857,902,962,1044,1129,1336,1463,1493,1536,1588,1660,1822,1832,1886,1915,1960,1966,1995,2007,2069,2198,2204,2240,2290,2772,3442,3453,3486,3553,3591,3681,3729,3778,3856,3889,3957,3977,4064,4158,4169,4209,4282,4391,4462,4539,4641,4768,4793,4852,4957,5161,5191,5338,5938,6032,6062,6122,6265,6290,6321,6325,6346,6425,6473,6488,6725,6762,6798,6962,7025,7184,7316,7413,7508,7566,7573,7624,7657,7791,7874,7938,7983,8074,8117,8203,8232,8364,8499,8615,8651,8872,9155,9180,9247,9339,9430,9532,9589,9672,9688,9765,9928,10109,10337,10527,10721,10760,10795,10805,11048,11176,11263,11310,11333,11357,11442,11505,11589,11596,11739,12206,12305,12404,12516,12698,12745,12754,12800,12865,12999,13041,13120,13193,13275,13292,13307,13382,13559,13651,13692,13824,13837,13843,13876,13903,13962,14001,14087,14295,14332,14502,14554,14664,14738,14824,14967,15022,15719,15852,15884,16060,17370,18064,18166,18224,18254,18343,18389,18485,18568,18666,18818,18902,18927,18980,19020,19070,19456,19621,19650,20124,20204,20211,20222,20341,20395,20423,20450,20615,20708,20869,21009,21054,21173,21219,21336,21471,21715,21892,21964,22036,22074,22247,22518,23246,23401,23443,23490,23583,23613,23757,24152,24468,24471,24509,24559,24625,24639,24726,24743,24794,24909,24929,24943,25106,25161,25215,25492,25503,25624,25747,25859,25893,25939,26034,26044,26096,26251,26463,26482,26508,26611,26714,26878,26935,26954,26977,27054,27065,27210,27254,27325,27334,27550,27607,27702,27786,27923,27946,28109,28129,28166,28336,28399,28846,29188,29348,29397,29428,29470,29566,29663,29736,29776,29918,30001,30047,30096,30168,30215,30271,30284,30390,30453,30486,30503,30540,30846,30859,31625,31745,31798,31838,31869,32090,32243,32615,32632,32754,32865,32919,33083,33092,33381,33420,33504,33782,34184,34238,34408,34536,34677,34723,34816,34940,35074,35191,35323,35565,35612,35691,35770,35807,35931,35997,36048,36199,36338,36444,36496,36569,36685,36712,37286,37330,37522,37620,37627,37646,37668,37700,37723,38277,38293,38354,38384,38451,38462,38515,38640,38655,38899,38968,39024,39093,39192,39291,39365,39412,39513,39661,39666,39819,39836,39880,40088,40151,40202,40571,41182,41580,41694,41748,41758,41812,41868,41882,42083,42133,42360,42619,43040,43150,43172,43238,43376,43481,43519,44066,44133,44218,44344,44611,44822,44838,45145,45195,45277,45520,45568,45621,46369,46574,46722,47179,48057,48162,48351,48370,48597,48603,48617,48643,48680,48938,49069,49282,49410,49457,49520,49643,49655,49663,49668,49780,50065,50148,50405,50411,50448,50521,50527,50561,50604,50676,50881,50934,50982,51022,51094,51119,51137,51237,51295,51344,51820,51874,51975,52092,52106,52181,52224,52250,52489,52500,52546,52682,52762,52929,53134,53494,53862,54015,54243,54304,54564,54667,54712,54796,54848,54989,55582,55987,56100,56532,56624,57235,57820,58036,58110,58362,58466,59065,59904,60136,60822,61070,61203,61343,61599,61908,61970,62194,62496,62751,63069,63119,63138,64141,64337,64955,65132,65233,65668,65789,65994,65999,66158,66253,66351,66377,66465,66536,66614,66945,67044,67084,67148,67258,67482,67592,67651,67845,67911,68064,68086,68263,68285,68309,68385,68542,68611,68711,68825,68852,69058,69294,69390,69410,69772,69815,69860,69987,70085,70106,70159,70225,70236,70337,70397,70936,70965,71037,71121,71158,71205,71221,71350,71483,71573,71598,71634,71645,71689,71805,71859,72149,72178,72230,72282,72297,72365,72379,72511,72609,72830,72918,72992,73136,73156,73271,73317,73392,73428,73501,73630,73640,73772,73964,74424,74531,74619,74746,74789,74830,74893,75133,75411,75654,75751,75880,76320],"denoisers":[23460],"gameswitchlist":[55180],"threaded":[18257,21609,34208,35736,73186,73683,73694],"defaultimporter":[3835,6698,15247],"buildgame":[6331,74076],"vfx":[6716,6897,14780,17152,31279,37900,54129,72818,74338],"s_testicons":[52420],"reasonable":[5466,5611,7316,26798,73382],"albedoswatchinfo":[28897],"occlusionportal":[11355,15067],"adheres":[64365],"a's":[66728,67155,71888],"targetctrl":[50328],"distributions":[69864],"#00ff7f":[63642],"alwayslinkassemblyattribute":[28586],"getitemshandler":[2585,2632],"fbximporter":[6699,9143,15254],"drawproceduralindirect":[30298,43414],"unscaledtime":[52002],"cheaper":[18232,18566,38354,42363],"level1":[40727],"plane":[2996,5179,6723,6760,8083,8110,8566,8989,9427,9886,10085,12855,12917,13093,13261,14137,14477,14681,14835,21202,21486,22139,22292,23723,29633,30352,31681,32256,32388,32941,33550,34778,35245,38375,38655,39257,43132,43192,43974,44865,46112,47087,47802,47952,49519,50378,50620,66003,72346,72522,74418,75065,75319,76492],"impressions":[17370,22371],"megacity":[69337,69443],"75em":[62026],"extensionprovider":[67396],"'enter":[70047],"needsretetrahedralization":[26711],"pathfinding":[9386,69375,69479,74313],"cancellationdate":[67821],"obtaining":[3363,49465],"d_in_foldout_focus_on":[63453],"50f":[62282],"产品描述2":[53683],"universally":[6059],"unusually":[8568],"divides":[23270,26508,30274,33414,36287,47608,50053,69303,69409,72329],"isinitialized":[74681],"give":[69,1378,1909,1997,4108,4313,4387,4392,4493,5181,6139,6750,8244,8305,9223,9276,9457,9669,9996,10261,11069,11610,11819,12354,13182,13323,13622,14567,14719,15026,15866,18327,18620,18665,18743,20263,21967,22011,22796,26005,26049,26557,27493,27575,28639,29719,29863,29934,30396,30443,31708,32311,32412,33008,34285,34497,34943,35354,35684,35794,36116,36285,37405,38802,39560,41369,41775,41907,42796,45118,47454,48258,49423,49495,49506,51014,51170,52143,52921,54886,57141,57289,59670,59750,62034,63746,66395,66667,67242,67651,68535,69719,71269,71793,72307,73922,75397],"convergence":[11635,36590,42766],"sv_dispatchthreadid":[8417],"packer":[9101,22905,32705,46122,48361,48672,48851],"contentrect":[60961,61074],"layers":[146,1926,1949,2063,2229,2252,5826,7203,7869,7971,8002,8021,8175,8272,8390,8775,9040,9342,9858,9896,10086,10633,11466,11587,11636,11658,12703,12734,12862,13144,13444,13499,13596,13729,13834,13842,13896,14009,14510,14545,18321,18420,21080,21349,22470,25633,26605,26629,26644,26650,27449,29099,29132,30352,31705,32220,33447,33689,37365,37795,38347,38571,38601,38635,38919,45267,50006,50025,50138,50305,50454,50520,51342,52091,52718,53324,64841,64859,68459,71557,74187,74269,75367],"unrestricted":[39771,54179],"docker_content_trust":[66624],"#9":[17045],"geological":[7983,50558],"interchangeably":[71016],"dumped":[37167],"raycasting":[6724,13854,21185,39530,39597,39720],"superior":[27142,74184],"inputtracking":[75092,75617,76315],"true":[750,1061,1455,2011,2156,2344,2601,2649,3026,3300,3432,4636,4973,5853,5938,5990,6133,6258,6793,7390,8668,9224,10149,10587,10808,10993,11057,11086,11176,11208,11347,11887,13475,14717,14897,18298,18602,18647,19414,19505,19866,20900,21070,21475,22606,23797,23892,24125,24797,25004,25704,25970,26171,26756,27690,28874,29695,29717,29872,29906,30546,30901,32106,32941,33122,33728,34030,34161,36011,36761,38297,38462,39167,39819,40745,40791,41337,41912,42053,42713,42729,42754,43945,44142,44534,45564,45990,46490,47959,48093,48723,49057,49299,49351,49530,49686,49880,49990,50013,50965,51174,51434,51614,51792,52039,52356,52640,52766,53112,53603,55107,55187,55333,55698,56191,56501,56917,57039,58085,58139,58244,59508,59616,59750,59962,60260,60666,60955,61119,61555,62723,64476,64619,65319,65368,65746,66135,66320,66608,67730,67748,67776,68088,68266,68844,68959,69089,70008,70876,71109,72322,72593,72989,73037,73117,73271,73423,73433,73676,73936,74676,75606,76202],"“silver”":[67186],"dampened":[7594,7603,7611,7634,7643,7653],"expressly":[18734,50342],"reflectivebumpedunlit":[42452],"establish":[21575,22530,35872,49733,67029,70174],"tilesheet":[50881,51231],"needs":[165,237,732,2055,2079,2501,2572,3246,3293,3470,3579,3766,3785,3975,4218,4274,4386,4751,4876,5724,5733,5973,6419,6649,6754,6774,6792,6836,7983,8118,8239,8444,8893,9149,9351,9706,9785,9875,10201,10379,10720,12065,12414,12515,12842,13660,13990,17488,18058,18376,18612,18935,19123,19554,20245,20394,20420,21029,21640,21964,22013,22151,23032,23440,24167,24727,25215,25343,25503,26354,26487,26611,26710,26793,26991,27267,27322,27332,27641,27702,28197,28278,28445,28874,29153,29471,29561,29904,29918,30070,30112,30320,30397,31365,31610,33094,33403,33420,33680,33762,35727,35882,35944,36454,37627,38252,38425,38640,39137,39507,39689,39764,39921,40450,40561,41839,41986,42183,42947,43114,43195,43302,44079,44366,45104,45568,45667,46295,46976,47422,47904,48528,48677,49428,49457,49837,50393,50697,50956,51027,51722,51788,51999,52586,53081,53601,53997,54033,54209,54274,56624,56681,57581,58044,58778,59047,59396,60427,61328,61556,65951,66025,66159,66357,66491,66720,67143,67759,67867,68807,68913,69154,69724,70174,70839,70914,71053,71781,72204,72323,72453,72476,72923,73183,73347,73501,73601,73671,73919,74139,74615,75080,75419,75765,75903],"groupscope":[59656],"previous":[235,526,1006,1886,1954,2134,2449,2750,3309,3668,3769,3785,4449,4602,5041,5773,6031,6105,6398,6765,6821,8081,9795,10529,10633,12680,12799,12888,13249,13499,18585,19307,19584,20130,20595,21391,21528,21739,21843,22058,23177,24519,24624,25063,25104,25309,26375,26709,28772,29101,31703,31838,33135,33440,33893,34184,34856,34982,35718,35949,36329,36811,37019,38507,38565,38595,39964,40234,41546,41749,41859,45278,47447,48335,49021,49381,51339,52036,53097,53514,55714,55923,58066,58803,59038,60392,60511,60787,61146,61473,62685,62839,66172,66257,67351,67626,68498,68637,68893,69131,69377,69481,71010,71407,73412,73562,75303],"intelligence":[19284],"makegenerictype":[40565],"activating":[6844,18176,28605,28754,29833,30490,33498,49193,51596,52497,66903,68046,75086],"hideassetinstances":[51614],"reason":[1488,1895,3587,3696,4391,4567,5940,6068,6150,18058,19589,20117,20572,21739,21992,24728,24758,24784,25095,25328,25599,25678,26296,27508,28874,29193,29904,30885,33134,34379,36454,36680,36800,37657,38404,38505,41918,45721,48163,49381,49474,49526,49832,50068,50945,50969,54281,58369,66720,67272,67518,68900,69138,70259,70302,70606,71336,71869,73029,73303,73615,74137,74895,76037],"m_skylightintensity":[76384],"mystruct":[26467,40573,55621],"newscenecreated":[39210],"foldername":[12808],"assemble":[6948,17169,34820,56729],"readjusted":[205],"easings":[62935],"enumerable":[2685],"injects":[36510],"verts":[25988,30205,38334],"tricks":[2186,6766,27468,40647,44077,68074,74457,74550,75453],"covering":[46,11891,12472,29121,29879,50361,50589],"iachievement":[30082],"hp":[56997,67179],"classifications":[66469],"ericsson":[1556,14465,22766],"tab’s":[48260],"inspectorexpandedstate":[15257],"ways":[131,167,519,775,834,1558,1738,2221,2312,2405,3442,3487,3866,4148,4464,4774,5324,6059,6510,6999,7844,9284,9368,9911,10069,10219,10518,11106,13017,13621,13977,14517,14673,17927,17968,18324,18985,19098,19337,19351,19381,20590,21009,22102,23235,23456,23537,23561,23669,24051,24167,24768,24952,25047,25100,25162,25333,25358,26070,26673,26717,26925,27571,27604,27694,28197,28511,29025,29330,29384,29817,29861,30322,30358,30839,31619,31858,32921,34708,34856,34947,35163,35202,35466,35605,35789,36197,36682,37394,37660,38932,38946,39100,39175,39263,39494,39554,39879,40534,40674,40963,41313,41424,41449,41595,41720,41798,41944,42163,42205,42320,42425,42790,42936,42997,43009,43248,44377,44682,45842,46011,47103,47335,48146,48657,49214,49366,49450,49610,49750,50155,50599,51129,51832,52095,52256,52766,52922,53088,53842,54224,54723,55728,57921,58318,58789,60158,61606,61794,62110,62769,64233,66383,66893,66903,67082,67157,70328,70718,71212,71372,71779,72467,73665,74919,75092],"kernel":[8414,36610,50170,74354],"symbol":[935,1706,1958,2314,3110,3895,4654,5301,7375,12806,18206,19034,33777,34626,39941,40286,54712,66386,72066,73188,74516,74655,75874],"tortoisegit":[48100],"caption":[23229,39479],"argbfloat":[8447],"eventdata":[28004],"agents":[16539,31438,69392,69496],"reveal":[1913,1968,2429,2485,3518,3739,5176,6195,11163,13718,14693,18149,20759,22411,28833,32885,40805,41305,48319,48904,49530,50427,50567,51264,52566,54732,59852,61072,66332,70273,70344,72757],"publishernote":[4299],"play_asset_packs":[532,23512],"leather":[49511,49630],"worry":[23270,24276,25229,42449,47232,66405,66721],"deeply":[2937,40569],"99usd”":[67739],"readable":[933,1706,3731,4298,8635,22174,41252,51722,56721,73299,74258],"surfaced":[17206,75765],"organized":[3012,5115,7215,10521,11796,12135,12340,12527,17946,18054,19182,21711,22066,23030,27685,31659,33572,34267,34475,53400,71762],"coins":[67182,67473],"degradation":[40571,60635],"buildslave":[70481],"#x2e":[66770],"outlet":[4149],"lightmapsettings":[15144,41745,76369],"seagreen":[63633],"xrcontroller":[75685],"grouptransform":[60630],"restoreasynccompilation":[4613],"unitystandardmeta":[29506],"wrapped":[6102,13210,21045,33945,35799,36507,40056,46576],"eac":[14403],"8d71d5006046bb9d5e4a7172eec3f3b2":[66683],"omr":[53679],"contacting":[4418,33733,38604],"directory":[409,463,474,517,998,1122,1229,1432,1745,3243,3532,3852,3870,4217,6468,10430,11859,18666,19493,19963,22989,23483,24629,24987,25459,25911,27600,27647,28218,28294,28681,28719,34672,35038,40501,40713,40813,43303,49748,52074,66585,68720,68900,69138,69696,69760,69796,70258,70562,71390,71680,71851,72856,73412,73445,74077,74532,74655],"onplaybuttonpressed":[62818],"appreceipt":[67345,67829],"setuporientation":[74670],"产品3":[53684],"inspectorfoldout":[58927],"silence":[4819,71112],"m_framecount":[20478],"#42":[15711,40817],"visualtreeasset":[54943,55100,55202,55295,55358,56360,56437,56553,56655,57517,57704,58818,59421,59927,60136,60155,60866,61645,62359,62515,62695,65288],"impractical":[8203,37639],"linkage":[1285,30008,34664,34693,73580],"#6c6c6c":[63318],"delayed":[7476,7579,34237,49285],"aquamarine":[63511],"caused":[214,6079,7256,7766,10012,23442,25095,25106,28439,29276,29470,32298,32739,34871,35347,35995,36337,37728,49390,50025,52530,52647,67423,68642,71412],"testrunner":[3104,18852,40263],"charged":[4392,25499,67050,67258,75642],"isdelayed":[59616,64619],"loadachievement":[30081],"consider":[1024,2439,3308,3455,4434,4440,4964,5901,6039,6129,6806,7364,8357,8436,9341,10012,10439,13483,13601,13962,18257,18609,19478,20923,24770,24908,26361,26703,28606,29150,29471,29562,29720,30267,30349,30875,33135,34909,36687,37273,37669,37702,38405,39597,39720,41814,41884,42101,43071,43174,45096,45290,45582,49404,49832,50678,51169,51967,52225,52624,52972,54131,57318,58424,59189,60634,63068,63218,64330,66563,67651,69785,69845,70259,70295,70350,70432,71012,71391,71772,71847,73022,73241,73332,73360,75503],"hook":[24475,24894,36541],"risky":[21134,29799,31008,31368,70225,70246],"displaylatestevent":[62404],"suggest":[48621],"subdiv":[22836,27418,29764],"turnaround":[6834],"fired":[21345,33099,34932,69632],"'pressed'":[40026,40116],"localizations":[16470],"risking":[71017],"_tiling":[47615],"stylized":[6908,12829,26800,27063,27268,37320,37428],"mylink":[19409],"violated":[7231,8514],"getfiles":[68912,69153],"providertype":[2493],"resistance":[9308,11635,13238,32136],"“draw":[36400],"specular":[317,3625,8625,13926,14259,22899,27182,28879,29510,29787,35063,37981,38360,38411,38435,41781,41892,42235,42268,42295,42300,42365,42438,42475,42513,42519,42535,42556,42580,42585,42813,42825,42836,42847,42868,42882,42902,42922,44442,45197,45299,45550,45586,46510,46619,46728,46866,49449,49465,49470,49505,49571,49593,49607,49624,49634,69244,72758],"sensibly":[27322],"'assets":[2224,66679,67692],"preventing":[13212,23442,30268,43013,48512,51202,54264,60518,67296],"textureimporterinstanceids":[48745],"sharedusercertificates":[12647],"exited":[17994,32803,49652,60425],"#353535":[63394],"unreferenced":[33381,70571],"branching":[8439,41785,41880,42044,42110,43001,43021,44508,49662,52224],"animatedsprites":[51777],"coarse":[37654,53734],"deprecated":[3963,4066,4218,4404,4449,6057,9057,9781,9977,10602,10730,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11863,12271,12392,12581,19263,21615,22106,22146,25979,27073,27750,28307,28317,29444,31009,33801,34322,34446,34534,34852,36163,36586,38063,44026,48252,48674,50196,65898,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,67824,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68749,68930,69174,69349,69453,70761,71107,71157,71217,73138,74307],"deformed":[284,6219,15844,29392],"suggests":[3989,4980,8263,19560,20438,30341,39614,41370,72368],"reflectiveparallaxspecular":[42518],"reinstallation":[67151,67625],"unitysystraceplugin":[28021],"m_tank":[56461],"xrsystem":[74281],"viewdata":[61982],"dividing":[33415,44298,71885,72315],"value3":[1797,52446],"tilepalettebrushesbutton":[51110],"lightmode":[21742,28925,29503,42387,42630,44603,44758,44784,47104,47666,48987],"consumers":[4027,18819,70950,71043,75520],"unity_server":[33799],"storesbcd":[53198],"findclosestslot":[56944],"byteaddressworldtoobject":[5454,5599],"key1":[66723],"iupdateselectedhandler":[49898],"pointing":[6967,7085,20717,21195,26928,29622,55641,55805,60357,60761,72315,72765],"istoreextension":[67561],"fontasset":[65306],"mystudio":[53682,53891],"android's":[413,792,913,1592,11724,67758],"devicedefinition_addcustomfeature":[75531],"onnetworkdestroy":[10846],"gained":[38403,58201],"sourcesceneasset":[38982],"deviation":[10230,26986,39438,49533],"restarting":[40502,52326,66687,68601],"unityanalyticsmodule":[16766,30972],"ifdef":[31952,32970,42962,44907,46439,46694],"loadallassetsatpath":[3611,3746],"rasterize":[38406,44133,45724,47306],"c2z":[5389,5533,20360],"lightmapper's":[23438],"#006aa6":[63277],"deprecationmessage":[74307],"licensing":[211,18939,26703,27762,31365,31385,33069,33769,70836],"selectionchanged":[52470],"smpclamppoint":[45252],"leftwards":[30164],"resp":[41507],"olive":[49871,63610],"utilises":[65986],"placeinfront":[57608,62811],"wherever":[158,6209,6688,8146,16060,21254,24637,29915,33134,35089,37700],"sim":[35357],"gross":[234,4078,53494],"gaming":[3013,6841,9466,12885,17220,17356,17384,17437,22972,33573,37319],"dxt1crunched":[48728],"previousvalue":[55721],"gems":[67182],"commanded":[2211],"alt+control+left":[39299],"proofing":[43959],"playersettings":[772,2803,11667,12443,15126,19026,24485,24959,25837,29823,34225,34343,34466,35818,42223,43032,66462,66879,72989,73423],"sources":[462,556,1244,1843,1862,1894,1994,2051,2187,3229,3731,4509,4722,4766,4790,5019,5161,5179,6472,6965,7446,7463,7468,7619,7660,7809,9669,10398,11011,11439,12627,12757,13278,13295,14794,14878,18164,22439,23399,23448,26790,26792,26920,26952,28960,31599,32303,33290,34188,35906,35972,36526,41374,41416,43709,46396,49423,49626,54885,68018,68049,69005,69257,69740,70241,70288,70398,70746,70954,71809,72463,72726,73501,74976,75570,76035],"captions":[23227,40042],"repacked":[48701,52877,53183,53271,53756,53782,54041],"converters":[69384,69488],"supposed":[4866,5162,6758,15844,49507],"dispatched":[22333,61516,67136],"gbv":[21079],"aac":[72674,72712,73075,73133],"zero":[2089,3695,4671,4755,5006,5352,5551,5748,5790,6963,7306,8353,8437,8509,8686,8914,8989,9172,9294,9787,10586,11225,11443,11508,11605,12755,12812,13021,13276,13293,13408,13680,13865,14562,14968,14989,15844,18182,18577,20130,20260,20774,21031,22794,24009,24489,24985,25511,26044,26588,26788,26919,28885,29102,29133,29629,30164,32065,32164,32225,32251,32911,33095,35345,35424,35931,36093,37422,37617,39368,39662,43752,43977,44298,45145,45276,45898,47607,48150,49639,50351,50401,50498,50563,50945,50969,51391,51437,51650,51990,52146,54788,56945,57848,58560,63040,63732,64403,64418,65655,66137,66278,67737,68154,71809,72323],"interestingly":[50947,71808],"morph":[366,24680,25207,29392],"branch":[3237,11887,18716,20337,22709,39150,39322,41791,41885,42044,42127,42948,43022,43961,44535,48310,49151,49661,52111,52174,52194,52228,52672,52735,66720,67886,70613,74360],"amd64":[70472],"0x80001000":[20295],"administrators":[70965],"oneminussrcalpha":[14162,32942,43648,43772],"receiptcreationdate":[67832],"accumulated":[14501,36242],"authenticated":[30076,52798],"besides":[34672,47368,54430],"gpu":[369,554,1679,3580,5856,5944,6802,6880,6936,8401,8647,9457,9883,9976,10138,10438,11812,12355,12881,13231,13364,13417,13534,14009,14114,14295,14318,17752,18564,19052,19149,19876,20239,20418,20438,21030,21514,21725,21877,22183,22687,23245,23376,23426,24598,25262,25980,26663,26840,27073,27088,27133,27566,27694,28071,29331,29385,29416,29439,30265,30321,30345,31862,32282,33482,33506,34204,34278,34486,35711,35876,35924,36152,36154,36240,36354,36523,36572,36678,37704,37847,38289,38406,38420,39675,41783,41810,41877,41976,42007,42044,42162,42184,42317,42430,42664,42944,42987,43021,43162,43173,43336,43457,43653,43727,43995,44096,44133,44164,44269,44377,44534,44624,44757,44878,45009,45179,45445,45564,45721,45850,45932,46782,46819,47245,47951,48164,48329,49035,49354,50001,50056,50067,50079,50140,50217,50366,50661,50686,50703,50996,68708,68953,69199,69351,69455,72462,72917,73140,73245,73462,73689,74161,74339,74918,75872],"interpreting":[40647],"“player”":[68801],"custommessagetarget":[29429],"variable's":[64274],"trello":[67901],"#f0ffff":[63512],"stencil":[11765,13206,21738,22913,37958,39675,39734,42677,44097,45849,47952,68923,69166],"suitable":[1967,2996,3590,5951,6043,6055,6284,6833,7504,7895,10465,10794,11335,13423,14233,14351,14818,15022,15840,17591,18105,18485,19314,20222,22093,22934,23440,23560,24509,26798,26874,27077,27215,27268,28856,29334,29561,30271,30369,31646,31703,32314,35037,36596,36936,37639,38287,38660,39614,42262,42615,43973,45195,46809,49457,49568,50648,50712,50743,50770,50783,50796,50809,50822,50860,53296,61921,65992,71671,72323,75322],"pass”":[68775],"gettesttext":[38703],"targetsdkversion":[23498],"binary":[405,526,608,903,1178,1327,1778,3346,3576,3729,3830,4539,4959,6041,6199,9075,10460,12021,13963,17185,19072,24943,26077,26635,26647,27699,28100,28263,29825,30861,31051,33500,34663,36498,39934,48095,49395,49737,50656,52591,52771,53085,53299,66588,67245,68107,68313,72119,73185,73416,73659,74513,74588,75652,76088],"overriddes":[2039],"matte":[37841],"examplepluginfunction":[30011,34666],"uielementsviewimporter":[6721],"preset_":[19560],"unity_transfer_instance_id":[23262],"grenade":[9155],"subtractive":[6823,9502,9957,26800,26860,27264,42792,43856,69243],"appendline":[36273,36421,36863,37002],"genre":[5006,22663,53285],"removablestorage":[12646],"m_lightprobecloud":[76371],"glance":[49446],"closing":[1996,2211,9753,11343,18979,23439,24792,29997,35652,44695,48651,49823,58714,61474,61966,62014,65025,67541,67702],"crypography":[52615],"impose":[890,18319,18513,25265,25734,37667,71408,75034],"e":[173,779,3912,3956,4042,4773,5464,5609,5838,5945,6806,7007,7155,7931,8511,9276,10012,10620,11105,11407,12165,13058,13379,14029,14226,14965,15839,16060,19451,21980,22057,22142,23235,24728,25035,25144,25461,25939,26588,27172,29897,34773,35718,35866,35966,38761,39286,40740,41202,41428,41471,41506,42081,42378,43224,43907,44066,44447,45142,45195,45248,45586,45605,46773,48614,48686,50933,52023,52150,52551,54724,55950,56685,57032,57843,58162,60253,62181,64662,66615,67327,67429,67625,67775,68614,68806,69838,70047,70761,71132,71307,71523,71901,74141,74575,74653,74672,75136],"ppk":[70106],"frag_meta":[28929],"accessor":[6094,20299,28499,76068],"discusses":[40181,75369],"unity_pass_deferred":[44017],"playmovieonspace":[10748],"header":[3432,4807,4903,10163,20595,20645,21834,23796,25382,25410,27699,27918,27943,29192,31674,31737,31753,31771,31783,31808,31829,31846,32051,32084,32099,32123,32210,32334,32352,32378,32600,32623,32643,32671,32718,32753,32897,34957,36041,36187,41545,41689,52390,54419,55218,56113,57341,57626,59841,63296,64636,66159,66857,68202,68264,68382,71612,72445,73307,73325,73625,73838,74304,75980,76338],"128kb":[14076],"a’s":[71885],"customizations":[3724,48225,48329,64373],"mouseeventtestwindow":[60436],"conditionally":[385,3807,7387,25855,39947,40191,42974],"readallbytes":[3358],"group's":[24299],"wraplambert":[46579],"hole's":[50515],"spawners":[66080],"loadedassetbundleobject":[3404],"crucial":[5951,6807,23525,48315,70801],"mrtk":[68784],"yesin":[45058],"pens":[60357],"bracket":[40314,43222,43589,44695,49821,50636],"omit":[21051,22752,26081,32066,33783,49540,61939,61973,62249,63161,70606,70826],"begindisabledgroup":[59597],"lightmappers":[10439,22161,26999,27084,29482,68708],"pointerid":[56916,60259,60791],"behave":[715,1102,1756,2350,6818,7469,7962,8166,8266,8376,8558,8768,9017,9029,9320,9751,9953,11074,12725,14504,15847,20863,21188,22701,24776,25722,26459,26569,27184,27187,27224,27272,27300,27569,30170,32287,32456,35831,37382,37596,37649,37730,38494,39438,44297,44502,48885,51616,52037,54044,54771,62100,68730,68863,69096,72229,73486],"physicsshapegroup2d":[8765],"processed":[3692,4825,4932,8112,8489,8624,8871,21359,21733,22333,23420,24167,25998,26044,30062,32066,33401,35264,36153,36296,36359,36528,41091,41960,57958,66153,67538,67550,67601,68993,69240],"cbuffer_end":[43991,45042],"initiated":[4710,7766,71813,73285],"unity_64":[33809],"imaginary":[6725,8608,22750],"ad":[16091,17370,22318,42811,53318,58355],"control's":[23808,39666,40057,54625,55807,58699],"nothis":[38063],"unified":[4879,11632,16527,29587,30061,40915,41263,62833],"nativeslice":[26127,26438],"hour":[8203,21075,25062],"jointbreakaction2d":[26577],"unityxreyes":[75499],"transitionstart":[62413],"tag's":[50288],"turbulence":[15026,32204,50611,52169,52216],"rebeccapurple":[63626],"rogue":[40747],"overriderenderpipelineasset":[49226],"d_console":[63443],"pause":[519,3681,6944,7136,7156,7191,8972,10754,12221,12516,14562,14597,18130,18254,21319,21956,25809,25897,28394,30377,32167,32849,34072,40653,52010,52088,52765,66856,71268,72553,73050,74750,75076,75660],"upstream":[68911,69152],"landscapeleft":[1580,25873],"rolloffscale":[5254],"oncancel":[49903],"physicsraycaster":[39706],"_uvscale":[14042],"doom":[8203],"simulating":[5052,7348,8280,13239,15013,18239,18563,22580,26920,31797,32136,32180,33583,46576,72956],"radeon":[30288,38349],"cryptographic":[23140,28189],"unpacknormal":[46192,46868,47502],"_rimcolor":[46201],"escape":[9810,14004,20556,59469,60495,70773],"axleinfo":[74440],"#ff0000":[49850,58704,61969,63627,63685],"medical":[53724],"existing":[122,993,1070,1107,1134,1156,1187,1190,1601,1846,1970,2238,2287,2372,2463,3300,3437,3446,3924,4209,4372,4448,5098,5353,5721,5863,5919,6056,6083,6896,7816,8221,9120,9416,10704,11160,11385,11467,11966,12586,12745,13629,13744,13793,14544,16151,18079,18441,18462,18896,18906,19013,20052,20553,20880,21193,21401,23059,24545,24631,24950,25490,25743,25888,26122,27845,28781,29092,29915,30000,30193,30301,30881,31012,31825,32242,32847,33239,34238,35211,35415,36736,37487,38532,38679,38948,39027,39159,39598,39637,40204,41689,41702,43292,43456,47995,48243,48366,48426,48562,48674,48991,49655,50307,50353,50559,51142,51397,51915,52092,52342,52865,52979,53095,53385,53789,54016,54574,54640,54747,55125,56045,56609,56674,56793,57182,57415,57585,57864,58448,59048,61661,61893,64370,64549,64774,66335,66742,66895,67047,67143,67256,67967,68041,68567,68690,68812,68850,69041,69296,69397,69402,69771,69812,70585,70839,70962,71017,71772,72092,72786,72832,74132,74224,74412,74522,74939,75050,75218,75536],"googleplaytangle":[17045,67692,67765],"spawner":[13325,66081],"sharing":[4223,10656,18811,22142,22555,25970,26964,33070,36554,40571,43957,50431,54220,66555,68039,69693,70451,70628,70952,73410,73671,74213,75903],"grass":[2995,13899,25284,37565,40039,42876,45640,50360,50451,50519,50626,72773],"buttons":[1886,4340,5118,7829,9561,9782,10222,10331,10514,10697,11160,11380,12303,13148,13851,14128,18140,18182,19021,20638,21400,21607,22032,22630,23892,24276,24737,24769,24895,25763,29689,29893,30232,30582,32064,32849,36061,39385,40063,48511,48683,49484,49540,49629,50414,50490,52088,53709,54220,54730,54796,55807,58586,59838,60381,60794,61610,62755,63360,63846,64218,64444,64643,64697,65063,65081,65739,65777,65903,66335,66381,66992,67071,71136,71268,71529,71658,71952,72764,72971,73473,75092,75156,75649,76095],"deinterlace":[14795],"elaborate":[24214,32923],"signal's":[7514],"replaced":[2740,3065,3363,6007,6207,18386,20639,23177,26081,29907,32185,34643,36696,44371,45631,47758,51148,66958,68576,68805,71199,73587,74295,75119,75223],"progress_bar_progress":[63357],"fixed":[1676,2177,4434,4994,6838,7250,8256,8286,8500,9002,9099,9144,9162,9297,9457,9648,9727,11548,11736,12406,12883,13160,13555,13651,13673,14323,14557,14728,14962,14983,16000,16038,16597,16605,16613,16621,16629,16637,16645,16653,16661,16669,16677,16685,16693,16701,16709,16717,16725,16733,16741,16749,16757,16765,16773,16781,16789,16797,16805,16813,16821,16829,16837,16845,17112,17120,17128,17541,17746,17754,18225,18316,20729,22224,22301,23270,24274,25991,26056,26117,26547,26557,26577,26580,27705,29158,29364,32853,32968,33603,36333,36639,37455,38090,38423,38501,39547,39865,42666,42688,43571,43882,44231,44343,44430,44870,45138,45201,45267,45571,45801,45846,46729,46876,47255,49763,50001,50141,50595,51387,51527,51552,51785,51882,51957,52275,54724,57641,59064,59462,59998,64756,66230,67182,68787,69300,71311,72315,73062,73589,73673,74335,75485],"audiolowpassfilter":[7646,15153],"expandsupported":[40838],"rotates":[2047,2180,6756,6958,8230,8534,8594,10392,11434,13103,13272,13706,14680,15015,18155,18225,20072,22736,25882,48231,51537,51605,51638,51880,62030,62201,62735,72986,76262],"stove":[9368],"letterboxed":[11735],"colorutility":[6078],"bulk":[52860,52972],"verticalscrollervisibility":[59700,65327],"memset":[4926],"brackets":[4713,8444,9348,32924,34573,35354,37056,40321,41211,44433,44695,45106,63721,72364,73952],"radial":[32906,58031,58579,60877,60977,63127],"yesbatched":[38221],"screenshots":[4262,7995,9549,14550,18674,21832,27011,33406,51125,51152,51838,52058,53293,67243,67639],"vertexattribute":[292],"peak":[4821,6266,7493,7685,29176,42751],"“tank”":[35411],"sliderdirection":[65154,65228,65252],"dereferences":[24983],"m_fog":[76352],"tiebreaker":[119],"0d":[55024],"rescan":[33416],"_network":[11166],"millimeters":[8031,39440],"applyrevertgui":[40498],"stapler":[28314],"same":[122,187,234,291,509,631,693,730,890,935,1003,1087,1107,1158,1181,1230,1270,1468,1588,1611,1762,1812,1888,1909,1942,1955,1972,1996,2045,2068,2188,2239,2257,2275,2287,2360,2411,2427,2663,2718,2990,3086,3306,3342,3414,3468,3488,3522,3591,3723,3854,3895,3914,3976,4451,4467,4665,4740,4847,4879,5117,5160,5330,5726,5770,5910,6037,6150,6285,6314,6383,6445,6543,6737,6761,6809,6858,6934,6965,7019,7281,7446,7463,7469,7670,7931,8004,8114,8149,8187,8363,8397,8420,8524,8587,8647,8814,8975,9075,9223,9269,9351,9608,9720,9827,9909,10003,10076,10118,10206,10359,10398,10430,10574,10605,10612,10698,10720,10732,10793,10850,11044,11134,11176,11272,11308,11445,11516,11632,11764,12109,12279,12618,12717,12757,13075,13149,13209,13266,13278,13295,13344,13375,13538,13559,13585,13628,13665,13818,13887,14009,14247,14323,14477,14498,14568,14700,14845,14999,15816,15831,17956,17981,18076,18172,18375,18439,18479,18501,18575,18623,18797,18900,18933,18981,19028,19086,19174,19383,19454,19617,19979,20047,20243,20392,20415,20460,20538,20608,20724,20807,20893,21052,21160,21192,21326,21417,21460,21592,21989,22085,22116,22125,22142,22480,23271,23377,23440,23498,23573,23629,23710,23798,24122,24195,24275,24521,24547,24631,24646,24734,24743,24777,24906,24948,25099,25194,25355,25407,25489,25571,25734,25881,26109,26244,26264,26295,26429,26441,26478,26494,26564,26572,26607,26646,26664,26806,26925,26964,27035,27125,27144,27210,27261,27293,27325,27335,27488,27507,27591,27617,27671,27701,27908,28181,28218,28301,28431,28681,28719,28753,28874,28975,28994,29021,29131,29207,29333,29421,29704,29720,29801,29827,29918,30043,30168,30219,30312,30324,30478,30692,30902,31982,32114,32172,32219,32281,32360,32384,32686,32730,32776,32847,32923,33254,33382,33527,33582,33721,33820,34042,34162,34184,34205,34428,34640,34721,34758,34820,34856,34882,34905,34925,34939,35137,35191,35631,35714,35795,35931,36054,36226,36348,36554,36637,36712,37563,37684,37702,37731,38332,38393,38437,38486,38492,38632,38664,38751,38820,39012,39070,39123,39160,39192,39256,39406,39568,39659,39681,39819,39884,39969,40033,40091,40123,40203,40563,40616,40971,41463,41619,41677,41760,41812,41860,41876,41989,42050,42121,42312,42620,42713,42729,42754,42788,42813,43002,43031,43115,43149,43223,43490,43543,43800,44066,44386,44457,44516,44600,44625,44669,44687,44811,44870,45058,45121,45215,45389,45447,45564,45706,45858,46224,46551,46767,46877,47163,47251,47995,48077,48224,48252,48319,48501,48594,48623,48653,48685,48913,49177,49289,49309,49411,49442,49479,49525,49573,49593,49607,49630,49636,49687,49823,49891,49913,50007,50023,50057,50094,50146,50283,50289,50353,50378,50431,50585,50881,51018,51123,51138,51158,51169,51181,51214,51388,51608,51656,51816,51874,51975,52181,52494,52689,52696,52727,52757,52967,53097,53294,53733,54070,54220,54246,54296,54454,54532,54617,54635,54705,54762,54787,54886,54895,55633,55653,55806,55888,56101,56394,56702,56837,57149,57337,57637,57887,57971,58018,58112,58138,58410,58484,58709,59047,59481,59670,59837,60223,60382,60544,60635,60795,61314,61354,61472,61492,61539,62009,62193,62414,62685,62748,62840,63080,63681,63702,63719,63808,63891,63974,63989,64036,64138,64234,64373,64696,64758,64885,65063,65133,65934,65988,66116,66201,66227,66341,66356,66393,66555,66859,66910,67035,67148,67195,67249,67460,68070,68160,68533,68601,68701,68913,69154,69398,69502,69642,69788,69855,69946,70027,70224,70239,70260,70299,70333,70399,70693,70760,70775,70875,70940,71017,71220,71289,71370,71396,71423,71622,71662,71911,72008,72032,72133,72193,72287,72292,72405,72522,72728,72856,72917,72996,73172,73412,73561,73673,73816,73904,73922,74162,74391,74535,74603,74644,74776,74846,74850,74978,75020,75067,75076,75191,75395,75426,75503,75969,76217],"smoothdamp":[10472],"prerecorded":[5006],"checked_focus":[63453],"cubemapcount":[8673],"intended":[5182,9553,9720,11040,11136,11152,11160,11813,13961,14858,18327,21395,21453,24051,24456,24562,27167,27312,27595,28881,30224,32054,33446,34493,34539,35957,37639,42813,43655,44389,47377,49535,49819,51169,52466,54106,66337,66390,66901,68304,68310,69396,69500,75085],"unlink":[23711,41704,53391,54013],"duplication":[3316,3475,3482,41869,47156,52854,67592,75068],"pases":[45870],"caller":[66521],"drawcanvas":[58486,60701],"_hdr":[45166],"cropping":[14868,33547,64756],"camerat":[41467],"assetbundlemanifest":[3256,3309,3414,15224],"gravel":[31720],"drum":[5006],"envelope":[39378,54254],"alone":[3982,8078,11040,20787,52757,58155,74522],"listofnumbers":[33271],"aseprite":[47,15947,31044,31391],"clipplayable0":[33945],"r32_sint":[8473],"pendulums":[9682,9743,23081],"deuteranopia":[36501],"squeezed":[75650],"csg":[45852],"anyplanetpopulated":[59949],"idsuch":[53756],"logically":[12799,25492,64699,65063],"invalidparameter":[52801],"enablecodecoverage":[21077,68831,69076],"pac":[11887],"splash":[1223,11683,11784,12092,12273,12336,12503,19178,25881,33473,34237,34263,34345,34471,49778,52601,52723,73189,73933],"card":[4009,4085,4294,12647,23189,25292,29721,30414,36541,38349,42364,43591,52481,52847,53271,53728,57630,67003,67961,71757,73139],"competitive":[17356],"lightingdataassetparent":[15341],"modularization":[4876],"whenever":[149,729,1733,2215,2611,2996,3669,5006,5733,5938,6062,7178,7504,7767,11615,13357,18126,18313,18898,19491,21312,21453,22695,24521,25083,25262,26122,26292,27538,27685,27990,28058,28067,29601,29790,29907,33264,33401,33468,35126,35727,35879,36058,36205,37145,37631,39157,39310,39523,49644,49803,51616,56183,56219,60571,60929,61032,66128,69632,71055,71662,71913,72841,75140,75479,75910],"extrauserproperties":[7025],"entitlement":[24634,26703,52691,66992],"mediaencoder":[74199],"glitch":[52034],"materialpropertyblock":[7909,20394,23264,23416,45100,45142,49379],"locationservice":[1263,1388,25684],"_worldspacecamerapos":[14191,47086],"hotkeys":[2316,51226,61391,68047],"choice3":[64707],"vcperforceworkspace":[21045],"microsurface":[49607],"steeper":[13062],"precautions":[70405,72532],"transitioning":[4861,7929,10356,22546,38667,49661,60424],"frametimingmanager":[20457,21864],"morphing":[21464],"sha":[53832,70677],"#fdf5e6":[63609],"listings":[18666,64745],"openmpt":[52101],"apk":[398,403,421,431,462,539,557,581,899,962,1255,1310,1331,11844,17062,23124,23481,24943,33885,49743,52773,52823,52875,53086,53300,53831,53997,54059,67235,67265,68901,69139],"pointermanipulators":[60226],"unityprofilermarkereventtype":[28004],"ambiguity":[43281],"getswapchainpanel":[74735],"buses":[35998],"salmon":[63631],"isfrontfacing":[73111],"deg":[6280,6309,62201],"designating":[40332],"terms":[1921,4011,4034,4181,4206,5260,6844,7305,9004,9169,9299,9729,13557,13675,13860,14985,16043,17030,18139,18734,22016,22203,22288,30502,34857,36710,37708,41452,41677,45513,45564,48227,49522,50340,53448,60638,66178,70952,72299,72717,75386,75482],"foreground":[12451,22413,24329,34869,54302],"axe":[7284],"persistence":[29154,61982,65697],"unrecorded":[52058],"nouse":[38152],"myparalleljob":[26363,26515],"argc":[66850],"fades":[7795,7992,9857,10358,10768,12305,31758,36632,40076,71879],"kunityxrinputtrackingstateall":[75623],"iphoneplayer":[28447,35806,67395],"batterylevel":[76117],"uvmaintex":[23316,29541,31908,33050,46171,46547,46864],"employs":[68285],"shader_feature":[28920,29521,41896,42035,42948,44506,45017,68999,69250],"setvaluewithoutnotify":[55618,55727,56624,57072,57915,61824],"validator":[4387,4478,28876,35063,67773,72762],"live":[4545,7189,12154,13222,16450,17240,19643,23132,29154,30912,31144,31431,33842,35897,36044,37526,37740,41928,42378,50135,53265,54468,54558,56037,63106,67657,72794,74202,74512],"tires":[14969,58876],"m_uxml":[56655],"obtain":[219,2063,2999,9928,29121,39640,52599,55107,58923,67581,67644,68740,72323,75426,75750],"message1":[29426],"hide":[2259,3964,5305,9070,9224,11163,11190,11723,12079,13718,14693,18143,20076,20099,22046,22705,23717,24578,25284,29470,29707,30825,32233,32263,32777,33651,39308,39630,39798,41425,41498,41565,41717,43592,45095,48904,49481,50509,50570,51614,54895,55807,56186,56476,57822,58730,61328,62814,64153,64641,65370,65876,65999,66332,67131,67760,67868,71049,71301,71990,72757,73276],"significantly":[567,3321,4867,6054,6479,6810,7173,7796,10080,12903,14581,14824,20239,22464,23434,24964,25083,26046,27011,28463,30885,32220,35890,36511,36596,37428,44377,44936,49309,49668,50068,50550,53370,60204,68351,73302,73346,74602],"populated":[11094,12588,27172,30560,31727,32921,33616,35090,50466,55508,59932,60427,64365],"dock":[18896,25355,30831,34748,36555,36694,59189,71911],"lod":[7873,7878,10325,12954,13628,14035,14163,14778,16256,18562,20735,22814,23272,25139,25203,26661,27487,27746,27755,29416,29526,30184,31884,33020,35159,42195,43174,44010,45477,45516,45939,46454,46802,46842,47200,48225,48260,48268,50148,50595,52124,68707,74271],"comparedepths":[68945,69189],"networkconnectionclass":[11211,11227],"restoreprevioustool":[59630],"exposed":[4854,5029,5965,8144,21087,21181,25855,28053,28063,31745,33814,34209,34860,38023,39966,40145,41289,42027,42704,42725,42747,42772,48557,50289,58156,60170,60510,60902,61002,66314,66631,71016,75405,75896],"01b57c2e":[67470],"indirectly":[6320,22498,28601,33467,36597,38542,49455,62759],"ottawa":[57144],"algorithm":[2608,3249,3293,5000,5262,7175,10206,10575,11621,12918,14286,14568,18224,20477,21554,29154,29363,32232,36328,37227,48614,50374,51458,52040,53377,57848,66111,66739,68710,68915,69156,74293,75740],"transact":[67856],"unassign":[43250,49197],"worker":[1795,6049,9466,11808,12333,12885,21034,21349,26267,26292,26477,27986,29243,31634,31649,33503,34279,34493,35037,35735,36040,36118,41290,68130,68279,73915,75794,76029],"software":[156,346,1596,1904,2179,2188,3591,4274,4506,5017,6785,9142,12180,12647,13369,14821,16345,17152,18672,18734,21550,21961,22938,23429,24639,24974,25193,25601,26960,28282,28402,28785,29771,30502,34988,35240,35917,36588,37460,37549,37948,38932,40657,48053,48223,49541,49563,50200,50342,50656,50929,52065,52511,70953,71768,72221,72610,72697,72714,72730,72886,72968,74907,75280,75323],"sn":[27617],"mode’s":[36205],"unverified":[22329],"recreate":[532,3587,8221,27169,35766,39169,40689,49594,50355,50432,54897,69372,69476],"column’s":[36041,36187],"swarm":[32701],"\\unity\\cache":[69699,69838],"intersected":[58141],"modulate":[7562,32459,42792,47571,48286,59735],"ten":[3478,5994,7482,13076,20684,22353,27263,35260,37623,42818,43071,51990],"forwardbase":[42392,43891,44577,45189,47105,47666],"dds":[6700],"flexwrap":[65204],"technotes":[52599],"tilesize":[76412],"procedural":[2063,10585,18256,21202,21710,23275,25529,26927,31891,34682,38063,42755,43413,43498,44588,45055,46346,46780,47580,48168,49435,52116,52196,52236],"ordinal":[5988],"trygetcullingparameters":[49066],"time":[14,65,229,251,317,434,494,509,567,583,1087,1169,1371,1602,1724,1784,1883,1895,1912,1957,1967,1994,2063,2257,2272,2284,2324,2395,2437,2665,2769,2958,3247,3304,3393,3468,3490,3569,3579,3674,3768,3908,3953,4065,4157,4178,4245,4361,4461,4545,4573,4680,4722,4776,4793,4866,4909,5260,5288,5322,5353,5765,5866,5938,6000,6112,6235,6302,6313,6360,6419,6479,6747,6801,6858,6934,7077,7156,7281,7476,7670,7688,7718,7739,7929,8163,8328,8442,8586,8598,8858,9075,9191,9418,9464,9588,9720,9837,9875,9947,9998,10089,10109,10329,10477,10560,10572,10648,10708,10724,10768,10871,11007,11163,11221,11319,11484,11534,11606,11740,12304,12349,12585,12885,12996,13089,13115,13130,13180,13193,13239,13307,13363,13417,13457,13809,13939,14233,14314,14553,14567,14721,14790,14831,14975,14999,15027,15794,15863,16106,16453,16579,17092,17110,17133,17956,17984,18069,18129,18224,18256,18357,18455,18504,18575,18819,18900,18934,19035,19210,19285,19383,19471,19997,20116,20208,20239,20517,20539,20712,20787,21007,21029,21158,21192,21323,21465,21884,22078,22103,22107,22128,22142,22228,22355,23434,23615,23804,23890,24160,24404,24521,24590,24640,24906,24923,24944,25044,25179,25264,25495,25686,25695,25744,25849,25861,25912,25997,26056,26170,26244,26264,26359,26441,26478,26509,26572,26597,26714,26787,26798,26809,26812,26946,26961,27015,27035,27067,27082,27089,27113,27157,27169,27187,27214,27266,27293,27341,27520,27661,27678,27698,27937,28176,28464,28639,28801,28963,28997,29121,29277,29484,29568,29593,29720,29813,29827,29863,29918,30096,30207,30265,30329,30345,30490,30501,30856,30916,31366,31642,31758,31788,31838,31840,32093,32136,32152,32218,32271,32414,32631,32679,32847,33074,33086,33394,33400,33421,33456,33472,33842,34042,34170,34238,34279,34428,34493,34594,34736,34840,34919,34932,34994,35268,35392,35631,35684,35782,35794,35901,35969,36020,36118,36155,36223,36298,36380,36432,36472,36569,36678,36784,37227,37536,37639,37679,37683,37692,37724,37790,38245,38275,38292,38324,38354,38458,38492,38500,38558,38588,38731,38870,38921,38984,39126,39159,39223,39357,39837,39913,39997,40091,40176,40514,40538,40545,40639,40689,41320,41395,41427,41577,41619,41791,41835,41880,41946,41993,42025,42050,42132,42183,42810,42981,43021,43110,43126,43130,43147,43172,43239,43414,43534,44022,44165,44386,44510,44830,45202,45206,45448,46484,47067,47324,48179,48230,48337,48535,48546,48590,48703,48913,49309,49522,49642,49677,49720,49765,49886,49948,50005,50023,50057,50142,50289,50321,50356,50652,50670,50809,50932,50965,51560,51596,51782,51794,51949,52179,52250,52532,52597,52766,53097,53379,53686,53769,54214,54247,54452,54706,54895,55623,55653,56222,58176,58560,59193,59752,60382,60635,60775,61186,61470,61492,61550,62414,62596,62836,63105,64489,65233,65257,65934,66038,66099,66135,66183,66227,66332,66428,66555,66811,66836,66869,66888,66903,66922,67060,67073,67170,67254,67296,67533,67591,67735,67979,68043,68070,68130,68258,68263,68602,68852,69061,69303,69409,69719,69789,69856,69877,70122,70150,70224,70243,70258,70297,70400,70700,70872,70940,71028,71220,71417,71548,71592,71634,71869,71902,72093,72225,72247,72283,72319,72368,72405,72531,72609,72646,72773,72830,72876,72916,72939,73060,73170,73270,73320,73395,73433,73639,73677,73702,73926,74121,74203,74347,74592,74639,74795,74839,75068,75076,75133,75264,75294,75440,75503,75765,75907,76194],"pixel":[51,554,748,6723,7920,8108,8635,8679,8864,9276,9463,9894,11164,11678,12116,12844,12880,13206,13708,14026,14134,14318,15950,15964,18976,19077,19150,20427,20708,22042,22183,22657,23816,24489,24777,24906,27146,27261,28877,30355,31022,31392,32299,32393,37319,37419,37496,37559,37798,38243,38292,38345,38384,38435,39402,39599,42258,42362,42393,42456,42547,43154,43200,43571,43957,44053,44133,45194,45291,45501,45568,45671,45851,46295,46718,47276,48373,48528,48648,48706,49510,49533,49629,50007,50131,50419,50435,50669,50691,50901,50945,51137,52488,58387,58442,61465,61539,62032,62282,63737,64141,66333,72724,73013,73245,73922,74193],"vector3f":[15282],"persistently":[59554],"encase":[37056],"octaves":[7697,32220],"unity_deltatime":[47101],"co":[10585,20570,44915],"unregistervaluechangedcallback":[55740],"lobbyscene":[11127],"denoted":[7858,21659,33501,41223],"changed":[463,561,3450,3676,3766,3787,4862,5938,6269,6398,6846,7764,8117,8383,11399,12247,12400,12706,13230,13757,18585,19473,20130,20338,20937,22228,23221,24030,24773,25097,25309,26787,27629,30168,31729,32362,32708,32888,33134,34781,34915,35344,37744,38930,39487,39754,39785,39992,40076,40453,41844,48680,49752,51188,51226,51902,52247,53306,54214,54262,54736,55105,55774,57031,59729,62597,64544,65088,65460,65478,65931,66314,66556,67237,68626,68720,68901,69139,69307,69359,69413,69622,69957,70446,70736,70839,71100,72421,73192,73412,74134,74226,74414,74662,75223,75599,75744,76259],"vector3intfield":[55460,55538,59710,65584,65604,65624,65626,65666,69327,69433],"tooltipevent":[62111],"'vehicle'":[26594],"r16i":[8474],"system’s":[13607,27768,31865,32312,32727,32883,36055,36238,41305,58141,70276,72384],"alloc’s":[36111],"flight":[35630,67151,75429],"min16uint2":[8480],"unity_shader_no_upgrade":[44020],"streamlines":[60209,66802],"setters":[18532,39910,54283],"involving":[4653,5156,10579,45040,45179,74143],"public":[61,559,746,800,932,1075,1178,1423,1708,2017,2334,2492,2552,2632,2785,2908,2955,3329,3356,3528,3605,3702,3743,4160,4347,4429,4713,4879,5363,5507,5745,5783,5930,6008,6086,6239,6329,6728,6789,6885,8654,8984,9370,9597,10702,10748,10827,11012,13064,13319,14091,14890,15732,17092,17384,18008,18370,18545,18665,19389,19475,19662,20012,20132,20352,20466,20714,20773,20873,20930,21257,21918,22195,23193,23364,23784,23887,24071,24183,24290,24479,24805,24993,25503,25640,25701,25771,25932,26137,26310,26392,26445,26500,26600,26629,26731,27346,28506,28790,29424,29580,29603,29806,29827,29865,29911,30067,30105,30157,30547,32786,33108,33851,33914,34164,34176,34374,35418,35480,35506,36257,36405,36648,36756,36833,36987,37239,38695,38824,38995,39212,39349,39858,40335,40461,40575,40634,40767,42070,44213,44613,45985,48388,48713,48923,49052,49223,49294,49919,50295,50328,51225,51435,51528,51553,51585,51628,51754,51777,51786,51797,51971,52270,52658,53436,53927,54520,54928,54974,55081,55181,55253,55325,55384,55590,55680,55759,55833,55937,56003,56074,56137,56233,56291,56358,56409,56489,56546,56608,56683,56752,56819,56996,57215,57312,57426,57650,58040,58180,58239,58627,58760,59030,59377,59790,59925,60144,60169,60236,60444,60523,60580,60658,60689,60859,60900,61000,61212,61665,61768,62140,62358,62514,62693,63139,65826,66062,66240,66365,66488,66767,66943,66997,67103,67200,67276,67282,67299,67337,67355,67565,67573,67630,67712,67724,67762,67877,68095,68290,68330,68357,68391,68446,68542,68630,68736,68965,69212,69629,70098,70499,71018,71712,71921,71963,72040,72165,72231,72542,72913,73100,73420,73530,74073,74433,74871,74915,75244,75685,75749,75878,75954,76040,76225],"availability":[4561,12694,14273,23611,27984,34854,35280,36227,36398,50344,66720,67867,71658],"m_inteditoronly":[39945],"imgui's":[54120],"ldr":[14319,42399,45094,45203,74295],"exist":[979,2189,2324,3868,3937,6094,8303,9075,9327,10712,11221,16564,18330,20204,20314,20905,21196,22208,25850,26360,26925,27167,27508,27681,27786,28464,29921,30110,30657,32459,33099,34617,34905,34928,34957,39530,39827,40531,40557,41238,42050,42810,44903,45145,49375,49659,49677,50683,50703,52227,52532,54430,54657,55508,61907,66038,66379,66851,68537,69834,69903,70014,70069,70136,70477,71396,71423,72789,75549,76178],"charclasslabel":[59424],"glossary":[1921,2004,22286,38446,75386],"specularcolor":[28921],"left_top":[64288],"listing":[3484,10687,47906,51416,53214],"'high":[42972],"multiplicative":[43781],"disney":[38012,42814],"unity_transfer_depth":[44026],"rotating":[714,2286,2360,7292,11477,13240,13266,18225,22500,23672,25622,26588,26928,32285,33534,34682,34781,38569,38599,39256,51572,52235,75088],"editorextension":[15056],"skull":[25436],"raytracingshaderimporter":[6707,15320],"camerasetting":[39230],"perceptible":[7508,36610],"toggle_mixed_bg_hover":[63497],"in_foldout_focus_on":[63453],"myjob":[26310,26387],"deeplinkurl":[19391],"getcustomparticledata":[32921],"callstack":[35142],"due":[1541,2356,3247,3500,5262,6024,6079,6127,7786,8210,10196,10730,11521,11821,12104,12903,14795,19174,20457,21219,21946,24511,25229,25608,26574,27089,27172,27209,27329,28052,28456,28914,29297,30202,30268,35344,35746,36340,36785,38408,38625,42245,42258,43080,48566,49534,51056,51080,51236,51787,51975,54208,62800,66159,66272,66739,67553,68160,68637,69010,69262,70418,73193,73285,73308,73443,73741,73897,74394,74592,74725,74850,75601],"exampledisplayprovider_mainthreadcall":[76020],"supportshardwarequadtopology":[19750],"elf":[2239],"visibleinbackground":[34466],"sound":[257,1872,1917,2007,2347,3988,4519,4722,4737,4788,4838,5006,5044,5094,5158,5222,5980,7446,7463,7485,7523,7531,7539,7552,7565,7572,7620,7637,7661,7763,7774,14786,15850,22580,25841,34931,34939,35994,37460,37593,52095,52500,53745,64444,65220,68018,68049,72879,73055,74977],"effectdata":[4911],"git+ssh":[70640],"hardcoded":[25888,45239,48993],"beginsample":[27948],"shadowing":[6807,8647,9884,10013,10272,14609,32298,32739,37796,43194,43917,46783,47811],"headphones":[12202],"floatdouble":[55504],"tail":[7167],"m_labelnumber":[60595],"#1a1a1a":[63323],"foundation":[2941,2974,5008,16883,17785,18039,20217,31038,31406,38185,52749,66025,68808,71376,74378,75045,75118,75137,75215,75224,75319,75382,75405],"effectshader":[45647],"file1":[2914,21460],"totalsize":[26157],"dirty":[38932,39141,39797],"clamped":[9886,20571,21092,26366,27131,30312,34205,39771,43194,45255,45294,52011],"amazonuserid":[66999],"score":[2641,33168,41370,50939,53729,61367,74404],"reserving":[29187],"hf":[7717,7737],"alters":[43194],"freelook":[31117],"laser":[6725,40712],"proportions":[20702,35156,35250,39797],"popups":[65903],"reduce":[583,1343,2768,3303,3315,3475,3570,3674,3963,4387,4537,4665,4801,5054,5193,5322,5981,7017,7364,7508,7870,8189,8197,8286,8570,9291,9528,9878,9967,10009,10231,11606,11813,12307,12349,12901,13306,13384,16527,17488,18257,19124,19130,19197,20076,20402,20438,21509,21913,22046,22464,23378,23434,23568,24964,25206,26056,26067,26086,26588,26665,27119,27175,27207,27678,27738,27984,28476,29249,29330,29416,29714,30175,30243,30274,30322,30350,30446,31720,32221,32660,33095,34279,34493,34609,34994,35726,35879,36337,36593,36690,37097,37661,37675,37712,39961,40450,41320,41944,42060,42133,42219,42946,43013,43138,43188,43654,44166,44377,44541,44627,45565,47156,48595,48642,49354,49618,49668,49723,50008,50613,50672,50686,50703,51052,51215,52046,52594,52854,55512,60619,61921,62193,63137,64335,66008,66517,66555,70299,72488,73021,73337,73620,73704,74193],"currentinputmodule":[24887],"wired":[836,25696],"shifter":[7702],"cyclical":[39885,40224],"contentnamespace":[2896,18215],"setings":[73207],"squash”":[32318],"l2":[10083,23417,25811,27467],"createitem":[2530,2555],"kformatr16_unorm":[50115],"returning":[225,715,3379,21099,22357,27814,28606,28756,28771,33214,40503,41183,45714,47325,51087,66523,67601],"onwillrenderobject":[21354,33482,38200],"cloth's":[8298],"rift":[31210,50240,68754,72953,75304,76095],"a_data":[74608],"exampleothershader":[44336],"living":[2239],"allotted":[27003],"clientthe":[54020],"“c”":[33146],"hiding":[3952,4218,7134,9069,21005,36549,39317,39789],"rewards":[17282],"requiring":[13166,13614,17092,30306,38820,44759,52676,67070,70175,70243],"disproportionately":[43114],"basefield":[30524,55433,56607,56670,61767,64512,64564,64587,64611,64809,64842,64860,64915,65049,65313,65538,65553,65568,65588,65608,65628,65649],"inherited":[32659,34175,43651,62840,63089,63697,63714,63830,65885,68086],"keydownevent":[57958,58008,59733,61798,65335],"rebake":[27523,69307,69413],"pluginbuildinfo":[15305],"draganddrop":[2580,57335,57576],"scaleheightincrement":[20460],"editor’s":[3718,13263,18328,18969,27108,28399,31634,35691,35876,36553,38886,48641,50885,53960,70270],"enumvalueindex":[54989],"texture’s":[3585,8430,27595,48642,50034,50960,72501],"reinstate":[68546],"divisor":[50479],"youngest":[32271],"tdictionary":[37140],"“text":[41135],"corrected":[27507,27567,70384,75017],"enumpopup":[59643],"androidchainedsignalhandlerbehavior":[1035],"appdata_t":[10167,32926],"mainpage":[66877,74687],"invalidates":[26126],"nintendo®":[23134],"iscontainer":[36952,37098],"specs":[67216],"mod":[4784,5166,6696,7469,22578,52097],"quiets":[5162],"mirror":[248,6317,7102,13213,13810,18067,18508,29879,32283,37688,42751,45254,49539,49609,49639,50033,50125,50352,58147,66720,69398,69502],"highlights":[8987,11824,12359,12560,17956,18137,19225,21855,22226,24593,25393,28877,34293,34397,34503,34763,34876,36060,36293,36547,38099,38411,38435,39127,41730,41781,42365,45299,49451,49470,49570,49619,49626,50347,59780,59890,60434,60571,71955],"handtracking":[76141],"“100”":[11844],"tegra":[553,14345,38426],"essentials":[3987,18429,37519],"lefthand":[2970,29111,76181],"closure’s":[33285],"loops":[3828,4773,5984,6068,6155,11813,12349,14728,32412,33346,33579,34279,34493,39885,41876,52640,66524,73285,73449,73953],"wobble":[12937],"doubled":[30372],"sdr":[24487],"resized":[199,690,13645,14803,24747,35765,39373,39467,39493,54224,54736,54767,65990],"cos":[10448,20697,25561,45582,47132,61135,72335],"onpreprocessmaterialdescription":[21423],"trickle":[57812,57854,59749,60497],"rghalf":[8450],"migrated":[68668],"codeoptimization":[68743],"articles":[6056,30166,30244,30277,45119],"3_basecolormap":[50051],"letters":[9276,9772,18750,28352,29686,30540,32065,39617,49850,53350,64342,67164,69333,69439],"9bc4b04df2e874e564aa47e76d443b8b002cf62f":[66773],"collapsible":[11461,32847,64636],"frustumwidth":[21972],"swing":[7278,8234,18104,23108,74905],"listener's":[5263,7478],"slidervalue":[24175,24395],"uta_agent_protobuf_bytes_out":[66655],"connection_id":[66126],"ipointerclickhandler":[21200,49891],"trim":[7073,25171,48516,48812,70047],"coordinating":[29009],"haptics":[72971,75607,76318],"checkaccessfullymapped":[45513],"barely":[13686,13870,15003,49636],"charts":[10001,10655,15866,21555,22150,26969,27022,27054,27088,28880,35691,35887,35958,36231,36435,36472,36568,36678,49463,49640,53487,72759],"humanoid's":[25215],"intptr":[5407,5551,5748,5790,18547,29989],"portals":[5338,11331,30262,42792,45852],"ability":[1862,1948,1987,4826,5964,8975,11001,11546,13231,13737,13781,16168,17474,17985,18620,19047,21422,22964,24579,27083,32712,32917,36680,41993,44580,45512,51427,51621,58825,63107,66036,66314,67560,73486,74219,74325,74581],"unselecting":[36538],"finalize":[4181,4363,4436,51183,52827,53132],"odds":[39552],"buildroot":[52250],"scriptableobject":[3571,6042,7979,11307,12776,13305,29919,30900,35189,39169,39879,40537,40689,49912,51457,51607,51702,51815,52349,54928,55081,55181,55325,55562,58756,59380,60163,66487],"#8f8f8f":[63377],"animationwindowevent":[39369],"sure":[146,177,223,273,478,739,1393,1516,1599,1916,2061,2069,2428,2668,2835,3476,4010,4070,4256,4452,4467,4761,5354,5922,6798,6964,7386,7507,8209,8439,9286,9457,9856,10586,11300,11444,12214,12756,12837,13075,13277,13294,13478,13620,16564,18090,18229,18730,18819,18847,18925,19096,19467,20121,20265,20398,21255,23448,23525,23614,23701,24670,24755,24794,25465,25583,25634,25741,25835,25941,26034,26987,27098,27507,27525,27553,27611,27653,27813,27930,28421,28612,28676,28718,28774,28782,28877,29137,29334,29467,29765,29835,30559,30848,31365,33008,34673,34692,34815,35692,35855,37671,38450,39164,39827,39964,40584,40618,41899,42739,43186,43260,43995,44081,44298,44870,45588,47642,48224,48502,48607,49369,49541,49679,49753,49908,50534,50601,51035,52481,52491,52966,53324,53986,53994,54416,54674,54898,57306,57556,57958,58381,58705,58847,59162,60497,60646,61497,61921,62838,63794,66200,66258,66391,66759,66932,67236,67749,68069,68660,68763,69867,69970,70070,70096,70137,70333,70405,70592,70833,70952,71283,71369,71392,71421,71808,72090,72851,73084,73211,73312,73398,73452,73626,74014,74418,74816,74850,74896,75975,76023],"drawingsettings":[44822,45967,49100],"transmission":[5158,7528,7536,22580,29555,38002,66157,68474,74153],"yy":[27473],"#6e6e6e":[63269],"2px":[57376,59318,61256,62469,63675,63948],"reaction":[32767,35293,58015],"hs":[21765],"enginebehaviour":[21328],"ln":[47148],"yesforward":[37837],"plastic":[31186,42809,49465,49570,49638,72377],"cfg":[24483,66620],"onestore":[53910],"animation":[46,284,1861,1879,1889,1894,1911,1921,1949,1966,1978,2005,2034,2044,2057,2062,2182,2187,2210,2213,2220,2235,2240,2257,2263,2281,2322,2361,2387,2415,2420,4506,4519,5265,5961,6150,6218,6264,6289,6314,6780,6983,6998,7144,7178,7841,7844,7927,9138,10788,11247,11348,12292,12963,13440,13627,13804,14474,14716,14778,15111,15711,15864,15932,15982,16117,16330,16345,16607,17152,17937,18052,18186,18256,18401,18566,18751,18756,18916,20539,20733,20811,21156,21330,21432,21455,21566,21628,22064,22448,24520,24653,24790,25171,25187,25622,25991,26923,27812,27983,29088,29121,29391,29714,29742,29775,29890,30510,30921,31032,31390,31588,31642,31920,32664,32859,33404,33908,34189,35049,35235,35427,35763,36020,36242,36522,37335,37495,37541,37678,38339,38442,38653,39345,39827,40616,41783,42796,43281,46346,46780,48334,49644,50322,50599,50881,50937,51772,51778,51792,51976,52215,54170,54207,62531,62611,62836,64452,64489,68021,68578,69747,70945,71374,71758,72290,72773,72928,73705,74191,74310],"csv":[6712,13952,16470,41541,53012,53488,53978,67110],"objspaceviewdir":[8745,43880],"checker":[9098,10520,11181,21711,25113,28916,45773,46248,47604],"preferrable":[7487],"overlaid":[2329,2437,4996,22824,27082,52233,72749],"vary":[120,1024,1584,2178,2439,2990,5056,6194,7045,8009,8120,8555,9258,9457,9771,9875,11438,11462,11484,12154,14273,18172,18509,20542,21147,23063,23555,25170,25877,27172,27648,28378,30164,30887,31760,31797,32371,32609,32852,33481,34857,37270,44788,49437,49510,49529,49593,49629,50164,50685,51964,52116,52196,54049,55886,67912,68935,69179,69333,69439,71133,71372,71811,72413,72716,72724,76095],"f257e86569a8":[70032],"xy":[6534,8418,8924,13261,14061,14478,21088,22866,27473,29517,29633,30311,31961,32933,34210,35258,39257,43889,43984,44855,45503,45735,46267,46855,47647,51169,66003],"float":[1288,1873,1918,1946,2010,2336,4715,4914,5204,5372,5516,6243,6742,7169,8004,8452,8663,8960,8994,9457,9825,10137,10826,13010,13022,14042,14104,14391,15279,18264,18506,20352,20469,20788,20901,20969,21158,21258,21790,22210,22458,23370,23964,24172,24330,24517,25557,25773,26311,26393,26501,27348,29338,29466,29627,30011,30158,32017,32316,32931,33223,33954,34666,34690,34748,36780,37080,37958,39347,39754,39863,39992,40462,42028,43589,43884,43984,44075,44231,44637,44870,45074,45125,45571,45722,46215,46627,46771,46853,47595,48146,50966,51779,51972,52216,52353,54889,55259,55504,55566,56042,56138,56411,56693,56778,56958,57073,58081,58868,60690,60804,60923,61026,62257,64610,72252,72327,73536,73984,74435,75493,76013,76269],"masking":[1966,1992,7107,7869,13725,18104,22093,32287,36454,39669,39727,44270,49446,54168],"narrowphase":[36329],"breathe":[2211],"disablekeyword":[42098],"videoclips":[72676],"“root”":[13484],"setmarkermetadataname":[27947],"assets\\resources\\fonts":[58686],"ram":[3297,23428,35975,36573,43162,50197,52584,66570],"unresponsiveness":[32115],"buffers":[369,5262,5353,5619,6483,6945,8072,8438,8859,11612,11765,20343,20453,21818,23629,27538,29128,29161,29471,30320,33467,34287,34500,35719,35901,36394,38243,38309,39865,43414,43990,44878,45042,45508,49356,50011,50397,52591,60635,68209,68324,68412,75415,75532,75816],"registrations":[5770],"registerpreinitprovider":[75892],"sickness":[30380,72942],"supplier":[52581],"hwnd":[34237,66897],"#000000":[56093,63515],"array":[291,1509,1672,3039,3351,3538,3830,4681,4884,5352,5496,6110,8299,8647,8883,9384,9580,9798,10204,11225,13031,14009,14101,14247,14321,18568,18761,18851,20237,20738,21204,22828,23263,23942,24984,26159,26322,26393,26437,26536,26603,27682,28045,28897,29586,29996,32479,32921,33099,36806,39169,39870,43359,44006,44268,45515,48123,49851,50409,50699,51778,54204,55060,59087,59464,60054,61069,68090,68434,70834,70878,70978,71969,73202,73302,73509,74803,75417,75576,75751],"hinted":[52610],"cadisplaylink":[66848],"article":[220,6056,6107,6798,9542,20393,26704,28605,30167,30346,51174,70044,70123,72675],"overlapping":[6816,7915,11606,12918,13760,13794,22186,23041,24223,26970,27262,30363,32220,33681,36305,36568,36679,37625,39132,48370,50446,56935,71875],"aliceblue":[63508],"unity_no_dxt5nm":[43966],"dev":[67850,69841,69982,70044],"dragperformevent":[57493,57566],"welding":[52153],"can't":[229,475,614,1431,1501,1589,1665,2769,2990,3865,4271,5162,5353,5763,6037,6351,6468,8811,9184,9264,9457,9792,9899,10696,12515,13268,13645,13709,13855,14661,17926,18082,18139,18217,18337,18506,19151,19944,20395,20422,21401,22011,23289,24671,24758,25177,25329,25438,25747,26255,26299,26848,27610,28285,28353,28510,28762,29444,29834,30862,30987,33094,33437,33466,34258,34339,34465,34791,34988,35876,36205,36855,37294,37728,38347,38411,38622,39819,39883,40557,41742,41796,42190,42329,42997,43108,43201,44199,44522,45200,48506,48556,49320,50304,50945,51066,51202,52082,52558,53446,54463,54636,54673,55511,55547,55570,55715,56708,57330,57764,57847,57962,58015,58861,59398,60635,61390,61543,62052,62772,62876,63098,63685,63860,63917,63961,64182,65720,66787,66829,66863,66912,68546,69713,69772,69815,69901,70174,70313,70340,70359,70585,70773,70810,71017,71216,71311,71378,71431,71543,72201,72645,73175,73352,73445,73487,73633,73667,73810,73905,74603,74787,75411,76302],"perplength":[72360],"peter":[27468],"nonot":[37987],"webgltexturesubtarget":[74084],"reflectivebumpedvertexlit":[42459],"trickles":[55643,55717,55809,55907,57562,57812,58196,59542,59721,59738,59817,60361,60498,60554,60766,62117,62601],"banding":[11764,24497,27142,61558],"editortoolbarelementattribute":[30555],"textasset":[13956,15072],"unity_worldtoshadow":[47114],"unity_no_cubemap_array":[44991],"getunityframeworktargetguid":[49795],"shader_stage_vertex":[43957],"navigator":[49783,52577,67045],"minimize":[1466,2700,2769,3315,5982,5986,6071,6807,26086,27931,29716,30894,33264,34466,35726,68309,68994,69241,73173],"0x8f14e45f":[64724],"timing":[1874,1962,2434,4932,7061,7930,11820,12355,14554,14728,14844,20459,21865,22642,26485,27937,29109,31777,34071,34286,34498,35354,35687,35886,36037,36184,62015,62848,72915,73705,74189,75439],"unstretchable":[7250,33603],"matchwebgltocanvassize":[73253],"zh":[53602],"“dark”":[73933],"addchild":[52296],"\\programdata\\unity\\config\\upmconfig":[70198],"96b":[29188],"27619889b8ba8c24980f49ee34dbb44a":[3096],"optionsmenu":[52566],"trailer":[53292],"mrt8":[45458],"descriptionformat":[2650],"80b":[29188],"activate":[217,1091,4239,6152,6962,11442,11822,12754,13275,13292,14681,14717,18178,19241,19618,21096,22111,22476,23699,24830,25035,25438,25816,25895,26035,26076,26685,26698,28605,28670,28714,28752,28761,29834,30488,34236,34328,34823,36540,36754,43224,49334,49654,51889,52532,52554,56477,59630,60227,61794,65370,66260,66811,66836,66867,66892,67247,67641,67855,69352,69456,72224,73176,74405,74685,75086,75242,75252],"math":[6069,10443,16510,20692,26367,39960,40539,40855,42814,44269,45291,45582,47420,51464,66005],"unity_instancing_buffer_end":[23258],"transferrable":[32659],"buggy":[52475],"hugestring":[73634],"unnoticed":[18516],"oncollisionenter":[2030,9419,10716,11612,15847,21175,25592,33728,35749,38605],"m_fogcolor":[76353],"chimney":[31798,31856],"mystore":[67282],"impression":[9669,22389,30142,31661,32701,41775,49530,50595,50947],"onanimatormove":[21337,21576,40630],"#00526a":[63328],"encourage":[4367,6798],"'option+6'":[16564],"lowpassfilterexample":[29648],"sleep":[646,8298,11543,11604,33676,36302,38471,38560,38590],"speeding":[52010],"enable_winmd_support":[24933,33838,72074,74867],"alphabets":[58115],"dlls":[4877,20224,24928,24963,26077,30861,36234,49394,52646,71662,72132,72143,73388,73900],"setapparguments":[74677],"attenuation":[4792,4817,5027,5117,5197,7620,7660,7807,22768,36005,36637,37799,43969,46574,47110,47850,73059],"sampler2d":[8922,10166,23306,29507,31894,32954,44279,44416,45132,45207,45614,45768,46169,46545,46852,47217],"ratio":[689,1211,6762,7487,7539,7552,7719,7740,8039,8621,9171,9997,10337,11743,12288,12472,12858,13412,13679,13864,14808,14866,14988,21509,22041,22144,22731,24773,29340,32105,32724,33529,33722,39370,39416,48323,54252,54375,57073,59837,72490],"pitch":[2007,2347,4792,4810,5031,5160,7702,7786,22598,52095,73044],"sized":[254,8209,13100,17968,23443,24741,27705,44065,50381,54224],"deactivated":[6120,9337,19039,20288,34338,67696],"subtract":[8009,13042,30433,43812,45291,49549,50563,58560,60802,72323],"reflections_high":[42977],"worth":[3247,3299,3475,23817,27520,36782,37710,39382,39467],"groupby":[40838,41266],"hardened":[28108,28230],"colordodge":[43837],"kformatrgba_bc7_unorm":[50105],"unity_wsa":[33804,72069],"lkr":[53671],"feet":[1886,7093,7858,25623,27814,38653,48275,50323,71775],"licencecheck":[52821],"unityaudioambisonicdata":[4742],"specializing":[40453],"exampleelementcustomstyle":[56747],"decoded":[269,7484,9970,35993,68284],"getinterpolatedprobe":[26712],"efforts":[29906,33583],"stacked":[36549,75576],"clipplayable":[33922],"pane":[546,594,624,905,948,1914,2252,2538,5176,6351,6400,6463,7058,7483,11076,14788,17945,18475,18681,18757,21975,25633,30389,30451,30484,31380,34935,34963,35266,35366,35632,35691,35773,35890,35910,35926,35976,36036,36132,36183,36205,36298,36355,36445,36550,36694,38962,39201,41320,41393,41425,41459,41613,54404,54552,54590,54741,59064,63465,66105,71124,74056,74760],"incoming":[4883,6794,9969,9998,11016,11204,11291,12641,15856,20569,21175,22806,33731,35834,46346,46775,49636,66229,66721,67957,72444,74748,75631],"easingfunctions":[63005],"terminate":[1654],"classic":[5898,7217,8893,12662,16406,29710,35178,37227,37397,49637],"“com":[66692],"bit":[554,674,915,1778,3344,4745,4959,5187,5461,5606,6168,7487,8090,9196,9457,10137,11764,13206,13412,14323,14976,15844,19048,19299,20237,21058,21509,22738,24223,24489,25459,27141,28087,28159,29338,29466,29663,33809,34237,34287,34500,34597,34663,39678,42372,43181,43618,44071,44269,44870,45498,45851,47026,47377,50167,50412,50676,54223,65537,65552,68922,69165,71567,73120,73203,73306,73627,74276,74625,74769,75553,75764,75896,76149],"process’s":[36555],"routing":[4797,5019,5084,5156,10877,10984,66427],"unityaudioeffectdefinitionflags_appliesdistanceattenuation":[5198],"dropdowntoggleexample":[30564],"ibinding":[55616],"orange":[2384,8231,22226,31758,39127,49528,49872,51299,54690,55945,57050,59868,63612],"textureimporter":[3502,3814,6383,6713,8648,14302,15240,48695,74644],"base":[86,220,285,492,511,531,792,913,986,1336,1966,2186,2240,2257,2673,4735,5240,6762,7103,7187,7231,9752,9871,10483,10691,10835,11303,12006,12921,13308,13898,14474,14951,17206,17312,17488,17573,17835,18753,20908,21410,21538,22343,23289,27933,28465,29102,29423,30184,30433,30528,31143,31459,32407,33550,34161,34175,34944,35446,35484,35504,35686,36745,36824,36977,37234,37990,38390,39803,39836,40481,40532,40647,41224,42255,42264,42382,42440,42467,42515,42521,42550,42703,42724,42746,42827,42838,42849,42870,42878,42896,42924,43372,43597,44015,44216,44428,45308,46224,46734,46834,47519,48057,48720,49467,49560,50388,50436,50601,51443,51726,52184,52271,53569,54528,54560,55414,55716,55808,56168,56619,56670,57300,57303,57561,57611,57936,58063,58195,58287,58766,59737,59816,59894,59924,60218,60360,60496,60553,60765,60908,61008,61767,62116,62759,63196,64387,64440,64464,64484,64507,64512,64559,64564,64587,64611,64669,64690,64741,64762,64790,64804,64809,64837,64842,64860,64911,64915,64951,64968,64983,64995,65019,65026,65044,65051,65142,65160,65239,65263,65282,65290,65307,65313,65383,65403,65428,65439,65454,65469,65485,65497,65508,65534,65538,65553,65568,65588,65608,65628,65649,65678,65736,65885,65998,66261,66944,67611,68037,68074,68221,68534,68640,69003,69255,71809,74172,74496,74777,75079,75697],"computer’s":[9075,39964,48864,53009],"isfocusedwindowtypename":[2623],"transparallaxdiffuse":[42867],"preservedrawingbuffer":[73433],"khronos":[17912,27159,44914],"clarity":[1467,14826,18319,26387,49570,49628],"exempt":[39958],"physicsmaterial2d":[6703,11651,15083,40744],"fundamentals":[4531,5845,23536,23624,28845,30342,37331,37524,38267,40167,42316,43090,43097,44590,44755,44785,47175,66451],"commandbuffer":[4583,13208,23624,28058,28067,38192,42100,43414,44626,49040,49289],"allowasynccompilation":[4597],"detect":[871,2070,4636,4960,6083,9006,9155,11552,11608,12677,13559,13677,14540,15847,15889,18231,18504,20457,21173,24030,24868,25569,25693,25721,25759,25822,26244,28114,28185,28450,28484,30310,30861,31713,35038,35322,35888,36335,38466,38524,38551,38575,40001,40561,40641,41784,41874,49219,49558,49650,52390,52554,55551,55807,56681,68066,69384,69488,71392,72795,74214,74583,75241,76204],"myserver":[68188,68319,72586,73673],"cmd+u":[51284],"unityeditorinternal":[35526],"ingredientdrawer":[20942],"turning":[8573,20612,22349,31816,39333,40219,44177,67921],"rig":[2060,5961,7167,7827,9137,13477,18059,21339,21460,21564,22072,22486,25215,29098,29391,29731,29765,31211,37497,37622,71766,75112,75223],"vector3":[2339,5421,5565,6072,6152,8678,8995,9363,9837,10259,13091,13322,18297,18577,20774,21159,21207,22199,25512,27389,29629,39866,40467,40638,48891,50338,51519,51650,55263,55537,55567,56414,56908,58471,60237,61137,64403,65607,66278,71571,72291,74479,76268],"vrr":[31287],"accessories":[12222],"unlock":[18180,28994,29077,51394,67759,70496,71150,71441,71490,72424,73271,74202],"queryinventory":[53960],"worldnormal":[10179,46812,47349],"pinning":[18470],"adapted":[13261,23059,24054,69302,69408,74299],"everything":[401,494,999,1709,3462,4391,5674,5724,6495,8980,10019,10571,11558,11875,13420,17925,18055,18153,19622,21249,21517,21607,22067,24398,24468,24630,24728,24782,26858,27510,29353,30414,31816,34566,36249,38541,38653,39336,39402,39925,40616,41836,42338,44294,45145,45479,45574,48174,49714,59469,59579,61554,64378,66001,66225,66823,67048,67656,70563,71578,71763,71906],"mdmp":[74548],"finnish":[53624],"254717f":[61231],"initialised":[30124],"ystep":[51484],"“varyings”":[45495],"unityxrinputfeaturetype":[75487],"symmetric":[8246,74394],"subgraphs":[14935,14940],"“stream”":[7173],"values":[309,395,532,739,1003,1035,1112,1161,1273,1778,1888,1894,2006,2296,2324,2399,2429,2742,3039,3571,3834,3855,3995,4710,4813,4884,5071,5239,5351,5606,6168,6266,6291,6314,6381,6443,6623,6803,6978,7015,7163,7238,7749,7909,7966,7985,8031,8131,8168,8249,8268,8315,8378,8549,8590,8698,8770,8893,9031,9200,9274,9330,9462,9536,9700,9762,9781,9843,9869,9965,9986,10083,10129,10211,10398,10427,10454,10493,10704,10725,10832,11284,11380,11416,11448,11512,11546,11605,11764,12310,12354,12609,12729,12760,12785,12901,12970,13017,13113,13175,13202,13239,13281,13298,13306,13397,13475,13593,13667,13768,13797,13813,13846,13911,14022,14082,14226,14319,14507,14542,14581,14670,14717,17282,17978,18008,18173,18255,18349,18486,18615,18954,19022,19473,19676,20129,20281,20420,20539,20606,20630,20655,20785,21088,21240,21323,21422,21474,21676,21715,21904,22041,22117,22178,22500,23272,23672,23816,23962,24078,24489,24517,24593,24606,24624,24763,24906,24983,25113,25280,25438,25622,26304,26500,26913,27004,27088,27133,27467,27484,27510,27540,27549,27591,27625,27820,28105,28179,28868,28877,29091,29131,29151,29345,29467,29484,29618,29809,29897,30164,30238,31644,31676,31739,31755,31773,31785,31810,31831,31848,32086,32101,32125,32149,32212,32245,32336,32354,32380,32602,32625,32645,32673,32720,32765,32855,32899,33215,33424,33655,34210,34285,34497,34739,34770,34878,34893,34923,34944,35023,35450,36092,36298,36593,36845,37019,37285,37580,38366,39169,39231,39587,39659,39678,39740,39900,39977,40141,40145,40363,40540,40732,41062,41211,41774,41814,42024,42224,42387,42704,42725,42747,42767,42793,43154,43182,43358,43533,43663,43739,43809,43979,44053,44106,44143,44174,44233,44346,44433,44634,44787,44875,45018,45049,45140,45294,45417,45455,45531,45569,45627,45720,45864,45962,46806,46926,47083,47607,47960,47993,48031,48123,48276,48373,48524,48601,48695,49067,49192,49449,49465,49470,49490,49510,49528,49570,49608,49629,49714,49781,49850,49892,49908,50375,50409,50435,50562,50611,50691,50945,50960,51014,51166,51182,51235,51362,51950,52143,52178,52216,52393,52785,53039,53597,53904,54203,54213,54243,54672,54734,54779,54871,55244,55329,55558,55731,56125,56470,56636,56695,57035,57318,57645,57831,58066,58274,58454,58844,59629,59735,60164,60788,61354,61449,61526,62009,62050,62189,62200,62708,62836,63505,63658,63704,63717,63986,64042,64204,64310,64586,64768,64955,65220,65244,65368,65769,65885,65904,66115,66584,66938,67214,67603,68513,68533,68541,68710,68887,69123,69302,69408,69814,70021,70265,70817,70871,70985,71016,71159,71208,71592,71614,71644,71871,71921,71986,72046,72230,72287,72343,72667,72723,72762,73057,73448,73924,74244,74642,75537,75764,76071,76335],"yes":[1114,1307,1523,2835,4343,5696,8809,13542,13561,14410,15704,19294,19673,20387,20409,20443,21942,21960,23250,23387,28843,29095,29461,30453,34860,35383,35643,36008,36232,36370,37767,38306,38418,40546,41405,41828,41940,42315,42601,42696,42720,42736,42761,43503,43512,43561,43569,43658,43687,43732,43804,44100,44137,44169,44202,44323,44341,44380,44425,44594,44630,44675,44762,44793,45058,45187,45264,45393,45526,45855,45935,45965,46141,46508,46532,46715,46822,47160,47955,47988,48026,49315,49675,52454,53734,53793,54073,54119,58172,59544,59740,60363,60768,62119,62603,68791,70073,70140,70549,72416,72817,75164],"decodefloatrg":[43887],"vector3s":[71969],"useembeddedresources":[73423],"startindex":[2559],"test2":[66734],"automap":[18096],"graphicsdevicetype":[19725,73465],"chronological":[18717,25096,36104],"getlightprobecolumns":[26759],"getbuttondown":[2026,2113,9826,10750,20137,20496,25579,25777,72549],"unity_framebuffer_fetch_available":[43967,44991],"feels":[11508,30378,62833],"ads":[16083,16091,17367,22319,30440,31027,31398,53129,53313,66801,68073],"char":[4920,10826,27829,27997,53288,55505,58005,58363,66849,74564,75490],"hidden":[3852,3963,4223,7013,8059,8317,9069,9644,11190,11716,12078,12942,13400,14220,18149,18565,20105,20604,21040,23673,25068,27785,29732,30264,30352,31013,34237,35691,35890,36708,38242,38638,39238,39311,39778,41322,41516,43729,48214,48624,51214,52244,57822,58724,64145,65185,66000,70068,70135,70380,70833,71217,71774,71944,72384,73263,73487,75153],"executions":[45569],"helps":[889,2997,3956,4029,4776,5719,6471,7316,8242,8286,8499,9152,9532,9709,10984,11537,11623,12409,13663,14290,17524,18231,18500,19286,21576,22697,23568,24971,25583,25733,28165,28441,29759,31635,33396,33420,33762,35008,35694,36081,36549,37510,37669,40522,44549,48287,50652,50669,51148,51328,53309,54016,60646,64337,66436,67752,67921,67978,70834,71774,72476,72787,73248,73417,74164,75140,76217],"allstoreids":[53964],"targetstartposition":[56907],"m_indentlevel":[36838,36990],"tkdiff":[35097],"_toggle":[58629],"console_entry_error":[63443],"purely":[5162,6068,6150,14027,15015,18570,38404,42756,46979,72240],"clickeventexample":[55834],"floating":[554,4994,5968,6070,7998,9460,10083,10137,13021,14171,18897,20635,21099,21676,22036,24490,25355,26304,26514,26703,27141,27467,27538,27566,29338,29470,36694,38668,43589,43968,44231,44870,47607,48146,51425,52218,54452,58081,59133,62796,63744,65220,66005,71909,72323,73556,75440,75555,75991],"topology":[281,1761,5096,11206,11228,21449,27719,49449,66433,71772,71976,75815],"transcodes":[7504],"c1z":[5386,5530,20357],"macro":[1700,20263,23257,27855,32052,42958,43338,43935,44867,44992,46816,47414,71751,72998,73924],"jobs":[1795,5360,5498,5736,5774,11813,12349,12901,16120,16183,20400,26127,26138,26244,26262,26275,26291,26375,26434,26473,26493,29161,30913,31653,34279,34493,34972,35735,36074,36156,39309,68578,70251,75444],"demand":[480,513,2608,2767,4573,4773,8847,12226,12401,17627,18514,19130,21401,23146,27679,29678,30380,30856,35932,37825,38574,40514,48184,48258,49737,49772,50067,51048,52736,66667,68458,73022,73716,75133],"redirects":[465,29159,66611,68160,68257,68472],"downscales":[11736,12883],"15f1":[973],"hpapi":[22964],"reloading":[3769,3832,15809,17990,17995,20115,39158,39896,51047,52247,58997,66457,67702],"whats":[5044,50180],"docs's":[62201],"copyright":[4065,9256,18732,40367],"kind":[2216,2235,4142,4206,4327,4531,5158,5872,6762,8065,8115,13616,18188,18268,18375,18734,18822,21156,21975,22013,23798,25197,26294,28271,31662,32923,33369,36471,37823,41200,42354,49496,49515,49642,50322,50342,50939,51155,52042,52227,58484,64208,65024,65976,66197,69383,69487,74596,75543],"clipping":[6723,6760,8045,9642,13146,21486,22596,30525,31719,33550,36454,37731,37838,39234,43974,54166,64151,66003,74206],"listens":[24745,57808,66229],"p4":[33065,72400],"larger":[7,67,253,427,500,1315,2356,2769,3248,3319,4286,4867,5353,6807,7053,7486,7669,7968,8040,8197,8355,8551,9032,9793,10009,10108,10740,11254,11277,11520,11638,11875,12044,13429,13826,14286,14954,18149,18575,18946,18980,20208,20241,20393,21528,21936,22144,24002,24490,24776,26255,26991,27572,27738,27931,28089,29771,29878,29906,30225,30255,30885,31712,32133,32609,32631,32776,33424,33528,33884,35023,35714,35944,36511,37390,37623,39415,39509,39666,39724,39729,39797,40749,41179,41375,41491,41815,42364,42704,42725,42747,42767,42946,43154,43484,43600,43815,44234,46980,48652,48901,49518,49648,50002,50094,51035,51314,51999,52739,58399,58447,59852,61328,61545,65982,66164,71877,72755,73385],"exampledisplayprovider_start":[76004],"sleeping":[11562,11604,14718,26060,33695,35274,36331,38471,38559,38589],"speed":[1556,1759,1967,2063,4532,5046,5161,6061,6273,6287,6314,6378,6439,6793,7138,7154,7661,7786,7927,8510,9585,9697,9733,9784,9857,10363,11489,11539,13563,13665,13808,13829,14278,14314,14559,14852,14967,14993,15857,17152,17986,18225,19992,20767,21158,22124,22492,23442,25097,25577,26056,26569,26809,26895,28176,29185,29467,29627,29714,29922,30142,31683,31730,31840,31997,32077,32117,32157,32218,32252,32327,32362,32414,32593,32681,32849,32907,33669,34884,34931,34941,35127,37661,38045,38471,38492,39239,39289,40097,40622,42364,48317,49484,50002,50469,50659,50686,50703,50941,51047,51780,51975,62882,64895,65177,66555,71757,72289,73171,73209,73639,73900,74141,74639,74776],"secondary2daxis":[76106],"landscaperight":[1581,25874],"advice":[5879,11612,15808,25493,25941,27085,27158,27747,30346,37644,38299,38862,52624,68566,68689,68811,68849,69040,69293,69506,71314],"oncreateui":[20008],"exampleclass":[15732,39362,68736,73100],"ministry":[53442],"hr":[53616],"pvrtc_rgba4":[48730],"isourcegenerator":[38695],"normalize":[2085,7473,7684,8745,14202,29639,45583,46219,46625,47395,72315],"darkens":[22032,26935,34860,36075,42792],"complimentary":[23198,60399,68072],"replicating":[25524],"noisebox":[4956],"default’":[13799],"alen":[6016],"activeinhierarchy":[9339,19044],"lead":[3229,3431,4567,4866,5948,6054,8894,9489,10406,11320,20154,21051,22183,24492,24983,26572,27055,27549,28482,29182,30243,30446,31727,33401,33458,35129,35695,36497,36590,36786,37281,38402,38483,39885,41813,42059,43021,43113,43729,44134,48023,59872,68626,69010,69262,70230,71027,72438,73450],"softer":[50947],"projective":[43985],"deleted":[239,2272,2332,2395,3660,3676,3793,3946,8551,9386,18016,20554,29062,30446,34903,35130,40271,51148,51917,68544,68601,68974,69221,70284,71412,72454],"overstretch":[11635],"xr_fb_foveation_configuration":[74400],"productreceipt":[67789],"downloaded":[3248,3292,3340,3393,3448,3489,3897,3950,4026,4066,4222,4404,4449,12400,18514,22693,25452,25942,35147,39723,51126,53495,53831,66767,67756,68110,68280,69398,69502,69736,69765,70258,70562,71155,71217,71266,71306,71422,71508,73025,73209,73315,73621,73943,74524],"blendonefinished":[6246],"guistyle":[9557,9656,24051,49817,49960],"italicized":[4276,58318],"contributions":[4964,5179,5826,22594,36189],"#f0fff0":[63564],"partially":[18098,28476,31366,37618,38354,41871,44133,44902,53223,53414,54735,56727,60635,60881,60982,64761,68157,71889,72723,73082,75622],"tunnelling":[18220,23067],"tanks":[36281,66440],"menubutton":[76114],"absolutepositionelement":[61241],"learning":[16542,18360,19283,31620,37949,47313,57694,65967,66802,75383],"cookieid":[36667],"i’ve":[52461],"tints":[13748,13788,35054,37556,51055,51800,51826],"javafile":[1440],"behalf":[4391,4485,5197,70500,70630],"verify":[4103,4395,11978,14802,18060,22178,25100,25686,25861,26486,28242,28310,28442,28895,29574,29771,33417,35040,43416,52828,53760,53858,54015,55917,60611,60645,66635,68280,71385,71738,71802,72504,74365,74654,75140],"randvec":[13092],"constructor":[1429,6032,18377,23879,25961,28495,30555,30911,35429,35484,35506,36911,37173,38820,39951,48941,54560,55582,55986,56449,56616,56681,56881,57035,57331,57656,58037,60934,61037,61779,62278,64367,66825,68214,68246,68318,68675,74257,74728,74799],"samplermytex":[8430],"ispriteeditordataprovider":[48381],"tileanimationdata":[51771,51776,51791],"dx9":[25267,45206,46816,71751],"mb0ga1uddgqw":[69937],"project_path":[15717],"wifi":[695,35842,50197],"“optimal”":[7175],"cullingresults":[49068],"ondisable":[2597,5482,5627,5749,5793,18004,18309,21378,21923,26767,33927,36266,36414,36672,39160,49976,54286,56679,57548,58640,60661,61326,62395,62731,76241],"visiting":[13067,16168,36846,37191],"heapf32":[73511],"character":[7,92,1912,1934,1957,1966,1987,2063,2189,2211,2213,2220,2234,2243,2257,2415,3247,3460,5263,5267,5960,5994,6773,6782,6791,7145,7178,7620,7836,7913,7927,8065,8159,8191,8224,8280,8496,9136,9252,9399,11250,11439,11842,12809,13616,13696,13805,13984,14718,15840,15982,16542,17642,18100,18728,18760,19005,21173,21325,21588,22011,22189,22468,24169,25036,25204,25526,25623,26552,26560,27678,27813,29094,29122,29724,29784,29891,29906,30047,30174,32701,33615,33753,33781,34924,37335,37479,37609,37684,38437,38652,39611,40046,40097,40616,40746,41310,41336,41469,45072,48335,48501,48676,49426,49511,49565,49630,49642,49823,50321,50881,50937,51212,51966,52174,54302,55856,56982,57630,58005,58110,58298,58369,58446,58678,59271,59732,61908,61944,62026,62071,63922,64955,65338,65768,65865,66197,70821,71767,72269,72289,73089,74192,74329,74894],"actionhandler":[2496],"altogether":[25044,37643,48665,71874,72319],"fetched":[2608,3298,22129,23275,69709],"joypad":[18484,51966],"uncaught":[73303],"maxdepenetrationvelocity":[37625],"authorizations":[25671,25729],"pressed":[2106,2215,7178,10747,21173,23788,36057,39607,39807,39822,40019,49889,54212,56507,59752,60375,60780,61490,62414,63260,64306,65135,65925,76207],"shurikentogglenormalon":[63478],"newin20193":[3875,4047,12034,21443,21563,23774,24595,35899,49815,50517,66865,66914,68525,71198,71514],"m_basedamage":[56130],"desert":[13899,49425],"bundleid":[22335,66849,67831],"lequal":[43583,45888,47996],"subtarget":[19086,19108],"asset's":[3484,3585,3843,4203,4281,4356,8648,14001,14517,19505,25170,29098,40777,40806,48869,51832,58410,58435,60650,61905,61944,63085,71016],"facility":[22906],"positionos":[49006],"alwayslinkassembly":[28598,66467],"expander":[3988,21997,71216,71301,71359],"profiler’s":[33391,35385,35691,35881,36538],"eraser":[51285],"lefteye":[76079,76180],"improvements":[2699,4064,6209,9999,17642,21427,21562,23774,30268,37236,37469,68670,68995,69246,74130,74222,74410],"__odd__":[14798],"assets\\resources\\text":[58710],"designator":[40321],"workplaces":[219,70424],"earphones":[12198],"sprx":[34560],"marginally":[42245,42258],"occlusionarea":[11330,15166],"m_scaleinlightmap":[76521],"tagprefix":[48722],"greek":[53628],"mybehaviour":[36767,60169,68095,68290,68330,68357],"#585858":[63267],"may":[64,209,236,248,323,633,1332,1584,1674,1895,1967,2001,2133,2189,2211,2239,2358,2415,2439,2768,2958,3254,3457,3491,3760,4356,4445,4672,4773,4865,5160,5211,5970,6047,6105,6432,6737,7117,7163,7765,7913,8081,8118,8146,8188,8355,8387,8558,8972,9154,9265,9555,9622,9771,9964,10014,10082,10108,10768,10912,11225,11520,11556,11604,11813,12400,12599,12865,13036,13166,13613,14029,14581,14732,14914,15042,18104,18235,18241,18377,18450,18481,19164,19481,20206,20457,21175,21323,21503,21572,21930,22093,22303,23818,24164,24724,24741,24773,25083,25265,25381,25435,25521,25877,25941,26044,26710,26784,26908,27003,27035,27325,27520,27552,27678,27751,28801,28947,29009,29551,29731,29906,30047,30062,30376,31765,31792,32178,32233,32412,32701,32849,34164,34192,34222,34279,34917,34931,34939,35364,35388,36690,36785,37639,37708,38405,38657,39377,39509,39640,39794,40484,40528,41251,41395,41491,41566,41630,41912,42215,42811,43186,43959,44371,44558,45294,48201,48376,48528,48601,48615,48683,49423,49560,49571,50321,50344,50937,51119,51236,51328,51344,51607,51760,51785,51815,51964,52110,52216,52481,52558,53009,53183,53997,54246,58447,60635,62189,64342,64452,65031,66116,66258,66374,66667,67090,67151,67164,67254,67270,67272,67296,67347,67550,67555,67560,67592,67706,68197,68280,68434,68488,68532,68546,68636,68775,68918,69159,69307,69439,70385,70752,70955,71157,71874,71969,72299,72370,72730,73173,73229,73406,74132,75140],"planet":[54988,59924,71811],"keycodes":[25763],"createprimitive":[9427,30671,40464],"getmethod":[40566,49807],"rebooting":[12674],"copycolor":[75174],"d_in_foldout_act":[63456],"xrdisplaysubsystem":[75965],"keyboardeventtest":[59783],"timestep":[10714,14557,14975,23076,26056,36334,38501,51957],"16x":[58399],"10fps":[26057],"pipes":[51621],"collection’s":[33242],"effective":[1012,5260,8386,9903,10082,12706,19035,25597,32230,32702,38403,46597,46979,50452,54274,56706,66458,74454],"standing":[49426,72323],"materialcopy":[3654],"‘serializefield’":[39914],"driver":[840,4865,19290,25998,30282,34229,34485,36237,36541,36608,42101,42183,42944,45479,45583,50170,52589,68782,72331,72917,72982,75449],"enemy":[2031,9155,18293,29906,50288],"shut":[66728,69957,75262],"richness":[5049],"corridor":[6838,37639],"bodywork":[32400],"total":[3486,4702,4932,5288,6112,7166,7543,7556,8156,8582,9079,9466,10337,10404,10491,12296,12426,12885,13041,21587,21896,22321,23816,26003,26060,27114,27655,29188,30323,31685,32725,33394,33437,33660,35268,35390,35411,35530,35627,35906,35945,35968,36061,36136,36187,36201,36301,36371,36442,36493,36593,38330,38485,38738,41963,42178,43031,45732,48323,48703,49618,50006,50997,52590,52739,53460,57033,62609,65232,65257,68555,71889,74334],"exception":[478,1038,1416,2831,5039,6083,11951,20424,21031,23984,24916,25845,26041,26460,30101,30337,30880,34161,36782,38605,38761,40584,41760,50197,52408,57309,66918,67772,67953,68917,69158,70598,72059,72737,73197,73300,73496,73689,73805,74535,74850],"bbrf66kv9jllgjetuyunpygd823idzafbgnvhsmegdawgbrf66kv9jllgjetuyun":[69938],"mailing":[53720],"stacklit":[74300],"ieee":[21676,44297,45040],"tos":[65919],"86b6":[70032],"getaccelerometervalue":[29667],"question":[232,4343,35164,41433,49880,63734,70047],"keycode":[9820,10892,25797,49233,58004,59736,61817,65338,73280],"monitored":[7483,7568,7575],"recurse":[71682],"onnavmoveevent":[60530],"visualize":[4,4964,7319,8317,10520,11291,13041,14154,19667,21711,29013,30177,30256,31690,32286,32777,33651,35395,35603,35958,36074,39818,47372,47949,48188,51328,51405,52393,64489,71982,72447,72759],"peucker":[10231],"foliage":[37899],"createallocator":[27827,27924],"myrepository3":[70603],"hfreference":[7726,7745],"#8226":[553,1156,10010,12007,13914,16919,17045,17370,17788,21060,21711,23522,29157,32090,32771,34594,42766,43489,49491,50419,66487,71016,72869],"touchscreenkeyboardtype":[29686],"breaking":[2699,3847,4448,8255,9156,20394,25526,26570,27170,31870,32703,36454,52149,60646,62099,68716,69719,70910,70960,71011],"unregistercallbacksfromtarget":[56901,57448,60230],"tetrahedralizeasync":[26713],"mypluginallocator":[27924],"iapsecurityexception":[67773],"_myfloat":[45125],"pendant":[7167],"libraries":[1004,1224,1227,1706,1812,1846,1867,3078,4513,4719,6472,9112,11859,17110,17759,18852,18925,20215,20709,22567,23497,24605,24623,26089,27647,28108,28474,30000,30848,30853,31588,34597,34638,34645,34655,38679,40274,40604,45616,49756,52550,66470,68799,69003,69255,69748,70959,71664,72132,72201,72660,75075,75256,75394],"registering":[2461,2517,5346,5355,5761,5762,20159,30062,53181,54898,55731,57922,60469,62135,66119,67571,75703,75989],"disablecameracuttingfrom":[50965],"automapping":[18098],"m_timetonextclip":[34107],"getfloatparameter":[4972,5258],"backwards":[4654,6688,6985,9100,12110,18245,25623,32849,39357,39964,42689,43566,43684,44338,44422,45075,45261,45846,60373,60511,66002,69330,69436,71068],"schemes":[3956,4042,12205,19337,19351,20279,21991,27127,28947,34407,36570,52754,75080],"multiplication":[8850,37291,72326],"accepts":[3538,8949,23087,26678,34730,37229,39612,41152,48227,53083,56618,61187,63683,64511,64610,64808,64914,65312,65756,66207,68263,68379,69406,69860,74564],"setcoreapplicationviewevents":[74747],"unregisterdeviceeventcallback":[29952],"selectedframeindex":[35553],"describes":[174,284,378,404,491,577,659,703,872,897,979,1149,1237,1291,1465,2490,2742,2762,2898,3241,3291,3312,3481,3512,3785,4142,4204,4295,4388,5342,5812,6392,6804,7249,8806,10501,12814,14283,15700,17932,18047,19122,19279,19666,19971,20074,20701,21296,21893,22044,22165,22512,23629,24990,25396,25726,26796,26912,27174,27186,27213,27265,27292,27302,28078,28259,28261,28404,28493,28838,29239,29384,29595,30177,30274,32074,32225,34592,34646,34655,34684,35280,35641,35966,36227,37283,37315,37411,37475,38381,38432,39100,40544,40689,42788,46721,49099,49845,51889,52546,52711,52779,53015,53280,53733,54893,55624,56705,57626,58276,58436,60618,61501,61536,61593,61901,62053,62600,63708,66043,66456,66482,66810,66835,66964,67018,67147,67229,67840,69343,69447,70771,71090,71623,71917,72493,72794,73240,73426,74509,74931,75280,75328,75515,76158],"tnd":[53671],"basecompositefield":[55436],"registercallback":[34729,55016,55109,55690,55729,55820,55956,56028,56087,56685,56769,56897,57231,57442,57718,57876,58162,58250,58637,59572,59796,60246,60456,60529,60599,60870,60943,61049,61731,61797,62152,62390,62533,62712,62766,65337],"camera":[4,26,67,112,362,881,1264,1389,1487,2178,2966,5161,5231,5948,6152,6502,6722,6750,6754,6766,6803,6949,6958,7133,7615,7873,7878,8011,8107,8641,9196,9242,9437,9850,10247,10337,10392,10511,11319,11340,11813,12349,12637,12830,12912,13120,13183,13193,13373,13456,13538,13601,13765,13822,14189,14602,14835,15058,15967,16151,18455,18565,19074,20438,20749,20831,21164,21322,21485,21633,21963,22013,22024,22029,22139,22224,22644,23607,23626,24511,25382,25401,25672,25890,26011,26094,26664,26885,27065,29609,29827,29860,29974,30143,30193,30242,30273,30352,30513,30658,30896,31060,32250,33526,33717,34279,34493,34779,34840,35056,35719,35950,35958,36091,36508,36597,37349,37480,37496,37693,37731,37754,38242,38288,38351,38501,39053,39096,39227,39253,39689,39702,41515,42255,42358,42706,42799,43106,43110,43130,43149,43484,43527,43557,43879,44022,44051,44164,44345,44634,44959,45521,45618,45784,46925,47082,47179,48162,48231,48874,48936,49034,49296,49384,49423,49496,50008,50317,50369,50456,50615,50685,50956,50996,51167,51365,54468,54768,58394,65370,65998,66058,68779,71561,71988,72246,72499,72755,72941,73093,73432,74193,74386,74946,75107,75173,75221,75413,75624,75740,76139,76332],"destroyallocator":[27837],"appearing":[26572,26895,31719,43196,53707,54556],"audioconfiguration":[7765],"cartesian":[6287,6322],"lightmapparameters":[10052,15271,22180],"#d2b48c":[63644],"sa_flags":[1059],"r8g8_unorm":[8458],"unitystereoeyeindex":[43448],"constitutes":[71043],"determinsm":[68614],"basepopupfield":[55441],"enable_il2cpp":[7376,33827,34628,72072],"profilercounter":[23020,35403],"significant":[434,2810,3304,3468,3860,4448,5461,5606,5920,6050,6126,8357,9489,10003,10068,13042,17981,18300,20208,20269,22180,22375,27986,29360,29663,30377,30893,32233,33086,33502,35729,36020,36593,37639,37692,38402,39757,39853,40442,41815,43023,48676,54132,64328,68614,69372,69476,71672,71808,73089,73610],"command+shift+n":[24534],"setaslastsibling":[24835,54763,62810],"enclosing":[21031,30054,35696,36086,71877],"play":[267,400,432,487,491,511,523,540,557,581,620,661,893,942,967,1243,1315,1332,1565,1658,1706,1912,1957,2069,2204,2245,2450,3833,4312,4567,4663,4752,4967,5028,5094,5158,5688,6231,6267,6294,6944,6977,6988,7058,7187,7494,7670,7767,7771,8782,8972,9105,10403,10744,11039,11094,11101,11160,11447,11466,11518,11803,12305,12759,13228,13280,13297,13346,13808,14474,14786,14831,15714,15813,15850,16819,17000,17045,17077,17606,17661,17979,17993,18058,18126,18380,18931,19075,19651,19987,20074,20116,20777,21255,21345,22031,22359,23794,24164,25519,25670,26602,28398,29269,29784,30154,30905,31793,32169,33098,33509,33865,33882,33926,34168,34188,34594,34988,35195,35496,35690,35791,35920,35941,35999,36034,36205,36495,37576,38324,38731,38869,39159,39357,39797,39812,39936,40284,40629,41741,46529,48201,48556,48677,48855,49212,49440,49644,49652,49737,50653,51046,51087,51155,51208,52080,52088,52095,52166,52177,52216,52247,52765,52793,52849,52929,53003,53184,53283,53693,53775,54218,57283,58721,59191,59498,59808,60475,60758,61296,61898,62817,63113,63342,64246,65700,66100,66363,66374,66426,66457,66832,67110,67149,67177,67227,67259,67615,67625,67722,67760,68043,68062,68626,68796,71175,71271,71608,71735,71897,72163,72241,72494,72537,72660,72956,73030,74140,74229,74453,74902,75027,75203],"ies":[37803],"designates":[40314],"nicer":[12912,27575,29530,33024],"rgbm":[14238,27130,42398,43883,43965,45166,45202,50796],"tier1":[23550],"presetsperfolder":[19464],"evaluation":[6133,21333,41288],"onstatemachineenter":[21332],"getreflectionprobes":[26758],"_colortint":[46400],"cafile":[69947],"executionengineexception":[52609],"say":[2007,2085,2243,3419,3611,4866,6281,6310,8115,13041,20967,21164,26050,27512,27678,29794,29918,34957,37684,37714,37738,39671,40064,40618,43047,47607,50945,51975,52230,59868,66722,71809,71877,72315],"html5":[22946,73260,73470,73592],"“wakes":[38471],"cleaning":[10573,22128],"visit":[9975,27496,28388,33062,33879,36736,36845,36998,37254,40509,53456,62008,66692,67684,69507,72795],"#bbbbbb":[63259],"supportsaudio":[19713,73037],"floatvalue2":[52353],"matchtargetweightmask":[50338],"ungated":[5853],"palegreen":[63616,63959],"myconfiguration":[67556],"u+1f60a":[61943],"cues":[5179,27815,39137,74244],"conical":[8303,39253],"trygetfeatureusages":[76208],"hasn’t":[25130,35714,44851,68636],"jsonserializemodule":[16670,30960],"locale":[825,1477,5988,6154,12674,16470,31145,53070,53602,67177],"agentslope":[76402],"emulate":[719,7620,8765,22042,43972,44269,52742],"blended":[2068,6318,6320,6494,7930,18105,22093,22498,27579,32876,32920,38667,42796,44345,45306],"hyphen":[12154,34372,58454,63660],"discovers":[3806,66696,75909,75975],"waitforlastpresent":[35718],"focusfirstelement":[58182],"surfacefunction":[46758],"chf":[53668],"setrootitems":[60085],"oneminussrccolor":[43771],"font’":[9267],"__multi":[39625],"seed":[32172,50378,52116,52196],"product1":[53682],"one's":[8091],"learn":[263,385,1319,1397,2064,2460,2764,2952,3256,3289,3429,4039,4170,4531,4722,5820,6056,6798,8427,9328,9939,10110,10415,11461,12350,14754,16168,16431,16446,18419,19113,19120,19152,22236,23608,24528,25150,25759,25823,25835,26695,26950,27583,28862,29150,30033,30346,31360,31469,31599,31613,31703,32847,33627,33763,33888,34612,34680,35964,36189,36625,36745,37275,37313,37322,37355,37511,37543,38646,40646,41427,43376,47455,48360,48633,48893,50018,50317,51864,52849,53402,54008,54291,54746,55542,55635,56072,56730,57805,58023,58802,59191,61979,61994,62767,63711,64313,64377,65684,65691,65761,65915,65920,66191,66542,66957,67659,67978,69893,71995,72082,72097,72116,72191,72795,72884,72910,73028,73151,73699,74887,75189,75383,75918],"goods":[22375,66965,67019,67230,67841],"playstate":[34065],"10f":[9358,20970,57043,62292],"myprefab":[25504],"country":[1175,12154,22381,53069,53416,53734],"treeelements":[52365],"linux64":[19118,21060],"gles":[553,21089,30315,31892,43945,44919,45436,52589],"improve":[94,246,567,889,1347,1467,2699,4204,4367,4419,4569,5891,6479,6833,8295,10010,11623,11729,13894,16850,16984,18091,20239,21002,21604,22117,22818,23273,23439,24947,25044,25733,26005,26271,26665,27058,27089,27495,27937,28781,29130,29150,29330,29417,29479,29882,29922,30267,30354,30825,32311,32705,33194,33446,33616,34840,35135,35794,36591,37428,37689,37702,38405,38620,40177,41944,43131,44293,46980,48229,49710,52058,57959,59892,60618,61958,61997,64334,66608,68130,68614,68957,69204,71782,71901,72787,72879,73209,73697,73794,73985,74171,74394,74795,75068],"targetdevices":[676],"cave":[5064,5160,9875,50513],"full":[5,66,177,251,554,684,715,1704,1709,1759,1944,2047,2120,2183,2690,2952,3675,3726,3999,4149,4372,4450,4502,4663,4722,5137,5221,5974,5984,6055,6135,6225,6266,6293,6388,6458,6834,6935,7662,7755,7878,8065,8146,8872,9217,9279,9417,9555,9622,9723,9963,10485,10561,10762,11149,11161,11256,11279,11459,11474,11716,12065,12275,12397,12472,12717,12895,13117,13837,13915,13959,13977,14501,14562,15851,17752,18001,18120,18536,18563,19259,20078,20242,20450,20558,20831,21052,21154,21605,21937,22048,22190,22271,22470,23427,23627,24388,24782,25394,26439,26999,27054,27918,28618,28698,28720,28783,28873,29151,29801,30851,31998,32154,32411,33077,33388,33415,33549,33880,34218,34260,34341,34467,34839,35357,35384,35427,35514,35640,35888,36047,36497,36696,37365,37540,37713,38031,38585,38641,38842,39239,39663,39836,39888,40675,40756,41974,42751,43203,43385,44073,44234,44453,44870,45103,45330,45577,46793,48068,48171,48499,49400,49470,49490,49509,49564,49570,49770,49850,50006,50141,50175,50288,50361,50436,50528,50686,50703,50896,51027,51236,52251,52570,53001,53289,54274,57056,58096,58203,58369,58934,65025,65194,65776,66584,66828,66862,66909,67243,68196,68312,68458,68492,68879,69115,69713,70116,70419,70618,71136,71238,71386,71754,71871,71896,72037,72499,72789,72824,72890,72910,72931,73199,73259,73300,73377,73414,73486,73620,74038,74186,74267,74649,74774,75549,76038,76102],"prefabs":[2959,3311,3466,3569,3806,3862,5972,6126,9095,9417,11072,11172,12846,13307,13619,18419,18431,20624,20630,21540,24523,24730,25416,25495,25939,30034,32651,34905,34922,34944,35057,38840,39920,40738,41096,41178,41333,41359,50454,51397,54574,57628,58825,62787,66075,66181,66232,68534,68614,71931,74147],"skyscapes":[5866],"etc2_rgba8":[48738],"customfilter":[60652],"onopen":[56581],"powerups":[34928],"cardelement":[57630],"ons":[49824,52494],"scene":[4,23,67,84,180,253,410,493,518,1277,1312,1996,2191,2232,2300,2362,2419,2423,2537,2611,2959,3247,3430,3469,3566,3611,3731,3879,4591,4797,4865,5040,5083,5162,5330,5769,5962,6123,6351,6403,6491,6685,6725,6750,6754,6767,6794,6801,6969,7045,7144,7315,7494,7615,7657,7771,8012,8104,8221,8302,8499,8640,8782,8972,9075,9178,9196,9327,9517,9555,9622,9669,9851,9898,9908,9987,10054,10108,10211,10345,10651,10712,10760,10842,11073,11101,11175,11319,11333,11459,11505,11631,12279,12598,12742,12785,12851,12903,13120,13251,13263,13345,13372,13453,13538,13590,13628,13666,13706,13732,13743,13784,13822,13995,14123,14539,14574,14663,14848,14923,15022,15840,15890,17000,17977,17983,17991,18046,18098,18130,18168,18322,18423,18444,18454,18567,19038,19053,19316,19336,19351,19364,19376,19442,20100,20452,20583,20657,20770,20863,21037,21164,21191,21230,21304,21447,21639,21854,21956,22040,22121,22128,22131,22189,22222,22533,23279,23377,23434,23555,23668,24492,24523,24667,24726,24774,24806,24900,25232,25350,25416,25498,25624,25881,26005,26060,26094,26606,26651,26664,26705,26717,26783,26787,26802,26812,26914,26938,26953,26992,27018,27080,27097,27121,27167,27175,27186,27213,27265,27296,27307,27318,27320,27329,27482,27490,27512,27520,27678,27738,27757,28326,28353,28864,28877,29131,29212,29398,29714,29759,29835,29861,29900,30038,30164,30177,30206,30229,30265,30327,30351,30510,30515,30824,30910,31668,32273,32372,32651,32738,32747,32847,33099,33477,33548,33611,33637,33760,34747,34771,34842,34909,34923,34975,35247,35264,35384,35463,35746,35881,35906,35924,35958,35972,36099,36148,36242,36296,36354,36449,36570,36684,36705,37281,37345,37526,37631,37635,37675,37683,37702,37723,37836,38239,38257,38277,38292,38330,38346,38439,38459,38731,38905,38945,38983,39023,39073,39095,39126,39158,39174,39227,39245,39307,39399,39689,39699,39797,39818,39924,40001,40097,40104,40145,40531,40616,40681,40694,41160,41342,41359,41462,41488,41671,41676,41707,41864,41952,42181,42318,42362,42691,42716,42731,42757,42813,42934,43041,43113,43127,43131,43149,43185,43205,43209,43455,43484,43522,43553,45620,46550,47178,48053,48188,48226,48296,48353,48506,48593,48608,48884,48906,49021,49178,49318,49421,49483,49565,49626,49677,49720,49908,50006,50064,50140,50288,50330,50386,50437,50522,50534,50537,50583,50620,50655,50726,50939,50969,51025,51080,51121,51166,51189,51197,51268,51552,51893,52083,52174,52222,52489,52601,52746,54120,54262,54422,54711,54758,54787,55052,55301,55408,56201,56212,56321,56327,56445,56663,57122,57628,58138,58387,58584,58764,59389,60161,60758,61302,61486,61524,62748,62839,63113,64452,66009,66045,66189,66217,66338,66464,66951,67078,68532,68541,68711,68825,68852,69058,69350,69454,71562,71591,71638,71735,71805,71847,71855,71898,71919,71981,72163,72231,72440,72488,72740,72800,72806,72879,72923,72944,73022,73573,74039,74083,74141,74290,74907,74965,75037,75079,75106,75140,75186,75219,75322,75374,75405,75453,75545,76219,76331],"clearshadermessages":[68576],"margin_":[64285],"allowexittohome":[52766],"spiral":[10204,22828],"last":[434,561,1031,1170,1896,2167,2272,2395,3595,3793,4088,4680,4867,6266,6344,7073,8326,8892,8989,9491,9608,9659,9793,10246,10360,10633,11007,11382,12598,13486,14738,18188,18471,18617,19486,19999,20023,20740,21134,21334,22128,22317,23665,24060,24521,24618,24892,25062,25462,25994,26452,27813,29242,29586,30257,31720,32412,32866,33152,33403,34781,35030,35394,35681,35727,36149,36336,36464,37748,38394,39137,40502,40719,40840,41467,41603,43221,43592,44076,45252,47163,48683,49033,49948,51954,53203,53423,53717,55986,57965,58454,60788,61473,62009,62660,62803,63139,63811,65422,66018,67237,69295,70400,70872,71233,71350,71464,71543,71658,72918,73412,75360,75412,75588,75762,76259],"stand":[92,1957,4286,11040,12307,56172,58155,59596,71775],"whilst":[1589,14999,25882,26787,67265],"threadstatic":[4720],"whole":[2009,2277,2411,2442,2814,4207,5044,6384,7507,7765,8128,8318,8871,10031,12472,13058,13601,13899,13984,14029,15024,17955,18620,18757,21032,21240,21575,22530,24749,27493,28182,29863,30376,32141,32260,32678,32852,33135,34925,34956,35054,37405,37689,39150,39322,39615,39988,41807,42366,43121,43154,44282,45952,46877,47312,49512,49631,49832,50543,50589,50642,51188,51390,52038,52099,52226,52615,53487,61443,63082,65985,66009,72362,73172,74214,74645],"flood":[50520,51149,51289,51388,51535],"sinks":[4837],"min16float2":[8450],"enough":[1895,2055,2409,6150,7496,7619,8356,8570,10080,10337,11370,11518,11639,12903,15838,18575,19620,20380,20525,23443,26025,26479,26969,27538,27643,28639,29207,33381,33437,35007,35765,35920,35931,36592,37639,37675,38403,38508,38557,38587,39560,41935,42106,44234,45129,45577,46979,47908,48683,49432,49510,50008,51035,51655,54223,54706,59085,68157,68284,71012,71811,71868,73121,73623,74736],"experienced":[5829,18377,38252,52511,59549],"spacecraft":[8579],"scrub":[10338,14761,36432],"amountrect":[20956],"launch":[734,862,931,1102,1214,2605,4338,4466,12096,15719,15814,17932,19052,19438,21017,24640,25179,25573,25881,27617,27786,28407,28615,34201,35082,35817,38278,38819,38870,41325,41420,41590,44311,49760,52520,52599,53443,53696,53769,66355,66457,66820,66894,67060,67090,67517,69788,69855,70505,70921,72087,72848,73619,74546,74753,74780,74799,74928,75909],"cmd+5":[36693],"rendered":[8,67,5176,6495,7873,8021,8104,9258,9463,9636,9883,10385,11735,12472,13486,13613,13748,13794,13982,14149,14533,14578,14712,15967,19306,20271,20893,21156,21706,22029,22752,23641,24511,27087,27520,27544,29880,30147,32248,33529,34486,34866,35946,36355,37321,37693,38317,38347,38384,39309,39678,42243,42391,42456,43165,43172,43452,43591,44026,44066,44428,45143,45195,45568,45621,45725,46485,46797,47251,48009,49217,49421,49520,49823,50395,50687,50937,51137,51164,51198,51235,51753,51798,51820,52182,52385,52487,54767,54886,58394,61302,61388,64078,65734,65998,71899,72488,72770,72926,73246,75449],"ybottomleft":[58147],"dart":[13041],"track’s":[72711],"platform’s":[6445,68938,72717,72737],"overlaps":[11541,18233,26990,29891,35744,36305,36679,48370,56933,71889],"preqrequisite":[74957],"invalidbundleid":[67772],"eventsubscribingexample_registeringpackages":[69629],"0x1050":[20298],"9bc4":[66769],"selector1selector2":[54836,63916],"vectortosurface":[14179],"thick":[31838,42792,58407],"newobj":[30671,33115],"jenkins":[28625],"showdropdown":[30601],"loadencryptionlibrary":[66114],"in's":[23483,27923,34617,34692,75135,76086],"eligible":[27696,29347,30472,40441,40469,49679,49723,59750],"reverbzonemix":[5207],"outs":[52385],"dynamictransform":[60621],"80db":[4819],"setstacktracelogtype":[49408],"borrow":[10118],"autosynctransforms":[35344],"archivehandle":[2921],"darkslategrey":[63545],"shift+ctrl":[34816],"bif":[53665],"overlap":[5262,7199,7708,8355,9744,11603,12699,13622,13708,14545,14999,22182,23055,26969,27262,33744,34755,35312,36305,36677,37625,38394,38557,38587,41510,50612,54762,58285,58557,59890,62030,71876,72761],"forced":[3468,8163,10020,12897,25292,34488,37618,39530,42366,73271],"https":[229,2755,3232,3342,4026,4149,5853,11895,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16091,16115,16131,16146,16162,16168,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17215,17232,17249,17263,17277,17291,17306,17321,17336,17351,17364,17370,17393,17407,17419,17431,17446,17465,17483,17499,17517,17533,17542,17556,17571,17586,17601,17619,17637,17654,17672,17688,17703,17718,17735,17747,17755,17768,17783,17788,17813,17829,17845,17860,17875,17890,17906,17922,18752,18903,22284,23774,24594,25945,26073,26781,27211,28775,30951,30997,31294,31374,31488,32326,32889,33569,34362,37746,40648,43333,49640,50179,50342,52778,53101,62008,66603,68099,68251,68270,68294,68317,68361,68398,68451,69376,69480,69790,69857,69859,69892,70001,70096,70221,70458,70601,70830,70885,70983,71377,72191,72477,72586,72884,73115,73319,73496,73741,74074,75354],"whos":[30781],"interesting":[3997,4819,10633,13499,13898,32220,47259],"github":[2943,3229,5898,6885,12222,16060,17788,18681,18818,33902,38818,40509,50575,54509,54912,54964,55064,55163,55236,55310,55370,56126,56213,56274,56328,56395,56478,56524,56593,56737,56800,56983,57126,57338,58595,59272,59911,60675,60882,60983,61198,61595,61750,62342,62498,62644,65780,66117,69398,69502,70076,70142,70458,70601,70780,72887,75381],"bonuses":[67170],"kerneltwo":[8423],"regains":[3773,67551],"splits":[5730,9079,12942,18317,21555,22145,24614,32128,33399,37646,43118,50140,59064,65990],"onimportasset’s":[40482],"therefoe":[56607],"appended":[11,13330,15851,25595,32065,64340],"gatt":[12662],"generatepropertybag":[36754],"gradle":[478,532,555,572,580,944,961,1100,1230,1240,1244,1376,1616,1714,11994,23137,23474,24601,30839,66812,68894,69132,69359,69463],"depenetration":[11603],"nonamespaceschemalocation":[58604,61276,61638,62429,62549,65879],"shipped":[25970,48060],"movetowards":[10470],"08t09":[66678],"period":[2089,2274,2399,2455,4356,4461,7579,8858,10368,12622,12889,18292,18751,22341,26356,29670,30439,30868,36449,36540,40718,50634,53498,63860,63922,66696,67170,67296,67736],"unity_accelerator_persist":[66620],"kformatrgba_dxt1_srgb":[50096],"1unity":[21029],"mytex":[8430],"fogcolor":[46438],"writting":[25036],"onenddrag":[49895],"evens":[726],"odr":[2768,23145,52739],"rightcolor":[43453],"progresscolor":[61059],"powerup":[1996],"verion":[22888],"casting":[4955,5972,6816,7896,9885,14959,23663,27268,27304,27335,28447,32293,33498,37632,37838,38355,43128,43183,44066,46057,46780,47749,48230,49426,52485],"materialdescription":[21390],"appleconfig":[67828],"unloadasset":[48785],"uifilesharingenabled":[25970],"subpixel":[37957],"microphones":[5168,10687,12651],"”":[21029,33194,33383,33435,33543,39358,39951,41104,67105,67179,68929],"unityxrstatid":[76001],"pl":[53639],"break":[2684,3436,4280,7364,8239,8551,9009,9145,9173,9303,9706,9739,11023,13087,13170,13569,13660,13681,13866,13962,14995,19415,23362,24852,26359,26562,26572,28008,28378,29959,32360,32702,36661,38346,41812,41866,49582,50651,51492,52129,52421,52736,55120,58015,58061,58164,61967,62013,68192,69600,70759,71036,71468,72060,72590,75839],"gitconfig":[48079],"baseuri":[66394],"conditional":[2180,6095,6194,14734,19168,23573,31080,33773,34698,41786,41880,42044,42109,42958,43006,43016,43947,44526,44989,49763,56472,65370,72063,73923],"collectible":[22011,66205],"mitchell":[14287],"phasing":[32690],"em":[4276],"sign":[618,927,1118,1135,1169,1178,2245,3916,3977,4156,4169,9279,11977,12158,23508,28074,28116,28124,28137,28184,28290,28916,29693,30382,30449,30481,39619,41393,48350,49752,53160,53369,54103,63733,63922,63940,66623,67047,67517,67703,67903,70374,70672,71553,72179,74660,75251],"routable":[66571],"visualeffectobject":[15366],"quitapplication":[66859],"completes":[3767,5492,5686,5736,5803,21154,26509,28685,28723,30062,33094,33421,39396,39490,53858,66852,67095,67323,67427,67549,67587,68626,70174],"exp":[10459,15910,16191,16264,16283,16495,16550,16891,16941,17195,17614,17733,17903,45582,47148,70755],"codeanalysis":[38687],"effectors":[21143,33632,37440],"curves":[1878,1896,1925,1982,2179,2197,2298,2322,2386,2431,4511,4979,5199,6703,7015,7163,7771,7862,10560,13063,14957,17546,18068,20537,20731,21474,22077,22465,24520,27569,27816,29115,29129,31836,31857,32090,32193,32367,32633,32856,32909,34867,35763,38097,38653,40622,52114,52194,58540,64489,74164],"acknowledgement":[67594],"isenabled":[2497,27951],"insideunitsphere":[13025],"closestoverlappingslot":[56943],"vface":[45783],"improves":[9948,9998,10357,11635,13477,17133,21588,22116,22862,24969,27089,30325,37685,44165,44936,48642,49309,52080,73346,73792,74173],"basis":[1582,4545,5959,6499,7082,7323,9653,18268,18734,23585,25173,25875,27467,27820,30426,33264,33424,36223,36546,43489,46024,47422,50342,53522,60652,64088,68725,68863,69096,69740,75294],"clean":[6388,6458,10573,18581,22128,25324,26047,33093,33414,33866,35130,37318,48057,52530,52572,54898,71774,73413,74040,74649],"hyperlinks":[4278,19316,19336,19351,19376],"imguicode":[64779],"netbooks":[701],"loads":[1141,1585,2896,3301,3338,3486,3611,4663,4970,5129,5330,5417,5561,6353,7494,9517,11971,12279,12902,13826,15719,18258,19472,19944,20237,21168,21725,23545,25694,25878,26711,27175,27695,29153,29364,29418,29566,29663,30207,30269,31917,33083,33501,34594,35366,36534,37671,39159,39190,42179,43018,43104,43327,44363,48535,48590,50058,50067,50148,50673,50700,50708,50991,52033,57309,57726,58622,60138,61326,63796,64182,66224,66879,67090,70399,70613,70867,70921,71533,72283,73022,73030,74711,75022],"assetprovider":[2590],"detaching":[60568],"emulates":[22768,23940,26560,60358],"ramamoorthi":[27468],"logicalnoop":[43820],"violet":[63650],"propertydrawer's":[55509],"compiler’s":[71681],"physx’s":[33491],"verbose":[28243,35004,72394],"fine":[3377,7304,7929,8207,9719,13898,18181,21326,24051,25401,26510,26947,29248,30237,30352,33076,33450,37557,41830,44268,44749,45523,48377,49518,50929,50950,52114,52194,52639,58447,64450,64756,67272,67658,71811,74259,74918],"deduplication":[43073],"narrows":[3989,36710,41313,43244,63955],"pingobject":[2475,56498],"‘greater":[14734],"baz":[36792,69000,69251],"objectreferences":[57462,57588],"registerdeviceeventcallback":[29945],"frametimings":[20468],"vertexid":[45812],"waitforlastpresentgfxdevicemetal":[35718],"spending":[4372,35719],"inactiveobjects":[33111],"sq":[2661],"dictionaries":[6037,33242,37054,39872],"contentany":[53747],"teamwork":[66555],"downscaling":[14286],"refine":[4042,5124,14250,15838,18969,36704,37731,48660,50877,51139,51240,71634,71776],"plants":[5810,37702,43618,52120,52200],"imageconversionmodule":[16654,30958],"growth":[12404,17370,43070,49477,52121,52201],"unity_objecttoworld":[5447,5591,10186,14190,20345,47080,49004,49327],"myassetpackagever1":[3894],"changelog":[18690,18934,31365,31385,70307,70756,70830,71136,71238],"importerversion":[21646,76422],"bind":[285,1768,1935,8439,13451,18095,22489,28109,38336,43692,49354,54907,54959,55058,55157,55229,55305,55365,55497,55547,55561,56074,56253,56269,56323,56393,56592,56667,57061,58847,59089,59458,59601,60019,64387,64653,64803,64888,65049,65368,65517,66944,71795,75076,75671],"rectangular":[6761,7955,9538,18991,20552,22786,23727,32319,34786,48162,48514,48662,49852,50409,51119,51306,51355,58350,61913],"vcsmodesession":[21046],"grippy":[15844],"contour":[58393],"taller":[8183,40133],"\\unity\\editor\\data\\tools\\unityyamlmerge":[48063],"abstracted":[22981],"updatecloth":[35755],"dictionary":[11205,37093,39899,67193,76071],"videomodule":[16822,30979],"allocation":[4911,5984,6079,9345,17474,18316,23443,26025,26448,27852,27931,27992,29150,30432,30872,33081,33239,33381,33429,33454,35142,35723,35957,36070,36250,36497,36785,36799,54274,63132,68157,73621,75407],"batchmaterialid":[5370,5514,5764],"“undefined”":[44893],"yourcompanyname":[11842,12154,34372],"del1":[52660],"midphase":[10575],"chromeboxes":[50197],"excellent":[4979,6036,6154],"replicates":[41752,54553],"m_texturewidth":[76379],"lightingstandardtonemappedgi_gi":[46688],"treeview’s":[52252],"part":[158,269,315,499,511,544,1044,1163,1668,1893,1944,2002,2010,2117,2620,2834,2998,3087,3485,3589,4354,4387,4825,5291,5769,6461,6762,7167,7929,8317,8878,9555,9622,9982,10122,10507,10766,11074,11863,12442,13821,13920,14533,14820,14933,14938,17398,17926,18024,18070,18137,18318,18432,18454,18506,18634,18933,19005,19028,19081,20179,20452,20605,21002,21316,21466,21604,21716,21964,22019,22079,22470,24895,24966,25176,25342,25608,25756,26115,26355,26482,26709,26908,27171,27490,27678,27757,28149,28446,28463,28753,29093,29318,29397,30035,30475,31670,31733,31749,31767,31779,31804,31825,31842,32080,32095,32119,32144,32206,32242,32330,32348,32374,32596,32619,32639,32667,32714,32749,32893,33194,33435,33495,33782,34237,34600,34860,34890,34914,35141,35344,35799,36104,36204,36432,36509,37259,37709,38403,38657,38862,39494,39551,39666,39724,39747,39927,39984,40263,40452,40561,40698,41177,41361,41518,41641,41714,42010,42311,42705,42726,42748,42793,43114,44360,44996,45046,45180,45841,46026,47233,48174,48514,49154,49396,49424,49484,49638,49750,49756,50028,50132,50146,50276,50534,50651,50710,51074,51202,52082,53750,54264,54430,54771,58863,59829,61328,61767,62774,64205,64340,65698,65870,65986,66193,66462,66816,66840,67449,68498,68636,68814,68884,69046,69387,69491,70302,70347,70756,70839,70910,71016,71851,72032,72337,72792,72832,73416,73631,73924,74757,75080,75671,75909],"plugins\\bonjour":[34744],"builds'":[19128],"widen":[50288],"mainthreadtimerecorder":[21920],"implies":[3493,13818,20075,22045],"amplification":[7690,7789],"getlightprobes":[26759],"item":[238,2037,2471,2533,2554,2641,2871,3537,3725,3851,4005,4519,6184,7004,7164,7184,8442,9399,10522,10723,13031,13238,13851,20878,21005,21405,22273,23185,25350,25399,25938,26496,30048,32064,32924,33382,34942,35176,35203,36060,36189,36696,39141,39481,40600,40775,40893,41173,41320,41348,41428,41605,48262,48516,48587,49421,51085,51202,51696,52244,52952,53341,53953,54036,54419,54546,55060,55223,55309,55916,55976,56547,57005,57528,59042,59384,59998,62829,64887,64973,64986,65420,65451,66208,66600,66986,67182,67456,67625,67673,68835,68960,69080,71258,71350,71528,71898,71950,72364,74074,74739,76178],"examined":[49560],"longintstringfloat":[55501],"“number”":[40884],"serial":[229,5985,21099,28604,33610,75515],"spheretests":[11609],"concatenation":[5986,33133],"haven’t":[3668,12442,41729,58327,68956,69203,72422],"robot":[2427,25526,33610,34884,34931],"sharable":[40589],"maxhp":[57014],"inserted":[13988,14738,35701,37625,65289],"random":[4998,6288,7198,8081,8290,10923,11491,13016,13818,13836,15026,16020,20685,23361,30912,32090,32106,32172,32260,32360,32401,32685,32855,33226,33715,40540,40871,50374,50592,50941,52358,52550,55824,58722,66247,71717],"+graphicssettings":[49277],"allowrotationflipping":[48724],"white":[86,1569,1915,2290,2381,2429,4956,7329,7986,8666,8911,9973,10146,12087,12307,12331,14157,14319,14475,21699,23295,25285,27506,29492,30644,31745,31760,31879,32813,32938,33433,34880,34991,35250,36058,36459,36547,36679,38094,39836,42793,42963,43233,43622,44463,44521,45087,45126,45308,45568,45749,46143,46537,46772,46834,47189,48607,49465,49471,49498,49513,49545,49564,49877,50945,51148,51189,51648,51755,51826,55870,56839,58503,60704,63652,64169,65210,65812,71586,71811,73913],"second":[316,521,2177,2303,4767,4867,6045,6143,6279,6291,6543,7391,7440,7457,8297,8883,8982,9172,9733,9761,9784,9970,10020,11244,11274,11313,12884,12990,13034,13432,13680,13865,14968,14989,18292,20130,20344,21558,21661,21814,22667,23525,23791,24004,24337,24574,25062,25110,25401,26044,26121,26376,26460,26966,28764,28915,29188,29640,31731,31798,32091,32227,32328,32358,32594,32682,32813,32934,33092,33550,33669,34042,34237,35637,36621,36718,37236,38329,38828,39357,39483,40009,40208,41084,41228,41666,41775,42243,42255,43618,43690,44565,44708,45319,45659,45736,46805,49473,49560,49639,50697,51129,51427,51954,52224,52259,53683,54564,54593,54762,55990,56468,56619,58100,58148,61399,61475,62044,62611,62660,62991,63171,63945,64140,64596,64705,65793,66668,68247,68379,68434,71283,71970,72297,73702,74458,75576,75983],"installs":[422,487,511,605,1608,2939,3009,3237,6413,21988,22985,25462,25910,27638,28289,34850,40662,50921,67148,67669,69028,69281,69518,69735,70288,70389,70867,70936,70944,71288,72901,72974,74763,74993,75345],"bumpmap":[42568,46179],"transcoding":[14802,72529,72616,72731],"'stacking'":[51169],"graphicsuvstartsattop":[19731],"banana":[55942],"attributeoverides":[61399],"visualscripting":[17767,31481],"tiff":[4500,6713,25238],"getdataprovider":[48433],"hit":[2080,6725,8222,10012,10573,11551,11608,16933,17773,17803,22726,26935,29611,39529,43150,44449,48346,52673,71572],"black":[250,7990,8081,8318,10196,11735,12109,12472,12844,14319,14815,14868,21699,25285,26928,26999,27310,27506,29551,29710,32414,34990,36459,42751,42792,44447,45145,46418,47127,47609,48163,49057,49471,49498,49513,49545,49564,49633,49639,49858,50730,50945,56840,57106,58319,58763,61201,63515,68825,68856,69058,71600,72533],"lambda":[56725,67708],"gpgpu":[8402],"networkconnect":[11225],"lang":[1407,2899,4655,5202,18261,18541,18635,18731,18798,18857,19325,19386,19784,20011,20195,21117,24457,24991,26130,26305,26377,26443,26498,26727,27887,27957,28267,28616,28679,28721,30013,30542,30908,33105,35417,35479,35509,36641,36764,36832,36985,37238,38754,38978,38991,39206,39942,40574,50292,54481,54516,54613,54803,54850,54874,54924,54971,55076,55176,55248,55322,55378,55588,55676,55733,55819,55871,55930,55977,56046,56104,56134,56227,56285,56340,56406,56484,56536,56604,56682,56748,56814,56990,57161,57311,57345,57646,57870,58003,58038,58161,58235,58416,58468,58601,58758,59024,59279,59559,59754,59844,59919,60139,60166,60233,60439,60521,60545,60623,60684,60845,60894,60994,61182,61208,61335,61574,61632,61763,62123,62243,62353,62510,62672,62816,62888,63096,63144,63661,63698,63749,63844,63861,63879,63894,63915,63941,63957,63992,64014,64045,64344,64392,64401,64416,64429,64447,64471,64492,64516,64536,64568,64591,64614,64644,64677,64700,64721,64734,64750,64778,64798,64812,64826,64845,64863,64882,64919,64939,64958,64976,64989,65005,65035,65064,65089,65105,65120,65136,65149,65167,65223,65247,65271,65297,65316,65374,65396,65416,65435,65447,65461,65479,65493,65504,65515,65541,65556,65571,65591,65611,65631,65652,65671,65795,65851,69520,69668,69837,69875,69905,70000,70071,70117,70138,70213,70387,70599,70782,70842,70882,70987,73773,73966,75243],"m_robotomonoregular":[65306],"advertising":[16072,19645,31429,53757,74868],"#116":[66770],"stylepropertynames":[62608,62972],"spot":[9869,10068,18346,20552,21492,22186,22902,26897,26915,27013,36637,37788,38354,38412,42793,43154,44579,46781,47114,50615,50713,56840,69243,71806,72754,74535],"submenu":[2037,18379,21892,29352],"atten":[46560],"wrap":[1272,1471,1703,2069,3719,3855,6096,8430,8827,9641,12837,13210,18485,20860,23258,23892,24398,32072,33909,34181,34698,37557,39873,40055,44906,45247,46575,46816,50033,50125,50730,54629,64093,65193,65771,71112,71751,72800],"privileges":[219,1666,12674],"boxes":[2409,3885,9560,9760,10336,10595,11520,12234,13882,15835,18233,20674,24388,25887,26611,33433,35250,48322,52233,52644,55839,56636,61196,62213,64254,71383],"args":[24484,35088,48092,52394,74675],"moveassettotrash":[3619],"recognising":[27554],"'s'":[1963],"shortened":[70677],"triggering":[7950,8152,10568,13640,18376,19479,52769,54278,55798,74229],"shadowcaster":[42395,44066,44582,45192,47751],"aces":[38093],"shortly":[35737,42060,75440],"hash128field":[55467,55523,64717,69320,69426],"install":[80,234,421,466,499,509,582,840,909,1068,1190,1277,1322,1325,1601,2977,3231,3570,3876,3903,4513,4567,6357,6412,10733,11917,12181,12368,12556,14470,14782,14924,14929,14934,14939,16091,16227,17370,17952,18816,18948,19049,19122,19221,19270,19616,20089,21024,21625,21979,21996,22100,22983,24641,24950,25444,25742,25904,26688,27638,28096,28382,28608,28785,31367,31601,31610,33767,34307,34393,34512,35011,35469,35609,37385,37485,37517,38063,38687,39112,40146,40662,41417,41436,41645,43920,44317,46510,48984,49152,50178,50649,50917,52493,52817,52933,53370,53924,54739,61511,61570,66530,66556,66973,67054,67076,67148,67255,67527,67648,67869,68058,68657,68704,68830,69024,69075,69512,69693,69749,69864,69963,69992,70195,70236,70288,70389,70595,70817,70953,71121,71136,71221,71243,71275,71287,71322,71363,71467,71481,71517,72000,72091,72185,72462,72792,72830,72943,73133,73427,73804,74228,74538,74984,75032,75114,75192,75347,75388],"editorbuildsettings":[15256,38929],"listenermatrix":[5196],"sendtoback":[57605,62809],"autogenerated":[39896],"accidental":[27000,32115,39140,48512],"colon":[23275,45459,54800,70776],"thetype":[65002],"systraceeventcallback":[28035],"unity_display_orientation_pretransform_180":[73005],"roll":[4548,7798,10394,13645,14962,20541,31213,32284,32343],"disappears":[7508,11429,12292,18267,32725,39638,40076,59192,66929,71432],"vendors":[4227,10780,30416,44300],"buttonnumber":[61738],"materialpropertymetadata":[20253],"createproject":[21028],"blendunder":[14194],"explosion":[5054,15864,25570,26920,32136,32360,32609,35619,43070,50941],"compromise":[1962,6105],"cornflowerblue":[63525],"footage":[72608,72706],"bringtofront":[57604,62810],"unityview":[25888],"createassetbundles":[3318,3528],"beautiful":[6784,23590,34221],"distancesq":[56963],"links":[556,3870,3923,3968,3999,4035,4122,4160,4217,4263,4429,4503,7219,11437,12975,13019,17642,18120,18155,18665,19316,19336,19351,19364,19376,20654,25492,28266,30035,30198,30277,30918,30988,31370,31389,33587,33762,38818,41526,48237,49390,49725,49783,50344,51889,53223,53480,57972,58077,63330,63702,64245,64878,65904,66184,68534,68789,70306,70966,71132,72639,75135],"f61f":[66769],"physics":[1,46,86,708,3012,4557,5888,6065,6685,6733,6750,6774,6792,6943,6991,7155,7204,7215,7950,7959,8133,8152,8162,8192,8263,8280,8373,8501,8599,8765,8999,9024,9145,9163,9224,9294,9343,9723,10244,10568,10714,11189,11247,11284,11520,11524,11595,11641,12721,13159,13234,13261,13552,13640,13670,13890,14503,14557,14702,14943,15015,15711,15843,15890,15899,15998,16635,16687,16695,16719,16811,16930,18226,18334,18752,18968,19161,21144,21160,21198,21323,21453,21627,22016,22299,25599,26009,26053,26068,26551,26567,26571,26580,26614,26647,29386,29610,29750,30931,31128,31426,31589,31702,32164,33372,33486,33571,33611,33623,33636,33748,33761,35012,35254,35263,35740,36028,36295,36522,37337,37532,37608,37620,37629,38130,38457,38478,38492,38501,38518,38549,38575,38609,38632,38643,38923,39688,39698,40001,42811,48374,48637,50514,50607,50912,51237,51721,51836,51957,66542,68003,69747,70984,71566,71608,72290,73398,74184,74323,74421,75444,75794],"tire_propertydrawer":[58889],"'system":[2739,20196],"#d1d1d1":[63270],"brighter":[9875,27575,31997,42704,42725,42747,42772,42818,68672],"texturelayout":[9218],"br":[4280,6383,14363,18132,29301,32251,41506,41766,53640,61547,61969,62013,63244,71094,72752,73190,73344,73715,74644],"satisfies":[70211,70236],"example_waituntil_coroutine":[15791],"differently":[1032,2350,3666,5040,6857,7350,7645,11074,14710,15854,18312,20402,21170,21427,22778,23263,23568,24018,26706,27569,27685,29330,30170,30207,32090,33384,34857,34900,35395,36360,37649,38336,38382,39856,40358,42009,43655,43801,43957,44229,44502,44627,44758,44797,45848,45975,48331,50357,50642,52230,54733,68730,68862,69095,71070,71889,75154,76166],"publication":[4182,4220,4452,67845],"concurrently":[34254,34335,34461,75784],"+infinity":[12954],"decompresses":[270,1556,5952,14295,14347,29364,42182,50673,68279,72711,73328],"precompressed":[73714],"lightprobestetrahedralgrid":[27346],"enable360_capture_":[12358,34292],"mdjgo+b1iapfukdvmb8ga1udiwqymbaafdfw8vdkgmnemdjgo+b1iapfukdvmawg":[69916],"iscompressedformat":[48725],"64kb":[20242,29249],"gputime":[76007],"kit":[845,1596,37544,74725],"gridmouseposition":[51587],"disposeuploadhandlerondispose":[68266],"timelabelname":[62370],"processgraph":[21347],"contexttype":[61814],"d_search_menu":[63477],"suiting":[27083],"buildplayeroptions":[453,19108,21121,73024],"onpointerup":[49890,60248],"grouped":[4527,6689,10003,11701,12438,13604,23399,24215,24297,25148,40969,41258,43990,44659,48685,60094,64699,71352,75143,75487],"macoscpu":[34576],"characterinfovisualelement":[56986],"#aa5939":[54343],"eg":[1867,1961,15851,21173,22061,22506,25062,29907,37685,37702,38027,39397,39627,40085,49653,52065,68652,71882,72299],"downloadhandlermovietexture":[68085,72591],"getcellrect":[52406],"keyword3":[70859],"lesser":[12599,33436],"companyname":[12154,27800,74030,74114],"unityweb":[73190,73331,73795],"networklobbymanager":[11101,66090],"gc":[18014,27992,30868,33077,33383,33398,33454,35695,35896,36041,36201,36497,49767],"ontesttogglechanged":[55743],"project":[14,64,78,120,155,180,255,260,378,478,509,524,555,576,580,621,666,707,777,811,901,943,955,962,1044,1100,1114,1122,1134,1190,1230,1236,1281,1291,1338,1358,1492,1535,1594,1713,1799,1808,1816,1822,1832,1851,1970,1982,2041,2076,2192,2214,2222,2244,2383,2423,2690,2705,2771,2941,2984,3227,3311,3455,3515,3571,3585,3725,3793,3839,3871,3879,3898,3955,4025,4061,4186,4223,4339,4387,4465,4510,4519,4586,4737,4774,4805,4875,5080,5165,5190,5690,5816,5826,5920,6046,6056,6082,6337,6351,6402,6468,6798,6856,6934,7181,7364,7502,7624,7657,7764,7812,7826,7986,8014,8364,8411,8615,8648,8972,9055,9135,9247,9399,9430,9591,9765,9862,9912,9989,10055,10424,10488,10654,10691,10721,10742,11176,11357,11402,11505,11525,11596,11667,11813,12097,12274,12316,12437,12768,12849,12865,13122,13306,13351,13382,13477,13626,13777,13822,13843,13902,13945,13997,14019,14079,14219,14470,14554,14780,16151,16212,16438,16470,17000,17045,17282,17474,17627,17943,17980,17998,18036,18080,18112,18247,18325,18348,18362,18432,18454,18481,18521,18609,18623,18819,18885,18909,18970,19020,19054,19302,19320,19341,19355,19368,19454,19666,19986,20116,20179,20211,20220,20341,20394,20413,20440,20591,20627,20657,20876,21018,21142,21328,21386,21445,21566,21633,21710,21841,21874,22023,22032,22089,22111,22189,22349,23270,23393,23449,23475,23613,23629,24100,24471,24601,24621,24696,24726,24929,24949,25043,25100,25153,25188,25237,25311,25350,25470,25500,25679,25694,25738,25765,25833,25888,25902,25928,25973,26030,26041,26094,26104,26614,26679,26703,26832,26976,27066,27125,27136,27167,27187,27224,27307,27520,27550,27602,27638,27678,28098,28132,28162,28199,28263,28282,28323,28390,28463,28797,28848,28897,29026,29207,29331,29396,29478,29561,29574,29766,29813,29847,29885,29906,30038,30061,30198,30215,30267,30284,30334,30396,30443,30493,30503,30841,30859,31013,31367,31591,31610,31625,31664,31867,33081,33386,33401,33467,33472,33524,33610,33646,33760,33762,33782,33889,34279,34539,34640,34653,34658,34691,34850,34897,34924,34948,34982,35187,35248,35462,35478,35622,35809,35925,35959,35986,36199,36334,36499,36594,36692,37330,37486,37518,37522,37620,37655,37670,37924,38247,38262,38287,38377,38445,38471,38646,38676,38679,38820,38839,38905,38957,39024,39074,39097,39141,39159,39177,39365,39452,39853,40156,40175,40430,40500,40538,40715,40793,40921,41166,41300,41356,41426,41444,41448,41486,41497,41532,41574,41609,41676,41696,41710,41810,41835,41884,41933,41953,42020,42110,42358,42413,42740,42940,42991,43023,43120,43142,43303,43462,43486,44282,44309,44344,44688,44835,45093,45181,47182,48055,48166,48170,48224,48243,48353,48506,48529,48562,48575,48603,48630,48652,48674,48852,48861,48874,48893,48909,48978,49147,49178,49335,49694,49737,49751,49908,50009,50065,50142,50144,50164,50374,50448,50582,50620,50651,50660,50917,50933,50983,50998,51131,51164,51219,51231,51325,51345,51612,51716,51817,51860,51950,52102,52174,52222,52265,52525,52576,52684,52756,52816,52879,52973,53084,53391,53695,53788,54010,54304,54399,54495,54514,54576,54639,54746,54921,54968,55073,55171,55245,55318,55375,55996,56131,56223,56281,56337,56404,56481,56531,56601,56716,56745,56809,56987,57135,57308,57337,57797,58269,58375,58599,58679,58798,58998,59276,59501,59781,59915,60157,60681,60891,60991,61202,61309,61508,61558,61565,61598,61759,61925,62048,62348,62504,62652,62825,63069,63764,64551,65758,65788,65974,66015,66117,66174,66375,66436,66455,66464,66539,66543,66555,66812,66838,66876,66902,67043,67233,67647,67756,67894,68048,68067,68532,68566,68689,68811,68849,69040,69303,69350,69409,69506,69516,69671,69724,70211,70235,70258,70290,70328,70389,70585,70746,70771,70817,70866,70921,70936,70944,71032,71121,71158,71190,71215,71249,71274,71289,71302,71323,71388,71389,71415,71453,71464,71486,71517,71558,71594,71617,71645,71662,71747,71771,71851,71900,71924,72089,72097,72119,72143,72151,72175,72201,72225,72282,72370,72377,72462,72468,72499,72644,72825,72840,72842,72893,72906,72943,72991,73028,73136,73198,73317,73386,73424,73445,73501,73658,73908,74132,74224,74412,74498,74588,74628,74773,74808,74814,74832,74855,74887,74896,74929,74981,75028,75111,75126,75201,75224,75287,75294,75373,75388,75424,75876,75909,75946,76315],"origin":[2965,6723,8511,9277,9528,9814,10028,10129,12659,13094,13148,18048,23682,26560,34672,35155,35384,37693,43140,48515,51727,55866,56109,58147,58354,61915,62198,63030,65988,70724,71215,71775,72945,73410,73671,75062,75080,75105,75220,75586,76300],"words":[2586,3486,5068,6845,8066,20344,22341,24573,24778,30540,36712,39614,40342,40616,41202,43578,49447,58709,63724,64205,65758,70774,71888,75325],"infinities":[44295],"gettile":[51658,51743],"contentnamespaces":[18214],"unityfontstyleandweight":[56177,64829,65302],"knowing":[21344,49275,53309,75617],"state":[521,1174,1880,1942,1950,1995,2006,2183,2201,2210,2216,2227,2235,2239,2254,2286,2349,2367,3351,3690,3807,4058,4354,4599,4924,5025,5243,5904,6703,6999,7147,7179,7494,7764,7929,8439,9288,9339,9626,10788,10832,11006,11075,11149,11172,11333,12221,12675,13805,13824,14661,14717,15908,15941,15956,15973,15988,16011,16026,16043,16066,16081,16097,16112,16126,16143,16157,16174,16189,16218,16233,16247,16262,16281,16336,16351,16370,16384,16398,16412,16429,16444,16459,16476,16493,16516,16533,16542,16570,16585,16856,16875,16889,16925,16939,16975,16990,17006,17021,17036,17051,17068,17083,17098,17139,17158,17175,17191,17212,17226,17246,17260,17274,17288,17302,17318,17332,17348,17360,17376,17390,17404,17416,17428,17443,17458,17480,17494,17512,17530,17552,17567,17582,17597,17612,17633,17648,17667,17684,17699,17714,17729,17765,17779,17794,17809,17824,17841,17856,17871,17886,17901,17918,17982,17994,18315,18585,19043,19239,19381,20116,20394,20433,20452,20633,21156,21190,21319,21956,22466,23930,24054,24790,24976,25097,25234,25597,25998,26302,27172,28022,29063,29092,29133,29593,29784,30046,30062,30321,30727,30896,31008,31366,31379,32141,32849,33285,33676,34039,34170,34192,34212,34425,34523,35030,35210,35753,36131,36285,36302,36481,36826,36979,37581,38332,38839,39141,39806,39822,39879,40081,40094,40625,40653,41821,42059,42132,42211,42317,42432,42631,42664,43651,43660,43734,43806,44102,44139,44171,44535,44627,44659,44757,45179,45206,45603,45807,45857,46041,47255,47957,47990,48028,48566,49101,49354,49641,49649,49658,50023,50967,51882,52247,52587,52766,54213,54454,54556,54590,54692,54819,54898,55638,55747,56090,57289,57575,57899,57969,58015,58190,58311,59193,59555,60209,60770,61772,62072,62496,62585,62765,62839,63105,63955,64037,64245,64369,65698,65746,66047,66100,66215,66406,66569,66823,66910,67601,68956,69203,69514,69748,70561,70755,71154,71305,71491,72401,72841,73078,73235,73264,74262,75076,75479,75744,76097],"discontinuities":[10072,27060],"lay":[18346,20811,51851,53293,59580,63710],"ade948bda064":[53891],"attenuationout":[5246],"searchservice":[2546],"specifics":[5078],"generatemeshasync":[75778],"r32g32b32a32_sint":[8467],"dldr":[14238,27131,43883,50796],"'r'":[43969],"lt™":[16345],"chromebases":[50197],"tilepalettebrushespopup":[51108],"upright":[1578,6793,6958,8570,25871,29620,32257,32360],"addadapter":[37153],"defer":[12219,21937,34986,67383],"prioritized":[36011],"l0":[23417],"hill":[50558],"#232323":[63284],"ie":[6760,7543,7556,7944,9294,10776,13076,13645,13666,13818,15852,18376,21175,29915,36717,37688,37710,39666,39724,40076,52046,52229,65994,71874,71969,72346],"exportassetpath":[21032],"nativeplugins":[27897],"rendertextures":[21697,36392,68927,69170],"spend":[21007,27742,29126,33409],"pulling":[2274,3475,3826,27172],"myrangedrawer":[20986],"#606060":[63342],"inches":[13396,48279],"fingerboneindices":[75576],"fingers":[20460,29586,39241,39259,72342,75576],"falls":[2211,6756,7506,9784,11803,12717,13214,13238,26793,26922,26964,27047,27263,27323,28902,29212,29364,32393,32632,33415,35950,36599,36937,38223,38351,39135,43481,43493,49269,62879,66003,68929,69172,73438],"wrvdjdpz2c8y":[69934],"ytopleft":[58147],"addtype":[73758],"#1d5087":[63317],"stamps":[50563],"particledoublecurves":[6703],"0ea7808637555b2c633eb07aa1cb0894c821a6f9":[67465],"meshfilter":[3757,10609,15066,21263,29803,71964,76523],"notequal":[43585,45890,48000],"toolbaricon":[51585],"assistance":[237],"unitywebrequestassetbundlemodule":[16782,30974],"recorded":[2289,2426,3287,4653,5000,10080,11954,12672,19257,20041,23022,34439,35052,35388,36492,60788,70277,71378,74977,76038],"r8_sint":[8475],"export":[158,555,576,580,906,943,962,1230,1358,1746,1842,2731,3871,3878,4515,6217,6950,7879,8868,13431,16330,16470,17000,17627,18076,18400,21032,21433,21524,22085,22355,24601,24637,25147,25153,25193,25601,28056,28066,28335,29747,29926,30825,30841,33515,35228,35959,41541,48351,50411,50490,50604,50647,53049,53370,66624,67110,67211,68900,69138,69980,71768,71835,74232,75311,75874],"hkcu\\software\\appdatalow\\software\\companyname\\productname":[74585],"examplefirstpassname":[42646],"unitytechnologies":[66603],"myelement":[54508,55740,57874,60328,64517,64576,64615,64846,64864,64920,65036,65572,65592,65612,65633,65653,65672],"flip":[13749,14799,32162,32283,32934,34226,34343,34469,35718,37622,42796,44841,50422,51334,51538,51606,56057,61749,62200],"displaced":[9645,51915],"typename":[36951,37070,63993,74687],"shader'":[41208],"derivatives":[44903,45450,73014],"scrolldown":[63472],"widening":[26922],"nexus":[396],"alphabetically":[15370,68913,69154],"checklist":[413,930,26085,67518,75723],"implementing":[1919,8647,11173,14009,16723,17880,18047,18375,20892,22237,25926,39874,44080,46417,47749,49886,52738,52862,52871,52921,52950,53777,54020,57921,58790,58997,66117,66243,66971,67022,67070,67233,67279,67561,67849,73248,75397,75979],"contol":[55056],"animatorstatetransition":[15262],"0x0088481c":[52564],"optimzing":[30343],"yields":[2666,3254,7506,18233,41252],"namename":[63937],"sapprft":[53441],"#4c4c4c":[63340],"scriptableobjects":[5898,6042,13306,18004,39905,40745,58727],"noscaleoffset":[45098,47270],"waitforendofframe":[15705,24877,52603],"instancing_options":[23256,31891,45035],"100ms":[65137],"border_accent":[63262,64282],"halos":[9197,9243,9480,9669,9845,23643,26881,72805,72827],"enableinclasslist":[61829],"miles":[8203],"“restores":[67179],"textanchor":[64830,65303],"guidelines":[65,4170,4356,18624,25193,26073,27654,30343,45734,49778,50197,54282,63887,64329,69786,69853,70323,70952,71013,71771,71807,72795,73019],"right":[96,179,723,1580,1886,1952,1966,2008,2131,2223,2254,2274,2300,2332,2383,2399,2425,2506,2774,2971,3492,3517,3958,4091,4206,4475,4491,4578,4816,4978,5034,5081,5179,6264,6285,6318,6723,6856,7102,7181,7815,7830,7853,7927,7986,8090,8172,8212,8306,8570,8610,8899,9002,9167,9297,9574,9646,9727,9765,9927,9989,10088,10340,10510,10723,10772,11374,11426,11664,11761,12104,12350,12490,12942,13096,13105,13149,13163,13555,13673,13747,13815,13846,13903,13987,14128,14290,14700,14787,14863,14965,14983,15844,17945,18108,18233,18486,18563,18900,19013,19077,19224,19627,20083,20545,20611,20660,21159,21216,21345,21833,21975,22002,22024,22043,22096,22139,22218,22594,23825,24532,24735,24747,24774,24886,25048,25105,25225,25258,25363,25411,25465,25635,25804,25873,26188,26606,26909,27013,27022,27108,27507,27920,27943,28205,28360,28400,28677,28895,29026,29621,29880,29900,30043,30049,30149,30198,30456,31758,32322,32344,32362,32610,32754,32849,33649,34280,34396,34515,34675,34919,34928,34948,34963,35198,35363,35381,35641,35696,35785,36057,36189,36286,36338,36457,36493,36685,36694,37283,37479,37587,37667,37687,38253,38262,38277,38324,38961,39201,39231,39253,39351,39468,39748,39796,39819,39985,40099,41394,41420,41543,41597,41692,41711,41816,42110,42709,43186,43217,43416,43592,47093,48324,48510,48586,48611,48620,48683,49236,49499,49513,49518,49632,49714,49901,50339,50351,50592,51094,51123,51138,51156,51303,51416,51825,51902,52179,52226,52252,52767,52804,53001,54316,54405,54551,54579,54635,54677,54725,54779,55973,56308,56373,56532,56673,56810,57364,57907,58160,58361,58404,58560,58662,58801,58998,59271,59838,59992,60221,60379,60507,60556,60784,61203,61599,61838,61932,62009,62235,62506,62609,62654,62967,64057,64285,64640,65789,66000,66026,66354,66599,67053,67526,67681,67940,68532,68559,68742,69724,70104,70344,70483,70932,71124,71207,71266,71301,71410,71621,71678,71783,71943,72176,72342,72412,72470,72521,72764,72974,73474,74394,74965,75058,75206,75431,75545,76102],"shader's":[21745,38283,44251,45148],"getcolor":[51737],"requireoptions":[42412],"singlelineheight’s":[52384],"vbbyrefstr":[72199],"videoaudiooutputmode":[72570],"salary":[53730],"examplerequireoptions":[42418],"slightly":[94,567,2048,2211,3247,3728,6434,6831,7045,7506,8213,8514,9185,11074,11546,11612,12937,13219,13250,14296,14951,21540,23797,24018,24521,25225,25262,26564,27211,28378,29331,31745,31838,36504,38508,39255,43457,43957,44298,45470,45589,46295,47805,48373,49522,49565,49593,50642,51034,51999,54474,54712,58288,62036,63981,66006,71808,71889,74427,75114],"shadowsamplingmode":[68945,69189],"generatemips":[13208],"portfolio":[4131,30443],"kill":[1654,17092,31686,32762,66859],"maxedgelength":[76408],"notable":[6169,33008,66517,68911,69152,72737],"deviate":[10230,39438],"simpleunlitcolor":[48995],"aplusb":[26350],"blueviolet":[63518],"targetguidbyname":[49795],"0+vulkanmetalmight":[45479],"bindableattribute":[37239],"uxmllongattributedescription":[58084],"waitforsecondsrealtime":[15708],"washed":[27575],"64k":[13429,21528],"asyncreadmanagerrequestmetric":[4668],"sword":[11439,18187],"animationcurve":[13059,39866,55520,64498],"earliest":[33819,70805],"onprocessshader":[42998],"unitylifecycleprovider":[75270,75726,75924],"sharedmaterial":[20398,21262,29794],"#7fffd4":[63511],"discarded":[2275,7053,14849,18105,22093,48370,52586,74153],"“abcde”":[33151],"tablets":[629,678,701,719,1094,11718,50197],"arraysize":[8659,55122,55525],"destination":[605,951,3301,4832,14731,14816,14858,25452,25910,35669,43738,43811,49661,52107,52676,52688,66747,74763,75414],"difference":[14,200,631,700,1903,2133,3304,6116,6723,7053,8530,9322,10130,11342,11802,12345,12970,14702,14967,15014,15816,19635,20420,21900,22804,23900,24056,26656,26971,27483,27698,29090,29154,31703,31992,34184,34272,34480,34640,36333,37668,38674,38889,39757,40836,42613,42793,43841,43958,44797,44835,45613,45975,47735,48319,49543,50478,59743,59865,60392,60495,60787,61194,62759,65990,70608,71289,72916,75589],"continuepromotionalpurchases":[67483],"methodwithnullchecksdisabled":[24993],"resemble":[26928,27754,33494,74559],"__decimal":[39616],"protection":[22347,25859,26129,26294,28226,34379,52530,66437],"myplayable":[34182],"currentresolution":[20484],"jnilibs":[1004],"rot":[7167,12995,25565],"basevideotexture":[15200],"selectedcharacter":[59468],"idv":[14778,48223,50599],"audiochoruseffect":[7449],"outline's":[11560],"use_timeline_1_3":[40307],"tetrahedralize":[26713,71824],"kunityxrinputupdatetypedynamic":[75544],"ondemandresources":[2826],"plan":[1227,1822,1832,2999,4881,6841,10093,12275,19271,24794,25225,26690,28445,28762,30207,34257,34338,48984,50011,53972,65976,72904,73321,75232],"assignment":[1770,3469,3484,3538,6212,18101,29805,43261,48677,52186,54683,62780,69631,76166],"largely":[8555,20538,49849,66910,75397],"bundled":[4527,9264,22561,30917,34566,67765,73654],"validations":[6068],"df16":[38425],"tnormal":[47502],"“hd”":[2842],"projects":[1,14,63,137,385,693,812,979,1226,1247,1396,1531,1645,1761,1811,1822,1832,3439,3481,3672,3870,3977,4217,4384,4514,4541,5056,5807,5898,5919,5984,6054,6105,6688,6798,6872,6985,9100,11612,12006,12475,13743,13784,16438,16470,16527,18245,18536,18677,18733,18909,19047,19454,19639,20572,20709,21142,21392,21528,22100,22125,22555,23475,24631,24983,25244,25343,25855,25928,26145,26688,27129,27600,28262,28474,29153,29334,29811,29906,30100,30384,30442,30478,30500,30876,30916,31644,33290,33417,33749,33764,33877,34641,34646,34680,35037,35228,37322,37385,37506,37544,37622,38678,40175,41824,42751,42946,43307,44360,46122,48211,48252,48674,48861,50342,50726,52105,52491,52631,53260,54050,54106,57694,58369,64370,65898,65968,66438,66542,66598,66819,66842,67983,68052,68567,68690,68812,68850,69041,69296,69372,69402,69729,70235,70260,70337,70586,70780,71036,71396,71423,72537,72800,72858,73286,74132,74224,74412,74587,74834,75037,75202,75239,75307,75375],"handy":[8019,22555,25496,47370,49421],"showpopup":[65024],"treeviewitemdata":[59979],"#ffd700":[63558],"reminder":[11368],"detachfrompanel":[60544],"holeedgepadding":[50379],"guarantees":[7231,8442,8883,20343,26461,28114,28185,30312,30872,31379,31795,32660,33608,70224,70245,71162],"forgot":[223,2103],"cellular":[12670,28436],"task":[1108,5274,7927,8643,13075,18260,21154,25623,26263,26494,27984,30905,31621,36226,48988,51967,52524,52766,61594,65031,67672,68805,72715],"marked":[1975,4037,4064,6806,9224,10564,10726,11320,11336,11551,11609,13128,13854,13990,16060,18008,20456,22180,24165,26789,27102,27132,27170,27329,28482,31013,34723,34913,36289,37723,38404,39170,39311,39955,43386,45170,49826,51965,54264,62025,64586,66465,66790,68576,68872,69107,69389,69493,70070,70137,70761,75017,75145],"const":[5254,5372,5516,6207,20479,24816,26367,27353,27829,27961,30597,35420,36836,36988,39860,44872,48720,56138,57011,57217,57526,58245,61024,61703,66522,66849,68840,69085,75791],"#2d2d2d":[63281],"loadachievements":[30078],"suddenly":[25492,37714,71879],"mcs":[23172],"ssh\\id_rsa":[70523],"ribbon":[32723],"safer":[6811,39309,70937],"occurred":[2752,4437,24923,25849,35088,35344,35386,35635,36042,36188,52556,55817,57828,59730,66285,70448],"blocking":[218,7476,18257,28436,33077,36147,39535,41289,66431,67871,73025,75407],"uxmlve":[56439],"blurry":[554,4292,8832,13218,14825,19306,25284,42255,50008,51066,58394],"normalfamily":[42289],"designators":[40340],"ssh\\config":[70135],"_time":[47098],"audioreverbfilter":[7750,15148],"crunch":[6383,6445,14295,14323,28181,50038,50137,50664,73384,74644],"focusinevent":[58190],"hereby":[26567],"arm_r":[71783],"uxmlnamespaceprefix":[58097],"datafiles":[35129],"bold":[4277,9261,11079,20644,24569,34891,40048,54564,54612,54635,56177,57166,58282,58666,59315,61449,61967,62017,62452,62675,64166,64829,65302,65809,71934,73452],"rule":[989,6083,7508,11622,12009,15840,16020,23420,26569,29880,36782,38605,38770,40442,49677,53921,54799,56706,58407,58557,61921,63061,63065,63663,63836,63846,63864,63882,63891,63918,63945,63956,64002,64017,64036,64328,66492,72342,73844,74850,75153],"revenue":[4100,4229,4366,17045,22319,30440,53489,54046,66802,67644],"normalparallaxdiffuse":[42294],"ggx":[42814],"createmarker":[27946],"icustomstyle":[56706],"gettext":[68097,68332],"deserializing":[33477],"enumeration":[2667,9820,26598,29373,64563,64586,75553,76158],"inspired":[5898,49819,58463,63132,64373,65849,65897,65966],"alt":[2254,2456,2616,9783,20561,20616,20754,22644,24539,25367,34222,34811,36057,36695,39148,39272,39319,41613,41718,43235,51378,52745,54458,59745,60388,60790],"mismatches":[62838],"navigation":[825,2443,5888,7182,9341,9765,10424,11716,14776,16103,18899,19683,21854,22312,24793,25435,30382,30451,30482,31400,35170,38942,39245,39390,39477,39517,39608,39745,39808,39810,39982,40014,40074,49724,52106,52243,52699,52712,52743,52754,53250,57985,58131,60219,60494,61323,61485,65413,65925,66957,67908,69375,69479,70312,71987,74313],"setup":[258,547,693,841,1041,1277,1593,1985,2065,2227,2945,3252,3314,4313,4811,5137,6463,6796,6926,8260,10082,10850,13127,14961,17788,20240,22136,24727,24770,24796,25692,25730,25737,25976,25998,26420,26657,29187,29572,29885,31917,33064,33574,33879,34379,35694,36124,37308,37483,37515,37617,38274,38372,38447,38607,39489,39551,39791,40096,40218,40682,41933,43651,44069,44430,45151,45550,45603,46763,47255,48068,49432,49626,49635,49720,52374,53165,53324,53787,66590,66877,66972,67647,68054,71790,72394,72498,73016,73324,74173,74517,74760,74830,74903,75083,75239,75318,76300],"layermask":[26616,26621,26626,26646,26657,64876,71565],"iseditingmultipleobjects":[55015],"apiversion":[23498],"yourulffile":[21098,28698,28736],"fragmentinput":[47875],"stylesheetimporter":[6720],"lifting":[47656],"redistribute":[33401,74613],"scriptedimportereditor":[40486],"websockets":[11215,35834,73175,73667],"bitmap":[14073,22234,25236,49436,50929,58385,58442],"requirement":[921,1655,2782,3453,10201,11803,14031,31870,33178,44681,45459,49325,50241,68611,68777,71787],"embedpackageexample":[69581],"playqueue":[34143],"decorated":[6101,34950],"order":[104,229,359,1031,1901,1934,2069,2598,3247,3309,3759,4010,4041,4206,4752,5124,5965,6069,6142,6272,6294,6344,6353,6400,6485,6807,6981,7379,7566,7573,7671,7763,7930,8012,8254,8402,8550,8871,9440,9542,9698,9966,10012,10092,10406,10697,10718,11160,11454,11519,11570,11631,12300,12599,12799,13042,13113,13284,13318,13418,13585,13727,13760,13794,13850,13894,14273,14536,14733,15003,15042,15862,17045,18068,18167,18414,18565,18717,19035,19486,20344,20395,20695,20869,21168,21214,21295,21461,21604,21904,22077,22379,23430,23626,23932,24244,24554,24664,24726,24743,24909,25035,25076,25177,25407,26264,26461,26793,27000,27467,27508,27813,28066,28457,29101,30337,32063,32267,32479,33267,33614,33659,34511,35175,35266,35369,35625,35701,35903,35969,36023,36120,36174,36298,36435,36549,36712,37330,37522,37617,37650,37668,37730,38388,38451,38944,39065,39437,39447,39553,39603,39644,39695,39765,39827,40205,40429,40606,40874,41194,41520,41545,41684,41701,42197,42368,42712,42728,42753,43354,44883,45145,45531,45565,45967,47093,47415,48179,48874,49152,49449,49547,50421,51085,51169,51607,51722,51778,51815,51965,52184,52362,52487,52566,52876,53026,54227,54736,54761,57597,57817,58044,58120,58150,61307,61476,61488,61526,62202,62747,62952,63724,63813,63866,64295,65729,65867,65923,66018,66164,66375,66459,66524,66857,67090,67161,67266,67390,67584,67811,68566,68689,68811,68849,69040,69293,69506,70236,70290,70500,70701,70910,71110,71216,71357,71459,71782,71969,72296,72716,72916,74234,75022,75034,75155,75262,75429,75509,75946,76120,76335],"srpdefaultunlit":[44811],"transparentfx":[18333,31816],"wsatargetfamily":[12684],"tickets":[67900],"totalbytes":[5480,5625],"boulders":[13645],"remember":[3419,4960,5041,6070,9351,10058,11275,18257,18327,18607,22538,24193,24310,24746,32615,32635,35030,36481,42354,45583,47803,49642,51619,51817,51966,65713,66343,66368,66396,66707,67247,68951,69196,70531,71216,71332,72342],"“color”":[29382],"ht":[6703,7836,9759,18062],"logarithm":[10483],"streamed":[35947,35988,51075],"myeditorwindow":[49922],"tweaks":[25609],"invoices":[30413],"terrainlit":[13920],"ondemandresourcesrequest":[2826],"winter":[52179],"shurikentogglefocusedon":[63479],"purchasable":[52921],"kebab":[56693,71622],"tankname":[55258,56410],"_blendtex":[45305],"textureless":[54134],"_worldspacelightpos0":[47109,47675],"respawnprefab":[50291],"ilayoutselfcontroller":[54270],"platforms":[88,381,546,594,624,701,905,948,1273,1294,1827,1838,2768,2939,2989,3039,3303,3466,3666,3993,4427,4543,4761,4774,4959,5690,5945,6050,6355,6392,6463,6811,6857,6934,7386,7663,7920,8403,9115,9262,9457,9987,11176,11670,11824,12038,12279,12866,13364,14016,14225,14313,14819,16091,16330,17045,17118,17126,17370,17474,17752,18038,18425,18481,18540,18853,19128,19297,19378,19637,19651,20208,20222,20327,20447,21056,21862,22611,23270,23590,23619,24475,24493,24597,24931,24943,25095,25177,25265,25310,25738,25908,25928,26054,27083,27131,27526,27552,27648,27705,27765,28054,28064,28095,28151,28379,29152,29442,29466,29581,29814,29829,30023,30305,30365,30859,31621,32299,33440,33473,33524,33809,33877,34205,34270,34351,34478,34537,34654,35714,35831,35901,36158,36226,36541,37268,37798,38249,38265,38425,38715,40178,40544,41847,42182,42378,42398,42431,42958,43460,43943,44080,44229,44303,44360,44832,45030,45200,45237,45416,45477,45564,45614,45745,45840,48164,48227,49740,50011,50083,50159,50455,50537,50653,50660,52640,52739,58381,63068,63132,65963,66116,66505,66904,66965,67131,67351,67570,67624,67769,68031,68462,68527,68607,68746,68923,69166,71026,72008,72110,72287,72474,72531,72616,72725,72882,72902,73029,73123,73292,73452,73478,73632,73695,73904,74042,74190,74280,74570,74760,74819,74928,74980,75047,75127,75198,75280,75290,75388,75897,76095],"batchingadvanced":[6916],"“none”":[25546],"selector2":[54834,63845,63880,63895,64331],"yzx":[9546],"ccd":[13253,17237,18219,31410],"unitypause":[74750],"oneminusdstalpha":[43774],"tempmesh":[40477],"indexoutofrangeexception":[24984],"invincible":[29784],"corewindow":[12627,74703],"pathtomywmvfile":[72654],"debugged":[6371,6428,74632],"submit__":[39625],"printevent":[39358],"constitute":[21684,21845,21956,28987],"strokecolor":[58503,60704,60967],"ctrl+b":[610,51283],"residency":[45513],"invoice":[229,4015,4103,4394],"texture”":[41202],"scripts'":[26077,71921],"getgraphicsformat":[68938,69182],"selfillumdiffuse":[42544],"bindingpath":[55578,56168,56276,56332,59601,64388],"adding":[1961,2281,2330,2371,2989,3508,3713,3865,3922,4202,4344,4419,4534,4847,5049,5162,5972,6154,6754,6798,7566,7573,8137,8598,8765,9330,9794,10261,11378,12275,12795,13116,13267,13818,13905,14501,14598,14953,16470,17970,18192,18380,18821,18927,18991,19366,19503,19664,20097,20544,21333,22161,23061,23283,24741,24783,25597,25753,26309,26514,26718,27625,27645,29133,29916,30037,30145,30395,31619,32230,32847,32923,34197,34856,34887,34943,35320,35777,36281,36508,36710,39140,39643,40759,41202,42595,42793,44068,44671,45178,45600,47157,47518,48619,48662,49476,49483,50678,50947,52173,52610,52853,52898,52951,53213,54242,56049,57681,58859,59048,61593,61938,62757,66944,67078,67904,68048,68629,68907,69147,69516,70284,70290,70537,70879,70937,71017,71119,71253,71327,71382,71472,71857,71968,72299,73214,73397,73459,73818,74307,74457,75320,75377,75527],"geographical":[29583],"garbagecollector":[30869,33074,33388,33411,36030],"audiopluginutil":[4879],"unsafeutility":[2926,5498,26157,26251,35729,36106,36497],"computations":[27089,33243,38346,44869,45568,46393,47811,50494,50597,51999],"requisites":[35753],"skip_optimizations":[45038],"walkable":[22312],"results":[567,1896,2048,2063,2462,2598,2626,3247,3593,3728,4203,4281,4562,4792,5984,6074,6126,6374,6434,6480,6999,7488,7968,8118,8550,9032,9063,9720,9964,10070,10229,10406,10489,10572,10651,11177,11520,11570,11628,12811,12888,12993,13059,13234,13477,13915,13956,14318,14823,18081,18149,18584,20163,20393,20682,20914,21160,21348,21391,21455,21624,21832,21929,22127,22161,22792,23440,23583,24492,24517,25065,25099,25329,26304,26374,26473,26536,26712,26800,26947,27048,27065,27175,27322,27490,27500,27549,28089,28174,29334,30177,30237,30400,30902,31635,31702,31818,32264,33134,33546,33619,34362,34828,35164,35323,35381,35682,35744,35876,35958,36172,36463,36590,36731,37469,37622,37632,37646,37713,38297,38388,38461,39885,40784,40819,40838,41173,41315,41348,41378,41416,41436,41452,41463,41491,41545,41592,41674,41795,42106,42148,42323,43071,43183,43245,43655,45037,45577,47191,47952,49068,49156,49549,49633,49710,50005,50058,50367,50612,51169,52186,52769,53392,54297,55916,58349,59501,61823,61921,62586,63055,63139,65458,66364,67147,67401,68105,68339,68601,68740,68926,69169,69813,70211,70245,70593,70833,70914,71026,71173,71446,71538,71634,71790,72299,72497,72681,72717,72874,73286,73333,73705,74184,74453,74635,74774,74844,74949,75136,75439],"printobjectdump":[37003],"watch":[2952,5910,8437,33369,55105,55675,66978,72048,72910],"msil":[24943],"up”":[38471],"leftarrow":[10892],"eyesdata":[76142],"gusts":[50612],"opencl":[8402,23431,36608,68953,69199],"editortoolbar":[30520,59630],"m_bits":[76500],"scenario":[3470,6844,13962,14558,23615,23841,24031,25526,26057,26109,26486,27691,33575,38638,46485,48539,51991,66524,67148,68311,68433,71034,72282,74535,75465],"kunityxrinputfeatureusagetrackingstate":[75623],"categorise":[5044],"hovers":[23860,51328,57918,62660,63259,63956,64220,65458,65892],"text’s":[55857],"drawtexturewithtexcoords":[59627],"'nodes'":[75624],"techniques":[7,346,2063,4548,6810,8639,13483,13961,14247,17118,17642,22792,26479,27066,27129,27488,28484,29714,32318,34791,38284,40526,41787,42110,43493,47949,48894,50937,75068],"keyvaluepair":[37094],"evaluations":[38672],"progressive":[6802,7898,9099,9976,10009,10439,12333,18245,22107,23149,23426,26840,27073,27087,27111,27113,27748,36567,36633,37846,41490,41784,42713,42729,42754,50440,68671,68707,68852,69061,69350,69454,73915],"volume”":[27321],"possibilities":[4566,8244,72941],"counting":[73449],"contact's":[11629],"splitvisibilitymask":[5667],"organising":[48373],"#556b2f":[63537],"tuple":[39207],"macos":[239,610,841,1129,1615,2256,2456,2756,3858,4224,4566,4959,5706,6468,8405,9052,11693,11841,12153,12747,13382,14357,16330,16564,17690,17931,18949,19091,19128,19213,19350,19649,20448,21010,21017,21946,22227,23454,23696,24534,24951,25738,25904,27650,27776,27920,27943,28074,28081,28118,28129,28147,28189,28254,28260,28282,28317,28405,28614,28669,29450,29455,29829,30282,31092,31467,33522,33792,33878,34217,34256,34323,34594,34655,34816,34962,35782,35817,36058,36156,36462,36693,37768,39127,39226,39260,40661,40762,41718,43030,43212,46510,48864,49741,50165,50640,51078,51283,52501,66588,66954,67061,67737,68679,68720,69701,69839,69864,69951,70059,70179,70199,70273,70344,70421,70776,70932,71349,71676,72620,72834,72887,73125,74198,74920],"exporting":[555,576,580,945,965,3880,4539,6218,8798,21486,24667,25151,25927,29765,29780,30851,35227,37670,48349,50410,67088,68897,69135,71797],"__low__":[66485],"specifications":[6843,23430,50244],"december":[17370],"zone's":[50611],"'waking":[75440],"tends":[9180,10011,10072,10573,12865,13692,13876,26932,33442,38563,38593,44835,54632],"noforwardadd":[31888,45588,46793],"translucent":[14120,62025],"expectations":[4567,72941],"processors":[3766,23982,38841,50168],"stroke":[50357,58483,60970],"broad":[5911,11621,18229,20222,22373,27833,28481,34925,36340,36522,42009,45585,75289],"jvms":[987,12007],"unity_declare_tex2darray":[14033,44006],"face":[281,6958,7956,8122,8609,8675,8963,9215,10392,10554,12917,13384,14029,17788,17803,18157,21255,21542,22750,24098,29600,29718,32249,37689,37714,42706,42797,43553,44166,45725,48231,49511,49630,49636,50369,58277,58403,61943,72491,74204,74377],"computationally":[13252,18575,26710,37647,41876,45519,60637,68198,75793],"#active":[61533],"ring":[4883,27342,27705,32183,32549,36512,57842,60881,60982],"setfloatparameter":[4974,5258],"gnupg":[66767],"boosted":[29551],"stylus":[60775],"slerp":[8536,12982],"confidently":[6847,67862],"registerinputlayouts":[75708],"stylekeyword":[56263],"kunitysubsystemerrorcodefailure":[75585,75987],"zoomed":[2409,2439,39761],"kt":[790,1832,6705],"brakes":[49484],"nativedepthtex":[75426],"compilers":[19036,30008,33296,41846,43978,44896,45423,71666],"adjoining":[27325],"71x71":[12463],"revenues":[234,4385],"lightmap":[317,5269,5325,5350,9098,9500,9948,9985,10333,10414,10651,11816,12351,13431,14238,19454,20265,20425,21007,21557,22116,22130,22142,22806,23274,23409,23443,25171,25211,26955,27014,27032,27080,27086,27098,27114,27131,27210,27214,27267,27522,34282,34494,35129,36570,36677,37661,37857,42398,43883,45202,46522,46671,46783,47137,47810,49731,50396,50498,50769,50795,51018,68697,69306,69412,72761,73462],"audiobehaviour":[15156],"intricacies":[5016],"tex3d":[14209],"winrtapi":[74871],"scenemanagement":[19388,36646,38994,40490,52604],"inversed":[11770],"betwen":[2255],"freedoms":[26560],"memorysettings":[29327],"zigzag":[58500],"occludee":[11320,11336,30171,30179,49722],"yesadditional":[37958],"#a4a4a4":[63378],"development_build":[562,6425,6473,28166,33842,73168,74789],"lose":[554,1471,2310,3861,24018,24505,31720,37540,39794,41727,50355,50432,50604,58213,59133,61497,61557,67151,70350,71850,72402],"scan":[3793,4479,27576,30894,33415,70346,75946],"coulomb":[11629],"basecolor":[47572],"facets":[5725],"list’s":[6184,33261],"readings":[29645],"behaviourupdate":[35704],"m_prefabinternal":[21645,76421],"profilers":[33515,35954],"ticks":[31816],"device’s":[11736,25885,35087,38744,39905,67003,74581,75588,76195],"#b2b2b2":[63273],"block":[218,3714,8133,9224,12659,14336,14932,17342,20248,22738,23257,23797,25529,26112,26360,26934,27858,27931,29168,30124,30179,31053,33382,33437,36131,36351,38283,38767,39138,39534,41290,42596,42667,43660,43734,43800,44102,44139,44171,44198,44320,44351,44382,44427,44590,44632,44658,44675,44755,44784,45044,45121,45269,45386,45517,45857,45929,45959,46158,46754,47239,47957,47990,48028,49374,52530,54543,54798,57999,61471,61771,64335,65733,66159,66524,66675,68497,72053,73486,73614,73683,73968,74229,75154,75440,75741],"binormal":[308,6623],"6s":[12217,63054],"his":[66280],"comfortable":[32916,54120,72942],"setlookatposition":[25629],"transferred":[35669,38657],"exploit":[3340],"there":[11,64,84,104,219,261,356,510,535,585,698,729,938,1024,1113,1127,1299,1370,1415,1483,1558,1611,1707,1888,1895,1918,1957,1967,2041,2086,2282,2384,2405,3245,3348,3455,3487,3517,3766,3815,3981,4281,4392,4447,4464,4511,4561,4719,4767,4772,4792,4808,4902,5038,5098,5258,5324,5354,5727,5733,5978,6059,6126,6272,6285,6374,6434,6760,6814,7002,7265,7446,7463,7752,7800,7844,7878,8020,8104,8146,8419,8558,8892,9136,9154,9205,9273,9400,9588,9911,10014,10068,10114,10220,10331,10429,10535,10586,10633,10688,10703,10793,10835,11078,11107,11225,11519,11623,11670,12319,12506,12949,12971,13058,13148,13249,13307,13384,13499,13879,13894,13911,13962,14221,14320,14673,14721,14796,14965,15838,17627,17927,18105,18149,18177,18224,18300,18324,18360,18413,18449,18570,18745,18822,18985,19026,19337,19351,19381,19455,20047,20256,20452,20538,20640,20834,21009,21053,21196,21322,21400,21688,21710,21962,21988,22018,22036,22071,22203,22675,23456,23810,23882,24078,24167,24275,24467,24576,24629,24638,24728,24751,25047,25113,25225,25307,25328,25345,25358,25465,25599,25857,26042,26060,26086,26109,26243,26356,26449,26479,26494,26569,26582,26681,26710,26789,26971,27034,27113,27143,27310,27492,27532,27678,27742,27748,27813,27927,28056,28066,28105,28172,28197,28427,28481,28754,28773,28790,28875,28975,29021,29104,29128,29423,29443,29561,29697,29714,29758,29808,29907,29994,30097,30215,30322,30358,30502,30506,30661,30871,31009,31365,31637,31725,31916,32233,32705,32729,32755,32883,32917,33098,33381,33408,33437,33470,33506,33546,33601,33783,34235,34714,34778,34885,34910,34947,35202,35254,35429,35694,35789,35924,35977,36069,36118,36197,36395,36457,36512,36638,36679,36697,37394,37618,37627,37660,37724,37882,38281,38345,38392,38426,38466,38497,38510,38531,38549,38583,38632,38668,38842,39168,39175,39494,39551,39627,39646,39677,39807,39822,39856,40034,40124,40226,40441,40616,40716,41193,41595,41673,41754,41795,41884,42106,42163,42185,42358,42778,42816,42981,43543,43710,43800,44059,44231,44682,44805,44830,44988,45053,45176,45521,45569,45732,45843,46046,46369,46510,46717,47095,47242,47952,48170,48225,48254,48335,48366,48515,48559,48595,48657,48683,48858,48876,48894,49204,49366,49423,49454,49465,49491,49541,49569,49632,49656,49662,49707,49852,50001,50154,50351,50414,50444,50599,50939,50969,51035,51090,51129,51163,51184,51215,51361,51744,51788,51964,52235,52256,52485,52528,52546,52715,52730,52750,53070,53089,53453,53843,54212,54237,54730,54758,55551,55653,56935,57294,57305,57434,57823,58370,58727,59541,59554,59719,59865,60158,61323,61794,62483,62769,63850,64139,65051,65982,66003,66183,66251,66383,66401,66498,66617,66850,66931,66967,67039,67136,67147,67185,67254,67598,68079,68376,68505,68532,68551,68566,68689,68811,68849,69040,69303,69409,69506,69723,69814,69969,70225,70248,70279,70313,70372,70718,70830,70875,70944,71016,71288,71312,71366,71417,71547,71567,71615,71645,71665,71761,71884,72273,72359,72380,72467,72706,72762,72916,72957,73313,73559,74187,74458,74524,74592,74635,75188,75265,75431,75549,75740,75984,76095],"0a7":[40307],"singletask":[1215,1548],"myform":[68398],"proceduraltexture":[15162],"kunityxrinputfeatureusagerighteye":[75630],"emojis":[61920],"setvertexbufferdata":[71975],"person":[234,6774,6792,6839,8065,8192,21325,22415,23607,29863,30422,30498,33753,39277,66207,66356,73263],"lrbq":[69936],"transfers":[14469,18258,33504,36395,43359,51849],"dxt5crunched":[48728],"quantized":[14377,18615,47153,47608],"beam":[6725,22544,50321],"property2":[54806],"saturates":[26356],"dolor":[65174],"protobuf":[66731],"timescales":[7156],"layout”":[10514],"pretty":[47310],"bakes":[2048,2360,9955,22130,22826,23437,24670,27088,27178,27262,27266,29736,30243,35798,36569,49491,68825,69058,71592],"growing":[17398,22559,35994,52224,68072],"'build":[16564],"validity":[1107,1169,10012,11978,22179,22993,72761],"cylinder's":[25667,49528],"compliance":[22327,41704,67665],"hardware_tier_variants":[23586,45018,45428],"immovable":[7231,15861,38548,38576,38624],"perceptual":[20728],"hong":[53614],"ordering":[265,4768,4828,7566,7573,13089,21221,29100,32273,32729,41427,47952,47985,48023,49832,52252,65729,66017,71970,72342,75607],"ijobparticlesystemparallelfor":[31653],"angleunit":[62307],"#prismatic":[7251],"simplebindingexample":[56284],"emptyobject":[15297],"purchaser":[67182],"generatepropertybagsforassembly":[36754],"coding":[6211,13267,14819,22651,28590,33377,33429,37710,47335,49644,61656,71706,73133],"torques":[7302,8528],"subcategories":[2591,3988],"ongoing":[4548,10705,65031],"dest":[66124],"tilde":[18760],"localizationimporter":[6701,15331],"groupenabled":[20899],"eventlabel":[62362],"m_lightmaps":[76372],"shelf":[52722],"vehiclesmodule":[16814,30978],"outpositions":[27389],"scenery":[3461,20622,22012,22640,27176,27331,27487,28947,34924,37344,37525,71982],"gyroscopes":[25339],"positionspring":[8576],"uncompressed":[554,1567,2782,3247,3294,3338,3348,4508,5920,6384,6446,7496,12399,12839,13412,13709,14375,21509,24614,26086,26875,27654,28182,30369,35039,48528,50670,69709,69792,73619,73792,74645],"lightmap_on":[42171,44577,46695],"console_entry_warn_small":[63448],"collectglobalstats":[35692],"superscript":[58294,62039],"win64":[19302,21060],"visiblecount":[5662,5730],"segmented":[6046],"minimum":[685,921,2347,2400,2764,4186,4902,5215,5737,5924,6266,6314,7022,8386,8514,9704,10000,10658,11139,11513,11571,11721,12215,12278,13022,13567,13925,14031,14502,14595,18229,18977,19213,19782,23065,23430,23499,23964,24745,25692,25994,26366,26992,27536,27737,28230,28886,29133,29364,29463,30260,30286,31642,32091,32681,32726,33880,34385,35268,35949,36015,37617,37667,37696,39242,39381,39459,39549,39574,39643,40128,40787,41046,43768,44638,45024,45076,47265,48599,48649,50036,50159,50969,52212,52841,53305,54229,57520,59165,60649,60802,61530,64955,65937,66570,69354,69458,70592,70875,71091,71246,71781,73055,74778],"chromeos's":[11903],"original_purchase_date":[67472],"yaw":[75588],"frameworks":[5866,8903,11918,12182,12369,19222,24987,31588,34308,34394,34513,34600,36294,49756,52706,66840],"linearize":[47089],"toggle’s":[30734],"anisolevel":[48719],"0x4bea2543":[64724],"watching":[14702],"elasticity":[8570,39772],"windows+m":[34466],"cacheserverenableupload":[21071],"suppress":[9171,13679,13864,14988,18528,19240,34426,34524,38794],"alloc_temp_main":[29252],"rgba16":[8454],"ready":[2213,2281,2381,2668,2834,3009,3428,3580,3856,3903,4005,4074,4421,10768,10832,11103,11149,11160,12305,14849,16933,17752,19074,22001,22611,25162,25946,26711,27742,28413,31009,31365,35717,37473,38277,45037,49358,49520,52187,53138,54210,66276,66343,66368,66396,67310,67710,68049,68263,68958,69205,70044,70337,70755,70910,71012,71275,71296,72926,72974,74899,75079,75795],"rfloat":[8452],"th":[53651],"jira":[67900],"fragmentcommondata":[29512],"verification":[501,22405,28310,31009,67921],"setupcameraproperties":[49127],"dots":[179,5351,5688,5719,5767,5809,6293,6414,11843,16256,16883,16933,20236,31101,33767,34573,39619,53350,62230,66028,70774,73248],"carries":[18307,27937,34956,36084,39965],"uint":[5453,5598,8482,8953,10826,20263,20478,27352,32016,45825,48720,68170,76327],"reverb":[271,4825,4998,5034,5162,5183,7565,7572,7615,7711,7730,7751,7771,22582],"canvas":[8103,8127,8141,12326,13116,13706,15186,17941,23206,24778,24901,31061,36450,37628,39401,39472,39529,40098,54419,54499,54549,54590,54626,54666,54690,54709,54756,58463,59868,60540,61545,62745,63112,66197,68733,71563,73239,73270,73374,73436,73482,73566,73701,73913,74093,75185],"changedto":[69641],"reading":[4651,4994,5945,8437,13009,13062,24984,25970,26249,26295,26486,27501,27515,27545,27584,29326,29662,31646,32396,32861,35037,44053,53895,54709,66184,67342,68048,70972,73360,73673],"elongated":[30049],"uv3":[319,26965,27046],"timesamples":[73061],"mousemoveevent":[57809,60365],"editorloop":[35690,35884,36034],"categorization":[34374],"swatch":[20706,24519,30634,49856,55866],"arithmetic":[6071,45477,72290],"orientations":[714,1213,1575,9178,10772,11763,12105,12489,19685,25875,37281,44839,45807],"fallback":[554,8760,9257,12346,14298,14347,21743,22186,23322,23454,27159,27532,29212,29548,30311,31915,33059,34274,36891,38368,39425,40571,42142,42199,42329,43039,44067,44319,45182,45237,45399,46155,46549,46780,46870,47751,48067,50058,58109,58331,58381,61543,61907,62061,64182,65770,68929,69172,72928,73190,73315,73442,73777,74213],"vertices":[280,6623,7956,8291,8373,8772,9463,10260,10491,10574,12723,13115,13420,13457,14581,20380,20418,21205,21464,21711,22536,23420,24686,25206,25998,29375,29721,30332,30370,32455,32727,33308,34820,36355,36443,36524,38334,38406,41278,42363,45569,46347,46831,47454,49669,58466,61023,68694,71772,71969,74194],"interpolates":[366,11254,11277,14797,20727,29392,32742,43491,45276,61547],"structuredbuffers":[44906,46816,71751],"queryengine":[41462],"undergoes":[12013],"updatesettings":[48404],"kong":[53614],"'flex":[64089],"kunityxrinputfeaturetypeeyes":[75499],"overscanning":[33548],"getextension":[67000,67356,67631,67713,74096],"google":[400,424,487,501,511,541,557,581,620,661,748,893,942,1243,1315,1332,1658,1706,2982,4151,4154,4177,4369,5714,11803,16470,17045,17770,21002,21302,22405,31038,31425,33883,37746,50194,52793,52849,52888,52929,53003,53184,53283,53775,58674,66967,67110,67147,67177,67227,67259,67615,67625,67652,67722,67760,68062,68788,72889,73030,73125,73486,75300],"quantity":[505,4083,10725,11518,33433,67182,67469,67822],"tabular":[64242,64973,64986],"strafing":[6289,38661],"microphone":[881,1265,1390,1487,5158,7615,10685,12198,12637,22588,25672,25890,73038],"obviously":[4997],"count":[250,3758,4273,4751,4776,5770,6161,7017,7166,8771,9961,10015,12880,13428,14134,14501,18119,19528,20030,21034,21525,22116,22139,22403,25991,26510,27625,29176,29594,29716,31641,31792,32183,32729,32849,33119,33410,34212,34901,35028,35269,35391,35416,35530,35646,35921,35985,36213,36337,36359,36450,36479,36708,38388,39141,39553,40859,41171,42176,42222,43414,43999,45731,46781,48372,48798,49683,49767,50466,50601,51995,52114,52194,53964,55960,58559,58645,59983,61742,66668,69643,71938,75853,75960,76064,76188],"uxmlobject":[57623],"freedom":[1937,7281,8305,22548,26557,29902,33600,36351,37289],"serveronly":[11095],"#f5fffa":[63604],"below":[20,106,246,513,1139,1917,2180,2197,2269,2286,2379,2425,2713,2781,3318,3434,3602,3676,3732,3839,4503,4522,4672,4774,4978,5118,5226,5940,6007,6266,6312,7292,7566,7573,7800,7998,8107,8184,8198,8235,8506,8975,9210,9253,9384,9485,9991,10075,10129,10342,10570,10656,10901,11011,11297,11544,11602,11786,12051,12301,12506,12803,12865,12973,13019,13105,13130,13242,13374,13617,13748,13788,14371,14484,14545,14718,14832,14951,15042,15866,16091,17000,17948,17987,17999,18119,18236,18364,18475,18738,19031,20074,20190,20252,20571,20587,20637,20769,20923,21298,21391,21456,21938,22044,22186,22224,23260,23464,24475,24553,24769,24794,24933,24990,25058,25112,25376,25428,25475,25504,25845,25929,26004,26670,26723,26978,27139,27332,27576,27583,27655,27886,27924,28439,28798,28885,29249,29488,29793,29861,29909,29974,30279,31686,32189,32258,32358,32393,32611,32768,32920,33104,33529,33588,33677,33783,33902,34706,34794,34842,35092,35195,35262,35322,35381,35415,35517,35641,35977,36037,36133,36184,36298,36600,36633,36679,37405,37696,37726,38358,38392,38584,38676,38740,38989,39186,39254,39478,39677,39791,39818,39828,39950,40456,40573,40616,40971,41307,41675,41731,42711,42771,42793,43239,43371,44053,44430,44830,45074,45195,45220,45746,46371,46529,46732,46875,47758,48068,48379,48538,48572,48683,49336,49453,49517,49719,49850,50303,50537,50584,51070,51137,51160,51169,51204,51235,51264,51790,51916,52013,52226,52247,52472,52527,52779,52812,53056,53280,53713,53905,54070,54557,54648,55506,55732,56799,57038,57602,57630,57843,57933,57972,58290,58394,58778,59021,59841,60382,60544,60795,62611,62775,63690,65734,66111,66556,67074,67390,67596,67607,67724,67755,67912,68376,68498,68555,68763,69507,69996,70266,70292,70593,70877,70945,71283,71441,71568,71619,71815,71941,72231,72323,72521,72616,72864,72997,73398,73483,73577,73707,73958,74453,75429,75501,75970,76332],"goname":[66858],"dontsave":[36289],"toolchain":[17576,17675,17690,17705,23136,27637,31092,31466,73586,73639],"dialer":[12659],"proxy":[218,2996,6798,7908,9455,10106,16176,22821,23411,27321,27760,31323,31480,37865,46794,66555,66858,69885,70183,70423],"formerlyserializedasattribute":[68547],"renderstateblock":[44626,44759,46041,49101],"il2cpp":[464,706,919,1044,1302,1745,6068,6198,6430,7378,11878,19188,20212,23170,24470,24607,24625,24915,24928,24942,25311,25847,26042,26082,27636,28259,28260,28379,28474,29814,30855,33419,33494,33524,33827,34598,34657,35723,36234,36785,40513,40546,49757,50209,66456,66462,67847,72004,72013,72072,72083,72102,72109,72118,72133,72145,72149,72858,73302,73406,73555,73640,73904,74213,74504,74586,74711,74847],"firstjobhandle":[26378],"processauthentication":[30069],"moods":[4799,5063],"logfilter":[66272],"unity_purchasing":[67402],"frame'":[35029,36480],"terrainutility":[68882,69118],"additive":[1955,2063,6323,7103,13458,26710,27123,30217,37986,39190,41711,42393,42792,43779,44016,44660,45194,45633,46418,46773,47890,74208],"breakable":[25598],"indentation":[37170,52249,62020,68500],"high":[567,1104,1402,1542,1761,2439,2839,3476,3881,5011,5694,5736,5807,5866,6136,6376,6436,6480,6797,6859,6937,7045,7507,7587,7596,7605,7645,7717,7737,8016,8236,8514,8807,9229,9301,9450,9865,9964,10010,10651,10803,10984,11001,11066,11177,11199,11221,11261,11283,11635,11808,12216,12351,12903,13124,13164,13239,13412,13486,13540,13687,13871,13911,14294,14320,14501,14820,14969,15004,15844,16106,16527,16869,16883,17110,17114,17126,17539,17752,17835,17993,18226,18650,18669,18801,19285,20335,20385,20407,20441,21323,21509,21870,21958,22145,22419,23248,23385,23531,23590,24486,24596,24777,24792,25229,25901,26059,26474,26716,26799,27011,27137,27215,27486,27567,28174,28467,28842,28893,29277,29368,29459,29645,30243,30992,31122,31646,31702,31743,32115,32217,32341,32607,33346,33392,33524,34282,34494,34851,35003,35254,35315,35741,35882,35924,36105,36219,36399,36523,36593,37318,37639,37678,37683,37749,38250,38266,38298,38621,39512,39965,40150,40168,41827,41939,41963,42314,42467,42600,42694,42718,42734,42759,42818,42993,43121,43137,43156,43172,43491,43501,43510,43559,43568,43657,43686,43731,43803,44024,44053,44099,44136,44168,44201,44232,44322,44340,44379,44424,44593,44629,44673,44761,44792,45057,45186,45263,45392,45525,45564,45727,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,48601,48940,49158,49169,49175,49281,49313,49465,49474,49484,49498,49513,49518,49562,49610,49628,49673,50059,50068,50077,50140,50144,50362,50551,50941,51991,52095,52216,53249,54107,59872,63792,64320,64468,64957,65148,65222,65246,66034,66225,66402,66502,66720,68160,68304,68458,68527,68681,68777,71874,72401,72663,72728,72803,72809,72816,72942,73121,73248,73461,73705,74276,74637,74796,75068],"brick":[4861,41506,42243,49477],"consumes":[9515,20242,30377,34192,34996,52462,61921,72663,73485],"additionalil2cppargs":[24474],"converted":[1713,3579,3729,7127,9258,13372,13945,14380,21524,22836,27523,29339,29764,33290,40468,40732,40961,41307,45093,45168,48566,49547,50934,69385,69489,72266],"youtu":[27211],"spm":[6710,13628,48224],"productdefinition":[67288],"#ff8c00":[63538],"shuriken":[38113],"defintion":[49167],"flowchart":[1995,6797,21301,29092,51995],"dense":[7020,7173,10093,26890,47607,49437,49706,50403,50579],"governs":[6145,18743],"fx":[3988,9674,35056],"splash_screen_style":[73933],"cullingpassindex":[75472],"qa1795":[26073],"responds":[7227,19970,20045,20096,33586,39385,39476,39744,39981,40073,49513,55975,61327],"child":[2037,2297,2416,2425,3012,5098,5290,6263,6283,6315,6320,7219,7427,7939,8114,9385,10352,10759,11267,11434,13100,13263,13588,14690,15835,18010,18435,19043,20637,20952,21327,22226,22498,24526,24727,24748,25108,25525,25622,26058,26669,27325,27786,28951,28992,29013,29043,30042,32754,33572,34041,34783,34889,34923,34955,35380,35692,36508,36731,36956,37203,38449,38463,39127,39318,39492,39538,39574,39666,39727,39789,39927,40098,40128,40203,40534,40674,41506,51121,52152,52229,54246,54304,54543,54611,54723,54758,54835,55114,55268,55578,55731,55986,56100,56760,57598,57619,57636,57868,58072,59065,59594,59841,60544,60822,61313,61422,61790,62150,62774,62840,63116,63209,63840,64026,64190,64331,65051,65512,65719,65733,65878,65994,69400,69504,74422,74566,75109,76295],"primary2daxisclick":[76115],"xrcontrollerleft":[75063],"isinteractable":[24850],"unityxrhapticupdate":[75611],"substring":[48815,61738],"book":[5838,32934,35966,42796,52520,53740],"giparams":[6703],"neptune":[59969],"setsourceplayable":[33924,34165],"symlink":[556,1843,6472],"#d3d3d3":[63578],"shadows_soft":[44580],"slots":[8629,18204,42809,47415,50025,50152,52185,56799,58336,62066,66252],"animates":[1940,7156,21466,22478,29903,39357,71772],"code":[385,505,556,726,739,794,989,1044,1175,1232,1269,1352,1396,1401,1505,1673,1712,1812,1821,1832,1846,1989,2078,2700,2781,3024,3229,3242,3340,3394,3466,3496,3537,3569,3674,3767,3779,4013,4108,4493,4510,4536,4603,4654,4719,4876,5168,5236,5355,5499,5720,5737,5763,5882,5920,5989,6059,6105,6235,6322,6325,6371,6428,6471,6514,6679,6691,6725,6883,7365,8487,8642,8811,8975,9330,9589,9830,9920,10110,10383,10489,10614,10708,10745,10835,11403,11612,11844,12332,12975,13042,13351,13454,13965,14033,14152,15714,15809,15850,16137,16364,16378,16389,16603,17015,17092,17110,17279,17474,17539,17624,18120,18257,18376,18485,18521,18625,18753,18756,18926,19017,19055,19108,19129,19168,19188,19296,19324,19385,19467,19647,19970,20045,20096,20124,20207,20215,20260,20769,20866,20972,21006,21029,21154,21251,21927,22193,22234,22349,23416,23542,23629,23795,23892,24151,24456,24605,24623,24916,24928,24943,25309,25496,25683,25698,25769,25845,25855,25920,25980,26041,26078,26247,26271,26302,26387,26437,26472,26508,26724,27469,27931,27937,28068,28074,28108,28124,28137,28165,28184,28263,28281,28372,28462,28847,28921,29373,29399,29421,29467,29557,29664,29707,29795,29813,29906,29958,30000,30098,30312,30683,30856,30917,31091,31412,31634,31652,31982,33088,33403,33419,33455,33472,33524,33774,34184,34205,34379,34525,34600,34637,34645,34655,34684,34988,35411,35470,35566,35604,35684,35799,35958,36034,36234,36465,36633,36754,36854,37471,37544,38251,38492,38678,38819,38841,38984,39059,39102,39365,39489,39927,40159,40173,40450,40514,40555,40652,40659,41583,41786,41840,41876,41935,42004,42019,42024,42050,42109,42321,42352,42406,42424,42596,42688,42948,43016,43080,43092,43385,43566,43670,43684,43786,43854,43920,43947,44118,44150,44182,44198,44245,44306,44320,44338,44422,44505,44590,44640,44669,44671,44769,44784,44840,44981,45044,45128,45178,45261,45405,45423,45455,45517,45568,45600,45644,45840,45908,45941,45959,46552,46718,47156,47191,47965,48003,48036,48379,48911,48977,49148,49179,49285,49318,49390,49447,49457,49573,49644,49650,49715,49732,49757,49817,50289,50342,50651,50977,51074,51957,52257,52546,52737,52797,52867,52941,52953,53093,53304,53929,54177,54470,54795,54873,55551,55635,55727,55827,55976,56075,56103,56808,57081,57310,57628,58004,58045,58160,58233,58467,58733,58997,59551,59732,60209,60433,60520,60544,60837,60915,61015,61456,61573,61649,61828,62113,62283,62799,62980,64343,64406,64421,64461,64481,64504,64556,64579,64603,64624,64655,64687,64699,64738,64747,64774,64811,64834,64851,64869,64903,64923,64948,64965,65016,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65540,65555,65577,65597,65617,65638,65658,65865,65918,65926,65973,66115,66228,66450,66461,66656,66928,67035,67070,67188,67237,67720,67853,68090,68263,68309,68477,68601,68739,68826,68916,69071,69632,70578,70954,71053,71176,71568,71663,71921,72003,72010,72063,72103,72110,72119,72137,72149,72191,72231,72344,72430,72752,72830,72846,73024,73061,73153,73169,73264,73299,73326,73381,73416,73446,73501,73606,73639,73667,73690,73706,73900,73914,74203,74249,74429,74551,74588,74632,74726,74784,74800,74837,74867,74950,75068,75092,75257,75381,75395,75585,75880,76136],"structural":[37554],"hccr3m3cq11mi+mnri1scxxrono4oeechwg2szzllxbrkvjllrrq620xj6rlb":[69922],"m_piechart":[60751],"refactor":[33319,40177],"vpos":[43975,45742],"audiodownloader":[68184],"walls":[167,253,6774,6792,8059,8203,10135,10651,15842,18230,23067,25550,31717,35250,44178,71809,71872,72941],"fetchthumbnail":[2533,2578,2651],"stub":[72868],"divergence":[4831],"tapped":[29594],"vuforia":[12033],"cells":[9536,11624,14018,14078,14263,14476,26843,30255,30274,39553,50479,51156,51239,51318,51558,51869,52415],"s_signalhandlerinstalled":[1051],"example_asynctests":[15734],"texture_asset_editor":[54948],"otherwise":[234,554,912,1114,1127,1468,1770,2170,2238,2284,3738,5446,5590,6128,6804,7325,8510,8878,9466,9828,10526,10586,11348,12885,13042,15861,18098,18734,18746,20072,20271,21054,21486,21661,21862,22373,23257,23883,24607,24761,24794,24985,25162,26122,26360,27600,30257,31008,31368,31725,33408,34171,34639,34645,34736,35126,36235,36782,37099,37281,37733,37924,38347,38505,39509,39798,41748,42016,42064,43162,43205,43736,44053,44588,46081,47145,48188,48765,49179,50150,50342,50602,51065,51965,52408,52851,53323,54898,55646,58414,58560,59524,60397,60810,64174,65061,65876,65992,66258,67856,68247,68551,68660,69141,70350,70473,70776,71266,71872,72292,72998,73190,73683,73717,73933,74404,74699,75017,75599,76195,76335],"planetsmulticolumntreeview":[60097],"losing":[12819,14455,25307,33467,54591,67149],"bp":[6010],"#c1c1c1":[63299],"windowsstore":[74782],"checked_pressed":[63454],"rightwheel":[74443],"host":[398,581,646,1323,3247,4544,4932,10850,11056,11160,11206,11228,11685,17678,17693,17708,18682,18819,18936,19426,22961,31604,35826,39512,39881,54104,54591,61316,66186,66227,66330,66348,66390,66407,66563,66881,69987,70070,70137,70548,70650,70878,70949,72392,72476,73178,73410,73751,73917],"standalonebuildsubtarget":[19086,19108,21061],"getnameoffocusedcontrol":[59653],"removesplashscreen":[74705],"color_picker":[63442],"nullline":[18277],"detach":[36458,60543],"gameobject's":[2041,2296,8003,8230,9211,9322,9332,9859,10337,10394,10715,11066,11247,14661,14833,15816,15831,17978,19039,22155,22673,25378,25407,26668,34781,38551,38593,38913,39146,39317,40674,43185,46393,48323,49723,55234,55594,56393,58142,71608,72247,74420],"you'll":[69,1968,11669,13208,23794,24737,27490,28676,29809,46771,48514,52174,58734,59011,65849,68047,70350,74896],"dents":[14965],"objectfactory":[30718,49905],"characterbodysearches":[40750],"kdefaultpaddingpower":[48720],"setdatabundleid":[49771,66849],"programmatic":[12658],"fingerprinting":[73471],"prints":[804,11177,11740,18384,25106,26451,30030,30727,33844,35141,36683,39358,40869,41199,41976,59780,60433,60571,60837,72397,73308],"allocations":[5643,16527,26025,26450,27736,27917,29154,30869,33082,33090,33383,33403,33420,33457,35139,35695,36093,36201,36497,36798,37261,52590,56725,71973,74355,75755],"toon":[5856,46596],"laserbeam":[40712],"noop":[43820],"using_particle_system":[18656],"accelerometer":[18507,26043,29583,52754,73490],"am":[238,779,9603,9663,24010,24084,24284,35866,53610,60600,66696,68804,72238],"sethp":[57026],"browser's":[28775,36699,65916,73271,73291,73705],"information":[12,14,100,137,156,191,211,262,274,277,387,408,423,475,494,513,525,550,579,631,640,662,693,711,726,734,792,840,867,882,890,894,938,952,963,1023,1040,1087,1096,1107,1122,1140,1156,1178,1190,1202,1232,1240,1243,1277,1315,1332,1359,1373,1484,1489,1516,1614,1706,1770,1804,1891,1994,2042,2195,2216,2325,2435,2724,2757,2836,2940,2958,3066,3228,3262,3303,3310,3418,3447,3483,3511,3581,3734,3810,3843,3871,3897,3996,4027,4051,4155,4170,4186,4228,4243,4245,4356,4386,4397,4419,4425,4441,4506,4565,4570,4653,4719,4726,4764,4776,4794,4811,4959,5168,5176,5183,5274,5338,5494,5719,5728,5733,5805,5911,6057,6096,6375,6398,6473,6484,6511,6680,6686,6725,6751,6758,6768,6804,6920,6937,6962,6995,7023,7161,7179,7368,7505,7569,7576,7625,7763,7808,7875,7879,7970,7995,8039,8125,8174,8271,8389,8432,8528,8765,8788,8972,9021,9033,9069,9134,9193,9210,9324,9344,9435,9555,9621,9756,9869,9920,9994,10060,10107,10216,10328,10430,10465,10491,10688,10691,10727,10757,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11316,11370,11404,11442,11484,11527,11598,11643,11683,11718,12097,12320,12443,12731,12754,12881,13014,13133,13190,13208,13234,13275,13292,13355,13392,13582,13590,13627,13699,13704,13770,13799,13884,13904,13977,14024,14073,14232,14304,14469,14509,14579,14778,14782,14788,14860,14924,14929,14934,14939,14959,15017,15810,15903,15936,15951,15968,15983,15999,16006,16020,16037,16044,16061,16076,16092,16107,16121,16138,16152,16169,16184,16213,16228,16242,16257,16276,16331,16346,16365,16379,16393,16407,16424,16439,16454,16471,16488,16511,16527,16543,16564,16580,16596,16604,16612,16620,16628,16636,16644,16652,16660,16668,16676,16684,16692,16700,16708,16716,16724,16732,16740,16748,16756,16764,16772,16780,16788,16796,16804,16812,16820,16828,16836,16844,16851,16870,16884,16920,16934,16970,16985,17001,17016,17031,17046,17063,17078,17093,17111,17119,17127,17134,17153,17170,17186,17207,17221,17241,17255,17269,17283,17297,17313,17327,17343,17357,17370,17385,17399,17413,17425,17438,17453,17475,17489,17507,17525,17540,17547,17562,17577,17592,17607,17628,17643,17662,17679,17694,17709,17724,17745,17753,17760,17774,17789,17804,17819,17836,17851,17866,17881,17896,17913,17939,17952,17960,17976,17999,18041,18052,18151,18241,18355,18390,18395,18405,18414,18445,18456,18517,18539,18607,18662,18719,18743,18844,18910,19050,19085,19124,19200,19278,19287,19316,19336,19352,19364,19618,19655,19675,20001,20050,20089,20091,20123,20179,20248,20383,20402,20446,21002,21023,21173,21299,21391,21446,21589,21636,21639,21685,21693,21837,21903,21962,21976,21999,22019,22029,22064,22100,22109,22125,22144,22224,22347,23246,23381,23434,23480,23527,23533,23559,23591,23619,23623,23687,23810,23883,24096,24503,24581,24599,24634,24637,24745,24774,24926,24946,25043,25118,25149,25258,25396,25672,25717,25734,25738,25816,25819,25828,25835,25852,25876,25893,25900,25993,26041,26083,26100,26179,26247,26295,26459,26489,26545,26582,26648,26662,26703,26718,26793,26810,26824,26948,26957,27042,27069,27078,27081,27114,27126,27178,27189,27214,27267,27296,27312,27322,27330,27466,27482,27497,27502,27516,27544,27585,27639,27716,27750,27756,27764,27924,27984,28075,28096,28119,28127,28173,28197,28255,28263,28282,28318,28404,28465,28605,28838,28865,28957,29019,29150,29397,29408,29439,29451,29467,29482,29566,29707,29738,29777,29814,29832,29908,30001,30151,30166,30226,30277,30320,30346,30391,30443,30475,30502,30516,30824,30840,30859,31016,31366,31382,31386,31656,31663,31676,31739,31755,31763,31785,31810,31831,31848,31872,32086,32101,32125,32149,32212,32238,32245,32336,32354,32380,32602,32625,32645,32673,32720,32765,32859,32899,32924,33062,33384,33426,33459,33510,33526,33640,33770,33784,33879,33883,33907,34225,34257,34338,34464,34601,34638,34645,34655,34792,34841,34893,34983,35258,35264,35366,35404,35469,35561,35603,35622,35700,35768,35799,35901,35926,35957,35979,36031,36156,36198,36296,36354,36432,36463,36574,36636,36684,36855,37097,37270,37293,37480,37556,37637,37667,37728,37746,38253,38282,38324,38475,38480,38533,38547,38582,38630,38681,38820,38905,39071,39099,39128,39166,39179,39347,39381,39447,39495,39580,39648,39690,39791,40064,40134,40146,40150,40173,40439,40509,40516,40541,40557,40650,40662,40683,40760,40775,41346,41375,41433,41554,41681,41701,41723,41761,41787,41861,41933,41989,42017,42042,42045,42111,42223,42312,42350,42356,42386,42425,42597,42662,42692,42716,42732,42757,42788,42938,42956,43003,43018,43083,43085,43097,43139,43150,43206,43223,43336,43460,43489,43508,43995,44052,44198,44303,44320,44563,44590,44627,44687,44755,44784,44978,45044,45151,45197,45386,45417,45446,45517,45566,45598,45733,45838,45929,45959,46526,46792,47068,47157,47177,48197,48229,48315,48347,48502,48524,48529,48866,48940,48976,49145,49173,49281,49311,49390,49425,49503,49533,49562,49648,49657,49669,49710,49733,49764,49837,50147,50178,50305,50324,50343,50379,50453,50514,50520,50530,50545,50575,50599,50628,50649,50654,50662,50691,50704,50743,50757,50770,50783,50796,50822,50860,50934,50951,50992,51120,51133,51174,51222,51232,51257,51357,51541,51588,51770,51785,51820,51849,51985,52095,52226,52239,52493,52554,52691,52706,52718,52739,52756,52787,52827,52872,52963,53103,53249,53711,53713,53778,53994,54013,54227,54500,54601,54706,54722,54840,55808,55993,56063,56097,56689,57692,57841,57862,57972,58069,58173,58270,58338,58393,58598,58666,58731,59549,59732,59840,59924,60196,60212,60389,60633,60761,60980,61360,61593,61910,61923,62201,62750,62935,63118,63689,63701,64138,64214,64450,64512,64564,64587,64611,64733,64767,64809,64842,64860,64915,65313,65538,65553,65568,65588,65608,65628,65649,65898,65996,66022,66032,66042,66095,66109,66177,66212,66329,66347,66372,66400,66447,66450,66462,66543,66639,66803,66820,66838,66920,66955,66961,66967,67015,67040,67074,67171,67272,67287,67555,67681,67720,67755,67886,67894,68031,68050,68054,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68476,68529,68629,68920,69162,69338,69373,69444,69507,69519,69694,69724,69765,69805,69865,70010,70225,70236,70295,70307,70336,70353,70595,70770,70801,70876,70936,70945,71010,71121,71125,71179,71236,71249,71265,71288,71359,71395,71417,71480,71505,71527,71606,71663,71749,71760,71814,71922,72008,72063,72110,72119,72132,72136,72148,72172,72191,72207,72292,72393,72462,72521,72616,72717,72725,72756,72786,72801,72807,72814,72821,72832,72874,72903,72923,72943,72997,73025,73028,73093,73122,73163,73205,73290,73322,73370,73390,73429,73558,73597,73608,73639,73674,73690,73707,73894,74010,74051,74122,74132,74224,74408,74434,74498,74506,74548,74582,74588,74627,74724,74753,74782,74806,74808,74844,74849,74863,74888,74944,74982,75077,75107,75133,75192,75223,75260,75303,75426,75474,75874,75915,76071,76094],"audibility":[5199,36006],"fair":[7487,40746,71790],"accidents":[52532],"steals":[26509],"atitc":[3502],"placeholdertext":[58245],"'forest'":[41871],"dragleaveevent":[57484,57568],"campfire":[71872],"selectiontype":[55955],"restrictions":[219,426,634,872,4566,8303,12400,13256,18746,24946,26463,28108,28216,29814,38567,38597,39958,40521,40543,43709,44687,49642,52501,66003,66456,66971,67346,71288,72717,73193,73446,73669,74850],"74e5":[66769],"panels":[25359,30824,53488,58141,59076,59541,60408,60609,61302,61484,61526,65728,71985],"navigationsubmitevent":[60497,61800],"m_listview":[55947],"hover_mixed":[63485],"unlimited":[8012,8765,9470,12963,13478,35269,37797],"november":[28307,28317],"armv9":[11886],"mycomp":[55590],"allvalidproducts":[53963],"precedence":[1944,2204,3522,22470,34895,45145,54670,54820,58333,61388,61525,61907,62014,62063,63806,64038,64174,67584,74048],"staple":[28309],"platformsfocuses":[6879],"polled":[55554],"reusable":[17110,18907,20709,33097,34923,34956,37385,37506,49148,54147,57628,61959,62788,65912],"intensity":[1872,2346,8717,9792,9874,9967,10068,13134,14150,18239,21294,21499,21699,22778,24489,24517,26787,26793,26859,26919,27030,27114,27129,27290,27506,27573,29440,32109,32775,33907,36354,36636,37422,37588,37838,38382,41343,41772,44454,46729,48287,49483,49627,68671,68825,68858,69058,71599,71810],"linebrush":[51427],"bc1":[14378],"coretemperature":[54986],"dynamic_branch":[42967,44512],"dualcore":[50281],"#4682b4":[63643],"respond":[2996,4070,4997,6944,10937,15850,18357,18585,19005,23183,23890,25333,31707,33762,37354,37536,37660,40643,41753,42449,46597,49528,52012,52766,55924,55988,57920,59015,60212,61326,61494,62109,64651,65887,75480],"longer":[222,442,1038,1343,2274,2399,3065,3247,3301,3433,3867,3946,3963,4026,4066,4404,4413,4438,5288,5768,6192,8256,9086,9157,9966,10529,11175,11792,12110,12279,12666,13239,14296,14506,14558,15836,16091,18217,18330,20241,20619,20632,21435,22106,22146,23525,24573,24641,24760,24973,25492,26452,27073,27750,27930,28467,28793,28994,29053,29267,29367,30043,30446,30885,31008,31368,32197,32725,33074,33152,33381,33420,34736,34913,35735,36093,36555,36594,36786,37453,38474,38815,39141,39159,39929,40179,41390,41871,41914,42187,43459,45599,45846,46074,46980,48674,49632,50002,50150,50974,51047,51126,51991,52877,53182,53782,54279,57595,57836,58832,59854,60822,62758,63049,63221,63978,66518,66527,67661,68055,68088,68266,68532,68542,68611,68733,68883,69119,69350,69454,70761,71037,71170,71173,71417,71914,72877,72937,73055,73118,73171,73285,73320,73630,74238,74847,75249,75355,75409,75511,76195],"fan":[8573],"mul":[1701,10186,14060,14190,43875,47293,49013],"waterfall":[17370,50941],"introspection":[38272],"buildpipeline":[450,2788,3241,3484,3512,6325,19028,19094,21123,25937,27682,74085],"replaykit":[25890],"toward":[6281,8575,9784,12954,13096,29622,36593,50572,60511,65232,65256,72957],"animate":[1870,1880,1890,1966,1996,2041,2083,2184,2282,2334,2415,2427,6750,6781,6980,6991,7151,9137,10329,10794,11452,12762,13283,13300,15039,16453,18068,18187,21565,21628,22077,22466,24830,28867,29091,30510,32884,37394,37568,47098,48319,49571,60635,72773,74169,75076],"jobhandles":[26384],"editorprojectaccess":[15306],"writemask":[21754,45859],"addvalues":[71714],"tested":[5820,6493,27598,30884,31366,52501,53701,67862,70593,71162],"xcodeframe":[74918],"discontinuous":[27325],"consume":[3299,5921,6120,7483,10082,26360,31604,41843,54032,54895,71050],"orthographic":[4,26,68,114,6757,7133,8024,9443,12857,13406,13777,21483,22849,23718,32317,37349,37480,38297,38351,39235,39254,41524,47090,48879,51365,76495],"c0z":[5383,5527,20354],"car_inspector":[58767],"desire":[3243,3351,3455,3521,5044],"bent":[37996,50613,52140],"enginebehaviours":[21328],"newmessage":[1457],"getcontacts":[35314],"b03f5f7f11d50a3a'":[20196],"here":[14,65,899,1006,2153,2216,2260,2345,2427,3252,3418,3472,3504,3912,4043,4254,4381,4401,4485,4548,4603,5033,5463,5608,5759,5987,6198,6321,6542,7007,7145,7179,7211,7265,8009,8088,8216,8436,8711,8903,9268,9341,9434,9606,10097,10711,11079,12097,12595,12713,12862,12990,13034,13836,13902,14154,14226,14833,18119,18305,18359,18671,18730,19072,19089,19481,19945,20328,20808,20875,21736,21927,22168,22200,22269,23575,23807,24029,24174,24308,24745,24892,24939,25013,25500,25926,26055,26086,26763,27145,27855,28922,29001,29713,30064,30658,31731,31875,32328,32346,32925,33355,33482,33640,33814,34742,35054,35862,36687,36854,37052,37538,38549,38583,38632,38820,38868,39041,39554,40524,40741,41188,41317,41424,41520,42004,42352,42411,42631,43670,43776,43854,44118,44150,44182,44215,44333,44354,44610,44643,44781,44828,44986,45091,45298,45409,45473,45540,45807,45908,45952,46250,46825,47170,47306,47968,48006,48039,48167,48692,49358,49441,49490,49525,49581,49631,49763,49950,50047,50341,50582,52158,52184,52275,52599,52758,53260,53890,54729,55693,56686,57487,57720,58245,58733,59561,62013,62189,65318,66043,66313,67035,67249,67507,67645,67798,67947,68036,68879,69115,69376,69480,69660,70212,70875,70940,71903,72300,72792,72866,73619,73639,73741,74412,74458,74575,75649],"generates":[177,405,494,532,559,580,944,1101,1202,1333,1714,2052,2085,2356,2814,3697,3728,3810,3859,4539,5724,6028,6431,9939,10109,11319,11613,11818,12218,12353,12742,12903,13251,13361,13628,13784,13976,14498,15839,16060,17966,18112,18233,18315,18533,18977,19193,20263,20402,21390,22121,22165,22312,23255,23483,23580,24613,24625,24979,25096,25329,25747,25902,26980,27114,27214,27764,27956,28453,28485,28773,30198,30211,30271,30700,30839,32412,33094,33416,33456,34284,34496,36294,36569,36689,36755,37664,38245,40570,41088,42148,42691,42715,42756,43040,43149,43319,43494,43535,44134,44248,44310,44573,45037,45427,46722,48225,48328,48649,49734,50142,50186,50901,51018,51836,52236,52691,52767,52843,52877,53183,53376,53782,54209,54471,56446,58387,58467,58727,60674,63069,66524,66815,66842,67847,68697,68852,69061,71591,71855,71999,72037,72145,72840,72858,73186,73619,73639,74214,74783,74808,74832,75764],"launching":[778,4662,11683,12624,15716,21016,21962,34238,36554,38272,48701,50186,66636,72087,74752],"familiarizing":[37519,73450],"hi":[24065,53629],"initialitems":[26153],"remote’s":[52754],"reverts":[20633,25096,28963,39343,54450,54680,71491],"agentclimb":[76403],"updated":[220,2007,2708,3473,3837,3856,3892,7154,7995,8700,9549,10104,10597,10705,11284,11522,11604,12024,12888,13116,13150,13228,13942,14114,14300,14550,14713,14963,16091,18353,18607,18989,19545,21562,22880,23774,25493,26046,27327,27339,27465,27480,28944,29328,31365,31385,32589,35344,37709,37723,37748,40509,43335,48022,48260,48370,48429,49644,50359,50425,50507,50524,50532,50547,50555,50565,50577,50603,50645,51125,51152,51787,51813,51838,51948,54123,56075,67149,68209,68781,68949,69194,69360,69464,69641,70839,71216,71311,71332,71504,71893,73145,73192,73357,74307,75095,75321,75624,75759,76040],"leap":[17847,31038,31434,50233,68761,74345,75301],"internals":[24947],"onunityplayerunloaded":[66823],"delimiting":[58456],"m_nearestneighbors":[33255],"types":[77,104,613,810,871,1087,1299,1392,1407,1707,1812,1918,2003,2008,2045,2239,2335,2506,2549,3289,3468,3491,3574,3579,3731,3797,4256,4447,4499,4520,4707,4878,5049,5305,5954,6037,6142,6263,6283,6395,6691,7249,7569,7576,7799,7942,8303,8496,8765,8979,9109,9343,9448,9766,9869,9987,10706,10722,10733,11044,11107,11309,11476,11556,12043,12357,12443,12775,12881,13017,13404,13704,14230,14517,14775,15819,15832,16510,17835,18053,18156,18421,18529,18885,19201,19454,20231,20392,20569,20660,21391,21490,21574,21777,22014,22052,22065,22230,22553,23302,23814,23881,24169,24467,24728,24996,25097,25172,25194,25307,25334,25550,25721,26092,26108,26248,26265,26276,26295,26433,26488,26569,26582,26718,26911,27581,27983,28071,28476,28828,28895,29134,29150,29465,29528,29695,29732,30097,30330,30520,30900,31587,31624,31651,31707,31760,31886,32650,32702,32755,33022,33098,33423,33453,33500,33600,33628,33696,34011,34159,34291,34415,34539,34649,34807,34885,34939,35090,35240,35275,35726,35822,36076,36242,36600,36710,36738,36781,36919,37097,37227,37315,37359,37475,37587,37627,37721,37821,38358,38530,38541,38585,38609,38647,38889,38931,39072,39084,39097,39638,39863,40097,40177,40540,40562,40722,40901,41184,41333,41348,41358,41433,41649,41673,41807,41878,42008,42605,42809,42941,43006,43024,43165,43775,43891,44199,44228,44771,44832,44978,45136,45195,45571,45627,46717,47105,47187,49411,49449,49510,49544,49638,49906,50197,50378,50600,50934,51134,51233,51618,51832,51846,52551,52772,53773,54024,54201,54223,54776,54813,54961,55494,55564,55638,56099,56592,56706,57557,57810,57942,57971,58015,58077,58192,58794,59534,59541,61460,63125,63707,63716,63921,63989,64029,64207,65906,65966,66025,66341,66464,66937,67019,67166,67230,67677,67841,67972,68079,68902,69140,69330,69384,69436,69694,69723,70960,71094,71155,71204,71615,71760,71902,71917,72193,72246,72292,72726,72872,73024,73238,73241,73373,73406,73553,74044,74512,75111,75364,75487,76096],"newunlitshader":[47195],"‘hwnd’":[34237],"represents":[199,295,1429,1771,1883,1893,2242,4061,4186,4460,4522,5117,5350,6723,6754,6942,7022,7164,7327,7478,7621,7755,8104,8311,8609,8648,9273,9327,9761,9839,9908,10233,10336,10488,10614,10808,11088,11333,13100,13347,13392,13454,13758,13911,14728,15035,18348,19669,20237,21592,21688,22189,22750,23475,24489,26000,26629,26646,27000,27946,28208,28282,28847,29364,29402,29619,30054,30478,30503,31661,31708,32678,32724,32869,33433,33729,34953,35640,35714,36395,36826,36979,39253,39594,39717,40531,42028,42048,42323,42691,42715,43191,47250,48322,49533,49639,50062,50378,50409,50558,52243,53601,54876,55991,56042,56720,58086,58756,59743,59934,60155,60540,61749,62198,62957,63766,64151,64208,64389,64973,64986,65735,66197,66233,70236,71808,72330,72866,73181,73934,75508,76124],"myrepository":[70031,70458,70611],"compute":[308,2665,6273,6298,6697,6880,6934,7238,8400,9999,10109,11624,11812,13430,17118,18224,21529,22146,22808,24598,25095,27749,27758,30292,30354,31602,34278,34492,35124,35714,36394,37294,38053,38676,41173,42011,42049,42175,42999,43036,43107,43414,43895,43957,44053,44503,44879,45482,45567,46295,46775,46826,47392,50080,54903,58446,68996,69247,70299,70867,71756],"standarddefaultgi":[46650],"onward":[66598,71593],"enable":[4,80,205,255,265,447,556,595,628,640,680,839,903,949,1021,1138,1200,1311,1340,1512,1582,1738,1838,2061,2152,2211,2284,2768,2984,3696,3853,3931,3969,4011,4181,4257,4431,4588,4653,4745,5123,5187,5717,5963,6217,6317,6368,6474,6816,6947,6977,6990,7017,7189,7202,7215,7365,7429,7478,7673,7778,7900,7962,8001,8030,8166,8241,8266,8295,8376,8503,8768,8824,9001,9029,9079,9151,9166,9203,9296,9347,9451,9708,9726,9776,9851,9901,9946,10015,10058,10219,10369,10397,10438,10567,10652,10840,11048,11075,11136,11152,11176,11204,11254,11277,11324,11365,11417,11462,11473,11551,11608,11724,12065,12309,12328,12491,12725,12819,12882,13127,13162,13204,13241,13417,13465,13554,13598,13662,13672,13709,13808,13822,13833,13862,13892,13913,13991,14133,14281,14348,14484,14502,14596,14851,14982,15857,17045,17092,17384,17474,17912,17989,18038,18064,18120,18250,18375,18473,18550,18819,18825,19073,19164,19248,19271,19317,19337,19351,19364,19377,19944,20072,20211,20341,20391,20414,20446,20608,21054,21392,21454,21604,21624,21840,21871,22039,22074,22111,22127,22226,22985,23257,23404,23491,23558,23703,24587,24794,24929,24981,25065,25207,25465,25605,25633,25756,25875,25970,26030,26086,26566,26848,26939,26983,27059,27089,27098,27137,27307,27759,27785,27986,28051,28068,28098,28131,28168,28306,28318,28417,28467,28885,29109,29353,29440,29443,29486,29573,29769,29869,29903,30147,30368,30426,30847,31367,31616,31625,31670,31733,31749,31767,31779,31804,31825,31842,31868,32080,32095,32119,32158,32206,32255,32330,32348,32374,32596,32619,32639,32667,32714,32747,32893,33022,33081,33396,33410,33622,33651,34214,34245,34452,34605,34645,34735,34837,34982,35232,35367,35595,35623,35692,35797,35925,36045,36231,36480,36589,36786,37600,37618,37635,37678,37742,37825,38483,38519,38550,38584,38610,38633,38643,38666,38738,39086,39167,39186,39234,39256,39388,39597,39637,39650,39720,40011,40221,40662,41326,41387,41491,41781,41842,41899,41972,41992,42023,42044,42133,42191,42751,42781,42992,43128,43140,43203,43297,43550,43655,43788,43856,44120,44152,44343,44439,44502,45035,46768,48057,48232,48287,48349,48529,48563,48575,48678,48852,49336,49486,49692,49720,49763,49907,50010,50064,50144,50227,50348,50366,50433,50563,50597,50657,50689,50959,51003,51081,51388,51882,52386,52728,52746,52766,52879,53294,53810,54243,54479,54500,54674,54690,54736,55916,55974,56079,56972,57335,58186,58310,58409,58705,58794,60650,61477,61945,62073,63112,63223,65325,65704,66010,66342,66366,66375,66623,66879,67092,67389,67903,68064,68748,68826,68852,69061,69312,69352,69418,69747,69819,70728,71027,71181,71229,71293,71532,71593,71743,71805,71871,71991,72005,72060,72225,72283,72400,72730,72741,72840,72854,72892,72943,72993,73030,73168,73210,73278,73302,73329,73386,73418,73622,73701,73730,74394,74627,74753,74788,74816,74857,74863,74936,74984,75047,75134,75211,75290,75388,75422,75501],"accompanied":[32650],"tagname":[45987],"down":[177,221,564,643,851,1139,1579,2117,2260,2275,2777,3321,3517,3926,3950,3989,4033,4054,4196,4408,4416,4423,4455,4820,4965,5037,5124,5222,5922,6263,6283,6315,6353,6427,6468,7138,7154,7198,7254,7472,7567,7574,7703,7837,8029,8188,8359,8562,8610,8843,9098,9203,9260,9294,9397,9537,9578,9647,9693,9807,9851,9892,9982,10015,10127,10362,10527,11177,11403,11493,11518,11760,12423,12477,13032,13238,13387,13580,13596,13665,13751,13793,13901,14285,14336,14544,14685,14799,14912,14976,18094,18131,18207,18319,18509,18902,18971,19020,19470,20061,20438,20548,20616,20627,20755,21388,21661,21998,22128,22275,22750,23439,23617,23692,24223,24538,24747,24774,24908,25083,25221,25326,25411,25807,25872,26078,26357,26588,26804,26908,27020,27205,27253,27286,27752,27813,28168,28457,28852,28878,30043,30190,30251,30411,30755,31642,31668,31745,31838,31852,32136,32362,32414,32609,32632,32760,32849,33069,33075,33478,33544,34760,34825,34911,34956,35032,35782,35878,36057,36223,36454,36465,36695,37373,37478,37667,37687,37704,37750,38346,38666,39147,39255,39318,39415,39468,39774,39819,40279,40764,41321,41579,41613,41678,41758,42711,43128,43215,43519,44345,44835,48162,48526,48597,48618,48643,49461,49560,49608,49712,49780,49901,50349,50510,50527,50536,50557,50585,51055,51142,51180,51345,51886,52010,52086,52106,52184,52462,52530,52767,52978,53399,53865,54274,54450,54694,54726,55643,55717,55806,55864,55907,57441,57562,57811,57854,58160,58196,59542,59721,59738,59817,60361,60497,60554,60766,61546,61796,61908,62042,62117,62281,62601,62803,62886,64179,64640,65370,66000,66728,67097,67920,68469,68551,68713,69957,70306,71178,71186,71203,71216,71289,71351,71427,71523,71629,71970,72357,72439,72473,72871,73176,73286,74057,74631,74791,75262],"names":[478,517,936,998,2300,3078,3518,3894,4713,4877,5029,6061,7364,9131,9257,9803,10491,11308,12225,12401,12797,15042,15817,15850,18339,18448,18745,18885,19039,19551,20256,20756,21029,22281,22417,23484,23588,24650,24815,25434,25696,26954,27947,29286,29906,30407,33008,33481,34157,34221,35381,35446,35600,36047,36338,37052,38283,38372,39450,40358,40430,41253,41331,41529,42355,45072,45214,45402,45599,46370,46513,47123,48169,48621,49850,50044,50341,52674,54321,54547,56693,57149,57300,57302,58662,59077,59275,59838,60054,60912,61012,61468,61735,61933,62014,63794,63860,63938,64225,64340,69012,69264,69892,70278,70831,70879,71042,71404,71934,72266,73188,73299,73452,73985,74426,76100],"coloration":[13898],"shift+alt+b":[51339],"miidtzccap+gawibagiqdofg5rfyrv6p5wd8g":[69925],"jetbrains":[16361,19649,28376,31430,35087,38680,40660],"untick":[11175,37676],"\\nresolution":[20486],"onclientnotready":[66305],"asin":[10450,27447],"standardshadergui":[49576],"extraction":[7067,21609,36798],"monetized":[22396],"wallets":[67182],"graphicsbuffer":[369,5351,5511,20239],"scenemanager":[19422,33502,40685,41723,52605],"“unordered":[8427],"cubic":[13091,14254,58542,62920,71808,71885],"r19":[1635],"radius":[6294,7755,7964,7985,8155,8197,8263,8332,9032,9880,10009,12727,13024,13643,14711,14948,15025,18611,22189,25557,27392,27572,31688,32372,32776,35252,36599,50612,52135,54331,56865,57404,58517,59312,60692,60802,61836,62459,63236,63901,64005,64129,64229],"derivative":[45501],"bad":[1896,4956,8437,27819,33137,37622,54281],"editorscenemanager":[39014,39210,40682],"hw":[52590],"3840x1440":[52722],"sendmessagetogowithname":[66858],"generalized":[74306,75627],"strange":[27813,34783,37684,39885,49849,50403],"bgn":[53662],"inc":[14778,17803,48223,50599],"►":[24538],"scissor":[72996],"palms":[52169],"ro":[53642],"5c":[23550],"conceals":[39620],"isconnect":[66127],"cputimepresentcalled":[21909],"patrolling":[14718],"m_settingseditor":[49961],"invincibility":[29784],"associate":[4130,4484,10414,18623,19371,28953,30501,38956,39027,48617,48638,57149],"appear":[67,209,356,560,851,1537,1756,1907,2001,2268,2292,2324,2392,2427,2768,3457,3481,3853,3889,3911,3957,4092,4197,4211,4286,4431,4672,5286,6105,6400,6468,6758,6981,7001,7391,8004,8094,8222,8306,8499,9653,10076,10262,10406,11160,11368,11405,11454,11768,12097,12279,12424,12450,12865,13217,13250,13284,13596,13797,13918,14001,14224,14599,14693,14723,17946,18167,18313,18389,18471,18749,18795,18899,19039,19669,21040,21398,21445,21585,22090,22730,23377,23676,23794,24004,24169,24390,24724,24777,24916,25163,25221,25292,25416,25595,25722,25845,26572,26790,26934,26983,27036,27088,27310,27572,27678,27751,28830,28883,29186,29368,29470,29680,31010,31367,31380,31388,31745,31798,31856,31997,32147,32273,32776,33098,33400,33489,33533,33637,33865,34573,34781,34928,35011,35205,35470,35694,35779,35802,36070,36513,37365,37554,37744,38280,38508,38731,38956,39043,39088,39257,39311,39494,41427,41452,41546,41619,41683,41704,41791,41893,42198,42255,42353,42767,43110,43131,43184,43217,43543,45091,47182,48244,48269,48337,48512,48536,48683,48875,49390,49454,49483,49497,49512,49519,49628,49783,50309,50356,50448,50933,51052,51138,51168,51186,51239,51609,52091,52112,52177,52244,52721,53040,53990,54263,54436,54545,54591,54635,54705,54762,57598,59854,61328,62803,63720,64295,65984,66234,66381,67258,67663,67936,68070,68536,68672,69244,69307,69413,70190,70311,70332,70370,70756,70822,70943,71128,71186,71203,71219,71253,71264,71291,71301,71327,71382,71472,71523,71808,71882,71903,72423,73303,73395,73487,73922,74821,74896,75135],"treeviews":[52320],"deepprofiling'":[35866],"wildcards":[41307,70984],"incredibly":[2082,3413,49560],"unsubscription":[6135],"#ffc0cb":[63622],"__circle__":[32505],"preferences#2d":[11560],"ern":[12811],"forged":[66777],"spreads":[13131,13899,26931,30868,31838,32631,33386,33398],"r32_sfloat":[8452],"androidassetpacks":[517],"manipulate":[2263,2387,2419,2459,3721,6024,6152,7319,8317,10074,12975,14672,19448,20538,21525,22203,27491,29894,33456,34770,36793,37571,39354,41187,51394,54550,54658,56730,62592,71982,74166,74358],"cubemaparray":[8648,15164,45081],"countvertex":[36395],"descending":[36041,36187,40957,41545,45531,71110,71216,71459],"buildiosassetbundles":[2779],"rangedrawer":[20988],"qualifier":[8443],"rg8":[8458],"lightseagreen":[63583],"edged":[50529],"bordersize":[19699,61080],"lacks":[3258,10108,23264],"unity_dots_instancing_start":[20253],"assignments":[3522,43227,50641],"verifying":[29770,66581,67921,71798],"skymanager":[9939,22122,26849,36630,37665,71589,71855],"yesexcept":[37961],"xsilsnqwircoj":[69914],"blendshapeexample":[6239],"tight":[177,5984,6068,6155,13707,33346,48682,50900,51236,59517],"differences":[698,1483,1894,4448,6810,6859,7942,8440,9164,10068,13160,18481,20402,20543,22411,23619,24277,24646,25351,25751,27568,28084,28975,29020,30985,31916,35092,37623,38888,39168,39930,41754,41861,42360,43898,43978,44080,44830,45474,45521,45616,46754,48146,52730,57925,59550,60354,62739,63688,63708,64042,65849,66455,71751,72426,72716,75067,76095],"threadsafe":[29154],"particlesystem":[11471,15170,16681,18654,30930,31676,31739,31755,31773,31785,31810,31831,31848,32086,32101,32125,32149,32212,32245,32336,32354,32380,32602,32625,32645,32673,32720,32765,32899,35457,48139],"2bafac87e7f4b9b418d9448d219b01ab":[3095],"mtu":[66156],"facing":[248,360,2990,4183,8317,10012,10439,11414,13384,18745,28352,32280,34779,39533,43630,44164,45784,45869,47708,48231,49496,49546,50368,72337,72511,75255,75969],"argb64":[8454],"selectedframeindexchanged":[35542],"than":[8,73,134,155,250,343,442,478,499,518,567,912,1315,1512,1566,1662,1717,1759,1767,1886,1933,1966,2034,2047,2089,2245,2334,2769,3013,3249,3292,3428,3466,3682,3728,3908,3953,4062,4207,4299,4448,4636,4793,4964,5152,5288,5730,5921,6037,6068,6107,6320,6374,6434,6688,6718,6723,6750,6810,6885,7031,7173,7250,7364,7427,7482,7562,7579,7588,7597,7606,7628,7637,7648,7669,8040,8120,8183,8195,8256,8355,8386,8436,8500,8598,9008,9095,9145,9229,9382,9457,9536,9621,9723,9771,9875,9909,10082,10328,10535,10564,10633,10780,11177,11221,11253,11298,11382,11466,11520,11536,11605,11709,12116,12473,12885,13036,13130,13249,13431,13477,13826,13837,13858,13940,14073,14286,14320,14501,14558,14578,14728,14814,14943,15839,17759,18104,18188,18217,18232,18364,18450,18458,18504,18621,18749,18759,18899,18980,19052,19307,19316,19336,19351,19376,20208,20239,20394,20403,20606,20626,20766,20862,20917,21160,21219,21323,21381,21391,21455,21587,21743,21936,21986,21997,22043,22071,22107,22130,22139,22189,22234,22395,23278,23420,23434,24004,24052,24467,24471,24487,24517,24590,24763,24777,24973,25490,25597,26013,26050,26054,26094,26295,26374,26434,26472,26571,26593,26703,26863,26932,27041,27119,27262,27299,27468,27490,27506,27557,27738,28089,28135,28266,28474,28875,28886,29111,29128,29168,29338,29600,29721,29744,29771,29801,29860,29915,30047,30141,30216,30243,30320,30362,30858,30917,31624,31703,31819,31870,32115,32360,32414,32609,32701,32725,32776,32849,33098,33410,33429,33537,33573,33781,33884,34612,34758,34837,34924,34994,35256,35276,35714,35828,35942,36203,36348,36513,36596,36632,36710,37293,37365,37480,37548,37623,37654,37704,37724,38355,38388,38471,38501,38558,38574,38609,38640,38719,38915,39126,39309,39378,39418,39509,39579,39659,39666,39740,39797,39836,39856,39977,40054,40097,40133,40342,40563,40744,40810,40975,41179,41322,41387,41474,41491,41734,41777,41813,41914,41963,42106,42178,42363,42456,42804,42811,42896,43030,43121,43132,43165,43173,43239,43456,43484,43580,43949,44237,44377,44581,44600,44835,45075,45213,45273,45564,45718,45886,46718,47127,47163,47262,47943,47963,48599,48652,48683,48885,49048,49363,49479,49506,49629,49637,49642,49669,49737,49780,49828,50094,50146,50488,50540,50563,50595,50652,50656,50686,50703,50901,50960,51013,51616,51984,52126,52222,52238,52584,52736,53029,53377,53734,53810,54296,54730,54820,54897,55511,55633,56206,57305,57587,57849,58159,58285,58369,58446,61300,61381,61473,61488,61526,62025,62216,62594,62670,63049,63081,63199,63723,63807,63865,64141,64295,64330,64468,64640,64885,65232,65256,65982,66003,66038,66158,66251,66365,66668,66829,66863,66882,66912,66936,67853,68072,68088,68266,68498,68611,68856,69065,69333,69439,69739,70236,70280,70450,70686,70813,71090,71207,71665,71795,71811,71874,71970,72201,72319,72462,72663,72706,72755,72789,72916,72941,73025,73088,73319,73406,73447,73561,73670,73693,74177,74404,74581,74592,74635,74847,75006,75076,75114,75154,75226,75309,75409,75612,75901,76090,76120],"expiration":[12609,50197,67740],"iet":[16431,16446,31360,31469],"countanimationclip":[36246],"scissors":[9753,26589],"lpprocname":[18549],"validation":[9345,17045,21078,23194,25116,28115,28129,28224,28283,28879,29439,34375,34615,36762,39622,44199,50019,53489,53704,54693,55916,64511,64610,64808,64914,65312,65537,65552,67052,67434,67751,70756,72437,74153,74384,75014,75136,75980],"extremely":[3229,5945,5998,6211,7507,9903,13961,22740,24984,28477,34901,35340,49474,49519,66194],"textureimporters":[48692],"gequal":[43581,45891,47998],"#212121":[63315],"container2":[63209,63868,63899],"profilertimelinerolluparrow":[63470],"truncates":[63049],"volumeshader":[14155],"rigidbodyinterpolation":[38511],"s_unityprofiler":[27960],"qa":[26073],"uninstalling":[511],"serve":[73,1331,3032,4997,37376,40529,67163,67864,68863,69096,73337,73496],"getjoysticknames":[25694,73471],"udim":[50094],"instruct":[1727,10379,10439,11813,12158,12349,23625,27058,34279,34493,34673,35089,36542,38483,41988,42149,49042,50688,66114,73471],"coefficient":[7254,8005,8288,11647,32133,38553],"simplebrgexample":[5363,5507,5745,5783],"ends":[474,2716,8083,8170,10370,11483,12810,14749,18728,20580,21896,23817,27816,27949,30061,31743,31758,32225,32341,32607,33429,35254,36057,37851,39756,43115,48209,54800,57564,62531,62604,66824,68458,73069,73964],"denoise":[37919],"multipartformdatasection":[68378],"fresh":[20116],"lightgray":[63578],"jan":[66779],"neither":[2343,3453,6155,21534,25216,36288,43200,45195,47750,69570,71016,73937],"token":[2539,2562,40695,40776,41295,41315,41408,41426,41437,41447,41464,41481,41502,41533,52778,53100,53445,54091,66577,68644,69987,70184,70383,70967,73677],"spark":[19306,26920,31745,32196],"we’d":[3381],"resembling":[7446,7463],"matrix4x4":[5393,5537,20364,30159,39866,44959,51739,51756,51801],"lockall":[51713],"appopriate":[8621],"borderwidths":[59625],"punctual":[36637,37829],"persistentdatapath":[1448,25961,53886,68121,72474],"lifetimes":[31838,32183,32650,55581],"wildly":[8554],"aud":[53661],"progress":[3537,4480,4578,4704,5269,10768,11104,17296,22001,26360,27108,30090,35630,36620,39399,49731,53255,56912,57469,58031,58579,60877,60977,63127,63351,65031,69533,71181,71268,71296,71432,71495,71509,71814,73436,73566,73702,74011],"fontscale":[825],"blender™":[2188],"2320x720":[52722],"forcefield":[71811],"colorfield":[55418,55511,59613,64467,64693],"distancecutoff":[27399],"no_error":[75898],"reboot":[27628,70150],"el":[53628],"computes":[7243,14960,18224,18611,23041,27263,35129,37622,38374,38408,40819,40862,41243,43893,44023,44369,46505,46574,46782,46824,47667,56110,57817,70211,70236,71848,75794],"rigged":[2002,2063,71764,74895],"setcolor":[23373,45149],"concurrent":[3467,22130,33583,34261,34342,34468,38368,63974],"removable":[12646,71431],"focusevent":[57971,58194],"_cutoff":[43607],"gl_fragdata":[44374],"chained":[8898,41161],"recompresses":[4559,5978],"burst":[5490,5498,5736,5763,16134,16183,16933,21138,26434,26473,31409,31649,31760,31790,32412,32658,33463,38841,70249,74336],"car’s":[31797,32400],"jvm":[987,1655,12007,23485],"m23":[5405,5549,20376],"presetreceiver":[49987],"#7f7f7f":[63323],"dataany":[53765],"wheat":[63651],"curves”":[7168],"hapticcapabilities":[76324],"wsaimagetype":[12443],"setmainobject":[3738,40471],"examplepatch":[53122],"uta_agent_protobuf_connects":[66653],"vegetation":[18404,37838,43200,43619,43654,43919,45634,46797,52488,74907],"paying":[22339,53496,67659],"obb'":[53119],"figuring":[3256,21195],"search_icon":[63476],"verylowresolution":[9974],"implicitly":[3315,9386,13266,26080,27538,27566,34161,40604,44026,44962,62838,71027,75414],"materialid":[5664],"#bababa":[63324],"textureid2":[41028],"grabpos":[44404],"taking":[249,5037,7496,7998,14539,26118,27567,27897,30345,33681,35684,36116,37689,41220,42382,43294,49765,56113,65999,67551,72296,73171],"composited":[23132],"upward":[6756,6959,10394,18234,20717,28997,29044,31838,32528,32631,44834,51915,65999],"iis":[73153,73707],"definition":[1542,1923,1961,1968,2958,3019,3476,3571,3810,4382,4741,4879,5188,5694,6867,6940,7060,7145,7357,7426,7827,8016,8807,9231,9553,9865,11859,13124,13486,13540,13780,13911,15967,16227,17110,17114,17539,17752,18075,18622,18720,18801,18844,18926,19241,19292,19665,20385,20407,20441,21572,21958,22084,22515,23248,23385,24596,26497,26716,28053,28063,28842,28909,29459,29919,30992,31122,33598,34427,34525,34611,34851,36340,37749,38250,38266,38735,40150,40168,40181,40450,40618,41827,41898,41939,41963,42127,42314,42600,42694,42718,42734,42759,42993,43124,43137,43491,43501,43510,43559,43568,43657,43686,43731,43803,44099,44136,44168,44201,44322,44340,44379,44424,44593,44629,44673,44761,44792,45057,45186,45263,45392,45525,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,48940,49158,49169,49175,49281,49313,49495,49673,50059,50077,50144,50197,50362,57723,58104,58417,58776,59033,64164,65867,66487,66946,67387,68543,68630,68777,71045,72037,72803,72809,72816,74010,75478,76096],"cripple":[11546],"accidentally":[3696,5764,5945,10055,20605,22057,25960,32112,39309,42059,51148,63221,68546,71129],"regionmergesize":[76411],"files\\unity\\hub\\editor\\":[21022,28715,71675],"devicetype":[19706],"onboolchangedevent":[55735],"paused":[3690,12221,21319,22043,32180,34041,35916,35984,52046,66823,73072],"basefieldtraits":[56609,61770],"logger":[6097],"doll":[33583],"moverotation":[36303,37622,38575],"revalidated":[73235],"destructibletankeditor":[55287],"rendercubemap":[12358,34292],"terraincollider":[13895,15142,16723],"eyedropper":[20707,50542],"goblin":[2239],"console_entry_info":[63445],"arm's":[2427],"worldviewdir":[47395],"equations":[27569,47093],"+o0bjw1sj6w3yqgx0qmmorbxna3iw":[69944],"max\\nslider":[24403],"floatfields":[56167],"projectname":[72866,74652,74837],"supportsseparatedrendertargetsblend":[19754],"bolt":[40787],"'business":[25346],"hashappended":[3272],"troubleshoot":[12122,22183,26701,28438,52490,66700,73289,73379,73397,73898,75973],"unknown":[395,22436,39614,48067,58378,58861,66793,68541,75532,76308],"instanceidtoobject":[48748],"devops":[5842,31099,70042],"screenpointtoray":[6723,29609],"particles'":[31838],"shaderlab":[124,8811,22889,29557,37971,42018,42028,42195,42331,42358,42385,42595,42661,42687,43565,43652,43683,43726,43799,44095,44131,44163,44197,44319,44337,44375,44421,44589,44623,44658,44670,44754,44783,45043,45136,45174,45260,45385,45516,45600,45839,45849,45928,45958,46485,46577,47155,47950,47983,48021,48987],"accent":[63262],"addonejob":[26387],"popquicksearch":[2544],"physics3d":[11592],"view”":[8427],"signingconfig":[23509],"sigbus":[52555],"prevention":[67758],"istrue":[64543],"unselect":[57234],"an_":[74581],"scrolling":[73,726,2608,23982,39740,39769,39977,53763,54694,59176,74144],"partitions":[52511],"smallcaps":[62033],"changedfrom":[69641],"m_buildsettings":[76399],"dotpeek":[33304],"1em":[62015],"unity_particleinstancedata":[32042],"hmodule":[18549],"gaussian":[36599,38101],"celestial":[38156],"slider_thumb":[61845,63382,64266],"implements":[864,10360,12218,13887,16595,16611,16619,16627,16635,16643,16651,16683,16691,16699,16715,16731,16739,16747,16755,16763,16803,16811,16827,16835,18819,21200,24456,26251,26263,26304,30555,34158,34681,34743,34857,36826,40481,40630,43592,53777,54058,54268,55497,55571,56671,57907,57971,59552,59828,60571,64082,66111,66435,66450,67555,69010,69262,70983,71194,73622,74204,75394],"usefarattenuation":[21497],"architectural":[24598,33533,42812],"richer":[7771,32220,72940],"fourteen":[13131,37714],"sdkmanager":[1665],"physics2dmanager":[11594,33492],"moves":[1886,1996,2044,2293,3814,3858,5160,5284,6152,6756,8188,8526,9155,9215,9793,10357,11296,11434,12751,12937,13239,13267,13341,13580,14680,15020,15856,17133,18155,18224,18616,20240,21575,22301,25169,26807,27323,27337,29391,29616,30880,31798,32196,32230,32414,33503,35950,37405,37479,37690,38463,38516,38558,38588,38611,39240,39291,40030,40120,46347,46831,48526,49709,51975,55987,57565,57859,57984,60232,60365,60495,62848,65230,65254,66006,71628,73263,75107,75601],"cams":[8066],"voipcall":[12661],"src":[479,1001,45278,57190,61179,65693,73559,73994],"strike":[50677],"us":[4257,5990,22347,24244,24792,30110,38437,43603,47454,53070,53602,66393,68611,72191,72787,72884],"should":[65,146,149,238,251,360,560,989,1169,1234,1273,1378,1471,1488,1611,1765,1896,1912,1972,1994,2173,2332,2617,2666,2995,3299,3307,3340,3432,3450,3469,3500,3587,3681,3725,3814,3839,3890,4062,4254,4391,4434,4440,4449,4479,4608,4768,4773,4867,4874,5490,5736,5801,5946,6024,6055,6080,6105,6265,6285,6321,6425,6491,6807,6966,7015,7145,7350,7366,7508,7620,7662,7841,7844,7944,7970,8068,8108,8174,8196,8271,8287,8389,8434,8575,8633,8774,8989,9039,9062,9256,9400,9462,9711,9774,10001,10080,10205,10595,10719,10730,10794,11044,11078,11114,11160,11175,11187,11245,11271,11305,11589,11638,11682,11802,12271,12692,12702,12733,12896,12971,13096,13100,13131,13247,13266,13483,13549,13621,13653,13678,13747,13894,13983,14509,14577,14717,14962,15835,18084,18384,18500,18573,18665,18743,18746,18934,19030,19052,19557,19623,19938,20271,20452,20545,20807,20918,21007,21051,21164,21240,21326,21520,22128,22144,22208,22468,23484,23560,24466,24637,24728,24747,24777,24796,24906,24985,25099,25178,25229,25261,25519,25667,25847,25898,25928,26004,26144,26242,26296,26473,26567,26967,27090,27508,27575,27754,27921,28056,28066,28450,28465,28881,29019,29094,29154,29334,29420,29439,29444,29662,29702,29717,29758,29880,29904,29918,30124,30175,30202,30241,30876,31635,31716,31854,32104,32196,32254,32609,32690,32760,32925,33070,33081,33095,33388,33417,33442,33482,33641,34165,34272,34678,34698,34783,34852,34897,34908,34924,34956,35030,35268,35429,35714,35877,36093,36205,36343,36471,36592,37290,37354,37581,37617,37639,37669,37685,37700,37730,38292,38405,38425,38445,38462,38503,38560,38575,38635,38660,38719,38858,38989,39167,39310,39438,39513,39533,39637,39653,39669,39778,39888,39988,40051,40083,40202,40608,40625,40643,41814,41884,42133,42212,42243,42262,42548,42699,42742,42817,43177,43359,43589,43690,43875,43961,44164,44211,44281,44377,44890,45206,45302,45576,45746,46014,46369,46717,46980,48067,48163,48349,48380,48594,48691,48913,49355,49428,49468,49498,49512,49518,49562,49642,49663,49712,49880,50005,50065,50146,50388,50466,50671,50933,50969,51025,51240,51716,52012,52179,52218,52251,52566,52746,52766,52860,52952,53696,54033,54221,54227,54347,54649,54757,55725,56693,56836,57578,57928,58254,58724,58844,59837,59999,61497,61663,62127,62827,63068,63794,65886,65992,65998,66132,66189,66224,66337,66368,66391,66402,66538,66570,66849,66881,66974,67092,67209,67262,67296,67533,67537,67548,67561,67587,67624,67755,67966,68066,68088,68266,68280,68509,68546,68593,68749,68891,69128,69301,69904,70386,70707,71018,71672,71772,71808,71871,71970,72240,72337,72368,72392,72490,72931,72945,73321,73450,73471,73562,73659,73714,73917,74329,74428,74613,74859,74901,75017,75061,75133,75192,75422,75501,75751,75874,75936,75983,76035,76149],"utf":[9281,19651,34740,68498,70821],"unet":[10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68681],"darkolivegreen":[63537],"unityengine":[1422,2015,2739,2783,2904,3103,3306,3353,3557,3603,3700,3728,4717,5361,5505,5743,5781,6067,6237,6726,7367,8653,8983,9387,10706,10853,11024,11303,13317,14090,14889,15730,16406,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,18368,18544,18852,19387,19463,20046,20131,20464,20772,20870,20926,21256,21917,22194,23363,23782,23885,24069,24181,24288,24484,24800,25505,25636,25700,25770,25930,26040,26306,26389,26631,26728,27343,28044,28474,29423,29602,29837,29864,30014,30063,30103,30155,30524,30895,30951,32782,33107,33849,33910,35455,35528,36098,36249,36404,36644,36765,37082,38722,38821,38993,39360,39868,40213,40457,40631,41223,42068,44612,45984,48387,48710,48919,49050,49221,49292,49917,50293,50325,51431,51622,51969,52322,52604,52766,54517,54925,54983,55078,55178,55250,55323,55380,55430,55528,55589,55678,55757,55831,55935,56001,56135,56229,56287,56354,56407,56485,56544,56605,56749,56816,56994,57214,57421,57610,57647,57871,58001,58237,58603,58759,59028,59376,59602,59785,59921,60141,60167,60234,60441,60522,60578,60655,60687,60856,60896,60996,61210,61636,61764,62138,62356,62512,62690,64000,65173,65823,65869,66060,66114,66262,66472,66929,67191,67281,67297,67391,67700,68092,68287,68327,68354,68387,68443,68579,68733,68815,68876,69047,69525,71677,71962,72164,72232,72541,73096,73300,73528,74068,74430,74746,74753,74870,75079,75245,75520,75739,75951,76040,76127],"voice":[4819,5160,5212,7670,7763,12222,35968,53745],"oncollisionstay":[11612,15851,21175,33491,35749,38605],"maxpoolsize":[33110],"offmeshlink":[15165],"▼":[24540],"audioreverbzone":[7761,15151],"supportsshadows":[19738],"wrote":[35656],"nulls":[11225],"synchronizing":[5005],"tesselate":[43195],"xr_fb_foveation":[74400],"prores":[72727],"there’s":[11314,19141,26294,26495,38370,41921,43281,68533,74090],"logfile":[21035,28684,28722,34214,36498],"protobufforwardputs":[66731],"moccasin":[63606],"producer":[70966],"define":[178,336,562,2256,2959,3032,3538,4203,4279,4793,4881,5026,5094,6101,6344,6392,6473,6498,6756,6943,7003,7204,7217,7368,7764,7844,7983,8169,8373,8421,8505,8592,8765,8871,9004,9116,9138,9169,9269,9299,9440,9537,9653,9729,9765,9870,9986,10260,10364,10533,10702,10791,10878,11187,11256,11272,11295,11319,11354,11527,11598,11844,12083,12768,12874,13238,13347,13427,13557,13675,13747,13788,13860,14170,14244,14593,14717,14859,14985,15816,15831,15884,17944,17976,18059,18344,18377,18652,18909,19020,19238,20097,20252,20735,21221,21382,21388,21457,21565,22075,22203,22343,23542,23852,23940,24052,24299,24518,25183,25219,26031,26144,26672,26860,26931,27187,27334,27490,27654,28109,28166,28271,28483,28864,28893,29113,29422,30678,31668,31763,31815,32012,32367,32372,32705,32726,32855,32910,33595,33642,33784,34158,34424,34522,34587,34687,34797,35011,35414,35476,35506,36855,37382,37556,38463,38477,38531,38552,38586,38647,38770,39612,40173,41686,41704,41876,42059,42255,42312,42467,42682,42954,43002,43326,43489,44002,44199,44363,44436,44687,44755,44798,45044,45149,45176,45386,45488,45839,45929,45967,46597,46721,46926,47657,48250,48339,48420,48641,48692,48884,49486,49511,49560,49644,49712,50013,50288,50409,50437,50512,50521,50629,50726,50881,51186,51228,51582,52967,53291,53713,53879,54036,54513,54672,54735,54795,54886,55244,55317,55597,56040,56115,56130,56335,56402,56530,56600,56691,56744,56880,57125,57299,57331,57340,57628,58035,58320,58454,58497,58585,59552,59867,59991,60211,60649,60890,61010,61333,61627,62008,62194,62859,63086,63707,63717,63981,64078,64310,64955,65132,65687,65738,65793,65873,65928,66004,66119,66941,66965,67006,67036,67072,67161,67247,67570,67646,70191,71026,71217,71873,71970,72064,73168,74016,74293,74596,74789,75390,75503],"listviewsnippet":[64903],"abbreviated":[12449,66002],"animals":[52281],"in_foldout_focus":[63455],"kunityxrinputfeaturetypeaxis2d":[75494],"rotatetowards":[12984],"4gb":[12231,23432],"scrollviewscope":[59692],"instead":[69,138,158,190,258,343,423,434,511,561,580,634,723,807,842,899,1010,1163,1267,1331,1444,1701,1746,1822,1843,1895,1960,2053,2126,2249,2353,2372,2959,3088,3256,3299,3436,3538,3580,3681,3736,3862,3909,4257,4573,4738,4964,5137,5354,5498,6062,6109,6291,6384,6446,6472,7017,7374,7429,7775,7878,8206,8373,8549,8765,9057,9260,9489,9536,9553,9621,9774,9844,9919,10329,10399,10572,10606,10613,10706,10762,10805,11177,11215,11253,11305,11526,11597,11764,12104,12684,12785,12859,12917,13058,13234,13263,13307,13452,13545,13601,13707,13755,13799,13826,13836,13913,13995,14323,14501,14542,14711,14726,14901,16091,17370,17539,17925,18133,18220,18436,18615,18917,19000,19031,19493,20181,20233,20270,20393,20438,20643,20724,21154,21389,21465,21571,21913,22127,22993,23264,23443,24275,24637,24777,25162,25842,25961,25979,26114,26218,26356,26465,26478,26496,26567,26572,26645,26669,26711,26738,26809,26908,27048,27171,27267,27322,27332,28182,28266,28600,29053,29094,29140,29168,29551,29587,29710,29806,30333,30385,30718,30894,31009,31635,31992,32183,32258,32705,32727,32864,33099,33399,33443,33504,33534,33655,33801,34163,34197,34578,35038,35379,35637,35690,35887,36042,36164,36542,36771,36817,37145,37453,37480,37617,37714,38152,38370,38402,38450,38461,38558,38588,38676,38768,38896,39160,39192,39239,39256,39438,39508,39549,39883,40165,40359,40555,41211,41583,41801,41837,41899,41924,41935,42056,42751,42756,42953,43080,43132,43200,43498,43515,43564,43959,44304,44372,44439,44541,44603,44882,45074,45290,45586,45659,45693,46393,46551,46798,46873,47324,47905,48192,48231,48354,48669,48693,48856,48868,49354,49436,49455,49510,49519,49613,49629,49746,49762,49855,50019,50155,50367,50454,50659,50686,50974,50996,51138,51175,51237,51304,51617,51788,52039,52630,53948,54258,54391,54681,54715,55367,55509,55632,56310,56670,57656,57945,58066,58381,58463,58832,59077,59398,59628,60204,60639,60822,60980,61942,61968,62773,63112,63680,63746,63968,64319,64540,64900,65191,65387,65881,66069,66190,66635,66944,67047,67092,67460,67661,68129,68563,68597,68875,69111,69300,69406,69664,69751,69861,70094,70165,70302,70332,70506,70585,70770,70908,70972,71266,71290,71665,71859,72275,72412,72462,72488,72843,72916,72946,73025,73175,73285,73579,73623,73683,73741,73899,74206,74537,74602,74645,74787,74850,74962,75104,75405,75411,75819],"1000ms":[26000],"supersedes":[3229,41373,61473],"picks":[18229,21571,26296,29784,32869,34675,35746,40871,50692,68070,69570],"inspectorelement":[55417,55508,55582,56394,58746,64794,65051],"upon":[2839,6801,7082,7368,7900,8090,8229,8845,9145,9178,9685,12855,14824,15867,21124,26374,26784,27820,35008,38497,38661,39472,39695,40208,40555,51009,54556,55549,65051,66258,66465,67151,67182,67549,67609,68520,68672,69330,69436,74333,75226,76037],"rg32":[8457],"tables":[18676,35684,41540,52240,57610,61519,63230,66958,68763],"yesstored":[37992],"\\users\\user1\\mykeys\\privatekey":[70118],"customstylesresolved":[60943,61049],"flux":[22165],"#2f4f4f":[63544],"preserve":[4515,4853,7490,12401,14288,14815,18448,21460,25210,28465,34811,36611,39598,40363,48225,48349,50454,50672,52320,66487,68547,70572,73406,74219,75683],"coreunityassetpacksdownloaded":[518],"unpack":[3872,54594,68531,69901,70807],"stairs":[8203],"regeneration":[60619,63108],"_t#number":[72014],"armeshmanager":[75405],"analyticsnote":[53734],"focus_mixed":[63483],"kunityxrinputfeatureusageprimarybutton":[75654],"maincolor":[45097],"3px":[63236],"perceives":[24490],"midnightblue":[63603],"demos":[2065,5155,17118,24598],"verbatim":[8490,49738],"fifo":[29161],"illustrate":[20694,25523,28511,29664,33406,33902,34956,42691,46248,52013,66117],"'texture":[50051,65990],"branches'":[41914],"navmeshagent":[15168],"present":[1488,4628,4810,5031,6045,7127,7379,9261,9784,10510,11520,11631,12586,12840,13457,13818,13915,14488,19655,20194,20231,20810,21569,21898,22106,23525,24276,24489,24671,25096,25229,25328,25928,25999,26783,28509,29319,29420,32307,34575,35089,35268,35691,35888,36068,36454,37631,38426,38886,39796,44056,45195,45254,45588,49455,49530,50056,50600,52176,52536,59055,61658,64973,64986,65051,65512,66878,67050,67483,68551,69022,69275,70810,71018,71944,72788,74214,74612,75010],"unregisterframeworklistener":[66854],"provisioning_profile_specifier":[49789],"author":[2745,6934,17591,17752,26960,32704,42104,45302,50648,68951,69196,70829,71130,72115,72135,72492,74307],"examplebutton":[75678],"asarray":[26118,26214],"batchid":[5368,5512,5727],"gl_amd_vertex_shader_layer":[43479],"adjustment":[1962,5122,10341,21164,24517,43970,58357,58403,75169],"m_finalgathergradientthreshold":[76389],"unityxrinputfeatureindex":[75530],"ongroupatlases":[48692],"dot":[6293,12116,12746,13747,45291,45583,46219,46561,47505,72332],"processcallback":[4939],"searchcontext":[2503,2557,2632],"getcount":[6174],"translation":[1706,1937,5224,7025,7324,8487,8569,11539,13566,22548,29130,29903,41849,51070,60219,62198],"inspection":[28378],"interface":[86,682,1149,1180,1402,1592,1929,2064,3457,4729,4766,4825,4869,5181,6037,6198,6944,9555,9622,9977,11172,11221,12653,17312,17723,18115,18666,18795,20098,20788,20863,21832,21837,22032,22106,22146,22486,23447,24276,24467,25035,25333,25731,26118,26263,26287,26629,26722,27073,27750,27826,27913,27939,28051,28062,28436,28589,29186,29420,29923,30001,30061,30168,30506,30564,31595,33763,34158,34633,34744,35047,36432,36588,36846,37247,37339,37603,38840,38989,39899,40159,43321,48690,49285,49778,49886,50939,52082,52176,52553,54008,54268,54396,54744,54771,55497,55570,55727,56671,57286,57908,57970,59928,61333,64653,65146,65698,65738,65896,65956,66038,66180,66336,66373,67069,67280,67293,67555,67561,67572,68024,68045,68087,68378,68460,68827,69072,69338,69444,70175,70788,70982,71121,71895,71959,72795,73276,73499,73917,74355,75255,75321,75390,75407,75474,75871,75918,75988],"hdrp’s":[6829],"media":[3298,4140,4177,4286,4356,4468,5183,10781,12666,22553,29766,72675,73349],"historyan":[53760],"excluded":[4707,6760,7404,8488,13144,22675,26077,29921,35218,40253,42934,52608,66503,71041],"irrelevant":[20420],"\\":[1129,3975,12811,19521,24483,27954,30909,40835,41215,41337,41551,41629,44683,66464,66612,70135,70206,70523,70773],"replacementtag":[45619],"zwrite":[10152,21747,32944,42680,43642,44081,48021],"getlastgputime":[76013],"environments":[67,2997,3457,6149,6843,7913,9094,18454,19647,21629,22534,23598,30879,31621,34668,34868,36590,37334,37526,39856,69898,70424,74169,74907,75215],"isavailable":[27952,51595],"peers":[22962,66104],"developers'":[66598],"sequesterrsrc":[28299],"r89":[701],"internetclientserver":[12642,72006],"tightrotateenabledspritepackerpolicy":[48688],"sortingposition":[5669],"audioplayableoutput":[34011],"subversion":[11045,48097],"spaces":[21039,23530,23602,25462,27330,27508,35947,40325,44114,45167,49841,50347,51236,58456,65490,69969,70111,72788,73985],"unity_virtual_texturing":[50015],"auag9ih5ylha5fcxxh4cdrc0kqzws72yl+2qp":[69936],"hscrollbarvalue":[23989],"registerframeworklistener":[66853],"retain":[8131,8783,10427,12014,23198,30035,33286,39149,39320,39406,46766,50008,58066,63221,68072,76195],"forget":[5954,14001,30124,30672,34640,52604,53996,63683,75980],"npmtoken":[70032],"pointercancelevent":[60764],"figures":[4078,39513,43689,46722,52013],"arm64":[628,919,11844,12247,50195,72213],"transcutdiffuse":[42846],"c":[170,239,1055,1271,1285,1302,1398,1846,2616,2728,3542,3910,3954,4035,4149,4174,4225,4874,5994,6537,6705,7005,7831,8691,9805,10419,10618,11405,12163,12428,12870,13377,14224,15717,18021,18119,18263,18358,19449,19628,21022,21402,21449,21607,21978,23136,23316,23523,25459,26040,27893,27939,28273,28298,28632,28715,29515,29895,29930,30000,30097,31908,33052,33466,33597,34545,34655,34693,35176,35617,36472,38975,38988,39155,39205,39327,40336,40591,41426,41717,43217,43882,44314,44974,45291,45780,46478,46562,46864,47361,48061,48244,48269,49395,49762,52023,52504,52563,52694,55021,57843,58288,61387,65523,66354,66450,66700,66845,66896,66901,68553,68951,69196,69950,70111,70135,70198,70272,70420,70759,70773,71130,71217,71304,71408,71521,71675,71899,72152,72303,73296,73578,73639,74093,74519,74597,75134,75267,75750,75921,75995],"__autocorrected__":[39614],"yellowgreen":[63655],"kunityxrinputdevicecharacteristicstrackingreference":[75590],"getnextmeshtogenerate":[75856],"iterated":[2667],"unityaudioeffectdefinitionflags_isspatializer":[5188],"zoom":[2440,6737,7073,7183,9216,10512,12294,18506,20070,20558,22043,22643,36057,37675,39248,39724,48510,48683,51380,54454,54499,64179],"5mb":[29276],"\\path\\to\\unity\\unity":[2729],"started":[52,239,654,666,954,1599,1808,2938,3511,4503,4879,5689,5816,6850,10207,10842,11117,11160,11202,11338,14569,16168,17370,17474,17994,18429,18569,19119,19275,19648,22323,24310,24696,25741,25972,26104,27085,27096,29571,29595,30176,32849,35369,35625,35903,36433,37236,38681,39545,41843,41941,47369,49145,51000,51953,52863,52918,53495,54290,54494,54745,58581,58650,59049,60196,61476,61591,61971,61993,65761,66221,66337,66351,66451,66701,66802,66969,67021,67232,67660,67848,68048,72090,72096,72364,72462,72790,72900,72943,74122,74506,74887,75262],"studio":[478,555,576,580,711,777,906,944,962,1107,1230,1255,1358,1665,1746,1841,1865,4876,6946,7369,11403,12585,16375,16389,18366,19649,21631,22613,24601,28374,30841,31482,33518,33842,34638,35087,38285,38680,40658,44302,47193,50209,52477,53584,66802,66877,67858,71661,71999,72007,72011,72103,72171,72223,72829,72842,73290,73898,74141,74498,74516,74628,74773,74808,74814,74831,74860],"loud":[1920,7514,7785],"inflates":[23103],"1e1":[21681],"premultiply":[74208],"crossed":[20105],"defense":[5920],"sheared":[10593,14712],"rowheight":[52375],"ydrive":[8532],"transcutbumpedspecular":[42841],"deletion":[3867,4201,28967,29237,33381,72454],"lowers":[12198,13412,20460,21509,36538,50537,51025],"single_line":[59696,63244,64896,65187],"exterior":[49426,50552],"memoryurl":[74024,74108],"_radius":[64288],"declined":[4064,4253],"untagged":[21654,50310,76430],"#x74":[66770],"collected":[4665,17206,23022,29664,30555,30901,36225,36493,53494,53713,66205,66929],"queried":[3493,8409,41375,45623,76071],"cloneable":[39003,39070,39191],"2fa":[4239],"freed":[33420,35139],"boxcast":[35311],"#686868":[63370],"value1":[1797,44802,45980,52437],"dbuffer":[38147],"portal’s":[4160],"linejoin":[58498],"fixedtimestep":[52042],"jerky":[27813,29645,38563,38593],"unityrenderingevent":[29980],"particlemeshessurface":[31876],"offered":[18483,37730],"maxcount":[23270],"0h":[44247],"objects'":[15866,21168,50936],"codetitle":[57626],"cavern":[7752],"xdrive":[8528],"hashcode":[1426],"inflate":[10602],"opengl’s":[44873],"__single":[39624],"_backgroundtexture":[44394],"concerned":[3758,6439,47246,49644,50678,60204,68212],"company":[742,796,1172,11673,12597,18626,18748,27801,30385,30475,40789,53164,53382,54102,70843,70887,73928],"exaggerated":[29485,49496,49555],"removemanipulator":[57549,60324],"x509":[52894,53831],"min12int":[8475],"9e91":[67470],"gurantee":[74615],"shadowmasks":[6837,38368],"dramatically":[2131],"recursively":[36695,36956,37019,52641,55633,70236],"addproduct":[53968,67007,67035,67203,67249,67304,67412],"overdrawn":[32240],"contributing":[22740,26790],"underground":[66993],"generatorinitializationcontext":[38710],"identitiesonly":[70074,70140],"usually":[67,1007,1621,1765,1893,2745,3489,3666,5038,6055,6129,6439,6774,6792,6811,7579,7929,8487,9060,9136,9279,9982,10079,10352,10489,10733,11298,11312,11508,11613,11738,13093,13249,13898,14348,14699,14965,18076,18317,18362,18508,18718,18756,19628,20155,21536,21572,22085,22139,22234,22868,24923,25068,25292,25849,26138,26360,26477,26908,26986,27681,27738,28878,29154,29340,29391,29721,29776,29784,29879,30349,30664,31010,33502,34631,34670,35691,35892,36507,36597,36678,37668,37704,38242,38369,38510,38661,38851,39096,39765,41491,41807,42010,42256,42311,42596,43131,43997,44053,44366,45129,45569,45601,45720,46224,47307,48170,48227,49038,49395,49423,49495,49614,49848,52009,52218,52576,54713,62109,63065,64325,65952,66197,66251,67179,70761,70776,71768,71808,72733,72931,73308,74308,75645],"providers":[2463,2599,2626,2692,4027,17220,17818,35174,36234,40694,41160,41313,41426,41446,41462,41490,41610,48499,68797,69027,69280,70567,70949,75024,75134,75251,75344,75395,75422,75587,75874,75960,76089,76166],"1+aepvulkanmetal":[45481],"success”":[53093],"addcomponent":[9348,14896,21261,58831,72546],"like":[69,248,477,881,1021,1312,1706,1957,1995,2115,2197,2225,2242,2408,2418,2423,2839,2995,3262,3466,3541,3574,3740,3870,3888,3906,3952,4149,4217,4299,4387,4577,4713,4841,4876,5059,5138,5184,5291,5350,5587,5727,5805,5882,6096,6233,6265,6290,6322,6758,7025,7252,7374,7446,7463,7506,7615,7810,7866,8066,8122,8208,8244,8558,8598,8761,8786,8982,9155,9225,9261,9322,9376,9588,9675,9682,9772,10010,10082,10345,10595,10835,11016,11221,11244,11274,11297,11508,11630,12105,12646,12827,12888,13042,13120,13193,13242,13308,13364,13645,13665,13684,13972,14009,14215,14256,14320,14581,14712,14764,14969,15000,15024,15711,15835,15998,16510,17642,18155,18256,18357,18508,18568,18717,18764,18818,18828,18897,19408,19995,20089,20261,20419,20636,20777,20863,21023,21154,21575,21659,21997,22189,22301,23460,23580,23779,24055,24215,24388,24461,24519,24776,24906,25044,25178,25351,25529,25624,26117,26376,26442,26496,26560,26787,26922,27081,27187,27470,27491,27506,28194,28426,28625,29060,29092,29398,29662,29861,29907,30010,30038,30063,30098,30179,30209,30306,30384,30718,31599,31619,31662,32073,32196,32264,32609,32650,32701,33065,33087,33605,33672,34188,34624,34638,34645,34712,34924,34943,35089,35694,35794,35958,36034,36201,36831,36984,37227,37401,37548,37668,37687,37731,38402,38494,38548,38576,38624,38661,38683,38828,39098,39355,39603,39929,40061,40500,40623,40748,40916,41166,41766,41997,42352,42698,42738,42792,42812,42876,43302,43971,44231,44451,44802,44832,44981,45145,45195,45237,45267,45601,45620,45668,45868,45945,45980,46156,46550,46754,47067,48163,48170,48336,48615,48693,48885,49184,49357,49430,49509,49517,49562,49577,49609,49639,49642,49837,50065,50150,50411,50537,50579,50630,50941,51038,51601,51790,51812,51966,52182,52242,52488,52528,52558,52721,53773,54120,54347,54469,54560,54578,54666,54692,54712,54861,55869,57156,57884,58393,58706,58903,59552,59838,59999,60508,60775,61343,61450,61555,61608,61747,62016,62591,62671,62813,63854,63872,63886,63930,63951,64007,64020,64640,64777,64973,64986,65133,65368,65501,65512,65998,66038,66043,66193,66222,66470,66600,66903,66928,67180,67249,67948,68245,69333,69439,69740,69862,70380,70643,70869,71029,71176,71283,71387,71681,71751,71883,71899,72229,72319,72460,72773,72799,72916,72946,73292,73416,73486,73501,73613,73672,73953,74206,74311,74428,74553,74828,74895,75068,75453,75485,75740,76095],"df24":[38425],"innovation":[54122],"symbolicate":[936,1748],"stop":[220,1384,1653,2102,2295,3696,3966,4436,4865,5197,6980,7307,8045,8188,8569,9307,9704,10708,11176,11452,12762,13240,13283,13300,13482,13692,14850,18309,21524,22225,28394,30867,31857,32174,32849,33082,33399,33421,33458,34169,34983,35897,36334,36485,36623,38609,38648,38660,39774,41375,42191,52046,55118,55725,57595,57943,60518,62115,66234,66350,66690,68686,71270,72048,72243,73071,73197,75017,75508,76035],"slices":[1672,2855,3502,14009,14137,27457,33415,46321],"oldlace":[63609],"children":[2299,2415,5104,7937,8104,8128,9386,20648,21475,22226,22347,24753,24780,28952,29022,29420,33476,34041,35067,35697,38450,38640,39127,39314,39678,39790,40088,51124,52243,54257,54552,54757,54835,54903,55133,56832,57592,57634,57961,58090,59048,59594,59830,62804,63139,63846,64034,64368,65736,71563,75109],"unused":[3441,4218,5719,7870,8347,9507,12426,15697,18516,20211,20343,20640,25066,27024,28463,30861,33383,33449,34487,34902,35126,37671,38361,39928,40363,40522,41791,42954,45017,47090,51027,51094,66456,66462,68540,73392,73620,75551,76087],"unzip":[58675],"rayleigh":[42769],"readers":[12671,33446],"responses":[4070,49555,49632,68202,68458,73210,73674],"tennis":[13645],"increases":[1556,2131,3470,4845,5771,6120,6762,6803,8834,9883,9948,9998,10651,10737,12407,12881,13220,13477,13939,14076,17984,18226,18988,20117,20209,21294,22814,24947,25292,26096,26714,26886,26922,26991,27118,27575,27610,29212,29440,29906,30354,30861,32609,32689,32775,33266,33476,36045,36591,37657,38870,39159,39240,39994,42364,43121,44833,48660,50002,50498,50651,50673,51047,52010,60204,62735,65233,65257,66668,68928,69171,71062,72733,73203,73320,74388],"scalable":[88,1556,14463,20766,20862,20917,21381,37378,38249,38265,52238,54152,74047],"getdesc":[68881,69117],"editors":[1602,20556,20701,20765,22203,25744,28373,35087,38877,38932,39977,44198,45398,50412,51552,51608,51816,58997,66589,70761,71105,72093,72832],"polymorphism":[36782,39886],"crinkly":[52139],"purchasing":[3974,6884,17042,17070,30503,31130,31427,53989,66802,66964,67018,67073,67191,67229,67281,67298,67392,67641,67759,67840,70822],"pingpong":[10479],"“single":[68775],"unityclassregistration":[73405],"imguimodule":[16662,30959],"description":[67,428,551,570,650,656,663,868,883,940,956,995,1025,1036,1097,1154,1182,1317,1394,1647,1752,1805,1813,1847,1856,2555,2646,2743,2758,3015,3839,3954,3999,4034,4059,4206,4249,4356,4400,4505,4723,4745,4775,5187,5283,5343,5444,5588,5813,6466,6490,6776,7165,7363,7428,7773,8322,9417,10228,10494,10628,10807,11081,11405,11700,12038,12283,12314,12437,12722,12772,12878,13474,13547,13630,13703,13806,13825,13910,14372,14472,14618,14840,15811,15820,15886,15901,15934,15949,15966,15981,15997,16004,16019,16035,16042,16059,16074,16090,16105,16119,16136,16150,16167,16182,16211,16226,16240,16255,16274,16329,16344,16363,16377,16391,16405,16422,16437,16452,16469,16486,16509,16526,16541,16563,16578,16594,16602,16610,16618,16626,16634,16642,16650,16658,16666,16674,16682,16690,16698,16706,16714,16722,16730,16738,16746,16754,16762,16770,16778,16786,16794,16802,16810,16818,16826,16834,16842,16849,16868,16882,16918,16932,16968,16983,16999,17014,17029,17044,17061,17076,17091,17109,17117,17125,17132,17151,17168,17184,17205,17219,17239,17253,17267,17281,17295,17311,17325,17341,17355,17369,17383,17397,17411,17423,17436,17451,17473,17487,17505,17523,17538,17545,17560,17575,17590,17605,17626,17641,17660,17677,17692,17707,17722,17743,17751,17758,17772,17787,17802,17817,17834,17849,17864,17879,17894,17911,17961,18042,18331,18396,18406,18415,18469,18666,18713,18792,18848,19121,19173,19276,19445,19671,20067,20092,20274,21145,21391,21562,21695,21838,21894,21982,23005,23253,23495,23528,23534,24982,25087,25111,25432,25675,25689,25718,25757,25820,25829,25974,26063,26101,26272,26549,26583,26652,26696,27672,27831,27944,28076,28085,28120,28256,28831,29010,29287,29409,29474,29589,29739,29778,29854,29883,30239,30827,31596,31611,31640,32770,33625,33650,33751,33886,34241,34324,34448,34647,34858,35267,35370,35626,35761,35816,35904,35928,35970,36024,36121,36175,36208,36312,36357,36436,36477,36587,36700,36740,37304,37316,37476,37493,37611,38259,38327,38521,38534,38644,39030,39079,39232,39270,39380,39448,39465,39548,39660,39670,39728,40095,40517,40695,40785,40833,41203,41308,41340,41464,41502,41544,41721,41762,42426,42701,42722,42744,42764,43004,43088,43098,43874,45014,45433,45475,48179,48248,48273,48355,48631,48877,48895,49488,49846,50350,50364,50418,50539,50705,50720,50749,50763,50776,50789,50802,50815,50828,50841,50867,51753,51852,52084,52700,52708,52759,52780,52972,53278,54037,54533,54602,54742,55643,55717,55809,55907,56611,57296,57562,57619,57973,58019,58029,58196,58267,58279,58437,59542,59721,59738,59817,60159,60216,60352,60361,60498,60554,60766,61520,61902,61952,61977,61991,62006,62057,62117,62196,62485,62601,62844,63124,63233,63705,64027,64239,64311,64374,64766,64823,65356,65688,65725,65759,66184,66339,66453,66544,66649,66846,67003,67088,67167,67243,67589,67723,67882,67916,69706,69744,69846,70022,70312,70804,70873,70941,71103,71135,71188,71301,71439,71460,71624,71983,71996,72066,72078,72098,72104,72111,72120,72127,72414,72669,72822,72865,73047,73148,73242,73318,73362,73473,73594,73927,74123,74154,74265,74499,74507,74607,74730,74766,74822,74835,74884,75137,75227,75281,75316,75370,75400,75626,75763,75977,76085,76159],"variable’s":[32065],"attaching":[2217,4400,22015,32922,34942,36543,39524,49650,52178,68309,74535],"mossyrock":[18770],"poison":[41469],"coroutines":[10707,15712,16238,18253,19041,19657,21363,25992,31089,31420,33490,35705,73683],"orscriptablerenderpass":[38199],"customendswith":[6008],"devicestate_setbonevalue":[75562],"selfillumbumpedspecular":[42539],"emissioncolor":[20332],"exampleshader":[42626,44710,46003],"getendproperty":[55113],"unityxrhand":[75497],"v2f_customrendertexture":[8907],"grad":[62201],"comprehensively":[31727],"setboundingspheres":[18575],"gameswitchlisteditor":[55193],"#800000":[63593],"subtracting":[72306],"xp":[74663],"observing":[14574,27724,51010,72047],"conveyor":[13829,21151],"unitydeferredlibrary":[47115],"exec":[40772,40824,41487],"fragmentation":[3500,29183,33434,36199],"refer":[5,124,262,349,408,423,475,494,525,550,583,631,635,693,726,734,792,839,890,899,952,964,1040,1088,1096,1355,1484,1489,1518,1602,1708,2956,2973,3573,4770,4773,4881,5184,6920,7970,8169,8271,8389,8592,8765,9021,9039,9164,9324,9528,9625,9756,11526,11700,12314,12437,12733,13133,13160,13582,13622,13699,13704,13770,13789,13884,14471,14509,14860,15017,18623,18720,18844,19013,19085,19108,19152,19173,19275,19316,19336,19352,19364,19618,20101,21024,22170,22689,23482,25673,25734,25744,25816,25828,25837,25876,26083,26577,26582,26703,27643,27673,28096,28144,28166,28252,28263,28282,28318,28356,28433,28605,28829,29566,29918,30516,30847,31366,31386,32903,33067,33104,33383,33664,33838,33880,34324,34466,34655,34749,35266,35469,35804,36977,37234,38253,38533,38547,38582,38630,38681,39312,40485,40557,41096,41178,41384,43139,44073,47083,48302,48357,48379,48502,48529,48866,49720,50178,50305,50599,51120,51133,51174,51182,51204,51232,51257,51357,51591,51806,51820,51846,51851,52239,52493,52610,52756,54500,54601,54840,55651,57494,58598,59840,64512,64564,64587,64611,64767,64809,64842,64860,64907,64915,65025,65313,65381,65532,65538,65553,65568,65588,65608,65628,65649,66405,66543,66808,66920,66967,67022,67686,67849,67979,68054,68312,69347,69444,69663,69765,69805,69865,69893,69996,70098,70167,70177,70275,70770,70806,71412,71998,72008,72063,72093,72101,72110,72119,72132,72136,72148,72172,72191,72225,72282,72327,72675,72721,72871,72914,72974,73024,73163,73261,73302,73364,73429,73558,73608,73639,73675,73926,74051,74122,74222,74408,74506,74724,74753,74760,74806,74808,74849,74863,75018,75135,75192,75223,75303],"activation":[213,4865,19618,21038,23445,26684,26694,28605,28670,28714,28751,28761,52495,60220,74340,75260,75944,75945],"dependent":[385,562,1274,3306,6425,6473,7385,8229,8899,9145,9685,14392,18322,18501,18525,18733,19238,19557,20050,24276,24968,25763,26264,26374,26477,27056,28166,33440,34424,34522,34609,36005,36599,38354,38384,39451,39966,40208,46515,49450,49756,50342,50421,50453,51113,52095,54736,56674,66840,67154,67570,67707,68686,69301,69407,71105,71392,72647,73205,74789,75441,75607,76217],"itunes":[2834,25970,66536,67023,67110,67516],"adaption":[74190],"widths":[8197,39574,54273],"looppointreached":[14913],"stringtohash":[6064,24820,29105],"jpsiqvto9sa5kfhgdpia2qkvltjhplwxkiskityfcgydf3qpkkyk53ltxdgekvyp":[69932],"friends":[17339,30058,31424],"gravitational":[8287,38497],"buying":[3977,36713],"presents":[21134,21975,49593,57124,64528],"encodeviewnormalstereo":[43888],"threadpriority":[6139],"uielementsschema":[58604,61276,61638,62429,62549],"smoothness":[8625,12881,13911,20570,21533,23296,29493,31880,33014,37994,38360,45197,46738,49449,49454,49465,49505,49599,49606,49628,71866,72758],"pngsearches":[40756],"imagedownloader":[68139],"reached":[222,1915,2180,7077,7307,14734,26054,28464,32171,53497,70761],"generic":[1415,2188,2894,3394,5258,5961,6122,6397,7018,7169,9137,9773,12662,13995,18055,19197,19457,20463,21565,22063,22530,24646,24804,25215,26092,27344,27950,28545,29114,29134,29421,29731,29743,29934,30586,32784,33106,34190,35171,36643,36916,37082,37227,38675,38896,40562,41229,42255,42804,43877,48316,48712,49388,50401,51169,51430,52321,52551,53423,53703,53909,53992,55077,55177,55719,55932,56670,56886,56992,57319,57491,57798,58426,58859,59025,59416,59920,60686,62692,66940,68390,69333,69439,69575,71760,73382,74067,74213,74432,75583,75950,76043,76161],"#505050":[63300],"shapecasts":[36309],"textiles":[33759],"shurikentogglefocused":[63482],"dau":[22324,53499],"c2x":[5387,5531,20358],"unity_dots_instanced_metadata_name":[20279],"navigationeventbase":[60496],"d_winbtn_win_close":[63499],"shutter":[22770],"swedish":[53650],"_treeinstancecolor":[50596],"tutorial":[2998,3429,3987,4313,4734,6057,6807,6930,14944,15891,16420,16435,18429,25151,31267,31469,35964,36281,37365,37560,37644,38255,40615,47246,53254,58998,74417],"interreflections":[246],"background_filename":[73950],"stores'":[67154],"deltaposition":[29592,60787],"ondeselect":[49900],"unity_sample_tex2d_sampler":[44008,45235],"processorcount":[19709],"acting":[3695,10850,26572,26593,38497,49444,66356,67581,72299],"warranty":[18734,50342],"searchtool":[2502],"assemblyupdater":[2701],"caches":[1468,3291,3731,25961,31708,35127,35932,36570,42186,50001,50317,52597,69705,69766,69792,70432,73208],"recreation":[30900],"systems":[391,1979,2896,3587,3865,4776,5838,5964,6120,6685,6799,8081,8647,9260,9341,9718,9908,10003,10107,10937,11459,11473,12409,12515,14009,15020,15711,16256,16275,18562,19161,20392,20402,21089,22141,22675,23597,24098,24951,25341,25347,25423,25526,25738,25865,25904,26046,26294,26479,27072,27648,27671,29750,31660,31864,32078,32114,32167,32273,32650,32701,32847,32916,33475,33757,34190,34645,35746,35881,36029,36127,36235,37424,37569,37639,38877,39309,40817,44850,45726,48067,48164,49440,49710,50171,50941,51067,51960,52951,53840,54043,54105,56096,58127,61500,61990,62801,65730,65898,65957,66564,66925,67154,68915,69156,70775,71818,72377,72497,72759,72825,75021,75290,75393,76100],"reinitializing":[7765],"pbuffers":[75897],"k_closedstatename":[24817],"paleturquoise":[63617],"unityaudioeffect_processcallback":[4906],"moment":[2178,7782,10368,14749,32260,34101,37401,39159,54492,57840,71592],"customgridbrush":[51434,51613],"outgoing":[11016,20569,66721,72444,73175],"m_gpuframetime":[20480],"modulation":[4883,7442,7459,73061],"drawcommandcount":[5652],"marketing":[4029,4140,4166,4261,4357,5820,71149],"illumination__":[10008],"terminals":[63722],"androidnativeplugins":[1019],"\\\\github\\\\my_package_folder":[70773],"getanimationclip":[34129],"createroadtile":[51698],"clothmodule":[16638,30956],"deploying":[11176,17092,19624,35874,49737,53868,73025,73308,73390,74808],"16b":[29188],"droppable":[57559],"displayed":[729,2272,2395,3065,3728,3956,4041,4902,5949,6756,8085,9281,9602,9781,10118,10348,10651,11079,11161,11296,13815,14699,18131,18267,20105,21382,22186,22271,22351,23808,23912,24326,24461,24517,25392,26844,30423,32705,35022,35364,36069,36205,36303,36625,36712,37097,38738,39357,39508,39764,40045,47241,48055,48560,48623,49535,49817,51189,51964,52475,53222,53304,53826,53993,54419,54734,55552,56523,57124,57626,59498,62213,62859,64177,64246,64752,65951,65981,68551,68795,69397,69501,71204,71430,71534,71627,72242,72500,72783,72788,75004,75145],"orients":[9859,14478,18166],"requestuserpermission":[1507],"labelfield":[20827,20999,49981,59667],"net_4_6":[33832],"geometries":[10135,10378,13799,20402],"smartly":[6128],"nonetheless":[6833,26059],"appointments":[12665],"meshdataallocator_setuserdata":[75827],"defaultspeakermode’s":[4751],"starthost":[66256],"elephant":[52284],"“setpass":[36400],"gicache":[22128,35130],"mechanic":[13067,19005],"meshdataallocator_setmesh":[75820],"backgrounds":[12290,61201],"isbn":[53441],"bend":[15020,22948,37399,50584,52235],"qwerty":[9772],"surveillance":[8096],"r16_sint":[8474],"buildreport":[6703,15274,24480,68871,69106],"static":[1052,1284,1301,1404,2468,2521,2557,2657,2787,3432,3530,3607,3704,3745,3797,5067,5338,6008,6063,6209,6331,6794,6805,6914,7924,8065,8656,9340,9957,10090,10122,10454,10994,11221,11320,11336,11509,11617,11786,12293,12347,12933,13127,13253,14093,15841,17925,18547,18613,19390,19516,20116,20379,20436,20886,21031,22145,22301,23415,24194,24846,24993,25934,25990,26116,26151,26259,26294,26732,26788,26807,26953,27196,27229,27266,27330,27389,27487,27752,27891,27960,28269,28464,29435,29701,29937,30027,30170,30179,30331,30377,30598,31634,31703,33378,33690,34163,34276,34490,34677,34690,34936,35058,35290,35418,35486,35572,36319,36371,36524,37005,37618,37653,37723,37831,38331,38402,38474,38538,38548,38576,38623,38702,38820,39214,39859,40377,40566,40767,41342,41517,41577,41783,41790,41880,43007,43022,44510,48402,48725,49491,49667,49708,49758,49908,50495,50962,51453,51698,52341,52615,52725,55018,55387,55682,55762,55835,55939,56005,56116,56160,56236,56294,56362,56458,56495,56549,56725,56758,56821,57006,57245,57461,58241,58300,58373,58646,58652,59036,59958,60146,60446,60582,60734,60861,60913,61013,61214,61697,61773,62142,62194,62365,62519,62697,65828,66038,66465,66938,68594,68842,68966,69087,69389,69493,69527,71716,71847,72031,72160,72203,72510,72928,73321,73406,73422,73532,73660,73811,74076,74141,74316,74594,75714,75937,76001,76145],"drawcommandpickinginstanceids":[5651],"serializedversion":[3267,19807],"3dof":[76148],"lateupdatemanager":[33485],"intslider":[20993,59665],"get_value":[6178],"virus":[52530],"columns":[6297,6314,14021,14081,14262,23951,25072,26719,35381,35641,35771,36000,36190,36446,36718,39547,41544,48373,51156,51328,51886,52348,57625,59908,64973,64986],"navmesh":[16106,22311,29312,29886,50514,69382,69486,74353],"transfer_shadow_caster_normaloffset":[47797],"font_small_size":[63240],"myprofilercreatemarkercallback":[28012],"webgl_depth_texture":[44057],"yeslinear":[38136],"gettangents":[311],"computer's":[5168,7619,10429,18949,23428,25165,36573],"hidedefaultinstances":[51615],"enablerotation":[48773],"wr2":[68251],"capitalized":[53350],"m_serializedsettings":[49962],"astronaut":[2002],"sensors":[73489,76095],"gitlab":[18818,70483,70650],"addsource":[38709],"#313131":[63344],"xrpointcloudsubsystem":[74382],"product_id":[53601,67473],"focusin":[58204],"optionally":[3351,4164,4177,4281,4525,4762,5287,6285,8421,8982,9400,12889,13130,18061,19667,20587,20753,22073,24740,27058,28056,35807,39489,39526,39778,43571,45284,45398,46826,48677,49201,49840,50941,54225,65945,66598,67548,68280,70728,71861,72810,73667,74325],"nativeappendonlylist":[26137],"goal":[11305,19130,24769,25650,66555,68458],"encoder":[74198],"releasing":[2604,26042,53199,55670,70756,70910],"demonstrate":[200,2241,3009,4312,6510,12846,13773,19057,24244,26670,27011,29784,34100,34842,38740,41273,44389,47176,48977,49915,52349,55749,56123,57642,60225,63143,65684,66819,66843,69623,72974,73908],"graphical":[6122,7940,8078,8142,9063,12865,14962,15015,17118,21956,22061,22235,22557,25034,27055,31661,33513,38347,40643,48364,64745,65738,65973],"tessellate":[46782,46824],"getprojectbrowserwindowtype":[2477],"'reference":[39426],"permissioncallbacks":[1510],"greater":[1566,2047,6760,8196,8256,8496,9157,9965,10651,11484,11747,12599,12935,13062,14728,15035,17133,20403,21586,24487,24517,26068,27220,28913,29168,29661,29733,29906,32776,34936,35718,37236,37294,37360,37700,37740,38369,39662,39836,40849,41777,43023,43167,43173,43580,45889,47999,49449,49613,49629,49683,50488,50563,50670,50692,50932,53733,56206,57953,58285,61540,62216,64141,65232,65256,68378,68923,69166,70734],"loose":[13689,13874,15007,34657],"linenote":[4300],"desirability":[71110],"someitems":[2687],"iff":[6713,25300],"hacking":[11191,25859],"slot1":[56836],"#include":[8905,41988,42428,43907,44993,47811],"customgi_tonemapped":[46644],"exampledisplayprovider_myworkerthread":[76026],"raycastnonalloc":[6066,33372],"endpos":[51441],"connectiontoserver":[10814,11085],"shader_api_vulkan":[43941],"#46607c":[63272],"lowpassfilter":[7806],"use_threads":[73940],"mask'":[8001,12702],"invalide":[28902],"elevate":[38795],"deformer":[24669,71797],"arrival":[36625],"clip’s":[4768],"framecount":[35718,52077],"apiupdate":[2724,21051],"argbint":[8467],"adadad00":[40748],"#f0f8ff":[63508],"autorotation":[1582,25875],"cmd+d":[10076],"gl_ovr_multiview_multisampled_render_to_texture":[1672],"uxml":[6721,54293,54398,54496,54508,54552,54573,54607,54609,54674,54738,54780,54841,54847,54885,54915,55033,55067,55166,55231,55305,55595,56095,56323,56398,56526,56597,56667,56741,56804,57138,57299,57302,57341,57609,57627,58032,58230,58583,58656,58734,59021,59269,59536,59552,59843,59904,60135,60154,60544,60621,60839,60885,60990,61178,61194,61299,61330,61456,61587,61594,61754,61951,62113,62227,62344,62500,62658,62750,62869,63080,63138,63828,63863,63937,64320,64386,64397,64412,64427,64443,64467,64488,64510,64527,64562,64585,64609,64635,64673,64695,64717,64730,64744,64773,64794,64807,64822,64840,64858,64877,64913,64935,64954,64972,64985,64997,65023,65030,65048,65060,65080,65101,65116,65131,65145,65163,65219,65243,65267,65285,65293,65311,65367,65385,65412,65431,65443,65457,65475,65489,65500,65511,65536,65551,65566,65586,65606,65626,65647,65667,65686,65704,65750,65762,65782,65848,65912,68907,69147,69330,69436],"addedpackage":[69637],"0–100":[36596],"#4169e1":[63629],"generatorexecutioncontext":[38696],"lightbulb":[71805],"unity_matrix_p":[47076,72995],"its":[96,122,149,185,253,273,308,465,521,634,715,994,1094,1185,1197,1202,1266,1311,1375,1393,1495,1534,1771,1882,1899,1916,1961,2189,2211,2292,2356,2419,2425,2565,2665,2751,2958,3260,3293,3306,3471,3486,3581,3681,3721,3826,3859,3870,3954,3988,4034,4058,4217,4357,4386,4419,4525,4602,4711,4728,4755,4867,4908,5047,5104,5160,5186,5284,5725,5734,5771,5879,5938,6037,6125,6223,6266,6293,6317,6321,6408,6483,6514,6691,6725,6756,6793,6847,6958,7004,7219,7364,7878,7937,7959,7989,8036,8114,8137,8174,8204,8256,8271,8309,8389,8439,8520,8774,8792,8973,9039,9157,9180,9286,9339,9553,9635,9672,9690,9754,9777,9856,9875,9931,10012,10092,10205,10370,10392,10412,10444,10493,10564,10609,10614,10693,10760,11188,11253,11304,11423,11438,11588,11604,11669,11732,12227,12395,12491,12723,12751,12812,12833,12872,12969,13018,13110,13120,13166,13240,13261,13272,13289,13307,13454,13552,13590,13670,13751,13784,13813,13870,13902,14076,14226,14318,14471,14509,14545,14593,14691,14731,14787,14844,14976,14979,15022,15817,15847,16060,17312,18058,18119,18166,18224,18267,18375,18435,18454,18511,18607,18634,18662,18818,18918,18981,19043,19451,19504,20003,20094,20106,20130,20264,20602,20625,20658,20769,20891,21052,21154,21325,21475,21575,21640,21711,21976,22001,22011,22085,22244,22419,23415,23443,23543,23713,23879,24018,24325,24468,24526,24732,24740,24781,25083,25108,25172,25292,25330,25381,25525,25622,25826,26049,26108,26296,26456,26477,26495,26576,26581,26665,26706,26799,26809,26917,26960,27039,27172,27174,27186,27213,27265,27292,27302,27312,27332,27648,27759,27814,28071,28353,28394,28495,28829,28838,28950,28989,29022,29098,29193,29330,29385,29417,29476,29484,29858,29863,30043,30050,30142,30215,30233,30275,30345,30426,30525,30871,31386,31627,31717,31731,31747,31870,32153,32216,32317,32328,32408,32629,32637,32723,32776,32853,33285,33399,33424,33466,33476,33506,33532,33586,33615,33645,34040,34156,34237,34539,34672,34794,34850,34883,34923,34941,35030,35192,35266,35369,35476,35625,35696,35794,35903,35969,36020,36120,36174,36207,36298,36435,36481,36639,36691,36695,36905,37069,37231,37429,37574,37670,37684,37700,37728,38404,38463,38508,38533,38541,38576,38632,38828,38841,38950,38986,39027,39115,39133,39208,39317,39381,39427,39466,39508,39513,39538,39574,39591,39657,39714,39756,39794,39836,39881,39986,40076,40094,40128,40151,40203,40456,40526,40534,40671,40674,40775,40810,41200,41371,41447,41575,41717,41784,41792,41859,41979,42023,42060,42142,42183,42320,42356,42456,42809,43113,43181,43217,43462,43491,43521,43571,43875,44029,44199,44252,44345,44740,44850,45184,45403,45591,46046,46975,47751,47912,48179,48245,48295,48351,48353,48364,48502,48519,48556,48585,48607,48653,48682,48870,48910,49128,49183,49356,49426,49454,49509,49525,49609,49642,49665,49822,49908,50001,50064,50317,50323,50341,50361,50476,50527,50540,50559,50587,50660,50686,50703,51074,51117,51121,51137,51173,51180,51237,51264,51382,51716,51785,51851,51882,51999,52112,52204,52230,52320,52501,52587,52742,52744,52754,53073,53167,53324,53713,53813,54049,54224,54436,54552,54579,54680,54724,54771,54818,54883,54923,54970,55075,55175,55247,55321,55377,55581,55642,55813,55865,55998,56051,56102,56133,56226,56284,56339,56405,56603,56681,56747,56832,57289,57306,57575,57641,57811,57868,57972,58036,58186,58274,58393,58824,59100,59541,59549,59830,60138,60369,60518,60542,60637,60771,60889,60989,61327,61354,61449,61516,61555,61762,61908,61935,62030,62072,62278,62595,62811,62838,63106,63660,63697,63748,63817,63982,64017,64078,64219,64322,64489,64636,65088,65164,65719,65871,65916,65984,65999,66207,66225,66354,66479,66542,66635,66817,67053,67084,67154,67526,67837,67855,67927,67978,68086,68280,68532,68541,68601,68890,69127,69710,69719,69761,69808,69947,69996,70070,70094,70127,70175,70200,70302,70332,70513,70731,70752,70776,70801,70875,70936,70944,71078,71179,71216,71305,71371,71396,71418,71447,71481,71551,71708,71775,71806,71860,71919,72158,72239,72275,72315,72419,72505,72724,72832,73002,73093,73556,73601,73705,73922,74307,74564,74742,74899,74990,75077,75109,75127,75262,75280,75347,75366,75388,75764,76097],"guiding":[70952],"importantly":[7763,25598,32705,37696],"1kb":[27906,33092],"canceled":[29600,53476,62606,73271],"band'":[18568],"liking":[20751,52222],"liquids":[11459,22854,31662,32311,37426],"randomimporter":[25128],"hear":[4366,4438,5160,7797,22189],"jammed":[2211],"generics":[1415,33456,52627],"intuitively":[42810],"unityxrrendertexturedesc":[75424],"activity":[390,734,782,1078,1197,1202,1445,1548,1854,3734,5176,5272,19318,25041,25864,25995,27724,33637,34651,35622,35694,49735,52530,52590,53497,53765,66820],"enable_logs":[6098],"end":[511,1483,1883,1904,2149,2190,2272,2395,2441,3570,3836,4861,4997,5168,5866,5921,6199,6811,6874,6999,7783,8339,8437,9002,9024,9167,9256,9297,9727,9810,9905,10014,10097,10239,10379,10687,11008,11483,11612,12296,13058,13115,13163,13555,13673,13728,13818,13860,14261,14600,14850,14983,15740,16043,16527,17030,17092,17126,18225,18309,18666,19479,20256,20403,20565,20739,21319,21550,21900,22186,22500,23259,23560,23590,23817,24016,24177,24310,24597,24969,25284,25492,25622,26212,26356,26565,26799,26888,27215,27268,27309,27681,27813,27999,28114,28262,30282,31743,31758,32091,32153,32341,32412,32607,32858,33299,33383,33410,33424,35256,35360,35424,35722,35793,36079,37526,37639,38250,38266,38333,38402,39150,39322,39635,39756,39986,40342,40519,40621,42618,43115,44001,44442,45267,45564,46764,47148,48218,48437,49823,49983,50652,50965,51427,51549,52351,52921,52951,54041,54281,54336,55118,55632,55890,57955,59200,59324,59838,61472,61649,61967,62014,62586,62838,63817,64090,64332,65999,66393,67151,67266,68527,69352,69456,69923,70448,70606,70756,71164,71448,73051,73121,73172,73471,75413],"take":[134,229,434,499,521,687,1904,1944,2064,2357,2745,2768,3252,3340,3812,4354,4367,4438,4837,4997,5042,5258,5972,6293,6360,6419,7071,7752,7931,8260,8357,8521,9088,9589,10025,10095,10358,10706,10768,11766,12279,12356,12664,14295,14691,14717,14823,16707,17984,18377,18613,19027,19130,19316,19336,19351,19376,20574,20657,20915,20972,21006,21710,22470,23795,24640,24763,24776,24792,25234,25262,25346,26094,26359,26712,27015,27172,27297,27510,27520,27923,28056,28066,28182,28216,28439,28477,29327,30047,30906,31634,31706,32705,32767,32872,33082,33299,33388,33866,34361,34783,34895,34944,35275,36201,36594,36637,37563,37668,37713,37724,38257,38515,38939,39054,39347,39381,39395,39794,39912,40842,41187,41390,41784,41836,43131,43711,43898,43920,44830,45214,45286,45417,45619,46369,46719,47126,47607,48338,48703,48976,49305,49425,49570,49635,49720,50058,50454,50677,50697,51163,52010,52179,52640,53955,54254,55554,55990,58414,59086,59837,63833,64174,65031,66260,66739,66931,67262,67272,67296,67522,67537,67755,67871,67979,68258,68280,68609,69842,70243,70265,70405,71404,71869,72204,72532,73320,73450,74049,74602,74645,75209,75446,75934,76095],"assetname":[3395,4671,61937,61972],"sdfaa_hinted":[58397],"neighborhood":[36679],"selectiongridint":[23958],"unitythemes":[63069],"networkerror":[66271],"onimportasset":[40453],"intel":[706,14332,19067,23460,28084,28159,30288,33796,36168,36608,38349,50167,72697,74625,74769],"multipass":[38181],"option3":[64542],"refreshtile":[51632,51747,51761,51786,51813],"4”":[40933],"encryption":[26096,66106,66437,67761],"teams":[4384,4532,5820,29009,30416,31243,33377,53869,66555,67903,68037],"consequences":[28475,42059],"ireadonlylist":[59953],"union":[4918,40835,53737],"aesthetics":[27268],"weights":[327,2063,2183,6230,10404,10537,11438,11960,12271,12392,12581,12963,13477,18078,19263,21466,21583,22088,26846,27718,29765,32261,34196,34322,34446,34534,47640,58317,62017,71796],"asian":[9260,62099],"play_mode":[63341,64246],"trackable":[17788],"fitting":[2438,29154,33547,58411,58441,75464],"renderbuffer":[29995],"kernelone":[8422],"gl_ovr_multiview2":[1672],"incompatible":[7389,20400,21134,34161,45099,48566,49363,50157,52608,70394],"iunityshadercompilerextpluginconfigure":[28071],"oninitializefailed":[67321,67442],"stretchiness":[8286],"__even__":[14797],"credits":[4013,37526,67103],"email":[229,4008,4071,4398,4440,4485,30423,30488,53365,53718,67039,67253,67899,70007,70829],"aot":[20208,23125,24944,26077,29814,30857,34727,40515,40554,52609,73904],"classc":[63051],"launchmode":[1548],"badge":[20646,30042,34892,57645],"atleastonupdate":[19525],"benchmarks":[5999],"asteroid2":[41472],"setexecuteheader":[66857],"minheight":[59675],"backslashes":[70773],"ontransitioncancel":[62394],"friendlyname":[19673],"oninitialized":[66997,67312,67353,67628,67712],"operates":[5958,6810,19026,26263,33500,44428,51961,59557,62804],"fragment":[6520,8725,8919,10157,14047,14167,21765,21938,23246,28929,29520,30364,31936,32949,33442,41967,42001,42148,43038,43081,43359,43654,43727,44036,44134,44290,44363,44401,44556,44892,44985,45293,45477,45583,45607,45678,45844,45851,46766,47204,47918,49002,50147,73013,74256],"therefore":[11,251,2429,2769,3595,3758,4865,4980,6032,6062,6147,6381,6798,7807,8094,8222,8434,9010,9174,9304,9740,10091,10230,11292,12401,13153,13171,13310,13477,13570,13682,13867,14702,14826,14996,17488,18105,18225,18449,20788,21938,22093,24598,25044,25161,25310,26665,26711,27033,27330,27523,27681,28894,29154,29363,29922,30207,30243,30268,30293,30904,31642,32165,33842,35268,35879,36104,36690,37684,37713,37738,38346,38621,39167,39761,40442,41812,42053,42178,43024,43149,44166,44244,45746,46074,46484,48225,49449,49495,49549,49609,50153,50513,50661,51069,51975,52854,53069,53379,57628,58186,58447,62839,63850,66391,67864,68412,68951,69196,71028,72201,72476,72518,73271,73335,73395,73450,73471,73615,73838,74014,74642,74850,74898],"necessary":[270,457,891,1259,1315,2003,2034,2628,3500,3736,3837,4959,5643,5719,5768,5946,6025,6211,6396,7386,8487,8582,9339,10082,12332,12673,13054,13427,13815,14868,14928,15861,15935,18509,18926,19130,19144,19617,20517,21526,22104,22145,24759,24969,25153,25323,25609,25735,26452,26597,28233,29098,29915,30164,30372,33307,33477,33828,34120,34897,35344,36595,36674,36855,37495,40097,40484,41795,43465,44166,45134,45574,48162,50150,50601,51794,51962,52596,53276,53696,59021,59410,60212,60950,61056,61296,64365,64758,65720,65992,66479,67018,67229,67707,67840,69881,70610,71876,72477,72755,72899,73188,73395,73914,74077,74315,74867,74988,75041,75197,75226,75345,75857],"controls'":[56693],"invdiff":[46469],"test":[556,889,1550,2070,2740,2997,3065,4372,4435,4481,5919,6111,6425,6473,7029,8413,9057,10338,11978,12605,13056,14764,16470,17603,17985,18629,18723,18823,19423,19651,19990,20045,20096,21023,21632,21746,22041,22435,23554,25035,25498,25733,25751,25917,25970,26115,28166,28477,29360,29470,29835,30312,30613,31247,31365,31463,31588,33843,34994,35881,35957,36570,37268,37471,38375,38720,38915,40188,42677,43571,44298,44870,45577,45851,47179,48008,49021,49650,50601,50653,52605,52696,52822,52952,53210,53358,53686,54015,54297,54564,54687,54709,54750,54955,55051,55151,55225,55300,55361,55406,55674,55742,55919,56055,56200,56264,56319,56383,56444,56587,56662,58446,59045,60438,60575,60611,60843,61213,61895,62039,62578,63121,65844,66194,66355,66489,66597,67012,67038,67106,67243,67264,67516,67656,67745,67851,68069,68450,70120,70337,70409,70585,70755,70879,70917,71026,71469,71672,71773,71863,73168,73449,73615,73908,74163,74234,74453,75137,75215],"unloaded":[3440,7495,26710,34594,41733,66910,68972,69219],"\\myapp\\myapp":[44314],"mentioned":[6149,19030,23817,37668,37689,39870,43386,48174,49470,50522,52042,53773,71873],"yoffset":[14108],"xap":[24943],"somesettings":[49923],"folder":[239,379,463,478,790,951,1122,1238,1292,1353,1649,1825,1835,2192,2364,2485,2774,3243,3414,3520,3574,3580,3728,3824,3846,3904,4467,4501,4530,4763,4876,5337,5845,5915,6053,6337,7427,7816,9135,9247,9989,10732,12672,12804,13316,13382,13626,13702,13945,14218,18347,18363,18632,18670,18720,18756,18816,18823,18925,19033,19060,19453,19623,20191,20339,20760,20869,20982,21029,21417,22129,22636,23480,24100,24696,24930,24975,25064,25135,25153,25194,25237,25445,25543,25938,26078,27110,27685,27709,27785,27919,27943,28248,28509,28612,28718,29328,29371,29563,29766,30530,31627,33476,34215,34539,34677,34735,35106,35193,35622,36499,36695,37272,37668,38377,38712,38917,38953,39012,39070,39192,39310,39365,39450,40202,40430,40715,41371,41839,43041,44210,48066,48169,48224,48252,48536,48556,48581,48607,48701,48864,49152,49203,49553,49737,49752,50448,50602,50933,51131,51184,51231,51369,51612,52064,52503,52616,52902,54413,54515,54922,54969,55074,55172,55246,55319,55375,55859,55997,56132,56224,56282,56338,56404,56482,56563,56602,56746,56810,56988,57137,57343,57694,58616,58659,58776,59023,59277,59533,59916,60198,60682,60892,60992,61187,61579,61599,61760,62054,62505,62653,63766,66116,66849,67060,67533,68601,68721,68834,68895,69079,69568,69705,69740,69760,69796,69946,70068,70102,70186,70211,70272,70288,70325,70328,70397,70729,70768,70832,70869,70925,71155,71277,71322,71424,71454,71469,71662,72187,72399,72464,72501,72644,73180,73398,73452,73501,73919,74050,74573,74608,74657,74787,74896,75057,75913],"includes_":[49762],"impacts":[3319,4773,7487,27931,33421,35080,35793,36509,41810,46484],"derive":[3728,6068,13308,18508,20868,28592,30902,38989,39868,57932,58036,58888,60163,62751,64366,66225,68197,71691,72278],"randomizations":[50391],"uss":[6720,54296,54425,54608,54632,54671,54703,54738,54775,54793,54848,54876,54916,55167,55234,55315,56041,56393,56527,56674,56734,56805,57081,57130,57295,57341,57592,57628,58086,58415,58666,58923,59021,59269,59592,59836,59994,60152,60154,60886,60986,61179,61194,61390,61443,61601,61755,62191,62345,62501,62586,62647,62835,63064,63117,63142,63229,63504,63657,63695,63703,63716,63811,63841,63858,63876,63897,63917,63934,63956,63989,64011,64023,64041,64203,64309,64316,64373,64512,64547,64564,64587,64611,64747,64809,64842,64860,64896,64915,65038,65051,65133,65187,65313,65538,65553,65568,65588,65608,65628,65649,65687,65757,65783,65913],"assetimportinprogressproxy":[15304],"absolute":[1127,9536,9827,14905,25062,32262,35117,40536,46392,47640,48148,56098,56875,59594,59853,60616,61193,61857,62015,63710,63737,64102,65256,65682,65730,69685,69835,69947,70200,70774],"serializations":[36768],"melody":[52095],"jobsutility":[26367,35137],"mindistance":[5215,7793,73055],"expects":[478,1578,4902,5425,5569,6723,19111,19408,21453,26571,26646,28251,44868,45099,75424,75543],"enumerateallcharacters":[59428],"softdelete":[55900],"istrigger":[41525],"smoothdt":[47101],"widgets":[74139],"compacted":[35994],"hollow":[8163,8380],"requesting":[1488,2745,2776,16075,25673,52478,53952,67401,72460],"landscape":[690,1580,6846,10772,11761,12104,12311,12490,13899,22918,24770,25873,31819,37565,40039,49425,50412,50543,50550,50589,50620,50947,53290],"ox":[52475,58365,61915],"microsoft's":[2985,4719,12587,18540,22435,33775,34237,41848,45598,67745,67850,69038,69277],"playerrender":[33482],"consola":[63700],"costs":[889,6811,25733,49723,53327,70734],"transacting":[67019,67230,67841],"unassigning":[43248],"name1":[44802,45980],"ordinary":[24515,32651,71811,72327],"importance":[5238,6807,13133,36590,38404,49644,71877],"ii":[18013,50344],"jpegs":[68130],"operate":[4745,4964,5187,8811,9368,17398,19642,26268,26487,26496,31634,36762,39856,44269,63212,65742,66407,68198],"unity_lightatten":[47132],"fnt":[6712,9109,13954],"styling":[5838,17642,24054,30520,39638,40051,49824,54149,54443,54795,57160,58403,58651,59828,61390,62227,62833,62869,63831,64082,64323,64428,65133,65758,65773,65905],"141f":[50338],"specialised":[50932,72813],"attain":[9697],"p3":[58474],"dopplerlevel":[73049],"subscribed":[6133,35548,66965,67730],"ondemand":[8847],"drawprocedural":[4583,18564,30298],"fabrics":[8280,11637,23051],"descendant":[24539,28996,54834,57601,60424,60543,63850,63875,64026,64331,65736],"d_ol_minus_act":[63464],"listener’s":[258],"initializing":[5185,5345,5731,5775,19636,29997,33475,44876,52249,53950,54020,67036,67089,75133,75259,75985],"selectedframeindexint32":[35553],"simulations":[50,6897,8355,8501,8786,11638,16835,38621,51993],"emission+lighting":[38369],"462mb":[27657],"f1":[9811],"pulsating":[37639],"r32i":[8473],"dosomethinginteresting":[38760],"stuttering":[6139,30868,33458,50005],"borders":[100,178,15998,19945,22740,39402,48515,49449,60640,64061,65987],"__delete__":[39618],"optimisations":[37710,74150],"traction":[15015],"07078a054d3f597b4c2cc47e8e4c0bde":[25124],"feature's":[27468],"uncompressedruntime":[3297],"unitystandardassetssetup":[25468],"reordertoggle":[57042],"maxcomputeworkgroupsizez":[19772],"unitythemeselector":[823],"unitywebrequesttexturemodule":[16798,30976],"4mb":[29181],"bindableelement's":[55268],"75f":[64960],"hosted":[2834,3553,4026,4357,10850,17474,66233,66341,66367,66373,66407,66907,69710,71388,73324,73810,73917,74212],"initcustomrendertexturevertexshader":[8940],"gamecore":[45439],"tempor":[65174],"achieving":[23606,33538,40616,42811],"d32_s8":[68922,69165],"c#":[292,385,452,1069,1259,1272,1397,1401,1713,1795,1820,1852,2779,3451,3728,3775,4594,4713,4875,5192,5356,5500,5738,5763,5901,5984,6068,6128,6236,6326,6500,6684,6718,6885,6935,7365,8652,9108,9281,10614,10691,11567,13454,14026,14086,14676,15885,16120,16183,16510,16933,17133,17759,17788,18003,18257,18358,18520,18623,18759,18823,18913,19017,19240,19456,19647,20179,20215,20350,20398,20679,20768,20894,20924,21116,21250,21885,22060,23173,23524,23542,24068,24180,24287,24607,24625,24920,24933,24943,25514,25847,25855,26283,26434,26618,26623,26630,26707,26727,28278,28372,28463,28847,28866,29402,29415,29420,29815,29908,30000,30097,30163,30530,30874,31601,31634,31647,33134,33419,33449,33494,33763,33774,34158,34426,34524,34624,34645,34676,34687,34988,35544,36496,36641,37351,37537,38251,38688,38877,39178,39348,39856,40145,40151,40168,40173,40452,40610,40647,40653,40662,41200,41307,41808,41899,41985,42043,42121,43011,44231,44532,44591,44787,44874,45101,45532,45883,45962,48384,48916,49044,49211,49282,49350,49394,49573,49735,49757,50013,50156,50709,51968,52242,52588,54120,54436,54511,54635,54780,54815,54870,54923,54970,55072,55175,55244,55321,55374,55566,55672,55751,55826,55998,56039,56130,56218,56269,56323,56405,56483,56530,56600,56667,56744,56882,56986,57128,57295,57305,57417,57603,57628,58077,58177,58191,58621,58736,59001,59373,59552,59783,59902,59904,60135,60154,60436,60573,60616,60621,60680,60841,60890,60990,61194,61571,61594,61758,61951,62132,62206,62590,62641,62831,62851,63080,63142,63710,63829,63863,63936,64320,64380,64391,64400,64415,64435,64446,64470,64491,64514,64530,64566,64589,64613,64655,64676,64698,64720,64733,64747,64776,64797,64811,64825,64844,64862,64881,64917,64938,64957,64975,64988,65000,65026,65033,65052,65063,65083,65104,65119,65135,65148,65166,65222,65246,65270,65288,65296,65315,65372,65395,65415,65434,65446,65460,65478,65492,65503,65514,65540,65555,65570,65590,65610,65630,65651,65670,65694,65704,65751,65790,65885,65912,66115,66450,66478,67765,68578,68740,68833,68911,69078,69512,70331,70710,71662,72003,72084,72103,72110,72149,72242,72437,72829,72988,73527,73640,74453,74512,74602,74862,75255,75747,75974,76071,76096],"#a9a9a9":[63303,63532],"compressed":[1567,3247,3338,3351,3502,4774,5978,6146,6382,6444,7482,8637,13709,14323,14956,18816,22555,23522,26873,27139,28180,28297,30369,35129,35988,37670,37704,42218,48164,48528,48706,49743,50673,73025,73085,73122,73178,73212,73308,73320,73384,73707,74044,74643],"800x600":[24906],"mypackagename":[18636],"collaborators":[1131],"unitywebrequest":[511,3296,3446,6143,16769,16779,16787,16795,20233,30941,49746,68086,68246,68263,68279,68311,68317,68347,68378,68433,68457,73666],"uta_agent_cache_files_evicted_unscheduled":[66668],"leaf":[41513,48309,52181,52191,52229],"yd++":[51633],"jointed":[11607],"retetrahedralize":[26711],"inventories":[17326,67182],"nvidia's":[19303],"physx":[10581,11520,11621,25991,26054,33491,33739,33749,37622,38459,38482,38502,74416],"contiguous":[5726,33437,51318,51388,73614],"cutscene":[31095],"selectedobject":[55395,56244,56304,56369],"issuetracker":[68041],"merges":[1003,1244,8373,9075,10654,11612,24609,30274,30848,35107,48057],"source’s":[270,5240,14876,36006],"after":[448,487,512,610,631,644,787,858,952,1069,1143,1227,1429,1510,1745,1778,2173,2227,2380,2609,3256,3344,3379,3663,3681,3767,3787,3977,4062,4191,4227,4264,4356,4372,4413,4429,4464,4561,4602,4665,4820,4970,5125,5186,5353,5498,5736,5774,6264,6289,6493,6718,6798,6926,6962,7029,7493,7539,7552,7661,7778,7985,8020,8302,8568,8892,9258,9399,9517,9593,9982,10332,10724,10900,11244,11274,11442,11543,11607,12221,12754,13275,13292,13457,13610,13907,14596,14728,16227,18224,18284,18585,18665,18927,18979,19095,19334,19374,19943,21031,21164,21306,21659,21844,21870,22107,22228,22361,23275,23483,23583,24390,24783,24983,25154,25328,25571,25682,25859,25912,26047,26073,26114,26295,26478,26710,26895,26985,27132,27625,27691,27948,28114,28185,28310,28639,28778,28874,29036,29193,29338,29561,29695,29974,30658,31624,31683,31791,31853,32065,32456,32632,32702,32725,32755,33083,33228,33440,33480,33547,33608,33842,33879,34237,34594,34682,34736,34919,34986,35354,35521,35705,35794,35945,36040,36285,37207,37469,37667,37851,38277,38349,38515,38672,38718,38870,38940,38950,39001,39098,39210,39638,39663,39773,39901,40343,40442,41605,41958,42060,43074,43523,43571,44079,44392,44691,45266,45521,45721,46011,46295,46825,48244,48269,48365,48512,48621,48651,48703,49217,50197,50551,50587,50921,50965,51087,51121,51139,51164,51240,51295,51347,51910,52010,52178,52236,52252,52526,52547,53511,53692,53825,54274,54454,55512,55550,55582,55715,55975,56317,56378,56837,57295,57634,57809,57868,58145,58194,58274,58456,58484,58855,59193,59501,59573,59825,60556,60942,61048,61925,62022,62056,62213,62534,62595,62839,63684,66491,66536,66586,66824,66852,66910,66976,67028,67090,67153,67247,67270,67325,67702,67856,67936,68064,68208,68385,68441,68652,68698,68958,69205,69622,69842,69975,70012,70174,70356,70729,70756,70778,70914,71013,71138,71221,71284,71592,71653,71689,72052,72186,72296,72364,72470,72724,72893,73025,73030,73405,73433,73471,73563,73630,73964,74194,74401,74725,74808,74989,75044,75127,75201,75331,75431,75511,75817,75918,76092],"definitions":[1997,3122,3571,4510,4902,7429,13372,17788,18623,18854,18926,19971,20069,20261,22565,32063,33784,34605,38653,38734,38893,39452,40171,43914,44723,45401,45487,45945,47309,53490,65022,65867,66459,67182,68659,71025,74228,75514,75999],"exhaustive":[8973,9328,10444,11304,12969,13018,13311,22190,25225,33369,40676,42425,72293],"velocityz":[6289],"createeditor":[49975],"attempts":[1901,6139,8547,12865,13837,13861,14953,18075,19944,20076,22046,22760,24983,33439,35798,40901,48374,51051,66229,67136,74581,75022,76201],"measures":[140,12116,13778,14670,21937,52010],"#f4a460":[63632],"ipreprocesscomputeshaders":[42999],"disadvantage":[25225,37740,41794,43021,52095],"automated":[3346,4230,4541,5973,17627,19637,21023,26689,28607,34214,34734,40654,50652,59720,66587,66918,68918,69159,71010,71774,74944],"transitiontimingfunction":[62999],"kunityprofilermarkereventtypeend":[28009],"says":[7413,25546,29060,30101,33194,34957,75624],"eight":[314,7468,10075,12444,13431,13940,14330,21557,22578,26678,29188,29827,48620],"undoing":[28963,66012],"kunityxrrendertextureflagslockedwidthheight":[75418],"conveyance":[67193],"debuggerdisplay":[66498],"indexed":[5462,5607,40730,40817,41380,41490,75515],"uninstalls":[41444,69735,70867],"9+opengl":[45478],"skp":[6709,13393],"tabonclick":[57231],"floatfield":[52465,55465,55521,56042,56168,59617,64525,64609,64933,65058,65364,69317,69423],"maxcapacity_2":[72044],"levels":[250,2768,3440,3461,4820,5002,5027,5117,5811,5970,6046,6334,6840,8624,8833,10009,10327,11177,12866,14469,14695,17000,20571,20735,21699,22139,22709,25140,25203,25265,26080,26665,27296,27341,27984,28477,29001,30184,30301,31701,34884,34904,34926,37373,37481,37668,37695,44298,46976,47153,48268,48510,48720,49177,49471,49506,49611,49630,50543,50563,50685,50960,50996,51849,52224,52597,64955,66432,66550,70578,73302,74318,74582],"onlydirectional":[38397,42405],"explanations":[51951],"assetpostprocessor":[5923,19475,21423,48388,68965,69212],"manpages":[66694],"engineering":[6123,17488,19646,21632],"charstring":[55505],"squelching":[34943],"visuals":[4294,6839,6930,16984,17835,22862,24728,30380,30565,32712,34840,37428,37547,48353,62788],"been":[100,156,1904,1975,2227,2248,2309,2383,2426,2842,3247,3493,3595,3692,3739,3793,4091,4264,4392,4448,4776,4832,5231,5770,5911,6066,6192,6318,6542,8020,8302,8989,9365,9781,10809,11009,11077,11202,11533,11601,12271,12442,13115,14751,15042,15851,16060,17045,17994,18599,19028,19565,20580,20637,21052,21164,21366,21575,22178,22401,24031,24054,24443,24751,24775,25130,25540,25652,25695,25850,26112,26181,26249,27172,27491,29891,30423,30884,31008,31368,31642,31727,32180,32725,33126,33382,33421,34893,35692,35795,36508,36753,38281,38437,39529,39663,39798,39827,40294,40509,40618,40731,41292,42379,43199,43571,44851,45266,46272,47892,48132,48372,49440,49513,49534,49631,49684,49943,50934,51148,51721,52039,52094,52349,52501,53148,53379,53999,54398,55582,55927,56681,58586,61689,65979,66135,66208,66314,66659,66938,67048,67153,67505,67540,67569,67732,67862,68228,68284,68593,68749,68872,69107,69300,69443,69508,70349,71170,71862,72259,72422,73395,74334,74535,75095,75121,75223,75321,75444,75765],"changedassets":[19569],"startposition":[66247],"standaloneinputmodule":[24887,33498,40037,40102,58172],"unnatural":[36638],"support":[50,78,164,205,223,388,471,502,526,554,622,649,661,673,706,716,842,916,1038,1087,1094,1200,1243,1304,1332,1517,1594,1672,1986,2579,2977,3039,3303,3500,3520,4016,4132,4175,4366,4418,4438,4439,4485,4551,4765,4794,4874,5181,5690,5767,5816,5882,5952,6368,6397,6718,6837,6877,6934,7128,7511,7898,8407,8762,9100,9260,9464,9994,10111,10590,10733,11105,11724,12064,12358,12912,13436,13544,14010,14298,14328,14711,14794,14860,16060,16072,16256,16364,16378,16392,16470,16564,16579,16827,16843,17045,17452,17474,17539,17642,17752,17850,17865,17880,17895,18039,18241,18399,18534,18681,18819,18917,19138,19241,19271,19274,19302,19376,19987,20072,20179,20210,20214,20237,20427,20440,20681,21132,21302,21476,21632,21861,21933,21962,22108,22130,22439,23245,23398,23431,23550,23609,23610,23677,24496,24636,24768,24794,24927,24943,25034,25194,25263,25347,25738,25755,25823,25826,25836,25862,26121,26255,26434,26704,27075,27135,27188,27216,27269,27527,27671,27765,28054,28064,28096,28168,28378,28605,28757,28801,28918,29152,29345,29444,29464,29570,29614,29814,29833,30282,30380,30859,31007,31366,31429,31887,32292,32705,32915,33402,33774,33885,34192,34209,34274,34427,34482,34594,34638,34847,35080,35189,35797,35917,36157,36226,36575,37636,37749,38263,38289,38347,38410,38420,38434,38607,38740,39489,39872,40327,40452,40521,40570,40652,40656,40790,41168,41462,41647,41783,41830,41928,42150,42378,43169,43202,43335,43470,43505,43515,43564,43728,43801,43964,44055,44140,44229,44371,44671,44993,45200,45254,45290,45448,45578,45729,45932,46781,46819,47268,48164,48556,49556,49752,49906,50011,50032,50076,50144,50168,50393,50455,50515,50660,51073,52108,52483,52498,52699,52712,52738,52756,52858,52871,52984,53305,53711,53746,53777,54046,54106,55929,56077,56722,57557,57633,58410,58732,59017,59541,59578,61975,61989,62827,62884,63066,63689,63747,63836,63968,64140,65704,65898,65975,66419,66501,66611,66828,66862,66904,67171,67585,67625,67655,67719,67745,67755,67847,67993,68070,68492,68746,68923,69166,69336,69442,69664,69864,70123,70288,70586,70755,70770,70831,70914,70984,71053,71132,71176,71664,71749,72089,72193,72208,72385,72520,72610,72635,72717,72720,72787,72943,73025,73029,73117,73176,73261,73290,73320,73377,73428,73442,73469,73667,73692,73894,74042,74121,74177,74242,74407,74506,74629,74777,74863,74929,74980,75033,75079,75126,75159,75204,75265,75283,75289,75377,75388,75587,76203],"colb":[33001],"scalemode":[52420,59156,68903,69143],"toolkit's":[54120,57335,61485,61990,75079],"activebuildtarget":[2797,3252],"debuggerdisplayattribute":[66498],"m_uxmltree":[61645],"src3":[45276],"m13":[5404,5548,20375],"tiers":[9448,23541,30502,42172,42988,45018,45426],"sensing":[25339],"casual":[12650,53285],"getcanonicalpath":[1441],"addressofinstance0":[20271],"outpos":[45763],"sampleclip":[15221],"service's":[17312],"recentered":[76302],"backgroundloadingpriority":[6141],"tangent's":[6624],"stiffness":[7294,8284,11639,13685,13870,14973,15003,29895],"signed":[613,927,11978,14122,23508,28115,28774,41701,45291,52874,53174,53379,53780,58385,58651,67235,67266,70373,71552,72189,74654],"renderqueue":[6500,10437,46023],"attribute's":[35481],"iunityprofilercallbacks":[27940],"oblique":[6772,8036,30140,33537],"elem":[13045,57061,63202],"nodirlightmap":[46790,47826],"#ltitle":[35110],"getallowsalphasplitting":[48779],"datasuch":[53764],"instancing_on":[23257,44588],"z":[4,308,1907,1937,2298,2353,5948,6273,6298,6597,6756,6966,7032,7265,7953,8094,8499,8691,8963,9541,9859,10061,10266,10393,10504,11448,11484,11600,12760,12970,13093,13103,13241,13281,13298,13391,13983,14034,14103,14254,14603,14667,18173,19855,20344,20687,21230,21668,22548,23271,23669,24909,25491,25562,26922,27472,29622,30606,31834,31962,32128,32193,32284,32357,32433,32610,32635,32902,32983,33313,33813,34781,35077,37283,37345,37617,38375,38496,38569,38599,39253,40332,40639,40749,42706,42751,43221,43729,43979,44081,44272,44625,44728,44860,45156,45720,46340,47087,47474,47952,47985,48143,48884,49535,50378,50477,51163,51181,51216,51224,51244,51329,51358,51446,51635,53601,71216,71806,71873,72765,74422,75559,76460],"“b”":[33146],"experimental":[9106,11813,12349,14880,19461,21390,28377,31005,31368,31617,34212,34279,36645,40338,41582,42206,54632,66025,68579,68874,69110,70315,70755,70912,71156,71293,71366,71519,72787,74342,75952,76040],"percent":[5285,7724,7747,62282,66386],"braketorque":[14959],"potion”":[67178],"whitebox":[31289],"typeof":[3617,20797,20887,20943,22213,25639,26730,27345,30546,33913,34727,36863,40492,40565,40633,48767,50327,51493,52444,52663,54940,54998,55097,55199,55292,55355,56155,56434,56652,58094,58772,59789,60147,60749,65012,68138,68735,69683,76212],"ansibstr":[72194],"“table”":[34909],"unity_editor_osx":[7380,33792],"pauth":[11887],"ext_multisampled_render_to_texture":[75414],"track":[517,1995,2434,2582,3492,3584,3797,3895,4157,4369,5922,7472,7920,9368,9520,9859,10759,12515,13183,14787,14882,14965,17206,18315,18728,21029,21322,21914,22966,24618,24792,25089,25933,26060,26244,26357,27916,28457,29587,31264,31797,32299,33087,33390,33640,35142,35266,35404,35729,35778,36106,39150,39297,39322,39775,42938,50455,51960,52596,53140,53255,54635,55060,56222,60916,61016,65220,65244,67243,70333,70755,70943,71156,71392,72706,72931,75221],"continued":[65999],"xs":[19939],"nameof":[37156,40596,55106],"testobjectvectorpairstringbool":[15347],"layout":[369,889,1078,1961,2211,2252,3459,4298,5061,5116,5266,5496,8490,8618,9219,9532,9650,9771,10088,10521,13100,14253,14522,14861,17642,17967,18088,18632,18685,18896,18925,19990,20268,20790,21359,21711,22107,22151,22624,23814,23882,24273,24466,24732,24745,24769,25050,25733,26815,27021,27261,28324,28354,29128,29198,29683,30832,32051,33489,34759,35108,36199,36439,36468,36694,38358,39381,39415,39458,39537,39573,39642,39966,40127,41546,42211,42698,42750,44880,49539,50726,51092,51121,51175,51181,51354,51621,51724,51830,52092,52326,54149,54222,54347,54708,54886,54903,56040,56097,56673,56969,57158,57980,58799,59133,59654,59814,59827,60267,60639,61196,62193,62750,62886,63709,64081,64752,65490,65687,65701,65736,65905,69333,69439,70380,71818,71897,72489,73472,75417,75671,75912,75975],"_selftexture2d":[8965],"sampler_point_repeat":[45251],"winmerge":[35092],"generally":[106,881,2086,2353,3439,4508,5974,6094,6107,7017,9337,9440,10070,11532,11598,12397,12865,13427,18232,18716,20419,21526,22375,23270,24466,25032,25064,25262,26923,29095,30872,36590,37671,37685,37706,38403,38428,38433,39438,41843,42233,42238,42250,42293,42298,42303,42308,42360,42436,42442,42451,42458,42463,42511,42517,42523,42528,42533,42538,42543,42578,42583,42588,42593,42598,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42926,42931,43186,43967,44236,44377,45576,45740,46805,49449,50339,50901,51545,52558,53324,54093,54773,59593,60638,66393,66700,68160,71045,71772,73173,75068,75397,75740],"coateasier":[6909],"filterwindow":[2589],"standardshadermaterialparameterdetail":[41771],"endindex":[2559],"splitscreen":[6750],"scene’s":[8592,28910,33622,39160,39321,51262],"lightingstandard_gi":[46659],"8i4peeh+ll74fg38fnsbnd67ijkusm7xi+ft8r87cm":[69941],"forming":[1934,22542,30035],"uipackageresources":[63250,64406,64421,64461,64481,64504,64556,64579,64603,64624,64687,64738,64816,64834,64851,64869,64903,64923,64948,64965,65016,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65545,65560,65577,65597,65617,65638,65658],"tool’s":[51297],"supports":[148,337,554,620,661,701,834,1002,1215,1240,1299,1393,1518,1592,1614,1672,1832,1846,1862,1901,2063,2939,2988,3289,4231,4500,4738,4774,4959,5083,5166,5182,5700,6683,6691,6758,6804,6878,7025,7468,7673,8068,8115,8436,8627,9142,9279,9463,10110,10733,11134,11747,12105,12490,13154,13370,14031,14146,14322,14905,15702,16919,17773,17803,17936,18156,18358,18539,18612,18819,19298,19378,19617,19649,19685,20003,20072,20206,20215,20446,21391,21464,21861,21932,21962,22435,23398,23433,23499,23611,24493,24598,24631,24637,24787,24948,25170,25207,25313,25334,25756,25837,26799,27159,27495,27540,27552,27671,27679,28051,28062,28373,28862,29389,29439,29442,29447,29455,29473,29684,29769,29815,29828,30000,30291,30337,30853,31366,31388,31594,31624,31651,31866,33517,33599,33828,33877,34189,34708,35095,35188,36158,37537,37681,37958,38272,38287,38399,38680,39490,39882,40103,40544,40657,41224,41671,41830,42360,42425,42598,42802,42809,43455,44229,44677,44996,45510,45846,47264,49885,50013,50087,50440,50520,50584,50673,51846,52097,52348,52735,53059,53416,53704,54025,54794,55512,57625,57831,58077,58373,58845,59828,60209,60881,60982,62014,62836,63737,64025,64155,64369,64452,64468,64760,65900,65970,66433,66526,66828,66862,66941,67214,67720,67895,68054,68458,68492,68555,68709,68954,69200,69864,69946,70190,70586,70756,70821,70960,71162,71255,71795,72119,72149,72209,72489,72619,72724,72880,72902,72971,72986,73026,73029,73093,73117,73160,73260,73302,73373,73438,73470,73614,73669,73699,73772,73903,73941,74190,74322,74698,74923,74981,75077,75161,75280,75296,75372,75388,75459,75587,76304],"diff":[35092,46468,46582,47685,48101,60266,72410],"tspace1":[47473],"mathematical":[6071,6723,20678,37293,40313,45581,63693,72289],"supersampling":[10010],"testobjectwithserializedmapstringnonalignedstruct":[15302],"default_type":[73720],"getstyle":[24159],"getdependencies":[3493,40753],"unityhub":[27809],"__edge__":[32528],"portugal":[53641],"transit":[70446],"measure":[275,4653,14968,21877,22373,33506,35732,36354,40538,51137,51952,63820,73471],"preserving":[2406,2442,18450,28482,72524],"attempt":[617,3243,3307,5982,5989,6071,9365,10080,11518,12650,12903,13678,13829,13970,18377,21134,28967,30345,33134,35044,35625,36548,39568,44377,49725,50357,66354,67319,67440,68635,69372,69476,71395,71422,73717,74401,76195],"subnet":[35853,74851],"streamingassetsurl":[74029,74113],"progresses":[4773,5068,14559,32689],"variables":[1873,1890,2006,2256,2334,3834,6209,8903,9369,10818,12988,17077,18315,18376,20460,20540,20714,20972,21206,22409,23246,23493,25097,25438,25586,27654,28394,29543,29907,30062,30097,31910,33008,33286,33382,37541,38213,39347,39913,40841,41807,42129,42405,42624,43358,43907,43990,44082,44366,44879,45058,45137,45662,46393,46760,47066,47239,49126,52549,54671,54748,56734,57216,63086,63222,63230,63657,63986,64203,64309,64379,66070,66418,66605,69790,69813,69885,70733,71921,72047,72228,72995,73923],"bottombottom":[62237],"addlistener":[62766,76274],"monobehaviors":[4865],"spritesheets":[12769],"networkidentity":[10811,11078,22969,66051,66415],"unity_worldtolight":[47110],"perpendicular":[6760,8083,13261,22774,32317,38661,49524,51365,52213,59838,60778,65999,71873,72342],"git_ssh":[70648],"xd++":[51634],"8e98":[53900],"five":[3478,4149,5300,6272,7002,12513,13076,26711,29154,29586,34771,35625,36435,37094,38368,40911,50427,50622,52718,53461,62611,67507,72364],"database":[3483,3578,3681,3720,3771,4531,25097,25100,25176,31627,35089,40795,43330,60183,66638,67153,68956,69203,71032,71338,73207,74513,74581,74627,74788],"magenta":[8995,11297,36070,41923,42190,49863,63592],"distributing":[17282,52811,70959,73147],"spatialized":[4755,7671],"leaderboards":[17353,30060,31371,53777],"l'\\0'":[74599],"jbxpnpo8ictmuwyw42ccmtgq7i+coqekwvwnhti5rhe":[69918],"assetpostprocessortester2":[68976,69223],"dxgi":[34225,34343,34469],"tanktrailparticlecountname":[35420,35487,35554],"sliderint":[55447,57070,59665,64971,65241,65243],"devicedisconnected":[76194],"tandem":[39663],"waste":[5974,6150,10082,29182,30265,30345],"#menu":[59841],"systemmanagement":[12674],"diffused":[49609],"representing":[1509,2325,2439,2967,3292,6294,12428,21676,22504,30311,34903,35252,35383,37688,49498,49544,50941,54430,60804,65884,67019,67230,67841,68622,71969,72945,75109,75647],"sprites”":[68652],"packerpolicy":[48695],"dropping":[11310,18167,18447,18896,20659,51035,51760,57408,72470],"could":[237,356,554,1864,1880,1917,1966,2134,2215,2235,2240,2721,3317,3340,3363,3468,3491,3564,3732,3812,3987,4271,4544,4704,4867,5162,5350,5497,5773,6046,6831,7178,7391,7931,8086,8222,8438,8872,10703,11300,11312,11546,11844,12637,13076,13667,13881,14246,14560,14718,18104,18112,18230,18268,18501,18753,20343,20692,21005,21328,22145,22189,22466,24169,24727,24751,25225,25436,25525,26081,26593,28417,29182,29488,29728,29907,30062,31857,32112,32225,32703,32923,33099,33478,33533,34194,34910,34940,35192,35714,37377,37738,38403,38828,39673,40310,41184,42548,42783,43690,44085,44389,45215,45627,45705,46393,46926,48343,49424,49560,49911,50941,51967,52230,52584,53840,53989,54016,54214,54886,57319,57585,57809,57961,58149,61558,63887,64362,65698,65999,66165,66670,67149,68609,68895,69133,70243,70359,70710,71044,71448,72297,73324,73396,73579,74160,74458,74724,75076,75133,75445,75639,75854,75979],"settings”":[68801],"huge":[4563,10586,14285,24904,34197,44451],"gameswitch":[55162,55309,64910],"gamepad":[1218,31119,61749,73469,74710,75485],"xr":[2965,7478,11686,12034,12337,16839,17770,17796,17800,17815,17832,17847,17862,17888,17892,17912,18036,19797,21078,23161,30950,31038,31405,37759,43417,43455,50226,68749,69019,69272,70295,71377,72520,72794,72890,72901,72936,72943,74363,74975,74979,75028,75066,75069,75105,75125,75158,75190,75219,75250,75280,75288,75363,75387,75406,75473,75738,75871,75908,75952,75988,76093],"volume":[1872,2347,4792,4810,5027,5117,5239,5866,6761,7437,7454,7493,7514,7545,7557,7657,7689,7785,7908,9455,10084,10106,10272,10332,11319,11468,11497,13091,13154,13456,14154,14885,21776,22016,22602,23411,25477,27323,27334,29091,29727,30234,32311,32371,32631,34860,35071,36005,37834,38346,41509,43124,43137,43491,46794,52095,53508,64955,65220,71876,73051,74293,74976],"iconbutton":[49960],"exportpackage":[21032],"msbuild":[9110],"aaaa":[8757],"yesprojector":[38147],"rubbery":[49638],"grids":[17968,23696,31681,37500,54224],"documents":[3609,25961,54402,54500,54574,54643,54738,54787,57627,61299,61492,61959,62804,63719,65912,68512,71323,74034],"terraintilecoord":[68884,69120],"various":[86,167,661,792,1925,1966,2117,2191,2216,2221,2235,2427,3009,4773,4790,4881,5038,5163,6294,6320,6999,7146,7179,7763,7831,7931,8549,8872,9142,9261,9438,10835,11476,11521,11653,11707,12664,12919,13017,13208,13903,14973,18985,21056,21168,21299,21445,21624,21856,22258,22567,23625,24728,24768,25162,25550,28584,31587,31610,32250,32712,32874,33501,33762,35047,35995,36736,36922,37376,37695,38358,38437,38532,38770,40039,40540,41854,42781,42809,43922,44013,44268,44896,47150,47607,48121,48538,48903,49438,49646,49728,49770,51117,51148,51886,52013,52614,52754,53713,54235,54723,54885,55623,55675,57443,58557,58651,64955,65996,66584,71020,71616,71904,72287,72741,72974,73373,74318,75303,75395,75474,75991],"repetitive":[17152,65132],"marginbottom":[57104,61222],"rwtexture":[8444],"#8080ff":[49549],"col":[1696,2030,8671,10194,33002,43381,47227],"arising":[50344,75067],"enjoy":[22373],"dist":[12921,50436],"randomlist":[33218],"int2x4":[20263],"relevance":[3994,41370,63820],"barriers":[33416],"bristow":[4979],"begins":[6689,8083,9982,10368,10712,10744,10879,11482,12810,13757,14731,18376,18748,19699,20116,21325,21907,26299,26908,27816,27948,29036,30053,31791,34994,39610,49661,54056,62620,69670,70772,71447,71899,73091,75431],"traits":[54513,56610,56692,56755,58053],"#8fbc8f":[63542],"firebrick":[63553],"invokeonuithread":[74740],"updatezones":[8884],"kes":[53666],"ping":[2611,22517,25393,32456,32865,35068,36099,51269,71954],"purchasetoken":[67816],"which":[4,64,78,120,155,167,220,246,308,427,480,495,509,532,535,560,620,634,673,725,810,864,886,889,978,1031,1094,1156,1218,1245,1277,1299,1315,1331,1366,1385,1416,1483,1601,1679,1765,1886,1912,1926,1953,1994,2083,2191,2205,2216,2235,2238,2261,2297,2324,2405,2442,2504,2599,2657,2701,2768,2894,2967,3012,3242,3292,3309,3440,3447,3484,3541,3575,3580,3692,3729,3785,3861,3870,3975,4108,4205,4217,4256,4354,4372,4506,4530,4579,4681,4716,4752,4773,4792,4811,4874,5033,5117,5160,5186,5266,5291,5332,5350,5595,5693,5724,5734,5763,5952,5987,6068,6111,6264,6374,6396,6486,6683,6688,6723,6794,6806,6896,6966,6984,7119,7144,7179,7253,7368,7478,7566,7573,7662,7697,7765,7789,7831,7844,7930,7979,8008,8019,8104,8163,8203,8225,8299,8397,8411,8500,8590,8622,8844,8987,9010,9075,9138,9163,9207,9251,9304,9327,9473,9532,9555,9622,9686,9723,9832,9844,9884,9908,9997,10072,10124,10230,10337,10393,10460,10505,10579,10609,10691,10722,10794,10805,11069,11149,11160,11189,11253,11272,11303,11359,11452,11463,11489,11518,11544,11604,11648,11661,11669,11744,12102,12349,12453,12698,12747,12774,12866,12970,13032,13103,13136,13171,13208,13247,13263,13371,13485,13570,13585,13652,13680,13724,13747,13788,13818,13854,13865,13911,13986,14029,14149,14272,14318,14474,14502,14559,14581,14669,14728,14786,14833,14956,14979,15702,15813,15816,15831,15950,15967,16060,16406,16651,16667,16835,17627,17946,17963,17976,17999,18077,18112,18175,18225,18239,18315,18339,18375,18409,18441,18509,18536,18565,18672,18715,18747,18844,18935,18969,19027,19053,19152,19214,19443,19480,19650,20045,20076,20100,20130,20179,20222,20239,20440,20538,20595,20632,20680,20790,20878,20981,21009,21023,21142,21154,21183,21221,21312,21393,21503,21566,21676,21697,21854,21892,21988,22012,22042,22070,22139,22189,22234,22303,23288,23401,23428,23480,23545,23625,23668,23796,23882,24055,24169,24297,24456,24475,24490,24624,24646,24743,24780,24898,24944,25034,25043,25106,25154,25204,25258,25311,25444,25499,25733,25743,25826,25850,25888,25904,25961,26026,26049,26062,26074,26108,26222,26252,26292,26375,26434,26473,26494,26569,26580,26597,26606,26629,26645,26664,26698,26710,26723,26788,26841,26922,26947,26985,27056,27068,27090,27122,27169,27207,27259,27320,27329,27523,27647,27678,27698,27760,27785,27836,27918,27943,28062,28115,28129,28402,28463,28681,28719,28783,28875,28877,28963,29114,29154,29330,29392,29417,29449,29470,29566,29595,29731,29922,29926,30000,30042,30050,30135,30141,30242,30264,30312,30326,30375,30384,30443,30485,30501,30536,30825,30855,31387,31616,31624,31664,31717,31743,31764,31790,31816,31857,31916,32112,32131,32166,32232,32267,32341,32365,32371,32607,32617,32651,32690,32747,32861,32921,33081,33093,33381,33399,33421,33453,33497,33572,33641,33762,33774,33883,34272,34360,34480,34537,34638,34657,34723,34845,34884,34908,34923,34939,34992,35196,35250,35314,35380,35415,35530,35603,35636,35694,35799,35994,36040,36172,36199,36307,36354,36432,36471,36570,36632,36694,36762,36792,37236,37270,37281,37345,37496,37540,37646,37667,37683,37728,37899,38242,38287,38336,38345,38384,38428,38440,38462,38503,38531,38546,38580,38621,38629,38647,38657,38680,38820,38848,38932,38966,39030,39116,39137,39159,39296,39358,39377,39438,39450,39492,39512,39545,39594,39659,39724,39748,39819,39853,39985,40001,40145,40151,40173,40452,40513,40529,40544,40616,40662,40689,40810,40842,41178,41314,41361,41529,41559,41649,41678,41788,41860,41883,41958,42049,42110,42188,42231,42236,42241,42248,42253,42261,42291,42296,42301,42306,42321,42352,42434,42439,42445,42454,42461,42466,42509,42514,42520,42526,42531,42536,42541,42546,42576,42581,42586,42591,42611,42712,42728,42751,42792,42813,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42875,42895,42923,42929,42938,42948,43006,43018,43101,43113,43127,43130,43155,43216,43358,43486,43543,43589,43709,43728,43969,44069,44096,44133,44164,44272,44384,44447,44513,44605,44625,44660,44775,44809,44868,44999,45074,45184,45398,45428,45450,45576,45659,45745,45839,45851,45947,46009,46369,46760,46829,47103,47165,47179,47945,47951,47984,48132,48179,48227,48250,48323,48335,48374,48380,48501,48536,48551,48557,48590,48642,48683,48874,48940,48984,49175,49282,49358,49396,49421,49468,49490,49507,49515,49562,49567,49610,49626,49656,49661,49712,49731,49765,49817,50003,50062,50071,50094,50150,50197,50288,50322,50346,50367,50436,50521,50552,50587,50629,50647,50670,50691,50710,50847,50917,51009,51081,51099,51137,51168,51235,51306,51387,51554,51611,51638,51787,51806,51813,51820,51849,51886,51952,52091,52099,52124,52176,52204,52224,52240,52517,52566,52689,52694,52737,52756,52782,52939,52978,53176,53280,53696,53756,53839,54046,54209,54227,54450,54560,54682,54692,54733,54763,54799,55191,55497,55594,56102,56674,56932,57437,57630,57824,58072,58139,58288,58407,58448,58651,58756,58998,59411,59552,59745,59828,60136,60223,60381,60515,60588,60637,60794,60881,60982,61559,61906,62100,62748,62836,63107,63697,63747,63807,63850,63866,63921,64024,64101,64263,64332,65051,65720,65878,65925,65981,66033,66102,66111,66182,66224,66350,66377,66405,66456,66462,66600,66845,66877,66894,67060,67063,67086,67155,67195,67261,67280,67293,67347,67555,67572,67624,67659,67706,67745,67765,67845,67925,68086,68266,68279,68317,68348,68385,68492,68534,68541,68567,68690,68812,68850,69041,69296,69372,69402,69513,69679,69754,69756,69792,69864,70096,70230,70235,70265,70288,70310,70340,70376,70613,70756,70813,70867,70936,70965,71025,71133,71175,71186,71203,71219,71365,71438,71508,71517,71565,71662,71755,71767,71809,71873,71921,71970,72063,72092,72145,72187,72201,72229,72289,72368,72384,72462,72521,72646,72711,72721,72743,72788,72837,72858,72917,72945,72986,73022,73029,73165,73270,73302,73320,73393,73431,73487,73499,73592,73622,73640,73669,73690,73810,73902,73920,74049,74186,74228,74496,74548,74592,74635,74734,74837,74850,74867,74898,74944,74981,75033,75077,75111,75127,75160,75204,75237,75257,75431,75503,75751,75874,76068,76092,76096],"ruby’s":[37311],"misleading":[35885,36094],"__declspec":[72152],"poor":[18519,27131,62886],"updatewhenoffscreen":[13482],"sourcepos":[5204],"artifactid":[25124],"spinner":[5272,49735],"vertobl":[30158],"adjustments":[3724,7493,13629,14273,14684,20127,22145,24517,34866,38096,39228,52383,52754,62015,74160],"shadows_depth":[44571],"omni":[21491],"played":[1966,2176,2351,4825,5049,7187,7487,7669,7771,14728,14877,22317,29133,32172,32665,36007,37401,66251,66365],"mylinearclampsampler":[8431],"who":[2353,3451,3591,4065,4379,4404,4449,4997,6042,6811,15982,18716,18819,22317,25756,30174,30423,30503,33446,41935,53495,54050,54120,54511,66381,66759,66901,67149,67863,68196,70914,72323,72787,75251],"arraybuffer":[73614],"rg":[14383,43887],"collector's":[1481],"adobe's":[78],"illustrates":[3322,4852,7758,33481,40180,51995,52277,52834,58499,64407,64422,64462,64482,64505,64557,64580,64604,64625,64688,64739,64817,64835,64852,64870,64904,64924,64949,64966,65017,65074,65096,65111,65126,65158,65237,65261,65280,65350,65379,65529,65546,65561,65578,65598,65618,65639,65659,66112,75389],"colorhsv":[13030],"32kb":[29259],"engine's":[38251],"ambulance":[10097,27332],"incrementbydeltatimejob":[26499],"backups":[24632,52491],"samplefolder2":[18708],"piechartcomponet":[60743],"supportsasynccompute":[19773],"finder":[3852,13382,13997,18949,20759,28204,28677,48066,48864,70273,70344],"fetchconfigs":[53929],"define_effect":[4908],"propertyscope":[59687],"complexlightexplorerextension":[26743],"lightskin":[63439],"pos":[6291,6528,7167,8730,12671,13103,20855,25563,43875,44039,44405,44854,45681,46467,47350,47921,54734,62029],"snapshots":[249,4722,4798,4810,5025,5127,27897,27925,36199,37689,74237],"writealltext":[68980,69227],"nurms":[346,22836,29764],"printf":[73583],"emscripten":[12428,23135,68949,69194,73366,73553,73619,73638,73690],"analyzes":[20211,28467,38751,58069,66464],"128b":[29188],"mycustommodule":[67583],"water":[2347,5872,8872,18335,31716,31816,38052,46014,50941,74288],"unstable":[54898],"do":[14,161,170,236,261,405,423,450,475,499,513,525,579,631,634,783,839,891,933,952,987,1069,1111,1124,1143,1251,1512,1628,1748,1832,2089,2192,2271,2394,2611,2636,2774,3325,3346,3488,3571,3602,3681,3736,3828,3890,4070,4169,4263,4356,4391,4464,4537,4598,4707,4720,4866,5038,5097,5270,5330,5350,5718,5735,5809,6096,6139,6287,6325,6357,6409,6500,6735,6801,6973,7117,7158,7324,7810,7870,7898,8072,8258,8302,8765,8872,8975,9003,9024,9159,9168,9262,9298,9351,9483,9588,9664,9711,9728,9781,9843,9920,10002,10083,10215,10410,10706,10725,10772,10871,11222,11244,11274,11305,11536,11602,12007,12222,12895,13058,13155,13167,13364,13417,13477,13556,13587,13674,13771,13799,13858,13904,13970,14016,14078,14291,14332,14577,14707,14796,14962,14984,15836,18079,18318,18328,18345,18376,18448,18616,18752,18822,18902,19031,19039,19065,19450,19478,19945,20060,20124,20245,20573,20590,20777,20967,21009,21099,21160,21205,21302,21389,21476,21575,21852,21877,22011,22043,22071,22128,22186,22239,22439,23284,23393,23427,23488,23555,23798,24057,24195,24275,24468,24472,24505,24638,24730,24750,24774,24794,24926,24973,25035,25047,25141,25153,25261,25310,25352,25409,25572,25631,25735,25852,25897,25914,26110,26253,26286,26434,26494,26593,26690,26712,26859,26964,27036,27098,27167,27182,27330,27553,27583,27728,27751,27767,28131,28209,28286,28407,28753,28791,28868,29012,29098,29131,29279,29337,29422,29486,29594,29835,29863,30038,30122,30145,30179,30265,30322,30358,30396,30493,30564,30844,30859,31013,31619,31644,32302,32705,32727,32754,33072,33099,33415,33504,33945,34163,34215,34463,34594,34638,34708,34758,34783,34940,35126,35203,35339,35407,35477,35504,35684,35779,35801,36180,36235,36342,36354,36595,36689,36694,36737,36794,37287,37402,37662,37675,37728,38357,38396,38426,38483,38494,38542,38584,38633,38711,38820,38841,38960,39088,39124,39159,39217,39228,39254,39374,39440,39458,39568,39643,39881,40098,40342,40524,40529,40570,40641,41322,41458,41470,41589,41687,41710,41765,41808,41830,41843,41876,41944,42133,42220,42360,42456,42547,42615,42751,42779,42811,42990,43002,43183,43373,43523,43554,43654,43947,44081,44178,44205,44297,44303,44328,44348,44376,44457,44522,44603,44627,44811,44830,45031,45051,45200,45215,45267,45428,45470,45568,45615,45618,45706,45840,45858,46024,46295,46511,46552,46766,46977,47306,47971,47995,48123,48174,48536,48595,48677,49039,49195,49354,49403,49453,49479,49490,49501,49517,49623,49650,49710,49753,50010,50148,50344,50387,50440,50584,50620,50659,50695,50960,51031,51119,51205,51237,51344,52044,52104,52247,52486,52576,52938,53030,53203,53692,53746,53985,54093,54131,54242,54446,54553,54576,54644,55060,55604,55671,55750,55825,56315,56475,56610,56681,57457,57637,58001,58044,58129,58231,58338,58459,58557,58711,58747,59011,59579,59837,60225,60435,60572,60638,60838,61303,61400,61479,61570,61958,61981,62210,62664,63072,63111,63689,63793,64180,64235,64885,65174,65865,65928,66115,66183,66224,66355,66536,66612,66814,66842,66879,66895,66941,66990,67039,67110,67161,67266,67351,67568,67598,67626,67658,67766,67921,68064,68179,68258,68265,68412,68545,68657,68711,68962,69209,69377,69481,70200,70236,70514,70718,70872,71050,71339,71573,71671,71746,71773,71850,71873,71908,72004,72149,72335,72412,72500,72715,72851,72890,73025,73211,73253,73328,73433,73499,73626,73704,73723,73896,74355,74420,74498,74679,74800,74927,75002,75056,75067,75145,75224,75405,75432,75599,75793,75876,76016,76315],"sethover":[62723],"2d's":[9743,15818],"staticcounterexamplefixed":[20142],"solver":[8297,8555,11580,11600,18229,23089,33608,33680,35334,36128,37619,70233,70255],"unsignedintegerfield":[64821,65536],"dlss":[19284,37949],"analyze":[273,3494,4438,11920,12184,12371,12559,16919,19224,21632,22343,27937,28584,33512,34310,34396,34515,35379,35637,35769,35959,36199,38734,50656,52737,53760,74918],"clearflags":[49140,73433],"considering":[16151,18485,18609,21587,54885,70246],"trouble":[4772],"git+https":[70625],"#f4bc02":[63426],"occlusion":[5269,5331,6834,7924,8059,9341,9965,10013,11318,11331,13145,13920,16755,17773,17803,18613,22178,22725,23273,23417,23447,26847,26933,27214,29886,30165,30169,30176,30206,30227,30263,30352,30513,34860,36597,37864,38242,38359,38943,39238,39309,41746,41770,44073,44133,46739,47519,47985,49450,49496,49561,49602,49721,49731,50602,74275,75208],"stochastic":[52143],"passflags":[42401],"swap":[65,6948,8534,8879,12475,13431,14800,21557,25211,26597,28868,34287,34343,34469,35719,39826,46040,51467,74191],"registerinputprovider":[75726],"globaltexturemipmaplimit":[12896],"steady":[29277,30047,32188,51976],"rootvisualelement":[55392,55578,55691,55735,55843,55958,56009,56048,56241,56301,56366,56467,56510,56554,56684,56826,57040,57279,57545,57714,58149,58249,58635,59048,59494,59576,59792,60013,60150,60454,60527,60587,60610,60738,60867,61224,61328,61662,62147,62380,62523,62702,62778,64712,65092,65735,65832],"integerfield":[54693,55468,55509,57901,59618,64523,64631,64807,64931,65049,65365,65550,69318,69424],"automotive":[24598,30377,37898,50276],"meshing":[17803,75319,75404,75738],"shouldcomputenormals":[75861],"referencing":[3089,3475,7368,11875,20178,30096,34611,36286,38441,39122,40189,41284,54130,68636,70770,71024],"itt":[27938],"drives'":[8575],"info":[1052,2747,4119,4155,4178,4378,4442,5006,8441,11177,12155,12618,12740,14488,14788,18016,20013,20915,21835,22170,22290,25036,25125,25675,25970,27496,27809,28103,28207,30094,33069,33640,34117,34372,35003,38812,45513,49760,50341,50981,52814,52958,53085,53268,53702,53715,54263,58277,58403,59433,64735,66053,66349,66692,67053,67526,72395,72501,74405,74613,74940,75151],"brilliant":[71811],"rendertocubemap":[8641],"myaccount":[28707],"out":[62,219,301,526,547,601,625,948,1113,1352,1378,1537,1919,1934,2004,2089,2184,2192,2314,2439,2559,2954,3256,3346,3575,4191,4245,4354,4372,4397,4426,4450,4481,4501,4548,4753,4866,4875,5162,5353,5921,6102,6121,6463,6725,6790,6795,7183,7305,7439,7456,7594,7603,7611,7634,7643,7653,7749,7771,8083,8104,8137,8163,8203,8437,8554,8614,9217,9274,9400,9857,10009,10080,10360,10512,10687,11014,11263,11603,11724,12305,12903,13341,14693,14727,14967,16933,17169,17282,18307,18346,18567,18953,19663,20070,20105,20130,20271,20558,20811,21045,21168,21195,21400,21715,22020,22043,22225,22542,24392,24472,24492,24786,25097,25129,25345,25524,25632,25859,25908,25961,26360,26482,26712,26723,26919,26934,27009,27170,27575,27638,27757,27786,27937,28919,29242,29581,29704,29922,30110,30326,30380,31213,31673,31736,31752,31770,31782,31807,31828,31845,31902,32083,32098,32122,32209,32333,32351,32377,32599,32622,32642,32670,32717,32752,32896,33040,33075,33252,33382,33398,33455,33610,33866,33877,33940,35158,35714,35772,35881,36432,36469,36588,36661,36694,37627,37653,38283,38552,38865,39239,39301,39378,39468,39513,39546,39585,39657,39965,40076,40139,41077,41649,41843,41995,42368,42798,43205,43239,43375,43520,43689,44177,44231,44447,44839,45569,45693,45858,46369,46518,46722,47335,48290,48372,48551,48752,49012,49470,49502,49539,49571,49610,49633,50398,50550,50726,50941,50965,51032,51169,51342,51380,51851,51875,52040,52121,52201,52385,52530,52556,52756,54054,54459,54499,56172,56773,57798,58446,59186,59580,60591,60875,60954,61059,62036,62149,62461,62840,63710,65081,65926,66006,66190,66645,67047,67182,67517,67966,68110,68579,68874,69110,69570,70319,70376,70594,70807,70936,71175,71194,71543,71582,71682,71808,71879,71949,72077,72290,72402,72527,72912,73022,73147,73202,73302,73472,73627,73674,74130,74222,74410,74458,74785,74916,75324,75450,75568,75751,75874,75984,76040,76206],"maxwell":[36608],"locking":[2261,2458,8565,18176,25404,28454,68626,70230,73259,73377],"rosybrown":[63628],"programmable":[38422,44914,45200,45290,45591],"tracking":[2610,2990,3796,4152,4155,9269,11077,12514,16075,17803,17818,18565,18728,23156,26244,29586,31265,32170,33389,36233,49440,53760,55581,56235,68248,68780,70245,70775,72940,74377,74978,75077,75106,75211,75221,75319,75403,75474,76082,76124],"serverchangescene":[66255],"mycustompreprocessbuild":[24478],"maximumchunksoverride":[42225],"rms":[4821],"sharedmaterials":[33374],"unitydistancebasedtess":[46955],"activations":[222],"spritedataproviderfactories":[48390],"tier3":[23552],"angledegrees":[25564],"up":[67,174,290,427,442,523,601,625,666,693,729,848,948,955,974,1042,1315,1594,1736,1771,1808,1886,1904,1917,1972,2007,2080,2204,2220,2247,2256,2272,2294,2370,2395,2504,2579,2717,2770,2973,3253,3455,3887,3998,4071,4161,4168,4230,4354,4366,4493,4532,4739,4797,4820,4902,5117,5161,5222,5461,5606,5690,5816,5826,5911,6045,6199,6216,6285,6321,6353,6439,6503,6756,6833,6921,6958,7138,7167,7218,7468,7520,7567,7574,7619,7703,7766,7786,7841,7940,8086,8124,8134,8183,8196,8226,8342,8373,8562,8610,8831,8995,9081,9216,9262,9363,9577,9647,9712,9807,10014,10083,10361,10399,10702,10850,11075,11101,11176,11334,11612,11661,11748,12097,12444,12903,13042,13115,13164,13309,13375,13480,13580,13586,13771,13799,13843,13880,13898,13961,14278,14314,14685,14717,14823,14965,15861,16060,17045,17133,17152,18036,18074,18147,18207,18230,18376,18435,18581,18675,18812,18822,18923,18979,19319,19467,20116,20239,20423,20450,20540,20616,20743,20767,21052,21205,21306,21418,21509,21580,21687,21854,22024,22072,22124,22186,22192,22353,23257,23424,23440,23550,24078,24275,24583,24618,24651,24726,24776,24795,24914,24977,25097,25130,25177,25190,25263,25388,25411,25498,25624,25738,25763,25904,25939,25973,26026,26104,26110,26223,26296,26397,26593,26605,26627,26648,26671,26791,26809,26991,27015,27085,27187,27228,27276,27306,27324,27401,27674,27688,27752,27929,28176,28290,28382,28916,29144,29185,29338,29449,29467,29586,29721,29769,29784,29827,30047,30135,30148,30177,30280,30306,30321,30352,30440,30453,30794,31604,31642,31717,31764,31838,31870,32128,32180,32360,32403,32632,32637,32702,32849,32920,33063,33092,33381,33399,33435,33455,33472,33534,33612,33659,33889,34184,34217,34278,34492,34820,34840,34940,34994,35684,35797,35919,35949,36040,36203,36337,36464,36596,36727,36817,37283,37308,37330,37479,37488,37519,37522,37661,37668,37687,37709,37882,38347,38384,38474,38653,38685,38826,39150,39260,39322,39415,39472,39512,39560,39724,39757,39764,39818,39994,40022,40099,40112,40180,40649,40663,41314,41566,41613,41696,41706,41775,41820,41891,42175,42548,42710,43130,43199,43224,43520,43576,44001,44066,44317,45151,45213,45271,45577,45735,46143,46798,47114,47178,48054,48335,48502,48611,48651,48676,48860,48875,48893,49285,49358,49454,49474,49518,49626,49647,49678,49770,49826,49901,49911,50007,50018,50156,50322,50348,50368,50681,50686,50703,51008,51103,51137,51175,51205,51235,51252,51416,51614,51774,51794,51987,52147,52256,52481,52491,52584,52696,52699,52712,52739,52743,52756,53160,53291,53940,54056,54209,54273,54295,54445,54694,54729,54898,55547,55578,55643,55717,55806,55856,55907,55975,56519,56839,57047,57205,57562,57813,57857,58160,58196,58613,59189,59389,59542,59571,59721,59738,59817,59837,59914,60196,60209,60361,60497,60554,60649,60766,61201,61546,61686,61796,61908,62027,62117,62601,62711,62814,64174,64338,65025,65458,65768,65951,65999,66044,66159,66174,66225,66335,66393,66472,66528,66555,66879,66941,66964,67015,67076,67270,67400,67624,67638,67903,68043,68056,68248,68546,68607,68739,68815,68873,69047,69337,69443,69710,69987,70183,70259,70350,70397,70585,70771,70949,71290,71310,71328,71351,71388,71391,71469,71628,71669,71757,71774,71974,72088,72097,72247,72364,72377,72494,72643,72765,72824,72851,72941,73221,73244,73286,73313,73397,73555,73614,73647,73672,73699,73900,74040,74141,74456,74536,74613,74639,74787,74815,74887,74893,75015,75034,75076,75116,75153,75219,75251,75287,75295,75373,75440,75490,75880,75913,75969,76037,76086,76097],"cue":[49453,57578],"d2ssa":[24483],"argbhalf":[8448,38362],"measurements":[4705,5239,17030,29664,35741,35881,36543,74163],"titerations":[27456],"awake":[6127,6247,7782,10720,11562,13130,14848,19392,21168,21306,22605,25713,30028,30911,32169,33477,33676,33866,35016,35274,37709,38561,38591,39170,39951,56677,58173,59047,67487,73058,76230],"paper":[13041,27468],"market":[1024,4142,4355,6841,75520],"0x0018cba4":[74556],"dot3":[45291],"shadowmask":[6825,9502,9956,12931,14240,22177,22757,26799,26847,27212,38365,43144,46795,50821,69244,72761],"jod":[53664],"registerprefab":[66236],"rotationdirection":[51536,51571],"__stretch__":[14816],"receivecontentlength":[68200],"vector2fieldsnippet":[65577],"perspectives":[4327,5137,37306,37474,75068],"luminosity":[24487,34867],"enable_legacy_input_manager":[33840],"d_winbtn_win_max":[63500],"equals":[251,749,2344,5993,8989,9808,33291,43584,62249],"specifically":[3299,4704,5496,5965,6829,7507,8090,8280,14882,14938,14943,20343,23119,23797,24944,26473,26545,29166,30145,31920,33796,34900,38862,39856,42358,43336,48223,48874,50602,51103,53007,53428,65049,66543,71593,73667],"casters":[20420,23664,36397,37830,38337,38376,39694,43165,43190,46485],"d_toggle_mixed_bg":[63498],"instantiatemystore":[67574],"#45":[66770],"delaycall":[19593],"#58":[35166,41325,41425,41605,66018],"capturing":[10686,17627,19071,21962,22740,27329,27951,38279,39052,55651,57838,71874],"recordings":[16453,53745],"liberation":[9264],"usdg+":[69933],"1950x1300":[4300],"latency":[7664,12198,26356,37639,72401,72917,73088,75439],"gamepads":[9768,61800,73470],"animationclips":[2177,36246,38660],"myhostname":[66615],"newtoggle":[55742],"purchase":[229,4016,4063,4218,4367,4461,17045,22385,25921,30437,30475,30503,36713,38251,53013,53303,53689,53758,53952,54002,66965,67018,67073,67146,67168,67229,67262,67271,67288,67293,67336,67398,67537,67549,67560,67587,67603,67646,67706,67729,67745,67800,67840],"e3":[28629],"meet":[577,897,4218,9024,12797,13837,18719,19269,20009,21865,22229,23430,23805,24167,27100,27638,29342,31613,35802,44688,49319,49438,50036,50197,53293,71319,71526,72660,74864],"addproducts":[67035,67249],"raised":[18002,49536,50543,67871],"unityframeworktargetguid":[49806],"korean":[4263,25031,53634,58115,62105],"_myarr":[14040],"deploy":[2989,23124,29466,31097,34657,35882,49403,49752,53088,53842,66355,72001,72181,73152,73308,73311,73385,74780,74807,74813,74837],"onclientconnect":[66295],"funky":[45828],"deletedassets":[19516,68966,69213],"sizedelta":[24734],"unity_audiodsp_result":[4923,5242],"nearly":[24370,46322,49639,68513],"acid":[5006],"packedassets":[15275,68871,69106],"muscle":[1933,1997,7163,18061,22515,29889,38653,40618],"ups":[20675,31721,53478,67168,74976],"smartsprite":[31229],"p2p":[12642],"driven":[208,2307,4956,6150,10938,18564,23181,24456,24670,28062,38667,39798,49447,49509,54261,59551,65973,66922],"getsprites":[26603],"dx10":[25269,45811,50169,72218],"indexeddb":[12400,73026,73132,73207,73622,73943],"attachable":[57274],"targets":[919,2768,3252,6051,6934,11916,12180,12367,12555,14028,14342,14894,18540,19091,19220,20438,21697,21856,21865,22762,24680,25667,27527,29448,30301,30366,31870,34306,34392,34511,35886,36237,36393,36597,37627,38169,38349,38686,43709,44383,45499,45717,46829,49753,51084,51554,51611,52572,53871,55581,58144,61497,67846,68542,71176,72861,74991,75033,75466,75901],"psdimporter":[15990,31195,31393],"symptom":[31607],"gradientmode":[64694],"createmanualactivationfile":[21096,28684,28722],"randomly":[8009,13024,25551,32106,32259,32412,32685,32724,32855,40871,48551,50375,52236,66247,72362],"blendspeed":[6245],"killed":[52600],"flipaxis":[51538,51574],"shift+f":[39306],"mathf":[2108,10442,13065,20484,21966,24161,24407,25560,27358,33971,39959,40539,56924,60932,61035,62315,71571,72030,72335],"lookup":[27591,43985,45582,47422,51069,57929,64325,74522],"#a52a2aff":[49860],"goes":[234,646,715,2439,4902,8508,11275,11543,12221,13341,14968,19470,20340,20571,20875,24467,27130,27898,29154,29809,30048,30167,35735,36854,42004,42411,42633,43670,43786,43854,44118,44150,44182,44215,44333,44354,44610,44643,44782,44828,44865,44986,45113,45411,45540,45908,45957,47952,48006,48039,49454,49496,61473,62596,65955,66611,74575,74976],"dot3rgba":[45291],"uploads":[3580,5853,13417,14295,21514,24932,25548,27695,30150,32291,36050,41937,42184,43087,50140,50676,66635],"blur":[7920,10009,12309,34873,36609,38105,50552,58204],"unityyaml":[21639,68491],"diffuse’":[13799],"titles":[22375,26723,57525,58375,60025],"0x3f800000":[21677],"cd":[9109,19628,19637,66730],"axle":[74434],"createtexture3d":[14093],"skin's":[9615],"mark":[1886,3963,4066,5299,11588,12804,18080,18852,19038,20256,21604,25491,26218,26442,27525,27752,29144,30337,34626,35164,36093,36513,37742,38932,39140,39628,41433,41693,44527,49557,49721,50064,54264,55807,59750,62025,63734,66798,67957,71181,71310,72420,76303],"mixed":[2985,5041,6817,7472,9076,9873,9950,10072,11686,12512,12931,17880,18245,22816,23448,24167,26797,26826,26941,27068,27186,27213,27265,27291,27316,27330,29354,36640,37849,38365,43145,50251,54203,62830,63486,68755,69020,69243,69710,72796,72884,72954,74399,75303,75366,76094],"precompiledreferences":[3072,18646],"attach":[566,1722,1879,1911,2174,4401,5688,5965,6128,6372,6476,7180,7615,7816,8281,9155,9202,9242,9658,9715,9850,10692,10742,11272,11473,13261,13308,14502,14831,15831,17978,18131,18375,18389,18421,20770,20938,21200,21841,21913,21962,23794,24164,25597,25635,25898,26580,28170,28378,29835,32712,32920,34988,35254,35801,36482,37455,37527,38469,39102,40145,40641,43538,45986,49391,49650,50324,51845,54841,55975,56764,57890,58177,58764,59398,60213,60474,60541,62746,66183,66233,68325,68352,68483,71611,71662,71898,72229,74458,74633],"#663399":[63626],"c1x":[5384,5528,20355],"functionalityfor":[53756],"displaycurrentrenderpipeline":[49230],"bank":[4230,26932,52095,53728,67523],"mypackage2":[70602],"rgba32f":[8447],"m_receiveshadows":[76512],"layer_name_1":[50048],"ignoring":[12716,21029,32168,38864],"subtended":[66002],"door":[1996,2211,7645,9712,9743,11333,15861,26591,41470],"unity_sample_shadow_proj":[43985],"bionic":[66694],"old":[1539,3668,3859,4372,4461,4610,5353,19028,20403,25343,25492,28781,29128,29907,32185,33098,33504,38865,45267,45726,49522,49802,53839,55774,61504,65990,68281,68406,68547,68616,68974,69221,69330,69398,69436,73472],"emission+ambient+reflections+lightmaps":[38372],"unityrenderingextquery":[28056],"propertyname":[20262,23260,36861,37068,41520],"rollouts":[17092,31236],"previewhandler":[2578],"wreckoncollision":[25613],"rm":[66615],"onpaintscenegui":[51427,51559,51610],"featuring":[22663],"colorfully":[49850],"flatten":[6754,10427,13645,29086,41812,43962,50543],"strengh":[47033],"sunlight":[26925,43113],"gfxplugin":[28052],"unityaudioeffectdefinitionflags_needsspatializerdata":[5195],"hpgradient":[56998],"visualised":[2324,8247],"determined":[254,1962,4867,4994,6725,7795,8569,9339,9893,10772,14522,14881,14967,18508,21989,22500,25622,26931,30260,32174,32613,38346,38501,39466,39506,39574,39756,39986,40128,40205,42356,43043,45403,51364,51639,51837,52591,53077,57808,59894,60775,62804,71384,71809,71871],"#b0d2fc":[63271],"fieldofview":[21966],"your":[7,65,78,138,155,175,217,260,275,291,378,391,401,408,422,441,474,492,509,524,535,544,576,578,620,635,649,655,668,676,692,698,717,738,783,839,889,895,939,944,966,1028,1032,1113,1118,1135,1163,1202,1234,1237,1259,1291,1320,1325,1370,1393,1483,1487,1550,1574,1594,1674,1706,1754,1761,1816,1824,1835,1846,1855,1873,1882,1890,1919,1931,1957,1967,1982,2037,2041,2067,2190,2211,2236,2239,2253,2265,2284,2334,2362,2389,2438,2636,2692,2700,2762,2768,2896,2941,2972,3227,3252,3300,3311,3340,3379,3455,3508,3515,3571,3585,3674,3721,3793,3839,3871,3879,3898,3906,3948,3975,4026,4050,4154,4167,4186,4194,4203,4218,4230,4245,4353,4359,4389,4403,4412,4420,4439,4449,4463,4483,4493,4501,4519,4569,4653,4737,4811,4876,5041,5094,5158,5178,5322,5348,5351,5497,5690,5736,5816,5826,6056,6216,6273,6285,6318,6344,6348,6392,6461,6491,6685,6718,6750,6785,6798,6856,6933,6948,6977,7015,7144,7186,7368,7478,7619,7662,7734,7777,7836,7844,7875,7944,7983,8012,8125,8206,8258,8319,8411,8496,8648,8843,8972,9057,9135,9154,9178,9196,9247,9330,9434,9553,9669,9717,9765,9856,9862,9939,9989,10054,10215,10357,10394,10488,10575,10654,10686,10692,10719,10732,10805,11040,11074,11136,11160,11173,11191,11300,11305,11320,11333,11357,11403,11447,11520,11527,11612,11649,11667,11704,12042,12274,12314,12437,12746,12759,12768,12849,12866,12971,13021,13122,13193,13234,13280,13297,13306,13351,13393,13464,13538,13618,13626,13713,13818,13822,13846,13902,13945,14000,14019,14079,14218,14343,14554,14577,14676,14718,14841,15015,15020,15714,15862,15890,15967,16060,16091,16212,16470,16819,16984,17000,17045,17062,17092,17133,17152,17169,17206,17240,17254,17268,17282,17296,17326,17342,17356,17370,17384,17452,17474,17524,17591,17627,17928,17939,17944,17980,17998,18040,18058,18112,18186,18216,18293,18322,18346,18357,18388,18400,18424,18432,18462,18485,18525,18562,18624,18661,18730,18744,18758,18811,18822,18895,18909,18991,19018,19038,19052,19097,19120,19128,19220,19271,19279,19302,19316,19336,19352,19364,19378,19443,19454,19623,19639,19651,19666,19967,20006,20047,20058,20100,20116,20179,20225,20260,20394,20419,20440,20561,20583,20632,20714,20770,20863,20918,21012,21024,21142,21193,21202,21323,21382,21384,21445,21571,21632,21739,21853,21865,21988,22011,22023,22029,22071,22100,22121,22129,22132,22189,22229,22312,23270,23393,23428,23511,23542,23590,23616,23633,23726,23829,24020,24050,24167,24275,24467,24471,24505,24517,24601,24623,24667,24727,24776,24894,24901,24930,24943,25034,25043,25100,25142,25153,25187,25243,25311,25333,25348,25407,25445,25503,25672,25692,25722,25733,25738,25756,25823,25859,25893,25900,25919,25980,26042,26081,26226,26242,26264,26271,26291,26429,26472,26611,26651,26664,26685,26698,26714,26716,26784,26787,26812,26925,26936,26956,27015,27038,27066,27100,27120,27167,27184,27202,27224,27266,27300,27307,27318,27320,27330,27341,27482,27490,27514,27550,27583,27638,27671,27685,27695,27751,27762,27814,27916,27937,28051,28068,28074,28082,28119,28129,28148,28184,28281,28317,28323,28356,28373,28463,28603,28670,28714,28752,28761,28848,28864,28877,29091,29122,29150,29331,29402,29439,29447,29466,29478,29485,29570,29714,29747,29784,29817,29827,29885,29900,29919,29924,30001,30098,30143,30177,30207,30241,30267,30284,30325,30343,30381,30442,30473,30500,30511,30514,30824,30839,30857,30917,30987,31013,31600,31610,31634,31656,31664,31668,31763,31863,32093,32165,32230,32292,32704,32712,32882,32916,33065,33074,33088,33381,33399,33419,33446,33470,33506,33616,33646,33762,33776,33877,33889,33904,34175,34212,34245,34328,34452,34539,34641,34645,34663,34691,34747,34790,34840,34884,34924,34939,34984,35189,35247,35264,35366,35404,35465,35498,35603,35622,35684,35768,35788,35901,35924,35957,35968,36020,36155,36197,36296,36355,36432,36463,36570,36688,36693,36831,36984,37233,37268,37281,37306,37315,37330,37475,37495,37522,37610,37617,37635,37666,37702,37738,37924,38247,38258,38283,38287,38324,38347,38439,38459,38483,38490,38500,38536,38646,38678,38839,38904,38976,38987,39097,39159,39177,39255,39310,39355,39447,39612,39827,39853,40001,40039,40152,40172,40450,40452,40515,40538,40616,40649,40689,40759,40784,40817,41166,41307,41313,41356,41424,41455,41501,41543,41609,41679,41696,41710,41798,41824,41835,41879,41933,41935,41958,42020,42028,42056,42109,42180,42262,42318,42358,42430,42467,42596,42689,42692,42716,42732,42757,42813,42934,42961,43021,43080,43094,43120,43135,43175,43236,43336,43484,43522,43553,43566,43684,43907,43959,44067,44198,44251,44305,44320,44338,44360,44377,44422,44527,44590,44660,44758,44784,44835,44981,45044,45144,45180,45261,45448,45517,45565,45600,45643,45725,45839,45959,46513,46761,46877,47067,47179,48079,48170,48224,48243,48326,48335,48353,48509,48551,48566,48579,48603,48628,48630,48662,48685,48862,48893,48909,48977,49145,49169,49179,49350,49391,49423,49456,49465,49471,49481,49483,49498,49510,49519,49562,49573,49623,49626,49638,49650,49661,49677,49744,49752,49905,50008,50009,50018,50065,50087,50140,50144,50164,50344,50374,50411,50448,50509,50519,50528,50534,50545,50552,50560,50575,50582,50620,50648,50651,50660,50688,50726,50909,50933,50973,51005,51078,51119,51131,51183,51224,51231,51301,51408,51579,51601,51716,51812,51820,51842,51860,51950,52086,52171,52222,52247,52478,52491,52546,52681,52692,52703,52712,52717,52730,52746,52754,52771,52811,52871,52921,52951,53079,53255,53685,53713,53777,53989,54002,54106,54294,54406,54499,54532,54551,54574,54601,54639,54672,54688,54746,54795,54901,55074,55172,55246,55319,55375,55511,55593,55642,55869,56041,56132,56224,56282,56338,56404,56602,56674,56746,56835,57134,57291,57303,57628,57869,57996,58037,58116,58138,58269,58369,58457,58585,58675,58727,58997,59373,59501,59557,59825,59873,59904,60157,60209,60635,60682,60892,60992,61309,61360,61443,61493,61542,61562,61592,61760,61920,61954,61967,62035,62048,62351,62505,62671,62751,62886,63068,63105,63764,64204,64350,64373,64452,64548,64697,64745,64955,65146,65318,65684,65720,65724,65758,65872,65897,65967,66009,66012,66023,66099,66110,66178,66222,66335,66355,66374,66414,66455,66464,66531,66542,66555,66802,66811,66836,66868,66887,66903,66916,66932,66960,66978,67003,67029,67069,67161,67235,67262,67280,67293,67339,67351,67537,67543,67548,67555,67560,67571,67581,67587,67624,67643,67706,67745,67754,67893,67979,68043,68046,68054,68157,68309,68324,68378,68440,68532,68546,68566,68689,68811,68849,69040,69302,69378,69408,69506,69568,69734,69758,69794,69880,69884,69987,70060,70094,70127,70174,70195,70228,70258,70290,70325,70328,70356,70585,70746,70813,70869,70925,70948,71012,71121,71158,71190,71207,71215,71246,71268,71289,71302,71323,71356,71390,71416,71448,71468,71500,71517,71558,71591,71605,71645,71662,71746,71773,71811,71847,71855,71897,71921,71995,72004,72011,72063,72081,72088,72100,72103,72110,72119,72126,72149,72172,72191,72225,72229,72342,72377,72462,72499,72608,72616,72730,72755,72787,72806,72825,72831,72844,72893,72899,72921,72968,72986,73022,73028,73136,73150,73155,73209,73241,73274,73290,73312,73382,73433,73471,73499,73601,73640,73667,73689,73707,73894,73908,74044,74127,74132,74224,74412,74498,74510,74535,74613,74620,74665,74753,74757,74808,74814,74831,74849,74864,74883,74893,74907,74918,74976,74981,75033,75080,75111,75133,75160,75194,75237,75287,75295,75368,75388,75411,75474,75819,75874,75909,75946,75999,76071,76095],"terrainbrushpreviewmode":[68885,69121],"appendproperty":[37246],"command+7":[36462],"factor":[4239,4902,7506,7594,7603,7611,7634,7643,7653,7660,8222,10380,11254,11277,11541,11736,12408,12883,13111,13388,13915,14502,14705,14912,17985,18506,21431,21447,22359,23713,24781,25205,27114,28836,29150,29755,32939,33065,39411,43737,44634,46922,47697,48280,50374,50461,50584,51881,52142,66436,71022,72285],"authoring":[1904,2994,5872,6942,8782,16420,17169,17928,28880,30824,31267,31469,33788,37966,39797,54133,54463,54500,54674,58066,58794,64761,71985,74139,74309],"skinning":[1932,2063,5964,6150,11812,13482,21030,22535,25991,29733,34204,34278,34492,71767,73694,74192],"upperchest":[29903],"fixeddpi":[11734],"navajowhite":[63607],"containers":[4515,22012,24018,26092,26108,26242,26277,26491,30500,30554,37198,54302,54694,58369,59275,59852,64091,72706],"'collab_registration_token":[66615],"subfolder1":[70696],"segregated":[29157],"aiff":[4508,4783,5165,6696],"removing":[3865,3922,6195,7029,7628,7637,7648,8765,9330,9794,10055,11391,14501,15967,18991,22590,23395,25588,25859,27554,28266,28465,29736,30718,31619,32183,34888,34955,35321,37671,48662,49033,49362,51886,66524,66664,68546,68629,68852,69061,69334,69440,69640,71016,71119,71395,71415,72103,74197],"lak":[53670],"lsapplicationcategorytype":[34374],"flattens":[25307,30164],"unitystandardparticleinstancing":[31893],"unity_initialize_output":[28937,29514,31903,33041,43356,43977,44900,46384],"pointer's":[60392,60787],"silicon":[28084,28160,29450,36578,50167,52679,69351,69455],"po":[6701],"listeners":[4722,5160,67092,68018],"max®":[1866,1931,1994,2177,2188,7014,9137,16345,21430,24673,71768],"multiplications":[6074],"uint4":[8476],"wav":[265,4508,4781,5165,6696,7469,22578,52099,68624],"instantiation":[3304,5260,6126,29783,39002,39923,57319,57684,66232,73433,73563,74004],"wrecked":[25526],"objecttofollow":[72251],"arg":[759,74746],"executedefaultactionattarget":[57856],"cinema":[2188,7014,23604],"slowdown":[7786],"amazon’s":[67003],"foo":[6027,10928,28504,36792,63799,67149,68319,68396,68999,69250,73636],"shades":[20716,21230,51148],"#d8bfd8":[63646],"iscapturing":[28025],"them":[47,67,159,223,263,346,401,409,422,431,434,475,511,572,608,872,885,897,978,1031,1101,1230,1316,1396,1471,1566,1601,1746,1778,1812,1832,1900,1989,2191,2211,2213,2235,2254,2271,2297,2332,2394,2572,2768,3291,3346,3381,3537,3576,3579,3728,3810,3852,3881,3904,3943,3952,4026,4085,4168,4223,4274,4387,4449,4464,4484,4493,4501,4526,4573,4663,4790,4837,4884,5034,5080,5161,5276,5346,5352,5498,5726,5763,6032,6057,6063,6126,6266,6302,6320,6353,6405,6472,6597,6750,6798,6944,7025,7144,7178,7199,7249,7383,7482,7874,7879,7930,7956,8128,8305,8373,8402,8496,8598,8614,8999,9135,9145,9163,9196,9294,9330,9517,9589,9669,9682,9879,10028,10059,10358,10428,10477,10580,10655,10711,10804,11071,11315,11375,11461,11519,11551,11636,11669,11818,12303,12353,12747,12797,12958,12968,13067,13182,13261,13308,13574,13617,13626,13648,13670,13706,13876,13897,14031,14073,14295,14348,14502,14562,14797,14831,14999,15027,15702,15839,17326,17926,17998,18098,18337,18357,18389,18395,18450,18481,18565,18671,18728,18823,18899,18925,18991,19027,19151,19286,19316,19336,19352,19364,19378,19472,19702,20047,20260,20378,20424,20450,20543,20607,20640,20715,20807,20967,21031,21308,21385,21719,21881,21986,22019,22040,22114,22183,22263,22349,23264,23427,23560,23626,23668,24051,24169,24468,24475,24523,24605,24623,24710,24737,24764,24775,24930,25097,25140,25163,25219,25236,25353,25435,25550,25696,25726,25743,25841,25960,26058,26084,26264,26381,26459,26564,26586,26615,26799,26864,26920,27052,27125,27314,27490,27559,27591,27638,27692,27729,27940,28105,28230,28265,28489,28613,28975,29012,29136,29391,29470,29564,29614,29736,29766,29776,29793,30006,30077,30135,30179,30219,30251,30322,30356,30396,30443,30478,30893,31012,31367,31388,31600,31627,31765,31816,31992,32078,32114,32185,32254,32366,32478,32724,32798,32872,32921,33098,33383,33433,33497,33583,33616,33655,33866,33958,34188,34284,34496,34594,34646,34672,34735,34811,34845,34903,35080,35197,35248,35266,35369,35625,35735,35783,35831,35903,35933,35969,36023,36120,36174,36220,36298,36367,36435,36488,36597,36715,37291,37345,37479,37549,37632,37685,37702,37740,38239,38257,38393,38459,38640,38744,38889,38938,38956,39033,39107,39132,39263,39329,39355,39529,39549,39575,39879,40039,40091,40129,40157,40203,40506,40536,40767,41063,41250,41322,41364,41417,41448,41566,41671,41689,41707,41783,41845,41896,42009,42092,42121,42185,42312,42378,42547,42619,42790,42938,43003,43021,43105,43201,43223,43618,43990,44068,44242,44306,44363,44688,44787,44906,44981,45055,45149,45180,45214,45291,45389,45569,45694,45869,46513,46764,47067,47269,47906,48162,48170,48225,48239,48269,48349,48373,48535,48566,48575,48603,48662,48875,48893,48913,49282,49354,49502,49547,49668,49737,49762,50008,50057,50067,50150,50357,50452,50672,50932,50996,51139,51155,51202,51240,51314,51845,52044,52182,52233,52488,52493,52558,52744,52879,52921,52953,53170,53310,53785,53992,54028,54227,54454,54548,54604,54726,54763,54895,55155,55613,55863,56100,56172,56691,56736,56839,57141,57534,58015,58033,58150,58269,58358,58378,58557,58794,58998,59388,59501,59580,59749,59904,60155,60518,60570,60644,60950,61056,61323,61476,61813,61921,62015,62192,62643,62786,62838,63068,63112,63180,63259,63725,63865,63914,63956,64026,64182,64220,64758,65051,65063,65668,65758,65903,65934,65966,66016,66184,66245,66395,66437,66456,66467,66556,66978,67149,67262,67351,67582,67597,67626,67764,67903,68160,68309,68384,68498,68545,68576,68852,69061,69402,69693,69729,69897,70245,70290,70315,70572,70756,70773,70826,70875,70943,71016,71175,71277,71390,71442,71593,71628,71680,71783,71809,71876,71896,71911,71969,72052,72092,72143,72201,72293,72375,72399,72480,72492,72537,72609,72634,72778,72800,72825,72841,72851,72917,72941,73203,73214,73299,73452,73485,73661,73926,74088,74184,74302,74426,74590,74787,74799,74883,74928,75017,75056,75155,75221,75366,75449,75639,75909,76149],"trackcolor":[61061],"hits":[6725,7931,8568,9704,10012,10244,11608,22784,27065,27331,27484,41962,43150,49609,68130],"clone":[9919,13618,25595,38953,39062,39086,39117,49150,58809,60136,70405,70608],"collaborate":[4384,30424,30493,30501,31074],"draganddropwindow":[56811,57425],"recttransform":[13105,15187,34775,39794,54270],"symptoms":[53989],"pipeline":[138,255,441,561,580,944,1540,1676,3252,3292,3507,3721,3810,4273,4556,4751,5692,5730,5807,5852,6324,6398,6481,6485,6510,6678,6797,6855,6940,8014,8401,8794,9084,9242,9433,9845,9862,9994,10111,10384,10654,12879,13122,13485,13539,13909,14237,17110,17118,17126,17130,17152,17539,17752,18241,18342,18562,18720,18801,19076,19289,20383,20405,20439,21361,21937,21957,22108,22657,23247,23381,23525,23542,23605,23622,24502,24596,24611,24633,24710,25308,25998,26716,26852,27075,27188,27216,27269,27307,27694,28841,29458,29974,30143,30205,30334,31047,31455,31589,31625,34212,34491,34844,34968,35718,36575,37411,37484,37516,37636,37745,38239,38257,38286,38343,38381,38414,38432,38860,38984,39032,40149,40167,40453,41825,41938,41959,42010,42172,42196,42311,42385,42599,42693,42717,42733,42758,42988,43077,43106,43122,43135,43167,43182,43482,43486,43500,43509,43558,43567,43656,43685,43730,43802,44098,44135,44167,44200,44321,44339,44378,44423,44576,44592,44628,44672,44759,44788,44905,45018,45056,45184,45262,45391,45427,45524,45618,45845,45853,45933,45963,46139,46505,46530,46712,46819,47158,47176,47949,47953,47985,48024,48908,48975,49144,49168,49172,49280,49308,49671,49791,50059,50076,50144,50362,50500,50520,50712,52690,66555,68526,68571,68776,68893,69131,69343,69447,71040,71751,71879,72801,72807,72814,74196,74262,75158],"background":[1469,2294,4291,4574,4773,4801,5116,5158,5268,6138,6491,6763,7475,8020,9127,9626,10768,11176,12109,12279,12328,12452,13142,17773,17803,20750,21862,23786,24095,24328,24639,24749,26296,26858,27516,27546,27585,27695,28910,29306,29710,29880,34259,34340,34466,34869,34989,35809,35988,36459,37376,37593,39629,39746,41322,41459,41842,42792,43460,43484,43494,43527,45627,46016,49731,52386,52584,54302,54468,54590,54600,54740,54779,54860,54873,55841,56093,56212,56839,57158,57341,59299,59501,59890,61201,61561,61786,62460,63253,63674,63711,63764,63853,63868,63885,63900,63929,63950,63959,64017,64110,64228,64431,64450,64757,65024,65043,66667,66879,67295,68908,69148,71813,72723,72770,73030,73189,73700,73934,74242,75741],"lands":[13580,22544,25623,50321,71809],"leftmost":[12844,24371,39724,51941],"conditions":[1880,2215,2996,3786,6050,7178,14717,16043,17030,17092,18734,20009,20615,22466,26485,27707,28457,31081,32652,32760,34197,34537,35138,37581,37714,41796,41877,42811,43017,45427,47984,48538,49661,50342,53382,53921,57723,58015,59556,60227,60764,65370,71014,72998,73030,73117],"0xffffffff":[5677],"dir_y":[5229],"obstacle":[92,15850,17986,51212,52034,67864],"asyncread":[27727],"retaining":[2238,22482,67256],"mocking":[5017],"assets\\subfolder\\rethrowerror":[38798],"appdata_tan":[43929,47910],"provisioning_profile_specifier_app":[49789],"specularity":[46721,49630],"frequently":[3299,3457,3489,3846,8218,20208,21323,22373,25381,25401,26044,27931,31642,33095,36093,36697,54123,58128,70736,71012,72346,72368],"bc5":[14383],"settangents":[311],"shown":[174,250,729,2002,2291,2327,2400,2417,2429,2599,3403,3767,4672,4848,5033,5115,5226,6266,6293,6344,7941,8098,8975,9348,10075,11313,11563,11681,11844,12885,13105,13148,13724,14719,14881,14967,18236,18435,20559,20615,20644,21343,21985,22189,22234,22624,23942,24058,24475,24769,24794,25060,25172,25521,25942,27596,27785,27819,27956,28921,30039,30562,31681,33641,33930,34157,34891,34950,35040,35344,35729,36355,36696,38324,38358,39353,39428,39492,39797,39819,40354,41227,41692,42354,43168,44906,48376,48683,49481,49517,49608,49626,49851,50688,50946,51094,51113,51160,51294,51611,51874,52233,52258,52522,52591,53056,53352,53875,54648,54722,54759,55506,56506,56799,57630,57933,58870,59021,63690,65989,66236,66339,66777,67596,68555,71315,72343,72364,74389,74453,75010,75132],"comparisonfunction":[45861],"state’s":[14730],"“helper”":[33243],"cumulative":[13063,22403,26080,36451,62032,75597,76258],"windowsizechangedeventargs":[74720],"stiffer":[9172,13680,13865,14989],"suppresses":[21052],"k_initialindent":[36836,36988],"viewpoint":[6756,22744,37475,39255],"stencilbuffervalue":[45861],"git#v2":[70614],"leaking":[10135],"drv":[25998],"selecteditems":[59130,59466],"editing":[208,1908,2269,2410,2437,3717,4338,5116,7808,9027,9094,9399,9585,9929,10058,10129,10211,12723,12813,12872,13113,13148,13309,13622,13935,14576,14671,16036,17000,17539,18192,18364,18474,18985,20537,20582,20625,20651,20834,23458,24466,24517,24579,25396,27124,28848,30043,30226,30841,31765,32859,33618,34192,34952,35153,35222,37498,38953,39023,39099,39140,39190,39492,39610,40503,40668,40682,41583,41886,42939,48657,49457,49913,50491,50619,51078,51139,51240,51393,51556,52231,52476,52975,53149,54203,54264,54432,58259,63108,64619,65948,66516,71618,71871,71952,72429,72841,74167],"connects":[644,858,6474,7249,8229,8500,9002,9148,9167,9294,9685,9727,10843,11075,11110,11179,12747,13159,13555,13673,13858,14983,16723,23107,25234,26547,26557,26580,33500,33963,36080,50353,50432,66199,66380,72409,76194],"splashscreen":[12282,74673],"computebuffers":[30296,45810],"controller2":[29909],"payload":[66122,67607,68268,68434,75585],"hobbies":[4145],"slower":[567,1767,2243,2274,2399,6374,6434,6480,7017,7562,7660,10575,11738,13239,14330,14501,14955,18509,20340,23444,25225,25262,26451,28174,28402,29128,29153,29661,31711,31745,31997,32344,32610,32849,34988,36511,37261,38471,38501,39825,40570,41491,42364,43456,45583,47454,50002,51964,58398,72344,73198,73693,74635,74796],"scroll":[724,4200,4410,7073,7183,9573,10512,18899,19020,20561,22043,32218,32885,36057,39241,39293,39494,39740,39763,40036,49780,52247,57836,59085,63360,64895,65146,65166,65698,65771,65941,67114,72501],"replies":[68383],"mismatch":[25210,61559,62838],"certificate":[1163,12601,20233,28189,52874,53183,53370,53780,66635,67762,69885,70191,74654],"precompiled":[6032,7368,26078,28601,33843,40190,66475,68637,69008,69260,71045,72137],"bdwgc":[74555],"worse":[5948,7506,26096,30345,37675,50652,52673],"marshaled":[40591],"metres":[14951,30241],"manipulator":[55975,56975,57416,60209,65368,71657],"switches":[2295,5119,7133,11178,12889,22794,23256,23616,24891,26073,32164,35080,38336,38738,40091,44534,48150,51304,55182,66350,69957,72763],"playerspawnpos":[66241],"outlinedataprovider":[48480],"settable":[21326],"editorversion":[1608],"sv_depth":[45719],"usesreversedzbuffer":[19759,44967],"mypoint_clamp_sampler":[45243],"#800080":[63625],"eiusmod":[65174],"tunnels":[37685,71882],"4with":[38049],"ignores":[807,1039,7156,7962,8044,8166,8266,8376,8768,9029,12105,12588,12725,13607,14504,18225,18728,21029,21430,21587,23277,32090,32167,32763,34994,36068,38505,39549,39652,41449,42689,43566,43684,44244,44338,44422,44993,45096,45261,46094,48215,48599,50503,62856,68897,69135,70389,70709,70875,71175,71588,71882,72778,73051,74157],"fn":[2256],"publish":[401,569,614,662,895,938,1118,1135,1810,2762,3994,4064,4350,4421,4484,4563,12022,12217,13972,18426,18819,18934,19274,22946,25688,26042,26106,28119,28789,33885,35793,37268,37473,52707,52812,52877,53081,53269,53782,54088,67147,67239,70337,71469,72177,73390,73592,74121,74883],"vectorsenable":[13534],"destinationvalue":[43741],"erratic":[11635,31836,32218],"uptodown":[53915],"mydelegate":[55979],"webglinput":[73271,73480],"8k":[19314,72497],"internal_callupdatefunctions":[70460],"folder1":[70610],"m_backgroundcolor":[76485],"scrollable":[39673,39765,59099,64878,65164,65952,66383],"skip":[5726,14851,35039,35920,46783,47810,49549,55121,57821,57928,71067,71266,72370],"istogglechecked":[62765],"antiquewhite":[63509],"rest":[374,550,2120,2192,2277,2411,3468,3766,4161,4852,6962,9180,9463,10403,11442,11508,11569,12754,13275,13292,13659,14849,14951,18076,18132,18173,18314,18500,20587,20701,21388,22085,23069,25381,32371,33547,36060,36454,38292,38393,38559,38589,38851,42004,42041,42411,43670,43786,43854,44118,44150,44182,44354,44610,44643,44828,44986,45113,45411,45540,45588,45610,45851,47127,47170,47377,47944,47968,48006,48039,48250,50693,52126,52278,54692,54795,57797,62034,68807,70692,73485,75257],"investigate":[8972,18318,19048,21870,30511,33470,34377,35697,35895,36174,36522,40541,52599,54688,72056,74548],"positioning":[7620,10082,13666,22236,24276,24466,24731,24740,34785,42773,43120,50929,51155,51245,54727,56049,57132,58459,59865,60616,61193,63710,64099,65682,71870],"pariscontent":[57154],"movie":[10729,12648,14907,25237,35258,35795,49737,52065,68085,72538],"overuse":[30904],"trees":[1942,2260,6315,6320,6999,7147,7926,10575,12927,13816,14775,15020,18410,22480,23377,29133,30329,31819,33902,37565,37899,38674,40039,42876,43618,45639,48223,49706,50451,50578,50625,52176,52236,52250,55511,59554,59904,62803],"directed":[21132],"scriptrunbehaviourlateupdate":[35707],"prewarmed":[42211],"administrative":[239,4485,30404],"createpanelcontent":[30528],"nodeprecated":[37848],"injection":[6890,16564,28108],"texturepreviewelement":[54947,55089],"\\appdata\\local\\virtualstore\\programdata\\unity":[239],"proceeding":[67864,70405],"innery":[61141],"assembliestype":[40382],"written":[810,1820,1832,2216,2235,3453,3575,3817,7179,8411,8893,8980,13310,18153,26295,27538,28474,29162,29922,34696,35360,35656,36498,41336,42623,42798,43335,43571,44343,44362,44893,45178,45200,45213,45293,45718,46295,46726,47661,49371,49885,52325,52488,61558,66133,66621,68038,68733,69337,69443,73639,73964,74584,74865],"unpacking":[68530],"corrupted":[3344,69307,69413,74153],"lge":[396],"chooseset":[13078],"includeifcontains":[48133],"disperses":[34865],"calculation":[3493,5972,9482,21587,22186,22506,26060,26931,27044,36588,37661,38508,42373,43160,45280,47148,49621,50972,51074,54262,56101,71877,72297],"dictate":[23953],"xrnode":[76174],"5searches":[40792],"−":[62853],"soundfield":[258,7478],"sudden":[2067,50615],"marshalling":[34740],"truetype":[9247,13992,58370],"photocapture":[23147],"builtinpropertymetadata":[20257],"nothing":[4070,4768,5062,6294,6458,10028,11466,11557,12949,13419,15839,21401,21516,24882,31816,34165,34491,36060,38403,40226,41843,44026,48258,48593,49714,49837,54449,61553,62594,68086,75249,75599,75762],"preparecompleted":[14917],"thing_t24_staticfields":[72035],"avatarikgoals":[29111],"arrow_right":[63440],"tls":[20232,29154,66598,67921],"fixedupdate":[6125,7155,9337,10714,11548,14557,21160,21323,23077,25992,33486,33866,35706,36333,38532,51988,74437],"#5a0000":[63294],"tilemapeditortool":[51578],"precision":[554,5968,7017,8084,8108,9998,10138,10579,11319,12357,13412,14375,19229,21509,22806,27509,27538,29331,29467,29662,30255,34291,34415,43188,43884,44024,44053,44228,44869,45129,45570,45701,47299,48528,58081,61557,73088,74276],"dictates":[4845,5115,10262,14557,14599,14823,17978,23077,32303],"module’s":[32240,35266,35369,35565,35625,35691,35890,35903,35927,35969,36023,36120,36174,36252,36298,36356,36531],"found":[2216,3088,3504,3511,4973,5919,5987,6833,7121,7179,8088,8620,10581,11048,13042,14751,15851,16043,17030,17818,17956,18902,19532,21154,21402,23089,24916,25031,25114,26785,27469,27687,28063,28873,29918,30084,30121,30166,32886,33125,33496,33640,34797,35171,36937,38116,38661,39305,40916,41641,41745,43920,44327,45141,45593,45625,45990,48459,49436,49619,49892,50948,51323,52616,54690,54729,58015,59077,65968,66439,66727,67121,68789,68954,69200,70359,73106,75144,75960,76065,76129],"simulation":[2997,6150,7014,7215,8302,8502,8786,9179,10572,11510,11527,11598,13451,14560,14702,16330,16635,16811,20063,20095,22301,29393,29613,31228,31856,32137,32165,32727,32849,33622,33763,35338,35744,36333,37432,37596,37617,38053,38462,38483,38492,38501,38519,38536,38541,38574,38609,38624,38648,51987,53285,67389,68009,68725,68863,69096,71899,72917,74380,75137,75214,75444],"aster":[41472],"occurs":[219,1038,1789,2704,3769,5774,6034,7913,8036,9034,10724,12401,12515,12888,14734,15867,20154,21052,21154,21332,22305,23890,25569,25845,26878,27578,28450,29277,29434,31627,32318,33347,34903,35126,35322,36753,37227,38610,43114,43654,43735,44848,48001,48058,49901,50007,50023,50065,50444,51965,52220,52641,55582,55747,55805,57587,57817,57852,58193,59191,60223,60564,60816,61796,62596,63732,66006,66696,67090,67153,67383,68158,70446,71028,73300,74013,75741],"emission":[1880,10439,20706,22163,22466,26789,27158,29484,31776,32115,32170,32371,32631,32658,35129,36152,38362,41772,42713,42729,42754,44444,45198,45376,46220,46721,49482,49603,68868,69102],"lightgrey":[63580],"precomputing":[6803,9999,22124,26840,49720],"recompiled":[19028,20339,40219,40450],"unset":[54368,54564,54635,54788,58066,59865,75553],"framecapture":[74928],"invokemethodorcoroutinechecked":[52564],"r21d":[1634],"#32cd32":[63590],"perceptually":[20728],"command+shift+v":[24563],"explained":[3732,5065,6397,6723,8563,23814,24766,25845,37726,48683,49522,49608,52000,54579,67879],"disassembled":[45039],"promotion":[4355,4370,12216,17370],"instantiateassetbundles":[3329],"mqswcqydvqqgewjvuzevmbmga1uechmmrglnaunlcnqgsw5jmrkwfwydvqqlexb3":[69926],"ao":[10021,26934,71834],"point_cookies":[44573],"verb":[68283,68433,68481],"myrange":[20999],"stopimmediatepropagation":[57964,60255],"livelink":[29119],"insignificant":[37702,71872],"shots":[16707,21633,22024],"conflicting":[3895,7970,8174,8271,8389,8774,9039,12733,14509,26572,34610,43286,44737,63808,67158,69012,69264,70224],"vector2intfieldsnippet":[65597],"oversampling":[58398],"0x5a36dedd":[64724],"#e0ffff":[63576],"1x":[52725],"m_targetplatform":[76340],"renderingplugin":[29987],"“grass”":[50401],"transparents":[37958],"eulerangles":[12989,37285],"cause":[120,220,478,936,2292,3486,3666,3697,3785,3860,4574,4867,5262,5985,6139,8188,8197,8420,8981,9010,9174,9304,9345,9498,9740,10135,10439,10609,10872,11605,11824,12216,12359,12713,12973,13171,13264,13570,13619,13682,13837,13867,14501,14849,14996,15866,18112,18225,18377,18501,19030,19164,19480,20314,21040,21503,21739,23439,24475,24916,25097,25845,26112,26485,26713,27003,27210,27310,27601,27695,28249,28455,28474,29183,29360,29568,29906,30124,30345,30904,31634,32115,32180,32218,32284,33081,33307,33470,34293,34503,34721,34956,34996,35320,35695,36334,36610,36687,37713,37744,38532,38850,39950,41491,43173,44234,48593,50969,51025,51168,51616,52042,52478,52550,52877,53782,54016,54279,54736,58015,59557,61558,62030,62886,64320,66256,66755,67092,67151,68641,68781,71044,73024,73088,73395,73485,73615,74548,75415],"m_tagstring":[21654,76430],"gettransactionreceiptforproduct":[67432],"f2":[9811,36728],"maintemplate":[12004,23482,69141],"bitfield":[75896],"is_trial_period":[67475],"calendar":[22317],"setmainasset":[40483],"d_scrollleft":[63473],"cases":[1849,1962,1967,2115,2189,2415,3895,4584,4861,4869,5730,5986,6118,6836,7178,8222,8326,8616,9136,9386,9608,11613,11916,12367,12555,12975,13306,13417,13463,14710,15838,17925,18076,18508,19220,19384,19501,20239,20438,21514,21572,21937,22085,23468,23560,24766,24984,25163,25194,25845,26784,27754,28568,28856,29277,29360,29678,30377,30871,32701,33098,33582,33655,34306,34392,34511,34678,35127,36739,37261,37345,37624,37740,38462,38661,38858,39396,39663,39758,39882,39995,40083,40555,42449,43689,43957,44081,44830,45200,45252,45462,45585,45643,45848,46040,46783,47176,47908,48335,49363,49432,49457,50058,50945,51785,51976,52488,52567,54106,54259,54736,58396,59596,59872,62030,62740,63768,64697,65898,65975,65992,66261,66745,66827,66861,67090,67196,68090,68880,69116,69303,69409,69769,69810,69901,70449,70965,71027,72273,72477,72890,72940,72997,73397,73499,73616,73876,74034,74169,74569,75021,75076,75191,75411,75872],"frying":[9396],"assetbundlerequest":[3403,35764],"officially":[1614,22993,23427,28390,31381,50170,70756,71013,71162,73480,74990,75134],"backbuffer":[27538,34485,72995],"connect":[350,560,603,631,634,658,695,700,840,1484,1757,2253,2375,2836,2954,3729,4145,4480,4834,5094,6369,6426,8555,9002,9145,9163,9297,9727,10258,11039,13163,13555,13673,13869,14983,16091,16220,17474,18134,19070,21068,22024,22520,25132,26562,28167,28430,28762,30052,31084,31484,32729,33509,33756,33923,34156,35044,35339,35494,35501,35797,35957,35999,36495,38984,40653,41935,50145,50346,50430,52599,52687,53432,54838,57638,58844,60610,61299,66229,66351,66375,66531,66635,67023,67121,67516,67644,67755,67893,68054,68614,70108,72081,72398,72514,72912,73175,73299,74546,74630,74665,74790,74824,74848,75195,76194],"eventmodifiers":[58005,59760,65342],"weather":[5872],"descendants":[24527,54883,57822,60369,60543,60771,62867,64033,64333],"frond":[48312,52112],"supplied":[6688,18375,19626,23177,25462,27559,27679,32452,37690,45168,48338,50929,67519,67538,67549,67584,67708,67774,67974,68223,68283,68384,71969,73953,75509,76335],"vp9":[72643],"placeholders":[16470,35248,51149,59065,72646],"'medium":[18615],"slight":[6281,7446,7463,7483,8566,13182,39757,41754,51999,57929,71808,73689],"pixelation":[36678],"incremented":[26121],"removes":[468,989,3795,5276,6136,6352,6403,6965,7031,8093,8213,8280,9454,9797,10010,10060,10226,11445,11842,12757,13278,13295,13417,18125,18172,18979,19141,20211,20739,21514,22128,22510,24630,24971,27566,28463,28994,30243,30864,32184,32298,32739,33661,36328,36538,36609,37349,38242,38467,39635,40522,41728,41898,42187,45488,48261,48651,49621,50453,51531,51917,53238,53703,54690,57251,59144,60325,60607,60644,60813,61327,61497,62758,66456,66462,67852,69022,69275,69350,69454,71096,71396,71418,71541,71627,72422,73392,75114],"under":[132,1127,1138,1351,1608,1838,1903,2037,2272,2372,2395,3520,3602,3786,3923,3964,4155,4263,4417,4426,4443,4590,5099,5990,6145,6222,6293,6737,7368,7568,7575,7827,7858,8385,8527,9135,9288,9463,10068,10540,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11358,11726,12157,12369,12557,13238,13477,13614,13734,13935,14711,14717,14864,15862,16043,17030,18110,18625,18681,18720,18733,18756,18823,18925,19067,19222,20220,20457,20721,21029,21173,21837,21931,21997,22040,22089,22301,23764,24519,24895,24956,25178,25916,26044,26296,26593,26690,27478,27576,27815,27897,27923,27953,29098,29663,29821,30475,30881,31625,33492,33524,34308,34394,34513,34537,35690,35781,35890,36240,36690,36707,37442,37619,37627,38057,38458,38536,38541,38574,38624,38643,38747,38849,39305,39402,40764,41876,41954,42378,42811,43002,43462,44087,44315,45427,47370,47984,48595,50283,50342,50392,50414,50489,50543,50641,51591,52250,53176,53838,54050,54333,54452,54553,54577,54854,55116,55509,55628,55672,55751,55828,56101,57140,57584,57825,58140,58234,58808,59023,59541,59594,60397,60573,60810,62114,62743,64324,65916,65984,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66467,66595,67257,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68636,68803,68834,69033,69079,69568,69705,69748,69780,69819,70187,70228,70315,70328,70390,70731,70869,71014,71216,71323,71454,71608,72227,72380,72476,72516,73030,73501,73920,74212,74394,74422,74602,74867,75004,75347,75587],"this's":[73933],"getfilename":[2531],"keyword1":[70857],"d_toggle_on_hover":[63489],"conf":[27621,73751],"peculiar":[33583],"layeroverridepriority":[7970,8174,8271,8389,8774,9039,12733,14509],"repeatedly":[2260,9180,13692,13876,22518,29916,33215,34925,39132,51607,51815,54033,57995,67168,76194],"green":[179,2206,4996,6542,7328,7859,8234,8352,12866,14103,14321,14672,17999,18098,18436,24253,24489,27210,27331,27477,27823,29485,30261,30627,32781,33407,34781,36501,38660,40620,42963,43192,43416,44111,44521,47364,48524,49511,49530,49630,49838,50062,51056,53701,55872,57050,61070,61473,62014,62339,63560,64151,64571,64683,71811,72756,75145],"culling":[5269,5331,5491,5685,5734,5802,6992,7157,7924,8021,9525,9896,11319,11333,13144,13430,14540,16755,18562,21352,21529,22751,25991,29148,29727,29886,30165,30169,30176,30206,30227,30263,30352,30513,32178,32296,33482,36091,37701,37731,37793,38242,38297,38347,38943,39238,41746,42675,43128,43140,44133,44165,45792,47026,49034,49721,49731,66010,71561,72761,74293,75453],"all":[67,122,156,185,221,250,291,456,499,512,526,629,673,701,962,1112,1192,1227,1266,1272,1302,1471,1566,1621,1791,1901,1961,1985,2034,2063,2191,2205,2240,2268,2298,2324,2370,2392,2415,2427,2663,2718,2768,2990,3086,3245,3300,3401,3459,3483,3522,3577,3584,3692,3765,3781,3855,3889,3903,3920,3959,3990,4058,4245,4385,4440,4467,4509,4559,4573,4651,4773,4799,4808,4881,5022,5080,5315,5330,5437,5581,5718,5768,5950,5984,6061,6105,6222,6294,6315,6351,6400,6493,6689,6798,6872,6965,7006,7146,7185,7202,7231,7368,7494,7562,7615,7637,7657,7681,7767,7779,7861,7920,7930,8001,8020,8104,8128,8146,8198,8302,8438,8496,8590,8772,8843,9077,9222,9260,9334,9463,9557,9638,9747,9785,9878,9953,10003,10063,10127,10270,10332,10398,10433,10446,10536,10570,10623,10711,10722,10793,10812,11075,11103,11177,11190,11203,11303,11320,11339,11376,11417,11445,11469,11477,11532,11600,11657,11670,11724,12038,12279,12353,12555,12702,12757,12775,12833,12884,12975,13042,13115,13120,13242,13264,13278,13295,13307,13363,13430,13457,13575,13588,13714,13729,13818,13822,13833,13929,13962,14031,14149,14232,14333,14506,14607,14708,14734,14851,14928,14973,15034,15817,15854,15935,15967,16060,17000,17045,17062,17282,17296,17576,17752,17942,17946,18001,18056,18229,18313,18379,18435,18454,18481,18581,18819,18930,18981,19036,19043,19220,19467,19617,19685,20000,20107,20116,20181,20222,20239,20418,20454,20538,20583,20627,20688,20807,21005,21029,21164,21186,21230,21308,21400,21475,21607,21624,21676,21716,21964,22001,22024,22068,22104,22125,22186,22230,22294,23264,23398,23448,23480,23551,23664,23685,23814,23882,24052,24169,24299,24475,24506,24526,24608,24631,24650,24737,24747,24780,24794,24904,24965,25034,25065,25110,25179,25187,25292,25348,25413,25447,25500,25695,25814,25895,25904,25928,25994,26072,26109,26259,26271,26294,26429,26459,26472,26560,26569,26680,26688,26707,26723,26783,26797,26843,26914,26985,27038,27065,27125,27169,27186,27213,27265,27296,27320,27331,27512,27527,27549,27624,27647,27687,27702,27763,27898,27923,28020,28054,28176,28248,28353,28378,28475,28867,28909,28963,28994,29043,29114,29152,29337,29420,29457,29486,29664,29695,29713,29744,29764,29861,29897,29915,30179,30219,30232,30265,30292,30320,30397,30452,30478,30528,30868,31385,31606,31621,31816,31852,31870,32174,32243,32372,32702,32731,32775,32868,32911,33022,33082,33087,33381,33399,33425,33475,33546,33604,33659,33893,33902,34161,34209,34284,34392,34496,34605,34682,34698,34783,34856,34883,34911,34923,34939,34995,35220,35275,35379,35582,35622,35692,35772,35806,35931,35997,36020,36118,36167,36235,36348,36394,36451,36470,36586,36674,36693,36916,37259,37268,37303,37349,37481,37509,37624,37627,37668,37684,37702,37731,37797,38314,38345,38390,38433,38482,38532,38541,38580,38609,38624,38659,38735,38869,38906,39012,39062,39088,39096,39127,39159,39318,39347,39411,39468,39493,39512,39524,39529,39546,39575,39662,39677,39790,39804,39824,39913,40129,40174,40447,40529,40544,40643,40662,40682,40697,40761,40767,40794,40915,41160,41325,41359,41420,41448,41467,41480,41490,41532,41570,41596,41674,41714,41761,41815,41835,41884,42005,42049,42131,42181,42243,42338,42363,42397,42425,42447,42637,42691,42790,42811,43038,43165,43199,43218,43336,43494,43574,43660,43706,43728,43801,43985,44097,44139,44171,44205,44244,44363,44392,44456,44548,44626,44678,44788,44870,44996,45064,45142,45197,45220,45267,45419,45462,45520,45577,45614,45621,45667,45857,46061,46158,46520,46717,46977,47070,47246,47957,47990,48028,48123,48163,48350,48354,48369,48443,48529,48565,48583,48653,48683,48976,49289,49325,49411,49423,49512,49540,49565,49593,49609,49646,49668,49719,49758,49837,50002,50011,50035,50057,50067,50095,50145,50159,50343,50362,50455,50543,50552,50592,50652,50670,50726,50942,50978,50996,51166,51205,51244,51388,51527,51552,51614,51714,51785,51897,52010,52132,52176,52233,52244,52491,52558,52824,52888,52953,53151,53262,53687,53785,54002,54213,54225,54304,54443,54553,54591,54674,54715,54757,54821,54883,54898,54969,55074,55172,55246,55319,55578,55725,55813,56077,56338,56404,56689,56832,57137,57298,57343,57561,57614,57707,57821,57852,57971,58149,58195,58276,58370,58436,58673,58844,58998,59277,59534,59564,59733,59829,59924,60164,60218,60360,60496,60544,60610,60647,60765,61201,61323,61445,61484,61553,61794,61908,61923,61960,61970,62005,62053,62202,62609,62730,62742,62846,63069,63107,63180,63230,63505,63658,63697,63714,63724,63866,63912,64035,64083,64234,64315,64322,64387,64458,64528,64893,65081,65286,65736,65764,65885,65902,65934,65987,65999,66110,66190,66237,66363,66379,66464,66600,66823,66852,66907,66990,67064,67195,67252,67262,67272,67400,67585,67654,67755,67862,67903,68003,68070,68110,68246,68379,68464,68513,68536,68545,68604,68694,68900,69138,69307,69351,69413,69729,70102,70191,70236,70295,70349,70404,70598,70746,70761,70823,70871,70943,71011,71162,71176,71190,71206,71216,71275,71319,71344,71409,71418,71523,71567,71602,71672,71760,71809,71848,71862,71902,71919,71969,72068,72243,72292,72444,72697,72723,72776,72867,72899,72931,72998,73022,73035,73228,73292,73319,73384,73443,73482,73561,73607,73904,73924,74180,74237,74581,74611,74639,74707,74838,74867,74893,74928,75022,75145,75198,75265,75325,75395,75444,75478,75744,75882,75918,76037,76094],"internalregistereffectdefinition":[4890],"'main":[40469],"myregistry":[70036],"r10g10b10a2":[34288,34501],"automatichdrtonemapping":[24509],"redo":[52089,58856,74151],"anisotropic":[12897,13220,22728,25254,37916,45250,50131],"numeric":[2296,4519,7169,7930,10003,20671,25031,28868,32458,32852,34993,39740,39977,43947,50945,51952,63743,64258,69314,69420,70756,72246,73553],"changelogurl":[18936,70830],"supplement":[23417,25696],"assetbundlecreaterequest":[3358],"appletvwebgl":[23551],"attributes":[280,1546,4712,8030,9620,10832,13441,17092,20423,20918,22638,24968,28477,29340,30332,31920,36762,40361,40594,41821,43326,43337,44366,45089,49005,49687,51785,53921,54295,54435,54504,54559,54788,56692,57299,57302,57534,57619,58052,58338,58923,59589,61353,61449,61662,64761,65692,65705,65754,65867,66497,67085,67161,71103,75632,75782],"indianred":[63566],"conversations":[40063],"cullingpassindexes":[75472],"inputs":[717,2256,6514,8949,13784,18500,19667,20657,27158,27512,27549,32934,34130,34166,35129,37990,40009,41876,44366,45669,46722,47278,47903,52749,57982,58132,59541,59720,68807,70245,73483,75979,76081,76195],"doublevalue":[54989],"m_father":[21672,76464],"ixrloaderpreinit":[75876],"\\users\\myusername\\":[70206],"tankscript":[56403],"alternatives":[9426,33369,37749],"multipartformfilesection":[68378],"renderer":[8,100,104,177,330,5340,5350,5721,5728,5809,5856,5971,7873,7877,7965,8141,8280,9224,9515,10037,10108,10203,10339,10605,10611,10715,10751,12728,13154,13450,13599,13718,13742,13783,13938,14469,14532,14566,14833,15061,16005,17963,18263,20398,20425,20713,21474,22016,22827,23368,23415,25598,26669,27018,27041,27094,27101,27319,27756,28856,29404,29727,29789,30002,30173,30181,30233,30265,30341,31865,32239,32453,32712,32916,33374,34682,35958,36691,37348,37488,37530,37973,38297,41510,43127,43185,45100,45142,45986,47190,48130,48233,48302,48517,48610,48617,48899,49368,49685,49720,50132,50500,51058,51122,51196,51251,51365,51849,52487,63122,65907,71880,72804,72817,74230,75185,76505],"equip":[11],"ui":[728,1091,1140,1216,1982,2668,2998,3103,3232,3471,4608,4728,4875,5838,5949,7995,8104,8128,8142,9096,9553,9622,10109,10515,11136,11152,11160,11701,12105,12438,13100,13706,13977,14235,14664,16735,16747,17642,17740,17835,17942,17969,17972,18336,18454,19018,19673,19972,20003,20089,20465,20624,20766,20862,20917,21193,21381,22624,23645,24275,24456,24723,24739,24767,24790,24899,25348,25816,26651,27125,28875,29420,30363,30516,30937,30994,31061,31765,31816,32063,33171,33489,33784,34785,35013,35462,35513,35604,35881,36033,36164,36431,36504,37227,37351,37604,37628,37758,38281,38660,39402,39494,39603,39666,39768,39812,40091,42983,43323,47154,48502,48871,49190,49817,49913,50359,50425,50507,50524,50532,50547,50555,50565,50577,50645,50672,50687,50859,51133,51232,52012,52238,52642,52743,52769,54105,54221,54262,54290,54396,54495,54508,54543,54589,54601,54609,54631,54671,54687,54709,54737,54757,54772,54795,54848,54883,54932,55039,55088,55191,55233,55312,55497,55545,55557,55638,55726,55828,55894,56037,56039,56097,56339,56393,56472,56530,56595,56667,56739,56795,57122,57295,57333,57598,57614,57628,57805,57808,57852,57969,57994,58018,58027,58032,58127,58234,58378,58578,58581,58651,58730,58997,59267,59501,59541,59548,59753,59828,59904,60136,60184,60209,60354,60357,60495,60540,60617,60670,60761,60884,60985,61194,61298,61333,61480,61483,61523,61562,61591,61752,61929,61950,61973,61975,61989,62048,62134,62206,62349,62506,62586,62641,62738,62836,63064,63104,63122,63221,63342,63681,63696,63710,63737,63826,63854,63872,63886,63930,63951,64007,64020,64082,64204,64314,64362,64372,64398,64413,64444,64470,64491,64514,64530,64566,64613,64636,64676,64718,64745,64774,64795,64811,64825,64844,64862,64879,64917,64938,64955,64973,64986,65000,65033,65051,65063,65081,65102,65117,65148,65166,65222,65246,65270,65294,65315,65368,65395,65415,65434,65446,65460,65478,65492,65503,65514,65540,65555,65570,65590,65610,65630,65651,65670,65683,65686,65698,65724,65733,65754,65773,65850,65895,65919,65922,65954,65956,65979,66047,66194,66228,66335,66361,66383,66938,67188,68135,68655,68733,68903,69143,69310,69416,70386,70803,71563,71680,71998,72101,72716,72965,73276,73364,73480,73905,74138,74241,74724,74928,75017,75079,75185,75320,75673,75969,76086],"stall":[4574,35764,42185],"breakdowns":[53487],"retina":[2839,22042,27065,63792],"getunitymaintargetguid":[49795],"transitive":[22997,70292],"parent":[2260,2415,3012,5290,7219,8065,8114,8134,9386,10130,10354,10593,11272,11433,13100,13589,14572,14670,15835,18159,19042,19455,20947,21327,21418,21475,22244,22500,24526,24730,24740,24772,25225,25606,25622,26058,27325,28950,28986,29013,29023,31797,31840,32078,32165,32648,32730,33572,34041,34237,35347,35695,36348,36727,38463,38640,38735,39377,39493,39666,39727,39776,39886,40088,40534,40674,41506,51123,51137,51842,52114,52194,52235,52243,54254,54315,54450,54543,54590,54643,54723,54883,55578,55731,55847,56100,56657,56894,57598,57625,57633,57854,57972,58143,58809,59749,59837,60136,60518,60543,60610,60822,61313,62124,62796,62840,63697,63737,63830,64101,65286,65512,65718,65733,65885,65994,66897,67383,68501,71702,76262],"#x63":[66770],"istouching":[35313],"themself":[2037],"selectors'":[63817],"monthly":[4230,22359,53500,67170],"“repeat”":[45247],"bubbles":[55643,55717,55809,55907,57562,57813,58196,59542,59721,59738,59817,60361,60498,60554,60766,62117,62601],"getpropertyheight":[59654],"location’s":[36636],"line":[553,733,861,1035,1623,1771,1859,1886,2284,2332,2381,2429,2723,2810,3675,4280,4662,5236,5920,6385,6440,6723,7329,7543,7556,8003,8420,8989,9024,9079,9211,9269,9301,9583,9641,10203,10614,10745,10896,12659,12721,12942,13054,13164,13454,13552,13985,14568,14723,14999,15702,16020,17642,17930,18119,18314,19028,19115,19208,19477,19636,20073,20190,20392,20713,21015,21659,22103,22827,23796,23910,24554,24640,24920,25102,25443,25497,25847,25913,26030,26569,26591,26689,26699,26846,26919,27622,27764,27848,28079,28183,28186,28280,28394,28603,28669,28713,28755,29283,29557,29695,29858,29918,30101,30141,30307,30490,32052,32407,32742,32869,33065,33495,33537,33782,34200,34891,35029,35218,35279,35817,36058,36118,36480,36674,38153,38278,38903,39351,39622,40050,41228,41336,41994,43192,45037,47711,48053,49390,49524,49785,49849,49983,50941,51245,51427,52233,52627,52737,53040,53743,54214,54549,54635,56839,58178,58278,58496,61828,61967,62009,62099,62412,63244,64900,65191,65776,65865,65999,66016,66431,66584,66894,66978,68498,68744,68831,69076,70045,70120,70345,70384,70651,70821,70926,71681,72086,72310,72405,72475,72817,73435,73792,73954,74555,74646,74727,74798,74929],"division":[1171,5006,24985,43897,65986,72326,74210],"symbols_filename":[73949,74110],"uta_agent_cache_bytes_evicted_unscheduled":[66667],"latch":[74365],"'webgl_compressed_texture_astc'":[74096],"alloc":[26160,27992,33391,33454,35695,35896,36041,36497],"granted":[1499,52640,54066,67624],"“ab”":[33148],"classtypes":[3273],"rotationangle":[76268],"keyboards":[652,717,9772,25031,25335,29695,61800,69333,69439],"float3x3":[44882],"squashing":[22061,22596],"builtin":[13854,28062,36290,63439,69597],"unetencryptionlib_decrypt":[66139],"via":[8,80,122,178,234,560,691,721,778,846,1277,1754,1795,1998,2462,3014,3493,3577,3867,4071,4526,4644,4776,4855,4959,5019,5954,6041,6325,6691,6775,6829,7025,7488,8205,8765,8981,9059,9334,10201,11247,11305,11550,11812,12198,12786,13130,13246,13645,13684,13744,14470,14848,15011,15885,16060,16564,17062,17092,17474,17980,18570,18819,19018,20438,20597,20625,21219,21390,22113,22128,22203,23045,25066,25343,25347,25487,25920,26096,26548,26597,27600,27777,28058,28067,28137,28609,28867,29423,29566,29584,30041,31718,31814,32174,32452,32657,32705,32738,32847,33467,33494,33655,33784,34710,34911,34956,35204,35280,35376,35476,35701,35797,35937,36098,36227,36333,36367,36488,36584,36633,36693,37710,37924,38278,38463,38492,38542,38575,38611,38877,38988,40002,40168,40505,40524,40534,40557,40674,41647,42142,43897,44957,45149,45184,45663,46321,47189,48533,48578,48610,49746,49752,50178,52590,52739,52768,52812,52877,52957,53176,53303,53711,53782,53996,54018,54445,54501,55726,56722,58732,59045,59868,60443,62113,62773,66158,66236,66394,66555,67063,67249,67558,67568,67706,67771,67852,68064,68159,68281,68311,68433,68828,68960,69073,71952,72285,72399,72477,72645,72794,73091,73133,73392,73416,73685,73917,74184,74334,74549,74735,74782,74820,75109,75256,75434,75516,76035,76102],"#f5f5dc":[63513],"exportassetpath3":[21032],"scaleandcrop":[68904,69144],"sharp":[7992,9878,10072,14288,18358,20577,22798,27060,36638,38411,41775,49474,49555,50551],"trading":[14320],"100x100x100":[6111],"converge":[29661,33533,33608,66002,75579],"seat":[28609,30385,30471,30503],"strip":[1352,1717,4820,5027,5116,5719,9507,13041,20211,23584,26077,28476,30555,41874,41944,42170,42947,43009,43024,44549,45019,52737,66461,72510,73024,73387],"spanning":[2937],"pixel’s":[44345],"affect":[64,220,687,872,1107,1483,1791,2006,2097,3311,3760,4665,5137,5160,7232,7807,7944,8068,8128,8199,8291,9422,9462,9856,9892,9951,9999,10499,10569,10633,10726,11300,11435,11859,12398,12630,12798,12963,13166,13238,13263,13477,13709,13729,13771,13799,13811,14703,14764,15039,16835,18149,18209,18425,18720,19000,19450,20583,21405,21445,22657,23559,23726,23882,25170,25328,26645,26680,26714,26791,26842,27055,27209,27495,27639,27759,29330,29695,29736,29894,30355,31777,31815,31853,32141,32223,33088,33512,34915,35203,35697,35795,35958,36330,36549,37541,37675,37698,37798,38345,38382,39069,39120,39149,39228,39309,39958,40180,41894,42049,42125,42356,42447,42955,43042,44307,44544,45110,45294,45403,46396,48262,48329,48642,48683,49491,49530,49785,49908,50392,50409,50452,50522,50661,51388,51889,52190,52590,52737,52926,53183,54718,54769,55512,56720,57963,59540,59833,60515,61470,61489,62796,63827,63887,64024,64275,66759,68567,68690,68812,68850,69041,69296,69402,69814,71020,71634,71643,72741,72986,73313,73696,75027],"min_price":[40787],"20gb":[52739],"#ffffffff":[49877,61467],"steinberg":[5015],"processorfrequency":[19710],"references":[556,726,1778,1945,1998,2217,2235,2375,2779,3061,3308,3443,3486,3890,6068,6472,7179,7367,7429,9079,9136,9262,9399,10605,10612,10701,11314,13323,16060,18120,18448,18623,18844,20183,20654,21402,22474,24930,25089,25694,26114,26672,27169,28484,28846,30110,30899,33074,33094,33381,33415,33420,33457,34607,35130,35232,36093,36220,36781,37668,38735,39017,39103,39868,40172,40442,40573,40750,41286,48262,48350,49185,49417,49640,51820,52100,52263,52624,54891,57208,57636,58381,58618,58737,59002,59393,60156,61300,62772,63065,63221,63229,63771,66467,66929,69006,69258,70386,71017,71615,71704,72260,72871,73201,73302,73406,73630,74787,76095],"chooses":[4355,12451,14818,19455,23718,25258,27290,32687,32870,41899,42106,44320,45520,48510,48551,50660,63796,70225],"remoting":[26079,66503],"bitwise":[26622],"files\\unity\\editor\\data\\tools\\unityyamlmerge":[48061],"pen":[12664,53659,58484,60761],"uv":[316,1681,6515,8734,9274,9451,10001,10514,10655,13135,13431,14034,17000,20423,21241,21555,21711,22107,22150,22892,24651,26967,27021,27046,27090,27261,29340,29512,29721,30372,31996,32467,32692,32933,35252,36616,36677,39721,41773,43342,43690,43881,43984,44075,44374,44836,45209,45290,45680,46224,46805,46874,47138,47210,47939,48623,49449,49687,50023,50057,50145,50975,51070,59627,68694,69307,69413,71969,72759,75464],"stopped":[5275,18003,19041,22043,32174,52044,57814,66254,75262],"onpreprocessanimation":[5927],"validate":[1107,4477,24030,28879,34599,35063,35883,51596,52522,55913,67400,67754],"button__icon":[64340],"yourself":[517,1095,1284,1468,2181,3428,4140,5350,7879,9256,9844,9982,10003,13264,18379,21202,21402,24079,25521,25827,26126,26908,27928,30520,33411,33877,36688,37330,37519,37522,38473,38851,39170,43335,44058,44957,46809,47933,54709,66365,66437,70395,72616,73450,74660,74901],"unityxrmeshid":[75758],"debug":[273,560,614,631,633,649,667,695,709,777,804,834,889,1351,1455,1654,1706,1754,2728,3334,3373,3548,3628,3747,4820,6095,6368,6397,6469,6515,8971,10930,11024,11824,12359,13235,15736,15890,18113,18383,18559,18589,19054,20139,20525,21075,21848,21867,21955,22132,22619,23503,24043,24460,24484,24919,24938,25354,25437,25708,25733,25846,25894,25957,26035,26072,26838,27763,27984,28163,28372,29431,29438,29478,29841,30076,30109,30616,33125,33636,33779,34215,34293,34503,34988,35847,36007,36296,36543,37011,37762,38281,38730,38826,38998,39167,39350,40380,40541,40583,41062,41530,41997,42085,42995,43094,43450,44303,44622,45037,45096,45991,48972,49156,49259,49348,49403,49732,49817,50059,50197,50981,51059,51655,52554,52693,54698,54750,55186,55332,55690,55774,56024,56070,56507,56582,58644,59799,60462,60533,60600,60873,61741,62743,63105,64448,64545,64621,64665,64704,65002,65066,65091,65138,65400,65438,65451,65466,65484,65915,66268,66978,67065,67105,67458,67788,68103,68297,68337,68364,68401,68454,68713,68972,69219,69537,71572,71669,72003,72010,72083,72102,72123,72162,72238,72394,72589,72869,73106,73168,73289,73379,73549,73631,73898,73949,74253,74498,74537,74613,74629,74784,74844,74962,75186,75246,75960,76065,76129],"downloadable":[3462,3570,4540,9058,23154,25730,25926,29564,34237,52739],"surprisingly":[5921],"editortoolbarexample":[30681],"stages":[1370,1692,12515,17993,23007,30047,31007,31617,32637,35357,35748,42148,42424,43038,43706,44290,44547,45003,45294,45451,57443,57811,62588,66194,70756,71165,71764,71815],"audiomixereffectcontroller":[15205],"tilt":[18508,29895,60761],"library's":[52576,54445,54577],"rgba16i":[8468],"keydown":[59793,61812],"judging":[23041],"tunes":[5166],"“”":[41136],"talk":[3425,5910,6042,27478,42358,70424],"regarded":[52224,52590],"setbatchbuffer":[5353],"“white”":[45077],"coroutinesdelayedcalls":[35705],"'asymmetric":[41914],"slide":[8203,13552,14969,18233,26591,57287,61745,64179,64955],"unityxrmeshdescriptor":[75801],"draganddropmanipulator":[56882,57419],"positioningtest":[61251],"kformatr8g8b8a8_unorm":[50113],"modulator":[4883],"linter":[75980],"nameoft":[40600],"movement":[330,1890,1937,2243,2257,6148,6792,7081,7264,7921,8005,8203,8238,8291,8496,8586,9019,9145,9171,9301,9752,9772,11242,11276,11439,13164,13234,13263,13477,13667,13679,13837,13864,14681,14988,15020,18376,21323,21576,22512,24528,25339,25599,26547,26557,26580,29614,29900,30380,31819,31836,32170,32204,32251,32701,32727,33672,33756,34794,34873,35293,37360,38459,38492,38500,38519,38532,38545,38579,38628,39240,39274,39673,39771,48335,50456,50969,51155,51245,51545,51976,65177,66055,69333,69439,71766,72330,72928,72942,75213,75320],"kunityxrstatoptionnone":[76007],"'pixels":[39412],"trygetstat":[76040],"low":[1402,1761,2839,5921,6135,7446,7463,7507,7528,7536,7566,7627,7636,7647,7716,7736,7806,7873,8066,8197,8235,8518,8765,9309,9450,9904,9964,10088,10651,11177,11260,11282,11602,11816,12351,12909,13239,13364,13414,13690,13874,14261,14319,14558,14581,14822,14969,15007,15835,17030,17723,18575,19296,20088,20327,20403,21105,21323,21511,22042,22580,23420,24497,25276,25898,26510,26800,26971,27055,27129,27268,27309,27912,27936,28050,28061,28176,28475,28893,29316,29374,29442,29470,29644,29724,29923,30001,30372,31703,31743,32217,32341,32607,33515,33538,34233,34282,34495,34633,34682,35065,35747,35882,35944,35959,36504,36590,36746,36822,36823,36977,37235,37639,37678,37822,38333,38402,40151,41898,42178,42255,42467,43159,43174,43884,44239,44531,45129,45302,45564,45701,46718,47028,47299,48601,49282,49357,49465,49498,49513,49519,49562,49610,49628,50007,50065,51066,52218,52584,54899,64957,65148,65222,65246,68081,68309,68460,68682,70432,72920,73248,73382,73619,73694,74160,74503,74581,74639,76037],"appleappstore":[67605],"downladed":[67256],"cutoff":[7588,7597,7606,7628,7637,7648,7806,13724,22586,43603,46771,48148],"unityxrinputdevicecharacteristics":[75522],"bee's":[40366],"grade":[74202],"themselve":[19478],"reduction":[7017,7489,8510,12902,13836,14825,22464,24497,26086,26473,28477,29316,29360,37679,42449,50972,51027],"munityplayer":[1071],"“stretch":[32318],"notfound":[70459],"encode":[27129,37293,59733,72687,74199],"gpus":[8081,14328,21935,23440,25267,29471,30314,36168,38402,38425,43655,44269,44870,45213,45577,45721,47985,48163,50169,50659,72217,73454],"soc+":[50195],"crossover":[27544],"agentheight":[76407],"playertransform":[9383],"__development\\_build__":[33842],"cert_hostname":[66611],"tex2d":[1696,8924,10194,23316,29515,31908,33000,44903,45209,45614,45780,46171,46547,46864,47227],"publisher’s":[70266],"analyzers":[38677,40655],"protecting":[66635],"unity_pretransform_to_display_orientation":[72998],"refactoring":[6028],"ld_library_path":[34673],"addobjecttoasset":[3686,40470],"hypothetical":[12990,67566],"‘0":[51175],"multithreaded":[1799,11567,11808,21333,21861,26271,26472,28051,28068,29924,30907,34275,35135,35720,36094,72917],"unity_declare_tex2d":[44004,45230],"fast":[486,500,512,567,2070,4548,4773,5160,5262,6055,6077,6136,6375,6435,6479,7661,7795,8514,9113,10093,10572,10909,11541,13252,14295,14778,15889,18220,20240,22780,26041,26088,27172,28173,29185,29553,31711,32114,32344,32610,32861,34994,35321,35920,36568,37401,37956,38408,38557,38587,39737,40097,44293,45564,49424,49519,49764,50599,50677,51956,52460,58375,58446,66393,68043,68611,74636,74795,75755],"modify":[580,944,1070,1227,1356,1678,1890,2251,2284,2406,2891,3020,3581,3843,4040,4178,4557,4825,5096,5240,5353,5496,6325,6801,6891,7188,7565,7572,7800,7986,8208,9191,9269,9332,9658,10403,10411,10505,10595,11011,11357,12227,12295,12852,12971,13188,13464,13808,14678,14973,17488,18175,18357,18408,18501,18621,18954,19036,20336,20688,21337,21422,22204,22582,23284,23492,24094,24608,24621,24832,25162,25498,25686,25888,26202,26465,27211,27262,27622,28868,28957,29014,29017,29098,29785,30397,30841,31634,32074,32285,32747,33134,33466,33655,34188,34883,34918,35175,36327,37536,37655,38377,38404,39109,39666,40091,40291,40506,40616,41359,41541,42751,43227,44345,45721,46346,46776,48254,49154,49497,49533,49748,49793,49908,50132,50448,50629,51294,51802,51867,52116,52196,52691,52769,53050,53323,53972,54075,55727,55982,56041,57075,57705,58799,59077,59868,62021,65220,65244,65737,65904,65994,66082,66157,67143,67763,67953,69746,70227,70937,70970,71339,71877,71982,72438,72683,72845,72879,73408,73772,73980,74090,74206,74660,75215],"terraincolliders":[33702],"uxmlchildelementsdescription":[58060],"unity_declare_screenspace_texture":[1703,43374],"docked":[28353,30525,33656,34758,51424,59189],"textual":[6039,40063,68317],"cinematics":[17169],"otherexamplerenderpipelineshadergui":[44223],"gamestatistics":[35437,35487,35554],"convoluted":[14259],"umbrella":[23162,75364],"rolloff":[7644,7660,7795,73043],"filldefaultinspector":[55508,58928],"spritetooling":[68648],"ambience":[4773],"noise":[4801,4883,5049,7487,15035,29645,31167,32203,34870,35885,36593,50374,50947,52141],"3b8b":[66769],"grow'":[64089],"configurationbuilder":[67004,67035,67202,67249,67303,67344,67583,67747,67826,67855],"grabs":[42684,44376],"cullinggroupevent":[18585],"progressing":[34091],"normalised":[71969],"uint2":[8479],"r16_sfloat":[8453],"initialized3dxaml":[74712],"exr":[6713,8868,14320,16651,25258,27525],"choosing":[987,2306,4205,4536,5034,6281,6302,6483,6933,7846,9095,10078,12007,12780,13021,14790,18101,18902,20622,21142,22882,25604,25751,27137,27495,27930,32165,35837,38253,39472,39756,39996,40087,49465,49638,51013,54444,65974,66026,67879,70242,70872,71284,71876,74900,75872],"examplestyle":[58712],"stalling":[42212,72401],"precautionary":[66486],"distorted":[12940,42449,58394,65990],"unrelated":[20605,35878,36075,40450,50473,71029],"easingfunction":[63001],"renamed":[3632,3859,12032,48671,50016,50304,68881,69117,73590,74382,74535,74891],"swizzling":[9542],"unity_debug":[19034],"visitcollection":[37138],"exclusions":[48131,66500],"length":[1962,2181,3747,4356,4776,4943,5458,5603,6009,7121,7488,7931,8030,8200,8387,8535,8674,9018,10082,10260,10375,10504,12115,12304,12926,13032,13342,13386,13659,13916,14593,14975,15037,18296,18575,20524,21007,21485,22373,23730,23814,24388,25706,25936,26154,26368,26438,26507,27322,28274,29108,29131,29841,30083,32152,32253,32415,32731,33143,33527,33736,34111,35390,35735,36018,36040,36232,36658,36800,39756,39994,46467,46978,48813,49528,50005,50464,50969,51646,51966,52134,52233,53289,57473,61087,61738,62278,62596,63721,65941,66131,68202,71773,71873,72154,73077,73108,73547,74598],"bubbling":[39524,60518],"slip":[14943,23119],"newindex":[62811],"lerp":[8757,10466,27457,29659,31962,33002,43448,45276,46442,56778,76288],"user":[86,219,298,401,499,511,569,682,716,867,881,955,964,1023,1089,1210,1372,1483,1488,1574,1723,1751,1804,2014,2103,2586,2654,2746,2757,2958,3241,3345,3457,3512,3867,3906,3979,4070,4274,4384,4391,4485,4534,4853,4876,5019,5238,6045,6150,6288,6737,7025,7734,7765,8861,9256,9328,9555,9622,9736,9769,9977,10768,11314,11414,11718,12222,12400,12490,13130,13854,13920,13977,15967,16043,16151,16659,17030,17092,17206,17485,17503,17521,17744,17956,18021,18047,18357,18666,18745,18757,19316,19336,19351,19364,19376,20098,20130,20532,20760,20811,20863,21173,21377,21832,21837,22106,22146,22319,23807,23930,24167,24466,24724,24891,25031,25178,25333,25623,25672,25688,25717,25822,25867,25973,26100,26703,27073,27536,27624,27750,27790,27984,28062,28114,28185,28255,28433,28474,28718,28780,29186,29420,29568,29594,29680,29855,29958,30057,30168,30385,30478,30501,31477,31600,32261,33070,33763,33775,34203,34461,34603,35047,35714,35781,36291,36352,36432,36531,36588,37339,37536,38537,38547,38574,38630,38820,38840,39106,39141,39385,39471,39591,39614,39714,39740,39819,39977,40042,40069,40097,40103,40675,41363,41574,41624,41907,42811,42968,43325,44366,45148,48058,48280,48379,48677,49232,49447,49646,49785,49824,49885,50170,50939,51427,51966,52192,52247,52478,52491,52674,52766,53358,53715,53921,54032,54132,54333,54900,55562,55642,55713,55805,55973,56125,56808,57031,57210,57286,57441,57581,57638,57893,57969,58018,58191,58425,58728,58997,59561,59719,59740,60209,60363,60495,61302,61333,61798,62660,62783,63814,63956,64221,64370,64444,64511,64610,64651,64731,64745,64808,64914,65031,65146,65312,65458,65537,65552,65698,65738,65850,65896,65926,65956,66180,66233,66336,66363,66450,66566,66902,66919,66922,66980,66995,67042,67131,67148,67272,67296,67334,67351,67537,67548,67566,67587,67624,67759,67896,67976,68086,68378,68733,68827,69072,69696,69809,69880,69897,69987,70098,70190,70448,70802,70867,70940,71036,71369,72227,72402,72879,72940,73022,73091,73093,73144,73264,73417,73471,73973,74136,75068,75076,75109,75226,75252,75365,75470,75474,75824,75901,75969,76094],"server_name":[70072,70139],"associations":[12616,36098,74753],"instructing":[35719,49096],"#e9967a":[63541],"networkanimator":[10798],"unity_z_0_far_from_clipspace":[44953],"settings":[5,13,65,122,162,174,218,255,260,395,445,543,574,585,623,642,655,666,669,717,850,901,947,955,987,1137,1150,1180,1191,1203,1243,1295,1338,1359,1383,1492,1535,1615,1730,1762,1808,1952,1967,2039,2060,2760,2771,2959,3466,3502,3585,3729,3839,3870,4040,4217,4508,4531,4589,4722,4737,4799,4810,5024,5146,5190,5676,5718,5725,5863,5919,6121,6217,6345,6391,6460,6756,6798,6976,7003,7386,7502,7620,7657,7762,7777,7829,7869,7885,7941,7969,7987,8055,8134,8173,8270,8364,8388,8430,8615,8648,8773,9038,9055,9133,9248,9322,9430,9581,9732,9765,9867,9907,10015,10212,10402,10413,10505,10584,10609,10620,10699,10718,11048,11176,11272,11357,11446,11525,11596,11667,11699,12037,12273,12313,12436,12732,12758,12768,12838,12865,13132,13279,13296,13356,13368,13471,13562,13590,13625,13704,13736,13770,13799,13822,13843,13870,13909,14020,14080,14217,14314,14484,14508,14554,14573,14705,14721,14780,14795,14846,14960,14987,15022,15967,16470,17865,17943,17987,17998,18038,18061,18151,18173,18246,18325,18348,18540,18969,19020,19067,19102,19123,19164,19172,19278,19320,19341,19355,19368,19448,19505,19636,19944,19978,20077,20120,20211,20216,20413,20459,20624,20652,20811,20908,21013,21081,21328,21388,21445,21565,21874,22047,22081,22111,22161,22227,22408,23280,23447,23484,23542,23613,23685,24162,24470,24586,24601,24621,24638,24754,24929,24953,25066,25148,25162,25188,25241,25310,25633,25679,25691,25763,25843,25907,25973,26034,26044,26104,26614,26679,26785,26796,26812,26943,26953,26975,27098,27121,27136,27186,27213,27265,27550,27638,27673,27710,27756,27815,28090,28123,28132,28147,28199,28406,28467,28883,29084,29098,29279,29334,29574,29744,29769,29818,29885,29889,30204,30233,30284,30321,30349,30413,30443,30497,30845,30859,31206,31625,31668,31790,32190,32223,32240,32478,32848,33386,33401,33527,33642,33839,34221,34240,34323,34447,34539,34692,34797,34861,34927,34962,35187,35765,35797,35925,35958,36011,36156,36290,36334,36476,36582,36632,36680,37268,37362,37500,37593,37620,37655,37668,37704,37798,38377,38382,38471,38533,38545,38579,38628,38657,38917,39072,39073,39103,39127,39163,39228,39260,39310,39409,39977,40097,40203,40486,40762,40806,41306,41394,41426,41448,41531,41700,41707,41854,41876,41953,42026,42134,42209,42317,42413,42938,42950,43032,43122,43126,43135,43155,43179,43316,43462,43491,43524,43556,44282,44344,44439,44585,44627,45206,45850,45932,47095,48055,48225,48240,48264,48376,48403,48515,48550,48559,48595,48680,48852,48872,48874,49096,49182,49414,49464,49506,49553,49619,49627,49694,49728,49753,49910,50010,50147,50353,50377,50413,50426,50541,50585,50627,50647,50660,50689,50711,50742,50755,50769,50782,50795,50808,50821,50834,50859,50934,50950,51003,51078,51124,51131,51164,51183,51219,51231,51251,51347,51867,51965,52106,52177,52578,52682,52711,52714,52756,52891,52949,53163,53426,53695,53848,54010,54452,54495,54604,54769,58119,58299,58616,58652,58731,59500,60615,60649,61299,61487,61518,61588,61907,61934,61973,61995,62047,62748,64241,64547,64761,65769,65982,66010,66258,66502,66539,66543,66593,66818,66838,66874,67044,67088,67237,67272,67295,67347,67649,67890,67908,68018,68067,68246,68600,68712,68852,69061,69307,69352,69413,69778,69813,69884,70044,70070,70137,70423,70970,71041,71227,71281,71340,71524,71598,71630,71640,71743,71747,71773,71879,71904,71906,71995,72005,72097,72225,72379,72520,72778,72834,72852,72893,72974,72991,73047,73137,73156,73207,73299,73313,73364,73386,73442,73624,73696,73910,74048,74153,74257,74418,74510,74591,74617,74753,74756,74816,74855,74866,74887,74896,74935,74981,75047,75122,75125,75196,75223,75318,75388,75918,75969,76315],"switchoverriderenderpipeline":[49238],"exp2":[8756,47148],"approves":[4431],"allocating":[6065,20450,29193,30869,33228,33421,34160,35729,36815,57995],"penetration":[8310],"masses":[8555,26574,37623],"directives":[562,6425,6473,7373,8411,19017,19995,20052,23559,28166,29918,33774,39451,41800,41854,41987,42130,42423,44307,44507,44977,45417,45446,45605,46753,50012,58069,59021,71112,73923,74789],"corresponds":[4458,5350,6273,6294,6723,7662,8260,8326,9098,9787,10437,10609,10651,11951,12599,13107,13475,14517,14702,18513,19254,21221,21855,23491,23545,24244,28043,30260,32925,33765,33904,34436,36225,37053,41251,45450,49534,50455,50946,51137,51238,51832,54725,55606,55866,58286,58393,59743,65885,66001,69748,70277,70510,70762,72921,73190,73328,74905,76097],"gl_oes_egl_image_external":[44371],"gridded":[2252],"editor_visualization":[28920],"onselectioninspectorgui":[51557],"getnormals":[304],"“localhost”":[66355],"queuing":[6146],"units":[84,2439,4824,5122,6281,7045,7794,7967,8269,8512,9380,9536,9784,9886,9962,10013,10206,11600,12116,14502,14543,14581,21454,21965,22567,25205,29755,31731,32328,32594,32731,33718,35250,37805,39440,39650,44293,44634,45107,48275,50476,51137,51235,51361,55056,61466,62015,62201,62838,63717,66197,68696,71773,71885,72297,73248,75108],"copies":[409,1010,1842,3437,3486,9795,10772,12280,12457,13306,18718,18757,19022,20740,23262,23377,23483,23638,24615,25529,26108,26349,26429,26488,28952,30329,33308,33424,34735,34924,35203,35933,39012,39096,39196,40803,40820,41303,43316,49738,50056,50153,50353,51612,52854,54552,66555,68410,68894,69132,70729,71630,71938,72287,74655,75410],"netstandard2":[38712],"opportunity":[18616,67148,72931],"asset…":[41955],"cls":[1477],"sacrifice":[49706,74218],"urp's":[49177],"cascades":[12941,22138,37812,43109,47114,72751],"unity_wsa_10_0":[33805,72071],"brushtoolattribute":[51597],"equirectangular":[72489],"movable":[7231,11717],"resourcing":[2839],"custom1":[32921,62168],"files":[47,156,234,398,403,422,431,434,539,556,608,811,935,977,1244,1271,1285,1302,1310,1336,1563,1666,1706,1831,1894,1936,2188,2240,2701,2769,2896,3020,3247,3318,3346,3465,3574,3579,3675,3728,3778,3850,3870,3892,3954,4034,4217,4312,4468,4501,4526,4652,4726,4771,5165,5183,5978,6096,6691,7014,7167,7396,7482,7812,7835,7869,7874,8411,9069,9135,9246,9482,9591,9760,10725,10733,11994,12369,12599,13370,13626,13945,14018,14078,14263,14319,14786,14831,15950,16330,16364,16378,16392,16819,17045,17312,18058,18112,18190,18400,18623,18670,18728,18730,18756,18823,18926,19035,19129,19241,19520,19617,20192,21045,21302,21425,21460,21638,22085,22104,22124,22502,23476,24276,24601,24621,24641,24928,24970,25096,25153,25187,25237,25329,25451,25841,25928,26046,27167,27510,27525,27602,27679,27761,28248,28265,28452,28477,29098,29162,29747,29774,29793,29825,29915,31595,31620,31642,33071,33475,33804,33885,34215,34377,34525,34541,34657,34691,35037,35627,35992,36693,37497,37550,37668,38678,38891,38917,40271,40444,40456,40662,40735,40817,40957,41293,41333,41373,41815,41860,41968,41990,42049,42379,42614,42703,42724,42746,43017,43872,43906,44364,44993,45175,46513,47067,47156,47369,48053,48184,48224,48261,48348,48353,49028,49390,49713,49737,49760,50094,50142,50412,50491,50647,50655,50659,52064,52095,52513,52638,52691,52771,52898,53012,53086,53292,53891,53997,54509,54598,54780,54795,54876,54912,54964,55064,55163,55236,55310,55370,56126,56213,56274,56328,56395,56478,56524,56593,56737,56800,56983,57126,57338,57694,58050,58378,58595,58823,59269,59911,60155,60675,60882,60983,61178,61198,61330,61595,61750,61955,62342,62498,62644,62785,63064,63764,64319,64373,65292,65687,65780,65867,65912,66478,66569,67693,67765,68049,68084,68433,68493,68614,68720,68872,69107,69330,69372,69436,69723,69765,69834,69998,70187,70210,70244,70275,70594,70756,70876,70914,71032,71248,71662,71851,72145,72227,72384,72474,72610,72615,72705,72729,72840,72867,73022,73075,73173,73205,73314,73389,73501,73622,73640,73714,73924,74077,74187,74513,74581,74590,74627,74726,74787,74838,75913,75975],"generatevisualcontents":[60930,61033],"gnome":[50170],"fromjson":[40465,53935],"dollars":[4257],"requestedmipmaplevel":[50972,51065],"playmodestatechanged":[30906],"basebehaviourmanager":[33483],"attack":[3342,7518,13039,57630,69901],"inconvenience":[29568],"everest":[50411],"expanded":[2277,2411,3739,14541,14824,28366,28467,33443,34759,35697,36731,39507,39798,49496,51349,51909,52243,64640,65716,74391,76565],"challenge":[4566,4997],"timeouts":[66314],"peaked":[29181],"vulnerability":[3340],"preview":[1914,1989,2201,2282,2421,3119,4123,4165,4179,4327,4429,4444,4865,6231,6267,6294,7004,7469,8706,10229,10338,10491,10695,11076,11398,11466,12029,12288,14119,14226,14574,14761,14787,15913,15967,16286,16498,16894,16944,18328,18995,20606,21700,22034,23006,23426,24519,25068,25609,27020,27560,29036,29694,29848,29894,30257,31008,31368,31714,32286,34935,35171,36432,36572,36685,36694,38684,38876,39031,40320,40621,40775,41428,41644,41691,44691,46109,48245,48270,48337,48376,48560,48588,48624,48667,48855,49446,50065,50647,51189,51208,51326,51427,51824,54415,54689,54957,55103,58861,61614,62784,63076,63112,63345,64262,64745,66105,67988,68795,70249,70310,70875,71805,72501,72616,73908,74146,74230],"cart":[3998,4038],"multiplied":[4911,7031,8131,8849,9277,11515,13094,28836,32108,32429,32633,32732,32880,45319,47607,50472,55869,56205,58329,72285,72328],"overrideactivity":[805],"d_toggle_on_focus":[63488],"syncing":[1959,20076,22046],"parses":[73974],"movedasset":[19583],"alike":[17759],"rgba16ui":[8477],"ctrl+a":[59758],"producttype":[67007,67203,67304,67412],"1gb":[499,12231],"achievement":[30090],"lightingmapping":[10034],"networkserver":[10804,11016,11071,11195,11221,66037,66083,66242,73685],"page":[1,14,79,174,221,277,378,399,404,491,579,620,894,938,1032,1107,1117,1134,1149,1237,1291,1355,1487,1967,1980,2063,2764,3229,3289,3312,3609,3726,3917,3951,3981,4036,4061,4156,4171,4186,4195,4212,4237,4246,4356,4369,4410,4425,4454,4466,4484,4570,4869,5165,5690,5820,5966,6361,6751,6762,6779,6795,6996,7013,7625,7879,7944,7970,8070,8124,8146,8174,8271,8389,8642,8761,8774,8793,8973,9039,9288,9328,9549,9555,9622,9810,9975,10110,10444,10688,10709,10757,11304,11700,12038,12331,12444,12733,12969,13018,13117,13144,13311,13815,14005,14215,14259,14304,14509,14550,14562,14776,15039,15700,15811,15851,17939,17961,18052,18114,18392,18396,18406,18481,18662,18936,19437,20092,20543,20767,20915,21026,21154,21296,21422,22020,22029,22064,22170,22190,22237,22355,23246,23482,23528,23534,23623,23743,23879,24096,24454,24590,24638,24755,24774,24790,24945,25396,25446,25500,25892,25900,25980,26038,26582,26627,26662,26912,26957,27062,27174,27186,27213,27265,27292,27302,27312,27498,27598,27661,27747,27764,28082,28127,28226,28789,28840,29121,29150,29409,29453,29482,29739,29778,30177,30244,30277,30343,30407,30456,31721,33084,33470,33762,33879,34201,34241,34324,34448,34655,34684,34841,35248,35700,36200,36466,36586,37616,37722,37749,38259,38294,38343,38381,38432,38527,38679,39099,39172,39444,39448,39495,39791,39853,40064,40150,40517,40675,40777,41462,41534,41656,41787,42045,42111,42233,42238,42250,42293,42298,42303,42308,42354,42386,42426,42436,42442,42451,42458,42463,42511,42517,42523,42528,42533,42538,42543,42578,42583,42588,42593,42597,42662,42788,42818,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42926,42931,43004,43088,43098,43151,43466,43521,43566,43684,44198,44303,44320,44338,44422,44590,44755,44784,45044,45261,45386,45417,45517,45566,45643,45846,45929,45959,46137,46528,46761,47309,48165,48171,48229,48683,48976,49145,49173,49281,49459,49549,49593,49608,50002,50159,50305,50641,50654,50657,50662,50705,50934,50951,50992,51125,51152,51182,51222,51294,51598,51838,51951,52239,52483,52595,52784,52827,52890,52957,53100,53273,53702,53793,54089,54107,54244,54893,55411,55813,57694,57815,58027,58128,58733,59191,60390,60618,62044,62201,62739,64042,64889,65002,65229,65253,65849,65925,65961,65996,66178,66339,66453,66762,66810,66835,66905,66958,66978,67147,67161,67482,67680,67765,67845,67966,68567,68690,68812,68850,69041,69296,69340,69402,70306,70482,70628,70972,71132,71194,71257,71480,71606,71669,71759,71871,71978,72126,72179,72207,72282,72292,72424,72493,72538,72783,72822,73028,73144,73148,73173,73244,73357,73362,73406,73426,73482,73499,73594,73908,74123,74265,74408,74499,74507,74990,75047,75136,75159,75251,75354,75916,76094],"clickable":[18120,40088,55687,60223,64245,64444,65368],"skill":[54114],"soften":[8569,10009,50551,50573],"debuglineexample":[8991],"axes":[2070,2353,6966,7282,7959,8231,8506,8592,8609,9645,9765,11256,11279,11448,11491,11600,12760,13093,13257,13281,13298,13645,14121,14476,14664,15835,18173,22292,23271,23669,25763,29617,30147,31834,32128,32194,32215,32278,32339,32357,32605,32628,32902,33563,33607,34778,37285,38568,38598,45252,47644,50375,51244,61485,62216,66000,71873,75644,76144],"square":[11,87,2407,4713,8607,10455,12462,13105,13773,14396,14577,14681,14808,15823,22750,23727,25261,26919,34779,35258,35354,36549,36636,37056,37500,40314,41211,42715,43222,43589,44275,44433,44695,45106,48605,51148,56792,62071,63728,64191,66385,72318,73476],"declarative":[45175],"unitproperty":[55020],"symbolication":[1706],"reload”":[17986],"previews":[2576,13815,34934,36713,48376,49178,51328,54470,64262,72501],"_local":[44544,45016,68996,69247],"linearlinear":[34362],"viewer":[18681,30142,31588,33304,39673,40621,44166,48101,50403,74137],"timeout":[21075,40016,68258],"getfloatbuffercallback":[4994],"exclude_renderers":[30305,31892,44983,45423],"getlightcolumns":[26734],"gl_ext_texture_norm16":[14450],"whatsnew":[52792],"discreet":[36307],"meaningful":[13323,18508,34927,34956,40623,64339,72341,73920],"tilepalettetoolbar":[51100],"fluids":[31838],"counterparts":[3397,20047,26580,34736,62761],"trygetvaluefrombag":[58066],"lods":[25151,27749,27758,48330],"keen":[10780],"arrownavigationright":[63440],"_slicerange":[14041],"cascade":[12942,22139,37812,62840],"spritepacker":[48706],"“mirror”":[45247],"whitesmoke":[63653],"samplelod":[8726,45479],"rgblabelslider":[24249],"m_appleextensions":[67409],"myskin":[24105],"subsection":[7284,29186],"requestedvirtualtexturetiles":[50061],"ondrawgizmos":[21360,22237,51407],"fashion":[7992,15020,22948,27506,54223,67153],"collectors":[33296],"statistic":[17015,35282,35939,36312,36368,38327,52592],"example_waitwhile_coroutine":[15802],"aplusbplusone":[26430],"marklayoutforrebuild":[54280],"red_box":[60869],"publicly":[4130,6891,38680,52629,60510,66461,67265,70628,71057],"build'":[48531,48543,48590],"seam's":[27089],"trackserializedobjectvalue":[55611,56128],"warping":[72930],"getproperty":[52606],"approve":[4421,69036,69289],"rub":[53665],"correlation":[33476],"heap16":[73556],"shadows_cube":[44571],"magna":[65174],"setting":[126,175,255,550,608,629,671,714,717,919,958,1003,1200,1331,1415,1559,1584,1647,1843,2290,2770,3455,3484,3731,3799,3853,3989,4117,4161,4232,4385,4823,5033,5258,5715,5845,5945,6141,6264,6289,6321,6365,6424,6473,6497,6765,6801,6977,7023,7365,7429,7448,7465,7489,7661,8040,8124,8138,8197,8503,9079,9135,9172,9253,9307,9330,9482,9727,9953,10013,10211,10328,10394,10422,10540,10572,10850,11051,11134,11177,11334,11365,11554,11608,11718,12051,12276,12325,12475,12844,12900,13091,13133,13166,13209,13240,13400,13477,13573,13596,13680,13704,13768,13797,13822,13865,14232,14562,14705,14796,14973,14983,17045,17092,17955,18077,18118,18170,18310,18936,19019,19043,19193,20220,20239,20438,20573,20608,21471,21581,21860,22083,22111,22227,22514,23273,23444,23625,24475,24576,24730,24743,24782,24795,24914,24983,25066,25202,25396,25877,25970,26034,26040,26056,26612,26801,26859,26999,27085,27098,27120,27127,27202,27223,27283,27296,27317,27320,27523,27639,27757,27785,28155,28401,28465,28874,29098,29148,29331,29695,29768,29879,29900,30144,30178,30234,30352,30881,31367,31632,31700,32112,32251,32360,32401,32631,32660,32776,33063,33387,33475,33841,34041,34245,34328,34452,34581,34982,35634,35696,35797,36031,36231,36464,36587,37176,37361,37617,37653,37676,37700,37849,38388,38502,38638,38661,38828,39311,39412,39997,40094,40291,40589,40649,40663,41370,41696,41721,42058,42664,42767,42971,43134,43155,43184,43245,43462,44166,44317,44454,44531,44625,44757,45515,46024,47178,47952,48054,48260,48275,48365,48502,48535,48597,48686,48874,48925,49183,49405,49553,49703,49712,49817,49911,50006,50010,50378,50442,50595,50641,50661,50695,51004,51133,51160,51169,51186,51232,51616,51785,52703,52719,52743,53071,53602,53943,54480,54564,54765,54898,55191,55777,55867,57288,58798,59601,59852,60209,61508,61528,61935,62049,62804,63081,64079,66174,66230,66480,66964,67076,67496,67638,67873,68248,68265,68869,69103,69785,69814,69885,70191,70512,70650,70877,70967,71293,71697,71866,71974,72323,72378,72474,72843,72945,73044,73136,73161,73251,73424,73433,73908,74153,74346,74536,74621,74776,74822,74943,75130,75249,75470,75517],"physics2dsettings":[15057,38924],"getcoreunityassetpacknames":[517],"toolbarspacer":[65392,65489],"artefacts":[4866,7508,21956],"buildsettings":[15133],"counter's":[35410],"gizmosexample":[22195],"terrainengine":[43919],"jagged":[6106,10010,14581,22730,39872,50551,58394],"filterstring":[41151],"buildscriptsonly":[450],"apks":[1326,11844,53083],"window's":[20892,44454,52599,55408,56266,56321,56385,64017,71910],"deserializationsection":[72028],"alertness":[14718],"asymptote":[14972],"consistency":[11570,21575,22530,25098,35894,51987,64458,65051,68576],"_length":[72041],"cohorts":[22343],"courses":[75383],"dlltest":[71701],"normaldecal":[42246],"editable":[1091,4813,7065,9027,10706,12599,21524,23910,25816,26953,29680,31775,32367,39603,41587,53388,65948,72242],"staticbatchingutility":[49702],"historyinformation":[53750],"dirlightmap_combined":[42171,44577],"reposition":[4822,24299,25355,33532,38575,39351,71911],"nrgctx":[52627],"statechangedmethod":[18586],"oldscore":[33188],"amazing":[27490],"nographics":[19636,21054,28625,34214],"rounded":[100,7968,9032,15825,35256,56839,58288,60640],"desktoppath":[74081],"downloadfile":[68118],"brl":[53666],"parentconstraint":[11457,15350],"256mb":[21114,36565],"zoomdistance":[6747],"debugutilities":[37003],"bonjour":[34706],"administration":[4155,4195,12674],"container's":[26108,59838],"rect's":[48432],"manifestfilepath":[3416],"nofile":[27623],"75s":[62901],"encapsulated":[34179],"eventing":[39512],"blow":[25526,31819],"setselectedgameobject":[24885],"invalidoperationexception":[26180,40586],"subshader":[124,6498,6516,8720,8912,10153,14043,14160,23298,26662,29497,31882,32945,42033,42192,42334,42408,42620,42669,43421,43598,43660,43734,43800,44031,44102,44139,44171,44224,44332,44353,44382,44461,44600,44632,44664,44677,44764,44797,45112,45177,45310,45397,45516,45625,45674,45857,45928,45958,46145,46538,46755,46840,47163,47198,47914,47957,47990,48028,48996],"updatemesh":[61081],"connectionidassigned":[66151],"nolppv":[46794],"value_of_cloudprojectid":[53897],"wreckedversion":[25614],"a2b":[62538],"articulate":[22504],"recorder":[16564,17074,21881,31032,31452,37920,74162],"graphs":[17759,20249,21347,22024,22520,27815,34192,36501,39885,52597,60672,74218],"unity_matrix_vp":[47077],"backspace":[9810,21405,36730,48262],"vs4m":[40663],"leave":[1107,3886,5212,6765,7832,9002,9139,9167,9297,9424,9727,10725,11395,11976,13163,13555,13673,14983,20343,21514,22057,22772,24985,25381,25572,26611,29269,29898,32196,32781,33583,34257,34338,35809,44097,45077,45568,48198,48276,48607,48765,50905,51052,51182,51237,54788,57483,60873,63061,66358,71865,72683,75520],"tessphong":[47029],"matching":[1916,1936,2996,3571,3735,3954,4033,5337,6031,8437,9261,16000,16038,16597,16605,16613,16621,16629,16637,16645,16653,16661,16669,16677,16685,16693,16701,16709,16717,16725,16733,16741,16749,16757,16765,16773,16781,16789,16797,16805,16813,16821,16829,16837,16845,17112,17120,17128,17541,17746,17754,17956,18137,18449,19230,22502,25162,29144,31020,34416,35158,36449,39208,40453,41307,41466,41984,42191,43947,44535,45121,45659,46040,47163,49623,49819,50041,50320,51746,54699,54807,55509,61419,69642,70026,70310,71195,75687],"rs4+":[50254],"papayawhip":[63619],"textbox":[3943,30464,34235,41677],"computebufferstartindex":[5451,5596],"expresses":[59972,63739,71011],"revision":[12596,20760,25092,25122,35092,40327,52913,53133,53399,53702,54083,68611,70485,70587,71484,72364,72410],"internalprofiler":[26030,49763],"dll":[2701,3078,3761,3779,4510,4762,4874,6705,18359,18546,18852,19241,20184,21029,24967,26079,28266,28452,33842,34427,34525,34548,34668,38712,38892,40174,49749,49770,52647,52933,66114,66470,66895,67699,69018,69270,70362,71029,71661,72137,72159,72201,72868,74513,74592,74654],"incl":[37838],"letting":[4437,4480,8078,24728,40086,54897,67351,67626,75819],"freq":[7591,7609,7631,7651,7696],"getdimensions":[8441],"reorient":[8582],"that's":[88,567,986,2812,4121,4768,4882,6049,6375,6479,7484,10042,11916,12109,12367,12555,13837,18131,18634,18719,19127,19220,23150,24786,24886,25696,26000,26914,28089,28173,29784,33228,33467,33476,33777,34392,34663,35032,35942,38392,39789,39902,41899,42193,42947,45143,46792,47805,49750,50901,54557,54674,54715,56523,56721,58204,59837,59914,60421,60544,61302,63702,65512,65698,66855,66910,69179,70331,71305,73088,73171,73416,73485,73630,73659,74535,74636,74786],"boundsfield":[55452,55517,59605,64397,64426,69328,69434],"reliable":[21323,24920,25847,38841,52597,70341,74137],"mojave":[50167],"aiming":[6839,10394,26074,75099],"assert":[11951,64543],"yesusing":[38166],"vector3value":[20826],"searchitemprovider":[2518],"logarithmic":[5247,7660,7796,10443,40539],"1”":[40966],"somedata":[26364],"setupparentsandchildrenfromdepths":[52292],"enable_ios_app_slicing":[2806],"texture2d":[2494,2555,2653,3617,4674,6703,7985,8430,11313,13709,13902,13968,15063,23835,24328,29811,30643,40725,41202,43997,44371,45077,45216,45615,47137,48406,48583,50032,50094,50972,51065,54920,55063,56761,57658,60659,61555,65012,68152,68889,69126,69683,73551,74257],"syncevent":[10936],"rates":[1557,1761,7506,12216,19285,62886,68862,69095,75446],"amharic":[53610],"__spread__":[32413],"egl":[75897],"__custom__":[14811,39622],"tritanopia":[36501],"unityfontdefinition":[65305],"unityobjecttoviewpos":[43876,46467],"onrenderevent":[29977],"mymanager":[49983],"rightdowncorner":[27411],"chromebooks":[661,50197],"unity_compiler_hlsl2glsl":[43978],"spell":[31760,32316,47324,50941],"forwarding":[35748,66721],"biasing":[35944],"crack":[34379,49562],"0x5f":[74555],"screentopanel":[58146],"logicalnor":[43825],"toggles":[4811,6964,8022,9562,11444,12756,13277,13294,21712,22282,24759,34796,34993,35381,40063,40083,40091,55162,55363,55713,56475,56523,58230,59841,60064,61610,62531,64910,65740,65934,71616,72778,74038],"r16_unorm":[8459],"obliquefrustum_lensshift":[30150],"m_aocontrast":[76393],"alphas":[32395],"#00ffffff":[49850],"installcustomsignalhandlersfromjava":[1075],"maxqueuedframes":[35718],"yesrenderpipelinemanager":[38199],"erroneously":[28584],"lossy":[14295,14463,50670],"failing":[220,45448,70399],"ussclassname":[60913,61013,61773],"an_auth":[70003],"mfi":[52702,52752],"m_shadowcamera":[44964],"typically":[1778,2177,2353,2959,3806,4450,4534,4911,5733,6383,7199,7493,8080,8442,9332,10392,11305,11606,11654,12643,12699,12840,13067,13830,14824,15015,20237,21085,21550,21661,22407,25624,26119,26296,26572,28181,30858,30917,31718,32631,32701,34361,34597,35039,37227,37281,37345,37654,37668,39310,39499,39796,40226,43113,43957,44090,44185,44234,44457,44646,45142,45293,45852,46766,46825,47255,47937,47971,48009,48335,48353,49396,49473,49535,49626,50006,50642,52168,52504,52556,54632,55713,59723,59872,63068,64245,64756,66114,67019,67230,67364,67841,69748,70027,70337,70446,71547,71790,71811,72337,72715,72880,72946,73175,73263,73485,73660,73689,74548,74605,74644,74976,75323,75394,75750,76178],"createasset":[3619,3776,8703,14026,14117,51457,51607,51702,51815],"tumbling":[48311],"atlassing":[71831],"effectsshader":[6896],"‘myparticleinstancedata’":[32052],"m_localscale":[21670,76462],"ewjvuzevmbmga1uechmmrglnaunlcnqgsw5jmrkwfwydvqqlexb3d3cuzglnawnl":[69929],"borderbottomcolor":[57087],"‘ground’":[51240],"pasting":[28775,34924,44669,70410],"demonstration":[2812,4999,42793,58653,61593,65773,67507,73675],"#efefef":[63300],"compass":[18507],"subvalues":[53039],"83fc":[53891],"ut":[65174],"elevation":[39254],"prune":[11622],"surfaceoutputstandard":[23315,29539,31906,33049,46653,46733],"visibleinstancecount":[5654],"solar":[59957],"vulnerable":[3342,53184,53376,67758],"leftdowncorner":[27410],"main":[104,401,405,422,479,982,1202,1314,1336,1615,1790,1996,2236,2252,2668,2769,3013,3737,3981,4215,4256,4472,4774,4939,5024,5161,5733,5853,6139,6228,6346,6393,6683,6831,7220,7476,7615,7657,8364,8878,9012,9055,9136,9344,9430,9713,9765,10130,11101,11191,11596,11808,12316,12437,12865,13306,13353,13720,13777,13843,14833,14979,15026,16919,17927,17993,18116,18257,18325,18362,18574,18716,18897,18955,19322,19990,20288,20594,20716,21156,21188,21324,21897,22227,22836,23555,24456,24932,25084,25225,25284,25345,25366,25548,25928,26035,26070,26247,26264,26296,26434,26477,26523,26594,26812,27266,27485,27667,27679,27698,27986,28851,29157,29562,29609,29879,29906,29926,30150,30322,30361,30506,30847,30905,31624,31649,31856,32140,32400,32867,33399,33480,33527,33573,33612,34279,34493,34933,34962,35686,35789,35933,36023,36333,36440,36508,36693,37009,37315,37359,37475,37684,38330,38397,38886,38969,39053,39127,40163,40180,40456,40644,40762,41290,41406,41466,41765,41794,41937,42243,42256,42364,42392,42779,42794,43021,43087,43210,43353,43621,44015,44083,44363,44430,44842,45096,45194,45363,45666,47179,48067,48162,48174,48286,48515,48623,49283,49473,49762,50002,50056,50317,50611,51060,51294,51608,51867,51987,52146,52177,52216,52227,52566,52688,52712,52739,52750,53095,53307,54302,55346,56618,57798,58112,58410,59274,59834,61794,62462,63255,64017,64139,64252,64323,64757,66350,66456,66599,66850,66948,68047,68130,68662,69141,69568,70259,70302,70872,70973,71116,71225,71284,71615,71869,72176,72276,72672,72834,72866,72945,73022,73091,73156,73207,73313,73395,73633,73705,73945,74178,74377,74609,74665,74837,75070,75107,75444,75739,76017,76448],"mipmaps":[5947,8633,8692,8825,12844,12895,13207,13826,14076,30368,37713,48163,50128,50682,50702,50991,72755],"joint's":[8256,8510,9157,9189,9307,9711,9752,13166,23113,26582,37618,74905],"odd":[14795,25229,51156,58559],"chunked":[68458],"reloaddata":[35540],"applies":[270,1383,1907,2044,2296,2746,3300,3833,4508,4556,5186,7018,7198,7685,8005,8326,8488,8523,8599,8963,9179,9309,9744,9965,10013,10247,10520,10633,10720,11467,11473,11521,11630,11653,11734,12353,12627,12698,12770,12866,13175,13245,13499,13574,13588,13684,13810,13826,13829,13869,13931,14323,14581,15001,18353,19133,19455,20638,21390,21555,21711,22119,22347,23644,24964,25570,26566,26571,27090,27210,27984,28158,28250,28475,28910,29043,29172,31627,31718,32132,32168,32319,32415,32907,34284,34496,34572,34990,35192,36005,36597,37291,37303,37509,37797,38355,38390,38735,39157,39329,39909,42392,43317,44463,44626,44687,44802,44833,45459,45980,46396,46878,48993,49204,49573,49607,49824,50391,50421,50452,50698,52763,53375,54067,54617,54820,55726,55856,56793,57840,57931,62740,62855,63723,64220,66233,66486,67661,69816,70514,70761,71045,71170,72240,72292,72672,72778,72923,72994,73192,73900,74034,74260,74474,74624,74768],"unitypbslighting":[46651],"stylename":[61972],"align":[6958,9532,23668,27848,32278,32400,34820,40054,40621,47180,48623,50376,52213,54313,54627,57362,58397,59301,59838,62009,62194,62463,62577,64090,64512,64564,64587,64611,64809,64842,64860,64915,65050,65313,65538,65553,65568,65588,65608,65628,65649,74247],"opengles":[38223],"testobjectwithspeciallayouttwo":[15343],"value”":[40966],"videoauto":[68930,69174],"isubmithandler":[49902],"scriptonly":[11955,19258,34440,49399],"unity_x":[33813],"nonasset":[40699],"judder":[72927],"interreflection":[249],"keywordexample":[42070],"centred":[71874],"cnquy29tmsqwigydvqqdexteawdpq2vydcbbc3n1cmvkieleifjvb3qgq0ewggei":[69930],"viewdir":[8745,43881,46196,46516,46624,46807],"rarity":[67188],"unrealistic":[8203,24489,27210,27310,33583],"premium":[22375,50276,52821,53130,53326,54005],"ignorelistenervolume":[73051],"tagging":[36754,75639],"runtimeinitializeonloadmanager":[15225],"unityaudioparameterdefinition":[4892],"flush":[51236,62009],"apart":[776,2053,2274,2357,2399,3477,8999,9145,11622,12716,13180,13670,20393,20608,22411,25526,26562,26571,26586,26999,37618,38403,62015],"notimplementedexception":[38765],"webrequests":[2665,68245],"devices":[389,544,622,633,649,661,673,701,716,748,839,871,882,889,1086,1099,1225,1273,1520,1574,1645,1672,1761,2839,2977,3377,3500,4566,4961,5885,5952,6051,6461,6836,8012,9057,9466,9785,10138,10687,10780,11707,12093,12346,12637,12865,14298,14328,16043,16224,16453,16527,16827,17030,17296,17752,17880,17895,17912,18038,18131,18481,19683,19974,20340,20403,21102,21634,21936,22435,23435,23550,25031,25177,25263,25334,25673,25721,25733,25814,25818,25826,25839,25855,25916,26062,26473,27536,28052,28084,28185,28422,29442,29450,29457,29570,29583,30326,30376,31418,33347,34274,35812,35957,36168,36465,37349,37639,37667,38350,38402,38426,39440,39630,40103,43455,43801,44870,45448,45593,49737,50170,50673,52511,52545,52688,52696,52699,52712,52748,53495,53773,58411,60357,60635,61749,63068,66355,66526,66973,67624,67745,68054,68758,68953,69199,69351,69455,72080,72181,72225,72664,72715,72891,72901,72940,72986,73094,73121,73165,73471,73896,74044,74160,74228,74581,74828,74980,75033,75077,75108,75127,75218,75280,75290,75393,75484,75897,76094],"intermediary":[161,24638,44249],"undoable":[29793],"purchasestate":[67815],"__auto__":[14818],"datalength":[68207],"cs#sample":[64408,64423,64463,64483,64506,64558,64581,64605,64626,64689,64740,64818,64836,64853,64871,64905,64925,64950,64967,65018,65075,65097,65112,65127,65159,65238,65262,65281,65351,65380,65530,65547,65562,65579,65599,65619,65640,65660],"inputevent":[59719],"sortinggroup":[13624,15177],"progressbar":[55474,59685,65030],"hotkeysxml":[61402],"assetbundlemodule":[16622,30954],"marginright":[57103],"windows":[74511],"settingsgroup":[48796],"nre":[30100],"globalconfig":[66325],"unityxrdisplaygraphicsthreadprovider":[75939],"#fff5ee":[63634],"onprecull":[21352,38195],"light's":[9214,27210,29091,43154,47852,71809],"p_num":[4888],"buffersize":[73518,75612],"230px":[59308],"verticesrecorder":[36409],"hint":[35007,52627,52992,74455,75774],"match":[131,254,478,1029,1735,1895,2055,3344,3455,3858,3951,4043,4091,4255,4707,4970,5238,6024,6302,6318,6360,6419,7073,7154,7238,7995,8183,8232,8403,8503,9536,9688,10342,11466,11736,12308,12472,12811,13272,13289,13464,13829,14712,15838,17384,18079,18137,18184,18351,18596,18753,20893,21402,21460,22139,22713,23263,23443,24785,25113,26479,27288,27814,28600,28782,29142,29213,29769,30303,31607,32063,32776,34221,34539,34862,36355,36712,38668,38718,39416,40711,41294,41331,41427,41472,41520,41532,41683,41841,42106,43244,43547,43709,44364,44835,45214,46511,48109,48599,48685,48998,49437,49498,49614,50138,50348,50524,50532,50547,50577,50645,51137,51237,51361,52553,52876,53778,54240,54375,54467,54663,54767,54808,56693,58112,58858,59828,61419,61545,62230,63049,63139,63841,63858,63876,63912,63934,63956,63989,64029,64204,64330,66199,66264,66337,66366,66374,67269,67519,67579,67772,68901,69139,69372,69476,70984,71121,71128,71196,71205,71446,71526,71780,72416,72501,72862,72942,72986,73222,73246,73324,73659,73705,75325,75417,75933,75946,76086,76166],"'current":[35029,36480],"boundarychanged":[76303],"topointer":[26162],"sheets'":[63816],"srcalphasaturate":[43768],"templated":[33483],"ioninspectorgui":[68887,69123],"dipose":[2934],"activator":[40565],"pubkey":[53436],"m_castshadows":[76511],"into":[156,167,237,258,336,378,405,423,481,492,531,555,580,680,719,813,845,876,944,993,1044,1143,1190,1227,1237,1254,1291,1311,1336,1512,1706,1765,1816,1824,1846,1882,1995,2048,2067,2188,2215,2256,2289,2360,2367,2613,2720,2774,3242,3299,3306,3365,3466,3483,3571,3579,3735,3793,3872,3898,3916,3952,3977,4157,4210,4220,4344,4354,4362,4471,4510,4523,4737,4776,4797,4816,4876,5026,5080,5165,5178,5322,5378,5522,5730,5736,5774,5938,5984,6061,6128,6221,6291,6348,6402,6472,6488,6649,6689,6725,6802,7081,7178,7198,7220,7359,7444,7461,7620,7812,7850,7874,7881,8086,8373,8427,8496,8629,8690,8837,8972,9252,9692,9941,10003,10072,10109,10244,10429,10540,10584,10692,10724,11263,11303,11461,11490,11518,11587,11680,11796,12048,12340,12527,12698,12742,12783,12849,12865,13041,13208,13264,13361,13372,13534,13587,13628,13645,13706,13816,13830,13855,13880,13945,13997,14018,14078,14218,14348,14539,14684,14719,14802,14856,15850,17326,17925,18058,18190,18215,18229,18315,18347,18395,18435,18500,18562,18897,18987,19021,19055,19182,19467,19943,20006,20192,20224,20349,20393,20415,20571,20653,21017,21144,21251,21296,21386,21455,21684,21697,21856,22036,22071,22128,22142,22192,22258,22333,23263,23483,23568,23666,23866,24167,24297,24467,24545,24607,24625,24639,24726,24764,24928,24943,25141,25153,25192,25236,25347,25477,25499,25727,25747,25903,25980,26078,26122,26159,26299,26459,26489,26508,26647,26712,26784,26825,26931,26938,26980,27025,27052,27065,27082,27129,27178,27187,27266,27331,27538,27578,27685,27702,27747,27937,28062,28180,28248,28265,28336,28615,28775,28955,29092,29128,29154,29364,29390,29434,29563,29663,29704,29721,29737,29755,29776,30006,30042,30048,30087,30167,30171,30269,30333,30352,30848,31656,31659,31719,31760,31763,31870,32128,32224,32296,32677,32808,32847,32916,33135,33453,33494,33681,33866,34161,34237,34267,34394,34475,34536,34736,34770,34927,34949,35011,35228,35250,35266,35366,35427,35625,35684,35779,35798,35903,35927,35969,36023,36120,36207,36298,36356,36435,36498,36597,36637,36694,36803,37273,37287,37369,37487,37549,37618,37646,37670,37684,37750,38243,38280,38332,38370,38394,38485,38515,38657,38713,38905,38966,39012,39169,39192,39239,39347,39381,39611,39678,39796,39828,39852,40083,40172,40456,40625,40689,40971,41167,41349,41608,41694,41712,41784,41786,41849,41882,42009,42181,42325,42366,42395,42663,42689,42766,42798,42813,42998,43016,43118,43165,43172,43217,43459,43493,43566,43684,43884,43947,44061,44281,44306,44338,44360,44376,44422,44835,45039,45055,45153,45198,45261,45390,45569,45718,45840,45898,46074,46755,46829,47306,48146,48162,48201,48224,48354,48364,48501,48536,48556,48574,48608,48630,48659,48683,48856,48863,48917,49373,49421,49479,49491,49536,49661,49668,49737,49752,49851,50002,50053,50067,50094,50140,50146,50322,50367,50409,50551,50796,50881,50960,51131,51186,51205,51231,51369,51588,51770,51843,51886,52010,52187,52229,52276,52558,52736,52757,52902,52993,53330,53781,54018,54254,54309,54447,54543,54578,54667,54678,54957,55673,55752,55827,55867,56100,56661,56717,56799,57337,57557,57681,57811,57971,58069,58146,58192,58369,58444,58757,59023,59541,59719,60022,60136,60157,60408,60574,60680,60840,61333,61556,61565,61594,61891,61921,61954,62026,62133,62742,62879,63922,64026,64325,64511,64610,64914,65289,65312,65386,65724,65733,65955,65990,66069,66132,66190,66225,66336,66356,66393,66414,66458,66469,66672,66809,66834,66866,66885,66938,67266,67560,67703,67706,67765,67903,68049,68130,68263,68279,68384,68469,68505,68531,68626,68872,69107,69508,69746,69956,70085,70159,70279,70330,70373,70781,70829,71029,71277,71468,71520,71592,71617,71658,71661,71751,71760,71879,71903,71970,72119,72130,72132,72139,72149,72201,72231,72281,72420,72467,72499,72608,72615,72731,72800,72832,72866,73008,73022,73088,73158,73207,73300,73328,73398,73480,73556,73620,73639,73690,73960,74077,74121,74178,74305,74453,74509,74590,74643,74728,74762,74837,74898,75107,75213,75221,75289,75409,75474,75901,75918,76090],"“system”":[10003],"innerradius":[27445],"iscompleted":[69535],"rolloffmode":[73059],"audiolistener's":[5225],"job":[1795,2069,4578,11567,16933,18257,21034,21908,26110,26135,26248,26263,26270,26285,26373,26434,26471,26494,27986,29243,30913,31647,33463,34212,35135,35700,36040,42812,48745,66897,75444],"mine":[48057],"sufficient":[3502,5955,8114,10093,14699,29277,30175,30269,33842,36568,36679,39646,44133,48690,49438,50933,53693,54237,58411,66569],"insightful":[17412],"r16g16_sfloat":[8450],"aspectratiofitter":[39383],"“curves”":[7163],"mydata":[57894,68294,68422,68450],"audioechoeffect":[7550],"navigate":[182,1656,2772,4058,4162,4178,4188,4211,4395,4407,4415,4422,4442,4453,4466,4487,4496,8706,9913,10034,10508,11176,11669,12850,14127,14281,14788,18165,18249,18949,19039,19076,19320,19623,20543,20594,21605,21875,22112,22628,23449,23564,23614,23982,24794,24929,24956,25451,25915,26613,26803,26941,26952,26977,27059,27094,27121,27204,27252,27285,27550,27795,28201,28294,28470,28879,29352,29821,30284,33656,34963,35817,36071,36471,36582,36685,36693,37655,37704,38743,39200,39277,41689,42776,48852,48938,50061,51008,51219,51373,52957,53250,53861,54453,57679,58160,60495,62831,66393,66992,67025,67243,67681,68857,69066,71116,71225,71329,71474,71598,71610,71879,71900,72443,72469,73919,74572,74687],"served":[6688,53009,66669,73714],"tooltip":[2495,18795,23860,25394,30630,36061,39353,43237,51582,53223,53322,54560,57988,61383,62107,63189,63420,65892,75157],"'name":[28617],"pricing":[52970,53409,67088,67212,67676,67867],"enhanced":[11631,23140,37423,68957,69204,69904,71217,74178],"aqua":[49857,63510],"suppressing":[10850],"shift+v":[34828],"correspondence":[27035,38437],"_animname_":[48351],"yesuses":[37924],"il2cppoutput":[73405],"kformatr32g32_sfloat":[50121],"unityxrmeshvertexattributeflags":[75814],"kunityxrinputfeatureusageprimarytouch":[75654],"normals":[304,5970,6596,10273,10523,10596,10657,11664,13914,14610,18230,21219,21449,21711,22844,23651,24651,25171,25212,27081,29340,29721,29767,32066,32476,32738,43181,44061,45642,46346,46831,47336,47912,49523,50368,71801,71959,75861],"ducklings":[18168],"m_airpressure":[58868],"preferring":[70225,70246],"event":[807,1913,2183,2230,5006,6944,7562,8111,9826,10711,10719,10933,11075,14734,14917,15850,18002,19376,20023,20088,20127,21153,21179,21295,21683,21693,21837,21903,21956,22353,23631,25345,26041,26711,27984,28062,28499,29420,29929,31790,32660,32755,35548,35701,36075,36305,36444,37627,39009,39210,39347,39396,39490,39511,39521,39634,39689,39699,39754,39785,39992,40018,40081,40110,40482,43319,49767,49885,51511,52252,52527,54898,55558,55643,55714,55806,55907,55975,56065,56704,57233,57289,57416,57555,57638,57804,57808,57852,57968,57994,58018,58127,58194,59540,59554,59719,59732,59815,60209,60358,60495,60540,60610,60766,61483,61686,61794,61990,62107,62194,62334,62582,62601,62711,62822,64444,65736,65900,66936,67101,67506,67594,67911,69620,72916,73091,73285,73486,74747,75581],"symbolic":[556,1843],"_box":[33303],"“black”":[45077],"toggling":[4845,22270,24594,39147,39318],"layermaskexample":[26632],"jobfence":[35896],"roadtiles":[51631],"android_log_verbose":[1053],"solution":[215,524,535,1311,1514,3591,5017,6037,6801,6933,8203,8280,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,12585,16527,16659,17642,19986,20766,20862,20917,21381,23051,24506,26703,27603,27756,28639,30112,31607,31664,33842,33883,34845,36337,36687,37634,37674,38087,38719,43185,43487,51976,52238,52615,53840,54127,57641,58824,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,70225,70242,70510,71316,71703,71794,71999,72176,72841,72843,74628,74787,74808,74831,74860],"uxmltypeattributedescription":[58088],"openness":[75579],"enlarged":[43113],"unityinitapplicationgraphics":[33472],"ifttt":[4071],"spdx":[18718,70835],"lawngreen":[63572],"keystores":[617,1127,1140,1177,1656,11965],"experts":[5820],"matches":[258,2556,2661,2776,4485,4768,4867,5977,7154,7368,10108,12742,12808,14956,17956,18139,18448,18950,19096,19340,19354,20606,21430,21566,23693,25093,25104,27819,28798,30401,30493,34572,39426,40813,41308,41471,41491,41882,43017,43947,44839,46762,48642,51159,52046,52872,54808,56706,57329,58142,58361,58847,61547,62838,63140,63807,63846,63868,63882,63926,63938,63955,63989,64011,64025,64328,65386,65413,65432,65444,65476,65490,65501,66194,66230,66373,66423,66518,67044,68543,70312,70945,71220,71446,71566,73431,75705],"codeurl":[74022,74105],"lastbuttonstate":[76228],"uvs":[313,5970,6512,10651,13378,21449,22145,24686,25211,26955,27014,27032,27098,29375,29488,36568,36680,45673,46224,46721,47607,50055,50147,50498,50691,68695,69306,69412,71969],"a0f79c9746f7":[53900],"dime":[8203],"yesconfigured":[37826],"underarms":[71776],"frommilliseconds":[62365],"m_side":[27348],"contained":[3249,3306,4970,5110,5154,8142,12690,17968,22567,24004,24195,25097,26263,31635,33475,35380,35773,38849,39549,39960,40713,40990,43414,53048,54224,57286,67755,71877,75365,75541],"m_visualtreeasset":[55100,62359,62515,62695],"signature":[926,2499,2626,3484,3538,28114,28185,28281,29992,34719,40839,42622,43661,43749,43807,44103,44141,44172,44206,44326,44377,44597,44633,44679,44772,44801,45061,45400,45529,45862,45944,45979,47162,47958,47991,48029,52553,53368,57884,66767,66895,67619,67771,68379,68594,70358],"feed":[4071,4994,7461,12649,23132,24819,31763,72609,75631],"repositioned":[38575],"filters":[2538,2549,2629,3951,3995,4042,4706,4964,5162,7564,7575,7693,7771,8830,12791,13485,13712,16984,18137,22862,33704,36709,40605,40691,40783,40929,41314,41382,41459,41500,41649,50500,50647,53229,53487,60220,60648,61533,66820,66939,71196,71203,71217,71523,74179,74404],"changecheckscope":[59612],"navigationtabevent":[60509],"id++":[59987],"hasbecomeinvisible":[18590],"spelling":[45693,58847,70482],"decided":[32729,52921,57330],"audioplugindemogui":[4968],"unitywebrequests":[68241,68309],"lognote":[27801],"trackeddevice":[76143],"callbackonly":[74335],"visitation":[36845,37145,37227],"'raw'":[13059],"5em":[61466,62015],"++y":[8680],"internetclient":[12641,72006],"numtochoose":[13080],"timestamps":[21932,25061],"wmr":[69020,69273,75303,76102],"binditem":[55950,57032,59097,59459,60019,65522],"bulletinstance":[25792],"rigs":[5960,6782,7018,18058,25187],"dungeon":[40745],"swicthed":[40099],"multisampled":[75413],"aligning":[1988,23672,51156,64752],"helpboxsnippet":[64738],"r":[179,2278,2412,5820,9461,10575,10751,13921,14385,20199,20685,21802,23370,24222,27474,28234,34774,36897,37037,37992,43209,44071,44109,44272,45776,46855,47573,48075,54736,58160,62027,66690,66951,67776,71682,76353],"horizontalinput":[9825],"unityinterfaces":[27893,27970,29931,75268,75922,75995],"#cd5c5c":[63566],"memorystatsscript":[36257],"presentation":[681,8012,11176,11682,11711,12046,12322,12468,19177,19686,34247,34330,34454,35809,73911,75440],"passoperationback":[45863],"browsing":[4267,53748,67062,69542,70961,71540],"“pops”":[71879],"inscribedcircleradius":[27371],"always":[222,394,729,1724,1770,1883,2084,2209,2232,2354,3302,3508,3587,3733,3965,4628,4793,4875,5068,5127,5221,5647,5978,5992,6144,6286,6388,6458,6723,6750,6793,6967,6993,7158,7187,7510,7617,7669,8024,8120,8187,8208,8318,8436,8888,9105,9163,9215,9262,9404,9462,9773,9894,10205,10368,10393,11716,12154,12401,12589,12897,13093,13733,13818,14661,14740,14950,15042,15856,18084,18149,18312,18894,19045,20050,20337,20411,20559,20638,20767,21052,21306,21460,21676,21872,22018,22042,22224,22736,23912,24169,24370,24671,24764,24923,25099,25169,25197,25350,25408,25491,25841,25849,25941,26000,26461,26572,26587,26925,26998,27133,27299,27522,27589,28484,28783,28839,28909,29101,29148,29594,29695,29809,29842,30063,31013,31631,31702,32179,32255,32414,33395,33415,33552,33657,34161,34488,34896,34954,34982,35280,35877,36092,36290,36343,36522,36762,37345,37679,37881,38297,38385,38668,38827,38841,39043,39797,39966,40342,40571,41814,42065,42134,42363,42391,42548,42950,43041,43221,43553,43586,43945,44084,44459,44811,45531,45568,45858,46248,47125,48001,48185,48235,48244,48269,48528,48554,48569,48680,48857,49479,49503,49558,49631,49662,49738,49850,49913,50368,50593,51031,51155,52160,52460,52489,52501,52640,53379,54635,54705,57056,58459,59071,60359,60762,62042,64528,65184,66043,66391,66498,66707,67190,67236,68209,68311,68898,69136,69333,69439,70008,70534,70613,70772,70801,71016,71121,71136,71221,71459,71652,71877,72182,72240,72331,72773,73037,73203,73251,73406,73450,73486,73984,74214,74649,74726,74949,75050,75421,75549,75785,76292],"unclean":[48057],"hexagonal":[96,9539,37500,51120,51137,51154,51244,51328,51356,51846,51860],"eur":[53070,53674],"settrs":[51650],"texcube":[46291,47415],"aural":[7619],"playcore":[509],"favor":[6105,26683,73173],"buildurl":[73408,73959,74099],"transparallaxspecular":[42873],"compound":[7955,13266,15832,24168,26058,36348,38486,69314,69420],"identity":[6204,10789,10803,11062,11150,11193,11264,11285,11299,13338,17220,20855,21175,22970,25512,28136,28188,38659,51756,56112,66034,66102,66224,66635,67045,67154],"childbirth":[53737],"curl":[32232,53101,72342],"“automatically":[68948],"sine":[4883,20694,47099,62917,72343],"4kb":[40717],"mounted":[2937,32284,72924,75211,75221,76136],"setgpucachesettings":[50004],"iappleextensions":[67390],"stripping":[5719,9496,19130,23279,23584,24964,26070,28462,30860,33866,40522,40557,41873,41960,42133,42945,43013,49770,52552,66456,66462,70571,71176,73024,73381,73450,74272],"listbox":[72182],"editorgraphicssettings":[28897],"rigid":[7250,9017,9163,9297,11621,12698,13163,13684,14983,26060,26547,26557,26572,26587,33578,33757,37609,38457,38519],"“azerty”":[69333,69439],"inspector":[122,177,255,265,380,1293,1730,1826,1837,1906,1970,2003,2205,2246,2294,2382,2419,2423,2772,3020,3516,3611,3855,4713,4804,4959,5030,5191,5688,6222,6263,6283,6321,6500,6765,6814,6942,7002,7284,7358,7469,7567,7574,7815,7826,7867,7937,7956,7984,8013,8144,8221,8281,8615,8648,8814,9135,9206,9248,9332,9593,9658,9848,9862,9931,9991,10076,10201,10211,10408,10490,10607,10615,10694,10721,10735,10796,11041,11291,11303,11323,11339,11461,11649,12744,12770,12853,12970,13064,13122,13195,13345,13354,13466,13587,13626,13805,13901,14020,14080,14219,14573,14675,14720,14787,15022,15839,17977,18075,18171,18221,18326,18348,18379,18389,18473,18854,18954,18970,19039,19061,19241,19669,20540,20592,20626,20652,20785,20863,20918,21253,21382,21388,21445,22084,22189,22624,23404,24058,24593,24665,24774,24895,24930,24955,25049,25170,25198,25241,25350,25395,25498,26613,26629,26789,26803,26976,27041,27094,27184,27204,27252,27285,27300,27318,27323,27492,27555,27594,27684,27752,27759,28265,28848,28867,29036,29091,29413,29559,29820,29849,29891,30124,30164,30190,30341,31603,31672,31735,31751,31769,31781,31806,31827,31844,32063,32082,32097,32121,32141,32208,32243,32332,32350,32376,32598,32621,32641,32669,32716,32751,32847,32895,33517,34184,34427,34525,34536,34675,34692,34770,34891,34934,34954,35193,35247,35453,36713,37227,37675,37722,38023,38533,38656,38714,38882,38913,39024,39352,39489,39885,39989,40002,40219,40506,40617,40775,41428,41529,41583,41644,41691,41758,41808,41891,42022,42165,42353,42741,42756,42784,42940,43012,43126,43182,43539,44078,44199,44471,44532,45049,45148,45180,46024,46803,47189,48232,48245,48270,48503,48558,48585,48610,48643,48870,48941,49178,49329,49446,49553,49592,49619,49655,49696,49714,49851,49908,50024,50288,50346,50371,50413,50427,50519,50534,50549,50557,50567,50610,50620,50689,51008,51113,51131,51207,51226,51231,51294,51381,51556,51609,51867,52176,52222,52746,54201,54216,54262,54295,54466,54540,54546,54625,54634,54677,54699,54722,54741,54779,54932,55014,55150,55223,55233,55363,55508,55581,55861,56075,56125,56382,56388,56636,56692,57208,57551,58155,58274,58410,58435,58618,58662,58726,59393,59587,59807,59998,60157,60650,61294,61310,61480,61515,61616,61892,61928,61980,62051,62208,62483,62664,62853,63085,63107,63243,64174,64282,64512,64532,64564,64587,64611,64761,64795,64809,64842,64860,64915,65050,65085,65178,65268,65313,65370,65538,65553,65568,65588,65608,65628,65649,65705,65945,66100,66223,66339,66349,66393,66928,67084,68545,68929,69172,69397,69501,70267,70747,70833,71175,71371,71562,71605,71806,71869,71902,71905,72143,72228,72429,72501,73080,74187,74233,74418,74590,74896,76267],"step":[2069,2834,3793,4204,4522,5732,5838,6041,6944,7155,8196,8326,8382,9351,12407,12730,14149,14238,14560,18229,18678,18935,19006,19080,20420,20595,20787,21096,21332,21592,21956,22144,23067,24519,24618,24726,24964,25904,26690,26700,28394,28677,28726,28771,29058,29185,29904,30048,32067,32180,35339,36569,37622,37644,37667,38683,39444,41853,47179,48663,49159,49496,49533,50142,50796,51960,52088,52120,52200,52842,52915,53187,53420,53696,53813,54042,54274,54349,55512,57928,59038,61096,62597,62883,66590,67070,68038,68573,69868,70044,70265,71266,71404,71481,72276,73314,74903,75682],"numbers":[2303,4126,4902,5968,6126,6269,6297,9129,9227,10024,10724,11459,11534,11819,12354,13020,14756,15042,20655,21676,22189,22852,24490,24920,25847,26005,26111,28613,29248,29338,29470,29686,33239,34285,34497,36205,36330,36690,37293,39615,39988,40298,41154,41202,43888,44231,47608,51014,51188,51390,52067,52590,53147,53514,58453,62894,63735,67164,68281,70960,72306,75325],"webcam":[12649,73093,73375],"yourappx":[72188],"gameobjects":[67,77,1871,2282,2421,2959,3381,3862,4534,5332,5350,5810,5972,6082,6149,6754,6782,6801,6958,6984,7167,7215,8008,8999,9129,9163,9294,9328,9532,9726,9939,9987,10058,10107,10205,10326,10392,10580,10705,10720,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11332,11436,11504,11532,11623,12751,12933,12968,13127,13159,13261,13272,13289,13372,13554,13585,13670,13865,13898,14689,14831,14982,15020,15817,15831,15884,16866,17788,17976,18040,18163,18322,18357,18418,18435,18563,19013,19037,19449,20265,20379,20402,20583,20634,20654,20767,21202,21326,21461,21640,21688,22009,22054,22121,22224,22758,23273,23394,23461,23668,24467,24523,25361,25396,25496,26572,26580,26606,26647,26651,26665,26707,26799,26888,26993,27025,27087,27183,27187,27215,27266,27320,27484,27752,29420,29719,29922,30169,30179,30241,30264,30327,30510,30836,31118,31442,31668,31818,32273,32703,33100,33477,33579,33630,33652,33754,34721,34769,34892,34923,34955,35069,35192,35746,36029,36129,36242,36330,36360,36455,36597,36683,37287,37344,37525,37653,38332,38346,38459,38478,38500,38557,38587,38621,38911,39015,39125,39159,39228,39308,39921,40534,40674,40697,41361,41489,41676,41723,41783,42712,42728,42753,43131,43150,43172,43205,44029,44094,46802,46875,48181,48233,48296,48902,48982,49318,49484,49650,49677,49708,49905,50288,50386,50453,50956,51055,51342,51554,52486,54120,57628,59398,62742,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66464,68048,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68533,68563,69244,71175,71565,71605,71662,71898,71906,71982,72229,72754,72945,73571,74039,74212,74426,75080,75107,75221,75374],"yesshadow":[37840],"repo":[70722],"persisting":[65699],"versionname":[11844,53303],"unityxrvector2":[75494],"logicalset":[43817],"crisp":[9258,15967,37496,58392,58651],"relatively":[4628,5920,5984,6149,6807,8579,29368,29421,37397,48146,48227,49522,49644,71873],"curvesnormalized":[6703],"buttontoactivate":[56493],"clay":[31066],"product3":[53684],"steeringbehaviour":[21328],"ratings":[53296],"youtube":[4149,5910,6042,36571,53292,74199],"bits":[554,4776,5595,5968,7763,11844,13206,14318,20269,27146,27509,29364,32702,34287,34361,34500,37958,38364,44053,44233,45868,50419,50669,61557,68923,69166,71567,75899],"uis":[8115,54771,64328,64774],"instantiatingprefabsexamples":[25501],"mem":[27907,73186],"multiples":[5452,5622,8036,13919,31761],"somepath":[25945],"aggregate":[5320,5891],"javamessage":[1457],"renderergroup":[5485,5630,5752,5796],"tooltips":[30582,62109,63200],"unsubscribing":[6135],"gender":[22436],"explodable":[25608],"operation":[269,2201,3403,3718,4671,6031,6132,7383,10226,18377,21731,22685,25096,25861,26248,26485,26494,26710,27738,27813,27877,30073,33094,33407,35625,35719,36062,37713,41194,41337,41520,42060,42672,43728,43800,45179,45293,45583,45859,47992,48683,49069,49402,50698,51545,52103,52642,52903,53829,54089,54895,55060,55553,55582,57574,68531,69544,70120,70404,71344,71423,72319,72394,72732,74177,75414],"myutilities":[71707],"hlslinclude":[42602],"sloan's":[27468],"evaluating":[10024,22522,29133,34188,47711,49661,57750,75144],"fuzzy":[2658,41491],"skyboxes":[8612,13538,14246,36593,42692,42716,42732,42757,43505,43507,43552,49434],"flag":[1200,4741,5187,5938,7495,8427,11006,11095,11112,13127,18528,19242,20289,20452,22914,23522,25960,26172,27984,28100,28625,29858,34206,34428,34485,34672,35988,38297,38347,38397,49720,50965,51710,52580,64341,66383,67188,71078,71283,74951,75418,75595,76138],"orphans":[29003],"three":[67,355,510,1407,1604,1937,1968,2045,2298,2353,3107,3242,3676,4965,5118,5419,5563,6039,6111,6235,6281,6414,6754,6814,7032,7349,7390,7800,8303,8821,8979,9747,9965,10114,10220,10435,10493,10703,11311,12968,13201,13575,13645,14073,14673,14728,14805,15854,18822,19128,19467,20256,20580,20626,21096,21221,22292,23665,23727,23810,24769,25051,25376,26110,26449,28560,28914,29001,29061,29218,29340,29617,29697,30361,30502,31595,31637,31708,33447,33483,33546,33733,33813,34714,34778,34872,35107,35771,35789,36037,36682,37283,37394,37480,37712,37722,38258,38531,38744,38854,39260,40327,40957,41214,42009,42117,43048,43484,44059,44517,44902,45220,45571,46922,47470,48227,49397,49491,49527,50025,51150,51244,52234,52260,52585,53460,53733,54963,55309,55887,56523,56812,57124,57570,57798,57811,60158,60433,61610,61794,62351,62508,62643,64338,64535,64699,65415,65446,65736,65791,65957,66227,66390,68469,68555,68887,69123,71970,72292,72520,72764,72858,73952,74408,75573,75978,76309],"ondrag":[49894],"xcode’s":[2835,36164,52688],"amount":[434,554,1169,1822,1832,2197,2275,2412,2769,3299,3674,4086,4257,4372,4458,4897,5123,5641,5952,6133,6381,7296,7484,7685,7786,7929,8357,8530,8858,9130,9973,10080,10230,10708,10858,11177,11191,11258,11280,11486,11532,11600,12407,12706,12900,13239,13656,13709,13962,14169,14295,14318,14476,14502,14609,14824,15015,17984,18151,18257,20240,20457,20932,22653,23438,25075,25999,26060,26482,26714,26991,27741,27930,27984,28179,28483,28887,29593,30164,30205,30326,30358,31643,32226,32403,33086,33394,33411,33437,33502,34994,35277,35691,35799,35909,35924,35974,36041,36187,36215,36301,36391,36609,36679,37097,37692,38293,38330,38870,39430,39657,39772,40450,45477,46347,46831,47885,48597,49545,49609,50466,50596,50669,50996,51226,51953,52590,52993,53494,54132,54259,54769,60775,62030,65232,65256,65988,66164,66650,66910,68215,68923,69166,70299,71790,71973,72336,73089,73170,73602,74137,74642,76298],"bottle":[30511],"dxgi_alpha_mode_premultiplied":[12475],"provides":[7,14,46,78,211,369,506,509,861,1180,1402,1497,1564,1572,1621,1774,1843,1895,1982,2192,2205,2236,2490,2539,2690,2693,2937,2977,3428,3582,3736,3949,3999,4116,4541,4716,4776,4879,5156,5168,5178,5265,5273,5838,6037,6154,6374,6723,6797,6890,6944,7131,7162,7493,8318,8787,8973,9330,9431,9964,10443,10518,10658,10691,11101,11160,11172,11304,11983,12154,12645,12896,12969,13017,13234,13266,13311,13355,13376,13737,14232,14460,14775,14882,15935,16043,16075,16256,16275,16364,16487,16527,16564,16651,16659,16667,16707,16779,16787,16795,16869,16883,17015,17030,17045,17126,17133,17254,17312,17424,17437,17452,17506,17642,17773,17803,17835,17850,17865,17895,17965,17968,17999,18220,18404,18467,18539,18593,18662,18844,18907,18985,19124,19274,20045,20096,20116,20215,20249,20378,20766,20862,20917,21381,21391,21446,21624,21929,21986,22100,22190,22431,23441,23668,24506,24519,24641,24753,24898,24923,24943,25034,25043,25203,25521,25841,25849,26007,26041,26252,26472,26558,26573,26629,26672,26711,26723,26798,27084,27215,27266,27509,27598,27648,27671,27747,27815,27826,27979,28071,28484,28880,29004,29061,29330,29420,29439,29442,29484,29614,29897,30001,30061,30330,30657,31008,31368,31592,32457,32852,33103,33391,33510,33527,33762,34155,34188,34794,34840,35366,35603,35634,35815,36020,36285,36518,36568,36633,36680,37390,37478,37495,37508,37610,37616,37668,38258,38461,38500,38652,38840,39031,39263,39764,39828,40088,40263,40528,40544,40650,40657,40674,41261,41348,41449,41677,41802,41990,42402,43248,43456,43484,43493,44682,45229,45417,45616,46528,47095,48223,48676,49169,49630,49702,49720,49728,50568,50583,50620,50647,50656,50756,51155,51387,51427,51527,51552,51621,51785,51886,51950,52176,52238,52718,52756,53033,53249,53713,54107,54224,54443,54706,54795,56116,56670,58018,58467,59552,59748,59892,60164,60394,60560,60807,61302,63105,64214,64387,64756,65211,65885,65951,65957,65990,66012,66037,66043,66099,66193,66225,66335,66373,66414,66802,66822,66990,67088,67186,67364,67566,67603,67642,67758,68072,68196,68378,68433,68458,68527,68661,68747,69018,69270,69956,70302,70353,70838,70943,71090,71121,71212,71779,71896,71932,72229,72291,72394,72538,72616,72788,72821,72871,72899,72946,72997,73028,73118,73249,73499,73650,73894,74121,74137,74498,74506,74512,74635,74841,74883,75077,75137,75211,75223,75259,75280,75294,75407,75501,75915,76094],"setnextvertex":[58471],"makers":[72957,75034,75104,75377],"rocket":[9718,25499,31856,38494,72299],"accelerated":[6794,23457,31823,32609,36599,37919,72610,72663,73689],"'m_shadowmatrix'":[44965],"blue":[2274,2286,6266,6293,6542,7103,7352,8350,12109,14103,14321,14672,14730,17999,18236,18435,18898,18993,20593,22156,22226,23702,24255,24489,24554,25410,27476,28891,30039,30255,30651,32813,33433,34763,34781,34891,34950,36110,38749,39127,41929,42818,42963,43190,43232,44112,44521,47364,48322,48526,48665,49431,49511,49630,49850,50019,51058,51150,51189,51312,51518,52465,58523,59868,62014,62339,63517,63670,64151,64572,64682,65675,70238,72752],"batchmeshid":[5369,5513,5764],"unconnected":[50357],"clickmebuttonclass":[62366],"spi":[75187],"electricity":[5872,30326],"truly":[8012,44876],"transparentfamily":[42921],"mergeinto":[73502],"influences":[29733,50494,50597,71795],"wetmix":[7546,7583],"repertoire":[4997],"jc":[1456],"parenthesis":[40316,44433],"compilerservices":[18536,40368],"gravity":[7232,8287,9784,11485,11508,11532,11600,12718,13238,15862,22301,26593,32164,33762,37532,38459,38497,38519,38541,38574,38611,38643,52763,68009,68727,68864,69097,71608,73493],"man":[3342,50401,50537,69901],"bar":[180,2272,2293,2395,2771,3537,4209,4480,4578,5117,5272,6267,7140,9767,9847,10209,10327,10747,11462,11505,11674,11716,12067,12331,14571,18137,18207,18467,19075,19683,20594,20716,21691,22001,22037,22133,24100,25095,26614,26677,27108,28400,28775,28886,30050,30382,30482,30629,31758,32141,35381,35682,35811,36225,36625,36703,36792,39063,39305,39756,41349,41677,43518,48321,48510,49727,49849,52106,52547,53250,56977,57291,57836,58132,59076,60881,60982,62855,63243,63725,65037,65176,65413,65698,66599,67149,67764,67908,68396,68999,69250,70370,71181,71268,71296,71317,71327,71382,71432,71472,71495,71509,71533,71814,71904,73276,73913,74900],"upgrades":[4073,4453,67148,67688,68703,68926,69169,69735,70225,70246,70877],"ensuring":[13735,18929,20343,26569,28281,34101,42149,49471,52320,67601,68622,74257],"inset":[43181,48373],"selfillumspecular":[42589],"assetbundlebuild":[3484,3538],"extracting":[3791,25215,48334,70224,70245,75741],"ambiguous":[64337,69006,69258],"fetchitems":[2524,2585,2626],"getcurrentthreadid":[18556],"recommendations":[25246,72661],"powder":[32650],"propertywithnullchecksdisabledongetteronly":[25019],"converging":[8036,66002],"reflectivespecular":[42524],"adequate":[6807,18819],"echo":[4866,5158,7448,7465,7538,7551,7724,7747,62032,66723,69965],"conduct":[4445],"networklobbyplayer":[11114,11155],"setatomicsafetyhandle":[26228],"tooling":[6895,15935,16005,17312,18409,27938,35603,37495,68636],"“resource":[6142],"threads’":[26482],"yescompute":[38128],"dx11":[8419,9457,14445,25268,30295,34278,34492,43998,44904,45214,46782,46818,48164,50169,68767,71746,72219],"tatters":[49569],"consoles":[6839,8408,9262,9466,12885,17126,20419,23590,37639,38322,38417,44055,44833,45202,68527,73904],"accordingly":[2064,5161,6756,6798,7243,7798,8031,24781,25667,33528,37192,37690,42107,48376,49513,51984,61542,61908,65231,65255,65931,67296],"#fff8dc":[63526],"xr_fb_swapchain_update_state":[74400],"expression”":[41135],"onbeforeserialize":[18007,39900],"disabledscope":[59620],"vert_meta":[28928,29519],"saturn":[59967],"prelateupdate":[35707],"mipmapenabled":[48772],"linguistic":[5989],"filesystem":[3619,48201,49737,72474,73899],"relate":[1153,1973,3287,3810,3858,9333,9503,10290,10636,13502,14625,20587,23252,25172,26669,35692,36053,38884,40681,44576,45521,50956,51951,54067,66183],"strippable":[52608],"localizedpricestring":[67067],"vignette":[34879,38109,74405],"dualbuildpath":[74078],"batchdrawcommand":[5648],"hdrgraphicsformat":[19933],"preloaddata":[15140],"agree":[4021,4410,16043,17030,50344,67523],"annual":[234],"institutional":[70424],"galleries":[64745],"coloring":[44428],"phone":[4008,4126,12659,24770,25268,28445,29691,45735,53719,76124],"xrpointcloudsubsystemdescriptor":[74382],"stopcoroutine":[18309,76280],"sgd":[53669],"ondrop":[49896],"focustype":[20951,49985],"inelastic":[8568,11536],"itemssource":[55954,59098,59465,60015],"getitemdataforindex":[60091,65523],"sketchupnodes":[13392],"toggle_mixed_bg":[63498],"downsides":[20381,29332,38409,42058],"verticalslider":[23972,59714],"myocclusionportal":[11347],"europe":[5910,66393],"47e7":[66769],"asks":[4180,18441,20612,25113,31725,34949,53321,54042,55916,67965,70545],"transitionexample":[62350,62655],"1searches":[40744],"raycasthit":[6725,71580],"newsstand":[12222],"gradientalphakey":[57000],"flexibility":[4773,5181,5498,6834,6934,15835,17133,17384,17642,25597,26587,37236,50932,57953,60638,68309,68461,72788,73089,74218,75080],"homepage":[4131],"validating":[4387,35881,66435,67758],"swapped":[7784],"affiliates":[50341],"cs0246":[67697],"reside":[2769,3377,11225,22719],"participate":[4370],"folderpath":[74575],"grassbillboard":[45641],"buildings":[8086,10081,27331,27754,37685,43484],"fringes":[22740],"console":[1706,2702,4566,5866,6051,7669,8972,9477,11016,11177,11741,14313,16933,17062,18111,18384,18927,19230,21035,22625,25106,25895,25980,26084,26451,27139,27705,27763,29920,30030,30509,30727,33069,33865,34416,35032,36683,37667,38425,38697,38877,39357,39885,40378,40820,40869,41199,41852,41974,42398,42969,44621,44688,45037,45485,49254,49390,49730,49849,50041,50087,50199,52554,52757,52771,52813,52872,52926,52951,53079,53248,53693,53778,53993,54002,55675,58586,59780,60433,60571,60837,61688,63443,65135,66694,67234,67270,67374,68639,69398,69502,70047,70381,71256,71412,71724,72163,72241,72393,73291,73395,73511,73672,76160],"cm":[48278],"resettrigger":[2013],"unityxrhandfinger":[75576],"platform's":[2989,6383,11687,28181,42189,67019,67230,67841,69182,74644,75192,75394],"everywhere":[4130,14048,38430],"graphicsdevicevendorid":[19730],"intarget":[69605],"mysite":[68143,68251,68270],"isetelementproperty":[37061],"droplabel":[57431],"recalculates":[11737,13475,38532,62193],"deduce":[60646],"iap":[17045,22339,25919,31130,52820,52924,52950,53132,53303,53689,53946,53989,54005,66959,66964,67018,67063,67068,67149,67161,67229,67261,67278,67293,67366,67538,67543,67550,67558,67568,67579,67581,67592,67603,67624,67638,67706,67720,67745,67755,67840],"unity_fogend":[46460],"#1b1b1b":[63280],"upgrade":[1539,3346,3725,3876,4372,4434,4447,11612,16151,17045,30430,30472,34653,38845,43308,44019,52494,66638,66812,67148,67983,68566,68689,68811,68849,69040,69292,69339,69402,69506,70394,70908,71019,72862,74131,74223,74411],"they're":[1031,1821,2188,2353,7482,19242,24583,25434,25841,26108,26587,31007,33265,33382,33781,34428,34526,34736,35130,36782,39927,41871,42204,43139,44236,48564,51202,54547,54726,58156,59534,60495,60763,61542,62032,63112,63714,63922,63956,64699,65335,65913,66006,68160,69252,70654,70761,70773,70826,73025,73168,73337,73385,73975,74315],"provide":[164,229,257,615,997,1118,1135,1384,1407,1502,1771,1982,2405,2506,2569,2745,2956,3013,3300,3344,3453,3975,4035,4148,4171,4246,4356,4394,4434,4440,4548,4738,4980,5019,5181,5350,5498,5761,5805,6691,6723,6934,7765,7831,8280,8438,8496,8850,8982,9100,9179,9343,9608,9653,9955,10010,10093,10379,10772,11160,11306,12657,13022,14296,16060,18245,18357,18514,18568,18665,18736,18746,18844,18936,19036,19286,19783,19990,20179,20260,20893,21962,22189,22333,23416,23852,23912,24193,24745,24968,25204,25521,25675,25888,25980,26569,26800,26956,27038,27072,27266,27482,27815,27938,28378,28480,28838,28895,29141,29570,29614,30881,31012,32362,32924,33411,33524,33553,33573,34163,34194,34663,34956,35089,35687,35831,36432,36688,37293,37505,37606,37617,37706,38369,38839,39208,40042,40450,42214,42336,42781,44229,44678,44978,48874,49393,49560,49562,49646,50656,50687,51018,51353,51609,51952,52744,52797,52851,52876,53468,54028,54227,54706,55329,56609,57578,58448,58731,59122,60761,61439,64450,64511,64610,64747,64808,64914,65031,65312,65537,65552,65849,66111,66260,66435,66584,67155,67161,67272,67293,67351,67569,67626,67766,68280,68378,68473,68720,70011,70184,70211,70245,70496,70629,70755,70959,71010,71154,71375,72787,72880,72914,72940,73093,73245,73405,73876,74136,74379,75083,75108,75157,75221,75291,75390,75440,75617,75766,75905,76069,76194],"spherecastall":[6066],"animatortransition":[15267],"czech":[53617],"oklab":[20728],"unityxrinputdevicedefinition":[75516],"loadfromfileasync":[3302],"overlappoint":[35270],"supportedrendertextureformats":[19931],"puttygen":[70098],"bc7":[6383,6445,14328,28181,74644],"colorblockdrawer":[74243],"trademark":[4065],"pins":[52992,53344],"simultaneously":[3474,4964,6810,11630,16060,26478,26572,29586,29790,29882,31623,33099,35719,36011,44671,54208,66967,67147,72723,73478,74063],"creator's":[52236],"propertydrawer":[20944,55009,55509,55579,58745,59586],"m_length++":[26213],"cloudsave":[17304,31414],"audiolowpasssimpleeffect":[7655],"unityrelease":[11420,70823,71105],"optimization":[2764,3312,3501,5137,5876,5909,6807,8114,8872,10596,11939,12255,12376,12564,13419,14247,17206,17925,19244,20378,20418,21041,21460,22814,23377,25036,25725,26036,26039,26077,27059,27812,28399,28470,28979,29120,29352,30336,33772,34315,34430,34485,34988,35603,35964,36354,36786,37469,37667,37987,38470,45593,48324,49309,49621,49732,52608,68739,70734,72335,72871,73169,73406,74844],"flac":[4782,6696],"xcscheme":[74944],"filename":[2776,2915,3735,3814,3954,4034,4502,6332,9364,12399,12809,13318,35088,35234,35643,40271,41467,52076,52362,58823,68607,73944],"multitouch":[19987,40103],"yourproductname":[11842,12154,34372],"checks":[465,501,1273,2180,2715,3846,4485,4902,5774,5938,6962,11202,11442,12754,13275,13292,18307,19096,23401,24980,25103,25698,30111,30912,31725,34205,35008,35694,36086,39070,39927,41753,41839,43947,44852,52629,52872,53363,53778,55990,56918,57928,58103,64655,66115,67763,68901,69139,69303,69409,70594,70756,72364,72440,73203,73302,75015,75136,76320],"correspond":[11,424,2179,2211,2299,4227,5266,6269,6291,6314,9227,9332,13920,14681,23567,23816,24777,25763,28889,33529,34719,35748,36330,39587,40141,43155,45427,45474,45668,47083,48174,48326,48339,49541,49850,50889,52787,66002,71969,73325],"equalcontents":[55119],"reconcile":[8546,9137,18058,72400],"classification":[66468],"ducking":[4800,5031],"allocate":[4911,5260,5353,5498,6024,12896,18597,20450,20735,26156,26251,27836,27923,30904,33081,33087,33382,33429,33448,35729,36785,36806,41813,50011,52596,54259,58466,61071,71741,73555,73610,75410,75751],"campaigns":[17092,53324],"filedownloader":[68116],"normalmaps":[49495],"objectfieldsnippet":[65016],"customcolor":[46371],"myelementtraits":[57325],"address":[634,855,3487,4008,4131,4398,4440,4488,5417,5561,6060,6155,10988,11008,16060,17062,18134,18513,20269,21067,27648,27854,28420,28775,28947,29420,30423,30498,35043,35797,36068,36488,37660,50349,53009,53365,53718,54263,56724,66229,66354,66571,67039,67253,67871,68160,68304,68310,70026,71376,72052,73276,73615,74169,74564,74824],"resimulate":[11467],"repeatbuttons":[23902],"00001f":[14172],"s_gradientfrom":[56758],"guisystem":[68660],"ahead":[4355,11298,13250,14851,20208,23126,24944,29814,30857,37227,38514,40515,40545,52610,66135,73658,75440],"voucher":[4108,4493],"startassetediting":[3688],"movedassets":[19516,68966,69213],"modification":[2308,3719,3826,5240,5774,20632,29784,31634,31920,32107,36327,39141,40719,46576,46776,48163,49533,70211],"yzdrive":[8541],"readtextureimportinstructions":[48752],"bindcustomstreamproperty":[68583],"uncommonly":[66501],"compute_eyedepth":[32983,44023],"triggersubemitter":[32657],"blendshapebufferlayout":[369],"m03":[5403,5547,20374],"sticky":[9155,22359,73269],"suffix":[18751,40343,42611,44244,49785,52877,53007,53192,53782,57149,63794,68996,69247,70654,70755],"texel’s":[9998],"“genericmethod”":[40567],"dominates":[6295],"mycolor":[24218,44273,45169,46404],"write”":[30296,45509],"setnormals":[304],"core":[1312,1770,1812,1862,2768,5989,6718,10781,14013,16000,16038,17012,17106,17120,17128,17206,17541,17746,17754,17835,17980,18414,19296,20186,20230,21087,22348,25342,26081,26472,26495,29259,30168,30281,30879,30983,31036,31387,31610,33463,33510,33804,34159,34209,35277,35403,35609,35959,36165,38275,38743,39906,41843,42603,43090,43096,43937,46818,48984,49148,49342,49522,50233,65897,65965,66028,66222,66472,68657,69375,69479,70169,70307,70707,71194,72697,72967,74279,74733,75040,75115,75323,75474,76161],"urls":[4347,4429,19378,66390,68476,69859,70173,70241,70597,71255,72464,72647,73193,73409,74010],"mesh’s":[336,10503,10609,13456,21711,27323,32476],"#ff8554":[54354],"isolating":[8582,39339],"registerframecallback":[27993],"subscene":[50029],"unsatisfied":[33583],"trails":[14581,22936,25572,32196,32263,32711,35530,72812,72828],"usslabelclassname":[60914,61014],"myfile":[68397],"force":[768,3293,3731,3828,4629,5979,6383,6445,7198,7296,7471,7923,7973,8008,8177,8239,8274,8392,8508,8585,8597,8777,9009,9042,9075,9149,9173,9301,9362,9692,9731,10003,11190,11472,11508,11610,12201,12698,12736,12917,13116,13164,13242,13363,13552,13657,13670,13826,13837,13863,14512,14951,14991,15034,15864,21052,21147,21162,22938,23270,23585,24759,25292,25570,26561,26572,26713,28181,28241,28488,29109,29618,30309,31367,31709,31802,31822,32238,32302,33631,33672,34205,34261,34342,34468,36626,37619,38468,38489,38525,38672,39588,39771,40011,40107,40142,41821,41982,44315,44625,45041,45427,48092,48683,50458,50611,50978,51988,52489,52746,54438,61555,65882,66638,68724,68861,69094,69300,69406,70226,70902,71318,71541,72299,72403,73251,73397,74334,74496,74568,74649,74804],"stretched":[199,1962,4292,8830,9650,10738,32250,33549,39721,50929,65986],"locations":[1007,1127,1840,2958,3598,5965,11075,18896,23480,24774,24984,25448,25941,27764,31605,35092,48373,49438,51902,52633,69891,70190,71396,71862,75322,75628],"flare's":[9218],"models'":[38437],"npmrc":[69995],"setboneweights":[332],"ensures":[690,3344,3493,3714,3766,5920,6318,8085,8355,9839,10793,11075,11638,11660,13266,13430,15967,18220,19477,21529,26072,26479,27015,27054,27549,27813,31635,34343,34469,35130,35879,36554,36771,37496,37715,38497,38827,38841,39813,41289,42025,42185,42817,43074,46520,47985,48554,50007,50348,51618,52361,53703,57868,59750,66393,67090,68701,69892,70516,70613,70984,71851],"particlesystemrenderer":[15171,32923],"chunkbasedcompression":[3249,3293],"decoder’s":[4753],"vrmodule":[16830,30980],"color":[29,321,554,2308,2337,2384,2710,3807,4519,4579,5152,6079,6573,6765,6945,7169,7352,7989,8020,8311,8634,8651,8823,8995,9213,9283,9460,9584,9626,9672,9855,9872,10081,10121,10212,10522,10768,11560,11764,12109,12289,12345,12452,13030,13142,13204,13711,13748,13788,13911,13993,14087,14321,14475,14573,14680,18239,18263,18344,18774,19936,20254,20704,21392,21498,21698,22139,22198,22253,22776,23284,23378,23526,23602,23675,24095,24218,24487,24514,24652,24728,26787,26793,26860,27081,27114,27130,27210,27267,27310,27332,27467,27490,27499,27514,27544,27583,27983,28881,28947,29091,29340,29488,30132,30627,31730,31746,31764,31878,32107,32163,32291,32393,32631,32659,32734,32867,32919,33709,33907,34272,34360,34480,34864,35016,36459,36501,36894,37082,37364,37556,37753,38244,38359,38393,39127,39595,39629,39684,39718,39825,39866,39972,40059,40456,40748,41343,41554,41683,41765,42010,42288,42378,42673,42703,42724,42746,42770,42792,43419,43547,43571,43700,43764,43882,43930,43964,44096,44294,44345,44428,44892,45082,45123,45197,45209,45280,45514,45568,45672,46143,46505,46574,46721,46838,47108,47300,47911,48286,48510,48683,48951,48993,49299,49466,49483,49596,49633,49636,49837,50062,50374,50472,50596,50847,51518,51648,51710,51755,51799,51826,51876,52466,54304,54468,54860,54873,55511,55567,55824,55855,56093,56176,56212,56772,56839,56982,57158,57360,58086,58497,58662,58756,59303,59624,60341,60704,60916,61016,61223,61454,61558,61834,61938,61969,62014,62054,62338,62592,62676,62840,63253,63504,63662,63715,63721,63853,63871,63885,63900,63929,63949,63956,64017,64112,64217,64431,64452,64468,64674,64748,64825,65038,65304,65321,65675,65757,65810,65903,65984,68825,68856,69058,69311,69417,71583,71601,71810,72731,72752,73442,73934,74291,75169,75424],"udn":[30467],"#f5f5f5":[63653],"showvisualelement":[55822],"dangerdistance":[18297],"removetype":[73755],"introduce":[2699,3571,4254,9964,11813,12349,18284,27332,34279,36784,37678,38336,50551,68926,69169,70910,70960,71033,71738],"shadowspacematrix":[44961],"forcetextboxbasedkeyboard":[34235],"d_in_foldout_act_on":[63454],"shadows_low":[42976],"vid":[45825],"simulator":[889,1553,9057,12214,16224,19665,19966,20002,20045,20057,20090,22030,22435,24626,25732,26084,31418,49753,52676,52742,52747,67744,68813,69045,74228,75213],"changestate":[75835],"we’ll":[3309],"resource":[1343,1467,1509,2789,3108,3576,5260,5810,7410,8439,8647,10130,11320,11604,12226,12912,16060,19124,19130,19150,20418,20735,21002,21294,25292,25861,25957,26013,26799,27679,28457,29440,29566,30320,30356,31701,32651,32775,33476,35126,35611,35763,35957,36334,36354,36511,37397,37704,38624,40303,41462,41491,42181,43175,44384,45582,47663,48268,48353,49401,50005,51035,52033,52875,56120,59499,59670,63700,63765,64160,64670,66393,67185,68923,69166,72497,73410,73416,73671,75426],"custom":[115,473,495,509,532,615,727,734,782,912,975,1032,1129,1138,1281,1353,1357,1542,1612,1674,1726,1771,1858,1882,1947,2613,2691,3451,3766,3817,3871,3882,3898,4516,4553,4591,4758,4826,4902,5094,5156,5247,5694,5807,5999,6096,6325,6679,6718,6750,6833,6885,6935,7025,7712,7731,7777,7836,7909,7982,8032,8146,8764,8785,9115,9266,9364,9444,9579,9620,9901,10110,10852,11049,11306,11431,11750,12043,12279,12337,12505,12768,13127,13316,13478,13549,13730,13808,13855,13920,13996,14009,14123,14236,14484,14521,14539,14811,15828,16020,17000,17092,17110,17152,17206,17642,17759,18216,18686,18752,18819,18904,18968,19016,19063,19238,19322,19366,19490,19621,20177,20260,20385,20407,20616,20698,20765,20863,20921,21114,21180,21356,21382,21585,21639,21884,21958,22161,22203,22237,22352,23246,23385,23482,23542,24084,24464,24632,24658,24724,24928,25416,26081,26128,26241,26277,26600,26716,26870,27158,27947,28595,28842,28918,29398,29420,29459,29486,29759,29856,30515,30834,30844,30905,31604,31620,31648,31762,31871,32110,32165,32292,32684,32738,32910,32916,33104,33506,33529,33784,33890,34100,34175,34245,34328,34452,34977,35228,35280,35402,35464,35497,35604,35692,35768,35817,35937,36227,36330,36367,36565,36631,37498,37596,37725,37838,38252,38268,38377,38770,38932,38984,39032,39102,39867,40150,40452,40643,41223,41583,41827,41939,42029,42314,42600,43077,43175,43318,43334,43541,43568,43657,43686,43731,43803,44051,44099,44136,44168,44197,44322,44340,44379,44424,44593,44629,44673,44761,44787,44957,44990,45057,45186,45263,45392,45525,45720,45854,45934,45962,46137,46504,46528,46714,46821,47159,47175,47954,47987,48025,48116,48209,48280,48366,48379,48515,48526,48556,48621,48636,48640,48683,48882,48908,48975,49144,49168,49200,49281,49313,49394,49673,49763,49880,49885,49910,50369,50442,50558,50575,50630,50743,50885,51059,51165,51216,51224,51253,51325,51362,51554,51588,51608,51816,51836,52204,52348,52488,52608,52721,52744,52756,53147,53921,54129,54266,54445,54504,54556,54730,54907,54959,55086,55190,55233,55317,55369,55508,55612,55929,55995,56075,56125,56212,56273,56327,56390,56475,56523,56588,56666,56732,56795,56982,57122,57285,57303,57337,57628,57830,57879,57994,58022,58031,58032,58186,58442,58463,58652,58726,58996,59577,59904,60138,60161,60348,60571,60651,60879,60982,61201,61594,61745,61957,61965,61979,62037,62054,62112,62338,62583,62637,62639,62751,63069,63127,63804,63961,64180,64204,64309,64379,64452,64747,64795,64909,65054,65294,65321,65519,65684,65720,65747,65766,65775,65876,65896,65973,66190,66243,66461,66941,67582,67989,68086,68246,68272,68283,68323,68350,68410,68476,68492,68686,68775,68902,69140,69304,69372,69410,69729,69835,69885,70077,70143,70192,70258,70335,70732,70755,70830,70868,70940,71143,71217,71255,71395,71422,71469,71635,71901,71920,71993,72430,72716,72818,73178,73215,73903,73919,74139,74252,74728,75024,75532],"draw":[100,182,4583,4979,5348,5491,5495,5724,5735,5763,6765,6915,7878,7965,8019,8328,8972,9098,9673,9890,10012,10204,10438,12300,12728,13538,13751,17546,17925,19076,20237,20377,20402,20831,20945,21356,21694,21846,22016,22131,22189,22279,22774,23270,23377,23537,24029,24335,25986,26884,27336,27716,28838,28877,30298,30319,30349,30634,31870,33665,35023,35500,35719,35834,36371,36442,36524,36684,38329,38406,39735,40542,41807,41866,42243,42364,42751,43414,43457,43489,43527,44165,44392,44625,44822,45851,46014,47995,48188,48227,48353,48987,49309,49668,49992,50433,50519,51202,51306,51427,52235,52419,54761,57597,58111,58483,60619,60680,60879,60979,61921,62832,64118,65729,65973,72742,72917,74139,74325],"unity_sample_tex2darray":[14034,44009],"dual":[29159,46801,74074],"printclickmessage":[58637,61731],"supportscomputeshaders":[8409,19746],"single_line_small":[63246],"wider":[8031,8183,14351,14965,16470,21391,24786,24943,32916,38908,39579,49609,64468],"sole":[1962,50344,52532],"millisecond":[33408,35727,62992],"speedtreeimporter":[6710,13635,15268],"fewer":[4450,10082,11612,20378,21550,22071,23420,23449,25599,26450,26987,29338,29718,30352,31727,32861,38388,41734,41813,42974,44293,44384,45213,47943,47952,50395,51057,68926,69169,74184],"ultimately":[4299,12988,27065,27520,49497,53009,53201,75424],"dig":[66439],"closestpoweroftwo":[10461],"unityloadapplication":[33472],"waitforseconds":[15707,18284,21367,25712,67512],"expires":[32728,67903],"t'":[13988,65342],"extern":[1055,1287,18547,27893,27970,28269,29930,30027,34665,34687,52660,66896,72152,72203,73532,74594,75267,75778,75921,75995],"trigonometry":[10446,44234],"shifts":[8036,30164,33531,44270,49496],"sendhapticimpulse":[76330],"furthest":[8047,39237],"architecture":[673,915,1273,1295,1326,1731,5882,9466,11844,12247,12885,13369,17118,19067,19302,21936,27671,28083,28158,34595,34675,36608,40151,40740,45721,49282,50168,52672,53249,64321,66449,68468,72143,72716,74624,74768,75280,75387,75984,76300],"90f":[51687],"cylinders":[35254,49525],"repositions":[38542,62199],"distinguish":[7928,20601,22651,27983,29594,30049,63917],"example3dtexture":[14117],"getting":[52,654,666,954,1808,2211,2938,3996,4503,4664,5258,5689,5816,7784,8213,9351,10207,11338,13961,14569,14965,15844,18569,18665,19648,24738,25972,26084,26104,26324,27085,27096,29571,30176,35369,35462,35625,35695,35903,36226,36433,37519,40195,41433,41941,49191,51000,52918,53566,60196,66221,66451,66802,66969,67021,67232,67660,67848,68804,70309,72438,72462,72790,72900,74122,74506,75474,75746],"epsilon":[14172,48147,61155],"pictureslibrary":[12644],"cloud":[221,1039,4541,11244,11274,17092,17240,17262,17265,17279,17293,17326,23195,25572,25740,25904,29309,30432,31070,31408,32701,38070,50941,52087,53303,53797,66767,66915,67153,67598,67696,67947,68073,71897],"greenyellow":[63562],"frametimingstats":[21892],"above":[174,229,362,1069,1518,1582,1628,1956,1999,2048,2207,2308,2343,2375,2427,2810,2940,3253,3418,3538,3740,3892,4522,4713,4823,4955,5049,5103,6083,6117,6504,6718,6758,7293,7383,8003,8318,8510,8622,9100,9333,9817,9972,10010,10081,10120,10543,10703,11311,12094,12504,13323,14127,14336,14543,14756,14869,14969,16043,16564,17030,17956,18245,18379,18439,18501,19030,20163,20272,20724,20787,21024,21249,21302,21550,21599,21673,21863,22266,23361,23466,23663,23817,24083,24213,24310,24509,24553,24799,25081,25408,25515,25631,25837,25875,25897,26096,26110,26446,26606,26682,26790,26928,27022,27131,27331,27507,27642,27711,27927,28043,28436,28891,29382,29785,29907,30052,31687,31758,31916,32322,32612,32911,33153,33407,33433,33474,33592,33614,33782,34653,34745,34930,34954,35262,35344,35990,36061,36282,36457,36594,36674,36697,37422,37689,37712,38388,38641,38719,39255,39365,39508,39819,39870,40180,40726,41775,41982,42650,42710,42958,43114,43168,43183,43452,43505,43610,43751,43985,44063,44105,44397,44696,45145,45192,45215,45281,45435,45698,45867,46272,46803,46871,47171,47369,48074,48350,48885,48957,49069,49159,49358,49470,49473,49499,49512,49525,49608,49626,49824,50168,50402,50495,50522,50537,50691,51400,51875,51958,52319,52574,52933,52984,53218,53377,53813,54277,54593,54789,54957,56188,56506,58070,58286,58799,59565,59890,61388,61645,62036,62283,62980,64151,65525,65736,65865,65999,66184,66668,66812,67195,67879,67921,68710,68828,69073,70593,71358,71550,71724,71873,72266,72297,72521,72840,72903,73203,73209,73246,73397,73487,73579,73650,73952,74427,75426,75512,75794,75880,75969,76068,76296],"reproduce":[14321,22740,25850,70228,74579],"hdri":[22801,37918],"became":[9113],"clientcallback":[10867],"ipanel":[58004,58144],"slidetoggle":[61761],"settingstemplate":[12008,23484],"#8a8a8a":[63255],"preloading":[13824,43023,50965],"arpdau":[22336],"editortoolbarbutton":[30521,55485],"prerequisites":[1490,19120,27638,28978,40667,51596,52883,53098,54299,54510,54913,54965,55065,55164,55237,55311,55371,56127,56214,56275,56329,56396,56525,56594,56738,56801,56984,57127,57339,58587,58654,58735,59000,59273,59912,60676,60883,60984,61199,61751,62343,62499,62645,65781,69866,70061,70128,71245,73425,73598,74983,75030,75228],"samplelevel":[45502],"analyzer’s":[38751],"\\development\\unity":[25461],"vouchers":[4040,4107,4376,4492],"androidnativeplugin":[1276],"cake":[13880],"cginclude":[42604],"rg16_snorm":[8463],"rotationconstraint":[13287,15353],"highlighting":[725,12359,19281,33652,34293,34503,35089],"runtimeinitializeloadtype":[20140],"unityxrrenderparams":[75454],"valid":[1169,1975,2052,4104,4485,5196,5354,5769,8368,10012,10398,10813,11078,11819,12354,12692,12971,13483,13709,14738,18084,18553,19963,20271,21676,22180,23588,24605,24623,25585,25623,27786,28135,28774,28880,30437,31385,33421,34165,34285,34375,34497,36272,36420,38445,39242,40018,40819,40854,41784,42388,43663,43760,43809,44106,44143,44174,44346,44635,44810,44903,45024,45417,45492,45531,45864,45994,47960,47993,48031,48583,48621,49710,49886,50023,50317,50960,51014,51090,51554,51788,52153,52494,52785,52966,53100,54279,59682,59787,60157,60471,61468,61497,63995,64758,66782,66897,66939,67776,68130,69861,70358,70717,70817,71255,74548,75444,75576,75819,76092,76130],"audiovisual":[22024],"private":[747,881,1178,1454,2135,2544,2675,3745,5366,5510,5746,5786,6085,6884,17384,18008,18587,19390,19516,20014,20518,23917,24140,24184,24417,24809,25438,25702,26346,26426,26633,26732,27379,28192,28269,29651,29787,29989,30027,33111,34106,34677,34690,36757,36836,36988,38764,39169,39894,40600,48389,48720,48966,49958,51495,51657,52660,52829,52877,53128,53369,53782,55261,55685,55738,55821,56412,56490,56552,56907,56998,57217,57425,57653,58074,58244,58628,59130,60180,60237,60458,60532,60594,60872,61115,61645,62167,62359,62515,62820,67283,67300,67408,67575,69729,69859,69987,70098,70174,70315,70491,72160,72203,72242,73101,73532,74594,74857,75585,76061,76228],"mycolors":[44909],"debugger":[566,1722,6368,6429,21074,21683,21693,21836,21956,23378,23539,25893,28170,28373,29439,33513,33638,34988,36164,36366,38234,38272,44591,49380,49391,50061,52554,54149,54706,60646,62743,63104,65916,72047,72103,72848,74291,74516,74629,74810,74917],"24px":[62255],"‘static’":[26789],"smaller":[155,500,912,1336,1717,1967,1981,2275,2839,3247,3292,4298,6045,6432,6758,6807,7482,7579,7956,8040,8260,8355,9793,10000,10130,10375,11638,11867,12115,13826,14318,14728,18105,19196,20691,21587,22093,22296,23461,23703,24776,24979,26079,26359,26932,27931,29173,29363,29719,29880,30141,30243,30369,30877,31708,32632,32754,33528,35888,36513,37679,39415,39577,39864,40131,40174,40589,41475,41775,41795,42704,42725,42747,42768,42817,43131,43814,44237,45585,46783,48162,48354,48594,48792,49473,49623,49648,49706,50128,50669,50683,50901,51138,52039,52178,52230,52736,55134,57798,57849,58285,58426,58446,61321,61545,66009,71872,73025,73173,73320,73393,74905],"latlong":[8618],"getbytes":[68450],"shuriken_toggle_bg":[63481],"head's":[2293],"pausesubgraphanimationsample":[34047],"localscale":[40467,55263,56414],"unsynchronized":[29109],"getcurrentthreadidunmanagedstdcall":[18558],"premultiplied":[37983,43778,46766],"profiler's":[25981,36464],"performed":[1931,2354,4902,5984,6142,7764,8637,13115,14557,14959,18236,21325,21755,21897,22526,26248,26572,27175,27538,27572,33180,34631,35344,35629,36696,37667,45568,51545,52089,53753,54273,62202,67049,67762,68130,68385,68441,74918],"phonecallhistorypublic":[12670],"specify":[12,14,104,488,532,610,667,673,733,1003,1032,1130,1252,1353,1415,1510,1611,1771,1859,1918,1953,1970,2995,3245,3681,3776,4173,4263,4386,4665,5238,5354,5617,6958,7264,7366,7841,7893,8009,8032,8245,8352,8566,9002,9112,9167,9297,9364,9473,9589,9727,9773,9873,10013,10109,10375,10394,10651,10719,11047,11275,11382,11405,11484,11563,11637,11704,12068,12334,12442,12768,12862,13100,13142,13163,13392,13485,13555,13673,13811,14029,14252,14717,14983,18077,18134,18164,18573,19018,19086,19693,20246,21029,21221,21327,21575,22087,22117,22719,23270,23468,23586,23733,24664,24781,24898,24907,25912,26448,26507,26576,26868,26988,27550,27682,27786,28108,28391,29488,30525,31861,31917,32189,32220,32249,32458,32610,32635,32690,32741,32754,32925,34214,34254,34335,34461,34537,34671,34998,35187,35415,35481,35583,36588,36846,37581,38966,39036,39115,39352,39424,39523,39553,39661,39724,39817,39880,40202,40594,41218,41870,42402,43376,43489,43533,43689,44063,44677,44770,45296,45428,45447,45943,48678,49134,49176,49407,49490,49785,49850,50291,50369,50447,50538,50592,50698,50965,51088,51427,52627,52785,52965,53097,53295,53826,54243,54716,54779,55732,56671,58090,58319,58448,60227,61356,61529,62020,62100,62211,62858,63658,63697,63704,63741,63866,63994,64182,64204,64313,64756,65177,65867,66354,66637,66894,67034,67196,67248,68378,69012,69264,69333,69393,69439,69518,69679,69733,69848,70021,70070,70137,70477,70586,70769,70829,70875,71481,71526,71565,71684,72149,72201,73066,73195,73384,74532,74779,74799,74810,75429,75522,76092,76158],"vulgar":[4129],"varies":[3348,6264,13249,23483,24916,25845,29340,29587,30184,30368,32855,38324,38510,41811,44638,45066,45721,49450,49526,49739,51954,67607,70176,71416,71873,73261,73602,73642,75159,75192],"comes":[729,2004,2068,3718,4826,7198,7981,8203,9828,10579,11518,12627,12698,12865,16005,16984,17642,18501,18535,20208,24784,26510,27114,27813,29540,31869,32078,34954,36105,36509,37683,37740,39659,40589,40616,41824,42802,43114,44094,44691,46396,49562,49611,50604,54266,54560,54699,61749,66775,67707,70094,70485,71155,71657,73088,74011,75259,76301],"puddles":[34875],"fetchdescription":[2573,2646],"playmovievp":[72560],"subsections":[29186,36054,75004],"420x280":[4299],"unitypackage":[1276,3870,3879,3898,4217,4481,22555,35234,69694,70258,71193],"#4b0082":[63567],"matchtarget":[50322],"com'":[28617,66615,70493],"dope":[2324],"fragoutput":[45707],"gles2":[9970,11803,37797],"playerenergy":[24330],"nimt":[52627],"field's":[39637,54564,57901],"freetracked":[26210,26251,35139],"bouncy":[8568,11510,15844],"getwindow":[20880,49969,52343,55388,55683,55763,55836,55940,56006,56237,56295,56363,56459,56496,56822,57007,58242,59037,60011,60147,60447,60583,60735,60862,61215,61698,62143,62374,62520,62698,65829],"reinstall":[52518,71484],"chromebook":[647,35870],"panorama":[8618],"depictions":[24487],"cup":[20927],"biggest":[3432,3463,11863,35691,35887,62783,65990],"unityxrrenderpass":[75453],"editorwindow":[2476,20865,30537,49911,52247,55384,55680,55759,55833,55916,56003,56233,56291,56358,56456,56489,56546,56819,56996,57514,58239,59022,59585,59925,60144,60162,60444,60580,60732,60859,61212,61662,62140,62358,62514,62693,62751,65704,65735,65826],"dilate":[26999],"softening":[9879],"bird's":[69,22850],"batchrenderergroup":[5340,5350,5496,5689,5723,5731,5764,5806,20264,41924,69336,69442,74252],"namedpass":[47165],"clear":[466,1483,3894,3995,4341,4665,5273,6352,6403,6833,6909,8019,9008,9523,11574,11766,12821,13142,14848,15967,18091,18125,19039,20110,20339,21736,22058,22128,24572,25678,26460,26909,29267,30245,33162,33408,33661,34957,35056,35220,35687,36494,36840,36993,37496,41679,43297,43816,48535,49039,49290,49509,49570,49610,51237,51882,52633,53199,53693,56317,56378,57459,58190,58311,59144,59471,59994,60213,61205,61480,61601,62072,63441,68673,68711,70561,71208,71276,71523,71562,71782,73432,74151,75520,76244],"amazonappstore":[66988],"systracecreateeventcallback":[28030],"mycustomcollider":[41504],"issues":[206,211,633,665,690,698,889,1285,1570,1896,2208,2748,3229,4133,4437,5260,5922,7015,8437,9142,10575,11821,12182,12369,12557,13264,13374,17268,17524,18112,18481,19048,19164,19222,20206,21075,21956,22128,22183,23202,23403,23560,24475,24645,25733,26701,27597,27675,28249,28439,28639,28686,28724,28773,28966,29420,29439,29470,29478,30008,30320,30904,31605,31635,33069,33088,33446,33470,33506,34171,34222,34308,34394,34513,34664,34693,35002,35264,35366,35404,35697,35838,36199,36296,36371,36512,36680,37698,38678,40561,40655,43021,43376,44870,48227,48353,48530,50058,50186,51080,52497,52710,53706,54016,64323,66431,66759,66916,66967,67146,67871,67956,68040,68637,68926,69169,69882,70353,70630,70913,71288,71412,72439,73306,73324,73394,73580,73627,74384,74535,75140,75445,75904],"managedcodestripping":[40557],"div":[73955],"untethered":[6873],"uniforms":[41808],"density":[7724,7747,8004,9098,10658,12922,13706,13911,22042,23213,24777,26886,39402,42769,47148,47584,50380,50461,50591,50975,61542,74256],"exit":[1653,3935,3972,6133,7956,11607,12748,14726,17980,20154,20612,21031,21334,22032,29784,30906,32759,33681,35330,36492,37625,38876,38908,39339,43294,49660,51413,52672,54217,66065,66457,70047,71634,73283],"bitbucket":[18681,66261,68661,70473,70650],"subscriptioninfo":[67724],"hpcontainer":[57091],"dimmed":[54556,54591,54643,74760],"deallocated":[26112,27866,35142],"cuboid":[7947],"everybody":[165],"setupa2b":[62527],"visualeffectasset":[14931,15363],"previouspath":[19526],"click":[177,560,604,626,851,950,1129,1139,1281,1649,1881,1915,1960,2254,2271,2289,2364,2394,2431,2506,2772,3233,3253,3518,3887,3902,3908,3950,3979,4070,4158,4169,4189,4198,4212,4237,4258,4396,4409,4424,4444,4454,4466,4489,4498,4829,5098,5272,6229,6266,6346,6962,7001,7181,7358,7826,7859,7934,7984,8281,8987,9050,9135,9286,9582,9777,9848,9913,9989,10058,10223,10332,10421,10509,11383,11402,11442,11462,11669,11807,12097,12371,12559,12746,12754,12782,12872,13105,13275,13292,13346,13401,13747,13846,13880,13901,14023,14083,14680,14723,14787,18061,18140,18190,18353,18366,18469,18503,18896,18978,19061,19224,19427,19621,19944,19986,20083,20547,20591,20635,20667,21400,21688,21710,21852,21892,21990,22000,22050,22081,22222,22351,23617,23693,23807,23900,24164,24309,24519,24532,24895,24955,25048,25105,25220,25242,25363,25400,25448,25549,25633,25894,25909,26832,26980,27121,27666,27820,27920,27943,28099,28194,28329,28352,28404,28677,29026,30050,30232,30279,30388,30451,30482,30700,30859,30918,30988,31370,31389,31671,31734,31750,31768,31780,31805,31826,31843,32081,32096,32120,32141,32207,32243,32331,32349,32375,32597,32620,32640,32668,32715,32750,32858,32894,33649,33847,34274,34396,34484,34539,34753,34786,34936,34948,35044,35198,35266,35369,35625,35776,35808,35903,35937,35969,36023,36120,36174,36207,36298,36365,36435,36488,36627,36685,36695,37587,37667,37732,38277,38324,38377,38714,38877,38961,39005,39054,39089,39132,39187,39229,39253,39317,39351,39385,39490,39827,40244,40506,41393,41420,41543,41597,41691,41700,41711,41758,43040,43255,43518,47179,48072,48225,48324,48340,48507,48521,48587,48610,48624,48650,48681,48938,48990,49339,49417,49490,49730,50346,50372,50413,50427,50510,50519,50527,50536,50549,50557,50567,50582,50629,51055,51123,51184,51208,51301,51376,51427,51825,52087,52107,52177,52227,52461,52599,52762,53063,53341,54310,54399,54537,54545,54582,54635,54677,54692,54712,55642,55804,56010,56047,56530,56636,56791,56810,57124,57414,57682,57836,57864,57977,58336,58404,58586,58662,59021,59271,59560,59992,60223,60497,60598,61203,61490,61599,61898,61908,61932,62066,62211,62338,62506,62654,63112,63701,64448,64636,64752,65220,65244,65375,65400,65438,65789,66014,66342,66349,66377,67053,67084,67526,67666,67867,67909,68536,68551,69032,69285,69384,69488,69778,69961,70104,70272,70312,70344,70374,70748,70922,70970,71128,71180,71208,71238,71255,71267,71295,71315,71327,71360,71382,71410,71429,71472,71483,71507,71520,71621,71678,71749,71869,71899,71943,72176,72366,72412,72836,72871,73030,73156,73285,73386,73482,74418,74591,74762,74902,74937,74988,75039,75147,75197,75346,75661,76107],"vscode":[3114,16400,31482,35087],"appattributes":[53926],"ison":[62765],"fwdspeed":[72338],"pattern":[5904,6094,8692,10080,12811,13211,21322,25550,25696,26259,28585,33377,34572,35544,36736,37227,41289,41294,45771,47580,48109,48168,48372,50019,50378,50726,61795,71370,74306,75611],"m_userinformation":[76341],"csharplabel":[62704],"room":[253,2259,7716,7736,10003,13962,27303,39509,39797,49437,51027,52384,58407],"croatian":[53616],"bringwindowtofront":[59609],"webglbuildsubtarget":[74084],"files\\unity\\accelerator":[66700],"devicestate_seteyesvalue":[75566],"propagated":[55987],"cameraclearflags":[49140],"applydamage":[21178],"ispriteoutlinedataprovider":[48479],"register":[1058,2462,2541,2611,2695,5346,5763,8188,10840,12622,13662,18745,19541,25423,25751,26150,26258,28022,28209,29934,30069,30519,33879,33906,41813,48432,52878,53161,54087,55348,55705,55728,55844,55918,56042,56428,56681,56881,57417,57556,57638,57863,59438,59596,60209,60455,60520,60607,60868,60942,61048,62115,62831,64544,64697,65335,66078,66235,66853,67024,67238,67555,67861,67924,69620,70868,73630,75265,75673,75880,75919,75983,75999],"assetsmodifiedprocessor":[19563],"baumgarte":[11541],"partz":[32996],"allow":[565,677,987,1210,1589,1780,1912,2082,2264,2388,2614,2721,3024,3340,3576,3723,3952,4108,4357,4372,4614,4831,5000,5028,5123,5258,5720,6371,6428,6718,6737,6809,6980,7365,7489,7663,8060,8359,8510,8635,8786,9075,9330,9466,9553,9718,9774,9986,10475,11011,11039,11315,11452,11527,11614,11661,11724,12216,12328,12474,12762,12797,12885,12975,13056,13283,13300,13478,13585,13667,13706,13881,14123,14717,15847,16527,17384,17970,17974,18178,18357,18509,18540,18985,19017,19241,20076,20327,20454,20787,21054,21173,21319,21401,21456,22046,22142,22375,23558,24299,24946,25171,25204,26041,26434,26566,26589,26711,26998,27637,27678,28394,29249,29733,29769,30000,30916,31637,31790,32284,32357,32510,32917,33774,34258,34339,34465,34594,34882,34927,35011,35191,35612,35834,37376,37532,37685,37695,37899,38477,38557,38587,39308,39347,39517,39615,39724,39757,40016,40039,40094,40145,40256,40555,41160,41346,41462,41678,41775,42109,42467,42666,42688,42974,43021,43128,43203,44293,44914,45213,45417,48181,48242,48267,48683,49436,49473,49515,49646,49656,49659,49837,50491,50629,50937,51025,51103,51310,51427,51950,52222,52645,53030,54727,55014,55894,58177,58997,60518,60915,61015,61186,61354,62784,65268,66197,66337,66571,66944,67643,67893,68458,69747,69901,70912,70940,71078,71743,72289,72401,72475,72762,73091,73093,73285,73299,73405,73449,73471,73675,73901,74171,74257,74632,74787,75076,75109,75264,75681],"practice":[149,532,617,930,1069,1272,1378,1444,1502,1557,1592,1701,1836,2776,4867,5719,5736,5819,5910,6047,6082,6147,7396,7429,8214,10055,12013,12520,18319,18611,18717,18822,20052,20260,21100,23421,23454,24632,25194,25678,26041,26081,26302,26387,27490,28457,29467,29835,33083,35963,37622,39962,43618,45576,48594,50065,50412,52532,52735,55923,56674,67754,67992,68546,68994,69241,70818,71760,73020,73173],"sv_position":[1682,6528,8735,10174,14054,14177,23343,31949,32964,43350,44039,44405,44853,45681,47215,47921,49009,73013],"transparentcutoutfamily":[42893],"raycaster":[8133,21197,37628,39528,39688,39698,40001],"video's":[52058],"shapes":[284,2183,2327,6214,6288,7981,8159,8368,8373,8765,9962,10491,11812,13059,13451,13794,14498,17000,17546,18239,18611,21456,21711,22018,22189,24655,26931,28838,29392,31706,32372,32610,33743,35269,37499,37554,37788,38375,38482,38886,40542,48374,48615,49537,50629,50936,51832,52235,57830,58463,64229,74139],"variant":[567,2839,3418,3502,3517,4578,6376,6436,6480,7447,7464,9127,9489,10412,11935,12164,12364,13704,19230,22482,23275,23584,28174,28827,28945,28982,29012,29021,30334,34303,34416,34518,34908,34944,38399,39927,40704,41835,41899,41927,41955,42038,42044,42133,42183,42347,42933,42945,43013,43017,44535,44599,46781,48358,48529,48576,49309,58402,64369,68534,68987,69234,72274,74172,74261,74637,74796],"exampleeditorscript":[14091],"m_fogdensity":[76355],"logic'":[25346],"localkeywordspace":[42054],"triggerbutton":[76113],"cspace":[62015],"appxpackage":[72188],"finalvalue":[43741],"cubemapface":[8699],"elapsed":[5288,32849,51954,62417,66684],"dry":[4845,7437,7454,7558,7715,7735,22599,50381,50472],"belts":[2348,21151],"wants":[4853,15982,24758,25679,54056,61497,66395,67334],"alembic":[16327,22997,31024,31401,37958,40509,70292,74210],"ip":[560,634,855,10988,11008,12222,18134,28420,35043,35797,36488,53009,66357,66571,73667,73901,74824],"dynamicatlassettings":[60652],"dontlisten":[11204],"gain":[572,4819,4964,7520,7685,7696,20419,34872,37671,38098,45592,46671,53880,58215],"isintransition":[24874],"multi_compile_instancing":[23255,31890,44588],"skipped":[24732,41962,52610,68954,69200],"constantforce":[8596,15091,38490],"mappings":[9079,9451,13135,52756,68497,75686,76099],"onsetlocalvisibility":[10848],"blueish":[49535],"devicestate_setrotationvalue":[75560],"androidjavaobject":[1406],"purchasefailurereason":[67276,67332,67446],"webgl":[3053,3303,4794,6371,6428,9262,11695,12313,14015,14360,14821,16209,20233,21060,21861,21953,22945,23383,25315,27148,27531,27803,28379,31084,31484,33384,33402,33806,34594,34682,35833,36167,37781,40552,43943,44057,45436,49744,50220,60635,68465,68949,69194,71176,72474,73023,73027,73092,73116,73146,73155,73204,73239,73259,73289,73311,73359,73382,73415,73425,73430,73468,73499,73591,73599,73638,73664,73688,73707,73894,73906,74041,74120,74346,74632,75311],"#container1":[63850],"new":[14,64,122,220,453,478,541,560,614,784,899,1071,1107,1116,1156,1185,1333,1362,1425,1531,1601,1850,1881,1894,1915,1956,2037,2052,2199,2244,2254,2281,2332,2361,2429,2463,2518,2635,2774,2912,2952,2958,3239,3446,3519,3571,3580,3766,3812,3846,3892,3915,3979,4054,4157,4171,4185,4196,4209,4245,4361,4404,4425,4448,4466,4489,4513,4619,4847,4892,5081,5260,5353,5551,5721,5748,5790,5818,5863,5984,6055,6145,6229,6334,6688,6819,6922,6985,7004,7316,7369,7427,7811,7933,7984,8373,8438,8660,8790,9051,9076,9386,9518,9591,9795,9847,9914,9989,10055,10215,10332,10543,10602,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11378,11424,11467,11554,11737,12206,12349,12620,12745,12768,12874,13001,13079,13193,13323,13352,13634,13715,13740,13754,13793,13816,13846,13903,13968,13978,14099,14529,14544,14577,14828,15750,16406,16933,17092,17169,17978,18017,18109,18196,18291,18323,18362,18435,18455,18572,18716,18896,18906,18980,19021,19059,19239,19322,19456,19665,20026,20097,20200,20237,20435,20450,20556,20740,20792,20956,21121,21207,21405,21618,22097,22107,22199,22357,23367,23525,23744,23787,23889,24074,24186,24293,24465,24530,24624,24724,24780,24794,24970,25097,25104,25153,25244,25329,25368,25492,25512,25712,25743,25778,25965,26026,26206,26338,26383,26455,26525,26613,26658,26709,26735,26829,26927,27210,27341,27685,27836,28059,28072,28190,28781,28851,28872,28967,29035,29213,29420,29771,29825,29835,30234,30293,30386,30443,30530,30876,31007,31627,31657,31670,31733,31749,31767,31779,31804,31825,31842,31869,32080,32095,32119,32144,32206,32242,32330,32348,32374,32596,32619,32639,32667,32714,32749,32879,32893,33098,33504,33659,34153,34173,34182,34199,34279,34408,34523,34660,34891,34914,34923,34949,35037,35187,35323,35408,35476,35535,35716,35776,35949,35999,36045,36271,36329,36419,36454,36495,36651,36693,36736,36837,36989,37351,37486,38245,38280,38332,38454,38508,38557,38587,38612,38683,38938,38946,38983,39030,39077,39096,39174,39366,39399,39472,39526,39545,39625,39926,40021,40084,40099,40111,40233,40453,40565,40624,40841,41337,41359,41544,41694,41697,41708,41757,41861,41935,42060,42706,43261,43517,43591,44312,44371,45259,47182,48067,48262,48328,48339,48390,48514,48564,48586,48607,48620,48652,48674,48865,48891,48917,48989,49147,49178,49298,49356,49413,49655,49748,49802,49881,49905,50180,50302,50338,50347,50425,50448,50524,50532,50547,50555,50565,50577,50599,50645,50647,50965,51121,51142,51180,51345,51440,51579,51601,51635,51787,51812,52092,52102,52173,52222,52279,52528,52597,52749,52792,52837,52913,52921,52961,53100,53260,53692,53797,54053,54106,54210,54266,54293,54455,54496,54513,54639,54673,54715,54758,54897,54911,55001,55084,55184,55263,55331,55389,55672,55714,55824,55860,55941,55979,56047,56105,56166,56238,56296,56364,56414,56497,56556,56613,56692,56754,56823,57012,57280,57331,57462,57567,57652,57874,58007,58036,58232,58403,58471,58736,59001,59269,59569,59726,59793,59822,59958,60136,60243,60436,60495,60584,60707,60839,60901,61001,61216,61359,61505,61578,61669,61769,61932,62013,62059,62144,62215,62375,62521,62597,62662,62739,62976,63069,63864,64366,64393,64402,64417,64437,64444,64474,64496,64515,64537,64576,64600,64615,64657,64678,64701,64722,64735,64780,64801,64813,64827,64846,64864,64883,64918,64942,64959,64977,64990,65011,65034,65063,65088,65106,65121,65138,65150,65168,65224,65248,65274,65298,65317,65375,65399,65419,65438,65450,65464,65482,65496,65507,65516,65542,65557,65572,65592,65612,65633,65653,65672,65758,65841,65898,65968,65979,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66682,66991,67026,67153,67192,67304,67364,67556,67577,67669,67781,67865,67909,67981,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68509,68534,68547,68599,68823,68880,69055,69330,69360,69436,69657,69719,69782,69829,70255,70329,70356,70709,70757,70922,70959,71017,71165,71195,71284,71296,71484,71509,71548,71631,71698,71859,71910,72092,72151,72178,72279,72298,72366,72410,72469,72503,72613,72704,72719,72739,72841,72974,73030,73214,73546,73626,73695,73920,74083,74128,74220,74406,74453,74671,74802,74827,74903,74939,75036,75481,75744,75958,76062,76126],"pbxproject":[49793],"instantiate":[1431,1920,3307,3362,3551,5008,9416,11315,13307,13628,21202,21308,24726,25233,25496,25792,25955,27691,29612,30667,33099,33614,34928,35565,39205,39924,40687,41868,48226,48927,50301,51612,54446,54574,55012,56829,57318,57506,57621,57628,58044,58792,59447,60135,60213,61354,61651,62381,62524,62714,63138,64889,65191,65288,65695,65835,65885,66241,74169],"__high":[14826],"magic":[5872,17847,31038,31434,31721,31760,32316,32712,42792,50233,50941,68761,74345,75301],"mapping":[258,309,935,1407,1936,2002,6623,7804,7823,9759,9801,9885,12515,14233,17850,18058,21422,21572,22090,22502,24505,25763,27060,27131,27511,29893,30372,32393,35252,37416,37684,37824,38425,38435,42060,42365,42447,42738,43146,43263,43683,43881,43970,46174,46667,46825,47941,48617,49449,49495,49514,49600,50435,50809,52767,66135,67036,68499,68611,72510,73472,74210,75697,75740,76204],"kick":[3253],"startstopasseteditingexample":[3702],"webrequest":[2689,49770,68436],"audiohighpassfilter":[7604,15149],"typesany":[53773],"vip":[67170],"de74":[53891],"mediumaquamarine":[63594],"kunityxrinputfeaturetypecustom":[75490],"controller’s":[21332],"enormous":[32112,32651],"prefab’s":[13622,34944],"m_buttonprefix":[61703],"variants":[2239,2839,3479,3501,3517,4569,4959,5718,6123,7141,8491,9488,12225,12358,13363,16470,17092,18441,20323,20650,22482,23255,23559,28062,28861,28946,29004,29008,29017,30045,31274,34212,34292,34905,34927,34937,37969,41792,41844,41882,41943,42044,42110,42181,42325,42934,42946,43001,43015,43105,44508,45012,45200,45426,45459,47804,49355,64369,68539,73450,74170],"glcore":[21087,30306,34209,44371,45441,45811],"endless":[248],"somehow":[33250,46717],"components’":[36349],"unorm":[8454],"\\appdata\\locallow\\companyname\\productname\\player":[27804],"maxdist":[36016,46954],"cooks":[10584],"buttonsnippet":[64461],"highestpatch":[70909],"mixer":[4520,4728,4789,4810,4911,5018,5078,5154,5163,5194,6703,7434,7483,7572,7676,7712,7771,22553,33958,34864,35998,38095],"hooked":[1989],"m_finalgatherinterpolationpoints":[76390],"codecoverage":[17635,31331,31415],"social":[4147,4177,4286,4356,17342,25731,30055,53740],"onmove":[49901],"#8595":[41327,41613],"dependant":[3475],"_emission":[28930,29521,44486,45365],"scenetemplate":[38979,38992,39207],"anticipate":[21345],"emitevent":[27950],"inaccuracy":[14171,21935],"dirlightmap_separate":[46694],"patterns":[167,5006,5904,10938,12811,15020,22948,28476,29317,32230,34573,43177,45239,48087,50551,62020,70984],"ol_plus_act":[63468],"lying":[11518],"audiohighpasssimpleeffect":[7613],"createcallback":[4904],"nonreorderable":[59679],"purchase_date_pst":[67476],"mixanimationsample":[33951],"unsignedlongfieldsnippet":[65560],"signifies":[71685],"example2":[30128],"collaboration":[5829,12664,17169,17759,30416,31075,54187,68546],"‘en":[12630],"4x":[12881,45284],"centos":[50206],"glob":[12803,19519,41307,70984],"texure":[43901],"nand":[43823],"inaccuracies":[37678],"blendmode":[2145,49579],"uielementssampleseditor":[64408,64423,64463,64483,64506,64558,64581,64605,64626,64689,64740,64818,64836,64853,64871,64905,64925,64950,64967,65018,65075,65097,65112,65127,65159,65238,65262,65281,65351,65380,65530,65547,65562,65579,65599,65619,65640,65660],"collapsed":[28352,30048,30540,34760,35695,36086,36732,52252,64640],"approxview":[45586,46800],"uniform":[7909,8737,10385,14709,15836,20237,20728,21002,23271,23711,32189,32260,32387,32614,32634,39438,41807,42129,44534,45134,46459,49610,66393,71873,73448],"depended":[70295],"isdirectdependency":[69596],"k_opentransitionname":[24816],"royale":[6842],"#8b008b":[63536],"_solidcolor":[45337],"primitivetype":[30671,40464],"ontransitionbegin":[29141],"untrusted":[66777],"avg":[25983,40858,41241],"c0x":[5381,5525,20352],"base64":[70015],"sites":[18681],"disposes":[26252],"predefined":[3770,4722,6942,7366,8431,8563,11982,21049,27855,29894,30520,32872,33265,34605,34938,37689,38771,40174,40440,42167,42385,43046,43907,44366,44787,45085,45962,58448,65386,65413,65432,65444,65476,65490,65501,67214,76069],"dropdownexample":[30596],"interceptor":[67496],"gradually":[4773,7508,7579,7752,10379,18260,20438,20712,26572,31838,37724,42255,46928,49526,51967,57798,62586,71879],"code_filename":[73947,74105],"clicking":[1886,1952,2223,2259,2271,2293,2331,2394,2971,3885,5034,6265,6290,7815,7939,8987,9051,9582,9628,10698,13400,13815,18993,20460,20540,20595,20754,23718,23930,24539,30049,30440,31765,32849,34779,35068,36058,36694,37723,39254,39492,39526,39635,39813,43238,48607,48665,49558,49890,54209,54712,58133,58191,60570,62389,63119,64528,65231,65255,66352,67180,67947,68532,68563,69975,72189,72470,73486,74238,74899,75017],"jumping":[1944,1950,1966,13818,22470,25771,48335,49642,71634],"promotes":[18908,74173],"unselectedcontent":[57179],"couldn’t":[2751,68682],"ceiling":[24912],"editortoolbarelement":[30517],"technically":[33494,38425,40226,71109],"metrics":[4650,5176,17027,22355,31042,31461,35403,36252,36400,36549,40054,51074,53490,58278,58403,59696,63231,64229,64896,65187,66645,74160],"effect":[73,209,254,548,1920,2007,2277,2411,3812,4741,4797,4810,4879,5027,5122,5160,5186,5872,6102,6122,6322,6383,6445,6464,6689,6758,6936,6965,7288,7366,7433,7451,7513,7522,7538,7566,7573,7578,7587,7605,7627,7645,7647,7661,7684,7692,7702,7711,7731,7752,7765,7778,7930,8040,8319,9088,9154,9196,9503,9672,9851,9878,10009,10097,10398,10937,11438,11464,11493,11519,11766,12294,12356,12685,12757,12830,12865,13148,13278,13295,13733,13768,13802,13916,14268,14516,14574,14728,14781,14922,14927,14933,14938,15015,15020,15850,17748,17969,18167,18267,18423,19027,19306,21111,21164,21230,22011,22581,23420,23543,24511,24763,25570,26790,26796,26859,26932,26946,27321,28181,28602,28874,28989,29044,29327,30154,30351,30996,31103,31634,31661,31716,31760,31802,31856,31997,32114,32173,32216,32255,32360,32401,32631,32702,32723,32776,32848,32923,33078,33093,33537,34212,34491,34613,34783,34854,34896,34955,35137,35189,35252,35692,36108,36541,36638,37405,37480,37588,37642,37690,37740,38154,38297,38346,38405,38498,38939,39260,39450,39681,39708,39912,39969,40010,40066,40145,40430,41157,41603,41815,42105,42255,42467,42783,42896,43131,43177,43386,43800,44079,44344,44377,44428,44558,44627,44797,44835,45588,45618,45970,46224,48197,48235,48290,48568,49038,49155,49423,49452,49470,49479,49496,49558,49569,49605,49609,49628,49712,49837,50369,50442,50521,50610,50629,50677,50730,50941,51045,51169,51831,52010,52121,52201,57585,58414,61759,62024,62846,63107,63897,64174,64444,67424,67708,68601,69842,69862,70839,71068,71808,71860,72335,72461,72741,72818,73045,73487,74644,74761,75189],"fb8cfb407bba82d4daded6031688ba9b":[25124],"classlistcontains":[57246],"samsung":[396,31215,67661],"enforces":[33608,71438],"deterministic":[3452,6063,11631,19242,19467,25099,26459,31635,34428,34526,51957,68624,68915,69156,70211,70876],"edgecollider2d":[9053,15087],"unhandledexception":[26041],"clearing":[467,4665,8081,18125,26909,37176,48591,49033,56018],"element’s":[30719,54818,56100,61420],"playonawake":[7673,14899,72565,73058],"spawns":[6145,10842,11068,31790,32078,32413,66239],"scaling":[2273,2296,2396,4902,10592,11716,12050,12472,12883,13209,13915,14708,14846,19981,20438,21454,23235,23672,24779,29749,31718,32168,32250,32614,32634,34785,37624,39402,50378,50461,51802,52010,54717,58356,62198,62747,64756],"swift":[6705,34562],"'com":[482],"happened":[3734,26028,27762,29600,30101,35640,35714,35886,36040,52566,66208],"navigating":[2460,13323,19053,20557,30228,36056,41349,58160,66012,66957,70345,75215],"cameraevent":[23626],"flagged":[51076,53371],"certification":[12442,67864,74725,75617],"first":[177,239,250,316,410,442,493,512,581,1031,1170,1312,1378,1468,1594,2060,2069,2194,2272,2395,2647,2771,2958,3365,3574,3668,3735,3818,4087,4157,4280,4567,4573,4705,4752,4871,5231,5318,5732,5774,5920,6032,6141,6263,6283,6388,6458,6513,6774,6792,6839,7073,7390,7439,7456,7495,7566,7573,7723,7744,7807,8065,8192,8992,9351,9517,9654,9761,9772,10258,11016,11312,12097,12279,12585,12810,12902,13034,13115,13130,13486,13597,13760,13794,13815,13899,14338,14545,14728,14787,14849,14967,15851,18076,18129,18187,18313,18376,18455,18605,18982,19943,20116,20269,20395,20427,20660,20991,21154,21205,21304,21592,21659,21725,21908,22085,22180,22228,22361,23246,23525,23545,23616,23788,24004,24152,24333,24640,24726,24750,24845,24906,24950,25077,25128,25144,25225,25521,25738,25912,25926,26096,26121,26375,26446,26666,27011,27015,27172,27294,28020,28352,28493,28763,28894,29185,29439,29863,30218,30540,31668,31992,32091,32767,32866,32923,33065,33099,33439,33477,33659,33753,34164,34631,35126,35236,35344,35393,35647,35705,35781,36337,36472,36712,36784,36826,36979,37236,37667,37713,38558,38588,38718,39027,39277,39483,39516,39544,39618,39645,39676,39819,40024,40114,40208,40837,41195,41338,41390,41432,41694,41697,41858,42101,42183,42424,42944,43172,43553,43618,43690,44387,44428,44600,44705,45096,45305,45531,45659,45685,45858,47111,47163,47179,47939,48375,48528,48607,48654,48703,48924,49524,49567,49639,50148,50317,50520,50606,50697,51028,51085,51129,51166,51301,51361,51427,51547,51794,51967,52171,52224,52259,52566,52745,52860,53070,53188,53424,53686,53717,53882,54236,54349,54492,54564,54762,55114,55547,55604,55805,55923,55990,56444,56730,57030,57320,57598,57634,57843,58099,58137,58454,58484,59151,59991,60136,61086,61321,61361,61475,61489,61592,62022,62534,62685,62804,62839,63069,63138,63882,63922,64140,64322,64535,64595,64703,65132,65736,65787,65865,66018,66336,66375,66464,66604,66838,67055,67090,67237,67531,67558,67568,67625,67979,68069,68382,68434,68567,69333,69439,69570,70288,70405,70814,70910,71108,71350,71548,71645,71809,71970,72032,72089,72225,72267,72297,72466,72516,72743,72920,73144,73253,73263,73352,73428,73980,74044,74212,74420,74524,74649,74713,74808,75022,75031,75229,75576,75905,75983,76086,76305],"androidjavaclass":[1406],"scheme’s":[74943],"leanleft":[2135],"metal2v2":[12232],"readme":[6338,18689],"javascript":[2077,12423,22946,24062,24171,24281,27803,30097,68952,69197,69726,70806,70869,73183,73244,73291,73328,73395,73499,73592,73606,73667,73692,73721,73900,73907],"mono":[706,1044,1308,4957,5222,5979,6068,6430,7391,7468,7620,7804,11916,12180,12367,12555,18011,19220,22578,24943,25311,26017,26040,26076,27637,28262,28379,28473,29812,30855,33153,33419,33453,33524,33826,34306,34392,34511,34740,35723,35865,36234,36496,40513,40526,40547,52563,66456,66470,68910,69151,70481,72858,74337,74555,74587,74867],"windowed":[690,11717,12474,34239,34258,34339,34465,72791],"subtype":[67186],"multicolumnheader":[52347],"culprit":[64323],"tiled":[100,179,7965,8827,12728,13755,42255,48162,49560,50071,50094,50519,50726,65987],"procedurally":[2171,5810,9347,13417,21514,22203,49702,75740],"ipointerdownhandler":[49889],"dump":[36845,74548],"selected":[80,131,229,269,605,679,729,1331,1961,1973,2039,2232,2256,2268,2289,2325,2392,2423,2611,2772,3521,3804,3886,3903,3932,3970,4078,4354,4477,4535,4832,5099,5259,5952,6293,6355,6400,7005,7186,7263,7485,7777,7937,7965,7989,8002,8025,8311,8379,9010,9050,9135,9174,9256,9304,9332,9532,9586,9740,9892,10061,10226,10329,10421,11361,11466,11589,11657,11907,12403,12603,12728,12816,13024,13148,13171,13363,13570,13626,13682,13714,13834,13867,13892,13934,13991,14477,14522,14536,14680,14734,14826,14857,14996,17947,18050,18120,18363,18466,18493,18718,18980,19448,20075,20335,20547,20639,20681,21081,21183,21501,21566,21687,21700,21843,21975,22042,22226,22632,23670,24532,24794,25047,25170,25372,25399,25451,25623,25910,25928,26603,26929,26954,27021,27336,27491,28167,28834,30248,30394,30488,31705,32687,32848,33428,33655,33783,34595,34781,34948,35066,35266,35379,35530,35634,35782,35859,35901,35930,35972,36037,36133,36184,36231,36430,36473,36570,36696,38289,38532,39054,39127,39202,39269,39335,39472,39516,39627,40018,40116,40253,40964,41663,41724,42353,43218,45255,48322,48456,48508,48526,48535,48564,48583,48628,48652,48694,48857,49555,49898,49914,50347,50522,50559,50585,50627,51080,51119,51137,51190,51235,51262,51359,51529,51558,51609,51820,51869,52112,52186,52226,52401,52746,52984,53221,53408,53798,54211,54377,54449,54551,54626,54712,54777,55014,55993,57158,57320,58414,58705,59134,59275,59841,60515,61497,61601,62831,63306,63968,64174,64244,64341,65001,65321,65934,65989,66016,66249,66468,67084,67912,68559,68602,68925,69168,69350,69454,70108,70324,70344,71124,71273,71288,71319,71344,71410,71442,71527,71608,71645,71876,71902,71938,72275,72773,72837,73322,73389,73950,74238,74763,74859],"standardtonemappedgi":[46677],"persistent":[2928,5336,11613,12949,13310,20239,23930,24467,26451,27991,29154,30824,35277,39157,39329,41314,49358,50397,53882,59554,60763,66605,66926,71985,73270],"transcutvertexlit":[42857],"inactive":[5273,18178,19038,21306,33100,35344,35735,39492,63309,63966,64305],"sequences":[6783,17166,17661,21628,22024,31456,32702,37321,40836,48339,49644,68499,74210],"#5e5e5e":[63377],"archi":[40740],"interest":[5137,6051,33480,64757],"mecanim":[1980,2007,2211,2236,3277,13816,25623,29094,30048,38437],"thumbnail":[2555,2651,3981,4299,18435,19074,35171,39031,53293,73922],"iphone":[5921,10767,12043,19797,23550,25843,25917,25937,25982,28447,29586,35806,49760,52578,66841,72690],"flexes":[9185],"eliminate":[3443,6028,6082,10573,43298,69015,69267],"onunityplayerquitted":[66824],"ontransitionend":[62393],"assigntoatlas":[48809],"forgery":[66790],"allowing":[254,936,1920,1966,2192,2259,2434,2839,4339,4509,4545,4831,5044,5267,6128,7619,7930,7965,8861,8987,10708,11469,11587,12157,12643,12706,12728,13696,14789,14882,15902,16527,17356,17488,17912,18104,18617,19348,19361,20627,21092,22061,22204,22303,24487,26046,28062,30048,30425,32366,34205,34925,34987,37689,38574,40868,41704,42969,49449,50007,51394,51956,59749,60518,64454,64528,64752,66414,66922,67582,72723],"kunityxrinputtrackingoriginmodefloor":[75589],"cputimeframecomplete":[21910],"mimic":[7350,19938,20048,24054,33526,56618],"modifying":[1012,2243,2286,2399,5774,5959,7800,8765,9347,10129,11385,12973,13264,15861,20126,23523,29782,32911,36736,37675,43248,44020,45293,48887,49792,50641,51941,54796,66955,71068,71921,74898,75872],"investigation":[11077,36496,52558],"separates":[3735,10540,36058,62788,63725],"enable_mono":[33826],"upmconfig":[69834,69903,70011,70195],"#right":[35114],"vfxblock":[6716],"accelerationevent":[29671],"restorescenemanagersetup":[40689],"lan":[3589,11039,12645,66230,66341,66344],"projectionmode":[37619],"placing":[4534,8139,10073,25521,27003,27340,32847,37565,38377,40480,44205,45528,45937,45974,48192,49553,50480,50933,51131,51231,54223,58355,62798,66419,71807],"m_querymode":[76346],"scriptreference":[16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,30951,74074],"sender":[53743],"maxcomputebufferinputsgeometry":[19765],"x11":[44906,50170],"anonymous":[18819,21002,33263,56725,68513],"\\local":[52505],"compliment":[7645],"setselected":[24844],"cg":[6708,37683,42611,44364,44915,45120,45571,45599,46322,46511,46760,47902],"t":[179,1934,3395,3566,3617,8443,9393,13956,18081,20853,22541,26117,26137,32531,34185,34775,36710,36862,37007,38652,39871,40582,40725,40881,41166,41342,41467,41504,47098,48794,51466,51745,51788,55726,56691,57907,58044,59060,59596,62027,62771,63140,65525,68152,68881,69117,71776,76286],"rock":[40995,50513],"spheredistanceband":[18595],"“gates":[33543],"dfont":[6714],"createproperty":[36757],"timevalues":[62986],"compensation":[22174],"gameobject":[8,81,1457,1904,1916,1998,2031,2034,2044,2079,2280,2362,2422,2739,2964,3388,3560,3732,3890,5224,5688,6082,6235,6754,6958,7135,7144,7178,7210,7217,7619,7813,7910,8003,8104,8128,8146,8188,8280,8586,8982,9004,9130,9137,9169,9202,9242,9290,9299,9326,9532,9555,9622,9672,9711,9723,9830,9847,9963,10020,10054,10108,10209,10348,10392,10579,10605,10612,10692,10722,10742,10789,10805,10990,11066,11150,11175,11187,11245,11271,11291,11306,11322,11333,11434,11539,12751,12768,12908,12970,13224,13234,13261,13272,13289,13308,13453,13538,13552,13585,13675,13720,13744,13860,13999,14252,14498,14533,14567,14661,14832,14983,15022,15046,15816,15831,15884,16020,16869,17744,17788,17976,18155,18309,18326,18375,18388,18435,19038,19064,19401,20396,20593,20626,20652,20770,21144,21173,21181,21252,21306,21455,21588,21642,21688,21855,22010,22122,22193,22226,22290,23365,23392,23669,23794,24164,24456,24523,24780,24812,24901,25140,25233,25350,25399,25508,26569,26580,26605,26645,26664,26718,26793,26807,26927,27007,27018,27059,27094,27170,27320,27341,27491,27684,27752,27759,28854,29420,29484,29604,29855,30039,30108,30172,30179,30241,30337,30671,31670,31733,31749,31767,31779,31804,31825,31842,32078,32095,32119,32142,32206,32242,32330,32348,32374,32596,32619,32639,32667,32714,32749,32847,32893,33101,33578,33614,33632,33656,33908,34155,34715,34770,34889,34923,34942,35196,35247,35452,35754,36003,36098,36248,36348,36397,36455,36630,36685,37287,37344,37525,37642,37675,37795,38345,38448,38461,38477,38490,38525,38555,38588,38638,38666,38731,38886,38912,39126,39304,39317,39346,39492,39512,39524,39643,39671,39681,39689,39788,39852,39969,40145,40464,40531,40750,41492,41679,41732,42353,43128,43183,43205,43416,43538,44614,45986,46196,48127,48225,48245,48270,49020,49317,49484,49680,49709,49890,50288,50476,50600,50620,51041,51119,51158,51163,51342,51398,51438,51528,51553,51587,51750,51757,51793,51803,51842,52174,52222,54120,54709,54758,55052,55262,55369,56201,56212,56273,56327,56413,56663,56676,57136,57628,58138,58584,58764,59390,59782,60161,60471,60742,61316,61498,61896,62749,63069,63113,64260,64998,65268,65970,66045,66183,66222,66338,67099,68531,68550,69388,69492,71175,71565,71597,71608,71644,71735,71805,71847,71856,71898,71915,71966,72163,72231,72546,72752,74169,74418,74900,75062,75076,75107,75224,75844,76219,76418],"'https":[70479],"configurability":[74260],"frameselected":[30675,55902],"parenting":[5092,9145,14661,22695,24525,26562],"continually":[4867,28781,72931],"bear":[9268,12971,50339],"notched":[11724],"dof":[1937,22547,29902],"subtypes":[67186,67802],"compoundcontrols":[24196],"shuffling":[13066],"specified":[1006,1655,1789,1890,1919,2047,3255,3738,4508,4959,5238,6381,6443,6498,6971,7323,7929,8003,8029,8360,8511,9517,9711,9750,9817,10015,10129,10433,10483,10720,11178,11561,11843,12598,13144,13177,13576,13829,13858,14286,14558,14726,15010,19364,19623,20343,21100,21367,21967,22341,23260,23394,24095,24740,24776,25238,25451,26593,26682,26878,26919,27870,27953,28179,29137,29420,30424,30624,31653,31790,31823,32108,32186,32283,32357,32403,32633,32682,32854,34213,34994,35470,36710,36908,38549,38583,38632,39435,39484,39560,39663,40731,40838,41569,41704,42016,42149,43177,44297,45019,45170,45248,45281,45659,46024,46347,48123,48280,48515,48686,49698,49850,50390,50543,50901,51962,52223,52627,53592,54492,54769,55578,57528,58327,58407,58466,60213,60649,61470,62021,62856,63767,64052,64955,65132,65945,66229,66354,66614,67195,67621,67673,67945,68382,69818,70049,70076,70142,70692,70830,71969,72292,72672,73198,73816,74234,74532,74642,76156],"scalewidthincrement":[20460],"remotesystem":[12673],"countlettersinstring":[28270,72153,72203,74595],"hotpink":[63565],"rwtexture2d":[8415,44910],"monobehaviours":[6125,13308,17788,18004,25348,29428,33477,39914,49650,54130,56730,58585,58727,62746,66069,74357],"fullscreenmode":[29832],"object_field_button":[63338],"configured":[138,3009,6347,7764,7771,8549,9179,9309,9842,10698,10992,12225,12406,12852,13618,13628,14721,15844,17092,17220,17326,21175,21195,25345,25438,25623,27786,28071,29186,29891,30292,31707,34184,34924,35315,35714,37531,38437,38865,39096,39530,39702,40002,40104,41705,43308,45629,46802,48226,49886,50520,50585,50726,52903,52929,66598,67048,68801,69865,70109,70174,72398,72974,73157,73616,73672,75037,75201,75226,75417],"mycustomhandler":[1052],"way":[67,237,258,298,510,730,890,1227,1362,1472,1513,1975,2053,2070,2188,2243,2351,2440,2699,2839,3248,3462,3500,3666,3699,3721,3889,4450,4537,4591,4740,4776,4814,4909,5070,5160,5178,5721,5770,5818,6024,6063,6325,6725,6758,7227,7469,7779,7874,7878,7944,8107,8183,8302,8558,8614,9343,9639,9820,9898,10071,10406,10465,10507,10708,10732,10804,11160,11439,11598,11653,11978,12803,13234,13267,13375,13616,13628,13818,13854,13858,14009,14273,14336,14562,14731,14962,15864,16060,17169,17539,17981,18054,18239,18315,18343,18357,18469,18562,18676,18816,18991,19077,19334,19374,19979,20056,20116,20344,20446,20543,20608,20724,20808,20863,21150,21160,21180,21219,21395,22066,22100,22189,22522,23275,23420,23573,23626,24195,24299,24467,24489,24646,24726,24774,24790,24910,24916,24948,25032,25110,25169,25197,25355,25416,25571,25623,25734,25859,25942,26076,26247,26323,26448,26488,26569,26605,26629,26723,26790,26846,26920,27098,27214,27324,27482,27575,27650,28382,28880,28999,29104,29391,29758,29835,29891,29908,30043,30052,30062,30124,30147,30322,30501,30657,32114,32230,32318,32702,32863,32923,33228,33382,33409,33458,33506,33538,33586,33656,33866,34188,34539,34640,34698,34856,34924,34956,35107,35248,35793,36081,36348,36597,36637,36678,36693,37236,37297,37373,37618,37714,37731,38143,38347,38408,38461,38500,38606,38668,39147,39318,39389,39476,39603,39666,39744,39794,39966,39981,40073,40091,40180,41026,41753,41786,42059,42121,42180,42255,42262,42312,42447,42620,42810,42952,43016,43149,43320,43618,44079,44275,44363,44389,44874,45104,45136,45187,45220,45598,45705,45844,46138,46508,46532,46712,46822,47184,48053,48224,48349,48514,48538,48595,48662,49283,49354,49391,49507,49517,49607,49646,49650,49661,50321,50579,50642,50701,51018,51608,51816,52013,52118,52198,52465,52640,52696,52757,53184,53323,53839,54249,54644,54724,54795,54990,55159,55512,55740,56075,56702,57158,57637,58138,58825,59047,60164,62281,62804,63080,63689,63989,65684,65849,65926,65988,66012,66033,66115,66193,66239,66337,66355,66458,66822,66850,66922,67069,67188,67651,68043,68160,68513,68604,68960,69207,70341,70651,70839,70948,71016,71364,71662,71762,71890,71911,72242,72296,72500,72722,72946,73286,73405,73485,73501,73772,73920,74137,74343,75037,75077,75322,75397,75426,75617,76150],"enforce":[5924,8496,9008,9400,9466,11546,12885,18097,26459,35714,39373,40099,70606],"addtoclasslist":[57253,57482,60938,61041,61785,62541,64367,64617,65141],"getpassname":[44602],"precise":[2360,7073,9201,9844,10579,26863,27500,27552,32872,33411,34362,36205,45040,51993,53733,54727,64489,66008,73088,75439],"gettempunsafeptrslicehandle":[26127],"treemotionvectormodeoverride":[50455],"centered":[7697,11661,14867,59872],"containsnamedpass":[44605,47166],"warns":[18293,28114,28185,28967,35759,56125,70969,71108,71385,71519],"bumps":[14965,15850,22742,49495,49515,49609],"textmeshpro":[17639,31218,31464,44717,69518,70214,70786,73487,74249],"recommend":[3346,6688,8215,12607,17370,25492,26074,26947,28457,37899,48227,52184,66623,68799],"weaponcustomeditor":[56148],"scalings":[23271,50375],"unity_fogcolor":[46475,47147],"tokenized":[2628],"evaluate":[4434,6964,10011,10397,11444,12756,13061,13277,13294,18178,18612,26878,29555,34170,41896,47751,52597,57074,70236,71793],"stated":[234,2995,4445,5049,18027,22993,24057,38641,66003],"methodology":[64366],"theme":[823,1206,4355,34989,54452,54674,54704,54846,58616,61522,63063,64382,64431,64550],"darkorchid":[63539],"gdb":[26035,27799],"interprets":[1832,5464,5609,19936,25205,48209,61496,63864,63921,70661,71341,75766],"backing":[29449,39891,70350],"dispose":[2833,2932,5483,5628,5750,5768,18581,21924,26231,26251,26352,26432,26451,26541,29266,35544,36267,36415,61102,66524,68088,68266],"illuminating":[26790,38402],"defineconstraints":[3031,18648],"upleg":[71786],"affecting":[8005,11625,15857,25390,27209,29484,30375,32911,33401,35075,35760,36093,36538,38411,38553,41915,42360,47127,49423,58173,64453,71597,72330],"registries'":[70361],"unity_worldtoobject":[5448,5592,14202,20346,47081],"promote":[4357,28145,38679,40179,67482],"leftcontrol":[59760],"macroreturns":[20278],"vertinstancinguvs":[31905],"myenumflagsfield":[64600],"complements":[19653],"trailrenderer":[14659,15104,28856],"nonexistent":[4566],"application_name":[28233,28296],"“default":[24565],"recognize":[220,22970,26112,28485,29922,65881,66617,69898,70654],"tesshw":[45483],"occluders":[10092,18613,30179],"deploys":[561,661,24626,54060,74781,74830],"sampler_maintex":[45217],"purchaseprocessingresult":[67327,67429,67590,67775],"mistyrose":[63605],"rendertargets":[38368],"rendertech":[72752],"garbagecollection":[33080],"calculatelayoutinputvertical":[54275],"webassembly":[23136,50224,68952,69197,73120,73173,73345,73592,73614,73639,73690,73726,73939],"linked":[332,2298,2358,2423,3229,4081,4961,5259,6125,12958,18155,20224,26078,26927,27684,28108,28839,30018,30244,30896,33575,33909,34165,34736,36098,37416,39796,41583,51535,51962,52575,53391,53715,53788,55726,63458,71661,71898,72132,74592],"orienting":[14477,25623,72323],"modelname":[48349],"kinematically":[38467],"outline":[5856,7924,9027,11560,12742,13707,17970,18977,22226,23225,30174,35016,39127,39680,39969,40066,48322,48476,48613,48636,48640,48682,50885,51139,51189,51236,51721,51829,57610,58396,62071,64170,65996,68569,68692,69043,69298,69340,69404],"countmesh":[36244],"min10float4":[8455],"material’s":[13770,13799,19063,31869,41774,42784,72508],"yessupports":[37796],"oculus":[17892,31171,31443,50244,68753,72885,72901,72953,74365,75005,75188,75304,75440,75897,76095],"rebuilt":[3489,10847,18481,19514,27170],"maxsteeringangle":[74436],"kunityxrinputfeaturetypeaxis3d":[75495],"uninstalled":[48621,67598],"conforms":[5004,18054,22066,70813,71762],"myrepository4":[70604],"caster":[20420,37422,39694,44018,44066,46771,47752,48231],"kformatr32g32b32a32_sfloat":[50122],"'default":[39427],"multiplies":[4883,13916,32078,32874,39686,39836,39974,42792,43737,45273],"countryside":[13899],"unsolvable":[33583],"stringreturnvaluefunction":[73516],"pragma":[6519,8414,8724,8918,10156,14046,14166,19055,23303,23587,28920,29519,31888,32948,41854,41994,42035,42429,42963,43425,44035,44307,44400,44504,44920,44977,45422,45458,45606,45677,46148,46541,46758,46844,47203,47917,49001],"zw":[32933,45503,45735],"entitlements":[12218,27775,28107,28215],"artifacts":[2356,3592,3733,3827,4639,5262,6383,6398,9884,9964,10001,10272,10573,11546,12884,13212,14581,19129,22183,22730,25066,25137,26986,27131,28181,29332,29891,30243,31635,32298,32739,36678,38347,38850,43193,43592,44081,44234,44637,48601,50070,50356,50686,50703,52480,66627,68926,69169,72533,74644],"concept":[1190,1994,2082,3738,4382,4852,5041,5724,5805,8115,21156,21485,22010,24526,25926,30097,36742,36752,36790,37226,42048,42817,45389,45663,49440,49495,49540,49607,52094,52224,54227,54722,67261,70941,72289,75617],"mylight":[30129],"#959595":[63268],"strict":[19230,34416,41984,42191,61448],"nan":[44298,45040,54886],"skips":[4583,6384,6446,12902,14851,17992,27705,28182,29133,37622,39140,43801,45771,45851,51028,68512,71055,74645],"m_quality":[76385],"targetcamera":[14895,18574],"ingame":[20893],"rests":[10811,56933],"kformatrgba_dxt1_unorm":[50097],"finite":[254,24370,38541,65211,67170],"functional":[73,3457,9329,17488,17976,18321,19693,22375,23794,24055,24468,25887,37480,38839,41026,56720,60635,71093],"sequential":[5994,6111,12302,31624,51778,75537],"enact":[12219],"equivalency":[41307],"unclamped":[52039],"tree":[1945,2007,2242,3012,4792,6264,6288,6311,6320,7933,10347,12924,13628,13805,13892,14762,14774,15167,18410,22013,22449,29297,31819,33572,33682,33944,34165,34188,34930,36731,38045,43592,45637,48223,48317,50449,50581,52126,52171,52221,52242,54419,54543,54808,54893,54914,55066,55165,55238,55313,55509,55632,55987,56044,56330,56397,56596,56715,56740,56803,57515,57598,57818,57852,58590,58738,59003,59397,59554,59903,60137,60390,60540,60610,60936,61039,61326,61653,61753,61954,61987,62483,62703,62742,63132,63841,63876,63972,64033,64244,64908,64981,64994,65512,65723,65732,65902],"gradientfield":[55420,55522,59655,64673,69310,69416],"m_trackcolor":[60918],"topmost":[22532,25408,51398,57827,60397,60810],"membership":[25751,28290,49771,53737],"softlight":[43840],"ugs":[17312],"launches":[499,512,609,688,994,1190,7782,12079,14848,15814,21075,22413,23440,24626,24639,35844,36553,38820,40662,53696,53763,53882,53999,66817,67136,67482,69897,70922,74781,74830,74962],"hanging":[24912],"interactables":[75085],"snippets":[44361,50342,52369,63897,64406,64421,64461,64481,64504,64556,64579,64603,64624,64687,64699,64738,64816,64834,64851,64869,64903,64923,64948,64965,65016,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65545,65560,65577,65597,65617,65638,65658],"solvers":[11606,74192],"getconfiguration":[7765],"processanimation":[21348],"m_start":[60237],"narrowly":[49611],"articulation":[3012,7214,11629,33572,33640,36316,37398,69300,69406],"playdelayed":[73066],"progress_bar":[63353],"distinguishes":[50600,58403],"guidtoassetpath":[3637,19522,59063],"advertisingmanager":[74877],"analogous":[7383,13829,15851,54823,63858,63934,63989,64011,64025,68318],"capablenote":[50224],"inventory":[17326,24737,53031,53951,54036,67153,67193],"righteyepose":[75579],"lightingstandarddefaultgi_gi":[46655],"flying":[8579,15864,31720,32400,43183],"restoretransactions":[67356,67631],"genres":[9588],"tour":[71896],"renderwithshader":[38191,45619],"rfcomm":[12662],"fontstyle":[56177,64829,65302],"proximitycheck":[18295],"testframework":[31249],"overwrites":[24624,25490,30905,53048,53095,53343,53978,70227,72851],"gettypedisplayname":[36863,37065],"crawl":[6999],"altering":[30154,37622,42703,42724,42746,46778,66728,71069],"backup":[17994,25960,31050,48566,52493],"ancestor":[28967,28993,29046,35112,55604],"landslide":[32343],"snippet":[3394,5939,6195,19108,33275,33820,44363,45215,45605,58045,58467,63667,64655,64777,67708],"unity_lodfade":[10385,47153],"zfailfront":[45863],"get_accum":[6177],"connection":[695,700,836,1754,9017,9065,9185,10984,11001,11075,11124,11222,12650,13182,13263,13695,18375,23083,26587,26688,27170,28310,28433,30043,33072,34404,35032,35806,49733,50473,52645,53773,56075,60611,66035,66134,66243,66336,66359,66536,66597,68059,69901,70174,70369,71552,72398,73175,74888,75505],"animating":[1890,1991,2064,2280,2354,2370,2416,2428,7155,7180,11459,18185,21575,22530,26010,29130,36029,37572,39591,39714,52166,52216],"passive":[20951,22235,49985],"wasmframeworkurl":[73409],"contenttype":[68273],"defaultformat":[68938,69182],"splitting":[167,405,430,524,534,1311,3477,10657,14297,14348,25229,33883],"credentials":[223,4473,12640,53358,53695,53838,69860,70175,70505,70629,73676],"tons":[4997],"made":[434,1888,2227,2429,3428,3538,3692,4390,5117,5832,6083,6193,6798,7549,7561,7829,8086,8149,8260,8384,8783,9024,9184,9384,10088,10333,11314,11407,11534,11612,12520,12990,14965,16275,17126,18734,18982,20811,21134,21164,21221,21306,21528,22247,22329,23912,24624,25550,26072,26227,26580,27591,28114,28185,29139,29237,29420,29799,29855,29893,30070,30440,31007,31853,32847,34944,35139,35883,36092,36194,37554,38349,38403,38428,38676,39069,39492,41603,42379,45055,45302,48261,48395,48511,48654,49148,49992,50342,50401,50537,51095,51148,51306,52236,52566,52702,52752,53211,53461,53698,57628,58791,59914,65902,65957,66659,67149,67886,68049,68441,68527,68679,69301,69407,70011,70350,70839,70872,71332,71681,72368,72418,72716,74358,74602,74905],"consuming":[3590,4811,5952,6815,6858,27341,33421,35268,35794,52524,53953,58403,67262,67541,70224,70245,72319,75794],"2048x2048":[5955,48705],"concepts":[12,1095,1807,2004,3017,4380,4869,5018,5152,5815,5838,6287,6778,18413,19277,25827,26103,26551,27921,28975,31599,37330,37522,38523,38664,39099,39512,40150,40525,40644,42816,43090,43096,48315,49421,52239,52706,57798,58737,59002,65897,66185,66330,66450,69715,70940,72126,73907,74886],"networkmanagerhud":[11167,22973,66047,66194],"verbs":[68458],"having":[223,1957,2085,2277,2411,3440,3468,4327,5770,6841,7396,7429,8442,9127,10083,11520,11559,11622,11859,12182,12369,12557,12954,14870,18563,19222,19560,20605,24794,25520,26510,27591,29882,29906,32106,32253,32360,34197,34308,34394,34513,34925,35337,35697,35881,36348,38277,38402,38624,39437,39637,40689,41472,44811,47609,48514,49375,49474,49549,51958,52673,53025,54264,54796,59865,60382,60795,61399,62216,66336,68610,70499,70728,70756,70963,71871,72243,74569,75617],"symbolsurl":[74027,74111],"shot":[6949,8598,10028,21964,27992,32182,36591,37689,52076,72487],"mastergain":[4972],"capabiities":[12218],"rad2deg":[10454,21970,25564],"getvaluefrombag":[54530,58064,60909,61009],"r8i":[8475],"ilayoutelement":[54268],"unloadaudiodata":[7495],"createdetailsviewcontroller":[35565],"players’":[17296],"mycustomelement":[56684],"animatortransitionbase":[15269],"intercept":[27940,39524,43320,60213,62156,67490],"refuses":[70810],"receiver":[9400,22911,49929],"triangulated":[22836],"quickhull":[10602],"wouldn't":[18104,26050,26360,54264,68898,69136],"androidpack":[474,48209],"outlines":[8379,13707,19004,22243,29761,33088,33470,35741,39853,48374,48492,48663,50159,51139,51240,58392,64765,65355,68492,74184,74325],"notepad":[69962],"invaders":[66441],"reflection_type3":[44506],"#faebd7":[63509],"omitting":[39947,72732],"case":[75,223,410,734,1384,1393,1429,1512,1582,1665,1770,1888,1967,2002,2103,2777,3306,3469,3538,3569,3666,3729,3807,4428,4448,4711,4909,5034,5491,5597,5758,5802,6045,6154,6320,6439,6496,7046,7307,8008,8208,8368,8430,8534,9291,9351,9712,9901,10014,10342,11519,11606,11791,12305,12803,13054,13247,13323,13457,13961,14558,18105,18166,18450,19413,19471,20270,20576,20612,21475,21659,21989,22093,22498,23615,24169,24276,24517,24753,24769,25100,25225,25381,25399,25455,25667,25875,25926,26049,26057,26456,27654,28006,28797,28897,29921,29947,30349,32632,33613,34184,34235,34900,34911,35714,35942,36661,36919,37325,38503,38718,38859,39918,40626,40733,41463,41691,41813,42449,43071,43114,43194,43589,44022,44097,44447,44838,45245,45858,46014,46417,47142,47952,48023,48231,48339,49512,49540,49570,49631,49636,49738,49822,49910,50185,50322,50726,51662,51990,52114,52418,52526,52647,53603,53691,53788,54533,54564,54821,56693,57319,58164,58451,60506,63098,63860,64457,65998,66598,66941,67092,67400,68407,68541,68936,69180,69380,69484,70174,70246,70295,70316,70332,70380,70629,70839,71028,71374,71469,71684,71889,72243,72337,72681,72935,73270,73395,74583,75092,75429,75591,75740,75984],"tif":[4507,6713],"pauses":[12516,18130,18277,18516,21853,27695,32185,34042,52011,73064,73632,74750],"importedassets":[19516,68966,69213],"acc":[29669],"conform":[18747,39856,51166,70952,75265],"isrequestedmipmaplevelloaded":[50973],"unity_no_screenspace_shadows":[9456,43963],"interpolation":[1896,2043,2352,4861,7015,7174,7944,8582,10097,10261,10464,11254,11277,11291,11571,13247,14288,14598,20726,22679,26844,27325,27478,32306,32870,35344,35745,38136,38499,38526,45276,50381,61545],"focuswindowifitsopen":[2476],"depthstencilformat":[21778,68921,69164],"networkmanager":[11048,11101,11236,38927,66044,66222,66402],"downloadmoviemt":[72582],"asciicapable":[29687],"volumes":[6798,7915,10087,11319,18611,22186,23041,27263,27322,27760,30255,32298,32739,37812,50446,71884,72788,73055,74289],"soldier":[46250],"spirit":[61771],"setactivescene":[41723],"#202020":[63335],"gettileanimationdata":[51771,51791],"recovery":[18516,52532],"7f1":[40327],"henry":[37078],"speculative":[13253,18221,23102],"stereo_multiview_on":[42170],"hslluminosity":[43846],"m_aomaxdistance":[76392],"project's":[260,379,585,1016,1238,1292,1299,1353,1825,3491,3580,3834,3851,4530,6054,7777,10732,13306,13626,17169,18347,18756,21632,22926,24606,24696,24933,25153,27495,27710,39083,39177,40653,40715,43122,43135,47095,49758,50933,52526,52647,55362,58675,61579,66569,68763,70211,70238,70328,70356,70586,70774,70875,71121,71416,71541,73919,75044,75361],"m_linearfogend":[76357],"prefixed":[21661,42614,49823,63860,63940,70672,75516],"s_trackcolor":[60916,61016],"recentering":[76300],"stoves":[9409],"adadad\\searches":[40748],"component's":[100,9280,11342,14001,14517,14887,25380,27008,28857,47190,51832,58622,61326,67130,71612],"m_objectnamebinding":[55385,56234,56292],"parentheses":[11313,12811,21676,38358,41462],"#c0c0c0":[63636],"makeup":[36240],"titlescreenmanager":[57798],"barcode":[12671],"factorywithcustomname":[57312],"establishes":[10399,39881],"s_previoushandler":[1050],"resourcefile":[2912],"002c":[66769],"meta's":[17880],"advantage":[3252,4978,9260,10138,13894,22107,25521,26478,28056,28066,29728,32705,32813,38346,41794,43021,43131,45592,57929,58651,58861,59086,68157,75209,76095],"sculpting":[4271,16969,17591,31217,50647,52176],"0x0":[52563],"rootframe":[74678],"considered":[3486,3732,6147,7204,8163,8434,9785,10012,10274,11546,11661,12397,13956,14734,18617,21183,29423,31706,34566,38638,39512,39533,40294,48628,49424,49665,50388,54990,67758,71043],"blendtree":[6320,6703,7940,15174],"commentary":[25890],"impacting":[18516,28089,33481,67551,74178],"equality":[30901],"byteaddressbuffer":[20264],"script'":[4856],"exampleshadergui":[44213],"expecting":[72368,73487,75445,75979],"standardshadermaterialcharts":[49640],"attention":[4141,18519,24747,35882,43131,52597,62838],"#55ff55ff":[61938],"dropdown":[1156,4808,6388,6458,8379,10543,11547,11755,12096,18125,18326,19063,19621,20629,24593,24895,24957,25060,25487,26613,26909,27030,28327,29032,29353,30597,30859,32705,34799,35031,35363,35367,35623,35770,35801,35977,36037,36184,36221,36338,36459,36482,36685,37744,38377,39470,41701,41732,44282,48116,48562,50303,51103,51262,51346,51554,51611,52857,53297,54638,54679,54729,55055,55861,59872,60650,62855,63091,63287,64256,64537,65458,65944,67101,67214,68548,69350,69454,71562,72743,72836,72897,74316,74649,74810],"“you":[67105],"audiomodule":[16630,30955],"rsa4096":[66768],"isenabledforcontextualsearch":[2603],"'louder'":[7793],"kunityxrinputfeaturetypeaxis1d":[75493],"__sphere__":[32387],"networkdiscovery":[11061],"crashlytics":[52871],"transitioned":[5025,14731],"xaml":[12475,34222,65849,66875,74667,74774,74799],"blurs":[8833,34869,36609],"sliced":[88,168,1868,13753,37877,48366,48605,48901,50969,54718,65986],"yesexperimental":[37869],"├──":[18688,18766,18830,69799],"15f2":[528,33895],"referenced":[1942,2841,3028,3315,5019,7366,7427,12014,12958,13346,18621,19164,20181,22480,23264,25928,26077,28568,30097,34607,36291,38442,39071,39117,39789,39927,40210,40442,42934,43041,49417,50067,57190,65769,66487,69388,69492,71022,73393,73630,75485],"until":[1469,1589,1904,2181,2667,2719,2827,3690,4583,5042,5276,6725,7494,7661,7859,8030,8221,8302,9518,10015,11111,12310,12513,13042,13363,13879,13906,15864,18224,18260,18379,19074,20729,21154,21306,21854,23427,23940,24275,24908,25541,26026,26354,26374,26510,26613,26714,27536,27679,27823,28395,29702,31380,31727,32183,33075,33094,33382,33421,34631,34986,35746,35942,35994,36592,37588,37675,38275,38492,38869,38956,39240,39339,39663,47163,49030,49289,50019,50058,50960,51188,51991,52182,52224,52320,53468,54450,54712,54886,55641,56681,57038,58110,58150,58861,61488,62014,64182,64619,67319,67440,67551,67601,67735,68607,68807,68825,68852,69058,70280,70337,70396,70755,71012,71441,71592,71862,72931,73091,73285,73647,74925,75433,75819,76130],"binary2text":[25137],"centralized":[68614,72460,75628],"uv_maintex":[23308,29534,31896,33035,46167,46543,46858],"gaze":[74256],"lightmapper":[6802,7898,9099,9965,10009,18245,22107,22825,23426,26840,27073,27085,27087,27111,27113,27522,27748,36567,36633,36690,37846,41784,42713,42729,42754,50181,50440,68671,68707,68852,69061,69350,69454],"projectile":[25525,33099,72315],"m_tires":[58877],"aovs":[17077],"bitblt":[34225,34343,34469],"sigaction":[1050],"simplespecular":[46623],"marks":[7390,22508,25423,26135,28591,33381,36093,41202,49840,51541,54480,66464,70111,70910,71059,75765],"kformatrgba_bc7_srgb":[50104],"deadlocks":[6050],"getstring":[49964],"timeoutseconds":[50966],"capturescreenshot":[52079],"smoothens":[14524],"formerly":[23187,35178,41674,50653,66918],"weighting":[2082,6223,10359,13057,21587,32260],"colorkeys":[64680],"2kb":[27908],"prototypes":[17759,35248,50582],"mousecaptureevent":[55645],"computing":[3451,18224,18580,21347,21540,29718,35714,46393,46798,58111,72345,72497,72786,75446],"normalparallaxspecular":[42299],"doors":[9682,23081,26563],"scrollbar":[2441,9571,23223,23984,36057,39494,39724,39739,39777,39977,64263,65325,65939],"cdn":[3292,69891,73410],"unfocuswindow":[59706],"subsystem":[4709,17818,19137,22651,31237,33467,35371,35701,36118,36532,39512,49765,74364,75252,75390,75406,75473,75738,75936,75946,75999,76089,76300],"parseatlasname":[48781],"coupled":[29434,40971,45205],"generatering":[27387],"coercion":[5988,6154],"layouts":[369,6035,8616,9219,10015,14254,18901,20891,24768,24914,28350,30555,36715,39444,43995,44879,54223,59580,59842,64156,70380,72530,75481],"lessens":[11260,11282],"oncharacterselected":[59439],"examples":[1417,2345,2693,3247,3458,3807,4025,4997,5050,5156,5904,6494,6681,6831,7768,7931,8185,9204,9417,9920,10465,10711,12845,12990,13019,13748,13788,13915,14036,14888,19937,20291,20923,21003,21115,21200,22234,22559,23246,23416,23628,23842,24933,25330,25484,25500,25865,26118,26303,26725,28485,29162,30693,31721,31871,32779,33515,33613,33900,34929,35121,35411,36234,37323,37482,37538,38120,39385,39740,39977,40097,40741,41272,41339,41520,42042,42380,42406,42625,43078,43593,43667,43713,43783,43851,44073,44115,44147,44179,44217,44329,44350,44388,44458,44604,44639,44710,44774,44823,45072,45303,45404,45534,45905,45946,46001,46136,46525,46527,46719,47164,47372,47949,47964,48002,48035,48379,48538,48940,48977,49492,49531,49640,49651,49915,50047,50939,51159,51889,52264,54235,55541,55634,55669,55748,55823,55873,55938,55994,56123,56273,57596,57642,57804,58023,58026,58228,58903,59733,60224,60388,60569,60621,60790,61610,61961,61981,62129,62242,62634,62753,62887,63738,64377,64459,64554,64654,64901,64921,64980,64993,65003,65071,65093,65213,65373,65526,65683,65761,66605,67167,68639,68940,69184,69623,69998,70677,71090,71925,72150,72266,72300,72538,73683],"handheld":[387,1261,1386,10762,18508,25855,30376,31126,48201,50197,75107,75300],"9px":[63241],"registercreatethreadcallback":[27994],"readjust":[7965,12728,36058],"yours":[30493,52584],"getdisplaylanguage":[1480],"dispatch":[8426,22353,30334,36886,49309,56706,57807,57854,58021,60613,62823],"_is":[11166,73573],"#left":[35113],"addcomponentmenu":[4717],"temp++":[26464],"devicestate_sethandvalue":[75564],"sounds":[257,1912,5047,5158,5193,6047,7446,7463,7482,7514,7531,7615,7645,7657,7787,22468,24392,26086,33883,35988,37668,49652,52095,72917],"propertypath":[36793,37246,48128,55012],"rg16":[8457,44062],"overloads":[56706,68676,68890,69127],"programmer":[4555,6836,29906,33763,54119,74211,74351],"minmaxcurveproperty":[74233],"your_id":[4149],"kitchen":[9409],"semitransparency":[46766],"user_home":[1129],"example":[7,73,165,168,237,254,353,396,409,451,506,541,554,581,740,793,1042,1190,1239,1243,1276,1315,1428,1483,1505,1611,1679,1735,1761,1880,1912,1944,1950,1966,1996,2007,2050,2065,2189,2207,2211,2215,2239,2286,2427,2465,2518,2562,2628,2704,2778,2898,2958,3013,3121,3253,3308,3352,3466,3520,3569,3580,3675,3725,3776,3853,3879,3898,3957,3983,4033,4145,4184,4206,4254,4399,4459,4485,4539,4603,4654,4713,4752,4801,4825,4879,5032,5129,5162,5180,5269,5350,5499,5727,5737,5775,5809,5937,5990,6150,6235,6264,6286,6314,6325,6510,6678,6725,6758,6910,6943,6958,7033,7178,7231,7375,7549,7561,7566,7573,7620,7645,7752,7836,7927,7983,8036,8183,8412,8562,8611,8651,8872,8972,9155,9185,9264,9320,9351,9440,9536,9593,9718,9723,9768,9875,9987,10068,10107,10337,10406,10489,10585,10609,10651,10703,10719,10794,10852,11016,11074,11177,11244,11274,11297,11306,11423,11439,11462,11477,11519,11623,11775,12155,12307,12395,12490,12804,12846,12885,12990,13036,13215,13249,13261,13316,13392,13465,13579,13611,13667,13695,13808,13826,13870,13911,13965,14037,14087,14246,14323,14474,14560,14577,14681,14718,14795,14843,15003,15723,15844,17925,17956,18076,18113,18165,18225,18259,18454,18483,18539,18562,18633,18670,18730,18748,18756,18819,18828,18925,19005,19028,19056,19086,19108,19241,19271,19344,19358,19364,19408,19448,19454,19623,19945,20010,20048,20076,20130,20194,20242,20392,20419,20457,20571,20615,20637,20657,20771,20873,20924,21029,21154,21201,21302,21455,21607,21624,21640,21697,21856,21914,21964,21986,22015,22046,22061,22085,22189,22269,22466,23261,23377,23449,23502,23573,23616,23627,23713,23780,23884,24122,24169,24275,24456,24727,24747,24909,24943,25032,25095,25111,25171,25194,25289,25329,25381,25401,25460,25504,25669,25679,25697,25764,25929,25981,26079,26127,26128,26279,26304,26374,26446,26486,26497,26565,26572,26588,26597,26607,26647,26711,26717,26784,26807,26848,27060,27065,27124,27210,27325,27335,27342,27552,27615,27678,27738,27754,27813,27885,27924,27955,28052,28218,28266,28420,28480,28617,28678,28725,28875,28894,29105,29144,29154,29434,29485,29600,29695,29721,29765,29784,29825,29836,29863,29895,29906,29974,30001,30047,30064,30100,30142,30270,30312,30329,30351,30385,30541,30879,30916,31634,31652,31716,31745,31760,31765,31797,31838,31852,31875,32106,32136,32167,32225,32372,32609,32631,32650,32701,32729,32768,32864,32920,33069,33083,33091,33395,33405,33435,33474,33533,33573,33722,33777,33909,34155,34194,34221,34254,34335,34461,34595,34640,34672,34692,34760,34820,34884,34912,34928,34939,34994,35192,35240,35415,35478,35508,35613,35714,35806,35950,36040,36252,36330,36400,36444,36508,36633,36696,36745,36763,36792,36824,36977,37234,37318,37345,37499,37544,37618,37670,37700,37728,37958,38244,38289,38392,38466,38494,38516,38657,38719,38828,38850,38911,38989,39096,39137,39253,39356,39382,39468,39508,39659,39723,39756,39768,39819,39866,40204,40455,40563,40811,40828,40880,41160,41308,41331,41349,41417,41463,41554,41645,41783,41863,41876,41921,41937,41958,41993,42067,42117,42243,42255,42548,42783,42970,43019,43076,43087,43115,43209,43339,43592,43661,43690,43749,43807,43897,43947,44052,44097,44141,44172,44218,44234,44314,44330,44351,44368,44389,44505,44599,44633,44660,44693,44758,44822,44852,45055,45122,45213,45405,45419,45457,45531,45565,45627,45670,45862,45947,45985,46142,46534,46811,46831,47083,47165,47176,47904,47958,47991,48029,48055,48162,48170,48335,48364,48515,48529,48550,48875,48915,49043,49177,49290,49327,49404,49425,49454,49481,49511,49517,49565,49629,49638,49642,49687,49731,49737,49771,49821,49910,50025,50062,50126,50186,50288,50321,50381,50486,50513,50529,50541,50559,50596,50672,50684,50881,50939,50956,51013,51135,51169,51204,51234,51405,51426,51620,51788,51952,52225,52247,52494,52566,52761,52871,52921,53007,53106,53261,53717,53825,54051,54211,54224,54291,54400,54506,54553,54612,54649,54723,54745,54788,54809,54855,54873,54898,54909,54961,55061,55160,55231,55307,55367,55497,55554,55570,55642,55713,55807,55870,55916,55976,56042,56124,56210,56271,56325,56390,56473,56521,56590,56670,56734,56797,56980,57122,57287,57310,57335,57584,57665,57809,57880,57971,58002,58024,58037,58160,58190,58282,58418,58454,58484,58586,58652,58858,58999,59269,59558,59743,59838,59904,60138,60165,60227,60382,60497,60542,60616,60647,60672,60795,60879,60979,61188,61194,61302,61334,61449,61490,61547,61573,61592,61747,61938,61967,61979,61993,62006,62131,62194,62336,62493,62590,62641,62751,62838,63143,63244,63667,63697,63710,63720,63846,63863,63881,63896,63918,63937,63956,63989,64016,64141,64212,64339,64391,64400,64415,64435,64444,64470,64491,64515,64535,64574,64598,64613,64676,64701,64720,64733,64749,64797,64814,64825,64844,64862,64881,64918,64938,64957,64975,64988,65014,65025,65034,65049,65063,65088,65104,65119,65135,65148,65166,65222,65246,65270,65296,65315,65370,65395,65415,65434,65446,65460,65478,65492,65503,65514,65543,65558,65570,65590,65610,65630,65651,65668,65695,65698,65734,65773,65849,65999,66059,66115,66183,66239,66337,66365,66380,66440,66464,66598,66819,66843,66897,66902,66951,66967,67027,67090,67149,67176,67335,67461,67560,67587,67708,67720,68091,68249,68267,68286,68326,68353,68386,68442,68472,68498,68542,68566,68689,68811,68849,69040,69333,69439,69506,69512,69674,69747,69836,69877,69904,69990,70078,70094,70144,70191,70212,70236,70292,70332,70370,70598,70755,70773,70806,70881,70945,71014,71128,71204,71215,71323,71345,71370,71446,71469,71491,71568,71611,71644,71665,71782,71805,71872,71919,72017,72231,72297,72390,72475,72497,72643,72706,72773,72841,72844,72890,72935,72974,72996,73030,73133,73211,73248,73264,73395,73417,73448,73562,73675,73694,73772,73896,73917,74063,74160,74592,74660,74666,74800,74850,74868,74996,75033,75076,75107,75133,75290,75393,75417,75501,75741,75882,75919,76007,76071,76097,76331],"min12int2":[8472],"denoising":[22116,36598],"_mycubemap":[45127],"erasing":[51531,51569],"downloadassetpackasyncoperation":[520],"trivia":[53285],"movietexture":[10730,68085,72536],"ampersands":[63727],"lightremove":[38194],"correlationmeter":[4994],"tss":[54846,61522,63063,64382,64551],"exportbundle":[25932],"closely":[1895,2055,6059,8403,10079,18977,27754,28839,31688,32776,48599,48649,48913,49560],"london":[57142],"googleplay":[67204,67305,67413,67605],"alter":[4801,5017,5954,6314,7693,10699,13323,20967,22227,25178,28980,30145,34770,37558,37733,43534,44954,46484,46775,48234,49490,50526,50604,66752,68412,71018],"continuous":[195,1946,2179,4541,5037,7484,8162,8295,9180,10079,10205,11546,13057,13251,13692,13756,13876,15889,18219,18596,19030,21031,22458,27060,27813,28625,31086,32701,32865,33166,35276,36308,38558,38588,48338,50969,69785,69845,71469,72722,74163],"scores":[17356,52095],"previewer":[1877],"floodfill":[51534,51570,51604],"autocorrection":[39614],"tabclassname":[57217],"fix":[1003,2702,3861,4254,4437,4479,10772,11916,12180,12367,12555,13463,18101,18934,19220,26571,29470,29922,30101,30872,34306,34392,34511,39953,47710,49557,50019,52462,52769,53452,66058,66755,68929,69172,70372,70872,71018,73024,73306,75017,75147],"removedpackage":[69639],"proven":[54123],"uxmlname":[57306],"yesbased":[37795],"assembly_path":[21029],"setparent":[24730,34237],"spaced":[10270,14607,32731,48364,52160],"visual":[246,1903,1990,2211,2216,2235,2334,4519,4876,5829,6150,6767,6810,6896,6936,7179,7369,7645,8499,9894,9964,9999,10070,10491,10633,11291,11403,12294,12585,12888,13247,13499,14494,14581,14756,14778,14781,14826,14922,14927,14933,14938,16375,16389,17539,17642,17748,17756,17973,18366,18570,19306,19649,20601,20712,20811,22024,22116,22613,23600,23668,24466,25435,26799,27119,27296,27815,28374,28880,29714,29891,30237,30534,30996,31103,31481,31661,31688,32704,32776,32923,33065,33538,33637,33842,34638,35087,36081,36633,36694,37405,37480,37556,37639,37685,37733,37757,38285,38405,38503,38680,38871,39603,39818,40145,40658,42366,43133,43177,43491,43618,44302,44625,45053,45618,47193,47985,48601,49155,49179,49453,50209,50599,50661,51098,51824,51864,51962,52249,52477,52744,54157,54304,54543,54601,54706,54787,54799,54848,54873,54893,54914,55066,55165,55238,55313,55509,55557,55653,55714,55807,55975,56044,56102,56313,56330,56397,56596,56692,56740,56803,56986,57341,57555,57598,57628,57808,57852,58015,58018,58129,58190,58461,58590,58738,59003,59275,59501,59554,59723,59749,60137,60390,60525,60540,60610,60637,60677,60771,60879,60979,61302,61423,61573,61653,61753,61954,61976,62108,62192,62483,62742,62840,63105,63123,63131,63841,63876,63972,64033,64082,64317,64380,64641,64696,64745,64889,65031,65194,65386,65490,65696,65698,65723,65732,65793,65884,65902,65923,65978,66012,66194,66414,66877,67858,68006,68926,69169,71661,71872,71999,72007,72011,72103,72171,72223,72461,72497,72728,72820,72829,72842,73290,73898,74136,74244,74457,74498,74516,74628,74773,74808,74814,74831,74860,75226],"compensates":[14969],"ipointeruphandler":[49890],"additively":[3444,5338,26711,27082,27124,30219,39186],"slider's":[39985,63377],"sprouting":[52230],"unwrapped":[10521,21711],"isdirty":[61063],"pixels":[84,1569,4296,6381,6443,8081,8632,8692,8822,9258,9634,9963,10206,10651,11719,12116,12359,13202,13708,14027,14135,14285,14318,18354,19314,19681,21755,22870,23816,24776,25261,26991,28179,28877,29809,30362,34293,34503,36679,37675,38316,38346,38406,39406,39518,42010,42364,42793,43113,43154,43177,43574,43970,44133,44345,45569,45772,45851,46322,47088,47307,48008,48373,48515,49849,50036,50060,50128,50498,50669,50691,50888,51137,51235,54320,57626,58307,58387,58443,59890,61530,62015,62229,62838,63737,64141,74642],"orthonormal":[5221],"“gap”":[33436],"interacts":[1799,4534,7893,7951,7959,8153,8162,8263,8373,8765,9024,10554,10576,11814,12721,13641,13773,13789,13890,14546,24601,24621,25624,32775,34280,36444,50290,50437,51089,51416,53763,57969,58631,63965,65926,73091,73471,73917,75262],"yaml":[4672,6712,9759,13953,15041,21639,39935,68492,76331],"land":[5040,50323,74552],"schema":[19670,57329,58069,65867,70011],"systematically":[14851],"shortest":[2050,2356,32271],"commutative":[6071],"m_instancecounter":[60594,62173],"clearer":[26258,31008,31368,49611,49628,49832,58388],"devicepixelratio":[73251],"driving":[5162,10085,18485,29879,32923,38405],"exists":[323,465,2001,3243,3532,4975,5769,6468,8078,9345,11175,12110,13818,20637,21173,22999,23483,25545,25911,26645,26669,28464,28612,29434,30901,31008,31368,32170,34953,35279,36099,39922,40225,42064,42142,45744,49263,49421,52067,54657,58863,60373,66054,66115,67055,67531,67759,68542,68968,69215,69816,70135,72201,75654],"__square":[14808],"id":[220,1468,2472,2539,2553,2640,3802,3840,3976,4040,4116,4155,4169,4234,4384,4485,4672,5773,6060,10812,11056,11077,11842,12157,15041,17092,21012,21659,23257,23502,24018,25096,25750,25916,26168,26259,28044,28115,28189,28281,28447,28774,29159,30382,30475,30539,32304,35032,35383,35649,35817,36098,41028,41225,41330,41505,41697,45808,50056,50147,50354,50430,51584,52248,52782,52843,52896,52967,53350,53756,53812,54012,58344,59982,61468,61908,63934,65525,66170,66853,66995,67026,67086,67162,67247,67387,67538,67550,67664,67728,67784,67875,68872,69107,71193,71320,71447,73396,73741,73955,75361,75429,75485,75764,75933,75946,76078],"bnd":[53664],"256x128":[9274,51238],"palevioletred":[63618],"explorer":[1128,2485,3852,3887,13997,18949,20759,22354,26715,26951,27104,27785,38233,48864,70106,70273,70344,71704,72176,72384,73297],"furniture":[9136,22563],"today":[22426,27510,34361,72791],"openvr":[68788,72904,76102],"gatherdependenciesfromsourcefile":[3770],"positionasuv1":[39712],"script's":[21298,38944,50289,52566,72243],"polish":[37424,53639],"passphrases":[70101],"\\download\\unitypackages":[19628],"curently":[44086],"vertexlit":[9899,42243,42370,43201,44464,45300,45555,47755,52488,72752],"yeschoose":[37881],"valve":[68789,72954,75305,75440],"atan2":[10453],"shader_target_glsl":[43945],"_customrendertextureheight":[8961],"reconnect":[646,50355,50432,67703,68069],"grid":[167,2253,4298,7908,9234,9455,9531,10082,10109,11623,14522,15293,16020,19449,20548,20756,22932,23667,23951,25524,31703,32665,34808,35061,37500,39537,41616,43222,48372,50479,50946,51090,51121,51137,51156,51164,51181,51235,51294,51349,51438,51528,51558,51594,51602,51723,51820,51842,51851,51867,54257,64973,64986],"audiobuildinfo":[15314],"small":[1708,1822,1832,1915,2327,3478,5150,5284,5920,6068,6126,6265,6837,7025,7327,7496,7579,7815,8086,8210,8306,8568,8872,9220,9463,9669,11459,11510,11606,11771,13667,13747,13799,14006,14288,14681,14965,16527,18899,19075,20380,20450,20667,22139,22225,22303,23462,24792,25284,25599,26074,26263,26451,26923,27210,27931,28404,29141,29158,29835,29878,30175,30185,30270,31661,31916,32360,32414,32609,32848,33098,33407,34778,35126,35735,35799,36093,36511,36568,36695,37617,37639,37667,37688,37700,38346,38413,38672,39358,39671,39724,39729,39764,40175,41261,41679,41795,41898,42178,42969,43022,44936,45305,45592,46873,48162,48611,49478,49560,50361,50941,50996,52099,52250,52601,53308,54263,54388,54722,58398,59176,63239,64155,64341,65849,65951,66879,68215,68258,71872,72255,73022,73615,73639,74148,74899,76095],"utensil":[9397],"remove":[229,511,1717,2267,2391,3895,3923,3957,4308,4428,4485,4654,4829,5106,5262,5315,5353,6128,6352,6401,7022,7325,7391,8359,9347,9491,9604,9796,10010,10060,10272,10340,10574,10723,11359,11417,11807,12227,12303,12747,12787,13847,14498,14609,14661,14965,17045,18206,18575,18993,19020,19038,19164,19239,19286,20204,20394,20640,21405,21588,21676,21979,22004,22018,22693,23395,24523,25066,25465,26090,26621,26659,27638,27984,28473,28781,29136,29759,30245,30532,30861,30917,31601,32064,32323,32754,32862,32919,33690,34273,34425,34481,34890,34949,35137,35692,35895,36470,37669,38192,39089,39136,39309,39638,40226,41356,41436,41564,41695,41728,41944,43009,43227,43765,44307,44573,45037,45592,48262,48379,48587,48639,48665,49194,49365,50404,50453,50585,51094,51149,51194,51603,51910,52528,52571,52769,54013,54368,54427,54635,54683,54749,55134,55216,55987,56808,57578,57888,58336,59144,60323,60542,61401,61907,62066,62590,62853,63683,64153,64369,65422,66054,66520,66663,67014,67055,67531,67659,67856,68536,68545,68651,68897,69135,69398,69502,70260,70347,70386,70970,71036,71136,71205,71221,71389,71416,71517,71594,71627,71774,72270,73442,73817,75001,75055,75083,75134,75294,75603,75842,76251],"3dsmax":[41752],"setactive":[9338,18309,19040,24831,33116],"sand":[25284,50519],"maximums":[9466,12885],"_examplename":[45074],"particularly":[257,2769,6138,6323,8496,8893,11466,18951,19081,19286,20438,22798,24768,25492,26800,27268,30376,32284,33377,35769,35795,36459,36525,37501,38462,39906,47306,49437,49631,50551,50678,51976,52530,68918,69159,73263,73310,75829],"“destroyed”":[25597],"audible":[4866,5120,7505,7615,7661,12666],"visualelements":[56730,57140,57845,61668,62703],"'collider":[8001,12702],"iuxmlattributes":[54527,57330,58062,60907,61007],"organisation":[30423],"vertexlm":[42399,45191],"commercial":[234,3013,4025,22559,33573,53210],"wheel's":[14959,15015],"world's":[2989,42706],"swings":[7253,9686,33606],"numberofobjects":[25556],"ids":[3845,3895,5660,6061,15042,26257,28211,30560,40794,50056,52248,52966,53350,53965,61908,67027,67086,67203,67304,67412,67566,67800,73557,74358,75434,75503,75978],"pings":[35170],"chart":[2211,2216,2235,7179,10655,22151,26991,27090,35265,35368,35470,35581,35624,35692,35902,35926,35969,36020,36119,36173,36206,36297,36355,36434,36519,36569,36678,53487,58030,58578,60670,63126],"leftopenamount":[75579],"decreasing":[7447,7464,14149,14474,22730,24164,26665,32136,38388,44883,71105],"particlesystemforcefields":[31818],"you’ll":[3255,3379,3465,25549,28753,28771,66228,68602,74725],"azerty":[9772,69333,69439],"driveforce":[21162],"asyncbufferresized":[35765],"renderstatsscript":[36405],"unity_embedded_linux":[33794],"mentally":[71969],"flipbook":[14018,14078,14263,37401,38116,42804],"originals":[2249],"unity_use_rgba_for_point_shadows":[43968],"parameters":[1429,1789,1887,1925,2005,2184,2230,2238,2252,4740,4792,4825,4881,5029,5258,5733,6043,6121,6263,6283,6320,6756,7288,7930,7983,8792,9974,9985,10653,10788,12068,14717,15844,20425,20972,21029,22142,22353,23394,23450,24436,26263,26953,27013,27125,27830,28867,29105,29284,29682,30237,30274,31650,32731,33373,33424,34164,34714,35088,36680,37142,37580,38820,38913,40064,40893,41189,41761,42352,42788,42809,44427,45002,45165,45417,45667,45859,46369,46759,46975,47067,47933,49088,49446,49661,49836,50499,51588,52166,52216,52551,52779,53103,53939,54054,54219,55990,56097,60434,61528,64955,66129,66314,67974,71526,71805,71921,72296,72668,73409,73553,74198,74453,75933,76092],"zfailoperationfront":[45863],"istore":[67280,67572],"nesting":[24392,30035,49828,54147],"popularly":[8085],"androidprofiler":[35859],"popup":[4434,6265,13362,30200,30229,30632,31679,32676,48102,53811,56548,58910,59684,59872,63343,64261,65025,65458],"requiredinterfaceattribute":[28593],"unity_output_depth":[44027],"straddles":[10108],"quiet":[1920,7493,7514],"m_aoamount":[76391],"normalspecular":[42304],"asteroidbecause":[41473],"knight":[59378],"texturepreviewelements":[55063],"purchasingunavailable":[67277],"unity_linux":[72649],"snow":[13899,41906,50519,63641],"playeraccounts":[17435,31445],"'failed":[70360],"fundamental":[6778,18481,22012,22673,37344,37525,38523,40169,44757,49170,62800,64376,66330,67026,72289,75398],"deleteasset":[3619,3679,68970,69217],"vulkanios":[23551],"p_smo":[40757],"m_tabindex":[57323],"translate":[1937,3005,5421,5565,6212,6748,9830,11844,21159,22547,24912,29643,29902,44281,51967,52511,53078,61863,62194,62838,75089],"serializedobject":[20802,38933,40496,54989,55106,55231,55397,55508,55550,55556,56076,56182,56246,56306,56371,56598,56699,58739,61981,64795],"mylist":[6161],"rad":[6279,6308,38492,62201],"massively":[8402],"going":[1972,2053,3247,3468,8286,8972,11916,12367,12555,19220,24769,25066,26203,27109,30042,34306,34392,34511,39150,39322,39492,40541,47752,51119,51344,52229,68626,69771,69812,74418],"visibilty":[24657],"jquery":[63132],"oneshot":[36012],"ttf":[6714,9247,13997,58370,58675,63700,63985],"summarised":[66185],"proposed":[39628],"onassetsmodified":[19553],"relying":[36570,50652],"showdefaultwindow":[55387,56236,56294,56362,56458],"mini":[2839,8066,23550,29879,37324,52563,63246,66811,66836,66872,66891,66903],"r8g8b8a8_snorm":[8462],"cullingparameters":[49089],"yxz":[9545],"swaps":[8859,9127,18501],"templates":[572,986,2998,6338,6922,11994,12334,16438,18050,18430,18432,18457,22567,23474,24605,31591,37518,38945,39023,39095,39179,53071,54573,54747,55307,56730,57618,57801,61387,61759,61955,65289,65912,68899,69137,69359,69463,71217,73151,73251,73906,74172,75037],"tilepaletteactivetargetspopup":[51106],"sleeps":[38559,38589],"metadata":[982,3087,3619,3838,3870,4204,4217,4250,4426,4515,5351,5606,10725,12002,12659,18715,19160,20237,25113,26078,27699,27950,28103,28575,35089,35385,36112,36234,40271,48695,49770,52849,53146,53297,66683,67062,67173,67270,67548,69514,69693,69729,69849,70027,71082,72385,75259,76071],"rootboneindex":[75576],"infos":[75747],"fractional":[2010,39750,47609],"d24_s8":[68922,69165],"pickability":[24577,39141,71989],"font_normal_size":[63238],"rightpane":[59074],"turbulent":[31836],"tray":[70103],"miscellaneous":[15022,19018,22137,33783,42995,46796,52591,72750],"brazil":[53640],"mgc":[58469],"sourcefile":[48112],"setpixel":[5946,56780],"beginpath":[58489,60720,60968],"sm5":[30306],"mycomponent":[18741],"tinted":[2284,29540,31907,38089,51148],"cached":[2596,3247,3301,3446,3585,3733,5024,22125,22788,25096,25104,25970,30893,31635,33231,38850,39965,40029,40119,48700,50686,66570,67364,68606,70340,70505,73205,73623,73899,74153],"tunnel":[609,5162,18229,35860,37684],"seterrormaterial":[41924],"m_modifications":[48128],"samplermaintex":[45219],"characterlist":[54325,59423],"dynamicgi":[29553],"destructible":[6840,55243],"namespace2":[66734],"maximum":[1211,1655,2400,4149,4356,4902,5217,5498,5954,6266,6294,6314,6381,6443,6689,6834,7296,7657,7690,7709,8309,8528,9008,9163,9322,9466,9704,9734,9905,9966,10134,10406,10560,10655,11102,11210,11490,11514,11537,11603,11751,12404,12880,13022,13185,13457,13564,13758,13863,13925,14075,14285,14501,14558,14950,14994,18078,18513,18597,18977,21034,21583,22088,22235,22774,23270,23520,23964,24489,25265,25994,26057,26678,26986,27602,27737,28179,28836,28886,29302,29364,29733,32091,32112,32171,32223,32681,33099,33599,33659,34998,35783,35947,36011,36031,36334,36479,36596,37653,37675,38491,39243,39263,39611,40016,40788,40860,42221,43160,43999,44637,45076,45255,45521,45745,46927,48620,48649,48683,50094,50186,50436,50560,50969,51025,52035,52212,56189,58286,58411,59165,60649,60802,61531,64955,65937,66157,66383,68309,68461,68799,71795,71973,72497,73054,73205,73623,74435,74642],"acne":[43176,44625],"renew":[53445,67732],"floats":[4884,13022,14734,20344,20967,21789,34681,45082,45145,75557],"xrdisplaysubsystemdescriptors":[76071],"transferring":[22738,70448],"\\ngpu":[20508],"rightmouse":[60460],"contextual":[2505,2601,30824,31765,33510,41663,43219,49491,51414,53921,55972,57990,60221,60427,65900,71704],"app\\contents\\frameworks\\mono\\lib\\mono\\unity":[52648],"#daa520":[63561],"inr":[53661],"0x0018cb8c":[74556],"m_meshesneedinggeneration":[75843],"that’s":[3414,3566,12409,18314,19128,24923,25849,26441,35714,49454,53190,53697,68935,69760,69796],"ignore":[389,1789,2180,3588,6155,7061,7620,8134,9615,9858,10568,10657,12862,12919,13598,14301,14960,18330,18760,21029,21589,22674,23270,24933,25863,31816,32225,32477,32727,32763,35697,37345,38856,39310,39530,39652,40001,40057,41374,41463,46097,48146,50503,52012,53454,57833,65887,66721,71565,73050,74335,75146],"silly":[35006],"unpredictably":[73486],"anti":[363,10010,12881,13203,23449,24501,24974,25858,34861,37955,38297,38347,43654,44080,44838,51333,53810,54165,73453],"arrays":[291,2343,3493,5498,6106,8367,8646,11001,11612,14008,20737,26540,33242,33424,39872,45078,45149,45484,47126,48122,50032,58878,61072,66036,71959,73448,73556,74151,74728],"raytraced":[37855],"dissipates":[32632],"determining":[5216,25884,26809,36680,40294,44133,44165,49181,49531,50600,52243,55909,68513,70376,71372,75765],"visualising":[32848,65925],"outdated":[3769,6057],"meets":[3975,13757,18730,25238,32755,44688,52491,64511,64610,64808,64914,65312,65537,65552],"maya":[165,16345,21485,22526,25147,25207,29765,31154,41752,71797],"dcc":[38485],"fulfilment":[67099,74036],"retrieve":[1575,3039,4653,5239,6182,9365,12988,21031,21885,25868,25898,26599,29586,31602,32771,35269,35552,37065,40372,41202,49738,51726,53191,53882,56113,56725,58923,60137,63220,65696,66556,67351,67624,68107,68317,68347,69594,70236,70594,70867,72053,76298],"scrolls":[37479,49897,54900,57031],"detailed":[564,3511,3784,4352,4881,5176,5969,6370,6427,6475,6762,6920,7113,7865,10261,10651,11375,11643,12895,13247,14333,14598,14727,14775,17938,17999,18151,18399,18469,18539,18675,21081,21865,22918,25144,26006,26582,26678,27063,27754,27757,28168,28961,29044,29406,29719,30244,32701,32742,33393,33615,34706,35004,35279,35379,35633,35691,35887,35911,35937,35960,35977,36087,36207,36338,36365,36464,37511,37644,38272,38341,38435,38533,41861,42449,44430,49390,49522,50599,50620,52882,54143,56710,59592,62935,63118,63689,63701,64138,66184,67088,67280,67824,70376,71896,72394,73176,74631,74791,75192,75239,75549],"streamingmanager":[15344],"infrequently":[27678,54123],"product’s":[67163,67726],"two's":[8091],"setasynccompilation":[4613],"survives":[52326],"yeswindows":[38183],"recompiling":[52320,52576,68951,69196],"vobjectposition":[44887],"pulldown":[63471],"ps4":[3585,27938,38322,44891,45438,72612],"combinedependencies":[26381],"#f0f0f0":[63313],"aagjyzbhma4ga1uddweb":[69937],"getsubscriptioninfo":[67724],"brg":[5341,5350,5688,5690,5724,5732,5763,5807,20237],"buffername":[23258],"rendermesh":[4609,23400],"frames’":[29213],"independently":[323,1989,3507,8159,8561,11271,13645,14733,24517,26121,27263,32189,32215,32339,32605,32628,35337,37825,38463,39552,39879,42105,48501,51046,55923,72942,75006,75607],"extrapolate":[7128,13247,22658,38502,38566,38596],"downloadhandlerscript's":[68212],"charting":[27020],"rp":[6850,17106,17114,17122,18808,30991,31122],"llvm":[16137,52737,73653],"tilemap’s":[51780],"m_bounces":[76386],"orintel®":[37919],"2em":[58704,61969,62042],"#rtitle":[35111],"subtly":[27209],"setstatic":[1414],"enablevertexstreams":[32923],"mytoggle":[56083,65375],"consumables":[67260],"overhead":[4665,4845,5961,6126,6844,7482,7870,10579,11527,11598,12898,15835,18226,18300,20381,20403,21029,22544,26040,26056,26510,28022,28278,29133,29242,29442,29863,30892,31717,33083,33416,34195,35138,35691,35799,35990,36034,36172,36464,36784,37478,37684,37706,37728,38318,38336,38346,38404,39882,40274,43121,43172,48354,48593,50321,50435,51052,51215,52099,55512,58378,62758,64320,66159,68131,70714,72204,73689,74602],"winrt":[72084,74862],"popping":[10357,38394,50008,50615],"getnamefileidpairs":[48434],"playerprefs":[74585],"uta_agent_sys_mem_bytes_used":[66652],"flamethrowers":[32196],"volumetric":[6910,14073,14248,37917,74289],"ik":[1948,5267,7014,7159,7862,13812,18751,21339,22505,25623,29112,29136,29736,38653,74192],"m_enabled":[26752,76482],"taa":[34861,37951],"asteroid":[40791,41473],"mobilebuildname":[74080],"undercuts":[15839],"backgroundfetch":[12222],"m_safety":[26149,26247],"simulateasktobuy":[67397],"myobj":[22217],"virtualtexturing":[50004,50148],"overrides":[794,1562,1855,2039,4737,4860,6377,6438,7969,8173,8270,8388,8773,9038,9490,11049,12732,12896,13263,13538,13712,14225,14314,14508,19043,19318,20010,20608,20626,21068,21987,22927,24593,28175,28963,28994,29041,30039,32051,34881,34904,34927,34944,37143,38570,38600,38634,38841,39336,39614,40155,40705,42050,42142,43538,44205,45145,45869,48597,48910,49183,50681,52993,53097,55579,55857,57310,61354,62009,62875,63086,63825,64373,67194,68533,68540,70200,70294,70340,70963,71890,71933,73179,73287,74051,74638],"comparison":[5994,6068,6804,6920,6937,9994,10112,16919,18243,20636,22109,24503,27075,27189,27217,27270,33087,34911,36576,37637,37745,38263,38303,43169,43181,43575,45249,45869,47063,48146,53523,54105,61201,62775,65898,65977,72319,74237],"sizechanged":[74720],"arranged":[75,2001,2192,9137,9218,10075,14254,18897,22818,24215,24390,30141,30581,36000,51820,52094,52229,71772,71970,72713],"begincontextrendering":[40165],"networkconnections":[11001,11092,66036],"fasttracker":[4787],"ratios":[1592,8125,11635,11744,12310,22041,22139,24771,29363,33542,39444,50035,50138,73320],"loaded":[2232,3247,3299,3307,3348,3468,3486,3834,4652,4773,4960,5952,7482,8782,9399,9517,9982,10712,12900,13964,16564,18018,19231,19511,20276,21307,24165,26707,26908,27679,30077,30224,30897,33687,34417,34594,35379,35779,35945,36201,36754,38280,39160,39913,40099,40690,41719,41871,42060,48162,48180,48536,48546,48578,48702,50973,51052,51369,54398,54590,57764,58622,66253,66823,68974,69221,69861,70175,73173,73235,73613,74567,74741,75022,75242,75984,76071],"constraints":[3032,6782,6957,7010,7231,7372,8286,8546,9181,9316,9746,10391,11433,11537,11628,12750,13176,13256,13271,13288,13575,15000,18154,18229,18421,23062,24670,26258,26568,26585,31085,33583,34587,36351,37618,38567,38597,40284,44875,60652,71026,72672,73600,73897],"bgimage":[24328],"generatepropertybagattribute":[36786],"propertyfield":[20698,20805,20960,40497,55001,55242,55495,58744,59596,64526,64634,64934,65048,65366],"disposedownloadhandlerondispose":[68088],"packagemanifestimporter":[6704,11432,15357],"packaged":[1300,4559,14933,14938,66478,69686,72184],"nwqxmwizzmyynjk0njc2ngywmdu0zta3ztk3yja2zda":[53108],"_off":[43071],"texcoor0":[1681],"tier":[255,9447,23542,30401,30478,30502,42172,42189,42988,45428,48940,67120,67214,67659,71879],"charportrait":[59426],"characteristic":[22343,27507,75590,76137],"factors":[120,4561,5160,7187,8434,10383,14703,18509,20419,22178,25998,29749,42358,43752,46009,46782,46824,47112,50006,50171,50374,52532,63807,69814,72939],"disposesentinel":[26166,26252],"modular":[6942,68458],"insideunitcircle":[13024],"automatic":[205,2717,4558,4776,5962,7965,9501,10127,11103,11624,12157,12728,13130,13241,14289,14542,17045,18084,18515,19134,21029,22127,22506,23585,23700,24274,24509,26982,29783,32173,33008,33071,33076,33086,33388,33427,34489,34862,35126,35726,35931,36093,38090,38487,38909,39816,39852,40274,46760,48363,48566,48634,48868,49734,50058,50147,51361,55625,56101,58445,58732,61196,62797,66417,66458,68697,68926,69169,70152,70520,71024,71813,72399,73253,73442,73614,74516,75133],"transcendental":[45582,72344],"’":[695,34523,48217,48626],"usepass":[21743,37972,42142,42683,43039,44591,44771,47155,47752],"serialize":[5769,6046,9079,16667,17185,30894,39872,40689,66408,68916,69157],"codeless":[52941,52953,67068,67161,67642],"vcam":[31276],"randomize":[13058,31836,32401],"cameranearplane":[14902],"winbtn_win_restore":[63501],"necessarily":[7117,11520,11875,12888,26690,27684,28753,30141,30868,33579,35738,45510,66116,70295,70326,70438],"inadvisable":[6208],"highlimit":[64962],"unlitreflective":[45558],"shurikentogglehovermixed":[63485],"speeds":[24977,31743,32091,32341,32607,34939,49358,51976],"kunityxrinputfeaturetypebone":[75498],"bresenhams":[51458],"abstractpurchasingmodule":[67581],"callable":[66115],"exampletagname":[45987],"conspicuous":[32702],"_fragment":[44551],"get2dlightcolumns":[26757],"newposition":[40638],"tesselation":[38024,46877],"assurance":[71162],"supportsasyncgpureadback":[19775],"callnativemethodimplementation":[34702],"styletranslate":[62288],"macros":[1704,4908,5351,8421,14032,20256,41802,41897,42957,43354,43914,43932,44053,44941,45042,45229,45616,47784,72997,73923],"m_lockatlas":[76395],"aliasname":[40877],"mixture":[5201,7771,29360,49510,62833],"prepared":[11685,25939,26005,26597,35748,48578,66992,67779,72280,75617],"enablekeyword":[42096],"mainobb":[52785,53117],"icancelhandler":[49903],"responsibilities":[982,12002],"proper":[2614,4876,5845,6834,14728,17000,18081,18932,26070,27098,40608,44270,46766,50730,59191,73312,73838],"unbind":[55404,55580,56216,56313,56376,64888],"unity_accelerator_debug":[66628],"inverted":[5221,8555,41717,43819],"0x006267d0":[52561],"unityupgradable":[2702],"leftarm":[18091,71782],"transition":[2012,2067,2202,2243,4799,4860,5065,5116,6703,7144,7913,7929,10329,13219,13815,13899,14717,14778,21332,22475,24790,30052,31379,39389,39476,39607,39744,39806,39821,39981,40073,46802,48319,49449,49662,50464,50599,50693,54169,54208,55863,57989,58407,61851,61984,62334,62496,62584,62639,62739,62835,63713,71108,71879],"'ieventsystemhandler'":[29423],"yesterday":[53521],"metadatavalue":[5468,5613],"diffs":[35107],"expressed":[5452,8864,22987,32274,32725,39973,41184,47455,56111,58147,62838,63741,72291],"left+clicks":[719],"lightblue":[49866,63574],"autorunplayer":[458],"coexist":[7784],"cullinggroups":[6148,18570],"lookups":[6068,68520],"‘playableoutputextensions'":[34163],"__three":[14805],"positioned":[5032,7211,9274,9627,10091,12713,13100,24297,24732,24900,54128,63964,72521],"baseanimationtrack":[15110],"6666666667reateview":[35534],"windowid":[24028],"ineligible":[27696],"obbtype":[52778,53117],"emissives":[26760,26953],"kunityxrinputfeatureusagegrip":[75651],"attenuations":[5239,36006],"depthslice":[14029],"mousedelta":[60392],"value":[84,122,198,296,1036,1107,1158,1409,1560,1655,1771,1886,1919,2007,2050,2178,2309,2328,2397,2429,2745,3293,3351,3799,4164,4458,4671,4823,4902,5216,5462,5607,6144,6266,6314,6344,6381,6441,6498,7022,7163,7297,7364,7496,7526,7534,7548,7560,7592,7601,7612,7632,7641,7654,7660,7786,7907,7940,7968,7990,8009,8031,8115,8131,8195,8245,8311,8386,8509,8590,8858,9010,9032,9171,9275,9301,9491,9536,9648,9693,9740,9769,9874,9948,9996,10116,10230,10341,10398,10437,10465,10493,10587,10651,10740,10811,11044,11353,11382,11482,11508,11536,11600,11648,11678,11736,12108,12278,12524,12862,12896,12970,13021,13133,13164,13243,13388,13457,13570,13601,13665,13679,13708,13757,13797,13808,13826,13836,13863,13913,14135,14224,14318,14474,14501,14559,14581,14669,14718,14852,14949,14988,15035,15818,18078,18113,18260,18506,18568,18792,18977,19160,19346,19359,19685,20086,20130,20237,20457,20571,20670,21034,21453,21587,21752,21933,22153,22212,22341,23264,23466,23498,23543,23710,23932,24193,24403,24474,24489,24517,24588,24671,24785,24983,25093,25124,25221,25540,25679,26092,26108,26191,26324,26404,26464,26662,26788,26841,26985,27099,27131,27288,27540,27567,27591,27610,27738,27815,28103,28179,28471,28697,28836,28871,28885,29102,29131,29282,29346,29488,29618,29702,29863,30164,30241,30638,31642,31708,31792,31813,32078,32105,32164,32262,32390,32660,32682,32724,32776,32853,32910,32922,33072,33168,33423,33659,34042,34220,34408,34678,34884,34912,34994,35354,35410,35519,35695,35818,35931,36031,36223,36303,36444,36588,36679,36772,36806,36853,37001,37244,37620,37668,38333,38492,39240,39291,39350,39483,39610,39650,39748,39774,39819,39836,39880,39977,40076,40456,40569,40744,40842,41173,41469,41520,41777,41801,42133,42336,42390,42767,42793,43154,43183,43359,43571,43654,43736,43810,43947,44053,44107,44144,44175,44241,44345,44445,44599,44636,44767,44787,44851,45024,45048,45145,45255,45319,45433,45455,45516,45623,45702,45851,45939,45962,46369,46771,46922,47072,47607,47948,47961,47994,48032,48123,48281,48597,48649,48691,48884,48988,49185,49465,49468,49510,49549,49613,49628,49636,49714,49840,49965,50376,50409,50478,50528,50536,50552,50559,50572,50611,50669,50688,50881,50945,50969,51013,51137,51173,51182,51221,51228,51235,51390,51954,52146,52218,52227,52358,52551,52792,53525,53898,54243,54564,54680,54736,54788,54800,54886,54979,55060,55547,55557,55713,55807,55912,56042,56183,56219,56318,56381,56447,56501,56607,56692,57044,57289,57303,57846,57898,58066,58248,58284,58645,58845,59504,59670,59729,59837,60061,60382,60695,60778,60881,60982,61359,61451,61540,61742,61816,62071,62113,62214,62594,62665,62765,62838,63506,63663,63697,63723,63830,64095,64215,64398,64413,64470,64498,64511,64528,64563,64610,64653,64676,64718,64808,64844,64862,64896,64914,64944,64957,65086,65102,65117,65148,65187,65220,65244,65276,65296,65368,65460,65478,65567,65587,65607,65627,65648,65746,65756,65931,66133,66394,66522,66667,67604,67730,68210,68247,68264,68410,68509,68555,68671,68905,69145,69301,69356,69407,69835,69947,69996,70076,70111,70142,70200,70267,70389,70731,70814,70906,70985,71014,71366,71616,71877,71943,72053,72231,72319,72520,72722,72934,73002,73349,73417,73555,73702,73926,74049,74260,74496,74556,74642,74691,75249,75426,75508,75766,76040,76201],"upload":[933,1107,1181,1331,1706,2834,3346,3881,4129,4168,4192,4287,4362,4427,4452,4464,5456,5601,8700,12043,12903,14114,16212,17062,17488,27694,28129,28192,28283,34245,34328,34452,35765,36395,52771,52826,52912,52953,53082,53292,53843,67088,67215,67237,67268,68263,68352,68393,68441,68483,72178,73192],"c3y":[5391,5535,20362],"muscles":[7168,7829,18061,29890],"marginleft":[57105],"sigsegv":[1059],"delegate":[2503,2632,6135,10943,18558,18593,28500,34723,36845,38828,39213,52651,66928,74216,74739,75785],"layertoadd":[26619],"headlight":[18354],"tr":[53652],"renewing":[67624,67740],"pointerevent":[60359],"notoriously":[6036],"retention":[22341,53511],"quality__":[14824],"d_clear":[63441],"target":[263,273,366,455,603,628,673,711,890,920,1087,1326,1483,1491,1556,1657,1768,2172,2956,3252,3585,3804,4559,4861,4959,5092,5413,5557,5951,6349,6392,6871,7198,7294,7485,7685,8058,8526,8920,9180,9262,9694,9733,9761,9786,10160,10392,11254,11272,11295,11734,12213,12296,12698,12958,13166,13193,13563,13692,13713,13837,13857,14029,14277,14731,14789,14834,14953,14993,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16564,16589,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17092,17113,17118,17129,17145,17163,17179,17198,17215,17232,17249,17263,17277,17291,17306,17321,17336,17351,17364,17379,17393,17407,17419,17431,17446,17465,17483,17499,17517,17533,17542,17556,17571,17586,17601,17619,17637,17654,17672,17678,17693,17708,17735,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17912,18131,18230,19052,19096,19110,19128,19133,19173,19269,19278,19626,19635,19651,19990,20226,20246,20450,20571,20785,21052,21164,21487,21697,21841,22040,22217,22543,23270,23452,23498,23561,23619,23625,24556,24630,24930,24944,25207,25477,25635,25734,25819,25841,25911,25928,26593,26925,27114,27127,27540,27638,27710,28083,28152,29072,29144,29345,29392,29420,29463,29530,29561,29825,29849,30008,30292,30886,30951,30997,31240,31374,31488,31870,32115,32316,32950,33395,33411,33782,34385,34675,34715,34830,34907,35031,35219,35690,35790,35999,36031,36203,36482,36600,37467,38287,38324,38358,38430,39597,39720,39831,40204,40555,41723,41999,42347,42431,42958,43027,43692,43727,43884,43934,44096,44133,44298,44389,44562,44870,44982,45417,45447,45577,45718,45911,46829,47088,48128,48204,48745,49033,49290,49395,49720,49737,49756,49892,50014,50056,50087,50147,50320,50393,50537,50653,50660,50965,51080,51103,51194,51261,51419,51495,51529,51558,51602,51985,52798,52915,53187,53419,53786,53996,54819,55072,55498,55652,55721,55817,55912,55980,56637,56881,57437,57565,57817,57852,58021,58194,58647,59531,59730,59748,59824,60213,60391,60562,60635,60789,61524,61921,62128,62613,62822,63833,64026,65984,66116,66492,66530,66679,66840,66929,66975,67045,67755,67858,68058,68246,68283,68323,68350,68382,68434,68541,68720,68950,69195,69512,70070,70116,70137,70910,71248,71682,71755,72133,72143,72181,72254,72314,72445,72503,72616,72732,72849,72904,73159,73245,73705,73960,74042,74276,74623,74734,74762,74810,74920,74990,75127,75195,75446,75918],"have":[14,58,64,80,146,165,205,220,248,289,391,427,463,498,509,548,581,715,717,792,881,890,1069,1087,1131,1202,1230,1274,1285,1315,1325,1366,1407,1497,1569,1611,1675,1721,1762,1882,1893,1919,1933,1950,2037,2045,2065,2190,2204,2211,2213,2239,2257,2274,2281,2324,2363,2397,2415,2437,2536,2611,2643,2748,2842,2967,3242,3306,3346,3349,3486,3564,3581,3728,3773,3846,3890,3898,3909,3951,3976,4062,4155,4169,4192,4204,4220,4299,4379,4404,4448,4527,4569,4653,4773,4793,4820,4881,5039,5231,5275,5354,5581,5770,5920,6051,6056,6066,6128,6216,6266,6284,6318,6320,6347,6398,6464,6723,6750,6758,6806,6857,6991,7167,7178,7199,7249,7365,7427,7484,7619,7749,7767,7777,8002,8012,8115,8146,8259,8365,8384,8427,8555,8587,8872,8979,9002,9145,9167,9224,9248,9297,9332,9457,9589,9743,9827,9924,10012,10068,10108,10206,10382,10406,10475,10522,10574,10706,10803,11001,11049,11074,11150,11191,11213,11263,11272,11299,11303,11320,11333,11437,11486,11519,11548,11602,11808,12287,12400,12604,12699,12742,12779,12865,13058,13127,13163,13208,13261,13344,13392,13451,13538,13555,13610,13659,13673,13733,13771,13834,13847,13876,13915,14000,14298,14318,14475,14694,14718,14794,14862,14951,15042,15817,15840,16060,16564,17312,17326,17978,18089,18226,18267,18339,18363,18435,18503,18573,18662,18759,18813,18885,18925,18979,19028,19045,19164,19239,19448,19454,19620,19782,19998,20047,20154,20243,20393,20420,20452,20540,20593,20638,20660,20811,20891,20919,21029,21154,21181,21325,21460,21575,21676,21711,21930,22040,22122,22151,22222,22329,23264,23378,23427,23488,24052,24167,24275,24511,24550,24643,24728,24749,24769,24792,24901,24950,25095,25177,25216,25261,25309,25413,25487,25540,25624,25695,25734,25850,25865,25920,26025,26058,26074,26249,26300,26375,26446,26565,26574,26580,26613,26665,26688,26703,26711,26908,26925,26964,27054,27088,27101,27115,27158,27172,27267,27296,27335,27485,27506,27520,27575,27589,27629,27638,27681,27756,28114,28129,28181,28185,28290,28317,28395,28607,28762,28874,28885,28975,29097,29131,29150,29334,29463,29486,29578,29587,29701,29714,29767,29784,29861,29882,29922,30010,30038,30047,30062,30098,30145,30181,30257,30269,30401,30443,30478,30555,30844,30875,30985,31385,31642,31717,31925,32114,32174,32270,32372,32632,32651,32724,32754,33074,33088,33382,33457,33517,33542,33579,33618,33652,33879,33885,34011,34164,34179,34214,34375,34523,34536,34720,34892,34905,34927,34938,35029,35189,35293,35380,35450,35697,35779,35828,35988,36068,36156,36205,36303,36473,36630,36632,36684,36703,36855,37003,37280,37315,37397,37475,37539,37623,37632,37639,37667,37684,37706,37723,38283,38287,38345,38385,38478,38501,38533,38550,38584,38633,38660,38752,38828,38854,38931,38973,39027,39150,39159,39190,39234,39322,39426,39450,39492,39529,39553,39577,39653,39678,39797,39818,39824,39853,40063,40086,40097,40131,40208,40430,40500,40544,40627,40711,40791,40848,41200,41504,41544,41681,41715,41783,41792,41844,41915,41943,42028,42049,42109,42219,42243,42346,42360,42449,42548,42788,42876,42949,43009,43028,43165,43172,43281,43335,43547,43571,43728,43800,43957,44069,44234,44363,44384,44439,44558,44591,44637,44660,44700,44804,44835,45037,45090,45149,45195,45214,45267,45520,45564,45624,45662,45866,46040,46370,46760,46819,47067,47268,47904,47985,48132,48163,48174,48258,48306,48335,48364,48414,48501,48519,48529,48549,48556,48590,48607,48651,48687,48856,48912,49137,49289,49358,49395,49423,49455,49471,49474,49491,49496,49507,49518,49571,49593,49609,49627,49635,49642,49650,49659,49688,49771,49817,49886,49905,50003,50027,50062,50128,50140,50288,50322,50355,50361,50432,50534,50579,50669,50698,50921,50942,51031,51119,51148,51155,51186,51224,51344,51554,51609,51753,51845,51990,52094,52112,52224,52249,52481,52491,52584,52764,52884,52921,52953,53083,53276,53695,53792,54012,54106,54219,54227,54304,54430,54560,54612,54664,54682,54690,54712,54759,54794,54855,55577,56065,56101,56836,57168,57295,57319,57555,57657,57814,57929,58090,58115,58144,58288,58378,58586,58666,58736,59001,59411,59501,59833,60209,60643,60763,61309,61334,61448,61689,61939,61973,62024,62054,62111,62799,62838,63081,63107,63180,63309,63794,63811,63858,63897,63922,64031,64141,64225,64325,64450,64549,64567,64590,64696,64777,64894,65133,65211,65326,65386,65719,65736,65885,65897,65925,65979,66016,66034,66102,66111,66189,66224,66351,66374,66455,66468,66556,66902,66929,66976,67019,67127,67230,67424,67584,67600,67651,67708,67752,67841,67903,68054,68160,68533,68546,68590,68775,68853,69062,69301,69359,69408,69508,69713,69749,69861,70044,70064,70097,70131,70235,70303,70349,70358,70592,70817,70904,70963,71017,71164,71175,71193,71217,71263,71312,71323,71375,71417,71459,71469,71488,71503,71597,71608,71658,71753,71781,71809,71856,71902,71921,71969,72133,72179,72239,72342,72372,72377,72490,72537,72646,72715,72724,72741,72788,72836,72862,72893,72946,73026,73088,73121,73157,73292,73324,73385,73442,73501,73619,73642,73667,73751,74139,74229,74436,74535,74644,74761,74799,74830,74859,74863,74893,74913,74962,74978,74990,75111,75127,75201,75224,75264,75349,75395,75444,75511,75817,75980,76069,76090,76095],"formation":[167,10075,25524],"scriptablecamera":[15311],"getinstanceid":[36666,52248],"underneath":[3927,4908,8360,10530,11382,12227,12301,13935,14693,19061,28886,30243,33659,35700,40359,43175,45577,47802,54316,55817,57641,60822,62108,62747,71809,75015,75127],"dest_len":[66125],"increments":[3695,20130,23672,26114,34808,53155],"globaltexcoord":[8952],"evnt":[29671],"overview":[103,278,1104,1498,1978,2205,2434,2693,2973,3017,4313,4572,4725,4788,4872,5018,5153,5157,5872,6751,6778,8973,9141,10444,11304,11802,12345,12683,12969,13018,13117,13311,14314,17062,17938,18057,18665,18911,21297,21982,22069,22190,23544,24791,24942,25042,25813,25822,26262,26274,26471,26551,27498,27516,27544,27585,29165,29812,30852,31598,33380,33431,34272,34360,34480,35718,35956,36020,36219,36335,36518,37355,37542,38343,38523,38838,40519,40528,40675,41788,41834,43018,43101,43570,43688,43872,44342,44426,44756,44786,45045,45265,45388,45518,45835,45931,45961,46509,46716,46823,49174,49646,50663,50954,50995,52706,52882,53249,53776,54001,54301,54396,54507,54744,54910,54962,55062,55161,55232,55308,55368,56124,56211,56272,56326,56391,56474,56522,56591,56735,56798,56981,57123,57336,59270,59905,60673,60880,60981,61195,61748,62337,62494,62642,62767,65774,65961,66178,66397,66455,66554,67640,67874,70608,71142,72119,72293,72607,72786,73028,73405,73597,73631,73893,74305,75279,75372,75873,75990],"trackpropertyvalue":[55069,55610,56215],"lto":[73172],"useondemandresources":[2803],"prefabimporter":[6706,15307],"2x":[12881,23449,43782,45284,52725,63794],"takes":[442,521,583,1035,1343,1429,1888,1962,2180,2192,2204,2665,2810,3301,3351,3522,3680,5179,5288,5774,6381,6443,6514,6723,7071,7434,7451,7712,7731,8582,10085,10204,10564,10825,11263,12013,13823,14351,14692,14797,14968,16453,18179,18255,18376,18585,18987,20117,21007,21352,21431,22117,22594,23264,23392,23434,24826,25044,25635,26478,26600,26878,26991,27044,27089,28179,28467,29118,29338,29682,29731,30868,31642,32090,32767,33619,34164,34723,34896,34995,36093,36205,36334,36555,36569,37228,37647,37678,37692,37724,38239,38330,38374,38505,38558,38588,38870,39159,39764,40010,40203,41062,45305,45670,46346,46721,46975,47352,48146,48659,49440,49533,49720,49852,50005,50145,50629,50693,51045,51964,54820,55645,56100,57250,58440,58651,59854,61388,61525,62014,62278,62788,62847,63199,63807,64174,65420,65951,65992,66984,67598,68247,68280,68317,68348,68434,68594,68925,69168,70299,70332,72333,72931,73170,73234,73244,73640,74417,74642,75157,75536],"triangleside":[27367],"kinetic":[11604],"touchscreenkeyboard":[730,29682,34235],"disc":[9869,21504,22211,26917,32408,33730,36655,37790,49436,49484],"cullingoutput":[5487,5632,5754,5798],"“live":[33383],"mediumorchid":[63596],"team":[229,3589,4062,4301,4354,4377,4434,4483,4561,5015,5820,12157,12691,22557,28142,30405,30500,31242,35080,35228,37746,38862,53711,66555,67045,67121,67899,70914,71162],"standalonewindows64":[19091,24482],"friend":[17342],"crisper":[49628,58397],"addlargs":[24481],"utilityclick":[16564],"__size":[72525],"balloon":[47578],"materialproperty":[44214,45102],"editor":[3,14,65,140,161,178,235,441,526,617,697,890,1006,1483,1572,1601,1840,1862,1886,1890,2327,2459,2717,2779,2960,3020,3255,3314,3493,3525,3611,3718,3721,3773,3846,3880,3898,3976,4025,4182,4293,4427,4465,4511,4520,4569,4663,4876,5086,5272,5326,5888,5924,6231,6325,6355,6440,6500,6809,6936,7103,7314,7369,7673,7764,7824,7990,8281,8648,8765,8972,9054,9328,9520,9536,9908,9999,10435,10692,10725,11160,11172,11303,11368,11403,11463,11556,11824,12303,12356,12684,12865,13151,13309,13363,13382,13606,13779,13854,13940,14087,14218,14470,14678,14734,14774,15700,15809,15905,15938,15953,15970,15985,15998,16005,16023,16032,16046,16063,16078,16094,16109,16123,16140,16154,16168,16186,16215,16230,16238,16259,16278,16333,16348,16361,16375,16389,16409,16423,16438,16453,16473,16490,16513,16530,16545,16564,16582,16597,16605,16613,16621,16629,16637,16645,16653,16659,16669,16677,16685,16693,16701,16709,16717,16725,16733,16741,16749,16757,16765,16773,16781,16789,16797,16805,16813,16821,16829,16837,16845,16853,16872,16886,16922,16936,16972,16987,17003,17018,17033,17048,17065,17077,17092,17112,17120,17128,17136,17152,17172,17188,17209,17220,17243,17257,17271,17285,17299,17315,17329,17345,17373,17387,17401,17440,17455,17477,17488,17509,17527,17541,17549,17564,17579,17594,17609,17630,17645,17664,17681,17696,17711,17726,17744,17752,17762,17776,17791,17806,17821,17838,17853,17868,17883,17898,17915,17931,17980,18112,18190,18246,18346,18366,18388,18408,18432,18521,18625,18672,18693,18745,18828,18897,18925,18968,19018,19052,19085,19100,19270,19456,19636,19650,19967,20048,20075,20116,20211,20538,20624,20715,20766,20861,20917,21001,21015,21141,21252,21310,21380,21841,21873,21962,22010,22045,22100,22111,22124,22153,22214,22224,22559,23415,23482,23558,23611,24465,24474,24950,25030,25064,25101,25163,25245,25438,25444,25602,25734,25743,25904,25929,26253,26294,26629,26688,26908,27098,27167,27175,27341,27500,27514,27544,27583,27597,27637,27675,27682,27759,27762,27952,28053,28063,28096,28219,28324,28378,28618,28671,28715,28781,28880,29157,29398,29455,29818,29882,29997,30048,30190,30210,30273,30284,30363,30429,30467,30530,30837,30859,30986,31008,31021,31366,31379,31385,31588,31610,31624,31763,32112,32365,32478,32847,33065,33395,33509,33638,33782,33877,34209,34274,34362,34504,34536,34673,34739,34961,35188,35240,35280,35432,35467,35527,35604,35622,35687,35767,35791,35937,35957,36015,36034,36155,36199,36367,36482,36568,36694,37294,37381,37492,37563,37667,37696,37723,38272,38330,38657,38716,38819,38839,38909,39137,39159,39234,39290,39310,39740,39906,40039,40187,40432,40486,40526,40533,40647,40652,40662,40675,40678,40759,40796,41290,41301,41407,41420,41597,41672,41697,41742,41835,41922,41945,42023,42164,42331,42809,42938,42983,43012,43209,44197,44830,45041,45053,45398,46024,47193,48060,48170,48227,48365,48378,48500,48519,48562,48616,48629,48640,48680,48852,48868,48901,48921,48990,49151,49178,49346,49391,49445,49677,49710,49740,49879,49905,50014,50064,50129,50142,50160,50309,50342,50353,50411,50489,50542,50584,50657,50659,50782,50877,50937,51022,51080,51113,51119,51139,51187,51208,51240,51250,51344,51579,51607,51716,51815,51820,51850,52082,52223,52238,52477,52490,52546,52745,52843,52911,52949,52952,53081,53284,53693,53848,53994,54010,54109,54288,54406,54500,54552,54644,54673,54741,54775,54911,54988,55086,55190,55269,55337,55369,55508,55542,55559,55672,55751,55828,55894,55995,56147,56212,56273,56327,56390,56475,56523,56590,56703,56795,56982,57122,57333,57555,57919,58030,58106,58234,58578,58599,58653,58766,58996,59509,59540,59549,59904,60138,60162,60348,60408,60570,60610,60670,60837,61187,61196,61593,61762,61904,61931,61975,62003,62052,62108,62338,62506,62637,62639,62740,63126,63244,63776,64180,64204,64314,64406,64421,64461,64468,64489,64556,64579,64603,64624,64674,64738,64795,64816,64834,64851,64869,64903,64923,64936,64965,64998,65073,65095,65110,65125,65157,65236,65260,65268,65349,65378,65386,65413,65432,65444,65458,65476,65490,65501,65528,65545,65560,65577,65597,65617,65638,65658,65699,65735,65773,65871,65896,65957,65990,66012,66100,66223,66413,66457,66467,66532,66555,66878,66931,66951,67069,67662,67773,67977,68050,68060,68073,68464,68545,68600,68712,68814,68852,69046,69352,69456,69526,69713,69787,69842,69961,70195,70269,70341,70385,70629,70752,70805,70925,71050,71162,71215,71311,71417,71491,71508,71542,71614,71635,71677,71746,71813,71896,71906,71982,72007,72092,72133,72229,72370,72379,72492,72616,72724,72791,72830,72956,72988,73175,73413,73418,73429,73592,73642,73924,74049,74135,74227,74512,74646,74814,74850,74867,74921,75027,75032,75132,75215,75236,75341,75907,75909,75973],"borderless":[12472,34239],"unitycustomrendertexture":[8905],"accentuating":[30142],"eajhbgcioijiuzi1niisinr5cci6ikpxvcj9":[70035],"getdump":[36830,36983],"movementdisorderapis":[53724],"unmanagedfunctionpointers":[18545],"calculate":[302,1701,2044,2133,4952,5162,5221,5640,6168,6671,8503,8682,9034,9947,10087,10465,11192,11546,11812,12899,13064,13234,13465,13653,13824,14189,18613,20457,20955,21195,21470,21964,22161,24909,25229,26073,26156,26793,26956,27038,27066,27553,29189,31701,32170,32264,32874,33081,33099,33411,36330,36588,36678,38461,38487,38503,39234,40001,40104,42364,42396,43150,43186,44249,44409,45521,47307,49528,50974,51066,54227,56102,58329,66006,71814,72254,72336],"obfuscating":[67761],"ci":[19030,19637,27786,28625,52771,71469],"transparencies":[46730],"issueplugineventanddata":[28058,28067],"provision":[2839],"usenamedpass":[47171],"striking":[27569],"unloadunusedassets":[3443,27692],"__integer":[39615],"lefthanded":[76163],"importer":[1562,1926,2177,3733,3787,4509,4773,4959,5966,6693,7025,9115,9262,11403,12776,13628,14126,14787,15947,15979,19467,21423,21460,22488,24641,25098,25189,25258,27525,31044,31391,31629,36680,37497,38872,40453,48226,48316,48379,48556,48639,48678,49803,50038,50064,50094,50757,51131,51231,66680,71041,72640,72730,73384,73444,74187,74257,74591],"sendmouseevents":[19145],"approximate":[5238,8263,10595,12909,14073,15835,18095,22312,26058,27288,31719,36069,37646,37956,42378,45586,50936,53734],"uploading":[4220,4298,4387,4463,12947,21071,27702,33477,35765,52787,53048,53080,53978,66598,67117,68429,74159,75209],"3+opengl":[45482],"onapplicationquit":[21377],"“dense”":[7173],"2pi":[20693],"mip":[8624,8716,8825,13207,13710,13822,14259,35931,37952,44903,48720,50128,50683,50703,50960,50996],"decrwrap":[45863],"write":[219,726,1024,1822,1832,3451,3493,4556,4970,5678,5735,5911,5920,6096,6494,6680,6718,6935,7159,8219,8434,8648,8824,8981,9079,9155,9422,9828,9901,9933,10215,10505,10591,10708,10878,11149,11306,12656,12999,13059,13417,13709,13813,13961,14123,14577,17759,18153,18388,18414,18683,18930,19150,19944,20869,21193,21514,21676,21754,22878,23573,24275,24467,24977,25034,25099,25206,25941,26129,26249,26271,26374,26440,26485,27540,27553,27708,27931,28612,29131,29343,29471,29785,30000,30367,31635,31872,32312,32478,33088,33416,33619,34257,34338,34464,34655,35135,35357,35414,35582,35622,35754,36131,36204,36330,38430,38679,39678,39934,40163,40263,40452,41894,42321,42596,42677,42688,43077,43641,43955,44081,44104,44359,44915,45302,45597,45627,45837,45858,46718,47656,48429,48911,49388,49394,49650,49688,49748,50156,50416,50630,51059,51957,52501,53199,54871,55558,56881,58245,58727,59015,59552,61188,61955,62764,63827,63863,63943,63994,64317,64381,66116,66190,66395,66971,67008,67022,67233,67849,69713,73292,73447,73555,73694,74139,74334,74429,75969],"focusprojectwindow":[55906],"atlas’s":[28829],"quarter":[554,5921,12895,14805,37480,39724,40329],"atlascache":[48556],"functions":[3,794,1874,1890,2013,2556,2699,3695,4485,4882,5764,6128,6233,6723,6793,7801,8411,8903,9373,10443,10719,10797,10803,10991,11011,11160,12657,12971,13208,13709,15850,16510,17110,17282,18376,18485,18539,18985,20281,20681,20834,21000,21153,21295,22113,23246,23882,24060,24195,24275,24745,25624,25860,26040,26713,26814,27467,27992,28266,28464,29420,29926,30000,30087,30145,30404,33866,34611,34664,34693,35701,36091,36584,37295,38840,39160,39346,39381,39466,39522,39959,40266,40539,40568,40682,40830,41186,41764,42624,43869,43907,44234,44371,44941,45004,45048,45249,45582,45613,45619,46511,46552,46767,47335,48174,48670,48984,49148,49771,50699,51264,51396,51886,52046,52241,53954,54247,56725,57330,57603,57926,59055,59582,61725,62771,62836,63690,63707,63717,64511,64610,64808,64914,65312,65537,65552,66034,66073,66111,66256,66335,66941,67483,68197,68376,68440,68594,68887,69123,71605,71724,71959,72191,72292,72916,73500,73953,74592,74729,75271,75925,76035],"cinemachine":[16148,22024,23607,31028,31411,35184,37505,70292,74205],"reader":[4997,5910,52239,68512],"shrink'":[64089],"tests":[3120,11609,17606,17627,18630,18699,18821,18929,19655,19970,21031,23187,26689,28607,40263,40654,49653,53324,53702,54059,64332,68918,69159,70879,70914,74234,74725],"defining":[1975,2839,3109,4862,6755,7073,7412,8054,8169,9272,13064,15013,17206,18063,18611,18926,19023,22073,22685,24051,25215,28069,31719,32606,35413,40179,40450,42158,42331,42469,44590,44754,45043,45177,45385,45928,45960,52815,57726,59552,60990,65687,67088,67160,67579,75079],"printassemblynames":[40379],"complement":[22341,26622],"instantaneous":[50956,62371,71869],"createrequest":[3358],"_lastcameradepthtexture":[44085],"detail's":[50380],"sv_target2":[45718],"assumed":[22,253,6194,9256,25920,33718,41173,45170,48375,49541,49850,58325,66612],"ctrl+d":[10076,24557],"#616161":[63383],"bluetooth_name":[395],"joining":[11104,66336,66395,71767],"lithuanian":[53636],"oninspectorgui":[20803,40494,49994,59587],"affinity":[878,1761],"graphicsjobs":[1802],"maxcomputeworkgroupsize":[19769],"awaiting":[30377],"batch's":[5353],"nshowcmd":[66896],"incomplete":[5158,62841,67153,73093],"numbytes":[11012],"encrypt":[66120],"targeting":[581,4543,6836,8490,9457,12692,21173,23588,29717,31241,34274,37639,42150,42430,44563,45009,45416,45445,45848,50209,66503,67036,67766,68799,70485,70615,71484,72209,72901,73173,73478,74045,74399],"'desert'":[41871],"jiogames":[53917],"polls":[55550],"—128":[12354],"“x”":[7413,11844],"platforms3d":[6874],"pushing":[2274,2412,18511,31709,53846],"upm_cache_path":[69818],"attitude":[52763,73494],"yessupport":[37851],"shurikentogglehoveron":[63480],"pointonground":[72298],"boehm":[30867],"“apple”":[11314],"unity_standalone_osx":[33796,67778],"animatability":[62879,63697,63714],"encrypts":[26096],"lightingexplorertablecolumn":[26734],"additionally":[889,4774,8069,8303,9382,10483,12666,14581,17627,22657,25733,26928,27491,29368,30345,31798,32659,32847,32910,33804,35799,35997,36048,36156,36555,36569,36754,38345,39169,39765,42378,43131,43945,45746,45852,48227,50071,50642,52599,52877,52951,53192,53782,61327,65952,66105,68130,68594,68917,69158,72429,76069,76166],"result4":[63176],"texels":[9948,9996,10658,13218,22144,26992,27024,27055,36589,36679,37821,43970,50512],"depot":[72400],"config":[6705,7765,17089,21034,27600,27772,29327,31025,31454,43306,48097,49770,53879,66165,66731,67556,69702,69876,70068,70167,70422,73216,73409,73435,73566,73712,74006,74101],"saved":[165,2281,3733,3898,4037,6133,9759,9908,11074,11998,13140,13309,18432,19514,25963,27549,28323,29360,35364,36289,36343,36498,38332,38905,39905,41425,41479,41574,41613,41729,47240,48691,49913,51619,51817,52349,53138,53763,53885,54209,54264,54469,62784,63108,66697,68110,71323,71474,74585,74898],"implemented":[4874,6201,6691,9145,9400,12400,22303,23984,25329,26040,29420,32650,33104,34160,34375,34723,34861,37261,39675,39808,42354,45253,47783,49785,49886,50936,52250,52953,53788,53999,54036,62757,66225,67143,69014,69266,70944,71174,71417,73260,74252,75650],"vu":[4820,5027,5117],"delayeddependencyregistration":[19594],"xm":[4787,5166,6696,7469,22578,52097],"evicted":[66667],"cost":[3299,4082,6041,6068,6116,6815,9466,11534,12881,13219,17488,17642,20340,21586,22371,24500,27175,27215,27299,29133,29731,30348,30886,31708,32115,32220,35142,36440,36593,37683,37712,38292,38408,38621,41795,42365,45721,48306,49447,50057,50141,50397,74141],"linear":[1994,2188,2324,4819,5122,6287,6839,6947,7198,7254,7693,7789,7944,8005,8325,8431,8508,8592,8599,8634,9013,9177,9294,9505,9744,10138,10261,11484,11537,11802,12345,12707,13164,13239,13565,13684,13869,14446,14598,15001,17118,17169,18225,20570,20682,21392,21631,22379,23530,26560,26573,26588,27130,27500,27513,27543,27582,28881,29154,29616,29733,32132,32291,32870,32902,32920,33590,33672,34272,34360,34480,36351,36639,37940,38490,38525,38553,43964,44053,45168,46448,47148,50381,50696,51621,61545,62916,73441,75424],"merged":[8397,48084,50656,68887,69123,74381],"info_0":[3284],"ondestroy":[10717,18033,18309,21373,39160,56680],"0xc0000005":[52528],"'spacebar'":[13988],"declared":[1266,4902,6109,9653,21154,23814,24018,24094,27918,27943,29907,32056,37069,38820,42026,42053,42134,43045,43871,44734,44874,45128,46000,47108,47242,47905,57322,66467,67881,69724,70241,72231,73580,73977,75543],"datapath":[3331,3383,3555,25935,49740,66114],"jpeg":[3729,6713,9059,12621,13965,16651,50659],"literal\\":[40853],"samplefolder1":[18707],"labels":[2777,3905,3952,4218,9563,20959,23227,31765,34584,36444,36549,36710,38717,40042,41255,41688,52389,53147,54302,54796,55675,55995,56157,56808,58375,58822,60570,61391,61597,62643,62756,63748,64259,67953,69753,71127,71207,71217],"buffercountforinstances":[5414,5558],"passing":[518,3446,3493,4662,4819,5160,6032,10097,11660,13264,18220,19636,20570,21104,24193,27482,27566,29161,30682,31716,31765,32755,33290,34207,37710,66158,66635,67890,70761,72941],"instances’":[67090],"quarters":[14805],"#e4e4e4":[63267],"spill":[29249],"‘":[34523,48217,48626],"figure":[4450,9274,34155,37627,43592,51032,52591,70404,70936,71543],"windowsizechangedeventhandler":[74720],"objects’":[31718],"erroricon":[63443],"retains":[8782,18125,20581,30043,33261,33443,34919,38877,39598,50002,66910,68825,69058],"kunityxrinputfeatureusagesecondary2daxistouch":[75663],"alert":[18112,24629,25911,27678,29709,66668,73504],"studios":[1994,17488],"temperaturedrawer":[55002],"unsupportedidentifier":[19718],"forcenoshadowcasting":[45970,46490],"introductions":[31595],"toarray":[27388,48430,48759],"anatomical":[7253,33606],"gammagamma":[34361],"stretches":[173,8044,8829,13212,13757,14816,24437,32251,32731,33563],"connections":[634,9330,11001,11179,11199,11221,12097,12642,18079,18376,28483,30262,35828,40145,50354,50432,66036,66101,66229,73175,73687,75477,76193],"slope":[8195,20569,37821,44637],"overridereferences":[3071,18645],"broadcasts":[10794,11059],"mouse’s":[33498],"ndotl":[46561],"rgb9e5":[14350,27149],"versioning":[3296,3448,21991,22993,26121,35089,40346,69719,70814,70877,70960,71009],"__curve__":[32414],"tapjacking":[11891],"assetbundlepath":[3424],"compositing":[8386,37953,49450,71845,75466],"fixed3":[29516,43882,46438,46725,47572],"set_accum":[6176],"touchcount":[33362],"_compress":[46673],"navmeshmodifiervolume":[69398,69502],"modifier":[9809,13134,22793,32164,32907,42767,43234,44898,46345,46775,46824,56169,59732,60388,60790,63730,64335,71078],"sketchupimporter":[6709,13449,15273],"moving":[1977,2064,2243,2270,2286,2330,2393,2414,2699,3675,5160,6149,6736,6794,6840,7045,7292,7661,8286,8514,9019,9178,9711,10090,11247,11271,11298,11508,11543,11607,12723,12942,13252,13266,13423,13580,13686,13870,14567,14681,15003,15840,15889,18187,18220,18991,20402,20544,21005,21520,21964,22780,23668,25670,26593,26809,26923,27210,27320,27328,27486,29594,31711,31856,32165,32343,33669,34785,36340,37405,37618,37639,37728,38474,38557,38587,39239,39263,39398,39774,40271,40621,44094,46367,48510,48662,49491,51299,51545,51565,51967,52234,56982,61908,62813,65999,66205,68579,69375,69479,71057,72289,72942,73022,73407,73673,75089],"swatches":[20705,24519],"nbsp":[1000,7481,8819,9543,9879,11246,11360,11446,12899,13279,13296,13752,14538,15869,31702,31791,31852,32175,32680,33578,39458,42623,44773,45062,45401,45863,45945,50171,51828,70829,70875,70928],"arm64e":[19865],"addressable":[3428,4558,5944,13417,16060,21514,48570,60195],"myelement1":[61576],"mvp":[5904],"myprofilereventcallback":[28004],"canvases":[8114,23645,36449,61497,62803],"credential":[53804,69861,70504],"remap":[7986,13925,21401,29632,32224,48243,58130,74301],"deduplicates":[23583,42148],"authors":[70718,70761,71010],"shrunk":[2277,2411,9885],"omissions":[76335],"cadetblue":[63521],"other_ldflags_framework":[49790],"featurevalue":[76213],"drawcommands":[5639],"postprocessing":[6325,16992,22862,31447,31816,68475],"ddy":[45501,50691,73014],"templatecontainer":[54579,55481,55606,57710,60136,64900,65191,65285],"bigtree_bark_normal":[52184],"unintended":[5989,10028,10070,27011,28475,33290,36678,42059,49179],"executealways":[39170],"settings'":[16564],"todo":[19557,29958],"examplefieldcomponent":[56638],"_displacement":[46837],"singlepass":[44776,45948,75468],"projectiles":[25567,31721,32702,33098,34928,35252],"dmg":[66588],"copytexture":[14027],"yourname":[19628],"capsulecollider":[8160,15130],"setallvertices":[61088],"enable_virtualtextures":[50013],"#66cdaa":[63594],"alternates":[65746],"acronym":[72269],"animationspeed":[51779],"unpacks":[53423,68535,73619],"tbhinostua":[58673],"yyy":[28194],"xmlschema":[58603,61275,61635,62428,62547],"webrtc":[73667],"unfrozen":[6980,12762,13283,13300],"310x150":[12466],"setstring":[49965],"refreshing":[3581,3718,3771,67363,70371,71548],"numrequired":[13078],"devicegeneration":[25885],"auto":[32,100,205,691,714,1537,2283,3028,3773,3886,4350,4431,4867,5328,6302,7189,7366,7499,7965,8232,8503,8826,9003,9168,9258,9298,9688,9728,9893,9979,11048,11555,11614,11741,12346,12489,12728,13167,13208,13427,13478,13556,13653,13674,13862,14252,14541,14874,14984,15818,16364,16378,16392,17967,18315,19310,19975,20072,20125,20571,20610,21526,22127,23614,23699,24766,26873,27015,27107,27523,30284,32172,33622,34273,34481,34604,34862,35036,35446,35600,36599,36762,37723,38393,38551,39547,39580,39648,39789,40134,40210,44019,46767,50197,50354,50430,53078,54209,54222,58441,59700,63720,64046,65183,65327,67092,67730,68852,69061,71022,71593,71748,71850,71869,73118,74541,74678,74873,75414],"adjusted":[1962,5999,14707,22151,24306,39375,42354,51361,71806],"allassets":[3410,35764],"materials":[67,124,1890,2769,3316,3506,3861,4506,4557,5346,5355,5497,5727,5761,5762,5811,6496,6896,8811,9139,9970,10120,10213,10412,10551,10616,12769,13120,13371,13468,13626,13770,13799,14575,14973,15843,17000,18670,20393,20420,21383,21560,21622,22565,23264,23596,24598,24652,25182,25187,26005,26738,26786,27520,28837,28863,28866,28877,28947,29009,29385,29486,29723,29775,29801,30334,32303,32705,32738,35129,36242,36454,37511,37549,37733,38203,38332,38840,40921,41753,41865,41876,42024,42058,42133,42212,42318,42352,42810,42949,43202,43514,43563,44069,45046,45147,45620,46484,47190,48225,48238,48265,48940,49022,49178,49309,49440,49465,49484,49507,49569,49614,49636,49851,50006,50041,50601,50932,51069,52124,52183,52204,52442,52475,54129,58421,58663,71906,72762,72799,74171],"multithreading":[11565,21346,22142,26476,29972,30913,35731],"acccelerator":[66566],"numberofassettype1":[40972],"startupinfo":[34237],"everyone":[3591,39097,66357,70315],"spritepackingmode":[48693],"defines":[281,1274,3111,3537,4816,6101,6266,6514,6756,7144,7407,7427,7766,7979,7998,8063,8427,8501,8827,9223,9268,9620,10003,11329,11661,11807,12627,13242,13263,13351,13708,13897,14218,14951,15036,18379,18715,18969,19022,19189,19945,20808,21336,21422,21531,21964,22070,22301,23257,23816,24004,24055,25182,25921,26606,26668,26999,27312,27511,28602,28828,28846,28885,29428,29922,30260,30502,32062,32216,32371,32629,33580,33672,33785,34155,34274,34484,35416,35519,36015,37350,37529,38467,38532,38793,39623,40155,40204,41229,41765,42020,42028,42128,42354,42411,42683,42827,42838,42849,42870,42924,43035,43670,43786,43854,43933,44118,44150,44182,44225,44333,44354,44610,44643,44681,44773,44828,45113,45288,45401,45452,45540,45869,45945,46371,46510,47968,48006,48039,48682,48910,48992,49215,49630,49763,50145,51579,51827,52120,52200,54228,56146,57213,57645,57843,57971,58054,59836,60792,60990,61300,61391,61470,62750,62849,63667,64151,65746,65867,65902,65984,67173,67561,68686,70802,70945,71449,71766,72064,72773,72945,75080,75397,76096],"textureformat":[8668,14096,21724,48725,73551],"sharpness":[9998,44451],"rightfoot":[29111],"basically":[2178,4792,4865,7991,18376,33586,46721,50941,52181],"froze":[35950],"communicate":[1402,1947,12645,13263,16771,16803,17474,22472,28639,47309,51785,58018,64243,67086,67543,67852,70802,70940,73499,75262,75395],"'\\0'":[58005],"asked":[25458,58128],"key2":[66734],"whether":[14,65,174,219,292,518,555,684,1210,1499,1649,1941,1970,2050,2188,2504,2556,3432,3595,3766,3890,4230,4350,4366,4434,4450,4480,4561,4636,4665,4932,5263,6101,6469,6964,7022,7152,7231,7366,7567,7574,7778,7862,7920,7970,8085,8174,8271,8389,8552,8774,9039,9131,9339,9527,9859,9878,9966,10505,10654,11006,11175,11312,11358,11444,11468,11587,11682,11718,12153,12353,12451,12733,12756,12797,12908,13022,13127,13277,13294,13428,13456,13696,13813,13913,14029,14509,14733,14823,16060,16933,18084,18246,18441,18623,19017,19240,19655,19998,20073,20287,20419,20452,20636,20812,20993,21052,21447,21749,22153,22224,22401,23481,23585,24039,24624,24646,24737,25062,25104,25171,25980,26115,26323,26486,26683,26708,26868,26961,27261,27522,27654,27729,27816,27984,28163,28488,28828,28880,29058,29277,29595,30173,30207,30265,31668,31814,31835,32106,32130,32165,32254,32458,32777,32876,32903,33265,33498,33643,33774,34284,34371,34461,34613,34897,34988,35711,35878,36108,36481,36684,37099,37662,37733,37881,38384,38853,39033,39085,39115,39382,39467,39586,39614,39778,39992,40140,40210,41550,41753,41907,42044,42123,42331,42713,42729,42752,44133,44294,44430,44527,44808,45103,45446,45784,45866,45967,47154,47163,48022,48510,48879,49216,49289,49396,49470,49567,49593,49636,49663,49706,49753,50382,50422,50455,50538,50560,50600,50913,50968,51039,51148,51560,51591,51792,52108,52135,52213,52320,53317,54438,54733,55731,55909,55990,56077,56181,56918,57244,57330,57845,57918,60064,60649,61497,61547,61824,63714,63808,64655,65177,65746,65890,65931,65981,66200,66468,66802,67588,67730,67759,68069,68546,69400,69504,69719,70015,70236,70295,70960,71022,71138,71190,71446,71793,72364,72419,72762,72840,73062,73465,73482,73605,73963,74091,74736,74790,75133,75241,75658,75765,76130],"iunityprofilermarkereventcallback":[27992],"await":[30903],"told":[8203,66135],"distance_":[8315],"recombines":[4957],"life":[1483,2347,5160,11729,13238,14707,22023,24489,25670,30376,31758,32864,34156,34994,35756,38492,52921,55255,57630,66861,69719,70761,74192,75487],"__h264__":[14819],"darkorange":[63538],"serializationutility":[39887],"inbetweens":[22508],"interaction":[1411,1945,2967,5053,6049,6944,8132,12643,13265,13733,13761,13789,13894,14546,17832,17971,18039,21052,22474,31135,31486,32747,34994,38545,38579,38628,39603,39804,39831,46505,48538,52012,57638,57975,60209,64454,65921,66811,66836,66871,66890,66903,68780,72941,73365,73498,74012,74373,75045,75071,75114,75213,75224,75320,75381],"verified":[4397,11370,14790,22329,31015,31366,31386,53506,67988,70310,70755,74362,75355],"sbyte":[10826],"sourcebuilder":[38698],"#spherical":[7253],"tunneling":[18235,74405],"company_name":[73928,74114],"incorporating":[7930],"assured":[5939],"inotifyvaluechange":[55727,57908],"stuttery":[33583],"influenced":[62797],"#name":[54828],"vibration":[388,1261,1386,25862],"failoperationback":[45863],"browser":[2225,3226,3853,3901,3981,4032,4320,4477,4867,12328,14409,19427,20233,21302,22946,25165,25492,26581,28669,28713,28755,34706,35834,36695,38714,40805,41305,41725,41872,58998,60162,64182,66717,68458,70325,70344,70822,70932,70972,71328,71473,71609,71707,72475,73026,73029,73092,73116,73175,73205,73240,73261,73300,73312,73365,73445,73471,73498,73592,73601,73669,73690,73837,73896,73908,74121],"maxsentmessagequeuesize":[66323],"hover_pressed":[63271],"raises":[20460,26041,38752,43195,50537,50559,57969,69620,72941],"jobqueue":[21034],"kunityxrinputfeatureusagehanddata":[75667],"gameswitchesasset":[55321],"xbox":[5711,6880,25316,27938,37770,45439,50200],"kunityxrpreinitflagseglusepbuffer":[75897],"ctor":[52609],"renewable":[67624,67730],"integrations":[67892,68791,72376],"subtracted":[71889,72312],"cachedspriteatlasruntimedata":[15315],"universal":[138,1542,4959,5694,5852,6450,6866,6940,8015,8244,8807,9864,12437,13123,13540,13911,17110,17122,17539,17752,18241,18805,19048,19292,19337,19351,19364,20385,20407,20441,21958,22434,23248,23385,23605,24928,27802,28842,29459,30995,31122,33796,34578,34663,34850,37411,37484,37516,37749,38249,38265,40150,40168,40551,41827,41939,41959,42314,42387,42600,42694,42718,42734,42759,42989,43079,43123,43136,43490,43501,43510,43559,43568,43657,43686,43731,43803,43942,44099,44136,44168,44201,44310,44322,44340,44379,44424,44593,44629,44673,44761,44790,45057,45186,45263,45392,45525,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,48940,49158,49169,49175,49281,49313,49673,50204,50362,53286,54829,63823,64010,64032,64332,66471,66867,67620,67625,67743,67846,68467,68526,68571,68777,71994,72004,72011,72065,72076,72089,72096,72110,72119,72125,72133,72136,72148,72172,72201,72207,72803,72809,72816,74208,74570,74757,74799,74808,74814,74832,74851,74882,75158],"userpresence":[76118],"floors":[167,6794,15842,31717,35261,71809],"convertexistingdatatonativearray":[26224],"bends":[50471],"download":[410,480,498,510,913,1279,1331,1613,2065,2776,3247,3339,3446,3462,3564,3591,3975,4026,4063,4218,4387,4404,4435,4470,4535,4770,4871,5898,6412,9260,10730,12848,14003,16779,16787,16795,18513,18909,19049,19270,19617,21369,22104,22561,25445,25500,25942,26074,27653,27678,28193,28771,28786,28961,29566,30279,31594,33879,33891,33904,34680,34706,34849,35103,36713,38741,40662,43372,49458,49575,50178,50401,51119,51344,51850,52099,52265,52542,52888,53032,53210,53327,53831,54046,58674,66534,66577,66973,67482,67977,68062,68085,68279,68348,68486,69031,69284,69713,69754,69890,70096,70258,70464,70728,70875,71151,71266,71306,71361,71508,71531,72366,72537,72904,73022,73352,73382,73445,73619,73642,73681,73840,73989,75041,75251,75354],"pointerstationaryevent":[60764],"premerge":[48057,72408],"onrenderimage":[21358,38198],"audiofilter":[15157],"hump":[32632],"#add8e6":[63574],"rotationduration":[76269],"resultsnotready":[2676],"ilistelementproperty":[37061],"logicalorreverse":[43830],"degrade":[5978],"vector3fieldsnippet":[65617],"“free":[33435],"\\analyzers\\dotnet\\cd":[38743],"blockiness":[61559],"sheer":[6128],"browsers":[12350,14409,21302,23982,24054,50221,72475,73026,73075,73117,73173,73285,73306,73319,73431,73470,73596,73616,73687,73702,73896,74044],"positioningtestwindow":[61204],"unity_standalone":[39948],"constants":[5371,5515,6201,20281,23585,27566,31836,32090,32193,32366,32855,38283,41802,41897,56723,68254],"upwards":[4,8171,26928,30164,37303,37509,41691,51323,51382,52140,72323,75573],"ansi":[9773,69333,69439],"mesh's":[14702,21240,34810,49851,75854],"france":[57147],"tedious":[6841,9386],"families":[6689,12682],"processortype":[19711],"passphrase":[69862,70060,70107,70127,70173,70496,70651],"setkeyword":[42098],"goals":[29136,33763,38653,49474],"hinge":[11,7252,9681,9722,14984,23080,26554,26563,26589,33605,71627],"velocityupdatemode":[73062],"richard":[6042],"r8g8_uint":[8481],"buy'":[67449],"ejaqbgnvbammcwxvy2fsag9zddccasiwdqyjkozihvcnaqebbqadggepadccaqoc":[69909],"packable":[74186],"panelling":[49560],"m_int":[54525],"rss":[4071],"tap":[7438,7455,18506,19936,64752,73030],"someenum":[52551],"enable_vr":[33828],"programmers":[1989,5994,6839,17759,18377,24456,29019,29906,30061,38862,54119],"overridetexturecompression":[6385,6440,28183,74646],"soloed":[5119],"shader_api_gles3":[43939],"actual":[1585,1960,2064,2357,3574,4298,4773,4902,5239,5496,5735,5986,6206,7766,7810,8442,9277,9773,12970,14323,18054,18501,18599,18951,20875,21592,22066,22186,23829,23932,25163,25503,25878,26110,28457,28699,28720,29721,29793,31719,32855,34678,34698,34800,35949,36006,37675,39493,41202,43961,44088,45255,45293,45578,46722,47404,49497,49530,49753,50164,51780,51879,51999,54370,54886,55927,56313,56376,59464,60162,61542,61790,63112,63196,66043,66621,67070,68198,68823,69055,69333,69439,70085,70159,71762,71942,72438,74898,75623],"overshoot":[9180,10068,13692,13876,20574,38515],"getapplicationcachedirectory":[1437],"downloadmovievp":[72597],"grayscale":[7986,12840,18343,25276,38014,42288,43882,50409,50491,58393],"presetselectorreceiver":[49914],"iotheadless":[12693],"occurrence":[33454,52745],"ethernet":[695,700,50197],"densities":[63768],"lengthbytesutf8":[73518],"wbitangent":[47491],"drawgizmo":[51408],"preprocessor":[562,4654,6102,6425,6473,7374,8421,23559,28166,29921,33775,34624,39451,40284,41800,41857,41988,42130,42423,42957,43922,43933,44363,44906,44978,45428,45616,46816,47804,71751,72064,73925,74789],"buildassetbundleoptions":[2796,3244,3293,3535,19090,25937],"isk":[53663],"developers":[3451,5898,6042,6059,6138,12157,16091,16241,16527,17326,17370,17412,17912,18716,19047,37278,37508,54511,57128,58736,59001,59549,62739,65687,67117,67182,67555,67570,67579,67582,68049,68072,70763,71166,72786,72955,74139,74389,74816,75306,75445,75501],"visualeffectimporter":[6716,15364],"incurring":[35896,67877,75739],"init":[18532,20145,36661,48391,49922,53999,54513,56549,56610,56692,57330,57656,58062,60906,61006],"myprofilerpushmarker":[27997],"rf":[2913],"compensate":[4085,21455,24663,27507,66720,75208],"blurred":[9998,37713,43175,49628],"bindwebgltexture":[73523],"trusted":[66767,69904,70954],"playersettingswsa":[12696],"acronyms":[73650],"#4f657f":[63271],"unity_hardware_tier2":[23551,42172],"toggle_bg_hover":[63496],"manufacturers":[263,12671,75303],"basemap":[12921,50488],"mangling":[1285,30008,34664,34693,73580],"distinctive":[71879],"package’s":[4357,18851,71283],"net_standard_2_0":[33833],"mbyte":[1655],"x86–64":[628,675,707],"devicestate_setaxis2dvalue":[75556],"decompiler":[33304],"thrown":[12397,15864,31720,34161,52408,67772,68917,69158,73197,73302],"prompted":[6372,30054,51146,51369,67047,67517,70085,70159,70174,74633],"demo":[3986,5826,19306,33609,50583,50998,52094,57081,67477,69337,69443],"inch":[12116,39426,48279,73248],"tessdistance":[46942],"preprocessing":[8242,8554,9152,9709,13663,37618,41858,42424,44371],"musical":[4997],"onpreprocesstexture":[5925,48389],"graphicsshaderlevel":[19733],"disregard":[12896],"urn":[21002],"sendwebrequest":[3386,68101,68295,68335,68362,68399,68452,72587],"blackmagic":[74201],"velocities":[2349,6310,9294,14965,23103,26588,31996,32132,37622,38492],"plugging":[7765],"baselistview":[55437],"myelement6":[61585],"examplemeshname_lod1":[25145],"_detail":[46229],"shouldcheckodr":[2797],"cpuprogressive":[36588],"slashing":[1917],"thrashing":[50007],"in’s":[4768,27916,34539],"specifies":[554,997,1156,1655,1953,2564,6477,6804,6966,7261,7890,8008,8535,9948,10012,10135,10722,11310,11715,12452,13913,14029,14347,18506,19214,19340,19354,19455,20086,21068,21240,21697,21841,22118,22675,23256,23480,24734,27947,31747,31851,32259,32610,32681,32767,32903,34201,34994,35523,35714,39030,40298,41086,42713,42729,42750,43693,43757,43800,44683,45645,45868,46016,48067,49490,50376,50847,50873,52616,59564,62846,64052,64224,65878,66586,67187,68348,68434,70332,71082,72673,73244,74793,75426,75543],"palette":[14471,37500,50527,51077,51098,51140,51160,51177,51249,51257,51343,51529,51552,51579,51609,51760,51843,51851,56982,62338],"offload":[11813,12349,34279,34493],"offchange":[23682],"minify_release":[23505],"jupiter":[59966],"3x3":[5231,9236,37822,47470,65986],"inputtex":[8911],"unity_2019_4_14":[33818],"peer":[10850,12642,17474,22962,66433,70780,73687],"slug":[34943],"m_cullingmask":[76498],"rather":[8,73,250,1759,1886,1966,2034,2179,2245,3252,3428,3695,4966,6320,6718,6723,7364,7427,8183,8436,8500,8598,9095,9145,9382,9771,11298,12116,12473,12866,13065,13120,13477,13858,14073,17759,18104,18234,18364,18458,18514,18621,19052,19316,19336,19351,19376,20418,20615,21156,21219,21997,22189,22234,22498,24468,24777,25597,26434,26472,26593,26703,27041,28266,29182,30047,30917,31634,31716,31870,33098,33781,34837,36348,36710,37293,37480,37548,37724,38621,38915,39666,39740,39856,39977,40054,40091,41322,43186,43651,45075,45300,49048,49506,49642,49737,49780,50595,50652,51984,52259,53029,54558,54897,55511,58369,62670,64640,65987,66365,66708,69333,69439,69740,71104,71811,71874,71970,72201,72319,73406,73417,73705,74177,74592,75409,75641,76120],"shaded":[10519,21711,22135,28878,32240,49525,71808,72747],"sre":[66504],"impossible":[5922,6149,8242,8554,9152,9399,9709,10877,12105,13058,13663,22373,33583,36513,39508,54898,74898],"loaddotsinstanceddata_renderinglayer":[20285],"genlock":[16453],"examplerenderpipelineinstance":[48928],"border":[8860,9634,10341,12838,14965,19667,26998,37376,37499,48515,48524,48642,50131,50351,52387,54329,54690,54718,54886,55217,56865,57372,58519,59309,59868,61836,62200,62458,63236,63901,63948,64005,64063,64228,64432],"onprimarybuttonevent":[76274],"encloses":[10127,11625,18611,30054],"_cameradepthtexture":[32991,44083,44947],"workflow":[1985,2713,2996,3242,3318,3510,3720,4359,4518,4569,4772,5137,5265,5879,9197,9243,9670,9845,10557,12831,14495,17759,18728,23472,25097,25187,25550,26837,27167,27502,27517,27543,27586,28306,28317,28975,29021,29568,29882,30825,33239,36569,37277,37402,37508,37606,37676,37696,37743,38778,41677,41993,43023,44360,45841,46762,48229,48315,48335,48359,48571,49048,49449,49465,49505,49593,49607,49634,50142,51246,51840,51859,52834,54745,54848,58766,59191,59552,61592,67893,68050,71468,71558,71634,71858,71901,72276,74135,74227,74928],"https_proxy":[69896],"peformance":[42233,42238,42250,42293,42298,42303,42308,42436,42442,42451,42458,42463,42511,42517,42523,42528,42533,42538,42543,42578,42583,42588,42593,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42926,42931],"rigorous":[30352],"examplelightmodetag":[48988],"path's":[38299],"serverhostid":[11214,11230],"ghostwhite":[63557],"ext_texture_norm16":[14458],"stdin":[70047],"endreached":[14913],"wireframe":[4327,10059,10236,10521,13475,21711,22227,27023,30164,31681,32372,34781,35072,39128,49525,72748],"realtime":[30,4814,5330,6801,8846,9466,9873,9908,9992,10090,10654,12882,13127,22124,22146,22764,23448,26787,26809,26819,26945,27017,27033,27074,27113,27169,27184,27187,27267,27294,27301,27315,27330,27755,29550,35129,36118,36586,36640,37633,37724,37790,38420,42400,43534,47810,49491,49720,50440,69244,71814,72760,73440],"apacheconf":[73773],"zooms":[39305],"listelementtemplate":[59427],"fabric":[29393,33759,37911,49510,49629],"functionalites":[63689],"inspect":[3338,3734,7941,11011,11077,11921,12185,12372,12560,13364,15890,18130,18318,19225,20635,22632,25379,28373,33387,33472,34311,34397,34516,35364,35787,35977,36085,36343,36446,36465,38251,38678,38865,38986,40653,48595,49386,49391,52558,54706,63105,70747,71916,72059,72687,73630],"raycasts":[8133,11551,11609,12909,36309,39534,39689,39699],"decrease":[1347,1655,4852,7793,7993,9491,9797,10055,14501,14685,14975,20438,20672,23736,24160,28463,29895,30323,30369,33166,37207,40522,50529,50636,51193,51337,73443],"numsteps":[61117],"defaultrenderpipeline":[49183],"lprogress":[69589],"nohup":[69982],"bridge":[560,631,636,695,709,778,836,1654,4909,9184,17485,23124,26036,28433,31478,35847,50197],"vectorscope":[38237],"getstartposition":[66249],"unable":[8367,8546,11978,12403,13180,21739,25465,26689,28439,28608,28670,28714,28752,28761,37619,38872,52643,54016,67149,70357,72923,73772,75984],"startdrag":[2581,57468,57577],"body":[7,1926,1950,1966,1991,2117,2257,2415,2990,3014,5266,6202,7085,7214,7830,7845,8229,8500,9148,9167,9297,9685,9754,11575,11603,12698,13163,13651,13696,14979,18091,18277,21592,22300,26560,26594,29895,32407,33578,33640,35254,35275,36348,37405,38156,38457,38530,38540,38573,38609,38623,38647,38651,49513,50601,55632,59556,66518,68263,69302,69408,71782,73998,74422],"web":[3342,3379,3981,4032,4155,12333,14446,14842,16767,16775,16783,16791,16799,18936,19426,20233,22946,23982,24054,27681,30941,33877,39385,40777,49744,54007,54120,56097,62201,62797,65897,65963,68252,68317,68433,68458,70628,70972,71446,72474,72889,73025,73029,73173,73244,73323,73431,73478,73499,73592,73669,73690,73772,73903,73915,74056],"attemptadding":[27389],"story":[6750,21633,22023,40063],"instancedcolorsurfaceshader":[23292],"covers":[5645,5832,5910,9828,11323,18114,19036,19783,25926,26062,28606,29437,31659,35961,36020,36200,36466,39854,43113,49593,51975,52959,54304,58997,61812,65922,66452,66742,67161,67845,72511,73361,73593,76094],"newelement":[56105,60452],"storing":[3590,7019,7173,9075,10082,13307,18599,18624,22124,22653,27080,27167,27214,29326,35127,42185,59193,68347,72476],"apache's":[73751],"'whatsnew":[53107],"layer":[110,1272,1944,1950,1966,2089,2229,2257,4779,7103,7187,7969,8086,8173,8270,8388,8773,9038,9202,9241,9345,9440,9850,10245,10633,11011,11214,11228,11466,11473,11586,11636,12732,13485,13593,13725,13759,13793,13851,13897,14263,14508,14544,16869,16883,17723,18105,18322,18485,20232,21078,21336,22093,22469,25238,25633,26604,26616,26621,26634,26645,26658,27454,29102,29133,30352,31140,31717,31814,32221,32304,33448,34698,37670,37702,37795,38347,38570,38600,38634,40151,41508,41775,48874,50046,50171,50303,50454,50520,52871,53777,63123,64841,65907,66158,66428,69901,71559,71897,74329],"expect":[1169,4206,5379,5523,6810,8358,10092,10456,11521,18267,18377,20286,22379,24916,25345,26507,26646,27549,27738,28443,28875,29471,29750,32609,33417,36463,38439,40000,49451,53320,53905,66355,68041,68916,69157,72941],"impersonate":[72392],"foreach":[2687,3423,3748,9393,13045,19498,23369,24849,29606,36850,37256,40383,42080,48405,48747,49087,51445,53963,56194,56960,57230,57708,59062,59950,60717,61729,63213,66524,67064,67499,67789,69561,74440,75834,75961,76128],"particlephysicsextensions":[32767],"backplane":[14894],"impact":[1762,2700,3304,3491,3812,4653,5872,5964,5999,6142,6384,6432,6817,8550,9970,11542,13904,14498,17092,18224,18239,19133,20047,20327,20449,21913,23439,23537,23568,24979,26361,26664,26714,27118,27207,27931,28182,28457,28895,29212,29731,30175,30225,32650,33094,33409,33472,35321,35697,35888,37609,37639,37668,37696,38558,38588,39160,39853,41794,42060,42245,43021,44245,44384,44669,45568,48329,48353,49706,53840,55633,62016,64324,64457,66457,67150,68157,71043,72986,73302,73661,74645],"raycast":[6725,8133,8222,10244,10584,11608,12909,15015,18330,26647,29610,31816,35270,38606,38622,39529,39597,39720,40104,61497,71565],"derives":[8444,10691,18375,20865,23243,24517,28585,39886,40532,46977,52407,52763,55571,58621,59022,60162,61767,64365,65738],"toggle_mixed_bg_focus":[63495],"generational":[33296],"editorexampletest":[18702,18840],"jukebox":[12643],"sculpt":[50624,74907],"widget":[1951,2229,62210],"gizmos’":[33721],"dedicated":[864,1122,1140,1656,4026,6145,11690,11982,12652,18330,19084,19097,19119,19126,19132,19172,19268,19273,19635,20701,21956,22962,23428,25350,29290,29997,30367,31603,33070,33760,33767,33799,36554,37795,39881,49357,52764,54002,60211,61594,66110,66227,66363,66426,70747,71591,71855,72715,72789,74212],"experiencing":[23560,66759,70363],"runasync":[74716],"ulimt":[27616],"handlesettrackingoriginmode":[75597],"callback's":[5496],"plugin's":[30024],"fractions":[54725],"unwieldy":[3830,13058,30048],"ranked":[36712],"allobjectguids":[59060],"def":[34549],"clothspherecolliderpairs":[8300],"enclose":[2268,2392,9024,12721,21039,49824,57999,70111],"addpackageexample":[69527],"kformatrgb_bc6h_ufloat":[50103],"inspects":[14541],"stops":[2047,4838,7794,8568,11178,11543,12516,13257,13876,18309,20398,21377,26588,29705,30265,32180,33387,33401,33677,34091,34987,35727,36538,38568,38598,39235,41460,45777,52547,55551,55581,57964,61490,62114,63966,64900,65191,66929,68852,69061,71593,73054,74184,76030],"pertains":[56730],"folders":[1608,2842,3520,3793,3851,4223,7427,16060,17045,18720,18760,18925,19150,19454,21032,21418,24975,25179,27679,27785,33476,34566,36695,39450,40194,40429,41373,48170,48556,49150,49756,52493,52633,58659,63784,67693,69711,70185,70349,70780,71324,74186],"wasn't":[52651,70446,71256],"depicted":[33614,57843],"src1":[45273],"setglobaldepthbias":[44626],"titled":[30411],"tabiscurrentlyselected":[57239],"snapdragon":[14345,33521],"ipreprocessbuildwithreport":[24475],"modeller":[49563],"stiching":[27091],"initializeviewmanager":[74703],"texture_2d":[73524],"r16g16b16a16_float":[61557],"checksum":[3344,68280],"trickledown":[57869,59796,60456,60870,62156,65335],"centereye":[76176],"artwork":[4213,4260,4426,6215],"xyzw":[32065,40749],"palettes":[51144,51344],"weight":[1962,2083,6266,6288,6320,6965,10398,11438,12757,13278,13295,13476,13913,18172,21585,22498,29102,29133,32262,33907,41370,47611,58320,58704,59894,61969,62017,71885],"getpixel":[5945],"points":[64,98,169,301,1129,1886,1890,1920,2179,2327,3440,3564,4820,6890,7073,7931,9012,9024,9177,9307,9744,10059,10204,10465,10573,11520,11630,12116,12731,13023,13106,13174,13573,13665,13684,13869,14580,14999,18113,18565,18976,20580,21221,22828,23625,24650,26110,26223,26564,26922,27336,27814,27870,28378,29721,31743,32286,32341,32402,32607,32705,33251,33736,35736,36080,37283,37685,38458,38508,39017,39123,39346,39440,39899,40161,40535,41997,43197,43543,44133,44363,44893,48641,49738,49762,52233,52384,53538,54031,54724,56111,58283,58440,58542,60779,62020,63744,64640,66393,67214,69620,70709,70967,71037,71969,72303,72707,74364,75603,75874,76173],"sequenced":[52094],"enddisabledgroup":[59634],"gainsboro":[63556],"modulebuilder":[30875],"trygetfingerbones":[76296],"heuristic":[7175],"credit":[4009,4085,30414,53729],"distinct":[146,1960,2282,6807,9343,18076,22085,27488,29721,35748,39751,39880,40835,41236,48335,50568,52386,58149,58192,61323,63064,67036,68469],"detection":[2014,2958,8263,10564,11546,11605,13251,13266,14542,14943,15867,15889,18219,23040,26253,26604,31725,35139,35276,35853,36307,37444,38556,38586,44133,45618,49653,55548,74152,75319],"unloadsceneasync":[26710],"unity_might_not_have_depth_texture":[43972],"retrieving":[12973,18593,31606,66556,67547,68313,68343],"key_pem":[66611],"i":[168,220,1693,4410,4432,4773,4948,5464,5609,6161,6536,6798,7140,7155,8511,8673,8986,9392,9603,9663,10191,11020,11105,13048,13336,14029,14198,15839,18012,18258,22142,23355,24010,24084,24284,25144,25559,25939,26467,26521,26588,27172,27408,27966,28935,29422,29509,29662,29844,30433,31978,32799,32993,33114,35127,36658,40744,41514,42036,42081,43375,44023,44066,44417,44447,44921,45195,45586,45690,46683,47225,47930,48686,49538,49829,50344,51281,52150,52411,52610,54724,55688,55840,55950,56777,57013,57843,58129,58669,60451,60600,61131,61218,62019,65172,65522,65840,67276,67332,67446,67924,68786,69643,71527,72238,73510,73635,74653],"oncontentcomplete":[68203],"separated":[3462,4214,4281,4773,8356,8837,11546,11639,11843,12811,13105,18670,19022,21029,27088,30270,45025,54733,62871,63684,63843,63878,63891,64036,64205,64532,65085,65891,75903],"yessupported":[37788],"subcategory":[3988],"float3":[6608,8731,8951,10169,14034,14178,31953,32928,43875,44009,44249,44880,46210,46807,46849,47086,47353,47937],"bird’s":[37478],"unity_editor":[2905,29984,33790,34698,39941,51625,72649,75711],"custompropertydrawer":[20938,55008,58894],"planes":[6760,8045,10120,13146,13446,17773,17803,18639,22746,26606,31668,35261,37731,39234,44637,44936,47951,52182,66003,72724,74206,75215],"systemother":[50209],"hlsl":[6708,6902,8411,14033,20263,21767,23573,41848,41987,42136,42423,42596,42666,42688,42956,43566,43684,43961,44229,44338,44359,44422,44501,44782,44873,44977,45058,45120,45178,45210,45261,45416,45445,45571,45596,45661,45838,45957,46322,46511,46721,47258,47902,50699,71751],"semantically":[48053,64340],"rog":[40747],"configures":[998,1190,1243,1761,3009,19972,23485,25140,26248,42671,45850,67073,72974],"brief":[11405,18669,18746,18795,21982,66184,70312,70804,71135,71301],"slash":[29689,47237,49823,70788],"compilation":[385,1274,2704,3762,3810,4568,5269,6473,7366,8411,9126,9448,11937,12253,12374,12562,13363,14031,17045,17693,17708,18112,18501,18525,19017,19168,19235,19479,20179,20226,21053,23125,23583,23619,24475,24944,25309,26077,27639,29463,29813,29922,30855,31092,33773,34313,34421,34520,34609,34698,35089,35728,36786,38683,38839,39446,40176,40429,40513,40555,41833,41928,41961,42148,42424,43024,43103,43914,43947,44307,44371,44671,44905,45024,45423,45605,45744,45840,46346,46816,47029,48179,49731,49749,52610,66459,67570,67688,67707,67847,68625,71016,71751,72063,72647,73347,73661,73730,74789,75682],"propagates":[7562,7645,28992,34041,61488],"showing":[2065,2261,2324,3952,4327,4713,4964,9069,9517,10760,11298,11314,12423,14764,20830,20877,25064,25200,25551,34379,36571,36733,39317,51117,51886,59843,60468,66855,68561,71315,75359],"constraint":[6958,7390,8307,9014,10392,11434,11546,12751,13272,13289,13693,13877,15000,18155,18421,21487,26260,26569,36351,39547,40099,40288,40571,71055,74206,75503],"transacted":[67873],"unassigned":[2246,3862,20658,39883],"delaunay":[8382,12730,74183],"paristab":[57151],"prevents":[962,7251,8213,8343,8578,10770,11518,19494,22058,23099,23273,23443,25229,26295,27536,27591,28135,28966,29004,29213,30264,30376,30446,33074,33604,34375,34485,35082,38668,38840,39238,39797,43075,44096,46057,46829,48221,50615,51035,53303,54033,57833,57966,58411,61559,71053,71129,72424,73030,73471],"assetfilehash":[3266],"formdata":[68395],"volumetrics":[38071],"lightskyblue":[63584],"gz":[73190,73343,73734],"liquid":[5872,8786,42467],"behind":[2180,4725,4903,6035,7645,7924,8059,8120,8317,11244,11274,11346,13729,14567,14860,18564,20459,22750,26858,30174,30179,30352,37365,38242,38508,39238,39671,42705,42726,42748,42811,43194,44394,47995,48677,48875,49447,49502,51168,51214,52042,54771,66001,69898,71121,72723,75280],"comparisons":[5988,6067,36736,43955,48145,73417],"sourcetree":[48114,70094],"accessed":[2006,8146,13964,16564,19405,25942,26295,27538,27679,29790,32847,33307,35633,41560,48053,48250,49780,59048,66570,67706,71961,73614,74308,75259,75541],"italicization":[58320],"onvaluechanged":[65931],"numthreads":[8416],"unite":[5910,6042,23605,72910],"bitmask":[26646,71567],"subscribing":[6135,12627],"remapping":[13629,13925,22934,32215],"hope":[4997],"manager—the":[71591,71855],"unfold":[36058],"lightprobeusage":[23417],"stencilop":[45895],"conservative":[21749,42674,44131],"suprx":[6705,34561],"setnamefileidpairs":[48436],"canhaveanyattribute":[57331],"worldpositionstays":[24730],"radiobutton":[55475,59694,63971,64696,65047,65060,65100],"videoclipimporter":[6715,15276,73445],"contact":[219,4062,4390,4438,4440,6834,7198,7243,7931,7970,8163,8254,8271,8389,8514,8774,9039,9705,11518,11546,11605,12667,12698,12733,13830,14509,14967,15839,18229,21144,21175,23055,26919,28609,28757,30435,31719,33632,33681,35022,35313,35744,36327,37457,37746,38585,38862,45970,50200,52108,52498,53324,53711,53715,70316,70763,71378,74332],"100_gold_coins_google":[67204,67305,67413],"counterpoint":[60411],"declare_effect":[4908],"scriptbatch":[6329],"networkserversimple":[11217,66038],"clientrpcs":[10803,66034],"sensor":[8030,12652,21485,27065,33527,36597,52754,68807,73488,75487],"slashes":[70166,70772],"restarts":[3786,35137,62597,65702],"pads":[25263],"enable_android_atlas_etc1_compression":[48778],"enterpriseauthentication":[12640],"applicationid":[23502],"emulating":[26563,55651],"detaches":[60559],"cvs":[48219],"predicted":[13241,18233,72931,75545],"postprocessorder":[6344],"flanger":[7447,7464],"animatable":[2284,2324,22649,62882,64489],"dynamic":[144,3797,4909,5084,5238,6805,6914,7514,7924,8060,9253,9458,9718,9957,10091,10107,11508,11810,12348,13127,13209,13254,13443,13989,14319,15842,16060,18221,18613,20337,20380,20401,20437,21633,21767,21868,22024,22301,23414,23531,24165,24486,24724,25525,25989,26116,26789,26947,27129,27183,27192,27225,27266,27293,27332,27484,27567,27716,28266,29157,29347,30024,30169,30271,30332,30366,30874,31662,31707,32233,32705,33482,34194,34277,34491,34878,35007,35275,36005,36129,36249,36302,36371,36524,37426,37653,37736,37827,38331,38369,38402,38536,38540,38574,38624,39234,39430,39634,39754,39785,39992,40081,40609,41223,41520,41801,41881,42044,42110,42699,42742,42793,42818,43007,43021,44238,44512,45094,46073,46789,49491,49669,49709,52597,54163,58117,58300,58373,58652,59534,59842,60641,61529,62067,62187,63132,64453,64468,65900,66832,66939,68614,71528,72137,72201,73062,73448,73723,73904,74403,74602,75256,75918],"streamingtextureforceloadall":[50978],"getstatic":[1413],"expend":[58724],"scripted":[3766,3812,6717,6844,8065,9772,25099,31633,38841,40451,65742,67651,68220,68615,69333,69439,72247],"dolls":[2063],"trick":[3463,72359],"testfunc":[52650],"s3m":[4786,5166,6696,7469,22578,52097],"loadallassetsasync":[3397],"tbstr":[72198],"possibility":[6045,9386,10055,18514,29332],"geometric":[12405,22742,29721,38026],"preservedmethod":[28506],"vfxoperator":[6716],"requestuserpermissions":[1509],"statics":[18025,20177],"consumable":[53077,53339,54025,66965,67007,67019,67087,67168,67230,67261,67304,67400,67541,67597,67624,67677,67841],"axis":[4,115,307,1883,2360,6291,6756,6958,7033,7251,7959,8003,8026,8157,8201,8225,8502,9440,9686,9769,9859,10132,10266,10393,11051,11256,11279,11452,11484,11532,11600,12762,12990,13110,13215,13243,13261,13283,13300,13391,13670,13749,14137,14539,14603,14668,14799,14950,18229,20562,20732,21206,21455,23049,23673,24660,25763,26560,27090,29618,30600,31718,32158,32215,32257,32339,32357,32605,32628,33555,33604,33672,34770,35066,36040,37283,37345,37480,37617,37998,38496,38569,38599,39253,39357,39438,39545,40002,42691,42726,42748,42779,45248,48526,48874,50034,50126,50376,50422,50476,51165,51186,51216,51253,51334,51367,51539,51575,51879,52754,54730,59836,60508,60779,62200,71806,71871,72765,74422,74905,75474,76097],"m_materialid":[5370,5514,5788],"bigtree_bark_diffuse":[52184],"scrollbar_thumb":[63368,64264],"compressing":[7514,10496,22464,29329,29417],"roslyn":[18524,19239,24963,34425,34523,38677,38841,40655,71681],"fidelityfx™":[37950],"flipwinding":[20287],"playoneshot":[7495,36012,73067],"preceded":[12622,45285,60359,70774],"kextrabytes":[5376,5520],"namespacename":[21031],"“googleplay”":[67574],"bolts":[32702],"combiner":[45267],"nine":[167,13076,13131,36023,37713,48373],"worker’s":[29259],"newlabel":[60483],"m_staticbatchroot":[76518],"entities":[5809,6915,9982,11459,13330,16253,16272,16880,22854,26908,28490,31101,31421,35377,61925,66028,66767,74654,75109],"agent":[3591,66555,69390,69494,70070,70094,70137,70175,70500,70651],"cars":[5162,10085,14965,71811],"unity_no_rgbm":[43965,44991],"connectivity":[646,28753,66597,67551,73667],"subject":[2360,4399,5184,8036,9256,23427,30346,33134,33532,33769,35726,36574,43000,50661,50942,52110,53488,53724,56674,59534],"docheck":[18302],"column":[2300,4080,4263,4522,6271,7181,8617,9275,11588,12844,12866,14776,20344,21813,22271,25076,26611,26725,28424,29382,30421,30497,33394,35088,35381,35641,35759,35815,35999,36041,36187,36336,36447,36694,39545,41545,47070,48373,51156,51919,52240,52517,53469,57625,59836,59907,63298,64092,64973,64986,67953,71304,74231],"improving":[23533,33646,37616],"collapses":[34760],"password":[223,1123,1141,1157,11975,12607,21038,28303,28617,53366,66610,67049,67351,67626,69860,70496,72389,74826],"dependsonsourceasset":[19508],"took":[3734,25043],"porting":[6841,18485,52754],"correctly":[137,156,177,223,273,3696,5354,6318,6798,9262,10201,10579,10764,13006,13462,13620,13754,14269,14712,15711,15836,18087,18539,19512,20126,20339,21230,21572,21930,22657,23285,24669,25140,25623,26255,26627,26657,27040,27320,27544,27752,29063,29368,30871,33762,37706,38345,38462,38736,38869,39440,40654,42028,43199,43376,45448,46074,48170,48231,48623,50018,50534,50602,51170,51208,52475,52526,52598,52696,52879,52952,58622,61326,61516,65923,67048,67532,67862,68069,68513,72504,73312,73672,74474,75015,75153,75459,75624],"right_top":[64288],"orient":[2034,6966,8171,24662,26560,32400,34830],"unityxrdisplayexample":[75978,76076],"pointercaptureevent":[55647,58015],"layer++":[27454],"simpler":[1982,2058,6807,7878,13059,16060,24735,32701,34712,41894,43870,47311,49371,49519,50601,57641,67853,68546,72335,75081],"template’s":[74090],"memoryprofiler":[16535,31156,31437,36241],"circumference":[8162],"quickstart":[21980,22002,37301,37507,37605,50926,66547,71301],"#ffdead":[63607],"joystick":[9065,9776,22683,25347,25696,25764,52745,52761,59743,60495,62829,72940,73469,74710,75646,76103],"shorthand":[13818,22738,45447,61939,62609,62850,63140,64059,70643,75666],"now":[332,409,548,907,1006,1240,1589,2249,2308,2370,2441,2891,3254,3321,3393,3566,3926,4003,4183,4413,5042,5494,5922,6121,6464,6831,7496,7812,7937,7964,8349,8397,8706,9280,9375,9602,9659,9713,10076,11518,12727,13894,14000,14126,18110,18384,18436,18563,19332,19345,19372,20632,20777,20981,22098,23525,23808,24244,24275,24630,24782,24797,24904,25400,25545,25882,26188,27335,28064,29434,29794,30122,32923,33278,33382,34852,34914,34949,37003,38697,40102,40629,41587,41703,41859,42005,43460,43520,45290,45626,46196,46667,47184,49156,49359,49513,49519,49971,50307,51008,51984,52172,52232,52903,53702,53806,54347,55134,55692,56912,57502,58822,59855,60466,60560,62378,66297,66721,67015,67245,67513,67661,68572,68720,68814,68851,69046,69311,69388,69406,70091,70108,70171,70283,70519,71025,71230,71256,71331,71387,71428,71477,71868,72184,72241,72317,72503,72889,72910,74139,74228,74428,74761,74899,75449,76315],"able":[614,1957,1966,2067,2324,2459,3411,3462,4387,4435,4773,5041,6211,8210,10780,11092,11314,13064,18081,18376,20397,21164,22180,22985,24018,24726,24753,24768,24794,25521,26576,27015,27691,28452,28875,29594,29922,31713,31864,32115,33065,33081,33608,33616,34618,34640,36454,36511,37601,37671,38329,38585,38639,38820,38869,39913,44083,48674,49446,49642,51204,52034,52488,52493,53137,53276,53773,53997,54736,58824,59134,62108,66183,66230,66395,66538,66625,66852,66910,67154,67270,67533,68066,68611,70174,70316,71256,71387,71738,72225,72476,72941,73208,74428,74850,75597,75764,75874],"c19kaw5pcm9aag90bwfpbc4jb206d3fzdzvhemu9q":[70056],"unity_lic":[239],"lightdir":[44369,46560],"audiospeakermode":[7662],"getmetrics":[4665],"_occlusionmap":[47524],"range'":[18615],"0a21":[19085],"subjects":[1891,6484,6768,42350,43083],"ticked":[5961,11175,22224,26954,32365,33486],"unity_webgl_build":[49744],"yessee":[34863,37883],"spatializerdata":[5189],"formsections":[68380],"provisioning_profile":[49788],"onprocesscomputeshader":[42999],"mid":[10575,26798,27215,34862,37639,49513,58393],"stonesearches":[41470],"darkcyan":[63530],"tent":[37822],"moments":[7931,34928,57953],"treeroots":[59980],"layering":[1992,2087,52718],"swaying":[7841,50611,52168],"unoptimized":[4997,32861],"playerassemblies":[40381],"alwaysvisible":[65327],"ondemandrendering":[30379],"initially":[2246,3247,3301,4767,4832,4876,6314,8347,12902,13906,20573,24770,26895,29790,31838,31856,32136,34379,34948,35380,35794,38561,38591,39240,50372,50582,50620,51028,52222,71792,74216],"strung":[9222,9715],"restart":[617,3718,3785,7077,9088,12356,14910,25064,28455,34594,34987,35860,36555,38277,39912,40689,52541,66690,69842,70459,72243,74827],"unityxrmeshdataallocator":[75792],"vrdevice":[72934],"system":[11,86,220,395,585,661,700,962,1031,1094,1140,1243,1397,1472,1507,1762,1821,1855,1862,1880,1933,1978,2016,2057,2063,2211,2335,2370,2818,2895,2984,3247,3327,3344,3354,3447,3483,3527,3589,3826,3852,4537,4665,4725,4776,4814,4873,5158,5222,5265,5338,5357,5501,5739,5777,5961,6037,6119,6238,6328,6682,6727,6798,6896,6933,6984,7155,7663,7693,7763,7905,7959,7979,8162,8263,8373,8505,8603,8765,8862,9024,9072,9268,9466,9552,9619,9909,10003,10087,10110,10596,10804,11039,11066,11247,11308,11319,11333,11458,11472,11546,11604,11669,11740,12219,12354,12594,12721,12885,13245,13261,13389,13605,13821,13850,13934,14027,14289,14504,15039,15729,15847,15902,16060,16275,16403,16611,16627,16679,16739,16755,16883,16933,17027,17133,17342,17744,17835,17938,17968,17972,18019,18052,18257,18333,18369,18402,18432,18536,18564,18665,18905,19018,19364,19457,19702,19986,20086,20185,20450,20542,20713,20811,20863,20925,21031,21142,21170,21179,21331,21434,21453,21570,22064,22207,22466,23406,23460,23484,23777,23886,24051,24167,24275,24456,24710,24763,24768,24803,24900,24928,24951,25031,25097,25140,25343,25345,25525,25637,25672,25699,25826,25835,25965,26079,26113,26131,26242,26264,26270,26295,26374,26434,26471,26507,26571,26900,26927,27017,27033,27073,27113,27158,27262,27344,27478,27487,27589,27619,27648,27717,27747,27757,27764,27927,27986,28115,28251,28613,28858,29092,29121,29168,29419,29449,29477,29484,29600,29727,29742,29838,29890,30015,30104,30156,30170,30373,30540,30870,30916,31042,31428,31642,31647,31658,31661,31670,31733,31749,31763,31777,31802,31825,31840,31862,32080,32095,32119,32141,32206,32238,32242,32330,32348,32374,32596,32619,32639,32667,32714,32747,32846,32893,32915,33075,33106,33419,33453,33475,33519,33624,33655,33783,33880,34189,34285,34497,34597,34639,34651,34672,34923,35037,35264,35404,35465,35553,35627,35700,35909,35941,35968,36040,36205,36296,36402,36526,36568,36637,36679,36762,37082,37280,37381,37532,37627,38043,38459,38482,38502,38524,38560,38574,38684,39361,39491,39511,39522,39547,39652,39906,40026,40116,40365,40459,40558,40632,40643,40795,41294,41871,42781,43321,43491,44586,44868,45506,47377,48168,48221,48517,48556,48674,49440,49713,49746,49819,49885,49912,50002,50053,50068,50078,50150,50158,50294,50326,50354,50381,50436,50522,50534,50563,50615,50708,50909,50934,50949,50990,51097,51156,51428,51624,51849,51961,52321,52477,52491,52610,52706,52757,52771,52942,53147,53703,53933,54106,54208,54223,54551,54718,54760,54898,54972,55077,55177,55249,55497,55544,55561,55931,56097,56885,56991,57808,57994,58018,58102,58128,58381,58866,59025,59416,59557,59828,59920,60194,60390,60685,60764,61196,61483,61526,61921,61990,62067,62121,62354,62692,62739,62867,63123,63683,64082,64337,65899,65922,65963,65979,66028,66043,66115,66361,66448,66470,66542,66569,66895,66905,66964,67073,67153,67286,67403,67698,67749,67829,67845,68086,68263,68281,68328,68355,68376,68445,68458,68678,68724,68861,69094,69513,69686,69696,69732,69760,69796,69897,70103,70166,70176,70207,70275,70349,70368,70592,70770,70926,71247,71608,71709,71759,72039,72201,72207,72233,72385,72462,72608,72683,72756,72786,72943,73098,73160,73292,73472,73529,73604,73667,73900,74066,74150,74288,74431,74581,74707,74877,74996,75037,75073,75108,75140,75233,75287,75295,75474,75948,76043,76097],"checkbox":[205,1960,2011,2772,3931,3969,4410,4432,4590,6272,6317,6352,6403,8351,9127,9338,10505,10567,11068,11163,11175,11190,11262,11462,11494,11588,11996,12098,12866,13204,13366,14802,14882,15818,19039,19067,20110,20459,20612,22224,23233,23423,23491,23930,25633,26611,26752,26954,26978,27015,27555,27638,27752,28885,30424,30868,31625,31674,31737,31753,31771,31783,31808,31829,31846,31868,32084,32099,32123,32193,32210,32334,32352,32378,32600,32623,32643,32671,32718,32753,32897,34499,35367,35623,35834,37676,39661,40069,40620,41781,43550,49486,49714,50348,50382,50563,51003,53064,53188,53411,53943,54243,54467,55713,57945,58794,59994,61480,61601,64301,64640,65369,65736,65931,66332,67921,71562,73299,74859],"texcoords":[32930,59627],"+texturename":[45214],"newin20181":[10051,12823,18213,20235,23425,27111,32076,32590,32662,32914,35238,36675,49999,67742],"move":[67,253,1886,1914,2269,2284,2394,2448,3475,3619,3723,3847,4434,4763,4822,4876,5124,5162,6042,6294,6737,6931,6962,7138,7263,7567,7574,7956,8084,8198,8342,8547,9008,9050,9184,9311,9682,9785,10058,10233,10345,10398,10424,10725,11252,11276,11340,11442,11518,11637,11808,12717,12745,12757,12814,13180,13234,13261,13484,13552,13861,14000,14609,14678,14955,14979,15842,17045,17925,18159,19000,20192,20605,20722,20785,21325,21501,21842,22236,22301,23616,23671,24223,24526,24608,24634,24834,25169,25381,25408,26547,26557,26571,26580,27083,27324,27330,27520,29614,29921,30179,30831,30911,31703,31745,31838,32196,32216,32298,32346,32403,32631,32727,33101,33649,34747,34772,34931,34939,35066,36694,37407,37539,37723,38394,38461,38508,38536,38541,38574,38624,38655,38744,38912,39246,39517,39773,40002,40202,40616,40688,43224,45569,47423,48168,48501,48669,49668,49709,49728,49901,50008,50321,50368,50559,50956,51278,51394,51541,51565,51894,51966,52233,52526,52674,52691,54548,54712,55642,55806,57584,58484,58824,60476,60495,61908,62192,64179,67691,68962,69209,69985,71057,71628,71644,71767,71805,71987,72255,72445,72946,73263,74034,74427,75109,75221],"sharper":[49454],"applevalidator":[67824],"detailreflective":[45558],"#383838":[63257],"dynamics":[38475],"gallery":[64756],"onpointeroutevent":[60870],"m_controller":[67408],"decompression":[3247,3294,6139,7483,12403,14295,27653,29365,35988,50677,68130,73190,73315,73443,73777],"portraitupsidedown":[1579,25872],"null":[739,1479,2473,2553,2636,2830,3333,3372,3547,3768,4989,5212,5651,6067,8368,9365,9605,9785,11083,15739,18129,18276,18583,19393,19507,24132,24822,24983,25643,25947,26238,26736,27870,27960,29436,29937,30095,30598,30901,33113,33425,35694,36958,37026,39169,39207,39883,40566,45621,48758,49140,49240,49809,49939,50048,50299,50331,50966,51500,51744,51757,52334,52798,53937,54931,55084,55396,55912,56245,56305,56370,56464,56617,56946,57433,58173,59152,59470,60412,60611,60661,61125,61781,66282,67569,67578,67810,68227,68644,68952,69197,69982,73201,73302,73564,75271,75553,75820,75925,75966,76066,76231],"kunityxrinputfeatureusagemenubutton":[75660],"identityfile":[70075,70141,70551],"contacts":[7975,8179,8221,8254,8394,8779,9044,9705,10572,11546,11600,11660,12667,12738,13839,14514,18224,18665,33643,35021,35268,35749,36339,38532,38557,38585,38612,38641,53740,74326],"getadvertisingid":[74873],"#absleft":[35117],"identical":[146,3466,6102,7579,8380,9138,10082,18481,20393,21230,21582,23378,23581,24593,24733,27114,27522,28836,32703,33436,34526,34927,35187,36454,39880,41753,42148,42988,43074,49363,49554,49639,50378,50595,51318,54823,55886,58766,64025,68247,68281,70438,71018],"exampletexturename":[44387],"pick":[772,3955,6798,7841,9207,10339,11676,11803,12346,13075,13818,13880,14471,18894,20707,25177,26361,26791,28916,30365,30987,32225,32367,34280,35047,39125,46767,48287,50560,51117,51304,51344,51542,51568,51851,58145,63112,63466,66205,70349,71989,72347,72941,75076],"unitysubsystemhandle":[75754,75934,76004],"mistakenly":[34608,70571],"transitions":[1961,1989,2183,2204,2216,2235,4855,6949,7178,7928,10338,12666,13814,14716,20735,22476,24789,25203,30051,33494,35235,37581,38411,38674,39607,39828,48268,49642,49658,54210,54886,56708,62489,62491,62586,62641,62836,65925,66251,68823,69055],"handleforarray":[26219],"#container2":[63850],"selections":[3956,4042,21608,29354,48366,51306,59015,64244,74151],"42ff":[67470],"pc's":[19623],"deriving":[55730,58766],"memoryvideo":[36239],"uitoolkit":[30692,35561,74233],"left+click":[720],"radii":[18575],"wibble":[30108],"rr":[40331],"shape’s":[13797],"efficient":[27468],"vector3intfieldsnippet":[65638],"audioparameqeffect":[7701],"networkbehaviour":[10799,11079,66034,66062,66416],"prevent":[2722,3316,3340,3719,4467,4705,4713,5028,5764,7368,8286,8487,9723,10012,10657,11104,11177,11518,11537,11625,11717,12472,12903,13622,13665,13708,13837,18231,18328,19231,20571,21043,22130,22713,24983,25210,25961,26244,28454,28465,28625,28952,29003,29213,30352,30865,31719,33008,33178,33443,34205,34417,34466,34608,35138,35692,36093,36538,37290,37618,39140,39508,39918,40219,42133,42946,43180,43376,45911,46061,48530,49785,50007,51389,51882,52491,53782,53989,54016,54264,55506,55554,55633,55715,57943,59165,61490,62028,66365,66436,67752,68683,68897,69135,71597,72242,72370,73445,74962],"germslimetargets":[34939],"setdspbuffersize":[7765],"unaffected":[44442,49849,73088],"transitionrunevent":[62403,62593],"4000to":[41181],"libraryname":[75980,76076],"asyncreadmanagermetrics":[4651],"gate’s":[33566],"bucketcount":[29188],"site":[471,3247,4157,30346,37324,40777,66920,69038,69291,70302,73251],"manager’s":[12814,69767],"customrendertexturevertexshader":[8906],"orders":[369,1901,5016,10406,20395,21298,36041,36187,50421,54021,68611],"staged":[17092,31236,43118],"developed":[234,680,719,4875,6839,17912,23171,30384,66025,68784,72891,75191,75501],"unity_2019":[3035,33816],"kunityxrinputfeaturetypediscretestates":[75492],"food":[11314],"r32g32_sfloat":[8449],"goto":[2470,61908],"depthtexturemode":[44058],"compilable":[4761,4874],"linerenderer":[10324,15118,28856],"deserialized":[18026,21312,39902,52327],"shadowviewmat":[44960],"silhouette":[30184,49497],"1500ms":[62901],"ggebaknh0em7j57pxorgs5ohzlk9tyeuqittxxdwfy1fbqrdj+a8qlns4m":[69910],"methodname1":[34713],"1280x768":[52721],"tweak":[5044,5127,6143,7447,7464,7508,7620,7657,13166,17000,18061,24750,27267,27520,29891,30204,32115,38455,43195,45585,48225,52178,68311],"android":[377,384,404,426,434,478,491,524,540,543,568,578,620,636,661,670,693,698,717,733,785,833,866,882,888,898,937,943,954,961,1022,1030,1086,1093,1107,1129,1137,1150,1177,1190,1202,1226,1236,1242,1269,1283,1290,1298,1339,1355,1369,1392,1402,1482,1489,1515,1574,1593,1671,1705,1751,1760,1803,1811,1820,1832,1845,1855,2982,3051,3377,3499,3585,5708,5952,6051,6374,6434,7663,8406,9058,9466,10773,11688,11699,12153,12883,14015,14296,14309,14821,16091,16561,16579,16599,17062,17370,17935,19315,19651,19683,20048,20448,21042,21949,23124,23475,23550,24600,24970,25039,25318,25867,25980,27136,27529,27710,27798,28422,29587,29810,29825,29830,30293,30838,30920,31030,31403,33516,33802,33883,34290,34371,34594,34644,34682,35714,35836,36168,36558,37777,38321,38417,40546,43472,43944,44056,45593,45735,48208,49743,50192,50653,51009,52485,52639,52871,53303,53696,53777,54002,60635,66526,66802,66809,66901,66967,67012,67117,67146,67235,67264,67576,67652,67708,67733,68054,68466,68753,68892,69130,69360,69464,71176,72643,72737,72884,72986,74345,74635,74991,75033,75300,75393,75897],"reported":[5300,21933,22128,22367,25138,29618,29721,30090,35746,36204,39756,40225,52010,54259,68927,69170,71412,75508,75765],"#define":[385,7373,19995,23559,24933,33820,42130,44990,68686],"optix":[23452,36599],"alphanumeric":[478,11842,12154,18217,24584,34372,34993,39619],"#4d4d4d":[63309],"worldtoobject":[5432,5576],"thumbstick":[76115],"_grabtexture":[44386],"kunityprofilercategoryother":[27975],"changeover":[26356],"setmanagedreferenceidforobject":[39887],"markerdesc":[27991],"lambert":[46143,46510,46534,46761,47040,47695],"requirederivedattribute":[28592],"func":[34729,55949,57018],"dumps":[74568],"pram":[463],"#0000ffff":[49859],"endhorizontal":[24391,49991,59637],"abstract":[4519,8104,26926,34164,36986,40453,44952,51581,52250,57286,75485],"increased":[3468,9457,12414,20457,20637,24499,26056,26473,29182,29332,30255,33082,36593,38403,42148,43023,43188,43729,44134,45037,50397,52010,74141,75067],"scriptablerenderpass":[38191],"loopingexample":[62507],"gettransformmatrix":[51739],"la":[41309],"needed":[222,2120,2768,2939,3346,3611,4274,4776,4867,5181,6063,6122,6793,7364,8033,8402,10093,10609,13075,13391,14337,14734,14815,14869,15967,18038,18575,20725,23047,24909,26251,27015,27129,27169,27523,27717,27930,28589,29268,30369,31610,33433,33828,34178,34197,35934,36294,36593,37639,37671,37958,39625,39778,41624,41871,41876,41927,42204,42263,42468,42549,42598,42877,42897,42944,43302,44079,44360,44577,45197,45841,46722,46873,47263,47943,48185,48380,49028,49147,50007,50140,50200,50996,52168,52466,52586,54054,54223,54895,55552,56697,57112,58856,59593,59972,60518,60649,62030,62751,63221,66598,66820,67965,68635,68926,69169,69963,71541,71873,72323,72438,72917,72996,73598,74392,74657,74707,75017,75354,75374,75410],"sandybrown":[63632],"scheduling":[16579,23623,26256,26361,26482,26508,40160,49280,75445],"sqrmagnitude":[27390,29638,56963,72319],"graham":[14907],"pvrtc":[553,1557,3502,14338,21042,25842,27150,52595],"require":[236,541,889,1227,1355,1672,1761,3247,3294,3462,3500,3571,3861,4386,4545,4705,4964,5721,5973,5985,6082,6107,6834,7053,8259,8443,8726,8788,9160,9231,9971,10575,11040,11764,12599,12895,13058,14050,14527,16151,17591,18513,18851,19161,20341,20395,21052,22174,22896,23246,24004,24970,25733,27119,27538,28103,28918,29568,29714,29825,30306,30520,30871,31011,32609,34653,34901,35126,35340,36339,36855,36998,37398,38426,38498,38606,39723,40555,42547,42756,43455,43848,44238,44562,44758,45009,45447,47807,48164,48174,49437,49518,49703,50361,50489,50648,50937,52042,52483,52727,54121,57929,58375,58447,59872,60495,63742,64456,66178,66437,66812,67127,67555,67673,68196,68651,68902,69140,69739,69987,70184,70235,70292,71022,71441,71680,71764,71872,71973,72401,72497,72797,73610,74156,74776,74898,75068,75145,75409,75532],"r16g16b16a16_uint":[8477],"precedent":[34944],"fogging":[26885,44345],"uielements":[16743,30516,30938,35528,54518,54937,54995,55093,55197,55291,55353,55381,55412,55679,55758,55832,55936,55989,56152,56230,56288,56355,56433,56487,56544,56605,56750,56817,56995,57214,57423,57610,57648,57872,58238,58603,58770,59029,59401,59602,59786,59923,60142,60168,60235,60442,60522,60579,60656,60688,60857,60897,60997,61211,61636,61765,62139,62357,62513,62691,64000,64472,64493,64799,64940,65009,65173,65272,65397,65417,65436,65448,65462,65480,65494,65505,65824,65869,69330,69436],"eye's":[72521],"#da70d6":[63614],"sympath":[74518],"centreline":[30164],"foggy":[42792],"staggered":[48375],"msix":[72178],"avalue":[54564],"allowtightwhentagged":[48723],"setups":[4819,22071,29128,29827,34256,34337,34463,39310,40689,72962],"executemethod":[21031],"comparisonoperationfront":[45863],"lightprobeproxyvolume":[10202,15220],"initialising":[67384],"requires":[413,424,509,541,581,886,899,1266,1312,1333,1378,1491,1594,1704,2194,2656,2745,2999,3247,3447,3585,3718,3977,4230,5161,5596,5716,5959,6047,6123,7144,8514,9464,9883,9964,10200,10651,11527,11598,12022,12065,12356,12599,12840,12889,13263,14349,14928,18509,18540,18928,20239,21054,21456,21988,22071,22116,22653,23434,24165,24475,24598,24897,24951,25343,25497,25672,25738,26084,26663,27172,27490,27533,27564,27931,27984,28137,28189,28293,28753,28829,29416,29435,29718,30293,30326,31650,31992,32282,33075,33086,33404,33429,33842,34379,34863,35080,36526,36568,37901,38297,38336,38349,38482,39358,39591,39714,39887,40268,40610,41835,42101,42430,43521,43757,44056,44142,44660,44671,45021,45093,45446,47454,48168,48690,49309,49706,49763,50142,50209,51009,52257,52558,52728,52933,54141,58111,58147,58378,62757,65865,66638,67036,67594,67853,68210,68626,68853,69062,69679,69725,70011,70491,70734,70839,70937,71027,71129,71441,71790,72089,72530,72715,73011,73248,73478,73606,74337,74457,74603,74777,75322,75876],"divergent":[67155],"'managed'":[67262],"headmounted":[76138],"'create'":[51145],"terrain’s":[13897,50486,50620],"rocks":[5810,8086,25284,32311,32343,37702,49501,50361,50626],"ctrl+shift+n":[24534],"m_meshid":[5369,5513,5787],"angling":[65999],"npc":[2239,5054,13036,34924],"perceived":[4957,5160,7508,64190],"stereowidener":[4957],"qualitysettings":[12966,15070,27532,27739,35714,36031,38925,42416,49183,51985],"categorisations":[5049],"par":[23150],"aabs":[1333,53083],"cube's":[10406,13228,35250],"we’ve":[68611],"#dedede":[63264],"setvisualelement":[59406],"yeswaveform":[38237],"#fffacd":[63573],"reliably":[67594,70299],"packingmode":[48718],"cad":[53667],"vertexcount":[75811],"'title":[41254],"waiting":[3591,4417,10708,18258,21896,26357,27742,33409,35711,36031,36131,38851,72460,75437],"putty":[70093,70178,70647],"dispatcher":[57808,57878,65906,74715],"_cube":[46278],"putting":[9276,30352,37702,40288,71029],"autorotate":[1586,25879],"indicate":[315,408,1834,4286,4400,4431,4713,7127,7849,8048,8411,8500,8982,9965,11044,11149,11417,11657,12221,12811,14882,18751,18993,21319,22239,22468,25436,25850,26110,26248,27725,28465,28877,29420,30097,30260,32065,33369,33732,35050,35692,36337,36679,36696,39150,39322,39628,39724,39761,39819,40063,40323,40430,40597,41927,42430,42955,43256,44549,45170,45446,45694,46756,47481,48665,49531,49664,49817,50435,50597,53129,53324,54549,54734,57502,57585,60064,64362,65941,66617,67588,67696,67730,68509,68939,69183,70910,70960,71104,71155,71175,72713,73674,75145],"keeping":[1897,2347,4776,6737,6846,7482,8215,8357,13684,15835,21322,26586,27691,29759,30475,37667,37684,37696,38346,39377,39467,40263,40929,42793,46772,54375,54718,60653,68536,68622,74724],"hslidervalue":[23969],"unityshowbanner":[74117],"openssh":[70060,70094,70126,70177,70512],"ensure":[176,518,1471,1611,1736,2067,2668,2776,3243,3439,3488,3812,4207,5054,5973,6094,6125,6318,6836,7187,7494,8337,8436,9924,10003,10586,11068,11175,11336,11589,11631,13115,13580,13623,14498,14540,14700,14734,17981,18449,18624,19031,19944,20124,20271,20570,21325,22121,24475,24909,24933,26036,26264,26509,26569,26999,27041,27107,27594,27759,28233,28436,28477,28798,29325,29360,29758,29891,30194,30269,30357,30853,32686,33081,33286,33446,33515,33762,34256,34463,35441,35894,36629,37554,37639,38332,38483,38558,38588,38632,38684,39598,39857,40099,40570,40654,41583,42028,42101,42934,42954,43181,43959,44836,45036,45474,45583,48380,48528,48552,48623,49179,50068,50289,50514,50651,50688,51166,51236,51619,51817,52095,52247,52649,52757,52824,52903,53013,53127,53363,53691,53938,54032,54500,55923,56250,56692,57836,57999,58066,58622,59679,61326,64366,64458,64511,64610,64808,64914,65312,65537,65552,66160,66258,66598,66978,67044,67113,67255,67594,67702,67921,68043,68652,68725,68926,69169,70228,70299,70446,70818,70876,70937,71591,71771,71850,71855,72476,73198,73270,73387,73450,73580,73659,74680,74851,75015,75199,75439,75682,75918],"keyword_b":[42107],"alwaysenabled":[55983],"spring's":[9179,13685,13870],"i18n":[52647],"customeditorforrenderpipeline":[44198],"brake":[6792,9699,18489],"getrotation":[51650],"millenium":[38428],"rgba32":[14076,14445],"definitely":[49829,72683],"tab":[626,902,1339,1493,1536,1660,1879,1898,1911,2060,4046,4054,4155,4178,4188,4195,4211,4236,4395,4407,4415,4422,4442,4453,4485,4496,6998,7568,7575,7823,9810,9917,9996,11528,12317,12784,13371,13477,13632,13988,14277,14453,14781,17939,18061,18190,18896,19072,19321,19938,20556,21383,21444,21564,21705,21983,22035,22074,22252,22636,23490,25049,25200,25375,25401,26073,26718,26817,26977,27019,27107,27815,27923,29098,29343,29889,30197,30231,30440,30846,33072,33655,34222,35081,36685,36718,38277,40617,40731,42776,43525,48229,48238,48263,48336,52158,52578,52787,52838,52914,53085,53253,53695,53827,54405,54545,54577,57124,57842,58156,58298,60511,63393,64268,65335,66875,68795,68852,69061,69975,71140,71236,71319,71442,71493,71506,71526,71910,72444,72992,73607,73702,74187,74237,74940,74990,75047,75132,75343],"smoothly":[2069,5885,7929,11253,11298,14073,20570,22492,24164,26864,27092,32479,37625,38455,40621,52233,54042,68823,69055,71108,73623],"decrypted":[66149],"shift+":[20111,51334],"alternating":[11629,48374,52386,63253,64242],"tessellation":[21524,23619,26707,30291,38129,42150,43976,44891,45010,45454,46752,46818,50356,59530,60636,71752,74184],"“trilinear”":[45246],"overground":[72323],"m_count":[55592],"codesign":[28239,67056,67528],"empty":[739,1107,2199,2271,2364,2394,2426,3032,3484,3864,4477,4671,5285,5489,5683,5736,5800,6764,7861,7934,8072,8629,9051,9095,9847,10055,10789,11322,11792,12620,13142,13589,13816,14150,17978,18106,18204,18922,19006,19526,20007,20552,20622,20721,21028,21252,21460,21710,22094,22273,24164,24532,24630,25516,25667,26094,26900,27482,30048,31718,32754,33376,33383,33443,35212,35401,38679,38947,39027,39108,39169,39201,39627,40279,41679,44312,44699,45077,45145,45621,48373,48586,48676,49428,50401,51318,51345,52067,52696,53598,54213,54564,54788,55052,55301,56201,56381,56445,56580,56663,57434,58041,58259,58311,58375,59076,62072,63073,65490,66183,66222,66338,66523,67401,68231,69834,69903,70014,70399,70731,71608,71858,72499,73573,73631,73937,74420,74939],"workaround":[27675,28762,52629,67154],"searchlights":[26923],"bump":[10557,21431,22741,26170,35008,46176,46836,47461,48289,49514,49600,70757],"warn":[11177,11906,22057,25860,35002,46122,49557,56163],"pathtomyvp8file":[72650],"playanimationsample":[33914],"memcpy":[26162,26489],"_glossiness":[23296,29493,31880,33014],"newtonsoft":[3083,34617,71029],"crossfadeanimationduration":[10386],"hover":[731,3998,9627,10513,11588,12746,18993,20106,25387,35384,35667,39156,39292,39327,40033,40123,43237,48665,51264,53230,54445,54695,62591,62643,63259,63956,64213,64323,73283],"rightopenamount":[75579],"farthest":[42799],"unity_accelerator_log_stdout":[66621],"stringcomparison":[5995,73417],"“edit”":[68801],"relating":[3866,4055,7763,7903,9330,10302,10601,10648,11306,11729,13514,14637,19018,20619,22677,23543,23627,29919,42987,44586,45850,66342],"greyscale":[22804,25229,49498,49554,49564,50945],"specialized":[4866,5265,8203,8496,8902,9134,11011,11101,13961,20701,22924,37209,40174,41795,42262,42449,43022,44293,48268,50659,51846,57798,65738,68157,68351],"textmesh":[14006,15106,17949,31252,49817,54171,58651,69518],"md5":[394,3451,12399,52623,68916,69157],"openasset":[2483],"uk":[44915,53620],"unity_use_native_hdr":[44991],"firewall’s":[35836],"orientation":[258,308,689,825,1027,1573,1893,2042,6958,7085,7323,7478,7620,8157,8170,8534,8877,10404,10771,11753,12103,12476,12968,13706,14477,18422,19451,19685,19982,20058,21164,22018,22512,23701,25866,28358,30832,32400,34485,34760,34805,37279,38652,39252,42705,42726,42748,45783,51159,51329,53293,53737,66245,72518,72985,73263,75573,76295],"characterreceived":[74733],"displayproperties":[55983],"hashing":[6062,68915,69156,74159],"deactivating":[24794,39309],"dynamicresolutiontest":[20466],"interpolate":[7833,10082,10378,10475,11254,11277,13247,13534,20729,22678,37685,38502,38563,38593,46798,62586],"_inputfields":[58638],"downloaders":[3452],"instantiable":[20336,54445],"2mb":[29181],"lfsurl":[70725],"enumerations":[75553],"treeviewcontrolid":[52466],"except":[511,1840,2093,2245,2353,4066,4902,5053,5675,6024,6291,6388,6458,7251,7510,8579,10547,11617,12116,12919,13254,14445,14506,18008,18330,19034,20233,20263,20834,21326,21861,21997,23126,23383,25351,25841,28379,30415,32372,33587,34915,37405,37714,37824,38430,38604,39828,39890,40836,43302,44294,45285,47423,47944,48559,49325,49554,52727,57840,57865,58396,61486,64255,65081,65988,68481,68531,68580,69398,69502,69740,69851,70438,71281,71335,71523,71566,73448,74649,74711,75530],"composites":[14524,36597],"displaypopupmenu":[2514],"origin’s":[76305],"hiccups":[6139],"endframerendering":[38205,40166,68594],"workspace":[18895,20100,21045,28349,33065,34747,66842,67937,72390],"unityobjecttoworldnormal":[10185,47345],"savefilepanel":[25935],"__constant__":[32414],"industrial":[2999,3013,7215,15902,26567,33573,74366],"requestpointerlock":[73260],"configurablejoint":[8584,15141,36351,37619],"‘less":[14734],"tweaking":[4997,7448,7465,27564,43186],"filtering":[2539,3982,5158,5183,7671,8709,10200,10738,13220,14257,17957,18117,22582,23452,23666,25254,26998,29645,32396,33641,35158,36597,36679,37822,40845,41313,43177,44002,45244,48163,49034,50129,50693,52348,71200,71202,71217,71300,71523,74404],"image's":[22732,25171,39721],"repainted":[36045,59554],"lazy":[6044,57750,62012],"alt+right":[39301],"exits":[1653,21052,22540,26126,32759,38842,49650,49888,57568,60411,60820,62726],"tethered":[43475],"f4de40948f4904ecb94b59dd38aab8a1":[3205],"estimating":[22341],"luminance":[27575,28886,43882],"customer's":[4391],"tis":[48753],"fireworks":[2349,31760,32114,32182,32651],"webcamtexture":[1264,1389,6703,15145,73107],"normalbumpedspecular":[42239],"sampleposition":[14204],"retrieveproducts":[67286,67548],"realistically":[8342,11637,42810,49562],"downloadhandleraudioclip":[16787,68084],"stiff":[9013,9179,13686,13870,15003],"zeroes":[5445,5589,8438,20343,47944],"depart":[6211],"catalog…":[67084],"unwanted":[3443,5962,6154,10001,10068,12871,13837,18516,27087,27297,29368,29759,37622,38462,43185,44625,50008,72717],"androidvideomedia":[1570],"something":[2004,2120,2611,3262,3466,3895,3982,4647,4801,5061,5769,6265,6290,6735,13042,13580,18367,18616,18764,18828,20343,21175,24014,24737,24906,25350,25570,26081,27507,27591,28838,30098,32414,33428,37526,39382,39417,39467,39899,40623,41471,43041,45337,45648,49021,49430,49519,49609,49647,50941,52558,54223,56686,57457,57587,58044,61497,66197,66778,70396,71314,72289,72722,73920,74428,75485],"ress":[27704],"rooms":[10003,13962,30270],"resides":[4908,16060,30063,66620],"looking":[2178,2242,3739,3897,3982,4970,5064,6094,6439,6737,6840,7981,8080,8899,12677,13412,16005,17591,21509,24065,25229,27131,27532,28446,29530,32264,33024,33472,36085,36493,36710,37283,37390,37675,38450,41320,42365,44269,47191,49623,49636,50595,50648,52037,52184,52566,54682,54690,66599,70606,71219,72765,76298],"setikpositionweight":[25625],"'new":[51142,51394],"editor_resources":[64406,64421,64461,64481,64504,64556,64579,64603,64624,64687,64738,64816,64834,64851,64869,64903,64923,64948,64965,65016,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65545,65560,65577,65597,65617,65638,65658],"serializedproperty":[20800,20946,54989,55119,55367,55508,55577,56132,56224,58896,65049],"showoverheadview":[29870],"terrainfilter":[68888,69124],"obfuscator":[67764],"#cccccc":[63340],"ontriggerenter":[10716,15847,21175,35748,37453],"\\tempstate\\unityplayer":[27802],"lowercase":[12618,18750,49850,53601,58288,58451,62023,67164,72240],"nor":[3453,8302,8731,14332,20605,21534,25216,36069,38129,39155,43200,43825,45195,47750,69570],"redefine":[53025],"fingerprint":[52891,53831,66769],"statement":[1471,2180,2709,6194,7413,13054,18277,23797,23892,33777,41090,41544,41801,44516,45000,52640,53438,66520,73198,73683],"behaviors":[1574,2334,6501,6897,6935,7215,8090,9081,9719,11664,12222,12683,16542,17546,17759,19970,20045,23542,24020,24612,25867,31648,35831,36799,39912,42156,57809,57945,58015,59552,59733,65335,65913,67868,74164],"fringe":[33407],"progressmeshwritedata":[61098],"mdn's":[62935],"2348c7ea":[70032],"section":[12,168,211,274,381,427,550,569,627,841,867,897,938,955,1023,1042,1112,1153,1294,1316,1340,1418,1494,1520,1619,1730,1751,1787,1804,1827,1838,1881,1913,2008,2036,2176,2184,2211,2253,2325,2693,2757,2772,3241,3291,3309,3419,3481,3511,3785,3880,3946,4008,4027,4122,4155,4204,4249,4427,4443,4466,4722,4964,5196,5281,5341,5812,5940,6105,6222,6344,6378,6397,6484,6679,6689,6723,6751,6767,6798,7105,7265,7368,7483,7569,7573,7764,7888,7942,8353,8528,9210,9270,9328,9431,9752,9944,10060,10249,10498,10623,10698,11358,11404,11567,11598,11683,11704,12047,12274,12323,12442,12814,13041,13144,13357,13374,13489,13552,13748,13788,13901,14220,14584,14776,14957,15810,17000,17932,17960,18049,18110,18249,18360,18395,18405,18414,18667,18736,18797,19085,19174,19289,19318,19356,20074,20091,20292,20383,20405,20438,20624,20701,21054,21142,21382,21391,21446,21589,21704,21964,22044,22098,22111,22228,23219,23252,23381,23472,23482,23527,23533,23562,23591,23687,23777,23882,24469,24520,24929,24951,25051,25264,25442,25679,25688,25717,25973,26007,26062,26098,26100,26725,26794,26796,26810,26829,26927,26941,26977,27059,27078,27094,27099,27496,27550,27948,28075,28104,28119,28145,28200,28255,28480,28865,28879,29164,29408,29466,29738,29777,30502,30693,30847,31625,31659,31663,31819,32238,32258,32382,33088,33428,33446,33635,33750,33820,34248,34331,34455,34646,34745,35011,35473,35498,35700,35827,35941,35961,36020,36335,36375,36443,36497,36680,36697,37019,37270,37351,37532,38324,38876,39036,39447,39671,39724,39740,39791,39856,40039,40064,40170,40181,40516,40526,40528,40644,40650,41656,41700,41984,42209,42350,42362,42425,42705,42726,42748,42985,43003,43041,43083,43085,43097,43206,43227,43336,43465,43550,44723,45067,45215,45598,46552,48123,48243,48268,48380,48669,48893,49159,49171,49311,49503,49619,49671,49780,49819,50153,50164,50402,50520,50584,50656,50704,50948,51788,51886,51965,52186,52277,52472,52546,52787,52882,52959,53085,53249,53695,53783,54013,54341,54475,54538,54563,54625,54634,54699,54709,54779,57798,58203,58276,58375,58792,58999,59746,60351,60389,60790,61893,62053,62208,62467,62613,62664,62750,62853,64636,64761,65705,65920,65922,65955,65979,66053,66184,66349,66448,66450,66517,66540,66542,66595,66842,66992,67025,67074,67171,67765,67894,68045,68068,68074,68304,68310,68566,68689,68811,68849,69040,69293,69352,69456,69506,69663,69716,69956,70182,70266,70353,70588,70771,71046,71137,71384,71653,71694,71748,71896,71917,72375,72410,72501,72685,72821,72871,72993,73137,73195,73240,73310,73317,73360,73450,73577,73593,73839,73894,73979,74498,74531,74591,74816,74856,74931,74995,75047,75127,75211,75280,75429,75501,75970,76094],"requirements":[577,581,665,696,894,938,1099,1515,1599,1673,3304,3569,4287,4391,5691,5765,5816,6831,7496,10199,12668,12903,13713,14123,14277,18512,18665,18719,18729,18819,19122,19128,19268,19278,19288,20382,20404,21863,22928,23362,23380,23429,24642,24951,25238,25741,25827,25834,27031,27118,27144,27215,27495,27536,27655,27930,28125,28127,28856,28875,29153,29342,29452,29477,29904,30285,30502,31009,31620,33880,34197,34201,34662,35089,35802,36599,37657,38348,38414,39918,40001,43017,44054,44670,44770,45020,45181,45448,45943,49310,49401,49438,49511,49630,49670,50030,50075,50158,52491,52710,52729,52849,52942,52966,53280,54601,55560,64511,64610,64755,64808,64914,65312,65537,65552,66165,66190,66405,66525,66556,66905,67243,68053,68678,69712,70236,70591,71780,72090,72126,72206,72660,72733,74508,74864,74886,75034,75160,75307],"retailer":[4085],"keys":[1106,1124,1159,1178,1886,2263,2326,2387,2547,7186,9770,11044,11965,12646,14664,18509,18995,20544,20716,21854,22649,24670,25032,28105,32861,34222,35092,39265,39817,39900,40002,43209,45962,48667,50633,51190,52786,53378,54551,59732,60388,60495,60790,62211,65719,66119,66747,66951,67158,67603,67761,68511,69332,69438,69862,70059,70093,70126,70173,70499,70648,70831,71351,74574],"identify":[355,936,4653,6045,8987,9404,10412,12594,13389,13846,17268,17524,21154,21571,21956,22145,23185,24169,25043,26253,27723,28197,28482,28909,28962,29035,29105,30047,30179,30345,33500,35080,35366,35404,35694,35806,35958,36549,36680,37669,40352,41944,43009,46041,48514,49390,50289,51148,51269,53197,53350,53756,54016,54799,63922,66465,66916,67917,70831,71374,71404,72510,72730,73920,74384,74918,75518,76096],"x":[234,308,1883,1907,1937,2053,2298,2353,3927,3966,3991,4224,4298,4435,4491,4856,5312,5712,6072,6109,6273,6287,6597,6966,7032,7265,7690,7706,7953,7959,8032,8169,8407,8499,8681,8963,9004,9035,9169,9275,9299,9645,9713,9729,9768,10061,10385,10404,10504,11051,11448,11484,11600,11874,12220,12760,12970,13093,13103,13241,13281,13298,13557,13675,13860,13997,14013,14075,14254,14667,14808,14985,16151,16330,17045,18148,18173,18903,19314,19630,19808,20210,20227,20344,20486,20684,20956,21206,21570,21668,22548,23271,23669,24177,24328,24770,24909,24987,25317,25451,25538,25779,26968,27458,27472,27528,28707,28746,29436,29621,29829,30147,30282,30604,31834,32065,32128,32193,32357,32610,32635,32677,32902,33272,33555,33813,34256,34582,34781,35075,35250,36055,37033,37283,37681,37998,38568,38598,39253,39357,39587,39724,40141,40315,40749,41679,41773,42708,43162,43203,43305,43942,44272,44726,44851,45154,45250,45437,45735,46468,46764,47087,47472,47946,48143,48458,48757,48884,49535,49852,50094,50200,50375,50422,50476,50909,51137,51182,51238,51244,51334,51440,51575,51635,51919,52429,52494,52765,54734,56024,56839,58365,58447,58471,60268,60779,61913,62184,62212,62665,64141,64325,66350,66536,66568,67689,68668,69508,69763,70910,71873,71969,72526,72765,73474,73513,73677,74424,75088,75457,75557,76108,76460],"dimensions":[73,79,169,254,6118,7965,9274,10460,12303,12728,13111,13439,13713,13751,14073,14285,14577,14803,22292,23818,29700,32372,37289,37480,39599,48599,50933,54716,57031,59165,59819,64044,64229,71871,72291,72501],"emoji":[61943,65767],"belt":[13829],"want":[64,78,174,229,255,405,423,448,477,502,518,541,560,580,629,673,792,906,944,975,1035,1108,1118,1135,1192,1227,1351,1384,1393,1468,1611,1679,1727,1761,1821,1912,1960,1970,2064,2192,2211,2290,2415,2442,2748,2774,2958,3299,3419,3468,3508,3515,3879,3900,3920,3955,4012,4130,4157,4194,4212,4218,4230,4341,4354,4372,4391,4409,4421,4449,4465,4484,4497,4503,4561,4591,4874,5050,5091,5191,5327,5350,5497,5761,5768,6056,6230,6320,6325,6358,6411,6473,6737,6758,6834,6981,7192,7364,7507,7752,7816,7836,7865,7962,8032,8166,8205,8226,8266,8329,8376,8496,8598,8768,8871,9029,9058,9145,9172,9202,9242,9258,9335,9485,9608,9621,9711,9830,9850,9875,9923,10093,10215,10357,10401,10791,11175,11305,11387,11403,11454,11462,11520,11551,11608,11669,11844,12303,12410,12450,12725,12775,12900,13058,13127,13212,13284,13361,13392,13478,13538,13574,13613,13629,13680,13734,13818,13865,13939,13962,14001,14222,14337,14504,14572,14775,14843,14962,14989,15862,17384,17591,17926,18077,18167,18257,18441,18513,18617,18670,18716,18736,18749,18812,18885,18945,18970,19036,19077,19637,20052,20101,20192,20237,20425,20452,20558,20612,20668,20860,20967,21009,21029,21188,21238,21388,21471,21589,21851,21868,21999,22013,22052,22087,22139,22468,23258,23393,23491,23560,23693,23829,23964,24057,24195,24276,24533,24726,24741,24797,24909,24970,25047,25161,25197,25284,25330,25355,25444,25496,25623,25747,25916,25939,26289,26461,26507,26562,26611,26635,26647,26711,26718,26858,26946,26954,26964,27041,27098,27293,27324,27491,27552,27638,27678,27759,27814,27966,28097,28129,28166,28285,28346,28356,28394,28493,28798,28874,28885,29069,29282,29368,29466,29485,29731,29759,29784,29825,29879,29882,30052,30174,30210,30410,30453,30486,30536,30859,31014,31662,31863,32158,32263,32400,32609,32686,32767,33083,33243,33395,33411,33446,33533,33599,33621,33842,33877,33885,34603,34687,34749,34822,34901,34924,34938,34985,35196,35254,35519,35691,35769,35807,36106,36282,36430,36488,36592,36684,36768,37270,37287,37315,37397,37475,37604,37669,38430,38466,38498,38585,38657,38684,38851,38953,38989,39096,39138,39167,39186,39291,39351,39388,39530,39568,39597,39643,39720,39872,40169,40230,40521,40528,40689,40734,41202,41326,41393,41546,41678,41756,41876,41997,42255,42262,42449,42456,42615,42705,42726,42748,42778,42783,43002,43203,43255,43371,43519,43689,43920,43959,44085,44097,44283,44306,44372,44457,44946,45055,45121,45211,45302,45419,45648,45809,45841,46046,46295,46511,46771,47125,47377,48009,48201,48258,48502,48521,48552,48603,48885,49101,49158,49169,49203,49355,49390,49465,49481,49484,49510,49517,49571,49629,49687,49771,50288,50322,50390,50411,50454,50543,50595,50642,50648,50671,50730,50893,50974,51040,51117,51262,51394,51608,51957,52105,52182,52458,52489,52782,52895,52978,53151,53294,53837,54242,54291,54536,54709,55578,55731,57869,58253,58403,58457,58463,58799,59269,59670,60211,60980,61323,61357,61443,61556,61592,61921,61965,62024,62073,62194,63074,63115,64174,64331,64450,64528,64641,64696,64756,64955,65085,65872,66023,66162,66183,66230,66337,66356,66383,66540,66598,66901,67131,67650,67907,68068,68536,68545,68601,68819,68899,69051,69295,69512,69757,69793,70116,70246,70259,70313,70340,70556,70587,70770,70875,71108,71173,71186,71216,71258,71265,71290,71364,71404,71428,71469,71481,71505,71562,71593,71666,71805,71872,71911,72048,72178,72242,72287,72336,72370,72394,72462,72476,72643,72787,72943,73168,73251,73299,73321,73360,73410,73452,73499,73615,73704,73980,74044,74498,74660,74739,75033,75251,75766,75925,75946],"creation":[3241,3315,3512,4536,5829,6947,8845,10003,17591,17974,18084,18955,20343,21054,21388,22023,24169,25221,25236,25926,26960,29003,30658,33930,34192,34214,38983,39059,39102,41935,48372,49449,52172,54121,54556,55546,57809,58311,58446,59199,59552,62072,62783,66336,67042,68130,74212,75872],"crinkliness":[52139],"readtexturesettings":[48754],"earnings":[4101,4230],"gains":[4965,5179,6294,18235,22594,26510,58189],"rotational":[2042,7255,8006,8499,9745,10108,11545,12971,13240,15012,33672,36351,37290,38490,38525,38554,72337],"locktransform":[51652,51711],"unrecoverable":[67295,67437,67553],"header__label":[57380],"blocks":[2998,6102,6999,9329,13805,14933,20260,22738,26041,27836,27931,29154,30123,30173,33383,33429,35611,36513,37346,37527,38221,39947,40606,42597,44204,44755,45178,45386,45601,45772,45929,50005,52033,64376,66520,73198,73681,73952,74340,75446],"portable":[70788],"loaderurl":[73992,74100],"relates":[1967,7496,9098,9328,27323,30168,30257,35732,44809],"statemachine":[3277,6703,21332,49666],"streamingassets":[1840,10763,40438,48200,49738,72482,72644,73445,74029,74113],"y":[4,308,1907,1937,2039,2298,2353,2439,6109,6273,6287,6597,6756,6966,7032,7265,7953,7959,8003,8032,8169,8201,8499,8680,8963,8989,9004,9035,9169,9275,9299,9440,9541,9645,9712,9729,10061,10394,10504,11052,11448,11484,11532,11600,12760,12970,13093,13103,13241,13281,13298,13557,13675,13860,14103,14254,14667,14950,14985,15869,18173,19809,20344,20732,20826,20956,21206,21668,22532,23271,23669,24223,24909,25491,25537,25802,27452,27472,27814,29436,29621,29858,30147,30605,31718,31834,32128,32193,32257,32357,32528,32610,32635,32677,32902,33272,33555,33813,34776,35076,37034,37283,37365,37617,38568,38598,38655,39253,39587,39724,40141,41773,42705,42726,42748,44272,44727,44843,45155,47087,47473,47946,48143,48875,49535,49852,50375,50478,50540,50909,51163,51181,51216,51244,51335,51358,51440,51576,51635,51915,54734,56925,58147,58365,58471,60267,61913,62185,62212,70910,71608,71873,71969,72323,72765,73513,74424,75557,76108,76460],"sections":[59,168,1957,1980,2192,2236,2252,3457,3496,4121,4177,4245,4426,7359,7830,7881,9184,9941,10249,11461,11680,11701,12039,12318,12438,12875,13041,13764,13792,14221,14584,19275,21299,21446,22019,22061,22258,25051,25527,26825,28480,29915,30391,31872,32290,32847,33553,34242,34325,34449,34820,35411,35831,37322,37481,39029,39729,39828,48162,48241,48266,49341,51294,51867,52491,52737,52879,53250,54316,57134,58730,63143,66480,67280,67912,67997,68378,71020,71121,74122,74506],"remainder":[5006,6689,36240],"buffermaxsize":[75612],"isreadonly":[59667],"kicks":[58173],"tvs":[629,52706],"gatherbindablepropertiesvisitor":[37241],"aar":[378,812,1010,1232,1247,1812,1824,6705,23482,34543,68895,69133],"inversely":[26919,36636],"workitemhandler":[74716],"dynamicheight":[64894],"delivered":[23150,54032,68215],"momentum":[6792,23047,38643],"field2":[68396],"cloudconnect":[61584],"addartifacttocacheserver":[66680],"tries":[395,1565,8198,9261,9697,10573,11803,13665,14253,18079,18448,19472,20395,21087,21415,25678,26249,26564,30137,30871,33381,34209,34615,36099,36936,39794,41982,42190,42947,46783,50960,51013,51721,51965,61542,63864,64182,67558,67568,70224,70921,73310,75426],"unityframeworktargetguidmethod":[49808],"compositor":[37953,50170,75424,75903],"squared__":[26891],"customassetpacks":[477],"piechartwindow":[60727],"coming":[5160,9903,11298,22726,26863,26926,27332,45100,46764,46831,54635,54680,57808,64328,71808],"readytobegin":[11149],"waitforcommands":[35717],"wasmmemoryurl":[73409],"steelblue":[63643],"networked":[10788,10823,11071,11160,11172,11213,11242,11271,11292,16883,16933,19133,19635,22966,34203,66071,66181,66224,66335,66355,66406,68043],"maximize":[18900,20076,22046,43460,50065,50175,66802],"computation":[5181,9973,10080,10127,10602,15857,22788,26050,33489,41289,45295,51964,68954,69200],"counts":[3441,3890,5477,5622,7763,9099,11628,13384,20237,34890,35452,35968,36594,40859,41189,42177,53460,61725,66668,67182,74143],"personalized":[17092,55512],"sometime":[26347,26427],"boundsint":[51496,51532,51559,51733,55518,64413],"undesirably":[52040],"minimalistic":[44051],"numbering":[9128,9268,64533,65086],"articulationbody":[3014,7356,15295,33655,36302],"cook":[10572],"approximately":[1771,3975,7484,39368,39568,42245,42258,51990],"hovering":[12747,33498,54712,57836,63978],"cp":[53432],"annotating":[28589],"#ffa500ff":[49872],"treedataasset":[52362],"gb":[35126,36235,52736,53620,74787],"presenter":[5904],"hdrp's":[37936,49177],"hrtf":[5182,72890],"copied":[1234,3306,3433,3486,3649,3676,18458,18621,18979,25465,26226,28947,34736,35212,37713,48204,48651,68263,68895,69133,70781,71631],"utilized":[26356],"inputsubsystem_setboundarypoints":[75734],"quaternion":[1894,2048,2341,6069,6204,7015,8534,10475,12967,13338,20855,22867,25512,27462,37291,39960,40536,51680,66241,74480,75561,76270],"ranger":[59378],"commandexample":[43668,43784,43852,44116,44148,44180,44641,45906,47966,48004,48037],"”value":[40966],"you’d":[3252,33104,75545],"iterations":[434,6111,8297,11534,11600,14560,27393,33319,33608,33680,35340,37620,68994,69241,73192,73633,74814],"batchdrawrange":[5649],"finally":[2217,3253,3393,3712,5042,5471,5616,6144,6837,15851,18309,21240,21336,24960,25232,26163,31993,32412,34781,38393,38661,40630,44481,45145,45359,49465,50403,50522,52295,54302,56530,59991,66524,68131,71869,72514,73198,74427,75591,75795],"5f1+":[72791],"atindex":[63139],"numberpad":[29690],"horizontalscope":[59659],"amounts":[4078,10083,11510,12295,13306,22130,32137,35269,36231,40537,41202,52968,53330,73610],"orphan":[29065],"colorburn":[43838],"m_bordersize":[61113],"#pragma":[4629,8411,19055,20246,23255,23423,23586,28920,30292,38283,41990,42429,43947,44306,44505,44903,44978,45417,45446,45666,46756,47804,68999,69250,71112],"plugin_spatializer":[5236],"sdfaa":[58396],"astc":[553,1556,6383,6445,6700,11814,12350,14336,21042,25842,27149,28181,34280,73166,74047,74644],"logcat":[804,861,1481,1570,16561,26036,27798,31030,31403],"elementpath":[57620],"embedded":[2834,9139,10770,12401,13629,18884,18923,20233,21089,21389,22988,25182,25222,31603,33794,34600,41583,48251,50275,66501,66842,69388,69492,69569,69740,70211,70241,70327,70746,70781,70875,71158,71192,71341,71424,72847,73372,73415,73571],"sun":[9229,26859,26925,36593,37639,42766,42818,43543,49436,52140,71808],"obfuscates":[12012],"2”":[40966],"allpaths":[19521],"getnetworksendinterval":[11154],"font_tiny_size":[63241],"#fafad2":[63577],"parsed":[6045,14738,21676,50656,67800],"populatenextframedesc":[75431],"gte":[40850],"metro":[34578,37324],"tailored":[4556,34197,59541,60211,75111],"rockets":[8598,25572],"getdefault":[1478],"17b36165d09634a48bf5a0e4bb27f4bd":[3093],"areaeffector2d":[7213,15210],"historical":[15844,27507],"each":[100,168,222,248,258,281,427,478,517,550,617,909,938,979,1112,1243,1315,1331,1384,1393,1411,1509,1557,1619,1703,1770,1832,1882,1945,1953,1994,2037,2052,2098,2192,2239,2257,2275,2286,2324,2407,2427,2972,3012,3107,3318,3463,3485,3511,3569,3584,3675,3726,3814,3851,3930,3968,4078,4295,4388,4493,4522,4647,4825,4908,5024,5083,5186,5274,5330,5350,5497,5725,5771,5986,6063,6127,6223,6266,6284,6321,6361,6407,6502,6688,6723,6847,6942,6965,7068,7164,7195,7284,7390,7619,7749,7771,7868,7930,7956,8066,8128,8159,8197,8225,8302,8442,8553,8599,8609,8670,8806,8979,9008,9098,9138,9145,9163,9227,9258,9311,9368,9473,9553,9634,9715,9745,9761,9778,9875,9963,9998,10083,10121,10204,10337,10398,10465,10493,10633,10687,10703,10720,10772,11001,11039,11109,11175,11298,11423,11438,11461,11515,11536,11602,11669,11842,12043,12303,12399,12450,12757,12814,12866,12975,13041,13159,13206,13251,13263,13278,13295,13330,13373,13499,13601,13662,13696,13708,13773,13805,13851,13880,13898,13984,14121,14263,14355,14477,14502,14539,14560,14578,14663,14789,14868,15702,15854,16227,17384,18058,18118,18172,18340,18375,18440,18454,18580,18670,18736,18757,18844,18918,19006,19205,19454,19633,19675,20116,20200,20215,20237,20391,20427,20578,20736,20959,21144,21156,21221,21305,21402,21445,21576,21625,21640,21684,21715,21893,21956,21971,22076,22151,22271,22292,23258,23377,23440,23475,23558,23663,23733,23808,24018,24244,24276,24519,24524,24671,24757,24790,24910,24920,24970,25043,25170,25261,25345,25353,25439,25526,25841,25847,25887,26110,26248,26264,26375,26448,26487,26495,26560,26582,26613,26651,26669,26711,26723,26934,26953,26999,27054,27088,27331,27467,27490,27583,27650,27764,27815,27923,27983,28467,28782,28895,29153,29364,29550,29561,29586,29724,29761,29825,29843,29895,29907,30047,30209,30275,30311,30320,30353,30384,30443,30502,30525,30855,30986,31595,31653,31659,31661,31690,31765,31794,31834,31840,32078,32157,32215,32238,32260,32339,32357,32382,32605,32628,32659,32678,32723,32760,32847,32910,32922,33091,33407,33553,33572,33619,33652,33945,34184,34192,34245,34328,34452,34580,34687,34755,34771,34846,34884,34932,34995,35248,35277,35366,35521,35634,35754,35780,35815,35954,36042,36188,36204,36298,36360,36472,36570,36678,36694,36935,36998,37287,37347,37528,37625,37646,37688,37693,37731,37823,38245,38288,38336,38346,38382,38433,38479,38533,38557,38587,38639,38738,38944,38984,39062,39097,39150,39253,39322,39438,39484,39513,39522,39542,39574,39618,39659,39819,39825,39966,40096,40104,40128,40202,40441,40483,40513,40544,40775,40837,41178,41337,41348,41447,41677,41744,41871,41884,41997,42009,42148,42186,42320,42354,42691,42967,43017,43124,43126,43137,43302,43373,43456,43491,43493,43521,43553,43957,44062,44306,44363,44386,44427,44534,44637,44660,44677,45151,45184,45293,45419,45473,45568,45622,45695,45851,46825,47233,47904,48225,48268,48335,48353,48364,48382,48501,48620,48642,48676,48940,49197,49354,49437,49497,49510,49524,49577,49611,49644,49660,49706,49898,50003,50131,50153,50351,50363,50409,50452,50520,50559,50601,50628,50660,50945,50982,51004,51133,51175,51215,51232,51274,51388,51794,51820,51879,51951,52117,52197,52229,52243,52472,52673,52721,52877,52953,53081,53271,53699,53782,54002,54208,54257,54438,54706,54709,54800,55060,55268,55335,55508,55552,55633,55856,55995,56102,56188,56825,56982,57124,57341,57706,57808,57865,57971,58025,58077,58110,58150,58270,58338,58387,58557,58858,59090,59596,59720,59732,59837,60017,60209,60394,60562,60807,61312,61354,61501,61536,61666,61933,61995,62030,62379,62608,62701,62758,62885,63081,63105,63917,64182,64205,64325,64452,64702,64973,64986,65051,65233,65257,65719,65768,65831,65869,65945,65961,66003,66036,66184,66224,66374,66468,66563,67036,67085,67158,67161,67253,67624,67673,67707,67873,68043,68047,68209,68312,68384,68473,68819,69051,69397,69501,69705,69719,69792,69990,70116,70150,70236,70258,70297,70302,70773,70837,70875,70936,70950,71090,71136,71194,71216,71302,71397,71493,71517,71567,71592,71627,71858,71898,71925,71970,72037,72239,72348,72413,72505,72538,72619,72706,72752,72934,73192,73433,73607,73919,74177,74434,74883,74976,74990,75132,75366,75417,75617,75762,76090,76096],"_secondtex":[45222],"audiolowpasseffect":[7635],"getlights":[26747],"winbtn_win_max":[63500],"addplayer":[11009,66260],"searchitems":[2635],"querystring":[40848],"big":[1766,4254,4964,11520,11624,15982,16527,18575,22910,24745,24908,27322,29269,33081,35765,39560,39662,50167,52673,58704,61967,63237,65941,68626,73553],"dropper":[43551,64470],"compressor":[4831,6383,6445,7513,7573,9111,14296,28181,74644],"lib":[464,11918,12182,12369,12557,19222,34308,34394,34513,49774,73559],"surrounds":[8608,22750],"scrap":[4194],"myuilibrary":[60898,60998,61766],"forwardadd":[42393,43891,44579,45189,47105],"construction":[14699,18377,21837,52368,57634,68263],"facilitate":[11136,17424,29736,70952],"ignoreifunreferenced":[28568],"scriptref":[6375,6479,7970,8174,8271,8389,8774,9039,11564,12733,14509,52047,55989,72242,74636,74795],"asyncoperation":[6143,15704],"framing":[31116,50642],"clip's":[2381,7061],"m_dxswapchainpanel":[74706],"unityframeworklistener":[66852],"mantasp":[52563],"formatting":[2649,5901,17642,36857,61970,70821],"hierarchically":[7215],"sooner":[27742],"w3c":[12116,63719],"hemispherical":[35256],"uac":[239,19627],"doexport":[25934],"hasuserauthorization":[25685,73105],"coloroptions":[64569],"\\editor\\data\\unityextensions\\unity":[68660],"experimentation":[31107],"2gb":[912,1315,12231,27658,29316,52739,66570,73614],"myparticleinstancedata":[32012],"applyeffect":[42039],"object2world":[47412],"cores":[1765,6050,9466,11813,12349,12885,26271,26472,26495,31645,34279,34493,35037,68710],"deemed":[6024],"asyncbufferdelete":[35765],"onpointerdown":[49889,57442,60246,73287],"tv":[629,678,6947,21631,33803,50197,52694,52702,52717,52730,52747,52751,62010],"actively":[8573,9628,9723,26569,69864,71658],"stitchlightmapseams":[10652,27095],"username":[239,12640,21044,27623,28617,66629,69860,70038,70359,72388,74825],"subscriptions":[4384,25925,30413,30466,30500,67624],"whales":[22444],"chosen":[1962,3446,4867,6314,8069,8575,10772,11519,11657,11984,12119,12865,13036,13155,13826,14289,14822,18501,18934,24943,25162,25623,26784,27643,28450,29566,29908,31836,32456,32871,34919,37722,38662,39472,43531,44269,48865,49593,58799,59123,65945,66246,66381,75108],"weaker":[9179,9309],"runningonappthread":[74744],"companies":[30384],"critical":[2170,8212,11518,25861,29277,33081,35760,49442,70761,70921],"maxusedmemory":[21114,36512],"opposed":[1937,22548,30401,31863,35155,41202,41490,49505,75445],"radiobuttongroup":[55476,64528,64697,65078,65080],"#008080ff":[49876],"profiler_timeline_digdown_arrow":[63469],"bricks":[25550],"autodesk®":[1866,1931,1994,2177,2188,6216,7014,9137,16345,18190,21430,21477,24648,41752,71768,74895],"dummyscenetemplatepipeline":[38995],"widely":[155,6758,14463,72663,73165,73687],"showexample":[55682,55762,55835,56005,56821,58241,60446,60582,60734,60861,61214,61697,62142,62373,62519,62697,65828],"penetrate":[8197,8310],"unity_matrixpreviousm":[20347],"noparamdelegate":[52660],"oldstate":[4605],"caution":[11546,29793,70953],"enlightenvertexstream":[27048],"hdmi":[7765],"mixtransform":[2127],"0x242bf8b0":[74557],"tabbedmenu":[57137],"asymmetric":[74298],"#ff00ffff":[49863],"opening":[1996,2211,7645,9753,11343,18118,24856,27600,28100,28667,28703,28742,28778,35082,35651,36555,38850,39083,39177,40666,41604,44695,49822,51090,51139,51240,54211,58713,59045,61966,64444,68602,70120,70342,73193,74962],"draws":[5644,5727,6496,9098,10204,11791,17926,20073,20981,22153,22277,22828,25420,26846,27207,27259,27823,30352,32267,35517,36080,36444,38243,42712,42728,42751,42766,43484,43527,44625,47312,48554,49102,51514,57598,58463,61302,61526,62036,73240,74279],"anywhere":[474,1122,2271,2303,2394,3888,4831,5033,5122,9051,9404,13054,13552,16060,19405,20047,20707,26925,27814,32413,34751,34936,35381,35641,35727,39472,39958,40097,40256,40446,42637,44981,45145,46513,48178,54712,58133,63108,70773,71323,71806,71874],"correlate":[27984,36040],"opacity":[8131,12278,13768,13797,13899,14135,14322,18260,21435,23682,31758,37364,37838,49850,50511,50521,50528,50544,50553,50559,50629,57409,62011,64148,64752],"regenerate":[3733,4634,8385,12586,18989,25179,25912,48260,48597,58300,68711,69141,70044,75869],"intersecting":[8003,52034],"defaultconfig":[66158],"raisemeshremoved":[75841],"animationplayableoutput":[33920],"getdeviceswithcharacteristics":[76150],"iphones":[2839,12104,23550,25883,68808],"rectintfield":[55456,55531,59689,65115,65116,69322,69428],"feedback":[4069,7444,7461,10574,11613,16043,18665,26969,29996,41935,52043,56090,57578,65031,66608,66919,70755,72787,75617],"psdimporter’s":[74187],"getorcreatenamespace":[2920,18216],"inputsystemuiinputmodule":[58172,61516],"openings":[50509],"myassets":[4047],"screenspace":[43900,43963,46809],"#161616":[63304],"movegameobjecttoscene":[40688],"unity_4lightposz0":[47111],"playershooting":[33496],"member's":[30411],"_shininess":[44487,45366],"edit#gid":[37746],"myassetbundle":[3371,3546],"righthandobj":[25643],"responding":[5275,18376,21170,37621,52547],"frac":[6537,45776,46340,47604],"interior":[253,9875,26932,35017,37687,42691,49437,50552],"orchestrating":[57797,60213],"readmes":[18681],"indirect":[3493,6798,9099,9875,9948,10013,10072,18885,22107,22142,22792,23440,26798,26848,26947,27055,27064,27081,27178,27185,27214,27266,27293,27307,27484,27748,27756,29485,30298,31606,36592,37635,37849,46702,49423,49562,52761,55581,59720,68671,69244,70224,70235,70291,70875,71417,71842,72760],"opengles2":[1538,73465],"darkslategray":[63544],"getcomponent":[2021,2712,6248,9351,10746,23374,25646,25775,27381,32793,33395,33920,38450,40636,44617,45989,48889,50333,51499,51749,57278,57701,58184,58634,59491,59567,59792,60482,60526,60754,61292,68142,71961,72550,75859],"compresses":[3870,4217,22766,26096,28301,29332,37676,50483,72711,73025,73314,73389],"__hemisphere__":[32388],"inconvenient":[38606],"applestorepromotionvisibility":[67502],"newin20192":[51126],"customised":[25345,39826,49885,51224,54210],"getfirstandlastvisiblerows":[52454],"clock":[5005,6314,14844,21907,52044,74320],"signifiers":[47309],"iunityplayerlifecycleevents":[66821],"m_navmesh":[76416],"webglbuilds":[74078],"repetitions":[7539,7552],"harsh":[22596,42798],"safeguard":[33420,33457],"processingstate":[4710],"camera’s":[128,362,9462,13778,13826,14854,20454,22277,22786,29974,30145,33529,34873,37349,37702,39252,42797,43875,47026,48879,50965,71562,72724],"cakes":[13880],"m_sprites":[51629],"setplaystate":[34040],"effects":[270,1920,2133,2277,2334,2411,3245,3609,4519,4722,4790,4811,4877,5020,5110,5158,5186,5852,5968,6121,6494,6683,6750,6767,6793,6896,6936,7156,7486,7565,7571,7615,7674,7681,7760,7771,7920,7992,8225,8786,9848,9894,10209,10633,10840,11244,11274,11466,11504,11534,11764,12826,12973,13196,13245,13499,14009,14073,14559,14571,14778,15024,16984,17661,17752,17970,17987,18225,18239,18354,19286,20457,21358,22011,22058,22061,22522,23600,23629,24492,24984,25582,26566,26787,26852,26912,26948,27268,27297,27303,27538,27569,29391,29714,29769,29896,30062,30174,30248,31634,31671,31734,31750,31768,31780,31805,31826,31843,32081,32096,32120,32145,32207,32243,32331,32349,32375,32597,32617,32640,32668,32712,32750,32847,32894,33482,33538,34188,34839,34928,34939,35261,35411,35481,35570,35615,35883,35988,36181,37416,37593,37639,37757,38370,38421,38435,39161,39824,40066,40643,42365,42781,42896,43133,43186,43375,44051,44097,44178,44291,44376,44625,44836,45267,45629,45720,45852,46576,46802,47368,47985,48268,48511,48563,48617,48693,49179,49626,49654,50008,50357,50528,50599,50630,50932,51956,52099,54028,58392,65995,71811,72243,72462,72724,72767,72799,72806,72820,73089,74268,74503,75164,75412,75614],"batched":[25989,36371,36442],"borderwidth":[59625],"m_image":[56762],"statesource":[71166],"maxslidervalue":[24396],"metric":[4659,22359,35404,36549,50977,51074,52585,53492,66648],"gx6250":[14345],"decompressors":[5977],"m_selectedindex":[59197],"_m#number":[72023],"propagating":[64900,65191],"receivecontentlengthheader":[68239],"rebuildinternalstate":[35763],"unity_android":[385,7382,33802,67778,72651],"come":[1778,1894,1994,4120,4314,4520,4882,7199,7765,8986,10012,11508,11587,12699,13629,13830,21144,22553,23399,25496,25670,26049,26783,26926,29543,31856,31910,33054,33470,34955,37457,37722,38376,42365,44081,44366,44678,44839,45206,48568,52694,56837,58015,59855,61485,66974,67490,69694,71783,72282,72917,73388],"nativecontainerinstance":[26448],"included":[261,1000,3320,3483,4357,4710,4956,5183,6101,6285,6455,6688,7404,7427,9209,9256,9487,9963,10273,11308,11875,12918,13144,13956,14610,16020,18277,18722,19034,19201,20181,20288,21983,22437,23275,26597,27100,27682,28494,31610,32062,32738,33676,33782,34594,35581,36118,36290,36378,37492,37731,38005,38397,39526,39947,40253,42132,42950,43035,43267,43914,44306,45448,45868,46513,48174,48590,49394,49749,51126,51850,52349,52673,52737,52938,58448,66337,66467,66990,67720,67777,70165,70389,70837,71010,71301,71687,72282,72841,72890,73395,73450,73485,73924,74208,74366,75056,75226,75354],"schlick":[42814],"raster":[37838,58389],"rumble":[75609],"audiooutputmode":[72570],"networkbehaviours":[66069],"plugin_teebee":[5006],"panel":[2417,3611,5079,5165,9375,10351,11176,11339,11464,11966,12319,13713,14225,14664,18362,19020,19074,20003,20063,21328,21684,21694,21846,21891,23219,24825,25078,25908,26044,26927,26953,27219,28151,28353,30205,30515,30832,30859,32848,33639,35470,35497,35608,36112,36189,36473,36613,36695,37270,37667,37731,39076,39671,41574,41628,41691,48365,48514,48597,48620,48682,49178,49329,49484,49560,51094,52226,53001,53158,53403,53702,53943,55867,55909,56117,56689,56924,57843,57961,57986,58000,58119,58129,58333,58616,58652,58799,59110,59534,59764,60390,60539,60610,60649,61299,61487,61518,61814,61907,61934,61973,61995,62047,62121,62742,62867,63081,63938,64532,64696,65061,65085,65705,65769,65902,66690,67681,68552,68852,69061,71622,72520,73387,73442,74819],"ti":[48748,66615],"overlay's":[28352,30624,34760],"subscribes":[12632,74707],"coefficients":[5350,10109,11520,20265,26708,27474,47121],"autodesk's":[21428,22665],"sorted":[2663,9440,13598,14536,25077,33250,35279,37365,37632,38393,41111,41198,43217,47125,48685,48875,51202,66018,68912,69153],"#x69":[66770],"keywordenum":[42025],"sourcefactor":[43741],"grip":[75090,75651,76105],"strengths":[68867,69100],"comprise":[42049,42142,52224],"vertinstancingcolor":[31904],"unpredictable":[6844,9720,13264,18169,20343,30912,32218,33458,43655],"__density__":[26890],"'path":[41064],"newline":[39626,54561],"shortcutmanagement":[43326],"“not":[41845,67739],"ma":[165,2194,6699,24649,25194,29754,37551],"overscans":[8040,33557],"geticon1index":[52420],"printing":[36922],"setspatializerfloat":[5258],"loadallassetrepresentationsatpath":[3611,48756],"cleartext":[66158],"involves":[167,2064,2958,4534,8894,20864,21971,24977,26040,29784,33478,33588,35340,35629,36351,41858,44269,52615,52683,67886,68309],"‘vase’":[34912],"softvegetation":[42416,46797],"toggleinclasslist":[62402,62533,62590],"rarely":[3473,6129,6811,20239,21005],"registries":[11357,18819,31599,69708,69729,69987,70192,70361,70868,70939,71191,71216,71290,71302,71453,71463,71486,71540,74179],"configuring":[966,4761,6765,7299,9120,9221,12835,12899,15891,18355,22058,26676,27069,27733,29337,30244,37418,37614,39228,43125,44822,48119,50616,51019,52881,53784,66589,66937,67016,67069,67227,67746,67838,67936,69887,72781,72906,73751],"instancing":[1028,5688,5719,5767,5818,5856,9506,10438,13914,20236,23245,23376,30329,31862,32282,36386,38019,38352,41783,42987,43336,43482,44588,45035,45480,48329,49363,50362,73462,74339],"ramer":[10231],"64x64":[9274,50933,51137,61556],"unity_fog_coords":[10177,32969,47214],"thresholds":[6270,6291,26576,48268],"baseprojecttemplate":[12006,23480],"multicolumntreeview":[52368,55451,57625,59979,64908,64981,64985,65533],"60db":[7517],"tw":[53615],"asymptotevalue":[14968],"logicalnand":[43823],"uxmlintattributedescription":[54525,58083],"unity_dots_instanced_prop_override_required":[20326],"gridlayoutgroup":[36439,39572],"extrapolation":[13247,22659,38503],"#b9b9b9":[63372],"ipropertybag":[36849,37254],"consectetur":[65174],"my_game":[66388],"texcoord4":[32971,47476],"packing":[7472,13706,27003,27053,46128,48361,48528,48548,48574,48674,48852,51207,53995,58444,68531,72275],"letterboxing":[11735,12472],"100_gold_coins_mac":[67205,67306,67414],"unityxrnextframedesc":[75472],"main_window":[60187],"“d”":[33146],"block__other":[64368],"leftpane":[59072],"tracker":[4727,4785,5166,7469,22578,25841,52093,68041,76178],"__meshrenderer__":[32453],"viking":[50998],"ihvimageformatimporter":[6700,15261],"overflow":[9637,29248,40055,61840,62044,64145,65982],"#fff0f5":[63571],"preventdefault":[57949,58168,65341],"sees":[222,1384,6755,10028,22029,33527,49423],"reserves":[28042,29186,36224,40430,42178,48170],"iselecthandler":[49899],"canvasrenderer":[8146,15185,68733],"anchoredposition":[24734],"delimit":[52387],"boilerplate":[12332,17110,49148,68309,73914],"cubeimporter":[40461],"centercenter":[62233],"remotenote":[9057],"+2offset":[12896],"awesome":[4997],"illustration":[25631,27507],"reproject":[72928],"earth":[31838,59962],"isexplicitprovider":[2566],"selection's":[25438],"cap":[10263,12408,12903,13477,14600,26057,35256,35714,37798,52137,58287,71774],"profit":[234,47336],"enddrag":[40035,40125],"example_waitforfixedupdate_coroutine":[15758],"_exposure":[8719],"sshcommand":[70169],"slanted":[24912],"columnwidth":[57626],"loadtype":[73080],"cold":[1880,19397,22466],"magnitudes":[6105,72333],"soundtracker":[4784],"tokens":[18819,33008,40784,41329,41450,41501,53587,66635,70044,70192],"sparks":[31745,31760],"destructibletankscript":[55247],"subjective":[52010],"las":[24895],"newin20212":[21994,22007,23775],"compliant":[12105,25941,50224,73119,74199],"chartreuse":[63522],"unsupported":[163,439,3229,8461,11803,18526,21134,31617,38223,43801,67570,67730,68506,68923,69166,72634],"#00008b":[63529],"cacheservernamespaceprefix":[21069],"allowunsafecode":[3023,18644],"playwithtimecontrolsample":[34077],"serves":[1333,3591,5150,5978,6152,7344,7663,33883,39492,58067,65386,65413,65432,65444,65458,65476,65501,70868,75106],"m_viewcellsize":[76349],"“beta”":[50179],"activeobject":[2474,25935,55395,56244,56304,56369],"spinning":[1996,2439,9699],"toggle1":[61622],"newaccount":[66709],"oldwidthscale":[20493],"packagemanifest":[15356],"x\\preferences\\shortcuts":[43304],"polynomial":[32861],"reserve":[14914,28071,52739,67866,72180],"historysize":[70047],"uprightdown":[27416],"blendweight":[10499],"restriction":[5727,7262,15852,26139,33756,36351,44702,74725],"m_width":[61110],"vec2":[37015],"unityworldspaceviewdir":[47395],"firsthandle":[26419],"hot":[3783,31760,31838,39896,42793,51591,58997],"destroyed":[3435,5068,6120,8256,9157,10717,11118,18013,21372,25597,27690,28457,30900,32176,32655,33102,35544,38617,40476,50318,66257],"localmouseposition":[60391],"cuboids":[7955],"standalonewindows":[3536,6336,19110,24482],"getmenuinfo":[2527],"samplebehaviour":[2908],"screentext":[20467],"r16ui":[8483],"accuracy":[9063,10093,10260,11258,11280,11527,11598,11898,13249,14320,14560,14593,16453,26056,31708,37432,37683,38516,50344,50435,51987,60803],"whichever":[2324,8042,9886,12115,18363,25388,37373,39196,42323,43222,52229,54820,66229,67161,72916],"assetimporters":[25115,40458],"tessfunction":[46782],"flythrough":[22627,39241,39276,43224],"affordable":[66570],"reconfigured":[38640],"naturally":[2067,6758,21308,23807,32728,37700,49506,49850,72339],"onserverconnect":[66267],"animblend":[32919],"scenesetup":[40683],"stealing":[26481,35738],"mxn":[53675],"meshdescriptor":[75823],"activerenderpipelineexample":[49223],"pointerenter":[29434,40022,40112],"folder#v1":[70487,70704],"interpreted":[14729,40051,49824,59857,72297,74219],"reattach":[36458],"pregnancy":[53737],"m_make":[58761],"snapping":[8578,13112,20605,23667,34806],"startup":[735,1771,1859,2768,3767,4961,6054,6063,9781,11715,12513,12902,17998,19033,19266,19512,21023,23146,23543,25112,28405,29328,29835,30885,33471,34204,34630,34982,35891,36563,38278,38824,39167,42060,49428,51028,51773,51793,52478,66605,70112,70356,73173,73337,75023,75133,75588,75876],"accumulating":[8072],"walker":[75984],"beforehand":[1704,70630],"available":[3,79,122,229,260,292,410,430,499,512,729,734,1274,1575,1621,1721,1770,1981,2207,2504,2768,2949,2990,3252,3493,3538,3721,3975,4025,4063,4219,4245,4387,4448,4513,4654,4768,4775,4845,4879,5041,5158,5977,6273,6298,6315,6355,6426,6474,6688,6800,6891,7014,7469,7569,7576,7777,7824,8115,8146,8528,8707,8843,9027,9112,9223,9257,9335,9658,9881,9947,10009,10125,10400,10427,10454,10526,10575,10687,11376,11529,11667,11719,12185,12275,12319,12560,12833,12884,13076,13149,13215,13377,13747,13912,14011,14131,14230,14328,14485,14502,14882,15844,15902,15940,15955,15972,15987,16010,16025,16048,16065,16080,16091,16111,16125,16142,16156,16173,16188,16217,16227,16246,16261,16280,16335,16350,16369,16383,16397,16411,16428,16443,16458,16475,16492,16515,16532,16547,16569,16584,16715,16855,16874,16888,16924,16938,16974,16989,17005,17020,17035,17050,17067,17082,17097,17138,17152,17174,17190,17211,17220,17245,17259,17273,17287,17301,17317,17331,17347,17359,17375,17389,17403,17415,17427,17442,17457,17479,17493,17511,17529,17551,17566,17581,17596,17611,17632,17642,17666,17683,17698,17713,17728,17764,17778,17788,17808,17823,17835,17855,17870,17885,17900,17917,17947,17989,18048,18135,18379,18464,18511,18536,18620,18734,18980,19189,19309,19447,19653,19992,20069,20212,20231,20619,20893,21042,21154,21392,21500,21581,21626,21639,21891,22018,22041,22113,22151,22226,22349,23256,23383,23434,23818,23882,24299,24755,25060,25129,25190,25310,25342,25446,25694,25747,25888,25911,25993,26054,26117,26146,26271,26366,26448,26472,26577,26582,26797,26814,26913,27643,27678,27918,27952,28084,28167,28323,28421,28783,28873,29153,29374,29843,29903,29972,30063,30310,30328,30391,30443,30502,30537,30824,30880,30917,31621,31645,32130,32251,32414,32683,32767,33092,33409,33437,33515,33624,33767,33884,33902,34209,34274,34397,34484,34615,34645,34808,34845,34911,34964,35280,35385,35427,35677,35711,35772,35797,35911,35937,36037,36133,36184,36218,36367,36584,36712,37607,37667,37725,38002,38274,38324,38377,38541,38576,38609,38625,38750,38884,39269,39546,39579,39646,39723,39757,40039,40133,40277,40442,40530,40619,40681,40722,40767,41278,41316,41376,41436,41624,41673,41703,41742,41752,41803,41899,42026,42137,42354,42781,42947,43221,43458,43508,43967,44083,45495,48053,48167,48177,48254,48317,48372,48499,48529,48546,48595,48611,48617,48652,48674,48858,48876,49338,49428,49642,49716,49737,49849,50276,50342,50353,50363,50480,50582,50634,50937,51035,51325,51345,51596,51825,51862,51886,52095,52158,52234,52241,52485,52530,52581,52930,53183,53267,53905,54124,54237,54374,54442,54498,54674,55610,55866,55895,57610,58324,58776,59064,59837,64155,64765,64841,64859,64998,65355,65738,65871,65977,65982,66023,66225,66337,66380,66424,66461,66546,66570,67028,67177,67255,67319,67366,67549,67584,67739,67756,67846,68024,68157,68245,68263,68304,68310,68324,68600,68710,68828,68900,69073,69314,69350,69420,69514,69719,69845,70096,70315,70513,70756,70830,70944,71026,71132,71173,71191,71215,71294,71302,71417,71455,71488,71503,71517,71622,71645,71672,71792,71879,71903,72082,72129,72364,72375,72413,72522,72608,72664,72729,72743,72791,72821,72849,72880,72955,73025,73115,73163,73209,73438,73602,73806,73897,74153,74316,74408,74569,74629,74753,74778,74990,75083,75111,75135,75227,75306,75377,75474,76150],"lite":[3975,4372,4450],"notarytool":[28306,28317],"descends":[57818],"still":[3,69,188,223,1471,1502,1582,1772,1895,1957,2089,2215,2295,2324,2441,3065,3433,3491,3719,3944,4026,4062,4404,4997,5238,6031,6055,6688,6837,7178,7199,7323,7494,7568,7575,7673,8302,8439,9384,10575,10651,11308,11370,11509,12699,12888,12988,13075,16091,17752,18101,18257,18337,19028,19637,20076,20125,20242,20381,20619,21040,22046,22303,23543,24051,24527,24761,25229,25329,25875,26463,26572,26588,26646,26787,26946,27510,27927,28600,28880,29736,29918,30168,30265,30331,30378,30901,31013,32318,32665,32868,33079,33194,33382,33414,33436,33548,33599,34361,34619,34778,34882,35220,35888,36099,36620,36886,37684,37700,37737,38063,38355,38463,38576,38815,38900,39160,39311,39627,39881,40098,40526,40572,41603,42148,42211,42356,43075,43121,44079,45052,45403,45588,45599,45620,47083,48536,48674,49355,49470,49491,49497,49506,49522,49710,49781,50008,50391,50452,50579,50947,50968,51774,52010,52235,52327,52498,52634,52952,53223,53511,53981,54388,54590,54696,55642,57822,57918,58403,58441,58777,59855,60635,60822,61496,62017,63041,63082,64153,65968,66183,66742,67074,67193,67591,67903,68532,68541,68602,68795,69508,70332,70381,71054,71418,71588,72372,72996,73136,73299,73346,73661,74315,74615,75077,75224,75324,75673,76130],"involve":[3013,5162,7841,9878,15844,22798,27299,32617,33573,44234,57809,69785,69845,70326,71104,72318,75453],"#bdb76b":[63535],"'guid":[66680],"unityobjecttoclippos":[1689,6533,8744,10184,14192,23353,31976,32980,43367,43875,44044,44409,45687,46433,47221,47926],"hints":[7622,7759,8123,8217,8257,9158,9289,9716,9902,13971,14974,35007,39443,39639,39799,40065,40838,49465,52188,52558,60619,62865,64511,64610,64808,64914,65312,65537,65552,73383,74550],"wearing":[49565,75643],"workings":[18375],"upm_user_config_file":[70209],"64bit":[66567],"relativejoint2d":[13185,15215],"parallelfor":[26494],"loadfromfile":[2832,3302,3331,3364,3541],"unwound":[33455],"www":[3296,3446,4149,4278,6144,16799,21369,25942,30945,33062,39723,52639,58603,61275,61635,62008,62428,62547,66692,68099,68251,68270,68281,68318,68361,68376,68451,70096,70864,73682,73806],"mult":[6076],"treeelement":[52349],"mustn't":[49321],"setstaticsafetyid":[26169,26259],"terrainphysicsmodule":[16726,30967],"preferes2":[753],"targetpath":[44314],"afterward":[33081,39913],"cohort":[22342],"6th":[23551,72697],"course":[6063,9594,24912,26049,27705,33092,33763,37355,37512,37543,38355,47377,49432,68202],"saver":[68626],"presetpostprocessor_":[19492],"cel":[6908,27268,37401],"worldspacenormals":[47338],"scene1assetbundle":[3285],"myobject":[3361,3550,64802],"spheremap":[8620],"archives":[1227,1247,1812,2893,3292,26073],"coppa":[22327,41704,67665],"'0005":[52076],"instantly":[6792,9762,18267,20457,26572,32728,39638,66910],"setcustomcursor":[727],"cog":[20645,25633,30408,32863,39231,74418],"weigh":[3304,6213,29733],"webgl1":[12346,73465,73941],"locality":[1173,26509],"timeline":[1868,1886,1890,1913,2192,2272,2363,2395,2423,7066,14731,15711,17658,17950,18730,22024,22985,27820,29098,31032,31465,35397,35679,35697,35897,36037,36432,36473,39346,39760,40307,53857,54170,54213,70292,70822,70984,73695],"oldheightscale":[20494],"payoutdefinition":[67190],"\\editor\\data\\managed\\unityengine":[71675],"flat":[71,95,5115,6765,8566,10651,11623,20576,21202,22239,22918,26865,27332,30164,32264,32408,34779,35254,37318,37687,43205,47460,48605,49497,49519,50537,50620,50936,51155,72771],"shadersyntax":[45406],"searchactionsprovider":[2464],"“layered":[14029],"build's":[29277,29563],"unitywebrequestaudio":[16785,30943],"yesalbedo":[37997],"sortingsettings":[49131],"yourusername":[70135],"unity_access_instanced_prop":[23263],"encoding":[4775,7482,9281,11815,12351,14238,14817,21676,27127,34281,34494,38709,47501,50796,65865,68450,72633,73325,73719,74977],"another":[75,222,355,500,580,944,1255,1929,1987,2044,2124,2371,2680,2699,2812,3089,3306,3419,3569,3806,3867,3879,4274,4392,4792,4831,5080,5161,5267,6155,6488,6844,6858,6958,7198,7910,7927,7970,8078,8114,8174,8271,8389,8500,8618,8774,8897,9039,9145,9351,9820,9966,10080,10118,10394,10543,10722,11382,11434,11518,11587,11844,12650,12698,12733,12784,12830,12968,13067,13606,13815,13858,14509,14692,14717,14848,14933,14938,15839,17925,18076,18155,18226,18514,18616,18890,18980,19454,20263,20396,20712,21164,21302,21571,21989,22085,22183,22476,23468,23525,23583,24390,24505,24552,24629,24910,25166,25410,25452,25551,26118,26129,26359,26374,26441,26478,26545,26547,26557,26580,26605,26878,26934,27041,27337,27648,27687,27724,27996,28336,28568,28613,28874,29102,29133,29212,29614,29863,29906,30035,30124,30270,30316,31624,32054,32262,32729,33070,34237,34611,34671,34810,34944,35860,36055,36678,37571,37623,37690,37713,38275,38445,38478,38571,38601,38635,39837,40180,41337,41370,41554,41988,42182,42683,42961,43222,44000,44097,45179,46058,47156,47609,48349,48514,48587,48652,49391,49424,49643,49666,49684,49781,49823,50002,50693,50965,51123,51149,51297,52013,52103,52178,53198,54302,54834,55653,56030,56119,56221,56882,57288,57337,57620,57838,58369,58863,59275,60990,61196,61333,61474,61489,61627,62014,62853,63663,63841,63876,64033,64335,64538,65941,66234,66733,66818,66842,66867,66907,67148,68607,69514,70295,70316,70380,70756,70969,71022,71138,71240,71311,71418,71479,71632,71766,71809,71890,72247,72276,72302,72402,72521,72722,72754,73324,74034,74333,74787,74925],"textscriptimporter":[6712,15248],"hsv":[24517],"outward":[13818,32372],"devicedefinition_addfeature":[75529],"machine’s":[220],"profiler_timeline_rollup_arrow":[63470],"setscriptingbackend":[24959,29823],"broadphase":[11576,11621,35322,36328],"tool's":[7979,35106,71637],"sharedmesh":[6249,13483,29803],"sendmessageupwards":[9402],"hardwaretracker":[76162],"frag":[1693,6520,8725,8919,10157,14047,14167,23335,31936,32949,42001,42036,43359,44036,44401,44921,44985,45607,45678,47204,47918,49002],"vcperforcepassword":[21045],"handlehapticimpulse":[75606],"preseticon":[49959],"_lefteyecolor":[43419],"online":[235,1007,3553,4321,4379,11179,22347,23480,28310,28783,54019,66252,67170,67597,70384,75383],"”id”":[61468],"m_objecthideflags":[21643,76344],"components":[5,205,308,725,1812,1890,1942,2334,2375,2415,2765,2963,3732,4467,4845,4881,5964,6082,6152,6597,7032,7565,7572,8134,8397,9012,9177,9307,9329,9671,9744,10114,10609,10614,10804,11069,11272,11600,12770,12846,13093,13174,13263,13439,13454,13573,13684,13744,14469,14524,14711,14999,15020,15816,15854,15885,15935,16106,16256,16275,16739,17642,17744,17835,17941,17959,17969,17971,17973,17975,18040,18156,18357,18387,18418,18435,18570,18738,18907,20392,20540,20634,20652,20767,21144,21180,21457,21640,22012,22228,22480,23402,24464,24738,24763,25348,25377,25406,25444,25597,26079,26558,26580,26674,27041,27069,29391,29414,29420,29727,31764,31818,32128,32237,33624,33692,34856,34892,34911,34923,34955,35187,35344,36029,36249,36302,37346,37495,37527,37618,38339,38444,38550,38584,38609,38633,38646,39228,39466,39659,39681,39804,39905,39969,40001,40662,41511,43984,44272,44345,47362,47943,48181,48503,48617,48893,49648,49905,50473,50616,51067,51124,51849,52240,52585,53143,54120,54227,57628,58144,58831,59398,59833,61313,61492,61959,62748,64338,65908,65921,65970,65978,66249,66414,66448,66551,66903,68048,68923,69166,69398,69502,70909,71175,71604,71906,72243,72299,72813,72880,72945,74329,75037,75079,75107,75221,75320,75374],"draft's":[4468],"zdrive":[8533],"approximation":[6807,10261,11520,14598,15816,15831,23053,27330,31726,32742,35876,38384,38483,43950,49622,50929,52040,72928],"feeds":[23866,49764],"darker":[10100,26934,33407,42256,42704,42725,42747,42772,42793,45273,49510],"applying":[188,935,1930,2041,2368,4797,5038,5197,6815,7211,7565,7572,7990,9595,10215,12713,12973,13267,13754,14577,17092,19164,19453,20632,21323,22524,23273,24060,26012,26574,26986,29645,30145,31710,32400,34911,34956,35190,37495,38820,40453,40962,45319,46073,46396,46574,48366,48511,48627,50665,51941,51988,62193,64752,71933,72299,74177,74456],"unregistercreatemarkercallback":[28018],"generatevisualcontent":[56727,60701,60945,61051],"semicolons":[53039],"makeeditable":[72433],"libraryassetimporter":[15252],"p4merge":[35098],"textfieldstring":[23917],"effector2d":[15209],"noproductsavailable":[67518],"squares":[2407,8608,14681,22750,34245,34328,34452,34778,56839,59868,64201],"stronger":[8590,9309,42817,49455],"silhouettes":[9889,47368,72754],"trackselection":[2583,35170],"jsonserialize":[16663,30928],"#555555":[63265],"schedule":[4776,23625,26264,26280,26288,26374,26441,26479,26494,35735,36075,40151,49055,49281,52642,62534,66336],"softens":[34861,50549],"sampleshdrp":[18768],"serializedproperties":[38933],"deselects":[21607,65934],"asynchttpclient":[70561],"mygame":[781,34221,53682,53891],"imyextensions":[67565],"es3":[11804,34278,34492],"just":[220,723,1021,1821,1886,1957,1966,2086,2191,2215,2243,2313,2324,2381,2408,2418,2569,3243,3377,3566,4327,4583,4820,4876,5489,6750,7025,7505,7816,7930,8065,8226,8330,8419,9275,9364,10360,10908,13065,13115,13193,13240,13308,13361,13574,15844,17642,18235,18257,18384,18795,18897,18965,19063,20452,20787,20863,20967,21154,21306,21956,22139,22880,23779,24468,24728,24777,24895,24912,24944,25035,25096,25351,25521,25938,26094,26223,26923,26990,29420,29595,29801,29813,29861,30038,30048,30112,30401,30856,31992,32864,33407,33785,34790,34919,35728,35799,36110,37667,39255,39662,40064,40256,40500,40514,40555,40616,41258,41844,42365,43382,44364,45170,45195,45253,45305,45515,45715,46272,46754,46831,47126,47185,47908,49375,49412,49507,49821,50307,50585,50726,50929,51967,52094,52227,52459,52601,53874,54262,54430,54713,58193,59192,59562,60557,61449,61625,62015,62119,62813,65368,66000,66190,66365,66645,67800,69518,69740,71104,71534,71873,71970,72511,73553,74180,74680,75545,75975,76296,76332],"unity_x_y_or_newer":[33820],"prototyping":[6055,17000,24051,37548,44377,50583],"attacks":[3340,66110],"workloads":[41814,74394],"indicating":[1912,2294,2384,11844,29001,31718,34192,35772,49564,50347,50378,52032,52108,57244,67553,70839,71305,71806],"jpg'":[73961],"de":[53627,67592,73025],"drawback":[14348],"unity_lightmapst":[47138],"normaldiffusedetail":[42259],"#008000ff":[49864],"workarounds":[68610,70498],"_width":[64287],"operators":[14933,14938,15701,18139,30901,40828,41152,41316,41461,73953],"randomness":[11491,32403,50377],"ulf":[237,28698,28736,28773],"30fps":[14560,68725,68863,69096],"agfzy2fsbdo4zwiwntm5nzbjnti3otiwyjq4mdvkyzy2yweznmqxotkyndyzzjky":[70037],"typeutility":[36863,37065],"assemblyreloadevent":[18002],"files\\unity":[25459,69968],"outwards":[15025,32402,72357],"onselectionchange":[55393,56242,56302,56367,59122,59439],"grain":[34870,38103],"downloader":[3453],"indoor":[253,7913,9987,36592],"happily":[25599],"cs":[2689,2779,3761,3779,4655,4876,17045,18695,18833,19479,20771,20876,24152,24988,26130,26305,26377,26443,26498,28224,30100,30542,34744,38753,38891,40362,40630,48916,49576,49916,50292,53617,53746,54515,54923,54970,55075,55175,55247,55321,55377,55672,56133,56226,56284,56350,56405,56534,56603,56682,56747,56812,56989,57211,57419,57646,58623,58757,59023,59374,59559,59783,59917,60436,60683,60841,60893,60993,61206,61644,61761,62280,62351,62508,62656,62974,64408,64423,64463,64483,64506,64558,64581,64605,64626,64689,64740,64818,64836,64853,64871,64882,64925,64950,64967,64976,64989,65018,65075,65097,65112,65127,65159,65238,65262,65281,65351,65374,65515,65547,65562,65579,65599,65619,65640,65660,65791,67143,67692,67720,68624,70481,71682],"excludeifcontains":[48133],"'include":[48531,48543,48590],"localized":[6807,52972,53602,67063],"requestregion":[50148],"khronos's":[73142],"supportsmipstreaming":[19779],"whorled":[52120,52200],"icustommessagetarget":[29424],"sdk81":[34578],"ttt":[28140],"shutting":[12674,31643],"professional":[4070,4445,4544,5898,63233],"layoutparams":[1431],"archive":[377,416,812,1010,1226,1396,1811,1820,1832,2894,3259,3293,3569,25446,26072,30446,52542,53226,53260,54081,73651],"del2":[52660],"steps":[469,476,547,1284,2375,2713,2768,2998,3511,3777,4756,5326,6463,7188,8326,8898,10572,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11569,12180,13996,14560,17998,18224,18440,18674,19319,19340,19367,19424,20864,21160,22071,22681,23663,24519,24953,25309,25611,25753,25897,25901,26599,26690,27172,27607,27645,28078,28190,28282,28439,28638,28919,29443,29758,29818,29848,30213,33455,34686,34821,35104,35250,35359,35841,37488,38241,38779,39357,39751,40616,41690,41858,43141,43371,44248,47420,48335,48530,48552,48572,48980,49159,49802,50227,50537,51158,51163,51257,51841,51959,52185,52513,52576,52683,52812,52882,52984,53082,53271,53702,53791,54393,55550,55859,57574,57631,58582,58660,58803,61612,61957,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66592,66873,66931,66984,67139,67645,67886,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68936,69180,69775,69822,69873,70042,70060,70094,70127,71226,71353,71380,71665,71768,71814,72186,72296,72493,73136,73426,74529,74809,74854,74956,75157,75235,75476,76198],"flowing":[2347,7167],"operation’s":[6143],"easingmode":[63001],"#ancestor":[35115],"monomanager":[10728,15114],"donut":[32546],"concatexample":[33141],"spaceship":[4206,10827,18165,19306,26590],"bundleidentifier":[67782],"totals":[26005,42175],"loaddotsinstanceddata_motionvectorsparams":[20286],"myprofilerpopmarker":[27998],"lie":[10503,13093,46773,72350],"name2":[44802,45980],"healthier":[50381],"tuning":[7496,8207,12414,19047,25401,26043,26055,73616,74302,74423],"budget":[234,5921,9466,9998,12885,22805,31727,37826,50960,50997],"conditionals":[41788,41875,42953,43002,43018],"playables":[22520,33900,34155,34187],"collectibles":[9386],"m_hardmodemodifier":[56130],"navmeshobstacle":[15176],"mountasync":[2898],"'strips'":[41898],"working":[69,165,180,370,2059,2257,2360,2776,3591,3736,4484,4532,4772,5164,5181,5265,5446,5590,5832,5987,6057,6214,7933,9055,9617,10363,10460,11978,12987,13347,16060,17110,17788,17960,18177,18380,18456,18570,18898,19004,20558,20587,20834,21078,22904,23439,23527,23579,24059,24505,24580,25395,25465,26125,26434,26545,27504,27518,27548,27582,27813,29401,29408,29906,30226,30424,30478,31620,31875,33066,34661,34980,35753,37322,37391,38439,38720,38858,39097,39138,39226,39308,40162,40652,40675,41624,41836,41942,42312,42425,43011,43085,43097,43296,44272,44890,45119,47803,48315,48696,48894,49148,49505,49628,50408,50530,50545,50656,51342,52224,52624,53026,54010,54120,54579,54713,58856,62760,66555,67651,67862,67979,68044,70373,70969,71049,71552,71687,71813,71900,71933,72291,72400,72524,72957,73707,74202,75476],"physicscategory":[37621],"getsplashscreen":[74714],"dumplog":[25478],"smith":[42814],"materialalbedo":[28939],"before":[161,176,222,346,517,532,566,585,655,665,698,897,938,1069,1095,1190,1378,1495,1516,1599,1749,1807,1981,2047,2084,2194,2373,2569,2717,2835,3243,3307,3344,3365,3492,3675,3766,3799,3958,3976,4061,4168,4186,4206,4245,4387,4418,4421,4461,4479,4567,4600,4660,4776,4848,4960,5032,5125,5238,5716,5761,5766,5968,6059,6372,6429,6496,6764,7472,7778,7829,8547,8839,8992,9105,9517,9785,10340,10584,10719,10768,11075,11101,11210,11543,11612,12105,12279,12442,13089,13115,13143,13597,13894,14006,14332,14501,14581,14700,14734,14849,16075,16470,17994,18058,18181,18376,18471,19033,19122,19277,19366,19378,19502,20204,21042,21154,21306,21440,21540,22011,22435,23550,24048,24095,24608,24668,24812,24933,24975,25267,25343,25465,25672,25741,25827,25892,26096,26103,26249,26263,26347,26375,26463,26509,27172,27314,27520,27566,27591,27984,28052,28084,28131,28170,28185,28263,28282,28417,28493,28612,28874,29185,29758,29790,29893,29922,30070,30098,30179,30344,30857,31008,31606,31643,31719,32051,32155,32291,32726,32776,32864,33082,33319,33411,33877,33945,34184,34379,34632,34994,35737,36071,36337,36597,36713,37203,37329,37669,38726,38827,38851,38953,38998,39027,39395,39545,39610,39655,40010,40515,41289,41571,41727,42110,42185,42342,42799,42944,42998,43150,43267,43484,43961,44307,44428,44678,44965,45179,45290,45851,46014,46484,46975,48329,48366,48511,48528,48566,48924,48979,49409,49677,49752,50008,50144,50186,50661,50969,51166,51328,51916,52182,52389,52710,52730,52854,52888,52940,53014,53081,53427,53686,53851,53992,54015,54273,54300,54511,54604,54898,55576,55927,55990,56221,57128,57680,57809,57869,57994,58173,58193,58269,58355,58497,59144,59501,60515,60557,61302,62119,62414,62804,62867,65132,65335,65758,65849,66110,66194,66455,66635,66849,67014,67059,67076,67153,67264,67483,67598,67745,67756,67853,68064,68160,68533,68544,68566,68689,68811,68849,69040,69398,69502,69506,69621,69770,69811,69867,69957,70043,70063,70095,70130,70405,70921,71128,71207,71266,71368,71393,71420,71469,71626,71672,71797,71849,71869,71995,72004,72077,72090,72097,72119,72126,72172,72243,72407,72634,72851,72920,73011,73022,73091,73131,73147,73214,73288,73360,73382,73426,73471,73654,73818,74049,74508,74524,74588,74633,74816,74984,75229,75259,75431,75544,75872,76071,76195],"lease":[52921],"lengths":[13093,14764,29109,33528,63049,74615],"prefabname":[13320],"looped":[14728,32188,36013],"north":[13391],"remote":[1552,1758,3340,4567,9057,9768,10984,11225,12222,12640,16060,17089,18131,22408,25723,31025,31454,35044,35812,41962,48084,52645,52702,52742,52747,52751,53879,66233,66411,66526,66720,67460,67755,67844,68054,68208,68263,68279,68347,69879,70230,70598,71244,72002,73672,74524,74782,74810,74814],"organizations":[4386,19639,30382,30443,30482,30499,41701,52103,54104,66635,69987,70944],"flags":[777,4665,4746,5188,5660,8019,10594,11574,11766,12618,13142,14009,19238,21045,22153,23415,24483,26110,26248,27984,28447,30190,34424,34522,34600,34672,35058,44063,49697,49711,51652,51708,51758,51805,52579,53280,64586,66587,68283,68323,68350,74316,75522,75896,76136],"inspector’s":[25049],"getcontent":[3379,3559,68193,68299,68371,72591],"examplerenderpipelineshadergui":[44222],"unity\\editor":[43304],"stands":[30047,64337],"estimate":[20517,22359,26096,38566,38596,50975,52737,60802],"freehand":[52235],"helpful":[3,11160,28480,29835,30135,32317,46803,58920,66258,70769,71665,73263],"continues":[2667,10768,13076,13465,21053,32153,36337,38471,38492,38868,39141,40654,52224,52584,61489,68210,68852,69061,71129,71594,73701],"bindtexture":[73524],"focal":[8030,11486,21485,30147,33527],"neighbors":[22180,50348,50692],"editorwindowtype":[30519],"different":[5,75,78,124,167,237,253,284,430,469,481,535,554,871,978,1024,1087,1122,1299,1621,1908,1914,1950,1979,2034,2041,2097,2191,2211,2239,2312,2463,2720,2999,3245,3348,3446,3471,3486,3573,3580,3728,3895,4078,4286,4500,4551,4768,4799,4820,4879,5033,5127,5267,5305,5450,5497,5727,5773,5811,5845,5952,5989,6059,6121,6263,6283,6392,6483,6510,6680,6688,6810,6857,7079,7323,7913,7928,8014,8125,8186,8321,8550,8625,8833,9050,9112,9138,9223,9279,9368,9448,9588,9771,9862,9986,10133,10215,10336,10406,10465,10518,10633,10719,10877,11011,11044,11172,11308,11403,11519,11587,11612,12093,12444,12866,13001,13035,13122,13215,13412,13499,13538,13617,13659,13761,13789,13850,13898,13961,14119,14272,14342,14577,14710,14749,14775,14959,15003,15862,15967,16470,18071,18139,18241,18421,18481,18611,18851,18929,18993,20215,20420,20446,20538,20606,20726,21024,21322,21393,21445,21743,21988,22013,22041,22080,22129,22139,22226,22343,23264,23378,23537,23542,23629,23710,23797,23882,24052,24275,24521,24574,24665,24727,24768,25096,25140,25172,25203,25261,25333,25520,25721,25885,26110,26558,26569,26582,26698,26718,26863,26927,26954,26965,27022,27035,27127,27263,27296,27323,27468,27492,27520,27569,27673,27681,27694,27764,27884,28062,28135,28412,28493,28877,28953,29001,29108,29153,29330,29392,29551,29561,29614,29724,29751,29784,29827,29861,29890,29906,30061,30124,30321,30345,30384,30443,30853,30987,31619,31870,32172,32219,32314,32478,32650,32702,32852,32933,33194,33395,33453,33489,33529,33612,33725,33760,33762,33782,34011,34235,34245,34328,34452,34631,34637,34649,34855,34884,34905,34939,35191,35266,35692,35831,36055,36174,36220,36298,36354,36454,36465,37280,37385,37496,37589,37624,37684,37712,38258,38287,38332,38377,38403,38846,39100,39127,39438,39494,39553,39807,39817,39822,39880,40064,40208,40442,40513,40563,40689,40744,40853,41337,41348,41433,41476,41529,41649,41678,41780,41796,41826,41846,41876,42009,42024,42063,42109,42182,42243,42333,42354,42790,42811,42973,43002,43017,43114,43215,43376,43493,43553,43655,43801,43955,44205,44296,44384,44682,44758,44829,45004,45046,45252,45398,45470,45523,45564,45615,45627,45745,45840,45858,45932,46224,46717,47103,47245,47932,48168,48227,48316,48335,48501,48529,48537,48615,48665,48693,48893,48940,49177,49355,49449,49512,49522,49618,49631,49637,49646,49656,49663,50003,50034,50153,50363,50487,50528,50629,50659,50697,50881,50934,51144,51169,51186,51245,51264,51347,51612,51782,51820,51874,51999,52095,52179,52230,52491,52590,52871,53070,53176,53303,53777,54115,54223,54428,54564,54724,54814,55155,55411,55581,55839,55886,56079,56206,56706,57149,57305,57723,58111,58285,58499,59065,59554,60424,61354,61489,61528,61938,61990,62016,62788,62839,63068,63220,63681,63768,63808,63981,64078,64757,65765,66006,66200,66258,66383,66598,66814,67036,67765,68049,68611,68700,68862,69095,69333,69390,69439,69705,69792,69865,69990,70190,70228,70240,70306,70450,70598,70775,70806,70963,71054,71441,71446,71491,71605,71644,71662,71799,71814,71902,71917,72133,72258,72276,72518,72619,72709,72788,72825,72858,73302,73365,73499,73632,73662,73695,73896,74044,74280,74893,75068,75077,75111,75237,75397,75429,75901,75978,76166],"innermost":[13610],"dispnone":[47040],"wrong":[714,5764,8203,10871,27507,38412,44879,51069,67379,71314,71543,75984],"imguicontainers":[59580],"mb":[165,2194,6699,7715,7735,11911,12404,12900,14372,22600,24649,25194,26094,29176,29754,36235,37551,42221,48350,50003,52737,73938],"lwe":[40852],"blows":[15025,50469],"platformeffector2d":[11665,15212],"communication":[12222,12650,21181,22958,27938,29973,35834,73685],"scenes":[28,253,454,475,494,567,1313,2180,2769,3469,3506,3569,3830,3879,4534,4903,5321,6094,6350,6392,6477,6811,9075,9329,9498,9909,9987,10083,11172,11320,11624,12097,12598,13437,15902,17984,17994,18040,18417,18432,18453,18677,20594,20831,21122,21202,22144,22673,23427,24524,26651,26706,26797,26849,26925,26992,27015,27122,27215,27309,27575,28171,28601,29153,29881,30038,30207,30270,30328,33467,33612,33687,33760,34194,34631,34820,34924,36592,37270,37345,37526,37639,38318,38886,38950,39096,39171,39308,39905,40677,41274,41359,41491,41706,41893,48353,48677,48899,49437,49737,50656,50685,66092,66252,66419,66467,66678,66823,68045,68537,68710,68825,69058,69390,69494,71121,71412,71602,71850,72786,73187,73393,73613,74083,74283,74634,74793,75061,75114,75137],"improvement":[1904,6031,11813,12349,31642,33194,34279,35958,41993,74141,74272],"nonzero":[58560],"helped":[29334],"beautifully":[2063],"similarly":[5258,7217,24774,25897,26249,26789,29466,30341,32360,32456,33347,33535,36543,39437,40180,42360,44687,45291,46520,52039,56075,56101,61497,62759,63049,68534],"5wbg1vefnotb5a3":[69933],"textcore's":[74249],"encodes":[14794,43884,65537,65552,67765],"lab's":[5183],"yesa":[38088],"constructors":[18025,28488,30910,39169,39956,68245],"il":[6110,16137,24977,28263,30874,33304,37261,66461,74581,74588],"predetermine":[5324],"england":[57146],"__no":[14815],"previously":[3403,3867,4449,7839,9781,12918,19513,21168,24573,24624,24881,25096,27323,30245,30295,35203,35548,35691,35890,39149,39320,41702,41840,43386,43887,52929,52993,53207,53379,54398,67149,68749,68862,69095,69388,69407,69736,70245,71055,71170,72189,72422,72927,74186,74335,74738,75765],"headings":[25076,61967],"easiest":[2089,8434,27098,33458,33656,37236,45104,47752,52615,66707,67069,68043,73920],"readmask":[21753,45859],"contentbuildinterface":[2898],"branches":[31819,34040,41800,41911,42107,43592,49151,50613,52112,52175,52216,52222,66520,70708],"vibrate":[389,1261,1386,25863,32701],"guidance":[653,874,1751,5838,12116,14944,18052,22064,23423,24638,28480,30168,35830,37544,40647,43078,46528,49720,52704,52940,54044,67117,67655,68686,71759],"flange":[7573,7578],"quotation":[12804,41202,49840,70111],"“off”":[29346],"occlude":[11332,26934,30241,30271,42811,49497],"currentgear":[18492],"u":[307,13215,17803,21641,44753,45252,50341,51280,52143,58160,62040,66781,67177,71969,76334],"apply":[174,382,482,935,1296,1697,1789,1828,1839,1953,1967,1987,2038,2117,2243,2745,3312,3914,3953,4013,4042,4379,4553,4582,4790,4819,5006,5051,5122,5158,5216,5726,6059,6421,6964,7010,7152,7198,7496,7528,7536,7565,7572,7764,7778,7829,7869,7920,7979,8133,8205,8286,8508,8588,8700,9013,9055,9251,9430,9553,9664,9731,9966,10392,10845,11259,11272,11380,11407,11444,11476,11596,11733,12038,12275,12630,12707,12756,12775,12988,13203,13234,13277,13294,13379,13564,13657,13670,13836,13863,13899,14023,14083,14475,14577,14883,14976,14979,15852,16984,18072,18240,18353,18609,18753,18981,19021,19085,19164,19175,19472,20396,20422,20452,20630,21445,21608,22081,22844,23272,23542,24094,24996,25223,25242,25329,25407,26463,26547,26557,26569,26580,26856,26946,26980,27098,27122,28599,28957,28997,29014,29017,29131,29333,29646,29713,29893,30175,30439,31648,31668,31857,31920,32090,32110,32137,32291,32397,32610,32872,33655,33754,34425,34523,34539,34845,34907,34956,34994,35187,36006,36539,36589,36636,37019,37295,37413,37609,37646,37724,38408,38437,38462,38483,38489,38499,38525,38564,38594,38771,38915,39235,39595,39638,39718,39912,40066,40244,40506,40521,40544,40641,40644,41776,42391,42783,44348,45270,45952,46786,46980,47228,48225,48244,48269,48395,48511,48617,48634,48653,48903,49473,49828,49905,50306,50357,50388,50423,50511,50528,50559,50571,50726,51018,52010,52184,52226,53921,54357,54425,54604,54773,54796,54870,55856,56042,56781,57183,57628,58415,58652,59501,59549,60648,61305,61403,61522,61593,61965,62014,62182,62192,62879,63065,63817,63854,63872,63886,63930,63951,63974,64007,64020,64201,64380,64512,64564,64587,64611,64752,64809,64842,64860,64915,65133,65210,65313,65369,65538,65553,65568,65588,65608,65628,65649,65668,65768,65773,65913,66521,66543,67099,68671,68909,69149,69400,69504,69957,70119,70191,70552,70761,71050,71234,71353,71811,71934,72459,72701,72792,72929,72986,73023,73140,73251,73449,73483,73707,74177,74435,74570,75907],"rate":[223,1880,2177,3975,4776,4932,6135,6965,7442,7459,7489,7518,7585,7594,7603,7611,7634,7643,7653,7663,7763,8844,9180,10269,10398,11154,11244,11274,11445,11725,12662,12757,12884,13239,13278,13295,14323,14474,14558,14606,14846,14949,18172,20076,20438,21323,22046,22341,26000,26048,26789,26931,30326,30362,31777,32115,32197,32731,33404,33502,34997,35714,35879,36330,36513,36632,38501,39274,39628,39774,40010,50005,50579,50669,51954,53505,53769,62193,62886,68725,68863,69096,72934,72942,73248,73704,75439],"examplecubemaparray":[8703],"collider":[11,86,205,6725,6793,7198,7946,7958,8001,8133,8148,8161,8195,8262,8366,8372,8764,9023,9224,10563,11192,11300,11505,11533,11601,11647,11657,12698,12720,13251,13265,13636,13833,13886,14469,14497,14711,14942,15014,15077,15815,15831,15885,18969,21144,21175,22016,23037,25525,26058,27717,29386,29804,31701,32656,32754,33491,33628,33674,34809,35016,35254,36348,37350,37600,38474,38478,38531,38545,38579,38609,38628,38646,40738,41504,50290,50504,50606,51124,51237,51719,51808,51827,51845,51849,51877,71611,73398,74325,74416,75741],"visits":[36998,37230],"differentiates":[51149],"customstyle":[56773,60954,61059],"overwriting":[42793,68897,69135],"postprocessor":[7025,49802],"potted":[2958],"simpleexplorerextension":[26731],"parentfolder":[19487],"quadraticcurveto":[58543],"wood":[42809,49449],"varied":[2007,13898,25885,33733],"swapchainpanel":[12634,66877,74735],"propertywithnullchecksdisabled":[25011],"“resolution":[33544],"files\\unity\\editor\\unity":[15717,21126],"someone":[17206,22317,53476,70315,70447],"m_splashscreenremovaleventtoken":[74691],"randomwrite":[45482],"“tier2”":[45513],"calling":[389,807,1874,2098,2183,3039,3492,3695,4602,4661,5939,6146,10909,12661,18255,18531,19027,19086,21154,23814,24193,24275,25863,26040,26302,27690,28874,33082,33239,33807,34179,34635,34707,35338,35763,36091,39952,40590,45048,49289,51607,51815,53930,54273,54989,55582,55727,56221,56624,57966,59601,66157,66255,66849,66910,66945,67485,68412,68646,72191,73022,73500,74777,76296],"rotations":[1893,2041,2353,7349,10406,10475,12971,15836,22868,29903,31996,32227,32360,34901,35745,37280,50403,50595,51802,54720,76095],"contrast":[3731,9965,10070,14710,15015,22506,26117,33608,34866,36501,36593,42793,44085,49555,50453,52095,57329,69671],"licenses":[222,4040,16043,17030,18736,18937,22100,26688,26694,28604,28703,28742,28768,30475,50342,52494,68046,70320],"autoenabledcategorynames":[35429,35583],"⋮":[12785,35220,63119],"buildiosappslices":[2841],"aes":[66159],"great":[2437,3466,4773,4814,5070,6836,7620,9898,13667,14702,17642,20863,22852,24094,27520,30138,32136,32704,42467,42896,45585,49449,50941,58117,58381,66802],"learns":[41427],"examplepassflag":[42407],"command+":[23769],"linecast":[35310],"initializeonloadmethod":[2786,18034,69654],"affects":[328,554,997,1843,2277,2411,2598,2641,3843,4591,6382,6444,6803,6965,7018,7992,9939,10013,10398,10554,10572,11445,11477,11588,11606,11815,12153,12307,12351,12757,12895,13133,13242,13278,13295,13397,13718,13904,14290,14708,15024,20344,20403,22121,22598,23480,23726,25329,26049,26809,27698,27754,28180,29331,31701,32108,32226,32273,32372,32732,33395,33468,33672,34281,34343,34469,35879,35942,36172,36629,37653,37696,39123,39147,39318,39402,39853,40220,42049,42122,43173,43491,44626,44695,45040,48179,49406,49421,49491,49621,50382,51080,51124,51137,51175,51198,51388,51832,52042,54720,54799,61470,62030,62797,63981,64190,64209,64322,68531,69308,69414,70759,71216,71591,71637,71855,72995,73406,74643,75470],"gun":[2415,5054,8078,8563,13182,22663,25788,32650,32703],"quaternions":[1893,2052,2353,12974,37280,75561],"assistant":[19617,28786],"curve":[1880,1892,2007,2048,2324,2397,2441,4964,5207,6229,7022,7161,7644,7800,7986,10260,10560,13059,14593,14967,20540,20732,21475,22466,27509,27820,29117,29128,31094,31765,31797,32090,32110,32136,32216,32341,32365,32606,32617,32680,32735,32854,35763,36005,38090,39367,40622,49530,52121,52201,58542,64489,74301],"assets\\rethrowerror":[38767],"purchase_date_ms":[67464],"“strip”":[5116],"getgpuprojectionmatrix":[44868],"meshinfos":[75746],"maximizing":[20078,22048],"unsaved":[18982,20612,38930,38973,39221,41715,48654,54264,54419,58795],"cleans":[26302],"refunded":[4104],"dynamicatlasfilters":[60662],"il2cpp_additional_args":[24473],"choose":[64,188,369,478,666,1122,1140,1538,1656,1918,1971,2044,2354,2989,3234,3451,3884,3901,3932,3957,3987,4058,4206,4256,4477,4833,5084,5856,5970,6052,6273,6298,6333,6347,6468,6765,6796,6855,6934,7157,7671,7837,7942,7985,8032,9058,9207,9280,9400,9462,9642,9927,10079,10329,10393,10653,11106,11259,11281,11291,11335,11403,11611,11681,11755,12180,12295,12345,12443,12776,12866,13036,13127,13208,13247,13387,13478,13765,13899,13999,14128,14257,14336,14795,14841,18044,18094,18119,18248,18819,19036,19220,19621,19650,20069,20100,20210,20577,20675,20790,21388,21467,21578,22047,22086,22103,22128,22878,23449,23564,23617,24051,24786,25162,25221,25272,25428,25447,25542,25939,26047,26253,26296,26613,26685,26858,26913,27341,27488,27491,27555,27638,28151,28339,28395,29070,29340,29906,30052,30241,30284,30411,30443,30781,30830,30859,31668,31814,32063,32106,32167,32311,32371,32615,32679,32723,32863,32917,33529,33743,33842,34272,34392,34480,34675,34820,34860,34912,34949,34984,35200,35379,35637,36065,36459,36481,36573,36685,36694,37272,37306,37345,37484,37516,37589,37708,37744,38253,38258,38288,38503,38647,38668,38868,39074,39127,39192,39471,40251,40662,40764,41325,41365,41548,41596,41674,41725,41764,42128,42774,42785,42937,42947,43120,43243,43467,43543,45967,47335,48170,48250,48286,48358,48366,48515,48532,48683,48938,49567,49608,49637,49714,49753,50307,50349,50372,50513,50521,50538,50559,50629,50671,50738,50881,51081,51103,51158,51371,52184,52522,52926,52978,53151,53285,53853,54212,55866,57924,58177,58336,58370,58454,58682,61500,61938,62066,62856,64528,65945,66014,66230,66365,66598,67032,67116,67241,67663,67877,67963,68799,69014,69266,69771,69812,70730,71110,71205,71215,71283,71289,71446,71746,71795,72178,72362,72364,72384,72511,72741,72825,72871,72897,72942,73157,73317,73659,74044,74212,74404,74634,74810,74903,74979,75079,75127,75197,75343,75388,75485,76166],"audionormalizeeffect":[7691],"audioclips":[4773,5041,7494,7767,16787],"enc":[43885],"however":[14,75,158,188,229,249,512,661,1007,1069,1127,1227,1611,1893,2086,2215,2243,2324,2375,2439,2668,2782,3248,3363,3455,3491,3522,3571,3589,3853,3879,4026,4223,4387,4390,4404,4438,4565,4663,4740,4861,4879,5258,5316,5351,5730,5773,5939,6028,6059,6135,6286,6318,6374,6434,6718,6762,6810,7025,7178,7313,7364,7510,7944,7955,8122,8434,8514,9134,9265,9399,9463,9762,9977,10003,10055,10130,10435,10579,10633,10780,10811,11434,11466,11670,11844,12275,12699,12888,13076,13242,13264,13309,13400,13457,13613,13911,14721,14790,14962,15838,18081,18167,18225,18257,18360,18481,18728,18819,18885,18948,18987,19026,19164,19348,19361,20124,20231,20242,20381,20423,20450,20572,20601,20637,20787,21052,21202,21460,21604,21988,22011,22036,22090,22107,22127,22203,22693,23270,23438,23543,23727,24517,24601,24621,24638,24741,24776,24916,24973,25096,25194,25262,25521,25623,25747,25841,25845,25904,25928,26042,26110,26375,26442,26477,26494,26646,26664,26708,26790,26807,26922,26987,27056,27073,27088,27214,27299,27323,27329,27520,27688,28129,28310,28453,28753,28791,28874,28880,29153,29363,29470,29695,29721,29785,29861,29907,30039,30048,30265,30292,30412,30443,30500,31013,31367,31624,31718,31996,32233,32651,32729,32872,33088,33415,33421,33494,33582,33618,33649,33842,34672,34758,34791,34883,34927,34939,35236,35344,35462,35496,35697,35794,36091,36172,36578,36674,36693,36786,36855,37236,37281,37322,37548,37683,37724,38469,38482,38621,38641,38859,39137,39168,39435,39494,39591,39714,40358,40544,41792,42058,43023,43115,43194,43239,43335,43998,44229,44627,44839,45220,45585,45720,46783,47415,47952,48170,48227,48353,48536,48659,48674,48857,49038,49158,49169,49345,49426,49491,49495,49510,49522,49570,49609,49737,49763,50403,50520,50540,50579,50659,51025,51138,51239,51257,51975,52095,52222,52493,52584,53954,54106,54223,54492,54644,54696,54718,54773,54871,54895,55512,55621,56610,56681,57305,57628,57887,58172,58653,58823,59552,59872,60638,61390,61593,61759,61921,62194,62586,62830,62867,63689,63768,64139,64325,64697,64756,64885,65051,65773,65849,65898,66183,66225,66337,66361,66390,66450,66627,66909,67090,67195,67400,67756,68086,68541,68922,69165,69330,69352,69436,69750,69813,70174,70230,70235,70288,70332,70394,70648,70818,70871,71027,71173,71215,71424,71491,71551,71664,71876,72193,72240,72328,72474,72724,72939,73088,73136,73175,73292,73405,73417,73433,73563,73616,73702,74315,74537,74635,75109,75249,75445,76035,76095],"license":[165,210,2999,9265,16043,17030,18691,18730,18937,21009,21093,26684,26695,28603,28669,28713,28751,28760,30470,30502,50342,52496,67240,70307,70756,70835,71132,72439,74212,75322],"permitted":[8420,25941,57619,68481],"udpstore":[53882],"capsulecolliders":[8299,33699],"mymaterial":[3626],"emitted":[5161,7645,8490,9870,9967,20337,22852,26788,26931,27065,31788,31802,31857,32136,32188,32371,32702,35714,35779,69901,73299],"clampforever":[2147],"needle":[75311],"bubble":[57813,57857,59749,60497],"aniso":[3855,8430,8834,10737,13220,22727,25292,48802],"mywww":[68319],"setcorewindowevents":[74708],"#0d0d0d":[63279],"occludes":[11332,30184],"seasonalthemes":[60173],"closer":[67,253,363,2274,2399,7795,8120,8196,8386,9008,9184,10261,10357,13180,14598,23841,25284,30142,32269,32742,33681,35879,37822,39578,40132,42255,43132,44634,47963,50685,66003,72941],"transforming":[20418,34792,39852,66458,75221],"iamazonconfiguration":[67003],"lfo":[7446,7463],"tspace0":[47472],"indices":[282,4884,5354,5646,5727,8357,10497,13420,18597,20242,21221,21517,21735,24984,36396,44268,52453,58466,60054,61069,69642,71969,72761,73448,75617,76315],"96mb":[12416],"sb":[28617,36271,36419],"automates":[962,9102,23138,25310],"++_clickcount":[58643],"contextualmenu":[57990],"instructed":[66253],"1vulkanmetal":[45482],"#pragmadirectives":[44989],"proximity":[11181,11546,12650,18226,22142,68807,72319],"pushmatrix":[51515],"boxfill":[51532,51567],"rescaled":[8120],"#dcdcdc":[63556],"assisted":[72665],"enable_cbuffer":[45042],"cloudbuild":[53089,53310],"musiclibrary":[12643],"interpolators":[41876,45477,45725,47348],"stripe":[12671,18898,55891],"orthogonally":[51631],"heap’s":[33433,36093],"editorextensionimpl":[15236],"parents":[3486,5103,8139,9339,13610,24575,29420,32168,39150,39322,54273,54548,55630,59837,60556],"fed":[7444,7461,18229,71042],"startinfo":[6341],"loadstoreactiondebugmodesettings":[11824,12359,34293,34503],"processpurchase":[67327,67339,67351,67538,67550,67587,67625,67775],"split":[168,405,427,492,526,541,608,903,1311,1326,1882,3473,4535,4962,6044,7881,8091,11844,12048,12865,13429,14297,14348,19410,21528,22139,22411,23481,25171,25229,26507,29721,32730,34877,35885,36454,36597,36803,37647,38100,38485,40180,43118,48594,48683,50881,52674,57475,64179,66165,68498],"heading":[1138,1968,13925,20220,21875,24956,28470,29352,30881,35382,35781,38747,39065,61968,72314],"#fffaf0":[63554],"\\data":[70928],"cellbounds":[51733],"indic":[25031],"__exponential__":[26889],"annotate":[26242,28481],"asmref":[3779,6695],"p4v":[33065,48069,72400],"firewalls":[66764],"breaks":[8551,14004,21460,26577,36223,48162,57811,62044,68469,69330,69436,70758,70821,71056,74335],"lightingramp":[46602],"ambisonicoutchannels":[4749],"simple":[183,994,1276,1924,1982,2070,2191,2216,2235,2242,2360,2434,2637,2995,3446,3695,3724,4883,5179,5348,5443,5497,5736,5800,5817,5920,5995,6059,6154,6285,6793,6897,6942,7179,7448,7465,7543,7556,7605,7647,7915,7981,7998,8115,8908,9235,9596,9754,10082,10140,10204,10477,11160,12331,13020,13155,13752,13961,14005,14154,14712,17865,17970,18384,18454,18503,18828,20252,20670,20767,20864,21230,22190,22460,23780,24667,24769,24790,25499,25929,26085,26271,28875,29127,29423,29664,30001,30112,30343,30755,31717,31760,31765,32230,32609,32705,32848,33104,33588,33909,34698,35135,35258,35977,36219,36400,36511,37237,37574,37881,38318,39357,39508,39681,39708,39960,39969,40066,40456,41166,41523,41820,41935,42766,42796,43081,43114,43175,43386,43595,44242,44472,44758,44822,44839,45239,45575,45670,46142,46552,46761,46875,47232,48168,48975,49536,49564,49837,49915,50367,50446,51753,52247,52601,53691,54506,54814,55386,56235,56293,56361,56457,58463,58586,58660,58756,59090,59271,59552,59872,60980,61443,61993,62637,62641,63843,63878,63912,63956,64025,64328,64456,65985,66225,66335,66350,66373,66435,66802,66817,68073,68080,68317,71408,71695,71753,71793,71863,71970,73553,74418,74893,75617,75882,76332],"heightmap":[7983,13914,22742,29809,37899,49494,49554,49564,50348,50409,50478,50515,50549,50557,50569,50946,74255],"slot2":[56836],"•":[16470,24941,25028,29998,33578,67622,67750,67891],"srp":[5354,5523,5694,5807,6839,6915,8807,17110,19292,20240,20385,20407,21739,21958,23248,23381,26716,28842,29459,30334,38156,38265,40150,40168,41827,42314,42603,43568,43657,43686,43731,43803,44099,44136,44168,44201,44322,44340,44379,44424,44593,44629,44673,44761,44792,45057,45186,45263,45392,45525,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,48909,48981,49145,49169,49175,49281,49309,49673,68592,72810,74279],"\\windows\\system32\\openssh\\":[70515],"designed":[1890,2179,3736,4772,5038,5276,5829,6136,6908,8280,9058,9229,11166,11305,14943,17398,18458,18503,20403,20834,21181,23059,24054,24276,24774,25345,26473,26545,27090,28979,29420,29614,31997,34192,35795,38541,38574,38624,38839,39278,39395,39415,39492,39856,40000,40103,41292,42812,43870,49440,49614,49644,50602,50937,61542,63132,65049,65963,66251,66390,67755,68309,68520,70714,76335],"useable":[3414],"renderpass":[73016,75417],"triggers":[2713,3680,3797,7199,10716,10796,10896,11551,11609,11654,12659,12699,12896,13830,15846,18309,19614,20438,24792,26025,28058,32746,33088,33691,36093,36350,37438,39009,39210,39908,40503,50290,55652,55715,57289,60399,60567,60812,64444,65368,73285,75649,76096],"defaultraycastlayers":[71566],"yielding":[18315,41290],"_righteyecolor":[43420],"validpurchase":[67776],"minnow":[22394],"grab":[22544,25667,44383,48706,50321,72962,72996,74403,75090],"elegantly":[49665],"75turn":[62272],"arsimulation":[31043],"\\n\\n":[57503],"#575757":[63378],"rating":[3994,4041],"burning":[31745,32632],"macoslinux":[70929],"robots":[69303,69409],"indestrusearches":[40746],"modularity":[40179],"30_search":[2755,12028,18903,22284,23774,24594,26781,32326,32889,33569,43333],"\\programdata\\unity":[239,52504],"mavericks":[36156],"intellisense":[16378,16392],"524+g96c5e18":[66703],"myr":[53676],"cylindrical":[8618,14255,25631,35254,42738],"#5f9ea0":[63521],"profiling":[564,635,709,4558,5879,6105,6368,6397,6475,17012,17038,18318,21110,21916,21962,23532,25734,27724,27913,27938,28168,30377,31036,31461,33395,33407,33480,33505,35030,35403,35494,35527,35609,35691,35768,35788,35941,35959,36034,36156,36202,36403,36446,36465,37340,41944,43009,43094,49380,50197,50980,73176,73698,74160,74629,74791,74849],"freely":[67,7263,13552,13873,15006,19003,20575,24912,29979,32064,33579,62831,66975],"webcams":[73114],"simplebindingpropertytrackingexample":[56226],"users":[1378,1592,2462,3006,3346,3881,4063,4206,4220,4298,4372,4440,4449,4467,4485,4526,5006,5041,6811,6904,9071,9771,11844,12219,14907,15902,15982,17240,17268,17356,17488,17524,17642,18536,18662,18745,18812,18907,19364,19645,20760,21002,21422,22316,25031,25483,25756,25860,27167,27624,27681,28707,29566,29570,29707,30395,30443,30478,30501,30916,33450,33883,34196,34254,34335,34615,36501,37278,38736,39121,41907,41935,42969,46122,48678,49403,49908,50652,51117,51387,52511,52563,53370,53782,53989,54049,55929,56040,56163,58463,60980,61299,61749,61994,64234,64398,64413,64468,64489,64511,64528,64563,64586,64610,64674,64718,64808,64841,64859,64914,64936,64955,64998,65061,65102,65117,65132,65146,65220,65244,65268,65312,65537,65552,65567,65587,65607,65627,65648,65687,66225,66401,66758,66901,66916,67039,67151,67168,67296,67351,67626,67643,67752,67867,67903,68196,68461,68950,69195,69333,69439,69769,69810,69861,69901,70148,70191,70337,70481,70628,70755,70791,70818,71108,71468,72405,72788,72941,73172,73382,74136,75251,75671,75747,76039],"referred":[73,2283,2842,6758,6970,11650,15842,22296,25096,29908,33453,33785,42007,49522,49642,49826,51964,66374,67450],"number":[148,229,250,336,396,644,858,962,1169,1467,1566,1797,2009,2068,2191,3300,3319,3694,3723,3820,3879,4008,4084,4254,4396,4461,4563,4700,4716,4797,4806,4932,5037,5475,5620,5726,5770,5810,5968,6050,6120,6269,6291,6314,6443,6807,6941,7104,7166,7669,7697,7709,8012,8297,8411,8765,9131,9209,9248,9368,9440,9536,9634,9776,9948,9999,10131,10231,10483,10491,10651,10992,11123,11212,11244,11274,11415,11534,11600,11675,11843,12155,12599,12880,12975,13021,13203,13339,13477,13836,13855,13904,14149,14266,14501,14554,14593,14728,14881,15022,15043,15832,17452,18078,18143,18226,18307,18331,18432,18454,18568,18683,18736,18812,19208,19691,20076,20117,20242,20569,20733,20863,21047,21296,21525,21583,21659,21719,21991,22046,22088,22117,22132,22203,22323,23408,23465,23882,24052,24167,24276,24637,24728,24926,24977,25492,25696,25852,25857,25998,26049,26060,26086,26114,26456,26477,26663,26714,26723,26784,27004,27600,27736,27856,28424,28510,28604,29189,29338,29416,29594,29717,29758,29906,29972,30047,30205,30311,30322,30350,30503,30869,31641,31788,31916,32112,32171,32260,32458,32651,32677,32712,32754,32847,32917,33098,33394,33476,33656,33783,34212,34287,34335,34500,34681,34770,34840,34897,35028,35268,35371,35411,35622,35684,35901,35930,35972,36041,36118,36187,36201,36302,36355,36442,36464,36591,36678,37639,37692,37797,38298,38329,38345,38384,38637,38743,39098,39490,39547,39611,39727,39751,39808,39825,40009,40331,40589,40717,40787,40837,41189,41309,41320,41370,41474,41508,41621,41810,41824,42122,42347,42358,42688,42816,42952,43019,43121,43521,43589,43870,44244,44377,44451,44541,45062,45571,45809,46552,47249,48227,48335,48373,48510,48521,48683,49354,49518,49573,49618,49656,49668,49712,49885,50005,50045,50141,50366,50465,50520,50591,50620,50651,50659,50686,50889,50945,50960,51137,51235,51659,51910,51990,52117,52197,52227,52485,52494,52548,52757,52984,53148,53441,53719,54208,54388,54681,54732,54899,55055,55088,55227,55554,55866,58110,58466,60025,60382,60642,60786,60922,61023,61321,61621,62265,62894,63746,63922,63940,64326,64889,65166,65244,65937,66133,66205,66374,66637,66923,66957,67187,67269,67272,67738,68209,68281,68555,68623,68925,69168,69356,69460,69719,70323,70384,70598,70801,70875,71012,71129,71264,71305,71359,71533,71611,71675,71779,71938,71959,72016,72327,72364,72462,72858,73573,74039,74824,75111,75453,75485,75784,75960,75991],"example_keyword":[45461],"obscuring":[33717,49509],"reorganized":[6047,20764,21562,25442,71957,74305],"__h265__":[14820],"myassets1":[476],"dragevent":[40029,40119],"missile":[8066],"sparkles":[50941],"playerloopsystem":[19170,35701],"globalillumination":[36645],"searchitem":[2490,2555,2635,41096,41174],"_st":[45153,51076],"facilitates":[5116,30385],"rejected":[13816,25962,53321,57587,67398],"cpuframetime":[20529],"switchname":[55189],"optimizable":[6035],"git#revision":[70486,70675],"pathtracing":[37905],"adv":[61916],"servercallback":[10861],"unit":[84,1171,1924,2718,4817,5122,7785,9948,9996,10132,12116,13093,13386,13665,14207,14702,19647,20933,21030,21453,22165,22193,22460,25205,26263,26992,29637,29750,31788,34204,35250,35414,36235,37293,39412,40654,44638,45111,48275,50650,50888,51137,51235,54980,55526,62212,62838,63741,66157,71773],"plant":[2958,25623],"invokeonappthread":[74726],"unregisterstatsource":[76033],"falloff":[7771,7985,12841,15031,26789,36668,50612],"“mouse”":[60358],"zoffset":[14106],"problems":[214,2054,2752,3481,3860,4479,5719,5919,5984,6054,6059,6105,7116,9489,10012,10095,11607,11824,12359,12988,18377,18427,18501,20181,22057,22860,25892,26846,27762,28439,29568,29922,30345,31634,33008,33064,33406,34293,34377,34503,37287,37708,38850,39965,41933,43023,44836,50652,52472,52491,52546,53222,54016,58338,67151,70356,70872,70914,71029,73404,74397,75146,75446],"separators":[70772],"pkg":[25475,41437,67054,67530],"file":[147,218,265,379,405,421,445,478,511,532,545,593,623,687,717,790,904,947,980,1044,1122,1140,1178,1192,1202,1232,1243,1276,1285,1314,1336,1356,1446,1565,1708,1771,1812,1825,1832,1882,1898,2077,2188,2771,2894,3019,3247,3292,3346,3358,3451,3552,3569,3579,3729,3787,3841,3870,3887,3898,4140,4217,4306,4477,4500,4520,4651,4740,4772,4876,5158,5236,6220,6337,6346,6393,6462,6691,7015,7364,7469,7774,7836,8411,8798,8980,9109,9135,9247,9759,9974,10425,10725,10731,11402,11673,11863,12102,12280,12333,12457,12797,12903,13344,13351,13373,13475,13626,13702,13945,13997,14026,14087,14219,14320,14786,14843,15042,15982,16470,17062,18058,18153,18191,18258,18364,18398,18462,18500,18623,18681,18730,18761,18816,18844,18918,19018,19060,19102,19208,19322,19425,19623,19666,20056,20190,20747,20923,21035,21391,21445,21566,21640,22071,22464,23478,23583,24609,24631,24636,24916,24943,25090,25114,25147,25153,25187,25240,25311,25451,25675,25888,25907,25938,26030,26086,26387,27134,27167,27600,27663,27678,27701,27768,27848,27918,28053,28066,28094,28150,28193,28297,28336,28386,28494,28612,28675,28717,28771,28848,29098,29157,29331,29750,29809,29824,29916,30101,30225,30241,30279,30840,30877,31602,31629,33476,33784,34214,34257,34338,34464,34539,34640,34660,34687,35087,35199,35384,35621,35797,35992,36068,36294,36498,36694,37269,37666,38377,38688,38906,38972,39003,39078,39183,39310,39365,40199,40441,40452,40617,40707,40795,41040,41231,41294,41368,41541,41634,41725,41756,41894,41958,41988,42020,42026,42052,42142,42312,42379,42620,42689,42946,43013,43023,43566,43684,43917,44020,44072,44312,44338,44422,44671,44848,45036,45166,45261,45389,45599,46046,46510,46977,47067,47345,47907,48057,48188,48276,48350,48536,48581,48676,48864,49372,49414,49535,49576,49737,49756,49916,50071,50185,50412,50491,50672,50847,50877,50930,51369,52078,52097,52326,52517,52595,52682,52772,52888,53014,53086,53300,53852,53997,54307,54399,54536,54565,54579,54609,54639,54673,54794,54848,54883,54947,55033,55268,55335,55375,55672,56041,56282,56350,56417,56483,56530,56629,56703,56744,56882,56989,57190,57341,57620,57665,58044,58266,58303,58369,58439,58584,58673,58757,59021,59275,59524,59552,59991,60136,60162,60839,60890,60990,61179,61206,61331,61456,61522,61608,61758,62056,62206,62671,62750,62851,63065,63771,63811,63863,63943,64320,64547,64767,65031,65286,65691,65762,65793,65850,66115,66467,66605,66818,66840,66874,67053,67110,67236,67526,68081,68347,68378,68541,68602,68872,69107,69372,69476,69674,69750,69785,69809,69903,69987,70068,70106,70142,70175,70190,70211,70245,70258,70290,70325,70344,70382,70586,70770,70801,70867,70917,70976,71025,71167,71328,71378,71467,71543,71617,71662,71799,72005,72087,72119,72151,72178,72384,72466,72614,72713,72732,72840,72852,73156,73205,73251,73292,73342,73382,73416,73435,73501,73619,73643,73716,73915,74055,74148,74453,74533,74584,74591,74618,74667,74753,74759,74818,74896,74935,75196,75259,75361,75909,75975,76072,76331],"mainapp":[49760],"14px":[57167,62479,63237],"pronounced":[13918,18358,51328],"listrequest":[69544],"xd":[51634],"unity3d":[223,743,797,1438,2755,2792,3232,4226,12028,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17263,17321,17379,17542,17556,17571,17586,17601,17619,17637,17654,17672,17688,17703,17718,17735,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,18903,22284,23774,24594,26781,27600,27772,28773,28783,30951,30997,31294,31488,32326,32889,33569,35866,43306,49640,49771,50180,52498,66767,67477,67977,68120,68294,69376,69480,69702,70422,70864,71377,74074,74519,76334],"supportsimpulse":[75606,76326],"occupies":[5921,7174,13041,14863,47307,48587,58350,61913,64153,66852],"rg8_snorm":[8464],"prefervulkan":[747],"nearer":[49502],"vsynccount":[35714,36031,51985],"trygetboundarypoints":[76303],"pixilation":[48510],"'at":[4819],"visualelement's":[62586],"fitness":[53722],"dotted":[1431,7329,7833,18236],"terrainlayer":[6703,13907,15358],"controller1":[29909],"jobtemp":[29271],"faqs":[53480,61998],"triangleprops":[27361],"minval":[4977],"redundancy":[3262],"crossbones":[25436],"pbr":[6908,28881,74296],"audioeffectmixer":[7577],"yd":[51633],"filter":[1557,2539,2562,2626,3346,3855,3875,3946,3956,3988,4041,4219,4256,4653,4964,5052,5162,5273,5725,7447,7450,7530,7549,7551,7565,7572,7596,7612,7636,7654,7730,7779,8430,8709,8830,10009,10586,10604,10612,11890,12655,12774,13216,13452,13712,13956,14261,17945,17965,18114,19318,19519,20657,21605,21692,22016,22119,22579,25070,26841,26954,27984,29644,30232,31111,31814,33615,33731,34963,35381,35682,36598,37529,40606,40695,40785,41152,41223,41312,41375,41447,41464,41502,41603,41682,49099,49681,53243,53261,60652,61550,63139,64752,65458,70466,71204,71319,71356,71514,71526,71961,74193,76136],"zfailoperation":[45863],"conic":[8368],"springboard":[52600],"trtextcontent":[26733],"pages":[1891,2217,3511,4152,4155,4717,6459,6848,7569,7576,7942,9344,11461,15844,18666,20764,21200,22061,22190,25442,25857,27826,30033,34641,34646,35181,36294,37401,38533,39099,40039,40170,40529,40645,40663,40682,41532,41649,41705,44788,46752,49171,49648,50002,50656,51120,54260,60351,65897,69507,70312,70650,70771,71957,72293,73674,73916,75135],"g45":[38349],"sn3d":[265,4768],"repetition":[13074,23378,52252],"windowserver":[28625],"issued":[4108,4376,12609,21319,29420,30489,36371,37631,40104,52058,69861,73285],"use_data_caching":[73218,73943],"arrow_left":[63439],"independent":[2360,5911,7187,7305,12633,13306,13667,14557,21323,23077,26360,26460,29556,33612,34631,37738,38374,39966,54729,68682],"exampleresizer":[60276],"light2":[46696],"dy":[51482],"gettiledata":[51640,51763,51789,51814],"expert":[6811],"pointercaptureouthandler":[56900],"256x256":[14577,50933],"renderbufferstoreaction":[21725],"problem":[3326,3447,3487,4653,4960,5921,8189,9589,10097,13463,18450,24669,25328,26460,26487,27055,27754,29212,29334,29907,30138,30344,31719,33347,35080,35944,37660,37683,38668,41921,42101,42149,43110,43195,46074,52099,52528,52550,53324,53989,58176,64325,67295,69307,69413,69861,70372,71551,73305],"registeringpackageseventhandler":[69633],"outchannels":[4944],"shader_api_d3d11_9x":[43942],"_customrendertexturedepth":[8962],"artificial":[9879,19284,23156,26923,50595,71809],"kunityxrinputfeatureusagelefteye":[75629],"‘empty'":[39627],"normal":[300,1901,2215,3259,3681,6139,6597,7154,7178,7786,8401,8615,8682,9034,9064,9260,9337,9453,9626,9885,9964,10013,10077,10169,10247,10554,10584,11086,11215,11563,11629,11815,12351,13902,14233,14356,14852,15852,18233,18377,19074,19620,20154,20340,20423,20602,20626,20893,21170,21230,21319,21534,22657,24055,24466,24730,24912,25171,25228,25250,25354,25441,25444,27137,27571,27591,28412,29036,29131,29355,30049,30332,31718,31996,32264,32372,32918,33734,34281,34494,35008,35727,36395,37285,37416,37688,37702,37821,38274,38306,38345,38410,38435,38842,39607,39807,39822,40048,40335,40817,41184,41307,41679,41768,42260,42365,42444,42453,42482,42530,42535,42560,42887,42907,43182,43696,43881,43928,43966,44072,44247,44360,45099,45198,45632,45668,45841,46174,46505,46561,46721,46849,47122,47348,47904,48289,48617,49450,49473,49495,49514,49568,49600,49687,49737,50356,50376,50808,52010,52348,54212,54579,59700,62017,63238,64166,64300,65209,65812,65925,66393,66635,67398,67706,68477,71969,72345,72476,72758,74699,75133,75979],"androidtv":[1200],"usehttpcontinue":[68255],"reflections_low":[42977],"yesuse":[37838,72804,72810],"quaternioncontrol":[75696],"assetdatabasev1":[15238],"movieaudioclip":[72543],"tiger":[52283],"debuggertypeproxyattribute":[66498],"inputfield":[39640],"ideselecthandler":[49900],"regenerates":[25329,43534,51018,72841],"semaphore":[35735],"ear":[5179,22594],"shaped":[94,6793,7947,8203,9540,13637,15826,23039,26922,32360],"recompiles":[19021,34609,38751,40233,42005],"iplanetorgroup":[59929],"baseline":[10765,14822,39619,50946,58286,61915,62036,63720,72672],"destinations":[52679],"abstractprogressbar":[55442],"installing":[1224,1600,3876,16043,17030,17045,18665,18965,19617,21637,21997,22099,24950,25443,25744,37485,37517,38739,40263,41942,49147,50917,52493,52931,66559,68046,68629,68787,69514,69740,69871,70359,70595,70953,71289,71422,72093,72189,72832,72899,74399,74987,75294],"16px":[61848,63246],"prefixlabel":[20951],"teakettle":[18055,22067,71763],"uxmlfactory":[54445,54520,56609,56691,56754,57312,57652,58044,60911,61011,61769],"trigger":[389,1502,2012,3446,3776,4649,5052,7950,7962,8152,8166,8221,8266,8376,8768,9029,9224,10568,10796,10875,11579,11609,11678,12725,13640,14504,14848,15847,18069,18357,19545,20438,20866,21175,22078,23037,24895,25097,25863,32648,32755,33081,35268,35744,36306,36531,37453,37536,37723,38281,38605,38641,39003,39309,39521,39846,40505,41525,43319,49646,50965,51074,51788,52550,53696,55642,57914,59825,60375,60780,61184,62813,62836,64454,64752,67911,68505,68626,72634,73286,73486,74074,75090,75617,76097],"tumble":[13645],"other_ldflags":[49790],"skeletons":[22504],"webpage":[11685,73091],"ils":[53660,74581],"kformatrg_bc5_unorm":[50101],"messagesincluding":[53743],"linewidth":[58502,60964],"wheeljoint2d":[15018,15198],"iappleconfiguration":[67483,67827],"+1offset":[12896],"instance":[263,292,520,1407,1484,1924,1961,2535,3435,3571,3585,4776,4907,5186,5347,5350,5561,5721,5725,5732,5805,5818,5986,6083,6844,8299,8651,9351,9653,9908,10704,10990,11078,11134,11221,11554,11612,13323,13392,13628,14087,14923,15835,18129,18309,18375,18436,18621,19390,20237,20593,20626,20905,20920,21052,21307,21503,22130,22151,22460,23246,23377,24593,24894,25031,25504,26026,26244,26302,26441,27021,27056,27122,27170,27691,28044,28412,29214,29701,29790,30038,30099,31870,33378,34179,34238,34261,34342,34468,34881,34908,34949,35411,36098,36387,36454,36473,36569,36751,36792,36927,37003,37229,38281,38331,38827,38984,39879,40145,40153,40565,40698,40794,41505,41560,41783,42017,42075,42311,42818,43102,43414,45142,48226,48316,48382,48908,49029,49217,49465,49510,49771,49908,50391,50466,50534,51080,51607,51655,51760,51785,51815,52320,52754,53930,54430,54579,54956,55335,55606,56725,57620,57864,58603,58825,59387,60161,60540,61275,61333,61635,62188,62428,62547,64365,64515,64918,65034,65287,66038,66054,66199,66245,66363,66374,66825,66845,66882,66912,66944,67004,67035,67090,67202,67249,67303,67344,67555,67569,67581,67747,67826,67855,67954,68531,68541,69519,71724,71933,72050,73251,73397,73465,73588,74005,74297,74456,74695,74898,75259,75697,75747,75903,75934,76095],"noderivatives":[50343],"getexpiredate":[67740],"animatorcontroller":[2218,7196,10788,15100,21332,24897,33977,34195],"draganddropvisualmode":[57491,57587],"trivial":[6200,18673,29421,70326,70760],"highest":[554,1664,1771,2408,7017,7491,9311,9703,9752,10560,11519,12865,13687,13871,14824,15004,19314,27215,27290,27754,29863,30241,30337,30489,35932,39659,41274,44233,45483,48802,50006,50478,50670,50972,51010,53155,53538,58349,63810,63972,70252,70909,71017,72497,72723],"dynamicallyscalable":[20452],"latin":[9261,9774,25031,53647,64342],"stamp":[7983,38731,50556,50574],"drivable":[74429],"knob":[23962,61775],"germoblaster":[20637,34954],"textureasseteditor":[54934],"tabindex":[54560,57846,65888],"browse":[1129,1140,1649,3982,4140,4286,6468,11974,19072,35128,39092,48611,61944,69513,71216,71704],"patchobbyou":[52785],"restricts":[7264,8562,9145,11310,26562,30292,37681,39666,39727,65994],"inchannels":[4944],"yield":[2668,2828,3359,3558,15738,18093,18276,21364,22770,24877,25712,25947,26359,33546,35705,36593,41255,41463,51487,52601,58061,67512,68101,68295,68335,68362,68399,68452,68488,72587,73104,73683,76290],"mrt4":[45480],"sp1+":[50167],"device":[273,386,401,422,434,499,511,560,603,631,632,658,694,700,719,740,833,871,880,888,933,1024,1088,1220,1322,1331,1370,1482,1487,1551,1574,1754,1761,2764,2958,3500,4314,5921,7615,7765,8063,9057,9789,10686,10764,11704,12043,12311,12422,12653,12865,14350,16224,17092,18134,18501,19151,19332,19340,19354,19372,19382,19636,19664,19966,20002,20045,20058,20090,21054,21195,22030,22349,23270,23473,24489,24626,24890,24977,25031,25333,25672,25692,25698,25721,25732,25751,25819,25856,25898,25904,25961,25980,26041,26477,26840,27532,27799,28114,28185,28288,28422,29466,29568,29570,29582,29933,30001,30326,30376,31418,33395,33474,33509,33583,34207,34274,34375,34484,34698,35032,35252,35496,35794,35999,36203,36440,36471,38277,38289,39440,40001,40555,44298,44638,44870,45577,49752,50197,50671,51964,52546,52683,52693,52754,53286,53696,53733,53882,55641,55805,57987,59743,60219,60423,60495,60634,60761,63123,65907,66530,66972,67036,67257,67264,67272,67295,67517,67755,67869,68054,68807,68813,68954,69045,69740,71266,72002,72225,72701,72786,72890,72954,72986,73026,73092,73375,73471,73603,74228,74569,74698,74763,74810,74813,74837,74883,74920,74996,75080,75107,75191,75221,75294,75368,75393,75409,75474,75872,76096],"sprites'":[59095],"regionminsize":[76410],"scratches":[22846,49478,49515],"class's":[75697],"thelightingsettings":[9933],"frametiming":[20468],"2searches":[40744],"receiveshadows":[38297,48234],"swipe":[1917,12219,39301,52767],"mediumpurple":[63597],"piechart":[60683],"determines":[20,65,362,1299,1912,2504,4766,6356,7496,7548,7560,7567,7574,7594,7603,7611,7634,7643,7653,7755,7778,7862,7951,7961,8019,8132,8153,8165,8265,8375,8522,8767,9028,9180,9527,9890,9961,9998,10437,10505,10576,11541,12683,12724,13140,13251,13388,13485,13596,13641,13890,14503,14533,14581,14663,14733,15026,18597,19566,19692,20225,20581,21352,21566,22144,22468,23545,24753,25221,26797,26931,27262,27737,28467,29044,29154,31606,32196,32276,32876,33528,35090,36593,37192,37347,37528,37646,38479,39405,39529,39606,39662,39774,39806,41766,42124,42354,42712,42728,42753,43024,43154,43727,44133,44625,45398,46009,47163,47951,48150,48373,49184,49470,49509,50382,50419,50500,50511,50528,50544,50553,50691,51025,51094,51121,51137,51235,51363,51638,51787,51813,52135,56102,57808,58558,60803,60881,60982,61302,61388,62803,63808,65931,67177,70278,70297,71215,71567,71637,72527,73048,73314,74011],"queryindices":[18596],"incjobdata":[26421],"value_of_udpclientid":[53897],"sat":[11612,70233,70255],"spherize":[32402],"doublesidedgi":[10439],"gameswitchlistasset":[55175],"probe's":[13136,37690,37730],"spritenamefileiddataprovider":[48433],"groves":[49560],"razor":[23151,27938],"unregistermarkereventcallback":[28019],"disputed":[4085],"crossings":[58560],"300ms":[62948],"stores’":[53280],"lines":[340,2001,2324,2752,7383,8036,8184,8419,8972,9079,10205,12659,13445,13985,14795,17759,18119,19061,19655,20430,20580,22189,22687,23674,24468,25497,30255,31917,32479,33494,33533,34893,36058,36444,37318,39625,40050,40535,43386,45462,48524,49417,51427,52226,52566,58285,58463,58833,59166,62022,65315,66002,68498,70389,72812,72828,73777,74564,75973,76332],"bestdistancesq":[56958],"breath":[1880,22466],"mipmap":[8633,9125,11818,12353,12838,12895,13710,13821,14029,34284,34496,35931,37695,38232,44010,48510,50007,50037,50058,50149,50684,50709,50949,50990,74257],"float4x4":[20263,44231,44882,47070,49003],"configurationsection_dodeserializesection_m1275":[72028],"audiomixercontroller":[15203],"partway":[31719],"states":[1945,1960,2001,2120,2205,2216,2235,2243,2253,4058,4710,5070,7184,8432,10788,11172,11370,13804,14717,18585,20127,20601,21336,22474,24094,24792,29105,30048,31016,31366,31382,31386,31599,31613,34041,37540,38667,39807,39822,39852,42063,42121,44011,45204,49636,49642,49652,49663,50937,52247,53414,54208,54455,54695,56078,57329,59556,63974,64026,64211,64369,65925,66458,68749,70751,72333,75539],"upm_npm_cache_path":[69818],"assemblytitle":[40366],"unsuitable":[10072,42802],"bytecode":[16137,24964,26077,41849,43074,45039,66478,73640],"unitywebrequest's":[68247,68264],"implementable":[68378],"spends":[6141,12947,25997,27741,35711,35901,36020,36155,36207,36298,36432,36510],"isready":[11006],"launchactivatedeventargs":[74672],"embeddedwindow":[34237],"css":[24054,54644,54803,54856,56091,56558,56784,56859,57161,57357,58416,59298,59828,61197,61412,61832,62201,62447,62562,62672,62836,63096,63661,63698,63708,63719,63836,63844,63858,63879,63894,63915,63934,63957,63989,64011,64025,64042,64351,64373,64429,64897,65039,65188,65322,65806,65905,65966,73238,73244,73924],"getspatializerfloat":[5258],"projecting":[12833,12936],"seats":[229,30401,30466,30500],"controls":[1765,1940,2257,2324,2372,2427,4041,5178,7144,7254,7396,7429,7444,7461,8138,8203,8707,8839,9131,9256,9332,9593,9636,9766,9965,10000,10076,10227,10416,10508,11066,11122,11161,11185,11248,11716,12357,12706,12901,13210,13355,13743,13784,14000,14131,14234,14506,14560,14781,14795,14883,14923,18508,19450,19973,20089,20543,20626,20670,20790,20869,20918,21170,21699,21837,22189,22224,22470,23777,23880,24050,24167,24279,24468,24515,24580,24728,24754,25062,25348,25696,26510,26672,26828,26986,30692,30847,31638,31668,31795,31840,32078,32106,32117,32165,32217,32262,32767,32848,33454,33720,34040,34291,34605,34876,35088,35504,36471,36591,37348,39043,39138,39246,39308,39375,39390,39466,39477,39586,39591,39603,39714,39745,39808,39819,39982,40042,40074,40140,40542,41764,42804,42941,44199,45251,45271,47607,48510,48683,49467,49628,49636,50377,50437,50590,50783,50905,51018,51710,51806,51956,52149,52228,52240,54249,54349,54484,54498,54538,54556,54672,54692,54746,54961,55416,55497,55633,55726,56041,56488,56674,56835,57141,57285,57613,57662,57899,58022,58033,58172,58190,58366,58583,58789,59004,59552,59733,59833,60497,60879,61194,61326,61547,61593,61779,61956,62053,62206,62753,62851,63069,63130,63236,64233,65230,65254,65368,65684,65720,65738,65755,65850,65903,66062,66336,66367,66396,66811,66836,66867,66892,69333,69439,70955,71025,71219,71356,71897,72372,72741,74179,75092,75221,75641,76096],"encountering":[6039,36106,38844],"inability":[53710],"inputmessage":[58639],"productidentifier":[67835],"libtess2":[74184],"gfxdeviced3d11":[35718],"teleport":[75109],"r8g8_snorm":[8464],"inherent":[8373,40544,49451],"xr_fb_foveation_vulkan":[74400],"diddomainreload":[19511,68959,69206],"germslimetarget":[34939],"defers":[21938,73285],"b64":[70047],"slowly":[4867,7594,7603,7611,7634,7643,7653,31857,32112,35920,37639,41912,51025,52530,68215,72874,74844],"setdefaultshaderchunkcount":[42223],"serverport":[10989],"diamond":[84,2314,2327,48375,48605,51236,58561],"bindableelement":[54917,55231,55571,56670,64386,65681],"storename":[53897],"anchored":[9190,24772,54723],"findgameobjectswithtag":[9408],"placebehind":[57607,62811],"we've":[47371,52181,66313],"control":[146,179,239,495,572,580,787,944,1202,1274,1353,1366,1471,1574,1771,1858,1880,1933,1977,1996,2006,2063,2183,2211,2327,2437,2726,3582,3725,3826,3864,4534,4840,4964,5028,5138,5725,5845,6137,6264,6288,6320,6750,6773,6791,6840,6944,6977,7067,7152,7612,7654,7836,7865,7998,8128,8192,8245,8386,8496,8708,9068,9201,9288,9338,9438,9553,9620,9745,9768,9844,9881,9986,10228,10341,10403,10797,11006,11069,11172,11247,11277,11306,11447,11569,11614,11667,12282,12414,12664,12759,12942,13234,13261,13280,13297,13538,13585,13755,13799,13809,13826,14132,14554,14593,14732,14814,14884,14962,15002,15022,16165,17092,17591,17642,17788,17951,18091,18148,18179,18254,18508,18812,18976,19027,19443,20003,20063,20240,20456,20541,20601,20724,20811,20891,20923,21045,21142,21154,21326,21550,21913,22029,22114,22133,22224,22466,23488,23590,23707,23796,23881,24051,24169,24275,24601,24621,24745,24790,24968,25066,25178,25212,25333,25420,25867,26485,26812,27099,27136,27764,28051,28108,28216,28285,28406,28484,28685,28723,28887,29001,29141,29484,29719,29890,29906,30048,30844,30862,31050,31480,31637,31838,32141,32215,32261,32339,32365,32510,32605,32628,32659,32735,32882,32891,33064,33076,33267,33388,33411,33527,33629,33712,33753,33763,33784,34040,34196,34613,34672,35085,35503,35605,36118,36486,37227,37360,37576,37704,37724,37812,38461,38505,38537,38547,38574,38630,38643,38657,38849,39036,39078,39103,39144,39270,39310,39382,39385,39438,39472,39568,39586,39591,39603,39666,39714,39727,39740,39794,39808,39817,39832,39977,40042,40069,40091,40140,40168,40209,40450,40538,40618,40643,41314,41765,41907,42182,42792,43008,44427,44587,45091,46779,48053,48242,48354,48510,48551,48590,48641,48691,48874,48906,49158,49169,49408,49435,49455,49471,49483,49507,49555,49607,49627,49637,49654,49661,50290,50381,50487,50511,50528,50552,50585,50648,50656,50701,50708,50950,50991,51591,51955,52084,52233,52240,52768,54204,54208,54246,54310,54504,54626,54898,54907,54959,55159,55497,55557,55713,55807,56041,56588,56666,56732,57286,57303,57628,57845,57902,58017,58031,58032,58155,58278,58442,58498,58668,58799,59064,59601,59723,59736,59991,60506,60610,60641,60804,60881,60982,61304,61480,61745,61915,62218,62772,62855,63127,63233,64174,64209,64339,64450,64468,64489,64528,64674,64752,64795,64823,64885,64936,64973,64986,65177,65230,65254,65268,65294,65333,65369,65386,65413,65432,65444,65458,65476,65490,65501,65512,65738,65754,65778,65876,65982,66057,66181,66223,66365,66394,66406,66692,66820,66842,66881,66897,66907,67382,68196,68378,68458,68546,68852,69061,70228,70333,70405,71269,71593,71782,71912,72374,72376,72476,72500,72683,72724,72840,73263,73449,73620,73674,73908,74050,74187,74259,74580,74603,74734,75022,75087,75641,75742,76300],"m_splashscreen":[74673],"importasset":[3602,3683,3776,68981,69228],"16777216player":[29304],"hevc":[14820,72698],"tweakable":[43603,45148],"police":[5160],"diamonds":[48374],"rts":[66183],"sets…":[40990],"createunityinstance":[73211,73436,73566,74003],"tune":[7304,9719,12858,17092,18181,24051,26068,30237,31266,33076,33450,45523,48377,52095,52114,52194,53879,67658,74329,74453],"mat":[3626,3731,6703,28848,30159,40921,66682],"rearrange":[2254,41562,49728,52082],"talks":[43336],"\\users\\public\\unity\\config\\serviceaccounts\\":[70207],"f9":[35898],"_p":[74592],"fileutil":[6338,74089],"getuserstoreid":[67567],"on_sale":[40792],"sliderintsnippet":[65260],"opendoor":[11345],"gdc":[27478],"touchscreeninput":[20020],"playqueueplayable":[34105],"pictured":[33902,49632,71283],"consts":[44875],"adasearches":[40748],"onpreprocessbuild":[24480],"scenesetups":[40689],"setnestedcontainer":[26174,26256],"borderradiuses":[59625],"firebase":[31112,52870],"hlslcc":[41849,45039],"toggle":[2431,3952,4811,5028,5119,5973,6271,7829,7862,8337,8861,9098,9203,9562,9851,10521,10747,11342,11358,11447,12474,12759,12814,13245,13280,13297,18140,18175,18246,20608,20674,20911,21607,21711,22272,22981,23682,23930,24055,24536,25354,25437,29893,30564,30868,30916,31929,34260,34341,34467,34828,35266,35367,35623,35903,35969,36023,36120,36174,36207,36298,36435,36497,36708,38021,39069,39140,39254,39311,39493,40068,40090,41320,41993,42028,49350,49619,51264,51392,52227,52389,53294,55191,55449,55509,55725,55807,56052,56472,57038,57287,57900,58586,58666,59702,59734,59833,60056,61612,61745,62765,63246,63971,64640,65166,65367,65388,65501,65742,65930,66986,67668,67975,68835,69080,71301,72840,74258],"radiates":[55865],"gpu’s":[21938,23420,27562],"suppressed":[6154],"ssd":[24976,35127],"length_1":[72042],"effectively":[4846,5049,6811,7492,9258,13266,13916,16091,18309,18513,19636,21319,22070,22166,23289,27921,29882,32253,33426,35354,35786,35882,35966,36204,36762,38622,40879,41609,42934,43115,44581,44875,50686,52058,52757,61327,62611,71129,71787,75587],"option+command+left":[39299],"trygethapticcapabilities":[76325],"hard":[7549,7561,9075,9261,9878,11509,12646,12934,21029,21545,22130,22797,24977,26985,27087,27610,30372,31720,35129,39964,42798,42812,43173,43618,45746,45852,49424,49528,49569,50529,52511,56169,58823,62020,70259,71391],"78b2fdc254b0a4f8a4693a81bb96598a":[66684],"uncomment":[73794],"elementtoolbars":[30677],"cfbundleversion":[12156,34373],"exporters":[29769],"c3xag":[69936],"07a0d449dcaef4d2ba104e9d9b350de6":[66678],"packagemanager":[11400,69513,70561,74307],"asserts":[9692],"unity_include_tests":[3036],"accurateplacement":[76415],"changecoordinatesto":[56119],"pvrtc_rgb2":[48730],"fieldinfo":[36785],"traffic":[4369,52645,70424],"standstill":[49642],"succeeds":[18080,67048,67132,73563,73626,75601],"\\editor\\data\\pluginapi":[27919,27943],"google’s":[509,1488,33517,50197,53777],"rights":[4129,4351,4432,73772],"kmininnerradius":[27355],"publisher":[3960,3992,4049,4155,4167,4188,4195,4210,4218,4230,4300,4360,4395,4407,4415,4422,4440,4453,4473,4485,4493,4526,12597,16209,31084,31484,40775,67216,67262,70278,71130,71404],"polynomials":[27467],"problematic":[3865,6844,12369,33404,33442,36685,43195,52517],"enabledomainreloadtimings":[38738],"m7jjf9":[69918],"directions":[185,2242,6285,7953,8201,8566,8609,10475,10504,11629,13120,14757,14967,21711,22724,24747,26914,27054,32372,32677,37687,39468,40535,43494,44238,44941,47611,49530,62199,71137,71969],"compiling":[3829,4574,8421,9127,11883,13355,19241,22611,24471,24977,25855,33477,33797,34427,34525,34671,41836,41927,41958,43031,43922,43933,45018,47807,50273,69660,71055,71673,73169,73413],"entered":[2429,9536,12609,18089,22540,32798,35701,39611,40018,49652,53048,58724,60420,64511,64610,64808,64914,65312,65537,65552,66938,67954,71196,72241],"ontriggerenter2d":[35271],"ko":[53634],"_customrendertexturewidth":[8960],"buildrows":[52250],"systeminfo":[394,3503,7920,8409,14016,19676,20048,32299,43987,44140,44967,50455,68815,68938,69047,73037,73465],"targetframerate":[26051,33409,34994,35714,36031,51985,73704],"appletangle":[17045,67692,67765],"animationmodule":[16614,30953],"insofar":[29915],"color1":[45728,47833],"il2cpp’s":[33453],"sphere":[2356,8300,8989,9427,10233,10406,10579,11638,13025,13636,13894,14256,14711,15025,15832,15897,18230,18580,23104,29637,32264,32372,32754,33698,34781,35242,37887,42751,43154,46111,47189,49429,49454,71864,72259],"representative":[35496,39167,50200],"yesnot":[42603],"min10float3":[8451],"decompress":[567,1343,3292,3351,6145,6374,6434,7482,14298,18816,35988,73025,73089,73337,74635],"supportedtextureformats":[19930],"plane's":[35262],"rotator":[76272],"socio":[17356],"arraybufferviews":[73556],"drm":[25859,26094],"interpret":[1831,18615,25724,26647,48276,65767,71086],"a0":[58455],"interlaced":[14795],"conditionalattribute":[33866],"view__content":[65198,65814],"r8g8b8a8_sint":[8469],"recommends":[1488,2769,3428,3879,16091,18575,24983,29150,30867,37484,37516,44304,50366,52739,52888,52921,52951,53101,53292,53691,53999,62670,62886,65898,66572,67195,68916,69157,73115,73450,73654,73751,75224],"warp":[34229],"maxresolutionwidthscale":[20469],"hdrp":[4435,5694,5866,6829,6867,8016,8807,9466,9865,13124,13540,13911,17000,17110,17118,18634,18773,19292,20249,20385,20407,20441,21391,21958,23248,23385,23606,24503,24597,27256,28842,29459,34851,37749,38250,38266,40150,40168,41827,41939,41963,42314,42600,42694,42718,42734,42759,42995,43080,43124,43137,43335,43491,43501,43510,43559,43568,43657,43686,43731,43803,44099,44136,44168,44201,44322,44340,44379,44424,44593,44629,44673,44761,44792,45057,45186,45263,45392,45525,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,48940,49148,49169,49175,49281,49313,49673,50003,50060,50077,50362,50583,69346,69450,72803,72809,72816,74284],"‘sun’":[26927],"totalreservedmemoryrecorder":[36259],"displaystyle":[56198],"seek":[8575,35629,52140,54134],"boldlabel":[20908,49981],"substantially":[6123,27089],"reversealphabetical":[51086],"churn":[6024,22340],"useproxyvolume":[23417],"'cert_hostname":[66615],"handler":[1031,2461,2567,10991,11226,12617,20155,40024,40114,59571,61723,62127,65906,67372,67592,68088,68263,68284,68324,68351,68483,69620,74036,74610,75919],"clearest":[49048],"attarget":[55848],"id_ecdsa":[70077,70143],"conceptually":[3728,14319,14738,20450,37687,64233,66197],"throwing":[1944,1950,1966,13041,22470,48335],"randwithincircle":[13097],"shorter":[2274,2399,9966,11792,24786,27143,33399,46272,47757,50692,51975,63049,72937,73170],"localplayerauthority":[10811,11086,66052],"simplifies":[4558,10655],"textcomponent":[39609],"waypoint":[9386],"disk":[617,2225,2764,3247,3294,3365,3574,3787,4774,6138,7338,7484,7767,7836,9920,10496,13310,13966,14076,14295,14318,18816,19128,19620,23148,24977,25692,25961,27175,27591,27643,27694,28452,29332,31635,35130,35933,35992,36542,38932,39159,39208,40503,41231,42766,49150,50002,50056,50067,50130,50669,50687,51049,52033,52501,52736,66588,68081,68622,70332,70734,71145,71325,72399,73026,73088,73173,73714,74787,74928],"ordered":[363,3452,12799,13613,14733,15043,27470,36041,36187,50377,54543,57817,58349,65733,71969,76303],"unityinstallpath":[27919,27943],"tankexplosionparticlecountname":[35439,35489,35575],"gameobjectname1":[34713],"animationevent":[2180,39347],"tiny":[707,6206,10586,38408,44451,49477,49518,50528,63241],"plink":[70109,70648],"resolutionstrategy":[70244,70877],"registercreatemarkercallback":[27991],"kunityxrinputfeatureusagesecondarytouch":[75656],"pictures":[12637],"#x64":[66781],"discount":[4354],"economy":[17045,17323,31419],"timevalue":[62707,62986],"vase":[34909],"spotangle":[47132],"10deg":[62679],"unity_4lightatten0":[47112],"myassetpackagever2":[3894],"'materialname3'":[50051],"tessedge":[46994],"unloadallloadedobjects":[27690],"frameworkurl":[74021,74103],"newtemplateinstantiating":[39010],"quits":[21124,27532,38903,66824,66859,66911],"sl":[42712,42728,42753,53646],"nometa":[29529,31888,46792],"spritealignment":[48448],"settimeupdatemode":[33919],"closed":[219,6455,10258,11225,11332,11697,18812,23037,24792,26690,33879,35628,36693,37639,39472,48701,52320,55820,56586,67243,68951,69196,70964,72792,74733,75579],"jt\\":[24483],"xiaomihuawei":[53441],"enable_unity_collections_checks":[26144],"sync":[1960,5006,7154,11245,11555,11615,12884,13266,14849,29108,29996,30380,33410,34924,35341,35736,36031,39965,51988,52952,53985,61904,67624,73245,76023],"iso":[9773,23718,69333,69439],"puffs":[31798,32188],"scroller":[54557,57017,59660,64879,65145,65182,65719],"iserializationcallbackreceiver":[6038,39874],"sphereisvisible":[18594],"unity_lightmodel_ambient":[47146],"activetier":[23543],"quality_low":[42980,43053,44529],"zfailback":[45863],"specializations":[40594],"eliminates":[3492,9589,26487,33242,55512,67090,68131],"unity_audiodsp_ok":[4931,5256],"_tex":[8911],"watched":[62010],"unityxrmeshinfoallocator":[75754],"compressor_":[74644],"hellostring":[73506],"kminiterations":[27356],"auditing":[5913,5918],"256searches":[41474],"thumbnails":[2549,4286,35171,41616,71149],"onecompute":[8419],"citizen":[30672],"dealt":[52472],"okay":[37623],"tcollection":[37138],"cut":[1868,2117,2192,6762,6950,11724,14149,18514,19128,21964,24559,29863,39724,43618,50529,50965,54433,54551,55897,65998,75446],"picture":[2356,4126,4172,4663,12660,12888,20558,38392,49038,52226,65999],"unetencryptionlib_connectionidassigned":[66167],"converting":[21524,22144,24977,25229,25280,27566,33168,66039,68652],"become":[554,655,2089,3306,4220,5016,5769,6082,6156,6368,9337,17984,18589,21893,22011,22349,24778,26119,29109,29906,30048,31009,32254,33135,33435,34903,34953,35315,35797,35949,36464,36690,37289,37623,39672,39819,39880,40469,41090,41844,42778,42810,43131,44244,44880,47028,48353,49453,49519,50378,50651,50969,51387,53201,54106,54898,55554,59176,61489,62026,65968,65999,66025,68604,71025,71869,72794,73025,74629,74724],"stickycursorlock":[73270],"parade":[38237],"ocassionally":[74569],"siginfo_t":[1052],"german":[9279,53627],"bindsceneproperty":[68585],"'bytes'":[68226],"1b45558c":[74554],"show_bug":[73741],"unitygi_base":[46524],"sceneasset":[15249,38982,39208,40735],"buildplayer":[450,6325,19028,21123,74085],"renderface":[38021],"helper":[1404,4955,5371,5515,8903,10477,16651,29420,37170,43869,43907,43959,44053,46977,47345,51696,62771,66249,68367,69861,70630,73554,75534],"center”":[10503],"device_name":[395],"ubuntu":[50167,66565,68679],"geographic":[13389],"iterative":[33608,40176],"unityprofilermarkerdata":[28004],"moss":[29485],"handlers":[1031,2463,2609,2697,10991,11205,11226,20116,55558,55740,61686,61794,62711,65736,66105,68110,68264,73876],"visualisations":[50981,72759],"boost":[8303,9973,17342,19286,31054,31863],"ml":[16539,31438],"unityxrmeshinfo":[75757],"producing":[1331,6199,11469,30327,32196,32685,49539,51169,74184,74327],"spacechoose":[34360],"inversesqrt":[45583],"steeringbehaviours":[21328],"perception":[72879],"#ff":[61467,62011],"buy":[3976,4327,4384,4450,67334,67381,67643],"2022lts":[74224],"generictype":[40573],"shared":[986,1044,1131,1284,1300,1611,1727,2243,3461,3489,4262,9223,11613,11843,12599,14391,16212,17312,18935,20398,22693,25483,26267,26434,26482,26560,27159,29158,29995,30223,31012,35236,36085,36294,39132,39885,41363,42331,43456,49668,50011,58172,59837,65925,66197,66967,67147,69759,69795,70969,72789,74214,75617,76037],"doublebuffered":[8891],"microsoft":[4781,5987,6103,12441,19047,20218,24943,34237,38687,40663,44304,44873,50237,67621,67852,69020,69273,70044,70123,72119,72172,72191,72225,72830,72884,73128,73297,73806,74399,74537,74627,74724,74755,74788,74808,74837,74883,75302],"cupboard":[17925],"geometrychangedevent":[54902,59815],"richtext":[49880],"mirrored":[6318,14256,66720],"receiptdata":[67829],"crop":[14870,39419,61545,64114,64768,68908,69148],"serbian":[53644],"gauge":[43186],"iskinematic":[15861],"elapsedtime":[62611],"kcubexsign":[8663],"bodies’":[35754],"inputknobussclassname":[61775],"mozilla's":[73141],"uncontrolled":[8578],"d_toggle_bg":[63493],"datasets":[5984,33512],"roots":[10455,21615,28482,41371,59983,66465],"dependency":[509,1232,1612,3262,3306,3418,3468,3483,3585,3770,3796,8899,11424,18634,19473,22986,25095,26264,26357,26374,26461,28483,31599,34612,34673,39062,40752,41375,41470,41511,44734,49760,66479,66841,70211,70235,70287,70332,70389,70585,70769,70902,70936,71017,71121,71137,71258,71288,71304,71416,71484,72968,74137,75323,75984],"newbox":[55842],"lookatpointeditor":[20792],"disparity":[6116],"terrain":[3830,4033,5350,5811,7979,10037,11632,12914,13628,13886,13896,14009,15020,15182,15894,16711,16719,16835,17588,18408,20811,22153,22454,25284,27101,27717,29485,29720,29774,30181,30934,31055,31462,31819,33702,37565,37899,39138,40038,41508,42255,43222,43919,45632,46773,48226,50346,50361,50409,50426,50509,50519,50525,50533,50536,50549,50556,50566,50579,50620,50646,50944,51073,68874,69110,69747,72773,74255,74907,75184],"video’s":[14826,72501],"evictions":[66667],"lozenge":[15826],"'vase'":[34912],"gameswitcheseditor":[55349],"semver":[18739,70831,70910,71010],"finalizers":[18014],"p0":[58471],"distancein":[5244],"misclicks":[5919],"h_":[49762],"drawrangecount":[5653],"vycgoc":[69935],"‘create":[9267],"destroy":[3444,4907,9348,11075,11175,11315,14596,18309,19403,21373,22520,23798,25594,26577,27692,30899,32176,32767,33098,33616,33929,34156,49950,52532,63221,66258,68531,74335,75844],"inputdevicerole":[76158],"catches":[26041,51991,65926,69303,69409],"autodestruct":[14596],"blocked":[2668,7924,9224,12655,28450,36131,39530,73141,73673],"radiusvariance":[60802],"hexadecimal":[1778,21676,24518,49850,58455,62011,63758],"trickshot":[30047],"unityanalytics":[16761,30940],"namedtabbedmenu":[57269],"pay":[4005,4459,18519,24747,52597,53439,54046,62838,67182],"net_standard_2_1":[33834],"stopallcoroutines":[18309],"focusout":[58204],"inter":[11637,34992,63250],"\\documents":[52505],"identifier":[2776,11091,11413,12153,21002,22966,28196,29105,30519,34371,35862,39887,40474,41173,49753,53754,57620,65886,66134,66393,66965,67019,67148,67163,67230,67526,67606,67772,67841,69997,70813,71369,75526,75745,76090],"transparencysortmode":[131,6504,48890],"minor":[4254,5968,6815,11046,11417,11804,12596,21991,33818,40327,44691,52494,67450,68875,69111,69295,69719,70225,70246,70759,70814,70909,70960,71011],"meant":[3455,30061,38840,46773,54771,73485],"addplayerforconnection":[66242],"dependencies":[988,1594,3256,3305,3413,3469,3483,3569,3581,3797,3886,4274,4427,7395,11398,11406,12008,16060,18715,18885,18909,19467,21986,22987,23497,24618,25083,25099,25329,25742,25933,26090,26281,26299,26373,27687,28584,28967,29003,30891,31013,31600,34595,34671,35232,36081,38966,39003,39033,39103,39191,40183,40450,40753,41333,41375,41511,41583,41868,42142,43039,44731,48556,52594,57293,66491,66905,67090,68611,69621,69724,70218,70235,70289,70327,70359,70584,70756,70770,70831,70867,70936,70960,71058,71121,71137,71249,71288,71416,71484,72091,73388,74137,74305,75984],"resolutionoverride":[12896],"familiarity":[33763],"foopluginmethod":[1288],"metals":[28885,42467],"use_wasm":[73939,74104],"storage":[413,463,499,2769,3365,3541,3580,5013,5158,9964,10496,12646,12958,13427,14318,14823,18510,20381,21526,22653,24977,26812,27119,29160,29568,30354,30432,33146,33504,37668,41866,43884,50669,52511,53891,66569,67012,67343,68080,68614,69813,70464,70738,72711,72733,72888,73205,74153],"_forward_":[38304],"registerparameter":[4893],"ilspy":[6110,11917,12180,12368,12556,19221,34307,34393,34512],"serializedfile":[33500,76339],"groove":[63366],"forestgreen":[63555],"materialsab":[3326],"_change":[39302],"blurriness":[14823,61559,74193],"catch":[22846,26041,30123,32180,36337,38761,40606,44581,49515,49992,51987,62832,67793,73302,74006],"lastly":[37144],"decodehdr":[8755,45166,47405],"dword":[74576],"brightly":[10097,26790,31745],"threadpool":[6052,74716],"angular":[6273,6287,7198,7255,8006,8499,8599,9177,9294,9745,11262,11538,12708,13165,13240,13869,15001,18225,26560,26573,26588,32340,32358,32411,33671,37617,38492,38554],"belonging":[14763,23045,31650,32174],"concurrency":[66751],"cube":[11,2382,2439,3388,3560,8608,8820,9427,10075,10406,11297,13093,13200,14029,14120,14246,18435,19064,21653,22016,22193,22454,25289,25542,26870,30039,30665,31093,34783,35241,37689,39253,39357,40456,42449,42691,43553,45080,45127,46278,49024,50032,50714,71773,72259,72524,74422,76262,76332],"adds":[495,509,998,1259,1359,1376,1539,1733,2053,2121,2296,2367,2812,2967,4578,4956,5099,5961,6136,6318,8280,8499,8586,8643,9454,9879,10109,10543,11735,12109,12472,12790,13453,13826,13934,14597,16364,16378,16392,16579,16850,17452,17539,17591,18080,18191,18852,19053,19239,19473,20010,20163,20740,22089,22918,23401,23525,23569,24606,25329,25359,25679,26304,26404,27054,27110,27329,27763,28189,30211,31670,31733,31749,31767,31779,31804,31825,31842,31925,32080,32095,32119,32206,32242,32330,32348,32374,32596,32619,32639,32667,32714,32749,32893,33092,33416,34425,35211,35247,35519,35711,35776,35799,36075,36199,36328,36496,36684,37173,38396,39196,39681,39708,39882,39969,41731,41966,42169,42372,42623,42703,42724,42746,42792,43046,43292,43451,44471,44577,45010,45198,45274,45452,48335,48369,49491,50012,50071,50522,50562,50620,50698,51400,51529,51696,52229,52673,52737,52877,53192,53782,54449,54560,54880,55054,55975,56045,56100,56799,57124,57634,58104,58378,58586,58778,59379,60325,60644,61515,62111,63090,63189,64900,65191,67961,68509,69010,69262,70292,70523,70585,70969,71056,72399,73190,73331,73449,73979,75134,75318,75530],"yz":[8523,14481,27473,47645],"managers":[6124,30412,53391,54070,70211,70504],"dropdowntoggle":[30623],"__progressive":[10008],"talking":[5054,42816],"0f1":[530,33897],"immediate":[3493,4595,7937,13039,14527,16659,19027,23777,24455,24984,43302,52239,54106,54281,58732,59548,60355,64793,65973,74564],"throw":[1789,2831,21031,24985,30880,38763,40586,67773,73198,73805],"createdirectory":[3533,52074],"dmca":[4065],"tilting":[5263,8566,18509],"__exponential":[26891],"renderpipelinemanager":[38195,40164,49217,68593],"typetraits":[36952,37098],"displayable":[6597],"canvasmanager":[33489],"waitforpresentongfxthread":[35714],"transparentunlit":[45549],"numresults":[18600],"icy":[1880,22466],"“__internal”":[74592],"experiences":[46,2937,2977,17296,17384,17835,21630,66903,67977,72789,72899,74209],"command+\\":[23771],"watermark":[29277],"onstartserver":[10837,66082,66288],"normalization":[265,4768],"buildallassetbundles":[3530],"getjavastringhashcode":[1424],"scriptedimporters":[68616],"avatars":[5264,21575],"listed":[20,2260,2297,2324,4503,4716,5820,6223,6361,6718,9261,9473,9991,10570,10780,13418,14749,18132,21515,22269,25096,26954,32063,33783,35785,35874,36100,36703,38358,39950,41775,42379,44054,44830,45091,46046,48067,49473,51612,52824,53070,53330,57972,59409,66111,66184,66380,68797,70108,70332,70875,71064,71217,71494,71815,73650,73952,75587],"carried":[21168,24492,27303,31838,34900,41843],"johnson's":[4979],"displayid":[75983],"manager":[59,80,927,960,1107,1117,1148,1180,2547,2580,2972,3232,3897,3906,3963,3977,4026,4219,4512,6083,6128,9764,11048,11097,11149,11156,11168,11221,11356,11403,11529,11965,12767,13345,13382,14470,14562,17835,18671,18718,18746,18757,18818,18905,19399,19623,19986,21036,21181,21625,21975,21998,22161,22561,23677,24576,25342,25389,25763,27638,27762,27912,29307,30397,30479,30916,30987,31008,31367,31380,31386,31586,31619,33438,33634,33840,34974,35187,36226,37487,38883,39511,40005,40722,41355,41421,41442,41602,43207,49945,50056,50304,50638,50917,51119,51344,51850,52103,52524,52756,52930,53175,54052,61485,61570,62827,66037,66091,66100,66179,66209,66326,66344,66369,66406,66572,66948,67193,67669,67894,67987,68049,68656,68704,68828,68862,69073,69512,69664,69693,69716,69756,69792,69861,69884,69990,70091,70121,70171,70175,70182,70211,70236,70258,70288,70305,70332,70356,70585,70762,70771,70807,70867,70914,70936,70940,71019,71115,71120,71124,71178,71186,71203,71212,71244,71261,71288,71300,71323,71344,71366,71390,71416,71446,71468,71483,71501,71516,72794,73133,74174,74232,74990,75045,75073,75134,75359,75388],"createassetmenu":[13316,48921,52362,54927,55080,55180,55324,59379],"nonlinear":[27575],"defval":[4977],"nolodfade":[23272],"lawyer":[41309],"currentambient":[10192],"subsurface":[6910,38006,46576,48290],"raymarch":[14205],"\\users\\public\\documentation\\unity":[25473],"setplayerloop":[35701],"outbound":[12645,35836],"examplefallbackshader":[45414],"detected":[2995,3503,3795,4960,15851,17788,21175,21319,25118,31689,35141,38277,38556,38586,38622,40225,40453,53995,67505,68624,68807,68954,69200,70370,75215,75485],"occupied":[9466,9961,12885,13041,33382,33428,36616],"supports3dtextures":[19741],"getsupportedtrackingoriginmodes":[76312],"raycasters":[21194,37626,39690,40001,40104],"movedfromassetpaths":[19517,68966,69213],"in_foldout_act":[63456],"yesper":[37924],"downwards":[8171,14950,30164,39382,39507,52140,71808],"myplugin":[72159],"many":[7,71,222,717,962,1024,1668,1972,1982,2083,2345,2415,2959,3489,3680,3975,4058,4448,4485,4500,4551,4751,5015,5077,5160,5350,5497,5727,5885,5919,5989,6054,6059,6198,6234,6295,6383,6445,6691,6792,6836,7316,7764,8387,8436,8771,8814,9223,9258,9332,9464,9588,9878,10012,10082,10214,10424,10499,11134,11309,11461,11606,13267,13364,13618,13708,13939,14009,14247,14576,14882,17978,18079,18119,18330,18359,18562,18681,18712,19633,19702,19974,20238,20393,20419,21113,21154,22018,22113,22145,22628,23421,23466,23677,24051,24276,25031,25064,25142,25153,25334,25355,25496,26004,26060,26361,26479,26507,26582,26725,26814,26925,27003,27488,27492,27575,27681,27738,28181,28445,28947,29139,29212,29340,29587,29861,30207,30295,30324,30359,30384,30871,31009,31661,31701,31760,31793,32220,32360,32617,32650,32705,32729,32849,33403,33659,34011,34254,34461,35320,36058,36450,36511,36584,36687,37261,37365,37481,37689,37702,37728,38292,38346,38403,38532,38672,38828,38850,39277,39494,39906,40484,40616,41096,41240,41694,41915,41943,42058,42219,42347,42360,42973,43008,43028,43302,43618,43926,44802,44870,45176,45213,45302,45569,45721,45945,45980,47252,48353,48615,49355,49437,49473,49511,49540,49613,49630,49710,50060,50065,50140,50153,50391,50419,50686,50932,51027,51137,51235,51987,52095,52120,52190,52200,52489,52532,52706,52715,52972,53878,54281,54425,54895,58586,59085,59556,59733,60635,61092,61354,61689,61921,62836,64320,64457,64756,66025,66197,66223,66383,66543,67036,67154,67180,67522,67658,67871,68050,68212,68611,68807,68911,69152,69716,69901,70224,70404,71044,71264,71869,71911,72246,72290,72462,72497,72615,72891,72942,73450,74146,74644,75077,75398,75501,75784],"unlocked":[18180,33607,71491,73268],"isvalid":[76130],"functioning":[34466,43416,50652,66355,72504,74417],"populateinstancedatabuffer":[5411,5555],"gfxpluginmynativeplugin":[28052],"ansio8":[45250],"hasn't":[1500,9365,29598,30901,33439,36753,48683,52501,53379,59729,68984,69231,70761],"android’s":[511,839,1096,33883],"delimited":[45030,45420,45457],"audit":[27775],"‘empty’":[39627],"xz":[2039,6300,7095,9830,14479,27473,27814,29633,31718,32256,35260,38657,47646],"“masks”":[65994],"ktx":[6700],"__medium__":[66485],"bgcolor":[44418],"xr_fb_space_warp":[74400],"height":[6762,7959,7979,8035,8156,8196,8574,8632,8864,8994,9274,9440,9649,9961,10337,11720,12310,12327,12858,13104,13754,13913,14805,19682,20456,20956,21206,21504,21775,21965,22732,23816,23994,24305,24761,24785,24906,25261,25535,27370,29855,32189,32610,32635,33529,34219,34900,36058,37565,38049,38665,39233,39375,39417,39461,39555,39586,39644,39724,39798,40039,40129,41247,41560,41769,42278,43154,43881,45162,47088,48323,48373,48485,49495,49522,49601,49852,50348,50375,50409,50478,50526,50535,50548,50559,50572,50592,50629,50889,50946,51156,51173,51185,51244,51390,52147,52338,54230,54320,54466,54716,54859,56113,56779,56862,57033,58147,58285,58447,58799,59306,59624,59867,59998,60313,60637,60962,61075,61221,61530,61848,62021,62450,63243,64047,64289,64499,64756,64887,65042,65170,65677,65819,65982,68153,68942,69186,71634,72530,73932,74353,75589,76491],"addshadow":[31888,44068,46771,46844],"strikethrough":[58293,62036],"mainasset":[25953],"unity_uv_starts_at_top":[43971,44844],"uid":[66770],"debugcodeoptimization":[21076,28409,68744],"novertexlight":[47826],"yeseither":[38112],"customcrashhandler":[1053],"packname":[484],"misinterpreted":[27060],"equalization":[4964],"swirls":[32230],"dllimport":[1271,4960,18546,28268,29985,30021,34657,34689,52659,72159,72202,73531,74593],"opencover":[31172],"navmeshes":[16106,50514,69390,69494],"traces":[861,936,1721,19201,24915,25724,25844,33299,33396,33469,49402,52556,73203,73300,74615],"observer":[5904],"terrains":[3830,12918,13894,13935,31706,37499,37565,50345,50491,50619,50948],"r23b":[1633,50197,69368,69472],"dodgerblue":[63552],"texturing":[11823,12356,17642,34290,35373,35780,35923,36533,41932,44442,45267,47579,50000,50009,50017,50052,50063,50075,50139,50143],"counted":[22389,29237,36306],"redoing":[66012],"zu":[53655],"macosx":[30287],"displace":[2034],"springgreen":[63642],"texturewrapmode":[14097],"destroys":[1471,9418,10846,30899,32762,33098,33928,34171,39159,48925,49986,66234],"ok":[4181,4201,4282,4436,11395,12840,13401,49549,52647,63162,63868,66271,70119,72862],"cull":[360,5338,6994,7159,7924,8086,9528,10152,17926,20381,21748,28926,29504,30173,30265,30331,30352,32944,42675,43631,44163,45792,46329,49065,49288],"contentlength":[68201],"noisier":[36590],"reinstalls":[67154,67601,67624,71541],"page_title":[73981],"depiction":[30164],"languages":[4262,8434,9260,16470,18359,30000,30853,33087,34668,34696,42598,44231,45836,52815,52984,53131,53294,58115,58369,62099,63068,67880,72709],"brushes":[7978,13935,16020,17591,37385,37500,50521,50529,50551,50630,51094,51223,51254,51325,51384,51527,51597,51599,51844,51863],"eventdatacount":[28004],"presetselector":[49929],"positionconstraint":[12766,15352],"mousedrag":[51545],"samplerate":[4946],"tlist":[37139],"works":[191,253,460,719,1031,1761,1903,1933,3590,3721,3839,4327,4576,4795,5723,5815,6767,7316,7619,7767,8159,8210,8280,8490,8598,9190,9712,10585,10605,10612,11822,12215,12833,12912,13058,13187,13262,13645,14738,14924,14929,14934,14939,15888,17342,18053,18229,18339,18422,18501,18568,18910,20402,20808,20948,21112,21430,21928,22032,22065,22516,23413,23525,24060,24488,24784,24897,24947,25311,26434,26716,26935,27045,27062,27092,27209,27648,27697,28089,28248,28379,28613,28867,28881,28988,29420,29471,29695,30164,30167,30224,30270,30379,30879,31598,32154,32872,33384,33415,33446,33627,33865,34499,34863,36099,36563,36637,36678,36712,37645,37684,37702,38240,38650,39630,39731,40002,40146,40150,40169,40175,41295,41860,41990,42044,42620,42802,42810,43148,43193,43239,44270,44320,44383,44590,44683,44755,44785,44876,45002,45387,45477,45614,45620,45930,45960,46520,46720,47655,49021,49170,49285,49318,49524,49607,50052,50066,50147,50368,50563,50596,50642,50676,51608,51816,51987,52546,52696,52754,53691,54015,54443,55545,55559,55731,58756,59047,62011,62747,64642,65703,66033,66251,66463,66548,66563,66813,66837,67131,67824,68160,68740,68902,69140,70396,70935,71109,71162,71388,71611,71652,71771,71883,72337,72789,72916,73631,73905,74190,74429,74567,74923,75027,75191,75224,75389],"hdrp_7_1_0_or_newer":[18652],"notarization":[28075,28113,28124,28129,28283,28317],"discrete":[2179,7173,11576,13058,13251,18615,21160,23070,32413,35276,36307,38425,38557,38587,62836,75623],"day":[5891,6838,22325,25062,40087,42779,53499,68047,68609],"ending":[15817,26581,28676,35714,49840,51545,52162,58517,71687],"animationblendmode":[2145],"ienddraghandler":[49895],"decrypt":[66138,70506],"couches":[13392],"darkkhaki":[63535],"develops":[70763],"findtexture":[61584],"unordered":[30292],"serializerules":[39943],"clumps":[50361],"space'":[39442],"intend":[6096,25667,29360,35793,36205,38466,40618,45085,49154,49737,52851,53197,53882,72687,75056,75919],"updating":[2701,6803,11389,12889,17045,18188,19035,20051,21029,21186,22142,26714,29148,35449,35897,36123,37740,38836,40271,42342,59872,67256,67690,68852,69061,70736,71311,71500,71593,71974,72505,75582,76035],"pct":[6713,60717],"unlinked":[63457],"noted":[18379,30052],"unity_speccube0_hdr":[47405],"cgincludes":[43920,46510],"elit":[65174],"'hwnd'":[34237],"imagine":[6750,32230,43114,43149,50322,65999,72323],"doubt":[38446],"flows":[17133,21332,22435,67745],"indestructible":[40746],"arm":[1966,7852,14345,17030,18104,22506,25670,26567,31042,33518,33583,34578,34942,39253,50207,52576,71783,72212,73020,74771],"projects\\standard":[25473],"sprite":[7,22,80,104,167,3389,3495,3561,7170,7959,8263,9024,9101,11309,11811,12303,12721,13267,13585,13701,13717,13742,13783,13850,14235,14348,14521,14546,15179,15838,15982,15994,18968,20392,22290,24728,25171,25245,26597,28827,28875,29561,30989,31021,31662,32287,32480,32693,37321,37348,37498,38129,39412,39591,39714,39826,40750,41523,46122,48352,48364,48378,48500,48519,48527,48537,48555,48571,48602,48616,48629,48640,48672,48851,48867,48894,50859,50937,51088,51132,51203,51232,51252,51361,51629,51720,51753,51777,51797,51820,51875,54162,54240,54741,54773,55866,58119,58354,58662,58998,59383,59513,60643,61455,61577,61900,61920,62035,62054,65767,65984,68133,68649,72274,72757,74185],"loaddefaultcatalog":[53960],"unityallocator":[27829],"kunitygfxdeviceeventbeforereset":[29964],"panelchangedeventbase":[60553],"partly":[13089,43177],"getuvs":[319],"+1f60a":[61946],"curly":[41174,54800,63735,73952],"brush":[6703,7979,8324,13935,16020,31055,37382,50511,50521,50527,50544,50551,50557,50574,50582,50629,50647,51109,51189,51226,51321,51381,51426,51529,51552,51572,51601],"nw1fiqg2svufaqwbqz0lwcy2f8lxb4bg+mro64etlotct":[69942],"multi":[47,258,1027,1591,1677,2989,5222,7472,8061,8787,10014,11623,11718,12409,12650,12881,13616,15982,16919,17474,17642,17773,17803,18257,18478,20426,20702,21609,23287,23423,23449,23920,24589,25238,27124,28447,29259,29585,29695,29826,30226,33065,33611,33760,34256,34337,34463,35700,37670,37946,39190,40682,42127,43223,43374,43456,43922,45512,49388,50612,52240,52754,54139,58310,58409,59123,66431,68498,71852,73186,73692,74141,74976,75175,75421,75872],"fullforwardshadows":[23303,29529,31888,43203,46781,46844],"utilities":[17788,29570,31272,43456,52530,72967,74397,75323],"shader_stage_compute":[43957],"→":[71059,74369],"rescales":[6314],"couch":[11105],"radiobuttongroupsnippet":[65095],"startpos":[51440],"gradletemplate":[23485],"particle’s":[32189,32240,32615,32635,32665,32776],"#c0c0c0ff":[49875],"particlesystemvertexstreams":[32921],"reset":[223,2012,3715,3995,7764,9787,10433,10513,10704,11737,12770,17980,18094,19013,19239,20030,20124,21311,21989,22032,23754,29790,29897,32849,33645,34127,34425,35054,35424,35999,36057,36829,36982,39094,39231,40271,41546,43250,50974,51018,51097,51188,51228,51391,54262,54898,54930,55060,55183,55264,55329,55870,59133,68825,69058,70380,70872,71016,71208,71543,71626,72243,74418],"uncompiled":[1018,4578],"frozen":[28801,35942,37728],"occluded":[9965,22848,30179,30264,38354,49496],"label's":[35555],"collectable":[41344,50288],"sides":[96,179,1934,2131,7991,8040,11662,11792,13093,14868,18067,22542,27013,29594,33556,34757,35250,39382,41784,42713,42729,42754,45784,48132,48521,54019,54725,71871],"majority":[10138,14319,37547,39958,44231,65992,68090,68626],"thought":[1994,2216,2235,7179,13105,26925,47455,65998,68546],"parental":[67382],"horizontalscrollbar":[23982,59660],"texel's":[22180],"rgb":[29,6597,8755,10151,11814,13768,13797,14195,14321,23295,24215,24517,25276,27130,27549,27591,29492,31879,32943,34280,37802,38359,43597,43754,43850,44104,44345,44488,45087,45296,45595,46171,46547,46834,47365,48287,49535,49628,56864,57165,59303,61467,61875,62460,62676,63505,63692,63758,65810],"screws":[32702,49517],"“mymanagedassembly":[71686],"organised":[1995,42343],"guide":[1489,1889,3501,4029,5826,5910,6142,6847,6931,6995,7808,9532,9617,9621,11161,13063,16151,18684,19618,21980,23814,23882,24275,28433,30506,30516,35062,35406,35612,35765,35966,37301,37322,37408,37481,37484,37507,37532,48376,50926,50939,51851,52608,53255,54511,57128,58653,58733,58997,59549,61593,62740,65773,66547,66964,67018,67229,67661,67840,67983,68567,68717,69294,69343,69447,69508,70914,71301,72462,72675,74131,74223,74943,75483],"consistencycheck":[25102],"kunityxrinputtrackingoriginmodeunknown":[75591],"simulators":[20000,25916,52599],"licensed":[234,9256,18733,50342],"rfc":[68384],"myclass":[29921,38832],"pointerleaveevent":[60772],"repository":[2943,3229,5155,6152,18681,18818,18918,20760,22993,33904,35092,49150,50575,54509,54912,54964,55064,55163,55236,55310,55370,56126,56213,56274,56328,56395,56478,56524,56593,56737,56800,56983,57126,57338,58595,59272,59911,60675,60882,60983,61198,61595,61750,62342,62498,62644,65780,66261,66603,66819,66843,69398,69502,69749,69860,69990,70091,70120,70171,70174,70230,70359,70585,70770,70895,71168,71244,71469,75381],"m_itemasset":[55202],"#a0522d":[63635],"typeid":[4673,57938,62180,74687],"ascends":[57820],"x86":[628,674,706,919,19302,25459,34575,48063,50195,67858,72191,72210],"calculated":[1277,3587,5240,6284,6649,6979,7870,8232,8531,9222,9462,9688,9965,9997,10405,11520,12698,13000,13065,13115,13388,13475,18568,20457,21156,21531,22407,27056,27323,27337,38384,38433,42366,43177,43571,44428,45266,47422,49530,49563,53495,54273,54885,56100,71885,72319,76179],"introduces":[1,955,1100,1316,1807,3492,4140,5815,19277,20094,21640,23629,25973,26103,26302,27062,30295,40150,43195,64042,65849,71011,74501],"decompressed":[3247,7482,14350,35994,42219,73088],"nameid":[2561,5468,5613],"answer":[232,4343,29714,53324,67665],"spin":[9215,9695,10887,14969,32162,32910],"silently":[5919,25462],"paddingright":[57084],"bakemultiplescenes":[5325],"rescale":[8117,34783,37827],"labore":[65174],"intrusively":[6125],"retarget":[1997,7159,29904,72860],"netid":[10812,11091,22965],"1g1r_mc6b3kw36hmoke2bw72qfxzena4qmurzf6bomze":[37746],"samplewindow":[62132],"field’s":[66521,68547],"repacking":[27055,53206,53473,54016],"tricky":[39138],"repositories":[988,12008,23480,38818,69859,70499,70686],"capital":[9268,57146],"packageinfo":[69514,74307],"drawcalls":[36194,36366],"ipa":[2834],"yellowish":[50062],"sample2darraytexture":[14038],"branched":[23440],"daily":[22337,53499,67170],"splatters":[8786,12827,72799],"command's":[5730],"handlebytes":[11013],"inside":[463,481,511,913,998,1255,1502,1890,2278,2412,2774,2896,2997,3020,3287,3315,3377,3468,3484,3566,3574,3713,3730,3785,3853,3932,4026,4219,4387,4465,4516,4654,4960,5019,5160,6995,7752,8005,8078,8163,8892,9196,10003,10109,10239,10358,10513,10763,11552,11966,12811,13024,13100,13382,13763,13791,14033,14548,14870,15031,15702,17980,18236,18314,18364,18623,18945,18980,19324,19623,19657,20071,20242,20630,20808,20869,20945,21031,21322,21394,21445,21986,22183,22812,23257,23480,23797,23892,24299,24606,24664,24773,24958,25161,25222,25465,25667,25938,25997,26114,26138,26255,26304,27682,28056,28066,29766,29878,30029,30035,30101,30166,30243,30904,31765,32067,32289,32756,32872,33135,33467,34674,34905,34926,34949,35230,35886,36679,36792,36826,36979,37273,37573,37618,38713,39135,39365,39377,39472,39541,39583,39623,39765,39900,40137,40358,40446,40699,41416,41988,42324,42596,42691,43553,43651,43920,44177,44205,44325,44596,44678,44764,44796,44867,44989,45060,45267,45395,45528,45601,45937,45974,46510,46754,46824,47098,47255,48178,48242,48335,48652,49484,49565,49632,49737,49762,49819,52566,54018,54254,54404,54557,54574,54688,54712,54747,54757,54800,56394,56730,56795,57679,57919,58074,58254,58558,58622,58750,58998,59405,59579,59872,59904,60136,60161,60348,60396,60610,60809,60899,60999,61326,61444,62122,62742,63098,63222,63690,64151,64335,65049,65164,65771,65952,68284,68488,68534,68720,68897,69135,69663,69710,69740,70211,70320,70336,70374,70806,70875,70965,71216,71324,71690,71766,71877,71974,72867,73190,73409,73562,73630,73976,74896,75136,75607],"warmupallshaders":[42208],"prefabinstance":[15235],"develop":[662,695,698,813,1024,1095,1516,1807,2977,4736,4880,5984,19277,19640,22699,25747,25827,25904,26103,27927,33763,36739,40657,52707,52732,65896,65970,66542,66802,70236,71012,72076,72126,72221,72789,72884,72901,72960,73296,74497,74888,75251,75339,75369],"particlecurvessigned":[6703],"uploadhandlersand":[68309],"uber":[43019],"masked":[7844,39672,45634,45866],"smear":[8080],"consultation":[5982],"pointereventbase":[55808,60765],"skreceiptrefreshrequest":[67364],"_sintime":[47099],"normalmap":[46296,46836,47460,49500,49520,50934,52184],"newin20211":[11399,70767],"lastmessagetime":[11007],"animator":[1880,1916,1938,1951,1967,1980,2006,2034,2212,2219,2233,2237,2250,2314,2366,4520,5961,6061,6320,6985,6999,7143,7177,7869,7930,10784,13805,14717,15103,18105,21337,21588,22093,22466,24792,25234,25624,29090,29126,30049,32883,33373,33913,35236,36029,37576,38340,38441,38667,39827,40624,49644,49656,49660,50322,54209,68580],"frag_meta2":[29509],"getunsafeptr":[2930,5639],"istorecontroller's":[67063],"#00":[62011],"decorating":[6101,17092,40486],"iaudioeffectplugin":[4970],"anchorcreator":[75062],"hinting":[52651],"pinball":[18225],"douglas":[10231],"tampering":[28108,28185],"scroll_down":[63472],"inputsubsystem_trackingoriginupdated":[75600],"150px":[62456],"storagedir":[66585],"uibuilder":[54398],"malformed":[7413,22439,44724,70384,75979],"trademarks":[4130,17803,50340],"settexturedirty":[61555],"64aa":[66769],"padding_":[64286],"“local”":[25113],"turned":[5973,21054,26094,29347,34214,35056,38666,44848,50377,54696,57900,63112,64325,65931],"2165094f":[61231],"segmenting":[31222],"shaderlab's":[44691],"pinned":[6737,18471,26160,39043,50929],"lightmap_shadow_mixing":[42171,44577],"fires":[36593,55727,58230,59720,60411,60564,61796],"addrofpinnedobject":[26162],"servers":[221,2834,3340,4544,18812,21068,23194,34203,52737,53424,66110,66393,66410,66720,67364,67708,68043,70184,70424,70949,73153,73354,73410,73707,74212],"act":[1890,2034,2256,7765,8133,9329,9953,11335,11660,12222,12640,13266,13696,15861,18432,19027,20807,22012,22347,26495,27984,28265,37539,38643,42050,48188,56881,57588,58369,58809,63461,66363,71793,71970,71982,72145,74420,74590,75226],"heads":[66335,69879],"ecs":[15902,16275,66027],"└─":[63776],"planetswindow":[59917],"standardizations":[5004],"categories":[1765,3906,3951,3988,4042,4256,4663,5044,5094,7220,7487,8837,10727,12048,17945,18215,20653,22651,27983,29390,30365,34963,35265,35368,35415,35582,35624,35691,35817,35902,35927,35969,36022,36119,36173,36206,36297,36356,36434,37750,42009,42362,42663,43217,43493,62879,66467,71206,71217,75289],"convenient":[1989,3287,3489,5371,5515,6126,9384,10816,14123,18268,18343,18485,33215,33458,34956,36172,36348,37670,38668,39297,39902,41320,41718,42058,42614,48676,55740,56728,57694,68179,68460,69985,73405],"unity_indirectspeccolor":[47145],"style":[75,823,1005,4354,5901,6750,7364,8203,8411,9229,9553,9619,10382,11815,12082,12289,13990,17744,22239,23243,24051,26784,27267,28897,34281,34343,34469,35537,37302,37315,37329,38678,40048,40655,42666,42688,44343,45206,45267,45613,45846,47335,49817,49957,51423,54148,54295,54435,54590,54608,54631,54674,54699,54740,54794,54848,54871,55620,55842,56041,56097,56172,56261,56403,56530,56701,56732,56832,57038,57158,57295,57341,57659,58112,58282,58652,59269,59592,59834,60267,60453,60890,61048,61179,61194,61390,61442,61522,61572,61757,61963,61964,62037,62054,62278,62452,62565,62586,62662,62979,63063,63107,63667,63704,63774,63808,63850,63868,63882,63891,63926,63945,63974,64002,64017,64036,64160,64204,64317,64372,64500,64550,64749,64825,65024,65038,65051,65169,65300,65321,65386,65413,65432,65444,65476,65490,65501,65668,65687,65757,65778,65913,65966,65981,66337,68907,69147,73933,74247,76160],"prioritizes":[28477,30337,41427,70245,75766],"little":[1767,1903,3242,6198,6266,9060,9401,9466,10092,10230,11298,12885,27490,29551,29663,33532,34840,36055,37668,38405,42354,43181,49644,52222,71809,71873],"chance":[4370,7364,13037,26360,28484,32106,32273,52150,53370,73209,73633],"jpy":[53665],"manipulated":[2353,5959,6121,6999,14756,24048,54711],"byteaddressobjecttoworld":[5453,5598],"startnew":[21922,36263,36411],"monospace":[62026],"updates":[205,220,725,1169,1253,2173,2667,2700,2764,3581,3778,3856,4254,4527,6125,6896,6977,7153,7243,7965,8031,8599,8787,9762,10832,11006,11244,11274,11447,12222,12618,12728,12759,12888,13131,13193,13247,13263,13280,13297,14498,15851,17092,18169,19013,19383,19567,20435,20785,21029,21160,21319,22228,22681,23444,24518,24606,24624,25692,25861,26049,26056,26706,27297,27315,28788,29147,29727,30248,30727,32166,33178,33489,33677,34994,35322,35521,35750,36144,36568,37706,37724,38501,38563,38593,39192,39310,39908,42060,43235,43533,43990,49217,49656,49780,49927,50615,50712,51387,51794,51962,52939,53308,53701,54391,54886,55552,56074,56692,57823,57859,58845,59719,61908,63666,65231,65255,66255,66696,67256,68580,68852,69061,69518,69719,70230,70326,70394,70756,70960,71063,71258,71446,71488,71503,71534,71592,71914,72363,72401,72982,73062,73702,74011,74180,74368,75109,75740],"iunityprofilercreatecategorycallback":[27990],"#ifdef":[23257,41800,44363,44540,47893],"disconnecting":[66254,66436],"styletransformorigin":[62278],"deliver":[401,785,1094,1463,1668,4071,4545,7507,11813,12349,25826,28125,28126,31592,34279,34645,54033,68212,71994,73639,74889],"exampledisplayprovider_gfxthreadcall":[76014],"lowlimit":[64961],"transferable":[65897],"#characterlist":[54333],"releasecallback":[4934],"onservererror":[66284],"preferably":[24753,35345,66569],"xcode's":[26035,28285,52633],"m_triangleprops":[27379],"zx":[14482],"addmanipulator":[56023,60324],"maxcomputebufferinputshull":[19767],"fromrotation":[76285],"past":[332,5176,6846,8508,58393],"wish":[2775,5042,6811,7184,9594,13855,19621,25347,29423,30430,32477,39523,40573,41560,50180,50648,52858,54577,58918,66258,66598,66934,67272,67592,67769,68281,68325,68348,68853,69062],"visionos":[72785],"among":[122,3814,4515,5998,7784,13590,14245,15020,20393,22129,22948,24900,26005,27215,33580,35236,37227,37683,42197,42811,50932,52248,56390,70236,75991],"foreign":[52969],"latest":[235,1658,3229,5888,6468,10832,13115,18593,21540,24631,25941,28307,28318,28794,29769,30282,35178,37487,38849,49151,50179,52481,52500,52599,52794,53093,53401,61904,62412,65880,66018,66615,66808,67076,67373,67548,68777,68828,68911,69073,69376,69480,69518,70304,70613,70756,70965,71258,71345,71365,71506,72416,72786,72931,73130,74181,74228,75121,75159],"krw":[53668],"boltsearches":[40787],"granular":[14336,36085],"network":[229,641,1260,3292,3591,10093,10784,10803,10984,11001,11035,11062,11097,11145,11156,11168,11181,11204,11221,11238,11267,11287,12641,16091,16933,17723,18812,22681,26690,28431,30467,31605,33883,35797,35957,36488,38927,52645,53320,62827,66034,66047,66100,66110,66179,66209,66326,66344,66369,66403,66555,67272,67295,67378,67594,68086,69882,70183,70230,70363,70698,70830,70913,70964,71317,71551,72610,73410,73445,73667,73899],"gcmode":[33074,33388],"00s":[41962],"somevaluetype":[52609],"min16uint":[8483],"registerlifecycleprovider":[75277,75725,75931,75983],"graphicsdevicevendor":[19728],"adventure":[13962,37311,53285],"routed":[4797,5020,7789,67047],"'unity'":[35866],"_mip":[8716],"rebinds":[35763],"multichannel":[7468,7792,22578],"partial":[2657,6037,8787,12798,14411,17955,21605,21947,35215,36786,40733,40814,41466,41506,42876,52567,54120,57426,62790,64331,75549],"libpluginname":[34678],"calls":[802,1259,1272,1404,1514,2141,2605,3418,3693,3821,4593,4654,4902,5724,5733,6066,6141,7673,9424,10438,10720,10822,11808,12661,15850,18292,18485,19077,19383,19591,20088,20378,20402,20860,21002,21335,21719,21852,21899,22615,23270,23378,23537,24456,24608,24939,25194,25986,26114,26249,26627,26657,26712,27729,27937,30007,30070,30319,30349,31870,32747,33299,33429,33483,34639,34645,34720,35344,35506,35612,35719,35834,36041,36187,36335,36355,36442,36496,36886,37453,38332,38406,39005,39160,39522,39735,39956,40163,40484,40568,41187,43457,44372,46977,48227,48353,48924,49281,49309,49390,49656,49668,50324,51202,51787,51966,52642,52766,55508,55989,56219,56449,57017,57549,57738,58076,58111,59047,59552,60619,61065,61326,61779,61921,63685,66160,66256,66411,66521,66823,66858,66937,67131,67209,67261,67924,68209,68384,68623,68956,69203,72438,72917,73689,74011,74334,74653,74950,75440,75509,75785,75880,76037,76090],"usescustomeditor":[44219],"script’s":[38766,58178],"obtained":[246,5184,6273,6298,9998,12431,12665,13042,21965,37689,48677,52570,69514,69708,71868],"addsubasset":[40484],"fail":[165,222,478,501,519,1736,3377,9265,12214,13462,19655,19667,21052,21757,21930,22439,23257,23439,29212,30292,30361,38474,38661,40555,45859,53999,58776,66119,67272,67295,68956,69203,69372,69476,71016,73024,73633,74725,75114],"networks":[219,3569,12645,17370,53319,66341,74857],"storyboards":[12095],"previousdata":[59725],"loss":[4085,5968,7256,7506,7594,7603,7611,7634,7643,7653,8251,8387,11510,11648,12514,14790,29331,31685,48528,52099,52531,55506,74774],"displayconnection":[66848],"tonemapping":[22933,24500,34878,37936,75168],"asm":[38893,68950,69195,73947],"fireos":[66974],"delivers":[17240,73025],"adb2":[66638],"toolbar1":[23948],"bias":[6281,6597,9884,10272,10328,12896,13822,14609,21750,26683,32273,32739,35931,37821,43179,44624,44973,50007,50694,51013,51170],"badly":[35878],"passage":[52046],"windowslowintegrity":[74503],"storytelling":[21633,22022],"separately":[1336,2201,2999,3576,4274,4565,5330,7068,7231,8565,10358,10720,11844,13613,14960,20583,23733,29906,30209,32158,34876,35103,35254,35795,36042,36188,37061,37693,38221,41264,50153,50593,50656,51612,52472,52938,58407,62815,64452,67947,69868,72318],"scalability":[6872,28979,54177,74173],"instruments":[5166,30413,33474,52095,52590],"other_define":[8423],"logicalandinverted":[43829],"yessubtractive":[37849],"kunityxrinputfeatureusagebatterylevel":[75642],"weakreference":[30897],"malloc":[2926,5498,26452,35729,36106,36497,74555],"uncompressedassetbundle":[2804,3248,3294],"loadingtextureandmeshdata":[12947],"repaint":[21359,49926,51511,59554,60950,61056],"loadasync":[6141,15737],"0b4\\editor\\unity":[28632,28726],"tookit":[62833],"newin20191":[10050,11431,12028,13448,21621,22285,24594,27164,32710,43333,48850],"accentuates":[32318],"traverses":[63219],"__pin__":[39621],"uwp":[12436,19072,19363,20448,34222,34682,66866,66901,68755,71995,72004,72011,72062,72077,72088,72097,72102,72109,72118,72126,72131,72135,72147,72171,72201,72206,72691,74399,74509,74728,74752,74756,74798,74807,74813,74832,74848,74862,74883],"ishttperror":[72588],"influence":[328,997,3585,4203,4281,4853,5049,5212,6223,6266,6284,7979,8302,9515,10406,11481,13249,13478,13915,18078,18172,21583,22088,23438,27263,29733,31814,31857,33491,38510,50006,56100],"archived":[30454,53232],"1b4555dc":[74566],"650ms":[62949],"01f":[27362],"clip":[264,1880,1912,1922,1966,1994,2039,2133,2192,2215,2281,2324,2361,2423,4752,4776,5165,6290,6314,7004,7163,7178,7451,7467,7620,7731,7752,7771,7940,8082,9138,9644,9886,10703,10760,11312,12855,13807,14764,14786,14833,18066,20539,21345,21486,21745,22076,22459,24326,25184,27813,29092,29128,30352,31068,32392,33908,34884,35052,35763,35919,35985,37821,38653,39351,40619,42678,43193,43875,44410,44637,44863,45503,45591,45721,46322,47286,47951,48335,50322,50877,54212,64146,64489,68193,71927,72465,72547,72640,72730,73048,73444,76492],"postprocessbuildattribute":[6344],"infinite":[253,3828,5939,13574,18617,19480,24164,24728,27576,33656,38548,38576,38624,39885,65211],"get2dlights":[26757],"pq":[34288,34501],"shortcutmanager":[74231],"objecttype":[65012],"openfile":[21037],"isosceles":[86],"you’ve":[3253,3393,3521,6798,10077,10659,13618,18309,20457,22260,28248,28392,30440,34595,35779,36060,37473,37585,50495,50629,52897,53081,53304,53702,53813,66755,68602,68697,71689,74859],"blowing":[2347],"those":[219,328,1140,1771,2037,2179,2198,2204,2278,2296,2353,2412,2418,2609,2722,2768,3292,3307,3419,3466,3571,3669,3732,3795,3856,3912,3957,3977,4065,4524,4704,4847,5039,5735,6045,6144,6291,8004,8085,8134,8302,9177,9200,9262,9307,9488,9744,9843,10586,10719,10780,10832,11307,11588,12275,12588,12785,12888,13133,13174,13208,13254,13268,13377,13475,13573,13622,13684,13760,13794,14133,14545,14825,14999,18008,18135,18220,18354,18379,18819,18844,19555,20154,20540,20608,20636,20660,21005,21296,21865,22144,22224,22538,23270,23625,24169,24759,24786,24790,25177,26081,26146,26375,26558,26572,27263,27569,27742,28110,28490,28952,29116,29181,29484,29907,30217,30265,31380,31716,32062,32217,32269,32631,32855,33094,33415,33420,33527,33612,34611,34855,34882,34918,35130,35256,35879,35958,36235,36400,36508,36596,37706,37744,38404,38661,38751,38953,39123,39523,39828,39913,40179,40448,40570,40911,41237,41677,42148,42449,42788,43057,43113,43154,43222,43335,44364,44771,45121,45417,47908,48593,48792,50584,51027,51166,52040,52610,52689,52860,53695,54262,54713,55628,57331,59752,62043,63112,63667,63866,64450,65368,65713,66002,66467,67154,67845,68285,68533,68590,68784,69295,69390,69494,69860,69987,70236,70292,70867,70914,70936,70954,71027,71205,71215,71283,71413,71468,71877,72193,72385,72531,72787,72982,73024,73406,73501,73917,74184,74783,75090,75516],"penumbra":[37840],"threading":[6052,31635,35700,40604,73025,73692,73900,74141],"drags":[11499,39758,39995,57479,57581,57979,60212,64267,65940],"smearing":[22058],"texture2dproj":[44371],"simplebindingexampleinspectorelement":[56450],"byteaddresscolor":[5455,5600],"filesize":[1967],"stupid":[27468],"m_lightmapindex":[76513],"quot":[61459],"gl":[21356,29974,30301,43801,43937,44868,51515,73524,74094],"standardspecular":[23278,46732],"rays":[6722,6771,9966,9999,22118,22180,22808,23440,26809,36593,39693,42792,43149,49609,71567],"emit":[2349,5160,10120,10871,24983,26079,26787,30874,31791,32188,32407,32660,32703,34939,35888,36104,40558,42547,42798,45042,49490,73626,73904],"rootmotiondata":[15283],"footer":[12421,55216],"__sprite__":[32484],"aggregates":[19653],"lxo":[6699,24691,29754],"operations":[391,3618,3681,3723,4584,4651,4964,5042,5291,5986,6069,6118,8441,12673,13149,13854,17110,18005,18257,19643,21052,22878,23543,24492,24977,25865,26122,26129,26545,26663,26688,27702,28971,29416,29467,29731,30166,30265,30321,30375,33094,33438,33489,34681,35054,35366,35622,35760,35951,36736,38257,38287,39003,39263,41290,41322,41812,43131,43728,43801,44242,44377,44768,45085,45498,45575,46074,47952,48976,49148,50005,50057,50659,50686,50703,52496,52642,53593,55511,55554,57555,60219,63693,65906,68198,68300,68305,68458,68960,69207,70224,70245,71361,72330,72401,72996,74151,74581],"safe_cast":[74678],"asterisks":[39640],"examplepasstagvalue":[45955],"cheatsheet":[53481],"floatvalue":[36780],"substanceimporter":[6711,15270],"kformatr16g16b16a16_unorm":[50119],"visualelementextensions":[56116],"array's":[13032],"mlapi":[66025],"typedef":[5242,34732,75757],"startactivityindicator":[391,25865],"clientscene":[66236],"fetch":[2567,2666,2696,12222,18818,43967,44913,45514,45810,52645,53029,53972,56730,56757,66996,67287,67364,67548,67708,69867,69989,70091,70121,70171,70438,70810,70985,73669,74524],"vector2int":[51440,55536,65587],"press":[2256,2278,2284,2412,2440,5105,6267,6294,6352,6404,7184,7956,10513,15714,18380,18995,19074,19443,20104,20559,20599,21405,22644,23737,24459,24534,28326,29057,30198,30826,34523,34823,36057,36693,38750,39159,39226,39284,39317,39351,40021,40111,40629,41694,41718,43222,48262,48667,50542,50642,52766,54570,54650,59732,60223,60476,60497,60768,61898,62663,62821,65132,66597,71608,72241,72499,73091,73268,73294,73471,74946,75087,76108],"loggingdownloadhandler":[68219],"054078ms":[66747],"think":[222,3468,4206,4997,9712,14277,18375,22534,24910,25328,25551,29759,34781,37526,39096,42691,49643,50929,54560,66203,68624,72299],"parser":[6035,41211,58073,63864,63917,68513],"marker’s":[35380],"motion":[1865,1924,1994,2033,2045,2067,2192,2243,3012,5674,5725,5972,6265,6284,6321,6999,7152,7251,7920,7929,8244,8288,8499,9478,11490,13247,13534,13807,14567,14702,15175,15967,18071,18225,20286,21337,21576,22080,22303,25347,26558,27813,29137,29890,30380,31797,32299,33572,34873,37496,37958,38467,38502,38563,38593,38650,39239,39827,40615,42396,44051,48302,49644,49656,50455,50941,51956,52168,53725,68009,71793,72337,72942,74204],"interacting":[13735,13761,38609,38648,50984,52247,52766,73917],"dampen":[8253,8510,31683,32131],"testobjectwithserializedmapstringbool":[15361],"transspecular":[42927],"enums":[37098,52613],"triggered":[2704,3430,3823,4255,10933,12358,14734,28067,31794,32657,32767,34292,35695,36096,39347,41583,51529,54279,60462,60497,60764,62839,66313,73285,75658],"award":[15902],"blending":[1946,1953,1982,2063,6262,6282,6312,6319,7862,7913,7927,9452,10375,13133,13913,14322,17000,20712,21729,22450,24796,27538,27560,29117,29128,31929,32920,33907,34194,37813,38668,42671,42789,43591,43728,43800,44660,44914,45304,46766,47256,49446,49567,50444,50693,71878,74207],"mspace":[62026],"ilayoutgroup":[54269],"easily":[4,3906,3952,5065,5498,6146,6785,8162,9145,9314,13032,13897,13961,14976,16470,17126,18225,18508,18617,18674,18906,20558,21971,22174,23239,24726,24761,25498,26054,26081,26562,27506,29142,32712,32920,33088,33615,34195,34925,36075,36680,37971,40180,41619,42024,42818,49432,49644,50656,51427,51621,52576,54499,66000,66194,67763,68043,68527,68609,69970,71408,71874,72487],"monobleedingedge":[12557],"disclosures":[53714],"fibonacci":[52120,52200],"selectorfordesc":[41082],"outputpath":[19089],"extreme":[36696,37619,39756,39986,49609,49714,50692],"pointlight":[36652],"textureidn":[41028],"uv_bumpmap":[46186],"inspectors":[4808,20177,20698,20811,21382,24464,25349,25404,35881,51552,54200,54484,58732,65973,71915,72429],"enforcepresetpostprocessor":[19475],"onbegindrag":[49893],"window_button_close":[63499],"hpos":[46433],"newbuffer":[26208],"min16float":[8453],"accelerationevents":[29665],"culture":[6001,20196,52094,53442,68644],"createpropertygui":[55010,55509,55579,58888,59586],"edition":[5853,8319],"logerror":[8978,18130,33126,66272,68125,72589,73300],"maxangularvelocity":[33679,38492],"traditional":[2958,5193,8203,9463,13961,16060,20237,21154,24977,27500,27514,32318,37401,37689,42447,43777,44931,46766,49354,49850,52754,72940,75073],"forcesendlayers":[7973,8177,8274,8392,8777,9042,12736,14512],"o":[1687,3748,6532,8743,10183,14059,14186,18258,23262,29513,31902,32977,34672,35127,43356,44023,44408,44899,45686,46152,46546,46760,46863,47220,47925,62027,73652],"orientates":[20777],"firefox":[12431,21302,50224,73126,73294,73320,73626],"spir":[41851],"texture's":[18343,42440,42478,42515,42521,42568,42827,42838,42849,42870,42884,42904,42924,45353,49558,49570,50688,61935],"skies":[22894],"matchmaker":[11039,17395,31435,66230,66341,66367,66369],"res__":[14805],"testable":[70879],"spawnentities":[13333],"'git'":[70359],"area":[2252,2297,2324,2363,2431,5176,5285,7056,7197,7400,8332,8565,9024,9565,9869,9961,10093,10124,10586,11319,11481,11724,12111,12645,12721,14223,18119,18896,18993,19692,19976,20073,20552,20721,21007,21147,21494,21964,22165,22189,22717,23920,24371,25895,26035,26787,26821,26917,26987,27020,27923,29614,29700,29879,29894,30234,30507,32507,33382,33424,33544,34790,35212,35366,35692,35882,36470,36568,36664,37688,37790,39201,39355,39378,39416,39518,39671,39724,39729,39746,39764,39983,40088,40819,41325,41348,41427,41567,41671,42182,42771,43118,43154,45911,48162,48514,48665,48682,49525,49577,49611,49632,49852,50378,50536,50553,50561,50585,50642,50905,50946,51155,51314,52114,52554,52761,53452,54757,54901,57341,57578,58350,59085,59594,61545,61913,62043,64017,64151,64752,64878,65164,65951,65981,66230,66341,66455,66605,71806,72362,72409,72499,73244,74184,74323],"airplane":[28445,67296],"sortingchanged":[52381],"opposite":[248,2053,8569,9787,13919,15842,22995,25623,30141,32162,32412,34161,45276,55889,72303,76166],"a1udewqfmambaf8wdqyjkozihvcnaqefbqadggebafejuwgz1r3xssbwujsrhbmc":[69917],"harmonics":[10083,10108,27467,38384,42405,45588,47121,47711],"authentic":[10579,50374],"renderingthreadingmode":[19735],"wasting":[38405,44165,66556],"registercustomdependency":[19534],"mandate":[71104],"v2f_init_customrendertexture":[8945],"doe":[70829],"presses":[12222,12474,20130,25569,34260,34341,34467,39819,40000,49232,52767,55642,57441,57983,59734,60221,60363,60495,61798,66380,67335,68806,73278],"getcolumn":[52405],"thread":[878,1760,2668,3576,4578,5193,6052,6137,7476,8437,11808,12349,12901,18257,21034,21341,21897,25895,26119,26264,26276,26292,26433,26477,26523,27702,27953,28057,28456,29159,29971,30904,31634,31649,33399,33502,34279,34493,35137,35386,35675,35686,35879,36023,39957,41290,50005,50056,52560,68130,68279,72917,73025,73633,73683,74723,75431,75512,75739,75938,76011],"fetches":[29267,35522,52349,53007,69734,69861,70175,70585,70945],"ect":[49901],"posing":[22500,25622],"fetchkeywords":[2588],"customstylesresolvedevent":[56704],"documented":[6141,11461,12875,21326,27645,42686,42689,43566,43684,44338,44422,45261,45846,52601,69337,69443,73144],"existent":[27591,29732],"unity_instancing_buffer_start":[23258],"streamingmipmapbias":[13826],"cleanliness":[6105],"reused":[3466,5986,26114,33394,59410,61328,68209],"rpc":[10822],"etc2":[553,3500,6383,6445,11814,12350,14298,14337,21042,25843,27150,28181,34280,73165,74644],"mousebutton":[60228,60459],"assumeuniformscaling":[23271],"mimetype":[73816],"timestamp":[3790,21885,25093,28244,35392,35676,62411],"gameassembly":[49757,74614],"subdivisions":[11624,30260],"publishes":[31387,53306],"vi":[53654],"#8593":[41327,41613],"opens":[165,626,644,858,1128,1507,2592,4339,6349,9982,10698,11402,13902,16060,18125,18455,18681,18757,19061,19316,19336,19351,19364,19376,20614,20627,21031,24825,25200,25368,26908,26976,28404,29001,33639,35087,35397,35631,35771,35892,36069,36704,38841,39013,39082,39183,39472,40777,40801,41301,41442,41497,41534,41725,43291,48865,49342,50304,51424,52477,52839,53139,53341,53807,54398,54639,56972,57528,61654,64528,69975,70104,70306,70344,70830,70936,70972,73159,74762,75017,75044,75359,75880],"examplemeshname_lod0":[25144],"halfway":[8091,24372,29880,39756,45587],"keytool":[52892],"drawing":[5727,6765,7878,8046,8988,10262,13059,13442,13983,14599,16256,17835,21360,23377,23625,25285,26893,30174,30329,30349,30873,33482,36091,37390,37499,42752,43522,44165,45911,49035,51236,51552,51961,55512,58466,73433,75414],"differentiation":[24054],"1use":[12896],"customcontrol":[56683],"unity_sample_texcubearray_lod":[8752],"hashiddensurfaceremovalongpu":[19736],"selectedtoolbar":[24036],"equally":[64,5049,10398,24747,26914,29717,31760,37702,39468,65985],"box’s":[71889],"uquerybuilder":[56939,57229,63137],"m_spotcookie":[76363],"“vertices":[36400],"fingerid":[29590],"trash":[3655,52535,52997],"longfieldsnippet":[64923],"'world":[39442],"signatures":[41200,44384,68435],"qualcomm":[14345,33521,72886],"component’s":[134,192,9890,12785,20636,26677,33526,66225,67141,71614,72482],"stagingarea":[73405],"arcs":[49643,58463],"failoperationfront":[45863],"rhythm":[52095],"reserved":[11416,15042,33424,36233,39450,45084,48698,49150,52532,70838,71012,71324,73486],"r833h7eq31mbl":[69918],"temperature_drawer":[55011],"obliqueness":[30144,33536],"brushtarget":[51438,51528,51559,51587],"permanent":[9384,29784,54028,67624,69769,69810],"examplemeshname_lod2":[25146],"updatable":[2715],"distortion":[7522,7530,8036,22579,26987,30147,33532,34871,38069,42800,54769,75166,75208],"shadowed":[43185,47850],"synchronization":[2063,6052,10825,11245,11276,18022,22713,35732,66417,73253,74203],"cloth":[7167,8279,11637,13451,15159,16330,16631,20392,23050,29393,30924,31069,33759,35747,42812,49511,49569],"single":[7,234,249,336,405,499,554,691,811,1028,1243,1671,1797,1822,1832,1868,1945,1972,1994,2192,2215,2257,2332,2415,2428,3247,3325,3399,3462,3484,3575,3738,4563,5337,5350,5496,5730,6063,6135,6263,6285,7178,7217,7493,8114,8189,8348,8397,8615,8647,9024,9127,9136,9207,9553,9620,9711,9723,9828,9875,9971,10003,10108,10348,10561,11469,11520,11554,11622,12116,12303,12808,13093,13100,13266,13481,13585,13940,13959,14009,14121,14241,14318,14734,14933,14938,15832,15967,16000,16038,16597,16605,16613,16621,16629,16637,16645,16653,16661,16669,16677,16685,16693,16701,16709,16717,16725,16733,16741,16749,16757,16765,16773,16781,16789,16797,16805,16813,16821,16829,16837,16845,16919,17062,17112,17120,17128,17541,17746,17754,17925,18076,18255,18450,18454,18500,18580,19006,19034,19653,20237,20393,20423,20747,21052,21460,21583,21688,21832,21900,22085,22413,23286,23377,23475,23690,23890,24052,24468,24751,25181,25362,25504,26058,26252,26266,26291,26393,26496,26635,26645,26709,27092,27119,27322,27699,27931,27992,28378,29009,29128,29553,29614,29714,29861,30010,30047,30209,30333,30375,30478,30501,31652,31870,32458,32678,32729,32933,33135,33435,33575,33908,34188,34208,34256,34337,34463,34566,34778,35279,35379,35517,35637,35727,36597,36687,37294,37369,37689,37713,37728,37924,38352,38402,38638,39126,39320,39396,39471,39523,39616,39758,39790,39995,40064,40084,40318,40589,40923,41167,41310,41871,41994,42193,42354,42715,42731,42813,43036,43113,43239,43334,43456,43968,44516,44677,44758,45213,45405,45520,45564,45702,45932,46922,47242,48335,48353,48501,48676,48976,49327,49432,49468,49474,49486,49510,49518,49573,49613,49629,49668,49760,50356,50479,50559,50669,50683,50834,50876,51135,51202,51234,51318,51990,52099,52174,52222,52244,52485,52673,52741,53040,54002,54213,54430,54595,54632,55554,55578,55862,55955,58081,58362,58411,58467,59123,59516,59601,59907,61300,61921,62871,63199,63244,63722,63921,64182,64355,64697,65061,65081,65742,66001,66039,66158,66190,66225,66635,66841,67189,67784,67903,68317,68348,68498,68624,68767,70192,70829,71409,71611,71868,72521,72934,73496,73683,74238,74456,75068,75252,75417,75536,76097],"shipping":[6378,28176,67036,73172,74639],"classa":[63034],"ignorecompilererrors":[38903],"translated":[8487,45039,49555,49757,73008],"#7cfc00":[63572],"nativearrayunsafeutility":[26224],"originpanel":[60559],"roboto":[58692],"renderpipelines":[18640],"optimizes":[1331,7491,12012,15857,21525,25238,27056,29727,37369,40039,50064,59085,62748,74339],"capping":[52129],"800x480":[52721],"worlds":[48,16005,19285,21627,22836,27215,29882,35337,37500],"holders":[50200],"wheels":[9018,9743,14943,14999,23119,31797,35254,48501,72337,74423],"signal":[1053,4792,4819,4874,5019,5083,5222,6703,7437,7454,7493,7545,7557,7579,7703,7715,7735,7789,22600,27507,29645,34361,52555],"linebrusheditor":[51494],"isautorenewing":[67734],"making":[69,1967,2064,2274,2334,2399,3466,3669,3674,4559,4847,4876,7644,8093,8125,8138,9215,9321,9330,9723,11160,11604,13041,13919,13962,14965,14999,17045,18105,18485,18611,18963,20786,20864,21031,21156,22093,22144,23778,24030,24077,24739,25585,26070,27490,27930,29325,29799,30062,32114,33533,35603,35795,37273,37345,37622,37732,39671,39801,41629,42155,43183,45055,47028,49281,50584,50656,51007,54312,54591,54795,56624,58997,62805,66402,66635,67049,67209,67553,68048,68611,68857,69066,70149,72754,73405,73571,74458],"r16f":[8453],"targetosversionstring":[25837],"initparametersfromdefinitions":[4929],"pyramid":[6266,6762,22786,37788,65998],"appletv":[52721],"pleasing":[58459],"unity_hardware_tier3":[23552,42172],"packets":[11016,11210,66160],"lots":[2197,4545,4569,10082,11624,17925,22014,25601,33137,49518,52524,52627,63223,66374],"choices":[6974,38854,50939,54124,55973,58730,60638,64528,64943,65081,66185,66965,67639,72687],"duck":[4839],"singlecolor":[47314],"involved":[7304,7975,8179,8276,8394,8550,8779,9044,12738,13252,14514,15850,34195,35357,37710,46295,47377,52674,71890,72339,75083],"ugc":[17488,17514,31477],"status":[221,511,3957,4054,4253,4365,4412,4423,4480,4578,5272,7139,9330,10687,12067,21014,22888,24570,25685,26738,27108,28400,29586,29697,30430,36159,39149,39320,41469,41620,49329,49727,50982,51055,52236,52547,52797,53093,53261,53701,54090,58043,66599,67170,67480,67548,67975,68248,68490,68533,69519,70156,70370,70756,71138,71205,71217,71307,71327,71382,71472,71533,71904,72398,72756,73033,75015,75150,75249,75868],"m_pvsportalsarray":[76348],"visitproperty":[36846,36998,37244],"follows":[783,1498,2839,3760,4966,5056,5643,6202,10393,11519,13076,13183,18165,18925,18977,19309,21182,23796,25225,25265,25893,26590,27045,27191,27224,27272,28271,28467,28762,29702,29751,29801,31659,33228,33788,34687,35395,35677,35760,35938,36133,36356,36469,38241,38389,39004,39556,40017,40109,40340,40443,41847,42015,42811,44868,45716,47028,48121,48335,48649,48980,49635,50148,50901,52768,52777,52976,54235,55923,57598,57846,57853,58090,62283,62882,66468,66784,67197,67343,67746,67952,69360,69464,70776,71814,71863,72266,72346,73472,73965,74458,74596,75516],"include_with_pragmas":[41987,42428],"stylebackground":[59479,61578],"retrieval":[4665,35314,53030,53977,70717],"repeats":[190,2719,7539,7552,8828,21298,23665,32691,32731,35250,38245,50726,63049,65132,65987],"onrecttransformdimensionschange":[54287],"floatfieldsnippet":[64624],"wave":[2120,4781,4883,38053],"sup":[62038],"clothes":[49510,49629],"anyone":[165,3894,4461,4879,41624,66572,72425],"rects":[9268,19693,20955,24004,48373,48426,72996],"reorderable":[57037,59679,60172],"_keyword":[42032],"fixes":[4255,6896,17133,22624,26572,27089,31388,38858,39950,68911,69152,69719,70326,70760,70960,71011,75157],"activators":[60227],"alive":[10885,19231,32183,34417,72238],"often":[94,155,219,253,396,427,1172,1227,1315,1570,2052,3500,3666,3767,4140,4327,4355,4386,4450,4773,4867,5161,5726,5952,5989,6083,6149,6810,7391,8210,8402,8514,8611,8647,9138,9384,10068,10460,10595,11047,11188,11813,12349,12918,13268,13364,13734,13930,14285,14320,14562,14581,14699,15816,15831,18233,18292,18376,18503,19129,20395,20419,20777,21168,21323,22359,23829,24768,24916,25162,25381,25597,25623,26056,26084,26374,27089,28115,28412,28914,29470,29879,29882,30320,30904,31716,31819,31838,32106,32217,32261,33081,33290,33442,33489,34279,34493,34956,35250,36224,36593,38332,38413,38515,40555,41427,41583,41844,43131,43926,44052,44268,45153,45200,45583,45697,46780,47306,47905,48676,49371,49424,49495,49511,49539,49565,49630,49763,50321,50453,50669,51155,51964,52252,52546,57750,58190,61594,65941,66002,66363,66521,68940,69184,70571,71012,71305,71376,71808,71873,72289,72438,72497,72672,73121,73623,74184,74977,75104,75397,75903,76149],"#9b9b9b":[63384],"sense":[5160,7615,7930,8024,9589,17925,24098,24276,25348,26059,30047,32311,37373,37683,39663,43484,46248,49642,50339,67136],"spatial":[4722,5045,5194,7788,10108,10575,12515,14823,17850,22383,37293,72786,72884,72940,75221,75403,75740],"ahandle":[2921],"pressing":[1886,1956,2332,9787,10237,16564,18509,20554,38281,39626,40091,54680,60515,62813,73271,75087,76204],"testflight":[2834],"fetching":[3296,44945,53959,68083],"deformable":[283,10606,10613,13451,17964,29388],"posix":[70788],"findobjectsoftypeall":[26748],"'update'":[39513],"visited":[13075,63424],"thinking":[24793,49421],"tired":[5919],"discarding":[7505,32391,41812,46322,48512],"buckets":[3952,29188],"orbits":[39278],"darkskin":[63439],"faded":[2089,19039,22271,37983,49470,49571,54657],"truetypefontimporter":[6714,15255],"brought":[1998,7146],"“abcd”":[33150],"platformmodulesetup":[15323],"analog":[9785,25763,52754,60508,75645],"standard":[7,148,511,998,1270,1556,1592,1886,2070,3451,3476,3876,4997,5158,5181,6052,6128,6688,6794,7025,7167,7494,8146,8419,9205,9450,9640,9760,10110,10215,11717,12833,13261,13375,13894,14073,14254,14577,14960,16919,17118,17912,18104,18335,18358,18485,18581,18717,18808,19060,19318,20180,20210,20215,20706,20891,21262,21390,21584,22353,23278,23398,23559,24487,24929,24965,25466,25756,25961,26646,26703,26788,27103,27500,27786,28875,28893,29442,29486,29614,30876,31627,31869,32292,32738,32915,33496,33833,34499,34640,35185,35252,35544,36460,37681,37702,37980,38377,38686,38876,39727,39929,40437,40472,40526,41426,41760,41828,41989,42171,42231,42236,42241,42248,42253,42261,42291,42296,42301,42306,42434,42439,42445,42454,42461,42466,42509,42514,42520,42526,42531,42536,42541,42546,42576,42581,42586,42591,42780,42808,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42875,42895,42923,42929,43019,43376,43589,43850,43907,44229,44364,44427,44835,44994,45663,46524,46723,46871,47415,48060,48196,48894,49318,49430,49455,49457,49536,49567,49592,49621,49635,49819,50070,50155,50194,50442,50613,50642,50929,51067,52591,54443,54551,54672,54878,56693,58878,59733,59833,60009,60155,61771,63436,64078,64230,64468,64761,64879,65368,65897,65963,66697,66928,68220,68246,68317,68378,68440,68664,69002,69254,70778,71662,71773,71858,72191,72721,72957,73450,74167,74514,74866,75114,75322,76096],"blend":[165,284,1942,1967,1995,2007,2063,2183,2194,2242,5206,6214,6263,6283,6311,6320,6699,6840,6999,7144,7788,7907,7926,8893,10116,10380,10491,11812,12271,12392,12581,13155,13451,13724,13805,13913,14073,14717,18773,19263,20727,21456,21575,21711,22449,24655,25194,26864,27088,27267,27320,27579,29116,29133,29392,29733,29754,30299,32401,32705,32942,33715,33944,34188,34322,34446,34534,37551,37882,38674,42671,42790,43547,43618,43726,43800,44389,44663,45315,46494,46768,47641,50348,50444,50522,50615,50693,51073,71882,74208,74302,74907],"net_2_0":[33829],"tilepalettebrushinspectorelement":[51109],"thorough":[17062],"includes":[396,401,492,531,562,582,714,891,931,938,987,1094,1163,1230,1244,1277,1302,1325,1469,1703,1734,2037,2812,3002,3321,3418,3457,3506,3595,3855,3890,4091,4267,4387,4671,4766,4813,5120,5350,5774,6142,6351,6396,6473,6936,7168,7366,8021,8948,9345,9488,9976,10012,11177,11683,11804,12346,13034,13545,16075,16227,17092,17152,17370,17788,18104,18135,18885,18918,19047,19289,19425,20222,20349,20383,20405,21202,21347,21892,21956,21985,22357,23246,23381,23443,23481,23615,24169,24768,24920,24928,24979,25058,25118,25309,25694,25735,25826,25849,26080,26121,26908,27125,27169,27647,27930,28129,28166,28216,28283,28382,28464,28909,29566,29570,29736,30433,31996,33394,33456,33476,33660,33750,33774,34573,34675,34850,34900,35268,35631,35715,35812,36029,36249,36371,36439,36507,37270,37565,38324,38940,39115,39358,39494,39879,40039,40203,40664,41359,41575,41753,41791,41899,42005,42134,42614,42688,43047,43491,43506,43515,43564,43566,43684,44338,44422,44688,45016,45261,45487,45598,46977,48341,48535,48542,48590,48984,49175,49311,49417,49511,49628,49671,49720,49756,50050,50071,50273,50309,50534,50647,51031,52591,52863,53880,54020,54430,54560,54590,55621,55992,56110,57330,57341,58105,58128,58370,59033,59732,59828,60351,61515,61970,62195,62843,63943,64017,64082,64234,64373,65368,65738,65849,65901,65964,66100,66421,66470,66840,66964,67136,68545,68733,68911,69152,69399,69503,69708,69792,69868,70096,70225,70246,70588,70875,70937,71016,71533,71591,71855,72246,72282,72858,72890,72974,73029,73136,73424,73458,73489,73675,73914,74141,74228,74634,74789,75006,75116,75322,75364,75534,75767,75942,76204],"a7":[14337,50195],"upm_git_lfs_cache_path":[69818,70732],"touchinput":[29603],"playablebehaviour":[34099,34174],"emulator":[1549,50197,53696,67845],"installmanipulator":[55978],"learned":[2065,47372],"viewports":[72996],"estonian":[53622],"data\\il2cpp":[24987],"machines":[222,1942,1950,2001,2201,2210,2216,2243,6999,7147,7179,9071,16527,18511,21054,21346,22129,22480,24790,29133,29827,30046,30314,33419,33453,34214,45565,49644,49656,49659,60209,66356,68614,70228,70775,74850],"xamarin":[30879,66831],"east":[9261],"__quarter":[14807],"industries":[22359],"experience":[1655,2958,4145,4547,4881,6045,7619,7771,10357,11607,11725,16933,18519,18662,20203,22100,23150,23438,26714,28667,28686,28724,28773,29570,33069,35080,37585,40544,40760,49179,52095,52497,54031,62739,65897,66802,66811,66836,66870,66889,66902,68073,69141,70818,70961,72927,72942,73332,74136,75439],"front":[360,8110,9380,10012,10439,11340,12855,13384,14199,18675,20395,24276,24834,25360,27331,29621,32270,33781,34755,35765,39253,39530,40288,42706,42729,42754,42797,43630,44177,45784,45877,47995,51166,52351,54769,57849,61302,72511,74391],"unity_audiodsp_callback":[4923,5242],"standardtextureblend":[18780],"client":[10794,10808,10984,11001,11059,11069,11105,11178,11191,11208,11225,11263,17045,17220,22962,25487,27774,33065,34743,52783,52818,52954,53391,53811,53989,54011,66035,66103,66173,66186,66227,66330,66349,66407,67755,67844,67919,69513,70060,70094,70127,70174,70513,70592,71246,72412,74212,74858],"mms":[12655],"fog_linear":[44587],"repack":[48683,52887,53081,53423,53686,53829,53992,54016,69901],"fig":[2363,18998,48506],"principal":[66845],"incrsat":[45900],"qar":[53663],"interactionsuch":[53763],"tex2dproj":[44418],"okapi":[52285],"8x":[12881,23449,58400],"angularvelocity":[75636],"configuration's":[66667],"piracy":[25858,53810],"transmits":[5178],"cmd":[2924,4619,9052,9809,10879,12747,18462,19627,20723,36719,39078,39183,43221,48084,49056,49298,54422,69970],"andxcode":[49756],"presets":[1885,4511,4553,7734,9987,10430,12768,13105,19453,28321,28895,32879,35186,36633,49904,53535,54728,55857,58662,59533,62054,72962,75083,75233],"rightupperleg":[29903],"“health”":[32922],"r32g32b32a32_sfloat":[8447],"deform":[330,29391,37407,38458],"obfuscation":[67780],"typeface":[58328],"#778899":[63585],"deserialize":[17185],"exercises":[5006],"along":[4,130,307,401,1302,1886,1890,2277,2356,2411,2977,3734,4434,4539,4808,5117,5898,6052,6291,6725,6858,7251,7816,8003,8029,8201,8506,8609,9051,9211,9440,9645,9712,9859,9885,10013,10081,10260,10345,10400,10760,11039,11484,11622,13041,13110,13261,13484,13552,13645,13670,13749,13784,13829,13935,14476,14593,14669,14787,14916,14951,17546,17642,18224,18568,18995,20066,20717,21154,22186,22245,22538,23669,24519,25861,26560,26591,26903,27090,27114,27682,27947,29617,30147,30215,32091,32196,32253,32456,32613,32731,32878,32907,33604,33670,34672,34788,34865,36054,36699,37145,37283,37365,37657,37740,38335,39347,39545,39756,39994,40271,40689,42691,43181,45093,46346,46831,48287,48510,48667,48875,49431,49643,50351,50375,51169,51186,51334,51367,51575,51879,52118,52198,52230,52937,55987,57335,57821,57859,58193,58355,59837,60779,61515,61916,62200,62784,65061,65220,65244,65687,66001,66611,66819,66843,67154,67581,69719,71719,71873,72310,73919,74164,74422,74986,75099],"elevations":[51245],"callback":[521,2611,3764,3823,4753,4908,5212,5345,5496,5733,5774,6135,7766,7976,8180,8277,8395,8780,9045,10835,11554,12739,13115,14515,18312,18584,21332,21423,23181,24608,25329,25647,27988,29420,29934,30062,30634,32177,32747,33478,34708,35170,38607,38828,39170,39900,40630,42998,49212,52407,53392,54021,55610,55728,55918,55975,56042,56132,56217,56681,57441,57717,57823,57859,59088,59438,59630,59825,60209,60469,60607,60930,61033,62111,62531,62766,63199,64544,64613,65088,65420,65460,65478,66105,66852,66922,67283,67483,67544,67896,68202,68957,69204,73211,74011,75508,75936],"createprovider":[2521],"dropdownfieldsnippet":[64556],"button3":[61672],"identifiers":[3486,28212,41381,65891,66967,67023,67147,67234,67519,67579,67672,67850,75503],"m_scale":[40462],"shines":[7895,32293,38346],"pcs":[17126,44870,45565,68527],"iapbuttonstoremanager":[67396],"excessively":[43024,50613],"6px":[59313],"shadows_shadowmask":[42171,44577],"texcoordn":[43709,45730,47371],"bulbs":[27303],"useflipmodelswapchain":[34225,34343,34469],"visualizer":[11265,11287,33901],"number__":[39615],"animaterotation":[76282],"setdefaultplatformtextureformat":[553,21042],"#7e7e7e":[63276],"samplesstandard":[18775],"supportsconservativeraster":[44140],"instrumented":[35684,36116,36508,53940],"lod_fade_percentage":[10385],"acces":[67764],"offline":[11178,12669,19616,22104,22983,25492,28784,30278,33066,37698,54019,66252,67551,67594,69693,70325,70769,70830,72400],"filepath":[53831],"cadence":[75407],"assemblya":[3202],"interpolated":[1886,2429,7173,7906,7944,9455,10095,10108,11292,11571,27336,38563,38593,45725,46808,49531],"#deb887":[63520],"unityrenderingextevent":[28056],"dc":[27471,47145],"sms":[12655],"unityaudioeffectdefinitionflags_isambisonicdecoder":[4741],"jvm_heap_size":[23520],"predetermined":[21296,22500,23962,25622,39977],"r32g32_sint":[8470],"clothing":[8280,33759,49510,49540],"startcoroutine":[2823,3381,10709,15734,18277,21370,24865,25714,67509,68097,68292,68332,68359,68393,68448,72584,76282],"clampedprogress":[61091],"triangulation":[8382,12730,29764],"eq":[4825,4979,7693,40848],"hidemobileinput":[73487],"consolidate":[18485,37369,74088],"planetgroups":[59958],"brown":[13815,49431,49860,62019,63519],"composition":[31079,33534],"'master'":[28828],"createcubeicon":[30666],"light’s":[9871,26922,27572,37422,37653],"security":[218,617,1178,3339,10909,11886,18819,20232,23140,26079,27621,28224,35694,49770,52614,66634,67921,70506,70951,71738,72475,73090,73193,73285,73471,73608,73669,73901,74581,74816],"tool":[9,188,861,962,1255,1665,1931,1990,3020,3226,4387,4474,4644,5002,5265,5808,6047,7314,7836,7979,8304,9102,9397,10233,11265,12007,13196,13235,13754,13933,14679,14775,15950,16212,16919,16969,17370,17539,17928,18410,18933,19047,19447,20707,20867,22526,23701,24456,24908,25135,26651,27015,27724,27937,28307,28318,28450,28464,29119,29439,29897,31257,33304,33511,33902,34192,34781,35007,35768,35794,35957,36704,37390,37481,37499,37806,38281,38485,39249,41935,42019,43086,43209,43551,44591,45037,45096,48053,48364,48379,48603,48639,49757,50346,50427,50509,50519,50526,50536,50549,50557,50569,50653,51060,51094,51149,51274,51388,51496,51529,51559,51563,51579,51866,52172,52229,52558,53101,54119,54706,54710,58463,59630,60980,63105,64745,65916,66336,66461,66701,66948,66979,67764,69029,69282,69361,69465,69732,70363,70914,71637,71797,72410,74139,74253,74427,74549,74918,75291,75388,75980],"rasterization":[21749,22869,34229,42674,44132,45720],"packs":[475,490,508,531,913,1336,2835,9104,13706,22906,23512,33883,48208,48536,48556,51208],"m_damagecapwarning":[56164],"ntrampolines":[52627],"syncevents":[10803,66034],"texture2ds":[74258],"productinfo":[53975],"arise":[3246,6039,10095,12988,21956,29478,49506,52472,53706,54016,67148],"obstruct":[19667,21043,33652],"tied":[4385,24774,30385,64340],"monetize":[16091,17370,23198,68072],"randomized":[7981,17282,32412,33267],"scriptinginvocation":[33494],"machine":[220,646,849,987,1483,1944,1960,1995,2006,2183,2201,2211,2216,2227,2235,2239,2254,3342,3588,5158,6195,6468,7179,7929,9256,11088,11176,12007,12400,13805,14717,16542,18225,18519,19630,21097,21332,22470,23485,24796,24947,25234,25747,25904,27172,28232,28420,29092,29142,29259,30048,34192,34273,34481,35803,35957,36599,41843,45565,48147,48204,49395,49641,49649,49658,49737,49770,50411,50648,52524,66358,66563,66802,67858,68054,68610,69512,69740,70191,70594,70773,72185,72416,72859,73209,73452,73622,74781,74850],"controlling":[1945,2236,2242,6267,6294,6980,8800,11452,12762,13283,13300,13736,18117,18378,20438,20918,21474,22020,22520,24297,24764,24910,25396,29009,29857,31636,34039,37575,39402,39512,39828,49632,50958,51997,66200,66222,75221],"serialized":[3065,3247,3340,3571,3728,3830,6037,9075,9982,11001,11307,13972,14087,18006,18537,21638,26627,36782,39169,39856,40935,41223,41586,42228,45146,49770,52320,54156,54898,54919,54967,55060,55170,55549,55561,56074,56123,56210,56390,56695,58766,59596,60163,66036,68925,69168,73393],"xrmodule":[16846,30982],"onclientscenechanged":[66311],"“use":[27321],"cycle":[2063,3767,6842,7079,13811,18169,23011,27814,31366,31379,31794,32153,32412,34156,35756,36333,39885,41327,41613,42779,50634,51987,52921,62536,66248,66861,69719,70756,70839,71156,75446],"eventbase":[55716,56725,57829,57935,57971,59816,62116],"runstate":[29106],"cleaned":[25961,27929,68546],"folderopened":[61585],"eventtrigger":[39527],"roslynanalyzer":[38718],"pooled":[33126,59410],"cmip":[8752],"bluey":[49546],"revealed":[39673],"succeeded":[67359,67634],"subshaders":[42193,42325,44327,44387,44590,44660,44671,44755,44785,45181,45302,45387,45520,45627,45930,45960,47163,47244],"merchant":[53432],"include":[104,158,229,415,532,562,673,726,978,1047,1091,1234,1240,1534,1674,1727,1864,1926,2183,2427,2747,2769,2980,3048,3433,3508,3885,3931,3969,3989,4061,4186,4273,4356,4370,4448,4511,4567,4652,4722,4881,5320,5845,5924,6286,6368,6425,6473,6494,6521,7120,7391,7427,7846,7971,8175,8272,8390,8728,8775,8917,9040,9109,9207,9256,9489,9971,10162,10708,11045,12230,12303,12403,12598,12730,12809,13401,13451,13705,14051,14168,14510,14786,16020,17000,17384,17474,18151,18190,18239,18376,18665,18728,18736,18790,18852,18933,19017,19129,19151,19205,19318,20265,20597,20760,21604,22098,22349,23337,23443,23475,24661,24920,24947,25067,25178,25330,25816,25847,25939,26118,26646,26689,26998,27081,27119,27134,27314,27624,27888,27958,28056,28066,28108,28166,28189,28509,28835,29139,29506,29760,29892,29927,30035,30349,30501,30582,30917,31610,31707,31814,31893,32953,33534,33660,33774,34425,34523,34573,34637,34675,34849,34929,35089,35220,35277,35388,35462,35469,35694,36112,36454,36531,36593,36710,37654,37731,38244,38283,38330,38471,38478,38571,38601,38635,38716,38868,38911,39108,39385,39740,39977,40084,40097,40204,40584,40651,40817,41326,41569,41611,41860,41900,41987,42175,42428,42611,42689,42802,42816,43255,43336,43491,43566,43684,43872,43906,43959,44072,44338,44364,44402,44422,44523,44671,44848,44993,45119,45166,45261,45455,46651,46944,47067,47207,47907,48133,48185,48349,48535,48541,48575,48642,48940,49390,49614,49642,49707,49712,49737,49762,49840,50026,50072,50194,50534,50543,52095,52526,52548,52973,53602,53989,54443,54722,54798,57641,58116,58358,58369,58447,58673,59162,61188,61919,61966,63773,63846,63863,63994,65220,65244,65698,65767,65865,66023,66214,66429,66614,66811,66836,66868,66887,66901,68069,69005,69257,69694,69732,70726,70756,70918,71040,71125,71190,71320,71558,71684,71783,71925,72063,72230,72283,72462,72487,72610,72646,72737,72890,72939,73168,73238,73335,73397,73417,73452,73581,73613,73953,74143,74332,74535,74627,74788,75023,75070,75115,75140,75235,75315,75399,75456,75520,75872,75909,75980,76092],"joint’s":[8499],"animationname":[48349],"grays":[71949],"curators":[4327],"rightdown":[27403],"succession":[21175],"butt":[60965],"replacing":[1954,2238,2842,3446,18112,18446,21986,22180,25596,28682,28720,39614,43106,44073,45617,48609,49780,51151,66637,69963,70048,70085,70159],"smoothdeltatime":[52005],"barrel":[2415,32650],"_cameragbuffertexture0":[38372],"control’s":[65994],"highly":[3365,6118,6844,6936,7568,7575,8496,10080,16005,16137,21134,23059,23590,31656,32702,37227,37683,38346,38435,52240,68043,72462],"implied":[5911,18734,50342,70211],"advertisingid":[74877],"stringparamdelegate":[52660],"networkmanagerunet":[11180],"44x44":[12462],"blanking":[23028],"compression":[553,1342,1555,2898,3246,3288,3348,3466,3502,3585,3807,4508,4775,4840,4964,5951,6373,6433,6477,7016,7485,9059,9964,10740,11259,11281,11814,12350,13412,14277,14311,21042,21509,22125,22463,25206,25309,25840,26086,26873,27127,27710,28171,29331,30369,34280,34494,35039,37270,37674,37703,43965,48601,48685,50038,50137,50660,51009,52595,59507,73025,73087,73122,73163,73310,73314,73371,73384,73443,73714,73937,74041,74634,74793],"lockcolor":[51709,51758],"genericmenu":[30603],"simplest":[298,1362,6063,9351,10082,15832,25169,26629,34539,34681,36689,43594,54249,68090,68280,72242],"vsync":[20076,22046,22712,33407,34994,35710,36031,72916],"back":[250,360,554,715,807,1463,1589,1908,2176,2260,2351,2717,3669,4120,4215,4283,4438,4462,4602,4752,4994,5049,6837,7137,7444,7461,7764,7771,8074,8302,8508,8610,9127,9261,9515,9830,10002,10068,10337,10439,10768,11803,13009,13214,13263,13341,13384,14824,16345,16819,18097,18187,19128,20276,20395,20450,20594,20630,20963,21154,21252,22518,23439,23682,24511,24783,24813,24904,25096,25662,26465,26878,26919,26964,27047,27262,28262,29181,29364,29771,30061,30282,30906,32186,32412,32632,32665,32808,33299,33415,33424,33645,34343,34469,34707,34983,35360,35722,35901,36490,36599,36937,38223,38351,39255,39334,39368,39530,39794,39885,40519,41569,42707,42729,42751,42797,43195,43376,43481,43553,43630,43801,44166,45784,45873,48290,48429,49269,49943,50056,51097,51188,51391,52921,52951,54041,54450,54564,54593,54680,55987,56934,57679,58311,58845,61302,61898,62072,62496,62929,66015,66151,66382,66721,66910,67543,67703,68458,68609,68929,69172,69352,69456,70284,70397,70936,72538,72851,72931,73438,74457,74613,75419,75656,75829,76320],"contactcapturelayers":[7975,8179,8276,8394,8779,9044,12738,14514],"particlecurves":[6703],"transmissive":[29558,45087],"my_package_a":[70784],"illumination":[30,6798,9098,9341,9466,9875,9908,9993,10089,10439,10649,12885,22105,22124,22140,22734,23406,23462,26787,26807,26900,26922,26938,27017,27033,27071,27090,27113,27157,27169,27184,27300,27307,27314,27468,27749,27755,28895,29484,35124,36032,36117,36532,36570,36640,37633,37790,38396,41784,42400,42547,42713,42729,42754,43895,45318,46576,46789,47737,49439,49486,49720,49734,50440,50597,69349,69453,71814,72759,73439,75170],"monitoring":[5002,17045,35038,62389,66641],"selectablenavigation":[39820],"deny":[1378,1507],"onscenegui":[20833,22215],"institutions":[69901],"vt":[50019],"overwhelming":[22740],"wheelevent":[60366],"numinside":[32825],"ortho":[44959],"windows_uwp":[33805,72073],"statistics":[4155,4376,4696,7496,9961,11820,12355,16564,22051,23538,26001,29212,30060,34286,34498,35266,35692,35769,35924,36118,36219,36354,36518,36612,38323,52590,57630,75989],"visibility":[4803,5024,5151,5734,7025,7187,9069,10848,11185,13400,13455,18568,21457,22052,22144,22228,23682,24536,24671,25209,26809,26894,29147,29696,29727,30261,30274,30443,35153,36501,36708,37646,39142,39307,39778,42814,44133,49343,51268,51401,52227,53468,64149,65176,65331,65746,66521,67845,71822,71897,71990,72777,73560],"collector":[1471,26023,26252,27929,30867,33074,33088,33380,33399,33420,33448,35727,36030,39929,63221,72869,73630],"outweighs":[6117],"setuvs":[319],"motionless":[15842],"utilizes":[17118],"screwhead":[49518],"sm":[396,30303],"several":[275,690,714,2211,2263,2387,3245,3475,3481,3889,3967,3981,4051,4245,4879,6045,6059,6294,7802,8188,8342,8616,9136,9207,9384,9440,9974,10069,13036,13120,13392,14221,14320,18076,18166,18254,18813,18896,19454,20381,20427,20538,20590,20726,21175,21422,22085,22296,23456,23629,23669,24169,24973,25221,25358,25488,25599,25998,26507,26685,26825,26932,27065,27705,28639,29098,29561,29894,29906,30328,30506,32311,32852,33407,33481,33508,33529,33583,34010,34939,35240,36174,36360,36465,36680,36710,37369,37647,37685,37712,38336,38485,39003,39117,39137,39175,39263,39352,39807,39822,39880,40083,40097,40682,41595,41694,41720,41858,42218,42378,42614,42984,43248,43907,43933,44231,44805,45229,45627,47411,47906,48354,48509,48676,48874,49214,49387,50363,50629,50660,50881,51416,52226,52599,53070,54220,54557,54814,55554,56799,57809,58115,58370,58732,63807,64224,64328,65719,65850,66755,67039,67254,68079,68280,69757,69793,69864,70288,70313,70328,70693,70756,70940,71212,71255,71621,72240,72299,72405,72880,73559,74207,74458,74512,75290,75393,75409,75793],"cpus":[9466,12885,29972],"supportsmotionvectors":[7920,19740,32299,50455],"keeps":[1899,1995,3584,3797,5770,7490,8999,13417,13559,13677,14794,20130,21514,22788,26564,27553,29133,32183,32317,34778,35030,35994,36204,36464,39927,40848,41898,42219,49916,50069,52954,53335,57848,59852,66555,66823,67601,67903,70943,73249,73619,73964],"modeler":[7874,13628,14778,48224,48275,50584],"imports":[1900,3580,3728,3779,3839,4501,4530,5961,6381,6440,6718,9135,10378,10489,10733,13371,13477,13626,14218,18058,21385,21465,22070,24639,25043,25113,25140,25153,25194,25237,28179,29328,29736,31624,35008,38840,40456,41753,41838,42683,48224,48239,48350,48868,50071,53602,66932,68619,69622,69736,71056,71338,71799,71924,72841,73075,74153,74642],"maxvalue":[56958,67735,68170],"respawn":[10957,41507,50291],"appdata_base":[43928,44042,44407,47688,47909],"spans":[34891,35390],"pointeroverevent":[60773,62722],"desktops":[701,26054,72497],"unityxrmeshprovider":[75750],"installcustomsignalhandlers":[1055],"cloning":[39119,70405,70607],"harmful":[70955],"create":[1,48,64,78,122,165,249,262,282,405,473,495,511,556,585,736,782,875,890,1002,1032,1094,1108,1116,1156,1180,1227,1283,1320,1357,1393,1557,1594,1717,1833,1850,1855,1862,1890,1966,2063,2199,2214,2224,2239,2251,2286,2349,2362,2428,2464,2518,2692,2764,2897,2937,2958,3379,3502,3519,3619,3721,3871,3878,3907,3976,4025,4054,4157,4168,4186,4196,4209,4242,4245,4360,4425,4449,4464,4484,4493,4510,4519,4618,4758,4793,4826,5064,5081,5165,5260,5341,5352,5496,5722,5724,5732,5805,5817,5856,6094,6226,6318,6346,6683,6750,6754,6774,6781,6794,6833,6885,6935,6995,7059,7181,7316,7369,7427,7447,7464,7579,7619,7712,7731,7760,7811,7874,7879,7935,7983,8066,8104,8146,8203,8570,8614,8650,8782,8786,9018,9051,9155,9172,9196,9260,9416,9489,9554,9715,9776,9847,9889,9911,9987,10055,10121,10208,10375,10430,10489,10633,10691,10732,10789,10805,11125,11150,11193,11227,11264,11285,11299,11307,11333,11505,11546,11645,11725,12097,12294,12350,12598,12746,12768,12826,12971,13193,13266,13316,13353,13499,13616,13680,13702,13720,13744,13793,13816,13854,13865,13898,13970,13978,14026,14098,14222,14470,14544,14570,14661,14775,14797,14989,15020,15832,15982,15998,16005,16542,17110,17118,17126,17133,17169,17282,17326,17384,17398,17539,17546,17661,17744,17759,17788,17978,18045,18059,18216,18239,18321,18343,18357,18387,18402,18404,18412,18432,18454,18485,18575,18752,18823,18921,18985,19054,19098,19239,19279,19425,19456,19636,19665,20005,20079,20098,20101,20191,20264,20577,20658,20767,20863,21028,21150,21249,21460,21579,21624,21889,22013,22084,22100,22189,22234,22482,23264,23421,23491,23590,23798,23882,24051,24169,24332,24467,24508,24527,24597,24605,24623,24726,24790,24900,24943,25140,25154,25236,25323,25514,25633,25726,25734,25738,25826,25867,25928,26026,26123,26166,26252,26264,26280,26285,26393,26448,26472,26587,26600,26629,26655,26674,26716,26790,26829,26923,26987,27044,27267,27303,27341,27674,27679,27897,28084,28162,28188,28282,28320,28356,28502,28675,28717,28828,28851,28954,29009,29017,29091,29391,29551,29611,29731,29738,29776,29835,29882,29997,30001,30038,30049,30234,30351,30382,30443,30467,30514,30833,30840,30894,31632,31661,31670,31733,31749,31767,31779,31804,31825,31842,31869,32080,32095,32119,32144,32206,32242,32330,32348,32374,32594,32619,32639,32667,32714,32749,32893,32917,33137,33415,33538,33590,33612,33842,33877,33883,33918,34156,34175,34188,34212,34425,34523,34611,34637,34644,34658,34749,34840,34882,34923,34940,35089,35240,35380,35406,35466,35499,35607,35691,35772,35896,36543,36702,36738,36768,36793,36823,36976,37227,37268,37295,37302,37321,37329,37486,37518,37522,37613,37685,37724,37924,38249,38258,38332,38448,38617,38639,38683,38869,38915,38946,38984,39027,39078,39096,39172,39310,39365,39671,39765,39827,39886,40039,40097,40152,40172,40441,40453,40573,40622,40643,40734,41094,41164,41335,41356,41455,41560,41626,41694,41697,41708,41756,41800,41871,41912,41935,41955,42060,42109,42204,42255,42320,42665,42691,42716,42732,42757,42811,42896,42936,42958,43022,43080,43092,43175,43223,43484,43517,43556,44210,44310,44519,44696,44787,44836,45046,45200,45858,45962,47179,48057,48170,48339,48353,48524,48564,48572,48603,48641,48685,48868,48900,48913,48981,49148,49169,49177,49297,49436,49481,49521,49569,49610,49635,49655,49677,49762,49905,50018,50056,50077,50144,50302,50324,50345,50369,50448,50521,50528,50534,50558,50575,50583,50620,50647,50656,50688,50726,50881,50929,50982,51074,51088,51101,51119,51129,51158,51163,51178,51206,51244,51344,51427,51579,51601,51621,51812,51842,51849,51956,52101,52170,52174,52222,52240,52601,52682,52696,52735,52749,52837,52952,53147,53260,53695,53797,54012,54131,54266,54291,54428,54496,54504,54545,54583,54605,54639,54673,54709,54738,54894,54919,54966,55071,55159,55243,55316,55374,55511,55550,55572,55672,55751,55826,55858,55993,56042,56129,56217,56273,56325,56388,56472,56519,56588,56666,56732,56795,56979,57120,57286,57333,57585,57628,57918,58006,58030,58096,58119,58138,58230,58266,58281,58369,58557,58582,58652,58726,58996,59267,59554,59781,59842,59903,60210,60436,60573,60643,60670,60839,60877,60977,61200,61309,61331,61566,61592,61745,61920,61957,61965,61976,61990,62020,62049,62132,62334,62491,62635,62639,62740,62975,63067,63125,63223,63657,63864,63961,64036,64140,64310,64390,64399,64414,64434,64444,64469,64489,64513,64529,64565,64588,64612,64637,64675,64698,64719,64732,64746,64775,64796,64810,64824,64843,64861,64880,64916,64937,64956,64974,64987,64999,65025,65032,65054,65062,65082,65103,65118,65134,65147,65165,65221,65245,65269,65294,65314,65371,65394,65414,65433,65445,65459,65477,65491,65502,65513,65539,65554,65569,65589,65609,65629,65650,65669,65684,65719,65747,65761,65786,65875,65903,65941,65957,65979,66033,66050,66115,66193,66222,66337,66355,66373,66423,66524,66542,67026,67079,67241,67262,67561,67650,67865,67900,67977,68153,68478,68498,68527,68604,68833,68909,69078,69390,69494,69834,69903,70014,70069,70110,70136,70184,70235,70328,70399,70710,70960,71469,71634,71636,71661,71779,71805,71817,71859,71982,72000,72089,72132,72136,72148,72173,72229,72276,72462,72466,72499,72791,72818,72826,72843,72899,72974,73022,73082,73156,73397,73619,73919,74042,74164,74353,74415,74568,74618,74723,74833,74892,74907,74932,75028,75187,75215,75236,75259,75422,75476,75946,76315],"'weighted'":[13059],"mycallbackfunc_2":[62766],"“abc”":[33149],"extention":[7836],"nzd":[53678],"waits":[566,15719,18005,21929,26360,26393,28170,29237,34994,35735,52601,72918,75441],"multi_compile_shadowcaster":[44572,47790],"jittery":[13247,37623,38502,38526],"preserveattribute":[28502],"engagement":[17342,22359],"chorus":[7433,7450,7566],"beginarea":[24376,59593,64780],"rocky":[49500,50947],"obvious":[5046,10357,13645,18503,24984,32182],"hardmode":[56143],"slowest":[1770,26452],"clearitems":[56034],"visitdictionary":[37140],"nocan":[41828],"metal4v1":[12232],"pointerstartposition":[56908],"treasure":[13058,41181],"getobjectfrompool":[33118],"sdk_int":[755],"isclient":[10810,11059,11087],"improperly":[3431],"playafter":[17045],"“non":[20624],"creen":[49824],"4983175d6694":[67470],"fairly":[248,6737,22107,24790,26986,43071,45721,46871,47751,48164,50677,52009,71873],"anglepct":[60715],"reloaded":[7767,18010,52247,68959,69206],"nativeplugindemo":[4879],"“one":[34197],"common":[69,79,142,366,962,1997,2191,2211,2257,3311,3439,3469,3486,3800,4500,4567,4584,4772,4808,5116,5265,5921,5984,6054,6079,6312,6725,6813,6897,6951,7246,7874,7927,8618,8973,9069,9368,10443,10614,10711,10795,11134,11304,11683,11785,12094,12337,12504,12969,13018,13267,13311,13454,13616,13628,14232,15042,15864,15890,17045,17110,18139,18171,18427,18481,19240,19974,20415,21154,21195,21322,22663,23542,24031,24766,24790,25153,25194,25328,25348,25413,25522,25859,25892,26259,26654,27047,27347,27813,28856,28895,29392,30047,30270,30363,31591,31760,33088,33424,33470,33533,33866,34159,34264,34346,34472,34590,34929,35248,35683,35831,36106,36338,36454,36687,37551,37622,38541,38583,38609,38632,38843,39671,39729,39804,40097,40539,40544,40648,40650,41266,41583,41993,42010,42109,42338,42380,42620,43775,44097,44723,44836,44981,45176,45844,45858,46417,47176,48067,48201,48226,48538,48594,48875,48984,49148,49468,49638,49679,50026,50659,50756,50930,51976,52097,52472,52546,52724,52795,53324,54213,54729,56797,57122,57971,59900,59904,61323,62761,63708,63802,63986,64041,65668,65920,65924,66178,66341,66355,66405,66478,66708,67019,67230,67695,67800,67841,68254,68300,68311,68460,68807,70914,71028,71558,71809,71896,71938,72293,72375,72510,72712,72939,73306,73675,74143,74394,74606,74883,75037,75080,75140,75257,75390,75501,75872,76097],"challenges":[2958,5016,52749],"sdf":[14122,31218,58385,58441,58651,62016,63250],"audiomixerliveupdatefloat":[15285],"cx":[47645],"motionblur":[75165],"underlying":[5000,6685,6943,10581,12970,14011,14323,16869,22705,26646,45745,54471,55063,55162,55303,56607,58015,58186,64910,65698,65916,66667,67601,68911,69152,69901,72916,75969,76149],"loadbundle":[2820],"plenty":[24390],"oncollisionstay2d":[35271],"randompoint":[13047],"stylised":[34840],"vectors":[5674,5725,6623,7920,8592,9478,13534,21797,31718,32299,37958,40535,42396,43895,44086,44231,45574,47372,47946,48302,49547,50455,72288],"nearestneighbors":[33247],"unity_fogparams":[47148],"decomposes":[4957],"gmt":[67472],"arnold":[21391],"findfirstenabledselectable":[24843],"reconfigure":[66707,67873],"mainview":[54308,59278],"sacrifices":[11631],"spikes":[4867,30868,32180,33074,33400,35320,35765,35787,35958,36549,63223,68212],"recognized":[223,36781,45244,54266,54794,65900,68806,70424],"examplecustomeditor":[44220,45407],"samplecmp":[45249],"seashell":[63634],"pc":[4566,5866,6434,6839,8098,9477,10686,12652,14332,19071,19626,25177,25267,25491,27147,27644,28095,28172,29827,33523,37639,38320,38349,38402,38425,42398,43475,44297,44870,45202,45302,45564,72225,74777,74850,75413],"characterjoint":[8261,15136,37619],"blindness":[36501],"dynamically":[88,475,2839,3419,5017,5044,5087,5260,5641,5965,6043,7674,10090,17956,20224,20335,20402,20438,22762,24151,24726,25521,25694,27681,28022,28108,28868,30023,30366,30875,33945,34194,34600,34862,37376,37671,39430,40887,41173,41876,50132,50397,50534,54224,54430,55602,58378,58722,59904,65945,66235,66941,71448,71661,72132,73022,73406,75249],"desktop":[237,682,1483,4959,6195,6362,6880,11681,12350,12588,14290,14307,18485,19091,19128,19173,19281,19634,21862,23552,23590,24951,27139,29450,29466,29829,30292,33877,34245,34328,34452,34654,37778,38430,40614,43476,43937,44290,45302,45577,50170,67052,67525,68754,69970,71323,72172,72531,72789,73117,73167,73616,73896,74044,74570,74661,75133,76095],"binaries":[1331,24616,34600,66842,74651],"__burst":[32412],"belong":[3433,13589,26607,27025,35429,35582,39886,40091,40202,41694,48594,50062,54049,54643,60610,65934],"directive":[385,4629,4654,7374,8419,23267,23586,24933,29916,33867,34624,39948,41988,43203,43907,43947,44068,44306,44505,44978,45420,45447,45586,45667,46346,46756,46874,47804,52604,68685,68996,69247,69679,73964,74867],"phonecall":[12659],"materialspecularcolor":[28938],"icollectionelementproperty":[37062],"tagfield":[55424,59699,64953,65267],"unityaudioeffect_distanceattenuationcallback":[5214],"prove":[66635],"utilize":[5012,6798,17240,35735,67154],"#add8e6ff":[49866],"decorate":[4275,52181,72799],"m_linearfogstart":[76356],"unityshadercompiler":[41843],"biometric":[53737],"orbital":[32904],"y+":[49516],"establishing":[66964,67018,67229,67840,70174],"group":[117,360,2082,2266,2390,2774,3471,3681,3930,3968,4033,4536,4792,4867,5051,5098,6152,6915,7434,7523,7588,7606,7628,7648,7679,7712,8127,8323,8437,9515,10003,10054,10201,10325,11359,11660,12618,12896,13392,13585,13628,13718,14690,16020,18166,18572,18670,20735,21069,22343,23361,24299,24523,24732,24750,25140,26672,27072,27322,27748,27757,29894,30048,30218,30324,30422,30498,32702,32847,34927,36085,36240,37367,38332,38640,39537,39573,39819,40078,40090,40127,40838,41270,41469,41689,41871,42667,44659,45447,46802,48258,48268,48789,48902,50023,50057,50353,50595,52111,52176,52191,52229,54235,54660,58729,59928,60642,63233,63729,64206,64696,65061,65081,65668,65933,67036,71040,71205,71229,71873,72757,72890,73964,74259,75346],"getvalue":[36853,52606],"mm":[6705,25888,34556,34664,34693,49762,58913,66389],"orm_button":[62766],"ceil":[10481,20484,27449],"exclusion":[41470,43842],"changeset":[33069,72439,74360],"compromised":[70376],"_gain":[46671],"unityiap":[17056,31345,31525,67477],"jump":[1960,2192,2215,2260,4122,6999,7178,10750,18233,20130,22544,25764,36727,38666,48349,49642,50321,50642,52034,52461,61323,66336,70912,71634,72297,72549],"keyboardhidden":[825],"humantemplate":[9763,15264],"readhandle":[2930],"bundling":[3459,23481],"synthesizer":[65906],"batteries":[13182,30326],"limitoffset":[12896],"invaluable":[13196],"getremainingtime":[67735],"6dof":[76148],"#242424":[63274],"m_lightmapeditorsettings":[76376],"positive":[6344,6966,8009,8201,9712,9782,9859,10230,10724,11605,11819,12354,14150,24519,25768,29621,30164,31718,34285,34497,37283,38496,42705,42726,42748,42793,44638,45784,51014,51915,52745,53605,57849,62015,62201,68614,72306,72765,73057,75646],"m_active":[60238],"migrating":[28307,28318,68376,72536,73662],"properties":[138,188,279,386,585,628,987,1112,1153,1180,1583,1872,1955,1985,2180,2294,2324,2418,2424,2699,5220,5350,5594,5727,6060,6198,6273,6298,6944,6960,6986,7001,7148,7200,7216,7357,7426,7435,7452,7479,7515,7524,7532,7540,7553,7580,7589,7598,7607,7616,7629,7638,7649,7677,7686,7694,7704,7713,7732,7753,7765,7772,7880,7948,7961,7999,8014,8105,8128,8143,8150,8165,8193,8227,8265,8282,8375,8497,8589,8600,8714,8767,8795,9013,9028,9110,9135,9146,9331,9431,9556,9623,9672,9683,9724,9777,9852,9862,9929,9990,10145,10290,10369,10395,10411,10515,10565,10609,10636,10734,10806,10986,11002,11120,11200,11223,11381,11417,11440,11460,11475,11506,11529,11655,11701,12039,12318,12438,12700,12724,12752,12768,13101,13121,13194,13234,13261,13273,13290,13375,13467,13546,13592,13626,13638,13649,13701,13721,13745,13785,13805,13831,13888,13897,13957,13979,14021,14081,14220,14499,14554,14625,14665,14722,14783,14792,14945,14980,15028,15844,15998,17206,17976,18064,18170,18357,18473,18506,18676,18973,19342,19356,19666,20242,20394,20539,20608,20644,20651,20937,21219,21311,21382,21393,21445,21585,21659,21701,22011,22074,22114,22569,23258,23378,23485,23710,23816,24054,24438,24526,24733,24761,24996,25036,25205,25350,25396,25550,25856,26582,26672,26717,26787,26835,27004,27181,27208,27297,27303,28104,28830,28846,28874,28916,28952,29022,29490,29697,30145,31659,31677,31740,31756,31777,31811,31832,31849,31877,32087,32102,32126,32141,32213,32246,32337,32355,32371,32603,32626,32646,32674,32712,32769,32847,32900,32936,33526,33580,33612,33657,34242,34325,34449,34624,34840,34900,34918,34944,35049,35192,35476,35814,36503,36735,36751,36793,36844,36997,37225,37417,37536,37706,37731,38372,38455,38461,38490,38532,38541,38576,38608,38625,38950,38986,39027,39101,39231,39371,39386,39403,39455,39473,39514,39531,39539,39581,39592,39604,39645,39667,39682,39691,39700,39709,39715,39741,39766,39856,39970,39978,40003,40043,40070,40092,40105,40135,40145,40197,40681,40731,40760,40767,40806,41083,41173,41306,41333,41375,41428,41519,41541,41753,42026,42242,42254,42353,42446,42455,42700,42721,42743,42756,42786,43182,43418,43493,43520,43596,44083,44214,44313,44436,45043,45120,45180,45278,45396,45748,46158,46505,46536,46721,46833,47196,48242,48270,48357,48531,48558,48645,48887,49327,49449,49483,49510,49593,49613,49627,49678,50041,50146,50289,50388,50489,50611,50629,50715,50744,50756,50771,50784,50797,50810,50823,50836,50861,50959,51109,51124,51144,51212,51294,51350,51612,51760,51785,51821,51846,51854,51869,51950,52111,52177,52191,52226,52551,52725,53280,54205,54208,54228,54295,54475,54609,54635,54705,54780,54808,54873,54989,55229,55309,55509,55557,55720,55812,55911,55991,56041,56097,56121,56592,56693,56757,57306,57585,57637,57823,57998,58076,58202,58270,58273,58422,58434,58497,58728,59165,59698,59724,59742,59820,59828,60374,60558,60639,60777,60915,61015,61310,61518,61900,61923,61995,62049,62120,62192,62617,62767,62838,63105,63658,63695,63703,63717,63986,64041,64228,64309,64378,64387,64428,64450,64489,64761,64795,65354,65736,65757,65885,65904,66229,66339,66464,67878,68248,68725,68862,69095,69813,70115,70806,70870,70978,71025,71605,71811,71861,71902,71906,71959,72230,72275,72289,72879,73076,74171,74244,74458,74893,75671],"who's":[13696],"message":[222,804,1378,1458,1511,1665,1909,2702,4004,4236,4435,4477,8976,10118,10328,10871,10984,11007,11177,11205,11226,12433,18101,18118,18384,20163,20194,20812,21029,21992,22130,25130,25678,26460,27599,27678,28448,29422,30098,30341,30907,33069,33844,34171,34713,35088,36512,36683,36857,38731,39357,40225,40583,41976,44688,45455,46128,49390,49730,50157,50186,52108,52556,52797,53041,53093,53743,55687,56205,58586,59780,60571,61184,61515,61688,64248,64731,65135,66105,66858,68896,69134,69539,70295,70325,70354,70921,71113,71256,71508,71548,71627,71944,72241,72634,73288,73307,73569,74013,75148],"explicit":[3252,11614,14035,18623,20315,21460,29364,30899,31814,33429,34611,34900,35293,36508,37056,38537,38547,38574,38630,39817,39891,40222,44010,44903,45477,50217,56280,56348,67027,67261,67594,71058,73228,75421,75532],"accompanies":[3856,28783],"dropdown_toggle":[63450],"azimuthangle":[60779],"cinematic":[6946,17661,21631,22024,31064,74200,74292],"stringify":[74114],"determins":[9858],"bundes":[3428],"imgui":[9552,9619,16655,20766,20862,20917,21380,23776,23881,24050,24166,24273,24455,30927,43322,52238,54106,57991,58732,59539,59548,60355,60373,61485,64774,65051,65898,65960],"#c4c4c4":[63326],"sticker":[49512],"editorutility":[2487,6333,25935,39929,48748,51454,51699,72438],"iamazonextensions":[66996],"sceneopening":[39014],"passionate":[16151],"causing":[7494,13266,18516,20154,22464,24669,25980,27211,32115,33008,35714,36684,37453,38862,42798,52528,68607,73404,73561],"shoulder":[2120,22506,26560],"spritepackingrotation":[48698],"scrollbar_groove":[63365,64263],"reinitialize":[68889,69126],"discoverable":[4066,31010,70766,70818,71170],"opensans":[63985],"searches":[2539,2549,3951,4042,4203,4281,9515,12808,18149,19455,28474,30861,33383,35174,37628,40697,40775,40817,41167,41294,41312,41348,41425,41436,41448,41469,41480,41491,41574,41607,41677,42197,49771,53753,58110,61907,71449],"seams":[10652,14261,21555,25229,27088,30372,49540,50356],"pose":[285,1934,2080,4566,6994,7078,7313,7831,12663,13247,13483,18081,18230,22489,27813,35754,38469,38503,38652,40620,68782,71776,72928,75441,75573],"phrases":[50288],"blank":[1107,9110,11380,12607,12884,26611,27172,36045,36472,41554,49030,49841,51370,51874,58778,59077,68246,75520],"parseint":[73984],"postfix":[44691],"laptop":[717,1087,1668,34994,50171,66980,67517],"reductions":[23439,43118],"newanimationtrack":[15116],"informed":[17206,21002,36463,53324,67590],"leftcolor":[43453],"mouseenterwindowevent":[60367],"“live”":[33383],"farenheit":[54976],"soft_shadows":[42970],"particles":[6684,6935,8286,9669,10144,11462,11473,11637,12905,15039,20430,20457,22796,30363,31177,31648,31661,31668,31745,31760,31763,31788,31802,31823,31840,31863,32078,32093,32117,32141,32216,32240,32343,32346,32371,32594,32631,32648,32701,32712,32747,32849,32891,32918,35258,35411,35618,37900,38310,40756,42784,50940,72462,75183],"themselves":[2243,3466,4866,5725,6718,8319,9351,18753,19480,22012,22778,23675,23780,24759,25176,27082,29550,31718,35228,38382,39170,40098,41091,42547,42811,45838,49535,52099,59972,63108,70955],"returned":[1888,2667,3566,4908,6144,6725,13091,19027,22361,26126,28667,29790,31725,34740,41029,41178,44053,46772,49739,53756,55509,57999,61071,63220,67144,67588,67881,68913,69154,75537,75987],"#popup":[59890],"game_switch_list_editor":[55210],"billboardasset":[7875,7879,15189],"mousecaptureoutevent":[55646,57838],"nevertheless":[5001,50939],"initializecharacterlist":[59427],"lookrotation":[12977],"unity_hardware_tier1":[23550,42172],"llapi":[68305,68461],"packingtag":[48706],"1’s":[48546],"concrete":[37069,55512,63994,75485],"kingdoms":[37327],"vis":[11187],"czk":[53670],"sizes":[167,501,685,913,1199,2347,3249,3292,3491,4294,6944,8437,8863,9250,10010,10460,10544,11462,11707,12116,22464,24164,24755,24782,25249,29217,29363,31996,32228,32317,32705,33529,34245,34328,34452,36242,37376,39402,39466,39552,39650,40572,41383,41898,43023,46979,48903,49817,54236,54718,58651,60649,61540,62032,62796,72755,73025,73173,73382,73556],"locomotion":[17835,72942,74405],"vital":[28477,49549,50615],"unitsbasic":[6910],"'load":[38277],"dwkuh+vy1dnevrofzm4uklknl2bcekxy5nm9g0lfwjc1arqor+pwxnmrethngytf":[69940],"r16_uint":[8483],"particlesystemjobdata":[31650],"mistake":[4392,5921,9422,12991,21550,52640],"1d":[6262,6291,6312,6320,7302,7942,22449,75642],"ontriggerentered":[8221],"issubscribed":[67730],"recomputed":[22129],"prioritize":[2082,6803,12411,51012,70513],"symmetrical":[6318,30149],"more":[14,88,124,160,191,217,251,258,317,385,410,424,478,494,514,531,553,572,580,695,711,726,792,841,882,890,916,939,944,963,1042,1087,1107,1122,1140,1156,1178,1190,1202,1232,1240,1243,1315,1332,1359,1373,1489,1518,1614,1708,1771,1822,1832,1933,1989,2042,2064,2183,2195,2216,2243,2259,2268,2327,2372,2392,2434,2462,2719,2764,2940,2974,3066,3228,3241,3294,3306,3447,3466,3504,3511,3581,3682,3725,3785,3843,3871,3908,3953,3999,4040,4062,4166,4223,4302,4356,4386,4402,4419,4448,4501,4519,4636,4719,4764,4788,4793,4909,5019,5165,5176,5181,5371,5497,5719,5761,5805,5826,5921,6032,6056,6068,6107,6235,6295,6321,6370,6398,6473,6493,6686,6688,6750,6762,6795,6803,6892,6937,6995,7023,7174,7179,7281,7364,7482,7549,7561,7594,7603,7611,7625,7634,7643,7653,7771,7865,7875,7905,7927,7970,7981,8070,8124,8139,8169,8214,8271,8305,8389,8419,8514,8588,8692,8765,8788,9021,9039,9061,9134,9193,9196,9288,9324,9341,9435,9542,9555,9621,9693,9723,9777,9844,9879,9909,9994,10060,10107,10204,10363,10392,10415,10465,10496,10564,10633,10691,10724,10757,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11305,11370,11405,11484,11520,11527,11598,11643,11653,11683,11718,12097,12320,12443,12733,12785,12881,12988,13036,13133,13190,13208,13234,13363,13392,13478,13582,13590,13665,13699,13704,13797,13873,13935,13977,14024,14084,14232,14318,14471,14509,14560,14578,14734,14778,14790,14860,14959,15006,15020,15816,15831,16060,16168,16406,16470,16564,17062,17077,17118,17326,17370,17474,17591,17642,17952,17976,17984,18041,18149,18188,18224,18241,18268,18355,18414,18445,18454,18504,18539,18623,18666,18728,18749,18759,18819,18844,18899,18934,18988,19050,19085,19113,19152,19229,19287,19316,19336,19364,19481,19618,20001,20089,20123,20179,20239,20393,20403,20459,20626,20701,20766,20862,20917,21024,21154,21219,21299,21381,21391,21468,21589,21639,21689,21700,21841,21986,22002,22019,22029,22088,22100,22107,22125,22144,22203,22228,22290,23284,23392,23434,23482,23559,23603,23757,24052,24276,24471,24490,24528,24601,24621,24637,24755,24774,24923,24946,25036,25083,25101,25150,25169,25204,25262,25380,25401,25490,25497,25673,25734,25751,25819,25837,25849,25876,25898,26013,26054,26083,26295,26374,26472,26508,26572,26859,26932,26947,26969,27042,27063,27122,27156,27178,27189,27217,27268,27296,27314,27322,27478,27490,27500,27519,27544,27639,27688,27716,27750,27756,27764,27823,27924,28064,28110,28168,28230,28263,28283,28318,28433,28465,28829,28856,28885,28952,29022,29095,29128,29166,29360,29397,29439,29451,29468,29553,29561,29600,29719,29801,29814,29832,29860,29908,30001,30048,30094,30112,30142,30216,30243,30277,30284,30320,30352,30401,30443,30475,30502,30840,30859,31016,31366,31382,31386,31595,31619,31642,31650,31688,31745,31763,31795,31819,31836,31870,32114,32133,32196,32218,32245,32358,32609,32704,32742,32747,32847,32917,33062,33084,33152,33384,33411,33426,33459,33553,33579,33615,33646,33763,33775,33879,33883,33907,34157,34192,34225,34257,34338,34466,34573,34638,34645,34655,34706,34758,34792,34856,34893,34918,34988,35220,35256,35266,35369,35415,35469,35561,35604,35625,35691,35780,35817,35901,35944,36031,36156,36199,36331,36355,36433,36464,36569,36636,36684,36694,37050,37236,37270,37281,37322,37344,37525,37625,37637,37674,37696,37743,37746,38253,38294,38341,38355,38382,38430,38475,38480,38509,38547,38582,38609,38630,38681,38820,38842,38909,39071,39099,39126,39159,39190,39388,39495,39556,39580,39591,39603,39648,39690,39714,39791,39888,40097,40134,40157,40175,40439,40453,40530,40557,40662,40760,40775,40810,41167,41325,41370,41425,41454,41462,41491,41605,41674,41701,41712,41761,41807,41860,41912,41933,41989,42042,42101,42133,42223,42233,42238,42245,42250,42258,42293,42298,42303,42308,42330,42356,42389,42436,42442,42451,42456,42463,42467,42511,42517,42523,42528,42533,42538,42543,42547,42578,42583,42588,42593,42598,42704,42725,42747,42769,42793,42811,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42896,42926,42931,42938,42967,43017,43117,43139,43151,43185,43223,43336,43618,43728,43978,44134,44166,44252,44307,44363,44389,44513,44600,44627,44702,44758,44788,44839,44996,45078,45213,45397,45564,45611,45664,45838,45932,45967,46295,46526,46528,46766,46873,47068,47163,47244,48197,48229,48287,48370,48502,48529,48660,48683,48866,48874,48982,49148,49169,49307,49318,49432,49453,49468,49479,49495,49509,49565,49609,49627,49657,49665,49669,49721,49768,49828,50008,50018,50057,50141,50146,50178,50288,50341,50355,50378,50432,50520,50530,50545,50575,50599,50628,50647,50654,50656,50685,50743,50757,50770,50783,50796,50822,50860,50932,50950,51030,51120,51144,51174,51182,51215,51257,51357,51591,51616,51790,51806,51820,51846,51851,51869,51951,52101,52143,52178,52222,52238,52558,52697,52706,52718,52736,52756,52849,52882,53023,53175,53376,53691,53733,53840,54008,54106,54223,54296,54500,54548,54601,54632,54672,54800,54895,55497,55550,55633,55740,55808,55859,56063,56097,56689,56808,57320,57796,57841,57862,57972,58173,58310,58394,58440,58666,58728,59191,59388,59552,59746,59840,60389,60633,60790,60980,61300,61381,61473,61488,61526,61593,61910,61921,62201,62750,62866,63071,63723,63807,63865,63887,63982,64141,64205,64319,64450,64512,64564,64587,64611,64756,64809,64842,64859,64885,64915,64936,65313,65381,65532,65538,65553,65568,65588,65608,65628,65649,65898,65923,65955,65996,66018,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66462,66570,66820,66838,66882,66912,66936,66955,66961,66967,67015,67040,67074,67171,67584,67659,67755,67862,68054,68072,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68461,68498,68614,68698,68925,69168,69693,69739,69785,69845,69865,69904,70114,70225,70236,70278,70319,70336,70363,70595,70770,70813,70876,70945,71011,71121,71183,71194,71207,71255,71278,71288,71304,71359,71409,71417,71459,71484,71511,71524,71606,71663,71749,71795,71808,71890,71910,71982,71995,72008,72063,72077,72110,72119,72136,72148,72172,72191,72225,72299,72400,72462,72497,72616,72706,72725,72756,72786,72832,72903,72924,72941,72997,73022,73030,73118,73163,73205,73302,73322,73390,73447,73558,73639,73683,73690,73958,74130,74222,74408,74582,74588,74627,74724,74753,74782,74806,74808,74849,74883,74944,75006,75076,75107,75133,75189,75202,75223,75260,75303,75393,75440,75561,75909,76090,76095],"togglegroup":[40100],"focuswindow":[59650],"forks":[8574],"sound's":[29091],"worldspaceviewdir":[43879],"closepath":[58494],"required":[251,297,729,988,1284,1359,1383,1406,1589,1934,1998,2243,2370,3057,3315,3521,3580,4171,4245,4440,4803,4863,5060,5222,5475,5620,5948,6045,6118,7510,7833,8146,8893,9262,10443,10658,11139,11807,12231,12442,13017,13166,13242,13477,13709,14318,14469,14525,14825,14871,16168,16423,16739,16763,17576,18081,18536,18719,18953,19669,20660,21185,21967,21989,22036,22542,23255,23585,23810,24279,24963,25680,25841,25961,26081,26292,26669,27643,27673,27736,27999,28078,28104,28283,29572,29707,30204,30224,30359,30437,30661,30894,32054,32883,33083,33101,33382,33408,33428,33456,33476,33672,33819,34164,34274,34484,35247,35293,35748,35861,35930,35988,36394,36615,38273,38743,39947,40539,40614,41385,41835,42264,42482,42550,42887,42907,42934,43127,43451,43975,44133,44687,44770,45004,45246,45427,45457,45943,46759,48536,48599,48678,49139,49447,49518,49617,49840,50141,50170,50669,50921,50965,51022,51579,51601,51760,51785,51812,51849,51964,52099,52277,52491,52627,52841,52871,53190,53473,53697,53756,53777,54055,54106,56616,56753,58375,58466,61501,64889,65898,65965,66964,67211,67236,68226,68252,68652,68740,69029,69282,69372,69476,69861,70024,70807,70875,71145,71378,71438,71705,71781,71862,72346,72711,72971,73254,73427,73487,73597,73777,73894,74158,74399,74613,74694,74778,74950,75011,75198,75319,75536],"minutes":[22413,70413],"privided":[68254],"bone":[49,327,1931,2037,5267,5964,7121,7828,7868,9759,12963,13479,18058,21565,22070,22502,24679,25215,27718,29137,29731,29891,37399,37622,38437,38676,71783,75573,76141],"bakeasync":[9982,26908,27168],"loadfromcacheordownload":[3446,6144,25942,68281],"#90ee90":[63579],"\\contents":[70929],"workstation":[28431,50215],"innertext":[24010],"texcoordblend":[32931],"minimise":[41869,66007],"reference":[574,959,1112,1148,1184,1448,1920,1940,1998,2217,2760,3018,3020,3245,3306,3441,3485,3569,3609,3806,3847,3890,4672,4716,4726,4858,4960,5165,5336,5771,5866,5929,6057,6207,6752,6765,6779,6795,7103,7144,7214,7364,7426,7662,7726,7745,7768,7774,7866,7875,7879,7946,8013,8117,8146,8148,8191,8224,8426,8495,8585,8642,8973,9144,9206,9328,9485,9531,9681,10248,10401,10408,10444,10490,10563,10605,10615,10688,10693,10757,10873,10985,11303,11325,11350,11503,11533,11601,12206,12310,12720,12771,12853,12866,12969,13018,13233,13307,13354,13375,13466,13537,13636,13647,13701,13886,13962,14333,14468,14583,14839,14942,15039,15041,15844,15892,17937,17965,18110,18241,18540,18615,18666,18844,18953,19442,20179,20531,20657,21154,21200,21422,21661,21752,21836,22020,22098,22190,22235,22478,23417,23879,24096,24454,24738,24781,25096,25383,25503,25691,25857,25977,26109,26247,26278,26293,26486,26552,27498,27654,27688,27756,27825,27918,28123,28510,28780,28846,28873,28877,29151,29682,30094,30095,30152,30211,30829,30897,31652,31721,32238,32453,33134,33382,33415,33420,33623,33636,34408,34604,35280,36227,36782,37722,37750,38490,38527,39069,39087,39347,39412,39492,39609,39768,39879,40181,40530,40563,40676,40756,40830,41160,41346,41348,41433,41863,42187,42354,43322,43589,44386,44481,44591,44811,45851,48165,48206,48357,48536,48856,48872,48956,49215,49464,49592,49648,49657,49682,49950,50288,50342,50505,50656,50711,50742,50755,50769,50782,50795,50808,50821,50834,50859,51076,51819,51854,51941,51951,52489,52746,53246,54244,54579,54648,54823,54848,54957,55410,55869,55992,56063,56706,56881,57001,57457,57609,57815,57968,58025,58270,58273,58432,58434,58824,59100,59404,59811,59873,59991,60159,60525,60540,60611,60644,61178,61326,61518,61900,61937,61960,61972,61995,62075,62599,62748,62840,63080,63683,63695,63714,63764,63829,64042,64315,64767,64998,65691,65752,65954,65971,65996,66010,66029,66339,66394,66437,66444,66455,66551,66590,67188,67545,67827,67978,68088,68266,68630,68725,68863,69096,70290,70734,70770,71032,71341,71424,71606,71680,71966,72085,72245,72293,73397,73559,73922,74664,74787,75221,75361,75503,76145],"paneleventhandler":[58144],"asymptoteslip":[14968],"gathers":[3793,23286,23666,35958],"familiarize":[1095,1284,25827,33877,37330,37522],"lighten":[43836],"maxlinearvelocity":[33678,38492],"multiplay":[17421,31373],"mistakes":[5919,12990,27060],"make":[9,67,146,177,222,273,350,478,556,592,739,916,1007,1336,1393,1406,1516,1592,1599,1703,1728,1762,1888,1916,1934,1961,2061,2069,2291,2346,2428,2668,2835,2977,3013,3306,3346,3462,3675,3770,3852,3928,3956,4010,4042,4064,4209,4218,4294,4368,4452,4467,4550,4647,4761,4810,4908,5107,5336,5354,5515,5774,5922,6055,6206,6429,6964,7231,7386,7429,7507,7520,7661,7783,7900,7930,7956,8012,8192,8509,8643,9027,9079,9179,9258,9309,9457,9589,9653,9718,9723,9762,9855,9875,9937,10000,10058,10214,10567,10745,10833,11066,11300,11312,11434,11508,11588,11637,11997,12226,12307,12599,12756,12837,12899,13058,13113,13154,13175,13204,13240,13263,13277,13294,13316,13379,13478,13580,13620,13629,13797,13962,13995,14133,14273,14576,14726,14799,14965,15002,15839,16043,16060,16212,16470,16564,17030,17206,17412,17591,17980,18090,18165,18233,18267,18376,18504,18620,18730,18819,18847,18925,19035,19096,19467,20121,20265,20394,20571,20583,20767,20869,20952,21002,21085,21164,21200,21255,21325,22014,22032,22111,22129,22147,22456,23448,23525,23614,23673,23779,23932,24064,24193,24276,24565,24632,24670,24724,24743,24792,24923,24984,25044,25162,25276,25328,25348,25465,25499,25631,25741,25835,25849,26034,26110,26218,26258,26264,26485,26569,26605,26908,26920,26987,27055,27098,27210,27507,27611,27653,27678,27813,27855,27917,28266,28417,28477,28612,28676,28718,28774,28782,28834,28877,28961,29009,29128,29173,29334,29467,29482,29640,29721,29761,29784,29835,30052,30141,30345,30559,30853,31649,31872,32112,32174,32216,32297,32360,32683,32776,32848,33228,33381,33400,33503,33555,33573,33621,33624,33672,33909,34157,34207,34499,34673,34692,34815,34883,34925,34941,35029,35203,35252,35692,35794,36172,36463,36588,36761,37056,37345,37492,37601,37625,37639,37668,37730,38450,38483,38494,38606,38655,38719,39086,39157,39164,39239,39329,39374,39438,39508,39512,39524,39553,39603,39663,39801,39827,39953,40097,40162,40177,40450,40570,40618,40643,40657,41175,41399,41558,41624,41891,42156,42739,42767,42798,43186,43260,43336,43529,43603,43870,43995,44067,44298,44307,44526,44870,45037,45050,45284,45568,46248,46529,46798,47189,48184,48224,48244,48269,48502,48566,48605,48875,48984,49148,49288,49357,49450,49456,49465,49486,49518,49573,49678,49737,49753,49908,50339,50369,50480,50513,50534,50609,50648,50661,50693,50932,51027,51137,51155,51175,51184,51205,51235,51245,51608,51816,52046,52184,52342,52481,52491,52645,52966,53152,53308,53698,53746,53986,53994,54002,54254,54416,54580,54642,54672,54736,54765,54796,54898,55056,55154,55227,55244,56280,56348,56770,56808,57306,57556,57958,58300,58381,58705,58794,59016,59445,59557,59837,60646,61323,61497,61908,61921,62194,62774,62838,63082,63142,63681,63794,63938,64364,65133,65369,65850,65948,66009,66069,66110,66185,66258,66383,66411,66472,66700,66812,66932,67060,67136,67182,67236,67296,67533,67537,67657,67710,67749,67759,67965,68069,68072,68214,68258,68324,68546,68566,68689,68811,68849,69040,69506,69867,69970,70070,70096,70137,70227,70288,70333,70405,70592,70781,70833,70952,71026,71369,71392,71421,71565,71598,71673,71782,71808,71866,71896,71961,72090,72204,72242,72723,72851,72960,72988,73084,73211,73299,73312,73389,73452,73485,73577,73626,73920,74403,74418,74814,74850,74893,75017,75140,75467,75975],"freeze":[6978,11448,12760,13257,13281,13298,18130,18173,38568,38598,52046,74750],"usb":[560,634,695,700,835,1754,12646,28430,35855,36488,52694,66536,68059],"interactivity":[21635,22203,23932,38541,59592,64323,64454,64752,66355,68048,72899],"bundles":[524,899,967,1567,2782,3227,3247,3306,3351,3455,3725,4525,16060,16779,27679,31058,31621,34585,34657,49750,52739,68700,72464,73642],"colorindex":[30626],"file's":[2037,18363,25329,41306,70806],"magnetic":[12671],"“e”":[33146],"cookies":[9100,9889,18238,18342,22657,26881,37802,38306,38345,38410,38435,42365,50713,74272],"unblock":[17342],"m_preview":[51630],"mimimum":[8318,39575],"ones":[1960,2343,2442,3810,3892,4355,5193,5675,5924,6493,7250,7784,8286,12115,12975,14745,18596,20863,27690,30262,30365,31711,32183,33098,36058,36355,37351,37671,43618,43689,43913,44914,45096,45579,45784,46761,48022,48874,49491,52226,53535,58159,58448,63961,68701,71534,74180],"unity_version":[43955,44992,73935],"multi_compile":[20247,31937,41909,42953,44511,45016],"recalculations":[62193,62886],"possibly":[3895,4874,52034,54246,66620,69024,69277,73395],"unit's":[4822],"instancenumber":[13331],"waving":[2120,72773],"enters":[2289,3690,5047,5238,10715,15847,17956,20077,21175,22047,22540,32758,33099,36492,37453,38860,41349,48556,48855,49650,49887,57567,59191,59554,60367,60771,62726,67379,70755,74713],"_material":[50388],"looks":[4,1190,2197,3541,3778,3997,7029,8621,8761,8996,9265,9329,12912,14215,14268,14764,18139,18379,18856,18951,19520,20622,20785,20914,20923,21661,22029,22186,22200,23726,24055,24515,24774,24908,25225,25346,25669,26482,27169,27507,27520,27625,29360,29484,30010,30110,32172,32223,32776,32849,33153,34712,35738,35794,36831,36984,37348,37530,37675,37684,39137,39255,39513,39529,40061,42353,43131,44451,45296,46156,46550,47310,48184,48336,49536,49577,49771,49849,51076,51790,51814,52393,54712,57156,57884,58393,58706,59558,59736,61690,62671,63854,63872,63886,63930,63951,64007,64020,65501,65998,66222,66354,70380,71004,71793,72512,72927,73974,74553,75880],"synchronisation":[10793],"issueplugincustomblit":[28058,28067],"indented":[14693,20952,24569,62022,64659,68498],"kilobyte":[33092],"cloudprojectid":[53886],"grouping":[124,3455,4537,8442,9761,11660,14689,27035,41462,44658,48765,50354,50430,63728,64209,66393],"shade4pointlights":[43895],"external":[263,962,1129,1615,1862,1890,1894,1931,1994,2051,2187,2360,3020,3287,3731,4148,4509,6344,7071,7765,8063,8289,10698,11473,12008,12222,12646,13961,15039,17000,17591,18366,18395,18623,18936,19650,21395,22526,25140,26674,27525,27681,27938,28391,29738,29776,30051,31801,34971,35293,36543,38458,39927,40653,40662,40796,41301,41374,44299,44370,45037,48103,48252,49450,50411,50648,52478,52532,52563,58015,64406,64421,64461,64481,64504,64556,64579,64603,64624,64687,64738,64816,64834,64851,64869,64903,64923,64948,64965,65016,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65545,65560,65577,65597,65617,65638,65658,66894,67012,67896,68049,69841,71167,72410,72681,72835,73410,73905,73917,75409,75739],"#81b4ff":[63328],"xiaomi":[23194,53912],"opinion":[53737],"yespixel":[37999],"puck":[8565],"applicationname":[28104,28313],"breakdown":[7162,12515,26007,35366,35691,35887,35977,36037,36133,36184,36225,53507,74239],"tankscategory":[35419,35487,35554],"occlusioncullingdata":[5337,15234,30211],"filemode":[25965],"own":[78,262,441,495,701,738,783,889,994,1032,1202,1393,1855,1873,1882,1961,1997,2190,2239,2334,2692,2842,3306,3451,3471,3492,3721,3858,3871,3879,3898,3949,4184,4351,4356,4370,4432,4484,4541,4738,4867,4879,5094,5186,5351,5901,6145,6408,6718,6793,7127,7427,7734,7836,7875,7942,7983,8072,8131,8204,8442,8496,8873,8975,9339,9484,9553,9974,10205,10364,10475,10835,11136,11160,11177,11305,11669,12227,12275,12334,12866,13241,13307,13620,14263,14577,14694,14731,15864,17133,17312,18076,18113,18216,18357,18388,18454,18485,18536,18562,18634,18682,18752,18812,18897,18991,19018,20264,20787,20972,21193,21219,21327,21382,21536,21585,21640,22011,22085,22203,22234,22626,23542,24195,24508,24524,24758,25095,25525,25733,26477,26576,26716,26956,27038,27341,27638,27763,27931,27937,28071,28502,28829,28897,29091,29245,29486,29809,30035,30050,30063,30401,30493,30514,30839,30905,31012,31620,31869,32197,32651,32728,32916,33466,33615,33784,34175,34194,34375,34646,34850,35184,35189,35701,35768,35892,36054,36508,37385,37506,37536,37670,37714,37738,37924,38252,38258,38549,38583,38632,38679,38841,39097,39381,39466,39827,39905,40152,40203,40450,40452,40526,40810,41447,41624,41747,41792,41859,42320,42358,43080,43203,43462,43491,43521,43990,44740,44787,44990,45144,45583,45962,46761,48320,48662,48685,48909,48977,49145,49169,49388,49456,49575,49650,49762,49914,50391,50521,50575,50583,50629,50698,50909,51059,51387,51962,52230,52877,53223,53370,53782,54104,54227,54703,54901,56610,57798,57811,57996,58362,58403,58997,60506,61771,62608,62829,64204,65876,65903,65923,66111,66190,66225,66336,66354,66383,66635,66817,67098,67592,67624,68086,68473,68601,69508,69710,69901,69987,70302,70336,70424,70761,70875,70936,70944,71077,71673,71925,72239,72275,72315,72789,72957,73321,73447,73561,73667,73705,73917,74893,75023,75077,75109,75127,75215,75251,75366,75501,75819,76023],"storyboard":[12096,49778],"productversion":[74032,74116],"dynamic_lighting":[42970],"entity’s":[6152],"capable":[2990,3502,4834,8434,18615,29420,29586,30282,36608,38128,41913,45523,50169,66965,67019,67230,67841,68157,72217,72717,73118,75503,76136],"suspension":[14950,14979,26594,74421],"exiting":[8783,18236,20585,29790,31670,31733,31749,31767,31779,31804,31842,32080,32095,32119,32144,32206,32330,32348,32374,32596,32619,32639,32667,32714,32749,32893,35054,38898,39343,51047,71634,73486],"cmd+\\":[23696],"sparsetexture":[15155,48165],"forefront":[39253],"blits":[75411],"instrument":[564,6370,6427,6475,28168,52099,73176,74631,74791],"pointerexit":[29434,40030,40120],"attribute":[291,816,1271,2464,2518,4713,4960,6095,6343,10496,10726,10826,11844,12662,13316,18030,18848,19430,20140,20777,20923,24981,26242,26442,26629,28489,30535,32923,33866,34723,35481,36782,37237,38820,39858,40362,40453,40593,42028,43452,44366,45065,45170,48921,49909,51060,51613,52327,52651,53922,54436,54533,54546,54828,54849,55191,55231,55346,55597,56611,57300,57303,58066,58766,59036,59586,60906,61006,61179,61354,61452,61645,61938,62008,62230,62838,63934,64586,64973,64986,65706,65755,65865,66467,68733,69999,72242,75682],"yesfor":[37822],"mycontrol":[57914],"inapp_data_signature":[67619],"peachpuff":[63620],"messages":[861,1570,2745,4137,6149,7113,8221,8972,9330,10711,10984,11001,11060,11075,11177,12655,15867,16564,18112,21040,21200,21400,22626,25980,26084,26168,26257,27763,28969,29005,29065,30509,31689,33728,33865,34640,35003,35750,38797,39689,39699,49390,52599,52795,53101,53451,60433,60837,63294,64234,66035,66165,66409,67158,67696,68917,69158,70356,70594,71314,71533,73395,74039],"neccessary":[4527],"multidisplay":[29858],"fromname":[36810],"plots":[4994],"importer's":[48229,72683],"elsewhere":[5128,5263,6211,23860,33478,36060,43975,50341,63061],"stickers":[72799],"unetencryptionlib_encrypt":[66121],"morphed":[7771],"bindableproperties":[37243],"endchangecheck":[20856,49995,59633],"declarations":[12678,23258,28494,29915,44678,44872,45062,45409,54800,63836,73924,74753],"troubleshooting":[210,2186,2748,3480,9884,10094,13455,18427,24666,25892,26701,26995,27597,27675,28457,28612,28686,28724,30356,31607,33068,35723,40647,43170,44627,50186,52471,52497,52545,53705,53840,53987,66754,67687,68074,70352,71257,73304,75970],"unity_matrix_mv":[43876,47074],"severely":[37683],"hips":[71784],"performselectoronmainthread":[52642],"m_treeviewstate":[52328],"fireball":[31720,32650],"cubemap's":[254],"fuel":[32632],"queryorder":[53489],"largetexture":[60659],"getdevices":[76125],"_a2blabel":[62517],"grading":[34864,38244],"coral":[63524],"endcg":[6541,8489,8759,8925,10198,14067,14214,23321,29524,31914,33005,42624,43449,43912,44049,44420,44925,45692,46154,46548,46754,46869,47231,47931],"grabbing":[25631,44377,72946,74403],"androidjnimodule":[16606,30952],"rapidly":[3299,6036,6082,8570,12903,20117,32136,32217,39160,43070],"rendering":[8,122,360,1028,1537,1671,1799,4273,4583,4961,5334,5362,5498,5726,5744,5782,5807,5832,5974,6384,6446,6483,6485,6760,6837,6872,7918,8024,8115,8401,9127,9223,9251,9343,9438,9881,9916,9996,10054,10206,10327,10659,11798,12137,12342,12516,12877,13140,13208,13430,13485,13587,13744,13793,13854,13904,13990,14009,14145,14247,14446,14537,14568,16256,16715,16835,17110,17539,17642,17773,17803,17850,17997,18401,18408,18564,19129,19284,19993,20237,20392,20424,20831,21054,21160,21351,21529,21684,21697,21837,21875,21956,22051,22112,22225,22651,23289,23416,23447,23533,23616,23623,24489,24598,25292,25998,26049,26665,26784,26812,26940,26952,27015,27098,27118,27175,27215,27491,27500,27513,27544,27585,27983,28050,28066,28182,28876,29449,29484,29714,29878,29924,30001,30143,30196,30228,30264,30343,31208,31863,32115,32263,33482,33548,33642,34208,34269,34350,34477,34682,35427,35691,35881,35958,36020,36152,36177,36353,36432,36465,36581,37363,37553,37641,37692,37795,38243,38261,38281,38286,38323,38342,38380,38418,38431,39235,39596,39677,39719,40039,40151,40168,41748,41764,42069,42206,42293,42298,42358,42392,42511,42517,42578,42583,42775,42792,42866,42872,42991,43117,43131,43172,43334,43454,43524,43591,43890,43972,44066,44097,44133,44165,44659,44830,45062,45144,45183,45521,45588,45629,45718,45852,45967,46417,46515,46529,46717,47083,47665,47952,48022,48227,48297,48642,48693,48906,48911,48976,49148,49169,49222,49280,49355,49435,49470,49495,49566,49595,49619,49706,49723,50058,50164,50367,50433,50520,50579,50685,50703,51200,51785,52243,52475,54134,54281,58387,58440,58651,60635,61312,62747,62867,63123,64745,65907,65970,66811,66836,66869,66888,66903,68088,68266,68712,68857,69066,71559,71598,71748,71859,72521,72608,72725,72752,72916,72986,73240,73285,73431,73592,73689,74242,74645,75067,75415,75628],"apis":[509,1219,1259,1359,1383,1402,1520,1734,3344,3348,3492,3567,3707,3776,4633,4654,5946,5989,6064,6145,9982,11803,12198,12346,12637,13363,16619,16763,17110,17133,17759,18218,18334,19719,20001,20215,20419,21029,23194,23563,23611,24928,25266,26145,26645,26813,27168,27938,29832,30880,33076,33306,33467,33497,33510,34207,34273,34481,34597,36172,36584,36746,36822,36823,36977,37235,37797,41292,42150,42431,42997,43029,43655,43728,43801,43995,44054,44240,44591,44805,44829,45026,45103,45211,45416,45840,49148,49213,49284,49746,50011,50088,50194,51387,51527,51552,51785,52754,53793,54878,58923,60358,61555,67143,67485,67765,68087,68874,69110,70834,71012,71194,71749,72133,72433,72716,72948,73034,73260,73417,73480,73499,74187,74377,74777,74867,75074,75390,75409,75485,75969,76069,76309],"sliding":[7251,11518,13561,15861,23962,26591,27813,29705,33604,39747,39984],"#707070":[63279],"their":[104,165,249,263,401,427,501,510,554,1355,1849,1901,1934,1989,2217,2239,2268,2392,2587,2663,2971,3287,3316,3346,3348,3448,3463,3488,3575,3609,3731,3791,3843,3975,4066,4356,4489,4544,4726,4837,4879,5044,5168,5829,5980,6042,6059,6144,6291,6383,6445,6498,6760,6816,7315,7427,7620,7841,7870,7940,8131,8197,8444,8574,8783,8873,8979,9256,9330,9440,9541,9765,9991,10082,10338,10475,10501,10706,11075,11225,11263,11459,11474,11546,11605,11697,11701,12438,12895,13105,13127,13585,13706,13733,13777,13851,14225,14371,14538,14694,14733,15844,15885,17326,17412,17488,18025,18104,18131,18168,18313,18536,18585,18677,18728,18816,18897,18935,19043,19133,19653,20047,20089,20129,20380,20420,20450,20559,20754,21154,21505,21834,22153,22224,22329,23273,23537,23559,23755,24041,24388,24524,24738,24739,24774,25031,25194,25347,25438,25526,26086,26478,26571,26582,26717,26787,27131,27184,27297,27325,27330,27540,27589,27687,27814,28115,28181,28488,28828,28902,29060,29101,29151,29566,29595,29732,29861,29897,29906,30035,30063,30357,30385,30443,30489,30692,30887,31012,31760,31997,32114,32117,32168,32217,32252,32372,32594,32648,32701,32728,32747,32868,32891,33369,33446,33498,33700,33762,34041,34155,34194,34646,34736,34891,34914,35011,35228,35691,35772,35885,36054,36242,36348,36696,37142,37259,37302,37367,37541,37662,37704,37733,38243,38382,38485,38625,38877,39097,39127,39169,39231,39308,39574,39663,39798,39856,40128,40204,40711,40787,40969,41197,41331,41450,41462,41511,41753,41852,42124,42378,42611,42703,42724,42746,42793,43199,43218,43414,43521,44069,44300,44810,45153,45403,45585,45620,45662,45886,46347,46780,46831,47127,48162,48373,48481,48511,48548,48566,48594,48621,48833,48874,49444,49496,49520,49677,49712,49778,50197,50341,50352,50388,50452,50698,51018,51120,51131,51155,51182,51212,51231,51264,51367,51846,52008,52118,52198,52230,52452,52992,53214,53320,53713,54104,54107,54219,54227,54436,54545,55514,55581,55894,56097,56674,57814,57899,58190,58459,59165,59735,59833,60506,60543,61313,61476,61488,61925,62600,62761,63142,63505,63697,63708,63794,63817,63868,63989,64029,64042,64315,65713,65747,65765,65885,65904,65923,66207,66357,66393,66456,66901,66946,67019,67074,67230,67351,67553,67626,67672,67802,67841,68473,68534,68602,68730,68907,69147,69395,69499,69508,69746,69901,69987,70236,70424,70686,70755,70910,70944,71012,71132,71208,71215,71288,71345,71408,71634,71658,71766,71805,71969,71989,72136,72148,72276,72293,72747,72890,72942,73263,73393,73471,73623,73877,74063,74139,74581,74615,74644,75034,75101,75135,75251,75310,75377,75394,75422,75579,76140],"manifold":[11612],"27'":[73959],"accelerator":[3589,4532,21067,25116,35041,66553,68613,74152],"margins":[9636,34900,36688,62024,62200,64053],"sincerely":[4997],"redefinition":[68660],"hoc":[42811],"f3":[9811,20486,36895],"user’s":[258,1509,2764,3570,6774,12663,23142,30498,43416,45523,53740,69333,69439,73051,73623,74581,74753,75366,76163],"backfaces":[10012,10439,11608,22180,30243,41784,45803],"syncvars":[10803,66034,66070],"kernel32":[18546],"_thirdtex":[45223],"camera'":[39433],"fraudulent":[4085,22439],"exposing":[4856,5965,45180,54672,76039],"accumulate":[10406,14207,14501,23525,72754],"p1":[51459,58472],"8mb":[34935],"zfailoperationback":[45863],"destructive":[17169,24710],"l":[179,5226,7556,18497,20682,27404,36659,36710,40740,58160,70533,71533,74804],"transitionendevent":[62407,62493,62598],"#aa":[62011],"reliability":[17474,67593],"#018cff":[63275],"timebelowthresholdtext":[62371],"selectedindices":[55960],"tmp":[17642,24994,27793,31256,48220,52612,73487,76049],"“as”":[40879],"lit_":[38304],"purchase_date":[67474],"m_color":[48138,58763,61112],"'#":[69979],"genetic":[53737],"unitysubsystemerrorcode":[75753,75937,76004],"200px":[54812,54858,56560,63739],"olivedrab":[63611],"unityxrmeshinfos":[75751],"consult":[6455,9268,10767,29019,38446,50087,52530],"promotions":[3981,4133,4356],"ceramics":[42812],"m_backing":[39893],"rises":[31838,32632,52009,73055],"contribution":[9965,10109,22120,22872,27267,36060,36628,37663,37668,68825,68853,69058,71597,71856],"italic":[9261,40048,49830,54612,57412,58282,58666,62452,64166,73452],"commandline":[66638],"isnativecontainertype":[26173],"unityxrrendertextureids":[75429],"diverges":[67155],"getrandomcolor":[55842],"lerpunclamped":[10468],"path_to_standalone_build":[15722],"setinputmethod":[34101],"precede":[55655,60762],"cheaply":[42449],"nativeobjecttype":[15360],"“y”":[11844],"kformatr16g16_unorm":[50117],"togglevalue":[61804],"lifted":[29595],"viewgroup":[1431],"collections":[2016,2819,2900,3354,3870,3906,4217,5152,5358,5502,5740,5778,6238,6727,8072,9489,10826,15729,16180,18369,18516,19457,20462,20872,21988,22207,22555,23783,23886,24070,24182,24289,24803,25166,25496,25638,25699,26027,26117,26133,26307,26390,26436,26490,27344,27681,29838,30104,30156,30554,31076,31416,31590,32783,33106,33449,33850,36642,36751,37082,39361,40632,41870,42209,42933,43014,48712,50294,51429,51624,51970,52321,52654,55077,55177,55932,56722,56885,56992,59025,59416,59920,60685,60895,60995,62692,67286,68094,68289,68328,68355,68389,68445,69574,70250,70940,71726,72233,73098,74066,74431,75221,75949,76043,76220],"diverge":[4831,32407],"spawnmanagervalues":[13329],"#22":[62011],"ipsum":[65174],"changing":[502,2324,3340,4078,4356,4705,4964,6036,7163,7364,7579,8039,8201,9283,9594,10214,10406,12685,12903,13054,13397,13459,13613,13768,14576,14708,17488,18585,20613,22107,22274,23286,23559,23673,24093,24578,24738,24775,25499,26070,26718,27208,27287,27493,29809,30458,32217,32617,33416,33528,33842,35129,37574,37675,38332,38532,38609,39141,39308,39724,42101,42317,42356,45403,49531,49572,51175,52227,53378,54264,54736,58801,59177,59852,62389,62594,62799,65700,66017,66707,68809,68918,69159,69646,69771,69812,70259,70432,71016,71129,73179,74386],"audioflangeeffect":[7586],"tightrotateenabledspritepackerpolicysample":[48846],"inheriting":[51579,51601,51812,68642,72229],"fakecomponent":[15351],"lifecycle_stop":[75274,75928],"vst":[4909],"ontransitionrun":[62391],"quicksearchtool":[2515,2623],"padlock":[29076,39256],"correcting":[11635],"broken":[2211,3575,3859,4883,5037,8551,12423,15851,20577,21175,21555,25526,26569,35750,37668,37750,38841,52129,60642,62027,66258,68641,71037],"precedes":[70487,70701],"leverages":[16933],"setlookatweight":[25654],"impassable":[8509],"profilermarkers":[35799,36085,36507],"inspector's":[25382],"m_children":[21671,76463],"unavoidable":[36785],"ontransitionstart":[62392],"lisp":[41192],"keyframes":[1895,2052,2197,2281,2324,2381,2408,2423,6230,7014,18187,22508,48351],"detached":[14713,18897,25695,60557],"namerect":[20958],"reallocate":[27871,30385,33382],"radiometric":[22165],"zooming":[6741,20560,39263,39761,54501],"feasible":[6941,27055],"camera's":[25,75,6723,6760,6767,7924,8022,9202,9242,9850,10364,10715,11319,11766,13144,13228,13777,19451,21164,22746,25401,29849,29879,30141,30173,30194,30260,30265,32272,33548,38351,39233,43114,44058,46040,47087,66001],"syncvar":[10826],"#732526":[54314],"brightens":[31997],"immersive":[72789,72899],"window_button_restore":[63501],"consistent":[6958,11570,11631,11895,13620,20438,25099,26461,27262,27520,29663,31635,32317,33404,38346,40474,42548,42811,44850,49609,51155,54672,62838,64458,65386,68725,68926,69169,70228,71783,73478,74136,74280,75068,76194],"paired":[12662,24193],"skins":[9553,24056,63439],"minwidth":[59677],"denoting":[6264,49850],"r32g32_uint":[8479],"tan":[10449,21966,45582,63644],"inaudible":[5218,73054],"#00ced1":[63546],"standby":[31642],"showselector":[49990],"mute":[2200,5027,5120,7776,10769,12666,13815,14884,22050,41459,55725,73056],"associative":[6071],"fighting":[44625],"sixty":[51975],"field__aligned":[64512,64564,64587,64611,64809,64842,64860,64915,65051,65313,65538,65553,65568,65588,65608,65628,65649],"dllexample":[21029],"matters":[7391],"archivefileinterface":[2898],"greys":[49513],"takeaway":[3309],"bleeding":[26998,27055,36679,43185,72532],"archisearches":[40740],"organizations'":[30413],"m_renderingpath":[76501],"emerges":[50601],"uibehavior":[62759],"solves":[7231,29908],"appending":[9129,52630,70116],"clamping":[13214,50034,50126],"#6a6a6a":[63258],"coils":[50401],"setrtarrayindexfromanyshader":[45515],"malay":[53637],"neighboring":[8437,10009,14149,14502,20580,26985,32396,50060,50348,50431,51155,51328,51788],"accesses":[1005,8437,9382,12643,18819,23263,24984,33307,35634,36535,39910,48242,67708,73202,76218],"through":[104,234,266,387,541,634,658,777,836,1069,1107,1402,1614,1739,1919,1942,2064,2327,2896,2990,3247,3344,3418,3898,3977,4029,4058,4230,4390,4513,4557,4773,4816,4869,5067,5085,5162,5192,6233,6774,6792,6841,6895,6944,7077,7217,7493,7615,7662,7766,7771,8122,8205,8553,9145,9211,9889,10000,10097,10135,10347,10561,10580,11498,11610,11660,12202,12645,13064,13264,13964,14205,14320,14687,14731,14857,14950,15847,15967,16635,16715,16811,17092,17326,17723,18220,18899,18969,19040,19080,19085,19098,19130,19164,19645,20340,20456,20571,20606,21024,21332,21605,21842,21904,21956,22351,23524,23942,24151,24649,24780,24950,25341,25569,25624,25686,25855,26041,26118,26651,26699,27303,27323,27330,27482,27688,27799,27915,28115,28248,28283,28433,28463,28603,28963,29420,29555,29782,29818,29887,29901,30242,30385,30475,30859,30916,31009,31592,31676,31739,31755,31773,31785,31810,31831,31848,32086,32101,32125,32149,32212,32245,32336,32354,32380,32602,32625,32645,32673,32720,32765,32899,33065,33101,33383,33419,33468,33494,33602,33902,34188,35629,35763,35806,35963,36232,36485,36768,36845,37231,37272,37685,38478,38557,38587,38740,38908,39266,39494,39513,39966,41327,41613,41723,42352,42467,43185,43591,43762,44093,44108,44368,44637,45659,45866,48180,48260,48556,48863,48887,49408,49455,49785,50094,50178,50610,50634,51710,52013,52103,52172,52233,53221,54002,54262,54632,55088,55346,55613,55777,56075,56103,56523,56725,57985,58141,58230,58732,58997,61387,61488,61555,61965,62025,62788,63065,63107,63134,64200,64653,65146,65737,66012,66110,66225,66462,66645,66818,66845,66979,67047,67086,67155,67161,67482,67537,67551,67720,67760,67886,67897,69020,69273,69294,69436,69513,69901,70290,70316,70374,70747,70752,70867,71120,71288,71553,71608,71809,71899,72403,72723,72787,72830,72880,72941,72989,73022,73352,73406,74171,74308,74417,75073,75280,75388,75409,75980,76068,76314],"audioeffectplugininterface":[4903],"wnormal":[47487],"rotated":[5224,7478,10593,13112,14712,24912,29634,37731,38659,45807,48697,54712,66000,71873],"''":[48084],"flexgrow":[55842,57038,59894,60453],"yescolored":[37802],"uimodule":[16742,30969],"member’s":[3590],"proprietary":[148,9142,18399,22665,24636,50170,53320,69997],"gisw0r":[69934],"bindchannels":[43689],"meta":[3595,3729,3841,4531,4776,5181,9069,17877,18112,18728,18760,18965,21045,22161,25169,27103,27158,28920,29483,31040,31473,33456,36112,38944,42400,46792,50234,58824,60162,67055,67531,71032,72384,72953,75033,75099,75188,75304,75440,75897],"trade":[3304,3491,7666,9154,9964,11527,11598,22464,27083,37261,50670,52044,53737,75445],"secondtex":[45227],"audiosnapshots":[5022],"#008080":[63645],"serverassetbundleparameters":[19088],"enumfieldsnippet":[64579],"underscores":[18750,53350,64205,64340,67164],"debouncing":[35172],"dim":[31745,36632],"d3d11_create_device_singlethreaded":[34206],"boneweights":[332],"androidjnihelper":[1404],"sector":[7343,58519],"finddistancestonearestneighbors":[33248],"integers":[282,6168,13022,20967,23816,29105,34681,44268,45458,71970],"catapult":[8569],"enqueue":[75784],"tying":[32219],"cleanstring":[2661],"sideloading":[72178],"userauthorization":[73104],"pointer__stringify":[73587],"months":[4078,4356],"configurations":[777,1012,1611,2180,6123,8186,8242,8554,9152,9709,13663,14763,15854,17312,18048,19443,20101,20225,24926,25348,25521,25852,28320,28356,30825,30853,34537,34749,45046,45932,48940,49177,49449,50003,58015,66585,68611,69865,72872,73817,74783,74840,75110,76217],"fudge":[13607,32273],"scrollleft":[63473],"#ff00ff":[63424,63592],"loadassetasync":[3397,6141,68597],"condition":[562,6133,6425,6473,14728,18317,24797,26485,28166,32648,32767,33353,53941,55625,74789],"\\unity\\":[52538],"createinterface":[70047],"64mb":[2769,29181],"enable_d3d11_debug_symbols":[19055,38283,41996,44306,45037],"exposes":[4875,6083,6143,9965,13264,20738,22116,26437,27979,30001,33813,49486,49636,49720,54508,65081,66811,66836,66867,66892,66903,71100,72133,72435,76069],"app_toolbar":[63254,64252],"government":[234,70424],"r16g16b16a16":[34289,34502],"basic":[889,1855,1893,2008,2239,2550,2962,3998,4359,4869,5159,5722,6691,7947,8412,9265,9384,10519,10695,10826,11160,11628,12154,12662,13117,13355,13637,13805,14923,16275,16739,18413,18665,18977,19057,19990,20459,21142,21592,21640,21711,22349,23891,24774,25523,25696,25733,25805,26129,28068,28378,30306,30528,31365,33575,33763,33867,34161,34651,34681,34939,36198,37228,37685,37722,39083,39096,39177,40442,41432,41462,41677,42262,42362,43625,44230,44463,45064,45266,45405,45571,47185,48539,48649,48914,48977,49486,49524,49642,49764,49819,50428,50709,51950,52174,52223,52239,52613,53004,53283,53828,54225,54543,54708,57111,58130,58736,59001,59530,61592,63709,63721,64761,65668,65733,65793,66038,66043,66178,66335,66435,67069,67243,67862,70015,70914,71868,71901,71959,72681,72944,73029,73903,74417,74775,75037,75079,75114,75235,75475,75743],"registration":[4879,19145,53442,62149,66577,75724,75881],"rewriting":[45290],"boundary":[10341,13213,14540,27054,48324,51541,60423,62831,71879,75603,76303],"regenerating":[58300,62867],"autodesk":[165,5826,21391,22526,41751,45550,71797],"functor":[29435],"ivory":[63568],"primary2daxistouch":[76116],"approximated":[10012,14968,23105,27334,27484,30365],"incorporates":[9963,42810],"togglebool":[23937],"clearalleditorpreviewtiles":[51501],"min":[7755,7793,8198,9700,10246,10478,10658,11139,11736,13022,13107,13657,14581,20501,20976,23962,25983,26992,27365,31686,32274,36689,39242,39459,39645,39986,40861,43737,43814,46435,50375,51506,54732,61530,64048,71716],"merger":[1003,19077],"inputdevices":[75474,76125],"microphone’s":[12651],"animatorcontrollerplayable":[21332,33979],"unusual":[8159,35002],"job's":[26450],"trigonometric":[10443,20693,40539],"dropdownfields":[59628],"a1":[21029],"vortex":[11489],"addition":[283,670,1890,2405,2972,3466,3868,4652,4903,5962,6182,6718,9645,9890,10331,10392,12119,12770,13477,13899,18359,18593,19018,19167,20154,20893,21435,23253,23585,26041,26491,26572,27266,28068,28980,29389,29420,29880,30229,30506,31604,32916,33784,34192,35959,37565,37690,38869,39190,40217,42056,42243,43292,44626,44997,45091,45239,45869,47736,48197,49435,49549,49679,50390,51155,51244,52010,52724,57726,58119,59552,61612,64452,65758,65885,65990,66235,66364,69631,70187,70345,70868,70949,71022,72295,72449,72940,73440,73559,74193,74522,75104,75221,75280,75355,75647],"normaldiffuse":[42251],"myrangeattribute":[20975],"usd":[4231,4257,4458,40510,52969,53330],"interactor":[3005,17835,72963,75088],"wasmcodeurl":[73409],"gases":[32631],"platformdefines":[33851],"svn":[48096],"onkeyup":[59797],"r8_unorm":[554,8460],"spreadsheet":[23441],"visitcontext":[37154],"d3d":[74737,74775],"boundingspheres":[6152],"deselecting":[1975,35181],"express":[3569,10724,18734,33579,41160,41346,50342,58466,63767],"unlikely":[3476,8531,24737,27520,33382],"heapu16":[73556],"playableoutput":[33920,34163],"menuname":[2528,13318,48922,52362,54927,55080,55180,55324],"container":[3574,9329,11970,13306,22567,26110,26168,26241,26448,28352,31587,36784,36789,36845,37001,37244,39872,40537,45839,48324,49478,49757,50171,54302,54902,55103,57709,58898,59304,59830,61423,61767,62462,62574,64083,64640,64696,65063,65164,65386,65668,65779,66603,67726,72636,72706,75485],"readcommand":[2924],"#x73":[66770],"declspec":[28273,74597],"s_meshsubsystem":[75833],"unityframework":[49756,66840],"removeclipanimation":[35763],"vp":[14919,72574,72648],"#191970":[63603],"audiopitchshiftereffect":[7710],"speck":[44451],"panic":[2211],"overridden":[2248,7510,9462,14278,14314,20608,20644,21475,24443,24764,34893,34910,42049,44207,51427,51753,52251,53211,54635,56624,62115,66600,68547,74172],"#d6d6d6":[63322],"farther":[253,6758,10357,26665,43113,43131,66003],"objects":[4,24,67,100,248,1948,1950,1985,2037,2184,2188,2261,2297,2343,2414,2427,2958,3306,3403,3473,3483,3566,3575,3727,4294,4569,4865,5040,5160,5733,5763,5810,5948,6049,6083,6125,6486,6758,6767,6794,6798,7155,7661,7767,8021,8115,8146,8205,8252,8429,8598,8611,9017,9136,9145,9294,9368,9440,9555,9622,9896,9957,10003,10093,10788,10814,11001,11078,11107,11213,11225,11236,11303,11511,11546,11602,11642,12426,12658,12709,12833,13120,13159,13239,13560,13589,13645,13662,13678,13714,13718,13846,13879,14567,14943,15001,15034,15850,15889,16241,16667,17546,18009,18220,18319,18377,18516,18613,19519,19675,20640,20659,20807,21156,21180,21308,22012,22142,22203,22303,23264,24467,24527,24648,24900,25435,25624,25928,26005,26058,26109,26249,26276,26434,26494,26571,26587,26788,26877,26925,26947,27263,27328,27486,27682,27756,29720,29759,29774,29994,30350,30658,30868,31662,31705,32316,32343,32360,32651,32702,33074,33094,33381,33399,33424,33482,33535,33629,33641,33762,34194,34212,34869,34926,35067,35188,35239,35745,36098,36129,36177,36201,36432,36514,36736,37228,37281,37344,37525,37683,37702,37723,37838,38239,38297,38357,38394,38614,38641,39137,39169,39318,39530,39689,39699,39868,40030,40120,40526,40531,40643,40688,40759,41160,41344,41375,41462,41490,41863,41893,41917,42010,42187,42262,42315,42548,42790,42809,42876,42896,43080,43172,43205,43484,43591,43926,43998,44066,44178,44320,44590,44755,44785,45142,45187,45239,45387,45520,45565,45615,45620,45784,45858,45930,45960,46141,46508,46532,46715,46822,47126,47163,47179,48022,48405,48548,48556,48574,49024,49435,49453,49568,49626,49668,49908,50361,50437,50579,50635,50685,50932,51207,51367,51608,51816,51976,52091,52248,52487,52588,54246,54711,54771,54876,55014,55063,55162,55549,55557,55726,55857,56390,56834,56986,57587,57995,59193,59979,60155,60915,61015,61494,61668,62048,62703,62803,64888,64998,65518,65754,66006,66036,66197,66415,66848,67407,68130,68281,68311,68382,68473,68535,68559,68695,69399,69503,70837,70878,70978,71562,71691,71805,71869,71944,72059,72275,72289,72783,72788,72941,73557,73613,74144,74239,74907,75076,75148,75221,75466,75485,75857,76300],"misaligned":[14001],"ijobparticlesystemparallelforbatch":[31654],"isoverridable":[42053],"automation":[17251,21043,23138,25746,28186,28281,31408,69785,69845],"physicsscene2d":[35338],"negate":[40288,44974,45902],"ports":[28450,35836,52645,66230,66631],"“transparency”":[72722],"somearray":[26365],"painter":[60703,60963],"xex":[34564],"noisy":[29645],"these":[20,59,73,82,120,155,205,229,279,392,501,511,683,700,739,861,997,1127,1180,1234,1248,1510,1556,1672,1795,1840,1870,1880,1891,1894,1919,1973,1997,2041,2134,2188,2256,2299,2327,2379,2429,2699,2768,2940,2971,3252,3292,3311,3425,3455,3493,3511,3574,3579,3695,3728,3785,3852,3895,3923,3956,3982,4042,4227,4245,4357,4367,4432,4451,4479,4509,4531,4574,4671,4757,4902,5038,5152,5258,5276,5730,5736,5764,5922,5989,6061,6109,6217,6273,6298,6344,6364,6397,6465,6503,6510,6688,6691,6723,6756,6798,6978,7001,7163,7188,7217,7395,7510,7565,7572,7749,7764,7771,7850,7986,8256,8303,8373,8493,8561,8837,8982,9012,9071,9134,9154,9227,9258,9332,9438,9532,9653,9776,9869,9908,9986,10093,10460,10540,10591,10702,10725,10803,11011,11307,11416,11448,11461,11527,11598,11799,12043,12280,12343,12446,12760,12895,12975,13019,13105,13175,13247,13281,13298,13323,13357,13404,13463,13627,13713,13770,13799,13925,13996,14018,14078,14220,14332,14540,14672,14717,15026,15042,15702,15832,15884,15907,15940,15955,15972,15987,16010,16020,16048,16065,16080,16096,16111,16125,16142,16156,16173,16188,16217,16232,16246,16261,16280,16335,16350,16369,16383,16397,16411,16428,16443,16458,16475,16492,16515,16532,16547,16569,16584,16855,16874,16888,16924,16938,16974,16989,17005,17020,17035,17045,17067,17082,17097,17138,17157,17174,17190,17211,17225,17245,17259,17273,17287,17301,17317,17331,17347,17359,17375,17389,17403,17415,17427,17442,17457,17479,17493,17511,17529,17551,17566,17581,17596,17611,17632,17647,17666,17683,17698,17713,17728,17764,17778,17793,17808,17823,17835,17855,17870,17885,17900,17917,17984,17998,18050,18076,18112,18330,18357,18408,18508,18568,18624,18677,18734,18753,18922,19021,19164,19220,19450,19454,19633,19938,20009,20047,20280,20538,20607,20639,20701,20863,20923,21045,21154,21305,21382,21393,21445,21640,21854,21937,21971,22085,22146,22189,22236,22349,23401,23430,23559,23663,23677,23816,24391,24580,24631,24637,24777,24984,25068,25140,25187,25307,25413,25527,25841,25960,25980,26080,26145,26361,26463,26488,26573,26599,26665,26713,26790,26929,26934,26960,27055,27088,27119,27136,27169,27174,27292,27302,27331,27467,27488,27495,27538,27567,27607,27638,27679,27694,27762,27815,27917,27983,28054,28064,28104,28154,28230,28265,28378,28484,28874,28880,28947,29009,29018,29093,29135,29167,29334,29391,29466,29484,29566,29713,29793,29848,29894,29915,29926,30000,30039,30048,30147,30175,30237,30265,30321,30345,30435,30520,30917,31010,31366,31592,31613,31632,31707,31790,32051,32141,32219,32367,32372,32637,32760,32917,33299,33400,33424,33453,33472,33524,33529,33591,33637,33775,33880,34192,34201,34270,34351,34478,34566,34646,34670,34686,34840,34901,34956,35088,35192,35248,35344,35381,35411,35583,35612,35687,35780,35806,35930,35997,36054,36234,36331,36354,36471,36593,36633,36678,36710,36785,37142,37270,37280,37428,37548,37646,37667,37683,37725,38241,38297,38347,38399,38492,38502,38550,38584,38633,38657,38744,38851,38917,39003,39057,39103,39127,39170,39228,39296,39346,39498,39556,39724,39796,39872,40001,40151,40274,40430,40516,40529,40544,40651,40722,40784,41091,41187,41501,41690,41753,41812,42027,42050,42110,42261,42363,42389,42466,42546,42619,42663,42689,42781,42816,42875,42895,43023,43117,43141,43182,43224,43514,43563,43566,43684,43891,43920,43959,44052,44231,44338,44422,44541,44627,44822,44830,44996,45053,45122,45261,45403,45427,45455,45585,45599,45668,45846,45858,46510,46732,47070,47176,47949,48057,48180,48232,48241,48266,48335,48377,48511,48530,48556,48603,48617,48642,48685,48913,49038,49148,49192,49325,49394,49423,49454,49464,49473,49517,49565,49593,49617,49640,49642,49660,49710,49746,49778,49817,49905,50016,50055,50065,50140,50145,50342,50361,50452,50534,50551,50628,50659,50692,50937,50961,51009,51119,51149,51224,51271,51612,51760,51778,51806,52008,52152,52236,52349,52493,52554,52686,52876,52933,52970,53082,53291,53782,53992,54031,54210,54239,54443,54543,54635,54735,54763,54796,54885,55154,55554,55579,55740,55859,56163,56676,56881,57134,57330,57522,57631,57808,58053,58119,58172,58320,58794,59165,59833,60212,60497,60912,61012,61323,61610,62201,62886,63107,63137,64204,64317,64489,65849,65975,66033,66115,66178,66224,66336,66384,66402,66465,66527,66556,66873,66957,66965,67019,67088,67147,67161,67230,67485,67644,67763,67841,67912,68055,68198,68281,68473,68509,68593,68730,68825,68867,69058,69304,69398,69410,69620,69694,69740,69775,69822,69860,69883,70013,70060,70094,70127,70190,70278,70288,70311,70389,70630,70762,70771,70810,70912,70965,71014,71121,71125,71175,71187,71219,71269,71288,71307,71335,71353,71380,71394,71421,71528,71592,71614,71638,71768,71809,71813,71856,71970,72007,72052,72065,72145,72240,72292,72477,72645,72716,72736,72741,72800,72880,72903,72948,72996,73136,73203,73300,73397,73429,73495,73527,73613,73693,73877,73916,74049,74143,74325,74498,74529,74605,74620,74783,74956,74981,75037,75076,75109,75127,75218,75221,75262,75291,75390,75445,75476,75764,75903,75909,75975,76095],"pans":[7187,39279],"frontleft":[74424],"circumstances":[3431,9288,10068,10591,14732,20457,21132,21931,27722,31011,37619,41876,43002,47370,48335,72335],"endgroup":[24299,59636],"'set'":[44516],"unityperdraw":[49327],"appeared":[36329],"upper_body":[2127],"conventions":[5223,5901,9803,10387,18531,18624,18950,37052,38679,44832,46511,58466,62833],"organize":[3905,3949,4028,4510,4566,5901,6948,17169,18215,18322,24275,24529,29092,30324,30475,34747,36104,39452,39853,40172,40450,48170,58729,60194,62742,71302,75576,76166],"outline’s":[18995,48667],"storekit":[25920],"nonfunctional":[70761],"left_shoulder":[2127],"frontbaces":[45802],"dragexitedevent":[57564],"0000000000000000e000000000000000":[76516],"++j":[56779],"tree's":[50592,52124,52179,52233],"ppu":[84,51137,51235],"undocumented":[38013,68593],"timelabel":[62363],"dolly":[12294,31100],"om":[19077,66793],"suffering":[43022],"dropdownmenuaction":[56024],"existed":[32270,45293],"house":[26932,31662],"enclosed":[15825,25942,48663,49819,54682],"locally":[3591,3867,3898,6378,6439,10794,11978,25113,25747,25850,25904,28176,38463,54435,66571,67460,67851,69749,69992,70585,70770,71332,71468,72449,72476,73178,74153,74639],"uxmlasset":[57517,62382],"gettargetfulltypename":[19540],"huawei":[53432,53900],"temporal":[11629,37958,72929],"unitystandardutils":[10164],"postprocessallassets":[3835],"foundational":[28975],"monitor's":[29855,34997],"application's":[463,565,783,922,994,1029,1190,1357,1370,1491,3440,3446,3486,11717,13316,21455,22051,23524,25142,28197,33476,33512,36093,36463,67053,67526,67538,67765,72986,73337],"lfwhsudqk0ljk4b0mcwythnvyo1idzie5ekwfuakvgoa62ichvahgiva+een4efs":[69921],"mainsearches":[41466],"rectfieldsnippet":[65110],"rhombus":[9540],"xmax":[52431],"probes":[246,5330,6798,7884,8624,9341,9451,9955,10054,10108,10253,10619,12882,13120,13215,13470,14246,14588,17803,22122,22157,22818,23273,23408,23428,25289,26705,26718,26791,26808,26841,26953,27041,27073,27110,27169,27179,27194,27214,27275,27319,27328,27340,27466,27481,27748,27758,30357,32306,35058,36123,36568,37648,37682,37694,37722,37859,38308,38362,43145,44581,45198,46396,46522,46786,47121,47710,48297,49432,49491,49720,50442,68671,68852,69061,71592,71824,71853,73455],"collectincremental":[33080],"mergerules":[48119],"cropped":[94,4292,11793,33561,39640,68906,69146],"templatepipeline":[38988],"alpha8":[12842,47154],"bidirectional":[14259,59178],"#333308":[63426],"_phong":[47033],"overridable":[42081],"traditionally":[8115,37684],"aggregating":[41183],"entertainment":[23160],"uie":[59536],"cachedir":[66620],"queue":[104,3770,3812,4578,6486,8721,10149,10437,13593,14161,14740,21938,26296,29237,29990,32941,35746,36440,37838,41290,42712,42728,42753,43200,44069,44393,45721,45967,46490,49041,51202,52488,57809,61485,66751,75440,75842,76037],"d_pick":[63466],"data\\unity":[52505],"hoses":[32196],"propertycontainer":[36959,37010],"httpd":[73751],"denotes":[5123,12866,49822,52226,56912],"jpg":[3608,3814,4500,6713,14319,25301,41040,41373,41467,73189,73238,73960],"unfortunate":[52532],"changes":[14,134,196,220,434,498,556,1071,1212,1677,1762,1842,1961,2289,2324,2399,2429,2582,2699,2967,3451,3508,3571,3585,3674,3778,3928,3953,4123,4255,4448,4482,4633,4653,4847,4978,5044,5160,5774,5919,6432,6846,6977,7061,7163,7396,7429,7764,7829,7940,8700,8783,9258,9466,9762,9937,10058,10121,10214,10333,10403,10544,10584,10725,10811,11175,11407,11447,11467,11535,11615,11737,12524,12759,12885,13115,13280,13297,13379,13659,13862,14114,14474,14498,14576,14680,14748,14973,15967,17956,17980,18072,18239,18441,18620,18717,18894,18982,19035,19197,20239,20394,20577,20583,20634,21156,21401,21862,21931,21991,22032,22081,22228,22500,23288,23559,24624,25095,25153,25242,25311,25400,25499,25622,25998,26046,26119,26908,27167,27209,27320,28114,28185,28475,28782,28950,28987,29009,29044,29325,29334,29617,29790,29893,30300,30321,30345,30385,30734,31009,31600,31747,31853,32217,32365,32396,32615,32629,32848,33069,33178,33415,33512,33528,34779,34883,34925,34984,35203,35322,35541,35691,35785,35794,36393,36473,36589,36762,37647,37685,37724,38277,38467,38532,38641,38849,38905,38973,39069,39150,39221,39254,39322,39591,39634,39714,39736,39754,39785,39825,39912,39989,40084,40176,41399,41554,41603,41715,41907,41935,42380,42705,42726,42748,43256,43336,45050,45620,46552,47191,48244,48269,48395,48511,48559,48627,48654,48858,48925,49156,49212,49354,49442,49573,49650,49763,49817,49996,50550,50661,51070,51095,51175,51184,51224,51254,51389,51882,52046,52258,52629,52850,52958,53142,53836,54264,54385,54419,54595,54767,54796,54957,55056,55088,55227,55408,55550,55558,55638,55713,56065,56123,56208,56321,56386,56982,57289,57323,57898,57969,58015,58172,58300,58403,58685,58845,59124,59555,59819,59999,60157,60542,60637,60770,60929,61032,61527,61904,61947,62194,62351,62508,62585,62859,63108,63868,64017,64221,64341,65038,65230,65254,65368,65746,65940,66256,66480,66644,66812,67253,67853,67965,68385,68441,68566,68689,68811,68849,69040,69296,69372,69402,69506,69621,69719,70227,70326,70333,70552,70585,70756,70839,70867,70960,71010,71238,71332,71506,71592,71643,71913,72240,72405,72836,72851,73214,73271,73960,74130,74222,74410,75017,75068,75109,75327,76218],"sin":[10447,20697,24161,25562,45582,45830,61134],"integer":[1430,1873,2009,4749,5634,6062,9273,9457,11844,13022,13206,18493,18615,19111,20237,20788,20993,23942,24985,26496,26646,27158,28871,29105,33286,34219,39347,39490,39988,43762,44108,44267,45074,45770,45851,46021,47608,52248,55740,56592,57901,58083,58858,60375,60780,63744,64808,64914,65244,65537,65552,65889,66151,68872,69107,71970,73556,73931,75553],"getsprite":[48554,51735],"reconnected":[74401],"javaexamples":[1423],"newdata":[59726],"becausereleasemesh":[75803],"falsely":[43183],"unityxrmeshtopology":[75815],"localizedtitle":[67065],"unticked":[72372],"azure":[63512,70042],"gravityweight":[38667],"priority":[104,878,1561,1761,2088,2600,6138,7784,7970,8174,8271,8389,8774,9039,9892,11519,11819,12354,12733,13133,13486,13593,13759,13793,14509,14545,23392,24763,26049,28474,30336,31706,34285,34497,35175,35746,36011,38022,39530,39659,39694,50960,51010,70332,71877,72663,74049,75774],"preseve":[75682],"bleed":[22183,36678],"shows":[536,740,794,969,1044,1277,1304,1433,1505,1585,1622,1886,1952,1999,2293,2379,2423,2465,3279,3304,3699,3725,3851,3926,4480,4522,4578,4820,5024,5284,5693,5826,6266,6293,6723,6859,6937,6947,7146,7368,7700,7937,7986,8843,9518,10018,10096,10135,10345,10493,10659,10937,11311,11462,12305,12520,12746,13603,14289,14355,14720,14787,14832,15702,17948,17987,18230,18339,19385,20593,20630,20716,20767,20894,21631,21640,21725,21837,21904,22029,22136,22235,22626,25072,25123,25353,25399,25573,25683,25878,26110,26606,26669,26726,26900,27211,27507,27536,27655,27924,27996,28537,28762,28914,29374,29413,29646,30043,30050,30154,30489,30509,32878,33104,33435,33498,33588,33844,34159,34573,34935,35068,35562,35856,35998,36054,36281,36464,36613,36694,39332,39472,39792,39908,40279,40918,41498,41842,41928,41986,43216,44245,44688,45100,46128,46551,46831,47163,47179,48168,48915,48988,49220,49340,49428,49513,49638,49735,49821,49916,50060,50307,51274,52013,52227,52320,52547,53056,53882,54400,54508,54887,55227,55363,55824,55874,56103,56636,57430,57602,57684,58229,58586,58662,58998,59841,60094,60185,60520,61515,61573,61689,62215,62761,63049,63106,64207,64343,64652,65988,66100,66239,66675,66939,68535,68555,68896,69134,70182,70677,71619,71950,72774,73215,73264,74592,74760,75205],"spriteatlasdatabase":[15313],"sub":[1836,2001,2037,2260,2360,2427,2549,2629,3520,3732,3959,4805,5022,5128,5290,5727,7187,10010,10249,10497,10633,13499,13629,14342,14584,18080,18224,19128,20863,21061,21332,21385,22089,24956,25225,27491,29821,30046,30063,32078,32458,32636,32665,32730,32847,34677,35381,35677,35719,36091,36696,36791,37018,38717,39398,40783,41259,41316,41375,41500,41559,43737,43808,47237,48215,48239,49150,49648,49656,49665,50881,51812,52224,54434,54553,54580,54643,54741,55509,57933,58557,58659,60649,61532,62038,62054,64210,64449,64640,67041,71324,72511,73190,74210,75439],"projectsettings":[24474,25158,29328,38922,69303,69409,71340],"supportsinstancing":[19749],"cellrect":[52413],"9xr":[23550],"calculatecylinderiterations":[27392],"mergespecfile":[48067],"metal3v2":[12232],"enqueues":[75784],"gitproject":[70478,70636],"clamp":[8431,8829,10480,11960,12271,12392,12581,12837,13212,14097,19263,27447,29637,32866,34322,34446,34534,43193,45244,46470,47952,50351,50730,56924,60932,61035],"pruning":[11623],"androidstore":[66988],"doubles":[13709,36204,42568,42884,42904,68922,69165],"animationoutput":[34026],"tapping":[20460,39813],"bug":[273,4254,6896,10770,12104,18934,22128,25892,30312,31388,50652,66919,68742,68917,69158,69719,70326,70760,70918,71011,73741],"heatmaps":[22382],"resizes":[88,4559,13289,14805,27738,33552,50489,59064,60277],"settings’":[73922],"vehicle":[8065,14951,14979,15857,15891,16811,25526,27335,49560,74415],"second's":[72333],"androidjavaproxy":[1406],"paste":[481,2078,2199,2842,4163,10413,13361,18980,19456,23794,24152,24558,25515,33848,39365,48652,48917,52908,53006,54551,54659,55898,59023,69956,70346,70628,71631,73905],"crashes":[933,1030,1727,11813,12122,12349,21043,25892,27599,30912,34279,52500,52550,66720,67153,67592,68641,74537],"seems":[20181,20612],"recording":[1510,1994,2188,2287,2419,4705,5167,10687,12197,17627,20076,22046,22872,25889,31203,35030,35729,35897,36045,36471,38214,43618,52058,52099],"currentwindow":[49933],"probabilities":[13035],"nearz":[58471,61137],"php":[53660,73924],"deformation":[29765,37899,71790,74192],"itemnames":[2525],"boxed":[11792,33291,33425],"texcoord0":[316,6525,8734,10171,14053,14178,31945,32930,43342,43705,44040,44404,44853,45680,46850,47210,47939],"yesyou":[38154],"rain":[8786],"upcorner":[27409],"hone":[35769],"48b":[29188],"#5f5f5f":[63308],"sxrstats":[75994],"decoding":[269,27131,46522,72497,72610,72660,72714,72736],"stacking":[36549,37953,50057,75176],"stays":[190,15856,26569,27262,33552,36015,36492,36772,45900,57584,71491],"versioncontrolsettings":[15324],"backdrop":[9095,20622,72488],"instanced1":[32065],"rg8ui":[8481],"destinationfile":[48112],"lensflare":[9860,15121],"simulated":[9013,9179,9309,9745,13175,13234,13574,13685,13870,15859,15902,19969,20044,20058,20096,21054,23097,35337,38461,38550,38574,38608,38633,38648,50941,51175,67845,69303,69409,74380,74457,75211,76084],"armor":[41181,55254,67169],"crc":[3262,3343,3351],"pixelated":[13217,37319,43110],"overlapstarget":[56942],"manifests":[1101,1243,3412,23001,24609,30848,31599,66812,69722,70875],"safearray":[72196],"tilemaps":[94,137,9550,14527,14551,16036,37381,37481,51084,51099,51118,51134,51154,51174,51195,51197,51229,51233,51243,51256,51344,51432,51623,51820,51844,51848,51882,66542,68630],"initialization":[1071,2019,2607,4966,6024,6063,6142,8839,10726,17865,18371,20482,21167,27730,29958,30106,30660,30911,34631,36816,38463,39160,52566,53363,53954,54560,56681,57750,58006,61328,63219,64322,66971,67022,67063,67233,67292,67437,67542,67555,67592,67625,67746,67827,67849,68958,69205,72236,73102,74218,74679,75108,75874,75956],"elif":[33870,42979,72651],"nummips":[50149],"handle":[11,511,717,871,1030,2279,2413,2702,3565,4445,4879,5352,5686,5759,5764,7673,8128,8342,9642,12397,12815,13149,13430,13851,15889,17972,18376,19334,19338,19352,19374,19657,20457,20579,21424,21529,22203,23053,23682,24505,25182,25667,25721,25760,25762,25822,26042,26126,26160,26327,26537,27931,28360,28457,28963,29550,29678,29926,30047,30362,30905,33166,33447,33624,34222,34753,34794,35066,36933,37174,37619,37706,38289,38347,38770,39208,39747,39984,40022,40055,40112,40453,43655,43801,43957,45013,45090,45200,45564,46717,47808,48162,49512,49656,50322,51224,51254,52243,52756,53756,54223,54732,55105,55512,55554,56709,57295,57851,58022,59469,59614,59868,60209,60518,61484,61812,62068,62110,62488,62581,62649,62793,63369,64264,64955,65941,65999,66067,66551,66645,67423,68512,70504,71775,72997,73029,73669,74389,75070,75429,75506,75754,75934,76004,76120],"rearleft":[74426],"pointercaptureoutevent":[55648,56936,59719],"runningonuithread":[74745],"hingejoint":[9721,15080],"crash":[936,1031,1748,4720,8437,12121,15850,24983,25891,26034,26041,26294,27793,32702,52513,52599,53768,66918,67953,73615,74546,74610],"adapting":[52749,75322],"unity_apply_fog":[1698,33003,47229],"begindrag":[40025,40115],"hood":[1903,4908,6024,6145,27478,44087,49565,50392],"tough":[40746],"uselocalserver":[55326],"elements'":[54435,55632],"hinstance":[66896],"_img":[68140],"rods":[35254],"localdumps":[74573],"registerstatsource":[76006],"collaboratively":[29882],"recipe":[20934,40616,66043],"neck":[29903,71785],"advertisements":[53764],"mouseeventtestruntime":[60472],"app’s":[12093,34374,52891,67012,67482],"they'll":[22036],"gridlayout":[15348,51438,51528,51559,51587],"decompression_fallback":[73937],"cultureinfo":[36896],"leaving":[3715,5970,6302,7832,8565,12607,14816,14868,18979,22341,29898,32911,48651,60424,66608,70398],"70px":[61254],"colormaterial":[44427],"getalldependencies":[3422],"“contribute":[6806],"downloadhandlerbuffer":[68080,68324,68383,68440],"polling":[67551],"footsteps":[4773,5059,6318,7487],"degraded":[6126,60635],"ns":[2920],"uta_agent_protobuf_cache_bytes_out":[66671],"stream":[3247,3292,5037,5186,6138,7174,7685,12649,12948,16330,21112,27699,27786,31996,32188,32372,32918,33166,33500,35424,35720,35989,36512,50018,50067,50145,50965,51017,68157,68265,68439,72731,73082,73352,73720],"_tsanimblending":[31929],"requiredmemberattribute":[28594],"drafts":[4168,4211,4474],"joins":[13648,58497],"#ffa500":[63612],"asset":[56,138,430,473,490,508,523,534,867,913,967,1311,1336,1567,1809,1867,1940,1970,1997,2212,2225,2238,2261,2281,2366,2423,2465,2537,2611,2689,2769,3020,3226,3247,3292,3396,3455,3482,3514,3578,3675,3720,3771,3838,3869,3878,3896,3906,3948,3974,4024,4049,4155,4169,4186,4203,4216,4230,4254,4354,4358,4390,4404,4412,4421,4440,4448,4470,4484,4493,4499,4518,4650,4763,4793,4805,5019,5154,5337,5838,5913,5918,6055,6141,6377,6438,6691,6829,6955,7003,7358,7427,7469,7826,7872,7879,8419,8651,8788,9074,9195,9263,9434,9591,9842,9891,9907,9985,10347,10409,10487,10564,10609,10653,10695,11077,11131,11313,11650,12206,12303,12400,12768,12879,13223,13310,13351,13382,13705,13897,13945,14020,14080,14233,14927,14933,14938,15844,15998,16060,16470,16615,16775,17045,17133,17928,17965,18064,18258,18347,18366,18432,18720,18759,18951,19018,19089,19129,19454,20393,20583,20627,20657,21031,21316,21394,21445,21710,22074,22127,22478,23450,23512,24474,24614,24634,24697,25043,25099,25162,25199,25309,25350,25399,25543,25952,26669,26796,26824,26992,27121,27166,27186,27213,27265,27678,27720,28175,28848,28867,28961,29327,29363,29397,29413,29761,29784,29922,30035,30198,30207,30897,30922,31046,31590,31624,33094,33476,33784,33882,34195,34408,34491,34536,34861,34882,34912,34923,34954,34968,35191,35365,35764,35881,36004,36247,36525,36586,36703,37321,37418,37668,37812,38441,38714,38841,38918,38948,39006,39027,39085,39117,39218,39310,40153,40184,40452,40681,40699,40774,40794,40911,41202,41331,41359,41462,41490,41609,41679,41711,41838,41955,42020,42320,42596,42715,42749,42935,42989,43036,43123,43136,43335,44208,45046,45180,45398,47184,48184,48225,48242,48306,48354,48414,48573,48607,48622,48861,48893,48908,48989,49176,49335,49394,49746,49778,50003,50353,50401,50582,50620,50660,50689,50712,50743,50770,50783,50796,50809,50822,50835,50860,51008,51088,51129,51183,51237,51353,51454,51607,51696,51815,51819,51857,51882,52174,52222,52349,52691,52739,52930,53902,54419,54577,54603,54680,54741,54792,54794,54891,54911,55011,55087,55191,55299,55309,55565,55820,55867,57206,57337,57745,58110,58266,58273,58369,58434,58584,58652,58793,59373,59529,60163,60615,60649,61294,61299,61455,61488,61519,61561,61897,61900,61920,61972,61995,62015,62048,62483,62524,63064,63250,63765,64174,64260,64549,64767,65694,65769,65875,65911,65966,66555,67098,67690,68039,68049,68505,68531,68599,68700,68852,69061,69397,69501,69670,69694,69736,69755,69806,70186,70257,70360,71032,71127,71193,71204,71215,71260,71300,71338,71390,71422,71449,71465,71500,71531,71594,71689,71851,71915,72246,72281,72402,72464,72499,72732,72810,73022,73179,73205,73382,73445,73618,73687,73899,74143,74305,74638,74896,74911,75354],"“quitting”":[20163],"favorites":[3999,4037,36697],"tilemap":[104,14468,14497,14532,15355,16017,16032,16727,22290,30936,30990,31021,31395,35011,37373,37481,37500,38164,51080,51103,51119,51131,51156,51162,51177,51196,51230,51244,51257,51344,51427,51621,51710,51753,51785,51804,51813,51820,51840,51849,51867,66550,68628],"getinstances":[76063,76301],"let’s":[3242,3419,6831,49429,73960],"direct3d":[14012,21085,29965,34209,36172,38425,43476,43936,44055,44270,44427,44832,45201,45213,45735],"unity_sample_shadow":[43984],"onserverdisconnect":[66269],"testing":[423,617,874,1322,1750,2160,3304,5017,6368,6471,9058,11050,11176,17000,17370,17627,17773,17803,19637,19647,21049,23011,28165,31250,31365,31385,31765,33498,34987,35248,37340,38778,40363,40654,42679,43375,43565,43654,44360,45577,45721,46766,47984,50650,52828,53013,53127,53357,53685,54016,66099,66358,66390,66964,67002,67061,67237,67263,67515,67812,67844,68807,68918,69159,70405,70756,70769,71633,71790,72225,72475,72787,72876,73404,73916,74127,74163,74380,74629,74814,74846],"jh":[26385],"‘none’":[26790],"slotworldspace":[56969],"bindstreamproperty":[68582],"transitioncancelevent":[62409,62597],"verticalscrollbar":[23992,59713],"verifies":[20233,28281,60647,66635],"decodedepthnormal":[44072],"findchild":[62778],"superimpose":[2134],"examplenamedpass":[44605,47165],"namefileidpairs":[48434],"waitforrenderthread":[35720],"fetchstringhandler":[2568],"builds":[456,478,557,579,620,701,907,962,1104,1230,1240,1352,1557,1832,2836,3248,3294,3315,3452,3721,4565,4654,4959,5325,5355,5499,5775,6096,6348,6394,6470,6801,7391,7673,8434,9104,9265,10273,10564,11667,11871,12314,12437,14610,15726,17152,18131,18426,19129,19138,19196,19280,20047,20432,21006,21023,21872,23196,23484,24600,24620,24944,25309,25549,25747,25832,25846,25900,26045,26072,26145,26316,26689,27650,27674,28084,28154,28561,28607,29192,30907,33782,34591,35139,35280,35881,35941,36155,36227,36785,37267,37473,38274,38869,40284,40589,41395,41911,41922,42960,44065,48177,48556,48585,48680,48856,49103,49668,49737,49763,50142,50397,52530,52684,52737,52749,52870,53375,53775,54018,56986,58776,60637,62757,67148,67401,67847,68045,68900,69138,71059,72866,73025,73118,73153,73158,73212,73289,73320,73379,73385,73417,73459,73707,73897,74003,74042,74197,74612,74620,74762,74830,74837,74944,75027,75079,75202,75942],"restricting":[36351,66572],"udpfilepath":[53933],"optimal":[456,1472,2063,3470,6150,7020,10572,18401,20327,29122,29712,30372,31641,33099,35942,36680,39963,43990,48676,49355,50006,52250,63132,68762,71760,72635,75439],"gamasutra":[30167],"streamable":[12598],"corruption":[3340,52528,74152],"disable_usage_stats":[66608],"inputdevicematcher":[75719],"myassemblyname":[3059],"mat'":[66684],"infoany":[53721],"physically":[234,2063,4964,6688,6792,6908,8203,9973,13267,15864,17118,21175,22855,23302,24598,24777,28876,29528,31886,32137,33022,35826,36636,38043,42802,42810,46732,49640,72762,76141],"frontfaces":[41784],"toxicity":[17412],"getassemblydefinitionplatforms":[3039],"extra":[680,1880,2131,2275,2360,3609,4535,5965,7167,9637,10262,10572,11307,11606,12221,13056,13182,14224,14599,16020,18226,20833,21135,21319,21589,22466,24747,25607,26050,26074,26206,26719,27089,29114,29731,29904,30053,31726,31798,31920,32311,32775,33006,34939,36203,36694,37385,37500,37668,38274,39296,39579,39735,39798,40133,40274,43173,44094,44698,45151,46396,46760,48335,48599,49495,49560,51035,52351,52624,52754,54031,55512,58111,58403,64468,65990,66193,66313,67014,67169,70405,70734,71645,72520,73450,73621,75465],"perrendererdata":[45100],"synthesize":[57993,58024],"enterprise":[2999,12275,12647,15902,74201,74366],"deleting":[1961,3936,3963,4193,22057,25597,26927,35126,41375,41566,43297,48625,48701,51147,52995,53233,54553,68601,70259],"meshgenerationstatus":[75868],"processing":[1675,1967,2834,3674,3823,4015,4532,4705,4797,4820,4874,5038,5156,6038,6950,7620,7920,8879,9878,10009,10579,11527,11598,11764,12881,13991,14238,14527,14796,14878,16487,16981,18105,19266,21030,21358,22093,22740,23420,23594,23644,24492,25175,25331,26043,26370,26482,26536,26946,27540,29126,29277,29731,30077,30370,31447,32775,34204,34839,35268,35711,36125,36181,36335,36523,36597,37424,37684,37712,37724,38032,38244,38346,38427,39513,39530,41838,42185,43370,44051,44688,44838,45568,45851,50796,50947,50969,52044,52754,53456,57809,65687,66667,67586,68196,68961,69208,72774,72824,73321,74268,74749,75164,75445,75793,76037],"rwtextures":[8443,44906,46816,71751],"crunched":[14323],"rgbaushort":[8477],"nougat":[11895],"m_input":[56615,61777],"initiating":[67333],"postdispatch":[57962],"evidence":[6213],"querysupportedtrackingoriginmodes":[75596],"customer":[244,4104,4175,4366,4391,4440,4485,4493,28609,53746,66909,69987],"yesno":[37882],"treeviewexamples":[52265],"competing":[23439,26355,29717,38497],"clipped":[6760,8078,14540,24325,30525,31719],"symmetrically":[30141],"vehicles":[14943,16807,23119,30946,74416],"–":[5919,6037,6139,8309,17412,33622,34924],"#ececec":[63270],"xxxxxxxxxxxxx":[28629],"setvertices":[298],"bee":[40365,41526],"diagnosing":[22057],"'":[1797,2739,13988,19410,34164,35556,35866,36991,40888,41221,50051,51294,52076,52609,53107,53886,55690,57475,60466,60601,63722,65338,66680,69607,69982,70047,70383,73959,76129],"60hz":[26000,29663],"“multipass”":[68799],"transfer_shadow":[47811],"tags":[124,4202,4264,4368,4419,7140,8721,9342,10014,10149,13596,13842,14161,17642,18325,23289,28925,29142,29503,31883,32941,38919,42201,42336,42385,42630,43422,44032,44393,44767,44783,45184,45630,45940,45958,46146,46539,46841,47199,48987,49817,50287,54151,55857,58652,61442,61920,61966,62004,63989,65268,65758,68514,70708,75617,76069],"tanktrailparticlecount":[35416,35552],"record_audio":[1265,1390],"layerculldistances":[8086,30352],"en":[5992,34362,53602,66798,69790,69857,72191,72884],"myrandomwritetexture":[44910],"preempt":[6139],"hearing":[5119,7795],"oncheckobserver":[10849],"examining":[2198,14881,25068,47193],"maya's":[71797],"quickly":[518,889,4810,5016,5049,5080,5221,6803,7779,7981,9180,9793,9987,11160,11508,11589,13238,13423,13665,13692,13876,14076,15813,16091,17126,17759,17985,18226,18906,20336,21520,21692,22024,22107,22932,23466,24519,25070,25177,25498,25733,26572,28880,29267,30154,31720,31745,32115,32849,33088,33424,34820,34987,35794,36625,36684,37639,37743,38839,39308,39774,41407,42456,50346,50544,50553,50956,51190,52046,54180,54436,58446,61328,61556,64320,66343,66355,66396,66457,67182,68527,74893,75803],"inserting":[14004,51886],"urp":[138,5694,5853,6833,6866,8015,8807,9466,9864,13123,13540,13911,17000,17110,17126,18241,18787,19292,20249,20385,20407,20441,21958,23248,23385,24503,28842,29459,34850,37411,37484,37516,37590,37749,38249,38265,40150,40168,41827,41939,41963,42314,42387,42600,42694,42718,42734,42759,42989,43079,43123,43136,43335,43490,43501,43510,43559,43568,43657,43686,43731,43803,44099,44136,44168,44201,44322,44340,44379,44424,44593,44629,44673,44761,44790,45057,45186,45263,45392,45525,45854,45934,45964,46140,46507,46531,46714,46821,47159,47954,47987,48025,48940,49148,49169,49175,49281,49313,49673,50362,68527,68571,69345,69449,72803,72809,72816,74264,75159],"onboarding":[53173],"readobject":[33500],"_input":[39609],"versionsinfo":[74308],"concatenating":[33169],"#0000ff":[62014,63517],"stack":[861,936,1706,5033,6155,11518,11610,11950,12388,12577,16883,16984,18118,19201,23029,24506,24915,25724,25844,26041,26127,26253,28963,29160,33104,33396,33424,33455,33767,34435,34852,35141,35729,35896,36042,36188,36497,38237,49389,50003,50023,50057,50071,50132,50145,52556,73188,73300,73631,73697,74151,74548,74615,75413,75755],"onstopserver":[66290],"ipads":[2839,12103,23550],"assetpathtoguid":[3087],"m":[3434,5393,5537,6705,7680,20364,27130,33669,34555,34735,36340,41408,48275,51278,51649,55979,62027,66342,66367,71534,74201,75618],"splatmaps":[50647],"osxkeychain":[70504],"guid":[3086,3640,3729,7364,7429,25089,25107,28447,29007,48128,48423,57190,58824,59062,60184,66678,68611,69997,71016,76516],"voffset":[62042],"maintexst":[10181,14182,31957,32975,47218],"aim":[6285,6957,9177,9307,10393,12865,13174,13869,14999,18157,30047,31028,39964,75099],"_lightcolor":[47118],"acceptably":[40175],"numindices":[61124],"deep":[564,877,6135,6368,6397,6475,8197,8310,9484,18318,19283,19315,19335,19350,19363,19375,21110,25728,28168,28240,28258,35612,35797,36100,36496,36736,37949,67056,67528,72080,73176,74629,74791,74888,75913],"initialise":[49892,66115],"semantic":[21991,22993,27039,40346,45698,46808,47300,47904,69719,70814,70877,70960,71010],"ma0gcsqgsib3dqebaquaa4ibdwawggekaoibaqctdhxo5eoaxlgh87dg+xespa7c":[69931],"fixedjoint2d":[9194,13160,15216],"ipointerenterhandler":[21200,49887],"clustering":[22143,71821,72759],"kformatrgba_dxt3_srgb":[50098],"xib":[6705,12117,34565,49760],"cgprogram":[6518,8489,8723,8916,10155,14045,14165,15109,23301,28927,29505,31885,32947,38283,42603,43424,43908,44034,44399,44917,45599,45676,46147,46540,46754,46843,47202,47916],"asmdef":[3761,3779,6694,18623,18694,18824,19241,34427,34525,38771,71026],"domain":[3763,3780,4879,6133,12640,17982,17991,18747,20115,21312,21765,35139,35888,36739,36754,36855,39168,45011,45454,46825,54454,59191,62831,65700,66457,68958,69205,69729,69892,70813,70945,71370,71754,73669,74566],"shortcuts":[2453,2526,9027,19080,20616,23677,24576,25389,25492,34466,36714,39295,41421,41598,43207,44570,50631,51273,51373,55894,59733,66947,68047,71346,74229],"toolset":[17524,17591,50648],"tn2151":[52599],"samplecmplevelzero":[45249],"myapp":[23502],"anchor’s":[7335],"deactivate":[229,6152,7673,19037,23444,24868,29834,34339,34890,34955,35763,36538,56477,59630,61794,71851,75242],"kformatr8g8b8_unorm":[50111],"qooapp":[53914],"resample":[1894,7015],"challenging":[36762],"loadlevel":[23788],"unetencryptionlib_safemaxpacketsize":[66155],"very":[253,698,1886,1903,1996,2172,2245,2439,3731,4070,4573,4819,5040,5260,5945,6094,6146,6725,6811,6858,7645,9013,9260,9311,9856,9966,11312,11508,11602,12935,13001,13096,13252,13961,14295,14338,14581,14684,14775,14965,15844,16005,18233,18357,18575,19512,20116,20810,21550,21971,21997,22203,22812,23780,24215,24300,24489,24640,25203,25284,25496,26669,26848,27031,27296,29128,29245,29551,29614,30142,30175,30356,31758,31797,31856,31985,32112,32136,32360,32651,33599,33615,35315,36638,36715,37654,37668,38292,38354,38403,38547,38574,38625,38668,38841,39138,39313,41836,42308,42816,42856,42931,42946,43023,43156,43193,43950,45575,46143,47232,48372,48593,48988,49465,49497,49511,49518,49565,49607,49630,49655,50642,50939,52099,52174,52250,52566,63242,66194,66251,68347,68610,71874,72243,72344,72394,74454,75068,75755],"charactername":[54379,59381],"spectra":[4980],"property’s":[13768,33367],"dstalpha":[43770],"mice":[680,717,25335],"facts":[29717],"decodes":[270,4737,5186,35988,43883,68130,68279,68498,74977],"areascope":[59593],"londoncontent":[57153],"memorygfx":[36237],"contentsizefitter":[39469],"fuzzymatch":[2659],"resizing":[11717,14814,18575,34258,34339,34465,35765,39382,39467,54717,59165,59868,60637,64752,65986,73614],"m_openparameterid":[24811],"backgroundmediaplayback":[12666],"enable_input_system":[33839],"stereoscopic":[12358,34292],"validscene":[19411],"legal":[234,3057,4170,18719,18729,23134,40063,40086,50342],"environmental":[5046,11074,11466,18404,26783,26852,34930,37704],"declares":[886,1193,1204,1375,8439,14033,20264,23258,23798,28496,34903,42131,43922,43983,44688,45016,45121,45210,46002,47947,49356,58077,63667,68998,69249,72231],"duration":[1883,8989,10369,12296,14560,14729,25075,26028,30378,32152,34194,35671,35714,36018,36054,39239,39825,49767,51989,61852,62341,62564,62594,62669,62836,75609,76319],"calculatelayoutinputhorizontal":[54273],"hardcoding":[39887],"row":[4078,4489,8617,9275,9772,11425,11588,12866,18168,23235,23940,26611,32678,33656,35380,35641,36087,36449,39545,43245,47063,48373,48586,49460,51156,51915,52243,53598,54319,56836,57092,57158,59305,59895,61391,62473,62665,63253,64092,64242,64973,64986,65194,65777,69333,69439],"cool":[31760],"doubling":[6317,9961,51138,60649],"s_graphics":[29938],"permit":[67237,67862,68284,68309],"timeunit":[62986],"'mygameobject'":[73574],"adapt":[2268,2392,6036,8496,14789,16470,24768,26716,31025,34653,39444,56592,66812,66864,66883,66913],"slot_row":[56870],"getassemblies":[40382],"newin20173":[1876,8370,10599,14300,21442,21561,23424,27163,32913,42806,67535,72535],"ddx":[45501,50691,73014],"bending":[8285,50471,50611],"product":[308,742,796,2835,2956,4082,4286,4357,11674,12595,18513,22862,26072,27801,35806,37548,43047,44091,45291,46574,47489,49771,52590,52688,52871,52965,53350,53763,53951,54024,64745,66992,67003,67023,67062,67073,67149,67161,67234,67276,67287,67332,67334,67386,67548,67579,67673,67719,67784,67850,71468,72332,72914,73929,74940,75520],"myarray":[13033,73546],"unityxrindexformat":[75813],"price":[3975,4041,4082,4249,4354,4450,40775,52830,52969,53130,53326,53975,54038,67113,67212,67247,67736,67873],"declare":[886,1200,1285,1354,1371,1495,1679,6063,6208,9382,9653,12663,14032,18269,20247,23258,23835,24078,24195,26144,28511,29806,30008,34607,34664,34693,39941,40208,41896,42049,42116,42432,42951,43997,44278,44502,44682,44876,45121,45694,46513,47067,47932,49327,55615,57632,58825,62112,63986,65865,67012,67218,67880,68996,69247,70572,70586,72204,72242,75549],"editability":[72434],"enable_internal_profiler":[26031],"previewtype":[32941,45972],"udpsandbox":[53909],"chromecast":[701],"prismatic":[7251,33604],"products":[4027,25921,48223,50344,52824,52872,52921,52950,53132,53346,53708,53959,53989,54025,66965,67006,67019,67063,67072,67160,67230,67261,67286,67499,67541,67547,67579,67597,67624,67677,67722,67785,67841,70952],"etc_rgb4":[48732],"mynativearray":[26467],"hlslsupport":[1704,43376,43914,43959,45042],"selfillumparallaxdiffuse":[42579],"galaxy":[67661],"__cone__":[32407],"ipados":[25738,50192],"damage":[9718,19005,56159],"psize":[44893],"false'":[53107],"propagation":[6149,7549,7561,38768,55987,57816,57852,58021,58193,60497,61490,62114,62600],"argb2101010":[8455,38361],"onsetupfailed":[67553],"eyjyzwfsx2dyb3vwcyi6wyjwyxnjywxsil0sim5hbwuioijwyxnjywxsiiwiz3jvdxbzijpbin":[70035],"contextualmenudemo":[55998],"localeexample":[1475],"deletes":[3859,9052,20647,25526,27845,29237,32862,33381,35126,40802,41302,48369,52229,54553,66465,71424],"lowlevel":[2900,5359,5503,5741,5779,26133],"farplane":[47087],"#40e0d0":[63649],"wnd":[55388,55683,55763,55836,56006,56237,56295,56363,56459,56822,58242,59043,60447,60583,60735,60862,61215,61698,62143,62374,62520,62698,65829],"darkviolet":[63547],"namespace1":[66723],"“bounds":[10503],"_selftexture3d":[8967],"trial":[234,15844,38498,52189,67170,67733],"rigging":[1931,16117,22525,31033,31404,71766],"abrupt":[32217,50550],"s":[2037,2562,3911,4005,4354,4915,5226,5712,6145,6829,7679,7723,10093,11021,11381,11681,12942,15844,17803,18738,22029,23695,25111,25317,25458,27419,28071,28955,28990,29060,30198,30396,30487,33669,38492,39226,39284,39363,39612,41192,43818,46514,46560,49203,50200,50341,51124,51277,53467,54422,55189,58717,62031,62422,62859,66781,67056,67177,67528,67787,67911,68153,68550,68754,69244,70497,71150,71975,75618],"rotatearound":[12986,37291],"onpurchaseclicked":[67337],"uninstall":[511,21024,25463,41645,50180,52535,69513,71121,72189],"comprehensive":[26688,30346,42809,66802,68614,72663,72881],"myitem":[65424],"convincingly":[13120,25623,32343],"oxygen":[31745],"output":[409,610,962,1234,1255,1331,1570,1679,1745,3243,3321,3750,4584,4737,4796,4867,4915,5026,5084,5491,5497,5735,5802,6597,6950,7434,7454,7545,7557,7565,7572,7582,7619,7663,7700,7712,7735,7765,7775,8051,8412,9256,9999,10575,11606,11735,12198,12472,13228,13961,14876,14968,16487,17077,18136,18384,19077,19310,21035,21700,22119,22127,22582,23257,24493,25099,25258,25311,25896,25912,25981,26485,27052,27158,27512,27786,28602,28681,28719,33304,33909,34158,34188,34214,34499,35116,36569,37012,37936,38244,38728,40482,41200,43345,43571,43654,43727,44808,44891,45662,46295,46721,47307,48092,48550,48556,49398,50006,52771,54452,55675,60483,66621,68926,69169,70047,70917,71042,71724,72342,73246,73389,73952,74202,75424,75973],"_static":[27329],"assemblies":[2700,3065,3571,3810,4510,7366,11875,12182,12369,12557,18018,18623,18720,18844,18914,19222,20178,20224,21029,22703,24960,26077,28263,28463,30861,34308,34394,34513,34603,34638,38735,40172,40440,49770,52673,66464,68637,69008,69260,70572,71016,71661,72132,72145,72869,73416,74588,74839],"doesn't":[234,466,475,526,554,617,842,889,1010,1038,1107,1163,1200,1227,1239,1380,1497,1534,1746,1761,1840,2055,2089,2209,3300,3315,3508,3865,3957,4357,4391,4566,4738,4794,4960,5160,5350,5498,5721,5736,5800,5999,6468,6792,6896,7017,7496,7931,9345,10384,10575,10609,11521,11661,11733,12293,12398,13166,13684,14313,14695,14851,15816,15852,16564,18130,18310,18536,18720,18795,18819,18894,18917,19096,19783,19987,20009,20050,20072,20239,20419,20660,20905,21054,21532,21688,21736,21862,21865,21962,21991,22301,23257,23483,23726,24618,24897,25343,25733,25747,25843,25881,25904,26025,26222,26258,26597,26800,26925,27267,27506,27553,27613,28251,28281,28354,28437,28561,28685,28723,28777,28874,29126,29464,29663,29736,30110,30141,30375,30893,31007,32263,33069,33074,33239,33394,33400,33435,33449,33494,33828,33898,34379,34482,34995,35888,36235,36331,36759,36998,37259,37286,37642,38330,38352,38617,39137,39257,39416,39797,39872,40555,41359,41912,42991,43482,44234,44557,45103,45720,48181,49338,49398,49669,49763,49840,50072,50094,50156,50181,50534,50651,50921,51204,52046,52179,52546,53007,53323,53756,53883,53998,54258,54423,54547,54657,54706,55508,56101,56676,57694,57829,57966,58089,58176,58375,59133,59720,59749,59855,60417,60495,60775,61186,61420,61490,61559,61907,62111,62193,62758,62884,63082,63221,63689,63742,63836,63968,64140,64305,64456,65133,65881,66043,66742,66827,66861,66907,68069,68854,69063,69664,69694,69834,69861,70069,70136,70332,70356,70586,70756,70770,70823,70871,70984,71018,71121,71176,71216,71291,71396,71423,71552,71969,72296,72635,72942,72986,73025,73029,73121,73208,73263,73290,73352,73442,73480,73499,73619,73662,73667,73896,74038,74457,74535,74725,74776,74867,74929,75109,75187,75444,75741,75907,75983,76203],"csc":[19031,20190,71681],"secondhandle":[26396],"we’re":[2956,3242,72914],"speeded":[52046],"inversesquared":[36636],"dash":[64342,71941],"#if":[4654,6102,7374,33867,34624,39947,41800,42432,43955,44539,44989,73963],"shader":[118,316,1673,3318,3466,3506,3625,3768,3806,4568,5269,5351,5601,5718,5856,6061,6498,6513,6688,6708,6896,7909,8080,8401,8710,8786,9126,9225,9286,9448,9675,9905,10110,10215,10383,10414,11923,12251,12357,13134,13350,13430,13549,13770,13799,13911,14009,14153,14348,14577,15071,16510,17110,17118,17535,18764,19054,19227,20237,20423,20706,21075,21262,21529,21694,21846,22883,23246,23389,23542,23619,24598,25095,25267,26788,27039,27081,27103,27134,27469,27549,27591,28061,28846,28874,28918,28961,29439,29462,29484,29784,29995,30292,30334,30364,30993,31765,31866,32282,32459,32738,32915,34212,34291,34413,34518,36360,37504,37658,37688,37958,38282,38320,38336,38349,38396,38430,38871,40472,40921,41160,41346,41751,41786,41828,41833,41876,41918,41934,41943,41992,42007,42022,42043,42108,42181,42231,42236,42241,42248,42253,42260,42291,42296,42301,42306,42310,42349,42352,42405,42424,42434,42439,42445,42454,42461,42465,42509,42514,42520,42526,42531,42536,42541,42545,42576,42581,42586,42591,42595,42666,42689,42691,42715,42731,42756,42781,42808,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42874,42894,42923,42929,42933,42945,43002,43015,43080,43086,43101,43193,43353,43493,43508,43563,43566,43654,43684,43727,43852,43869,43906,43933,44058,44116,44134,44180,44205,44228,44306,44320,44338,44359,44390,44422,44501,44590,44641,44660,44671,44755,44785,44839,44978,45044,45120,45175,45184,45206,45261,45385,45419,45445,45520,45563,45597,45618,45660,45838,45851,45930,45960,46136,46508,46527,46715,46822,47066,47156,47175,47904,47966,48004,48037,48290,48617,48981,49148,49309,49430,49455,49457,49536,49567,49592,49608,49626,49635,49686,49731,50015,50018,50071,50077,50143,50390,50596,50698,50982,51070,52184,68995,69246,71751,71865,72508,72995,73446,74252,75068,75182],"scene's":[9855,20288,22107,22953,26801,26908,27187,27224,27272,38980,39033,42218,42777,49438,68563,72770],"manage":[475,508,1003,1169,1355,1951,3428,3446,3908,3953,4050,4223,4377,4516,4566,5879,6052,6143,6922,7105,9386,10708,10984,11175,11357,11406,11525,11597,12768,13347,13616,13962,15884,16527,17240,17326,17342,18044,18505,19443,19639,20101,21183,22100,22125,22561,24790,26688,26699,27917,28320,28350,28603,28947,29882,30382,30444,30486,30512,30833,31600,31642,32115,33075,33426,33449,33612,33760,33891,34749,37270,37724,38500,39182,40359,40538,41703,41717,43208,45616,48893,49780,52857,52968,53297,53871,54002,54388,54632,54748,54795,54891,54901,56078,58332,58652,60211,61908,61958,62062,63681,64887,65176,65973,66232,66811,66836,66867,66892,66903,66950,67182,67669,67880,67968,68046,70801,70976,71985,72385,72616,73029,73245,73367,74981,75807,75969,76309],"highvalue":[57071,65153,65227,65251],"_raytracing":[44555],"grid's":[51235],"aspect":[689,1211,1592,5038,6762,8039,8125,8621,11743,12109,12288,12472,12858,14808,14866,18083,21972,22041,22731,24771,32389,33529,39370,39416,39598,50035,50138,52722,54252,54375,72490],"populating":[30062,67081],"gimbal":[2356,13001,37281],"baseslider":[55434],"inclusive":[12803,40348,45076],"ztest":[21746,42679,43644,47983],"downloadhandlertexture":[16795,68082,68351],"180f":[51690,62311],"community":[2954,4025,4148,4301,6079,22559,35087,40664,72912,73020],"controller's":[8196,22482,54210,75677],"subsidiary":[69705,69792],"spine":[18187,71784],"transbumpeddiffuse":[42824],"muting":[7680],"submission":[4054,4170,4356,4436,4467,26096,34377,50197,53147,53309,54007,67871,72876,74846,75429,75549],"destructible_tank_editor":[55271],"vs":[19,6106,7625,21765,24274,25203,29134,29714,33574,34191,39106,40666,40809,43219,45200,47805,49634,62752,66383,71647,72933,74219,74551,75855],"getaxis":[2024,2072,6747,9823,10897,18485,21158,52761,74438,76315],"extends":[746,784,1855,2441,9222,13573,14950,14999,20812,22985,25238,26491,29423,49069,52268,62112,72333],"sampling":[2175,4932,5948,9453,9998,10138,12881,13216,19283,21347,22924,23449,26044,27132,27519,27549,27583,29128,29663,32467,34362,36590,36678,37704,37881,43376,43897,43981,44076,44133,44841,45206,45477,45613,49622,50007,50128,50155,50659,50686,58306,58407,58440,68945,69189,74342],"xrdepthsubsystem":[74382],"meeting":[18729],"knuckle":[76296],"takahashi’s":[67756],"customise":[6836,13854,39622,66033,71861],"accumulates":[26885],"stereoeyeindexcolor":[43417],"speakermode":[7765],"md":[6712,13955,18681,18689,18730,18934,70830],"unity_sample_tex2d":[44007,45234],"underwater":[5052,38056,41893],"maintain":[2213,2234,6150,6958,7178,9013,9177,9307,9748,11600,13159,13576,13666,13678,13878,14979,15839,17412,20438,22307,25928,26050,26569,26590,28947,30327,33332,33408,35920,36504,39964,41290,41812,41894,50579,51999,52954,53981,54795,62742,64337,64458,66261,66365,67624,70903,75439],"reimport":[3595,3797,5939,25101,38797,40503,40804,41304,41428,48414,66555],"method":[369,450,567,614,737,936,1032,1272,1343,1408,1502,1665,1706,2048,2277,2411,3249,3293,3348,3466,3489,3538,3602,3690,3725,3994,4543,4966,5352,5619,5774,6000,6062,6135,6373,6433,6477,7045,7173,7481,7878,8383,9345,9830,9893,10242,10709,11189,11611,11951,12403,12936,13058,13116,13251,13263,13307,13735,18225,18254,18500,18596,19027,19040,19086,19204,19470,20008,20155,20378,20402,21031,21391,21536,21613,21729,22464,23377,24730,24920,24979,25030,25504,25622,25682,25847,26249,26263,26288,26376,26496,26686,26698,26722,26988,27468,27858,27924,27944,28171,28496,28605,28753,28869,29561,29793,29854,30337,30528,30899,31624,31861,32259,32775,33146,33395,33424,33474,33524,33945,34164,34185,34687,35429,35565,35612,35728,35888,36047,36689,36829,36982,37261,37270,37286,37627,38977,38988,39205,39301,40055,40155,40453,40561,40768,41200,42750,42766,43354,48366,48532,48910,49043,49390,49449,49638,49668,49966,50004,50148,51009,51084,51129,51427,51588,51966,52250,52496,52553,52787,53030,53103,53303,53688,53756,53960,53999,55088,55374,55509,55547,55577,55731,55920,56146,56219,56280,56325,56428,56610,56692,56911,57233,57455,57694,57834,57888,58074,58137,58444,58466,58622,58809,59036,60199,60324,60643,60906,61006,61326,61575,61663,61812,62112,62528,62786,63199,65420,65988,66236,66506,66656,66846,67012,67294,67334,67351,67537,67543,67548,67566,67572,67625,67723,67758,68254,68645,69014,69266,69518,69679,69768,69808,69869,70176,70710,70920,71388,71491,71669,72012,73026,73081,73190,73287,73318,73573,73752,73937,74389,74557,74634,74735,74793,75192,75259,75435,75532,75747,75934,75987,75992,76200],"setkeys":[57060],"dotnet":[72191],"oes_texture_half_float":[14451],"halves":[5980],"10x10":[14392],"leg":[7856,18104,71786],"smp_clampu_repeatv_point":[45252],"particlesystemtriggereventtype":[32767],"_gialbedotex":[29496],"visibleinstances":[5650],"__rectangle__":[32573],"unityyamlmerge":[48053],"p2":[51459,58473],"graphicsformat":[8444,21777,50096,68940,69184],"consisting":[39619,76315],"debugexample":[8984],"jo":[1425],"socket":[8225,21074,23049,26560,28407],"activatealldisplays":[29839],"screens":[12099,12279,19675,24776,24790,25338,27125,30377,49760,52725,62748,63792,66337],"adopt":[3439,56724],"waveform":[7469,22596],"‘system":[38684],"dive":[3242],"dns":[7364],"100grad":[62270],"arrange":[2234,2253,5166,6783,7178,10082,13616,17744,21633,22024,24275,33656,36348,37354,40643,41561,50322,59580,61323,65970,71775],"delimiters":[41136],"lock":[1589,2261,2356,2459,6962,7155,7281,10014,10397,11442,11775,12490,12754,13001,13275,13292,14681,18179,25353,25398,25882,26954,28455,28952,28994,29022,29158,33656,37281,39306,50593,51336,51389,51714,51876,63459,70210,70244,70298,70613,70876,71129,71441,71490,71914,72424,73263,74172],"efficiently":[3576,4566,5724,6080,6880,8402,9345,17169,18567,20237,23289,23420,26472,26545,27055,29153,30356,32933,33296,35366,35622,35901,37706,39246,39856,44389,50937,68347,71987,72916,73025],"activated":[229,4239,4865,6120,6829,13815,18379,19193,20878,21154,23702,26695,28604,28756,29701,34101,34377,48335,51342,51529,51596,51900,68807,72769,74038,74733,75651],"passthrough":[74341],"exactly":[14,223,2089,2279,2353,2413,3254,3415,3723,4818,5039,5110,6294,6758,7127,8120,8558,8975,10579,11792,12989,13375,14694,15838,20543,21344,22695,24276,24728,25135,25961,26148,26926,32074,32172,32692,34184,35736,37688,37715,37724,38393,38718,39167,40712,41505,42025,42106,42449,43177,43920,44297,45474,45576,45699,46417,46552,46803,47454,47963,48009,50601,51137,51238,51361,54224,59065,66002,66043,67519,68531,70908,71005,71219,72335,72490,72916,75617],"temporarily":[9154,12819,19038,26570,29449,29786,30378,34486,36334,37690,38275,39140,39333,41320,41566,43236,49345,51052,51282,68546,71491,74750],"stock":[50170],"networktransformchild":[11286],"prepares":[41858,42101,42424,49702,75545],"asyncsearchprovider":[2671],"firstfocus":[58178],"midi":[52095],"mesh":[8,177,276,1931,2037,2063,3739,4520,4677,5364,5497,5763,5959,6150,6234,6513,6703,7873,7878,8208,8280,8382,9136,9224,9258,10000,10118,10330,10431,10487,10563,10604,10611,11309,11632,11812,12392,12730,12901,13154,13412,13450,13916,13975,14073,14702,14833,14965,15068,15816,15831,15896,16256,16969,17642,17925,17959,18076,18969,19150,20392,20657,21202,21456,21565,21700,22016,22061,22085,22153,22227,22312,23377,23462,23625,24652,25147,25206,25525,26058,26668,26962,27018,27038,27088,27098,27319,27693,27756,29097,29148,29312,29329,29384,29412,29726,29803,29901,30181,30329,31157,31662,31718,31863,32193,32240,32372,32615,32635,32686,33312,33700,34810,35068,35250,35374,36029,36212,36678,36705,37529,37678,38034,38338,38347,38403,38482,40477,41173,41780,42363,42467,43127,43175,43709,44707,45668,46877,47188,47903,48227,48302,48349,48636,48641,48682,49320,49449,49497,49525,49668,49720,50366,50465,50601,50885,50929,50975,51070,51211,51236,52204,58462,59517,60636,60889,60977,63125,68694,71765,71880,71958,72346,72983,74183,74316,74895,75185,75208,75226,75739],"minimized":[26079,41691,51323,51382,74389],"consent":[53805],"ipods":[23550],"getpurchasedate":[67729],"vector4fieldsnippet":[65658],"mac":[2733,3466,6362,6434,8098,8407,14013,15725,17045,19067,19356,19629,20548,20759,21059,25314,25490,27136,27528,27644,28095,28125,28126,28151,28201,28281,28375,30287,34245,34328,34452,35106,38320,38417,39258,40662,43920,43940,44055,45440,45483,48066,50085,52599,66568,66948,67016,67131,67195,67340,67613,71748,73294,73689,73921,74635,75343],"prefabsearches":[40725],"uta_agent_protobuf_cache_bytes_in":[66672],"caret":[39628,62029,65357],"30px":[56878,62453],"collidertype":[51653,51717,51759,51807],"jobdata":[26339,26413,26532],"setsubmesh":[71976],"tizen":[36171],"unity_webgl":[33806,40288],"ksizeofpackedmatrix":[5373,5517],"package":[57,80,434,559,708,742,796,864,933,962,1234,1255,1275,1706,2706,2974,3232,3241,3306,3428,3494,3512,3870,3879,3897,3906,3953,3974,4026,4054,4160,4168,4185,4193,4204,4217,4244,4354,4361,4390,4404,4413,4420,4447,4463,4497,4512,4882,6055,7410,7511,8015,9057,9864,9982,11131,11356,11401,11841,12280,12442,13123,14470,14782,14924,14929,14934,14939,15902,15938,15950,15967,15982,16005,16020,16036,16043,16063,16078,16091,16109,16123,16140,16154,16168,16186,16215,16227,16241,16256,16275,16333,16345,16364,16381,16395,16409,16426,16438,16456,16470,16487,16513,16530,16545,16564,16579,16853,16872,16883,16922,16936,16972,16987,17003,17015,17030,17045,17062,17080,17095,17136,17152,17172,17188,17206,17223,17240,17254,17268,17282,17299,17312,17326,17345,17359,17370,17387,17401,17415,17427,17437,17452,17477,17488,17506,17524,17539,17546,17564,17576,17591,17609,17627,17645,17664,17681,17696,17711,17726,17762,17776,17791,17806,17818,17838,17853,17865,17883,17898,17915,17952,18409,18623,18661,18685,18730,18744,18756,18811,18821,18905,19477,19655,20089,20760,21032,21625,21869,21975,21997,22554,24506,24963,25343,25478,26117,26439,26490,26908,27638,27762,27916,27943,28205,28510,28677,29398,29578,30379,30916,30987,31008,31365,31379,31385,31586,31610,33393,33449,33510,33767,33839,34600,34849,34974,35228,35377,35403,35469,35609,35768,35959,36199,36688,36712,37381,37487,38087,38687,38847,39112,40146,40263,40664,40714,41360,41436,41611,41979,42379,42603,44670,44770,45181,45943,48066,48197,48984,49148,49450,49802,50647,50653,50917,51119,51344,51850,51965,52184,52222,52508,52694,52817,52873,52923,52952,53181,53303,53711,53779,54009,54171,54740,58138,58674,60189,61505,61570,65959,66025,66476,66961,66978,67053,67526,67642,67987,68049,68628,68703,68827,68900,69072,69375,69479,69512,69662,69693,69716,69756,69792,69861,69884,69987,70091,70121,70171,70175,70182,70211,70235,70257,70288,70301,70328,70356,70585,70746,70751,70769,70800,70867,70914,70936,70940,71010,71115,71120,71124,71172,71186,71203,71212,71243,71260,71287,71300,71322,71344,71363,71390,71415,71446,71459,71467,71479,71500,71516,71679,72000,72171,72462,72795,72830,72893,72968,73084,73133,73495,73642,74141,74228,74753,74837,74895,74912,74984,75045,75092,75112,75134,75159,75211,75224,75252,75303,75388,75913,75969],"withhold":[4386],"landscapes":[18408,37390,37565,40039],"nolog":[34215],"framebuffers":[27538,52589],"sendmessage":[9401,29420,73562,74039],"fgimage":[24329],"slateblue":[63638],"pop":[2256,2299,3998,20675,21052,27996,28404,30453,30794,31717,33120,34217,51025,51103,54212,56519,65025,65458,71808],"icon1":[52418],"inspected":[39908,75259],"hungarian":[53630],"5d":[69,22850,37345,37480],"beeassembly":[3124],"jitmono":[35728],"endpoint":[21068,40314,67460,67918],"terrainpaintutilityeditor":[68886,69122],"passback":[45863],"scriptedimporter":[3770,15369,15982,25115,35189,40453],"multiuser":[66391,66405],"versus":[3304,6805,54601,54717,59551,62745,64754,64884],"instantiateobject":[3381,3554],"child's":[21475],"choir":[7446,7463],"standardshadermaterialparameternormalmap":[41768],"ucontext":[1052],"malicious":[3340,28115,28281,66436,66767,70449,74654],"typeref":[68644],"touch":[652,728,12627,17972,18503,19667,19977,20013,21180,23169,24881,25333,25345,25550,25623,25696,26049,29585,31263,33351,33498,36352,39170,40030,40101,49886,52754,56713,59719,60357,60763,65906,65922,73091,73479,75655,76095],"multiplying":[9275,9839,13021,27131,72328],"insert":[845,4792,4831,9131,9810,10340,19055,20006,27937,35862,43343,44306,51910,52672,72151],"path_to_app":[70582],"packages":[53,1717,2192,2939,2976,3793,3869,3878,3896,3906,3948,3976,4026,4053,4160,4188,4195,4202,4216,4254,4355,4366,4407,4415,4422,4440,4446,4474,4485,4493,4513,4559,5116,5721,6718,6786,6952,7408,11358,11406,12022,14782,14924,14929,14934,14939,15921,15945,15961,15977,15992,16000,16015,16030,16038,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16597,16605,16613,16621,16629,16637,16645,16653,16661,16669,16677,16685,16693,16701,16709,16717,16725,16733,16741,16749,16757,16765,16773,16781,16789,16797,16805,16813,16821,16829,16837,16845,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17072,17087,17103,17112,17120,17128,17145,17163,17179,17198,17321,17370,17541,17556,17571,17576,17601,17619,17637,17654,17672,17688,17703,17718,17746,17754,17759,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,17952,18039,18622,18662,18686,18752,18755,18818,18884,18904,19647,19963,20089,21135,21624,21980,21997,22025,22555,25160,25444,27637,28463,29575,29751,29922,30914,30983,31005,31017,31363,31379,31383,31592,31609,33766,33828,34857,35011,35469,36708,37489,37958,38841,39112,40146,40192,40714,41360,41417,41435,41611,43326,44688,44770,45181,45943,48621,49147,49450,49541,50917,52094,52944,53997,54739,60191,66478,67986,68629,68795,69029,69282,69347,69451,69511,69664,69693,69724,69756,69792,69861,69889,69987,70091,70121,70171,70175,70211,70235,70259,70288,70310,70328,70360,70586,70745,70755,70774,70817,70867,70935,70940,71010,71121,71129,71178,71185,71203,71211,71253,71262,71288,71300,71327,71343,71370,71392,71417,71446,71472,71480,71502,71517,72177,72792,72890,72899,72947,74141,74305,74908,74980,75037,75111,75134,75224,75280,75288,75388],"orchid":[63614],"pcf":[37822],"getpackagename":[69586],"4k":[5920,25273,41181,72497],"cacheserverendpoint":[21067,66637],"headerbar_column":[63297],"setsiblingindex":[54763,62811],"complications":[20154],"moveto":[58490,60721],"ran":[28686,28724,33396,52626],"arranges":[57158],"decal":[12827,38129,42240,42285,46486,46773,50155,51068,72804,72826,74273],"pipelineyou":[34861],"tilemapeditortools":[51101,51618],"nests":[71376],"primarybuttonwatcher":[76226],"gettempmemoryhandle":[26126],"unity_pass_shadowcaster":[44018],"standardstandard":[45550],"sd":[2842,24770,67003],"radialprogress's":[60934,61037],"fromjsonoverwrite":[53902],"recordedcallsfolder":[12672],"prepare":[78,167,655,12197,14914,18058,25730,27938,29561,30207,30321,30358,35714,37376,48530,48577,48630,48901,48979,49309,49706,49752,51142,51247,53029,53972,54007,67779,71696,72278],"lastvalue":[21926,36273,36421],"parsefloat":[73984],"encyclopedia":[5993],"minmaxslidersnippet":[64965],"colours":[2184,28868,28889,36685,42818,49436,49510,49535,49629,51055],"successfully":[644,858,931,2722,3254,3393,4182,4437,5299,18088,19505,26286,30090,30341,35627,53472,53839,54032,66165,66297,67296,67600,67706,67871,68127,69861,70230,70299,70399,71256,71387,72184,72931,74012,75022,75978,76202],"txt":[1012,1353,2914,3677,6338,6712,9109,12009,13946,34215,48067,68319,68397,68967,69214,70917,73655],"adaptable":[1556,66025,74047],"labeled":[3537,18131,47371,49358,74307],"pinging":[36099],"instance's":[3571,74899],"promise":[73211,74007],"evicts":[50150],"collection":[280,1470,2999,3871,3987,4033,4653,4825,5350,6691,7873,7981,8607,9223,9330,9522,9553,9620,10443,10651,10711,11160,14009,15902,16060,16984,17015,17788,18516,20747,22555,24052,24195,24526,25064,25980,26439,27681,27992,29384,29908,30501,30866,33073,33085,33383,33397,33421,34160,34956,35692,36514,36930,37051,37360,39819,40539,41900,41955,42206,42934,45016,51999,53712,58027,58370,63223,65896,66335,67549,68037,68130,69570,70875,72877,72945,73416,73629,74366,74847,75429,76089],"unity_instanceid":[32042,43358],"lingo":[8427],"180mb":[66910],"pygd823idzanbgkqhkig9w0baqufaaocaqeaog683+lt8onyc3pkll":[69939],"assigns":[500,1771,2369,3840,8021,9918,10804,11071,13485,14833,20398,20660,27983,30424,32260,32724,32754,35885,39549,40456,40866,45270,45530,46294,55715,57645,58230,59397,59894,61653,63180,63704,68133,68247,72258,73926],"healthbadge":[57655],"invoking":[6068,6126,8425,10908,33093,34676,40566],"thereby":[6128,20627,26077,30164,37671,37712,66635],"aesthetic":[14795],"unnamed":[46011,48820],"modern":[5004,6168,8407,14344,16275,17118,20206,20403,20766,20862,20917,21381,24768,44054,44270,45302,45577,45613,45726,49519,52238,62105,68433,72715],"assetstoreprovider":[2689],"touches":[3003,6318,11890,18501,20041,29586,32776,33347,36329,52761,73480],"atc_rgb4":[48734],"testassemblies":[3069,18852],"localization":[3465,5999,16467,31139,31433,53602,58425],"finalized":[6142],"useless":[11612,45568,68088,68266],"ontriggerstay":[15851,21175,33491,35752],"brace":[66385],"worldrefl":[46274,46811,47386],"windowrect":[24025],"“value":[40966],"user_proguard":[23507],"browser’s":[27803,73395,73499,73606],"implementations":[5736,8442,17818,19169,21424,28593,30063,30519,30871,33762,34235,43554,53023,66260,67584,68378,69017,69269,71069,72880,73447,74169,75389],"survived":[52333],"shader_stage_fragment":[43957],"daydream":[76095],"tri":[47610],"cs0612":[71113],"reallocates":[27884,73630],"blurevent":[57971,58194],"assetnames":[3484],"surprised":[18377],"variablename":[43589,46771,47029],"assetmanager":[511],"birth":[32653,70755],"guards":[33421],"menus":[2037,3987,4033,4149,7831,20642,21005,22534,30377,34956,38886,47237,48683,50303,54139,54452,55974,57122,64256,69777,69824,75654],"occasionally":[2699,7784,13056,15861,22567,72359],"1d1a4cxq774mzpkwsihgxa":[53108],"allusersprofile":[27790,52504,69700,70198],"discovery":[11035,16364,16378,16392,17506,40529,66230,66361,67886,75260,75875,75944,75945],"streaming":[494,511,998,1313,3377,7484,9124,10762,11818,12353,12598,12898,13820,18917,21113,29882,34284,34496,35924,35989,36533,41933,45096,48202,49736,50002,50009,50018,50052,50068,50075,50139,50143,50701,50708,50949,50990,68157,68458,69664,72464,72610,72643,72756,73082,73345,73445,73730],"_costime":[47100],"baked":[31,251,317,1904,5330,6802,9098,9502,9873,9908,10004,10097,10107,10648,12932,13127,16330,18244,21505,22105,22124,22146,22733,23406,23428,24670,26798,26806,26820,26931,26937,26956,27026,27033,27067,27082,27087,27109,27113,27129,27169,27173,27185,27214,27266,27293,27314,27329,27483,27748,27756,30243,30275,34860,35798,36568,36640,36685,37651,37704,37723,37790,38657,38940,43126,43535,49435,49491,49720,50440,50514,68533,68673,68711,68851,69060,69349,69453,71814,71869,72761,73440],"s3tc":[14464],"string_t":[72018],"c4d":[165,6699],"polybrush":[16966,31066,31446],"internalsvisibleto":[40363],"flame":[32632,32702,42783],"convolution":[4998,5262,8625,14257],"planetslistview":[59994],"visitors":[4140,36737,36820,36972,37220,37224],"adopting":[29907],"serverdisconnected":[66272],"isvisible":[18593],"within":[7,14,104,209,415,479,501,573,602,1463,1745,1862,1961,1966,1986,2006,2183,2188,2213,2235,2257,2271,2394,2427,2641,2810,2896,3732,3858,4209,4223,4713,4796,4810,4879,5023,5083,6152,6486,6684,6718,6756,7010,7163,7179,7198,7219,7365,7615,7771,8120,8142,8203,8254,8263,8311,8387,8546,9120,9139,9207,9273,9330,9515,9557,9654,9700,9750,9785,10015,10093,10131,10477,10544,10651,11319,11482,11556,11664,11859,12443,13023,13131,13263,13552,13591,13727,13760,13794,14027,14207,14502,14545,14554,14679,14775,15020,15967,16241,16453,16869,16883,17152,17282,17412,17942,18104,18255,18362,18449,18567,18819,18993,19030,19052,19316,19336,19351,19376,19657,20269,20457,20552,20738,20811,20876,21154,21389,21461,21659,22189,22317,23852,24052,24244,24505,24519,25162,25225,26067,26070,26294,26451,26496,26576,26651,26968,27323,27334,27492,27806,27931,28194,28265,28490,28718,28877,29091,29267,29566,29664,29793,29919,30012,30049,30260,30265,30394,31654,31836,32273,32766,33346,33433,33476,33547,34179,34536,34778,35260,35380,35622,35690,36015,36040,36225,36432,36703,36772,36789,37289,37574,37628,37690,37715,37723,38679,38872,39355,39508,39666,39721,39750,39771,39807,39822,39941,40064,40226,40441,40678,41560,41697,42669,43074,43120,43576,44133,44456,44659,44874,45735,45945,47258,48178,48373,48556,48583,48663,48676,48852,49650,49665,49780,49817,50197,50378,50498,50592,50997,51849,52010,52647,53040,53773,54049,54428,54547,54581,54725,55726,56117,56919,57425,57641,57823,57852,58036,58203,58918,59165,59554,60212,60390,60540,60812,61474,62053,62206,62610,62869,63938,64454,64752,64955,65085,65211,65386,65490,65704,65769,65884,65994,66356,66439,66549,66572,66811,66867,66892,66903,67052,67525,67736,67755,68509,68827,69072,70925,71163,71446,71634,71809,71874,71901,72240,72321,72673,72762,72794,73205,73667,73712,73905,73919,74380,74590,74774,75135,75215,75440,75541,76071],"orgid":[52778],"flickering":[9528,27303,32702,43138,66006],"supports3drendertextures":[19743],"prevented":[27325,57814],"win+mac":[25487],"better":[567,1982,2994,3466,4876,5922,6374,6434,6480,6807,7508,8084,8206,8555,9063,9386,9650,9855,9964,10138,10573,10658,10938,11160,11312,11613,12917,13059,13418,13464,14328,14915,14951,16151,17296,18081,20341,21515,24466,24496,24943,25262,25841,26055,26081,26510,27288,27937,28174,29714,29915,30878,31662,32230,33180,34924,35877,36511,37622,38485,39492,41717,43131,43952,44166,44229,44936,45583,48310,48601,50397,50941,52941,53309,54124,57081,57797,58440,58824,60638,61759,64373,64697,65975,66364,66383,68473,68694,68954,69200,70513,70775,70818,70905,70914,72681,73392,73464,73705,74635,74796,75223,76120],"debounce":[35172],"sv_target1":[45718],"engaged":[35066,49642],"resettozeroonflush":[35423],"distribution":[427,541,577,581,914,937,1243,1315,1324,1557,4540,7496,12918,13063,14259,17045,17059,20693,26071,26510,28115,28140,28282,29560,31031,31471,32106,32259,33885,42813,44053,48360,48527,48577,49752,50170,50377,50977,51074,52113,52193,52737,52871,52948,53324,53695,53773,53857,54000,66784,67264,67661,67868,69729,72178,73024,73381],"chose":[12942,24607,25221,28798,41634,48373,66700,75617],"pkr":[53661],"protocol":[3341,12616,18819,19370,66430,69708,69862,70509,70606,72087,73667,74753],"cursors":[727,64180],"unity_editor_win":[18552,33791],"another_spot":[66628],"a2":[21029],"wsaimagescale":[12443],"rg16ui":[8480],"settrigger":[2013,10796],"gradients":[4511,4519,6703,14123,20746,24520,32871,38147,55855,58393,58447,62095,65768],"arrangements":[18897],"s_memorymanager":[27891],"kunityprofilermarkerflagdefault":[27975],"w3":[58603,61275,61635,62428,62547,73472],"m_flarestrength":[76361],"unity_vertex_input_instance_id":[23257,31946,32961,43338],"transpose":[5231,47078],"eliminating":[6129,33478],"form":[235,2188,2354,3086,4159,5179,6033,6723,7163,8608,9024,10085,10258,13616,14695,16330,16453,18662,19560,20552,20634,21038,22292,25062,25939,27336,29391,30555,31764,32701,34637,39902,40841,44914,45100,45214,46760,47711,49642,50171,50479,52037,52224,52786,53103,53728,53812,58119,64182,64444,66877,68280,68372,68485,70290,72929,73562,73934,76319],"canvas'":[54466],"logics":[36334],"topic":[428,570,650,656,663,868,883,940,956,1025,1097,1182,1317,1394,1752,1805,1813,1847,1856,2758,3015,4723,5343,5494,5761,5805,5813,6776,12970,13630,15820,15886,18042,18415,19121,19276,21145,25689,25718,25757,25820,25829,25974,26063,26101,26272,26549,26583,26652,26696,27672,28076,28120,28256,29010,29474,29883,30507,30827,31596,31611,33625,33751,33886,34647,36740,37304,37611,38521,38534,38644,48355,48631,48895,51852,52700,52708,54602,54742,57296,57973,58019,58267,59191,60352,61952,61977,61991,63124,63705,64027,64311,64374,65688,65725,65759,66544,71983,71996,72078,72098,72104,72111,72120,72127,74884,75281,75370],"simplebindingexampleuxml":[56350],"horizontally":[171,2274,2397,5115,8036,9650,14254,14799,14869,18233,20563,24392,27090,30525,33532,33659,39418,39556,39685,39760,39765,39814,50034,50126,52214,54735,60649,61545,65952],"underscore":[478,11842,33496,45072,64342,66387,73985],"scalevaluehandle":[22211],"updatefolderpresetdependency":[19563],"occurring":[9138,10097,12666,45866,52575,66201,66657],"tryrecenter":[75736],"8b6db55a2344f068cf8a9be0a662ba15":[3268],"lively":[6999],"checkprompt":[48093],"stacktracelogtype":[21081],"unclutter":[71391],"length++":[28276,72156,74600],"unity_v2017":[28707],"result3":[63173],"boneweight":[332],"lightingexplorertab":[26754],"m_localrotation":[21668,48157,76460],"valleys":[50529,50543],"graphicsmemorysize":[19726],"left":[96,179,723,1113,1121,1581,1886,1951,2131,2229,2252,2272,2297,2324,2372,2395,2417,2425,2686,2774,3233,3517,4852,4994,5123,5179,5595,6229,6264,6285,6318,6723,7102,7830,7852,7927,7990,8090,8172,8198,8306,8570,8610,8863,9338,9573,9646,9723,9773,10087,10341,10509,11164,11244,11274,11374,11426,11462,11664,11678,11762,12104,12490,12821,12942,13075,13105,13148,13851,13987,14678,14776,14788,14863,17945,18207,18236,18254,18362,18486,18971,19039,20061,20567,21215,21975,22594,23816,24299,24538,24735,24747,24774,25051,25376,25763,25874,26025,26635,27567,28424,28910,29736,29851,29880,29900,30149,30382,30451,30482,30630,31674,31737,31753,31771,31783,31808,31829,31846,32084,32099,32123,32210,32322,32334,32352,32378,32600,32623,32643,32671,32718,32753,32849,32897,33410,34825,34891,34956,35110,35379,35463,35636,35776,35895,35977,36037,36184,36221,36366,36493,36695,37280,37479,37687,37731,39201,39253,39468,39724,39748,39796,39819,39985,41393,41613,41765,41960,42708,43416,43592,44447,47093,48324,48373,48510,48618,48643,48681,49232,49499,49525,49901,50339,50351,50592,50941,51094,51138,51264,51361,51902,52106,52229,52427,52599,52767,53702,53943,54213,54307,54461,54564,54635,54724,54779,55805,56107,56580,56673,56866,57363,58147,58336,58560,59067,59271,59624,59855,60227,60378,60507,60783,61229,61836,61907,62009,62066,62194,62609,64055,64285,66000,66333,66594,67243,67908,69333,69439,71302,71546,71783,72357,72521,73264,73476,74394,74899,74986,75150,75205,75573,76102],"predicts":[72920],"openglcore":[23616,30284],"circlecollider2d":[8278,15079],"max_step_count":[14170],"players":[3346,4567,10071,10357,10793,11009,11103,11149,11160,11185,11292,13880,14900,17282,17342,17384,17474,21056,22317,24466,24794,27637,27762,27952,29284,30869,34201,34261,34342,34468,35282,35462,35806,36229,36368,36543,48570,49740,51155,51245,53327,53746,54016,66084,66180,66230,66337,66349,66373,66436,67073,67672,68043,68464,73263,73613,74799],"rootmotionscript":[40630],"popupwindowcontent":[56563],"onstateupdate":[21336],"xreditorsubsystem":[31293],"samples":[55,1418,2180,2943,3879,4313,4384,4468,4932,5166,6954,9099,10010,10261,12975,13203,14034,14152,14348,14598,14795,14878,15851,16043,16060,17788,18666,18706,18755,18932,21986,22117,23440,26044,27946,29577,29663,31601,32090,32232,32396,32679,32742,32872,33396,35690,35884,36031,36497,36591,36679,37658,38116,43150,43376,43984,44848,46751,46872,50023,50054,50690,50946,52094,56488,57424,65918,67679,69030,69283,69740,70837,71140,73061,73153,73326,73706,74169,74305,74910,75381],"representation":[257,1895,2358,3580,6723,7878,9061,10579,11291,14255,19990,20601,20712,21676,22563,25162,25435,26647,27023,27468,36633,36830,36983,39818,40963,42211,42751,49497,49534,49638,49760,52248,54430,54552,54706,58728,63105,66841,66929,71898,72732,72748,74219],"xsd":[58604,61276,61638,62429,62549],"mytype":[57897],"eac_r":[48736],"unitysubsystemsmanifest":[75913,75976,76070],"#87cefa":[63584],"particlesystemmodule":[16686,30962],"animationmixerplayable":[33945],"stoppropogation":[55920],"addfield":[68422],"restarted":[37733,48703],"placeholdermode":[58244],"myfloat":[20901,20971,56693],"iapbutton":[67143,67396],"ondeserialize":[10845],"shouldn't":[998,4271,5498,5726,18233,18537,23521,24777,30913,31009,31635,39797,49770,52528,57958,61812,68915,69156,70761,75899,76145],"organizing":[4218,5845,6056,22522,34188,37365,48866],"activeself":[9339,19040],"phased":[37325,75324],"multitasking":[12064],"record":[1481,2282,2381,2447,5158,6784,8641,12651,16330,16453,18534,21912,22860,25890,26109,31765,35030,35691,35789,36045,36481,37689,38934,43591,52057,53142,53442,54215,60813,62708,67624,75991],"lockstate":[73264],"myelement2":[61578],"generatecontentname":[57264],"examplevrcontroller":[75685],"predict":[4773,13250,13465,18449,22661,26460,33614,38513,52040,75733],"tgz":[70785,70894,71475],"timely":[67153],"1m":[18567,33718,62038,71773],"tga":[4500,6713,25305],"customizable":[2654,2998,6936,11106,12002,15828,16075,16406,16933,23059,23590,29731,30824,41292,52240,64407,64422,64462,64482,64505,64557,64580,64604,64625,64688,64739,64817,64835,64852,64870,64904,64924,64949,64966,65017,65074,65096,65111,65126,65158,65237,65261,65280,65350,65379,65529,65546,65561,65578,65598,65618,65639,65659,66025,68043,71985,72946],"rrznn":[40330],"kunityxrinputupdatetypebeforerender":[75545],"directorupdatemode":[33919],"leftdownup":[27415],"exported":[156,556,952,1006,1070,1746,1841,2192,21464,23480,24671,29566,29769,34668,41753,50419,67117,74698],"unsignedintegerfieldsnippet":[65545],"stalk":[52222],"distancepersecond":[51981],"vr":[258,845,1208,2956,2958,6873,16823,16843,17835,17912,21635,23156,25340,30380,30948,31285,32284,33828,37778,43455,50200,50615,54140,68746,72488,72891,72898,72915,72938,74976,75037,75114,75161,75221,75285,75290,75365,75676,76095],"f2p":[22374],"role":[9588,30397,30443,53285,54049,63233,64209,64350,67704,70948,75223,75515,76129],"subsequently":[3581,11314,22103,45569],"c3x":[5390,5534,20361],"2f":[9381,48447,62991],"lavalle’s":[36340],"uint32":[20336,28046],"conserve":[34994,36068,73248],"sexual":[53737],"“services":[66690],"attenuationin":[5245],"tops":[58285],"mycallbackfunc":[62766],"orderby":[19497,68914,69155],"#0000cd":[63595],"hkey_local_machine\\software\\wow6432node\\microsoft\\windows":[74542],"eyebrows":[49481],"invokes":[6180,10719,18317,24625,26292,26496,27992,28500,33489,35565,39393,39900,40453,52872,53778,57978,67132,67540,71079,74739],"bounce":[250,7961,8165,8251,8265,8375,8513,8767,9028,9875,10439,11510,11536,11602,11642,11653,12724,13840,14503,15844,22116,22305,23440,26878,27310,28895,29550,31684,33629,36596,37646,37694,39772,41784,42713,42729,42754,49547,49609,62932],"streamlined":[5154,17326,22916,45187,46138,46508,46532,46712,46822,74191],"googleapis":[66775],"touching":[11628,18503,25572,29586,35313,36352,40103],"decision":[4434,6819,7970,8174,8271,8389,8774,9039,12733,13075,14509,17045,36294,38900,39397,67759],"google's":[936,1748,2990,4166,11718,67261,67811,74387],"scrollviewmode":[59182,65168],"audiomixergroupcontroller":[15204],"substantial":[6047,6123,10595,17642],"companion":[5910,18733,36753,37228,50342,74204],"psvr":[38183],"tolist":[19524,48427,56957,63164],"trigger”":[32662],"picas":[39440],"linker":[27651,28266,28464,34672,52550,66460,68950,69195,72201,74602],"refreshreceipt":[67708],"closecurrent":[24832],"convention":[3894,4908,9804,11842,12154,18557,18720,18747,18925,20263,24299,25143,28052,29801,29907,34372,40362,44371,44835,44981,45072,45214,48349,49549,50043,64335,70344,70813,71783,72191],"forcing":[1574,4628,5980,20078,22048,22128,25867,26357,67570],"instantiatespawngameobjectruntimeonly":[51715],"debugging":[559,583,632,653,709,833,867,1709,1750,1809,6368,6397,6471,6513,11077,11163,11265,12013,12121,13196,19046,21072,21676,21961,22192,24051,24463,24948,25066,25134,25717,26034,26105,26300,28165,28378,29439,29570,29815,33842,34257,34338,34464,35005,35855,36473,38272,40653,40668,41375,41993,43415,44302,45037,45096,45629,49345,50197,50980,51054,52644,52692,52704,52712,54688,65896,65967,66095,66218,66332,66498,66673,68064,68740,71696,72005,72103,72756,72874,73203,73290,73898,74337,74423,74502,74511,74627,74784,74810,74844,74923,75146,75188],"animatorstate":[15263],"directx12":[71746],"unitygetinput":[74748],"undo":[5231,9762,9799,12896,20618,20857,21608,25096,28963,30672,38934,40688,43221,52089,52236,55060,58732,66011,70405,71897,74150],"educational":[234,53285],"thereafter":[6133],"placeholderexample":[58232],"selectablelabel":[59693],"begincamerarendering":[38195,68593],"shapecast":[35311],"casted":[34161],"team's":[4484,54115,66555],"bloats":[6208],"“banana”":[11314],"isname":[24875],"destinationpanel":[60560],"\\users\\yourname\\appdata\\local\\unity\\cache":[70420],"directly":[8,301,475,511,561,680,811,890,1039,1192,1404,1778,1890,2271,2296,2394,2429,2896,2939,3365,3736,3897,4026,4071,4219,4338,4513,4550,4814,5041,5083,5186,5312,5496,5736,6152,6288,6320,7315,7775,8115,9190,9382,10211,10489,10805,11298,11305,11340,12280,12457,12974,13148,13187,13264,13370,13628,13823,13901,14470,14693,14756,14775,14879,15022,16330,17752,17980,18362,18410,18458,18615,18817,18847,18954,20270,20672,21455,21986,22373,23394,23555,24508,24517,24593,24621,24643,24928,25047,25147,25153,25194,25650,25680,25734,26118,26464,26645,26791,27065,27331,28265,28600,29128,29398,29618,30164,30399,30493,30841,31600,32065,33466,33866,34196,34770,34883,35338,35701,35794,36240,36440,36593,36689,36710,37295,37568,38251,38462,38542,38740,39178,39671,39856,40177,40759,40819,43114,43177,43973,44081,44805,45239,45841,48174,48224,48295,48375,48554,48583,48622,48685,48864,49395,49426,49563,49609,49666,49737,49824,50200,50369,50519,50939,51075,51129,51304,51372,51825,51843,52224,52296,52771,53514,53875,54227,54430,54552,54609,54690,54741,54780,54842,54873,55367,55601,55740,56040,56101,56253,56703,57641,57825,57903,58300,58691,58832,59211,59269,59540,59552,59743,59868,60543,61942,62759,63123,63213,63833,64452,65220,65244,65762,65907,66521,66577,66895,66919,67482,68110,69014,69266,69751,69956,70174,70290,70312,70329,70595,70761,70770,70937,70976,71168,71520,71692,71775,71806,71871,72084,72145,72149,72204,72243,72323,72522,72609,72901,72995,73193,73499,73621,73980,74206,74311,74590,74628,74777,74814,74863,74929,74984,75201,75311,75405,75410,75618,75750],"highdefinitionrenderpipeline":[45999],"tilemapcollider2d":[14527,15289,74184],"launchctl":[66692],"wheelcollider's":[14963],"racing":[8065,14975,30142,33538,34820,53285],"networkidentify":[66076],"momentarily":[23796],"cs0618":[71113],"visitor":[36736,36791,36823,36976,37227,74306],"draganddropwindows":[57528],"disregarded":[20343],"smooth_hinted":[58388],"resizable":[688,715,2437,11717,34258,34339,34465,54452,54605,58997],"third":[234,317,1021,1255,1997,2812,4071,4218,4274,4552,4738,5921,6036,6774,6792,6801,7391,8192,8505,9112,11314,11859,12180,12555,14681,17759,18692,18730,18937,19220,21325,21815,22615,23607,23852,27467,27938,30033,30875,33514,33753,34392,34603,34639,34645,34778,35103,35959,37345,37593,41085,41667,43335,48053,49394,49563,50344,50491,52036,52100,52224,52385,52550,53183,53684,53713,53878,54593,60373,62611,62660,63193,64597,64707,66026,66380,66830,66864,67756,68778,70763,70952,71029,71667,72880,73388,74204,74362,74990,75075,75134,75310],"lofinator":[4956],"mature":[31007,31368,70960],"devicestate_setcustomvalue":[75548],"pseudo_state_sequence":[64206],"inspector_titlebar":[63243],"proportional":[6381,6443,8577,13665,22732,26919,28179,32219,36636,38346,74642],"applications":[161,257,401,427,541,567,577,579,620,633,649,661,690,695,703,717,845,876,909,938,993,1031,1087,1094,1190,1240,1259,1299,1315,1333,1355,1393,1592,1611,1721,1751,1768,1812,1846,1893,2940,2958,3013,3452,3501,4039,4545,5490,5684,5757,5801,5910,5955,5989,6055,6059,6362,6468,6792,6857,7071,7215,7478,7615,9134,9258,11039,11686,11808,12285,12512,13431,13627,14235,16043,16330,16470,16883,17030,17254,17744,17931,18395,19048,19127,19133,19274,19286,19317,19337,19351,19364,19636,21018,21464,21635,21841,22333,23439,24598,24600,24620,24768,24943,25477,25672,25727,25747,25819,25826,25900,26654,27671,28103,28124,28126,28185,28259,28261,28307,28317,28461,28620,28672,29444,29721,29780,30377,30853,32284,33404,33526,33573,33797,33884,34203,34649,35085,36294,36511,40643,43484,43920,46510,48065,48221,49309,49419,49520,49563,49752,50411,50860,50934,52530,52584,52699,52710,54795,63068,65896,65957,66527,66809,66834,66866,66885,66900,66980,67027,67151,67256,67530,67568,67625,67800,68055,68378,68433,69982,70135,70944,71677,72008,72083,72102,72119,72130,72724,72786,72891,72903,72941,73905,73921,74346,74498,74509,74568,74581,74737,74795,74814,74933,74978,75034,75111,75252,75280,75290,75364,75405,76094],"precomputation":[6834,22127,71815],"passname":[44620],"gates":[33546,67483],"owners":[28609,30413,50341,53391,54070],"strategy":[3363,3463,4536,4866,6043,6811,7028,9588,21408,21460,26482,26510,33442,42101,48324,51245,53285,57808,66183,67646,70211,70877,71010],"extrabytes":[5476,5621],"accomplish":[13076,22012,52608,57631],"button01":[55793,56058],"sk":[53645],"mycombat":[10942],"shortcut’s":[43292],"2s":[62899],"rpcdoonclient":[10925],"k++":[60719],"covered":[5038,5845,5911,6281,25926,35990,39377,40529,43115,44133,44978,58741,66190,71873],"coroutine":[15699,18254,21049,21364,24864,31089,68488,73683,75544,76272],"pivoting":[33756],"suffer":[714,13001,26044,33417],"entitled":[25938,28509],"invalidated":[26203,68619],"4d":[2188,7014,40535,44272,47480,72291],"matrices":[5221,5350,5522,5727,5805,20252,21807,23285,44231,44955,45149,47067,73448,75454],"powershell":[28628,28721,69964,70149,70517,72188],"approached":[6046],"animationtimeoffset":[51781],"negatively":[10633,13499,13709,20403,25178,26361,44307,48329,48353,48642,63887,64457,72986],"define_with_value":[8422],"orcustom":[38199],"where":[75,179,234,248,361,1071,1431,1611,1771,1886,1895,1915,1943,1957,1997,2068,2289,2332,2426,2528,2686,2958,3256,3403,3457,3501,3587,3706,3731,3833,3839,3887,3900,3908,3953,4040,4116,4172,4245,4392,4482,4531,4654,4774,4819,4911,5032,5094,5162,5218,5350,5617,5727,5770,5810,5986,6094,6118,6223,6266,6293,6383,6723,7140,7210,7413,7494,7548,7560,7696,7752,7794,7849,7913,7992,8048,8114,8131,8230,8403,8862,8989,9004,9098,9154,9169,9229,9271,9299,9351,9485,9597,9729,9982,10071,10244,10342,10503,11134,11225,11271,11319,11340,11482,11624,11736,12227,12346,12515,12698,12888,12971,13058,13100,13133,13182,13249,13263,13392,13557,13675,13763,13791,13818,13836,13860,14009,14247,14319,14728,14863,14951,14985,15838,16212,17206,17925,18134,18233,18254,18454,18675,18936,19027,19605,19699,20047,20210,20222,20237,20438,20545,20671,21035,21154,21188,21240,21319,21415,21546,21575,21684,21956,21964,22043,22292,23456,23510,23720,23817,24031,24055,24169,24297,24489,24580,24724,24774,24923,24987,25095,25345,25410,25491,25523,25667,25849,25892,25917,25939,26108,26137,26245,26355,26452,26479,26494,26646,26689,26784,26908,26926,26961,27056,27215,27268,27322,27484,27509,27544,27624,27654,27698,27757,27762,27815,27855,27952,28181,28233,28295,28394,28474,28612,28681,28719,28753,28762,28836,29150,29364,29918,30047,30138,30243,30270,30306,30345,31725,31856,32167,32284,32402,32701,32723,32747,32872,33007,33087,33396,33415,33472,33506,33581,34197,34215,34537,34744,34896,34915,35088,35234,35279,35669,35711,35901,35958,36007,36020,36133,36155,36198,36454,36509,36697,37227,37273,37399,37479,37618,37627,37685,37700,37740,37958,38242,38402,38437,38466,38508,38560,38575,38638,38661,38797,38849,39092,39141,39200,39235,39308,39351,39544,39677,39765,39817,39900,40055,40083,40163,40204,40441,40571,40712,40854,41199,41467,41525,41559,41725,41914,42125,42364,42398,42424,42793,42810,42953,43071,43110,43185,43298,43594,43897,43957,44071,44691,44797,44830,45250,45319,45569,45724,45975,46576,46760,47259,48009,48163,48204,48227,48335,48611,48685,48875,48911,49437,49495,49524,49616,49631,49639,49642,49738,49771,49850,49896,50146,50321,50347,50363,50514,50601,50642,50652,50685,50703,50726,50909,50945,51122,51156,51173,51371,51594,51726,51780,51991,52099,52151,52223,52251,52546,52877,53453,53887,54007,54273,54426,54549,54693,54736,55726,56942,57240,57555,57825,57861,58336,58411,58560,58732,59176,59561,59730,59872,59991,60560,61422,62066,62198,62590,63139,63681,63828,64205,64325,64973,64986,65220,65244,65952,66114,66200,66245,66381,66407,66521,66620,66823,66849,67148,67195,67550,67584,67678,67754,67855,68476,68614,69303,69350,69409,69743,69788,69818,69898,70077,70143,70260,70306,70384,70687,70761,70963,71011,71155,71449,71468,71540,71665,71774,71805,71871,71982,72014,72273,72364,72476,72501,72616,72717,72729,72754,72921,73181,73240,73263,73449,73472,73573,73627,73917,74178,74496,74520,74644,74851,75157,75410,75544,76298],"colorindicator":[57070],"maxplayers":[11123],"rgba16_snorm":[8461],"unity_ads":[68685],"applaunchopts":[66851],"limit":[222,356,501,582,629,1315,1325,4281,4704,5238,5730,6142,6760,6811,7264,8195,8225,8339,8386,8506,9518,9704,9735,9875,10015,10477,11102,12416,12895,13175,13477,13657,13939,15000,18063,18513,18749,20242,20967,22073,22657,26074,26361,26569,27172,27207,27259,27602,28952,29213,29587,32116,32171,32609,33408,33728,33884,34607,35919,36352,36597,37617,37667,37797,38345,38734,39611,40784,41316,41501,42176,42219,42952,43165,45733,49404,50186,50465,50997,51955,52485,52601,59166,60646,61474,63132,64957,65148,66160,67867,68246,69301,69407,71809,73209,73623,74259,75453,75740],"quadrangulated":[22836],"inheritance":[21475,28959,28982,29013,29044,54885,74173],"defaulting":[36054],"devicestate":[75547],"“t":[41202],"linuxstandalone64":[3052],"though":[69,1416,3340,4298,6818,7510,7568,7575,9953,11510,11546,13648,18233,20076,20615,22046,22186,23107,24521,25162,25669,26084,27184,27300,27510,28467,29736,30050,31010,31760,32154,32264,33094,33437,34361,36691,37744,38624,39141,39266,40733,43543,45337,48201,50929,52039,66645,67272,71006,71018,72643,73299],"slidersnippet":[65236],"m_resetcountbutton":[20016],"m_length":[26142],"infosuch":[53728],"wrapping":[1884,13212,18500,42750,44002,45244,62020,65827],"setpasscallsrecorder":[36407],"#66":[62011],"transaction’s":[67606],"setasfirstsibling":[54763,62809],"floralwhite":[63554],"bare":[23777,47265,52230],"lens":[6495,8030,9196,9242,9479,9670,9841,13408,21485,22756,23646,26895,30145,31141,33528,34871,38104,65999,72772,72805,72827,74301,75166,75208],"firstpass":[38775,40445],"ocol":[44921],"robust":[29908,36570,37624,66435],"addresses":[1706,4126,5450,5594,31719,36068,52472,65699,66230,67041,74615],"hkey_local_machine\\software\\microsoft\\windows\\windows":[74572],"reflectionprobe":[13157,15181],"rough":[4881,15816,15831,22596,41767,46738,49455,49511,49610,49630,50929],"finance":[30440],"responsive":[30378,59189,74724],"articulationbodies":[74329],"onquit":[74040],"iap's":[66986,67036,67777],"exceeds":[9642,11907,14560,18981,26566,26576,29247,32131,33547,33659,48653,50563,51031,52601,67659],"nuke":[72724],"logical":[3012,3456,4391,6152,7383,18500,26617,26622,27993,29721,31645,33572,35037,36336,39678,39704,40298,43816,44269,64696,65081,73972],"variety":[889,1244,1768,1901,2239,3245,4025,4879,7510,12645,20733,22559,24468,24768,24947,25187,25348,25733,25826,25841,28947,29434,29775,30853,31601,32114,32314,32704,32712,33506,37268,40534,40674,42781,46597,48326,49449,49614,49631,50276,50529,51844,54131,65738,66026,66432,68049,71120,71237,72464,72871,75587,76095],"getcontrolrect":[49984,59652],"mobiles":[18514,30293,72497,75421],"#7fff00":[63522],"uxmlenumattributedescription":[58087],"loader":[12403,23781,34672,67110,73022,73183,73333,73622,73944,75027,75249,75704],"divided":[7359,9941,11604,11680,13041,14018,14078,14263,17133,19467,22258,26825,29186,32677,32847,33453,35258,35266,35369,35625,35780,35903,35927,35969,36023,36120,36207,36298,36356,36435,36517,39379,42009,43985,53488,71658,71889,72331,72934],"unity_matrix_t_mv":[47078],"anyvalue":[40841],"pointed":[98,24904,40001,48605],"collider's":[8155,8200,9024,10592,12723,32756,74457],"search_menu":[63477],"__mode__":[32412],"asyncresourceupload":[27731],"isdefined":[48767],"axis's":[14680],"getvertices":[298,33332],"subsystemmanager":[75959,76063,76301],"playersettingssplashscreen":[12312],"notice":[3254,3475,4065,4357,6150,7167,7305,13063,13970,21181,23797,24164,24388,25382,25595,30053,32933,38800,40358,43592,48514,49431,49560,49632,52222,54556,66165,68672,70794,72396],"\\hostfxr":[70582],"jsonfrom":[67691],"expansion":[398,403,421,431,539,608,912,1310,1336,12022,33434,33885,53308,54732,66160,73650,75899],"yesbase":[37991],"sizable":[73614],"1g":[29620],"currency":[17326,22397,52992,53344,53975,54031,67185,67597,72195],"suited":[64,6043,7348,9462,10573,12290,22882,30328,30885,32230,35256,36511,37426,50366,50941],"projpos":[32971],"taiwan":[53615],"0x0000b":[30100],"encrypted":[66130,67762,70015,70174,70651],"audience":[5911,6750,16470,53296,60635],"_hull":[44552],"race":[6050,14965,26485,28457,35138],"0xceea167a":[64724],"outspecsmoothness":[46518],"peru":[63621],"“assets”":[40911],"resting":[10404,11520,15857,74496,75551],"shurikentogglefocusedmixed":[63483],"milestones":[22417],"checkdeallocateandthrow":[26233],"ndk":[1006,1277,1284,1597,50197,69368,69472],"lasterror":[66271],"standardpurchasingmodule":[67005,67202,67303,67344,67583,67747,67826],"#x6e":[66781],"selective":[32590],"diagnose":[5921,12419,22860,29439,35264,36296,70363,70913],"win32":[19072,19302,66895,66901],"iunitygraphics":[29928],"unityexampleprojectsetup":[25472],"arpu":[53504],"changeevents":[56697],"xrstats":[75992],"interfaces":[4997,5838,6037,13977,16487,16659,17744,21200,24051,24466,24608,25034,25348,27938,28069,28445,29420,31595,36746,36824,36977,37235,39689,39699,42896,54132,54266,62783,64204,65912,65957,67570,71369,75390,75884],"flexible":[100,5084,6035,9019,9185,13182,14349,20766,20862,20917,21381,24760,25550,29553,34192,37390,39549,39574,39643,40128,40810,41167,45568,52238,54223,57723,58378,59064,59894,64156,65512,66433,69864,75081],"lightmapping":[5325,9098,9928,10005,10618,13432,21054,21558,22105,22125,22147,22764,23447,26814,26943,27008,27059,27073,27079,27094,27096,27121,27158,27168,27178,27329,27521,27750,28918,29481,30354,36582,36650,36689,37654,42400,42802,42987,44576,45087,46788,50494,69350,69454],"pathtomymp4file":[72656],"newin20182":[22059,33569,51161],"mediumturquoise":[63601],"labelled":[168,9761,39253,50414,52035,53203,66236,72231],"checkout":[4005,67537,72403],"pressedbuttons":[60381,60794],"targetcameraalpha":[14904],"net_2_0_subset":[33830],"unity_matrixpreviousmi":[20348],"agentradius":[76406],"profilertimelinedigdownarrow":[63469],"++m_indentlevel":[36957,37072],"textcore":[55856,58110,58373,58651,61907],"\\unity\\unity":[27791],"#46":[66793],"characterinfo":[56986],"inline":[6198,9079,39879,45238,46653,49852,54297,54475,54609,54632,54684,54840,54849,54885,59843,61390,62227,62869,63108,63828,64318,64749,65737,65762,66521,68907,69147],"noticeable":[4,9894,10097,10108,15816,18307,22464,27211,28457,32360,37700,38501,40606,42245,43117,43131,50005,50693,52044,68918,69159],"widthscalefactor":[20484],"atlas'":[13704,72276],"timewarp":[72930],"metering":[4820,5017],"edit":[7,17,134,208,250,260,901,1192,1256,1338,1366,1492,1535,1615,1841,1870,2199,2254,2269,2411,2421,3020,3227,3736,3908,3953,4120,4212,4245,4427,4550,4589,4737,4812,5028,5190,5718,6271,6297,6948,6977,7315,7624,7657,7808,7956,7992,8304,8499,8782,9027,9055,9430,9555,9622,9762,9765,9930,10058,10129,10219,10409,10696,10721,11176,11357,11447,11463,11525,11596,11667,12274,12316,12437,12723,12759,12768,12865,13064,13112,13280,13297,13359,13477,13779,13822,13843,13901,14471,14554,14574,14673,15967,15998,16106,17000,17606,17944,17976,17989,18179,18247,18322,18473,18847,18969,19020,19320,19341,19355,19368,19651,20120,20204,20211,20220,20413,20459,20538,20583,20627,20652,20777,21010,21676,21874,22058,22111,22189,22227,22632,23280,23489,23564,23613,24078,24586,24601,24669,24929,24954,25177,25438,25550,25679,25765,26034,26614,26651,26717,26835,26952,27136,27167,27254,27550,27638,27816,28105,28132,28199,28405,28469,29022,29091,29282,29351,29695,29819,29882,30050,30251,30284,30415,30845,30859,31603,31625,32372,32847,33072,33401,33655,34594,34925,34949,34962,35192,35772,35809,35925,36334,37297,37498,37620,37655,38377,38860,38908,38950,38986,39024,39074,39101,39127,39163,39305,39635,39797,39912,40506,40677,40762,41325,41356,41420,41551,41596,41674,41707,41953,41993,42940,43032,43211,43464,45046,45180,48055,48337,48377,48502,48562,48610,48636,48641,48680,48852,48874,48901,49196,49376,49694,49753,50010,50372,50491,50520,50530,50545,50582,50639,50653,50877,51003,51078,51139,51167,51219,51241,51271,51394,51875,52101,52351,52756,52846,52958,53126,53273,54083,54121,54452,54496,54558,54587,54643,54736,54738,56703,58254,58338,61508,61627,61945,62049,62215,62867,63107,65917,66014,66519,66539,66593,66922,66953,67044,67970,68067,68493,69352,69456,69752,69832,70340,70749,70973,71540,71613,71743,71747,71794,71859,71900,71906,72230,72379,72520,72830,72895,72991,73255,73317,73386,73910,74230,74855,74940,74985,75140,75341,76315],"attacker":[3340],"tetrahedral":[10087,26707,27336,27478],"‘driving’":[26569],"ru":[53643],"farattenuationendvalue":[21497],"dead":[9785,18516,25032],"visualization":[2231,7940,8312,8972,10519,11300,13235,14119,15890,22139,22383,26841,27015,30203,30229,31681,33640,35070,35498,36296,39819,47372,74379],"initiate":[4875,15847,28433,35837,39385,67482,71848],"dllnotfoundexception":[72201],"atlassettings":[48716],"comp":[21755,45859],"leak":[26245,26302,28457,35139],"perpendicularly":[39257],"git#9e72f9d5a6a3dadc38d813d8399e1b0e86781a49":[70683],"prefixes":[1570,41454,42612,57149,58096,68512,75625],"onprogress":[74006],"m_radius":[27349,60690],"hlsl's":[47608],"pivot":[140,7134,8208,9751,13103,13765,15012,15998,24650,24734,24746,25667,26560,26589,32285,32705,34799,34900,35155,39137,39272,39382,39467,39506,39800,41783,48366,48447,48515,48519,48635,50908,51240,51537,54713,62209,74192],"recompressassetbundleasync":[3247,3302],"unity_fogstart":[46459],"redoable":[66016],"speakers":[5042,5980,7615,7662,7771,12201,22588],"deactivates":[18617,19138],"mock":[54468,67749,72956,75027,75188,75210],"#ff1493":[63548],"dependsoncustomdependency":[19492],"skip_variants":[44573,45019],"layersliceoffset":[27460],"newbutton":[56047],"palegoldenrod":[63615],"resetting":[7763,18099,41571,43248,70356],"charges":[67877],"newlistentry":[59448],"banner":[38876,53290],"transitionproperty":[62970],"#width":[40935],"ttc":[6714,58370],"ridges":[18354],"outlined":[11560,18050,20752,27764,36680,50227,66812],"preparations":[29762],"sketchup":[162,4506,9134,13368,21426,24638,29744,50181],"downloadhandlerscript":[68086],"customeditor":[20797,22213,40486,44198,45405,49909,51493,54940,54998,55097,55199,55292,55355,56155,56434,56652,58766],"unmanaged":[18531,26137,26434,33449,34738,35139,35729,49392],"_customrendertexture3dslice":[8964],"compel":[26569,70211],"unityxrpose":[75579],"ld":[36657,52672],"named":[476,1463,1735,2506,3256,3414,3520,6489,6691,7025,9129,9400,9812,12808,13847,18330,18752,19033,19456,20191,20902,21770,23258,24467,25154,25491,25667,26148,26247,27946,28452,28918,30048,30574,33500,34157,34618,35615,35695,38377,38743,40256,40573,40716,40911,41202,42683,44207,44327,44377,45158,45239,45521,46011,46805,47156,48219,48349,48556,49327,50602,51150,51394,52339,54515,54545,54855,54922,54969,55074,55172,55246,55319,55375,55997,56132,56224,56282,56338,56404,56482,56563,56602,56693,56746,56836,56988,57137,57343,58045,58178,58600,58663,59277,59783,59839,59916,60682,60892,60992,61251,61381,61760,62505,62653,62978,63162,63779,66380,69011,69263,70166,70195,74364],"fogcoord":[1698,10196,33003,47229],"append":[2839,11022,19538,24624,25912,26047,26129,33164,36498,36817,38705,49763,52067,54545,63956,64026,64341,73325],"scattering":[6910,12918,16969,38006,42769,46576,48290,74295],"introducing":[1093,1226,1298,1807,1815,1849,6156,25825,26103,26461,41786,43016,71026,72532,73485,74656],"hardcode":[3252],"typed":[5764,6291,18485,33290,33425,36784,37261,39614,55714],"mouseleaveevent":[57809,60370],"puts":[3718,3904,10014,11253,18500,20632,26299,29600,39070,40359,48197,66823,70903,71277],"startswith":[749,5998,6154,19482],"downsampled":[50686],"contributors":[22152,30363,35887,66759,72759],"kunityxrinputfeatureusageuserpresence":[75643],"delay":[4957,7441,7458,7539,7552,7721,7742,9418,10375,11210,12303,18283,21367,21929,25465,26375,26714,31643,32155,32776,33403,34720,35714,40010,50969,52011,56681,62413,62594,62836,64619,65132,67254,68868,69102,73066,75445],"iself":[42354],"outbuffer":[4942],"setikrotation":[25628],"category’s":[35266,35369,35625,35903,35969,36023,36120,36174,36207,36298,36435],"bigger":[7017,7496,7956,22139,24764,24783,39407,40995,41474,50381,51138,52749,73319,74418],"implement":[441,725,787,1285,2613,2765,3452,3463,4536,4997,5351,5684,5757,5801,5904,5924,6052,6105,6322,8493,8574,10110,10384,11376,12098,12400,17062,17539,18357,18508,18712,19296,20833,20867,22012,22264,24619,24634,25328,25348,25527,26241,26277,26287,26464,28051,28068,28589,29141,29420,29924,30033,30528,33453,34379,34633,34664,34693,35258,35484,35768,36633,36846,36998,37235,38502,38989,39689,39699,39899,40486,40559,40643,40682,43451,44051,45771,46137,47245,48683,50932,51529,52268,52691,52816,52921,53320,53923,53999,54015,54266,54901,54989,55497,55549,55570,55726,56090,56697,56881,57286,57556,57638,57809,57930,58036,59729,60212,62113,62751,65973,66194,66437,66960,67069,67193,67280,67572,67592,67661,68012,68043,68367,69015,69267,70567,71191,72057,72114,72147,73249,73321,73480,73499,73667,74248,75015,75252,75390,75650,75876,75919],"limiting":[1966,6145,6807,8563,10476,37740,42951,67886,71795],"windowb":[57533],"premul":[46767],"practise":[73088],"absoluteurl":[19376],"resampling":[1892,2055,50489],"crocodile":[52288],"selectors":[40964,41173,41544,54296,54425,54632,54699,54748,54799,56706,61390,62591,62663,63117,63225,63808,63840,63857,63875,63891,63911,63933,63988,64010,64023,64322,64377],"onmeshgenerationcomplete":[75783],"recolors":[13748,13788],"partition":[1140,11982,39451],"gl_nv_viewport_array2":[43478],"fixup":[14261],"flipping":[14976,32704,37326,37401,44850,51575],"data":[218,276,463,564,881,993,1343,1370,1449,1487,1608,1685,1880,1912,1924,1966,2177,2188,2324,2432,2655,3247,3292,3319,3340,3351,3451,3459,3571,3579,3729,3830,3839,3870,4078,4217,4237,4506,4519,4628,4651,4742,4773,4865,4911,5037,5181,5321,5347,5350,5496,5721,5764,5818,5946,6035,6105,6273,6298,6370,6427,6475,6509,6802,6944,6950,7000,7162,7468,7835,8072,8427,8635,8651,9253,9482,9908,9998,10080,10130,10273,10460,10493,10581,10659,11011,11049,11112,11191,11258,11280,11291,11307,11319,11338,11570,11613,12122,12357,12557,12842,12947,13140,13208,13306,13373,13534,13709,13891,13920,13963,14026,14087,14238,14320,14610,14928,16183,16330,16453,16470,16619,16883,16919,17045,17077,17206,17296,17591,17627,17723,17773,17803,18104,18344,19129,19150,19229,19653,19783,20237,20438,20538,21002,21031,21219,21422,21455,21639,21711,21865,22093,22107,22124,22165,22327,23246,23416,24517,24631,25047,25135,25176,25187,25307,25309,25888,25941,26078,26108,26159,26251,26263,26289,26411,26434,26474,26495,26706,26805,26812,26956,27015,27038,27068,27082,27110,27166,27175,27214,27470,27525,27693,27938,28168,28251,28436,28846,29128,29161,29329,29384,29412,29420,29465,29512,29573,29588,29759,29774,29886,30062,30166,30171,30177,30207,30237,30269,30331,30367,30413,30894,31650,31762,31870,32738,32813,32916,33091,33395,33424,33456,33476,33515,33655,33762,34188,34291,34415,34903,34985,35364,35379,35405,35465,35498,35603,35635,35691,35778,35789,35934,35958,35977,36037,36133,36184,36203,36343,36395,36471,36570,36678,36736,36751,36791,37418,37498,37651,37668,37747,38358,38397,38661,38940,39852,40156,40482,40537,40682,41223,41490,41541,41845,42026,42183,42255,42354,42402,43683,43895,43920,43969,44097,44133,44199,44228,44368,44767,44787,44871,44999,45100,45142,45498,45571,45668,45940,45962,46346,46510,46657,46721,46873,47145,47371,47901,48120,48378,48528,48556,48639,48940,49066,49357,49447,49531,49617,49635,49699,49713,49741,49760,49989,50030,50061,50156,50405,50411,50648,50656,50673,50796,50947,51035,51529,51726,52033,52240,52511,52633,53039,53103,53481,53712,53882,54205,54959,55494,55542,55549,55556,55992,56042,56592,56667,57061,57459,57576,57889,58006,58054,58311,58403,58459,58677,58732,59087,59371,59723,59913,60163,60559,61420,61557,61976,62072,62201,62867,63707,63716,64208,64387,64511,64610,64808,64914,64973,64986,65312,65512,65537,65552,65687,65697,65736,65893,65904,66069,66110,66408,66458,66620,66816,66841,67176,67781,67920,68080,68263,68279,68313,68376,68429,68470,68541,68673,68713,68825,68852,69058,69383,69487,69708,69792,70563,70936,70955,71594,71793,71812,71961,72711,72810,72945,73022,73078,73176,73205,73393,73416,73445,73553,73618,73714,73899,73926,74088,74168,74388,74608,74631,74791,74838,74918,75077,75107,75221,75321,75390,75474,75739,75937,75989,76095,76335],"addhost":[66157],"rightshoulder":[29903],"pulled":[37618,38849,72444],"submitting":[4245,4387,4420,4479,25892,26359,28145,33482,34378,39635,53162,53473,64444,72424,72917,75429,75617],"asynchronously":[4636,12279,19027,27694,37733,50056,51049,55547,67339,67543,74262,75741],"r16_snorm":[8465],"infer":[12014,40557],"legacyinputhelpers":[74374],"'buy'":[67335],"roadmap":[61,2955,6789,19662,29580,72913,74915],"arkit":[2981,12217,17800,31038,31405,50266,68759,74371,75290],"body's":[8534,18225,38661],"mouseup":[51549],"supportsmultisampledtextures":[19756],"circular":[7992,8263,14711,15822,25551,28967,29003,31719,32389,32776,65999,66721],"supportsbuffer":[75606],"unity_lightposition":[47131],"shurikentogglehover":[63484],"virtualization":[5238],"7e":[58455],"installations":[16364,16378,16392,22100,26688,29827,52931,66587,69750],"recolor":[29485],"there's":[4911,22993,24734,25353,26356,39797,42222,44066,45145,47758,50369,54564,60813,69861,70175,71221,73463,74091,74615],"tube":[35254,37790],"performant":[6082,6213,16005,18320,29570,33467,37259,68775],"filteringsettings":[49099],"globally":[250,10386,13614,14278,14314,14562,19034,24475,38463,52047,69001,69252,69897,69997],"replacement":[6005,17642,35881,38203,39614,44058,45619,46040,59734,68872,69107],"walkthroughs":[18678],"devicedefinition_setserialnumber":[75525],"scopes":[33455,59593,61476,70886,70984],"initiatepurchase":[67334],"#ff69b4":[63565],"appendchild":[73998],"onselectedframeindexchanged":[35542],"r8":[8460,12014],"binders":[40144],"iterable":[40836],"misrepresenting":[70955],"scale":[167,1592,1871,2269,2334,2397,2440,3005,5117,5920,6105,6313,6597,6843,6936,7023,7167,7660,7985,8125,8201,8291,8555,8685,9216,9274,9634,10333,10579,10651,11435,11541,11736,12706,12922,13111,13149,13166,13241,13263,13288,13388,13754,13837,13915,14000,14149,14285,14487,14559,14661,14868,15857,15967,16933,17788,17978,18155,18352,20070,20396,20438,20601,20637,20702,21447,22043,22144,22203,22236,22571,23271,23378,23427,23671,24338,24526,24650,24778,24908,25171,25205,25264,26972,27056,28836,29129,29755,30175,30366,31682,31813,32167,32222,32251,32399,32610,32776,33667,34774,35023,36231,36548,36689,37347,37528,38089,38555,39402,39587,39724,40141,40534,40674,41775,43205,43209,45111,48150,48275,48601,49473,49560,49678,50382,50461,50592,51070,51878,51976,52114,52194,54375,54716,54785,55234,56393,57694,58284,59345,61304,61527,61914,62192,62531,62643,62748,62889,64114,64452,64748,66951,68610,68696,68862,69095,69302,69408,71644,71773,72284,72327,72462,73049,73250,74142,74418],"fixeddeltatime":[11606,36333,51957,69301,69407],"handed":[4994,37280,75573,76156],"linkbutton":[59669],"area__label":[57411],"setkinematic":[35766],"launched":[19031,21051,32372,38281,50197,52598,53499,69961,74653],"render":[67,104,255,360,1540,1798,4427,4520,5332,5347,5350,5690,5724,5732,5766,5807,5852,6481,6485,6510,6678,6758,6798,6855,6940,8012,8107,8427,8785,9127,9197,9242,9253,9433,9670,9845,9862,9948,9994,10109,10206,10345,10437,10606,10613,11724,12221,12349,12830,12865,13122,13192,13263,13452,13539,13585,13747,13794,13897,14006,14028,14134,14237,14475,14540,14836,17108,17116,17124,17539,17752,18241,18342,18650,18801,19077,19141,19289,19984,20076,20237,20378,20405,20438,21255,21361,21697,21856,21892,21957,22046,22108,22553,23247,23378,23468,23542,23592,23622,24502,24596,24903,25177,25991,26663,26716,26852,27075,27188,27214,27269,27307,27536,27583,27986,28841,29310,29414,29448,29458,29972,30143,30205,30296,30321,30361,30991,31207,31863,32248,32729,33717,34279,34486,34844,35063,35714,35780,35879,35930,36085,36177,36237,36354,36440,36575,37364,37484,37516,37556,37636,37696,37743,37745,38238,38256,38286,38330,38343,38381,38414,38432,38871,39141,39677,39696,40059,40149,40167,41783,41825,41917,41938,41959,42172,42183,42233,42238,42250,42303,42308,42313,42385,42436,42442,42451,42458,42463,42523,42528,42533,42538,42543,42588,42593,42599,42664,42692,42716,42732,42757,42781,42809,42823,42829,42834,42840,42845,42851,42856,42861,42926,42931,42988,43077,43106,43122,43135,43147,43172,43359,43455,43485,43500,43509,43553,43567,43656,43685,43727,43802,43884,44022,44069,44096,44133,44167,44200,44321,44339,44378,44423,44576,44592,44628,44659,44671,44758,44787,44831,45018,45056,45179,45184,45262,45391,45427,45499,45524,45618,45717,45845,45853,45932,45963,46138,46505,46530,46712,46819,47126,47158,47176,47949,47953,47986,48024,48551,48556,48682,48908,48975,49144,49168,49172,49280,49308,49540,49671,50005,50019,50056,50076,50144,50362,50500,50520,50602,50712,50932,50996,51166,51198,51770,52387,52488,52601,54180,54764,54773,56727,57692,58110,58305,58370,58458,58651,60541,60610,61298,61524,61906,61994,62012,62803,64774,66003,66879,66894,68526,68571,68733,68926,69169,69342,69446,71562,71879,72494,72752,72801,72807,72813,72828,72917,72995,73245,73705,73988,74208,74276,74734,75158,75411,75545],"submissions":[4365,4412,53142,53321,54002,67871,72178],"designers":[5040,5829,17759,30135,54121],"marking":[1886,8093,9343,15839,28600,33414,37349,39797,49706,50063,66477,69719],"path":[479,511,610,1006,1127,1185,1649,2124,2356,2531,2732,2917,3078,3331,3357,3537,3640,6333,6803,8054,9462,11613,11983,12808,12912,14567,16595,18230,18354,18475,18791,18951,19089,19477,19698,20240,21018,22312,23289,23440,23491,23633,24511,25091,25394,25459,25912,26883,27495,27813,27855,28053,28618,28676,28715,30143,30312,30355,30847,31179,32723,34221,34572,34672,35106,35384,35667,36068,36563,36568,36696,36791,37798,38287,38342,38380,38431,39208,40681,40711,40803,40946,41173,41303,41344,41368,41428,41506,41559,42002,42356,42405,43203,43376,43920,44090,44314,45184,45403,45629,46057,46510,46778,47103,47658,48060,48185,48235,49318,49744,50726,51454,51699,52485,52791,52892,53105,53882,54947,55037,55159,55231,55346,55365,55576,55867,55987,56269,56325,56403,56636,57434,57620,57817,57852,58193,58484,58662,58823,59601,60184,61179,61420,61576,61934,62056,63767,64388,65693,66114,66465,66612,67120,68121,68541,68720,69667,69710,69819,69947,70077,70111,70143,70200,70487,70585,70770,70837,70875,70926,71247,71520,71677,72346,72482,72752,73438,73655,74081,74270,74522,74659,74962],"sourced":[29766],"pure":[6037,11221,28885,29420,35063,44459,54120,55870,66038],"mesa":[50170],"rg16i":[8471],"multi_compile_shadowcollector":[44583],"#008000":[63560],"g":[170,5945,6840,7138,7931,9276,9461,10012,13922,14965,16060,21697,22057,23235,23371,23638,24224,24728,25035,27474,29618,35718,36569,36897,37038,37993,38358,38393,40740,41202,41471,41506,42378,42394,43907,44017,44051,44109,44272,45142,45248,45595,45605,45776,46773,48144,48614,50933,51289,52551,57843,67506,67625,68614,68806,71150,71317,71525,71903,72758,73959,74141,74575,76353],"#aa00aa":[63424],"populate":[2609,2630,14103,18575,20193,26384,30655,33332,35379,35539,35637,44097,48254,49066,55116,55986,57010,58304,58370,59904,60164,64886,67073,67882,76071],"min16int":[8474],"edges":[209,343,7959,7992,8829,9879,10009,10072,10503,12219,12310,12747,12881,13105,13212,14524,18999,20736,21545,21712,22245,22771,24782,26922,26985,27087,27573,28353,29880,30372,31688,32455,34748,34861,35250,39541,39583,39721,40137,42798,43618,44134,46196,46576,46980,48514,48668,49431,49454,49528,49565,49569,49632,50348,50513,50551,50730,50904,51155,52220,54465,54712,58394,59855,66002],"meter":[4820,5033,5117,7785,8209,13396,14702,21453,22571,25205,29750,71773],"during":[7,140,214,391,434,1071,1202,1230,1266,1376,1468,1655,1920,2067,2439,2667,2752,3315,3344,3440,3729,3777,4058,4467,4508,4536,4630,4744,4814,5028,5158,5189,5986,6063,6135,6378,6398,6806,7025,7187,7366,7474,7659,7869,7927,7973,8094,8177,8274,8355,8392,8777,9042,9258,9397,9793,9970,10002,10720,11539,11635,12358,12513,12736,12882,13309,13477,13601,13706,13759,13793,14278,14314,14498,14540,14562,14702,14734,14794,14848,15844,17077,17980,18105,18169,18229,18315,18376,18513,18620,19657,20179,20343,20777,21038,21154,21306,21422,21709,21865,22093,22144,22341,23525,23663,24969,25096,25114,25309,25861,26015,26078,26787,27044,27089,27118,27171,27484,27525,27742,28176,28278,28282,28455,28463,28868,29248,29449,29500,29568,29586,29835,29997,30440,30839,30874,31379,31610,31631,31720,31860,32182,32400,32868,33081,33094,33393,33502,33781,34292,34928,35030,35250,35360,35366,35630,35748,35798,35941,35994,36096,36359,36449,36481,36622,36786,36816,37145,37261,37670,37709,38324,38403,38532,38550,38576,38633,39167,39357,39896,40085,41858,41887,41982,42400,43075,43535,44371,44808,45062,47083,48022,48177,48231,48344,48372,48603,48677,48857,48894,49033,49356,49660,49749,50058,50363,50483,50652,50969,51169,51208,51245,51987,52252,52570,52888,53192,53309,53746,54016,54281,55582,57555,57635,57812,57866,58375,58920,59199,59743,60388,60497,60559,60787,61184,62122,62340,62596,65699,66230,66524,66577,67063,67237,67351,67555,67592,67625,67688,67827,67873,68198,68498,68956,69203,70108,70174,70292,70446,70752,70839,71012,71314,72052,72346,72731,72741,72851,72986,73209,73314,73404,73496,73622,73924,74153,74229,74602,74639,74780,74918,75027,75375,75429,75508,75803,75874,76035],"sa_sigaction":[1054],"slot_row1":[56836],"presettype":[19557],"redvalue":[44274],"destinationassetpath":[19585],"smoothstep":[10474],"versa":[2067,6841,8031,19096,21971,27035,29661,33528,39381,39552,42150,44797,45975,54254,56470,58147,67766,71158,72333],"onmousedown":[21173,60456],"cliff":[29485],"shift+u":[51288],"tempindicesarray":[61100],"androidmanifest":[1003,1243,19322],"place":[4,219,474,605,811,1044,1127,1835,1933,2080,2215,2272,2395,2774,2958,3525,3706,3728,3846,4828,4959,5041,5162,5417,5561,5922,6063,7178,7496,7752,7931,7983,7998,8012,8128,9247,9891,10054,10358,10732,10825,11236,11320,11439,12659,13105,13256,13372,13534,13587,14826,15850,17968,18091,18239,18255,18347,18376,18672,18995,19130,19364,20243,20788,21031,21156,21352,21575,22180,22516,23555,24098,24333,24747,25346,25408,25530,25910,25938,26300,26647,26962,27325,27334,27342,27488,27567,27748,27760,28251,28443,28494,28989,29118,29398,29563,29728,30660,31621,33480,33585,34677,34820,36694,37228,37345,37563,37685,37713,37723,38482,38607,38771,39365,39395,39545,40205,40615,42619,43875,44205,44325,44596,44764,44796,45060,45267,45601,45976,47237,48170,48227,48583,48667,48864,48976,49150,49305,49556,49720,49737,49763,49822,50321,50347,50587,50642,51119,51344,51774,51788,52179,52415,52566,53763,54224,54434,54564,54736,55859,55993,58675,59189,59579,59897,60199,61444,61916,61934,62056,63795,66085,66204,66224,67598,67755,68833,68895,69078,70943,71216,71335,71781,71805,71860,72201,72231,72335,72644,73445,73501,73920,74592,74660,74763,74907,75157,76303],"images":[7,22,47,65,200,3981,4137,4261,4501,7873,8618,9209,10018,10139,11459,11681,12098,12358,12442,14218,14319,14808,14865,16651,17077,17452,18678,22224,22730,23852,24332,24487,24728,25276,26670,28914,31131,31661,32665,32811,34292,34842,35085,35258,37401,37675,37687,39504,40756,48364,48899,49778,50403,50463,50937,51131,51231,52057,52718,53293,54600,54718,54748,54772,54796,58388,59501,61561,63439,63711,63790,64230,64771,65990,66623,68082,68351,68906,69146,69674,71149,72724,73919,74305,75429,75909],"recreated":[7767,18024,52095,58186,59193],"navmeshcomponents":[69398,69502],"modulated":[32107,32734],"networktransformvisualizer":[11301],"materialoverride":[72567],"14f":[57090],"byte":[3248,3294,3363,5477,5622,5994,10826,11001,19242,20269,27711,34428,34526,50419,51645,63758,66036,66478,66668,68108,68268,68342,68434,73406],"entry":[736,783,1243,4903,5280,5733,9761,10406,11380,11423,12234,12303,12620,18119,19239,20594,20635,21332,23009,23525,30718,31765,32754,33487,34425,34523,35384,35640,35859,36112,36397,37009,40161,40301,41662,44363,48459,48620,48714,49043,49390,49660,49762,51966,53824,54302,54439,54564,58362,58793,59013,59346,59743,60017,64973,64986,66015,66383,66895,69996,70070,70137,70212,70389,70875,71136,71898,72141,72930,73487,74364,74653,75265,75874,75992],"scalars":[68498],"chests":[7955,34194],"surrounding":[254,5178,6206,6318,7861,10012,10068,10108,17312,22594,25570,25887,27754,35714,37689,37715,38404,42790,46552,48364,49425,50513,69716,71811],"#eeeeee":[63280],"exchange":[4494,12650,59178],"iterationoffset0":[27453],"speaker":[258,4737,7662,7763,7792,74976],"my_package_folder":[70784,70893],"renderable":[39678],"began":[29596,35673],"assembles":[23524,62785],"findobjectoftype":[6081,56463],"ilightingexplorerextension":[26722],"userprofile":[27802,43308,70161,70206,70523,74584,74877],"r16g16b16a16_sint":[8468],"logformat":[18589,20525,40583],"relaunching":[69957],"tilepaletteactivepalettepopup":[51104],"grants":[1510,12649,30404,70756],"500px":[64899,65190],"off":[30,302,1588,1895,1970,2055,2069,2259,2441,3247,3304,3491,3695,3729,5973,6150,6653,6762,6834,7017,7588,7597,7606,7620,7666,7779,7897,8206,8760,8913,9154,9337,9718,9745,9964,10115,11342,11518,11527,11598,12717,13175,13413,13482,13574,13894,14149,14320,15852,18254,20117,20541,20612,20655,21054,21510,21712,21856,21964,22464,23458,23930,24794,25066,25883,26094,26922,27321,27332,27570,27720,28407,28926,29347,29504,30612,30916,31720,31758,31816,31857,32164,32295,32400,32944,33547,34214,35030,35625,36481,36597,36631,37261,38666,39069,39140,39254,39329,39395,39724,40069,40091,40219,41320,41993,42212,42364,42973,43573,43662,43750,44081,44178,44328,44348,44438,45038,45721,46329,47194,48030,48056,48268,49481,49519,49609,49725,50147,50322,50377,50438,51403,52044,52187,52227,53810,54696,57900,59868,63112,65501,65931,65998,69965,71194,71881,72406,72722,72764,73718,74316,75249,75424,75551],"_transparencylm":[29558,45087],"ide":[3114,4876,10698,16364,16386,16400,19647,23177,28436,31430,36110,36543,40652,40656,49417,54406],"vertexcolor":[21525,31897],"some":[20,65,229,263,541,581,989,1325,1359,1373,1582,1761,1895,1947,1966,1997,2070,2189,2201,2275,2415,2593,3247,3393,3472,3731,3776,3865,3981,4287,4381,4484,4503,4520,4663,4861,4997,5038,5158,5262,5276,5371,5515,5832,5966,6041,6132,6325,6360,6421,6718,6758,6774,6792,6859,7127,7249,7508,7568,7575,8081,8120,8186,8203,8355,8434,8568,8692,8814,9205,9258,9341,9462,9604,9772,9879,9975,10012,10088,10135,10460,10572,10695,10768,10875,11306,11464,11631,11670,11764,12105,12310,12400,12670,12885,12971,13036,13115,13182,13417,13962,14220,14314,14707,14820,15026,15042,15838,16151,17984,18076,18305,18330,18413,18481,18615,18662,18746,18756,18888,18961,19026,19089,19133,19669,20089,20222,20242,20381,20457,20538,20660,20893,21004,21029,21142,21154,21302,21476,21572,21931,22085,22234,22303,23270,23443,23627,23829,23892,24435,24646,24749,24946,25181,25323,25396,25523,25845,25875,26044,26055,26074,26510,26566,26569,26587,26972,27015,27131,27172,27209,27263,27299,27316,27506,27520,27552,27678,27705,28084,28412,28475,28797,28868,28916,29121,29420,29466,29551,29587,29713,29759,29814,29832,29904,29907,30328,30343,30433,30692,30844,30871,31009,31365,31624,31726,31997,32162,32403,32609,32631,32705,32848,32923,33088,33416,33457,33470,33515,33763,33842,34164,34222,34485,34712,34890,34927,34939,35054,35216,35380,35469,35684,35779,35831,35942,36007,36077,36224,36330,36395,36538,36592,36713,37385,37501,37538,37639,37678,37696,38297,38384,38466,38498,38657,38820,38844,38909,39027,39108,39138,39325,39377,39727,39882,40063,40150,40175,40430,40524,40528,40544,40901,41218,41395,41520,41647,41678,41802,41838,41892,42109,42356,43031,43185,43456,43603,43689,43728,43950,44067,44097,44229,44371,44430,44591,44671,44830,44988,45085,45121,45239,45403,45417,45479,45565,45599,45643,45720,45848,45932,46040,46175,46511,46667,46719,46819,47179,48123,48163,48174,48329,48380,48621,48703,49101,49318,49402,49432,49484,49510,49536,49629,49640,49642,49706,49785,49837,50058,50087,50154,50178,50392,50529,50656,50670,51052,51951,52174,52236,52486,52511,52546,52730,52754,53009,53172,53292,54106,54224,54556,54729,55155,55512,55554,55886,57821,58015,58358,58459,58722,59745,59872,60388,60506,60635,60764,61450,61662,62030,62828,63689,63746,64407,64422,64462,64482,64505,64557,64580,64604,64625,64688,64739,64817,64835,64852,64870,64904,64924,64949,64966,65017,65074,65096,65111,65126,65158,65237,65261,65280,65296,65350,65379,65529,65546,65561,65578,65598,65618,65639,65659,65755,65787,65925,65968,66159,66185,66261,66384,66450,66517,66605,66910,67127,67673,68258,68433,68610,68797,68862,69095,69333,69372,69439,69753,69901,69987,70135,70315,70606,70761,70806,70914,70940,71022,71154,71173,71194,71255,71611,71672,71751,71791,71869,71932,72273,72289,72428,72665,72725,72890,72929,72940,73026,73030,73122,73193,73288,73354,73417,73443,73471,73555,73694,73876,74141,74364,74457,74603,74774,75002,75034,75067,75076,75140,75204,75226,75264,75324,75440,75518,75874,76069,76097],"direction":[130,301,2053,5160,5221,6264,6285,6723,6756,6792,6958,7804,8007,8083,8157,8169,8203,8535,8592,8682,8954,9200,9687,9782,9843,9970,10264,10394,10554,10580,10825,11477,11532,13245,13777,13919,14201,14536,14581,14951,15032,18224,21230,22170,22234,22711,24519,24747,26793,26916,27114,30148,31836,32157,32217,32249,32371,32739,32907,33736,34779,34873,35022,37283,37321,37688,37821,39260,39467,39748,39796,39985,42706,42715,42751,43188,43543,43879,44164,44926,45276,45586,46196,46515,46574,46798,47109,47394,48231,48881,49524,50552,50612,51536,51572,54319,54712,56871,57164,58163,58467,59305,59660,59836,60507,61391,62473,64092,65148,65177,65222,65246,65815,65988,71806,71873,72289],"innervertex":[61142],"acceleratorkeyevent":[34222],"barrels":[23043,27115],"unity_atten_channel":[43969],"setparticles":[31649],"based":[48,126,234,258,282,740,1259,1557,1585,1655,1761,1880,1946,1962,1977,1994,2014,2063,2539,2995,3249,3293,3348,3457,3491,3538,3807,4155,4355,4556,4801,4840,4875,5019,5179,5641,5734,5863,6120,6281,6482,6486,6688,6725,6774,6792,6831,6873,6994,7082,7390,7478,7539,7552,7660,7767,7836,8280,8501,9075,9178,9250,9426,9434,9532,9555,9622,10013,10231,10333,10564,10711,11073,11185,11494,11587,11612,11678,11737,12103,12307,12647,12797,12954,13159,13228,13234,13430,13485,13601,13707,13737,13781,13913,14521,14606,14707,14943,15866,15890,16005,16241,16470,17045,17118,17744,17752,17759,17835,17952,18221,18611,18819,18978,19017,19455,20074,20125,20993,21045,21180,21529,21579,21699,21935,22024,22044,22142,22307,23302,23452,23554,23623,23727,23817,24031,24276,24456,24598,24606,24624,24679,24724,24754,25184,25347,25878,26590,26604,26665,26703,26990,27335,27468,27549,27820,28052,28876,29101,29148,29159,29528,29858,30005,30260,30377,30521,30858,31710,31814,31859,31886,32078,32106,32137,32232,32252,32400,32681,32723,32747,32872,32923,33104,33409,33419,33482,33538,33614,33673,33753,33774,34197,34213,34575,34801,34939,35129,35226,35310,35381,35427,35714,36223,36473,36568,36753,36949,37055,37401,37500,37539,37632,37662,37884,38374,38404,38426,38459,38483,38492,38501,38519,38565,38595,38621,38643,38661,39240,39375,39458,39663,39695,40150,40192,40441,40671,40843,41289,41783,41807,42363,42413,42547,42802,42810,43118,43168,43358,43556,44164,44205,44345,44371,44376,44527,44634,44759,44867,45255,45828,46041,46196,46732,46831,47154,47581,47912,48067,48323,48364,48516,48650,48786,48868,48879,48909,48976,49144,49169,49175,49281,49428,49468,49520,49565,49570,49640,49791,50147,50168,50381,50466,50512,50521,50611,50655,50691,50712,50901,50977,51212,51237,51361,51537,51638,51721,51829,51890,51957,52242,52610,52706,52766,52993,53093,53879,54007,54120,54227,54692,54771,54814,54963,55623,55916,55993,56097,57832,57971,58138,58230,58403,58651,58859,59556,59828,61824,61909,62032,62797,63934,63989,64029,64052,65049,65370,65900,65963,66027,66116,66228,66342,66430,66468,67800,68619,68869,69103,69303,69372,69409,69751,69881,70015,70241,70607,70761,70877,70960,71416,71528,71559,71658,72181,72362,72521,72717,72762,72928,73029,73130,73431,73482,73902,74042,74162,74305,75080,75109,75320,75440,75617,75766],"publishers":[3975,4065,4220,4354,4379,4390,53713,71408],"setinputweight":[33945],"decoupling":[54175,66925,73248],"yoursearchpatternhere":[12804],"namely":[27468,52097],"segregate":[30384],"'far":[18615],"favourite":[52992,53344],"_gialbedocolor":[29495],"sv_targetn":[45717],"visiblecolumnindex":[52405],"scrollright":[63474],"surfaceeffector2d":[13841,15213],"stone":[41463,41511,42809,49542],"#db7093":[63618],"injected":[38719],"seam":[10652,26985,27086],"poses":[285,5016,8496,9138,11571,13451,35344,50881,75439],"mouseposition":[6732,18503,60390],"shopping":[4004,4038],"speak":[28609,47757],"exclusive":[234,8837,9720,20204,26267,34239,40097,42104,42116,64183,65934,68311,75264],"dragged":[2332,3602,7816,9386,11303,11490,20546,23962,34949,39748,39765,39985,51088,57492,57565,65952,72259],"tabbing":[58191,65889],"renderinglayermask":[5675,13485,20285],"editorapplication":[19593,21031,30906,38828,39170,69533,70460],"pane_options":[63465],"unity_lightmap":[47137],"cooking":[9368,10569],"gameplayer":[11115],"memoryaudio":[36238],"getactiveconfigfields":[21045],"inferred":[3088,40568,74210],"vertex":[287,1675,2063,5970,6509,7956,8056,8162,8309,8386,8724,8772,8906,9050,9465,9895,10156,10246,10378,10493,11546,11811,12745,12963,13422,13460,13748,13788,14037,14166,14502,14581,17000,18078,18774,19150,20423,21204,21455,21583,21711,21938,22088,22939,23246,24651,27699,28928,29331,29519,29718,29996,30370,31763,31888,32292,32455,32725,32915,34810,36394,36452,37800,38292,38384,38419,38431,41280,41876,42000,42148,42211,42243,42305,42360,42392,42453,42525,42547,42590,42853,42928,43038,43081,43193,43337,43683,43873,43928,44023,44290,44363,44400,44427,44839,44984,45191,45266,45477,45568,45606,45665,45844,46063,46345,46718,46825,47124,47203,47901,49001,49531,49668,50148,50367,50409,51876,55869,58466,61115,61938,68697,71959,72752,72995,73448,74194,75816],"m20":[5396,5540,20367],"compressionenabled":[3300],"linen":[63591],"upsampler":[37951],"float2":[1681,8449,10171,23308,29534,31896,32966,43342,43881,43975,44853,45680,46167,46543,46850,47210,47939],"numleft":[13081],"size":[84,155,167,254,291,426,498,582,715,872,908,1221,1315,1324,1655,2268,2392,2768,2925,3247,3318,3486,3570,3975,4273,4537,4698,4962,5322,5354,5596,5730,5949,6054,6208,6294,6381,6432,6472,6756,6770,7017,7486,7664,7707,7763,7878,7953,7967,8025,8117,8169,8319,8437,8632,8647,8822,9212,9248,9491,9535,9672,9795,9856,9890,9963,10000,10093,10129,10385,10504,10651,10740,11320,11354,11462,11494,11717,12044,12400,12453,12860,12948,13024,13107,13136,13202,13412,13465,13643,13713,13754,13930,13984,14009,14074,14247,14318,14669,14804,18316,18513,18597,19130,19160,19197,19343,19357,19945,20207,20241,20738,21114,21485,21723,21963,22043,22125,22224,22571,23270,23466,23485,23583,23674,24004,24150,24728,24739,24776,24907,24947,25090,25238,26025,26067,26069,26117,26156,26361,26456,26922,27058,27146,27172,27737,27848,28045,28089,28179,28463,28836,29153,29330,29417,29561,29696,29731,29771,29879,30225,30237,30274,30369,30861,30916,31616,31682,32108,32133,32158,32219,32253,32341,32399,32593,32616,32659,32732,32776,32864,32917,33099,33382,33436,33527,33721,33884,34197,34237,34251,34333,34458,34935,35126,35247,35322,35388,35669,35765,35926,36070,36226,36512,36691,37574,37666,37704,37826,38283,38346,38403,39234,39381,39406,39454,39509,39542,39586,39599,39643,39721,39750,39798,39865,39997,40049,40140,40522,40570,40717,40897,41179,41385,41474,41509,41884,42148,42219,42364,42766,42946,43013,43075,43115,43154,44843,45037,45159,46877,48150,48227,48370,48515,48519,48579,48635,48642,48683,49766,49849,50001,50036,50064,50094,50141,50153,50374,50423,50470,50511,50521,50528,50544,50553,50590,50629,50661,50687,50917,51090,51124,51137,51171,51182,51235,51314,51360,51513,51729,51881,51962,52182,52212,52517,52594,52737,53581,53773,54227,54320,54467,54612,54718,54767,54902,55060,56049,56097,56447,56562,57167,57381,58283,58396,58440,58666,58799,59064,59316,59624,59832,60204,60304,60637,61527,61917,61969,62032,62200,62451,62566,62674,62796,63237,64052,64748,64825,65038,65211,65229,65253,65757,65808,65941,65981,66159,66517,66751,68110,68609,68905,69145,69642,70413,71773,71860,71974,72299,72501,73024,73173,73205,73239,73302,73333,73374,73381,73417,73445,73509,73614,73938,74242,74455,74555,74627,74788,75532,75740,76037,76496],"please":[237,2351,3501,4672,6985,9288,9555,9621,11520,13970,16043,16151,17062,17938,18734,21302,22170,24096,24454,25892,29682,29921,32705,40485,42233,42238,42250,42293,42298,42303,42308,42436,42442,42451,42458,42463,42511,42517,42523,42528,42533,42538,42543,42578,42583,42588,42593,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42926,42931,44073,48674,49433,50200,50342,50934,51174,52101,52804,55808,58917,59021,62767,66800,67015,67267,67720,67758,68041,68312,68635,68781,70459,72797],"translating":[8434,73689],"lightslategray":[63585],"reflectance":[14259,29552],"trygetfeaturevalue":[76200],"wrappers":[5015,18009,40596],"unitywebrequestassetbundle":[3247,3342,3378,3553,16777,30942,68294,73026],"setstorepromotionvisibility":[67502],"yesvfx":[38129],"udp":[17062,17474,31305,31471,52645,52770,52811,52870,52918,52951,53079,53246,53685,53712,53774,53987,54002,66430],"probe’s":[27321,37692,71871],"pointerupevent":[56928,57572,60270,60769,65368],"lampposts":[38405],"shares":[358,3589,5351,11758,13261,13986,22892,27261,32712,52715,58018,58075,72939],"assemblycompany":[40365],"ints":[5474,5619,21781],"fork":[29813],"polyspatial":[72792],"xrorigin":[75122],"it's":[75,222,416,532,617,933,975,1069,1227,1272,1378,1444,1483,1502,1592,1611,1701,1836,1893,1941,2053,2191,2439,3302,4001,4064,4217,4327,4404,4508,4531,4861,4881,5597,5719,5727,5736,5994,6493,6856,7478,8091,8214,8387,8531,9275,9339,9901,10585,11791,12402,12520,12721,12970,13058,13261,13477,13837,14006,14233,14975,17000,17642,18131,18257,18620,18666,18717,18822,19998,20052,20260,20419,20766,20862,20917,21381,22528,24300,24580,24618,24621,24730,24774,24794,24906,25194,25399,25678,26042,26138,26302,26387,26510,26593,26688,26966,27138,27215,27600,29442,29467,30042,30345,30664,30896,31635,33072,33091,33395,33404,33424,33450,33487,33782,34192,34379,34698,35016,35765,35795,36235,36782,37186,37289,37623,38248,38434,38621,39137,39382,39415,39467,39560,39603,40099,40594,40616,41718,41876,42973,44449,44541,45565,45694,46274,46576,46721,46873,47377,47908,48201,48566,49371,49468,49549,49738,50002,50057,50068,50146,50648,50712,50743,50770,50783,50796,50809,50822,50860,51966,52155,52238,52528,52706,53293,54388,54430,54565,54635,54680,54713,54895,54990,55633,55641,55923,56188,56674,57081,57288,57305,57694,57840,57852,57999,58044,58375,58560,58736,59001,59410,59501,59580,59729,59825,59837,60397,60497,60637,60778,61443,61546,61658,61824,62194,62483,62532,62826,62910,63161,63741,63971,64325,64457,64697,64745,65024,65432,65458,65476,65490,65501,65512,65963,66605,66911,67979,68043,68085,69785,69845,69864,70043,70096,70345,70372,70594,70810,70937,71326,71381,71471,71806,71858,72663,72998,73088,73337,73571,73615,73741,73917,74548,74654,74898,74920,75444,75501,75872,76136],"dashboard":[933,1706,4039,17206,17220,17326,17474,19638,22355,30382,30446,30475,41697,52103,52778,52948,53108,53483,53838,54046,66586,67243,67262,67850,67903],"initialize":[1685,2609,5338,5345,5732,8438,8811,12198,14026,19151,19399,20343,21054,21311,26252,29946,33476,34109,34214,36816,36911,38710,39170,44898,48554,52819,53303,53687,56667,57715,58001,58054,59095,59453,60017,66894,67048,67090,67207,67284,67294,67416,67543,69384,69488,73186,75023,75133,75706,75874,75934,75987],"'create":[2222,34164,51142],"stringevent":[66943],"considers":[361,511,3319,3728,10012,14734,26859,26985,31641,33383,38482,38751,39137,39587,40141,42067,45096,50381,63807,70235,70449,70823,71054],"bones":[328,1936,1977,2002,2063,2190,7081,7167,7833,7846,10499,12963,13451,18054,21576,22066,22502,24717,26010,29391,29730,29890,37407,38676,71762,74895,75576,76295],"markdirtyrepaint":[56782,60699,60929,61032],"positioncs":[49009],"nd":[50343],"precomputes":[9908,22127,22788,26908],"inputed":[39620],"yesdirectx":[37767],"fear":[29790],"lookobj":[25644],"healthhealth":[53724],"uncolored":[44097],"devicesimulatorplugin":[20005],"scoreboarddisplay":[33202],"semi":[11297,13696,23101,29710,35252,38297,38347,42896,46090,48022,49569,54800,59890,63239],"gl_ext_blend_minmax":[43848],"querieshittriggers":[9224],"setnextindex":[58475],"wrapper":[26434,29166,42017,42312,43101,45389,52650,66450],"audioeffect":[7570],"readpixels":[72996],"makes":[84,155,564,1315,1537,1717,1967,2172,2620,2657,2726,2776,3363,4223,4994,5726,6370,6427,6472,6758,6837,7487,7615,8096,8183,8342,8509,8782,8819,9386,9466,9690,9827,9875,9909,10012,10070,10410,10572,11074,11191,11215,12885,13217,13250,14700,14954,15967,17062,17110,17835,17925,18105,18229,18375,18500,18948,19053,19559,20240,20688,21002,21049,21332,21605,22093,22127,22504,23272,24098,24276,24565,24755,24900,25165,25263,25584,25747,25904,26096,26295,26459,27060,27089,27214,27525,27553,28168,30047,30101,30142,30848,30872,31365,31600,31703,31795,31997,32115,32253,33399,33537,34214,34863,36085,36570,36762,37373,37689,38375,38508,39239,39310,39406,39956,40767,41783,41860,42243,42767,43184,43317,43484,43543,43660,43734,43806,44102,44139,44171,44442,44541,44632,44770,44835,45583,45746,45857,45943,46367,46718,47026,47370,47957,47990,48028,48613,49357,49483,49574,49637,51035,51155,51616,51849,52046,52415,52921,53012,53184,54759,54796,55511,56672,56912,57274,57483,57797,58704,58918,59122,59562,59836,60497,61449,64454,65687,65982,66225,66517,66960,67366,69387,69491,69568,69693,70965,71105,71219,71644,71775,71808,72248,72405,72841,72843,73008,73176,73393,74197,74549,74592,74631,74791,74828,74850,75080,76217],"avoiding":[9884,13306,20574,34986,42798,68211,72942],"gif":[6713,13436,25298],"wanting":[4847],"acn":[265,4768],"profilercounteroptions":[35423],"metal2v3":[12232],"#92":[13988],"subtraction":[72301],"cgi":[73741],"tactical":[6737,51155,51245],"asterbecause":[41472],"require'":[45491],"remodel":[18506],"preset":[82,5260,6703,7734,7757,10430,12767,15296,19454,20612,24774,28325,28886,29759,32879,33529,35187,36599,40097,48373,49908,50647,54729,55857],"laws":[41309],"‘playable’":[34161],"textarea":[23920,29680,36252,36400,59700],"splitter":[36548],"moveable":[27304],"consumer":[20403,23466,33482,52694,70953],"gridbrusheditorbase":[51551,68632],"alwaysexpand":[40866],"two":[73,84,104,205,234,246,369,519,554,585,992,1127,1277,1315,1370,1558,1672,1707,1765,1979,2053,2064,2252,2282,2354,2383,2431,2765,3296,3317,3381,3447,3476,3486,3573,3593,3735,3797,4239,4355,4447,4464,4873,5150,5221,5324,5733,6074,6157,6235,6263,6283,6320,6347,6395,6486,6723,6750,6754,6811,6934,7168,7253,7390,7579,7844,7898,7927,8091,8149,8197,8247,8303,8505,8819,8988,8999,9145,9163,9231,9258,9296,9384,9608,9682,9726,9827,9911,10018,10086,10120,10204,10331,10406,10460,10697,10772,10793,11107,11191,11313,11511,11588,11602,11802,12345,12865,13148,13159,13199,13247,13408,13480,13554,13648,13670,13704,13869,14073,14348,14681,14723,14795,14852,14968,14982,15866,16919,17642,17835,17927,17981,18053,18139,18177,18230,18312,18324,18376,18506,18745,18985,19337,19351,19381,19501,19653,19937,20215,20378,20460,20569,20725,20919,21009,21029,21203,21328,21524,21572,21704,21896,22065,22189,22292,23270,23468,23583,23812,23964,24169,24275,24519,24629,24638,24786,24792,24952,25047,25100,25225,25261,25341,25345,25376,25582,25901,26070,26125,26243,26264,26304,26460,26514,26562,26586,26673,26853,26931,26999,27034,27068,27113,27129,27325,27485,27571,27694,27996,28179,28197,28352,28401,28481,28754,28762,28879,28951,29021,29157,29330,29562,29587,29717,29808,29817,29918,29994,30251,30322,30540,30855,31836,31858,31917,32090,32193,32296,32366,32855,32921,33194,33438,33472,33512,33527,33575,33945,34166,34272,34480,34627,34637,34681,34708,34778,34877,35107,35202,35254,35322,35633,35782,35797,35977,36080,36197,36336,36573,36694,36803,37289,37480,37601,37681,38021,38403,38458,38502,38624,38797,39241,39259,39765,39872,40154,40208,40513,40836,41673,41807,41863,42023,42163,42320,42358,42797,43071,43118,43128,43154,43185,43223,43455,43493,43533,43710,43888,43930,44071,44218,44384,44523,44704,44771,44832,45145,45271,45535,45613,45634,45735,45858,46011,46156,46510,46766,46926,47126,47608,48290,48547,48620,48657,48683,49169,49366,49450,49454,49525,49617,49635,50025,50127,50355,50378,50414,50432,50599,50688,50932,50960,51013,51129,51174,51294,51867,51960,52176,52230,52256,52590,52683,52712,52718,52730,52750,54240,54302,54504,54601,54762,55037,55234,55550,55638,55728,55806,55863,55990,56075,56099,56125,56393,56475,56689,56736,56836,57134,57337,57557,57633,57823,57921,58067,58136,58192,58518,58663,58789,59064,59275,59837,59908,60990,61179,61391,61490,61547,61597,61771,62110,62412,62495,62769,62966,63667,63725,63897,63918,64002,64139,64233,64340,64643,64755,64975,64988,65063,65775,65952,66003,66252,66341,66380,66401,66456,66617,66822,66937,67070,67157,67584,67765,68245,68376,68434,68459,69620,69705,69723,70190,70230,70240,70265,70303,70693,70774,70829,70902,70986,71137,71383,71615,71761,71884,71898,71938,72289,72377,72467,72533,72726,72762,73246,73313,73665,73751,74014,74045,74239,74512,74642,75079,75289,75431,75503,75743,75983,76300,76332],"packages'":[71359],"residual":[31720],"spherecolliders":[33698],"frustumheight":[21966],"fixing":[30345,35718,36677,38862],"interacted":[24737,32775,39606],"embedrequest":[69569],"250px":[62449],"holograms":[12515],"modalwindow":[59678],"editorguiutility":[2475,26733,48180,49959,52379,55961,56498,59592,61584,63244],"look":[1102,1904,2045,2064,2197,2225,2246,3262,3792,3998,4131,4256,4429,5061,5116,6265,6290,6758,6831,8568,9258,9879,10108,10391,10544,13042,13347,14009,14763,18158,18367,18764,18828,19623,20767,20915,20918,21164,21503,21997,22638,23462,23795,24053,24726,24769,24796,25138,25172,25225,25276,25623,26357,26783,27490,27506,27520,28446,29719,30098,32104,32233,32315,33494,33550,33583,34566,34783,34868,36627,37293,37423,38412,39257,41753,41893,42354,42811,43113,43183,43205,43920,45601,45648,46719,47232,48287,48456,49428,49507,49527,49594,49647,49817,50008,50374,50522,51033,51328,52143,52638,54347,54709,54795,56041,56702,57190,57628,58378,58651,58888,59556,59999,61663,61828,62836,63068,64640,65133,65369,66617,66849,67651,67979,68047,68825,68873,69058,71218,71447,71525,71681,71805,71899,71970,72357,72512,72668,72928,73397,74524,76149],"appendseparator":[56029],"deforms":[367,13457,29891],"positionhandle":[20855],"addcommandbuffer":[23626,38192],"bitgem":[6758],"receiving":[218,4241,4834,5972,10093,14859,16579,18584,22588,27263,29420,32106,37839,46057,46785,47803,48230,53324,55732,57961,59750,66721,67153,67919,68471],"cmdline":[737,69363,69467],"gpuframetime":[20528,21933,76048],"addondemandresourcetags":[2791],"launchd":[66692],"determine":[122,296,518,717,2958,3309,3483,3595,3890,3975,4566,4773,4958,5226,5291,5332,5725,5734,5954,6101,6353,6992,7022,7175,8083,8536,8621,9329,9500,9878,9966,10093,10654,11069,11468,11606,11667,11844,12409,12437,13418,13456,13590,13724,13778,14016,14541,19407,19667,20077,20419,21515,21576,22047,22844,23441,23942,24554,24733,25329,25850,25980,26049,26084,26683,26707,26863,27261,28446,28681,29386,29595,29697,30173,30184,30267,31816,32240,33383,33414,33529,33641,33842,34461,35269,35366,35622,35714,35795,35901,37099,37422,37559,37667,38269,39389,39476,39608,39744,39800,39981,40073,40563,41384,42010,42063,42243,42318,42896,43034,43130,43452,43610,44133,44787,45446,45962,48373,48852,48874,48987,49182,49396,50087,50290,50349,50374,50692,50968,51011,51588,51785,51802,52042,52320,52528,53009,53922,56181,57033,57831,57928,58861,61092,61543,62747,63807,66479,66905,67675,68546,68956,69203,70275,70438,71020,71378,73465,73655,74548,75160,75249,76130],"visualise":[8972,40541,52037],"materialpropertyshaderlab":[45108],"tip":[610,1511,1701,1836,2170,2657,2971,3889,3995,6418,7660,8090,9012,10596,11589,11859,12116,12589,13374,14664,17957,18854,18936,19104,20111,20741,21524,21872,23736,25912,26300,26574,28625,29214,30516,34601,35127,37135,38542,38593,38632,38951,39231,39321,41327,41602,41718,43236,49369,49391,49696,49909,52137,53902,54310,54662,54681,55155,56841,59019,59532,62213,62859,63119,65002,67041,67236,69703,69893,70587,70775,70872,70973,71194,71258,73695,74828,74991,75047,75083,75148,75201,75576,76296],"magnify":[13218,58392],"'xxxxxxxxxxxxx'":[28617],"user's":[1487,2958,4527,9773,12400,12643,18681,22717,29858,53744,57975,58730,59128,66119,66635,67148,67501,67624,70026,72087,72942,73026,73209,73452,73622,75107,75221,75259,75322,75901,76138],"pickable":[39140,57827],"rendertype":[8721,10149,14161,23299,29525,31883,32941,43422,44032,44093,45627,45968,46146,46539,46841,47199],"markup":[14005,17015,39638,40051,49817,65687,65912],"myint":[39892,54531],"clients":[10794,10804,11068,11185,11199,11221,11263,22966,53834,66037,66205,66233,66357,66410],"repacks":[27054,53189,53423,53703,54002],"blit":[4584,11738,22737,44839,75409],"contextclickevent":[60373],"enforced":[8521,21308,23065,35714,36031,54547,66318],"doggy":[9713],"ascending":[2663,41007,41545,58288,71216,71459],"bucket":[29154],"pancaking":[12940,43187],"proj":[49797],"runtimecontracts":[38743],"unity_define_instanced_prop":[23258],"gons":[21524],"ivisitpropertyadapter":[36855,37145],"overloaded":[35972,68887,69123],"believability":[6150],"g_hash_table_insert_replace":[74556],"promoted":[69330,69436],"chargebacks":[4085],"exampledragger":[60231],"subclasses":[6067,51601,57845,58036,65738,66825],"understand":[430,885,1396,1616,1807,1815,1849,2375,2439,2956,3432,3736,6056,6767,8972,11916,12180,12367,12555,12970,13632,17045,18318,18417,18678,19030,19220,19277,19653,21202,21344,21865,22132,24601,24621,24916,25822,25831,25845,26103,26242,26274,26585,26654,26666,26698,27294,27488,27762,29013,29476,30164,30344,30500,30517,30829,33446,33506,33628,34306,34392,34511,34649,34956,36296,36432,36510,36742,38261,40169,40541,40544,41559,42066,42110,42611,43008,43024,44905,45474,46816,48977,49170,49423,49850,50308,50661,51862,52008,52224,53773,54744,56674,57298,57994,58021,60354,61957,61981,61995,63125,63709,64038,64314,64376,65690,65727,65765,66184,66330,66546,70940,71394,71421,71751,71999,72012,72106,72113,72122,72126,72290,72914,74886,75585],"documenting":[18661],"done":[1961,2064,2247,3415,3483,3935,3972,4215,4366,4761,4856,4907,5033,6265,6290,7448,7465,7832,8894,9351,9594,10080,13032,14910,18377,18449,20341,20878,21356,22128,22142,23818,24030,24738,24741,25540,27172,27508,27522,27589,29266,29898,33439,34682,35747,36439,38116,38456,39637,41290,41843,43907,43957,44093,45170,45194,45266,45619,47608,48146,48591,48687,50929,52601,54209,54266,58259,58484,58923,61624,63107,66313,66555,68160,68614,71871,72359,72724,73249,73982,74902,75433,75765,76035],"polygoncollider2d":[207,12749,15081,74184],"canstartmanipulation":[60257],"distanceattenuationcallback":[5214],"diagnostics":[1039,6328,12402,17265,23201,31413,34970,38737,40613,44318,52528,53770,66915,67953,70363,70914,74070,74346],"plot":[4979],"disposed":[26112,26181,26245,68088,68266],"closes":[1469,2595,3921,12609,24825,35631,35785,39103,55581,56523,65701,70922,71331,71477,74238],"hash":[1419,3268,3300,3418,3595,3735,12399,19527,24810,25121,33781,35129,66679,67603,68611,68701,70613,73192,74153,74556],"unity\\editor\\data\\pluginapi":[28053],"slippery":[15844],"tessellating":[21524],"repeat":[167,3521,7965,8431,8828,10269,10477,12728,13211,13898,14606,19006,19633,26613,30204,30213,32153,32703,32731,40010,40281,41775,48663,49376,50734,52895,53837,54393,54450,61322,64452,74242,74679,74999],"follow":[106,471,486,500,512,547,631,931,3318,3472,3511,3880,3979,4161,4220,4240,4426,4498,4757,5898,6325,6416,6463,6794,7188,8065,8429,9803,10392,11842,12154,12334,12751,13019,13182,13996,17370,18165,18624,18674,18945,19049,19560,20190,20263,21661,23454,24778,25142,25187,25670,25696,25753,26562,26599,27257,27620,27645,28064,28192,28282,28390,28771,29162,29758,29801,29848,31113,32196,33064,34372,34686,34821,35104,35195,35841,37402,37543,38505,38661,38752,40616,41690,43141,43371,44211,44876,45064,48077,48349,48359,48552,48572,49159,49336,49802,50227,51158,51236,51859,52185,52534,52686,52863,52940,52966,53082,53350,53791,54044,54393,55859,58660,64317,64549,66592,67139,67518,67886,68566,68689,68811,68849,69040,69293,69506,69775,69822,69873,69990,70060,70094,70127,70323,70336,70390,70771,70984,71010,71226,71311,71353,71370,71433,71481,71681,71771,72014,72188,72248,72687,73136,74529,74943,75067,75347,75476,76198],"unexpectedly":[8546],"hopefully":[6847],"equivalent":[155,3065,3963,6139,7383,11650,13041,15844,18508,18623,20050,20336,20595,25497,27138,27917,29906,30692,34999,36824,36977,37247,37280,40336,40879,41180,41308,41467,41828,42245,42258,43297,43586,43875,44691,45455,45591,49183,49850,52040,55894,59582,62806,64079,65024,65873,68536,68667,69813,70984,71054,72296],"textfilepath":[2923],"m_simpletreeview":[52330],"choice":[64,156,369,3088,3569,4539,6036,6273,6298,7487,10095,11921,12185,12372,12560,12954,13041,13629,14328,17062,18346,19225,20622,24629,25911,26049,26868,26960,30473,32372,34311,34397,34516,34907,37670,38293,40097,40652,48254,49627,49635,54601,64703,64755,65061,65850,65976,71195,71282,72385,72663,75204],"matchsearchgroups":[2529,2557],"k1":[14345],"yesinversesquared":[37799],"detachfrompanelevent":[56681,60542],"openjdk":[1598,50197,69369,69473],"neighbouring":[10082,71876],"initialisation":[67549,74141],"speaking":[11598,12865,45576,60638],"gesture":[3003,18506,39260,52754,75099],"sports":[8096,53285],"backs":[18315],"doesn’t":[343,501,511,2716,3247,3311,4583,4665,4866,6774,7906,7965,8302,9190,10115,10493,10596,11191,11803,12114,12586,12728,13187,14726,18230,18267,19150,19637,20179,20593,21029,21930,24489,24920,24946,26108,26255,26269,26434,26507,26571,26783,27055,27142,27786,27870,28114,28185,28450,28464,29333,29814,30311,30868,33104,34203,34566,34672,34896,34948,35203,35379,35625,35714,35794,35917,36489,37675,38735,39333,39899,40180,41160,41346,41520,41921,44749,44896,49763,50156,50367,51788,52461,52694,52737,52747,52763,53792,53990,58066,66364,66467,67703,68531,68610,68796,69311,69417,69865,70260,70373,71205,71392,71562,71666,72193,72385,72505,72926,73413,74156,74724,74827,74837,74852,75417],"suspicious":[38767],"stylelist":[62972],"button's":[54211,58673,64450],"holder":[65778],"signals":[1058,4832,5037,7493,7579,7588,7597,7606,7807,22586],"pfx":[12603],"recompile":[18128,19027,33842,34985,38797,40176,41844,45037,49371,59191,68637,73662],"“as":[18734,50342],"bumpy":[49611,50932],"regularly":[4665,25083,25961,28789,33443,35882,48364,52491,66563],"warning":[208,501,1614,1909,2746,3895,5301,6808,7061,8894,8977,9489,10118,10342,10871,11369,11740,17926,18328,18819,18927,19096,20398,21029,22057,22130,23525,24984,25106,25163,26451,27184,27300,27639,29004,29059,29920,30341,31013,33075,34257,34338,35081,35759,36096,36205,36683,38719,41986,43024,44307,44688,45037,45094,45455,48261,49376,50157,52582,52878,53322,56157,62073,63425,64248,64731,66794,67050,67258,67856,68954,69200,70563,70593,70830,70984,71044,71284,71392,71533,71627,72851,75017],"coord":[29357,44944],"map":[316,1404,2547,2891,3003,3577,4909,5267,6320,6737,6758,7831,7845,8066,8615,8820,9453,9771,9878,10268,10514,11815,12164,12921,13200,13826,13902,14006,14029,14103,14233,14605,18075,19676,21439,21555,21592,21711,22071,22498,23666,25171,25229,25276,25347,25796,26878,27040,27195,27228,27276,27591,29863,30301,31743,32065,32341,32607,34281,35008,36240,37407,37653,37685,37990,39673,39740,40841,41223,41768,42268,42372,42440,42447,42456,42470,42515,42521,42551,42698,42750,42827,42838,42849,42870,42878,42898,42924,43113,43149,43172,43216,43690,43966,45099,45136,46813,46831,47418,48289,49449,49468,49473,49490,49498,49510,49514,49561,49600,49607,49629,50356,50388,50436,50808,50897,50960,51018,52769,68547,69333,69439,70831,70963,72524,72761,74256,75503,76100],"commandbuffers":[23622,28058,28067,49281],"gfxthreadprovider":[75939],"central":[22100,26109,26247,32285,33428,50941,69729],"x334":[66798],"mytreeelement":[52352],"keyframed":[38661],"skpaymenttransaction":[67612],"packet":[66110],"setareaenabled":[35692,36542],"probuilder's":[17000],"newest":[4871,25096,38281,65963,67148,70442],"trampolines":[52626],"deactivation":[4867,19043],"dilation":[14238,50796],"getcontentindent":[52429],"erase":[8359,36494,50511,51194,51301,51530,51569,51603],"entirety":[18267,48162,59100],"cpu’s":[26478],"b19c9d64967a9691abecdb66364ae392":[66685],"infinity":[7128,8256,8555,9010,9157,9174,9304,9740,10586,13171,13240,13570,13682,13867,14996,44298,58559,71571],"boldface":[40064,49824,62012],"severity":[70756,75144],"keep":[7,167,517,989,1467,1723,1896,2089,2261,3472,3593,3959,4201,4565,4867,5260,5718,6314,6958,7015,7483,8065,8118,8214,8252,8356,8487,8573,9008,9155,9163,9368,9509,10763,11639,11844,12473,12903,12988,13159,13427,13552,13620,13670,13835,13869,14681,14794,14849,14976,14999,18075,18621,18717,18934,19231,20457,21394,21524,21964,22086,22307,23282,23522,24098,24559,24667,24772,24792,24984,25066,25177,25206,25399,26004,26060,26244,26448,26587,27553,27814,27930,28501,29724,30372,30384,30663,31642,31765,32776,33390,33538,33656,34417,34924,34985,36093,36683,36697,37619,37639,37681,39169,39437,39663,39919,40923,41571,41604,42178,44080,44457,45863,47852,48373,48511,49706,49781,49914,50002,50579,51035,52042,52586,53140,53756,53997,54590,54635,54713,54897,55886,56722,57750,58920,61090,61601,61925,62027,62150,66667,67023,67234,67545,67624,67850,68088,68266,68545,69330,69436,70500,70729,71012,71206,71913,72531,72730,72920,73382,73417,73615,74418,76023],"hitting":[22180,26919,27483,44453],"asleep":[11562,15857,33676,35018,35290,38562,38592],"allcharacters":[59440],"“using":[68652],"repeatable":[16579,32173],"contains":[54,274,277,462,493,579,620,653,665,867,894,938,982,1023,1042,1160,1178,1190,1202,1229,1243,1276,1331,1418,1520,1619,1706,1751,1779,1804,1916,1944,1998,2037,2052,2192,2228,2898,2947,2963,3039,3229,3247,3306,3351,3468,3485,3569,3595,3729,3890,4025,4121,4207,4273,4467,4570,4713,4749,4793,4809,4879,5023,5122,5176,5220,5496,5724,6381,6443,6471,6484,6679,6768,6787,6935,6953,7015,7163,7478,7763,7888,8793,9109,9138,9223,9261,9593,9898,9944,9986,10249,10406,10636,10770,11077,11320,11359,11404,11464,12002,12846,13076,13351,13502,13601,13706,13724,13805,13914,13962,14073,14254,14304,14584,14764,14923,14928,14933,14938,15810,15967,16005,16020,16036,16227,16675,16843,17110,17240,17835,17960,18052,18395,18455,18665,18718,18738,18746,18759,18918,19647,19666,20008,20066,20091,20190,20231,20237,20991,21002,21039,21206,21460,21636,21659,21688,21701,21892,21986,22026,22051,22064,22266,22462,23246,23412,23478,23527,23533,23591,23623,23710,24058,24515,24629,24638,24969,25154,25215,25279,25462,25569,25622,25717,25900,25980,26100,26108,26135,26248,26436,26508,26662,26707,26794,26810,26816,26927,26957,27078,27169,27261,27312,27325,27674,28404,28840,28865,29121,29189,29346,29391,29408,29482,29576,29738,29777,29861,29904,29919,30168,30255,30280,30320,30343,30407,30700,31595,31610,31663,31982,32141,32238,32243,32848,33094,33394,33456,33477,33639,33889,34042,34841,34909,35185,35202,35337,35381,35614,35641,35690,35772,35826,35979,36020,36220,36375,36472,36678,36695,37268,37385,37496,37702,37749,38326,38448,38735,39030,39096,39208,39228,39447,39921,40170,40173,40482,40516,40617,40681,40746,40995,41467,41497,41780,41787,41868,41994,42045,42111,42193,42317,42350,42354,42386,42425,42597,42662,42938,43003,43023,43083,43085,43097,43206,43452,43907,43955,44198,44283,44303,44320,44386,44447,44535,44590,44688,44755,44784,44851,45044,45154,45386,45417,45517,45566,45929,45959,46807,47137,47163,47236,47943,48171,48380,48540,48593,48833,48976,49145,49171,49173,49332,49510,49629,49752,50002,50291,50647,50662,50704,50951,50992,51135,51234,51347,51844,51886,51951,52243,52600,52704,52710,53007,53250,53882,54010,54430,54570,54920,55071,55159,55714,56706,56825,57515,57625,58204,58338,58370,59123,59275,59524,59752,60559,60647,60778,61320,61666,62103,62379,62701,62748,62975,63065,63771,64636,65166,65736,65831,65850,65965,66178,66388,66450,66468,66816,66843,66877,67095,67400,67800,68208,68378,68542,68959,69206,69514,69709,69719,70068,70211,70280,70349,70451,70693,70769,70978,71018,71281,71519,71645,71662,71759,71897,72187,72207,72278,72368,72521,72781,72867,72908,72945,73182,73299,73354,73619,73917,74137,74228,74614,74642,74784,74837,74909,74990,75134,75323,75398,75444,75515,75915,75963,76071,76250,76332],"span":[49832,69018,69270,75368,75793],"we":[2069,3242,3309,3346,3349,4133,4997,6597,6688,6831,7562,8215,9597,12607,12992,13734,14912,17370,19478,19657,20893,23808,24083,24244,24310,24489,24728,24769,24790,25492,25631,26074,26947,27083,27467,27506,28457,28781,29094,29434,29630,29784,30019,30070,30110,30632,32933,34627,35541,36768,36883,37261,37899,40584,40616,41290,42255,43188,43618,45298,46158,46874,47233,48227,48335,49421,49465,49518,49820,52067,52178,52275,56609,57657,61735,62038,66429,66623,67423,67779,68611,68799,68905,69145,74699,76257],"defaultname":[51617],"wire":[22193,22226,33907,35074,50401],"arguments":[733,1040,1771,1859,2723,3242,6385,6440,10909,17930,19239,19636,20190,21015,23812,23953,24193,24470,25455,27639,27682,27764,28183,28407,28496,29283,29435,30307,33299,34200,34425,34523,35082,36118,36557,40594,40868,41187,43414,44315,48068,49785,51785,54560,66636,66897,66941,68280,68434,72086,74603,74646,74674,74798,74962,75983],"enc4":[43889],"computer":[165,229,840,1122,1653,2179,3852,4140,4223,4314,4387,4541,6408,6468,6758,7615,9067,9264,12603,18816,18947,19071,19127,19620,22125,22588,23430,25031,25163,25194,25445,25910,26690,28135,28323,28383,28753,28762,29858,34378,34994,35797,40657,41843,52094,52236,52491,52687,66200,66354,66531,66978,68059,69746,69992,70150,70467,70592,71246,71266,71323,71396,71424,71534,71677,72290,72392,72789,73274,74180,74760,75195],"cmdthrust":[10897],"unity_setup_instance_id":[23261,31967,32978,43355],"controlled":[250,1925,2257,2425,4813,5206,6140,6811,7771,7930,7964,8098,8373,8999,9163,9294,9334,9723,10260,11090,11292,11604,12698,12727,13159,13552,13670,14593,14881,14959,18357,21576,22307,23619,25599,26058,26586,26923,32731,33448,34101,35315,39457,39673,39812,40526,42968,45318,46766,49455,49510,49607,49630,50288,52036,52235,54258,54763,62801,65941,68602,71755,71880,72331,75474],"insects":[32701],"ca":[51458,53612,69885],"wait":[566,2827,3403,3668,4366,4418,4634,4867,6368,6429,9127,14849,21370,21898,26289,26375,26538,27015,28170,28417,28639,31643,34631,35735,36055,38851,39159,50969,67507,68488,73683,74629,75433],"surrogate":[9282],"'window":[16060,16564],"traced":[19285,34860,37892,65999],"fly":[6025,7482,9260,17000,21156,22628,25569,32316,32360,39277],"\\development\\unity\\editor\\unity":[25462],"5_examplename":[45076],"twelve":[43057],"—":[21326,40359,66470],"licensesurl":[18939,70836],"compressedinmemory":[73088],"drive":[2172,7224,8526,9075,15013,18071,22080,22130,23113,24790,24976,26566,31764,32922,35127,39458,39964,54263,64756,64892,66569,69300,69406,69758,69794,70259,70357,70776,71040,71391,74418],"bytesperinstance":[5476,5621],"htm":[6712,13948],"failures":[35001,67271,67339],"c0y":[5382,5526,20353],"unnoticeable":[20438],"il2cppoutputproject":[72869,74839],"sold":[234,25921],"ipropertyvisitor":[36746,36824,36977,37235],"toggleleft":[59704],"itransform":[56112],"rec709":[34289,34502],"threads":[1768,6048,6138,9466,11570,11813,12349,12885,18015,18257,19140,26267,26296,26459,26477,26510,27705,27986,28457,29167,30905,31649,34212,34279,34493,35137,35732,36040,36118,40545,66897,68158,72917,73029,73632,73695,73900,73940,74724,76023],"onkeydown":[59796],"m_touchcount":[20018],"danish":[9279,53618],"dict":[37017],"potential":[4137,4209,4450,11589,11821,12419,13464,18224,18613,26244,26485,27083,29331,33429,34379,35089,35323,37236,37627,38868,42058,43165,43185,48364,57592,64332],"gameobjectname":[56379],"gl_arb_shader_viewport_layer_array":[43480],"option+left":[39300],"flipper":[18225],"providescontact":[33728],"clusterinputmanager":[15199],"goober":[48349],"failure":[478,28877,52499,66720,67272,67518,69538,76308],"audiomanager":[7675,15054,38920],"#ffb6c1":[63581],"contenthash":[25124],"modo":[24690],"fuzzysearch":[2659],"captureframetimings":[20522],"denoiser":[23452,36599,37919],"msdn":[5987,6103,44873,45664],"bonjourtest":[34744],"competition":[52033],"onmessage":[40582],"rounds":[66159],"spatializers":[4749,5201,7674,72878],"separator":[1431,44696],"d_dropdown":[63449],"accurate":[6910,8094,9061,9973,10011,10070,10564,11527,11598,13249,14560,15838,18233,19045,19990,21160,21391,21870,27557,31385,31702,32137,33395,35254,35793,36172,36204,36543,36636,37596,38484,38509,42211,45577,50514,51991,52876,53514,58396,58442,68698],"setlayouthorizontal":[54274],"engineers":[5116,5820,66390,67993],"vice":[2067,6841,8031,19096,21971,27035,29661,33528,39381,39552,42150,44797,45975,54254,56470,58147,67766,71158,72333],"avoid":[617,690,700,1285,1468,1735,2052,2067,3320,3680,4574,4665,4866,4976,5260,5719,5962,6041,6068,6378,7482,7784,8254,9705,10001,10072,10725,11044,11320,11612,12884,12990,13056,14790,14897,18169,18257,18501,19479,19627,20181,21029,21501,23456,24223,24794,25044,26092,26358,26986,27125,27297,27536,28176,29130,29183,29368,29568,29916,30008,30525,30869,31635,31719,32112,33082,33088,34160,34379,34664,34693,35760,35838,35944,36224,36541,36679,36786,36815,37261,37291,37617,37702,38402,38873,39966,40274,40689,41867,41876,42101,42149,42185,42255,42944,42947,43195,43962,44377,44625,44671,44870,45455,45582,46074,48227,49518,49706,50002,50669,51052,51342,52034,52218,52594,54895,56721,57750,57959,57995,60620,61328,62867,63220,63938,64318,66008,66431,66556,67551,67570,67659,67877,68198,68928,69171,69303,69409,70450,70726,71029,72319,72476,72532,73025,73450,73580,73817,74639,75140,75410,75762,76037,76194],"h1":[61970,62037],"gcreservedmemoryrecorder":[36260],"lightmapeditorsettings":[36584],"knumframetimings":[20479],"contain":[283,532,810,998,1124,1406,1592,1621,1706,1812,1821,1836,1894,1955,1994,2188,2260,2769,3293,3306,3340,3469,3571,3731,3855,4033,4131,4227,4288,4506,4573,4877,5764,6057,6126,6840,7071,7172,7468,8058,8368,8419,8765,8903,9489,10114,11075,11667,11842,12154,13042,13483,13816,14003,14313,17976,18058,18137,18188,18217,18256,18379,18454,18750,18844,18897,18912,19005,19129,19675,20089,20261,20396,20423,21045,21532,21715,22333,23273,23513,24299,24506,24524,24753,25187,25276,26109,26247,26708,27679,28038,28115,28281,28601,28846,29006,29392,29471,29774,29918,30062,30306,30518,30917,31019,32065,32260,32788,32847,33104,33494,34192,34372,34611,34638,35089,35232,35711,36110,36360,37098,38336,38347,38439,38735,38858,39117,39880,40234,40616,40712,41165,41307,41379,41470,41795,41865,42425,43071,43484,44363,44548,44688,44758,45062,45147,45616,45629,45770,45932,46760,47067,47244,47948,48353,48599,48909,49320,49451,49468,49535,50007,50344,50683,51405,52066,52095,52558,52933,53007,53303,58375,59556,61668,61920,62703,62788,65878,66069,66467,67091,67164,67785,68499,69372,69476,69641,70386,70686,70756,70835,70871,70954,71028,71165,71614,71664,71901,71985,72275,72706,72945,73300,73395,73416,73661,74627,74788,75221,75540,76124],"objecttodeactivate":[33128],"dampens":[14955],"motions":[1944,2192,6263,6283,6315,6321,7927,22470,27813,37281],"eighty":[6688],"catalan":[53612],"shift+tab":[58156,60511],"rebuilding":[434,33842,52910,72851],"parsers":[6036],"warnings":[2702,7115,7669,8974,12442,18112,19240,22626,25129,27763,30509,33296,34426,34524,35758,36096,38752,49404,53184,53376,56173,62073,63106,70571,71109,71317,72395],"nobuyori":[67756],"font_very_big_size":[63242],"keyboardnavigationmanipulator":[60219],"audiochorusfilter":[7466,15150],"interruptedsame":[62841],"inputfeatures":[76209],"onsuccess":[74006],"45deg":[62269],"resolvedstyle":[54871,62709],"trygetvalue":[56706,56773,60954,61059,75846],"android_id":[394],"yesbaked":[37849],"uyu":[53676],"onpostrender":[21357,29974,38197,74566],"millions":[6936,47307],"previewimporter":[25067],"simpletreeview":[52269],"doubleclickeditem":[52470],"exploring":[70236,71284],"output_file":[25137],"jumps":[36492,38661,44294,50322,62012],"enable_profiler":[4654],"exportfilename":[21032],"informational":[2747,35003,67787],"gestures":[12219,25333,39258],"fell":[4997,29181],"relays":[1463],"#x70":[66770],"v":[1686,2025,6531,8742,10182,12884,13215,14185,23261,31902,32976,34823,38487,41851,43362,43879,43971,44407,44899,45252,46360,46854,47219,47924,52144,52672,52892,64704,65066,66615,67776,71969],"d_scrollright":[63474],"springjoint2d":[13700,15194],"insertintoanexistingmenu":[56013],"somehost":[25945],"guest":[30412],"k_damagecapwarningtext":[56160],"scrollbar's":[39748,63360],"mikktspace":[21553],"samplers":[8428,12357,19229,20340,29995,34291,34415,43998,44281,45205,45615],"blown":[31819],"createinspectorgui":[54944,55000,55101,55205,55296,55359,55579,56165,56400,56656,58777,59587],"keychain":[28194,69865,70544],"smoothed":[38566,38596,52040],"rand":[25128,71717],"followspeed":[72252],"lived":[29154,33083],"jar":[812,1010,1397,1819,3377,6705,34552,49743],"contribute":[356,2085,4964,6295,9966,10002,13136,21538,22144,23415,23462,26787,26807,27069,27102,27170,27182,27293,27307,27329,27752,27757,35058,35691,35890,36086,36294,37635,37667,43959,49720,50494,50597,69244,70585],"bc":[6705,14447,34544,73644],"alwaysauth":[70020],"heightmaps":[11632,49495,49558,50348,50408,50435,50530,50545,50579,50647,50944],"colorchanger":[62361],"colorshift":[40495],"intervals":[12888,29663,32413,50946,52058],"1b4553a8":[74566],"labelrect":[21172],"trackingoriginmode":[75595],"nsdictionary":[66851],"contributegi":[6801,22153,35058,49720],"recognizing":[220,45239],"ipropertybagvisitor":[36746,36824,36977,37235],"gs":[21765],"law’":[26919],"accumulation":[38672,74296],"resolving":[7970,8174,8271,8389,8774,9039,12733,14509,28266,31619,33478,36339,38839,48529,48537,49402,67156,69685,70211,70914,71314,72282],"ondeferred":[67424],"touchpads":[652,680,717,75645],"guilayoutoptions":[24435],"customization":[3724,6895,9484,9588,12275,24049,27935,29149,35604,37236,38248,38264,48328,49158,49169,50390,64452,66220,71543],"binding_example":[56339],"#ffffe0":[63588],"layerexample":[26638],"m_lightmapsmode":[76373],"spritemeshtype":[48782],"querystate":[63220],"targetposition":[7303],"onpointermove":[60247],"“anim":[7175],"cookie":[9889,12836,14237,18239,18343,26897,36656,37589,37802,47110,50711,71806],"k_numsteps":[61024],"redrawn":[52235],"productid":[67337,67790],"setscheduledstarttime":[73070],"scm":[72377],"enumfield":[55035,55464,59643,64562,64589],"dependencieshash":[25124],"regexp":[12810],"frontright":[74425],"content":[1557,2277,2411,2557,2654,2901,2958,3020,3260,3292,3338,3345,3462,3538,3570,3806,3975,4220,4471,4524,5820,6043,6797,6947,7491,8068,8792,9549,9645,10768,11735,12103,12328,12472,12903,14323,14550,14786,14861,16819,17092,17169,17240,17485,17503,17591,17661,17968,18215,18441,18454,18909,19348,19361,19693,20089,20432,20604,21631,22019,22024,22125,22203,22375,23811,23942,24054,24631,24739,25121,25236,25730,25922,26073,26264,26714,26723,26960,27678,28115,28129,28219,28281,28352,28789,30377,30532,30839,31477,33883,34379,35944,36064,37675,38840,39096,39454,39497,39551,39612,39764,40735,41356,41447,41469,41609,45055,46778,48583,49175,49357,49420,49623,49746,50128,50344,50359,50425,50489,50524,50532,50547,50555,50565,50645,51125,51152,51537,51838,52348,52546,52739,52749,52808,53103,53741,54018,54124,54224,54313,54474,54515,54591,54601,54855,55247,55349,56339,56405,56483,56535,56603,56813,56989,57124,57340,57958,58138,58461,58740,59005,59278,59839,60138,60194,60677,60879,60979,61207,61334,61555,61762,62352,62509,63123,64078,64453,64745,64892,65146,65164,65771,65941,66623,66811,66836,66867,66892,66903,66924,67074,67169,67587,67752,67920,68039,68202,68264,68382,68439,68701,68917,69158,69740,69901,70070,70137,70336,70438,70734,71216,71283,72275,72464,72490,72608,72711,72724,72788,72928,73022,73091,73121,73168,73209,73290,73325,73382,73433,73499,73592,73600,73670,73700,73719,73896,73914,74127,74153,74544,74678,74889,75322,75367,76303],"gnu":[73651],"conflicts":[1003,4065,7364,26244,27125,31600,31619,34721,39310,43223,48067,48529,52528,53839,57305,64370,67147,69003,69255,69398,69502,69739,70299,71019,71288,72423,73561,73817],"primarybuttonpress":[76227],"0–255":[13206],"commandname":[55913],"resetzposition":[51227],"otool":[52737],"hosttopology":[11206,11228],"producedfiles":[25124],"rom":[66534],"getcollider":[32831],"triangle":[85,338,2418,8296,13430,13916,20287,21221,21524,22870,26005,26987,32455,34682,36396,36695,41717,43194,44133,45720,46824,48614,71969,72346,73477],"“shaded”":[10510],"nature":[6767,6844,7930,19030,19174,24370,27329,28052,38541,49530,50602,52184],"75px":[62459],"gather":[10844,11820,12122,12355,17206,19655,22116,34286,34498,36286,36593,58149,71843,75857],"tankeditor":[56429],"audioclip":[4773,7494,7767,7819,10703,10759,15095,34012,41158,68179,72543,73036],"05f":[27353],"comparable":[3250,60540,62798],"importstandard":[21427],"lighttype":[36661],"bundle":[478,492,532,540,557,581,744,798,898,987,1079,1255,2792,3226,3247,3306,3348,3455,3506,3515,4540,4959,6705,11843,12153,16615,16775,17133,23481,25935,27681,28202,30922,31057,33883,34371,34568,34658,35862,41872,49752,52739,53303,66849,66967,67030,67147,67237,67526,67772,68177,68299,68700,72182,73214,73658],"facilities":[40657,74548],"administrator":[219,1666,19627,28718,66643,70149,70372],"sdk":[841,1006,1596,1900,2989,4729,4758,4868,5156,5177,7777,10767,11621,12214,16869,17220,17240,17424,17524,21536,23500,31219,38475,49753,50142,50197,52550,52764,52819,53081,53324,53703,53712,53839,53995,54002,66471,66802,66977,67076,67720,67846,68054,69362,69466,72143,72222,72697,72880,72916,72957,74416,74777,75250,75354,75377,75394,75406,75473,75738,75871,75942,75988,76149],"children's":[22347],"bathe":[71811],"freezes":[25897,50005,73683],"parallel":[5116,7959,8036,8402,13406,22292,26267,26282,26291,26462,26478,26493,26928,29630,30913,31624,32256,33533,34212,36055,37289,41813,41843,43118,44637,51174,52763,60778,65998,75446],"optionalparams":[46758],"constraining":[8244,8551,9682,10393,18174,23081],"level1searches":[40727],"failback":[45863],"inner":[1431,3696,6155,7755,11482,14135,20869,34917,37791,41165,49832,59959,61148,63850,63882,64282,68883,69119,71889,75463],"success":[30074,66137,66683,68102,68296,68336,68363,68400,68453,69536,75868],"oneitem":[2678],"magnified":[58651],"ignoreifmissing":[28561],"tsanimblending":[31929],"unity_2018_3_or_newer":[7377,34629],"uta_agent_protobuf_cache_misses":[66670],"rectfield":[55455,55530,59688,65101,65130,69321,69427],"statusbar":[58039],"createexamples":[8655,14092],"ondragperform":[57447],"synths":[5006],"fightermagesearches":[40747],"loadassetexample":[3615],"getindices":[351],"minute":[223,3254,25062,33092,66739],"#ffebcd":[63516],"getdescription":[68881,69117],"seamlessly":[2956,4554,7078,9127,10001,13898,22492,50615,70288,70630,72914],"videoplayer":[10730,14858,15229,68085,72536,72648,73445,74347],"declaredvaluetype":[36950,37070],"charnamelabel":[59425],"rfiles":[2912],"awaken":[38562,38592],"optimising":[30168],"skybox's":[42704,42725,42747],"tools":[275,579,955,1094,1129,1180,1606,1808,1994,2192,2937,2994,3287,3721,3879,3949,3985,4033,4271,4384,4470,4513,4550,4591,5017,5829,6110,7315,7831,9069,10129,10698,12744,13310,13364,13935,14471,14678,16151,16420,16847,17118,17152,17268,17412,17588,17744,18366,18404,18570,18638,18928,19447,19645,19650,20733,20787,21629,21854,21962,22189,22236,22522,23500,23703,24051,24463,24768,24912,25135,25826,25900,25973,26104,27651,27938,28079,28280,28374,28625,29398,29439,30443,30672,30824,31055,31440,31588,31621,33390,33505,34188,34638,34771,34971,35462,35959,36543,37321,37373,37481,37500,37548,38487,38851,39137,39248,40378,40657,41944,43009,43221,44318,44850,48059,49728,50209,50356,50409,50491,50519,50549,50566,50620,50646,50656,50983,51059,51078,51257,51394,51579,51618,51851,51886,52083,52100,52176,52590,54120,54688,54713,59040,60194,60733,65896,65967,66099,66645,66916,66978,67088,67760,67893,68050,68781,69024,69277,69360,69464,69740,70959,71010,71217,71542,71635,71661,71901,71985,72375,72410,72835,72880,74166,74309,74530,74907,75114,75280,75291],"positions":[280,5231,5970,6291,7316,9178,9532,10010,10076,10127,10211,10381,10475,11521,13105,13149,13459,13879,14037,14476,14708,18575,18993,21322,22500,24299,24755,25524,25622,26708,26846,27325,27341,27484,29857,32168,32226,32393,34800,34901,35745,37737,38565,38595,39424,39751,44234,45573,45727,46976,47111,48515,48665,50929,51148,51170,51186,51679,51879,54246,54725,56098,57522,59828,62796,63816,64082,65905,66006,66084,66244,68696,71809,71959,72315,75733,76095],"pack":[473,495,510,1007,3466,9103,10015,13707,26988,27055,30293,32933,33890,36689,45735,46122,48209,48560,48585,48676,48855,50613,51205,55152,61921,71469,72281,73620],"c#'s":[18540],"yes8":[38049],"platform”":[68948],"pict":[6713,25302],"illustrating":[45251],"maya®":[1866,1931,1994,2177,2188,6216,7014,9137,16345,18190,21430,21477,24648,71768,74895],"contents":[478,997,1256,2384,3299,3377,3525,3595,3732,3846,3892,3904,3999,4054,5496,5912,6488,6765,8081,8438,8640,9635,9760,10695,11016,11716,12399,13196,14263,18367,18621,18670,18728,18760,18948,19623,20583,20769,20893,21018,21856,21975,22058,22636,23492,23868,24018,24325,24987,25135,25161,25452,25970,26108,26264,26463,26599,26852,27920,27943,28104,28205,28394,28618,28676,28829,29449,30232,30555,30844,33135,35106,35400,35629,35772,36498,36695,38257,38742,39160,39609,39774,39966,40430,40735,41371,41717,41860,41988,42650,42683,43920,44376,45866,46510,47170,48022,48065,48174,48376,49539,49770,50007,51869,52462,52508,53743,53902,54590,54923,54970,55075,55175,55271,55321,55377,55998,56133,56226,56284,56351,56417,56631,56747,57211,58190,58600,59399,59783,59918,60727,61327,61631,61782,62687,64052,66557,67053,67526,67788,68412,68531,68622,68901,69139,69693,69729,69850,69982,70333,70747,70807,70932,71277,71338,71424,71497,71677,71902,71913,72158,72863,73083,73615,74538],"#800000ff":[49869],"level's":[10370],"shadervariantcollection":[3508,15172,42207,42942],"“film":[33545],"borderbottomwidth":[57088],"phrase":[3954,4034,41677],"clonetree":[54945,55102,55206,55297,55360,56366,56439,56554,56658,57545,57746,58809,60013,60136,60867,64900,65191],"alarm":[18293],"reel":[4314],"twd":[53673],"purchaseeventargs":[67327,67429,67775],"reassigned":[33382],"mille":[22371],"waituntildone":[52642,74739],"sst":[66772],"timed":[17282],"unitycloudbuild":[17263,31506],"laptops":[701,717,1087,1668],"creating":[14,64,78,137,167,478,1124,1574,1758,1973,2063,2199,2218,2240,2305,2358,2361,2613,2691,2773,2956,2974,3066,3871,3879,3913,3978,4029,4167,4185,4220,4241,4385,4426,4452,4493,4534,4776,4875,5340,5349,5495,5722,5728,5805,5817,5829,6050,6321,6758,6852,6930,7073,7370,7427,7434,7451,7809,7928,7981,8124,8613,8649,9347,9588,9898,9910,9988,10084,10216,10489,10691,11211,11236,11305,11683,12157,12585,12770,12974,13116,13352,13719,13900,13977,14025,14085,14469,14579,15024,15847,16487,16659,16883,17110,17788,17835,18052,18169,18342,18356,18390,18394,18431,18456,18755,18904,18985,19113,19668,20004,20745,20811,20878,21201,21565,21889,22064,22604,23245,23398,23598,24051,24169,24276,24463,24619,24634,24723,24780,24789,24899,25151,25280,25322,25496,25723,25963,26129,26925,27013,28114,28185,28263,28850,29395,29712,29780,30372,30383,30516,30840,31620,32112,32225,32702,33134,33617,33944,34195,34946,35402,35464,35497,35692,35775,35888,36380,36762,37275,37309,37328,37508,37520,38268,38612,38637,38886,38945,39031,39099,39171,40157,40184,40450,40536,40565,41708,41755,41871,42019,42229,42800,42935,43081,43224,43516,44209,44309,44330,44775,44822,45104,45177,45187,45947,46141,46508,46532,46715,46822,47183,48192,48657,48908,48975,49144,49168,49440,49560,49610,49905,50403,50537,50598,50619,50942,50981,51118,51128,51157,51162,51177,51222,51257,51343,51600,51811,51820,51841,51849,52178,52250,52691,52813,52961,53794,54758,54897,55631,57298,57628,58403,58732,58997,61390,62750,63137,65967,66194,66225,66341,66586,67936,67989,68045,68073,68075,68241,68259,68309,68351,68531,68604,69956,69990,70335,70837,71069,71670,71758,72119,72841,72914,72946,73287,73658,74417,74588,75475,75908,75964],"reallocation":[27877,68351],"application\\":[239,27810],"fbx":[149,1900,1936,2188,3739,3791,3985,4506,6220,6699,7000,12804,13375,16342,18076,18190,21391,21456,22085,22502,24637,25147,25171,25194,29752,31032,31423,37551,40617,40957,41375,41753,48349,50604,68624,71799,74907],"“bump”":[45077],"type_t":[72020],"autolight":[43917,47110,47811],"addsprite":[48419],"doc":[28512,66507,67655,72887],"returnstr":[73517],"scaleconstraint":[13304,15354],"directionality":[9970,10658,22169,27118,72760],"drawtexturealpha":[59626],"updatezones2":[8886],"sampler":[8430,14033,21776,27549,43374,43996,44083,44277,45204,47415,50065,50695],"lightcyan":[63576],"appcontroller":[49762,66848],"wateradvanced":[6910],"restoration":[67131,67359,67634],"transaction":[4085,22339,30438,53364,53698,67070,67291,67399,67538,67550,67596,67824,68469],"bufferhandle":[5473,5618],"mad":[53673],"uvbumpmap":[46192],"unity_winrt":[72068],"reflectivediffuse":[42464],"toolbarint":[23947],"gray":[4306,6293,8666,12087,12307,18352,20601,25285,27024,35158,41683,42256,42288,42793,45077,46229,46835,52465,57087,60918,61201,63559],"chunks":[3249,3293,3576,6045,13429,14540,21528,32400,42218],"bringing":[4530,27525,51141,51843],"transmitted":[11610,22594,72879],"#2c5d87":[63306],"pointermanipulator":[56881,57428,60222],"getpointsonline":[51445],"createfolder":[3619],"3newin20173":[32745],"supportedmirrorblitreservedmodes":[76079],"drawmeshes":[61065],"emits":[6037,9875,22118,22180,25980,26914,27950,32188,32372,32869,35691,41772,49483,73302,74216],"rawimage":[39725],"distributes":[1601,20684,25743,31649,32412,33400,59830,72092,73695],"rewritten":[45215,45705,69337,69443],"depth":[1704,1709,2974,5655,5866,5948,6494,6943,7443,7460,7584,8053,8402,8962,9457,9904,11765,12912,13206,13412,17773,17803,17903,18666,21509,21697,22292,23636,24766,29439,29863,32189,32272,32610,32635,33511,33599,34287,34486,34869,36058,36179,36507,36571,37365,37480,37544,37914,38244,38309,38349,39702,42278,42352,42395,42492,42566,42676,42798,42818,42915,43149,43205,43376,43484,43591,43968,44050,44286,44383,44624,44865,45192,45249,45503,45642,45719,45851,46040,47751,47951,47984,48022,49433,49519,50419,51166,51244,52249,57598,57843,58150,58913,65955,68047,68922,69165,70216,72290,72502,74388,75167,75425,75740],"richtextformatter":[2662],"ijobparallelfortransform":[26268],"dozen":[9589],"mywindowsettings":[49916],"distance":[112,253,2050,5046,5160,5179,6502,6758,6770,6828,7032,7562,7644,7755,7771,8031,8110,8198,8254,8309,8386,8511,8989,8998,9172,9220,9277,9440,9705,9748,9884,9965,9996,10246,10655,11252,11276,11546,11605,12706,12856,12921,13141,13167,13566,13601,13648,13670,13765,13865,14122,14502,14580,14702,14950,14979,18297,18566,19699,20541,21158,21486,21963,22139,22224,22594,23674,26564,26571,26586,26665,26885,26919,27187,27214,27276,27306,27571,30368,31731,31789,32197,32269,32328,32407,32594,32726,33528,33718,35258,36005,36352,36632,37632,37653,37710,37804,38365,38458,39685,39757,39973,39994,42799,43118,43129,43177,44053,44345,44930,45521,46418,46795,46924,47995,48874,50128,50436,50685,50889,51155,51365,51967,54769,58285,58385,58651,64104,66000,68868,69102,71583,71874,72254,72289,72755,72879,73054,74496,75088],"#105":[66781],"ibegindraghandler":[49893],"middlecenter":[64830,65303],"numinstances":[5476,5621],"far":[3758,6760,6858,7045,7878,8047,8286,8578,9528,9785,9859,9870,9966,10337,11546,11622,12716,12856,13146,13983,14581,14854,18617,20242,21486,22139,22746,24466,26086,26664,26916,27003,27214,29420,30352,31860,32878,33550,35295,36059,37287,38403,39234,42799,43132,43150,44637,44865,47087,47951,49468,49496,49513,50379,52034,52147,58355,58394,61916,66003,67853,72333,72522,72724,75446,76335],"directormodule":[16646,30957],"kcubezremap":[8662],"readtexture":[31958],"logicalor":[43824],"sizing":[12443,39587,40141,41616,56049,58441,64079,64752],"showcontextual":[2546],"disallow":[67154],"l20":[27473],"audiosources":[5019,5094,7674],"discussing":[72327],"noalternative":[37973],"buffer's":[38375,44880],"modifiable":[39235,74258],"requestfullscreen":[73260],"distorts":[7523,7531,7712,7731,7752,22580,27013,33533],"probesset":[71844],"preconfigured":[13175,66927],"roughness":[29511,37884,41760,50551,51069],"greatest":[6129,30349,72917],"belongs":[3326,10695,25382,32066,32725,35415,35562,35692,36252,36429,40078,40193,48593,50062,53285,54068,56074,58854,66795,67148,68883,69119],"aids":[22192,66414],"mainbundle's":[49781],"5ca760170f85012ce16aa8c22e8d9ea1":[25126],"icloud":[25960,67041],"enum":[292,1873,4884,6500,19691,20927,23547,23626,39864,40747,44809,45883,46024,48767,54974,55529,55621,58087,59377,62307,62986,64569,64593,67177,67730,68885,69121,75769],"sp":[10779],"spanish":[53647],"textshadow":[59629],"capsulecollider2d":[8190,15088],"decoratordrawers":[74248],"believable":[6852,6930,21629,32114,42813,74907],"xpost":[53107],"version_codes":[755],"sessions":[13310,19514,22373,25066,35030,35894,36481,45050,53510,66375,66435,69768,69808,70108],"scenetemplateasset":[38988,39207],"sandyrock":[18771],"localsinit":[18528],"prx":[6705,34557],"integrity":[3339,25861,28114,28185,68280,70951,74503,74580],"freetype":[9260],"monobehaviour’s":[36507],"lookatpoint":[20768],"lineto":[58491],"intersection":[9712,11588,22186,34809,40839,57834,71876,75816],"beach":[13899],"vector":[308,1873,5221,5972,6069,6623,6723,6959,8535,9478,10399,10475,10554,11496,13093,13534,14189,16510,20263,21800,22170,22711,24004,29637,31764,32190,32281,33670,37285,37390,37499,37688,38661,39973,40749,43973,44051,44133,44271,44366,45082,45124,45587,45735,46295,46799,47362,47941,48302,49524,50459,52763,54604,54773,58028,58462,59501,60508,60672,60877,60980,61569,63125,68729,68866,69099,72290],"eac_rg_signed":[48736],"bowl":[20927],"hmds":[75188,76138],"ledgedropheight":[76404],"''randomness'":[26096],"forwardlit":[41959],"reopened":[52320],"literals":[6032,41201,63744],"areas":[174,4035,4653,6764,7002,7913,9565,9669,9965,10080,10651,11318,11359,11724,12865,13142,13724,13899,14548,14815,14868,15822,18987,19693,20538,21699,22043,22312,24297,24495,25284,25436,25887,26934,26972,27022,27333,27937,29892,30232,30270,30363,30506,30888,34860,35780,35958,36020,36354,36463,37685,39672,42243,42467,42813,42827,42838,42849,42870,42896,42924,43114,43149,43183,45858,48642,49437,49471,49481,49484,49496,49510,49541,49562,49568,49630,50347,50401,50466,50514,50519,50529,50537,50550,50589,51035,51535,57552,59189,65990,66543,68867,69100,71871,72362,72533,73610,74134,74226,74414,74986],"batchcullingcontext":[5486,5631,5734,5797],"relation":[363,5045,24788,26929,32194,33717,34811,39506,48874,52008,71766],"unity_shar":[47123,49327],"whiter":[49545],"subtle":[64,7645,14133,20543,26932,31838,33307,34875,44896,49431,49626],"oninitializepotentialdrag":[49892],"treeviewstate":[52246],"build’s":[6417,29568,48590],"产品1":[53602],"‘sprite’":[13589],"localkeyword":[42052],"m12":[5401,5545,20372],"rightmousebuttonpressed":[60460],"accompany":[3841],"0acc523941302664db1f4e527237feb3":[3097],"userdata":[28004,55992,57023,59398,75271,75802,75887,75925],"commons":[50343],"tensor":[8555,13242,33640],"graphicssettings#always":[73450],"countrender":[36392],"mousemanipulator":[60220],"open":[17,132,235,260,445,617,642,730,777,850,902,1094,1110,1120,1137,1150,1184,1339,1493,1536,1660,1742,1968,2211,2362,2421,2479,2545,2616,2705,2772,2959,3232,3833,3853,3872,3883,3900,3923,3955,3979,4032,4058,4169,4188,4195,4236,4339,4407,4415,4422,4453,4465,4487,4496,4968,5160,5181,5270,5327,6228,6351,6402,6468,7567,7574,7992,8364,9225,9675,9777,9913,10032,10421,10491,10697,11332,11403,11463,11971,12282,12780,13347,13392,13747,13907,17045,17912,17944,18116,18247,18330,18455,18899,18908,18970,19061,19323,19344,19358,19369,19384,19623,19650,19945,19998,20060,20459,20540,20583,20626,20667,20769,21037,21251,21312,21598,21629,21639,21850,21892,21998,22036,22111,22127,22251,23134,23280,23447,23489,23613,23692,24590,24792,24955,25046,25102,25179,25198,25325,25355,25401,25767,25895,25915,26030,26614,26849,26940,26952,27009,27015,27098,27121,27215,27550,27602,27663,27767,27923,28094,28132,28185,28294,28346,28383,28639,28681,28718,28766,29031,29351,29682,29813,29882,30038,30190,30207,30228,30531,30826,30845,30853,31014,32847,33417,33638,33846,33905,34659,34913,34948,34962,35205,35367,35622,35770,35836,35997,36110,36366,36458,36472,36608,36693,37540,37620,37641,37667,37684,37704,37919,38281,38324,38377,38714,38839,38908,38961,39024,39074,39127,39190,39229,39292,39329,39367,39912,40617,40666,40759,40775,40796,41301,41365,41417,41442,41454,41497,41538,41577,41595,41674,41699,41711,41958,42027,42775,43185,43221,43464,43530,46046,47193,48504,48519,48586,48607,48622,48633,48643,48681,48852,48938,48990,49152,49373,49416,49490,49576,49619,49730,49966,50061,50064,50147,50186,50307,50491,50567,50606,50636,50916,51008,51089,51141,51179,51259,51344,51825,52087,52174,52342,52478,52493,52590,52745,53344,53939,54397,54537,54589,54640,54741,54778,55828,56631,56791,57139,57414,58234,58336,58667,58793,59013,59995,60438,61603,61762,62066,62661,63106,66014,66025,66385,66539,66690,66874,67082,67601,67662,67858,68067,68552,68576,68712,68830,69022,69075,69303,69352,69409,69776,69823,69962,69995,70084,70106,70149,70262,70312,70342,70356,71116,71132,71178,71225,71252,71262,71290,71326,71354,71381,71401,71427,71471,71487,71502,71540,71609,71698,71873,71907,72175,72225,72379,72503,72789,72830,72861,72889,72992,73137,73207,73251,73293,73442,73607,73908,74212,74571,74650,74900,74907,74935,74985,75038,75140,75196,75236,75341,75579],"_clickcount":[58630],"equalizer":[4964,7692],"newcolor":[14194],"archivepath":[2917],"project3dbase":[18753],"int32_t":[27848,72042],"_metallicglossmap":[28931,29522],"unityxrhapticcapabilities":[75612],"“mirroronce”":[45247],"localhost":[11176,19071,49744,66234,66354,70031,70603,72391,73178,73496],"condensing":[1880,22466],"semicolon":[9109,19022,35090,44696,53602],"sent":[1918,4825,11006,11154,11191,11258,11280,14878,15867,25347,26003,27507,32177,37627,39689,39699,40000,40112,43319,55645,55713,55894,57555,57812,57852,58015,58193,59544,59719,59740,59819,60363,60500,60543,60768,61497,62108,62340,62593,62822,66110,66655,66939,67594,67921,68385,68434,73677],"unity_matrix_it_mv":[47079],"component":[7,86,126,182,265,308,1190,1565,1872,1940,1980,2217,2227,2249,2261,2334,2368,2415,2972,3014,3732,3862,4737,5220,5688,5959,6127,6222,6686,6752,6754,6775,6793,6813,6942,6984,7032,7143,7214,7567,7574,7625,7814,7877,7946,7964,8003,8011,8104,8132,8142,8148,8191,8224,8280,8373,8495,8585,8891,9012,9024,9095,9144,9177,9199,9241,9307,9333,9531,9668,9681,9744,9841,9890,10037,10054,10106,10203,10326,10563,10604,10611,10688,10704,10788,10803,11039,11066,11114,11149,11161,11172,11185,11242,11271,11291,11306,11319,11333,11439,11459,11473,11503,11615,11649,12721,12751,12768,12825,13091,13100,13174,13193,13233,13261,13272,13289,13372,13450,13537,13573,13587,13628,13636,13647,13670,13718,13743,13784,13820,13886,13975,14034,14347,14468,14498,14533,14566,14661,14786,14830,14923,14942,14999,15022,15047,15818,15835,15892,15902,15967,16005,16275,16635,16715,16723,16811,16835,17835,17963,17978,18155,18240,18357,18389,18450,18736,18969,19447,20396,20541,20624,20636,20657,20788,21181,21253,21307,21455,21588,21673,21802,22014,22029,22203,22224,22477,23400,24096,24528,24727,24741,24778,24894,25031,25140,25348,25350,25407,25449,25517,25634,26474,26548,26577,26580,26600,26669,26912,26953,27007,27041,27094,27101,27174,27292,27302,27312,27320,27341,27491,27753,27759,28856,29097,29393,29420,29727,29786,29835,30145,30173,30181,30896,31659,31670,31733,31749,31767,31779,31804,31825,31842,32080,32095,32119,32142,32206,32238,32242,32330,32348,32374,32596,32619,32639,32667,32712,32749,32847,32893,33580,33690,34155,34770,34861,34887,34943,35156,35191,35277,35694,36319,36454,37281,37347,37496,37528,37642,37722,38147,38441,38459,38490,38520,38533,38542,38579,38628,38643,38665,38886,39402,39466,39475,39524,39538,39574,39637,39643,39672,39681,39743,39788,39806,39822,39969,39980,40072,40098,40128,40145,40343,40627,40738,41338,41469,41504,42814,43126,43489,43538,43557,43973,44448,44614,45277,45735,45986,46802,47083,47371,47945,48226,48268,48335,48610,49681,50209,50413,50505,50534,50568,50600,50710,50934,50965,51040,51122,51175,51197,51237,51398,51750,51808,51835,51845,51851,52222,52390,52746,54209,54241,54715,54757,55054,55303,55564,56203,56393,56664,57208,57628,58044,58138,58617,58764,59393,59807,60757,61295,61299,61486,62609,62746,63117,65926,65981,66008,66034,66046,66102,66190,66213,66338,66393,66415,66444,67058,67084,67530,68543,68733,68922,69165,69302,69363,69408,70571,70910,71377,71605,71637,71858,71915,71961,72163,72229,72464,72499,72537,72609,72644,72721,72795,72804,72810,72817,72982,73287,73445,74296,74416,75080,75107,75223,75405,75766,76219],"substitutes":[29470,35258,69350,69454],"characterdata":[59374],"shadeshperpixel":[10110,46524],"saddlebrown":[63630],"blog":[14754,23604,23629,24947,27745,30168,35718,43000,49720,52101,52239,52739,66026,73639,73690,75385],"h2smngcwfzd8qvttevesrmcd1ycevkvol77dzypoed+a5wwzzr8tdrru838fyxae":[69943],"entirely":[3492,5994,6145,10382,11383,12275,13131,14549,19089,20559,20604,24456,33134,33616,33782,35315,37526,37653,38621,45055,46799,49509,49571,53025,53978,58176,58732,66225,66521,66911,69015,69267,71086,71270,71889,75446],"minsize":[56497,57535,59165,62376],"import":[22,47,78,156,265,377,475,555,580,743,797,944,1227,1236,1281,1290,1816,1823,1851,1891,1894,1967,2060,2184,2192,2706,3580,3723,3785,3839,3870,3897,3955,3977,4026,4217,4274,4387,4467,4506,4521,4573,4772,4960,5158,5919,6221,6360,6419,6691,6996,7003,7175,7469,7620,7812,7867,7874,8614,8648,9133,9247,10392,10505,10584,10733,12803,12838,12896,13356,13368,13457,13625,13710,13997,14018,14078,14217,14314,14705,14801,15950,16330,16470,17000,17370,17939,18064,18190,18343,18395,18720,18757,18894,19480,19943,20125,20811,21029,21388,21445,21570,22071,22571,24640,24930,25041,25100,25141,25162,25188,25236,25843,26956,27038,27098,27525,27554,27589,27815,28175,28265,28336,29096,29343,29397,29741,29758,29776,29922,30825,31594,31624,32478,34535,34675,35036,35187,37359,37497,37549,37676,38064,38744,38840,38939,39600,40476,40622,41828,41860,42689,43566,43684,44338,44422,44723,45261,48197,48225,48240,48267,48349,48507,48685,48862,48897,49547,50142,50181,50411,50490,50602,50647,50659,50689,50711,50742,50755,50769,50782,50795,50808,50821,50834,50859,50930,51008,51131,51231,51247,52849,52972,53283,54604,55155,56827,58369,58459,58691,59500,60865,61184,61332,61565,61679,61921,63065,65692,65833,65990,66555,66985,67098,67682,68599,68695,68929,69172,69307,69413,70258,70523,71140,71261,71310,71361,71390,71531,71768,71903,71925,72466,72499,72609,72615,73179,73445,74051,74148,74232,74638,74896,75233,76335],"y”":[11844],"stylescale's":[62298],"m_skyboxmaterial":[76359],"previewed":[2300,2328,20608],"releasecodeoptimization":[21041,28408],"deviceuniqueidentifier":[394],"nginx":[73153,73707],"simulates":[6683,7660,11459,15015,17752,17998,19967,20050,20063,22756,26594,26934,29556,31661,34868,42810,43113,48290,51175,71899,72462,72917,75211,75365,76148],"iuxmlfactory":[57306],"creates":[413,462,531,607,992,1230,1331,1420,1843,2225,2284,2366,2554,2690,2810,3291,3537,3571,3580,3729,3785,3841,4845,5189,5964,6094,6353,7180,7989,8431,8587,8651,9136,9311,9522,9795,9914,10244,10392,10430,10489,10579,10658,10731,10789,10804,11071,11150,11193,11264,11285,11299,11320,11564,11996,12102,12633,13193,13337,13432,13702,13744,14087,14696,15035,18088,18375,18440,18978,19060,19322,19986,20398,21485,22089,22649,23491,23798,23930,24215,24550,24624,24758,24967,25140,25154,25234,25490,25504,26486,26985,27836,27946,28104,28771,29397,29559,29835,30528,30847,32243,32723,32754,33098,33958,34164,34237,34377,34611,34875,34883,34948,35020,35212,35453,35517,35860,35946,36352,38984,39032,39083,39102,39179,39926,40174,40441,40842,41364,41544,41694,41756,41792,41946,42038,42184,42684,43022,43261,43543,44376,44508,44605,45535,46026,47165,47185,48581,48650,48938,49706,49752,49908,50353,50448,51088,51172,51197,52168,52229,52268,52871,53093,53777,54053,54302,54508,54758,54911,54963,55063,55162,55233,55309,55369,55508,55890,55995,56052,56125,56212,56274,56327,56392,56475,56523,56592,56736,56800,56982,57126,57337,58285,58407,58561,58595,58679,58732,59271,59906,60136,60232,60433,60570,60675,60792,60881,60982,61198,61523,61595,61749,61932,62050,62338,62498,62643,64391,64400,64415,64435,64446,64470,64491,64555,64574,64598,64613,64643,64676,64720,64733,64797,64811,64825,64844,64862,64881,64922,64938,64957,64975,64988,65015,65063,65088,65104,65119,65135,65148,65166,65222,65246,65270,65296,65315,65373,65395,65415,65434,65446,65460,65478,65490,65503,65514,65540,65555,65570,65590,65610,65630,65651,65670,65775,65880,66199,66377,66467,66877,67953,68209,68246,68283,68323,68350,68382,68439,68601,68835,68900,69080,70227,70438,70755,70914,71055,71284,71724,72840,73082,73614,74005,74074,74656,74725,75262],"contents\\pluginapi":[27920,27943],"unitymetainput":[28921,29513],"cs0169":[19240,34426,34524],"shader_api_metal":[43940],"diffusion":[7724,7747,37975,74295],"literal":[4070,40848,41172,44875,63757],"refined":[41610],"4640x1440":[52722],"winpixeventruntime":[74612,74656],"arrow":[2080,9279,9772,11563,20595,21177,21854,22275,23729,24538,28352,33729,34760,35022,35380,36058,36490,36726,39265,39817,41327,41613,48621,49534,54409,54732,59735,60094,60495,61629,62211,64179,64640,69333,69439,71351,71488,71503,74899],"chapter":[25920,26096,50939],"octet":[68265,68439,73720],"pointinair":[72298],"animatorstatemachine":[15265],"upgraded":[3725,52493,67155,68576,68705,68911,69152,70385],"distort":[27011,42447,65986,71772],"camel":[54533,56693],"icon2":[52422],"usedonlyforaotcodegeneration":[40573],"damping":[7254,8288,8570,9171,13679,13864,14949,14988,23068,32219,74206],"safe":[6142,10909,11724,19692,19976,20073,26041,26077,26119,26216,26271,26295,26433,30904,31008,31368,31388,33467,34237,35130,38837,39957,41290,41844,48371,52584,66605,69893,70438,70755,71284,75467,75512,76035],"worldtolocal":[56117,56970],"wirelessly":[560,634,852,52697],"session":[2964,5168,10812,11091,11178,13314,17788,21041,22357,27604,28681,33407,34594,35030,36465,39310,50186,52320,66374,66911,69768,69808,71626,71669,72910,75062,75123,75225],"properties'":[74244],"#51":[66770],"createcubearraytexture":[8654],"constructing":[8189,36817,37275,51155],"devicestate_setaxis3dvalue":[75558],"#696969":[63550],"“flip”":[44839],"useracceleration":[73491],"disclight":[36655],"bring":[2213,2347,3887,7302,7685,13771,13799,13961,20457,22023,22036,22174,25153,25360,25597,25939,33681,34755,39794,43205,43907,47363,48611,50372,51416,54463,71328,71473,72400],"objnormal":[47624],"cpp":[1044,1302,4879,5236,6705,28265,34547,34664,34693,49774,72145,72151,73405,73580,74590,74667,74799,75883,75993],"afterwards":[22128,38277,52582,54277,75795],"voxels":[31703],"yesconfigure":[37826],"gbp":[53675],"mounts":[2896],"portal's":[11344],"asset”":[58421],"caveats":[18535,38307],"x2400":[38349],"mrt":[20453,38320,38349,45718,73016],"probabilily":[32663],"operatingsystem":[397,19707,20048],"pvrtune":[33520],"rect":[177,8048,8122,9096,9648,13099,13754,19692,20624,20945,23787,23889,24065,24174,24279,24732,24740,24906,29702,29879,30643,34900,36280,36428,36454,36654,39374,39444,39467,39478,39587,39746,39763,39866,39983,40141,48420,48687,50149,50896,51236,52338,54223,54710,54771,55530,56110,56579,58350,61912,62121,64780,65102,65941,65984,68153,71653,75454],"pointercursor":[74733],"angularacceleration":[75638],"ecosystem":[3500,18623,30871,68469],"isplaying":[10753,39170,72552,73052],"provided":[2608,3002,3344,3731,5354,5523,6723,6810,7119,7909,8906,9648,9723,10762,11631,11740,12400,12640,13022,17488,17986,18049,18615,18734,20605,21196,21525,22023,23816,24275,24745,24825,25345,25475,25756,26041,26491,26793,26931,27918,28053,28063,29584,29992,30500,30678,34237,34245,34328,34452,37627,37863,39466,41859,43281,43872,44364,44730,45140,46393,49886,50170,50342,50613,52184,52407,53041,53724,54235,55610,58497,60218,66117,66586,67569,67582,67606,67706,68043,68215,68281,69029,69282,71140,71324,72795,72948,74012,74157,74244,75104,75209,75405,75674,75751,76013],"ownership":[11978,26118,54048,67548],"instantiated":[3432,5961,9129,9399,10712,11070,11296,13339,18432,21306,24730,25234,25499,29790,30658,33286,39210,40099,48233,51612,52174,56622,57330,57620,58633,59455,60137,68245,74003],"routes":[12198,52754],"dimmer":[9875,31997],"subtracts":[14549,42792,45275,50698,73449],"physicmaterial":[6703,11523,15128],"rotationerror":[7022],"shoots":[2088,29601,30047],"treeviewitems":[52249],"kunityxrinputfeatureusagecentereye":[75628],"product2":[53683],"acceleratorkeyactivated":[74733],"yes3d":[38130],"convey":[32701],"navmeshmodifier":[69389,69493],"fixation":[75579],"symbolserver":[74519],"canvasscaler":[39445],"apktool":[1255],"m_progress":[60923,61026],"onbecameinvisible":[10715,21353,38202],"iconstraint":[15298],"onpaintinspectorgui":[51555,51609],"httpclient":[20194],"mycustomfilter":[60657],"initializes":[1069,5129,5196,8844,12119,12520,26252,33475,37173,43360,43977,52291,53697,58054,59089,67090,67592,67706,74710],"unity_display_orientation_pretransform":[73002],"uidocument’s":[58186],"fire":[2026,5006,5872,8563,10796,21335,23101,25569,25779,31662,31720,31838,32114,32230,32702,37426,42783,50941,59720,60542,60761,67454],"recommended":[553,1227,1649,1982,2063,2708,3241,3512,3699,3981,4537,4875,6025,6059,6118,6811,6904,8208,8387,9489,11602,12405,12517,13837,13938,14303,18100,18398,18632,18686,18935,20766,20862,20917,21381,21584,21985,24730,25926,26574,28382,28874,28877,31011,33655,34379,35364,37362,37593,37971,38438,38900,42598,43080,44360,45565,45841,48251,48566,48601,49345,50244,50666,51080,51133,51232,52238,52501,53375,54106,57305,57694,58044,58736,59001,59501,60497,64456,64758,65968,66023,67090,67921,68085,68763,69356,69460,69768,69808,69864,69990,70628,70807,71136,71305,71799,71852,72475,72762,73122,73173,73501,73616,75154,75232],"heights":[40128,49555,50351,51169,51186,51390,54275,64894,71634],"rightforearm":[18091,71782],"head":[258,1914,1966,2172,2284,2381,2429,2937,5182,5266,7137,7830,7851,12663,21164,21572,22504,25662,27576,29895,30380,31710,32254,46250,66431,68481,69879,71785,71808,72920,72940,74978,75211,75221,76082,76136],"enlarge":[4326,62533],"differentiators":[22411],"counterclockwise":[37283,51573,62201],"didn't":[20525,21715,21990,29485,48557,49381,68898,69136],"exampleobjectpool":[33108],"precompute":[6801,9982,22142,26908,27015,27044,27168,27315,49710,71847],"supportedrandomwritetargetcount":[19755],"decoders":[260,4738,72531],"istagprefixed":[48811],"worldwide":[17240],"rgb111110float":[8451],"becoming":[29213,66008,75936],"_amount":[46351],"enhance":[4372,6767,19641,32631,36754,49817,67651,74976],"portion":[1966,2440,3457,7859,8090,11418,12808,14730,18104,20450,22180,22375,24370,25187,26026,32411,35719,36440,39629,43113,48676,50941,70755,72255,72518,73963],"importing":[149,264,1862,2177,2192,2360,3601,3707,3766,3785,3872,3895,3896,4501,4530,4722,4774,7016,7469,9134,9246,12770,13374,13475,13627,14017,14077,14232,14348,15982,17939,18051,18189,19454,21384,21456,22063,22571,24644,25139,25152,25186,25235,25841,26674,27524,29136,29397,29737,29755,29781,31623,33526,35225,37277,37361,37550,37676,48221,48268,48348,48502,48866,50184,50410,50584,50756,50934,51074,51130,51230,51820,52999,65687,66678,67125,68018,68639,68961,69208,70285,70968,71260,71395,71760,72730,74187],"transformation":[5224,14790,20418,43873,44275,45290,47067,56114,62192,65730,68697,72920],"tightpackerpolicysample":[48834],"namelabel":[57063,59403],"decouple":[73245],"m10":[5395,5539,20366],"uploader":[68271],"sub_element":[64206],"predictable":[6811,11895,13067,32479,36569,38346,42360,49609,51976,58176],"english":[478,4263,5990,53311,67177],"uxmlstringattributedescription":[54523,58059],"viewed":[250,2216,2260,3830,6759,8115,25292,41775,49474,49527,50945,53750],"whatever":[3566,5042,6322,6325,11297,18139,18819,25551,26573,29790,39149,39320,45725,48685,49642,54259,66720,67587,70944,71288,72243],"“fits”":[33546],"usages":[104,40563,75501],"l22":[27473],"setcharacterdata":[59412],"setloadingmaterial":[41930],"'spring'":[9013,26594],"sceneview":[2623,30538,39230,51610],"ctrl+7":[36462],"isackslong":[66324],"careful":[3325,3828,6050,17000,27210,28477,30112,30869,33075,52590,70349],"adapters":[36739,36855],"tilemapeditortoolare":[51596],"__minimal__":[66485],"hasdynamicuniformarrayindexinginfragmentshaders":[19737],"paris":[57143],"digital":[427,541,577,581,937,1243,1315,1325,1557,4874,5037,5116,5832,9786,17591,25236,27510,27536,28115,33885,34361,66964,67018,67149,67229,67840,75322,75653],"scriptplayable":[34142,34174],"animatoroverridecontroller":[15184,21332],"disconnections":[75477,76193],"vector3int":[51437,51528,51587,51632,51727,51761,51786,55538,64418,65627],"memoryless":[21727,29448,34486],"windowsruntime":[28575],"dimensionality":[13198],"hlslprogram":[42601,43922,45604,49000],"avatar":[1926,1975,1997,2227,5266,6774,7067,7145,7823,7843,9137,9759,15099,18058,21565,22071,22485,25333,25623,29110,29136,29889,38437,38652,40618,64756,71780],"#111":[66793],"launchermanifest":[12003],"rendermeshindirect":[23275,23403],"getparticles":[31649],"magnitude":[6275,6304,7198,8008,12704,15027,21147,68611,72289],"simpleunlittexturedshader":[47266],"shallow":[13062],"additem":[30604],"interruption":[14721,21052,33399,34986,35727,73025],"executedefaultactionsattarget":[57954],"program":[1666,2216,2235,7179,11176,18360,19210,21154,22884,24625,25031,25333,25750,26245,26477,27341,27559,28071,28290,29397,29995,33092,33403,35254,35727,37571,41791,41847,41882,42007,42101,42424,42611,43017,44023,44362,45024,45121,45179,45267,45420,45446,45608,45669,47306,47912,48103,50604,52528,52555,69969,70109,72681,72792,73172,74362,74513,74627,74788,75347],"#800080ff":[49873],"capsule":[84,2174,6793,8148,8161,8199,8299,9427,10579,14711,15826,15832,15893,23042,33699,35243,37450,47179,48605,50606],"broadleaf":[50613],"0xff":[5667],"reprojects":[72931],"well":[253,579,628,879,1006,1557,1761,1997,2063,2306,3340,3440,3585,3870,3889,4217,4355,4653,5156,5352,5617,5888,5973,6143,6758,7168,7219,7931,8125,8128,8159,8402,8598,8617,9142,9772,10215,10460,10573,10692,11315,11438,11875,12649,12968,13058,13645,13706,13909,14577,14790,15967,17342,17788,18519,20647,20972,21391,21700,21988,22189,23009,24751,24897,24928,25114,25572,26005,26129,26987,27209,27500,27514,28785,29420,29453,30270,30296,30365,31368,32648,32872,32923,33065,33415,34537,34918,35691,36061,36339,36371,36531,37268,37684,37702,38531,38661,38984,39489,39530,39575,39778,40129,40534,40671,40674,42378,42692,42716,42732,42757,42802,42827,42838,42849,42870,42924,43193,43326,43371,44297,44359,45523,46529,46722,49431,49756,50656,50945,51794,52035,52181,52597,53878,54227,54711,54769,55894,57694,59549,59749,64752,66159,66470,66598,67088,68157,68498,68594,69333,69439,70746,70823,71669,71771,72246,72315,72928,73405,73616,74077,75134,75654,76204],"xxxxxx":[52778],"#":[26003,33781,41246,48683,52746,58456,60598,62188,63922,63940,70672,70755,73723],"asset_0":[3277],"darkblue":[49862,63529],"onclientdisconnect":[66298],"interlacing":[14795,74202],"hpcolorkey":[56999],"body•":[33578],"35px":[62253],"ranges":[1883,2439,3975,5726,6272,7073,7565,7572,7715,7735,13925,15042,18065,22075,22582,27129,27819,28877,29895,31836,32225,34867,44687,48337,56125,58454,70912,71976,72762],"enableincompatibleassetdowngrade":[21134],"texture2darray":[14026,15163,45078],"reasonably":[66570],"triplanar":[38004,47612],"tzs":[53674],"call":[389,478,517,564,1069,1234,1269,1397,1401,1507,1704,1820,1852,1888,1915,2668,3254,3377,3566,3609,3690,3775,4600,5730,5773,6031,6083,6107,6344,6370,6427,6475,6915,7154,8133,8385,8888,9359,10768,10913,10984,11016,11348,12358,12659,13208,15847,16603,17282,17925,18130,18255,18597,19028,19076,20056,20240,20377,20402,21031,21154,21343,21694,21846,23029,23284,23377,24031,24121,24169,24391,24468,24920,24928,25597,25635,25695,25847,25863,26005,26039,26088,26252,26263,26288,26376,26452,26603,26646,26713,27682,27716,27855,27931,28168,28278,29420,29710,29835,29868,29906,29974,30000,30062,30320,30899,32767,32921,33396,33424,33503,33524,33790,34171,34237,34292,34631,34645,34687,35692,35888,36042,36188,36333,36497,36846,37576,38331,38505,39169,39346,39513,39523,39910,40162,40483,40588,40624,41807,41866,44822,45103,47025,48353,48607,49041,49289,49309,49421,49668,49771,49948,50132,50150,50965,52176,52295,52642,52766,53688,53929,54279,55088,55367,55547,55573,55729,55920,56183,56280,56325,56428,56725,57577,57681,57837,57856,58066,58145,58557,59037,59554,60085,60929,61032,61723,61820,62805,63663,66083,66114,66228,66524,66824,66849,66895,66927,66987,67289,67294,67334,67483,67537,67549,67569,67572,67600,68317,68385,68441,68488,68594,68952,69197,69518,71565,71742,72085,72110,72142,72147,72204,73176,73471,73501,73917,74216,74248,74602,74631,74791,75440,75593,75750,75876,75934,76023,76086],"xrloader":[75876,75969],"aep":[11803],"subgraph":[14932,14937],"mobilepath":[74082],"fails":[220,617,1003,2745,11740,18098,20204,25225,28639,29348,31607,40604,43571,44723,45851,47984,50074,52628,66764,67095,67153,67274,67330,67377,67558,67569,69010,69262,70175,70357,70629,71057,73328,73615,74158,75970],"reshape":[32858],"iunityxrinputprovider":[75508],"legacy":[1038,1981,2057,2062,3672,6687,6984,7018,8260,8626,9099,9465,10575,11612,11709,12270,12391,12580,12918,13975,14234,16088,16803,17370,17642,17966,19262,20208,20572,21392,21530,21570,22111,22557,25229,27588,28793,28875,29093,29128,30309,30916,31027,31399,33840,34320,34444,34532,35362,36341,36594,36638,38300,41675,41830,42356,42397,42666,42687,43482,43565,43683,44337,44421,45074,45191,45260,45402,45551,45613,45846,46046,47146,47748,48252,49556,50377,50782,54106,54221,58414,59509,61485,65975,68405,69352,69456,69510,72537,74905,75077,75114,75324,76102],"jsonutility":[6037,16667,39937,40465,53902],"gps":[12652,18507],"capsules":[10595,20684,25434,29398],"programs":[1890,2360,8401,21962,22886,25444,28071,37568,41795,41882,42016,42148,42312,42595,42666,42689,43017,43080,43101,43566,43684,43907,43933,44338,44359,44422,44757,45093,45173,45178,45261,45389,45419,45597,45661,45838,45932,46074,46718,47067,47901,50932,68049,70102,71754,73592],"onapplicationpause":[21319],"wizard":[6925,8226,37610,59378,66590,67042,72177,72860,74893],"characterlistentrycontroller":[59396],"piechartcomponent":[60750],"dir_x":[5228],"understands":[29891,39900,43976,71037],"d16":[38425],"demographics":[22366],"grooves":[22742,49515],"m01":[5397,5541,20368],"chargeback":[4085],"finditem":[52468],"'variant'":[28828,72279],"command+del":[18995,48667],"boxcollider2d":[207,7977,15082],"thing":[1966,2173,3414,5350,6264,6289,13042,18104,21205,22090,24783,24799,34162,42354,43952,45215,47423,72335],"…":[6102,6132,11349,33250,46007,73568],"ewjtsoxbcndiiwuqtxbeld":[69915],"diagnostic":[12418,23160,35080,38738,53766,65916,70917],"lpwstr":[28270,66896,72160,72203,74595],"dissecting":[33471],"powderblue":[63624],"'mystring'":[73576],"example_workspace_1":[72390],"adapter":[36855,37145,75901],"accelerator’s":[3591,66596],"spriteshaperenderer":[13803,15359],"attribution":[50343],"darkened":[59890],"respective":[2240,2353,3463,4959,7316,11697,11701,12438,13610,18313,23041,24756,24774,26582,35691,35890,37142,39574,40128,41852,48382,48512,50341,50351,51120,51150,51274,51846,51879,53074,54107,59855,67088,68534,69395,69499,74893],"continuation":[73449],"4s":[5921,62967],"assetimportcontext":[3819,40463],"fits":[2374,4256,8040,9856,11792,12310,18098,31688,32861,33529,39666,41884,48516,51013,51361,58445,65994,66165],"redirect":[466,19430,27940,66706,68202,68246,68476],"fbfetch":[45514],"enlarges":[29766],"stringbuilder":[5986,11019,33153,36271,36419,36826,36979,38698,72021],"unloadunusedassetsimmediate":[39929],"texturename":[45153,45269],"subassets":[41375],"inefficiencies":[23420],"‘hello’":[41139],"serverless":[17282],"2d":[0,13,45,63,77,102,167,1094,1672,1877,5826,5974,6066,6282,6312,6320,6872,7133,7170,7197,7620,7771,7878,7942,7958,7997,8093,8161,8262,8337,8372,8597,8764,8819,8998,9023,9081,9162,9293,9440,9722,10085,10135,10514,11189,11248,11459,11524,11597,11641,11652,11676,12044,12285,12697,12720,12895,13100,13158,13199,13260,13439,13551,13590,13669,13702,13720,13743,13784,13828,13850,13857,13995,14009,14235,14469,14497,14672,14978,15815,15832,15932,15947,15964,15979,15994,16002,16017,16032,16695,18165,18346,18751,18969,20860,21143,21198,21624,21775,22288,23295,23458,24004,24900,25171,25237,25826,26565,26568,26579,26757,26953,29492,30932,30989,31021,31390,31662,31668,31879,32311,32938,33492,33623,33762,34785,34966,35263,36529,37301,37314,37328,37474,37483,37557,37622,37629,37758,38530,38541,38574,38608,38624,38642,38924,39257,39530,39688,39731,40535,42738,43374,43597,44488,45077,45126,45308,45504,45749,46161,46537,46834,47197,47946,48353,48499,48502,48581,48603,48681,48861,48875,48893,49450,49527,50155,50615,50699,50713,50743,50770,50783,50796,50822,50859,50935,51078,51119,51133,51158,51163,51179,51202,51232,51259,51344,51808,51820,51845,51849,54159,54711,54741,54773,54911,55154,58461,59513,60640,60677,60887,61929,62192,63125,65003,65990,66440,66541,66811,66836,66869,66888,66903,67977,68629,70571,70984,71217,71374,71900,72291,72490,72763,72788,74183,74321,75185,75501,76103],"platforms’":[6446],"logicalcopyinverted":[43819],"drawmode":[41523],"writing":[726,3770,5017,6511,6680,8788,9901,17539,19030,20698,20777,22748,24193,24468,24984,25035,26170,26244,26295,26441,26486,27341,27540,27567,29128,29906,30139,30672,31646,32063,32916,33290,33462,35037,35604,38275,40163,41935,42018,42358,42597,42666,43079,43082,43092,43870,43918,43959,44096,44359,44829,44999,45173,45571,45598,45661,45835,46138,46505,46551,46711,47176,48030,48979,54989,58855,59165,66203,66228,67069,71754,72431,74458,76068],"portions":[167,6045,7849,8072,18110,21460,28464,33444,33776,34573,36570,38734,47258,50509,50570,66555,72063],"enhances":[36501],"threshold":[1770,2726,4867,6266,7517,8298,9009,9173,9303,9739,10012,10337,11252,11276,11536,11602,11811,13170,13569,13681,13866,13913,14995,18615,21587,23420,26566,26683,30243,32393,33677,35172,37838,38471,39518,48323,50696,52040],"clips":[271,1568,1861,1879,1890,1911,1925,1960,1972,1986,2034,2083,2192,2211,2213,2235,2243,2363,2421,3569,4722,4773,5166,5978,6272,6298,6314,6783,6999,7144,7178,7468,7673,7812,7931,9138,10703,14764,14785,14883,18065,18186,18916,21335,21575,22075,22458,25171,25187,27812,29091,33945,35901,35985,36242,37571,37678,38442,38666,40619,41157,48334,49646,50512,54170,68018,72464,72492,72609,72681,72721,73445,74192,74312],"triggerstays":[35752],"asyncuploadtimeslicedupdate":[27730],"confidentiality":[23134],"amazon's":[66990,67015],"assemblyqualifiedname":[65002],"hostid":[11004,11056,11214,11230],"decoder":[259,4736,7672,74977],"2’s":[40671],"patterned":[9889],"serializereference":[36757,39879,55621,74311],"filled":[5284,11130,11561,13142,15839,26360,33239,35017,39662,46722,47944,56727,60881,60982,65988,74325,75472,75726],"logic’s":[36333],"computegrabscreenpos":[43901,44412,44848,46809],"python":[17149,31198,31451],"hasauthority":[10811,11086],"reuses":[23525,33261,35994,68223],"drag":[179,2079,2254,2266,2332,2390,2441,2579,2775,4140,4306,4822,4965,5090,5165,6267,6294,6351,6402,6981,7073,7184,7198,7496,7816,7940,7956,7998,8349,8499,8629,9050,9270,9322,9375,9927,10246,10341,10406,10509,10724,10760,11454,11492,11505,11649,11918,12182,12303,12369,12557,12707,12742,12783,12851,13149,13227,13238,13284,13382,13816,13851,13880,14680,14758,18196,18435,18991,19065,19222,20547,20663,21148,22235,22644,24018,24543,24726,24895,25165,25192,25410,25507,27823,29072,29900,30038,32132,32372,32858,33649,34308,34394,34513,34539,34754,34778,34949,35202,35266,35369,35625,35772,35903,35969,36023,36120,36174,36298,36435,36548,36694,38498,38541,38643,39135,39241,39259,39351,39518,39637,39773,40024,40114,40628,41562,41648,41691,41712,43256,47189,48324,48514,48524,48583,48608,48622,48662,49206,49892,50289,50511,50522,50527,50592,50629,51146,51291,51371,51825,52233,52535,53046,54309,54447,54539,54545,54578,54666,54712,54954,55054,55150,55223,55299,56382,56442,56661,56717,56792,56795,57208,57333,57554,57918,57979,58336,58618,58799,59393,59807,60022,60232,61614,61891,61907,61985,62051,62213,62483,62859,64263,64982,65220,65244,65906,65937,67101,71617,71689,71867,71956,72247,72445,72468,72499,74893,76262],"productdescription":[67549],"bang":[7375],"hkey_local_machine\\software\\microsoft\\windows":[74540],"stringbuilder_t26":[72021],"reappear":[32185],"blink":[2346,39628,75579],"16x16":[37798],"default_value":[54524],"guistyles":[9553,9653,24051],"nonserialized":[18008,39169,39897],"outerx":[61134],"team’s":[35228,67897],"++x":[8681],"complicated":[5640,7878,8787,10564,12013,14342,18678,24098,25496,26508,28482,29663,32847,44269,71869,72344,76217],"‘tiled’":[13754],"subscribe":[30472,30634,40164,62813,69620],"newsceneoutputpath":[39207],"multilayered":[37497],"gold":[13058,63558,67192,67473],"isoline":[46828],"#3cb371":[63598],"stylerotate":[62307],"disabling":[4586,4846,5948,7017,7567,7574,8242,9152,9709,11589,12275,12818,13663,17987,17991,18132,18244,19138,20118,21008,22057,22120,22981,24983,27583,28022,28457,29863,30916,32173,32284,33073,33413,35137,36628,37618,37663,38609,39146,39168,41322,42095,42161,43131,48023,49345,52634,70229,71026,71172,71438,71596,71856,72371,73404,73459,75001,75134],"somestruct":[52551],"choice1":[64703,65065],"pipeline's":[26716,36177],"pointercaptureoutevents":[56881],"identifiable":[26925,71408],"work":[177,404,431,491,680,879,885,1042,1227,1316,1332,1501,1703,1989,2131,2184,2243,2360,2373,2699,3349,3491,3589,3736,4140,4503,4522,4764,4774,4960,5038,5258,5330,5350,5736,5826,6751,6857,6951,7117,7199,7374,7617,7931,8090,8258,8358,8403,8575,9159,9207,9274,9330,9717,9781,9970,10201,10215,10446,10591,10803,11329,11612,12645,12699,12721,12985,13116,13375,14031,14261,14577,14699,15711,15836,17045,17546,18100,18114,18268,18376,18414,18454,18503,18536,18728,19508,19994,20222,20240,20403,20558,21054,21180,21361,21552,21897,21988,22239,22557,23420,23559,23816,24020,24052,24276,24466,24471,24738,24744,24895,24946,25307,25343,25351,25399,25492,25541,25623,26076,26263,26481,26508,26580,26666,26954,27090,27488,27490,27500,27514,27559,27583,27729,27986,28051,28068,28450,28875,28973,29014,29018,29241,29330,29391,29415,29421,29573,29695,29761,29814,29832,29881,29924,30038,30358,30396,30478,30500,30871,31386,31642,31649,31916,32262,32478,33067,33322,33414,33421,33458,33475,33612,33775,33888,34201,34362,34594,34653,34905,35240,35337,35427,35714,35795,36055,36340,36509,36633,36710,37548,37662,37686,37731,38251,38268,38402,38425,38455,38687,38904,39140,39170,39600,39856,40000,40103,40169,40449,40534,40570,40654,40674,41760,41989,42009,42056,42110,42311,42356,42811,43003,43075,43111,43173,43222,43416,44268,44515,44627,44758,44797,44891,45403,45479,45613,45975,46370,46977,47205,48170,48676,48892,48977,49433,49558,49593,49644,49843,50142,50147,50362,50411,50514,50615,51007,51950,52181,52546,52747,52854,52879,53210,53703,53785,54042,54132,54393,54483,54542,54574,54674,54696,54746,58115,58831,59065,60164,61420,61658,62020,62830,63069,63689,64138,64373,64520,64743,64928,65289,65309,65360,65753,65849,65923,66043,66313,66414,66461,66549,66812,66857,66881,66907,67090,67703,67953,68069,68252,68513,68550,68604,68796,69315,69421,69814,70288,70593,70937,70965,71129,71611,71665,71790,71932,71973,72375,72385,72802,72808,72815,73121,73193,73248,73347,73410,73417,73562,73616,73695,73775,74164,74852,74982,75083,75107,75251,75397,75439,75793],"registermarkereventcallback":[27991],"other":[86,120,214,248,291,500,518,627,687,701,717,812,891,919,986,1273,1332,1494,1537,1661,1700,1762,1822,1832,1880,1947,1966,1994,2117,2184,2189,2204,2211,2234,2261,2275,2296,2343,2459,2702,2772,2998,3078,3229,3247,3306,3346,3415,3475,3486,3511,3569,3591,3734,3776,3870,3879,3999,4133,4206,4217,4313,4387,4427,4450,4485,4515,4591,4671,4755,4773,4793,4810,4876,5020,5082,5162,5201,5949,6033,6118,6235,6266,6293,6318,6468,6947,7013,7163,7199,7231,7390,7429,7469,7565,7572,7778,7964,8059,8117,8131,8159,8162,8197,8247,8276,8302,8394,8434,8496,8639,8765,8899,9002,9024,9071,9138,9145,9163,9197,9243,9262,9297,9351,9594,9636,9670,9727,9792,9845,10058,10135,10212,10328,10412,10443,10502,10564,10609,10614,10706,10725,10780,10794,10826,11039,11069,11263,11292,11310,11332,11423,11466,11515,11536,11602,11654,11682,11726,12134,12339,12475,12699,12721,12831,12881,13027,13159,13249,13263,13454,13555,13590,13627,13645,13662,13673,13708,13830,13858,13897,13972,13999,14009,14229,14469,14514,14539,14573,14664,14733,14814,14943,14983,15840,16330,17045,17092,17152,17169,17282,17342,17384,17803,18064,18112,18257,18322,18359,18471,18485,18611,18623,18715,18734,18756,18813,18885,18916,19018,19061,19174,19286,19341,19355,19617,19637,19667,20075,20190,20220,20263,20392,20414,20541,20583,20630,20654,20811,20863,20967,21023,21144,21168,21322,21576,21625,21640,21777,21852,21875,21956,22018,22045,22074,22101,22130,22183,22234,22292,23270,23398,23439,23475,23543,23614,23807,23882,24213,24275,24467,24475,24524,24601,24621,24724,24761,24778,24900,24923,24946,25172,25203,25355,25399,25444,25550,25679,25735,25738,25841,25849,25861,25892,25928,26044,26073,26114,26256,26263,26291,26376,26446,26479,26509,26562,26572,26587,26615,26651,26790,26858,26920,26935,26999,27025,27055,27065,27088,27114,27136,27323,27491,27550,27591,27644,27671,27678,27695,27768,27940,28104,28133,28200,28445,28470,28670,28714,28752,28761,28875,28886,28955,29111,29128,29167,29352,29434,29744,29814,29922,30001,30035,30050,30063,30149,30184,30219,30241,30264,30284,30352,30396,30475,30500,30506,30859,30985,31385,31610,31631,31650,31716,31816,31920,32179,32240,32403,32702,32873,32923,33087,33401,33421,33457,33488,33537,33615,33652,33759,33762,33782,33946,34158,34188,34201,34266,34348,34474,34601,34672,34755,34791,34845,34900,34905,34926,34944,34994,35192,35250,35323,35371,35692,35865,35925,35990,36029,36130,36182,36240,36305,36508,36570,36678,36693,36924,37183,37453,37541,37622,37646,37716,37797,38242,38330,38384,38455,38478,38510,38541,38576,38641,38678,38884,39088,39109,39170,39190,39238,39309,39347,39512,39549,39574,39591,39603,39663,39694,39714,39740,39856,40042,40098,40128,40173,40447,40500,40539,40616,40655,40657,40689,40741,41322,41348,41374,41426,41451,41510,41681,41761,41807,41852,41898,41963,41997,42017,42025,42105,42148,42220,42312,42378,42598,42988,43024,43165,43205,43223,43335,43484,43543,43554,43968,44067,44236,44377,44537,44625,44678,44788,44835,44978,45093,45220,45293,45389,45627,45725,45858,46000,46754,47067,47186,48071,48163,48179,48224,48240,48290,48353,48617,48699,49394,49440,49491,49497,49565,49613,49627,49638,49642,49663,49695,49723,49780,49852,49908,50002,50150,50170,50341,50356,50360,50437,50513,50601,50628,50654,50932,50960,51018,51115,51134,51202,51233,51306,51384,51535,51562,51631,51705,51792,51806,51849,51951,52099,52240,52487,52528,52579,52754,53048,53330,53714,53774,54104,54213,54227,54393,54488,54672,54709,54763,54776,54796,54885,55630,55642,55890,56101,56592,56720,57234,57293,57587,57694,57849,57869,58116,58159,58456,58557,58825,59541,59564,59831,60064,60357,60518,60639,61178,61323,61331,61485,61668,61749,62150,62193,62594,62703,62796,62886,63065,63199,63658,63981,64261,64310,64370,64453,64512,64564,64587,64611,64752,64809,64842,64860,64915,64955,65031,65050,65061,65286,65313,65368,65538,65553,65568,65588,65608,65628,65649,65668,65693,65906,65925,65999,66023,66137,66204,66235,66351,66377,66436,66488,66556,66816,66850,66877,66897,66900,66965,66996,67034,67130,67154,67185,67483,67773,67846,67949,68043,68049,68110,68245,68283,68323,68350,68476,68532,68614,68797,68856,69065,69344,69448,69740,70235,70288,70337,70385,70661,70774,70831,70875,70944,71016,71127,71190,71275,71288,71372,71396,71417,71617,71644,71689,71747,71861,71898,71911,71959,72008,72110,72225,72229,72296,72419,72533,72666,72715,72789,72799,72824,72917,72941,72993,73024,73137,73228,73292,73387,73442,73478,73499,73592,73607,73670,73693,73894,73917,74061,74197,74408,74581,74933,75015,75104,75114,75169,75199,75224,75278,75283,75310,75366,75414,75549,75909,75946,76023,76092,76124],"drivevelocity":[7303],"edible":[23185],"mediumslateblue":[63599],"unchecking":[27555],"allowdynamicresolution":[20452],"chrome":[12431,21302,27938,42467,50224,72475,73030,73125,73295,73320,73486],"a9":[72699],"canusespriteatlas":[45971],"helpers":[43897,43958,48098,69864,75092,75114,75324],"humans":[5832],"cullinstances":[74255],"chromium":[711,50224,73130],"european":[5990,53070],"possible":[149,253,512,739,1299,1355,1471,1762,1901,2086,2191,2332,2668,2990,3247,3302,3363,3451,3493,3602,4271,4671,4776,4867,5015,5267,5726,5770,5885,5922,6043,6123,6439,6688,6750,6836,7073,7505,7644,7793,7875,8084,8114,8487,8782,9172,9321,9404,9488,9827,9869,9970,10012,10080,10410,10572,11261,11283,11434,11589,11741,12650,12742,12888,12988,13058,13412,13464,13680,13865,13940,14006,14295,14338,14582,14965,14989,18319,18449,18506,18743,18977,19944,20210,20222,20240,20393,20545,20675,21060,21509,21765,21935,21969,22018,22353,23445,24454,24637,25113,25226,25262,25747,25904,26005,26058,26078,26302,26448,26787,26986,27056,27090,27214,28476,28955,29023,29365,29614,29707,29723,29785,29895,30164,30274,30308,30372,30869,31607,31857,32174,32250,32660,33006,33072,33095,34192,34214,34274,34484,34595,34994,35294,35381,35641,35763,35933,37261,37618,37706,38251,38274,38332,38369,38437,38560,38590,39310,39438,39484,39794,39825,39964,39994,40564,41289,41783,41911,42105,42449,42810,42953,43256,43594,43999,44058,44245,44377,44511,44915,45170,45569,45694,46346,46783,46873,47609,48225,48599,48649,48685,49355,49451,49637,49644,49666,49746,49803,49828,50014,50065,50146,50178,50401,50478,50656,50677,51010,51535,51965,52229,52488,52854,54266,54558,54796,54900,55740,55923,56188,56674,57957,58112,58132,58441,59123,59556,61460,62194,62780,63061,63729,64224,64330,64454,64774,65912,65981,66160,66225,66480,66827,66861,66911,67185,67758,67886,68073,68637,69901,70224,70243,71019,71774,71813,72201,72372,72497,72716,72919,73615,73817,74397,74898,75017,75410,75501,76335],"bob":[62010],"ciphertext":[66159],"showfpscounter":[55328],"log":[229,799,1459,2726,3334,3373,3548,3628,3747,4157,4210,4234,5176,6096,8976,10483,10871,11016,11177,11740,12640,15736,16564,18118,18383,18559,19254,20139,21012,21029,22859,24043,24460,24484,24916,24938,25114,25708,25898,25957,27600,27761,28446,28639,29162,29431,29841,30076,30109,30616,33779,34215,34257,34338,34464,35000,36563,36998,37667,38730,38826,38998,39350,40380,41958,42085,44622,45582,45991,48972,49259,49390,49817,50041,52665,53781,55690,55774,56024,56070,56507,56582,57823,58644,59799,60462,60533,60600,60873,61741,62073,64448,64545,64621,64665,64704,65002,65066,65091,65138,65400,65438,65451,65466,65484,66268,66621,66978,67065,67105,67458,67788,67957,68103,68297,68337,68364,68401,68454,68545,68972,69219,69537,69993,70497,70917,71132,71572,72162,72226,72238,72393,73106,73292,73511,74584,75246,75960,76065,76129],"waituntil":[15709],"enhancements":[31592,74178],"console’s":[53249,54046],"vertexlmrgbm":[42398,45191],"interpolateview":[46798],"currentgear++":[18496],"callbackorder":[24479],"flow":[2006,2211,2216,2235,4831,7179,7998,21148,34192,35736,36073,40017,40109,49665,54020,66256,67073,67289,67560,67706,68472,68497,70761,74178,75742],"advisable":[7017,11606,45293,52601],"xbox®":[23134],"shift+click":[2265,2389,39137],"docker":[66582],"dust":[9669,11244,11274,18354,22796,31797,31856],"torch":[7841,27303],"#ee82ee":[63650],"sparse":[367,11225,45513,48161,50403],"getproductid":[67728],"safeguards":[28114,28185],"numberofassettypen":[40972],"signifier":[47309],"hn":[27612],"toolbarpopupsearchfield":[65390,65457],"packageid":[69537],"checked":[3885,5968,6964,7204,7413,8241,9016,9151,9708,10796,11444,12756,13277,13294,13401,13749,14728,14799,18173,18597,22278,23614,26608,32728,35988,36712,40277,48703,52644,61776,63258,63968,64301,66258,67347,67771,72402,75140],"becomes":[3585,3807,5049,5123,5218,6126,7103,8831,9216,9875,10337,10401,11570,12307,13130,13899,14502,18260,18435,20117,20338,21353,24892,25462,26113,26245,26296,28395,30218,33494,34913,38674,40277,41088,44236,45903,47063,48323,49509,49899,50398,50921,51239,51347,52465,53155,54316,57030,61489,64320,66253,67319,67440,68541,68571,71028,71181,72231,73054,73983],"half2":[8450],"unity_display_orientation_pretransform_90":[73004],"patchobb":[53117],"equivalents":[11,45565,59625,62800],"uxmlcolorattributedescription":[58086],"formerlyserializedas":[39940],"drawn":[71,2357,6491,8020,8115,8569,9890,11556,13067,13141,13206,20959,22224,22744,24276,24467,30265,33716,39669,42360,42800,49033,49497,49518,51170,51236,51427,54762,61313,61526,72754,75068],"lefteyecolor":[43448],"mf":[71964],"decryption":[66145],"side":[73,100,229,1580,2259,2268,2297,2392,2426,3450,4491,4825,4879,5123,5162,5284,6229,7765,7898,7990,8566,9180,9634,10068,10121,10850,11653,11761,12973,13093,13692,13851,13876,14128,14776,14863,14965,17045,18104,18207,19653,20636,21255,23194,24593,24984,25070,25261,25873,26489,26909,26917,27013,27022,27332,27368,28278,28768,29471,30062,30141,31634,31758,32296,32344,32388,32610,33436,33537,34723,35250,35834,36240,36457,37373,37479,38021,38280,39168,39253,39574,39740,42293,42298,42511,42517,42578,42583,42751,42866,42872,43128,48290,48375,49496,49843,50403,50440,50613,52034,52155,53489,53704,54019,54725,55863,58336,58704,58801,58998,59868,61323,61907,61967,62066,63724,65230,65254,65999,66848,67237,67587,67755,71773,72348,72520,72789,73324,74602,74986,75207],"n'":[65338],"apparent":[7508,22224,32318,37710,49496,49530,50403,51975,62200,70332],"skyreflection":[47378],"shadertagid":[44821,48998],"baseverticalcollectionview":[55439],"monoimporter":[15251],"finalizes":[54063],"#a52a2a":[63519],"crashers":[5826],"obb":[405,608,1336,12022,52774,53086,53300,68901,69139],"reactions":[38643],"darkgreen":[63533],"buffered":[8801,12947,35908,68090,75614],"occlusioncullingsettings":[15064],"asyncbufferresizedasyncuploadmanager":[35765],"excess":[234,7483,8286,30869,31706,48596,55134,72936],"artistic":[17152,27267,37397,49627],"refreshrate":[29856,72934],"'selected'":[39512],"additivelppv":[10144],"samplerstate":[8430,45217,45615],"shortcomings":[28947],"texture3d":[4675,14086,15115,45079],"cli":[66701],"stunned":[41469],"net’s":[11308],"penetrates":[32776],"arena":[8096,13222],"quirk":[3496],"recommeneded":[8189],"type'":[65990],"unique":[478,1961,2190,2239,2498,2537,2560,2776,3319,3468,3735,3840,3895,5437,5581,6361,6750,6831,7364,7983,8012,10812,11044,11066,11844,12594,13339,13622,18449,21659,22403,23258,25089,26038,26062,27650,28304,29590,30443,32173,32233,33660,37293,40474,40835,41225,41330,41447,42425,43035,43456,50153,50378,51149,52248,53350,54547,55720,55812,55911,56721,57307,57620,58202,59724,59742,59820,60374,60558,60777,61909,62120,63938,65704,65886,66374,67036,67086,67158,67163,67538,67606,67706,69997,70813,71369,72016,72239,73478,75485,75764],"erosion":[50647],"boards":[67965],"emitter's":[31858,32090],"24s":[41962],"setnobackupflag":[25961],"gui":[4875,7156,9286,9552,9619,11050,11131,11152,11163,13995,14234,16659,17974,20808,20867,20920,21169,21359,23227,23777,23884,24053,24167,24275,24455,25263,25333,26689,27588,28607,29678,30642,35252,36252,36428,39398,40042,49879,50782,50934,51516,52046,52239,52761,54106,58387,58732,59509,59548,60355,64793,65979,66332,67082,72423,74943],"between":[5,14,65,130,199,248,366,556,787,969,1024,1483,1588,1771,1855,1883,1894,1946,1989,2053,2069,2215,2235,2243,2278,2354,2372,2412,2429,3304,3440,3466,3492,3569,3666,3692,3770,3952,4461,4514,4552,4799,4861,4964,5025,5080,5179,5267,5727,5826,5921,6079,6116,6264,6294,6373,6483,6723,6760,6810,6859,7022,7144,7178,7250,7383,7506,7562,7644,7667,7771,7829,7913,7927,7970,8031,8131,8174,8209,8241,8271,8318,8387,8514,8774,8806,9001,9039,9151,9164,9224,9294,9330,9536,9636,9708,9726,9771,9882,9962,10010,10081,10108,10204,10327,10454,10656,10705,10725,10984,11527,11606,11642,11669,11758,12303,12345,12474,12706,12733,12942,12970,13021,13160,13219,13246,13310,13375,13554,13648,13670,13708,13724,13758,13836,13869,13894,13899,13985,14073,14261,14319,14502,14580,14695,14717,14851,14967,14982,15027,15831,15884,16330,16345,17296,17976,18079,18282,18354,18448,18481,18615,19503,20061,20181,20260,20402,20556,20613,20682,20891,20969,21092,21181,21240,21318,21575,21896,22030,22292,23619,23674,23962,24054,24330,24489,24588,24646,24785,24790,25162,25203,25354,25751,25881,25928,26079,26267,26356,26488,26508,26564,26588,26656,26864,26969,27035,27088,27169,27267,27320,27334,27568,27698,27938,28084,28436,28483,28887,28975,29004,29013,29020,29090,29135,29154,29364,29392,29614,29714,29863,29893,29906,29973,30148,30184,30237,30274,30323,30868,31008,31368,31703,31794,31925,32090,32105,32167,32311,32366,32390,32610,32702,32724,32855,33332,33383,33401,33436,33481,33528,33603,33629,33715,33755,33842,34205,34260,34341,34467,34640,34651,34799,34857,34882,34993,35379,35637,35687,35782,35872,36074,36144,36235,36333,36471,36568,36679,36715,37296,37581,37620,37685,37882,38258,38332,38437,38458,38503,38556,38586,38641,38667,39132,39159,39242,39254,39317,39417,39543,39575,39756,39779,39825,39930,40016,40050,40120,40129,40145,40159,40209,40526,41336,41388,41754,41861,41990,42060,42613,42810,42967,43114,43215,43456,43491,43589,43957,44053,44294,44362,44451,44590,44695,44755,44785,44830,45050,45276,45387,45587,45930,45960,46196,46574,47063,47694,48146,48268,48538,48595,48669,48676,48884,49240,49285,49354,49449,49543,49569,49643,49732,49763,50351,50381,50432,50600,50677,50692,50969,51081,51155,51202,51427,51960,52233,52511,52642,52718,52730,52766,52954,53250,54051,54208,54337,54444,54548,54601,54662,54726,54963,55550,55557,55806,55863,56114,56693,57288,57333,57679,57925,58147,58285,58407,58443,58518,59323,59554,59743,59865,60349,60354,60392,60787,60881,60982,61194,61444,61545,61976,62015,62464,62586,62739,62838,63068,63721,64098,64389,64755,64982,65730,65763,65925,66035,66116,66186,66258,66330,66393,66456,66910,66986,67624,67639,68059,68609,68901,69139,69294,69439,70230,70424,70586,71876,72240,72289,72426,72532,72765,72825,72879,72917,72957,73192,73633,73687,74011,74187,74239,74907,75079,75159,75368,75426,75508,76095],"preservations":[28561,66486],"antialiasing":[8061,8108,12881,22729],"callstatic":[1412],"ls":[69879],"scheduleasyncread":[27726],"virtualize":[7674],"localposition":[60258,60789],"comparing":[5994,6068,9186,9222,13160,26005,40343,52590,73417],"b0":[18233],"terrainpainttool":[50575,68881,69117],"getparameter":[33373],"turkish":[53652],"audioechofilter":[7563,15152],"undiscoverable":[71293],"shifted":[51922],"backtrace":[25895],"wet":[4845,5075,5123,7438,7455,7557,34875],"sf":[61917],"cat":[47578],"loadfromweb":[68145],"settings\\":[52505],"p_smosearches":[40757],"minimizes":[1894,11635,14502,28022,28475,30147,36609,70224,70245],"emailaccount+subaddress":[67041],"incorrect":[10108,11075,24983,27751,34673,38768,38847,40306,43194,44727,47952,48023,51974,52566,53988,66783,69302,69408,73307],"__high__":[66485],"supportscubemaparraytextures":[19744],"wasm":[12404,73185,73347,73639,73727,73938],"unfixed":[9019],"yeshand":[37971],"stdcall":[18558],"flexbox":[56097,57128,59828,64082,65905],"activates":[1091,2996,7195,9769,18183,25816,29727,29855,34378,43209,51618,51894,60366,66252,66951,75259],"blinking":[76298],"lfs":[69803,70359,70594,71248],"setscriptingdefinesymbolsforgroup":[19026],"accum":[6159],"spheres":[8149,8306,10076,10122,10595,11638,13023,13894,18568,22192,29398,31688,35252],"static_fields":[72053],"famous":[66542],"addtion":[74535],"metallic":[13921,23297,28885,29494,31881,33015,37980,41766,46737,49449,49465,49504,49593,49607,49627,49634,71866],"pile":[11610],"mynamespace123":[2920],"5f":[4898,8666,9421,14208,14904,15772,20471,21966,25557,27453,52379,56261,57103,58868,60969,61074,62301,63020,64475,64618,65225,65574,65614,76328],"valuestr":[4985],"m_somesettings":[49921],"cease":[23444],"gathering":[6105,10890],"mov":[6715,10733,14786,14907,72625,72713,72729],"death":[32655,37326,37609,70761],"resolvable":[44638],"touchscreen":[680,719,825,1091,1218,11903,18485,25816,29583],"wear":[49560,68807],"audiomixersnapshot":[15222],"gap":[9536,10096,21938,30242,33436,51091,58285],"another_folder":[70774],"alphabet":[25031,58115],"module's":[1001,28860,31861,35476,35736,36342,40002],"atrace_isenabled":[28025],"root":[142,478,1128,1239,1243,1941,2034,2127,2428,4228,6273,6298,7067,7152,7218,7369,7858,7888,7940,9110,10456,12105,13484,13598,14695,15835,18071,18436,18625,18681,18796,18952,19033,19470,20026,20233,20593,20626,21032,21337,21455,21565,22070,22527,23480,24527,24631,24780,25091,25108,25215,25462,25606,27624,27814,27897,28482,29062,29137,30039,30549,33587,34165,34900,34953,36792,37273,37622,38450,38650,38751,39788,39827,40449,40615,40688,40697,41165,41514,48185,49656,49678,49778,50600,52176,52226,52244,52501,54302,54419,54819,54854,55206,55820,55987,56166,56308,56373,56825,57080,57140,57436,57818,57854,58096,58782,59069,59427,59764,59914,60482,60525,60540,60738,61302,61651,62379,62523,62701,62747,63138,63669,63699,63972,64017,64898,65189,65286,65735,65831,65866,66464,66566,66848,67762,68534,69696,69765,69805,70268,70290,70325,70487,70610,70774,70801,70869,71329,71787,72318,74420,75573,76295],"housekeeping":[67291,67541,73626],"alt+enter":[2479],"eventsystem":[24833,33496,39517,52746,54760,58139],"mainui":[60171],"#8220":[52555],"obfuscate":[67764],"leftdownupsubdiv":[27420],"calculating":[4705,6150,9277,12706,13115,13765,18615,22151,22681,25647,27080,27509,29212,33482,34361,35357,37688,38402,42363,45296,46574,47654,51058,72318],"seven":[12509,22365,35369],"m_brg":[5366,5510,5746,5786],"audioreverbeffect":[7729],"neighbourhood":[36679],"unitywebrequestmodule":[16774,30973],"iteration":[1759,3321,6192,6378,6398,6472,11628,11843,14278,14314,17986,19197,25309,26046,28176,33308,33415,33681,35878,66555,73320,74141,74639,74776,74828,75209],"regex":[6025,41307,75705],"staticunitysendmessage":[1462],"gcm":[69864],"toolmanager":[59630],"lavenderblush":[63571],"windowminsize":[57521],"finer":[1977,14273,24390,58447,72683],"unityaudioeffectdefinition":[4890],"setemissive":[29553],"textureprojexternal":[44372],"d_ol_plus_act":[63468],"getworkerthreadstat":[76025],"lf":[7727,7738],"framebufferfetch":[44920,45514],"isbatchmode":[21052],"clickcount":[60786],"tagvalue":[45990],"contributes":[7930,9966,10651,22724,27048,27209,35691,35887,36303,50498],"trunk":[50613,52114,52176,52224],"pulses":[15020,22948],"meshcollider's":[75794],"__enlighten":[10008],"knee":[29112,46672],"“ghost”":[57595],"defaultscale":[62710],"mutable":[22989,26294,44876,70211,70340,70746,70781],"image’s":[12310,33567],"inputsubsystem_deviceconnected":[75507],"zyx":[9548],"stepsize":[61129],"regexes":[6032],"elements":[7,86,288,731,1091,1862,1985,2370,2962,3078,3471,3870,4217,4519,4608,4732,4806,5224,5452,6150,6943,8019,8104,8128,8437,9207,9555,9622,10231,13249,14009,14245,14494,14664,14756,14860,15842,17169,17356,17968,18336,18736,19430,19667,20740,20811,20894,21197,21219,21445,21956,22555,23942,24078,24276,24466,24489,24723,24739,24772,24794,24914,25187,25333,25816,26117,26243,26816,27125,27169,27293,27589,28483,29678,30363,30516,30865,33498,33506,33615,33685,34222,34785,35015,35462,35560,35787,35794,36041,36187,37376,37628,38439,38510,38621,39402,39466,39512,39538,39574,39603,39663,39666,39727,39787,39812,39836,40051,40098,40128,40154,40872,41211,42197,43323,45668,48509,48676,48913,49817,50881,51098,51135,51245,51864,52769,53147,54164,54223,54294,54425,54542,54579,54605,54611,54633,54706,54709,54746,54757,54787,54795,54848,54892,55116,55410,55550,55561,55653,55731,55807,55986,56049,56097,56336,56403,56689,56986,57125,57286,57341,57555,57598,57609,57628,57808,57852,57969,58015,58018,58036,58160,58190,58809,59048,59275,59552,59729,59749,59828,60137,60209,60424,60518,60543,60610,60635,60822,61179,61326,61333,61495,61539,61573,61954,62193,62384,62742,62840,63105,63131,63697,63820,63841,63858,63876,63912,63934,63955,63989,64024,64082,64209,64317,64380,64387,64449,64636,64696,64752,64774,64879,65166,65286,65370,65386,65490,65668,65696,65698,65724,65732,65779,65870,65902,65994,66023,66879,68664,71020,71563,71644,71970,72758,72840,72944,73242,73276,73302,73485,73499,73917,74774,75490],"cubes":[22192,23039,26606,35250],"uneven":[25623],"platformer":[37373],"paint":[7979,8324,12827,13628,13899,32400,32702,37382,37500,38046,48226,50356,50370,50508,50518,50527,50536,50549,50557,50567,50579,50624,51262,51344,51427,51528,51566,51602,51842,51864,72799],"m_toggle":[62765],"visibleoffset":[5661],"uv7":[316],"nvidia’s":[11621],"cer":[28193],"changer":[62367],"succinctly":[52982],"0px":[62246,63236],"currentsettings":[49932],"guiutility":[20951,51591,52466],"beginframerendering":[38204,40165,68593],"proc":[6340],"rebind":[9781,43297,55582],"__loop__":[32412],"supportsrendertextureformat":[43987],"glyph":[9258,40054,58338,58393,58459,61907,61933,62071],"guitest":[23784,23887,24071,24183,24290],"worldbuilding":[5832],"etc…":[4997],"buildassetbundles":[2795,3241,3484,3512,19094,27682],"onpointerleaveevent":[60871],"source's":[5161,5224,76035],"recreates":[30900],"nativearray":[2928,5467,5496,26110,26214,26304,26374,26437,26495,33463,36650,61100],"hdr":[554,6713,8060,8638,9458,10083,11817,12352,13140,14320,17118,20706,22166,22799,23531,24487,24514,25248,27135,27537,27567,31764,34283,34495,34878,36593,37704,37932,38362,42699,42727,42742,42818,44283,45094,45165,45574,49490,64468,69311,69417,74202,74276,75171,75415],"windowfunction":[24027],"upated":[26098],"5s":[23550,61852,63018],"softwares":[41753],"exhibit":[10068,14581],"diameter":[90,8355,9890,11638,30242,35252,60696],"2k":[72497],"autodetected":[18135],"memory":[554,987,1556,1706,1904,1967,2048,3229,3297,3309,3365,3486,3570,4537,4773,4845,5260,5498,5879,5921,5985,6054,6079,6116,6317,6384,6446,6810,7017,7173,7482,7870,8437,9260,9345,9457,9883,9964,9998,10082,10496,12007,12231,12404,12895,13306,13417,13534,13709,14027,14076,14277,14318,16524,16564,18105,18316,18510,18581,18979,19128,19151,19635,19992,20088,20242,20381,21514,21892,22093,22144,22464,23439,23568,24984,25206,25262,25898,25993,26109,26245,26295,26429,26434,26489,26540,26875,27003,27058,27118,27133,27215,27299,27690,27702,27836,27912,27992,28108,28182,28456,29149,29331,29449,29467,30269,30354,30868,31155,31437,31708,33074,33087,33381,33401,33418,33445,33506,34160,34486,34594,35139,35277,35441,35583,35727,35780,35876,35901,35924,35958,35975,36041,36196,36301,36391,36464,36615,36815,37369,37657,37679,37704,38335,38609,39013,39191,39902,41795,41866,41911,41944,42148,42181,42946,43013,43023,43117,43165,44292,48162,48329,48651,48676,48905,49357,49706,50001,50056,50064,50140,50397,50659,50687,50960,50996,52524,52558,54895,56725,58381,59085,62785,63132,64319,64890,66455,66570,66823,66852,66910,68081,68263,68351,68498,68922,69165,71738,71973,72052,73022,73088,73121,73186,73305,73367,73393,73450,73555,73599,73639,73938,74126,74235,74548,74581,74645,74918,75755],"modulates":[7446,7463,9898,49519],"uvdetail":[46244],"reflecting":[47519,49426,49526],"‘connect":[695],"croco":[52306],"amend":[25696,27089],"applink":[24707],"optimise":[10080,26812,37700,38283],"positioningtestruntime":[61286],"dimension":[200,8818,9274,11792,13198,14029,14285,25249,37345,39598,59165,72525,75576],"r16g16_sint":[8471],"pluginname":[30025,34677,75983,76074],"following":[54,80,152,169,211,261,289,476,526,536,590,662,670,703,722,740,794,834,909,969,1035,1193,1304,1325,1356,1385,1420,1583,1594,1710,1774,1984,2134,2236,2264,2335,2365,2388,2453,2465,2518,2550,2626,2709,2765,2898,2939,2963,3022,3308,3496,3525,3598,3682,3772,3866,4007,4035,4223,4236,4275,4397,4570,4660,4740,4809,4903,5085,5194,5270,5326,5342,5355,5499,5693,5737,5770,5812,5990,6111,6347,6409,6484,6489,6513,6681,6683,6725,6768,6787,6797,6923,6937,6953,7120,7220,7359,7469,7881,8017,8249,8429,8651,8793,9113,9351,9431,9766,9866,9941,10227,10410,10508,10747,10817,11054,11359,11529,11680,11726,12039,12275,12318,12527,12835,12875,13042,13125,13370,13457,13603,13751,13873,13962,14037,14087,14230,14304,14477,14517,14584,14724,14887,15006,15701,15819,16020,17045,17773,17803,17993,18041,18156,18220,18254,18349,18380,18539,18609,18665,18847,18905,19024,19055,19086,19098,19135,19175,19269,19275,19298,19319,19340,19354,19367,19378,19444,19455,19623,19649,19782,19979,20010,20046,20060,20130,20183,20206,20225,20238,20391,20422,20570,20590,20653,20864,21004,21017,21144,21154,21214,21299,21398,21481,21626,21640,21883,21965,21983,22019,22026,22061,22102,22114,22130,22252,22373,23267,23393,23445,23477,23561,23591,23673,23780,24152,24215,24472,24612,24649,24953,25053,25123,25141,25154,25247,25313,25351,25409,25454,25521,25698,25796,25868,25917,25941,26076,26129,26286,26387,26436,26497,26557,26700,26726,26794,26810,26816,26957,27084,27100,27604,27641,27707,27795,27921,27938,28137,28190,28286,28351,28373,28493,28606,28682,28720,28762,28830,28840,28865,28919,29187,29342,29384,29557,29562,29572,29624,29684,29761,29777,29818,29853,29920,30012,30154,30166,30267,30286,30328,30346,30391,30444,30693,30839,30876,30918,30985,31013,31019,31370,31389,31595,31635,31651,31720,31816,31857,31872,32813,32860,33076,33135,33385,33406,33442,33453,33515,33553,33575,33619,33624,33639,33750,33777,33893,33930,34242,34325,34449,34541,34641,34718,34814,34841,34964,35266,35407,35466,35518,35605,35684,35802,35911,35927,35961,35979,36065,36158,36227,36400,36446,36466,36680,36715,36737,36755,36794,36857,36999,37228,37315,37330,37475,37492,37511,37522,37607,37669,37698,37750,38247,38326,38439,38484,38494,38533,38610,38688,38828,38937,38946,39013,39029,39090,39099,39217,39269,39574,39644,39854,40128,40164,40170,40290,40544,40657,41027,41168,41307,41313,41379,41431,41449,41589,41705,41710,41787,41867,41879,41944,41994,42038,42045,42111,42180,42350,42362,42606,42792,42936,42947,43057,43083,43155,43197,43249,43354,43471,43493,43554,43578,43735,43897,44013,44278,44507,44611,44697,44788,44840,44991,45077,45546,45631,45837,46522,46534,46878,47455,47936,48055,48202,48339,48365,48380,48530,48559,48690,48863,48887,48915,48991,49152,49171,49213,49319,49638,49716,49729,49755,49845,49907,50002,50012,50044,50054,50124,50177,50291,50632,50662,50704,50951,50992,51099,51133,51159,51190,51232,51257,51373,51427,51580,51601,51621,51753,51812,51832,51841,51867,51995,52225,52268,52491,52570,52707,52732,52772,52872,52922,53088,53250,53778,54109,54272,54300,54400,54511,54576,54612,54638,54691,54739,54780,54797,54855,54873,54901,54923,54970,55075,55175,55233,55321,55377,55413,55495,55545,55561,55670,55749,55818,55874,55895,55976,56045,56103,56133,56226,56284,56339,56392,56475,56535,56603,56670,56747,56813,56989,57128,57306,57344,57570,57598,57610,57642,57817,57880,58002,58045,58120,58160,58203,58318,58387,58436,58467,58582,58676,58737,59002,59278,59558,59733,59829,59906,60138,60165,60215,60351,60375,60520,60562,60621,60683,60780,60893,60993,61181,61207,61303,61334,61456,61501,61519,61573,61606,61762,61901,61928,62005,62100,62122,62195,62338,62509,62588,62655,62761,62843,63072,63111,63134,63230,63505,63667,63696,63723,63813,63846,63864,63882,63897,63918,63945,63956,63991,64013,64191,64212,64330,64387,64400,64415,64428,64446,64470,64491,64535,64567,64590,64613,64638,64676,64699,64720,64733,64749,64777,64797,64811,64825,64844,64862,64881,64922,64938,64957,64975,64988,65003,65038,65063,65088,65104,65119,65135,65148,65166,65222,65246,65270,65287,65296,65315,65373,65386,65415,65434,65446,65460,65478,65492,65503,65514,65540,65555,65570,65590,65610,65630,65651,65670,65684,65708,65738,65754,65794,65850,65901,65998,66023,66112,66439,66452,66469,66563,66815,66839,66881,66893,66904,66917,67054,67085,67166,67267,67280,67527,67541,67592,67603,67625,67690,67708,67893,68133,68252,68520,68580,68726,68819,68857,69051,69315,69377,69421,69623,69679,69719,69761,69797,69874,69963,69993,70070,70137,70182,70248,70353,70588,70752,70778,70830,70921,70978,71013,71125,71173,71204,71346,71395,71482,71529,71598,71700,71908,72004,72077,72150,72186,72193,72214,72297,72364,72380,72493,72636,72759,72881,72902,72922,72998,73023,73032,73117,73147,73157,73215,73241,73264,73290,73361,73418,73460,73483,73562,73593,73610,73650,73665,73691,73707,73897,73912,74122,74153,74236,74429,74506,74569,74583,74592,74634,74733,74765,74809,74821,74834,74854,74864,74909,74919,75022,75031,75084,75161,75204,75271,75296,75364,75389,75411,75483,75751,75896,75925,75946,76094],"readonlycollection":[67286],"lefthanddevices":[76186],"reflectivevertexlit":[42529],"acknowledges":[67540,73285],"addressables'":[16060],"repeating":[196,1901,10271,10476,13211,14608,19617,23817,32702,32731,49542,50034,50126],"evenly":[196,6272,10270,11725,13756,14607,32412,32731,34783,39382,50552,52160],"#ff7f50":[63524],"color_blue":[42120,43051],"statements":[1472,6212,18282,33781,40362,40606,41801,41896,43961,44537,68590,69011,69263,73008,73200,73303],"windowsphone81":[34578],"layermaskfield":[55422,55526,64856,64858],"temperature":[30376,54967],"piling":[33457],"dep":[41470],"cascaded":[9456,43118,43963,75177],"update":[526,975,1665,1703,2022,2071,2667,2708,3794,3894,3994,4120,4219,4237,4372,4554,4980,5964,6124,6252,6744,6816,7104,7153,7396,7429,8602,8786,8992,9337,9830,9947,10333,10609,10692,10720,10749,10862,11078,11188,11244,11274,11420,11539,11612,12875,12994,13115,13130,13249,13465,14525,14560,14713,14844,15711,15851,17092,17997,18129,18172,18255,18373,18906,19145,19405,19589,20125,20491,20775,21029,21154,21294,21308,21925,23427,23779,25346,25352,25578,25776,25991,26335,26387,26464,26710,26928,27055,27109,27165,27169,28307,28317,28790,29133,29605,29846,31037,33166,33484,33866,33970,34897,34997,35322,35410,35523,35699,35897,36137,36270,36333,36418,36504,36855,37003,37647,37708,37732,37825,38273,38330,38508,38557,38587,38726,38828,38851,40274,40502,41356,41436,43337,48376,48403,48683,49067,49151,49231,49357,49929,50197,50334,51556,51794,51966,52500,52640,52849,54546,54591,55261,55547,55726,55987,56412,57502,57584,58106,58300,58435,58681,59047,59869,61555,61904,63658,64324,64453,65882,66057,67053,67236,67526,67587,67877,67900,68575,68717,68852,69061,69330,69372,69436,69533,69693,70116,70359,70587,70839,70937,71086,71136,71216,71258,71311,71345,71464,71480,71501,71517,71574,71593,71733,71869,72253,72364,72401,72537,73062,73265,73449,74181,74347,74872,75445,75479,75832,76011,76252],"connection_type":[25696],"presentnote":[34578],"\\editor\\unity":[21022,28715],"localclientactive":[11208],"positional":[8005,8577,11298,31917,38553,72928,73040,75487,76148],"exampledisplayprovider_stop":[76032],"element":[375,816,1546,5496,7955,8104,8139,8237,9210,9273,9798,10058,12206,12326,13032,13100,13706,14009,14711,19324,19344,19358,20237,20743,22624,24725,24740,24794,24901,26118,26206,26456,26496,28560,30518,31661,34408,36792,37186,39381,39458,39530,39542,39578,39603,39642,39676,39727,39768,40001,40061,40104,40132,40877,43047,44009,44757,48514,49826,51101,52227,54209,54227,54296,54430,54513,54545,54578,54601,54611,54632,54699,54711,54740,54758,54787,54799,54848,54871,54898,54957,55060,55367,55552,55558,55641,55713,55816,55909,55975,56100,56313,56376,56457,56619,56673,56760,57082,57266,57317,57560,57599,57619,57632,57818,57852,57976,58015,58050,58110,58129,58189,58415,58462,58923,59048,59405,59501,59594,59723,59749,59819,59827,60020,60213,60369,60495,60540,60610,60620,60680,60771,60879,60979,61302,61334,61489,61540,61587,61662,61771,61976,62108,62192,62384,62590,62749,62851,63105,63138,63697,63709,63747,63807,63841,63863,63876,63921,63934,63962,63989,64011,64025,64052,64210,64320,64386,64397,64412,64427,64443,64467,64488,64510,64527,64562,64585,64609,64635,64673,64695,64717,64730,64744,64773,64794,64807,64822,64840,64858,64877,64913,64935,64954,64972,64985,64997,65023,65030,65048,65060,65080,65101,65116,65131,65145,65163,65219,65243,65267,65285,65293,65311,65367,65385,65412,65431,65443,65457,65475,65489,65500,65511,65536,65551,65566,65586,65606,65626,65647,65667,65718,65733,65867,65948,66929,67188,68513,68905,69145,71969,73240,73260,73374,73817,73988,75487],"launchunityhub":[69970],"enabled":[100,608,680,721,1012,1512,1649,1997,2156,2204,2545,2602,2891,3773,3886,4587,4845,5938,6125,6271,6474,6801,6988,7015,7202,7243,7472,7776,7924,7950,7962,8001,8030,8152,8166,8232,8330,8376,8768,8981,9006,9027,9092,9215,9459,9582,9630,9688,9736,9773,9856,9947,10001,10058,10236,10364,10401,10505,10572,10654,10739,11049,11152,11176,11329,11352,11467,11551,11609,11803,12226,12287,12346,12654,12725,12859,12866,13112,13140,13245,13417,13640,13705,13824,13833,13862,13892,14338,14504,14543,14597,14772,14802,15861,17268,18000,18245,18310,18540,19054,19157,19655,20076,20116,20338,20608,21111,21307,21392,21457,21588,21712,22042,22116,22144,22243,23202,23279,23560,23779,24492,24764,24930,24979,25131,25206,25346,26034,26738,26807,26846,26938,27040,27107,27139,27540,27708,27757,28441,28835,28885,29343,29707,29871,30173,30194,30255,30275,30426,31689,31764,32108,32130,32153,32219,32261,32357,32458,32699,32727,32872,33065,33386,33407,33700,33828,34197,34257,34464,34606,34692,34861,35030,35367,35441,35600,35623,35727,35804,36049,36156,36204,36481,36684,37631,37679,37723,37882,38275,38375,38467,38483,38505,38550,38584,38609,38633,38667,38738,38828,39159,39240,39652,39992,40064,40094,40589,41784,41928,42025,42063,42109,42346,42416,42809,43127,43182,43735,44058,44142,45036,45459,47959,48022,48146,48288,48541,48557,48590,48680,48856,49403,49681,49880,50038,50354,50432,50632,51018,51237,51314,51390,51876,52158,52356,52484,52552,53469,53806,54690,55185,55331,55990,56909,58677,61478,61772,63970,65326,65370,66375,66498,66595,66916,67520,67746,67755,68697,68832,68855,69064,69311,69417,69803,70732,71022,71310,71738,71869,72399,72737,72877,72916,72999,73175,73220,73299,73352,73392,73424,73454,73701,73714,73936,74153,74749,74790,74863,74896,74997,75127,75241,75470,76095],"forums":[60,2953,6455,6788,6956,18665,19661,22027,29579,37278,40648,66800,68036,72911,74914],"trygetrootbone":[76296],"getnumvisiblecolumns":[52404],"approved":[67153,67398],"modelling":[346,8368,10000,10540,17000,23458,25307,29721,36688,37738,49520,50411,50603,50929],"localtexcoord":[8924],"gameobjects'":[23462],"server":[222,1654,3342,3449,4392,4562,9089,10794,10804,10984,11058,11068,11154,11178,11202,11221,11263,11376,11690,12401,12641,17474,18812,19030,19084,19097,19119,19126,19132,19172,19268,19273,19426,19635,20233,21031,22556,25116,26703,27681,28639,30062,31010,31224,31604,33069,33799,35041,35860,38850,48557,49733,49744,50212,53392,53704,53981,54019,55185,55331,66035,66082,66102,66151,66186,66227,66330,66362,66389,66425,66567,67434,67587,67755,67844,67918,68099,68263,68275,68313,68343,68372,68429,68470,69729,69860,69884,70027,70070,70108,70137,70174,70183,70302,70370,70594,70936,70940,71191,71215,71244,72364,72377,72476,73025,73153,73178,73212,73308,73312,73410,73626,73670,73706,74034,74153,74516,74858],"pretransform":[72999],"120px":[59338],"plugin_teedee":[5006],"networkclients":[10994],"subderived":[15303],"readalltext":[40465,53934],"erratically":[37618],"simplifications":[42378],"lightgreen":[63579],"chances":[18091,71782],"immerses":[23156],"#9400d3":[63547],"mytemplate":[61361],"ironsource":[16091],"store":[56,235,317,401,501,554,617,620,661,1018,1108,1130,1181,1656,1867,1997,2689,2764,2894,3247,3315,3667,3738,3865,3881,3897,3906,3948,3974,4024,4049,4155,4169,4186,4203,4216,4230,4254,4354,4358,4390,4404,4412,4421,4440,4448,4470,4484,4496,4509,4526,4599,4680,6807,6955,7081,7168,7478,8404,9075,9823,9969,10080,10137,10378,10496,10658,11131,11307,11685,11803,12042,12359,12441,12968,13151,13206,13307,13711,13964,14073,14318,17045,17296,17356,18625,18722,18925,20233,20270,20972,21588,22124,22144,22405,24632,24976,25449,25751,25962,26094,26251,26322,26393,26695,26707,26808,26908,27055,27131,27330,27483,27538,27654,27940,28104,28125,28126,28201,28281,28961,29444,29922,30332,31594,33194,33428,33883,34257,34338,34503,34610,34923,34956,35089,35193,36199,36512,36703,37167,37294,37657,37668,37723,39852,40358,40683,40774,41374,41580,43335,49068,49394,49533,49706,49752,49912,50002,50197,50401,50412,50583,52587,52737,52877,52930,53125,53256,53703,53756,53782,54002,54922,54969,55074,55172,55246,55319,55375,55731,56132,56224,56282,56338,56404,56602,56746,56881,57137,57343,58310,58459,58659,59200,59277,60209,60682,60892,60992,61557,61760,62054,62653,66458,66534,66556,66965,66993,67016,67086,67146,67163,67227,67265,67279,67296,67389,67537,67543,67549,67554,67559,67571,67580,67587,67605,67661,67705,67722,67801,67838,68039,68049,68601,68951,69196,69694,69724,69755,69795,69864,70011,70186,70257,70360,70708,70943,71127,71193,71204,71215,71260,71300,71390,71422,71449,71465,71500,71531,72178,73026,73205,73613,73687,74176,74253,74516,74837,74883,74911,75354],"myregexp":[6029],"ms":[6000,6113,7441,7458,7518,7542,7555,21896,34995,35390,35645,36094,36136,36195,53637,62859,72890],"invariantcultureignorecase":[73417],"popupexample":[56533],"setindices":[344],"iswindowsholographic":[74696],"alembicimporter":[40509],"login":[223,4473,28774,33065,53365,53695,53756,53998,67533,67928,69994],"rectint":[55531,65117],"culls":[360,5733,7924,21352,30173],"m_pointerid":[60239],"examplemain":[53119],"chordlength":[27446],"integratedsubsystem":[76040],"multisample":[43654,75414],"_gi":[46523],"calleditormethodimplementation":[34704],"composite":[7964,8372,12727,14502,15827,36460,37451,44271,48510,50436],"labor":[6105,29009],"grabpass":[37973,42684,43901,44375,44771,44848,46809],"runtime":[475,508,585,876,887,993,1071,1267,1372,1486,1556,1572,2048,2183,2959,3256,3309,3340,3493,3570,3580,3721,3807,4527,4651,4773,5025,5084,5959,6041,6121,6431,6810,6944,7017,7481,7662,7763,7869,8409,8599,9253,9347,9466,9785,9999,10496,10575,10726,10812,11072,11161,11319,11343,11863,12885,13127,13417,13459,13961,14016,14295,14320,14764,14848,14973,15857,15935,16005,16043,16106,16487,17030,17152,18070,18239,18408,18432,18536,18575,18627,18696,18828,18925,19095,19192,19657,20176,20187,20205,20402,21455,22061,22079,22165,22567,23286,23568,24299,24927,24944,25177,25343,25694,25727,25926,26017,26081,26132,26635,26931,27044,27068,27082,27175,27206,27214,27267,27297,27303,27314,27484,27677,27698,28108,28230,28266,28464,28867,28980,29063,29146,29213,29365,29399,29418,29484,29784,29813,29882,30015,30166,30172,30183,30207,30237,30267,30354,30856,31589,31616,31676,31739,31755,31773,31785,31810,31831,31848,32086,32101,32125,32149,32212,32245,32336,32354,32380,32602,32625,32645,32673,32720,32765,32899,33421,33494,33618,33781,33891,34197,34615,34672,34928,35189,35763,35768,35994,36736,37495,37646,37696,37723,38235,38483,38526,38550,38584,38633,38655,39169,39856,39989,40039,40368,40445,40514,40526,40555,40671,40678,41742,41794,41876,41947,42056,42124,42181,42333,42934,42946,43013,43017,43094,43106,43131,44073,45146,45446,45520,45563,45617,45932,46040,46789,48177,48234,48354,48676,48857,49048,49178,49350,49677,49709,49748,49759,50054,50142,50483,50533,50659,50701,50961,51722,52588,54109,54288,54302,54430,54497,54753,55559,56722,57120,57803,58030,58129,58578,58581,58653,58831,59267,59541,59549,59904,60193,60408,60495,60540,60610,60617,60670,61196,61302,61483,61593,61800,61939,61973,61988,61989,62049,62740,63068,63126,63233,64180,64204,64314,64322,65735,65773,65870,65896,65963,66100,66116,66256,66332,66499,66810,66835,66867,66886,66903,68641,68823,68880,69055,69314,69420,71016,71840,71924,72130,72140,72201,72794,72869,72954,73171,73438,73529,73613,73639,73988,74160,74258,74509,74612,74847,74863,75022,75249,75252,75305,75390,75874,75944,75945,76013],"generatepropertybagsforassemblyattribute":[36786],"your_tile_class":[51815],"2ds":[7198,8001,8163,9318,11551,13266,13833,15827,38532,38549,38576,38609,38624,38648],"'s":[54454,76215],"dopesheet":[2262,2431],"mercurial":[22715,48085],"trackingsamples":[17788],"lowest":[1771,2408,4867,7689,9465,9702,9752,11417,14295,19314,26669,32223,34237,37714,38301,38668,44240,45572,50478,50677,53539,55633,58349,59531,63816,70823,70877,71973,72723,72919,75439],"ext_texture_shared_exponent":[27159],"stringparamcallback":[52667],"slack":[67898],"fightermage":[40747],"aren't":[679,706,1570,1724,1842,9339,9792,9878,10586,11292,12116,12401,12692,13058,15825,18257,18760,19123,19693,23134,23525,24923,26138,26931,27310,27785,28176,28366,31010,33866,34760,35054,36302,37259,38616,41911,42781,45807,47660,48177,48317,49318,49749,50127,50150,50687,52046,52649,53310,54050,54469,54545,54725,55547,55807,57309,57628,57845,58448,58702,58794,59193,59398,60638,61446,61556,62822,63108,64761,64774,66499,66721,68807,69710,69813,70373,70686,70773,70810,70984,71086,71352,71552,72641,73024,73900],"paradigm":[75817],"rid":[29645,58132],"searchaction":[2464],"denser":[50589],"begingui":[20860,30641],"stringarray":[33141],"lzma":[3247,3291,3348,3569,73025,73310],"defaultvalue":[20278,49135,54524,57322],"m22":[5402,5546,20373],"dimgray":[63550],"editorial":[6950,17169],"refracting":[9196,22812],"helpbox":[59658,63301,64257,64730],"supercededs":[66747],"changezposition":[51225],"log10":[10483],"websites":[4126,4155,19348,19361,50344,53750],"numvertices":[61123],"m_workthreadstat":[76003],"areaname":[27829,27924],"seeks":[35629],"engine’s":[33466,36507],"unnecessarily":[3680,5496,6208,10083,11320,19129,31635,33308,49713],"dumpobjectvisitor":[36826,36979],"accessors":[6083,41290,55619],"fftanalyzer":[4994],"perform":[501,845,1483,1665,1759,2211,2278,2412,2592,3315,3453,3675,3723,4355,4485,4633,4790,5042,5163,5326,5733,5986,6062,6212,6725,6857,7056,7671,8326,9010,9174,9304,9740,9937,10226,10803,12401,12659,13171,13570,13682,13867,14996,17984,18224,18305,18573,19249,19367,19637,20126,21322,21725,22005,22113,23543,23687,24953,25112,25464,25861,25904,26494,26647,26814,27695,27985,28110,28310,28464,29443,29771,29818,29904,30166,30260,30265,30324,30352,30912,32174,32273,32920,33082,33403,33680,34615,34872,34940,35008,35337,35671,35727,36471,36584,37286,39137,39263,39874,40054,41161,41307,41322,41416,41452,41592,41716,41812,42010,42800,42997,43297,44290,44768,44852,45179,45858,46074,49042,49289,49653,49677,50390,50686,51991,52103,53470,55847,57705,57834,57928,61594,66034,66072,66519,67266,67291,67483,67541,67850,68086,68958,69205,70409,71120,71183,71237,71278,71297,71343,71434,71498,71511,71529,71768,72402,73147,73274,73325,73413,74581,74854,74931,75031,75687,76142],"nice":[4883,45568,47310],"screenorientation":[1582,19691,25875],"ffmpeg":[7511,73084],"xor":[43826],"miplevel":[51076],"ideal":[3439,3462,6045,7316,12409,18376,18675,27003,36085,42800,49512,50941,51155,52206,71874,72755],"desired":[2272,2286,2395,2726,3363,3508,3520,4848,6045,6122,7304,8032,8527,8642,9154,9180,9277,9434,9672,10097,10724,11323,11344,12993,13093,14517,19239,20220,20457,21042,22133,22506,23808,24475,24792,26050,26597,27623,27691,28157,28471,28897,29559,30881,31641,31798,32223,34425,34523,35037,35817,37588,38453,39724,40005,40202,40625,41694,48351,51074,51188,51314,51369,51529,53857,54210,54652,54736,59533,60212,63921,66395,66720,67873,68720,68867,69100,71805,71860,73287,74998,75226,75599],"4f":[57054],"kcubeyremap":[8661],"alternated_rows":[63252,64242],"disks":[7352,52511],"sln":[4968,35089,72840],"playerupdatecanvases":[19147],"additional_properties":[23522],"renderpipelineasset":[40156,48910,49225],"polygons":[360,8379,10206,10439,13384,14567,21517,22836,24668,29717,29764,43630,44164,44637,48518,48614,48635,49497,49518,74184],"skinnedmeshrenderers":[11960,12271,12581,19263,21466,21588,23402,34322,34446,34534],"aed":[53659],"gauss":[11629],"distribute":[541,557,812,1227,1822,1832,2762,2956,4039,4521,6042,6128,6272,11725,13131,17254,18816,18906,20695,23420,25751,26508,28118,28129,28281,29561,31604,32731,39579,40133,48360,48532,49737,52778,53108,53479,54002,58111,69729,70949,72172,72914,73146,73168,74127],"subd":[74210],"tarballs":[69708,69849,70027,71475],"mousedown":[51547],"typeids":[4672],"firing":[9826,25525,55727,59780,60434],"0f11":[40343],"rawclipspace":[44953],"meshcollider":[5959,10603,15084,35766,75739],"encapsulate":[36857,54599,57627,59544,61959],"spawned":[10809,10984,11078,11213,11242,23020,32078,32730,66058,66233],"stiffest":[9172,13680,13865,14989],"body’s":[33655],"worldcenterofmass":[33675],"listentry":[59348],"combining":[7,3478,5077,17924,18185,20397,22904,26380,30333,38403,41334,45260,49560,50932],"l10":[27472],"china":[40336,53441,69891],"answers":[231,9069,40648,68036],"n":[779,4947,5985,12433,14004,18462,19872,21034,21524,25803,27614,32731,34213,35285,35866,36100,36231,39078,39183,40346,41259,42364,43888,44691,45477,48614,50186,56628,62027,66793,68771],"approaches":[28481,30359,37233,38484,41812,41867,41879,42947,54107,57633,64758,66007,67642,74458,75079],"quit":[20159,21040,21377,23458,28617,38857,66824,66911,74040],"y+in":[46340],"control'":[9634],"motors":[75607],"mr":[23142,31164,43455,75114,75290,75366],"painting":[2958,8324,13932,14471,16969,43222,45267,49450,50371,50466,50521,50544,50553,50567,50579,50629,51099,51178,51250,51256,51387,51527,51560,51566,51609,51710,51844,51851,66197],"support”":[53711,72795],"tooltipstringformat":[51581],"licence":[53441],"nolightprobe":[23273],"jetbrains’":[40671],"onsortingchanged":[52381],"_max":[8315],"mipmpap":[12900,50708],"syncs":[54041],"drymix":[7545,7582],"puff":[32650],"commandevent":[59614],"outages":[67594],"realizing":[31013],"lefteyepose":[75579],"uielement":[30565],"decodeviewnormalstereo":[43889],"stretch":[171,2399,8578,9650,10268,11735,13712,13757,14605,14872,24388,24740,26564,26572,32255,32731,37376,42255,50613,54724,59837,64090,64768,73246],"pink":[2308,41923,41982,43231,51148,63622,63900,63950],"digits":[9130,18750,49850,53350,64342],"sbp":[50136],"quantities":[4010,7487],"soft":[9163,9878,10011,12908,13219,18239,22798,26787,26932,26934,27610,32217,32939,37654,37823,38310,39518,42798,43117,43173,43780,46797,50529,50602,52168,52485,71795,73480],"clickedtab":[57238],"6d44":[66769],"configurationsection":[72028],"#87ceeb":[63637],"sprit":[61907,62075],"axleinfos":[74434],"unity_standalone_win":[18552,33777,72653],"reconstruct":[39852,66458],"considerations":[579,894,938,4560,18425,18480,24511,28082,28125,29761,33384,33441,36742,36783,36797,37260,37656,38353,38400,39551,42357,72939,73023,73087,73284,73378,73688],"purchasedate":[67791],"uploadhandler":[68265,68325,68474],"lightmapperutils":[36661],"tarball":[18817,69750,70288,70345,70768,70875,71167,71467],"flashlights":[26923],"list1":[37098],"confuses":[67764],"condense":[18319],"pong__":[32412],"collada":[21426],"__random__":[32412],"primary2daxis":[76103],"polygon":[86,205,4273,8373,9024,11546,12720,12881,13384,15824,15838,21518,22836,25229,25276,29716,37448,37554,42675,44637,48519,48614,49449,49524,50601,50884,71776],"unity":[1,14,46,64,78,104,148,205,218,261,273,277,378,395,403,422,431,434,475,490,509,526,554,575,579,620,633,653,661,693,697,726,734,783,834,876,885,907,944,958,962,1031,1091,1094,1107,1127,1141,1179,1189,1201,1227,1237,1245,1276,1291,1299,1316,1325,1357,1369,1393,1402,1483,1516,1572,1594,1672,1706,1757,1761,1804,1816,1824,1831,1846,1854,1862,1886,1890,1893,1950,1979,2034,2041,2063,2184,2188,2204,2213,2235,2284,2351,2364,2421,2699,2757,2765,2896,2937,2957,3017,3020,3226,3289,3307,3340,3377,3452,3466,3493,3566,3569,3579,3680,3723,3772,3839,3870,3879,3898,3916,3955,3976,4025,4066,4169,4217,4230,4255,4357,4366,4392,4421,4445,4465,4485,4500,4519,4584,4652,4716,4722,4738,4772,4790,4813,4869,5041,5083,5158,5180,5265,5272,5326,5352,5496,5700,5724,5733,5763,5820,5909,5924,5984,6054,6061,6111,6221,6318,6334,6351,6392,6468,6486,6623,6683,6688,6691,6723,6750,6754,6797,6856,6934,6981,6985,6999,7167,7179,7243,7364,7429,7468,7620,7663,7812,7824,7874,7893,7979,8014,8115,8280,8384,8403,8528,8587,8615,8648,8782,8829,8975,9057,9135,9200,9247,9328,9434,9536,9555,9622,9760,9773,9843,9862,9908,9989,10058,10114,10209,10348,10392,10430,10456,10488,10568,10609,10633,10691,10719,10730,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11303,11319,11346,11375,11412,11454,11468,11499,11536,11606,11667,11716,12044,12275,12314,12437,12742,12770,12865,12968,13122,13193,13246,13263,13284,13308,13351,13370,13453,13585,13626,13653,13702,13740,13744,13784,13824,13836,13854,13894,13902,14006,14019,14079,14218,14347,14470,14502,14543,14562,14571,14664,14734,14775,14828,14928,14944,15700,15809,15831,15884,15899,15937,15952,15969,15982,15996,16007,16020,16034,16043,16060,16077,16091,16108,16122,16139,16153,16168,16185,16214,16229,16243,16258,16275,16330,16345,16364,16378,16392,16408,16425,16440,16455,16472,16484,16512,16529,16542,16564,16581,16593,16601,16609,16617,16625,16633,16641,16649,16657,16665,16673,16681,16689,16697,16705,16713,16721,16729,16737,16745,16753,16759,16767,16775,16783,16791,16799,16809,16817,16825,16833,16841,16852,16869,16885,16919,16930,16969,16986,17000,17012,17030,17045,17059,17077,17092,17108,17116,17124,17135,17152,17171,17187,17206,17220,17242,17254,17270,17284,17298,17314,17326,17342,17356,17370,17386,17398,17412,17426,17435,17450,17474,17488,17506,17526,17537,17548,17561,17578,17591,17606,17629,17642,17661,17680,17695,17710,17720,17740,17750,17761,17775,17788,17805,17820,17835,17852,17867,17877,17897,17914,17925,17931,17938,17956,17981,17992,18037,18058,18131,18156,18220,18240,18254,18321,18343,18357,18394,18404,18413,18440,18454,18485,18521,18575,18623,18672,18712,18730,18746,18760,18816,18852,18899,18905,18978,19021,19052,19085,19100,19189,19270,19274,19296,19316,19336,19351,19364,19376,19455,19616,19636,19639,19649,19666,19967,20063,20116,20179,20206,20215,20237,20378,20402,20438,20538,20587,20660,20766,20862,20917,21002,21015,21144,21154,21193,21202,21296,21381,21384,21445,21565,21624,21639,21687,21706,21841,21873,21955,21988,21996,22010,22030,22070,22099,22121,22124,22144,22203,22226,22312,23246,23392,23439,23482,23527,23536,23543,23604,23611,23625,23668,24051,24465,24491,24526,24597,24600,24620,24637,24768,24928,24944,25029,25043,25104,25140,25153,25192,25236,25309,25334,25350,25410,25443,25500,25671,25694,25723,25738,25756,25763,25814,25819,25826,25835,25888,25900,25926,25976,25979,26041,26054,26070,26100,26108,26133,26244,26263,26291,26390,26436,26477,26508,26551,26614,26629,26645,26654,26663,26685,26695,26706,26793,26808,26840,26927,26938,26956,27015,27034,27062,27077,27084,27088,27098,27114,27127,27167,27175,27207,27214,27266,27300,27303,27314,27323,27468,27495,27500,27514,27544,27583,27598,27637,27671,27679,27694,27762,27815,27919,27937,28051,28062,28082,28122,28154,28186,28263,28281,28323,28372,28463,28604,28671,28715,28752,28761,28780,28838,28864,28885,28963,28994,29036,29091,29121,29150,29330,29384,29408,29439,29443,29449,29455,29473,29555,29566,29614,29678,29721,29737,29755,29776,29785,29813,29828,29861,29881,29895,29919,29924,30000,30100,30143,30166,30171,30184,30207,30243,30264,30279,30310,30320,30346,30382,30449,30467,30499,30506,30679,30840,30852,30916,30985,31007,31031,31365,31379,31385,31592,31610,31624,31649,31670,31733,31749,31767,31779,31804,31825,31842,31869,32080,32095,32119,32144,32206,32242,32330,32348,32374,32596,32619,32639,32667,32714,32749,32852,32893,32924,33065,33094,33381,33398,33428,33445,33474,33508,33526,33579,33618,33624,33638,33762,33776,33877,33888,33904,34171,34186,34199,34200,34270,34351,34478,34536,34637,34645,34672,34691,34807,34840,34893,34961,35188,35240,35285,35384,35403,35527,35603,35622,35691,35768,35789,35901,35941,35957,35988,36042,36172,36197,36303,36359,36432,36462,36578,36650,36678,36695,36735,36753,36793,37234,37270,37279,37302,37325,37330,37484,37508,37522,37606,37610,37634,37670,37685,37723,37747,38245,38258,38275,38289,38324,38404,38461,38478,38505,38520,38532,38558,38588,38678,38820,38839,38905,38953,38984,39032,39085,39096,39127,39159,39179,39235,39263,39310,39365,39393,39447,39597,39720,39852,40039,40057,40151,40174,40430,40452,40513,40526,40528,40544,40643,40652,40657,40734,40759,40774,40796,40819,41187,41301,41364,41406,41415,41436,41459,41490,41543,41596,41674,41696,41748,41752,41792,41824,41835,41882,41917,41944,41989,42009,42023,42044,42121,42179,42231,42236,42241,42248,42253,42261,42291,42296,42301,42306,42311,42352,42402,42425,42434,42439,42445,42454,42461,42466,42509,42514,42520,42526,42531,42536,42541,42546,42576,42581,42586,42591,42596,42689,42703,42724,42746,42766,42781,42809,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42875,42895,42923,42929,42938,42947,43008,43017,43077,43085,43097,43118,43130,43147,43202,43205,43208,43372,43455,43484,43493,43508,43553,43566,43684,43870,43907,43933,44094,44199,44229,44303,44320,44338,44358,44386,44422,44508,44599,44685,44770,44787,44830,44993,45046,45144,45181,45200,45214,45261,45389,45419,45446,45520,45596,45837,45943,45962,46510,46732,46976,47145,47163,47415,48054,48162,48170,48224,48239,48275,48335,48353,48364,48380,48515,48535,48538,48556,48581,48621,48630,48641,48674,48852,48861,48874,48893,48921,49022,49148,49169,49173,49285,49309,49390,49421,49459,49490,49516,49573,49609,49650,49668,49710,49728,49737,49751,49817,50012,50019,50061,50064,50133,50142,50158,50305,50341,50347,50361,50409,50436,50512,50534,50561,50579,50640,50653,50656,50659,50688,50707,50712,50743,50770,50783,50796,50822,50860,50930,50956,50991,51078,51129,51155,51197,51231,51244,51361,51722,51788,51846,51849,51948,51960,52082,52097,52103,52238,52472,52491,52546,52684,52703,52718,52739,52743,52754,52778,52816,52871,52921,52951,53081,53292,53691,53734,53848,53996,54000,54105,54305,54423,54511,54574,54615,54672,54704,54740,54781,54794,54876,54909,54968,55073,55171,55245,55318,55407,55549,55564,55816,55894,55996,56092,56131,56223,56281,56337,56445,56481,56531,56601,56674,56745,56797,56987,57128,57309,57342,57918,58138,58417,58599,58727,58997,59276,59540,59696,59781,59915,60155,60354,60681,60891,60991,61186,61202,61326,61555,61570,61598,61759,62008,62119,62193,62348,62504,62652,62738,62856,63095,63236,63700,63796,63807,63985,64114,64204,64365,64373,64430,64512,64564,64587,64611,64747,64809,64842,64860,64896,64915,64998,65038,65051,65133,65187,65313,65370,65538,65553,65568,65588,65608,65628,65649,65687,65788,65849,65896,65957,66002,66022,66032,66039,66098,66109,66177,66212,66329,66347,66372,66400,66447,66449,66460,66526,66542,66553,66801,66805,66809,66834,66866,66885,66900,66915,66947,66960,66964,67018,67063,67069,67161,67229,67261,67293,67366,67538,67543,67550,67558,67568,67579,67581,67592,67603,67624,67638,67706,67720,67745,67755,67840,67892,67976,68043,68044,68054,68071,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68458,68492,68527,68544,68564,68687,68810,68848,69039,69292,69339,69401,69505,69518,69674,69693,69716,69768,69808,69861,69884,70091,70121,70171,70175,70195,70211,70235,70258,70302,70330,70356,70593,70752,70770,70801,70867,70914,70935,70940,71025,71128,71173,71190,71210,71215,71255,71275,71289,71311,71323,71370,71390,71446,71462,71469,71480,71508,71540,71557,71591,71608,71661,71760,71805,71813,71855,71897,71906,71999,72008,72050,72063,72084,72089,72100,72110,72119,72126,72132,72136,72148,72193,72207,72229,72281,72290,72364,72375,72377,72462,72467,72489,72609,72615,72717,72724,72778,72786,72800,72813,72821,72830,72843,72880,72901,72916,72938,72986,73024,73028,73093,73118,73160,73205,73249,73260,73290,73313,73360,73389,73418,73427,73433,73470,73499,73592,73599,73639,73669,73690,73751,73896,73908,74049,74121,74128,74220,74406,74502,74506,74512,74588,74620,74665,74760,74799,74808,74814,74832,74849,74863,74883,74893,74917,74990,75029,75067,75077,75108,75126,75159,75191,75223,75250,75280,75289,75369,75388,75410,75474,75755,75876,75909,75975,76069,76093,76335],"endswith":[5998,6154,19482],"autoconnect":[563,6368,6426,6474,21111,28167,35797,36562,52644,73175,74629,74790,74850],"coreanalyzers":[38740],"ipackerpolicy":[48690],"sophisticated":[1980,2183,50491],"website":[840,3907,4026,4131,4166,4174,4356,4369,5987,6103,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,12157,16212,18360,18682,18718,18748,19316,19336,19351,19376,21639,25898,28388,28773,30490,43372,50200,52542,53582,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,67117,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,71132,72366,73019,73030],"interchange":[4783,24708],"intends":[65968,75265],"86ac778e1a44c9143864797ddacf8cc9":[66682],"_color":[8910,23260,29491,31878,33012,43621,44474,45097,45363,46838,47317],"makecell":[60053],"terrainmodule":[16718,30966],"substitute":[33275,34890],"honest":[5919],"screencapturemodule":[16710,30965],"etw":[27938],"acquiring":[25898,75451],"performs":[3590,3777,4387,5338,6080,6135,8839,10364,10698,11319,11607,12881,14477,17206,17981,18000,18607,19133,19637,21870,23663,24492,24962,25108,25225,25458,25588,26047,26115,26647,26712,27068,27175,27303,27316,28464,29185,30166,30268,30321,32180,33077,33401,33438,33475,33548,35622,35799,36465,36998,37286,37881,38257,39003,40817,41838,43160,43456,43739,44166,45085,45851,46418,47026,49668,50351,50381,51987,52754,55973,57832,65132,66128,66479,67770,68130,68547,72401,72477,74293,74951,75421],"clip0":[33945],"midsection":[13756],"microsoft’s":[5999,19050,19242,27785,29908,30875,33426,34229,34428,34526,34638,38681,44874,69024,71663,74582],"m_component":[21647,48127,76423],"devicedefinition_setname":[75519],"_metallic":[23297,29494,31881,33015],"sprites":[7,22,47,65,82,137,166,3498,4501,4519,5826,9440,11681,13585,13706,13718,13760,13850,14348,14490,14538,15935,17642,18981,22904,23270,24728,25183,25237,26598,30363,31662,32695,34785,35258,37321,37333,37495,38130,39426,39826,46125,48353,48364,48386,48501,48536,48538,48556,48578,48614,48617,48630,48653,48678,48856,48860,48873,48892,50936,51129,51198,51230,51247,51371,51621,51778,51820,51843,51879,54162,54604,54718,58998,59501,60640,61906,61919,62075,65767,65987,66542,68003,68651,72282,72757,74187],"ignoreraycast":[71588],"kformatr_bc4_unorm":[50100],"stricter":[44896],"getfullpath":[69686],"sr":[53644],"ispointerovergameobject":[58139],"alloc_temp_job":[29258],"applyeffectifkeywordison":[42029],"32x32":[50901,50933],"variant’s":[34956],"#100":[66770],"addanewcontextmenu":[56012],"parenthwnd":[34237,66894],"inputlayoutloader":[75708],"venus":[59961],"252px":[59331],"createbrush":[51453],"darkseagreen":[63542],"watchos":[2764],"determinism":[11570,11631,33616,70299,70707],"iunityxrpreinit":[75885],"runtimes":[5992,6068,7378,19129,30879,34627,50249],"mind":[3472,9268,12971,23287,24794,29772,30663,37671,37706,39382,39467,42812,43075,44080,50339,72531,75445],"straightforward":[1890,6737,9370,18504],"endings":[9119],"disability":[53737],"reachability":[20087],"crops":[8040,11793,33556],"envelopes":[5006],"burn":[31745,31760],"audio":[256,1566,2347,3465,3569,3580,3731,3988,4261,4468,4508,4519,4721,4736,4771,4789,4810,4868,5018,5078,5154,5157,5175,5177,5975,6691,7433,7450,7467,7513,7522,7530,7538,7551,7564,7571,7578,7587,7596,7605,7614,7627,7636,7647,7656,7676,7684,7692,7702,7711,7730,7752,7762,7770,10687,10703,10758,11312,12198,12649,14711,14786,14845,16470,16623,16783,17077,17661,18513,18916,19129,19137,19450,20541,22050,22553,25172,25840,25890,29308,30923,34015,34189,34884,35071,35375,35958,35967,36238,36465,37338,37592,38920,41157,41251,52094,53745,68018,68084,71021,71149,71217,71619,71927,71991,72610,72638,72706,72741,72878,73027,73133,73370,73903,74202,74319,74975],"renderparams":[75457],"generatecylinder":[27385],"xliff":[16470],"addressed":[6151],"comma":[2454,50634,62871,63684,63891,64036],"illuminates":[26932,38316,38346],"entries":[1373,3795,12670,18149,19239,20639,23140,25329,32064,34425,34523,38889,40298,47126,47186,48628,48746,52741,55088,55227,58361,59347,69393,69497,70312,70693,71056,71236,71493],"yesiridescent":[37989],"over":[146,155,234,419,560,572,580,641,695,700,725,842,944,1202,1227,1353,1366,1561,1771,1842,1933,1966,1994,2063,2257,2274,2324,2399,2429,2667,2769,3254,3569,3725,3995,4091,4194,4356,4456,4548,5090,5882,6031,6063,6107,6235,6293,6320,6833,6931,7163,7612,7644,7654,7697,7771,7865,7929,7956,8080,8117,8163,8245,8386,8511,8586,8598,8670,8858,9079,9138,9288,9518,9594,9627,10009,10080,11010,11069,11462,11484,11588,11614,11766,12222,12400,12662,12746,13131,13239,13538,13657,13898,14567,14864,14976,15027,17092,17591,17642,18104,18256,18357,18449,18819,18991,19312,20106,20240,20381,20457,20539,20712,20811,20891,21170,21195,21298,22355,23392,23488,23860,24160,24275,24758,25212,25388,25417,25521,25994,26049,26074,26477,26572,26895,26922,27023,27341,27549,27699,28437,28483,29170,29719,29880,30844,30868,31646,31742,31746,31788,31822,31840,32110,32116,32194,32216,32273,32343,32345,32414,32606,32616,32680,32735,32851,32890,33076,33092,33386,33398,33498,33652,33763,34824,34896,34944,35037,35354,35384,35650,35714,35836,35994,36084,36226,36336,36525,36569,36632,37360,37536,37712,37724,38492,38674,39140,39292,39327,39353,39568,39669,39764,40104,40450,40690,40717,41370,41427,41775,41907,42079,42255,43237,46877,47163,47189,48445,48662,49086,49169,49455,49507,49518,49609,49627,49659,49750,50197,50353,50378,50464,50527,50589,50642,50648,50697,50726,50929,50991,51264,51377,51975,52597,53230,53293,54445,55805,57469,57565,57836,57918,58111,58129,58333,58442,60412,60643,60822,61525,61907,62012,62063,62415,62643,62836,63259,63814,63956,64174,64220,64450,64489,64756,65458,65892,65951,66110,66187,66365,66426,66879,68196,68376,68458,68868,69102,69543,69860,70091,70121,70171,70174,70225,70241,70332,70513,70708,70904,71208,71269,71877,72048,72520,72754,73059,73319,73496,73620,74049,74260,74603,74782,74839,75022,75367,75544,76195],"r495":[36608],"s_visitor":[37006],"hardlight":[43839],"characterbody":[40750],"tbdr":[6873],"angle":[2046,5179,6762,7022,7198,7343,7792,8007,8029,8122,8245,8444,8515,8834,9163,9309,9348,9690,9735,9871,10400,10656,10737,11661,12978,13110,13159,13220,13391,13559,13684,14990,19451,21147,21500,21969,22307,25212,25292,25560,26587,26922,26985,27447,30141,31710,32161,32408,33537,36568,37281,37617,37791,39233,39252,39997,42751,46196,49454,49524,49821,50692,52122,52202,60714,60761,61130,62201,62728,63721,66000,68808,71808,72333,72788,72879,73263,74436],"midpoint":[32613],"supplies":[1614,21214,71959,73924,75322,75508],"specific":[1,222,258,385,541,577,581,655,698,840,867,894,938,955,1003,1023,1190,1229,1483,1501,1570,1574,1619,1761,1808,1924,2002,2172,2190,2238,2358,2490,2549,2745,2761,2990,3246,3379,3455,3493,3565,3569,3734,3866,3982,4091,4270,4355,4593,4737,4774,4866,4874,5056,5724,5815,5965,6035,6068,6184,6361,6421,6468,6804,6943,7003,7198,7246,7386,7485,7569,7576,7841,7922,7983,8002,8305,8429,8563,8814,9089,9138,9254,9395,9440,9625,9690,9771,9975,10014,10373,10493,10795,10850,11305,11404,11473,11587,11658,11676,11734,12038,12400,12521,12703,12775,12896,13376,13485,13713,13818,13834,14141,14223,14313,14684,14726,14789,14834,15850,16470,17092,17110,17206,17488,17539,17952,17974,18054,18114,18239,18312,18462,18500,18625,18676,18720,18743,18819,19005,19031,19167,19316,19336,19351,19364,19376,19970,20045,20096,20233,20391,20572,20622,20660,20918,21083,21448,21604,21624,21692,21870,21988,22066,22114,22229,22417,23453,23618,23691,23798,24031,24165,24391,24470,24580,24612,24645,24909,24931,24951,25070,25189,25265,25346,25350,25399,25587,25679,25717,25763,25855,25973,26037,26065,26104,26260,26263,26563,26576,26605,26783,27591,27654,27765,27815,27834,27937,28084,28125,28255,28304,28390,28465,28947,29043,29152,29337,29435,29439,29478,29855,29896,29919,29976,30042,30174,30305,30416,30493,30520,30871,31009,31385,31621,31628,31798,32188,32258,32684,33393,33424,33474,33515,33656,33769,34042,34161,34207,34318,34324,34448,34539,34639,34677,34692,34867,34899,35185,35248,35366,35469,35504,35603,35622,35760,35780,35829,36069,36203,36330,36503,36586,36705,36739,36791,36855,37270,37642,37674,38915,38959,39085,39116,39140,39176,39308,39346,39568,39887,40162,40186,40555,40760,41070,41235,41294,41313,41348,41373,41426,41447,41560,41610,41705,41743,41990,42018,42147,42184,42312,42354,42425,42665,42705,42726,42748,42781,43243,43489,43709,43978,44205,44626,44671,44905,44993,45389,45417,45485,45585,45598,45839,46816,48204,48268,48514,48584,49148,49417,49654,50200,50352,50457,50520,50536,50558,50572,50602,50672,50683,50703,50738,50796,50955,51004,51257,51405,51597,51618,51846,52161,52473,52590,52711,52715,52754,52877,53166,53256,53703,53760,53782,54018,54266,54452,54601,54690,54819,55497,55552,55558,55859,56063,56730,57292,57556,57628,57879,58111,58358,58459,58859,59458,59544,59743,60137,60157,60211,60495,60559,61360,61486,61594,61908,61959,62855,63746,63821,63858,63934,63955,64026,64160,64335,64452,64755,64973,64986,65232,65256,65373,65926,65979,66197,66436,66461,66543,66707,66902,67036,67086,67448,67563,67801,67988,68803,68918,69159,69333,69439,69508,69512,69720,69769,69810,69990,70167,70192,70290,70302,70370,70587,70761,70801,70963,71056,71156,71212,71264,71294,71320,71481,71527,71656,71751,71762,72097,72201,72424,72482,72497,72633,72867,72879,72934,73034,73248,73324,73383,73448,73483,73696,73910,74077,74126,74412,74740,74838,74887,75135,75376,75398,75503,75764,75872,76069,76071,76095],"requirecomponent":[25639,27345,33913,40633,50327,59789,60749,68138,68733],"6gw6whfghdpagmb":[69936],"xboxone":[45439],"myitemparent":[65423],"access”":[8427],"minresolutionheightscale":[20472],"selection":[2263,2310,2387,2438,2474,2582,3890,3933,3959,3987,5115,6220,7004,7184,7223,7848,7959,8328,8385,9515,9586,10327,13089,13400,14789,18404,18981,20069,20552,20702,21607,22044,22226,23464,23771,24856,25147,25352,25400,25933,26677,26841,26954,30755,30824,32681,33369,33652,35074,36069,38879,39127,39355,39629,48321,48405,48512,48653,49938,50642,50698,51094,51129,51294,51344,51541,51564,51867,52247,53243,55395,55870,55988,56244,56304,56369,57213,57318,59122,59271,59868,63138,64938,65081,65321,65370,65698,68555,68720,69350,69454,71206,71283,71347,71409,71562,71913,73164,74145,76566],"game_switch":[55223,55346],"gt":[82,395,463,560,643,857,1548,1746,2077,2220,2362,2464,2635,3566,3884,4149,4276,4472,4589,6168,6228,6290,6314,6383,6393,7814,7839,7935,7986,8074,8146,8245,8281,8443,8628,9286,9348,9554,9765,9847,9989,10054,10584,10721,11176,11357,11505,11645,11667,12235,12274,12865,13223,13323,13353,13744,13816,13822,13978,14281,14363,14471,14554,14664,15022,16060,16564,17978,18096,18132,18362,18462,18626,18748,18951,19060,19324,19341,19355,19430,19650,20211,20220,20459,20616,21018,21834,21874,22018,22095,22112,22251,23009,23613,24100,24669,24895,25107,25516,25679,25894,25917,25939,26034,26072,26117,26253,26812,26940,26952,27015,27098,27491,27767,27919,27943,28469,28618,28672,28715,29285,30228,30284,30859,32251,32847,33072,33299,33386,33401,33484,34179,34237,34948,35247,35718,35770,35797,35925,35960,36334,36462,36581,36693,37098,37269,37641,37667,37704,38377,38450,38743,38906,39074,39183,39637,39671,39871,40324,40563,40622,40711,40849,41174,41343,41466,41508,41766,43071,43464,43518,43662,43750,43808,43955,44104,44142,44173,44312,44327,44598,44634,44773,44802,45002,45062,45401,45863,45945,46510,47179,48055,48198,48562,48680,49753,49820,50010,50061,50560,50606,50620,51003,51158,51163,51179,51206,51607,51815,52174,52222,52407,52505,52551,52890,52939,53166,53787,54050,54211,54430,54835,54854,55497,55606,55726,55857,56691,58044,58704,58795,59596,59894,61179,61333,61449,61547,61909,61922,61965,62008,62201,62766,62972,63140,63244,63721,63843,63863,63937,63989,64331,64653,65525,65867,66014,66707,66853,67039,67079,67161,67611,67963,68712,68881,69117,69679,69994,70077,70135,70281,70290,70325,70344,70399,70770,70823,70909,70928,70973,71094,71608,71675,71747,71805,72014,72188,72227,72364,72379,72500,72752,72895,73188,73207,73251,73296,73330,73386,73624,73910,74418,74575,74644,74732,74900,74935,75767,76301],"“gold”":[67186],"subscript":[58296,62038],"braking":[49484,74456],"renderingpaths":[72752],"light3":[46699],"c83d2de2":[53891],"mmk":[53674],"individuals":[30492,54066],"m_size":[76539],"clearonread":[4669],"c1y":[5385,5529,20356],"min16uint4":[8477],"_ramp":[46601],"discourages":[56674],"customtextureinit":[8930],"respect":[4357,9184,10769,13181,13812,18230,29880,31632,32747,38661,39438,59189,64118,66057,70814],"expiry":[53592],"pointereventstestwindow":[60839],"ontriggerexit":[15851,21175,35751],"asset1":[3676],"penetrating":[8343,23099],"particledoublecurvessigned":[6703],"facial":[366,2130,2183,6288,6323,16330,29392,31108],"rgba8ui":[8478],"unfinished":[4665],"notion":[52225],"practical":[2180,29728,46248,62751,69785,69845],"snorm":[8461],"builtinimporters":[3835],"localconnections":[11209],"opt":[6042,22810,27638,36754,41449,74537,75587],"'table'":[34913],"onlaunched":[74672],"audioplugininterface":[4740,4879],"instruction":[6208,16043,23229,33304,43962,45777,50168,52576,54558],"erp021":[38768],"displays":[501,864,1277,1649,1908,2198,2206,2349,2437,2570,2647,2717,2937,3088,3895,3903,3951,3981,4043,4051,4155,4199,4404,4474,4792,5080,5269,6222,6351,6418,7018,7314,7669,7838,8002,8014,8315,8814,9088,9760,9842,9862,9991,10059,10201,10345,10435,10491,10695,11077,11160,11374,11463,11587,11667,11785,12094,12274,12314,12437,13122,13196,13355,13475,13834,13935,13976,14020,14080,14264,14489,17946,17978,18112,18348,18441,18466,19944,20058,20594,20635,20705,20788,20878,21203,21400,21566,21684,21694,21846,21975,22040,22130,22144,22632,23491,23727,23796,24463,24523,24629,24665,25058,25183,25350,25404,25678,25887,25911,25997,26668,26824,27009,27021,27184,27288,27300,27507,27560,27819,27923,28104,28352,28404,28889,29212,29354,29834,30135,30200,30341,30540,30847,30907,31380,31386,32261,32877,33394,33642,34264,34346,34472,34617,34893,35007,35218,35258,35264,35366,35463,35465,35517,35622,35691,35806,35901,35924,35958,35977,36020,36118,36155,36205,36296,36354,36442,36463,36693,37210,37281,37559,38239,38257,38324,38853,39051,39252,39352,39591,39627,39714,40042,40306,40775,40819,41348,41380,41427,41714,41764,42044,42162,42449,42548,45082,45455,46875,47185,48507,48526,48583,48621,48864,49381,49446,49729,50157,50303,50436,50584,51081,51113,51189,51244,51387,51556,51586,51824,51869,52592,52878,53041,53260,53696,54333,54452,54498,54579,54679,54702,54730,54911,55153,55929,55975,56074,56530,56619,57210,57630,58803,58998,59409,59858,60221,60674,60881,60982,61688,62119,63091,63106,64511,64610,64731,64795,64808,64878,64914,65031,65164,65294,65312,65370,65734,65776,65892,65973,66335,66359,66393,66584,67049,68561,69738,70367,70746,70762,70830,70921,70982,71124,71190,71215,71256,71263,71300,71428,71446,71508,71518,71608,71653,71724,71814,71903,71913,72398,72789,72837,72936,73189,74990,75136,75958,76062,76071,76138],"chains":[3013,7215,9682,21370,23081,26264,26360,26567,33573,63974,66721],"yeshybrid":[37792],"solved":[35339,36149,52576],"invoke":[1277,3444,8426,9982,10720,10925,26908,27168,27992,28278,33483,34657,34743,40566,49810,53030,53960,66261,66945,67287,67538,67550,69961,72116,72139,72149,72190,74564,74592,74740,76260],"chef":[9368],"bounces":[250,2439,5330,9704,9973,9997,26878,36595,37621,37657,39771,49526,49609,69354,69458],"fxaa":[34861,37956],"dictated":[24051],"clearshot":[31067],"worldspacelightdir":[43893],"projectionmatrix'":[44962],"shurikentogglenormal":[63481],"clipboard":[10429,19022,21832,36064,40820,51115,53591,70483,73905],"records":[3287,4651,18318,18537,21870,30439,33454,35052,35881,36068,36444,36463,53724,66964,67018,67229,67840],"defaulttile":[51088],"networkconnection":[10814,10990,10997,11084,11227,66036,66240],"progression":[248,20712],"rereading":[4665],"prioritises":[45520,51030],"m_skylightcolor":[76383],"message2":[29427],"kay":[38011],"unscaled":[7156,14847,32167,47095,49852,52012,74347],"cameraindex":[73108],"sample":[506,794,1044,1275,1420,1695,2179,2810,2997,3242,4776,5006,5355,5499,5737,5775,6945,7489,7663,7763,8061,8893,9099,9205,9970,9998,10083,10110,12881,13931,14032,14134,16060,16075,17000,18095,18455,18670,18730,18756,19324,19385,19466,20349,21240,23021,23417,23629,25262,25698,25942,27118,27143,27523,27749,27758,27947,29661,29992,30243,32090,32680,33267,33454,34706,35691,35888,35930,35993,36054,36285,36497,36594,36633,36679,37650,37881,42959,43376,43897,44000,44083,44372,44840,45219,45615,46832,47110,47226,48617,49216,49438,50057,50145,50466,50542,50696,52099,52383,52526,52652,56496,57122,59371,59780,60433,60837,62799,63505,66117,66438,67098,67233,67390,70076,70142,70806,70933,71140,71568,72974,73083,74286,74429,75061,75421,75942],"+y":[8963,14254,42710],"cfbundleshortversionstring":[12155],"sliderjoint2d":[13583,15197],"extractfalloff":[36648],"player":[73,553,586,626,655,666,669,712,717,733,797,902,959,1005,1040,1180,1192,1202,1245,1331,1359,1383,1438,1493,1536,1658,1832,1859,1917,1996,2088,2760,2772,3466,3507,4773,5065,5179,5720,6046,6324,6348,6429,6476,6750,6809,7385,7621,8012,8192,9265,9321,9405,9718,10768,10794,10808,11069,11102,11145,11176,11221,11236,11244,11274,11292,11666,11699,12037,12273,12313,12436,12883,13036,13182,14338,14786,14830,15700,17206,17220,17282,17296,17326,17342,17356,17433,17561,17678,17693,17708,17931,17998,18131,18165,18293,18540,18565,19020,19086,19104,19123,19143,19172,19320,19341,19355,19368,19636,19978,20175,20211,20220,20413,20459,21026,21326,21859,21872,21962,21964,22029,22189,22317,23490,23613,23816,24169,24601,24621,24794,24916,24929,24953,25569,25679,25977,25984,26044,26067,26069,26932,27136,27169,27532,27550,27644,27673,27681,27794,27984,28104,28133,28171,28199,28262,28378,28469,28980,29162,29347,29455,29553,29568,29784,29818,29906,29997,30284,30846,30859,31445,33386,33401,33777,34200,34240,34323,34447,34621,34675,34830,34924,35031,35462,35690,35790,35925,35999,36086,36156,36399,36482,37349,37480,37531,37671,37696,37724,38274,38922,39723,40097,40291,40643,41331,41468,41843,41983,42220,43032,44282,48556,49391,49694,49737,49753,50010,50040,50065,50129,50161,50288,50483,50534,50939,51018,52009,52594,52691,52711,52714,53781,61360,61508,61814,65276,66037,66039,66181,66228,66352,66380,66407,66467,66802,66816,66897,67052,67237,68749,71572,71743,71746,72006,72101,72133,72226,72314,72464,72494,72609,72644,72721,72843,72992,73137,73158,73207,73277,73317,73364,73386,73424,73442,73487,73624,73697,73908,74049,74197,74261,74503,74510,74583,74586,74627,74753,74762,74799,74855,74866,75015,75973,76315],"added":[526,1877,2068,2277,2297,2332,2411,2754,2839,2959,3250,3304,3577,3611,3738,3793,3846,3875,4047,4774,4793,4832,4961,5161,5910,5921,6125,6819,7617,7995,8074,8302,8762,8989,9365,9550,9637,9983,10050,10103,10332,10599,11009,11110,11374,11431,11456,11501,12025,12358,12649,12765,12965,13075,13231,13266,13286,13303,13780,13811,14301,14529,14551,14564,14581,14740,14815,14894,15808,18050,18213,18237,18252,18452,18903,19014,19239,19471,20164,20235,20400,20535,20545,20634,21308,21441,21527,21621,21994,22007,22018,22187,22284,23018,23423,24513,24594,24780,25164,25939,26781,26910,27111,27162,27335,27491,27542,28058,28067,29237,29859,30042,30048,30164,30423,30579,31718,31775,31800,31821,32076,32139,32200,32235,32255,32590,32662,32709,32725,32889,32913,33135,33569,33893,34194,34292,34425,34523,34745,34892,34921,34955,35320,35899,36290,36328,36566,36675,37668,38374,39351,39556,39575,39637,39689,39827,40129,40179,40500,40618,41544,41628,42806,43333,43386,44442,45250,45300,45455,46295,47065,48237,48620,48670,49430,49468,49549,49655,49815,49837,50407,50517,50547,50577,50618,50645,50697,51094,51127,51151,51161,51173,51195,51229,51242,51255,51262,51527,51552,51597,51785,51804,51813,51839,51847,52034,52146,52451,52528,52884,53276,53695,53986,54239,54449,54557,54646,54789,54849,54886,55547,55633,56681,56831,57595,59534,61470,61493,61532,61625,65164,65979,66222,66865,66899,66914,66928,67035,67249,67535,67742,67765,68539,68650,69037,69290,69336,69366,69442,69519,70233,70255,70506,70592,70969,71027,71191,71210,71371,71395,71422,71514,71956,72296,72449,72535,72612,72893,73358,73414,73467,73838,74183,74230,75111,75237,75537,75765,75975],"getcolors":[325],"androidplayer":[1608],"package_name":[22987],"examplesecondpassname":[42654],"assetbundle":[2769,3242,3288,3305,3339,3350,3446,3465,3483,3510,3569,6139,15134,16617,19085,25928,27682,29365,29568,30922,33502,35384,35764,41864,48556,50028,68157,68275,70571,73022,73211,73310],"uxmlboolattributedescription":[58085],"prelink":[40611],"londontab":[57150],"isserver":[10809,11058,11089,66082],"shape's":[26931],"_maintex_st":[45158,51076],"\\temp":[74575],"modeling":[156,2063,4506,6216,6785,9134,13369,13627,14702,16345,18076,21464,22085,24639,25193,25601,26674,29122,29397,29721,29755,31162,32230,33526,35240,37549,48223,48335,50604,71765,74210,74895,74907],"videos":[257,1569,3998,7478,10763,12358,12648,14794,17077,22942,34292,35901,53254,53744,72466,72489,72641,72715,72724,74199],"5x5":[14392,37822],"unacceptable":[6024],"draweris":[54990],"krowheights":[52379],"listviewbutton":[63920],"gridlines":[23672],"profilerwindow":[35506],"evsm":[37824],"somethingelse":[45655],"paths":[3577,4223,6483,8068,9462,14905,17546,19597,19963,21032,21589,22882,27494,28671,28734,30875,34205,36591,36744,36788,36974,37222,37264,37390,38261,38286,41063,42359,45183,46063,46515,46717,48132,49802,55307,55632,57464,57588,58483,61186,62054,63771,68701,69666,70116,70241,70598,70768,72645,72752,74164],"crouches":[30047],"display":[501,1163,1488,1570,1840,2232,2407,2643,2721,3580,3910,3968,4033,4298,4478,4811,4875,5128,5811,6750,6754,7004,7284,7900,8012,8308,8873,9061,9258,9673,9843,9899,10212,10768,11079,11368,11414,11724,12097,12279,12402,12459,12884,13400,13925,14006,14573,14849,16438,16470,17895,17952,17966,18117,18267,18509,18745,19230,19443,19673,20009,20071,20095,20099,20538,20715,20811,20866,21033,21240,21302,21697,21956,21977,22040,22090,22226,22693,23718,23798,23882,24162,24467,24489,25047,25394,25434,25886,26035,26718,26846,27512,28326,28351,29680,29721,29826,30122,30539,30824,30912,31367,31386,31997,32243,32777,33194,33477,33659,34203,34259,34340,34466,34759,34790,34992,35258,35266,35369,35403,35481,35498,35612,35625,35822,35903,35969,36023,36120,36174,36207,36298,36435,36480,36845,37050,37294,37349,37531,37946,38242,39137,39308,39594,39717,39826,40042,41250,41315,41433,41529,41924,42031,43243,43571,44199,44328,45065,46106,47189,48511,48524,48683,48899,49404,49852,49957,50357,50372,50641,50939,51405,51874,51964,52240,52749,53192,53276,53701,53975,54377,54437,54590,54895,55973,56186,56562,57061,57180,57534,57592,58190,58362,58582,58673,58730,58998,59371,59906,60159,61306,61360,61524,62108,64150,64234,64489,64528,64731,64756,64795,64823,64973,64986,65194,65326,65370,65512,65755,65777,66335,66350,66383,66762,67666,67917,69384,69488,69670,70266,70373,70807,71126,71215,71293,71304,71369,71447,71523,71900,71915,71990,72240,72404,72493,72671,72773,72839,72916,72986,73248,73288,73300,73480,73985,74305,75133,75175,75204,75402,75406,75545,75901,75946,76065,76089,76161],"startcollectingmetrics":[4657],"reacts":[1035,8302,9386,13580,19979,25609,31840,40076,44447,54692,57868,61302,61488],"clientrpc":[10915],"bound":[2554,8439,20438,25980,27540,28874,30268,31387,31615,34155,34498,35127,35711,43209,45280,55303,55552,55610,56121,56208,56313,56592,56676,57003,58845,65049,66939,66951,67558,68611,70911,72933,74244,75090,75697],"com":[223,742,796,1438,2755,3114,3232,4026,4149,4278,5853,5987,6103,11412,11842,12154,14003,15910,15943,15958,15975,15990,15996,16013,16028,16034,16051,16060,16083,16091,16114,16128,16145,16159,16168,16191,16220,16235,16249,16264,16283,16338,16353,16372,16386,16400,16414,16431,16446,16461,16478,16495,16518,16535,16550,16572,16587,16593,16601,16609,16617,16625,16633,16641,16649,16657,16665,16673,16681,16689,16697,16705,16713,16721,16729,16737,16745,16753,16761,16769,16777,16785,16793,16801,16809,16817,16825,16833,16841,16858,16877,16891,16927,16941,16977,16992,17008,17023,17038,17045,17070,17085,17100,17108,17116,17124,17141,17160,17177,17193,17214,17228,17248,17262,17276,17290,17304,17320,17334,17350,17362,17370,17392,17406,17418,17430,17435,17450,17482,17496,17514,17532,17537,17554,17569,17584,17599,17614,17635,17650,17669,17686,17701,17716,17731,17742,17750,17767,17781,17788,17811,17826,17843,17858,17873,17888,17903,17920,18650,18748,18888,18903,18950,20338,22284,23502,23774,24594,26073,26781,27657,28224,28629,28773,28783,29689,30919,30989,31294,31371,31390,32326,32889,33062,33569,34372,35866,37746,40648,43333,44704,44873,49153,49640,49771,50179,50342,50654,52498,52599,52778,53108,53682,53891,54740,58138,61570,62008,66505,66603,66808,67027,67149,67477,67690,67977,68099,68251,68270,68294,68319,68361,68398,68451,68656,69376,69480,69518,69674,69889,70001,70076,70142,70214,70332,70386,70601,70786,70829,70875,70945,71323,71370,71447,72191,72392,72586,72795,72884,73673,74074,74228,74519,75334,76334],"mywr":[68321],"asktobuy":[67406],"resembles":[13149,22866,65916],"currentrenderpipeline":[49215],"star":[5129,41619,52992,53344],"cubearray":[8715,45081,45483],"#bdbdbd":[63286],"psos":[34212],"located":[234,3256,3306,3493,3598,5263,6070,7045,7752,9408,10585,10723,10763,11319,12094,12808,14001,14678,20343,20893,25135,26914,27600,34735,35798,36218,39544,40204,40441,41344,41559,48174,48559,49358,49714,49749,49778,52515,61187,65085,66002,66588,68160,68660,68894,69132,69376,69480,70027,70266,70686,71705,72476,73655,74496,74726,76296],"ior":[74300],"skinnedmeshrenderer":[6222,13454,15131,21465,28856,32448],"onpreprocessasset":[19469],"#fffff0":[63568],"pointofservice":[12671],"edge":[7964,8189,8380,8637,9023,9635,9878,10001,10656,11164,11487,12219,12431,12721,13798,14261,15031,15825,18995,22245,22798,24597,26985,27060,28362,29718,30142,32433,32611,34758,34787,34874,36699,37449,38250,38266,39382,39771,45618,46824,48516,48667,50224,50379,50612,51155,52169,52220,52767,58393,59838,62211,64104,65999,66333,66802,72532,73128,73297],"gamuts":[11807,34274,34484],"qos":[10992,66432],"switched":[2255,5945,15852,20571,29686,30164,36360,37714,37732,38405,40075,40091,43198,72722],"60fps":[14560,33407],"respects":[7187,22993,34237],"steaming":[23521],"stick":[9154,9785,18236,22419,24775,25763,37670],"slategrey":[63640],"reparent":[28953,28986,29060,34890,34955],"cursor":[725,8328,9584,10513,11677,12746,13882,14236,18993,19986,20104,30646,34790,35088,35384,35667,43256,48665,50511,50522,50527,50542,50629,50742,51327,51594,54712,57836,59592,60396,60810,62114,63964,64176,65231,65255,65357,73259,73377],"assetstore":[4026],"simplelogattenuation":[5249],"vastly":[5952,30890,45564],"h0":[69919],"d_color_picker":[63442],"bytes":[3293,3351,4702,5445,5589,6031,6120,6712,11012,13950,20343,21114,25966,26156,27853,28045,29180,33095,33394,33424,35371,35644,35934,36250,36391,36565,40717,40995,41179,41474,50419,52592,55551,66131,66654,68090,68351,73614,74153,74555,75532],"knuminstances":[5377,5521],"invsize":[8672],"umxl":[58077],"tempstate":[76253],"7300gt":[52474],"examplesubshadertagvalue":[45950],"m_material":[76535],"accelerometers":[25339],"special":[7,1127,1840,1997,2298,2348,4013,4043,4713,4980,5265,5660,5863,5917,6104,6496,6793,7156,7930,8624,8786,9279,9810,11303,11519,13818,13964,14009,14320,14726,14943,15025,17092,18138,18671,19033,20240,20576,20681,21131,22011,22675,23779,24467,25607,26079,26124,27322,27540,27815,28037,28560,28856,29724,29761,30895,31997,33777,34900,34928,35261,37052,37345,37639,39450,39551,40194,40429,41520,41917,42448,42455,43108,43224,44054,44178,44295,44376,44771,44850,45150,45214,45451,45629,45726,45852,46780,47415,47952,48163,48169,48894,49515,49650,50937,51405,51774,52046,52674,58044,58116,59736,62838,63098,63742,66384,66635,68086,68284,70315,70606,70821,71044,71157,71305,71811,71970,72273,72997,75570],"m_lastusedresolution":[76378],"propagate":[28995,29420,36762,37647,54611,57822,57958,60417,61387,65926],"refinement":[8578,72735],"disablemanageddebugger":[21074,28410],"diagram":[362,1975,1999,2379,4522,4852,6266,6292,6819,7146,7758,7849,13603,17987,17999,18230,21298,26110,29192,30048,33433,40180,43189,49358,49527,49643,51965,52252,57602,65734,66112,67596,70292,75389,75794],"s_iscapturing":[28026],"exploration":[22061],"#00ffff":[63510],"starts":[410,465,512,606,684,2616,3767,4876,5129,5450,5594,6990,7079,7494,7756,11126,11176,11563,12097,12274,13725,14849,14969,17980,18233,18313,19332,19344,19358,19372,19477,20116,20297,21111,21305,22322,23817,25509,26359,26887,27993,28405,31758,32153,32225,33734,34101,34988,35799,36540,37675,39235,39794,40748,41165,42209,47194,48375,49725,49852,51616,52154,52526,52575,53456,54296,57818,58557,60649,62013,62339,62496,62595,62849,65132,66229,66342,67090,67591,70091,70122,70150,70517,70921,72372,73022,73055,73382,73964,74742,74764,75440,75880],"perlin":[32232,50374],"startuptype":[70152,70520],"pointermoved":[74733],"hoist":[33252],"1st":[7438,7455,28307,28317,53497],"configure":[47,138,492,544,584,621,839,878,900,978,1032,1091,1102,1180,1192,1353,1572,1645,1787,2945,3014,5095,5350,5658,6364,6461,6483,6774,7198,7826,8232,8503,8648,8765,9003,9102,9168,9196,9298,9435,9673,9688,9728,9843,9938,9993,10212,10515,10698,11172,11212,11228,11323,11375,11567,11907,12135,12274,12395,13167,13556,13653,13674,13862,13903,14094,14338,14573,14923,14984,15884,16470,17986,18038,18080,18629,18720,18819,19104,19366,19378,19639,20123,21026,21572,22090,22701,23464,23475,23542,24601,24621,24707,24930,24979,25816,25980,26066,26122,26255,26548,26561,26674,26799,26979,27066,27734,28071,28148,28265,28380,28465,29707,30203,30237,30274,31605,32292,32346,32648,32916,33072,33178,33585,33637,33753,33889,34535,34675,34861,34923,35013,35197,35801,36282,36430,36558,36597,37418,37596,37610,37826,38269,38459,38476,38490,38520,38956,39166,39230,40001,40151,41808,41854,41876,42133,42942,42984,43017,43120,43126,43145,43320,43556,44220,44344,45858,48120,48680,49030,49172,49282,50001,50227,50495,50520,50595,50660,51010,51613,52689,52879,52949,53193,53417,53805,56102,58155,59123,59534,59698,59904,61301,66091,66223,66592,66931,66948,67010,67110,67345,67573,67649,67748,67828,67852,67912,68479,68800,69037,69290,69785,69813,69861,69884,69987,70060,70127,70182,70630,70967,71988,72143,72181,72409,72609,72813,72906,73025,73153,73239,73312,73374,73459,73616,73707,74153,74510,74529,74590,74620,74757,74944,74981,75044,75126,75233,75340,75872,75969],"editor\\data\\playbackengines\\windowsstandalonesupport\\source\\windowsplayer":[74659],"simplified":[1988,2324,7849,10230,10393,13361,18158,21592,27063,30365,42377,42766,43115,45845,49046,50387,64118,65734,66043],"ctrl":[9052,9809,12747,18462,19000,20551,20723,21688,34222,34827,35782,36719,39078,39136,39183,41420,41601,43221,48669,51304,54422,59745,60388,60790,71349,73294],"annotationmanager":[15258],"coroutine’s":[18314],"postiontestruntime":[61290],"hostconfig":[66158],"appealing":[12520],"epc12":[38767],"gate":[8039,21485,33529,67506],"oncollisionenter2d":[15851,35271],"dies":[32864],"unmarked":[66465],"histogram":[38090],"clone_myproject":[70410],"corp":[40365],"“view”":[10012],"heuristics":[48123,75440],"beneath":[18312,32754,33495,39519],"asyncreadmanager":[2896,4651,27726,35371],"clipspacerange01":[44953],"©":[18732],"initialized3dwindow":[74737],"preformatted":[68385],"chess":[66183],"scenetemplatepipelineadapter":[38989],"bouncing":[1996,2439,11504,23091,27330,31719],"toggle_bg_focus":[63494],"confirming":[39397,70156],"textureid1":[41028],"temp":[2926,5467,5612,13070,25155,26126,26450,26503,29304,41374,61100,61219,66697,73405],"assign":[268,1589,1770,2083,2247,2776,3316,3455,3514,3861,3908,6183,6344,7144,7364,7815,7866,7970,8066,8174,8258,8271,8389,8426,8774,8788,9039,9095,9159,9199,9286,9351,9434,9589,9711,9827,9849,9898,9909,10031,10703,10722,11178,11291,11314,11473,12043,12311,12733,12866,13193,13549,13771,13799,13902,14509,14842,18090,18240,18322,19065,20622,20659,21219,21410,22040,22239,22970,23932,24102,24576,24721,24894,25173,25244,25389,25415,25503,26601,26655,26829,27318,27324,28494,28609,28834,28852,28872,28897,29034,29559,30394,30478,30503,31645,31869,32104,32259,32477,32754,33437,33448,34245,34328,34452,35409,35481,37580,37738,38459,38718,39050,39523,39879,40232,40884,41765,42778,43223,43526,43594,44198,44320,44590,44766,44784,45060,45398,45517,45939,45959,48685,49023,49224,49468,49490,49613,49629,50152,50288,50934,50982,51064,51117,51584,52184,52390,53023,54475,54671,54740,55154,55850,57726,58825,59165,59451,59670,59894,60652,60906,61006,61572,61910,61941,62049,62766,63863,63943,64337,64550,65891,66198,66233,66390,69395,69499,70051,70818,71565,71867,72280,72528,74458],"flagsthat":[27984],"project\\library\\atlascache":[48700],"ragdoll":[8225,8496,15864,22454,25596,26561,33758,37608,37615,74892],"jni":[1402,16599,30920],"probed":[27484],"bisque":[63514],"syntax":[12804,16510,34657,40306,41348,41520,43572,43661,43691,43749,43807,43976,44103,44141,44172,44218,44330,44351,44429,44633,44687,44775,44810,44895,45066,45175,45206,45268,45405,45470,45612,45862,45947,45994,46815,47415,47958,47991,48029,53041,53280,54648,54801,58415,61181,61381,61447,62196,62844,63065,63708,63718,63842,63859,63877,63892,63913,63939,63990,64012,64042,64373,69726,69862,70597,70806,70869,71255,71751,73501],"color32":[6079,32801,60710],"kmaxsamplerate":[4894],"reflectiontypeloadexception":[67698],"0b4":[28618,28678,28724,70839],"offensive":[4129],"lodfading":[46081],"swahili":[53649],"droppedframe":[76008],"drawwirecube":[22199],"39px":[54612],"colour":[1872,2325,5152,7163,13143,22227,22651,27514,32869,37685,39825,41776,49449,49465,49470,49473,49509,49533,49570,49610,49627,50062,65984,75624],"#483d8b":[63543],"arrived":[68208],"personnel":[30385],"getcontrolid":[20951],"1980's":[52094],"constantly":[38494,38621,43534,52532],"callassetdatabaseapisbetweenstartstopassetediting":[3704],"gameplay":[1,72,1989,2180,4799,5158,5882,6767,6783,7156,9397,10085,10938,11300,12865,13267,14562,14699,15015,15816,15831,17759,18169,18307,18357,18412,18506,21154,21308,21633,22022,22522,26049,26787,27083,28868,31721,33099,34188,34928,37322,37354,37480,37563,38054,39397,40526,40643,48192,49642,50339,51245,52044,57682,66235,66336,66364,68003,68048,71634,75660],"jslib":[6705,34553,73501],"coded":[6007,6154,6679,6901,9261,23559,27983,37971,41799,42028,42136,42956,43037,50699,58823,67642],"16f1":[529,33896],"112b":[29188],"nscamerausagedescription":[25679],"ui's":[35070],"yespcf":[37822],"9b0d":[67470],"assignable":[25503,72258],"decimal":[9268,10826,21676,29338,39616,53733,58342,58454,65937],"de1eef03efd25a722d1500658bf19038":[66684],"menu__item":[64340],"a+xr":[28234],"m_localposition":[21669,48154,76461],"retro":[37319],"libunity":[1019,1712],"frigate":[3739],"organics":[21550],"inserts":[6136,10237,11631,33639,47156,49706,51915,61455,72240,72731],"incredible":[17642],"microsite":[8015,13123,24599,68529],"4b75":[53891],"directx11":[38283,44908,71746],"utility":[423,2556,3229,4882,5474,5619,8598,8903,11291,17110,22906,27777,31273,33524,37003,40683,40863,41290,43234,43870,47370,48676,48984,49148,52065,52291,61069,66692,72997,75187,75501],"model":[147,396,749,1930,1957,1971,1987,2190,2990,3474,3739,3791,4206,4327,4506,4520,5266,5904,5938,6222,6996,7001,7827,7941,8404,9133,9682,9759,10200,10368,10489,10584,11520,11629,12357,13453,13626,14031,14321,14943,16470,17000,17939,18051,18398,18441,19229,20246,21384,21444,21565,22063,22375,23302,24636,25140,25186,25267,25598,25696,26956,27038,27072,27322,27576,27754,27757,29343,29397,29528,29721,29741,29747,29775,30302,31161,31630,31886,33022,33583,34225,34291,34343,34469,34944,35248,36636,36689,36713,37550,38013,38320,38349,38430,38440,38652,39574,40128,40702,42449,42810,43946,44282,44427,44562,44903,45002,45201,45302,45447,45726,46143,46505,46534,46761,46826,47073,47292,48229,48239,48263,48336,49481,49497,49511,49515,49562,49630,50324,50601,51991,52242,53409,53773,56097,58756,64043,65698,65905,66811,66836,66871,66890,67587,69307,69413,71754,71759,71926,72110,72980,73244,74168,74343,75332,75786],"decimals":[61463],"m21":[5399,5543,20370],"executable":[1736,3340,19072,19151,24967,25444,25928,27671,28100,28226,30019,30877,33456,36234,48091,52737,66700,70359,70592,70954,71247,72866,74535,74609,74653,74776,74828,74941],"mynavigationhandler":[60523],"mydependentjob":[26392],"extensively":[18506,30884,53691],"mention":[4274,29907,53324],"#98fb98":[63616],"samplescene":[57206,58614,59390,59782,60742,61896],"onselect":[49899],"boo":[6712,69000,69251],"primarily":[100,1332,1404,13854,20419,26251,30061,33491,47245,54672,71871,72917],"nativelist":[26117],"shouldn’t":[714,18233,25861,28450,28480,30897,31635,40573,68916,69157,72522],"organic":[16005,26985,29719,37390,37499,50522],"cz":[47647],"descriptors":[35484,75978],"bounding":[10109,10332,10503,11323,11468,11564,13136,13456,18229,18568,23036,25887,27263,27323,29727,33498,39135,71876,75734],"together":[142,248,329,1230,1995,2068,2213,2274,2329,2374,2399,3468,3590,4033,4883,5041,5330,5820,6046,6323,7146,7579,8085,8149,8252,8373,8897,9154,9184,9384,9682,9753,10001,10088,10358,10651,11134,11660,13180,13579,13585,13648,13670,14498,14538,14581,14933,14938,17835,17925,19667,20072,20379,20424,21069,21180,21881,21980,22002,22024,22183,22189,22303,23288,23852,24169,24297,24526,24781,24930,25896,26304,26514,26564,26586,26848,27003,27081,27088,27490,27579,28265,28864,29385,29566,30217,30324,30478,31592,31761,31992,32219,32412,32874,33153,33512,33550,34166,34205,34498,34927,35252,36080,36242,36442,36597,36679,36710,37291,37455,37619,38449,39575,40129,40616,41161,41871,42667,42792,42810,43811,44516,44839,45206,45273,45735,47609,48676,48902,49560,49594,49642,49687,49771,50002,50057,50693,51202,51236,52032,52224,52944,54724,58119,58484,58729,60642,62015,62412,63974,64274,64342,64758,65063,65668,65747,65941,66374,66439,67092,67654,68601,69814,71352,72145,72296,73016,73352,74590,75107],"lit":[8056,9465,9965,10097,10108,10651,13913,18773,22136,27187,27225,27273,27322,37838,38300,38384,38419,38431,41959,42258,42305,42360,42397,42453,42525,42590,42853,42928,43177,43902,44481,45191,45628,46063,46484,46718,47124,47668,48295,49325,49421,49484,49524,50144,50367,52488,54128,72752,74207],"onto":[1987,2079,2227,4306,6121,7816,8096,9270,9375,10760,11505,11649,12833,13155,13212,13904,14252,14471,14696,20632,20659,22292,23696,24543,24721,25234,25517,26381,27329,29072,29633,29765,32114,34870,35202,36678,37407,37653,39686,39926,39974,40628,42547,43205,43256,47190,48583,48622,49426,49497,49520,50322,50437,50519,50561,50579,50629,50897,50929,51088,51146,51303,51344,51427,51529,51602,51621,51710,51760,51788,51825,51844,51851,51910,52153,52487,54448,54666,57492,57566,58462,58825,60674,60879,60979,67101,68498,68533,70497,70613,71691,71867,75208],"m_iscapturing":[55685],"otf":[6714,9247,58370],"700mb":[50006],"objectpool":[33103],"hang":[13881,53769],"compact":[2434,6116,10130,28477,34157,37144],"_colorback":[45789],"wireframes":[22234,35074,39127,72749],"collab":[16176,31073,31480,66767],"enabledhandler":[2497],"ui_elements":[48687],"os":[222,701,744,798,1789,1820,8407,9121,9262,10770,12474,13997,14013,19630,20759,22615,24987,25451,25960,27528,27648,28457,30287,34260,34341,34467,34596,36223,50197,52584,58117,58300,58373,60764,66536,66568,73689,75218],"xn6ya31gm1i":[27211],"startunity":[33474],"referencesartifactgenerator":[15334],"loaddotsinstanceddata_worldtransformparams":[20287],"input_field":[61883,63312,64258],"colorunlit":[45549],"addressincluding":[53718],"halfasview":[45587,46799],"shutdown":[28457,29962,31643,66729,75725],"extendable":[18908],"#34":[16043,16060,17030],"billboarding":[14778,50579],"mess":[5049],"codec":[4782,14817,72633,72711,72728,73133],"guilayout":[9603,9663,20893,23814,24275,24459,49883,49982,59560,64780],"explanatory":[74901],"checkforcontrollers":[25703],"eliminated":[6192],"unregistering":[20169,76035],"gl_multitexcoord0":[44366],"ragdolls":[2174,11607,13461,74895],"broadly":[33775,66185],"screen":[67,652,684,714,719,1027,1199,1223,1571,1704,3003,3440,3459,4179,5123,5724,5815,5949,6150,6737,6754,6834,6896,7878,8012,8107,9059,9211,9477,9781,10337,10561,10762,11164,11468,11682,11716,12051,12274,12337,12472,12883,13206,13482,16075,16564,16703,18501,19074,19306,19667,19976,20050,20058,20457,20707,20878,21856,22043,22225,22644,23394,23645,23816,24004,24169,24299,24467,24768,24789,24912,25696,25866,26790,28455,28771,29585,29697,29720,29832,29863,30320,30933,32182,32299,33473,33721,34218,34251,34333,34458,34781,34839,35175,35258,35718,35926,36068,36371,36548,37428,37479,37559,37627,37820,38239,38257,38335,38374,39406,42010,42212,42364,42684,43115,43131,43154,43376,43591,43833,43896,44062,44377,44583,44838,45293,45503,45568,45724,45858,46249,46809,46877,47082,47306,48323,49038,49484,50006,50060,50175,50455,51961,52451,52601,52721,52741,52749,53696,53756,53805,53998,54131,54304,54765,55642,57030,57798,58146,58396,59271,59719,59842,60390,60793,61527,62796,63768,66000,66251,66333,66828,66862,66909,67928,68815,69047,71563,72499,72824,72921,72996,73091,73189,73248,73259,73377,73480,74038,74267,75416],"sockets":[73667,73901],"multi_compile_fwdbasealpha":[44578],"offers":[1862,2045,2434,2708,4545,6043,6817,6934,7486,8988,9426,11434,11635,13028,14348,16527,17627,17865,17986,18562,19047,22375,24466,26798,27544,29338,29583,29908,31863,32137,32712,36753,37236,37740,38886,39591,39714,40064,49397,57641,58794,62805,65081,66421,67069,67708,67844,68954,69200,71282,72635,72728,73320,74776,75805],"stationary":[29598,32723,76082],"oldest":[32183,32270,35126],"pngs":[68130],"generating":[933,1248,1737,2133,4628,9102,9970,11459,12685,13017,13385,16364,16378,16392,18986,21514,22854,23583,26955,27042,27084,27118,27171,30273,33098,35171,36590,36689,40540,45426,48261,48364,48658,48676,49565,50499,51140,52112,71053,71812,72844,75793],"myproject":[15726,21069,25137,28218,70410],"loudness":[4867,5002,5160],"imagefile":[61576],"run":[237,422,448,548,603,629,643,676,693,754,841,890,1087,1225,1510,1666,1765,1895,1912,1924,1957,1967,2067,2191,2720,2989,3569,3767,4539,4751,5201,5765,5885,5990,6063,6150,6264,6285,6318,6325,6349,6396,6464,6936,7927,8401,9062,9893,9998,10572,10719,10863,11044,11163,11176,11614,11845,12065,12328,12473,13193,13247,13309,13417,13451,13940,14346,14560,14831,15714,15814,15967,17092,17282,17931,17980,17998,18129,18257,18380,18481,18885,19028,19049,19127,19161,19285,19494,19620,19636,19655,20130,21026,21364,21514,21862,22032,22460,23584,23615,24618,24923,24933,24985,25446,25495,25734,25747,25849,25904,26035,26263,26285,26374,26478,26495,26597,27090,27172,27648,27671,28020,28153,28233,28295,28402,28681,28718,29106,29121,29277,29444,29568,29834,29946,30096,30310,30326,30853,30916,31634,31649,31867,32112,32478,33074,33388,33409,33450,33479,34203,34254,34335,34461,34594,34640,34988,35462,35495,35622,35753,35809,35957,35994,36205,36338,36489,36599,36678,37009,37271,37397,37679,37709,38500,38660,38820,38841,38984,39032,39102,39368,40263,40515,40625,40654,41029,41417,41459,41490,41912,43414,43534,43978,44315,44757,44897,45181,45579,45943,46484,48068,48177,48535,48546,48590,49540,49771,50159,50356,51772,51780,51794,51964,52528,52573,53696,57926,58186,58393,59836,66082,66099,66203,66227,66332,66365,66536,66564,66850,66897,66910,66922,67048,67073,67527,67708,67858,68064,68157,68902,69140,69861,69956,70045,70123,70149,70363,70914,71050,71417,71497,71614,71757,71813,72002,72052,72188,72247,72283,72609,72616,72755,72917,73159,73209,73300,73395,73465,73562,73592,73600,73701,73914,74045,74215,74234,74583,74592,74624,74724,74761,74814,74850,74963,75033,75187,75190,75290,75375,75397,75445,75980],"_cameragbuffertexture3":[38372],"m_isactive":[21658,76434],"‘invisible’":[38622],"laid":[8083,8104,8614,9219,24392,27023,36469,48372,50726,73472],"a2b10g10r10_unormpack32":[8455],"original_transaction_id":[67466],"notify":[208,4070,22999,67945,70687,76194],"emote":[5065],"14f1":[974],"extend":[506,783,1018,1396,1854,2238,3721,3817,5013,6483,6843,6873,10938,12310,14542,14959,20003,20098,20766,20862,20917,21193,21381,22189,22245,23625,24167,24465,26717,27938,30430,31718,33582,34651,39378,47376,48940,48984,49791,50709,50993,52226,52238,56881,57890,58286,58997,63961,65766,66820,66877,67581,68050,70962,71351,71874,74212],"objectfrombundle":[3395],"methods":[582,792,1273,1325,1356,1404,1510,1820,2041,2282,3403,3687,3723,3982,4318,4660,5085,5258,5901,5924,5998,6062,6126,6344,6373,8054,8982,9330,11315,12098,12985,13019,16651,17062,18034,18220,18481,18593,18922,19559,19657,20154,20231,20378,20538,21391,21467,21883,22868,23403,24475,24728,24923,24996,25849,26019,26077,26115,26247,26293,26507,26684,26698,26725,27917,28497,28670,28714,28752,28761,28868,29333,29560,29853,30328,30436,30894,31632,31649,32852,33263,33472,33807,34100,34161,34178,34698,35704,35847,36048,36496,36847,37136,38473,38639,39131,39170,39961,40536,40559,40766,43414,45103,48377,48690,48863,49522,50651,50967,51009,51224,51579,51601,51753,51812,51820,52245,52496,52610,53691,54763,54839,55579,56116,56725,56881,57637,57962,58136,58516,58631,59047,59589,60212,60642,60680,61327,61610,62307,62590,63133,63831,65208,66228,66464,66825,67280,67398,67721,68580,68829,68956,69074,69767,69807,70165,71231,71482,71742,72022,73322,73365,73499,73675,73751,74036,74214,74634,74964,75431,75516,75934,76068],"edits":[3690,4814,5028,5127,20619,23912,34925,34953,52236,66517,67972],"toggle_bg":[63493],"onmouseenter":[60457],"standardshadermaterialparameterocclusionmap":[41770],"disregards":[70692],"variadic":[40835,41200],"leaks":[28456,33087,33420,33457,35139,36199],"steam":[31798,31856,42792,72887],"brdf":[14259],"iaudioeffectplugingui":[4970],"restoring":[18901,30445,39918,53240,67133,67350,67623],"menu":[8,17,134,229,260,445,687,717,1127,1615,1742,1968,2037,2214,2220,2244,2256,2332,2362,2537,2771,2971,3232,3537,3725,3774,3871,3880,3898,3950,3987,4033,4054,4408,4416,4423,4456,4472,4737,4808,5053,5190,5271,6228,6265,6346,6393,7567,7574,7624,7657,7765,7813,7827,7935,8074,8104,8146,8364,8379,8628,8868,9055,9426,9430,9537,9765,9847,9913,9996,10054,10209,10340,10421,10522,10659,10721,11176,11357,11403,11505,11547,11596,11667,11755,12274,12316,12437,12768,12865,13353,13596,13720,13744,13802,13815,13843,13901,14471,14554,14571,14664,14727,15022,16564,17788,18080,18116,18325,18362,18462,18540,18971,19060,19443,19627,20061,20104,20459,20545,20624,20643,20755,20878,21005,21250,21388,21850,21998,22018,22035,22095,22111,22128,22221,22974,23280,23447,23613,23692,23787,24100,24535,24737,24780,24953,25048,25105,25221,25359,25401,25487,25516,25633,25679,25938,25979,26614,26804,26812,26940,26952,27015,27098,27205,27253,27286,27491,27553,27663,27752,27767,28094,28132,28326,28667,28703,28742,28767,28851,28878,29351,29818,29851,29897,30043,30049,30190,30228,30284,30411,30603,30826,31013,31593,32167,32414,32847,33401,33544,33846,34799,34911,34962,35220,35363,35367,35623,35696,35797,35960,36048,36334,36470,36694,37463,37526,37641,37667,37704,37731,38377,38717,38877,38958,39074,39127,39177,39228,39253,39366,39398,39494,39637,39671,39792,40231,40505,40662,40762,40769,40778,40797,40821,41298,41321,41350,41406,41417,41439,41454,41483,41491,41535,41579,41596,41678,41700,41711,41757,42775,42937,43128,43210,43464,43518,47179,48055,48366,48510,48526,48562,48597,48611,48618,48643,48680,48852,48874,48938,49383,49410,49461,49714,49753,50061,50349,50372,50510,50527,50536,50557,50610,50620,50939,51123,51129,51158,51179,51206,51262,51345,51612,51696,51851,51886,52086,52339,52516,52554,52682,52754,53230,53865,54212,54404,54551,54638,54709,54758,54956,55152,55186,55309,55860,55894,55972,56516,56547,56808,57118,57120,57291,57528,57798,57990,58793,59013,59379,60023,60221,60427,60740,61249,62001,62349,62578,62651,62827,64261,64339,65444,65458,65844,66018,66251,66338,66350,66382,66539,66594,66952,66986,67101,67214,67639,67764,67920,68045,68067,68545,68656,68713,68835,68960,69080,69352,69456,69780,69825,70102,70263,70306,70342,70406,70872,70973,71116,71178,71186,71203,71225,71252,71262,71289,71328,71354,71383,71403,71427,71460,71473,71487,71502,71517,71608,71704,71797,71805,71859,71897,71909,71992,72364,72423,72515,72742,72834,72871,72895,73156,73317,73392,73910,74057,74182,74316,74618,74811,74900,74985,75081,75111,75140,75196,75224,75617,76108],"unselectedcontentclassname":[57219],"alias":[1145,1166,11990,20052,26118,40866,41249],"subdirectory":[474,1001,18949,28509,28677,69849,70068,70135,70277,71407],"tetrahedra":[10088,26846],"onpointerover":[62712],"heapu32":[73556],"stackoverflow":[6107],"stacktrace":[933,12397,16564,19200,73199,73303,73414],"said":[7217,45229],"setshaderchunkcountforplatform":[42224],"uncontrollable":[6054],"developer":[394,647,711,839,966,1096,1243,1489,2764,2954,3346,3463,5919,11050,11122,11152,11718,12097,12602,16060,18716,18752,19638,23134,24051,25750,25828,25898,26073,27468,28110,28140,28185,28281,30467,30500,30516,31365,33879,34237,35870,38252,41697,41974,50200,52103,52590,52718,52778,53100,53383,53861,54054,62330,63702,66586,66820,66964,67025,67121,67234,67523,67553,67765,69719,70292,70316,70755,71109,72179,72224,72675,72885,72912,73019,74816,75034,75255,75280,75314,75440,75501],"systemmemorysize":[19717],"onfocusouttextfield":[58251],"decode_eyedepth":[44024],"scalar":[11628,44231,68498,72326],"menuaction":[55983],"rightdownleftdown":[27417],"pix":[19046,27938,44304,74612,74656],"pats":[70044],"discover":[3483,5820,6094,12654,18907,22002,28433,31013,36081,36684,66193,66635,69032,69285,70761,74136],"inverselerp":[10469],"eye":[69,1672,2259,5138,6758,8065,12677,14863,20105,22740,24490,27506,36683,37478,37910,43186,43358,43456,44023,51268,52227,64470,72521,74292,75205,75417,75624,76138],"writable":[2199,3298],"devicedefinition_addusageatindex":[75534],"discovery’s":[11044],"m_subsetindices":[76517],"'live'":[53468],"m02":[5400,5544,20371],"differential":[3452],"iplayable":[34158],"certified":[66794],"slotscontainer":[56938],"kunityxrinputfeatureusagesecondarybutton":[75656],"googleplayreceipt":[67802],"objspacelightdir":[43894],"graphvisualizerclient":[33906],"renders":[177,343,890,4579,5352,5676,5730,5815,6486,6764,7878,8072,8122,8142,8706,10206,10358,10605,10612,11346,11733,12138,12343,12472,12830,12895,13130,13451,13538,13585,13743,13784,13940,14120,14539,14567,14865,17925,17963,18267,20076,20239,20379,21711,21852,22046,22778,23288,23377,23635,24492,25599,25734,26665,26800,27214,29385,29863,30331,30350,31661,31690,32249,33547,33642,34270,34351,34478,34682,35262,35942,36152,36360,36524,37348,37554,37653,38130,38292,38336,38370,38382,38433,39236,41917,42044,42162,42394,42797,43130,43416,43457,43484,43553,44017,44386,44811,44838,45194,45588,45620,46009,48542,48636,48641,49847,50003,50019,50305,50361,50686,50703,51069,51197,56727,61300,61522,64774,66879,72500,72916,72995,73240,74742,75410],"fault":[52556],"shadow_attenuation":[47811],"indeterminate":[5284],"serverip":[10988],"aliases":[1773,25492,26222,75687],"expressions":[6023,6323,7412,20677,40305,40819,40835,41159,41307,41345,41610,44269,73448,73972],"mockhmd":[43468,76082],"forms":[7968,9032,11518,12664,23162,29437,32411,33299,39385,45615,51174,68280],"tall":[98,33533,40056,50592],"binder":[40145],"uninitialized":[5446,5590,52549],"ispasscompiled":[4635],"impulses":[5000,36340],"sit":[5042,58289,65174],"passoperationfront":[45863],"timer":[21323,40604],"decodelightmap":[43883,46524],"headsets":[68807,72954,75208,75303],"gl_nv_conservative_raster":[44142],"#8a2be2":[63518],"mergetool":[48082],"getdesireddivisor":[33281],"appxcontentgroupmap":[12598],"''+''":[48620],"gets":[253,3565,3795,4970,7444,7461,7789,8213,10738,13075,13667,14969,18063,18567,20891,22073,23779,24030,25284,26438,27523,27575,28058,28265,29328,30072,30148,32775,33215,36638,37012,37237,39159,40689,40877,42255,42817,43194,46780,47674,57797,62609,63697,63830,65051,68807,72285,72313,72968,73398,74259,74590,76296],"master":[1962,3237,4793,4814,5057,13704,18509,24922,28827,29997,37841,48358,72275,72876,73172,74207,74786,74846,74852],"targetmaterialrenderer":[72568],"staticeventexample":[20157],"iunitymemorymanager":[27825,27913],"oscillations":[7594,7603,7611,7634,7643,7653,8510],"rpath":[34671],"onbackpressed":[806],"collecteditorstats":[35692],"uiapplicationdelegate":[66848],"inlining":[6198,24923,25849],"you’re":[1516,3246,3307,3396,3462,3566,3767,4559,6414,6837,11250,12275,18898,19271,25583,25741,25835,26689,28608,28670,28714,28761,33104,35957,36338,36512,37413,38858,43296,44839,50544,51009,53007,66190,66228,68704,71283,71751,72090,72189,73670,74744,74760,74850],"offscreen":[7158,11739,13465,24794,29148,32178,37987,70380],"forward+":[37797,74270],"callbacklayers":[7976,8180,8277,8395,8780,9045,12739,14515],"mcprc":[53442],"examplelightmodetagvalue":[42630],"subprojects":[1230],"oss":[70835],"m_identlevel":[37028],"unityinstance":[73210,73563,74012],"uiview":[52642,66848],"opengles3":[11804,37940,73465],"scrolloffset":[59691],"#ffff00aa":[62025],"admin":[4161,66713,73772],"analyzed":[6169,7491,26077],"safari":[12431,19348,19361,50224,73127,73296,73486,73741],"“networklobbymanager”":[66089],"extensible":[16406,18531,54179,65687],"ux":[74244],"lowpass":[5052,7573,7631,7640,7651],"hololens":[2983,12690,23148,23550,37780,43473,50206,68760,72216,72954,74399,74828,74883,75302,75465],"tightly":[6811,13696,18977,22906,39168,43895,48516,48649,48676,49623],"example_on":[44566],"castshadows":[41342],"fulfillment":[67074,73211],"less":[298,499,1378,1767,1904,1967,3466,4207,4450,6055,6074,6295,6432,7031,7173,7505,7797,8195,8256,8305,8436,8514,9157,9171,9466,9878,9964,10070,10651,11177,11298,11546,11604,11725,12599,12885,13042,13175,13255,13679,13837,13864,14220,14685,14770,14823,14988,18105,18233,18504,18616,18749,18948,19197,19307,20222,20242,20418,20452,22093,22395,24979,26094,26355,26572,26587,26664,27083,27119,27931,28482,29131,29245,29338,30331,30680,31701,32233,32701,32776,33429,33457,33866,34935,35129,35295,35727,36172,36621,36691,37662,37678,37700,38394,38515,39160,39836,41011,41387,41815,41894,42467,42704,42725,42747,42772,42817,42896,43115,43131,43582,43949,44292,44936,45578,45886,47126,47992,48601,49509,49609,50005,50498,50669,50686,50703,50941,51990,52257,52584,58381,61448,62025,62216,64201,65687,66706,68246,69785,69845,71634,72335,72368,72531,72715,73088,73332,73393],"natively":[3256,3347,3567,4506,5977,6718,14794,18358,19095,25307,25843,35917,37537,40452,50197,72662,72729,73319,73622],"transportsend":[11014],"instanced”":[68775],"weren't":[35933],"thistle":[63646],"manipulations":[3005,41161],"diminish":[6758,26925,31838],"multioutputsample":[34019],"roles":[21182,30394,30443,30479,54114,64233,67039,67894,76158],"focused":[2261,9629,11176,20075,22045,25349,25404,39819,48223,49611,52402,54450,56712,58131,60515,61489,62831,63275,71915,74229],"\\appdata\\locallow\\companyname\\productname":[74584],"approaching":[9172,13680,13865,14989],"onserverready":[66274],"appends":[13339,73190,74522],"inbetween":[7122],"visualwheel":[74478],"builder's":[54421,54662,54699],"photo":[12644],"gi":[567,5330,6373,6433,6477,9992,12885,21054,22111,22123,22144,22787,23415,26909,27102,27157,27170,27329,27752,28171,29311,29495,34973,36570,36684,37639,37850,46514,46642,49720,69352,69456,72759,73440,74634,74793,75170],"tex2dbias":[50699],"getlistofrandomnumbers":[33271],"specification":[1926,2839,22488,50241,64118,68492,70910,72735,73447,76136],"rsa":[23193,53377,66780],"headset":[12515,23156,68807,72956,75107,75204,75377,75485,75901,76124],"asyncuploadmanager":[27726,35765],"frame":[49,1029,1468,1761,1886,1894,2022,2052,2133,2192,2275,2300,2327,2443,4980,5260,5774,5961,5986,6068,6126,6765,6829,6945,7015,7670,7920,8080,8846,8992,9418,9518,9793,10713,10720,11604,11725,12221,12355,12888,13115,13130,13249,13475,14474,14558,14728,14795,14846,16453,16919,18129,18254,18373,18580,18980,19066,19285,19653,20135,20239,20438,20559,21113,21154,21294,21314,21501,21683,21693,21836,21867,21956,22058,22075,22508,23378,23539,23779,23900,24467,25615,25861,25994,26040,26296,26409,26450,27303,27315,27699,27937,29131,29176,29439,29586,30265,30325,30359,31703,31836,31852,32054,32182,32299,32681,32771,32934,33091,33391,33400,33480,33513,33532,34196,34217,34286,34498,34720,34861,34994,35266,35379,35424,35521,35622,35687,35911,35930,35972,36031,36133,36164,36201,36303,36359,36464,36717,37397,37708,37798,38244,38272,38330,38402,38501,38566,38596,38655,38726,38828,39305,39671,39729,42800,43484,43729,44062,44134,44376,44591,44808,45851,48227,48652,48924,48976,49217,49380,49765,50005,50058,50141,50150,50397,50455,50579,50661,51782,51954,52601,54281,54885,55550,57489,59347,59556,60646,62193,62839,66006,68130,68725,68862,69095,72255,72505,72915,72942,72986,73433,73631,73704,74189,74298,74564,74682,74917,75186,75221,75407,75543,75750,76023,76194],"product_version":[73930,74116],"guilayoutoption":[24454],"trip":[6785,6950,16345,74907],"impulse":[4785,4998,8356,11639,31132,33729,52097,69300,69406,75614,76319],"zulu":[53655],"yessingle":[37792],"#115":[66770],"assemblyinfo":[40362],"slowed":[7154,52044],"manual":[12,217,569,867,955,964,1023,1723,1751,1804,2039,2217,2755,2757,3232,3346,5966,6213,6361,6798,7489,7879,8233,8385,9328,9555,9622,9689,10709,11598,11687,12028,13156,14542,14776,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16151,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17263,17321,17379,17542,17556,17571,17586,17601,17619,17627,17654,17672,17688,17703,17718,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,18501,18903,19124,19618,20532,22019,22284,23774,24594,24745,25103,25688,25717,25973,26100,26690,26700,26781,26989,28255,28751,28773,28780,29681,30280,30997,31294,31488,31659,32326,32657,32889,33079,33569,34635,35714,36627,36689,37597,37733,39530,40675,42425,42818,43003,43333,45598,47377,48261,48677,49640,50156,50227,50342,50652,50937,51182,51362,52595,54264,62796,65971,66450,66798,67976,68614,68722,70098,70302,71377,71541,72783,73144,73410,74182,75239,76094],"“qwerty”":[69333,69439],"layermaskfieldsnippet":[64869],"kmemnativeplugin":[27898],"effector":[7197,7963,7997,8167,8267,8377,8769,9030,11652,12697,12726,13828,14505,15818,21144,37457],"minified":[73385],"complete":[251,813,1366,2586,2722,2922,3403,3668,3681,3837,4161,4182,4243,4245,4634,4665,5080,5285,5348,5688,5872,7494,10010,10693,12889,15719,16227,17045,18258,18585,18955,19794,21031,21358,22345,23508,23794,24098,25526,25942,26129,26263,26289,26375,26508,27109,28678,30361,31385,31661,31875,33842,34923,35260,35406,35736,35896,36075,36497,36619,37713,37728,38357,39901,40530,40733,41188,43289,49665,52849,53165,53470,53689,53812,54016,54223,58203,61960,62847,64042,65031,66873,67034,67100,67243,67266,67328,67435,67590,67690,67799,67864,67926,68000,68090,68324,68403,68456,68488,68961,69208,69386,69490,70091,70120,71164,71274,71665,72957,73025,73426,74178,74265,75441,76332],"collid":[41504],"startstopassetediting":[3703],"disassemble":[12012],"appcallbacks":[72085,74664,74799],"istorecallback":[67283,67537,67543,67549],"error":[214,501,1570,1665,1789,2745,2830,3697,4392,4437,4477,5302,7017,8196,8978,9365,11014,11951,12401,12920,13659,15844,18129,19230,20194,20314,21031,26074,26168,26257,26460,26986,27599,27678,28278,28625,28887,28969,29005,29065,29918,30084,30098,30907,33069,33866,34171,34416,34617,34640,35001,35625,36512,38483,38498,38795,38871,39952,40225,41916,41982,42133,42190,43108,44328,44702,46128,47163,48146,49396,49817,50017,50065,50186,50435,51483,52108,52189,52528,52555,52795,53041,53093,53303,53995,61184,61515,63293,64234,64731,66272,66751,67155,67316,67437,67553,67696,67847,68103,68297,68337,68364,68401,68454,68472,68645,68896,69134,69539,69785,69845,69861,70175,70354,70594,70916,71110,71256,71314,71551,72204,72477,72589,72634,73188,73300,73395,73589,73672,74013,74252,74537,74602,75591,75785,75977],"hpcolor":[57022],"l21":[27473],"undos":[74151],"blender":[21478,22526,24713,31052,45351,71768],"fulfilling":[67597],"freshly":[39160],"thirty":[22363,25994],"exampleconstant":[20316],"assemblydefinitionreferenceimporter":[6695,7432,15300],"banners":[4290,53290],"globalgamemanager":[15051],"against":[2663,3846,4994,5920,6067,6213,6844,8368,9095,11191,11587,11598,11846,12698,13598,20622,21149,21175,23554,24815,25113,26115,26294,26647,28967,29420,29733,30164,30275,30901,31707,32115,33420,33457,33804,35786,36712,37632,38375,39529,39689,39699,40813,41520,42059,42792,44936,45851,49744,52044,54808,59838,64332,66110,66437,67060,67533,68637,69896,71567,72143,72319,74777],"missingstoresecretexception":[67774],"alternate":[140,2432,12311,23617,28606,32456,48375,63253,71508,72523,75656,76110],"svt":[41933,50002,50018,50053,50067,50077,50140,50144],"playbutton":[62817],"randomindex":[13071],"#ba55d3":[63596],"us’":[12630],"maker's":[72957],"tab's":[57210],"upcoming":[62,4354,6790,19663,29581,74916],"bypass":[4846,5027,5121,7779,14289,27555,27591,33782,47658,70498],"#121":[66781],"_someglobalvalue":[43993],"mit":[5183,18740,74212],"heap8":[73556],"prediction":[72921],"perceivability":[64190],"interop":[72191],"16kb":[29186],"half4":[6536,8448,8748,14065,31979,44047,44272,44417,44921,45137,45209,45830,46459,46514,46560,46864,47113,47403],"spherecasts":[11609],"ime":[25029],"inlines":[66522],"wirecolor":[58471],"myuser":[70458,70601],"“rename”":[24535],"fields":[179,1091,1908,1919,2429,2608,3022,3571,4671,5220,6291,6314,6963,9564,10702,11303,11443,11966,12755,13276,13293,13925,14146,14684,14756,18201,18953,19021,20116,20556,20659,20811,20952,21045,25816,26953,31802,34770,35178,36756,39169,39352,39856,45083,45153,47264,48524,48620,49224,52247,53280,54635,54681,54693,54731,55037,55231,55363,55494,55547,55740,56125,56393,57461,57750,58155,58378,58753,60157,64258,64512,64547,64564,64587,64611,64809,64842,64860,64915,65050,65313,65538,65553,65568,65588,65608,65628,65649,65741,66464,67034,67130,67175,67550,67802,68547,68729,68861,69094,69314,69420,70829,71104,71969,72032,72245,73480,74206,74311,74418,74821,75933,75980],"blocklisting":[73141],"reproduced":[18743],"relief":[27081],"mixerplayable":[33956],"entrian":[2690],"caustics_high":[42978],"kunityxrinputfeatureusagecolorcamera":[75631],"stopassetediting":[3688],"tie":[36069,67673],"recv":[66773],"densely":[10081],"sbsar":[6711],"presetpaths":[19495],"#d2d2d2":[63285],"\\diagnostics":[70928],"taken":[249,2619,3674,4979,5322,5911,6141,8514,9009,9173,9303,9739,13170,13569,13681,13866,14995,18112,18375,26577,29488,29918,32296,35671,37689,37696,38330,38403,39837,41077,43154,43690,44439,48676,49608,49642,50351,53221,71773,71970,72297,72366,74335],"atlas's":[48597],"aliasing":[9878,10010,12881,13203,20450,22896,23449,24501,26129,34861,36678,37955,38297,38347,43110,43654,44080,44838,50128,54165,73453],"lightingstandardtonemappedgi":[46686],"helpboxmessagetype":[64735],"defaultpackerpolicysample":[48713],"a_backupthisfolder_butdontshipitwithyourgame":[74613],"v2f_shadow_caster":[47793],"receivedata":[68205],"unitytest":[66489],"addencoding":[73756],"#output":[35116],"#ffffff":[41343,61467,63311,63652],"v2f_meta":[28935,29509],"“near”":[44940],"supportstextureformat":[3503],"dontcreateproperty":[36759],"mdn":[59746,60389,60790,62201,63689,64079],"asia":[66393],"bc2be074":[53900],"treebillboard":[45639],"midway":[76176],"colordepth":[75174],"broadcast":[11043,52645,74202],"mscorlib":[20184,26079,66470],"600ms":[63032],"participants":[66427],"expanders":[71216],"graphicsdevicename":[19727],"decent":[42812,43952],"separation":[9172,9962,13680,13865,14989,24054,33730,35687,36352,40050,49424,60213,65490],"wmv":[6715,14786,72632],"playclip":[33940],"newtotalsize":[26207],"collects":[861,5891,17206,18233,21002,24605,24623,26252,30899,35692,35809,36093,36252,36400,36492,48350,49356,53734,66918,73630],"batchcullingoutput":[5487,5496,5735,5798],"locks":[7281,14681,18183,28455,29167,37617,50743,50770,50783,50796,50822,50860,51422,70613],"notices":[3859,18692,18730,18937],"concern":[6378,13465,27268,28176,74639],"toolbaroverlay":[30519],"m_script":[48142],"qty":[4083],"lfreference":[7728,7746],"oculusspatializer":[72890],"audiohighpasseffect":[7595],"onserveraddplayer":[66239],"ipod":[23551,29586],"ssh\\":[70143],"__low":[14824],"asyncreadback":[50082],"onselectionchanged":[49938],"mobile":[384,870,1087,1483,1552,2937,2965,4544,4774,4956,5885,5910,5921,6835,8081,9057,10686,11176,11824,12311,12350,12689,12865,14290,14463,16043,16091,16527,16572,16576,16933,17126,17752,18485,19967,20058,21634,22030,23189,23590,25031,25177,25263,25339,25720,25814,25819,25826,25865,26054,26473,27083,27131,28422,29450,29466,29569,29582,29677,30365,31030,31403,33347,33518,33877,35835,37318,37444,37639,37667,37779,38321,38350,38402,38425,39630,42377,42399,42969,43944,44229,44870,45203,45254,45302,45564,48227,49621,50191,53839,58411,62829,63132,66802,68466,68527,72531,72687,73020,73121,73165,73480,73616,73896,74044,74160,75119,75225,75414,76095],"packednormal":[44246],"audiogroup":[4804,5019,5080],"_to":[19071],"sse4":[23433],"lavender":[63570],"executableanddlls":[36294],"timesteps":[51990],"09f3":[53900],"showeyedropper":[64477],"surrounded":[8489,25462,49840,66388,73952],"exceed":[223,1169,2052,14560,23456,27610,38498,48599,49449,50197,51030,52011,58396,75446,75579],"calculator":[40818],"role_and_control":[64206],"buildtools":[23500,73559,73920],"exc_bad_access":[52555],"downmixed":[7804],"slot_row2":[56836],"corridors":[30270],"toint32":[35553],"buildassetbundle":[19086,25937],"rely":[4639,6806,9341,9488,13009,14726,18485,21326,23427,26041,26479,26809,27637,27749,27758,30875,34985,36539,41290,46074,49547,49803,49908,52585,57840,75409,75485],"ilist":[59980],"mpmovieplayercontroller":[10767],"perceivable":[27509],"xsi":[58105,58603,61275,61635,62428,62547,65879],"androidlib":[1239,34567,48212,68895,69133],"16k":[50094],"questions":[231,4148,4343,25458,29089,40648,58128,67665,68036],"likewise":[2007,7767,9386,10870,18506,26463,34158,40208,43184,71053,72329],"recurring":[18129,54896,57286],"window’s":[180,9932,33400,36071,36189,70281],"charts’":[36678],"accepted":[4264,4366,4419,21088,27511,34210,37261,53462,57300,57303,63707,64042,66151,76335],"renderloopnewbatcher":[49385],"broadcastmessage":[9400],"panoramic":[10083,38066,42730,43497,72485],"throttled":[30376,34994],"navmeshsurface":[69388,69492],"workerthreadstat":[76009],"coat":[6910,49629],"panner":[5181],"unity_setup_stereo_eye_index_post_vertex":[1692,43359],"yesavailable":[38120],"orderid":[53506],"concerns":[18513,28979,57750,72942,73285,73901],"scenevisibilitymanager":[39312,41516],"collect":[4366,4663,17268,17524,21913,22347,27992,30868,33074,33251,35606,35625,35727,35778,35808,36093,36286,36489,37627,50288,53713,63221,66916,67869],"console_entry_info_small":[63446],"_deferred":[46518],"backward":[5721,6285,12918,18330,20572,37687,39266,58414,60430,69719,70839,70910,71011],"nest":[24325,34926,35690,37020,61386,61476],"flares":[6495,9196,9242,9479,9670,9845,23646,26881,38111,52146,72772,72805,72827],"addnumbers":[73513],"#6495ed":[63525],"identification":[925,1494,11838,12150,36681,49780,54547,66393],"unchanging":[7172,13306],"5’":[31870],"fresnel":[22783,42811,49452,49605],"describe":[169,282,1162,1980,2713,3496,4141,4206,4255,5347,7163,8085,9826,12968,13391,18674,19675,21002,21422,23018,25920,26168,28838,29385,30391,31008,31368,32755,36789,45175,45448,46505,49444,49524,52982,53306,59554,61519,61749,64350,66480,69743,70806,71020,72289,76136],"r16g16_uint":[8480],"stitched":[27092],"setindexbufferdata":[71974],"#494949":[63361],"hslcolor":[43845],"auth":[70008],"limegreen":[63590],"exactvalue":[41473],"presented":[4964,5137,25487,27508,29793,32357,49830,53486],"minimal":[462,4567,4994,5345,5999,7484,8411,11417,12332,13267,14498,16345,17092,18239,19781,20240,21052,24796,27987,28467,33409,35293,37003,37708,38840,39168,40861,41387,41838,48167,49388,50592,51621,52500,66443,67069,70714,73914],"osversion":[66520],"myarchive":[2917],"boxcollider":[7957,15085,40739,76530],"waitforgpu":[72936],"dialogue":[1114,1380,4776,66690,72710],"#x79":[66770],"calculates":[1770,3344,5450,5594,6803,8030,8356,8899,10385,10406,11639,11736,12115,13457,13824,18422,18620,20574,21896,22116,22144,22734,23270,26849,26988,27044,27068,27314,27323,31858,31993,32170,32264,33673,36597,36679,38404,38463,38478,38558,38588,39552,41784,42713,42729,42754,43120,43358,43881,44428,44963,47145,50055,50602,50691,50969,51062,56097,56919,65051,66010,71876],"introduced":[6037,6066,6151,6831,11635,16075,18539,21422,26357,29922,30293,42231,42236,42241,42248,42253,42261,42291,42296,42301,42306,42434,42439,42445,42454,42461,42466,42509,42514,42520,42526,42531,42536,42541,42546,42576,42581,42586,42591,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42875,42895,42923,42929,50362,50652,52094,52629,67382,67982,70839,74186,74346,76300],"sandy":[13899],"#cbcbcb":[63296],"measured":[8029,8245,8565,9172,9694,11164,13680,13865,14668,14950,14989,25994,27484,33669,47095,66333,72337],"zip":[416,559,1232,1276,1744,2894,3870,4217,6374,6434,18816,22555,25501,26096,28297,30279,34237,38741,52265,68900,69138,74635],"bumpiness":[49555],"finishing":[67539],"#ff6347":[63647],"synonyms":[71086],"alu":[27143],"blind":[36501],"consumption":[1761,5879,5980,6120,26473,34994,36518,37704,48329,52597,54032,67261],"setadditionalil2cppargs":[24485],"brightness":[5324,9856,9874,9965,18343,20050,24487,26783,26866,27080,28895,29091,34866,38388,39977,41343,49490,49627,65220,71809],"diffuse":[317,9970,10109,13431,13771,13902,14260,21385,21557,23322,24652,26783,26856,28895,29510,31915,33059,38359,38411,42230,42247,42252,42290,42371,42433,42460,42508,42530,42540,42575,42813,42820,42831,42842,42858,42863,43614,44445,45197,45300,45557,46143,46510,46533,46725,46870,47664,48286,49609,49626,49637],"strong":[4277,5162,6294,8356,9310,11628,31379,31857,32216,34379,34618,49628,71872],"torrent":[25486],"unitypurchasing":[17045,67048,67089,67294,67416,67691],"gameinstance":[73590],"collider2d":[204,7970,8174,8271,8389,8774,9039,12733,14509,15074,35269,38571,38601,38635,41504,74326],"100px":[64006,64141],"illusion":[22740,27267,32319,37365,43484,51173],"embed":[993,2835,4314,9253,18948,29766,31601,34237,39966,45039,62832,66877,66893,66903,69568,70331,73328,73561],"teal":[49876,63645],"'quieter'":[7793],"organises":[11461,42325],"parameterless":[30555,40767],"heavily":[6117,6833,13096,26081,52615,69513],"oninitialize":[67144],"renderer's":[7920,10211,10651,13155,14874,22156,29148,32304,38347,49852],"shake":[62194],"planetscript":[54981],"offlinemapsmanagement":[12669],"getcachedir":[1440],"relationship":[3012,5092,14696,17976,22695,33572,34158,36074,40526,40534,40674,42352,43114,44590,44755,44785,45387,45930,45960,54818,60542,66186,66330,67029,74034],"portability":[45745,70775],"m_halostrength":[76360],"respawndelegate":[10945],"++cameraindex":[73108],"__off__":[14796],"removefromhierarchy":[60608],"matchsearchgroup":[2657],"internal":[146,1997,2209,2358,2468,2521,3304,4133,4979,5770,6135,7127,9936,10595,11416,11844,12202,13602,14289,18315,18375,19161,20402,21343,21588,21922,22124,23559,24051,24492,25176,25979,26060,26079,26141,26707,27935,27984,30321,31365,33466,33475,34042,35765,36041,36187,36394,36588,36757,36855,37622,37670,38377,38532,38614,38719,39169,39927,41226,41529,41874,42060,46781,48551,49763,50452,50691,52352,52591,54547,54579,54898,55731,56674,57899,58015,65713,65746,66390,67243,68279,69758,69794,70838,70884,72737,73029,73292,73563,73900,73925,75864],"further":[12,137,234,246,363,1891,2037,2181,2211,2217,2357,3611,3690,4769,5060,5127,5168,5978,5985,6063,6142,6293,6357,6751,6816,7506,7569,7576,7797,7841,7944,7986,8039,8134,8765,9008,9219,9901,10688,11253,11459,11527,11967,12423,12941,13018,13131,13180,13765,13815,13846,14006,14250,15039,15835,18359,18969,19104,19201,21661,21701,22224,23540,25970,26571,27501,27515,27545,27584,27643,27744,27765,28875,29152,29680,29895,30032,30048,30151,30166,30226,31707,32216,32269,32631,33067,33194,33443,33539,34657,35608,35691,35911,35937,35959,36061,36296,36522,36638,37274,37365,37694,37722,39378,39663,40516,40676,41382,41501,42766,43095,43177,43591,44430,44634,44688,44838,47337,47963,48165,48205,48347,48526,48662,48685,48875,49134,49474,49496,49533,49608,49648,49852,49885,50008,50200,50877,50939,51048,51133,51166,51232,52042,52100,52229,52493,52594,52757,53711,53756,57961,61933,62114,62803,65999,66111,66517,66819,66843,68035,68505,71526,72706,73212,73336,73707,75653],"vm":[30879,33454],"gamecontroller":[50316,76160],"production":[149,4999,5820,6055,6082,6834,10384,11370,13962,17752,21023,23007,23427,24637,31008,31283,31366,31388,38840,53424,54123,57694,66421,67047,70755,70910,71012,72787,73917,74202],"lights":[6798,8068,9100,9196,9463,9861,9951,10090,12880,16345,18245,18423,20427,21447,22011,22186,22224,22640,23289,24656,25209,25416,26716,26784,26787,26797,26859,26918,26953,27013,27082,27104,27174,27186,27213,27265,27292,27302,27314,27330,27489,27520,27757,30355,32092,35129,36397,36632,37413,37588,37635,37784,38292,38345,38382,38433,38886,39138,41343,42243,42360,42392,42447,42456,42547,43110,43145,43154,43205,43543,43895,44453,44580,45194,45588,46156,46787,47109,47377,49423,50615,50726,52485,66006,69243,71657,71804,71982,72766],"increment":[3695,4254,13330,20460,23672,45900,52278,53148,71013],"getcomponentnullerrorwrapper":[35694],"#complex":[59890],"_cubemap":[44280],"change":[5,16,75,122,169,480,502,553,581,922,1035,1129,1343,1491,1558,1574,1611,1761,1994,2115,2292,2358,2397,2419,2699,2781,3243,3462,3502,3581,3675,3767,3834,3856,3892,4054,4250,4356,4792,4816,4965,5070,5088,5178,5353,5919,6149,6223,6271,6297,6360,6417,6506,6792,6885,7061,7315,7364,7567,7574,7645,7662,7752,7763,7786,7940,7965,7986,8031,8186,8384,8583,8882,9088,9154,9178,9248,9309,9357,9448,9536,9604,9762,9954,10003,10080,10219,10341,10398,10412,10527,10595,10609,10705,11380,11606,11994,12303,12586,12728,12888,13120,13180,13263,13457,13648,13724,13751,13797,13815,13822,13851,13862,13965,14001,14128,14229,14501,14559,14664,14757,14795,14895,17092,17282,17744,17932,18076,18113,18171,18481,18616,18716,19026,19430,19451,19506,20003,20056,20089,20181,20220,20394,20570,20608,20627,20743,20785,21014,21294,21384,21572,21859,21992,22085,22151,22227,22355,23427,23560,23672,23930,24053,24583,24664,24724,24774,24903,24952,25035,25076,25162,25329,25423,25499,25867,25941,26030,26044,26117,26203,26464,26611,26670,26718,26807,26840,26927,26987,27041,27082,27170,27176,27209,27288,27297,27303,27321,27520,27550,27617,28183,28357,28400,28468,28867,28950,28986,29023,29284,29334,29592,29784,29817,29895,29915,30112,30164,30233,30274,30349,30410,30460,30631,30832,30863,31635,31676,31731,31755,31773,31785,31810,31831,31848,31869,32086,32101,32125,32149,32212,32245,32328,32354,32380,32594,32625,32645,32673,32720,32765,32868,32899,33415,33532,33655,34201,34579,34736,34767,34781,34866,34896,34915,34941,34984,35224,35247,35266,35369,35625,35691,35817,35903,35969,36023,36120,36174,36221,36298,36435,36497,36574,36674,36691,36694,37286,37351,37581,37639,37685,37709,37733,38251,38377,38458,38492,38505,38542,38655,38913,39118,39127,39170,39233,39252,39310,39591,39634,39714,39757,39819,39908,39989,40094,40176,40450,41323,41356,41428,41583,41602,41707,41860,41876,42005,42027,42101,42133,42703,42724,42746,42772,42793,42948,43106,43185,43317,43533,43660,43734,43806,44102,44139,44166,44282,44541,44627,44758,44902,45110,45618,45857,46925,47957,47985,48028,48067,48233,48239,48264,48342,48379,48519,48607,48635,48669,48695,48869,49178,49357,49409,49490,49530,49573,49678,49753,49948,50005,50179,50355,50432,50559,50603,50627,50647,50651,50672,50696,50756,51070,51113,51188,51225,51323,51382,51710,51851,51894,51992,52092,52110,52140,52227,52259,52597,52745,52988,53147,53311,53939,54216,54239,54444,54562,54718,54763,54796,54883,54957,55060,55227,55303,55369,55548,55609,55712,55807,56042,56121,56225,56273,56386,56447,56624,56674,56808,57210,57322,57479,57603,57829,57904,57976,58131,58190,58274,58369,58653,58801,59037,59411,59596,59719,60510,60559,60775,61411,61496,61616,61928,62009,62052,62193,62339,62609,62665,62805,62836,63680,63956,64322,64489,64546,64613,64652,64702,64757,64892,65038,66018,66081,66255,66367,66389,66521,66707,67209,68635,68695,68825,68891,69058,69306,69357,69412,69636,69719,69768,69808,69975,70340,70409,70749,70757,71012,71132,71186,71491,71521,71562,71605,71662,71811,71869,71902,71913,72007,72231,72330,72401,72500,72633,72844,73214,73252,73392,73433,74051,74147,74420,74646,74799,74976,75090,75397,75485,75774,75910,75946,76145],"formations":[50509],"mutual":[35339,72282],"tank_inspector_styles":[56443],"headlights":[9894,26923,38405,71811],"bottom":[94,179,1578,1704,1881,2383,2392,2431,2777,3517,4071,4179,4200,4213,4410,4578,4827,5123,6267,6294,6723,6762,7162,7837,8041,8306,8706,9215,9795,9980,10020,10110,10331,10561,10724,11380,11759,12219,12422,12799,12866,13105,13846,13901,14126,14761,14788,14869,18072,18134,18204,18353,18384,20717,21215,21587,22081,23826,24390,25223,25669,25871,26821,27015,27107,28400,28789,29101,29621,29880,30142,30198,30245,32365,32857,33408,33560,33649,34757,35252,35498,35776,35911,36058,36218,36446,36519,36696,37723,39147,39318,39507,39724,39748,39796,39985,41543,41616,41691,43535,44834,47063,47093,48245,48270,48514,48559,48595,48620,49431,50351,51187,51323,51361,52156,52226,54273,54419,54725,54779,56867,57366,58147,58733,59091,59319,59836,61256,61837,62237,62609,63432,64058,64285,66002,66105,67090,67947,68742,71546,72512,73474],"1001freefonts":[14003],"getcurrentanimatorstateinfo":[24875],"treating":[38810],"ipad":[2839,12043,23550,25843,25881,29586,72273],"tetrahedrons":[26844],"listenerpos_y":[5234],"guids":[3088,3595,3795,7396,26081,40271,40794,68607,71032],"clipindex":[34114],"multmatrix":[51516],"rising":[30376,31838,32632],"increasingly":[6126],"gradians":[62307],"outdoor":[253,7914,9987,22776,34868,36592,49437],"notification":[12516,27536,53700,55725,67383,67947,68749,72407,73288,73571],"unity_ambientsky":[47142],"loadimage":[13969,27711,68129],"concatenations":[5984,33137],"denote":[41174,49852,63728],"plugindata":[75754],"meshrenderer":[3756,5974,10614,15060,21261,21457,23368,23400,26992,27040,27095,28856,32448,35068,41342,44614,48129,71961],"runtimepanelutils":[58146,61555],"fil":[53623],"preallocate":[5498],"intfield":[59663],"pseudo":[4603,6129,16470,22863,26081,51166,51244,54636,54695,54819,56090,62648,63954,64026,64211,64333],"visualizaing":[47372],"twisting":[8260,74905],"int2":[8470],"hacks":[8437],"finish":[1124,1227,4165,4444,5492,5686,5759,5803,5879,18005,25450,27015,35172,35711,36055,50312,52187,66194,67877,67978,72931,73683],"trustexitcode":[48083],"smallest":[3247,6999,8355,11513,11638,12958,20210,22858,30241,32274,37668,39964,41050,73197],"contract":[7975,8179,8394,8779,9044,12738,14514,51392],"flexibly":[24761],"thevalue":[39349],"rg32ui":[8479],"lts":[1625,5853,11368,19270,31366,31379,37303,37485,37509,37851,67976,68564,68687,68812,69039,69294,69401,69508,70756,71164,74406],"rsp":[3779,6698,7385,19031,20190,38894],"initializer":[39951,73449],"easier":[812,2069,2440,2776,2977,3013,3346,4209,4218,4368,4876,5446,5590,6908,8582,9081,11588,11612,14133,14700,17045,17062,17110,19053,21605,24792,25572,26479,27917,29009,33573,35261,35736,40657,41250,43186,43870,46718,47370,49850,52415,52673,52921,53012,54388,54468,54632,54795,57797,63681,65687,65873,66668,66894,67182,70937,71219,71775,71859,72405,72960,74551,75080],"playqueuesample":[34137],"recompressing":[3296],"mousecapturecontroller":[55697,57837],"singleton":[5067,5904,6083,6128,11221,66038,66847,74738],"illuminate":[18166,26920,38402,43113,43154,49491],"zz":[27473],"oddeven":[58559],"assess":[21865,22166,29334,35794,35901,54104,74161],"fact":[2179,3462,20811,25284,33228,41795,44002,47665,54711,64328,67257,70225,70496],"unpause":[14597,73072],"joints":[50,1931,2174,3013,7249,8225,8496,9021,9145,9186,9324,9715,9756,11580,11606,13160,13582,13699,13858,15017,22500,24654,25622,26546,26556,26568,26579,33573,33630,33756,35272,35750,36303,37439,37609,37618,38459,71779,72982,74893],"speech":[4773],"bash":[19117,69875,69974,70086,70135,70540],"c2y":[5388,5532,20359],"drawwirearc":[22214],"priorityhint":[75760],"treeview":[52237,55478,59979,64908,64981,64994,65511,65712],"wildcard":[40325,40817,63846,64011,64025,67027],"tilemapmodule":[16734,30968],"nuget":[38687,69018,69270],"targetplatform":[19091],"dramatic":[26923,28895],"piece":[308,1924,2007,3511,5006,5910,5920,6999,9136,13665,14968,18756,20927,22460,26456,26564,28493,34924,37405,39759,40042,40657,41689,49852,50356],"codegeneration":[12657],"st":[6710,13628,48224],"scratch":[1862,17110,25496,52630,58186,63069,73413],"cools":[31838],"requestfocus":[1084],"initializationfailurereason":[67321,67442,67553],"tech":[31379,69508,71163],"sampledcolor":[14209],"periodically":[520,21170,32106,35126,70965],"functionname":[23275,46346,46824,66858],"individual":[255,1271,1562,1831,1977,2192,2265,2389,2434,3441,3522,3575,4390,4964,5123,5810,6046,6071,6143,6265,6290,6459,6684,7071,7383,7620,7771,7865,8131,8359,8582,9102,9219,9384,9557,10074,10233,10404,10797,11533,11601,11687,13131,13591,13708,14029,14525,14539,14707,18172,18319,18448,20438,20643,21219,21525,21697,21865,22239,22500,24054,24737,24951,25453,25622,26255,26784,26969,27122,28089,28488,29332,29895,30152,30366,30399,30500,31661,31925,32273,32847,33093,34594,34883,34911,34927,35220,36366,36550,36696,36786,36933,37401,37662,37668,37714,37878,38609,38639,39144,39315,39819,39825,39937,41649,42049,42175,42698,42796,43489,43557,43651,44079,44696,45082,45447,45668,48162,48336,48364,48676,49379,49650,49678,49731,50403,50672,50698,51008,51131,51205,51231,51951,52248,53176,53487,54049,54349,56097,57864,58338,58731,59088,59347,59872,60382,60497,60795,61931,62742,64452,66193,68563,72525,74051,74305,74434,75012,75150,75515,75999,76295],"13th":[36792],"57735'":[51175],"addatlas":[48807],"temporary":[5919,11166,22032,23443,25465,26125,26465,29128,29160,29332,29784,33090,35277,38915,48221,48603,49908,54031,66343,66368,66396,66556,67168,67853,71284,74178],"healthy":[1960,17412,50381,50472],"biped":[71776],"audiograph":[12666],"alphavalue":[43575],"_selftexturecube":[8966],"publisher's":[4070,4184,4379,4445,71132],"serializes":[7396,7429,26908,33504,39853,55551,68925,69168,74050],"beginproperty":[20947,59601],"playersettingsios":[12272],"iii":[18030],"detrimental":[12865,23420,33307],"“beam”":[50726],"allocateinstancedatebuffer":[5410,5554],"firstjob":[26378],"synchronizes":[10788,11242,11271,12889,55547,72917],"tolerance":[7022,8514,10000,10230,11544,13659,18977,22180,23065,28886,48649],"object":[8,82,253,295,1407,1510,1701,1918,1944,1966,2037,2180,2189,2211,2213,2234,2249,2261,2334,2417,2655,2958,3022,3256,3306,3379,3479,3483,3516,3571,3728,4573,4808,5161,5345,5350,5727,5731,5770,5904,5948,6025,6067,6122,6486,6723,6758,6834,6970,7163,7178,7566,7796,7873,7922,8078,8104,8134,8142,8205,8256,8500,8609,9002,9129,9136,9145,9167,9297,9348,9463,9692,9832,9870,9936,10002,10079,10353,10392,10701,10813,11077,11108,11190,11227,11236,11271,11302,11508,11649,11660,12658,12712,12954,13110,13120,13163,13212,13308,13351,13552,13651,13673,13720,13744,13799,13837,13858,13887,14009,14187,14567,14895,14952,14979,15022,15045,15847,18104,18224,18267,18375,18611,18761,19040,19064,19675,20648,20659,20827,21164,21305,21487,21588,21640,21964,22011,22061,22096,22203,22289,23288,23568,23852,24467,24526,24727,24743,24780,24891,24994,25436,25542,25623,25953,26252,26295,26591,26707,26747,26783,26824,26919,26990,27019,27263,27322,27332,27484,27678,27836,27923,28044,28846,28874,29385,29435,29624,29762,30096,30142,30229,30353,30895,31662,31721,31797,31856,32078,32165,32301,32654,32702,33097,33415,33428,33494,33749,33762,34179,34716,34957,35007,35240,35694,36003,36099,36214,36449,36689,36736,36751,36789,36826,36979,37255,37289,37344,37525,37627,37685,37700,37728,37793,38292,38382,38433,38548,38576,38624,38643,38655,39137,39169,39318,39347,39466,39492,39524,39637,39669,39723,39868,40018,40096,40112,40533,40563,40641,40694,40758,41173,41375,41520,41783,41921,42017,42206,42262,42311,42360,42395,42447,42456,42467,42683,42689,42896,43594,43875,44210,44238,44320,44394,44433,44590,44660,44755,44785,45044,45143,45175,45194,45385,45520,45622,45839,45858,45930,45960,46158,47127,47156,47179,47985,48188,48559,48586,48622,48677,48988,49358,49421,49468,49512,49567,49609,49887,49912,50330,50457,50527,50567,50611,50620,50929,51089,51119,51158,51163,51716,51794,51825,51967,52174,52222,52248,52487,52625,54201,54227,54474,54718,54757,54809,54879,54919,55060,55169,55243,55309,55367,55528,55550,55557,55993,56074,56123,56240,56298,56373,56449,56706,56799,57274,57318,57417,57581,57997,58068,58336,58483,58766,59037,60610,61071,61497,61666,61921,62059,62379,62701,62748,63334,63994,64260,64389,64515,64918,64998,65034,65831,65902,65999,66197,66417,66458,66853,66879,66929,67724,68088,68245,68264,68285,68351,68385,68441,68474,68541,68698,68915,69156,69389,69493,69726,70571,70806,70867,70978,71617,71808,71858,71961,72019,72245,72302,72754,72963,73244,73412,73569,73614,73652,74007,74143,74251,74418,74581,74720,74900,75068,75088,75271,75319,75751,75925,76145,76332],"fireanimationevents":[21345],"dumpobjectvisito":[36855],"“block”":[25546],"constituent":[3441],"grabinteractable":[75090],"fallofftype":[36668],"privatenetworkclientserver":[12645,72006],"postponed":[68961,69208],"m_materials":[48129,76515],"halved":[49549],"int32":[28044,37093,70561,72041],"unarchive":[30457],"flattened":[11,4501,30142,37670,43962],"_surface":[8316],"addtoqueueifnecessary":[75838],"promptly":[74546],"flapping":[32701],"unpauses":[73072,74750],"amused":[49820],"truncate":[40056],"href":[4278,19430,62008],"mywindow":[20876,60144,60178],"mono_pmip":[74564],"operated":[6145],"nl":[47696,53619],"lifecycle_initialize":[75272,75926],"noticable":[10097,22766,49623],"addbatch":[5352,5618,20264],"editortoolbartoggle":[30522,55488],"moveasset":[3619,3678,3789],"prefab's":[18449,50600],"updater":[1662,2698,21029,68805,68891,69128,69382,69486,70839,71497],"expose":[4825,5034,6144,6944,21589,22114,30147,33242,34163,37142,42028,49914,54513,56667,56753,57295,57637,58032,60910,60990,62814,67143,71094,72868,73499,75906],"excludedepend":[48142],"fruits":[52206,55929],"wings":[32701],"instructs":[5462,5607,23271,28600,34672,35753,42132,45429,49817,72225],"closest":[7243,8046,9515,18233,18615,19486,23690,26678,29060,36679,37627,39236,42799,56932,63817,70985],"gradian":[62313],"examplefield's":[56607],"diagonally":[51631,55889],"characterlistcontroller":[59397],"heap":[1655,12404,18315,23485,26025,29154,33075,33091,33381,33399,33420,33448,34740,35726,36093,36215,49766,52587,68952,69197,73186,73553,73612,73938],"m_normalizedviewportrect":[76486],"graphicsdeviceid":[19729],"cny":[53605],"custompass":[38191],"cleanly":[3502,36205],"missed":[31726],"clashing":[29907],"embossed":[49537],"usescriptablerenderpipelinebatching":[49351],"islocalplayer":[10808,11088,66057],"op":[6128,67707],"pathname":[21028,48174,49737],"securely":[17296,66635,67921,69880],"–1":[10592,44851],"intimate":[72941],"maxlength":[55533,65320],"graph's":[49373],"sectors":[7352],"“features”":[66501],"toe_end":[71786],"testobjectwithspeciallayoutone":[15299],"createcubemaparray":[8656],"primarybuttonevent":[76225],"train":[31798,31857],"b1":[18233],"dialog's":[18471],"lifetime":[3440,3457,4091,4548,5068,11462,12666,14594,18282,21298,22329,26245,26452,30893,31685,31746,31797,31822,32077,32110,32116,32156,32216,32345,32609,32616,32637,32680,32725,32853,32890,33457,37709,52252,53516,56676],"param":[4885,7693],"assets\\plugins":[52647],"lw":[40851],"exceeding":[8578,22186,27611,66165],"mediumseagreen":[63598],"noncommercial":[50343],"multiplatform":[4559],"setcolors":[325],"air":[1880,2769,5160,8565,9669,13239,17092,22466,23551,24912,25569,26074,26690,31720,31745,31760,31838,32136,58912,71883,72323],"ukrainian":[53653],"atc_rgba8":[48734],"original_purchase_date_ms":[67478],"phases":[21937,36340,40441,62600,75786],"runembeddedwithargc":[66849],"i'd":[29662],"governed":[18738,68473],"apps":[387,631,899,966,2764,2977,4566,10477,11978,12588,17268,17524,17880,19348,19361,21634,22347,28145,29570,50197,52742,52882,53713,53791,66812,66916,66971,67127,67149,67252,67884,67977,68808,70236,72180,72289,72788,72899,72951,73360,73689,74204,74380,74724,74777,74799,74808,74883,75068,75098,75215],"negating":[7375,34626,67886],"waitfortargetfps":[35714],"chat":[12656,66193],"frametime":[21926,25983],"footprint":[3319,7507,30369,49706,56725,59085,68081],"equator":[47143],"forwardrendering":[72752],"orientated":[14254],"dissipate":[31720,31760],"myfield":[65337,68422],"meshrenderer's":[26992],"packagerequirements":[44675,44770,45943],"#f8f8ff":[63557],"profilermodulemetadata":[35434,35481,35570],"seem":[25521,30142,43484,49496,50065,51967,52597,72344],"foundcappeddamage":[56193],"mars":[2977,59963,74366,75322],"matter":[234,2334,3309,5041,6806,7931,9275,9594,13093,17398,21029,23890,24897,25197,25571,27522,29100,29880,30207,32847,38408,40204,40555,40733,42360,45103,46772,47751,49289,49627,49638,50612,52489,54789,71806,71970,72296,72384,76218],"city":[1173,57146],"'t":[2740,41208],"schools":[219,70424],"alice":[61382,62010],"playerprefab":[66053,66241],"exclude_path":[46784],"undamaged":[28947],"tfa":[4239],"showunitywindow":[66855],"formatsuggestiontitle":[2662],"skymanager—to":[71591,71855],"circ":[62923],"#dc143c":[63527],"html#sustained_performance_api":[11895],"unspecified":[8360,35371,44298],"battery":[1483,1766,11729,12216,26049,26473,29467,30326,30376,34994,75487,76117],"stay":[187,3858,4865,5006,5276,7793,8565,8989,12515,13113,13879,19467,24747,26576,29182,32317,33534,34869,35329,38614,38659,39169,39800,41871,45735,50997,54736,61539,68533],"emerge":[5162,49627],"homogeneous":[6314,6807,43875],"__standard__":[39613],"normalvertexlit":[42309],"weathered":[28947],"treat":[6068,7025,11069,26118,28488,32665,37061,41214,41784,44870,45579,48123,52754,64697,65232,65256,68509,74699],"onparticlecollision":[31689],"connected":[434,560,2001,7316,8229,8500,9001,9066,9148,9166,9296,9682,9726,9789,10804,10988,11008,11071,12651,13162,13242,13554,13648,13672,14691,14982,18131,22983,24626,25133,25698,25910,26566,26587,28431,28753,29117,29841,30270,34012,34758,35339,35803,35957,36488,37618,39168,50347,50630,52177,52226,52757,53693,58617,60611,66255,66341,66352,66538,66653,68066,72398,73471,74203,74782,74814,75101,75191,75478,76125],"examplepasstagkey":[45955],"reorder":[6401,11803,12303,12346,12791,13420,18167,21517,25406,35772,36549,54427,54548,54763,55214,58336,61907,62066,71628,71919],"theoretically":[45523,52034],"pvr":[6700],"technology":[8403,12650,16883,19284,24598,33767,40168,52610,58651,72191],"prioritization":[5212],"loadall":[59443],"oils":[42467],"rendertexture":[6703,8427,11313,13232,14029,15096,21777,21856,26870,29449,61558,62832,68921,69164],"\\\\users\\\\my_username\\\\github\\\\my_package_folder":[70773],"aggregated":[12667,22333],"colliding":[8293,11504,11536,11602,13268,15866,23091,31720,33629],"prewarms":[9512],"optimized":[273,1333,2063,3260,3570,3580,5724,5998,6135,6431,6470,7172,7489,7568,7575,9987,10460,11725,16137,16183,17126,19127,19193,19280,19635,21609,22151,22760,23590,26050,28164,29128,29442,29758,30327,31656,37413,41860,43192,44360,45584,50659,59085,66430,68179,68347,68492,68527,73171,73694,74141,74786],"acceleratorip":[66763],"song":[5006,7507,53763],"_tab":[27029],"halolayer":[15123],"savedinstancestate":[773,801,1079],"clientownedobjects":[11010],"straps":[49512],"single_line_large":[63245],"fromscriptableobject":[56498],"unweighted":[21540],"fahrenheit":[54963],"lobbyplayer":[11108],"twist":[7253,8231,23078,33606,60805,74905],"pass":[450,521,734,1028,1040,1449,1671,1859,1920,2872,3351,3609,4400,4663,4792,5194,5352,5974,5999,6517,7437,7454,7545,7557,7566,7582,7587,7596,7605,7627,7636,7647,7779,7922,8057,8122,8441,8553,8722,8787,10000,10135,10580,11543,11661,13065,13939,14044,14164,14238,15847,17935,18525,18575,19239,19655,20190,20264,20420,20571,20938,21029,21339,21741,22161,22585,23287,23417,23640,23829,24083,25633,26127,26259,26376,26450,26646,27103,27158,27333,27690,27996,28918,29243,29483,29644,29979,30023,30868,31009,31178,31650,31701,31760,31887,32136,32301,32916,33265,33401,34201,34425,34523,34717,35088,35446,35484,35600,36360,36439,36558,37792,38278,38336,38352,38390,38433,38557,38587,39352,41959,42034,42340,42385,42619,42665,42941,42998,43074,43181,43334,43456,43599,43660,43734,43800,43891,44012,44066,44102,44139,44171,44226,44334,44344,44376,44442,44589,44632,44677,44754,44783,44999,45114,45177,45184,45267,45405,45420,45539,45588,45602,45633,45675,45857,45942,45975,46418,46755,47104,47156,47201,47915,47957,47990,48028,48231,48956,48987,49287,49702,50457,50796,50965,52046,53598,53960,56722,58000,58809,62156,66667,66825,66897,67036,67800,68160,68744,68895,69133,70607,70967,71565,71809,71871,72521,72996,73553,74267,74725,74799,74962,75068,75449,75925,76090,76315],"m00":[5394,5538,20365],"relative\\npos\\n25":[61226],"example_waitforendofframe_coroutine":[15747],"m_currentcounter":[62174],"bhd":[53663],"theora":[10740],"closeanimationstream":[68587],"bypassing":[7681,14802,14879,43318,55030],"other_example_keyword":[45461],"onclienterror":[66303],"crowd":[18563],"necks":[30511],"explain":[183,229,476,1570,23777,29018,34641,35684,40039,49524,52491,52879,53322,65998],"executecommandevent":[55910],"“potion”":[67186],"technologies":[3235,3992,4025,4357,16060,17788,18732,22946,50341,52706,54115,65897,65963,66770,66901,74654],"trajectories":[17546,33614,74164],"translates":[1706,16137,47138,50056,51186,58069,73690,73964,75213],"tag’s":[61475],"lv":[53635],"accident":[31013],"snowball's":[31720],"italics":[4276,49848,62019],"handwritten":[33494],"file_path":[70075,70141],"push":[2399,6155,6794,7155,7316,8204,8513,9782,13457,14238,16579,17448,18716,23689,24177,26360,27996,31197,31450,33117,50796,52771,53148,53847,53994,62015,66721,70230],"indexformat":[75813],"logged":[2726,4001,4384,18119,25114,27600,49730,67257,71193],"totally":[3468,7281,28916,45592,49455],"supervises":[9386],"lod_fade_crossfade":[10385],"predicate":[2504,14734,63142,68888,69124],"m_droppedframecountid":[76002],"processtilemapchanges":[14527],"1s":[26647,62461,62903],"lost":[3834,7767,8221,8783,24495,33420,36329,36610,39340,49733,52247,53048,58200,63108,67598,72983,74401,76038],"alphabetical":[11842,15042,21461,24588,39065,40874,41684,51085,64295,75022],"explains":[399,427,550,569,652,666,871,897,955,1028,1032,1101,1107,1117,1134,1316,1355,1378,1487,1808,2176,2211,5341,5690,5815,6767,7164,14230,14776,20095,20543,21296,21382,21992,23246,24469,25688,25721,25973,26066,26104,26460,26627,27933,28079,28125,28258,33446,35381,38679,39099,39172,40150,40526,40644,42362,43227,44571,48315,49281,52702,52712,53223,53783,58203,67641,68045,69663,69716,70021,70513,71669,74502],"selectall":[55904],"susceptible":[62838],"imposed":[6117,12761,13282,13299,58411],"daylight":[26928],"intention":[18615,49560,74404],"rb":[9353,25772,44114],"clippos":[43900],"join":[4379,11048,11160,17384,17474,22514,25750,27325,66180,66335,66351,66373,66424,67255],"strongest":[6293,52594],"tickbox":[14799],"simply":[2083,3479,4997,5938,5994,6062,6126,6322,7617,7645,8203,8367,11844,13093,15847,16564,18081,18508,18617,18902,21175,21200,22349,24213,24908,25509,26718,26927,27131,27493,27507,27685,29119,29663,29908,30110,31716,34924,36963,36998,38865,40057,40076,42449,42547,42809,46511,48335,49524,50933,54763,64512,64564,64587,64611,64758,64809,64842,64860,64915,65313,65553,65568,65588,65608,65628,65649,66000,67759,68622,71871,74893],"scenevisibilitystate":[15336,39310],"parameter":[344,521,862,1429,1717,1888,1918,2007,2115,2256,3300,3446,3609,4810,4875,5025,5207,5451,5496,5734,6025,6263,6287,6314,6321,6344,7304,7790,7930,8528,8982,9890,10015,13034,13808,14718,14837,14951,18282,19383,21029,21175,22144,22417,23524,23932,24060,24730,24792,26376,26496,26927,27690,27831,27924,27947,29117,29286,30680,31176,32767,33228,34164,35082,35484,36565,36637,39347,39758,39995,40084,40570,40626,40901,41220,41766,43610,43663,43760,43809,44106,44143,44174,44346,44635,44898,45417,45587,45864,45997,46346,47878,47960,47993,48031,48967,49567,49840,50965,52168,52610,52780,53117,53926,55991,56609,56671,57250,58809,59162,62156,64900,65191,66173,66858,67619,67916,68246,68379,68594,68887,69123,70487,70687,72609,72669,73083,73234,74496,75434,75516,76086],"unitygiinput":[46523,46657],"srccolor":[43766],"updatetouchcountertext":[20022],"corrupt":[24984,52513,74153],"windmodule":[16838,30981],"brass":[42812],"incrementstatframe":[76023],"customaxis":[48890],"valuable":[554,4545,25893,66608,72335],"amet":[65174],"trajectory":[2956,18224,38657,72914],"getkey":[9817,10892],"darkslateblue":[63543],"prewarm":[9516,32154,34212,42205,42934],"package_version":[22987],"clashes":[18328,29906,42059],"connectiontoclient":[10815,11084],"keyupevent":[59741],"transactionidentifier":[67834],"marshal":[40611,68952,69197],"appobject":[52746],"32b":[29188],"unity_calc_fog_factor":[44944],"directcompute":[8402],"descriptor":[75258,75450],"pickingmode":[57831,60343],"rightarrow":[10894],"training":[2998,31011],"behaved":[68862,69095],"spaceshiprpc":[10919],"#dfdfdf":[63288],"onclickevent":[62390],"distributepersegment":[10270,14607],"#109":[66770],"colorspace":[48750],"reorders":[9542,71216],"elevated":[1666],"executables":[493,52737,66767],"margin":[7039,9636,24593,26074,26969,34891,36689,52387,54327,56863,57363,59313,61256,61849,62024,62453,62568,62609,62967,64055,64229],"querytrackingoriginmode":[75594],"reverted":[20644,30043,34918,44956],"apple":[2764,2981,5015,10733,12042,14336,16075,17045,17800,19797,20419,21102,21936,22405,25673,25692,25738,25756,25819,25921,26073,28084,28137,28160,28185,28287,28317,29442,29450,29457,30292,31038,31405,33803,34377,36163,36578,50167,52584,52694,52702,52706,52717,52730,52744,52751,55943,67016,67118,67177,67351,67624,67652,67708,67722,67758,69351,69455,70544,72727,73127,74391,75290],"fences":[37838,42876,43200,52488],"lets":[1502,2354,2764,3914,3954,4034,4050,4249,4810,6288,10012,10525,12671,12866,13215,13357,13713,14123,14554,14699,14775,16667,16771,16803,16819,17062,17092,17945,18181,18410,19651,20630,20735,21382,22030,22212,22642,24597,24601,26271,26472,26564,26688,26717,29882,30475,30510,31819,32665,32760,33624,34783,34864,37498,37708,38249,38265,38661,39059,39661,40151,41717,42312,43092,43208,45389,48168,48373,48921,49618,49714,50141,50369,50447,50560,50647,50708,51245,52044,52771,52871,52951,53142,53250,53777,54002,54243,54738,57592,58766,59193,59867,60213,64398,64413,64468,64489,64511,64528,64563,64586,64610,64674,64718,64808,64914,64936,64955,64998,65061,65102,65117,65146,65220,65244,65268,65312,65537,65552,65567,65587,65607,65627,65648,65917,66950,68710,71205,71441,71508,71534,71634,73022,73205,73263,73561,73622,73908,74121,74203,74654,74774,74893,74918,75101,75137,75405,75589],"runinbackground":[11176,73701],"bilinear":[8832,13218,14288,32396,36679,48769,61559],"maintenancestart":[66752],"getformattedcountervalue":[35554],"rethrowerror":[38753],"unvisited":[63330],"examplefield":[56602],"configurator":[16005],"diag":[21075,70917],"published":[4063,4202,4253,4372,4408,4419,4434,4440,4456,20217,22993,23816,24051,40789,48536,48542,53004,53167,53263,67149,67236,67265,67867,68661,70447,70726,70810,71127,71216,71366,71462],"recently":[2232,11225,22228,22317,25043,33659,35051,42810,50008,52040,52528,53207,71216,71504],"_sb":[33160],"utc":[53514],"clash":[11308,29906],"topologies":[337,1772],"m11":[5398,5542,20369],"deselected":[49900],"maxcombinedreliablemessagecount":[66321],"scroll_right":[63474],"tagss":[44790],"packagesource":[69597],"mastering":[4722,4790,5020,5163,52739],"generate":[492,559,933,1103,1107,1202,1244,1353,1357,1706,1755,1894,2068,2576,2779,3827,4108,4641,4902,5328,5497,7015,7211,7874,8196,8384,8640,8826,9260,9980,10273,10584,10659,10871,11546,11605,12604,12713,12742,13029,13207,13384,13710,14520,14572,17546,18313,18978,19617,20430,21096,21388,21520,22104,22107,22144,23428,23483,23567,24951,25096,25171,25208,25276,25529,26832,26974,27044,27098,27168,27380,27748,27946,28089,28297,28453,28693,28731,29485,29771,30864,31710,31887,32651,32702,32738,33239,33637,35089,36613,36753,37261,37658,37723,38244,39693,39827,40165,40483,40561,41253,41390,41952,42123,42699,42731,42766,43484,43498,43529,44013,44051,45427,45583,46771,48225,48244,48269,48423,48595,48650,49450,49520,49565,49699,49725,49734,50374,50411,50688,50893,50946,51129,51237,51719,51835,51843,52192,52877,53100,53382,53782,54073,54209,56736,57263,57809,58103,58283,58375,58435,58461,58651,59021,60357,60677,60887,60980,63123,66162,67003,68697,68852,69061,69307,69413,69990,70098,70571,71592,71719,71848,71869,71999,72178,72843,73170,73303,74164,74615,74628,74773,74814,74831,74893,75404,75739],"aspects":[978,2063,4385,5044,8128,11712,12047,12323,12469,18177,18609,23093,24601,24621,29330,29906,33450,34248,34331,34455,56720,57298,66189,66213,68006,71619,71848,72290,72759],"tilecoord":[68884,69120],"addkeystoagent":[70550],"honeydew":[63564],"uppercase":[44599,47163,49850,58287,58452,62010,72240],"manages":[1153,2216,2235,2549,3312,3839,3977,4390,6430,7179,7669,10326,10984,11199,11221,11879,14469,17092,17865,19189,22968,30899,33419,34675,35745,36093,36548,41747,49360,49778,50007,50354,50505,50955,58659,66035,66455,68476,69732,70867,70937],"settings\\application":[52505],"oncontrollercolliderhit":[8205],"inputcheckedussclassname":[61776],"__internal":[1271,28266,29985,30019,34657,34689,52659,72201,73531,74593],"yeslimited":[37947],"occludees":[30179],"essentially":[2088,4792,7045,7335,7765,8200,10009,20424,20633,22534,23940,24098,37731,38676,39333,39638,42352,43553,44669,44811,45206,47375,49626,52094,68601,72333,73900],"shaders":[1024,1672,3466,3505,5354,5523,5719,5818,5863,5946,6494,6510,6678,6687,6858,6934,8400,8811,9127,9483,9899,9970,10215,10557,11812,12357,12833,13360,13460,13770,13799,13920,14029,14577,14928,17539,17642,18756,19046,19129,19164,19229,20236,20395,20426,21054,21524,21716,22916,23245,23398,23555,23596,23619,25276,26662,27048,27118,27132,27549,27583,28839,28864,28875,28877,28961,29463,29481,29724,30291,30320,30364,31763,31872,32916,33477,34281,34415,35930,36237,37504,37556,37653,37668,37755,38283,38357,38422,40921,41166,41753,41785,41823,41835,41875,41916,41935,41948,41993,42006,42027,42050,42109,42179,42261,42311,42351,42400,42466,42546,42598,42688,42780,42875,42895,42946,43006,43019,43076,43082,43084,43096,43175,43334,43456,43492,43508,43654,43711,43870,43917,43955,44068,44231,44302,44343,44364,44457,44502,44671,44758,44829,44998,45087,45140,45183,45206,45403,45421,45448,45545,45564,45617,45715,45835,45911,46046,46137,46504,46528,46711,46818,47067,47176,48163,48621,48940,48984,49325,49462,49556,49575,49635,50007,50018,50077,50144,50394,50596,50932,51070,52488,52589,54129,68614,68775,71750,72773,72997,73447,73613,73689,74208,74261,74918,75187,75470],"topleft":[24306],"debugger's":[21859],"attempted":[18094,52528,67483],"1f":[6245,18264,18577,20473,25712,27350,48447,50338,52439,55854,57038,62301,62729,68154],"inputinjectionbrokered":[12664],"unhelpful":[5016],"endscrollview":[24017,59639],"quite":[2070,5056,13175,13734,14347,18292,22144,26931,27490,30345,32847,34738,34783,35315,37684,37706,38274,39509,41844,42449,42800,43165,43172,43999,45582,46158,46979,47306,48875,49550,49644,52673,66941,71869,72318],"expression":[3109,6025,7412,18651,20692,40298,40819,40833,41163,41307,41470,44989,73448,73964],"#222222":[63262],"crates":[7955,20420],"m_knob":[61778],"0x00a1dd64":[52563],"profiler":[562,609,633,653,3338,4730,5175,5922,6368,6397,6473,7483,7568,7575,11821,16524,16919,18318,19653,21107,21331,21870,22619,25044,25978,26060,26066,26357,27724,27897,27916,27936,28166,28443,29157,30511,30869,31155,31437,33393,33400,33454,33469,33509,33646,35026,35263,35365,35402,35464,35498,35602,35621,35683,35767,35789,35900,35923,35956,35967,36019,36117,36154,36196,36295,36353,36431,36461,38235,38341,41979,42226,49369,49763,52591,63469,64324,68051,68682,72081,72876,72936,73168,73299,73615,73695,74161,74235,74629,74784,74846,74848,74888],"breakout":[22327],"git":[3234,18818,22715,48067,49150,61570,69751,69803,69859,70091,70094,70135,70173,70230,70241,70288,70357,70584,70770,70875,71168,71192,71243,71482,71520,74181],"predefinedassemblyname":[38772],"powering":[75395],"picking":[2356,6811,13032,24579,26593,39138,39313,49470,51373,51543,51568,54690,57830,62827,65887,70236,74144],"sets":[131,314,442,487,562,585,1002,1867,2239,3476,3571,3696,5184,5352,5675,6275,6300,6368,6425,6473,6810,6963,7243,7787,8032,8615,9081,9490,9986,10095,10127,10378,11149,11176,11443,11715,12157,12308,12449,12755,12785,12866,13129,13276,13293,13339,13475,13601,13692,13713,13876,14134,16919,19238,19653,20264,20433,20687,21112,21339,21422,21623,21934,21988,21997,22808,23264,23498,24651,25113,25459,25635,26223,27034,28166,29340,30321,31592,31609,31644,32051,32090,32129,32307,33603,34041,34424,34485,34600,35450,36011,36058,36150,36224,36563,37055,38403,38471,39117,39922,40891,41187,41569,41723,42103,42116,42670,43045,43358,43712,43752,43808,44096,44164,44433,44515,44598,44624,44696,44815,44902,45096,45151,45305,46143,47951,47984,48022,48147,48685,48868,48884,49101,49714,49770,49849,50378,50528,50559,50683,50703,50730,50937,51080,51958,52250,53069,54114,54312,54680,54873,55578,56101,56933,57047,57168,57587,58073,58369,59855,61312,61497,61610,61823,62122,62210,62598,62855,63982,64096,64574,64825,64847,64865,64893,65148,65222,65246,65321,65570,65651,65755,66479,66585,66849,68283,68323,68350,68382,68439,69809,71183,71190,71211,71278,71297,71300,71344,71417,71446,71498,71511,71517,71902,72499,73049,73168,73449,73952,74049,74537,74629,74733,74789,75242,75455,75549,75901,76302],"#110":[66770],"multi_compile_fwdbase":[44577,47808],"ctrl+6":[39367],"suites":[21023],"binormals":[6622],"shortcutid":[51583],"nulling":[49633],"exclude":[360,1926,3039,3587,4356,6352,6401,7846,7972,8176,8273,8391,8776,9041,9502,9896,12735,14511,18673,19017,19168,22098,22488,24974,26646,26682,28493,30243,30265,33774,34594,35216,36091,37742,38572,38602,38636,40251,40662,41326,41448,41470,41874,43024,44695,45027,45423,46874,48132,51040,52615,53604,61533,70389,72063,74332],"shader_api_d3d11":[43936,44907],"tilepaletteclipboardelement":[51105],"indeed":[6758,13096,71874],"l00":[27471],"ssh\\id_ed25519":[70164],"outputs":[4755,5083,11177,23481,26035,27015,27549,28301,32767,33942,34155,40476,44023,45697,46722,47283,49399,50147,52008,70245],"_edgelength":[46983],"uri":[3383,12617,19366,21002,66390],"libgameassembly":[24625,49758],"mycallbackfunc_1":[62766],"havok":[708,15899,31128,31426,33769],"transfer":[1700,4230,4515,5182,14027,16330,22738,25942,26489,32659,33500,52102],"instantaneously":[25529],"numbersandpunctuation":[29688],"#m_height":[41560],"unbreakable":[7250,33603],"maskcontainer":[60631],"ondragenter":[57444],"iterate":[155,556,889,1227,1759,2685,6082,6107,6803,8670,16453,17759,20117,25733,32798,35877,35958,36570,39160,40690,42079,49086,51849,55116,69543],"executing":[10708,11570,18314,19129,19636,21040,21154,23623,25997,26299,26461,26478,29437,33287,33478,33797,34631,35172,40160,41349,41876,43297,45851,49280,51496,51559,51988,55927,70466],"damages":[56191],"saturate":[6538,32997,46219,61556],"gzip":[12398,71469,73025,73190,73319,73718,73937],"authorization":[4392,25672,52784,53811,73026,73375],"selectiongrid":[23951,59694],"yx":[14480],"‘#pragma":[31870],"restricted":[239,1378,1495,7841,8563,9700,10912,27509,34192,34361,38878,54093,67347,70967,73899,74581],"actionhandlers":[2468],"boxcollidersearches":[40739],"sway":[2211,48308,50612],"delete":[2256,2332,3619,3723,3865,3937,4194,4361,4491,4859,4937,5104,6352,6404,7060,9798,10064,10340,11392,12586,12871,18337,20554,20723,24669,25163,25545,25960,27843,28967,29004,29055,29237,29736,35130,36722,38912,39333,39351,40802,41302,41401,41428,41563,41844,43278,48369,48626,51148,51314,51884,52518,52631,52959,53232,53391,54082,54433,54551,54659,55899,57958,59996,66663,67059,67532,67972,68542,68852,69061,70226,70257,70340,70397,71398,73413,74151,74615,75059],"#090909":[63280],"hdrcolorpicker":[64486],"ampersand":[21659],"propertytoid":[5468,5613,6064],"immersion":[5064],"connect’s":[2834],"conten":[54263],"pluginimporter":[6705,15259],"buildwindowsplayer":[21062],"mi":[53839],"decline":[11978,68602],"redundant":[7018,10082,22510,23583,29736,33135,68541,74197,75439],"r8_snorm":[8466],"higher":[251,1569,1784,1944,2088,4257,4964,6139,6344,7017,7486,7594,7603,7611,7628,7637,7648,7660,7795,8004,8236,8387,8568,8590,9060,9171,9229,9457,9536,9693,9875,9965,9998,10088,10230,10579,10724,10740,11177,11319,11484,11519,11534,11607,11707,12354,12895,13133,13243,13477,13597,13665,13679,13760,13794,13863,14134,14296,14320,14545,14581,14988,15035,18319,19286,20246,21550,21586,21938,22043,22117,22470,23573,24763,26050,26058,26683,26947,26972,27220,27299,28467,29363,29721,29880,30478,31795,31870,32106,32216,32283,32729,33672,34281,34497,35931,36011,36203,36501,36593,36712,37365,37700,37740,38355,38430,38498,39825,40744,41343,41427,41524,42769,43117,45294,47454,48306,48875,49450,49510,49545,49629,49659,50058,50378,50435,50561,50670,50685,50960,51013,51168,51990,52126,52943,54705,57797,58407,58440,60219,61526,63820,66043,66556,67183,70246,70295,70902,71877,73345,74199,74777],"sv":[53650],"latter":[8368,12889,28677,47416],"extending":[734,1018,6761,20002,20098,21380,22740,23622,24166,26720,52239,58904],"ienumerator":[2824,3357,3554,15735,18271,24870,25703,25943,52602,67510,68098,68293,68333,68360,68394,68449,72585,73103,76285],"d_in_foldout_on":[63452],"frustum":[6152,6723,6762,6769,8036,8120,9528,12833,18613,21963,22234,22785,26011,30140,30202,30265,30352,33536,38242,43114,43139,43192,47026,47093,54769,65997],"successive":[9129,11844,23525,62014,66605,70910],"traps":[34194],"travelling":[31686],"rendererfake":[15316],"#absancestor":[35119],"frictionjoint2d":[9325,15217],"assetmoveinfo":[19569],"signconfig":[23509],"onset":[10375],"transitionstartevent":[62405,62595],"port":[644,858,8066,10989,11043,11204,11229,18481,28420,35807,52645,52735,66229,66571,74340,74824],"#6e3925":[54328],"supported":[150,345,438,532,553,679,697,720,1199,1213,1568,1614,2333,2980,3065,3500,4499,4672,4726,4766,4777,4997,6878,7763,7900,8024,8436,8616,9086,9247,9462,10138,10762,11677,11743,12093,12346,12588,12805,12918,13204,13435,13945,14011,14303,14819,14842,15700,16091,16330,16579,17370,17752,18038,18398,18481,18611,18818,19214,19297,19342,20228,20392,20447,20680,21087,21193,21485,21940,21962,22405,23543,23618,23627,24511,24646,24933,25038,25255,25623,26690,26787,27141,27526,27648,28064,28262,28801,29112,30311,31013,31613,32705,34207,34256,34337,34481,34540,36156,36541,36608,36782,37971,38273,38347,38428,38435,38624,39526,39638,39934,40325,40452,40594,40828,41462,41921,43458,43728,43801,44054,44240,44995,45075,45211,45419,45477,45523,45716,47163,48517,48617,49772,49844,49884,50030,50083,50159,50396,50666,51134,51233,52096,52607,52772,52815,52943,53014,53081,53297,54025,54443,54813,55495,55621,58313,58459,58702,58856,59579,60211,60628,61445,61568,62004,62230,62872,63505,63746,63960,65764,66502,66909,66937,66975,67248,67661,67880,68462,68494,68676,68777,68922,69165,69337,69443,69509,69864,70608,70761,70955,71086,71136,71361,71423,71749,72110,72129,72474,72616,72729,72787,72952,73031,73122,73165,73309,73319,73440,73596,73626,73643,73687,73900,74044,74408,74508,74925,74990,75077,75134,75162,75249,75280,75297,75487,75991,76094],"gridbrusheditor":[51494,68633],"folded":[2429],"appeal":[53371],"uploadhandlerraw":[68263,68385,68441],"profile_type":[25696],"horizon":[26864,42771],"_knee":[46672],"subsystems":[17788,27979,29573,35995,36220,73393,74711,75107,75242,75253,75390,75915,75945,75991,76092],"inflated":[18231],"sceneid":[11094],"originally":[2179,3254,7015,26253,45599,67729,69337,69443,71148],"springjoint":[13668,15137],"surf":[23303,29529,31888,33023,46148,46541,46760,46844],"late":[7722,7743,26302,26596,48533,48578,66318,72931,74365],"thu":[66779],"running":[234,706,849,1273,1378,1484,1920,1966,2131,2197,2347,2722,2839,3553,4387,4866,5269,6133,6318,6454,6897,7927,8972,9066,9138,9211,9416,9718,10744,10809,11053,11087,11166,11176,11191,11674,11707,12220,12320,12473,13038,14351,14560,15700,15814,17606,18131,18277,19028,19052,19128,19138,19258,19382,19635,20457,20777,21052,21296,21853,22130,22349,23797,25521,25980,26084,26264,26291,26472,27629,28135,28373,28639,30154,30326,30886,31634,33387,33403,33474,33509,33842,34203,34261,34342,34468,34698,34984,35690,35795,35926,36027,36128,36168,36204,36488,38275,38289,38350,38819,40541,40629,40680,41030,41181,42342,44001,44296,45302,45523,46829,48068,48335,49394,49642,49738,50170,51033,51716,51952,52524,52609,52747,66100,66199,66225,66343,66355,66396,66457,66563,66824,66855,67532,67570,67707,69713,69787,69854,69874,69957,70120,70150,70175,70538,70916,72217,72243,72687,73132,73175,73632,73702,74014,74503,74535,74583,74744,74850,74920,75191,75440],"basis'":[64089],"scrollbars":[9571,20565,23984,39673,39765,59177,65941],"colorchangerclass":[62367],"telemetry":[27938],"qooappviveport":[53446],"netstandard":[33837,66470],"permits":[3441,6138,68212,68406],"webcamdevice":[73101],"xrhandtrackingsubsystem":[75097],"branding":[4261,12042,12441,52717],"iterates":[47163,75544],"car_root":[74420],"foundnegativedamage":[56192],"assigning":[2815,3463,3513,8765,9921,10029,12777,20662,21565,22239,25583,26613,27323,28850,29809,30485,32360,35428,42201,42387,43219,44197,44319,44589,44766,44783,45104,45182,45398,45516,45939,45958,48987,51012,58825,62770,64118,67894,72480,74899],"l11":[27472],"prototype":[78,1989,4876,5829,6056,6832,13628,31193,33583,48226,50452,50582,72149],"long":[1566,1962,2192,2409,2571,2665,3571,3680,3734,4129,4567,4865,4994,6033,6208,6419,7508,9404,9966,10826,11844,13093,14295,14717,15857,18076,18147,18258,18503,20117,20420,21006,22085,22145,22476,23779,23890,24751,25043,25238,26077,26358,26448,27263,28797,29154,29566,31366,31838,33083,33382,33399,33478,33599,34994,35250,35557,35714,35878,36084,36334,37581,37714,41836,43239,44996,48335,49150,50677,52326,52766,54672,55501,55554,55642,55806,58084,62043,62485,62847,64362,64914,65552,67738,68201,70211,70243,73633,74407,74548,75397,75508,75909,76090],"exitcode":[66859],"weightings":[13059,32261],"simpleruntimeui":[58600,58667],"#e7e7e7":[63358],"alleyways":[49437],"xx":[27473],"msaatex":[45482],"rg32i":[8470],"trickier":[6211],"decode":[258,7484,9971,11815,19407,27119,27134,34281,35993,44072,45166,46524,47404],"vertical":[1886,2025,2072,2300,5116,6267,6291,6359,6747,7088,8028,8171,8617,8989,9569,9830,10086,10897,11165,12115,12811,12884,13062,13215,14800,17968,18491,20562,21162,22687,23972,24297,24743,25065,25803,28355,30164,30555,30832,32257,32677,33528,34759,36444,36548,39461,39545,39740,39770,39815,40006,40050,40127,44832,45252,49339,54224,54628,54729,55864,58365,59713,62018,62199,64179,64879,65154,65166,65325,65937,65982,66000,66334,74438],"__half":[14806],"most":[4,75,387,554,1393,1761,1893,1982,2086,2194,2215,2232,2296,2360,2764,2959,3439,3451,3469,3501,3579,3707,3981,4065,4327,4372,4500,4584,4652,4774,4811,4975,5046,5158,5291,5461,5606,5730,5736,5832,5945,5994,6096,6121,6362,6691,6725,6811,7178,7615,7763,7784,7874,8198,8245,8373,8568,8616,8882,9069,9134,9370,9457,9762,9773,9894,10010,10114,10533,10811,11075,11309,11613,11667,11738,12416,12975,13417,13616,14232,14319,14818,15859,17759,18255,18343,18362,18481,18575,18662,18819,19130,19239,20260,20381,20670,21142,21154,21322,21514,22010,22170,22496,23270,23560,23816,24601,24621,24734,24796,24984,25064,25144,25163,25194,25273,25328,25598,25622,25692,25855,26040,26451,26678,26799,26953,27509,27754,27757,28439,28796,28856,28868,28918,29095,29133,29181,29334,29678,29761,29861,30268,30280,30292,30321,30363,30414,30900,30916,31646,31702,32078,32141,32611,32705,33008,33290,33395,33415,33440,33450,33473,33524,33527,33575,33655,33842,33877,34159,34209,34425,34523,34596,34668,34997,35261,35275,35700,35829,36116,36338,36508,36595,36636,36687,37322,37373,37492,37667,37708,38287,38349,38404,38425,38435,38437,38462,38501,38541,38652,38858,38905,39003,39098,39297,39662,39757,39931,40528,40643,40671,41278,41462,41609,42010,42262,42354,42812,43455,43776,43973,44054,44233,44371,44723,44788,44830,45176,45200,45206,45579,45632,45697,45844,45858,46529,47259,47908,48067,48174,48375,48510,48538,48593,48690,49048,49524,49593,49636,49730,49740,49765,50366,50412,50660,50756,50929,51035,51236,51708,51785,51976,52097,52246,52478,52546,53097,53324,54208,54259,54543,54611,54729,55159,55497,55886,57821,58396,58447,58859,59501,59828,61470,62879,63708,63735,64350,64697,64761,65733,65885,65925,66178,66233,66405,66569,66852,66960,67019,67130,67230,67400,67841,68463,68580,68799,68880,69116,69303,69409,69746,70236,70312,70341,71028,71166,71233,71504,71551,71626,71773,71811,71873,71896,72290,72364,72375,72438,72497,72635,72715,72736,72799,72866,72916,72948,72986,73075,73145,73447,73632,73687,73702,73896,74171,74581,75080,75191,75485,76138],"houdini":[22938,50411,50648],"triangular":[355,22624,24774,54722],"routines":[36816],"multi_compile_fwdadd_fullshadows":[38399,44580],"kunityxrrendertextureflagswriteonly":[75419],"decompressedonload":[73089],"captureeventstestwindow":[55672],"inlinestyle":[54407,61630],"committing":[5017],"leaves'":[52182],"colouring":[50932],"key_id":[66144],"fallbacks":[9262,42176,44066,54153,58425],"large":[501,2360,3229,3299,3723,4563,4866,5726,5810,5964,5984,6121,6807,6936,7482,7549,7561,8086,8598,9228,9260,9489,10010,10083,10107,10711,11320,11335,11459,11518,11769,12087,12450,12940,13306,13898,13962,14702,14965,18104,18226,18514,19454,20237,20432,20689,21605,22144,22822,24052,24580,24753,24977,25284,26574,26703,26926,26990,27015,27322,27341,27600,28971,29167,29568,29731,29882,30048,30180,30327,30367,31863,32180,33297,33382,33400,33435,33652,33885,34897,35126,35337,35684,35931,36116,36464,36690,37619,37668,37710,38293,38346,38637,39138,39308,39671,39740,39768,39964,40537,41815,41844,42101,42813,43019,43113,43193,44936,46979,48162,48593,48630,49357,49478,49495,49518,49659,49713,49849,50008,50094,50528,50620,50956,50996,51155,52013,52099,52230,52250,52601,52984,54694,58115,58396,60653,61333,61556,63245,64328,66006,66700,68110,68893,69131,69302,69408,69813,70464,70738,71872,72462,72476,72497,72733,73168,73208,73333,73417,73622,74142,74724,75794],"handling":[1031,1375,1997,4445,4966,5984,11635,12971,17788,21189,21395,23189,24470,24826,25346,25769,26041,26495,27639,29421,29681,33008,35339,37183,38767,43286,43978,44080,45040,46780,47952,48165,48229,48376,51115,51588,51966,52393,55739,56072,57823,57853,58022,58173,58997,60211,60987,61502,61756,62189,64890,65900,66751,67136,67271,67536,67552,68086,68458,73285,73478,74546,75079,75226,75428,75581],"chmod":[28234,69983],"palette'":[51142,51394],"domains":[6133,69888],"skewed":[10593,14712,15857],"illumination’":[26790],"excludes":[5120,13034,30265,40316,40854,41373,41791,44688,45017,61557,66467,71105],"dir":[8686,29629,40713,66707,68914,69155],"coreapplicationview":[74747],"blendop":[21731,42672,43728,43799],"plate":[13880],"horizontallayoutgroup":[36439,39589],"clientdisconnected":[66301],"pointeruphandler":[56899],"endtogglegroup":[20913,59640],"cancelling":[39399],"intercollision":[8341],"composing":[8383,44957,68458],"completing":[26359,26375,28778,35357,67136,67154,67595],"electrodes":[32196],"spherically":[42731],"certainly":[2086],"show":[73,200,249,1378,1418,1511,1880,2088,2247,2259,2294,2329,2409,2429,2485,3740,4314,4595,4805,5033,5305,5999,7167,7940,9098,10059,10236,10493,11011,11050,11122,11152,11163,11292,11310,11398,11468,11562,11767,12086,12276,12402,12450,13360,13462,13797,16075,18131,19937,20605,20810,20878,20967,21240,21319,21736,22051,22139,22227,22466,23717,24078,24578,25054,25284,25352,25400,25527,25631,26725,27022,27330,27554,27920,27943,28205,28421,28677,29678,29879,30050,30248,31014,33687,33906,34893,35029,35261,35384,35498,35679,35691,36047,36480,36717,37688,37700,37723,38281,38860,39353,39494,39627,39669,39723,39729,40641,40957,41376,41425,41491,41544,41611,41839,41982,43235,43591,44066,45673,46137,46803,47377,48058,48163,48382,48682,49148,49337,49481,49517,49626,49913,50403,51089,51558,51582,51614,52226,52345,52577,52812,53203,53409,54592,55186,55332,55807,55939,56181,56476,56551,56703,57007,57537,58394,62025,62814,64641,66018,66332,66383,66855,67053,67400,68105,68339,68551,68963,69210,70239,70273,70344,70932,71301,71619,71679,71868,72150,72179,72300,72384,72517,72747,72789,75145,75969,76086],"goldenrod":[63561],"vertexinputsimple":[47913],"color_red":[42118,43049],"spare":[29153,35765],"universalrenderpipeline":[38208,45998],"lightevent":[23626],"advantages":[11434,20238,20381,24494,25496,27140,34193,38639,39733,41793,41884,43020,44936,49451,56670,58732,73460],"targetbox":[55851],"monolithic":[3489],"parametric":[7692,17000],"sw":[53649],"connectionid":[11005,11225],"power":[1761,5879,8008,9309,10134,10456,12216,12409,13202,14979,16043,17326,18511,21105,22165,25262,26042,28867,29467,29784,30376,31721,34233,34820,34994,38621,42548,44231,45578,46202,46728,50034,50127,50486,50688,50933,59506,64979,64992,67168,72331,72497,72715,73248],"isstunned":[40745],"ops":[66772],"gl_ext_texture_rg":[14449],"confusion":[1378,4467,6813,21501,43618,51342],"d3d9":[43975],"robert":[4979,27478],"nearest":[9399,9515,11578,12044,13120,13217,18976,23668,27320,27334,27484,32307,45244,48648],"currently":[1153,1497,1995,2232,2268,2297,2324,2392,2423,2990,3252,3448,3518,3804,3872,4063,4231,4672,5151,6140,6351,6402,6756,7314,7390,7485,7816,7937,8311,8811,9522,10698,11057,11208,11360,11468,12358,12627,12866,13714,13818,13909,14721,15711,15982,17539,18379,18466,18612,18980,19598,19674,20594,20632,21099,21173,21843,22405,24107,24792,25064,25100,25399,26026,26074,26707,27738,28052,28834,29680,30050,30261,30897,32849,33660,33812,34190,34292,35050,35390,36094,36488,36589,36696,37607,37744,38273,39196,39472,39512,39807,39822,40001,40094,40104,40279,41693,41954,42208,43358,43976,44919,45040,45253,46816,47087,47750,48162,48583,48607,48617,48652,49173,50537,50585,50921,51094,51262,51387,51537,51560,51594,51874,52101,52174,52466,52576,52766,53007,54416,54730,56712,57244,57457,57829,57859,59467,59541,59749,59815,60381,60510,60790,61824,65708,65931,66255,66379,66520,66696,66904,67364,67730,68263,69570,70746,70972,71192,71388,71902,72180,72521,72787,72916,73094,73440,73499,73626,74039,74346,74744,75187,75242,75487,75896,75975,76087,76125],"compback":[45863],"unmodified":[7490,25177,44097,47306,66774],"pointstopixels":[59683],"ground":[1886,6318,6833,8196,8834,10087,10737,11521,13093,13220,13899,14973,22186,22728,25292,25608,26864,26928,27331,29630,32316,32343,33538,37685,38089,42771,43183,47144,49425,49653,50322,50376,50543,50601,50946,51214,69337,69443,72297,74418],"maxtexturesize":[19761],"datafile":[74092],"“factory”":[43316],"softparticles_on":[32970,44586],"scoped":[11357,18819,27992,31604,33286,69986,70184,70337,70361,70878,70939,71190,71289,71370,71453,71463,71480,71540],"sums":[2086],"tankeffectsdetailsviewcontroller":[35529],"centerrectusingsinglelineheight":[52416],"foldout":[2418,14001,36059,54557,54692,55218,55444,55509,58743,59598,63451,64635,65711],"incurs":[20381,35692,42178,51052,55512],"mypackage1":[70601],"audiogroups":[4850,5022,5095],"onprerender":[21355,38196],"intercepts":[61302,67483],"gizmo":[7755,8222,8231,8499,10122,11557,14679,14963,19448,22052,22178,22189,22230,22789,23682,30781,33665,34770,35071,39247,51405,51888,74324],"examplesubshadertagkey":[45950],"s_alloc":[27892],"30db":[7520],"encapsulation":[56730],"registerproviderforgraphicsthread":[75940],"compositecollider2d":[8385,15086,74184],"scrollview's":[65195],"remembers":[18315,35030,36481,65714],"api’s":[17092],"presetpath":[19498],"streamingcontroller":[13826,15346,50965],"unitysendmessage":[1450,34709,66858],"contexthotkeys":[61403],"hc":[3293],"globalkeyword":[42057],"sparser":[50589],"m_staticeditorflags":[21657,76433],"characterize":[65891],"10mb":[51031],"space_frigate_0":[3753],"ptr":[27861],"physics2d":[6066,11550,16697,30932,35270,51237,51845],"#atitle":[35112],"managing":[7,812,1950,3425,4029,4113,4385,4483,6399,11606,16060,21190,22715,24798,30381,30442,30475,33082,34195,34674,39099,39179,41871,42103,43227,52771,52917,52951,53079,53587,54632,54869,54892,61958,66047,66189,66213,66948,67041,67894,68073,68827,69072,70945,75249,75318,75429,75989,76300],"deltas":[368,38672],"rise":[37327],"unity_transfer_fog":[10189,32989,47223],"sourcegear":[35096],"vertexinput":[23257,47871],"r8g8b8a8_srgb":[554,61558],"“matches”":[66193],"onfocusintextfield":[58250],"scheduleasynccommands":[27732],"loadedasset":[3406],"jerks":[2067],"webgltemplates":[73919],"fixedbehaviourupdate":[35706],"tex":[8668,8924,13968,14040,29357,31958,43374,43983,44903],"showlobbygui":[11122],"platform":[263,385,435,546,594,624,697,905,948,1094,1273,1295,1484,1516,1623,1730,1771,2211,2772,2956,2985,3039,3252,3348,3466,3553,3569,3585,3804,4166,4539,4737,4774,4874,5699,5730,5911,5951,6046,6346,6392,6463,6683,6877,7385,7509,7763,8068,8433,9261,9321,10575,11652,11669,11700,12138,12343,12437,12866,13204,13580,13713,14010,14225,14303,14789,14842,16843,17062,17110,17773,17803,17818,18425,18480,18525,18720,18853,18907,19018,19048,19091,19120,19238,19271,19274,19302,19334,19364,19378,19636,19995,20048,20221,20242,21052,21150,21861,21877,22431,23381,23453,23611,24470,24928,24943,25173,25258,25312,25342,25741,25826,25835,25855,25908,26044,26588,27127,27637,27673,27765,28096,28151,29152,29345,29454,29561,29717,29814,29972,30008,30310,30853,31867,33395,33402,33440,33473,33515,33777,33876,34201,34241,34424,34484,34537,34639,34675,34684,35089,35714,35790,35917,35957,36031,36159,36204,36577,37270,37467,37674,37751,38275,38319,38715,39451,40186,40521,40544,41859,42224,42347,42957,43883,43914,43934,44053,44269,44310,44835,44991,45255,45294,45485,45564,45729,46817,48597,49148,49395,49461,49738,49752,50087,50173,50322,50393,50421,50601,50666,50796,51985,52472,52682,52724,52730,53838,61921,66471,66584,66803,66831,66867,66901,66975,67163,67237,67395,67560,67576,67584,67607,67661,67706,67743,67773,67857,68467,68607,68752,68922,69165,69365,69469,69512,70042,71056,71748,71994,72004,72011,72065,72076,72089,72096,72110,72119,72125,72133,72136,72148,72172,72201,72207,72474,72616,72716,72729,72787,72852,72901,73000,73023,73122,73156,73205,73309,73454,73487,73598,73613,73642,73667,73701,73894,73910,74056,74121,74190,74504,74506,74578,74591,74619,74757,74799,74808,74814,74832,74882,74923,74990,75033,75132,75192,75290,75383,75389,75501,75918,76095],"applicationdidreceivememorywarning":[52582],"file’s":[3595,66774],"windowa":[57532],"streams":[4980,12666,27705,31763,31995,32292,32692,32915,35744,35933,50067,50147,68279],"bag":[36753,36930,37230,54527,57330,58062,60907,61007],"cleanup":[3430,35544],"iunityxrinputinterface":[75506],"overwrite":[1190,1842,3668,10633,12519,13475,24601,24624,26460,27793,34736,43618,44879,50001,53150,63069,68619,68898,69136,71332,72403,74300,74837],"scene2":[6334,19416,21122],"brand":[3859,4129,4172],"combination":[84,501,1007,1406,1917,2131,3982,4206,4548,4956,5239,8546,12866,15000,15836,20457,21412,22203,22770,23480,24787,25370,26092,26992,29360,30331,30518,35829,36005,39254,41901,42148,42960,43027,43209,43592,44063,44114,44511,45473,49447,49678,50153,51714,52590,58732,60381,60794,61610,63912,64297,64332,64696,65458,65742,66000,66951,71611,72299,73448,76146],"steerangle":[14959,74442],"communities":[17412],"short":[2089,4141,4160,4966,5166,5283,6000,7486,7594,7603,7611,7634,7643,7653,9418,10368,10744,10826,11160,11412,12449,13239,14581,14764,21676,28004,29154,32188,33081,33094,35992,36339,36569,39757,40064,41689,44238,50288,50592,52230,52766,53288,54551,56721,66155,66240,67243],"product_name":[49787,53602,73929,74115],"perfectly":[8188,8358,8569,10379,15838,49609,52044,52546,58387,74422],"bringwindowtoback":[59608],"etc2rgb":[14362],"shellexplosionparticlecountname":[35438,35488,35574],"allcaps":[62010],"hashset":[19570],"jobworkercount":[26367,35137],"clampu_repeatv":[45248],"simplicity":[13962,36880],"lt":[165,395,463,560,643,755,857,1548,1746,2464,2635,3566,4149,4276,4947,5681,6014,6161,6254,6383,7022,8443,8673,9348,10924,11020,11519,12235,13048,13336,13429,14105,14281,14363,14700,15805,18132,18296,18626,18748,18951,19324,19430,19528,20520,20828,21018,21528,21834,23009,23804,24177,25107,25559,25917,26117,26619,26624,26642,27360,27802,27919,27943,28509,28618,28672,28715,29285,29844,32251,32799,33114,33484,34114,34179,34237,35718,35807,36563,36658,37098,37676,38450,38743,39871,40315,40563,40711,41025,41174,41337,41466,41508,41766,43071,43662,43750,43808,43948,44069,44104,44142,44173,44327,44598,44634,44773,44802,44845,45002,45062,45401,45863,45945,46510,48124,48198,48726,49820,50560,50607,50635,51484,51607,51633,51709,51815,52407,52505,52551,53172,53636,53935,54430,54854,55126,55497,55606,55688,55726,55840,55857,56195,56691,56777,56964,57013,57312,58044,58704,58795,59596,59894,60451,61076,61179,61218,61333,61449,61547,61909,61922,61965,62008,62201,62418,62766,62972,63140,63244,63721,63863,63937,63989,64089,64653,65172,65525,65840,65867,66707,66853,67612,68230,68881,69117,69643,69679,69994,70077,70135,70281,70290,70325,70344,70399,70770,70823,70909,70928,71094,71569,71675,72014,72188,72227,72320,72752,73108,73251,73510,73635,73920,74575,74644,75767,76287],"describing":[19123,25682,27114,32104,32724],"worldpos":[10178,46322,46810,47393,49013],"village":[50998],"45x":[29340],"door's":[9713],"recipes":[5852],"gazeinput":[12677],"onresize":[74719],"endcapture":[74950],"+opengl":[45479],"favour":[7666,29153],"myimage":[63794,68143],"retargetable":[2183],"requireattributeusagesattribute":[28595],"scenarios":[6830,9145,11630,12642,15890,18929,19018,20422,25323,25522,26689,29150,33579,33783,36755,37385,38844,41370,46783,48329,48529,48537,50366,52546,65287,66907,68304,68310,68918,69159,69785,69845,70734,71020,71468,72282,74302,75872],"addresssuch":[53720],"swiping":[39260],"p_smoke":[40756],"reduced":[3250,3975,7022,13656,14823,14969,26094,30359,32117,33400,33502,33607,38897,41812,43022,43118,45037,48333,49496,51056,52057,64141,70230,70698,74141],"lifespan":[26450,29154],"_normalmap":[46836],"skin":[6910,8197,9137,9288,9552,9621,10498,12963,13477,18076,21465,21583,22085,24057,29765,42812,49476,49511,49630,71790],"collider2ds":[205],"handles":[269,401,518,717,739,1034,1091,1373,2268,2392,2441,5199,8499,11113,11221,13148,13359,13628,14123,14273,15831,18516,19448,20575,20736,20834,22180,22188,22624,24468,24774,25212,25816,26124,26383,27134,28457,29303,29467,30641,32372,33382,34794,35622,36432,36530,37381,38463,39804,40542,44229,44821,46418,47951,48224,48366,48514,48677,49358,49905,51202,51518,51849,52251,53949,54690,54722,55909,56021,56049,58336,59868,60219,60518,60540,60610,61907,62066,65922,66038,67070,67193,67585,67947,68090,68474,72924,72996,74205,75257],"#ffe4b5":[63606],"resulted":[12918,53506,68917,69158],"trends":[17045,36525],"mutes":[39333,41322,73056],"trackedposedriver":[75092,75107],"policy":[48683,53447,73030,73673],"portraitimage":[57653,59383],"demonstrated":[3740,6117,29974,52296,69679],"tilemapeditortoolwill":[51582],"longfield":[55471,55527,59671,64524,64633,64913,65057,65363,65565,69319,69425],"texture_pack_editor":[55141],"'chunks'":[42218],"grey":[29,2253,2384,2405,12331,27332,30260,34990,43234,49865,50945,56792,61070,63563,73913],"min16int2":[8471],"columnindexfortreefoldouts":[52376],"expertise":[31011,52558],"vms":[33419,33453],"pending":[4062,4253,4413,26463,36152,53474,67591,72444],"sheet":[2324,15844,22296,31920,32664,48364,48620,50881,50929,51135,51234,54388,54590,54637,54794,54876,56443,57356,58653,59277,61390,61522,61965,62087,63063,63683,63808,63981,64373,64550,65766],"irreversible":[52532],"batchrenderer":[5770,6915],"unify":[6079],"transdiffuse":[42862],"gfxthread_waitfornextframedesc":[75939],"editorprefs":[49964],"resize":[686,1210,1592,5353,5954,8066,11718,13209,13292,14286,23725,25355,27738,34237,34254,34335,34461,36696,39801,48514,48518,48635,54464,54712,59064,59868,62660,64179,65982,68889,69126,71911],"writetransforms":[21349],"double":[1770,1886,2332,6314,7861,7936,8801,9582,10439,10698,10826,13347,13534,13758,13907,14474,14559,18207,18366,20480,20545,20591,20668,21045,21688,27131,29728,30050,32262,33440,34573,35088,35782,36058,36449,36685,37850,38877,39218,39351,39863,40563,41218,41654,41784,42399,42440,42478,42515,42521,42713,42729,42754,43259,43414,43459,44178,44500,45203,45284,47179,48990,51184,53009,54310,54399,54537,54545,54657,54979,55497,56592,56791,57139,57414,58082,58667,59995,61613,63660,63726,64342,64511,68498,69961,70932,71330,71476,72530,73251,73717,75428,75987],"compiler":[2715,3810,7365,9281,9454,11882,13359,16137,16183,16933,18125,18315,18520,19036,19239,20179,21051,22860,24483,24918,24963,25849,26434,26473,27636,28061,29918,31649,33867,34425,34523,34640,37261,40557,40647,41791,41843,41880,41988,42132,43961,44244,44895,44978,46722,49763,50012,52610,66524,67695,68683,68951,69196,70571,71016,71174,71671,72839,73639,74603],"runonstart":[20168],"exert":[14969,38469],"subfolder2":[70697],"mayo":[75465],"18px":[57381,59316,63244,64896,65187],"theplayablegraph":[34169],"recognizes":[415,3894,5189,13628,20263,25148,34539,38751,45239,48224,58106,66979,70606,71475],"lightmaps":[5323,6802,9948,10013,10079,10107,10439,10648,11816,12351,20425,21007,22107,22156,22822,23274,23428,26808,26819,26931,26938,26956,27033,27073,27081,27087,27097,27113,27126,27169,27178,27187,27233,27266,27331,27483,27522,27746,27756,29485,29886,34282,34494,35059,36568,36685,37639,38362,38396,41784,42392,43965,45194,46396,46524,46790,46874,47134,47666,49491,51016,68671,68954,69200,69307,69413,73440],"productcatalog":[53960],"real":[24,317,2937,2958,3579,3740,4722,5160,5238,5866,5919,6149,6758,6801,7660,7763,8030,8568,8858,9191,9464,9588,9875,9947,10089,10648,11520,12718,12830,12932,13180,13196,13238,14233,14559,14707,14969,16453,17092,17788,19285,19938,19979,21534,21630,22107,22142,22397,23841,24489,26279,26787,26798,26809,26860,26919,26946,26961,27016,27035,27063,27082,27113,27157,27169,27187,27214,27266,27293,29466,29484,29705,30355,32093,32849,33404,33526,33583,34871,35029,35794,35920,36011,36223,36480,36632,37596,37639,37683,37704,37724,37790,38292,38324,38347,38458,38492,40508,42809,43110,43126,43130,43147,43172,44580,45074,45202,45623,48230,49453,49515,49570,49594,49640,50411,50809,52010,52120,52200,52275,52590,52766,53698,54015,54706,63105,66043,66183,66428,66811,66836,66869,66888,66903,67039,67258,67856,68043,72487,72921,72939,73619,74121,75108,75215,75366,75587],"lfo's":[7441,7458],"checkgetsecondarydatapointerandthrow":[26123,26217],"corrective":[2745],"weighted":[7944,13218,21541,74404],"infrastructure":[66403],"onpointerexit":[49888],"discussion":[6042,42818,52101],"relies":[1352,1621,2180,2665,6810,11192,14726,18225,22107,29997,30864,39440,46122,51009,54886,55549,56692,69513,73029,73487,73837],"zxy":[9547],"computed":[4819,7302,10127,18232,18612,22532,27131,37851,38346,38384,38655,40878,41289,43897,44427,45587,46368,46775,47421,54871,59855,68955,69201],"weeks":[4356],"getemissivescolumns":[26760],"bunch":[45807],"robotics":[16542,33610],"getcollidercount":[32830],"texturecoordinates":[47862],"splines":[17543,24711,29764,31094,31458,74164],"enumerator":[2667,26118],"apple’s":[2834,25672,26073,27799,34661,49778,52706,67110,67216,67560,72786,74199,74952],"downloadhandlers":[68075,68309],"generator":[38685,50378,70098],"joined":[8149,9301,10001,13164,16091,64342],"atlasname":[48717],"wtangent":[47488],"“indoors”":[71882],"#include_with_pragmas":[41990,42428,44993],"json":[3020,3451,4509,6033,6704,13951,16667,17045,17185,18635,18682,18688,18761,18830,18933,19666,22993,27809,31137,34617,38684,41541,52888,53882,67003,67460,67603,67691,69724,70211,70290,70382,70586,70782,70801,70869,70980,71029,71330,71378,73188,73238,73715,73924,74114,75913,75975,76070],"v3":[67261],"provisioning":[12154,52696],"squared":[9505,11600,12718,26891,36636,38077,47132,50479,72319],"sprite’s":[140,187,7965,12310,12728,13748,18969,48637,48641,48874,50909],"\\tempstate":[72227],"pushed":[2279,2413,9884,29973,37619,53303],"“meta”":[28918],"applicationmodel":[12661],"expected":[478,3254,4768,4978,8094,8118,9281,11510,13462,14882,14951,18100,18230,18929,19028,21938,22178,23525,24471,25328,25845,26072,26712,26990,29771,33515,33619,34897,43990,44270,45202,50652,53210,54269,66135,68905,69145,69634,70823,71802,75432,75595],"showascontext":[30607],"idling":[2239,9138,22538,34994,36055,48339,49642],"fragments":[44134,47951],"sortable":[41550],"encouraged":[5684],"right_bottom":[64288],"installed":[80,165,220,468,1031,1622,2967,3039,6356,6408,6468,7511,7777,9256,9982,11669,12683,14470,19348,19361,21024,21985,24643,24950,25194,25343,25462,26036,26908,27638,28383,28618,28688,28726,28763,31013,33828,35146,37381,38273,38752,40303,41436,44671,44770,45181,45943,48060,50197,50921,51119,51344,52631,52939,53810,54741,66700,66974,67149,67482,68629,68703,69380,69484,69537,69735,70043,70096,70211,70241,70295,70325,70331,70467,70592,70746,70830,71128,71190,71215,71293,71302,71387,71392,71415,71480,71517,72189,72830,72862,72968,73084,73452,73839,74537,74661,74777,74962,74990,75114,75132,75224,75323],"basemaskfield":[55415],"lizard":[52289],"natural":[4866,6314,7981,8502,9879,10483,14778,15020,22948,27507,31760,37407,48287,49627,50522,50595,71783],"generated'":[67692],"quickest":[74776,75037],"uninstaller":[25465],"builduser":[70481],"drawpreviewtexture":[59623],"loop’s":[6194],"refractions":[5856,37856],"bus":[4792],"sci":[42896],"apk'":[53107],"ration":[58407],"orbiting":[32905,39263],"incompatibilities":[8437],"iunityinterface":[27888,29926],"framerates":[2179,75068],"struct":[332,1050,1680,2637,4742,4912,5203,5380,5496,6514,8729,10167,14052,14173,19086,20349,23307,26026,26135,26263,26310,26398,26499,27366,29533,31650,31895,32926,33299,34158,36781,36798,36858,39873,40208,40569,40681,42052,43337,43928,44038,44403,44822,45679,46041,46149,46542,46724,46846,47208,47920,49005,52395,53926,54978,55253,55317,55621,62972,63220,72040,75757,76096],"bassline":[5006],"settargetaudiosource":[72571],"display0":[75277,75931,75946,76078],"comprised":[51122,68607],"“ragdoll”":[29391],"mutually":[3012,9720,33572,40097,40226,42104,42116,64183,65934,68311,75264],"disclaimer":[5014,40086],"vfxmanager":[14784,15326],"utilization":[6054,19124],"unloads":[3432,5330,5769,30215,30899,39929,66823,73620],"wind":[2347,14778,15019,16831,22947,30949,31802,31823,38059,48267,50368,50467,50584,52165,52216],"“caution”":[43288],"thinks":[18098,70571],"depict":[31662,72743],"3ds":[1866,1931,1994,2177,2188,6702,7014,9137,16345,21425,21486,24673,25205,29753,71768],"deserializes":[33501,39880],"complaints":[4445],"altool":[28080,28307,28316],"planetgroup":[59944],"spawnmanagerscriptableobject":[13318],"consolidates":[48354,54055],"enumerates":[76208],"anisox":[45250],"iwatch":[12230],"product's":[67196],"androidsdkversions":[1518],"unityxrinputdevicestate":[75540],"npm's":[70806,70984],"guess":[55512],"slategray":[63639],"chart's":[27054],"rgba8i":[8469],"wheel":[724,1952,7183,9754,10512,14942,14978,15891,20561,22043,23118,26059,26594,36057,39241,39293,39775,40036,49897,51379,54460,54499,57840,60366,72331,74415],"stackallocators":[29251],"world":[46,67,140,1948,2064,2239,2937,2958,5046,6150,6723,6750,6758,6959,7204,7323,7620,7660,7785,8003,8012,8107,8182,8199,8229,8291,8512,8609,9012,9148,9177,9307,9528,9532,9685,9744,10128,10206,10399,11520,11600,12515,12718,12830,13136,13174,13239,13573,13684,13861,14189,14502,14581,14670,14990,16060,17788,18383,18403,20418,20785,20898,21453,21575,21629,21964,22530,23285,23841,24163,24559,24899,26042,26279,26580,26919,27063,29750,30054,30867,31668,31835,31856,32130,32165,32257,32727,32903,33399,33526,33666,34805,34871,35337,36632,37349,37531,37625,37756,38361,38458,38568,38598,38653,39428,40508,42691,42809,43140,43879,44234,45198,45573,46074,46321,46810,47081,47337,48275,49453,49594,49640,49668,50411,50476,50538,50648,50889,52011,52275,54128,54765,60793,61661,62146,62704,62827,64781,64825,65299,65673,65999,66393,68980,69227,71873,71982,72487,72946,73504,74906,75107,75366,75587,76304],"trainee":[2998],"secure":[395,3341,11191,17282,22964,28248,29706,70174,73115,73496],"grained":[21326,26510,30352,37654,50950,64450,64756,67272,74259],"downsampling":[4956],"memory_filename":[73948,74107],"font_semi_small_size":[63239],"ogv":[6715,72586,72629],"eat":[23185],"exposure":[8719,22166,22769,24515,34862,37954,42704,42725,42747,42772],"emitting":[7446,7463,14597,18528,31856,32114,32155,32479,42262,42548],"rename":[3629,3847,3894,4858,5111,12896,13847,18337,20754,24535,24894,25169,25490,25544,30462,35776,36725,48607,49762,52184,52526,54436,54659,58824,63074,66045,68543,68891,69128,71086,71707,73920,74903],"recttransforms":[13112],"materializes":[7329],"overlapcircle":[35312],"rich":[1980,2649,2937,4545,13991,17452,17642,39638,40051,49816,54151,55857,58652,61442,61909,61920,61965,62004,64731,65758,65981,67651,76095],"audioimporter":[6696,15243],"probuilder":[4520,11423,16997,29398,31023,31448,37548,70822],"env":[17903,64431,66630,70161],"m_prefabparentobject":[21644,76420],"pointerclick":[40033,40123],"onvalidate":[18029,21312,27357,39015,54288],"prompt":[1662,15852,17931,19627,21021,28627,28685,28718,35860,36558,37272,43302,65850,67272,67365,69788,69855,69861,69956,70048,70504,73288],"passed":[1919,3538,4845,4932,6102,6182,9839,11612,13062,20237,21154,21756,26138,26488,27567,27947,29420,29593,30560,32933,33228,35532,35714,38370,39347,39758,39992,40084,40476,40893,41189,42405,44368,45153,45725,46369,47103,47371,47903,48185,48965,49880,50500,51582,51785,51958,52276,52651,53473,56022,57330,58928,60788,66151,68160,68778,72357,75145,75271,75516,75933],"retargeted":[7127],"m_clearflags":[76484],"navy":[49870,63608],"nighttime":[26928],"unity_flatten":[43962],"resonance":[7592,7601,7611,7632,7641,7653,72889],"engines":[2347,33764,35178,40764,41674],"merging":[1003,9075,15827,20381,27057,36042,36188,48054,50094,72453],"checkname":[56219],"scrollviewvector":[24009],"resumes":[3695,18277,21368,33401,35727,52044],"util":[799,1477,4616],"incrwrap":[45903],"wr":[68147,68250,68270],"undoes":[18982,41729,43221,48654],"fire2":[20500],"cone":[8231,8368,9871,21503,26915,32372,37788,43154,71809],"someassetbundle":[25945],"net_legacy":[33831],"multiplum":[13988],"getintroductoryprice":[67739],"buttonposition":[49984],"blocklists":[73139],"attachments":[4401,29731],"situations":[1404,1611,1761,1895,1982,2191,2215,3772,5162,5730,5770,7928,8198,9368,9515,9986,10082,10135,10465,11271,12971,13058,13249,13457,13613,14764,18255,21164,23456,24169,25095,25523,26121,27322,27678,28589,28606,29861,31646,32609,33088,33450,35002,37618,38402,38510,38851,39890,42810,43185,44567,44830,45585,49565,50686,50703,50955,52491,52546,55060,59176,64451,66197,68626,68947,69191,70446,70734,71665,71973,72346,72476,72717,73631,73704],"robotic":[3013,7215,26567,33573],"_domain":[44553],"breakpoints":[28393,40653,72048,74337],"difficulties":[52511],"bmp":[4500,6713,18770,25296],"bx":[58354],"istempmemoryhandle":[26126],"playclipatpoint":[73073],"\\companyname\\productname\\crashes":[27793],"codeeasier":[6891],"responsiveness":[50584,68994,69241],"gregorian":[26079],"let":[7,772,2717,3346,4386,4875,6977,7020,8213,8553,10403,10768,11357,11447,12759,12866,13209,13234,13280,13297,13420,17126,18343,18404,21517,22634,23590,23710,24506,24796,26645,27824,28310,29594,30050,33399,34489,34980,37500,37536,37706,37725,38251,38461,38657,39451,39471,42333,43603,45091,45846,45932,48058,48295,48515,52047,52766,53376,53856,54018,55582,68527,68807,70325,70345,70976,71441,72758,73961,74206,75090,75127,75617,75807],"zoomspeed":[6742],"train’s":[31856],"wikipedia's":[14259],"migration":[21540,36736,48566,60350,68782],"reviews":[3999,4064,4374,6950,29164],"play's":[921],"getindex":[51645],"upscale":[74193],"registerstatdefinition":[76007],"creases":[26934,49540],"inversesquarednorangeattenuation":[36637],"integrating":[1190,6141,18232,21142,25727,41705,54020,66809,66834,66885,66903,67925,68797,74509],"vulkan":[748,1520,5703,8406,11803,14344,19301,20448,21080,21945,23552,23611,29830,34207,34296,34366,34486,36162,41851,42150,42210,43801,43941,44559,44983,45421,50092,50169,72986,74256,75903],"shadowprojection":[44959],"tutorials":[2185,4025,16423,16438,18360,18678,22559,23608,31267,33771,35963,37313,37511,40646,53562,67683,67979,71792,75383],"you're":[69,235,478,703,1599,4001,4256,4540,6265,6290,6856,12180,13347,13417,13628,16151,16933,17398,21322,21514,24297,25358,25401,26324,27307,27522,27607,28681,28719,28752,28774,28782,29809,29850,30365,33812,35054,38252,38456,39226,41836,41886,41963,43918,43959,44068,44296,45302,46816,48224,48693,48894,50180,50553,50613,52181,57921,58794,61390,66878,67921,68567,69448,70174,70516,70972,73205,73312,73478,73658,73690,73772,75829,75979],"focuscontrol":[59648],"lightmapped":[10651,20425,27082,38396,42397,45200,50498],"jdk":[1611,69369,69473],"los_angeles":[67463],"access_fine_location":[1263,1388],"yoursubset":[11918,12182,12369,12557,19222,34308,34394,34513],"audiolistener":[5020,5083,5226,7531,7562,7626,7637,7820,15093,22594,36014,72879,73035,76542],"lightpink":[63581],"tesla":[36608],"actuated":[75641],"scenecount":[40690],"generatepath":[40745],"difficulty":[17092,18509,39977,56159],"_intensity":[8717],"shine":[42243,42547,49626],"features…":[28383],"blends":[1888,6263,6283,6318,14724,21348,22450,26799,31992,34042,37881,38394,44345,50352,50697,71882],"italicize":[58320],"preset\\":[19521],"orbit":[31174,32905,39248,64179],"facesize":[8658],"grassy":[13899,50470],"oriented":[96,5721,5818,8122,16883,22866,26474,33749,33762,35258,37886,38661,39756,72765,74422,75618],"enumflagsfield":[55428,59642,64584,64585],"unityaudioeffect_releasecallback":[4907],"da":[53618],"bindstreamtransform":[68581],"playmode":[4663,4812,14963,21377,25670,35031,36045,36155,36482],"m_resolution":[76377],"__stdcall":[72191],"primaries":[34288,34501],"tilemap's":[14485,51182],"supportsgyroscope":[19714],"sar":[53666],"collision2d":[7970,8174,8389,8774,9039,11554,12733,14509,15284,35314],"string_format_m4102":[72029],"getmousebuttondown":[73266],"travels":[9870,10002,10100,57823],"terminal":[17931,21017,25915,27600,28232,28294,28615,28681,35860,36558,50186,52224,66692,67054,67527,69788,69855,69860,69956,69993,70084,70167,70174,70359,70651],"subdivision":[346],"normalized":[1883,2084,6723,7474,7931,8066,8684,8863,14726,29880,32090,36231,39721,43879,45586,46799,47372,50322,72315,75573],"discard":[1966,2192,4634,7492,7832,8078,11407,11891,12902,18070,22079,29898,32393,36294,39221,39919,41729,45583,45851,46766,48511,52850,52958,57330],"miss":[8222,18225,29947],"rtx":[37901],"encoded":[1568,4774,5224,7478,10083,14795,25276,25841,27467,27510,34361,34740,38369,42398,43887,43968,44071,45166,45202,47416,61557,67611,68952,69197,72679,72711],"meshes":[283,4506,4557,4772,5346,5355,5497,5727,5761,5762,5811,6807,7878,8347,10107,10350,10438,10533,10564,10633,12663,12960,13372,13451,13995,14245,16256,17000,17924,17960,19013,19129,19151,20378,20402,21448,21719,22060,22192,22456,23378,23596,24651,25139,25187,26012,26661,27011,27036,27088,27325,27490,27722,28838,29330,29383,29407,29718,29764,29775,29803,30330,31661,32259,32478,33883,35755,36212,37553,37677,38338,38403,41280,41342,41783,43174,44893,45521,45807,47026,47611,48267,48687,49363,49544,49668,49723,49817,50361,50465,50513,50936,51236,52192,60950,61018,64262,71772,72359,72748,74895,74907,75404,75740],"setnextcontrolname":[59695],"setupresourcesbuild":[2787],"subdirectories":[12812,24631,69705,70278],"proceduralmaterial":[15161],"noparse":[62028],"layoutelement":[39659,62798],"fp":[25491,41959],"computebuffer":[8427],"mechanics":[5898,13267,18328,18414,37596],"batchable":[20432],"probability":[13041,31795,32106,32660,32724,32872,72362],"candidates":[4355,11335,30180,31377,31614,37667,58117,58381,73238],"iinitializepotentialdraghandler":[49892],"interpolating":[2354,27334],"disconnects":[11111,11178,76130],"cycles":[1912,6318,9172,13680,13865,14989,18224,20243,22468,31793,32691,35732,37639,39132,51849],"coordinates":[290,5350,6297,6513,6723,7235,8048,8863,9003,9035,9168,9298,9532,9728,9838,10061,10274,13168,13241,13556,13674,13860,14037,14667,14984,20265,20691,20777,21221,22719,23817,24333,25171,29340,29608,29721,29880,31920,33607,39512,39721,41780,43705,43875,43930,44234,44831,45252,45573,45668,46122,46224,46760,47581,47911,48515,48623,50023,50057,50691,50946,51070,56099,58146,58467,59855,60390,60813,65730,66555,71959,74298,75573],"soloing":[7679],"resuming":[73041],"_ghashtable":[74556],"recent":[1621,4372,11844,13977,18982,19239,25064,34209,34274,34425,34523,34856,35829,39220,48164,48654,49730,52040,53097,67400,71216,71504,71626,73145],"f12":[73297],"degree":[257,2357,7304,7478,9171,11648,13679,13864,14988,23083,26561,26877,29902,36351,37289,37646,38555,39761,43205,50471,62311,72489],"discards":[12902,20633,39913,50512,51027,72421,73963],"nativeformatimporter":[4511,6703,15250],"cachecontrol":[73210],"clusterinfo":[31072],"script":[393,553,709,726,1463,1734,1888,1916,2006,2065,2192,2350,2704,2779,3253,3493,3525,3602,3729,3780,3862,3890,4713,4855,4876,5029,5165,5192,5959,6068,6368,6397,6475,6500,6944,6980,7025,7152,7365,7766,7875,7879,8086,8146,8203,8426,8574,8640,8648,8800,8972,9154,9190,9281,9328,9594,9653,9828,9920,10444,10688,10691,10718,10744,10805,10985,11149,11304,11344,11452,11550,11937,12229,12350,12472,12762,12969,13018,13130,13187,13283,13300,13311,13459,13709,13808,13956,14026,14085,14562,14686,14887,14976,15814,15851,17759,18112,18257,18362,18389,18570,19020,19040,19107,19235,19455,19617,19650,20125,20398,20438,20540,20738,20767,20865,20921,21031,21154,21200,21202,21296,21661,22018,22061,22104,22190,22234,22540,23563,23779,24030,24152,24195,24456,24474,24724,24799,25066,25399,25451,25504,25624,25694,25857,25938,25980,26039,26088,26635,26646,26923,27341,27532,27682,27756,28068,28168,28391,28867,29434,29566,29601,29678,29790,29835,29863,29906,29934,30001,30101,30145,30375,30530,31721,31763,32174,32657,32702,32767,32921,33137,33381,33482,33618,33655,33842,34184,34313,34421,34520,34536,34640,34676,34716,34903,34941,34984,35226,35414,35468,35500,35699,36252,36330,36400,36465,36633,36696,37287,37356,37576,37710,37724,37924,38464,38683,38819,38839,38944,38984,39032,39102,39178,39230,39312,39346,39446,39591,39637,39711,39714,39851,40155,40176,40429,40530,40616,40662,40674,41099,41899,41984,42170,42997,43374,44058,44210,44614,44868,45149,45569,45982,46878,47193,48165,48179,48533,48578,48690,48910,49394,49572,49650,49749,49905,50004,50148,50197,50289,50324,50965,51387,51427,51612,51621,51710,51951,52476,52551,54515,54842,54873,54923,54970,55075,55175,55244,55321,55377,55577,55673,55751,55826,55998,56041,56130,56218,56269,56323,56405,56483,56530,56603,56693,56744,56986,57210,57417,57645,58177,58230,58621,58728,58999,59374,59552,59720,59783,59904,60161,60436,60573,60680,60842,60890,61103,61197,61326,61594,61758,62132,62206,62637,62641,62760,62851,63829,63936,64320,64380,64698,64998,65700,65793,65973,66059,66190,66418,66458,66462,66922,67069,67190,67720,68131,68351,68542,68624,68781,68819,68902,69051,69304,69410,69957,70331,70710,70916,71606,71680,71920,71959,72005,72150,72229,72293,72430,72831,73176,73393,73418,73434,73501,73900,73944,74063,74453,74614,74629,74739,74791,74947,75024,75062,75109,75444,75946],"mymethod":[34700],"half":[554,2180,2356,5959,6266,8036,8149,8453,8739,10138,10337,12895,14350,14559,14728,14806,14863,19077,20210,23310,24519,26366,26509,27054,29168,29338,29466,29536,31900,33046,35937,36112,36365,36550,37958,39509,43881,43970,44085,44231,44870,45138,45571,46219,46560,46728,47372,48374,50528,51156,52013,52150,62316,63740,64141,72521,75446],"osxuniversal":[21060],"originaltransactionidentifier":[67819],"every":[234,289,518,564,1331,1541,1770,1894,2053,2163,2995,3087,3255,3306,3590,3940,4204,4245,4772,4818,5049,5260,5351,5726,6068,6208,6370,6427,6475,6683,6819,7015,7670,8846,8973,9127,9328,9488,9559,9762,9776,9875,10369,10444,10595,10691,11304,11557,11604,11676,12602,12884,12969,13018,13130,13213,13307,13475,14277,14663,14728,17976,18191,18292,18934,19035,19479,19782,20050,20237,20788,20920,21230,21337,21861,22011,22058,22118,22190,22282,22532,23383,23525,23779,23900,24169,24275,24467,24523,24946,25980,26247,26645,26717,26927,27315,27490,27648,28022,28168,28189,28789,29043,29091,29131,29248,29331,29714,29814,30265,30380,31652,31661,31852,32106,32172,32322,32729,32771,33099,33476,33816,34925,35411,35664,35794,36069,36464,36998,37344,37525,37685,37708,38402,38541,38655,39179,39357,40022,40112,40154,40176,40529,40676,40689,41330,41646,41835,41901,41993,42148,42715,42960,43047,43491,43527,43591,44386,44511,44810,47307,48227,49376,49755,49823,50150,50397,51156,51991,52250,54711,54897,55550,56724,57489,59193,59556,59729,60611,61096,61300,61522,61968,62022,62073,62609,62867,63729,64017,64332,64697,65137,65902,66193,66815,66839,68047,68607,68852,69061,69350,69454,69719,69789,69856,70011,70297,70497,70728,71446,71566,71898,72293,72394,72931,72986,73176,73631,73920,74190,74613,74631,74791,74839,74883,75068,76208],"findassets":[3768,13956,19519,59060],"clinical":[53724],"z++":[14105],"terminated":[2683,18015,68952,69197],"argument's":[68410],"unitycrashhandler64":[74610],"side2":[72355],"prefixing":[64370],"diminishes":[26919,36638],"m_halotexture":[76362],"float4s":[5449,5593],"slider":[199,4815,4875,7138,7323,7488,7940,7986,9567,9882,9999,10528,11244,11274,13551,13724,13758,14296,15000,18977,20724,20912,20969,21842,22043,22167,22224,23749,23964,24169,24407,24518,26591,28887,29543,31910,33054,35126,35198,36444,36696,39740,39819,39976,41616,45076,47607,48510,48649,49510,49555,49607,49629,50511,50528,50542,50559,50592,52121,52201,52438,55446,56982,57836,58858,59661,59735,62813,64265,64660,64955,65219,65244,65736,65936,68671],"destroyanimationclipanimation":[35763],"hybrid":[5721,5809,6817,17118,31129,48123,75204],"perforce":[9069,21045,22616,33061,48055,72375,72377],"shader_stage_domain":[43957],"imguievent":[59544],"corner":[1951,2008,2229,2245,3233,4475,4578,4857,8090,8222,8863,10135,10262,13106,13882,14599,14678,14788,20061,20611,21240,24299,24735,24747,24774,27108,29721,29851,29879,30198,30781,33649,34758,34787,34993,35785,36097,36685,36715,38324,39231,39468,39544,39724,48681,52227,53001,54418,54724,55865,56109,58354,58533,59868,61915,62211,66004,67940,68742,71970,72346],"scriptable":[1542,5730,5807,6482,6804,6915,8807,9433,12885,13485,13911,17110,17118,17126,17130,18024,19292,20385,20407,21958,23248,23385,23623,24503,24597,26716,28842,29459,30334,31047,31455,34491,35188,36182,38249,38265,38871,40149,40167,41939,42600,43000,43081,44205,44759,44811,46041,48909,48976,49144,49169,49175,49280,49308,49673,50136,50500,51223,51254,51325,51384,51426,51599,51620,51810,51862,68527,68777],"12x12":[14336],"unity_particle_instance_data":[32012],"reflections":[248,5856,7720,7741,7911,8096,8608,13120,22750,23637,25253,26856,34875,37683,37695,37724,37853,41782,41892,42811,46295,46766,47368,49423,49454,49470,49506,49562,49570,49609,49626,49636,71863],"overshooting":[11537,20571,50453],"activerenderpipelinetypechanged":[49219],"bla":[73517],"gameobjectrecorder":[15340],"deformers":[9137,21565,29765,71797],"getkeydown":[18280,18495,49233,73280],"lightingsimplespecular":[46624],"invalidating":[26129],"_mytexture":[45126],"loadadditively":[39207],"cancels":[60515,65081],"animated":[49,1876,1880,1912,1924,2063,2189,2211,2234,2284,2324,2415,2421,4956,5266,5961,6947,6996,7025,7163,10369,10731,10795,13813,14073,15020,16020,20539,21341,21571,21627,22460,24671,25204,29713,29775,29904,32165,32701,32934,35049,48335,51778,51792,54208,55214,71767,72773,74311],"getbehaviour":[34143,34185],"agreements":[23134,67523],"sinusoid":[7446,7463],"app":[391,409,478,492,524,540,557,573,580,690,715,786,841,898,939,944,967,1101,1181,1202,1232,1242,1355,1371,1489,1547,2763,2958,4510,4519,4961,6367,6470,9057,10443,11685,11803,12042,12333,12441,14951,16075,17042,17062,17092,17370,17985,18513,19318,19351,20863,21018,22329,23481,24609,25329,25333,25521,25692,25717,25751,25860,25897,25919,25980,26073,26105,27777,28104,28125,28126,28164,28201,28281,28620,28672,29444,30838,31037,31427,33883,34257,34338,34466,34698,36225,37667,37738,40539,43920,46510,48065,49752,50197,50534,51952,52508,52546,52696,52717,52736,52743,52754,52771,52812,52872,52921,52956,53128,53279,53686,53713,53786,53991,54002,66114,66436,66534,66802,66819,66841,66878,66911,66960,66964,67003,67016,67069,67146,67161,67229,67264,67340,67560,67611,67624,67641,67708,67733,67745,67824,67840,67924,68726,68863,69096,69975,70123,70822,70929,71677,72000,72087,72171,72931,73240,73894,73915,74384,74496,74623,74667,74753,74775,74799,74813,74851,74883,75067,75097,75133,75191,75231,75397,76108],"what’s":[3572,6396,35732,39150,39322,52792,53306,66160,74133],"_button":[58628],"payouttype":[67192],"access":[217,298,387,475,510,881,1131,1234,1370,1406,1487,1575,1645,2418,2462,2738,2896,3009,3293,3418,3553,3582,3721,3904,3950,4005,4026,4066,4223,4384,4516,4526,4665,4776,4980,5128,5168,5181,6194,6232,6393,6883,6935,6989,7624,8245,8427,8635,8647,8882,9262,9351,9765,9933,10163,10505,10575,10688,10711,10816,11875,12315,12437,12744,13105,13307,13417,13709,14031,14219,14318,17030,17045,18676,18812,19150,19617,19652,20233,20264,20398,20808,21029,21219,21393,21514,21883,21986,22061,22104,22222,22375,23257,23443,24983,25165,25672,25729,25814,25857,25963,26034,26041,26112,26247,26264,26289,26395,26434,26488,26496,26603,26689,27681,27767,27915,28061,28450,28607,28762,28798,28971,29583,29926,30005,30056,30096,30292,30396,30443,30489,30624,30900,31593,31650,31676,31739,31755,31773,31785,31810,31831,31848,32086,32101,32125,32149,32212,32245,32336,32354,32380,32602,32625,32645,32673,32720,32747,32883,32899,32933,33285,33382,33421,33457,33879,33891,34161,34597,34638,34645,34675,34760,35089,35462,35621,35960,36252,36399,36462,36697,36751,36855,37571,37622,37688,38251,38372,38866,39074,39913,40177,41223,41425,41659,41742,42054,43210,44387,44602,44787,45096,45121,45512,45962,47095,47932,48066,48201,48354,48643,48861,48957,49395,49656,49728,49746,50317,50413,50510,50527,50536,50567,50629,50756,51055,51078,52086,52528,52558,52742,52948,53176,53591,53810,54049,54179,54437,55577,56051,57798,58074,58483,58621,58824,59134,59396,60229,60508,60915,61015,62608,62768,64653,66249,66405,66521,66571,66848,66952,67063,67074,67169,67390,67800,67936,68090,68284,68656,69018,69270,69570,69663,69860,69884,69987,70174,70192,70303,70370,70717,70932,70940,71115,71277,71524,71612,71638,71664,71897,72191,72247,72443,72475,72492,72645,72716,72787,72971,72996,73092,73151,73195,73207,73283,73292,73375,73392,73416,73448,73471,73557,73597,73619,73667,73751,73899,73909,74139,74251,74535,74581,74746,74817,75012,75077,75251,75390,75617,76095],"projected":[9898,11634,12855,14252,22292,23669,34808,43154,43973,72800],"m_visualtree":[54943],"verticalinput":[9835],"libil2cpp":[1019,1044,1713,24607,49774,68900,69138],"legible":[4294],"mouseenterevent":[57809,60369],"streaming_assets":[23521],"mipmapbias":[50699],"│":[18694,18769,18832,69800],"arises":[50321],"ovrcamerarig":[68781],"40px":[62451],"0x1e4":[74566],"11px":[63239],"unfolded":[2429],"negative":[1762,2272,2395,5231,6344,8008,8201,9276,9536,9781,10592,10724,11532,11600,13836,14150,19286,21230,24519,30164,33093,35139,41794,42707,44245,44638,44843,45773,50960,51916,55633,56159,57847,62015,62200,65537,65552,72306,73661],"immense":[6844],"consumed":[2012,6133,33497,35732,52462,52530,53693,54033,61496],"startinvincibility":[29788],"nofor":[45187,46141,46508,46532,46715,46822],"encodefloatrg":[43886],"identities":[11071,28137],"considerably":[6032,26013,27299,30184,68157],"pairs":[3696,9282,11616,23041,25680,28103,35323,36306,42336,44767,44787,45940,45962,48465,49850,55888,58358,58459,71783],"versiondefines":[3106,18649],"structures":[2260,3493,3538,6047,6079,8958,10581,16183,18575,25529,26107,26138,26278,30166,33463,36380,36570,39852,41506,42325,43926,45390,45714,46732,47906,56722,59090,61197,65512,66458,66497,66572,71408,71783,72031,73449,75540],"arranging":[24296,62796],"safemaxpacketsize":[66154],"disregarding":[64454],"perceive":[24489],"getsubsystemdescriptors":[75959],"lowmemory":[20088],"disambiguate":[40901],"leanright":[2136],"focusoutevent":[58193],"myiapmanager":[67200,67299],"worldvertex":[14190],"gamecontrollers":[25701,76168],"particlemeshescustomstreams":[31999],"obsolete":[2700,13894,40102,49795,60373,65888,67661,68576,68872,69107,70389,71107,74315],"assetbundlemanifestpath":[73024],"inverse":[1948,5221,5267,5431,5575,7862,12717,12983,13063,22504,25621,26931,29735,36636,47079,49656,71573],"targetmaterialproperty":[72569],"“hello”":[41139],"divisible":[5596],"m_height":[27351,61111],"startpositions":[66249],"setglobaltexture":[45144],"organizational":[1171],"lever":[8570],"appdata_full":[31902,43930,44899,46346,46873,47911],"\\appdata\\local\\packages\\":[27802,72227],"repurchase":[54032],"stored":[237,258,291,1140,2002,2667,3576,3580,3729,3834,4531,4665,4774,4908,6623,7496,8118,9091,9854,9972,10083,11982,12401,12647,12988,13120,13913,14257,17296,18458,20239,20869,21029,21445,22555,23964,24489,25065,25176,25960,26078,26108,26450,26875,27048,27133,27171,27261,27330,27467,27522,27591,27687,28452,28612,28707,28746,33069,34486,35127,35945,37728,37928,38653,39098,43302,43979,44242,45062,45148,49531,49616,49778,50153,50409,51612,52064,54469,57430,57588,57829,59199,61558,62815,66253,66672,67343,68385,68476,68541,68602,69679,69693,69740,69771,69812,69881,70505,70594,71468,72867,73238,73412,73920,74514],"packaging":[2894,3247,9256,12591,72172],"sqrt":[10458,27370,47148,72030],"billboards":[7878,12917,32249,48231,48331,50464,50615,72812,72828],"openwindow":[49968,56495,57006],"scuffs":[49478],"drain":[6094,34996],"indicated":[1915,2308,2384,2702,4122,4184,4307,8195,8419,18738,27022,34213,35075,36096,45662,46824,47666,48380,66016,70295,71121,71301,72476],"thus":[254,541,2088,4865,5642,6685,8246,8302,13916,14969,26096,29442,32115,37685,38367,38668,39663,40310,42364,48227,50381,50512,50669,52233,54277,62415,68607],"early":[3696,4751,5017,6834,6856,7720,7741,16470,25941,29439,29614,31007,31617,33457,43729,47985,52094,66194,66318,70385,70910,71165,72787,75874],"r8g8b8a8_uint":[8478],"mathematically":[22341,27508,27579,72335],"processcommands":[35716],"organization's":[30417],"monitor":[519,4633,4651,5003,5291,6143,7765,11807,13235,20076,22046,22713,26576,27507,29834,33655,34213,34256,34337,34463,34997,35972,36518,36623,49484,52530,52590,53167,53456,74161],"anyexpression":[40835],"stylescale":[62298],"64b":[29188],"mixing":[2063,4722,4845,5017,5019,5094,5193,6323,7474,7579,35988,59580,73029],"pickers":[49449,49465,65903],"multilevel":[39872],"interpolator":[45731,46798],"fillwithred":[8414],"nextframe":[75434],"\\u25aa":[70821],"wide":[96,1901,4025,4513,7504,7624,9229,11748,12450,14581,17912,21419,22559,24468,24768,24909,26679,26969,27619,30853,31592,33535,34274,34874,38182,38249,38265,38905,39311,40055,42809,43459,49457,49610,50011,50276,50594,54131,54423,62048,66026,68808,70166,70368,72901,75460],"met":[12668,14734,27707,34627,44687,53382,58015,65132,71055],"permanence":[29790,69768,69808],"inefficient":[5997,6126,33424],"internal_creategameobject":[30909],"reflection_type1":[44506],"layeraslayermask":[26640],"unityxrframesetuphints":[75424],"upper":[1944,1950,1966,2257,7085,7264,8090,8245,8522,9291,9738,11844,12416,13106,13568,13658,14678,14864,18104,18971,21221,22470,24371,24735,24747,24774,31745,32855,35363,36546,36685,38652,39468,39987,48373,48643,50375,51958,54729,58452,64167,70911],"primarytouch":[76109],"bites":[39864],"don't":[478,617,644,715,858,889,1035,1192,1415,1499,1531,1611,1674,1736,1768,2153,3300,3859,3895,3904,3920,3958,3976,4129,4206,4356,4396,4438,4475,4563,4832,4881,5137,5330,5351,6025,6384,6494,7158,7482,7810,8079,8211,9260,10357,10586,11246,11376,11462,11768,12099,12319,12454,12884,13212,13413,14289,14351,14707,14883,15842,17925,18675,18884,18935,19096,19175,19480,19685,19994,20263,20394,20952,21009,21410,21460,21614,21676,21832,21854,22981,23257,23420,23798,24031,24276,24643,24728,24777,24890,24901,25229,25323,25733,25883,25962,26044,26089,26359,26645,27210,27624,27814,28115,28129,28182,28290,28604,28677,29116,29136,29466,29587,29736,29784,30372,30672,30911,31010,31367,32254,32459,33075,33296,33411,33429,33885,34256,34337,34678,34696,35879,36319,36768,37098,37290,37398,37742,38405,38618,39050,39546,39585,39879,40139,40555,41200,41513,41890,41986,42050,42255,42449,42948,43186,43587,43959,44238,44371,44544,45055,45715,46520,46780,47067,47232,48067,48174,48276,48373,49176,49374,49535,49668,49748,49780,49823,49950,50006,50011,50069,50128,50144,50175,50289,50386,50452,50584,51031,52190,52596,52893,53293,54227,54492,54699,54787,54883,55014,55511,55558,56428,56610,57628,57840,57951,58015,58673,58799,59541,60209,60408,60543,60635,60763,61188,61309,61476,61486,61556,62027,62054,62113,62796,62838,63697,63741,63863,63943,63994,64549,65876,66814,67400,68258,68853,69062,69398,69502,69842,70064,70097,70131,70227,70332,70546,70606,70817,71017,71173,71191,71219,71276,71293,71316,71365,71442,71566,71751,72133,72179,73082,73121,73168,73238,73246,73354,73443,73621,73642,73681,73705,73899,74034,74645,75047,75673,75817,75893,75983],"being":[415,1703,2084,2211,2260,2307,2778,3248,3348,3463,3719,3768,3790,4357,4825,4911,5038,5119,5298,6138,6320,6792,7110,7151,7187,7620,7645,8081,8115,8368,8386,8488,8951,9400,9508,9896,10096,10651,11056,11244,11274,11370,11571,12940,13041,13837,14847,18514,18616,19511,20400,20438,20571,21716,22129,22498,23902,25064,25227,25521,25961,26023,26095,27015,27088,27303,27336,27536,27554,28484,28875,29784,30050,30097,30384,31614,32051,32322,32702,32730,33100,34101,34900,34919,35050,35322,35738,36081,36223,36696,38370,38402,39138,39756,40104,40219,40453,41091,41194,41375,42133,42288,42691,42946,43013,43177,43452,43956,44965,45569,45743,47154,47607,48319,49421,49471,49506,49549,49630,49642,51169,51545,51560,51592,51999,52258,52530,52642,53276,54016,54590,55105,55652,57575,59067,59766,60428,61490,62630,65138,66025,66110,66620,66929,66965,67019,67149,67230,67295,67841,68110,68607,68901,69139,70572,71026,72242,72299,72521,73235,73393,73811,74814,75324,75503],"fakes":[67773],"lightingexplorerextensionattribute":[26730],"reflectivity":[22784,42467,49505,49628],"inputcontrollayout":[75682],"steadily":[52009],"nullptr":[1066,28275,72155,74681,75887,75994],"greyed":[547,601,625,948,6463,21400,25908,35772,54579,71175],"shading":[6896,7940,9462,12912,22134,22656,24512,26793,26926,27175,27268,27575,28913,30143,32319,37792,38287,38342,42360,42394,42802,42810,43203,43945,44091,44359,44915,45190,46519,46529,46784,47115,47371,49525,49640,50367,50596,71811,72746],"minify_debug":[23503],"glcorexy":[21088,30311,34205],"0xf0":[1780],"float32":[10493],"submeshindex":[5666],"spatialization":[269,5007,5179,7777,72879],"downsize":[9062],"project’s":[269,474,2736,3588,3724,3807,4763,5951,6833,7385,14218,19033,24624,24989,25044,28464,29371,29566,31607,31645,33410,33428,33478,35264,35925,36296,38735,38870,39167,39310,48354,48535,48542,48590,48864,49778,52902,53861,66572,69011,69263,73922],"drawrenderers":[5730,44822,46048,48998,49288,50500],"destroyplayersforconnection":[66270],"highdefinition":[18640],"sv_target":[1693,6536,10191,14065,14198,23355,28935,29509,31978,32993,42036,43379,44047,44417,44892,45690,47225,47930,49016],"etc1":[3500,11814,14343,27154,34280],"animators's":[29148],"reducedvalue":[7030],"high_quality_lightmaps":[42970],"upgrader":[68926,69169],"protrude":[49497],"0x1b45558c":[74565],"framedata":[34117],"serious":[35697,49706],"downloadhandlerassetbundle":[3379,3559,16779,68083,68284],"starter":[75083,75233],"newline__":[39626],"fps":[2177,22666,29868,31115,32682,35714,38329,51954,55187,55333,64179],"lightingdataasset":[15272],"my_package_b":[70785],"workstations":[5116,50171],"vtune":[27938],"monitors":[8096,22041,27507,29827,34361,34997,35968,38237,42467,50007,74291,76218],"'renderers'":[10352],"lz4hc":[567,6374,6434,6480,28174,51009,74635,74796],"getmeshinfos":[75750],"“findmaincamera”":[36508],"provider":[2462,2517,2554,2631,2691,2977,4050,4170,4445,18044,21045,23134,29573,31194,35173,40767,40775,40794,40819,41225,41294,41315,41347,41407,41426,41436,41447,41480,41489,41532,41649,43462,48378,48639,68752,69990,70952,72436,72890,72943,74979,75095,75134,75204,75263,75290,75389,75410,75475,75739,75874,75908,75969,76040,76071],"groups":[142,3770,4535,4792,5110,6488,7850,8088,8134,9343,9431,9682,9896,10014,10053,11796,12135,12340,12527,12896,13372,13584,13854,14538,17968,19182,20380,21456,21624,22142,22203,22411,24297,24759,27322,27983,29767,30048,30184,30332,30393,30443,34267,34475,35129,35427,35997,36041,36187,37367,38394,39466,39549,40097,40911,41694,43990,48786,48902,50452,52112,52181,52192,52228,54224,59914,64225,64696,65063,66393,67036,67894,71302,71658,71970,73964,74260],"ipointerexithandler":[49888],"33554432player":[29307],"mymovie":[72586],"mnc":[825],"legend":[10540,28889,35266,35369,35625,35903,35969,36023,36120,36174,36207,36298,36435],"scrubber":[21842],"takedown":[4065],"increase":[251,1343,1655,1759,3486,4832,4957,6054,7508,7793,7993,8294,9491,9795,9967,9998,10262,11600,11844,12206,12901,13412,13836,14599,14685,17152,19210,19284,19346,19359,19635,20208,20637,20672,21937,22117,22128,22728,23434,23736,24160,24403,24969,26049,26095,26212,26510,26784,27083,27604,28467,29213,29447,29714,29904,30378,30864,31727,32106,32273,32754,34408,35126,36464,36592,36689,37203,37422,37662,38403,39274,39368,39748,39985,41370,41866,41911,42148,43185,43414,44294,44377,45574,48329,50153,50186,50529,50636,50687,51192,51336,52010,53377,62683,66667,68513,68927,69170,71022,71796,73209,73302,73388,73445,74418,74627,74788],"textvaluefield":[55480],"response":[2959,4979,7385,7693,7765,9034,9723,12310,12403,12903,13552,15842,20190,20732,21154,21359,22417,23890,27506,27569,29434,36351,38474,38894,40000,40103,49505,57945,59557,66393,66750,67460,68490,69519,70561,71869,72368,72460,73178,73208,73285,73312,73838,76262],"ndmvg3kwcizi7mulkn+gpfl6lw8g":[69944],"entering":[617,3954,4034,4663,7752,9105,11101,11188,11383,13836,17993,20124,20585,20678,22189,29790,32180,38852,41251,41777,48677,51047,51188,52247,52814,53273,58133,60518,65085,65700,65981,67270,71520,73288,73480],"kunityxrinputfeatureusageistracked":[75622],"findwithtag":[9408,50291],"owned":[67550,67625,75755],"vslidervalue":[23979],"logicalorinverted":[43831],"selfillumvertexlit":[42594],"propertydescription":[19185,34382],"onstopclient":[66309],"excessive":[5952,6054,43654,48593,56161],"\\symbols":[74519],"textureimportersettings":[48753],"decide":[1003,2839,2958,3471,3895,4384,4536,4852,5122,6798,7020,13159,13428,18683,20636,21527,22087,22307,24905,26698,26711,28880,29135,34489,36522,37315,37329,37475,38575,38657,39137,41816,42092,45319,48685,50696,53454,57318,60649,61497,64024,66206,66383,66543,70236,70288,70506,70734,72357,72646,74049,75617,75774],"mainbundle":[49771],"kunitygfxdeviceeventafterreset":[29967],"++m_framecount":[20519],"outputto":[27786],"planning":[238,12898,18513,19271,36340,67674,73563,73615],"myenum":[64593],"maroon":[49869,63593],"adaptions":[16043],"#cacaca":[63253],"uris":[66394],"xzy":[9544],"exportassetpath2":[21032],"unsigned":[4920,13206,27158,28004,45809,65537,65552,66155,70438,73556,74555,75492],"cused":[10272],"appdata_img":[43931],"undesirable":[3431,6094,20155,26784,28476,32284,39438,39794,51976,67136],"preparing":[78,658,692,3454,3523,6215,18395,21031,21142,22071,25193,25919,27097,29747,35714,37415,44305,48360,48527,48591,48978,51130,51230,51820,66990],"database’s":[3675,3733],"triple":[9583,14474,75428],"spike":[6135,33403,52034],"drawmeshinstancedindirect":[23423],"kformatrgba_dxt3_unorm":[50099],"selectedsprite":[59151],"glow":[24496,26790,34863,42792],"#2a2a2a":[63313],"fifth":[36504,38365,52058],"permissions":[219,879,880,1207,1243,1354,1369,1486,2751,28108,28216,30416,52491,53175,54049,66902,69713,69881,70419],"netcode":[10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,16866,16880,31166,31441,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,74212],"playscene":[11128],"cubemaps":[8606,8647,11817,12352,14259,25253,34283,34495,38064,43165,45139,47414,50726],"smoke":[5872,14073,14268,22852,25607,31662,31760,31798,31838,31856,32188,32230,32631,32650,32712,37426,42792,50941,74343],"fillcolor":[58488,60705],"manual”":[32662],"idle":[1924,2067,2211,2242,6285,22460,26296,31642,33410,34994,35735,36055,48345,49642,75646],"#323232":[63318],"triggerenterexits":[35751],"vitals":[933,1706,36518],"centre":[187,2363,2407,8570,14951,25667,27323,30141,49534,49632,65999,71874,74496],"toml":[69834,69903,70000,70071,70117,70138,70190],"parsemainthread":[42228],"fft":[7707],"supportsrawshadowdepthsampling":[19739],"business":[4133,4438,5989,22375,66877],"permanently":[8551,9154,26569,29785,33656,41323,53238,69740],"checkforwarnings":[56182],"stamped":[50561,66721],"“score":[33169],"winmd":[6705,24928,28575,34563,66471],"count’":[1797],"portrait":[690,1578,10772,11759,12109,12311,24770,25871,53290,54333,59343,61334,72986],"rare":[6133,8568,21592,27654,34901,49363,50355,50432],"“dumpcount”":[74576],"ogg":[4780,5165,6696,7469,10740,22578,52099,68188],"#000080ff":[49870],"circumvents":[26294,56101],"yielded":[6111,21368,41234],"cheapest":[6837],"permitting":[12667,67852],"troublesome":[29907,54898],"attachtopanelevent":[56681,60542],"#height":[41247],"tester":[66976,67015,67039,67257],"viveport":[53447],"ported":[18508],"reads":[423,465,4665,5239,6037,9772,10579,13370,23868,25162,26459,31602,31840,31993,33501,35371,35630,35949,39310,41876,43973,45565,50002,50147,50596,56736,58044,61496,64761,68410,69333,69439,69734,70807,70867,70936],"compressions":[567,27127],"tabcontent":[57140],"maximized":[20075,22045,35879],"istorecontroller":[66998,67144,67300,67334,67355,67591,67630,67712],"opaquesortmode":[6503],"fold":[1537,14693,14727,21715,27009,31673,31736,31752,31770,31782,31807,31828,31845,32083,32098,32122,32209,32333,32351,32377,32599,32622,32642,32670,32717,32752,32896,49562,52164,52385],"unity_half_texel_offset":[43970],"lamp":[37714],"marketplace":[17326,70952],"cancellable":[55643,55717,55809,55907,57562,57814,58196,59542,59721,59738,59817,60361,60497,60554,60766,62117,62601],"differing":[1909,14764,27569],"poles":[8159,14965],"_sliceindex":[8718],"money":[4086,13040,67019,67230,67841],"50px":[56840,62450,64141,65042,65818],"rectanglelight":[36654],"shrinking":[6128],"subsets":[22411],"onserialize":[10844],"randwithinradius":[13095],"app_name":[824],"repopulate":[39902],"loadassetatpath":[2472,3611,3768,19500,30666,56553,56828,58818,59063,60148,60187,60866,61576,61680,65834,68969,69216,69679],"slovenian":[53646],"sinf":[4946],"today's":[2067],"detracting":[64757],"smoother":[2179,11725,14581,22730,32396,36593,42796,42817,49623,58407],"x1":[51462],"organization":[1171,4386,5845,6055,11413,18812,25444,26703,28609,30381,30443,30469,30500,38679,41701,52102,52782,53175,53476,54049,66572,67664,67894,70965],"skew":[35892],"'webglcontextattributes'":[73435],"blanks":[12884],"summarizes":[21298,52252,66517],"150mb":[913,26074,33884],"aa":[62011],"purchasedproduct":[67432,67786],"modes":[14,100,510,715,1208,1703,2431,6758,6812,7128,7662,7800,8108,8320,8582,8893,9098,9500,9873,10219,11516,12474,13215,14119,19047,19308,20577,20726,21045,22131,23814,24273,25079,26797,27069,27113,27215,27296,27311,28401,28879,29695,30251,30299,30905,31836,32090,32248,32344,32610,32873,33385,33546,34260,34341,34467,34771,34994,37825,38365,39235,43455,44002,44059,45248,45291,47256,48163,48361,48569,48674,48851,49446,49593,49608,50034,50363,51047,51196,52768,54208,54764,58370,66227,66341,66383,66543,72522,72758,72788,73286,74207,74335,75587,76304],"equation":[43740,44456,45860],"appendix":[27469],"dispinst":[75965],"compiled”":[41845],"target'":[45472],"setfloatparametercallback":[4905],"onclick":[30668,55109,61797,62766,65928],"buoyancyeffector2d":[8010,15214],"vstu":[40663],"commits":[26359,70230,70708,70756],"capturepointer":[56916,60261],"middlemouse":[60461],"synchronizationcontext":[30905],"core\\shaderlibrary\\unitydotsinstancing":[20338],"changelist":[72443],"#9370db":[63597],"contractors":[30416],"un":[11903,24670,49546,56881,57158,57417,64245],"eventlabelname":[62369],"outputting":[5037,22588],"khr":[53667],"refreshitems":[55965],"foldersearches":[40728],"visited_link":[63423,64247],"hierarchy":[182,1931,2034,2227,2260,2417,2423,2619,2959,4805,5019,5093,5964,6042,6149,6222,6948,7123,7217,7846,8118,8134,8987,9137,9145,9328,10127,10419,10760,11434,11559,13400,13613,14693,15835,17977,18098,18196,18379,18435,19039,20593,20648,20749,21460,21588,21683,21845,22098,22247,22526,24467,24522,24794,25210,25363,25498,26268,26562,27007,28959,28989,29030,29391,29420,30038,30232,32168,32243,33394,33578,33661,34892,34949,34993,35211,35380,35695,35897,35998,36041,36184,36335,36473,37587,37881,38438,39126,39305,39311,39796,40022,40112,40501,40618,40683,41359,41426,41448,41489,41645,41676,41712,47179,48233,48349,48608,49696,50567,51262,51419,52176,52242,54294,54419,54539,54543,54578,54654,54706,54762,54886,54895,55053,55578,55987,56049,56308,56373,56636,56674,56792,56837,57156,57628,57971,58186,58618,58795,59392,59806,59996,60540,60756,61293,61314,61387,61614,61891,61959,62193,62703,62741,62840,63105,63219,63816,64328,64450,64548,65288,65733,65916,67136,68532,68545,69400,69504,71658,71766,71898,71919,72258,72499,74144,74899,75109,75573,76295],"version”":[53825],"_manipulate":[8317],"mycustomeditor_uxml":[61628],"animationclip":[7142,15090,33915,34157,36246,38659,64509],"consecutive":[22782,23525,32412,58285],"floortoint":[27448,61093],"touchinfoplugin":[20012],"xlimit":[8522],"inconsistencies":[25114,27211,64362],"target's":[72313],"numelements":[33223],"microinteractions":[5829],"appdomain":[18012,26041],"no":[69,146,217,261,356,395,517,1038,1114,1308,1524,1619,1888,2089,2191,2354,2426,2719,2769,3061,3294,3433,3490,3735,3867,3946,3963,4026,4066,4396,4404,4413,4767,4837,4902,5041,5152,5301,5696,5727,5768,5920,6063,6128,6224,6287,6374,6434,6806,6945,6977,7013,7250,7366,7469,7543,7556,7617,7698,7752,7791,7878,7968,8003,8020,8115,8144,8162,8256,8318,8550,9032,9086,9157,9465,9594,9784,9878,9966,10014,10068,10226,10360,10398,10522,10585,10633,10688,10705,11083,11175,11221,11259,11281,11314,11447,11490,11557,11648,11859,12110,12303,12319,12641,12759,12902,13131,13182,13206,13248,13280,13297,13419,13499,13542,13651,13837,13894,13906,13972,14076,14258,14348,14506,14670,14734,14796,14867,15705,15816,15836,16091,17398,17627,17642,18082,18167,18225,18239,18330,18570,18746,19030,19141,19257,19294,19455,19683,19998,20043,20047,20222,20241,20388,20409,20452,20619,20632,21029,21230,21400,21516,21569,21710,21938,22036,22090,22106,22146,22273,22657,23250,23448,23525,23543,23772,23890,24052,24279,24467,24511,24573,24641,24734,24760,24866,24984,25080,25197,25307,25353,25458,25540,25960,26041,26077,26294,26597,26788,26824,27035,27073,27143,27522,27591,27715,27748,27813,27930,28172,28278,28310,28352,28436,28584,28793,28874,28994,29022,29128,29242,29443,29614,29714,30043,30084,30110,30164,30207,30399,30446,30540,30872,31008,31368,32170,32288,32401,33074,33194,33381,33420,33446,33532,33690,34216,34289,34439,34491,34613,34736,34862,34913,34994,35189,35254,35284,35392,35484,35649,35949,36093,36237,36375,36540,36598,36637,36687,36937,36998,37453,37618,37715,37775,38274,38301,38345,38408,38474,38478,38497,38516,38549,38583,38632,38815,38842,39141,39167,39254,39435,39509,39524,39568,39638,39663,39735,39813,39824,39918,40063,40088,40094,40179,40441,40547,40839,41546,41794,41828,41871,41884,41921,41940,42105,42187,42264,42360,42482,42550,42603,42696,42720,42736,42761,42876,42907,42981,43281,43459,43503,43512,43561,43569,43687,44066,44203,44327,44341,44380,44425,44512,44688,44797,45053,45145,45187,45255,45264,45477,45533,45599,45625,45756,45846,45868,45966,46141,46508,46532,46715,46822,47095,47331,47952,48001,48056,48235,48254,48307,48556,48595,48674,49135,49204,49315,49447,49455,49500,49510,49541,49564,49568,49610,49631,49712,49852,50142,50150,50217,50351,50372,50444,50582,50677,50687,50945,50974,51058,51090,51126,51405,51708,51828,51893,52034,52146,52222,52485,52638,52754,52877,53093,53324,53698,53717,53782,53993,54081,54120,54279,54789,55551,55630,55813,55912,56101,56935,57595,57836,57964,58072,58176,58324,58456,58832,59554,59764,59854,60813,61449,61504,62024,62258,62751,62839,63200,63850,63922,63978,64182,64340,65024,65987,66038,66158,66426,66518,66527,66701,66850,66971,67364,67569,67661,67707,67737,67776,67873,68055,68246,68264,68283,68323,68350,68505,68532,68542,68611,68733,68825,68883,69058,69350,69454,69861,70175,70225,70358,70761,70839,70911,71011,71170,71173,71417,71567,71645,71809,71914,72204,72275,72384,72502,72741,72916,73055,73114,73118,73230,73285,73463,73487,73630,74158,74238,74592,74635,75166,75249,75335,75409,75508,75740,75974,76065,76195],"beliefs":[53737],"adjustable":[23964],"detailing":[6798,66803],"bags":[36742,36750,36819,36973,37221,37228],"3d":[3,13,63,152,280,1094,1866,1890,1893,2172,2188,2958,3989,4206,4273,4506,4519,4722,5045,5158,5955,6216,6691,6774,6780,6793,6835,6872,7071,7620,7671,7771,7878,8107,8337,8821,9081,9134,9258,9455,10082,10109,10204,10540,10738,11189,11249,11279,11526,11596,11643,12658,13201,13431,13627,13743,13784,13976,14072,14245,14672,14861,15015,15022,15817,15832,16345,16691,17000,17835,18076,18398,18753,19064,20834,21199,21464,21628,21775,22018,22085,22203,22224,22292,23458,24639,24900,25140,25182,25193,25237,25542,25826,26580,26669,27334,27490,27576,29122,29397,29721,29751,29774,30368,31023,31662,31668,32158,32258,33526,33637,33748,33762,34785,35240,36008,36713,37289,37321,37345,37480,37507,37520,37630,37738,38079,38375,39366,39530,39689,39699,40535,43484,44272,45079,45139,47179,48335,48615,48868,48894,49450,49497,49520,49563,50411,50463,50579,50620,50685,50929,51245,52174,52222,54128,54711,54771,61524,61759,62827,66010,66542,66811,66836,66869,66888,66903,67977,68695,71217,71768,71808,71864,71900,72291,72519,72765,72786,72880,72916,72939,74121,74418,74895,74906,74976,75226,75404,76143],"paragraph":[4142,4279,17642,18439,40052,49549,63672,63989,64147],"grows":[4535,6082,6126,6762,8577,26026,29269,29906,36093,39800,50651,54218,60649],"item's":[2261,25401,53602,59464],"_object2world":[47393],"resist":[9320],"righteye":[76079,76182],"myvalue":[21677],"sell":[4220,4327,4387,4432,4494,54018,67650],"“upload":[53093],"withproduct":[75721],"y1":[51463],"editorserializationutility":[74358],"_customrendertexturecubeface":[8963],"raycastall":[6066,33372,58140],"sourcematrix":[5205],"'displays'":[75978],"irradiance":[9998,14260,22165,22805,27159,27468,36570],"synthesizers":[5006],"displayname":[2522,2553,2672,11414,18791,52279,55013,69638,70822,71103,75684],"examplehello":[38802],"producers":[4029],"gi”":[6806],"srcalpha":[10150,32942,43648,43767,43857],"unity_dots_instanced_prop_override_supported":[20325],"speedtree":[162,4506,7874,7879,9134,10363,13625,14777,24638,25190,29744,38058,48222,48239,48264,50583],"wrapmode":[2092,14097],"orchestrate":[6784],"unlisted":[71056],"avatarmask":[7871,15227,29136],"lumin":[68761],"ticking":[14802,72370,72730],"trance":[5006],"ambisonics":[257,4731,4765],"bindata":[13967],"ignorelistenerpause":[73050],"enter":[223,560,617,643,729,857,1123,1141,1157,1886,2047,2777,3235,3919,4007,4104,4160,4214,4271,4354,4396,4435,4443,4458,4473,4488,4608,4663,4816,5132,5162,5688,6966,7104,7190,7825,7936,8009,8033,9003,9168,9279,9298,9536,9728,9774,11049,11125,11381,11426,11673,11843,12151,12594,12801,12939,13167,13202,13556,13674,13754,13818,13826,13835,13962,14476,14543,14684,14756,14843,14984,15716,15813,15852,17955,17979,18087,18126,18363,19371,20075,20116,20556,20593,20671,20777,21038,21255,21605,21676,22032,23711,23794,24517,24906,25031,25449,25670,25679,25895,25917,26602,28213,28413,28615,28720,29691,30390,30453,30489,30906,32193,32758,34372,35029,35200,35328,35381,35807,36480,36725,37287,38662,38718,38839,39041,39091,39159,39280,39337,39619,39650,40287,40819,41163,41331,41424,41452,41543,41634,41677,43278,44693,45077,48111,48521,48621,49348,49642,50175,50540,51166,51390,51879,52579,52842,52958,53139,53279,53697,53802,54360,54466,54561,54649,54679,55055,55596,56533,56811,57283,57809,57952,58454,58586,58670,59192,59498,59734,59994,60408,60495,60646,60758,61204,61600,61816,61908,61946,62212,62350,62507,62655,62858,63113,63955,64398,64413,64511,64532,64610,64718,64808,64914,65086,65102,65117,65312,65537,65552,65567,65587,65607,65627,65648,65790,66358,66457,66762,67060,67163,67351,67626,67875,69860,69963,69993,70107,70174,70496,70651,70755,71255,71365,71446,71634,72163,72388,72504,73983,74140,74453,74743,74824,74902,75204,75361],"supportssparsetextures":[19752],"unit'":[4819,39412],"cooperative":[66383,74212],"forcereserializeassets":[3725,3828],"cubemap":[249,4676,6703,8607,8646,8861,11817,12352,13120,14246,15098,18346,21776,22749,25266,26868,34283,34495,37687,37692,37723,38065,42467,42714,42749,43165,43496,45080,45127,45484,46273,47376,50934,71874,72489],"preserves":[7186,19150,24624,26987,28493,34880,42793,49763,52320,65698,66479,72874,74844],"onstatechange":[29141,30735],"sum":[1277,6168,11546,11605,21933,33394,36006,38403,40862,41283,45300,47642,50541,50562,58285,60382,60795,64078,71885],"adjust":[1962,2153,2441,4531,6314,6353,6405,6801,7985,8066,8159,8319,8499,9024,9139,9457,10012,10271,10406,10609,10721,10772,11494,11527,11642,12307,12721,12942,13113,13148,13477,14135,14226,14608,14707,14724,15967,18088,18201,18509,18987,20571,20725,20811,21024,21445,22180,22235,22305,23674,24333,24519,25060,25171,25205,26056,26812,27099,28886,28951,29895,30379,30433,31616,31688,32166,32222,32911,34130,34864,35156,35220,35963,36503,36611,36689,37269,37565,37675,38469,38661,39291,39381,40039,42220,42354,43180,44625,44850,46783,48267,48659,50356,50499,50521,50536,50552,50572,50587,50622,50677,51042,51124,51188,51250,51760,52035,52121,52182,52201,52970,54250,54736,58274,58459,58799,59868,61296,61556,61917,62024,62836,64489,65220,65244,67182,68730,68867,69100,71619,71773,71809,72410,73249,73324,73705,74034,74162],"\\appdata\\local\\unity":[52506],"m_levels":[27352],"25px":[61262,61835,62478],"onproductsretrieved":[67287,67549],"unityconnectsettings":[15226],"fs":[21765],"sourcetext":[38709],"applicable":[5911,5980,6059,6105,6383,7411,12896,14295,18056,18743,19174,22068,25883,27673,28181,29800,35385,38766,40150,42125,44377,45582,49281,52820,53130,53487,53717,54015,64327,71127,74644,75153],"pso":[34212],"pinvoke":[72191],"initiator’s":[74581],"checkallowdestructionrecursive":[35694],"bushes":[23377,30329],"mytoolbuttonoverlay":[30547],"dxt1":[14323,48726,50483],"html":[2755,3232,4275,4509,6079,6375,6712,12028,13947,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17263,17321,17379,17542,17556,17571,17586,17601,17619,17637,17654,17672,17688,17703,17718,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,18903,19425,22284,23774,24594,26073,26781,30951,30997,31294,31488,32326,32889,33569,40748,43333,49640,49819,50224,51458,52599,57852,57970,58018,58463,59828,61448,63989,64082,64373,65849,65912,65966,66694,68121,68376,70830,71377,72887,73119,73215,73244,73271,73408,73435,73485,73563,73908,74074,74636,74795],"onanimatorik":[21339,25648],"namespace":[1734,3493,4908,7369,9110,11303,12661,13309,18216,18751,19464,20046,21069,26040,26436,28494,29423,29908,30063,30533,33242,33449,36736,38684,40372,40559,43326,51433,52615,54926,54973,55079,55179,55354,55383,55413,56136,56232,56290,56357,56455,56488,56606,56721,56751,57307,57424,57619,58095,58776,59033,60898,60998,61766,63994,64394,64409,64424,64440,64464,64484,64507,64518,64559,64582,64606,64627,64669,64690,64713,64725,64741,64762,64790,64804,64819,64837,64854,64872,64911,64926,64951,64968,64983,64995,65019,65026,65044,65052,65076,65098,65113,65128,65142,65160,65215,65239,65263,65282,65290,65307,65352,65383,65403,65428,65439,65454,65469,65485,65497,65508,65534,65548,65563,65580,65600,65620,65641,65661,65678,65867,66598,68579,68815,68880,69047,69330,69436,69526,70945,71701,73667,73900,76040],"intermediate":[4867,5985,18267,20716,22124,22788,24943,27171,28261,28485,30855,35124,40513,41860,66478,71468,72119,72723,73633,75411],"projectionparams":[44851],"qualifies":[74404],"suits":[4561,7621,11160,11527,18935,27324,35248,43551,66337],"balls":[13645,23105,32702,35252],"mediadevices":[73115],"disclaimers":[40063],"numchannels":[10992,11212],"minbounces":[69357,69461],"audi":[4864],"releasepointer":[56930,60320],"d24x8":[38425],"layer's":[11588,13913],"scanning":[4744,5189,35038,52530,75962],"refraction":[42800],"assetbundleinfos":[3283],"detail":[3732,3785,4142,4212,4248,4426,4468,4531,5811,7620,7873,7878,7981,8387,9453,9875,10326,12922,12989,13898,15838,18119,21636,21974,22019,22043,22742,24505,25140,25247,25991,26661,26947,27747,29416,30167,30373,31659,35000,35642,35691,35890,35912,35959,36199,36548,36610,37557,37700,37726,37997,41771,42195,42252,42288,42354,43618,45517,45939,46223,47153,47419,48225,48538,49407,49472,49515,49604,49607,50058,50361,50449,50614,50692,50929,53222,53450,59271,66750,67161,67912,68709,71527,71776,71970,74918],"indentlevel":[20953],"codec’s":[14822],"toptop":[62236],"converts":[269,719,5378,5522,7128,9532,10742,13404,20349,24508,24943,25176,27566,28263,29364,32291,33360,37294,37551,39169,40868,42150,43882,44133,44599,51400,53073,53303,54678,54963,68133,72119,72266,72869,73640,74588,74839,75739],"idraghandler":[49894],"dutch":[53619],"initiallyopen":[24807],"rg8i":[8472],"scoreboard":[33173],"designation":[23011,70761],"assertions":[33808],"net_standard":[33835],"contactssuch":[53740],"calculateinterpolatedlightandocclusionprobes":[23416,26712],"terrainapi":[50575,68880,69116],"colums":[26611],"toi":[18224],"editor's":[4732,4876,6691,14542,21024,21142,22018,23668,25176,26602,34994,48557,48617,61583,68003,68050,69777,69824,70404,71040,71643,72247],"c++":[1019,1046,1271,1284,1302,1396,1402,1713,1812,1846,4874,5994,6884,11882,12428,18358,23136,24607,24625,24918,24943,25849,26040,27913,27939,28261,30000,30097,30855,33087,33450,33494,33524,34645,34655,34693,38251,40513,40606,44312,44874,49395,49757,50014,50209,66450,68951,69196,71999,72010,72103,72119,72137,72201,72846,73299,73412,73579,73639,74512,74588,74661,74831,75266,75920],"cinema4d":[164,24641],"realistic":[67,3013,6758,6792,6908,7215,7620,8203,9878,11520,11600,12917,13267,14960,15020,22768,24487,26567,26798,26926,26985,27063,27077,27215,27268,27329,27520,27575,29391,29714,32360,33573,36638,37320,37398,37683,42813,43484,43556,49464,49522,49570,49623,50613,52184],"readfile":[27726],"linking":[877,9369,18163,19315,19335,19350,19363,19375,25728,28258,34882,47188,53794,58845,72080,74888],"shadows_single_cascade":[44583],"onstatemove":[21338],"uv1":[316,20423,26962,27039,39707,49687],"mammals":[52282],"gstreamer":[73133],"parties":[43335,70955,75104,75310],"linq":[19459,20189,48709,55933,59026,63132],"'my":[70361],"\\users\\accountname\\appdata\\roaming\\unity\\asset":[4225],"adjusting":[1997,2296,6230,8218,9258,13166,13724,13870,14764,18119,18987,20673,22151,23091,24169,24515,26784,48376,48659,50584,51185,51390,64752,69963],"textureassuming":[40716],"maxon’s":[24641],"quadrilateral":[21202],"rigidbody":[11,2738,6793,7155,7198,7217,8192,8229,8397,8500,8586,8598,8999,9148,9163,9294,9351,9685,9723,10590,11248,11532,11600,12711,13159,13233,13260,13552,13651,13670,13858,14976,14985,15075,15818,15835,18221,21163,22269,22301,25525,26058,26547,26557,26569,26580,29391,31859,32170,33491,33580,33627,33640,33754,35016,35192,35754,36302,37436,37532,37618,38459,38476,38489,38499,38518,38530,38541,38574,38608,38624,38642,51988,71608,72337,74329,74421],"\\unity\\editor\\editor":[27789],"disperse":[32631],"d_toggle_bg_hover":[63496],"slicesatradius":[27448],"model’s":[5959,21411,46877,48287],"setcontentview":[1083],"fog_exp":[44587],"detailsamplemaxerror":[76414],"somesingleton":[6084],"m_gameobject":[21667,76459],"registervaluechangecallback":[59596],"1+aep":[11805],"trivially":[5998],"unityxrbone":[75498],"unintentionally":[43199],"usercredits":[67104],"m4v":[6715,72624],"visualeffectsubgraphblock":[14936,15329],"renderingstartedhandler":[74705],"maintex":[10194,23316,29541,31908,33050,45219,46171,46547,46864,50388],"visualeffect":[14926,15367,31284],"mygenericstruct":[40576],"deteriorate":[26015,26987],"availabletopurchase":[67500],"getcurrentsummarymetrics":[4680],"spriterenderer":[13782,15178,32481,48137],"applylocalpositiontovisuals":[74475],"playableclip":[34081],"imagination":[14456,33520],"unitywebrequestaudiomodule":[16790,30975],"customizehand":[6904],"emissions":[31777,32412],"reportsafeareachangeforview":[25888],"trous":[36609],"transformdirection":[37622,71582],"cinematography":[31065],"rgb10_a2ui":[8485],"stuck":[8197,9155],"formatted":[3580,6079,19408,20261,26646,28194,35552,39623,40964,51582,52511,53975,67739,68376,69997,70606,75561],"opts":[67537],"fog":[1697,6653,7645,8094,9220,9503,10196,14073,22767,26881,34868,37915,41907,42987,43133,43547,44337,44587,46416,46791,47139,47205,72771,74289,75180],"bc6h":[6383,6445,14328,27139,28181,74644],"highestminor":[70898],"blinn":[38044,45201],"transitionduration":[62707,62984],"kunityxrinputfeatureusagegripbutton":[75651],"popularity":[3994],"terraindata":[15143,50353],"attachment":[60213,74403],"usual":[9364,10076,13913,21052,35874,36713,40064,42818,45593,45603,49549,51601,51812,62178,63244,66115,66570,66838,71858,73702,75409],"vorbis":[4774,5977,7482,25841,72638,72717],"mean":[634,1483,3247,7117,11086,12895,18481,23073,26357,27591,29918,33478,34927,40274,41912,42014,44079,49555,58288,63724,67265,67358,67633],"xcrun":[28314],"texcoord2":[10178,27046,32967,47473,47940],"went":[71314],"compete":[6146,17356,17370,31646,35037],"incurred":[6816,45721],"#48d1cc":[63601],"pvrshadereditor":[13365],"successively":[58150],"funnel":[22378],"political":[53737],"documentation":[124,162,192,235,263,332,385,413,427,506,574,581,711,792,839,913,938,959,964,1096,1243,1316,1353,1599,1748,2435,2755,2760,2940,2974,3228,3242,3511,3611,3725,3810,3881,4513,4565,4716,4775,5183,5341,5812,6325,6392,6849,7841,7924,7971,8015,8175,8272,8390,8426,8709,8765,9040,9431,9864,9920,9997,10581,10781,10833,11149,11173,11375,11405,11459,11474,11526,11613,11683,11701,12039,12318,12438,12734,13123,13375,13846,14069,14152,14233,14313,14471,14510,14778,14782,14790,14924,14929,14934,14939,15908,15941,15956,15973,15988,16011,16026,16043,16066,16081,16097,16112,16126,16143,16157,16174,16189,16218,16233,16247,16262,16281,16336,16351,16370,16384,16398,16412,16429,16444,16459,16476,16493,16516,16533,16548,16570,16585,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16856,16875,16889,16925,16939,16975,16990,17006,17021,17036,17051,17062,17083,17098,17139,17158,17175,17191,17212,17226,17246,17260,17274,17288,17302,17318,17332,17348,17360,17370,17390,17404,17416,17428,17443,17458,17480,17494,17512,17530,17552,17567,17582,17597,17612,17633,17648,17667,17684,17699,17714,17729,17765,17779,17794,17809,17824,17841,17856,17871,17886,17901,17918,17952,18525,18662,18710,18903,18910,19050,19174,19287,19348,19361,20050,20091,20532,20679,20915,21138,21193,21468,21599,21639,22125,22190,22234,23289,23620,23627,23774,24509,24528,24599,24668,25116,25281,25673,25691,25741,25828,25876,25921,25977,26083,26129,26295,26439,26491,26545,26565,26692,26781,27158,27257,27501,27515,27544,27584,27764,28056,28066,28123,28390,28759,28779,28829,28918,28973,29019,29152,29437,29466,29566,29680,29908,30151,30226,30278,30490,30507,30875,30918,30988,31345,31365,31385,31656,31676,31739,31755,31763,31785,31810,31831,31848,32086,32101,32125,32149,32212,32326,32336,32354,32380,32602,32625,32645,32673,32720,32765,32847,32899,33064,33426,33446,33539,33646,33762,33775,33883,34229,34242,34325,34449,34638,34661,34792,34849,35185,35473,35701,35768,35901,35960,36020,36156,36200,36331,36433,36514,36689,37270,37408,37518,37674,37694,37936,38475,38681,39128,39388,39580,39648,39888,40134,40146,40169,40263,40485,40663,41434,41701,41942,41989,42015,42042,42135,42425,42788,43333,43376,43489,43521,43978,44299,44317,44871,44996,45103,45485,45598,45664,46048,46526,48179,48229,48315,48984,49148,49170,49307,49433,49540,49721,49768,50087,50197,50305,50575,50599,50649,51004,51133,51232,51359,51808,51846,51985,52241,52718,52882,52940,53166,53558,53711,53840,55808,57972,58203,58802,59746,60358,60790,62330,62935,63689,63702,64079,65971,66025,66184,66330,66394,66451,66543,66803,66808,66819,66843,66902,66920,66961,67015,67039,67076,67216,67758,67924,67979,68492,68529,68662,68781,69038,69291,69347,69448,69508,69790,69857,69865,70167,70301,70608,70756,70832,71132,71369,71663,71751,71797,72172,72191,72225,72639,72717,72732,72756,72882,72903,72916,73030,73141,73261,73306,73322,73382,73558,73699,74134,74226,74414,74582,74724,74755,74808,74943,74991,75034,75135,75160,75192,75369,75440,75561,75918,75979,76068,76124],"tex2dlod":[44903,45502,46855],"allowsalphasplitting":[48779],"isconnected":[10993],"development_player":[73936],"fp32":[29338],"unity_analytics":[33807],"lengthy":[14802],"saves":[1127,3587,3856,4511,5337,5938,6962,7396,7429,8651,8782,11442,12754,12958,13275,13292,14087,14824,18183,20243,20611,20760,20891,21439,24707,25356,27068,27175,27698,29148,29183,30198,30211,30268,35040,35234,36707,37369,37646,38406,38908,38973,39018,39310,39879,41724,41841,43131,43302,43535,45050,47026,50007,50652,50998,54454,58802,70299,70734,71851,72403,74827,74951],"intercepting":[67481],"calendars":[12665,26079],"huf":[53679],"violation":[4065],"capitalization":[39618],"rightshift":[49237],"props":[90,6840,11074,22012,22673,23312,23462,27361,28947,37344,37525],"grazing":[22784,25292,31710,42811,49453],"convert":[159,270,346,680,1903,2709,3579,4762,5425,5569,5863,6038,6068,6923,9077,10427,10454,11903,13021,13388,14699,16651,18343,20052,21454,23136,24505,24639,25177,25205,26634,27540,28954,29078,29755,33194,34924,35553,37287,40901,41828,44250,44868,48277,49549,51398,51607,51815,52467,52969,53087,53303,55016,58269,58370,59652,62010,65758,67829,69379,69483,71969,72634,73554,73640,75050,75114,75224],"shrink":[6294,7506,8222,20565,24747,32632,39419,61544,64087,68906,69146],"lobbies":[17384],"graffiti":[13995,42243],"differ":[120,581,2439,3728,6145,6284,11669,14006,21536,23582,25113,28897,34900,34927,37302,37689,41449,42172,43030,43521,44231,44832,49635,52038,52099,66116,66543,66909,67639,74171,76095],"illustrations":[6847,29001],"cushions":[8568],"my":[220,409,1457,3875,3905,3949,3998,4036,4219,4435,11376,19437,20885,21013,24027,24443,25518,25952,26073,28612,29097,30452,30549,35150,35806,36805,40475,41121,44704,45125,49771,49981,52184,52339,52838,52890,52957,53084,53259,53793,54524,55767,55983,56055,56684,58099,59040,60145,62188,62764,63790,63937,64368,66388,67563,68099,68294,68334,68361,68397,68451,68796,69780,70263,70360,70875,71191,71204,71215,71262,71290,71302,71323,71361,71403,71430,71453,71463,71486,71502,71534,72231,73956,74179],"gl_khr_texture_compression_astc_ldr":[14452],"hovered":[35007,62121,63299],"transitionstyle":[62521],"'new'":[18571],"2nd":[7439,7456,23551,46874,47940,70814],"rainbow":[9231,31760],"equalizercustomgui":[4970],"prob":[13082],"unison":[236],"principles":[5904,13156,23629,30168,31599,42811,48977,54235,59828,70707,70952,75067],"hemisphere":[32383,35256,42751],"layerfieldsnippet":[64851],"n+1":[3254],"m_targettexture":[76502],"implementer":[52320],"m_instancedata":[5367,5511],"characters’":[58364],"adadad00searches":[40748],"getdevicesatxrnode":[76185],"scriptrunbehaviourupdate":[35708],"timecode":[16453],"'shadowprojection'":[44965],"sdg":[53667],"logicalcopy":[43818],"fbximporterpreset":[19558],"ext_shader_framebuffer_fetch":[44914],"runs":[273,561,661,1069,1789,2179,2704,3342,4567,4980,5353,6068,6111,6469,8203,8568,9127,9520,10572,10719,10877,11176,11606,11822,12400,17752,17980,18255,18516,19030,19990,20079,20233,20808,21052,21154,22049,22245,22669,23542,23616,24609,25064,25599,26036,26042,26266,26291,26477,27993,28135,28163,28288,28398,29470,29718,29973,30164,30857,32152,33075,33092,33381,33401,33439,33446,33480,33515,34212,34273,34375,34483,34537,35496,35809,35920,35957,36093,36333,36511,38661,38766,39927,40208,41178,42007,42938,44562,47306,49394,49735,49760,51962,52530,52598,54131,57455,59556,66605,66841,68863,69096,70174,70914,72874,73305,73315,73393,73601,74163,74726,74790,74844,74883,74996,75204,75439,75880],"originating":[13814],"drawcolorswatch":[30635],"png":[78,3580,3729,3814,5853,6713,8868,9061,13140,14301,14319,16651,19851,24932,25303,25548,30150,30666,36050,37670,40718,41040,41181,41471,41937,43087,48613,49778,50659,52064,52629,56841,61576,63439,63779,66678,68133,68361,68624,69674,70561,73238,73922],"physical":[2958,4964,6794,6910,7218,8030,8555,9017,9184,9320,9751,9767,10686,10725,11598,13179,13408,13579,13695,13879,13972,15012,15816,15831,15884,16453,20072,21391,21485,22862,25756,30145,33525,33575,33756,34840,37350,37533,37675,37805,38458,38477,39408,40643,53720,55651,59743,60358,61541,65370,69332,69438,72879,72941,75173,76096],"find":[62,219,410,469,633,855,1243,1282,1730,2004,2127,2184,2716,2959,3252,3598,3768,3881,3906,3949,3985,4028,4160,4206,4218,4267,4368,4449,4501,4563,5155,5168,5719,6081,6468,6790,6795,7621,7815,8218,9261,9370,9515,10118,10540,10687,11039,11160,11572,11612,11687,11918,12039,12318,12557,12801,12885,13042,14699,14893,14967,17384,17955,18080,18112,18357,18405,18464,18596,18683,18756,19174,19493,19663,20271,20666,21024,21142,21262,21401,21636,21692,21854,21956,21964,22020,22089,24472,24988,25070,25118,25225,25451,25623,25859,25892,25916,26611,26723,27801,27918,28251,28420,28476,28639,29162,29372,29420,29581,29714,29787,29835,29926,30101,30237,30410,30511,31592,31621,31672,31735,31751,31769,31781,31806,31827,31844,32082,32097,32121,32146,32208,32332,32350,32376,32598,32621,32641,32669,32716,32751,32895,33101,33437,34242,34325,34449,34617,34672,34855,35141,35714,35812,36084,36199,36432,36514,36588,36693,36936,38712,39092,39182,39255,39952,40291,40472,40564,40812,40893,41173,41294,41344,41417,41489,41609,41691,41841,42190,42774,43197,43239,43375,43462,43521,44976,47163,48258,48585,49418,49441,49849,50291,50322,50917,52080,52082,52182,52369,52513,52556,52745,53191,53997,54452,54509,54577,54699,54912,54964,55064,55163,55236,55310,55370,55511,55813,55905,56126,56213,56274,56328,56395,56478,56524,56593,56737,56800,56983,57126,57338,57680,58145,58445,58595,58733,58999,59272,59911,60675,60882,60983,61198,61419,61508,61542,61595,61750,61944,61960,62342,62498,62644,62743,62840,63131,63864,65002,65696,65764,65780,65849,65916,66050,66180,66225,66335,66361,66373,66605,66992,67151,67681,67763,67988,68043,68209,69397,69501,69513,69769,69810,69970,70103,70187,70246,70280,70313,70341,70376,70687,70807,70869,71007,71049,71194,71212,71385,71442,71446,71665,71859,72051,72077,72141,72297,72476,73147,73687,73982,74130,74222,74410,74458,74916,75101,75127,75322,75979,76068,76156],"d_toggle_bg_focus":[63494],"developer”":[53214],"serialization":[3731,6037,9074,10909,17182,18537,20187,21639,25309,31051,31457,33500,36736,36762,37227,39851,40560,52610,55251,55399,55560,56248,56299,59191,60156,65893,66458,74356],"retweak":[11612],"metal":[5706,8405,12232,14014,14338,19302,19881,20419,20448,21101,21936,23552,23611,25839,27534,28879,29438,29441,29446,29452,29472,29551,32702,34207,34274,34485,35063,36164,38321,41766,41850,42150,42210,42809,43030,43801,43940,44055,44270,44560,44833,45009,45253,45421,45510,45579,45738,45841,46737,47065,49449,49465,49478,49509,49519,49630,50091,50169,68772,72762,74924],"standardshadermaterialparameterheightmap":[41769],"canvasgroup":[8140,15188,36454],"uploaded":[1749,4299,4428,10109,27742,36395,53304,53851,67237,68433,68484,68614,73774,74257,74837],"includelayers":[7971,8175,8272,8390,8775,9040,12734,14510,38571,38601,38635],"contextualmenupopulateevent":[55973,60426],"randomization":[32429,37500],"buildtargetgroup":[75878],"hands":[5965,7231,7862,17815,18104,31125,31485,38653,49511,49630,72978,75095,75321,76166],"js":[6712,12426,68950,69195,70043,73183,73238,73356,73722,73924],"checked_hover":[63480],"completecontent":[68236],"deprecate":[4372,4405,4449],"keyword2":[70858],"identicial":[41840],"unitypurchasingeditor":[66988],"istorelistener":[67144,67293,67351,67625],"procedure's":[28718],"31aep":[30316],"quality_high":[42980,43055,44529],"near”1":[44954],"zone":[254,5162,5207,7615,7752,7789,8862,10329,13148,15020,18896,22947,31813,37690,38059,43118,50473,50611,52170,71860],"setpivot":[48442],"throws":[1038,24983,26180,26460,38483,52672,57309],"january":[50286],"packerjob":[48692],"unique_identifier":[67465],"navigationcancelevent":[60501],"scroll_left":[63473],"getorcreategameobjectformesh":[75858],"deal":[1703,3246,3379,5989,10069,12972,18258,25219,30124,42812,44022,58369],"'number":[40888],"nh":[46627],"textinputbasefield":[55440,59729],"targeted":[14883,15982,21505,22347,35714,37145,42378,51087,51388,58381,59749,64333,66520,67018,67229,67840,72794,73641,75918],"arp":[22318],"transitiondelay":[63013],"examplestring":[48952],"numbatches":[26367],"field__input":[65323],"examine":[3516,6094,12852,22043,25135,30265,33401,36684,42066,54706,57319,57585,58560,63105,74918,75140],"cellspace":[51728],"decompressor":[73328,73937],"ate":[54529],"dragwindow":[59622],"breakpoint":[25850,28394],"m_textureheight":[76380],"maskfieldsnippet":[64948],"cameraoffset":[75122],"nintendo":[5713,6841,37775,45443,50200],"throughput":[9905,50002,75439],"per":[84,223,554,1672,1797,2022,2063,4493,4862,4911,5351,5607,5961,6094,6126,6279,6301,6499,6572,7032,7310,7510,7543,7556,7920,8057,8203,8296,9172,9460,9653,9733,9784,9894,9948,9996,10132,10271,11105,11149,11244,11274,11571,11600,12897,12990,13215,13251,13412,13477,13665,13680,13822,13865,13939,14134,14314,14560,14608,14989,17642,17925,18292,18373,18454,18509,18597,20135,20270,20423,20491,21323,21509,21586,22165,22319,23246,23585,24574,24652,25096,25173,25615,25994,26040,26335,26409,26495,26992,27038,27145,27261,27303,27509,27741,29277,29640,29720,29895,29996,30175,30260,30333,30352,30426,31703,31731,31788,31917,32227,32299,32328,32357,32594,32682,32731,32874,32921,33092,33391,33480,33656,34361,34738,34860,35042,35344,35650,35919,35952,35997,36031,36201,36303,36397,36621,36753,37143,37662,37793,38292,38329,38345,38384,38435,39412,40009,41270,41820,41843,42178,42378,42393,43122,43489,43700,43895,43969,44062,44386,44445,44677,45058,45142,45194,45248,45568,45720,46024,46295,46529,46776,47421,47942,48125,48887,49358,49531,49739,50001,50034,50126,50419,50455,50669,50888,50981,51041,51137,51235,51954,52160,53176,53293,54475,54560,58149,60652,61381,61557,61921,63758,64320,66432,66668,68130,68609,68996,69247,69740,70723,72724,72920,73248,73702,74251,75140,75468,75750],"receipt":[17045,23194,28135,34375,67342,67538,67550,67611,67708,67751,68475],"onsubmit":[49902,61801],"ondragleave":[57445],"rewind":[32186],"addrequest":[69519],"circle":[89,2012,2284,5123,6294,7343,7755,7815,7986,8187,8262,9002,9167,9297,9727,10609,12782,13024,13163,13555,13673,13771,13799,14983,15822,15832,20667,22189,25524,27342,28424,32411,34781,37446,38392,48526,48586,48605,48622,51825,56727,58336,60899,60999,62066,65999,71617,72470,73475],"savings":[12411],"pirate’s":[34932],"multi_compile_fog":[10159,32952,44587,46457,47206],"sibling":[4717,5098,24551,39662,54449,54727,56101,57598,62805,70774],"meter_size":[24909],"sometype":[25009,40565,52612],"spam":[12655],"destroying":[9347],"hdd":[24977],"rasterized":[19286],"ab":[3434],"mechanical":[26985],"invert":[5231,7986,43382,43821,44389,45902],"descriptive":[9781,18327,35089,63746,67175],"tlayer":[27455],"slicing":[100,166,2838,12164,13130,13754,14141,37375,37481,37711,48363,48515,48630,48868,48903,64117,65990],"popitem":[65422],"cmd+":[23737],"mechanisms":[6146,22522,34188,61186],"utf8":[38709,68450,68952,69197],"compelling":[22419],"jog":[6281,22546],"12px":[58666,63238],"loadasset":[2823,3336,3361,3492,3550,27682],"frametimingmanger":[21931],"pro":[234,2999,10431,12275,15902,17949,21010,21097,28604,30472,30502,31252,34983,38034,40445,44707,50236,52065,54171,58651,67903,69518,72786,72953,74202,74366,75185,75209,75304],"quadoutline":[48486],"duplicating":[3431,3488,20243,54553],"navmeshsurfaces":[69395,69499],"scriptables":[51224],"msc”":[66690],"instanced":[3486,5351,5594,5724,13372,16256,20237,23250,23378,31876,36387,38050,43334,43456,50366,50434,51794,51804,54430,68767],"unity_2019_4":[33817],"reflection":[245,5972,6036,6798,7723,7744,7903,8623,8647,9341,9451,9939,10302,10662,12014,12882,13119,13215,13514,14246,14637,22121,22875,23637,25289,26077,26718,26808,26867,26953,27073,27110,27169,28475,30357,30864,32307,33456,34875,35129,35794,36629,36753,37664,37682,37691,37721,37872,38308,38362,40365,40556,42440,42447,42456,42470,42515,42521,45198,46273,46809,47373,49431,49611,49631,49636,49726,49804,50442,51069,52552,67698,68851,69060,71591,71848,71853,73406,73455,73904,74217,74296],"le":[12222],"fr":[53625],"delayedfloatfield":[59617],"deeplinkactivated":[19376],"siblings":[39657,39796,54883,56101,59837,62796],"listener":[257,5160,5179,7565,7614,7645,7752,7771,22580,66853,67090,67294,67398,67587],"heard":[5042,5120],"stereographic":[44071],"texturestreaming":[72756],"synchronous":[4629,8384,18257,27694,33502,45041,68625],"skippermissionsdialog":[1384],"examines":[9498,23543,33381,42132,57318],"sandbox":[881,1370,25960,33067,52825,53013,53127,53357,53685,53909,53998,54014,67002,67039,67389,67812],"importassetoptions":[3608],"meshinfosout":[75749],"arcore":[2982,17770,31038,31425,50258,68758,74369,74997,75033,75300,75393],"humanoid":[1865,1968,1987,2191,5264,6317,7018,7145,7348,7845,9137,9759,13810,18051,21339,21565,22063,22503,25193,25623,29114,29134,29732,29742,29903,37609,38436,38676,40615,71760],"receipts":[67399,67560,67587,67602,67760],"triggerscript":[32786],"trace":[936,1706,11950,12388,12577,18118,18312,18934,19201,23159,24916,25845,26041,26253,33407,33472,34435,35141,49389,52558,73188,73303,73697],"slowdowns":[23442,32115],"disorientation":[19286],"properies":[39519],"__mesh__":[32452],"glsls":[73447],"manipulatoractivationfilter":[60228],"bittorrent":[25487],"bilateral":[36609],"createcube":[30654],"die":[2032,7594,7603,7611,7634,7643,7653,10976,13665,32728],"related":[60,682,999,1027,2185,2723,2953,2959,3573,3718,3779,3987,4033,4133,4357,4510,4732,5046,5155,5182,5911,5989,6689,6788,6956,7292,8427,8987,9322,9332,9500,9944,10010,10460,10795,11221,12068,12659,12740,12838,13359,13562,14469,14790,16619,16843,18629,19141,19567,19661,21449,21892,22027,22203,22699,24467,25172,26812,27766,28457,29292,29579,30345,30426,30917,31621,32243,32847,33400,33456,35011,35264,35380,35694,35797,36097,36296,36514,36693,37498,38287,38444,38532,38576,38621,38736,38840,40645,41583,42012,44231,44581,44809,48237,48683,48913,49646,49728,50145,50641,50937,50987,51849,51950,52236,52408,52546,53175,53489,53706,53724,53997,54065,54469,56712,57417,57682,59732,59841,63106,66037,66223,66848,67291,67293,67726,68652,68784,68962,69209,69398,69502,70363,70693,71042,71542,71904,72394,72911,73480,73608,74914,75324],"scenesusingassets":[15294],"falling":[5160,13645,23439,75368],"smiling":[61943],"declaring":[8493,18536,20248,21766,23579,23810,42059,42115,42432,42956,43045,43981,44083,44501,45013,45214,46512,62112,72024,75541],"drawcommandscount":[5673],"pulls":[9694,9973,10337,43195,51543],"unityxrinputprovider":[75584],"layertoremove":[26624],"minsdkversion":[23499],"disconnect":[28455,66352,67703,68069,76194],"subscription":[6135,12119,16168,30385,30470,30502,54025,66965,67019,67087,67170,67230,67624,67719,67841,67903],"coordinate":[318,6514,6723,7959,8094,8263,8505,8603,8862,9541,12515,13062,13215,13389,14034,20684,21240,22866,23817,29880,33607,35247,37280,39367,39724,43698,43897,43928,43971,44413,44832,45290,45671,46805,46874,47281,47909,48515,50145,50478,50540,50909,50946,51156,56096,58147,60390,60793,62121,62801,65730,66764,72323],"localbounds":[51731],"pipelines":[3507,4427,5690,5832,6680,6804,6857,9197,9243,9466,9670,9845,9994,10112,12831,12885,13430,17108,17116,17124,17152,17539,18243,18650,20338,21529,22109,22878,23543,23592,23623,24503,27075,27189,27217,27270,27698,30991,31341,34845,36182,36576,37637,38238,38256,40150,41826,42333,42603,43169,43485,44205,44671,44759,44788,45398,45932,46091,48977,49153,49169,49281,49332,49520,50362,54158,68777,69342,69446,71067],"entity":[234,3456,6152,13339,13392,15902,16275,21571,22852,26474,30384,32701,64339,67026],"obstacles":[73,86,9386,10071,18454,22312],"cert_pem":[66611],"labelsnippet":[64834],"dat":[49770],"readback":[5945,34485,72996],"mega":[43019,48162],"hundredth":[51989],"#3f3f3f":[63253],"untracked":[36234],"files\\unity\\hub\\editor\\\\editor\\data\\playbackengines\\webglsupport\\buildtools\\emscripten\\emscripten\\emscripten":[73656],"rule's":[53941],"projectile’s":[25571],"handlerecenter":[75588],"bullet":[12827,14559,25789,32650,46484,62020],"oncollisionexit2d":[35271],"nativeleakdetection":[26253],"#000000ff":[49858],"cellheight":[76401],"sparingly":[10579,15839,26058,30356],"unity_access_dots_instanced_prop_with_custom_default":[20278],"audits":[27775],"remoteconfig":[53936],"spacing":[8386,9269,13985,17642,36680,39543,39575,39779,40050,40129,49849,58326,58459,59698,62015,64147],"occlusionpreferencemode":[74385],"fulfils":[36599],"alphamode":[12475],"knows":[3846,4230,4959,5044,10378,24169,27705,33416,42211,45724,50881,55927],"fraud":[67758],"kunityxrinputtrackingoriginmodedevice":[75588],"secondary":[8505,25286,26120,26170,27487,29856,31765,34256,34337,34463,38872,41771,43690,44085,48616,48638,49446,49472,49559,50175,52153,52178,52219,58204,75656,75901],"intensive":[1467,1766,5260,5810,6024,6105,7568,7575,10130,11320,11604,12912,13252,15832,18616,20418,20438,22144,25292,25861,26013,26714,26799,26931,29009,30320,30356,31701,32651,33498,34738,35126,35611,35763,36334,36464,37397,37647,37704,38624,41491,42060,42204,42944,43175,44384,45582,48353,49402,51035,54139,72497,75453,75793],"uniquename":[57314],"m_navmeshlayer":[21656,76432],"onmeshgenerated":[75863],"immobile":[15862],"emulated":[463,53891],"my_package_c":[70781],"vcperforceusername":[21045],"windowbtitle":[57527],"resets":[6963,11443,12588,12755,13276,13293,17982,17995,18184,20116,30238,34523,35177,36829,36982,39160,51097,51228,54455,59192,63747,65989,69356,69460,70404,70872],"scripting":[122,384,441,562,870,919,1044,1299,1745,1891,1947,2062,2769,3245,3609,3724,3807,4313,4557,5829,5929,5992,6142,6232,6325,6368,6397,6473,7378,7662,7768,7782,8205,8385,8787,8973,9281,9328,9555,9621,10444,10688,11177,11247,11304,11879,12225,12589,12969,13018,13130,13267,13309,14004,14526,14699,14848,14959,15847,17149,17756,17982,17995,18392,18414,18445,19016,19061,19085,19106,19189,20116,20205,21200,21390,21525,22014,22024,22472,23524,23777,24454,24607,24723,24943,25311,25720,25854,25992,26042,26076,27340,27644,27983,28166,28262,28379,28473,28780,28873,29437,29682,29782,29813,30094,30280,30509,30854,31198,31451,31595,31652,33084,33299,33382,33411,33419,33453,33538,33618,33774,34189,34424,34522,34598,34657,34791,35085,35189,35376,35427,35700,35865,36041,36497,37276,37332,37535,37710,37760,38605,39905,40291,40452,40512,40523,40525,40528,40543,40615,40642,40649,40671,41904,43322,44532,48499,49407,50209,50289,50342,50939,52008,52241,52549,54157,54511,54763,57128,58736,59001,62815,66225,66394,66404,66450,66503,67074,67161,68015,68312,68592,69511,70307,71067,71174,71194,71922,71979,72062,72082,72118,72133,72145,72149,72293,72476,72716,72857,73168,73285,73365,73498,73899,74214,74307,74504,74586,74629,74747,74789,75262],"four":[170,308,1779,1918,2008,2131,2242,3348,4286,6179,8048,9135,11628,12941,13076,13218,13478,13939,14244,14329,15891,18078,18991,20344,21524,21584,21929,22088,22186,22624,23440,23816,24770,25921,26451,26953,27261,27336,29733,32755,32861,33308,33601,34885,35748,35903,35969,36356,36679,36817,37293,38347,40346,40441,43052,43895,44433,45082,46922,47111,47911,48227,48350,48662,48876,49852,50351,50684,50897,51320,51991,52097,53293,54722,55153,55856,56881,58876,59906,61201,63680,65088,65768,67185,70236,70306,71547,71795,71880,72209,72858,74335],"apache":[73153,73707],"document":[18683,18940,20445,21640,33902,39854,52584,54121,54293,54398,54496,54558,54575,54640,54674,54948,55039,55141,55191,55271,55338,56339,56530,56630,56730,56788,57136,57344,57641,58107,58583,59274,59567,59782,60027,60755,61272,61299,61593,61888,63828,64548,64643,65793,65866,66043,67641,68512,68747,73244,73993,74093],"profilermarkerdataunit":[35422],"use_webgl_2_0":[73942],"++m_identlevel":[37024],"french":[9279,53625],"devicedefinition_setcharacteristics":[75521],"hub\\unity":[69968],"2021lts":[69042,69294,74132],"\\unity\\config\\upmconfig":[70198],"pptr":[7170],"compression”":[7175],"nested":[1431,2001,2260,3693,8114,13598,17968,18319,18452,18751,20650,24393,24527,24897,26172,26254,28545,30034,33495,34908,34959,35692,36451,36695,36792,38744,39678,39872,40569,41170,41359,42325,45175,45390,49827,54168,54224,55229,55603,59852,59928,61387,61469,65049,65512,65884,68534,68614,68803,73972],"rectangles":[8089,24306,27090,49536,54727,56116,59831],"free":[4,234,273,1653,2933,3246,3455,3975,4025,4092,4158,4257,4450,4493,4772,4933,5351,6155,7263,8506,9699,11812,14003,16168,17045,17912,18581,19620,20260,20571,21097,22041,22375,25751,25859,26025,26164,26351,26431,26540,27691,27901,29158,29891,31642,33087,33381,33420,34740,35139,36694,38376,38408,39253,40791,44091,45337,47878,50583,52584,53324,55155,62796,66667,67170,67256,67659,67733,67873,70259,71391,73620,75383,75803],"max":[165,2194,5238,6381,6443,6699,7544,7669,7709,7756,7794,8309,9008,9301,9700,9963,10015,10478,10655,11137,11537,11603,12902,13022,13108,13164,13658,13863,14208,14285,14501,20497,20977,21433,21486,21585,23962,24674,25194,25983,26367,27358,28179,29752,31153,31687,32171,32275,33678,34212,35931,36011,36596,37551,37675,38492,39243,39987,40792,40860,43737,43815,46626,47696,48597,50375,50465,50560,50972,51027,51513,53288,54732,61531,61835,64050,71716,74642],"screw":[72342],"9bc4b04df2e874e564aa47e76d443b8b002cf61f":[66780],"customstartswith":[6015],"printed":[25130,34215,38719,50929,52558],"localize":[52831,53131],"m_optionsmenu_start":[52561],"065c6bd0":[74566],"interweaving":[51202],"bem":[56724,61771,64334],"11+opengl":[45482],"marker":[465,1915,2272,2395,3966,7103,7327,13846,14758,18567,19653,21659,22686,25410,26357,27946,35385,35679,35688,35890,36916,39353,48188,49643,70607],"guides":[658,5819,35963,37605,44300,53166,53561,60350,62739,66971,67040,67992,68566,68689,68811,68849,69040,69294,69506,74411],"projectname_data":[74657],"improved":[2755,17474,17642,26472,30369,30513,33153,34485,36569,38175,38346,48579,68707,74146,74244],"twigs":[52178,52230],"eventtypeid":[57938,62180],"'low":[42971],"layoutrebuilder":[54280],"sv_instanceid":[45506],"prefix":[4164,4960,7375,18752,21069,21676,29908,34626,34678,36860,41223,41330,41453,42611,57220,58095,63660,65867,66598,70606,70772,72474,75626],"optionalunityreferences":[3064,18852],"microtransactions":[22375],"plus":[1881,2242,2256,2278,2412,7938,9589,10723,11807,12227,12275,13846,18255,20218,20587,20646,23617,28604,30042,30472,30502,32064,34274,34484,34892,35280,36105,36227,41393,41548,45479,48586,50486,54224,63467,63733,64179,66456,67032,67100,67180,67903],"preceding":[8859,61908,62875,63730,69856,72037],"submesh":[21524,35068],"applymodifiedproperties":[20806,54989,55140],"bulgarian":[53611],"‘emission’":[26788],"kformatr8_srgb":[50106],"accessing":[386,3403,3729,5351,6110,9350,12671,14009,20267,25045,25196,25672,25861,26294,26427,26463,28773,29586,30110,32766,33307,34404,35661,36508,40526,45120,48604,49745,52758,52947,62775,66645,67142,67154,67752,69662,69990,71960,72971,73115,73669,74516,75321,76123],"myrepository1":[70486,70601],"khttpverbget":[68120,68254],"#aeaeae":[63309],"childcount":[9391,55126,65426,74476],"console_entry_warn":[63447],"overtop":[68660],"wealth":[50942],"_lightcolor0":[46563,47108,47676],"unity_stereoeyeindex":[1679,43358],"scrollervisibility":[65327],"aside":[6794,6896,32917,36224,38638,48163,52246],"generategeometry":[8385],"mosaic":[74187],"revalidation":[73225],"playercontrollerid":[10813,11093,66240],"resellers":[234],"framebufferonly":[34485],"thread’s":[29248,35714,36058],"xrdepthsubsystemdescriptor":[74382],"friction":[7256,7961,8165,8265,8293,8375,8767,9028,9293,11504,11627,11642,11653,12724,13239,13839,14503,14943,15844,17488,22305,26588,33629],"a8textureusage":[36454],"snapshot":[249,4797,4813,5126,27923,31230,36220,39052,74238],"psd":[78,3814,4500,6713,15979,25177,25238,31048,31393,37497,74187],"clump":[32412],"m_batchid":[5368,5512],"remapped":[21402,48243,48269,58156],"customizing":[1610,3720,4646,4965,8012,10365,17110,18895,23715,24050,24736,28306,28349,29151,35149,35602,38983,39059,39102,48683,52239,66238,67651,70225,75026],"mylocation":[70001],"forceupdatecanvases":[13116],"uimanager":[57699],"beginfoldoutheadergroup":[59598],"point32":[29338],"dsp":[4811,4874,5020,5122,7483,7664,7763,14845,35988],"__ping":[32412],"sits":[16869,62747],"tileset":[51131],"caching":[1406,2593,3300,3453,3586,12400,25115,25946,37828,41490,41857,41992,45036,66555,68281,68613,70734,73026,73206,73368,73622,73899,73943],"postprocessbuild":[6343],"editor_sync_compilation":[4629,45041],"st2084":[34288,34501],"batches":[5347,5349,5499,5805,11570,14498,14538,20264,20392,20402,25985,26508,30205,30341,30358,31642,33482,36355,36432,36530,38331,49381,49698,50395,51200,60642],"readarrayelement":[26192],"classreferencingobsoleteunityapithrougheditorassembly":[2740],"highscore":[27678],"seeing":[13041,18565,22145,36525,45455,54682,72243],"similar":[478,698,935,1704,1946,2211,2245,2360,2839,2894,3287,3465,3731,4206,4256,4392,4749,4774,5254,6007,6110,7927,8411,8522,9145,9197,9243,9343,9541,9670,9845,10074,10735,11624,12334,12718,12810,12831,13195,13261,13757,13858,16241,18070,18358,18450,18458,18797,19348,19361,19623,19635,19657,20116,20380,20436,20639,20810,21088,21160,22079,22125,22203,22343,23982,24370,24515,26121,26263,26787,26919,27214,27483,27813,28115,28129,28283,30097,30985,31649,31717,31985,32315,32859,33347,33492,34210,34536,34855,35250,35883,36042,36188,36203,36333,36365,36507,36777,36846,37142,37390,37499,38209,38297,38604,38660,39142,39277,39313,39591,39714,39727,39740,39977,40000,41192,41753,41814,42190,42620,42766,42793,42947,43149,43376,43554,43985,44058,44275,44627,44848,45103,45474,45614,45721,46274,46620,46979,47123,47184,48894,49495,49533,49613,49650,50305,50368,50542,50579,50630,52095,52683,52706,52730,52929,53954,54442,54574,54769,54901,57852,57970,58732,60761,61448,62746,62836,64190,65081,65911,65987,66668,66929,67884,68087,68347,68384,70042,70455,70806,70944,71281,72110,72789,73089,73203,73452,75208,75397,75426],"editorexample":[18695,18833],"ongui":[4970,9599,9661,11122,20808,20869,20946,21170,21359,23779,23888,24063,24173,24275,24456,30634,36279,36427,44214,49979,52337,56579,59552,65973],"reality":[2937,2958,11686,11785,12094,12285,12337,12505,16827,17880,19286,20450,21630,22856,29663,31201,34264,34346,34472,42810,50251,68751,69020,69273,72520,72796,72884,72899,72954,74399,75303,75365,76094],"deepskyblue":[63549],"library\\artifactdb":[3600],"activatetoggle":[56491],"“linear”":[45246],"passflag":[42406],"lightingstandarddefaultgi":[46653],"decompressing":[3249,7482,27654,29367,73309],"resourcemanager":[15139],"abs":[2108,14208,46385,47641,51464,61155],"developing":[633,648,655,665,703,840,866,1096,1483,1516,1599,1809,2940,4881,5156,8442,17488,17744,17985,18813,22192,25173,25716,25741,25763,25828,25835,26105,27671,35957,43320,51009,52698,52710,52730,65896,66436,66902,69729,70315,72090,72797,72903,73360,74121,74498,74506,75209,75231,75291],"objectvertex":[14178],"vulkannote":[50196],"'tilemap'":[51120],"shadergraph":[17537,18773,30993,37958,43335,49154,50046,74207,74349],"paddingbottom":[57085],"\\rununitypackagemanagerdiagnostics":[70928],"animset":[6703],"software's":[25194],"gear":[1952,4808,18493,35771,50413,50427],"hierachy":[71783],"protruding":[49524],"toolbar_button":[63248,64270],"individually":[250,501,8128,10083,10398,14539,17926,20381,20578,20631,23209,25439,25599,27325,27341,28493,29568,29915,30331,31816,32701,34783,35040,36570,36703,38621,38640,39438,40291,42224,51204,54726,61610,66598,70761,74177],"manually":[131,229,405,421,475,513,634,1003,1029,1091,1192,1322,1384,1502,1539,1582,2083,2286,2353,2441,2702,3430,3508,3652,3861,3889,4649,4816,5276,5326,6211,7061,7181,7313,7368,7506,8032,8146,8232,8302,8487,8503,8902,9502,9589,9688,9982,10129,10370,10772,11550,11803,12153,12346,12742,13152,13167,13208,13363,13559,13666,13678,13724,14542,14684,14756,14790,14874,17924,18098,18179,18985,19167,19613,19618,20341,20381,20438,20571,21096,21486,21572,21676,22122,23124,23275,23395,23586,24371,24468,24721,24740,25101,25178,25816,26675,26700,26908,26988,27110,27168,28285,28670,28714,28752,28761,28951,29707,29946,30333,30718,30905,33087,33419,34072,34171,34371,34986,35801,36488,36600,36883,37665,37671,38486,38661,41756,42615,43023,43414,43972,44053,44839,45521,45565,47324,48258,48377,48514,48597,48657,49067,49365,49734,50148,50289,50542,50688,51065,52258,52501,52598,53310,54258,54492,54771,55630,58150,58375,59534,59872,60643,61498,62811,65051,66361,67092,68264,68325,68351,68590,68805,68825,69058,69304,69410,69809,70227,70330,70519,70916,70963,71391,71423,71593,71754,71813,71856,72399,72475,72833,73252,73642,74458,75017,75157,75249,75361,75673],"d_unlinked":[63457],"process_resident_memory_bytes":[66650],"capacity":[1770,23460,26472,34189,38405,66133],"#999999":[63284],"aimodule":[16598,30951],"subfolders":[3735,4227,4959,12812,18764,18828,19466,21418,25154,34539,48185,69710,70743,71687,73920],"batch":[2724,3692,5350,5616,15699,17936,19029,20264,20395,20420,21048,21688,21739,23270,26361,26508,33489,34214,36450,36531,38332,38711,38902,41783,44386,49354,49668,50647,60646],"pointer_stringify":[68952,69197],"container1":[63852,63884],"serializedpropertytype":[20994,55122,55621],"linear01depth":[44025,44942],"_instance":[6085],"onclose":[56585],"regenerated":[209,7767,35340,62867,68898,69136],"plugin":[260,381,482,509,964,1294,1827,1838,2192,2985,4729,4747,4970,5156,5178,7368,7671,16091,17045,17770,17800,17847,17862,17892,17909,20004,23480,24930,25920,27897,29929,30002,31038,31405,34570,34675,34692,38013,38714,40190,43465,44974,49395,49803,50249,52478,52553,55155,66114,67690,69018,69270,69371,69475,70295,72794,72886,72901,73501,73662,74204,74590,75077,75277,75346,75393,75918,75984,76071,76300],"me":[1512,2523,2562,23806,24309,24459,55689,56010,56047,59560,60598,62034,62366,64448,65139,65375,65400,65438,65465,65483,65507],"vnd":[53677],"diverging":[32372,66002],"samplercube_half":[44285],"\\unity\\editor\\upm":[27790],"immediately":[603,631,3580,3692,4001,4614,6133,8203,8384,9918,10870,11075,11467,11548,12279,14527,15864,15967,16227,18309,18620,18894,19027,21052,21323,21929,23626,25047,25584,26289,28493,29702,29973,33081,34987,36084,36569,37713,39774,39912,48858,49030,49283,49642,51310,51407,52582,53605,54281,55547,57954,58194,62586,67090,67484,67595,68210,69621,70794,71495,71509,73964,74928,75133,75431,75793],"3dbe":[70032],"“dumpfolder”":[74575],"boolean":[747,1873,2012,2342,3696,5259,6024,23932,24792,39606,40084,40745,40791,40901,41462,44534,57244,57900,64653,65368,65890,70833,70876,73936,74340,75551,76208],"mp3":[4774,5165,5977,6696,7469,22578,25841,52099],"f10":[34222],"abitrary":[16241],"s_memmanager":[27909],"development":[3,62,75,413,434,561,601,625,655,680,692,698,848,867,948,955,1099,1190,1227,1483,1596,1804,2757,2937,2957,4535,4654,4875,5838,6036,6096,6149,6368,6397,6473,6856,9058,9440,10443,10698,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,11824,12359,12692,13261,13309,14278,14314,16850,17030,17752,17912,18045,18131,18513,18822,19053,19274,19641,19647,20767,21632,21860,21872,22618,25309,25717,25747,25831,25904,25973,25993,26041,26100,27674,27762,27952,28166,28254,28417,28797,29192,29581,29614,30327,30885,31007,31617,31718,33377,33395,33509,33842,33876,34293,34503,34668,35139,35250,35280,35797,36571,37268,37301,37501,37507,37670,39160,39964,40539,40652,40656,41928,41973,43922,45565,48177,48603,48894,49520,49744,50197,50363,50652,50926,52094,52644,52921,54106,58920,65898,65968,66022,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,66541,67235,67844,67893,68054,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,69748,70292,70769,70839,70910,71012,71156,72097,72129,72207,72475,72741,72787,72899,72938,73168,73298,73359,73385,73496,73597,73936,74085,74125,74612,74629,74789,74887,75280,75289,75372,75388],"opentype":[9247,58370],"native":[464,493,647,933,987,1029,1038,1094,1224,1269,1283,1290,1298,1398,1402,1568,1597,1706,1845,2188,2989,3816,4510,4729,4758,4868,5156,5178,6068,6126,6389,6691,7671,9121,11716,12051,12472,12769,12883,16137,17773,17803,18009,18915,19508,19994,21078,21962,22614,23522,23774,24632,24639,24928,24943,25194,25727,25826,25850,25888,25920,26108,26180,26241,26277,26322,26393,26434,26477,26508,27912,27936,28050,28061,28263,29150,29614,29923,29999,30313,30896,33450,33494,33515,34536,34639,34646,34655,34684,35142,35735,35959,36105,36214,36497,37551,39599,39630,39929,40500,40590,44026,44081,44974,49395,49752,50181,52511,52550,52744,54909,55551,55564,65989,66115,66450,66812,66834,66883,66901,66918,66929,66990,68090,68263,68951,69196,70513,71799,72057,72114,72119,72135,72147,72191,72474,72660,72716,72737,72986,73337,73366,73557,73613,73638,73689,73837,74355,74512,74588,74650,75256,75394,75426,75874,75909,76086],"increasing":[4,4997,6762,9466,9948,11546,11607,12885,13166,14149,14474,18229,18988,21509,22130,24164,25292,26056,26361,26510,26987,31642,32631,36591,37620,40176,41810,42368,43075,43121,44934,48660,50008,52032,66667,71105],"purchases":[3977,4083,4384,4390,17045,17062,17326,22329,25717,25751,25919,26105,30439,52956,53210,53333,53698,53760,53955,53991,54017,66960,66966,67027,67069,67151,67161,67244,67264,67272,67296,67333,67347,67536,67586,67644,67710],"pie":[1567,58030,58578,60670,63126],"abbreviation":[22331],"dashes":[64341],"exampletoolbar":[30597],"relaunch":[75910,75975],"scheduled":[5774,26122,26170,26244,26295,26384,26460,35137,36075,49060,49289,66667,73069,75444],"bulletspeed":[25787],"pat":[12811,70042],"tinting":[32391,42381],"gettrackingoriginmode":[76311],"ssl":[66598,67921,69901,70191],"signingconfigs":[23508],"slidetoggleusage":[61888],"eyes":[6910,27506,29724,75207,75579,76176],"cutscenes":[6781,21628],"family":[3984,5351,9804,12683,33487,42260,42465,42545,42874,42894,44296,57971,58203,58281,58923,59540,59748,60394,60562,60807,72701],"raydirection":[14202],"speficied":[47904],"wakes":[35735,75445],"absorbs":[42769],"here's":[2014,2241,25172,25981,29601,45670,46143,46550,47029,47581,49498,59842,75882],"icon":[1190,1881,2225,2245,2256,2462,3979,4294,4491,5129,5286,6314,6325,6355,6418,7815,7938,8979,9002,9167,9297,9727,9927,10338,10609,11669,11703,12041,12319,12440,12782,12871,13163,13555,13673,13901,14693,14983,18207,18435,18472,19074,19176,20105,20593,20646,20667,22090,22230,23215,23680,23846,24578,25400,25633,28352,29036,29282,30039,30408,30518,32323,34244,34327,34451,34790,34892,34950,35171,35198,35476,35771,36096,38749,38896,39050,39146,39229,39291,39317,41420,41543,41597,41678,43288,48188,48586,49339,49732,49957,50346,50413,50427,50510,50519,50527,50536,50549,50557,50567,50629,51405,51586,51825,52226,52433,52716,52979,53287,54407,58336,61585,62066,63091,64230,64733,65458,66014,66933,67180,67882,68742,69778,70103,70272,70376,71129,71301,71418,71488,71612,72189,72448,72769,74946,74996,75346],"hampering":[70910],"unreleased":[11843],"unityxrinputfeatureusageindex":[75568],"introductory":[12279,29411,38343,43100,66184,67736,67979],"zips":[49510],"initializecomponent":[74669],"m_currentclipindex++":[34123],"loading":[567,1343,1711,2769,3250,3309,3344,3351,3491,3540,3570,3610,4547,4573,4650,4776,5351,6034,6137,6479,7476,9511,10768,11767,12086,12331,12513,12901,16060,17865,18456,19096,19233,20279,21060,21676,23555,25263,26705,27123,27677,27693,28266,29036,29181,29332,29418,30206,30910,31982,33083,33094,33475,34303,34419,34518,34631,35365,35764,35924,36534,38276,39167,39171,39904,41708,41916,41954,42060,42148,42220,42938,42946,43013,43018,43104,48354,50005,50064,50140,50670,50968,50996,51146,52597,54590,58176,58791,60881,60982,63768,65031,66258,66903,67237,68130,68956,69203,69678,70059,70093,70126,70177,70362,71314,72204,73091,73189,73209,73333,73792,73913,74252,74592,74713,74795,75026,75133,75259,75943,75969],"fov":[6762,8026,21969,66002,68809,75460],"gl_oes_depth_texture":[38426,44056],"networking":[634,3384,3557,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,16869,17474,22701,66019,66032,66042,66098,66109,66177,66212,66329,66347,66372,66400,66447,68012,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,73376,73410,73664,73901,74126,74212],"statically":[4961,20211,26150,28584,30018],"irrespective":[8085,36349],"keypads":[29695],"indexers":[35181],"deployment":[17309,18481,19617,25444,26038,26065,31417,53310,71995,73172,74782,74810,74828],"but":[3,64,78,134,200,222,248,261,298,413,501,554,614,690,891,1006,1069,1087,1343,1404,1483,1497,1579,1619,1761,1904,1960,2045,2086,2238,2360,2441,2768,2990,3020,3247,3294,3338,3340,3471,3486,3564,3573,3602,3680,3728,3776,3859,4061,4186,4245,4385,4413,4440,4766,4772,4825,4997,5044,5160,5196,5276,5330,5352,5679,5721,5725,5736,5774,5910,5945,5990,6123,6314,6352,6403,6480,6496,6688,6750,6758,6793,6892,7017,7156,7199,7319,7364,7487,7673,7763,7776,7841,7879,8003,8078,8114,8146,8203,8247,8302,8437,8522,8833,9008,9060,9145,9261,9321,9337,9457,9541,9604,9673,9682,9762,9781,9875,9937,9998,10108,10354,10398,10489,10580,10651,10688,10740,10826,11166,11298,11307,11370,11519,11534,11612,11738,12104,12360,12442,12699,12809,12866,12971,13034,13116,13149,13182,13215,13249,13261,13308,13417,13534,13580,13617,13645,13648,13763,13791,13855,13862,13919,14027,14076,14269,14338,14549,14562,14694,14717,14824,14847,14943,15012,15039,15838,16091,16151,17488,17978,18070,18125,18254,18337,18344,18366,18458,18501,18536,18564,18671,18746,18933,19197,19296,19636,19944,20009,20237,20394,20446,20588,20808,21040,21230,21322,21460,21571,21661,21758,21841,21971,22012,22061,22079,22116,22186,22203,22244,22301,23278,23420,23452,23525,23550,23629,23673,23982,24244,24515,24632,24640,24758,24777,24891,24904,24923,24946,25177,25187,25381,25399,25735,25841,25849,25872,26041,26054,26079,26121,26138,26269,26296,26387,26451,26473,26496,26564,26611,26645,26689,26789,26917,26946,26991,27036,27082,27088,27171,27210,27215,27297,27490,27508,27579,27624,27678,27742,27764,27813,27927,28174,28402,28475,28607,28763,28856,28885,29009,29183,29333,29391,29421,29485,29598,29678,29714,29759,29814,29879,29895,29906,29997,30043,30063,30141,30168,30172,30243,30271,30320,30354,30520,30861,30985,31008,31368,31380,31649,31701,31745,31816,31838,31869,32078,32136,32168,32219,32257,32372,32632,32712,32776,32865,32934,33074,33086,33381,33400,33437,33450,33533,33583,33655,33763,34207,34281,34397,34485,34597,34637,34712,34783,34911,34985,35248,35277,35719,35794,35933,36105,36234,36497,36590,36637,36768,36886,37142,37280,37345,37480,37526,37623,37639,37668,37684,37708,37725,37971,38277,38384,38463,38478,38509,38547,38574,38630,38661,38815,38827,38862,38907,39124,39140,39191,39311,39437,39492,39568,39591,39638,39663,39666,39714,39727,39879,39989,40091,40175,40555,40746,41202,41359,41459,41491,41783,41820,41830,41892,41990,42109,42185,42245,42346,42354,42449,42456,42751,42766,42793,42934,42974,43118,43173,43224,43456,43618,43689,43751,43922,43985,44105,44580,44677,44758,44797,44830,44981,45096,45134,45176,45195,45213,45474,45523,45565,45599,45620,45721,45846,45858,45970,46224,46764,46873,47067,47232,48058,48163,48177,48244,48269,48349,48607,48680,48894,49177,49283,49449,49468,49479,49491,49500,49506,49522,49573,49639,49642,49687,49817,50005,50065,50288,50368,50435,50551,50600,50670,50877,50939,51018,51158,51182,51788,51962,52099,52229,52488,52501,52546,52715,52754,53148,53293,53718,54227,54469,54513,54558,54716,54769,54788,54823,54883,55550,55570,55642,55813,57149,57845,57965,58288,58378,58440,58732,59001,59549,59855,60495,60610,60635,61186,61443,61490,62758,62903,63065,63683,63978,64025,64153,64328,64373,65386,65968,65987,65999,66043,66197,66314,66337,66363,66396,66435,66501,66570,66823,66852,67153,67214,67732,67800,67903,68198,68283,68347,68498,68531,68541,68601,68701,68954,69200,69337,69443,69729,69769,69810,69990,70195,70211,70283,70295,70332,70373,70585,70759,70773,70806,70944,71053,71164,71175,71191,71216,71293,71315,71323,71422,71552,71578,71799,71806,71858,71952,71969,72052,72276,72303,72407,72475,72505,72616,72706,72787,72880,72916,72971,73089,73121,73172,73248,73300,73319,73410,73454,73480,73631,73687,73694,73741,73896,74156,74423,74613,74627,74774,75017,75056,75068,75081,75154,75264,75324,75417,75501,75764,75987,76023,76095,76332],"vertinstancingsetup":[31891],"delivering":[568,893,942,1810,17642,22693,25687,26106,28283],"bindposes":[375],"eyetracking":[76142],"cellgui":[52412],"changelists":[72445],"x2":[11021,41776],"client’s":[11075,53029,66243],"shoes":[49511,49630],"polished":[37549],"outright":[6212],"dtid":[8417],"vectorimage":[54740],"radiant":[22165],"determineresolution":[20505],"8px":[59319,61836,64005],"instantiatingwallblockassigned":[25548],"transitioncancel":[62415],"textureunlit":[45549],"in_foldout_act_on":[63454],"option":[14,88,134,254,269,560,603,631,643,679,722,857,1127,1512,1589,1649,1895,1962,1975,2061,2254,2456,2724,2967,3065,3247,3871,4628,4747,4845,5259,5306,5328,5963,6040,6263,6283,6384,6397,6468,6758,6837,6990,7015,7365,7472,7900,7986,8002,8266,8317,8623,9060,9279,9322,9537,9771,9974,10014,10135,10364,10397,10439,10575,10657,11104,11247,11281,11417,11551,11608,11657,11719,12065,12299,12328,12598,12838,12882,13130,13247,13417,13464,13574,13598,13705,13732,13752,13790,13834,13862,13913,14238,14348,14484,14547,14814,14851,15011,17986,18064,18123,18473,19164,19189,19637,20076,20117,20211,20572,20640,20754,21032,21392,21454,21585,21711,22035,22074,22111,22127,22147,22226,22946,23256,23404,23449,23852,24390,24663,24764,24978,25036,25065,25207,25264,25367,25459,25605,26041,27664,28096,28135,28166,28249,28382,28835,28886,29062,29109,29368,29755,29903,31702,32130,32180,32231,32243,32357,32414,32687,33842,34207,34256,34337,34463,34600,34712,34994,35221,35398,35680,35697,35804,36041,36118,36187,36473,36610,36636,36713,37708,37724,37838,38277,38377,38503,38549,38583,38622,38632,38660,38711,39069,39079,39257,39347,39471,39792,39824,40064,40069,40219,40662,40722,41718,42137,42752,43260,43458,45009,45211,46772,47892,48235,48244,48269,48349,48373,48512,48519,48607,48641,48674,48857,49336,49399,49554,49850,50366,50452,50547,50593,50796,51088,51120,51159,51237,51264,51344,51889,52206,52638,53303,53806,53997,54458,54551,54591,54730,57869,58310,58441,63723,64533,65086,65370,65945,65982,66365,66391,66587,66879,66894,67086,67921,68551,68602,68775,68852,69061,69307,69352,69413,70720,71229,71364,71466,71534,71593,71684,71748,71848,71869,72178,72372,72385,72470,72502,72677,72836,72849,73118,73170,73294,73319,73392,73445,73487,73592,73622,73922,74154,74229,74537,74591,74645,74789,74850,75080,75112,75146,75224,75346],"collectables":[41344],"ontriggerstay2d":[35271],"frame’s":[22058,36040,72936],"openimagedenoise":[23452,36599],"deviceconnected":[76194],"street":[7620,10096,26932],"disconnected":[18009,25711,43183,66254,67696,75511],"prompting":[3901,4473,12659,18363],"unityxrhapticimpulse":[75609],"casts":[7895,9878,9966,36397,37422,37653,50437,52407,52489,71577],"landmark":[50411],"untitled":[41731],"multi_compile_prepassfinal":[44584],"db":[4867,5117,7517,7789],"permission":[881,1260,1355,1370,1487,4129,4357,12400,16075,23525,28612,30416,53883,66572,67012,67256,67953,70418,70717,73093,73288,73674,74389],"shader_api_mobile":[42974,43944,44991],"aborts":[68210],"decrements":[3695],"conservation":[11521,42811],"uav":[45509],"styles":[51,9265,9557,9620,13442,17642,21624,24053,26732,27077,37307,37314,49817,49958,54357,54425,54612,54632,54684,54688,54748,54795,54847,54870,56729,56770,57125,57665,58498,59552,59833,61191,61305,61389,61828,61955,62037,63068,63107,63681,63828,63981,64201,64275,64318,64380,64546,64752,65214,65296,65369,65476,65691,65736,65766,65773,65891,65913,68497,70561],"ondidapplyanimationproperties":[54289],"night":[6842,7620,10096,42779],"annotated":[28585,33433,66489],"slow":[391,564,1467,3229,4573,4994,5945,5989,6075,6370,6427,6475,6807,7138,7154,7198,7254,8188,9307,9693,9982,11320,11518,13238,14702,14912,18509,20612,23439,25865,26041,26441,26908,27738,28168,31745,31838,31852,32136,32609,32849,33478,35170,35765,36432,39774,40097,45564,51956,52480,52530,54895,62886,72339,73176,74631,74791],"segment":[3490,10271,11842,13574,14581,17206,20580,20736,22407,24663,26096,31220,32528,32731,33730,58560,62027],"circumvent":[39618],"m_name":[21653,55399,55594,56248,56299,76429],"anymore":[24773,35949,51788,71241],"smart":[12647,16151,16470,37500,48052,48370,72405],"iteratively":[37650],"rewrite":[3302,47423,73804,74883],"slant":[58320],"geometrical":[10573],"attenuating":[7539,7552,7794,73054],"rightdownleftdownsubdiv":[27424],"ff":[62011,62422],"vec4":[44367],"viewdatakey":[65707],"plasticscm":[9069,21045,22715,31187,35092,48055,72375],"package's":[1194,3237,3954,3999,4034,4086,4199,4204,4326,18681,18716,18757,18819,18936,35185,48499,70211,70252,70307,70340,70376,70610,70807,71043,71132,71369,71428],"maxsimplificationerror":[76409],"parsethreaded":[42228],"recipients":[53743],"markdown":[18681,18731],"string":[737,824,1416,1509,1918,2493,2553,2640,2824,2917,3031,3357,3484,3531,3623,4207,4960,5029,5984,6061,6154,6333,9281,9625,10706,10826,11021,11412,11843,12154,12596,12801,13320,13959,16470,18547,18850,19022,19391,19485,20007,20486,20788,20898,20931,21659,21919,22920,23829,23910,24060,24175,24481,24816,24993,25113,25678,25935,28045,28270,29104,30560,33133,33906,34374,34681,34717,35420,35522,36258,36406,36798,36826,36979,38703,38979,38996,39207,39347,39484,39619,39863,40346,40474,40563,40732,40868,41172,41330,41447,41471,45077,45621,45987,47236,48455,48717,48952,49797,49921,51454,51581,51699,52068,52355,52662,53928,54476,54524,55189,55258,55529,55557,55856,55963,56158,56381,56410,56592,57115,57217,57313,57434,57620,58041,58245,58361,58761,59381,59930,60792,60913,61013,61443,61703,61773,62122,62366,62972,63799,64540,64767,65357,65420,65704,65758,65892,65945,66114,66393,66858,66944,66965,66999,67019,67178,67230,67288,67337,67345,67567,67618,67728,67841,68090,68247,68264,68317,68348,68380,68434,68509,68676,68840,68952,69085,69582,69690,69997,70610,70813,70877,70982,72018,72160,72203,72235,73303,73417,73534,73633,73928,74078,74595,74675,74875,75524,75878,75955,76040,76090,76129],"“lollipop”":[1518],"orangered":[63613],"rewrites":[2708],"estimated":[5288,22371,36237,36569,53514],"errorprone":[38740],"onstatechanged":[18584],"strongly":[5764,6025,6059,18935,20766,20862,20917,21381,25492,31819,36784,37261,52238,66623],"segments":[7073,9024,12721,14581,22335,33436,51621,58518],"unity###":[67999],"textfieldsnippet":[65349],"liner":[6026],"lighter":[1336,42256,45274,49510,63308],"isfreetrial":[67733],"#666666":[63384],"sinking":[31719],"imultipartformsections":[68379],"pbs":[41752,42810,49451],"instant":[41935],"downloadhandlerfile":[68081],"outermost":[10503,20638,34781,49832],"whitelists":[73142],"lowpassvalue":[29652],"unity_declare_texcubearray":[8749],"unity_access_dots_instanced_prop":[5351,5609,20276],"loosely":[13696,18054,18988,22066,29434,48660,71762],"ulimit":[27609,50186],"blacklists":[73142],"recomputation":[35126],"counter++":[20138],"unity_dots_instancing_end":[20255],"system's":[13241,21588,22144,27654,31860,32299,32747,32848,40805,61497,66697,69893,72730],"keyboardcontrol":[52466],"obstructed":[6794,31716],"getpackingmode":[48782],"crosswind":[72299],"maxmotortorque":[74435],"checkjni":[609],"ties":[17835],"#ff0000ff":[49850],"elapse":[32183],"batchcullingoutputdrawcommands":[5496],"32x":[58398],"instabilities":[52764],"350px":[59306],"variable":[532,1679,2121,2726,3326,3834,4599,4751,4955,6063,6207,6234,8426,9351,9597,9823,9898,10385,13008,13064,13899,14033,14323,18113,18282,19399,20738,20788,21903,22538,23495,23835,24077,24473,25503,26108,26600,27654,28378,29104,29663,29695,29806,30096,30164,31634,32063,32307,33135,34072,39507,39918,41200,43375,43589,43977,44058,44534,44637,44851,45048,45121,45695,46196,46766,47067,47309,48965,49350,49642,50676,51959,54673,54749,54880,56074,57914,58826,59134,59696,62836,63229,63658,64205,64315,64653,64896,65187,65368,66606,69769,69810,70110,70166,70200,70515,70592,71247,72046,72231,73251,73408,73449,73563,73927,75532,75946],"environment_variable":[69790,69857],"maxwidth":[48770,59674],"proguard_debug":[23504],"submit":[4061,4186,4209,4349,4364,4397,4405,4413,4421,4452,4471,12442,17062,25962,26700,28143,28669,28713,28755,28760,29444,33069,34257,34338,39385,39517,40002,49042,49289,49902,52745,52769,52915,53159,53320,53702,54015,58132,60502,65339,67870,70709,70918,72417,72920,75436],"hkd":[53677],"extent":[20422,29907,33715,43154,50670],"delayedcallmanager":[15105,18314,33490],"unityprofilermarkerdesc":[27961],"repulse":[12698,21149],"depicting":[31662],"batching":[144,3319,3673,6914,9341,11809,12347,17925,20377,20401,22759,25989,27716,29347,30330,32705,34276,34490,36375,36432,36524,38219,38332,41866,46073,48329,49667,49723,66739,74141],"drops":[5260,8872,14718,53882,57492,57566,57979,72925],"showalternatingrowbackgrounds":[52377],"revealinfinder":[2487],"cautious":[26574],"command+d":[24557],"key's":[20571],"shadesh9":[47122,47711],"prd":[66775],"databases":[3593],"isswitchenabled":[55189],"indexer":[2690,31133,40810],"generation+":[50197],"blob":[6046,12828,43175,72800],"#e6e6fa":[63570],"kminside":[27353],"streamingassetspath":[511,2917,3371,3546,49738,72482,72645],"entice":[4140],"uncover":[36081],"getsharedmaterials":[33374],"lean":[2131,50381],"realism":[246,5161,26936,27329,29714,37740,43205,72608],"gameobjectfromassetbundle":[3566],"unity_reversed_z":[43979,44938],"deviceswithprimarybutton":[76229],"kunityxrinputfeatureusagedevice":[75627],"extrusion":[14502,46345],"brevity":[4884,36924],"externally":[1941,21439,22528,33286,54492,68493,72424,72608],"node":[2034,2254,6263,6283,7084,7937,13392,14933,14938,17752,17759,18071,21460,21571,22024,22070,22461,24669,25215,33909,34157,34192,35236,37841,38676,41822,42159,43451,49643,49660,50145,50699,52112,52176,52201,60087,70043,71787,74350,75074,76134],"passtype":[44577],"versatile":[18357,55886,64745],"bandwidth":[4697,9457,12903,13427,20344,21526,29339,29568,30367,35650,43117,44292,50669,66556,70563,72711,72733],"objecthit":[6734],"fit":[67,187,501,913,1765,2439,3455,4354,6750,7185,8039,8117,8208,8565,8632,9024,9855,10014,10561,10938,11790,12721,12937,14868,18611,18899,20071,20241,21296,21453,24739,25551,27738,29153,31610,33440,33529,34197,34245,34328,34452,36093,37596,37817,39374,39416,39457,39493,39553,39724,39801,40055,48162,49325,50960,51031,51137,51238,51638,54224,54375,54463,57971,58444,59177,59345,59541,61556,64114,64752,65982,67560,67706,68906,69146,71809,75090,76136],"m_bakedcolorspace":[76374],"tile":[48,137,167,6873,8828,9098,10269,12445,13212,13755,13898,14469,14498,14539,14606,16020,17118,21935,22929,29449,32731,34486,37376,37500,37792,38261,42243,48163,48364,50002,50056,50128,50147,50347,50431,50520,50526,50543,50630,51073,51077,51098,51129,51160,51173,51177,51204,51234,51249,51257,51343,51579,51614,51620,51708,51752,51778,51785,51798,51812,51819,51843,51849,51874],"deallocation":[27865,29167],"rowguiargs":[52394],"maxcomputebufferinputsdomain":[19766],"navigates":[39814,57985,60511],"14th":[50286],"statuscode":[69536],"#228b22":[63555],"assumes":[237,3867,5642,14702,19692,21206,27562,27591,28705,28744,28762,31997,32731,33296,34646,37484,37516,37684,44548,48315,48375,49617,50150,52239,57703,63741,66330,66902,67195,70686,70879,70984,71158,72527],"synchronously":[3398,4628,27694,72401],"geometry":[67,2191,4579,5162,6492,7965,8168,8268,8367,8373,8765,9031,9127,9258,10000,10121,10272,10379,10595,11320,12723,12912,13378,13784,13914,13976,14029,14507,14610,14964,15828,15840,15890,16345,17000,17642,20411,21203,21356,21449,21694,21846,22061,22144,22512,23619,23635,25208,26004,26665,26789,26971,27304,27754,29464,30243,30271,30291,30320,30349,31120,32705,32738,33651,35129,36395,36569,37480,37618,37838,38481,40054,41783,42183,42713,42729,42754,42797,42811,43106,43174,43413,44177,44294,44392,44428,44625,45009,45453,45618,45784,45852,46009,47419,47952,47984,48023,48906,48987,49497,49515,49706,50513,50929,52123,52186,52192,52488,56727,58463,59826,60619,60980,61524,62867,71752,71809,71817,71959,72488,72800,74194,74458,74907],"numberformat":[36896],"islands":[35339],"constructs":[16241,18317,21956,73953],"configmanager":[53929],"webxr":[75311],"dedicating":[5017],"maintexhdr":[8748],"functionalities":[812,8882,16036,25885,30692,36736,48557,64407,64422,64462,64482,64505,64557,64580,64604,64625,64688,64739,64817,64835,64852,64870,64885,64924,64949,64966,65017,65074,65096,65111,65126,65158,65237,65261,65280,65350,65379,65529,65546,65561,65578,65598,65618,65639,65659],"‘default":[13799],"onserverremoveplayer":[66281],"roadtile":[51621,51788],"endif":[2800,2907,4658,18560,23578,24940,26152,29988,30026,31954,32972,33780,34705,39946,42040,42966,43953,44847,46441,46697,48780,51627,67459,67796,72657,73232,73971,74106,74686,74880,75709],"kcubeysign":[8664],"hasattribute":[37245],"presentrenderbuffer":[25999],"accelerator”":[66692],"outdiffuseocclusion":[46518],"23f":[20901],"drawmesh":[4623],"m_inspectorxml":[58828],"solutions":[4639,5820,6934,13463,13545,16168,17370,18427,24766,25892,27598,34846,36686,43117,43486,43506,43515,43564,53318,65920,66023,66437,67756,70396,70651,71847,72787,74362],"shuriken_toggle":[63478],"anim":[6703,7016,24827,32054,32920],"keystore":[616,927,960,1106,1116,1133,1148,1178,1656,11964,23139,52892,53382,67236],"webgl2":[12346,73438,73942,74095],"processdeeplinkmngr":[19389],"bands":[4965,18615,23417,44294],"unityxrdisplaystats":[76069],"duplicates":[3315,5110,25417,33660,40918,52229],"inconsistent":[13621,25106,44839,67155],"up'":[75440],"filtered":[7548,7560,7645,10738,13219,14259,21607,29661,31014,41151,49102],"m_progressmesh":[61020],"aggressive":[29363,67551,70246,70571],"selectedindex":[55961,59205],"heat":[30326,42800],"separating":[2768,8356,11612,23146,30048,30385,37618,48510],"cell’s":[51156,51189],"controltexture":[23837],"xenforo":[70561],"consist":[478,2179,2353,3574,6840,18408,27118,30047,30501,37547,39640,49648,52718,64342,65742,69904,75515],"panel's":[61307,61527],"ksizeoffloat4":[5374,5518],"geomerics":[22764,27468],"clip1":[33945],"noparamcallback":[52664],"masks":[1977,4511,4519,7067,7840,7870,13717,13762,13790,26799,27214,27591,28071,29110,32288,36569,38297,38347,39666,41771,45858,72757],"study":[6154,24769,37325,71772],"summary":[4010,4679,4966,24482,26565,30136,35634,37668,38413,38415,58424,59750,67966,74240],"arrangement":[2190,5115,9537,9772,22826,32651,40175,48681,52092,52223,69333,69439,71868],"“blendshapes”":[10510],"retrieved":[9386,12652,18607,39638,53708,67553,68317],"attraction":[11486,31823,31857],"beige":[63513],"forest":[3520,49437,49706,50595],"detailprototype":[50379],"baseeasier":[6885],"divots":[25435],"ft0bjvbrd'":[66615],"monstersearches":[41468],"my_package_tarball":[70785,70894],"solver’":[36339],"raytrace":[6707],"primitive":[77,1416,6193,7947,8149,9426,10579,13637,15832,21202,22018,22836,26058,29398,33290,35239,36351,38482,38886,39863,40456,48614,49024,55566,56722,71773,71864,73556,75991],"buildtarget":[455,2797,3251,3536,6336,19091,19110,21052,24482,25937,48745,74085,75878],"stripenginecode":[66462],"sequencing":[2236,4776],"scroll_up":[63475],"faster":[155,434,1227,1406,1759,1967,2048,2274,2399,2977,3248,3669,3692,5994,6070,6154,6383,6398,6472,7660,8590,9466,9895,9971,10375,10572,11254,11277,11489,11570,11740,12885,13239,14318,14954,17985,18105,19192,20124,20340,20394,22093,22129,22910,23437,24977,25309,25599,26042,26451,26482,26571,26891,27119,28181,28403,29153,29718,30369,30858,31624,31703,31745,31997,32134,32216,32849,33400,34941,34988,36570,37676,38384,38574,38640,39266,40570,40810,41783,41860,42804,43456,44293,45564,46764,48309,51052,52259,53324,55511,58396,62841,68611,68710,72877,72916,72960,73319,73393,74141,74644,74787,74814,74847,75209,75439],"initpresetdependencies":[19549],"neons":[26790],"\\users\\myaccount\\downloads\\unity_v2017":[28746],"irridescence":[38008],"reject":[34377,43302,47985,53322,57585],"loadlibrary":[1077,18547],"scriptablebuildpipeline":[17141,31321,31455],"unity_transfer_vertex_output_stereo":[1700],"limb's":[8260,74905],"propagationphase":[55848,60533],"utilizing":[72916],"disable_fastmath":[45040],"textureblock":[45270],"_texelsize":[45160],"editormanager":[9132],"10px":[56865,57363,59362,61849,62245,62455,63240,63901],"embedding":[29766,69567,70451,71166,73203,73561,74014],"unresolved":[48067,54016],"printvalue":[36872],"worked":[50362,65849],"41px":[59359],"roundness":[52137],"tailoring":[2764],"downloadhandler":[68100,68340,68366,68475],"psb":[15982],"parallelfortransform":[26544],"dom":[73244],"currentlyselectedtab":[57172],"club":[7620],"braces":[41174,45175,54800,63735,66388],"consists":[1672,2701,3585,4806,4873,6723,7305,9222,11423,14734,17993,18065,19968,21180,21203,21704,22075,23169,23477,25526,27073,30243,31725,33585,34743,42715,46513,50939,51886,52585,54797,55806,59347,63843,63860,63878,63893,63914,63940,64205,66917,68459,68512,68708,74016,75254,75909,76295],"looping":[2347,7067,18320,27816,32153,62489,62491,62636],"buttoncontrol":[75690],"reprocessed":[35340],"mcc":[825],"thunder":[7562],"celsius":[54963],"explicitly":[1886,2306,2564,3484,4961,12397,12663,18884,20129,21326,23798,26360,27510,29834,30871,34041,34161,34607,35799,36507,36782,38575,39614,39817,40221,40505,40825,41449,45200,45455,47810,48174,49506,49880,52610,53075,55582,57331,59750,59852,66394,67154,69819,70389,70902,70963,71077,71366,73138,73198,73238,73302,73877,74332,74859,75901],"dragenterevent":[57470,57567],"rubber":[14967,15844,42812,49449,50929],"blocky":[8831,9878,14001,22896],"albedoswatches":[28897],"blurring":[37695,50947],"ksizeofmatrix":[5372,5516],"createtemplatefromscene":[38980],"battle":[6842],"myfunction":[34728],"terminology":[2004,14305,28983,29411,38446,40150,42013,42121,42815,43100,58018,72722,73907],"brushpreviewmode":[68885,69121],"gwlp_userdata":[34237],"spring":[7294,8252,8508,9163,9690,13185,13647,13669,13858,14953,14979,22303,26555,26564,26592],"selfillumparallaxspecular":[42584],"rgba":[554,11814,13920,14322,24518,27150,27261,34280,36897,37083,38366,43752,43850,43884,43968,44097,44433,45077,45309,45702,57360,61467,63264,63648,63758],"scriptupdater":[2701],"originates":[6723,21684,50909,71155,72879],"sampler3d":[8967,14181,45139,45210],"samplename":[35695],"trusting":[66777],"uint16":[28045],"simplification":[10226,10655,11629],"mangled":[73299],"playername":[10831],"notarize":[28074,28115,28124,28129,28186,28280,28316],"gold50":[67249],"upm":[3232,4513,22567,27773,69891,70457,70917],"kunityxrdepthtextureformatnone":[75427],"logicalinvert":[43821],"sceneopened":[39016,39210],"multiple":[146,167,237,356,582,794,987,1108,1230,1332,1393,1509,1611,1812,1822,1832,1868,1882,1909,1942,1972,1996,2192,2204,2215,2239,2257,2263,2327,2387,2414,2427,2667,2720,2842,3259,3306,3461,3497,3675,3732,3912,4091,4565,4710,4877,5083,5321,5730,5770,6094,6118,6285,6750,7178,7446,7463,7771,7930,7989,8019,8114,8188,8387,8419,8872,9079,9136,9222,9364,9518,9715,9828,9909,10205,10348,10475,10722,11001,11078,11105,11175,11199,11221,11272,11436,11463,11556,11660,12007,12303,12620,12797,13538,13616,13696,13897,14498,14560,14694,14734,16470,16919,17045,17062,17370,17925,18065,18315,18340,18438,18479,18504,18596,18981,19346,19359,19999,20264,20394,20420,20549,20639,20675,20807,21068,21323,21460,21688,21697,22005,22040,22075,22480,23264,23377,24058,24299,24547,24652,24728,24763,24767,24790,25096,25181,25369,25412,25489,25524,26000,26109,26278,26360,26384,26459,26477,26495,26714,26717,27025,27092,27322,27685,27705,28445,28987,29186,29354,29447,29614,29721,29847,29881,29915,29997,30207,30312,30324,30443,30501,30868,31624,31653,31870,32139,32232,32705,32775,32864,33261,33386,33398,33582,33612,33659,33760,34188,34738,34758,34884,34904,34924,34947,35187,35340,35782,36303,36393,36463,36590,36710,37321,37376,37527,37632,37796,38349,38402,38606,39134,39222,39354,39444,39493,39523,39625,39879,40039,40099,40180,40594,40677,40835,41160,41346,41370,41706,41843,41882,41990,42050,42177,42193,42312,42354,42424,42449,42811,43022,43239,43493,43515,43564,44079,44386,44516,44660,44671,44758,45025,45200,45267,45389,45420,45462,45588,45717,45932,46755,47805,48178,48336,48353,48364,48503,48529,48594,48653,48940,49177,49511,49630,49696,49763,49817,50002,50146,50289,50520,50647,50880,51135,51204,51234,51291,51361,51612,51874,52042,52393,52674,52851,52972,53097,53602,54002,54836,54885,55014,55633,57290,57628,57887,58066,58111,58310,58447,59524,59580,60024,61323,61380,61487,61921,62009,62748,62853,63068,63220,63681,63810,63843,63864,63878,63893,63911,63974,64026,64182,64295,64369,64528,64586,64696,64973,64986,65315,65742,66012,66036,66341,66355,66374,66719,66941,66967,67036,67147,67189,67582,67785,67903,68070,68202,68248,68498,68555,68606,69719,70248,70698,71183,71236,71278,71297,71343,71396,71434,71493,71511,71645,71937,72287,72291,72423,72610,72687,72707,73478,73816,73953,74177,74312,74779,75019,75080,75252,75280,75393,75570,76149],"other’s":[71879],"getuvdistributionmetric":[50976],"iunityinterfaces":[27893,27970,29926,75268,75884,75922,75995],"2019lts":[69294],"extension":[405,488,1239,1285,1729,3078,3258,3735,3870,4217,5178,6889,7364,8411,8786,13351,13702,13964,14449,14950,18748,18850,19479,19666,22555,25124,26715,28052,28063,28109,28218,28390,28848,30293,33769,34163,34595,34678,35087,38425,40454,40718,40812,41233,41374,42020,42321,43472,43913,44056,44364,48073,48164,48220,48581,53307,54479,54500,54674,54794,55578,56116,56220,58604,58794,61188,61277,62429,62550,63134,63773,66685,67281,67570,67707,68580,69007,69259,70106,70606,71475,72620,73190,73331,73501,73816,74090,74187,74399,74514,75099,75414,76088],"numbered":[13760,13794,14545,14795],"_force":[74644],"remain":[3958,7053,9076,18315,21164,23940,24776,25176,25883,26081,26954,27824,29704,32360,32414,33228,34956,36554,37261,38619,38889,39382,39771,48600,48621,49484,49570,51879,60157,68534,69771,69812,70283,71018,71207,71413,72052,73088,75819],"agnostic":[19334,19374],"only_renderers":[30305,44920,45030,45420],"june":[52101],"isdone":[35764,73682],"broadcastsreceived":[11060],"logicalandreverse":[43828],"currentlyselectedtabclassname":[57218],"mobilekeyboardsupport":[73480],"hslhue":[43843],"scenez":[32995],"rowrect":[52399],"penalty":[25307,42178,43022,61328,62867],"decals":[12831,37913,46483,72798,72826],"listenerpos_x":[5233],"unityxrcullingpass":[75472],"m_bounceboost":[76381],"fireprojectile":[25575],"instanceid":[3275,20271,23257,41505,48747],"profilerrecorder":[17030,21913,35280,35687,35778,35937,36227,36367],"jit":[12657,18016,24944,29813,30856,35728,37261,40514,40555,52609],"2b1":[68658],"afterrowsgui":[52464],"rawmetadatavalue":[20301],"man8":[66694],"headquarters":[53580],"negligible":[26510,29732,48146,64328],"nt\\currentversion\\aedebug":[74540],"topics":[867,1809,4246,4531,5342,5812,5845,5911,14776,18041,18666,25247,25717,26105,26810,33750,35961,36466,39854,43322,58029,58741,66452,70588,72077,73361,73593,74888,75376,76094],"50ms":[65137],"logic":[1711,1991,2180,2238,2351,2769,2959,3812,5044,11521,13962,16470,17282,17759,20948,21188,21322,21470,21927,22482,23798,24724,25345,30660,31764,32923,34744,36007,39508,48692,49650,49659,51166,51794,51965,54599,55927,56530,56730,56880,57125,57286,57518,57627,57834,58621,60209,61326,61959,62784,65024,65135,65339,65458,65687,65742,66877,67651,67777,68819,68962,69051,72437,72521,73248,74458,75023,75114,75133,75444],"ctrl+5":[36693],"physicsmanager":[11640,15076,33491],"recorders":[11821,21877],"frequencies":[4883,6136,7588,7597,7606,7628,7637,7648,7716,7736,22586],"established":[23134,35861,54123],"registercallbacksontarget":[56881,57440,60230],"specialist":[66901,75251],"hindi":[53629],"setshaderpassenabled":[44603,44821],"dxt5nm":[11815,34281,43966],"gaps":[9536,10000,10725,14502,21937,33401,35735,43200],"attachfrompanelevent":[60560],"revisions":[25064,53142,53398,53692,68611,70677,71484],"2xx":[53093],"command":[553,733,861,1035,1623,1771,1859,2723,4662,5491,5497,5725,5758,5802,5904,6385,6440,6483,7782,8643,10877,12770,13130,14848,15702,17930,18384,18467,18819,19115,19636,20190,20281,20548,20616,21015,21311,22103,23628,23707,24640,25102,25389,25443,25913,25939,25999,26072,26689,26699,27608,27764,28067,28079,28183,28186,28280,28407,28603,28669,28713,28755,29283,29858,30307,30490,33065,34200,34827,35082,35720,35782,35817,36058,36118,36557,37972,38278,38903,39136,41409,42100,42142,42672,43039,43209,43652,43689,43726,43799,44095,44131,44163,44314,44343,44375,44439,44591,44623,45107,45266,45849,47155,47236,47950,47983,48021,48053,49040,49289,49785,50500,51191,52627,52737,52892,53097,53831,55893,57978,66584,66894,66951,66978,68744,68831,69076,69788,69855,69860,69956,69993,70120,70150,70174,70345,70359,70608,70926,71349,71624,71681,71954,72086,72400,72475,72920,73294,74518,74646,74727,74798,74929,75081,75201,75415],"terrainutils":[68878,69114],"seen":[248,4155,4820,5067,6116,7145,7496,20637,21154,22389,24904,28914,29863,30164,34930,44966,46485,46524,47371,49468,49550,52567,53764,54277,65998,72723,74153],"copyto":[69015,69267],"defaultmarker":[28039],"kunityxrinputfeatureusagetrigger":[75650],"version’s":[53395],"called":[69,191,288,405,481,805,1127,1243,1463,1706,1890,1918,1995,2022,2216,2235,2314,2327,2382,2569,2644,2764,3432,3484,3525,3574,3591,3719,3733,4813,4877,5337,5805,5938,6094,6128,6266,6488,6514,6802,8085,8618,8992,9137,9264,10015,10068,10357,10712,10842,11011,11303,11461,11548,11735,12472,12804,12888,13116,13869,13912,14018,14078,14263,14699,14775,15844,16060,17982,18004,18313,18373,18585,18753,18791,18950,19322,19511,20135,20237,20393,20491,20716,20869,20967,21154,21305,22508,23377,23440,23779,24018,24152,24196,24474,24492,24625,24741,24785,24944,25225,25490,25529,25938,26118,26335,26409,26477,26665,26707,26962,27039,27068,27080,27088,27175,27511,27687,27694,27924,27991,28058,28067,28103,28218,28278,28463,28914,29092,29186,29391,29423,29703,29766,29813,29855,29908,29990,30035,30047,30072,30110,30321,30824,30909,31592,31661,31869,32232,32861,33007,33166,33383,33400,33424,33449,33544,33866,34717,34944,35270,35452,35478,35566,35764,35776,35888,36041,36187,36303,36679,36930,37145,37261,37289,37345,37526,37634,37684,38467,38483,38718,38827,39254,39310,39347,39396,39490,39523,39758,39951,39995,40084,40445,40573,40618,40739,41330,41742,41843,41988,42052,42121,42204,42311,42424,42619,42810,42944,42946,43016,43110,43147,43185,43308,43359,44083,44176,44231,44363,44516,44605,44625,44704,45169,45390,45838,45851,46040,47165,47182,48067,48170,48335,48695,48874,48916,49173,49354,49453,49524,49656,49738,49886,49916,50007,50057,50322,50409,50683,50703,50932,51070,51794,52010,52243,52641,53363,53999,54508,54543,54722,55141,55579,55672,55751,55826,56403,57630,58232,58622,58679,59042,59552,60436,60573,60839,61206,61391,61628,61970,62082,62132,62534,62759,63864,63921,64011,64310,65733,65970,66002,66119,66194,66243,66363,66461,66935,67274,67310,67335,67382,67537,67543,67548,67587,67625,67710,68088,68266,68492,68528,68624,68833,69078,69388,69492,69607,70211,70290,70340,70410,70869,71323,71723,71766,71969,72204,72231,72930,72986,73172,73337,73398,73639,73919,74292,74564,74602,74725,75252,75394,75431,75508,75750,75874,75987,76096],"flames":[11459,22854,32631,32701,50941,71872],"profilercountervalue":[35405],"anchor":[7222,8230,8501,9002,9167,9297,9686,9727,10108,13105,13155,13163,13555,13652,13673,13860,13986,14476,14983,22623,24735,24774,26564,27323,32308,37806,48515,50601,54722,59857,70487,70701,71775,75088],"assuming":[10270,14607,26991,28688,28726,36679,41278,48060,49541,55625,71090],"fxc":[41848],"improper":[6054],"migrate":[952,11612,30906,59548,60354,62738,68406,72538],"sale":[4082,4290,4354,40792,67161,67521],"messaging":[21193,25347,29419,54760],"activities":[810,1245,26049,30384,30475,35687,35881,36055,41459],"flicker":[2346,32701,43139,66006],"ascent":[58285],"initspriteeditordataprovider":[48393],"fill":[1915,4191,4245,4397,4426,4908,6765,8042,9110,11561,11716,12109,12472,13208,13798,14816,14866,18953,21045,22376,23264,24761,30362,33230,33564,35017,35879,36548,37499,39545,39585,39657,39721,39746,39983,40139,43520,46369,50348,51149,51280,51388,51533,51604,51917,53038,57998,58466,58860,59372,60680,64114,64768,64889,66596,67550,67966,68269,72929,73246,74821,75478,75751,75874],"helping":[14764,34377],"guard":[4654,32115,42059],"webgl_build":[74077],"paintpos":[51446],"framebuffer":[1029,11739,27509,27540,27553,29996,34361,34487,43967,44913,45514,72985],"libtemplate":[23483],"game's":[71,6750,6836,11755,12477,37373,37684,50939,51966,53238,53457,54059,67023,67234,67850],"feeling":[5064,8568,14567,30142],"incididunt":[65174],"onspriteselectionchange":[59129],"iconattribute":[30678],"reporting":[12121,17092,17521,25891,26034,30400,31479,39440,53167,53483,54046,61186,66918,74072,74190,74537,75474,75765],"guis":[4963,13995,22203,24468,45104],"projectors":[12831,46090,72798,72826],"adjacent":[9034,10237,30274,50346,50432,50522,50623,51631,55888,71882,72533],"systemallocator":[780],"reflectivebumpeddiffuse":[42437],"contextualmenumanipulator":[55973,60221],"unityaudioeffect_getfloatparametercallback":[4905],"plausible":[42811,46766],"ctrl+shift+g":[24549],"payments":[30440,67483],"buttons’":[60382,60795],"advantageous":[6128],"#ifndef":[41800,44540],"logcat'":[16564],"saturation":[28886,34867,35994],"defined":[279,1031,1936,1957,2006,3086,3440,3493,3806,3906,4227,4547,4654,4719,4862,4970,5128,5238,6102,6503,6572,6756,7010,7198,7373,7764,7959,7986,8085,8237,8263,8368,8436,8878,9002,9167,9271,9297,9444,9589,9686,9727,9838,9884,9991,10435,11320,11360,11600,12698,12808,12868,13105,13163,13204,13328,13476,13555,13673,13920,14711,14983,15025,15042,17133,18066,18375,18611,19017,19241,20194,20260,20834,21031,21415,21454,21661,22076,22417,24079,25171,25855,26866,26917,27323,28480,28889,29114,29428,29979,30260,30270,30555,31742,31836,32041,32261,32872,33545,33677,33774,34427,34525,34623,34800,35008,35450,36015,37346,37527,37690,38800,39106,39549,39662,40173,42637,43114,43325,43610,43744,43945,44207,44366,44439,44938,45103,45145,45270,45481,45866,46041,46760,47804,47907,48326,48336,48950,49137,49241,49506,49631,49785,50591,50629,50885,51586,51724,51962,53502,53959,54725,55562,58050,58354,61390,61485,61915,62017,62856,63814,64761,65754,65869,65988,66002,66390,66486,66946,67113,67896,68086,68476,68541,68869,69103,69398,69502,69663,70243,71032,71289,71453,72068,72998,73928,74259,75090,75394,75686,76158],"unorm8":[29382],"arcto":[58518],"selectively":[8088,9896,13257,13737,19017,19168,22810,33774,37742,38568,38598,72063],"examplefieldcustomeditor":[56646],"super":[774,803,5065,10010,19283,25499,37949],"switcher":[52766],"reminds":[30135],"quadro":[36608],"samplername":[44008],"mouseleavewindowevent":[60368],"cangjie":[25032],"inaccurate":[13250,27549,35364,36343,38483,42211,73093],"#8221":[52555],"minimaldeviceoverlay":[19954],"modest":[6149],"constrains":[26560,57907,74581],"searching":[3982,4218,4267,12812,18114,34601,34672,35158,36711,39887,40731,41088,52348,66690,71300],"getspriteeditordataproviderfromobject":[48392],"onparticlesystemstopped":[32177],"computeshaderimporter":[6697,15242],"camerasearch":[41467],"quithandler":[66859],"future":[442,899,1038,1181,1227,1762,2764,2956,4016,5011,5772,9057,10730,13620,15042,18485,19239,22661,23427,25692,25979,30327,31009,34425,34523,38515,41292,43959,48698,50016,52040,56674,60510,67689,67949,69334,69440,69768,69808,72914,74204,75187,75899,76086],"somewhere":[2815,4832,9712,18112,18277,20657,22036,22208,24333,26356,30243,39635,50534,50651,52610,72476,74496,75368,75589],"payment":[4009,4241,30413,53392,53703,53728,67272,67346],"m_previouslyselected":[24814],"someinteraction":[57718],"646d6432767729ea7d288c636183de97":[25126],"#ededed":[63334],"migrates":[43308,48565],"turns":[253,1588,2131,7927,8203,9337,18436,18993,25883,32257,32813,42971,44427,45009,45721,47711,48665,52757,61472,62307,63112,71040,72766,75424],"transform":[140,188,1906,1968,2037,2118,2298,2354,3755,5205,5350,5563,5727,5805,5964,6149,6723,6756,7080,7314,7846,8003,8122,8994,9095,9145,9381,9532,9711,9830,10266,10579,11069,11238,11267,11287,11450,11477,11555,11615,12761,12785,12985,13059,13099,13149,13234,13263,13282,13299,13484,13614,13749,13983,14603,14661,15049,15836,17978,18179,18297,19447,20252,20396,20606,20660,20776,21159,21455,21588,21663,22018,22098,22197,22236,22495,23278,23672,24526,24730,24740,24835,24906,25381,25408,25563,25643,25788,26268,26545,26562,26993,27325,27814,29114,29128,29612,29996,30671,31860,32015,32168,32279,32402,33579,34770,34900,34993,35341,35754,36454,37281,37347,37528,37622,38455,38461,38505,38542,38651,39137,39296,39382,39444,39467,39478,39587,39768,39900,40141,40466,40534,40638,40673,41161,47291,48154,49669,50301,50331,50540,51649,51712,51756,51801,51878,51974,52242,54223,54714,54763,55234,56112,56393,56914,58146,58392,62191,62660,62778,62886,63712,65984,66002,71571,71608,71643,71775,71986,72246,72323,72920,74418,74899,75107,76275,76455],"yoyo":[62530],"unavailable":[1973,3501,4654,7502,8877,9982,21711,26245,26908,28153,29269,33524,34639,48653,50398,67155,67295,67378,73332,73772],"suggested":[4064,37749,39554,48621,54848,70498],"csharpfoldout":[64658],"3+vulkanmetal":[45480],"wirearcexample":[22209],"backlit":[36593],"revolute":[7252,33605],"mousing":[72048],"steven":[36340],"procedures":[4055,4379,4451,18678,69883,70756,71121],"crude":[72928],"texturesearches":[40711],"across":[714,1812,2050,2768,3310,3461,3589,4051,4262,4562,4847,5124,5330,6045,6272,6872,7364,8188,9274,9909,9994,10079,10108,10793,11074,11191,11242,11613,12279,12618,13628,15890,16933,17045,17126,17474,18243,18254,20477,20538,21240,21555,22109,22544,23590,24372,24943,25089,26459,26478,26495,26787,26917,26992,27075,27090,27114,27189,27217,27270,27322,29880,29995,30413,30443,30872,31649,32233,32283,33093,33470,34900,34924,35139,35187,35622,35746,35894,36040,36118,36576,37637,38249,38265,39355,40474,40544,41774,42380,42813,43121,43169,44268,44387,45565,45725,48226,48375,49423,49473,49496,49510,49517,49593,49607,49629,50321,50357,50422,50469,50511,50522,53070,54425,55554,57343,58115,62031,64458,65963,66009,66341,66960,67195,67768,68527,68611,68926,69169,69740,70761,70775,71238,71941,72724,73662,74199,75395,76130],"myvert":[46426],"graphicsdependentdata":[19719],"amplitude":[4994,7548,7560,7685,7803,75609,76319],"actions":[1912,1996,2211,2264,2388,2462,2996,4367,4978,8436,9027,9138,9343,9765,10708,10850,15847,17045,17206,17981,18065,18112,18376,21173,21725,22075,22345,23677,24724,25763,26577,28108,28216,30047,32701,34940,35176,39389,39476,39744,39981,40009,40073,40769,40778,40797,40821,41298,41350,41410,41416,41439,41483,41493,41535,41592,41674,41716,44830,49642,51373,51966,52089,52769,53470,54553,55894,55973,57682,57925,58018,58130,59734,61490,61796,64651,66012,66071,66187,66436,66519,67690,71237,71529,72413,73274,74253,75080,75233],"evicting":[50008],"bloat":[6054],"interrupt":[26299,62485],"unsuited":[5952],"monobehaviour":[1453,2017,2785,2908,3329,3356,3543,3702,3743,5363,5507,5745,5783,6133,6239,6728,8654,8984,9371,10690,10719,10748,10805,11306,11548,13306,14091,14890,15042,15732,15851,16241,16869,18309,18370,18545,19389,19657,20132,20466,20773,20934,21154,21257,21307,21918,22195,22748,23364,23784,23887,24071,24183,24290,24805,25506,25640,25701,25771,25932,26321,26392,26632,27346,29420,29603,29839,29865,29911,29973,30016,30067,30105,30157,30900,31721,32786,33108,33728,33851,33914,35189,35450,35704,36257,36405,36648,36767,37356,38723,39169,39362,39879,40532,40634,42070,44613,45985,48142,48181,49223,49886,50295,50328,51407,51971,52564,54985,55257,55557,56074,56130,56409,56642,56730,57210,57680,58180,58621,58734,59397,59790,60161,60480,60523,60657,60750,61290,62757,66464,66928,67393,68095,68290,68330,68357,68391,68446,70362,71691,71963,72165,72229,72542,73100,73530,74311,74433,74871,75544,75954,76226],"faders":[4867],"default_inspector":[58921],"overwhelmed":[66667],"alloc_temp_job_4_frames":[29271],"deinterlaced":[14795],"heapu8":[73556],"using":[67,124,183,219,370,449,509,553,634,653,695,709,778,845,987,1255,1273,1402,1510,1740,1759,1862,1886,1903,1940,2008,2077,2216,2235,2239,2306,2322,2408,2418,2420,2547,2611,2630,2703,2783,2900,2989,3020,3241,3296,3327,3342,3347,3453,3455,3481,3512,3571,3603,3700,3724,3828,3894,3905,4071,4209,4227,4241,4298,4511,4524,4580,4652,4758,4788,5015,5065,5192,5357,5498,5701,5727,5732,5764,5810,5838,5923,6042,6062,6110,6233,6273,6298,6320,6325,6385,6414,6481,6498,6726,6754,6772,6793,6803,6880,7014,7156,7179,7364,7507,7624,7693,7764,7782,7840,7870,7900,7930,7990,8019,8122,8206,8303,8405,8561,8636,8653,8771,8882,8983,9011,9034,9065,9145,9176,9198,9258,9306,9328,9456,9617,9650,9671,9720,9742,9762,9821,9846,9937,10076,10108,10211,10360,10392,10439,10564,10691,10733,10853,10990,11039,11071,11134,11149,11161,11173,11206,11250,11275,11298,11303,11321,11561,11612,11660,11729,12044,12334,12524,12770,12830,12885,12968,13032,13130,13173,13193,13266,13307,13382,13460,13572,13599,13628,13683,13718,13781,13826,13868,13913,13956,14000,14025,14089,14287,14323,14525,14579,14757,14889,14944,14998,15021,15702,15840,15902,15935,15967,15982,16060,16091,16106,16120,16137,16241,16256,16364,16470,16707,17000,17030,17110,17133,17152,17326,17398,17929,17972,18030,18070,18135,18224,18241,18356,18390,18445,18459,18542,18571,18676,18797,18818,18922,18984,19018,19053,19095,19113,19128,19210,19274,19302,19334,19338,19352,19374,19383,19457,19638,19942,20053,20059,20131,20181,20206,20271,20390,20410,20450,20561,20643,20659,20772,20870,20918,21002,21031,21256,21328,21386,21487,21592,21625,21711,21849,21913,22005,22014,22029,22060,22079,22100,22105,22125,22139,22194,22234,22472,23258,23396,23445,23475,23553,23607,23623,23707,23782,23885,24069,24181,24275,24468,24489,24517,24596,24638,24730,24750,24771,24790,24901,24949,25031,25066,25147,25177,25211,25264,25333,25452,25496,25636,25682,25699,25770,25850,25860,25929,26040,26058,26072,26131,26302,26389,26585,26631,26712,26728,26787,26814,26947,26975,27047,27073,27093,27123,27131,27168,27178,27194,27214,27275,27307,27325,27335,27340,27467,27484,27491,27509,27538,27560,27583,27607,27648,27682,27705,27750,27768,27814,27858,28183,28197,28259,28261,28306,28390,28465,28606,28752,28782,28847,28866,28881,29102,29137,29153,29415,29420,29453,29486,29602,29714,29790,29816,29837,29860,29890,29907,29993,30003,30065,30098,30140,30169,30184,30215,30251,30301,30333,30352,30424,30490,30543,30858,30987,31601,31650,31669,31732,31748,31766,31778,31803,31824,31841,31870,32079,32093,32118,32143,32204,32241,32329,32347,32373,32595,32618,32638,32666,32712,32748,32846,32892,32921,33065,33078,33104,33381,33458,33492,33525,33617,33777,33906,34185,34193,34214,34340,34469,34608,34640,34657,34693,34791,34845,34931,34941,34994,35225,35252,35276,35406,35472,35525,35609,35700,35784,35811,35901,35944,35959,36055,36254,36402,36488,36579,36642,36688,36715,36762,36846,37261,37281,37373,37500,37536,37606,37617,37633,37693,37729,37825,38252,38264,38281,38297,38345,38585,38653,38685,38821,38992,39078,39138,39183,39297,39309,39345,39420,39467,39498,39551,39618,39671,39723,39729,39792,39819,39884,39994,40063,40151,40203,40450,40457,40571,40631,40663,40678,40726,40794,40841,41184,41295,41316,41348,41370,41424,41447,41462,41520,41544,41609,41697,41784,41816,41843,41899,41934,41963,41991,42010,42022,42043,42113,42183,42354,42389,42430,42597,42662,42688,42692,42716,42732,42757,42809,42896,42942,42956,43009,43017,43086,43118,43126,43145,43174,43221,43376,43457,43507,43557,43589,43655,43728,43860,43891,43979,44053,44123,44140,44188,44198,44231,44302,44320,44343,44377,44501,44590,44640,44676,44755,44784,44870,44980,45044,45168,45178,45184,45204,45266,45386,45417,45517,45582,45598,45627,45721,45841,45866,45929,45959,46248,46551,46718,46831,47145,47324,47949,47965,48003,48036,48168,48184,48224,48348,48379,48593,48606,48656,48674,48886,48919,48977,49148,49173,49281,49331,49404,49430,49460,49471,49485,49506,49520,49563,49569,49612,49626,49635,49643,49665,49676,49715,49737,49880,49909,50018,50143,50180,50293,50325,50348,50361,50409,50499,50533,50558,50592,50629,50672,50726,50932,50969,50993,51149,51159,51203,51226,51282,51428,51597,51607,51622,51710,51815,51969,52098,52120,52184,52200,52228,52242,52472,52511,52549,52703,52870,52923,52952,53092,53283,53774,54208,54279,54388,54444,54499,54517,54564,54709,54758,54925,54972,55077,55177,55249,55323,55379,55589,55677,55756,55830,55931,56000,56090,56135,56228,56286,56353,56407,56485,56543,56605,56723,56749,56815,56991,57134,57298,57421,57620,57647,57808,57871,57999,58128,58191,58269,58326,58625,58732,59021,59376,59596,59750,59855,59920,60140,60167,60234,60357,60506,60577,60655,60685,60855,60895,60995,61201,61660,61764,61998,62109,62194,62354,62511,62689,62748,64332,64452,64472,64493,64757,64799,64885,64940,65009,65272,65321,65397,65417,65436,65448,65462,65480,65494,65505,65822,65912,65922,66007,66043,66117,66190,66209,66326,66367,66393,66405,66459,66635,66802,66810,66878,66900,66930,66965,67003,67035,67069,67147,67161,67266,67281,67297,67391,67655,67707,67722,67762,67847,67900,67979,68045,68092,68287,68300,68305,68327,68351,68376,68441,68509,68526,68545,68590,68697,68820,68862,69052,69312,69347,69418,69512,69671,69708,69768,69808,69859,69892,70011,70091,70098,70165,70173,70245,70345,70450,70598,70773,70835,70875,70916,71032,71138,71183,71193,71204,71231,71249,71278,71297,71358,71376,71392,71434,71484,71511,71669,71751,71795,71804,71853,71954,71958,72011,72072,72103,72116,72119,72164,72178,72232,72318,72372,72411,72470,72521,72538,72609,72642,72711,72752,72849,72957,72987,73023,73096,73175,73205,73244,73260,73300,73312,73371,73388,73419,73442,73471,73499,73626,73640,73672,73690,73751,73894,73949,74053,74139,74255,74430,74535,74588,74646,74725,74760,74816,74868,74907,74931,75012,75033,75083,75107,75224,75287,75295,75381,75503,75745,75897,75948,76042,76097],"yesnote":[45967],"bought":[66965,67019,67230,67587,67841],"unitylinker":[70571],"debris":[8086,23462,31716,32360,32609,32702],"samplercube_float":[44288],"scrollup":[63475],"quadruple":[9961],"uniquely":[11842,66151,71032],"skidding":[72337],"commands":[4594,5348,5494,5495,5724,5735,5763,7567,7574,10803,11113,18467,20831,21023,22964,23623,27629,29973,30349,35714,36130,40151,41407,41417,42364,42631,42661,42688,43216,43566,43684,44338,44422,44658,44768,45179,45261,45846,45941,46766,47254,49041,49280,49354,54452,55895,58484,66034,66073,66405,66706,67054,67527,69861,69956,71620,72917,74918,75433],"popular":[75,1094,3981,5852,38818,44055,51245,52094,66960,73896,76100],"shader’s":[26790,49374],"virtual":[729,987,2608,2896,2958,4566,6198,7669,7763,8296,9769,10835,11011,11686,11785,12094,12285,12337,12505,16827,19286,21635,22375,23485,25756,26765,27931,29168,29858,31281,33419,33453,34100,34264,34346,34472,35373,35780,35923,36011,36533,40568,41932,47083,48721,50000,50009,50017,50052,50063,50075,50139,50143,51225,51528,51553,51585,52251,52524,52745,52769,55651,57926,58484,60358,62758,66225,66965,67168,68751,72520,72796,72899,72974,73487,73619,73751,74202,75365,76094],"newin20172":[9550,14530,14551,21441,21560,21622,27162,27542,31775,32201,32236,51127,51153,51839,51847,73467,74662],"currentspawnpointindex":[13335],"clientauthorityowner":[11083],"bokeh":[38101],"steamvr":[72904,72954,75305],"phonesdk81":[34578],"loadable":[48194,68701],"associated":[1937,2971,3087,3262,3321,3537,3579,3802,4386,4903,5201,7178,7644,7870,7930,8782,8982,9765,10015,10136,10433,10813,11082,11230,12155,12673,12901,13253,13713,13824,13903,14277,14880,17946,20264,21688,21710,22234,22548,25095,26787,27081,28453,28613,30407,34372,36098,36905,37369,38483,38877,39007,40650,41701,41747,42366,48621,49581,49644,49654,49971,50307,51962,54787,57124,57918,59752,60162,60375,60780,61327,65024,65698,66243,67073,67173,67978,68131,68547,68614,69398,69502,70049,70312,70914,71969,72388,72890,73078,74513,74993,75134,76146],"massive":[58369],"car's":[14956,18354,58846,72331,74496],"getpooled":[58013],"option+control+left":[39301],"were":[229,2007,3256,3348,5041,5989,6102,6111,7015,7765,8115,9399,9953,10082,11314,12667,13112,13648,17994,18230,22760,25043,26094,26118,26592,26928,26954,27544,29181,29664,29781,30050,32730,33498,34171,34596,34954,35268,35379,35630,35691,35890,35930,36147,36329,38828,39160,40719,42134,43121,43618,45779,45921,47608,49038,50008,50929,52044,52570,61616,65999,66165,66669,67584,67708,68052,68536,68616,68893,69131,69377,69481,71068,71480,72243,72891,75215,75979],"intents":[1197,66820],"halt":[8203,36627],"care":[4994,5674,9589,24792,25635,26079,27297,33082,33619,34783,39794,43898,45726,47825,49440,66260,67262,67551,73450],"trust":[66623],"logs":[860,2726,8975,11016,11954,18131,19257,21029,25159,27600,27763,30509,34214,34439,35000,40820,50044,52510,52599,53768,65135,65926,66621,68918,69159,72394],"tried":[35930],"iaps's":[67256],"view":[4,23,69,130,180,249,380,544,860,889,1255,1293,1431,1758,1826,1837,1961,2001,2178,2197,2220,2244,2251,2300,2324,2400,2417,2420,2620,2959,3227,3515,3728,4022,4040,4078,4299,4365,4408,4485,4803,4805,4994,5021,5094,5293,5904,6461,6723,6754,6767,6797,6942,7185,7315,7625,7816,7924,8020,8117,8306,8499,8609,8972,9002,9033,9071,9135,9167,9203,9248,9297,9442,9555,9622,9674,9727,9851,9912,9997,10059,10135,10219,10337,10409,10508,10715,10760,11160,11319,11339,11368,11402,11464,11505,11824,12105,12288,12317,12667,12731,12785,12857,13120,13163,13220,13353,13382,13456,13555,13626,13666,13673,13732,13777,13805,13823,13902,13997,14020,14080,14220,14488,14574,14674,14723,14776,14788,14983,15967,16043,17030,17744,17977,18080,18196,18348,18427,18435,18565,18632,18681,18896,18954,19077,19442,19969,20003,20057,20095,20100,20538,20583,20635,20753,20788,21255,21360,21484,21566,21636,21685,21697,21852,21884,21964,21974,21999,22028,22089,22131,22189,22222,22355,23444,23668,24523,24696,24726,24774,25048,25161,25188,25363,25416,25498,25623,25723,25733,25850,25895,25939,26035,26118,26216,26606,26719,26835,26953,26976,27015,27109,27336,27685,27759,27785,27816,28149,28326,28353,28394,28703,28742,28778,28851,28877,29080,29484,29850,29863,29885,29900,30038,30054,30141,30173,30179,30229,30264,30394,30454,30515,30824,31386,31601,31613,31681,32180,32254,32372,32777,32848,33072,33394,33528,33637,34293,34503,34589,34747,34779,34874,34911,34935,34948,34975,35193,35379,35470,35506,35612,35634,35695,35813,35978,36038,36185,36221,36335,36430,36473,36589,36684,36696,37297,37349,37478,37675,37687,37723,37954,38242,38277,38324,38738,39053,39126,39227,39245,39308,39494,39740,39765,39910,40242,40542,40618,40731,41090,41428,41454,41498,41541,41612,41676,41701,41707,41952,42023,42233,42238,42250,42293,42298,42303,42308,42436,42442,42451,42458,42463,42511,42517,42523,42528,42533,42538,42543,42578,42583,42588,42593,42691,42715,42797,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42926,42931,42940,43032,43114,43139,43154,43192,43208,43374,43494,43539,43876,44061,44960,45049,45586,46196,46515,46798,47026,47073,47180,48168,48188,48245,48270,48506,48608,48683,48861,48880,48938,48990,49178,49406,49433,49496,49660,49696,50059,50488,50522,50620,50933,51008,51083,51131,51189,51231,51268,51541,51552,51893,52083,52105,52174,52222,52265,52516,52554,53273,53838,54046,54120,54262,54302,54430,54496,54711,54759,55750,56979,57692,57945,58582,58795,59067,59267,59909,60408,61298,61994,62131,62485,62742,63106,63243,64242,64339,64909,65214,65697,65771,65893,65916,65941,65970,65997,66261,66335,66393,66599,66848,66950,67096,67946,68794,69508,69720,70104,70307,70374,70746,70813,70917,70943,71123,71179,71219,71263,71292,71299,71344,71371,71413,71428,71489,71505,71517,71617,71638,71690,71805,71871,71899,71906,71981,72384,72499,72707,72740,72920,72956,73178,74134,74226,74414,74591,74899,74965,75012,75136,75186,75204,75367,75454,76494],"peace":[8986],"wi":[647,695,700,12650,28431],"ugui’s":[58147],"simultaneous":[6811,9181,9317,9747,13176,13575,15009],"defaultlightingexplorerextension":[26723],"audio’s":[36017],"renderdoc'":[38277],"x0":[51460],"putty's":[70109],"inapppurchasereceipts":[67833],"limits":[498,629,909,5017,5953,6141,7287,8195,8237,8499,9157,9700,9723,11527,11598,13552,18078,18511,20242,22088,22746,26054,26547,26557,26580,27621,29566,29895,32866,37432,37683,38469,41330,42174,44001,44514,45731,49707,50094,52034,52739,52757,58320,59186,61475,67659,67845,67902,68215,72497,73173,73205,74257],"combo":[36454,64697],"270f":[51693],"xrutilities":[75720],"minimalist":[37318],"pwa":[12333,73915],"preparation":[5838,14916,19619,30320,36569,49028,67877,75936],"primarybutton":[75689,76108],"squeeze":[75651],"serializablemanagedreftestclass":[15292],"multicolumnlistview":[55450,57625,59972,64908,64972,64994,65533],"getcomponentsinchildren":[24848],"unevenly":[13096,32412],"gl_khr_texture_compression_astc_hdr":[14349],"earlier":[3065,3419,3672,4654,8086,10770,11709,12918,19623,21221,21570,21881,24057,26252,28676,30327,37798,38273,40342,40442,43459,48252,48562,49549,50234,54368,54762,63039,66527,66992,67661,67847,68055,68528,68658,68705,68863,69096,70050,70274,71062,71164,72007,73286,73661,74412,74579,75124,75354],"flarelayer":[9244,15122],"acceleration":[1217,6792,8287,10575,18490,29616,38492,39240,40749,52754,72662,72716,73490,75637,75794],"graphicsapiname":[35718],"8490a5ed35a4361d679e6055a386969e":[25124],"firstly":[13042,31917,39671,49454,50322,52500,52566],"rebounds":[31684],"hingejoint2d":[9757,15196],"transformations":[8830,10738,13712,38402,45290,47069,62202],"examplerotation":[75680],"umbra":[16751,30166,30277,30939],"getnativetextureptr":[34682,73552],"rounder":[10262,14599],"default":[18,83,130,183,317,480,553,592,629,680,719,783,1006,1031,1128,1169,1202,1285,1531,1584,1598,1761,1842,1854,1888,1894,2008,2095,2367,2745,3291,3311,3522,3588,3675,3731,3835,3852,3995,4228,4254,4553,4587,4704,4737,4774,4813,4875,5083,5224,5276,5464,5609,5945,5989,6141,6223,6374,6396,6478,6492,6988,7015,7202,7230,7364,7437,7454,7490,7517,7526,7534,7542,7555,7582,7591,7600,7609,7617,7631,7640,7651,7662,7688,7696,7706,7715,7735,7775,7907,7968,7986,8001,8072,8232,8503,8615,8871,9010,9032,9059,9174,9262,9304,9337,9434,9543,9606,9626,9688,9740,9776,9874,9935,10010,10075,10108,10214,10364,10430,10519,10587,10691,10724,10805,11011,11050,11152,11175,11247,11279,11308,11328,11353,11370,11403,11466,11533,11600,11657,11676,11715,12083,12287,12326,12453,12702,12768,12862,12866,13166,13238,13357,13384,13482,13570,13682,13704,13729,13752,13790,13808,13833,13854,13867,13906,14220,14303,14475,14502,14547,14576,14702,14789,14833,14956,14996,15864,17488,17948,17978,18025,18075,18181,18216,18245,18284,18330,18366,18525,18681,19124,19133,19193,19419,19442,19453,19938,19982,20083,20116,20179,20219,20276,20571,20599,20725,20788,20880,21024,21196,21389,21475,21566,21841,22036,22084,22106,22136,22226,22327,23264,23406,23466,23488,23560,23612,23637,23673,24051,24390,24517,24550,24772,24898,24946,25068,25112,25173,25200,25309,25342,25416,25459,25763,25841,25877,26030,26041,26441,26477,26577,26664,26725,26788,26824,26927,26985,27073,27089,27113,27307,27320,27523,27562,27738,27750,27764,28172,28388,28473,28618,28671,28715,28828,28878,29117,29131,29151,29334,29443,29555,29686,29814,29834,29863,29895,30097,30141,30174,30215,30238,30265,30284,30443,30469,30532,30829,30844,30859,31367,31624,31650,31670,31733,31749,31765,31779,31804,31825,31842,31863,32080,32095,32119,32170,32206,32242,32330,32348,32374,32596,32619,32639,32667,32714,32749,32893,32934,33386,33398,33645,33768,34218,34251,34333,34458,34539,34651,34811,34849,34893,34936,34985,35187,35247,35344,35367,35612,35623,35695,35881,35977,36031,36184,36290,36342,36464,36588,36632,36693,36753,36998,37246,37381,37492,37620,37635,37676,37735,37928,38248,38264,38283,38291,38358,38399,38430,38472,38482,38492,38504,38541,38580,38629,38661,38771,39027,39084,39096,39127,39159,39183,39231,39253,39426,39492,39519,39756,39792,39880,39994,40061,40174,40433,40456,40532,40661,40706,40768,40777,40796,40820,41226,41297,41349,41364,41409,41438,41448,41467,41482,41492,41534,41544,41609,41674,41920,42027,42141,42182,42391,42614,42706,42751,43199,43221,43574,43689,43750,44097,44166,44199,44282,44447,44543,45065,45145,45206,45296,45419,45449,45533,45585,45720,45866,46024,46739,46873,47316,47962,47996,48056,48183,48251,48275,48361,48366,48515,48535,48557,48590,48607,48642,48674,48852,48879,48940,49038,49182,49338,49399,49427,49465,49510,49568,49607,49662,49771,49880,49905,50001,50067,50156,50197,50354,50388,50444,50593,50632,50656,50666,50698,50730,50755,50913,50950,50996,51078,51119,51137,51169,51182,51197,51323,51345,51597,51612,51708,51760,51787,51850,51875,52011,52251,52477,52526,52766,52854,53029,53229,53311,54200,54239,54406,54496,54545,54635,54672,54704,55329,55509,56018,56112,56616,56672,56808,57300,57303,57626,57662,57809,57868,58037,58119,58159,58311,58375,58616,58653,58727,59123,59505,59557,59720,59749,59829,60162,60934,61037,61187,61305,61354,61455,61490,61522,61583,61612,61779,61906,61939,61973,62021,62048,62214,62359,62515,62708,62796,62838,63069,63236,63658,63747,63814,63981,64083,64204,64313,64400,64421,64461,64470,64491,64533,64574,64603,64624,64640,64676,64738,64816,64834,64844,64862,64896,64923,64938,64957,65016,65051,65061,65086,65110,65125,65148,65179,65222,65246,65270,65335,65369,65528,65545,65560,65570,65590,65610,65630,65651,65769,65787,65874,66047,66239,66354,66391,66587,66850,66941,67163,67582,68197,68246,68324,68352,68378,68602,68825,68852,69058,69311,69350,69417,69696,69729,69756,69792,69865,70091,70111,70200,70230,70246,70380,70613,70833,70876,70972,71190,71208,71319,71543,71591,71614,71644,71707,71746,71795,71811,71854,71913,72087,72191,72231,72385,72473,72499,72789,72830,72856,73122,73164,73208,73249,73272,73302,73319,73392,73417,73433,73480,73499,73616,73702,73876,73912,74049,74153,74335,74421,74635,74753,74794,74799,75022,75090,75426,75551,75850,76335],"audiomixerliveupdatebool":[15286],"touchevent":[20020],"clothspherecolliderpair":[8368],"owner":[4386,28609,30397,30444,30479,34109,52103,53175,54071,66204,66572,67704,67894,70903],"constructive":[45852],"mindful":[63221,73615],"strenuous":[18509],"unity’s":[221,1516,1761,1908,2937,3009,3667,3724,4516,4768,5222,5832,5964,5992,6079,6145,6393,6691,7168,7385,9327,9986,10938,11071,11307,13599,14878,15902,18116,18314,19639,21049,23278,23590,23612,25097,25741,25763,25859,26264,26434,26472,26508,26703,26812,27109,27113,27478,27487,27523,27757,27777,27915,27979,28051,28068,28390,28880,29150,29924,30490,30868,31619,31627,31649,33297,33399,33419,33456,33475,33610,33774,34625,34640,34923,34984,35210,35561,35604,35701,36232,36508,36571,36632,36683,37283,37362,37596,38459,38487,38492,38839,39899,43210,44868,45546,48511,48874,50998,63123,63864,65907,65955,66117,66190,66367,66373,66543,66952,67525,68708,68852,71225,71517,71673,71847,72393,72476,72608,72716,72721,72910,72974,72996,73156],"jaggies":[22730],"offsetmax":[24735],"expands":[18232,33075,33440,36710,39507,39556,43961,73614],"mainplayer":[72234],"oes":[44370],"approval":[4245,4364,4417,4420,4479,53441,67383],"switchover":[10357],"systemcopybuffer":[55961],"attenuates":[7660],"m_yearbuilt":[58762],"wallsearches":[40740],"identified":[30188,32458,35877,47934,66965,70281,71407,75487,75745],"anything":[3457,3724,3847,4267,4832,4956,6491,6750,7810,8078,8438,9327,10204,10328,11291,11312,11466,11661,11921,12185,12372,12560,17488,18055,18138,18376,19225,20237,21587,22011,22067,22828,24598,24890,25035,26089,26964,27685,29423,29486,29587,29769,30122,30564,33410,34203,34311,34397,34516,35126,37671,38428,38624,39135,39924,40442,43484,47306,49375,52012,53451,63914,66003,66587,66814,67358,67633,67852,68622,71045,71763,72339,72923,73900,75487],"series":[2998,5712,6056,8861,9138,18168,18319,19081,22878,24947,25317,30168,34101,35958,37559,37771,38257,38287,50200,65884,66381,70288,70807,75522,76136],"#x2714":[55645,55719,55811,55909,57564,58198,60500],"hertz":[7591,7600,7609,7631,7640,7651,7696],"versioned":[72428],"dropshadowlabel":[59629],"quality":[554,1557,3881,4427,5160,5863,5978,6383,6445,6807,7113,7486,7528,7536,7592,7601,7611,7632,7641,7653,8555,8834,9060,9450,9893,9948,9999,10091,10328,10737,11606,11736,12351,12864,13220,13477,13713,13822,14134,14277,14311,14790,17642,18566,19284,22116,22464,23440,23604,24598,25229,25292,25841,26680,26799,26812,26947,26987,27055,27119,27137,27218,27486,27739,28181,29717,31701,32223,33410,34221,34281,34494,34861,35765,35931,36591,37653,37716,37822,38388,38678,38925,40655,41907,42766,42968,43122,43135,43155,43195,44531,48306,48765,49177,50003,50141,50164,50377,50489,50661,51003,51965,52095,52124,52484,52546,58407,58440,66432,68763,70756,71162,72728,72927,73443,74162,74257,74644],"onaudioconfigurationchanged":[7766],"manufacturer":[396,470,749,855,72924,75515],"setrendertarget":[13208,14029],"printcontext":[36858],"unityprojects":[15726,21129],"assetimporterlog":[15290],"focusedelement":[59653],"rendersinglecamera":[38208],"pointerdelta":[56922],"synthesizeandsendkeydownevent":[58004],"conversion":[3580,13386,16647,17326,18504,21455,22344,24638,26488,27523,27566,30926,33180,48275,50673,53505,55014,58147,58375,59581,62838,68131,68547,69386,69490,72240,73553,75424],"alloc_bucket":[29194],"manager's":[4047,21994,22007,69901,70211,71252,71469],"empower":[17384],"deps":[23497],"m_finalgatherrays":[76387],"contributor":[26783,30349,30493,35691,66757,72841],"indicators":[391,2325,5152,7073,25865,27815,32316,44012,68509,70367],"texture2darrays":[50081],"rectangle's":[13103],"layered":[47,4501,45293,52718],"view__item":[64340],"systemlanguage":[20086],"shaping":[52176],"new_value":[29285],"genericmethod":[40579],"audiogroup's":[5151],"positiondamper":[8576],"exponentiation":[44234],"visible":[59,250,548,1570,2314,2372,2409,2441,2589,2891,3848,4298,5137,5641,5733,6152,6464,6803,7103,7159,7187,7899,8030,8692,8873,8989,9069,9216,9332,9555,9622,9875,9977,10227,10498,10579,10649,10702,11051,11187,11339,11358,11804,12491,12939,13465,13732,13763,13791,14126,14548,14782,14794,14860,14962,18118,18267,18563,18749,19998,20588,21045,21230,21352,21457,21964,22106,22146,22227,22717,23673,23807,24388,26014,26790,26840,26991,27073,27215,27331,27695,27750,28153,28473,28677,29148,29695,29863,30142,30200,30229,30265,30525,31634,31718,32289,32701,33408,34259,34340,34466,35171,35803,35930,36057,36549,36588,36720,37646,38338,38889,39137,39322,39603,39666,39765,40091,41515,42185,42243,42944,43114,43192,43594,44165,44294,44471,44591,45077,45784,48162,48253,48281,48597,48624,49034,49336,49454,49483,49496,49509,49525,49570,49609,49626,50008,50019,50150,50403,50441,50512,50692,50893,51035,51208,51900,52451,52675,53056,53398,54732,54759,54899,56514,57017,58449,58794,59085,60540,61840,62742,64145,64760,65177,65923,65994,65999,66183,67265,67501,70746,70833,71032,71534,71869,71961,72231,72385,72723,72747,73240,73374,73562,73702,74180,74761,75068,76262],"tilemapeditortoolclass":[51579],"frametimecomplete":[21931],"unattended":[66587],"pathway":[18429,37519],"behaviorif":[13166],"accelerator's":[66571],"marshner":[38012],"metric's":[66667],"relatedtarget":[58204],"curveweightedrandom":[13060],"texts":[57141],"m_builder":[36837,36989],"‘penumbra’":[26922],"endgui":[20860,30645],"dxt5":[3502,14330,27142,48726],"walkthrough":[15891,19057,36571,37613,53255],"isopenforedit":[72432],"replacements":[2243,6154],"forcereceivelayers":[7974,8178,8275,8393,8778,9043,12737,14513],"#ffe4c4":[63514],"uv2":[317,26962,27039,32919,46805],"examplescript":[6728,21918,29865,30016,30157,33140,51971,71963],"intstringfloat":[55502],"connectedness":[37683],"closedstatereached":[24871],"addmixingtransform":[2118],"given":[253,292,1888,2118,2332,2778,3470,3514,3591,3843,5969,6123,6770,6847,7539,7552,7615,7645,7929,8120,8563,9163,9507,9999,10465,11629,11807,12797,12866,13094,13120,14721,15042,15864,18078,18149,18596,19561,20243,20619,20724,20945,21028,21149,21364,21586,21963,22088,22325,23561,23625,25345,25623,25686,25929,26025,26247,27006,27040,28020,29338,29420,29556,29619,29721,29907,30243,32260,32365,32856,33410,33813,34274,34484,34810,34863,35175,36737,36751,37003,37237,37627,37712,38458,39118,39553,39721,39819,40001,40310,40929,41320,41884,42109,42346,42955,43031,43751,43879,43973,44104,44210,44344,44387,44634,44685,44787,45002,45062,45401,45420,45459,45530,45621,45851,45962,46766,47163,47417,48068,48692,48882,49096,49182,49318,49526,49642,49849,50003,50378,51529,51736,51984,52227,52801,53187,53420,54049,54769,54880,55552,55986,56222,57263,58176,58559,58928,59396,61555,62836,63724,65719,65976,66160,67400,67584,71010,71767,71885,72346,72673,72840,73073,74307,75606,76150,76332],"generation":[1738,4541,5156,6430,8383,9108,9979,10572,11611,11878,12630,13545,13710,13961,14516,14597,17752,17928,19188,20286,21202,21613,22130,23550,24978,25529,25884,26473,26982,30167,30874,32412,36608,36754,37227,40555,41838,43493,43515,43564,46718,48677,49725,49734,50378,50491,51831,52116,52196,52236,52694,53377,58069,58299,58396,58466,62797,68719,69307,69413,71959,72346,72697,72842,73904,74249,74498,74847,75741],"derived":[6042,6623,9190,10938,11016,12652,13187,13784,15332,23059,26150,30899,35478,37054,39879,48181,49431,49762,52247,52633,54513,56670,57322,66260,66464,68213,73393],"✓":[72621],"retired":[25979],"cutouts":[19693,25887],"serializers":[39856],"axis'":[51166],"hideininspector":[4713,45095,72242],"defaults":[3024,11551,12247,12614,13387,13813,14897,20264,21085,23755,27583,29751,32051,34257,34362,34464,39094,43651,43736,45077,47945,48607,62846,68088,68265,70406,70872,71543],"surroundings":[253,5160,8611,13120,20615,22876,26920,32114,37684,37728,43484,75322],"lightsoutput":[36650],"isnullorempty":[19396,19488,55963,58262],"spherecastnonalloc":[6066],"assets1":[478],"they’re":[5973,26576,31642,52966,69001,69787,69854,70283],"artefact":[36684],"alignof":[5636,26158],"rebound":[9180,11648,13692,13876],"iapproductcatalog":[17045,67691],"query":[518,2587,4976,5168,6066,7494,9790,11551,18592,23009,25407,25885,29140,29702,29995,30439,31601,31727,32767,33739,33777,35314,36712,37631,40741,40817,40825,40870,41160,41307,41316,41424,41461,41482,41532,41543,41608,44611,50967,52785,53117,54021,54476,56940,57248,57330,61728,62772,63133,64325,65838,66587,70487,70687,76320],"thoroughly":[28477,31388],"cars'":[5162,38405],"issuing":[4109,4492,26073,30096],"primaryreactor":[76262],"scrollviews":[24002],"hfi":[69914],"transactionreceipt":[67432,67612],"tempo":[5006],"y0":[51461],"asset3":[3676],"whitespace":[4207,4281,44701,59700],"namedobject":[15127],"member":[1445,2815,3591,4488,5189,7025,8973,9328,10386,10444,10693,10825,11304,12969,13018,13311,20050,20540,20972,22190,26259,26450,28509,29806,30405,30486,39347,40529,40676,45695,46369,51951,57216,58073,59134,66070,68645,72293,75573],"#container":[61391],"terrain's":[13897,22918,29809,50491,50515,50541,50560],"photorealism":[6874],"radian":[62315],"'myfunction'":[73574],"empirical":[52584],"texture+sampler":[45213],"linearized":[61558],"propertymodificationstargettestobject":[15333],"mozilla":[21302,62330,63702,73126,73261,73626],"sampler_linear_repeat":[45251],"amongst":[76037],"restraints":[8256,9157],"http_proxy":[69896],"idr":[53659],"“wasd”":[69333,69439],"integerfieldsnippet":[64816],"demangling":[12401],"passively":[9723],"store’s":[28283,52951,53081,53703,53951,54002,67540,67543],"equivalence":[43827],"#a0a0a0":[63316],"clearly":[251,2131,4298,8692,22239,27573,30270,50939,58651,63922],"distancejoint2d":[9022,15195],"uitk":[58662],"geteffectdata":[4936],"introduction":[0,430,534,890,3017,4959,5860,6688,6778,6791,6846,6984,10415,11459,11474,12895,13117,13234,13260,14069,15830,15888,17938,17975,18360,19050,19126,19277,19966,20094,23537,24947,25734,26551,26556,27032,27061,28837,29383,29411,29441,29476,30346,33571,34653,37365,37569,37728,38238,38261,38457,38523,38646,40149,42006,42387,43006,43100,44320,45387,45930,47163,48675,49177,50682,50707,53584,54793,54906,58269,58368,63226,64203,64314,64376,65690,65727,65732,65848,65979,66546,66812,66963,67017,67228,67839,68000,68740,69790,69857,72125,73591,74125,74219,74886],"‘safe":[76303],"unity_matrixvp":[49003],"scatter":[7981,50380,50466],"x86_64":[706,17561,17678,17693,17708,19048,19302,27657,31332,31460,34575,50195],"buckle":[49513],"rootmotioncontroller":[40624],"application":[273,399,404,422,426,433,487,491,509,526,535,544,569,578,620,633,649,655,662,676,695,698,717,736,785,834,872,881,889,895,938,944,978,1027,1095,1118,1135,1163,1178,1190,1202,1234,1240,1243,1273,1311,1325,1354,1375,1396,1433,1483,1487,1516,1574,1594,1706,1754,1761,1807,1812,1846,1855,1866,2667,2762,2768,2896,2972,3304,3317,3371,3457,3486,3546,3579,3833,4662,5046,5178,5879,6054,6141,6216,6348,6392,6461,6774,7302,9012,9137,9512,9785,10540,11176,11667,11704,12065,12274,12314,12437,14342,14702,16470,16564,17206,17934,17998,18076,18293,18400,18454,18514,19047,19097,19120,19174,19271,19277,19316,19336,19351,19364,19376,19635,19967,20049,20058,20155,20233,20419,20438,20767,21052,21180,21294,21377,21485,21739,21851,21865,21956,22029,22085,22334,23475,23542,23590,23616,23788,24578,24608,24626,24645,24947,25140,25194,25236,25309,25333,25348,25672,25688,25722,25733,25738,25756,25763,25823,25827,25835,25850,25859,25893,25900,25919,26044,26081,26103,26271,26294,26472,26567,26572,26674,26688,26714,27671,27695,27762,27920,27937,28074,28081,28118,28129,28148,28184,28281,28373,28477,28618,28677,29122,29153,29434,29439,29447,29466,29479,29566,29718,29738,29755,29776,29817,29827,30325,30343,30839,30857,30917,32112,33074,33088,33381,33401,33446,33470,33506,33759,33883,34203,34257,34338,34465,34600,34651,34685,34840,34994,35366,35404,35494,35603,35622,35684,35769,35788,35901,35924,35957,35968,36020,36133,36155,36197,36296,36355,36432,36463,36693,37268,37467,37639,38324,38684,39167,40263,40515,41814,41975,42060,42180,42938,43920,44303,45037,48071,48335,49212,49369,49403,49539,49677,49738,49762,50603,50997,51985,52509,52556,52681,52692,52699,52707,52728,52730,52754,53434,53780,54601,54795,56681,56797,57122,57290,57628,57840,60194,62194,64511,64610,64745,64914,65312,66023,66114,66457,66465,66530,66811,66836,66867,66887,66903,66960,66964,67024,67090,67148,67236,67262,67293,67339,67351,67538,67550,67570,67576,67587,67624,67706,67733,67745,67755,67857,67919,68031,68051,68062,68121,68265,68439,68815,68895,69047,70084,70098,70276,70943,71995,72004,72011,72081,72089,72126,72172,72208,72474,72645,72755,72789,72848,72978,72986,73053,73093,73146,73155,73248,73302,73311,73426,73471,73597,73601,73658,73677,73701,73720,73908,74044,74122,74498,74510,74537,74620,74665,74757,74807,74837,74849,74895,74918,74976,75023,75067,75070,75133,75190,75314,75365,75390,75445,75545,76095],"inapp_purchase_data":[67618],"fixups":[8637],"illustrative":[37320],"tolerant":[10602,76335],"ircam's":[5184],"delays":[5006,12901,14915,35727,38508,63014,65137,68869,69103],"design":[2958,4550,4838,5015,5823,6043,6803,6897,8090,8496,9386,9555,9622,14775,17000,17759,18410,18413,18500,18609,18624,22061,22699,24276,24466,26296,30893,31098,33607,36736,37373,37560,38536,48188,51849,52222,54107,56797,57970,58411,59904,61333,62797,64362,64456,66194,66337,66431,67296,72939,73019,74202,74304,76095],"renderers":[104,5338,5972,6503,6994,7159,8146,9440,10127,10215,10330,10651,11352,12392,12901,13485,13585,13781,14539,14577,20392,20430,21475,22153,23414,23462,27044,27100,27169,27325,29148,30232,30265,36029,37367,38210,38338,43199,48617,48874,48902,49379,50452,50984,51166,51202,51363],"setboundingspherecount":[18579],"plugged":[845,12202],"appearances":[24051],"hull":[10602,15839,21765,38483,45010,45454,49517,71754],"lists":[979,1099,2256,2427,3447,4043,4747,5342,5812,6125,6355,6407,10035,10278,10501,10623,10826,11177,11423,13489,14230,14613,17342,18135,18481,19123,19152,21026,21845,22417,23882,24583,26718,27598,27675,29155,29453,30058,31613,32747,33242,35773,36042,36158,36586,36799,37492,37668,39033,40063,41239,41462,43218,48257,48548,49712,49855,50164,53905,54070,54109,54435,55159,55411,55498,58027,58119,59085,59582,59904,60215,60375,60780,61460,62005,62872,63220,63505,63696,63729,63890,63961,64211,66105,67155,68070,68553,68567,68690,68812,68850,69041,69296,69402,70311,70332,70879,70917,70936,71136,71194,71283,71346,71374,71523,72444,72668,73598,74179,74308,75347,76100],"unity_api":[66896],"playbackspeed":[14920],"capabilities":[890,1024,1087,1393,1979,2764,2990,3817,5168,6821,6857,11718,12218,12636,16869,19676,19993,20094,22958,23542,25339,25734,27209,30303,34274,38258,38287,43950,44300,45255,45564,47245,49803,51964,54134,58651,60634,65166,66542,66555,72006,72672,72716,72986,73028,73370,73458,74136,74391,74856,75368,75606,76320],"terraintools":[68876,69112,74141],"refund":[4371,4390,4485],"manufacturer's":[263,840],"channelid":[11012],"myitemgrandparent":[65421],"eula":[234,4011,53448],"appcallbackitem":[74739],"payouts":[4230,4385,30438,67181],"ispressed":[76267],"supports2darraytextures":[14016,19742],"keyboard":[610,720,825,1090,1668,2440,2611,6352,9584,9629,9767,10076,10431,10508,12627,17972,18484,19074,20599,21180,21359,21405,22677,23677,24576,24794,25032,25348,25389,25815,25912,29584,29677,31138,34222,34466,35776,36057,36462,36715,39622,39808,39813,40002,41432,41602,43208,48262,50631,51584,52741,55894,56712,57827,57983,58001,58133,59541,59720,59731,60219,60388,60495,61489,61749,62211,62831,65335,65922,66948,69333,69439,71347,73480,75213],"uxmlfloatattributedescription":[58081,60903,61003],"falsesearches":[40745],"tiling":[94,205,7965,10269,12728,13755,13929,14606,23437,32731,41773,42382,45098,45152,46224,47264,48163,49560],"rack":[50215],"occupying":[25887],"firstsubmittimestamp":[21908],"pivots":[8199,32705,48445,62796],"vector2field":[55457,55535,59707,64727,65566,65602,65622,65643,65663,69323,69429],"fixedjoint":[9161,15132],"jcdhnj4vg1rvarmo1jupezqdb+xhbzqtmmjmtidobxt662z4hvoh8mdqneuskozz":[69912],"myusername":[70208],"unity_sysroot_cache":[27654],"replaces":[466,7765,12154,20790,24624,25526,26709,29036,33239,34372,38876,39883,41090,41749,42231,42236,42241,42248,42253,42261,42291,42296,42301,42306,42434,42439,42445,42454,42461,42466,42509,42514,42520,42526,42531,42536,42541,42546,42576,42581,42586,42591,42821,42826,42832,42837,42843,42848,42854,42859,42864,42869,42875,42895,42923,42929,43458,44445,66521,66527,68055,68528,71272,73924,75114],"registercreatecategorycallback":[27990],"draggedname":[57472],"factory":[5904,48390,48912,56616,56691,56753,57317,58035,60910,60990],"encounter":[214,4630,10575,17268,17524,18450,20206,23202,33064,33583,34615,37708,40226,40561,48529,52629,66450,66916,68637,70439],"invested":[22373],"ulong":[10826,68239],"kformatr16g16b16a16_sfloat":[50118],"usercontext":[5488,5633,5755,5799],"deepprofiling":[21110,36561],"rezwidth":[20484],"diegetic":[54771],"allslots":[56939],"scrip":[60993],"platformsdk":[34578],"assist":[28757,31718,71959],"capability":[8022,12643,14450,25756,26478,45643,65981,74857,75621],"r11g11b10":[9461],"enableembeddedresources":[73422],"previsualization":[6832],"how":[5,14,174,234,277,378,399,404,423,427,460,475,491,513,525,559,569,579,620,640,649,666,693,717,740,817,845,871,885,891,895,939,952,955,978,1028,1032,1091,1101,1107,1117,1134,1190,1212,1237,1248,1277,1291,1316,1353,1355,1375,1396,1418,1483,1487,1531,1574,1616,1748,1756,1771,1808,1894,1920,1953,1994,2006,2044,2070,2184,2211,2243,2324,2374,2437,2465,2641,2693,2726,2762,2898,2940,2958,3256,3309,3352,3725,3839,3897,4028,4109,4204,4230,4246,4386,4429,4503,4527,4576,4751,4773,4794,4825,5259,5266,5284,5341,5355,5499,5690,5723,5737,5775,5815,5826,6056,6234,6267,6284,6364,6392,6486,6680,6686,6689,6751,6760,6767,6798,6932,6981,6995,7018,7144,7368,7429,7444,7461,7594,7603,7611,7634,7643,7653,7661,7785,7879,7940,7951,8078,8153,8199,8291,8493,8536,8771,8827,9135,9180,9219,9251,9329,9435,9557,9642,9704,9785,9870,9966,10079,10110,10262,10370,10406,10493,10569,10738,10937,11047,11149,11188,11375,11454,11510,11541,11606,11667,11715,12087,12275,12314,12437,12698,12814,12852,12897,12989,13100,13130,13210,13238,13262,13284,13359,13388,13590,13626,13641,13692,13708,13743,13784,13876,13890,13904,13983,14218,14314,14533,14562,14581,14717,14776,14782,14795,14853,14924,14929,14934,14939,14967,15810,15854,15888,16043,16168,16470,17370,17384,17935,17988,18044,18088,18113,18209,18230,18322,18360,18390,18402,18414,18435,18539,18609,18662,18728,18910,18977,19026,19189,19279,19305,19316,19336,19352,19364,19385,19449,19618,19657,19667,19967,20010,20058,20095,20123,20241,20391,20436,20543,20622,20701,20767,20894,20918,21002,21024,21188,21202,21296,21382,21384,21531,21565,21636,21661,21711,21856,21870,21956,21980,22002,22029,22147,22200,22239,22355,23246,23395,23441,23475,23538,23604,23616,23629,23672,23818,23890,24053,24167,24276,24469,24488,24599,24600,24620,24738,24744,24769,24897,24908,24947,25043,25115,25169,25193,25329,25420,25527,25631,25683,25688,25721,25735,25748,25759,25816,25822,25832,25867,25900,25920,25973,25980,26049,26060,26066,26073,26104,26242,26263,26361,26448,26479,26507,26627,26648,26651,26666,26706,26723,26809,26878,26913,26935,26959,27051,27062,27114,27156,27169,27211,27330,27488,27498,27583,27625,27645,27697,27785,27853,27935,27996,28096,28119,28144,28154,28252,28258,28304,28396,28537,28605,28829,28867,28946,28988,29013,29018,29116,29212,29340,29403,29412,29420,29482,29587,29741,29772,29885,29934,30033,30064,30142,30167,30177,30207,30272,30320,30433,30488,30500,30862,31598,31642,31668,31739,31747,31763,31785,31810,31831,31840,32074,32086,32101,32117,32149,32212,32240,32336,32354,32380,32602,32625,32645,32673,32720,32755,32849,32899,32920,33067,33081,33104,33394,33403,33446,33470,33512,33529,33627,33642,33775,33888,33945,34201,34254,34351,34461,34596,34641,34646,34680,34684,34845,34994,35221,35366,35450,35496,35622,35692,35768,35804,35901,35926,35957,36026,36118,36211,36432,36465,36588,36633,36745,36824,36977,37287,37348,37530,37613,37645,37675,37686,37881,38240,38268,38292,38346,38404,38475,38479,38490,38524,38532,38556,38575,38646,38650,38679,38828,38865,39036,39101,39166,39172,39277,39357,39373,39405,39447,39457,39607,39662,39774,39808,39812,39853,40039,40066,40146,40150,40169,40180,40526,40646,41090,41162,41427,41707,41764,41797,41915,41943,41993,42062,42110,42179,42312,42356,42692,42716,42732,42757,42792,42811,43003,43018,43077,43091,43103,43116,43145,43148,43223,43460,43489,43592,43689,43727,44073,44293,44303,44320,44447,44515,44590,44704,44755,44785,44830,45013,45090,45140,45184,45251,45270,45387,45421,45519,45613,45732,45930,45960,46137,46550,46720,47163,47372,47951,48067,48239,48315,48335,48360,48366,48379,48633,48649,48685,48852,48874,48893,48915,48977,49145,49170,49172,49281,49318,49407,49433,49453,49465,49491,49507,49519,49621,49644,49703,49915,50052,50066,50147,50305,50349,50376,50419,50437,50542,50553,50630,50649,50657,50677,50690,50708,50873,50991,51137,51235,51862,51889,51951,52120,52200,52247,52489,52491,52585,52699,52712,52739,52744,52879,52959,53176,53253,53763,53783,54022,54218,54235,54291,54506,54574,54692,54709,54746,54887,54909,54961,55061,55160,55231,55307,55367,55545,55635,55749,55824,55995,56103,56123,56210,56271,56325,56390,56521,56590,56710,56734,56797,56980,57122,57299,57335,57642,57924,57994,58023,58129,58229,58355,58376,58444,58558,58586,58652,59269,59577,59837,59904,60159,60225,60434,60520,60571,60618,60672,60879,60979,61194,61302,61470,61527,61573,61593,61747,61916,61971,61979,61997,62493,62636,62641,62847,63143,63711,63808,64205,64313,64377,64489,64752,64892,65214,65230,65254,65684,65691,65727,65761,65773,65911,65919,65941,65984,66112,66205,66246,66439,66450,66463,66542,66645,66810,66835,66867,66892,67074,67147,67390,67641,67735,67924,67978,68046,68064,68378,68509,68529,68686,68740,68901,69139,69338,69343,69444,69517,69663,69814,69893,70021,70182,70246,70513,70598,70771,70807,70905,70935,70960,71020,71255,71484,71554,71606,71669,71772,71805,71896,71924,72008,72097,72106,72113,72122,72132,72136,72148,72179,72225,72333,72375,72393,72462,72492,72538,72647,72755,72802,72808,72815,72824,72903,72924,72974,72994,73025,73028,73147,73195,73240,73306,73313,73367,73390,73429,73558,73606,73675,73695,74051,74132,74224,74412,74498,74509,74620,74666,74799,74810,74863,74887,74931,74982,75249,75287,75295,75369,75389,75501,75918,76100],"validates":[35694,65878,67773,72917],"interpreter":[74217],"meters":[5033,8208,13387,13563,24908,29640,33669,37812,46927,48275,74388,75573],"onpreprocessaudio":[5928],"aforementioned":[7487],"hotcontrol":[51591],"cliffs":[50509,50529],"crosshair":[18165],"listenport":[11207,11229],"bark":[45637,50602,52184],"drilling":[2260],"'close":[18615],"uxmlqualifiedname":[57306],"glyph’s":[58362],"color2":[31961],"hub's":[28777],"enablecacheserver":[21067,66637],"refreshed":[51787,67708,71551],"unity_sample_texcubearray":[8751],"tooltiprect":[62183],"treeopaque":[45637],"customizes":[57310],"getkeywordshandler":[2588],"chest":[13058,29903,71784],"d3d12":[21078,34207,74263],"uxmltraits":[54513,56692,56756,57322,58058,60901,61001,61770],"diversity":[76217],"menuitem":[2794,3529,3606,3703,3744,6330,8655,14092,20879,25933,40378,48403,49967,51452,51697,52340,55386,55681,55761,55834,55938,55984,56235,56293,56361,56457,56494,56548,56820,57005,57529,58240,59036,60009,60145,60445,60581,60733,60860,61213,61696,62141,62372,62518,62696,65827,68841,69086,69529,73421,74074],"oy":[58365,61915],"replace":[238,994,2099,3447,3895,5181,5998,6066,7816,7878,11160,12896,16470,18320,18447,18500,20754,20769,21870,24624,25550,26047,26206,28142,28618,29364,29420,33098,37671,38203,40964,42002,44314,45007,45866,46046,48587,48603,48991,50463,51149,52528,52630,54923,54970,55075,55175,55247,55321,55377,55998,56133,56226,56284,56339,56405,56535,56603,56747,56813,57265,58096,58777,59056,59918,61207,61496,61631,61762,62352,62509,62687,65794,66133,66194,66343,66361,66383,66817,66877,67763,68536,68593,68805,68948,69192,70399,71268,71708,72158,72507,73083,73959,74314,74556,75114],"dimgrey":[63551],"image":[7,78,167,554,1557,2197,2425,3318,3580,3729,3851,4129,4172,4285,4500,4520,6725,7566,7573,8040,8443,8987,9059,9210,9274,9626,10014,10083,10514,11311,11678,11738,12092,12273,12336,12443,12917,13120,13212,13748,13902,14073,14219,14319,14824,14969,16647,16984,17970,18346,18475,19178,19306,19667,20072,20593,21302,22296,23458,23829,24328,24492,24727,24749,24901,25183,25229,25236,25376,25435,25595,26606,27000,27022,27115,27332,27507,27569,27594,28427,28915,30142,30926,31629,31758,32240,32365,32665,32845,33482,33529,34263,34345,34471,34862,35091,35250,35463,35562,35614,36061,36336,36608,36633,36679,37359,37557,37653,37919,38370,38421,39031,39402,39466,39480,39590,39659,39671,39681,39708,39713,39740,39768,39969,39977,40077,40750,42751,42793,43177,43386,44080,44165,44376,44836,46875,48188,48373,48501,48526,48862,48885,48901,49442,49471,49498,49525,49564,49617,49626,49639,49852,50094,50401,50411,50436,50542,50688,50873,50929,51238,51400,52065,52227,52385,52723,52834,53056,53290,54240,54370,54400,54601,54648,54709,54758,54774,54911,55154,56760,56841,57630,58389,58499,58998,59372,59500,59625,59841,60518,61334,61561,63711,63764,64113,64450,64744,65024,65368,65744,65945,65983,66001,66588,68129,68348,68903,69143,69674,71619,72723,73015,73186,73922,75412],"ctx":[40463,60702],"imaginable":[8065,24392],"anotheritem":[2680],"places":[146,608,1001,1127,1724,3537,6140,6498,9930,13995,14263,18312,20697,22657,24607,24625,25165,25226,27575,29338,29467,33472,34811,34924,37442,37685,37700,38405,39538,39574,40128,42243,42984,43326,43553,43709,45141,47607,48188,53733,54257,54767,57290,58560,71390,71873,72754,75588],"batchsize":[23270,26369],"gameobjectutility":[9341,49715],"movements":[1966,2131,2188,5262,6949,7168,7833,7931,8561,11606,12938,22976,23686,29895,32701,35344,48335,64333],"eventinfo":[55993],"0x002e4160":[52562],"looser":[13873,15006],"'m_safety'":[26148],"nth":[32106,32729],"regards":[5989,8524,22993],"including":[47,464,494,974,1873,1985,2296,2615,2974,3078,3262,3318,4025,4161,4253,4500,4665,4722,4856,5027,5104,5275,5765,5838,6503,7113,7385,8438,9069,9330,9513,10200,10404,10443,10695,11011,11375,11724,12275,12333,12650,13601,14344,14787,14834,15859,16256,16470,17110,17759,18138,18292,18379,18665,19130,19641,19974,20238,20392,20634,20811,21312,21427,21525,21589,21687,21854,21896,22425,23550,24054,24728,24740,24951,25099,25221,25334,25998,26092,26108,27065,27486,27651,28463,28961,29212,29450,29471,29775,30033,30166,30185,30305,31381,31599,32273,33463,33506,33677,33796,34625,34944,35228,35357,35366,35476,36112,36220,36352,36432,36509,36613,36696,37408,37532,37882,38282,38299,38731,39402,39918,40217,40539,41309,41359,41674,41911,42387,42811,43006,44503,45255,45418,45498,48245,48270,49148,49348,49446,49491,49510,49571,49713,49826,50135,50200,50362,50691,52590,52860,52972,53126,53253,53713,54012,54452,54885,58849,62748,63039,63717,64756,66542,66965,67127,67272,67400,67773,67966,68003,68047,68701,69003,69255,69514,69724,69862,69901,70200,70312,70726,70756,71016,71148,71192,71300,71424,71616,71754,71906,72375,72488,72706,72728,72954,73040,73450,73915,74613,75221,75305,75639,75793],"xrmanager":[75905],"unexpected":[3760,7167,10609,12397,13970,22183,26712,27579,28474,31634,33442,35001,35264,36296,39885,49713,61559,63938,69813,70230,70383,73195],"shader_api_glcore":[43937],"activatecameraontimeout":[50965],"scatters":[49611],"objective":[30000,34655,34693,49762,66845,66901],"propertyattribute":[20967],"scope":[3975,4595,6082,6798,10871,11381,17956,18315,18360,18819,21766,24996,26126,27946,31626,33275,33382,34607,38733,40309,41313,42049,42124,43244,44874,49540,61469,62014,63955,66524,70167,70945,72052,73561,75034],"mypackage4":[70604],"atmospheric":[38081],"0x00001000":[20308],"kgibhyg3fuqiidjpl61dlquwupy9zo+uqaccie0e5wb+to9mwmlluhmd6icpfrpe":[69911],"uncommenting":[20338],"collision":[2014,6774,6792,6944,7202,7947,7973,8001,8177,8241,8263,8294,8392,8553,8777,9001,9034,9151,9166,9296,9419,9708,9723,10564,11541,11605,11657,12702,12736,12909,13162,13251,13266,13423,13554,13637,13662,13672,13833,13887,14512,14943,14982,15281,15822,15830,15883,17000,18219,19005,21175,21520,22685,25569,26604,31077,31667,32400,32654,32702,32767,33651,33755,35268,36307,37453,37596,37618,38140,38459,38478,38515,38519,38556,38586,38635,44133,71560,74332],"clamshell":[715],"subclass":[21327,28502,36986,52451,56670,57932,66848,73287],"doppler":[5160,7661,7791,22597,73045],"blackboard":[42027,42956],"similarities":[5015,28974,60354,62739,65849],"mission":[2956,72914],"overlayed":[30042],"analyzer":[1255,16916,19653,31449,33512,35959,38679],"kb2999226":[70582],"loaddotsinstanceddata_lightdata":[20288],"mbps":[35650],"lifecycle":[4058,4388,11370,17788,21297,31016,31366,31382,31386,31599,33478,61325,62336,62587,66822,66853,66881,66907,70751,75262,75407,75508,75919,76035],"latvian":[53635],"90mb":[51031],"openpanel":[24824],"textureproj":[44371],"similarity":[5267],"fwk8loa4jiwgvt2zkin3x":[69941],"scales":[185,5002,9967,9996,11716,12044,12310,12472,13396,13751,13984,14680,15836,18155,20450,21587,22794,25263,27036,30282,32164,32864,39411,44637,47138,49560,51138,51881,52258,58284,61527,65985,72285,73067],"inputcontrol":[75686],"changeevent":[30614,55713,57904,58646,59596,59729,61823],"spatialblend":[5206,7771],"ambiences":[5051],"impactful":[17412],"newlistentrylogic":[59450],"skyblue":[63637],"querying":[31725,52597,53031,53951,62384,66681,74327,75322],"efficient":[144,298,3365,3489,3569,4223,5829,6032,6074,6107,6493,8647,9075,10082,10909,11612,14009,15816,15831,17773,17803,18239,18585,20239,21219,21524,23053,25597,26264,26356,30358,31708,32178,32861,33242,35315,36753,37294,38609,39888,41807,41860,44252,44389,46873,47370,49048,49363,49669,50057,50146,54632,55159,58375,64319,64457,64885,65849,68129,69693,70245,72322,73008,73333,73387,73639],"ins":[493,810,875,997,1226,1247,1270,1285,1298,1312,1383,1396,1433,1811,1819,1830,1845,1855,2977,4510,4740,4877,17865,18038,18915,20223,22703,23516,24605,24623,25726,27912,27942,28054,28068,28110,28259,28261,29924,29999,33828,34535,34636,34644,34654,34683,36234,43469,49762,52735,66106,66812,66840,66883,66913,68789,68895,69133,71660,72083,72109,72122,72131,72135,72147,72880,72943,73366,73638,73687,74603,74978,74979,75044,75134,75204,75283,75290,75388,75409,75909],"conn":[66240],"vfxpropertybinder":[40148],"objectarray":[3402],"tips":[2186,3472,5882,14526,18662,19012,24666,26055,26073,29121,29713,30244,32740,33772,34737,35964,37614,37616,37696,40647,40686,42358,44077,56718,58117,59892,68074,73290,73382],"touchphase":[29607],"dedicate":[37662],"islooping":[14911,72601],"billboardrenderer":[7925,15190,48234],"inherits":[3729,10614,10691,10805,11314,13454,20788,23524,26494,26723,27933,28856,34944,36980,37356,38531,40155,44210,48910,49029,51753,54626,55813,56607,56986,57274,57427,58075,60211,63833,66260,72229],"lend":[52099],"_deferred_":[38304],"analysis":[272,4653,4994,11921,12185,12372,12560,13364,16564,16919,19075,19225,19647,21850,25046,25979,27937,28450,28464,30511,33511,33638,34311,34397,34516,34967,35770,35817,35959,36462,38816,41853,49383,50061,52615,52876,66465,68830,69075,74859],"all”":[34197],"needing":[78,167,8128,11466,11612,12975,13064,18621,23209,25550,26479,27637,32704,35898,37376,41993,42024,54759,66194,66355,66405,74883],"multiplayer":[6844,10787,10802,10983,11000,11038,11065,11100,11148,11159,11171,11184,11198,11220,11235,11241,11270,11290,16847,16883,16933,17384,17398,17735,19129,19274,22661,31118,31440,66019,66029,66039,66098,66106,66174,66212,66329,66347,66372,66397,66444,68012,68042,68073,68078,68244,68262,68278,68303,68308,68316,68346,68375,68432,68681,68703,73684],"namefor":[53717],"happens":[169,2275,2360,3326,3433,3484,3666,3829,4065,4639,4877,5769,7483,8085,8385,8899,10068,10574,10609,10877,12516,13131,13462,13797,15839,17986,17994,18315,18516,20343,21307,21903,22540,24733,24745,24916,25043,25307,26245,26485,26572,27052,27184,27300,27523,28404,28990,29108,29790,30096,30341,32174,32412,32852,33265,33403,33437,33458,33473,33542,35360,35738,35837,38389,38472,38674,39078,39167,39797,39925,41917,42106,43002,43203,44688,46248,50962,52475,52576,54281,54556,57904,59191,59564,62194,62413,62594,63049,65982,66208,66524,67903,70380,71059,71634,71809,72364,72407,72925,73395,73631,75431],"oscillate":[8570,13692],"infinitely":[9859,9966,18320,26916,31718],"corrects":[34874],"“uv":[10514],"incorporate":[8496,18354,31819,48201,49817,71888],"pushitem":[65420],"moduleab":[3332],"visibilitychanged":[74733],"settime":[34072],"devicedefinition_setmanufacturer":[75523],"prepareframe":[34100],"walljump":[48349],"surface":[67,281,1675,2356,2995,6169,6902,7243,7998,8189,8310,9875,9969,10002,10079,10108,11509,11648,11661,12663,13026,13360,13828,13887,13897,14150,19060,21151,22016,22165,22726,23246,23398,23559,24912,25623,26787,26917,26935,27060,27065,27081,27114,27158,27329,27575,28838,28914,29385,29511,30877,31684,31869,32343,32371,33006,34809,37556,37646,37688,37974,38372,38412,41766,41838,42785,42817,43128,43150,43177,43335,43729,43917,44012,44068,44503,44898,44998,45183,45584,45629,45784,45845,46136,46504,46527,46711,46818,47187,49423,49454,49467,49473,49483,49496,49505,49515,49594,49607,49626,49636,50361,50512,50571,50579,50929,52141,60778,71016,71750,71970,72133,72357,72799,73020,74171,75740,75903],"a+":[45291],"setsourceinputport":[34147],"utf16":[28045,58342],"creationcontext":[54527,58062,60907,61007],"benefits":[4549,4727,6683,8094,11191,27209,27294,27927,28945,29012,29476,29806,30325,30913,32917,33467,39727,43484,50065,52098,57950,68777,70957,73693],"initial":[457,582,1221,1325,1711,3247,3570,4537,6385,6440,7764,8590,11521,12404,12524,13666,18095,18235,18313,18364,18514,18575,18969,20194,23007,24821,26156,26878,27678,28183,29254,29835,30540,31853,32065,32078,32141,32372,32849,33239,33478,34940,37176,37308,37483,37515,37714,39610,39749,39989,41289,47232,49852,49943,52122,52202,52601,52746,54016,57035,57289,58177,58365,62194,62586,62858,63747,65132,67852,71012,71790,73445,73616,73938,74646,75108],"selfillumfamily":[42574],"texdl":[68148],"qnx":[33795,50276],"revision’s":[53048,53143],"haspointercapture":[56921,60264],"sympath+":[74519],"catalogs":[17045,49778],"distanceperframe":[51972],"myeditorscript":[21119],"onmousexxx":[21173],"gon":[21524],"communicating":[23194,67163,67545,75257],"coupling":[4964,17045],"enableprojection":[37619],"clearcoat":[38005],"uxmlchildelementdescription":[58094],"enable_ios_on_demand_resources":[2802],"khaki":[63569],"tilemapeditortoolcan":[51596],"newin20183":[2755,10103,11501,13634,18237,22284,26781,31800,31821,32202,32326,32592,32663,32709,32889,51176,51195,51229,51242,51255],"systemusedmemoryrecorder":[36261],"approach":[2995,4875,6811,7496,10082,11624,12908,13058,18620,20436,23101,23440,24466,25623,27083,27468,28062,30312,30352,30906,32074,36753,37236,37407,37710,39899,41884,42185,45229,45293,46718,49637,52258,52597,54120,57634,61327,62788,67240,68626,70905,72318,72475,73561,74458],"myassetpostprocessor":[48388],"color0":[8750,44892,45728,47685],"checkered":[10528],"shortpath":[68873,69108],"endproperty":[20947,55113,59601],"raytracing":[22872,37820],"2020lts":[68740,69295],"anchormax":[24733],"staging":[66390],"chocolate":[63523],"sequence":[249,2211,2434,6948,10003,12305,13067,13805,14254,15042,18256,21296,21640,21684,21845,22345,29702,32678,37401,39002,39390,39477,39608,39745,39982,40074,42796,45267,49354,49390,52063,57853,58454,61314,61796,62836,64182,64292,64533,65086,68513,70396],"cullinggroup":[6152,18561],"hgrc":[48086],"testtools":[17635,31331,31415,68838,69083],"destroyimmediate":[30899,40478,49951],"theirs":[48057],"domainunload":[18012],"ctr":[22350],"7ms":[26000],"windows":[239,687,715,840,1129,1592,1666,2727,3232,3466,3852,4225,4539,4874,5701,6330,6362,6450,8404,9123,9566,10733,11696,11917,12180,12358,12437,13382,13997,14012,14357,15723,16330,16564,17045,17708,17931,18540,18897,18949,19047,19128,19221,19299,19364,19625,19649,20177,20448,20538,20759,20831,20861,21021,21382,21942,22036,22251,22434,23696,24018,24465,24534,24601,24621,24927,24987,25268,25314,25355,25451,27136,27528,27650,27784,27919,27938,28100,28151,28381,28575,28626,28713,29093,29829,30282,30505,30537,31290,33777,33878,34223,34245,34328,34447,34576,34655,35038,35187,35879,36161,36555,36608,37684,37767,38275,38320,38330,38425,38878,39136,39226,39272,39914,40551,40661,40761,41365,41532,43211,43920,43942,44055,44303,45735,46510,48064,48164,49192,49740,50084,50165,50639,52101,52239,52502,53347,54484,56075,57333,58794,58997,59906,60349,61986,62751,64271,64982,66114,66471,66536,66567,66867,66885,66901,66953,67131,67620,67625,67743,67838,68047,68467,68755,68926,69169,69696,69836,69864,69948,70093,70126,70177,70198,70273,70344,70362,70647,70773,70928,71247,71349,71378,71542,71675,71748,71896,71909,71994,72004,72011,72065,72076,72089,72096,72110,72119,72125,72133,72136,72148,72172,72201,72207,72620,72788,72842,72884,72954,73125,73294,73478,73689,74192,74497,74505,74512,74580,74586,74617,74725,74757,74799,74808,74813,74832,74851,74863,74882,75204,75303,76094],"uvscale":[14042],"inputdevice":[75074,75520,76124],"noinstancing":[23277],"stylize":[24051,66337],"rayorigin":[14200],"\\resources":[70928],"maxrange":[72320],"logicalxor":[43826],"euler":[1892,2046,2353,7015,12970,25565,27462,37280,51687,76276],"in_foldout":[63451],"isactive":[24850],"kcubezsign":[8665],"resetdelegate":[36673],"offices":[70424],"separate":[7,291,1007,1331,1557,1735,2067,2189,2257,3321,3473,3507,3520,3667,3758,3818,4207,4223,4294,4522,5186,7284,7476,7944,8086,8429,8566,8627,9109,9673,9962,10003,10205,10551,11175,11461,11570,11808,12401,14699,14962,15015,18215,19005,19169,19454,20240,20790,21160,21524,21640,22456,23403,23463,24018,24391,24456,25182,25341,25526,25928,26249,26387,26651,26669,26864,27034,27088,27167,27325,27678,27704,28266,28510,28906,29484,29735,29921,29973,30047,30352,30384,30475,31634,31720,31818,32128,32194,32215,32339,32357,32605,32628,32665,32847,33069,33393,33619,33715,34663,34933,35090,36069,36205,36333,36458,36550,37286,37694,38087,38370,38403,39789,39880,40097,40263,40441,41871,42056,42333,42691,43118,43754,43850,43990,44089,44363,44535,44758,45212,45295,45746,48201,48335,48501,48630,48676,49665,50056,50357,50603,50917,52230,52640,52735,53039,53190,53602,54002,54469,54795,57557,57628,58192,58454,60209,61490,61925,62609,62952,63726,63914,66237,66341,66380,66462,66569,69694,69754,69766,69806,70116,70693,71040,71690,71858,72133,72299,72439,73285,73607,74034,74302,74592,74850,75417],"violates":[8521],"law":[22347,26931,36636,41309],"rightwards":[30164],"cannon":[34932],"selects":[644,858,6468,7172,8575,9582,10738,11612,13130,13836,14874,18757,19310,19376,20627,21607,21843,27139,31681,31835,32130,32243,32688,32872,34954,35398,35680,39135,40800,41196,41300,41486,41496,42192,45520,48683,49852,50381,50448,50696,51376,53410,54333,55990,57318,57528,57817,59042,63912,64535,64598,66228,67131,68923,69166,69351,69455,70241,70905,71121,71366,72743,75424],"regressions":[30872,69141],"1kg":[74421],"supportedrendertargetcount":[19753],"artifactory":[69990],"diminishing":[31760],"spreadsheets":[37746],"logicalclear":[43816],"duckling1":[18168],"“":[33169,40933,44954,58421,67105,67739,71687],"#1e90ff":[63552],"fi":[647,695,700,12650,28431,42896,53624],"refused":[57319],"mysound":[68188],"settingsgroups":[48793],"'editor'":[20876],"solve":[1003,3326,3447,3500,4391,10012,10099,11584,20204,26460,26487,29731,30345,31605,36128,36307,43110,51018,51205,69372,69476,69861,70175,70562,71019,73310,73627],"walks":[2998,4869,7620,38661],"pikes":[27469],"closestpos":[56945],"costly":[27309,41813,48227],"onselectionclosed":[49947],"violate":[4130,4391,8355,11638,18938],"neatly":[6151,71809],"kpi":[4946],"inertia":[8555,13242,33640,39773],"trades":[50996],"unpublished":[70585],"designing":[6767,8125,18509,22534,24767,37481,39444,48676,60213,72795,74583],"loadscenemode":[26709,30209],"hashed":[6061,53718],"loadallassets":[3397],"authenticate":[30069,70192,70500,70629],"treeviewsnippet":[65528],"endsample":[27949],"int":[1052,1424,1918,2559,2642,3564,4890,5372,5516,6009,6073,6159,6240,8473,8658,9392,10706,10826,11012,13048,13321,14095,15277,18296,18492,18595,19108,20018,20134,20484,20932,21222,21782,23947,24161,24479,24811,25534,26142,26367,26502,26639,27393,28269,29844,29977,30626,31929,32796,33110,34106,36658,36770,36836,36988,39347,39863,40563,44268,45074,48719,50976,51225,51460,51633,52069,52357,52551,54526,55022,55254,55497,55566,55688,55840,56777,57011,57658,57903,58083,58630,58762,59197,59982,60239,60451,60594,60716,61024,61218,61702,62173,64540,65049,65172,65840,66121,66284,66850,66896,67103,67187,68229,69643,71569,71713,72153,72203,73108,73536,73635,74555,74594,74750,75492,75760,76052],"screenrect":[24175],"splat":[8872],"'back'":[51166],"initials":[30678],"benefit":[1468,3250,6128,7870,8987,10579,10633,13499,15840,17474,21913,26042,27187,27691,30175,30375,30858,32233,33417,33419,36593,38405,42449,42813,50687,68614,70734,72916],"wchart":[28273,72153,74597],"d_profilertimelinerolluparrow":[63470],"upm_global_config_file":[70200],"idx":[8677],"foopluginfunction":[34690],"surfaces":[346,2958,5324,6798,7549,7561,8625,9885,9965,10002,10585,11518,12663,13829,13897,15844,17818,21202,22836,24668,26809,26934,27065,27080,27483,27569,28838,29550,29764,34875,35261,36596,37556,37687,42467,42811,46597,46766,49455,49495,49530,49564,49609,50932,72747],"manipulating":[73,2277,2296,2411,5946,6152,8012,12974,14025,28873,34785,40535,71423,71901],"occupy":[2274,2764,3294,21525,25692,32631,33424,35337],"objectname":[27829,27924,73572,74039],"m_tanktrailparticlecountlabel":[35531],"warnicon":[63447],"catalog":[3338,52921,52951,53145,53335,53960,53994,54035,66992,67003,67072,67161,67650],"angled":[26928,49541],"ides":[19649,33296,38680,40657],"offs":[7798,50670,75445],"opaques":[49384],"theater":[75],"inbuffer":[4942],"evaluates":[6981,7033,10406,11454,13284,18167,21331,31606,40298,41801,41880,47738,50013,54272,71288,71848,73924,74397,75140],"refunding":[4105,4389],"d_search_icon":[63476],"resizebuffers":[20504],"suppose":[2131,13076,21345],"unscaleddeltatime":[52004],"mediumspringgreen":[63600],"meshidtogameobjectmap":[75846],"applypresetsfromfolderrecursively":[19484],"imposter":[35258],"eventid":[29977],"upsampling":[36570,71841],"doing":[2353,3682,4997,8434,10025,12988,14501,17296,20418,20597,24710,25110,26081,26302,26494,27297,27984,31726,33332,33415,33421,34883,36440,37622,43249,43900,43985,45629,46393,47421,48693,49283,57763,66207,67195,67921,71121,71672,73553],"getcommandlineargs":[21031],"waited":[35718,36081],"dualforward":[46801],"reapply":[532,27553,69141],"webm":[1568,6715,14786,72631,72713,72734],"clickmebutton":[62360],"unitydefaulttheme":[63069],"unityxrinputtrackingstateflags":[75623],"correct":[165,423,608,1141,1331,1611,1996,2047,2939,4010,4565,4584,5351,8032,9772,11310,12214,13034,13166,13266,13534,13962,14001,14702,14851,18060,18191,18282,19031,20265,21006,21255,21401,22144,24193,24774,25583,25941,26264,26674,27267,27495,27508,27549,27930,28421,28782,28895,29467,29551,30799,30848,32924,33099,33681,34127,34673,35087,38243,38515,39097,40594,42704,42725,42747,43198,43358,44093,44413,45643,46799,47138,47985,48053,48554,49428,49470,49565,49738,49886,51063,54375,54649,58338,62030,62100,63796,66116,66784,67196,67579,68652,68927,69170,69304,69410,69963,70174,70345,70384,70701,71121,71385,71408,71773,72339,72512,72928,73312,73730,74535,75147,75199,75705,75918,75975,76200],"nobr":[62027],"hair":[6910,37909,42812],"myfunctype":[34726],"unnecessary":[1468,5446,5590,5961,5986,7167,10226,11589,19129,21029,25044,26090,27984,29759,30376,30893,39309,48349,52594,56725,67877,73450,75410],"isn't":[138,367,548,706,729,1665,1770,2782,5015,5730,6464,7211,7495,7816,8080,8104,8247,9216,10354,11376,11657,11740,12305,12346,12599,12713,14502,14872,18131,18485,19348,19361,19382,19944,20049,21778,22144,22301,23389,24759,25938,26690,26925,27757,28096,28283,28677,30096,30904,33297,33444,33504,33842,34256,34337,35874,35931,36156,36232,38351,38616,39272,39778,39859,44978,48252,49345,49819,50197,50687,51204,51850,54436,54547,54736,54758,56112,56523,56676,57291,57434,57958,58110,58190,58313,58459,58776,59398,60412,60610,61327,61523,62071,62742,63978,65719,66498,66831,69352,69456,70195,70302,70345,70370,70610,70823,70902,71006,71191,71423,71645,71808,72007,72474,72666,73025,73309,73440,73702,73900,74569,74761,74949,76217],"notarizing":[28079,28282],"bool":[1051,2011,2557,2797,3023,3432,4605,4970,6008,6246,6741,7765,10826,11014,15278,18295,18594,19411,19517,20263,20899,23937,24140,24871,25642,25702,27690,27962,30074,35545,38996,39207,39863,40081,48723,50966,51436,51559,51587,51657,51771,51789,52356,55189,55509,55566,55685,55732,56143,56909,57245,58244,59932,60238,60459,60662,60953,61114,61826,62727,62765,64653,66127,66856,67349,67776,68207,68845,68988,69090,72246,74451,74696,75491,75749,76040,76205],"i19n":[52647],"navmeshprojectsettings":[15124],"inherit":[4970,5924,10614,10706,11303,13316,13454,20807,22748,24526,26721,30443,30520,31839,32114,32170,32648,32712,44659,46058,48234,49907,50459,51527,51552,51785,53151,54445,54513,54560,55616,56676,60209,65294,66033,68733],"integrates":[27987,49762,53839,72830,74774,74919],"either":[18,183,283,501,509,604,690,810,861,962,1039,1111,1127,1156,1351,1467,1590,1601,1770,2120,2205,2268,2313,2354,2392,3086,3300,3403,3484,3795,3923,3998,4070,4230,4314,4370,4707,4738,4774,4816,5085,5288,6192,6269,6937,7020,7181,7315,7369,7495,7621,7766,7815,7825,7898,7942,8036,8367,8379,8487,8566,8782,9009,9173,9280,9303,9457,9739,9796,9913,10096,10211,10360,10483,10712,10850,11086,11313,11332,11473,11966,12096,13022,13152,13170,13463,13569,13681,13704,13718,13773,13802,13866,14254,14756,14995,17955,17977,17986,18098,18432,18620,19018,19098,19986,20224,20335,20422,20457,20607,21031,21467,22093,22561,23481,23690,24507,24519,24759,24967,25153,25585,25696,25743,25883,25909,26041,26573,26613,26721,26870,27168,27255,27321,27488,27567,27617,27667,27716,27820,28443,28480,29062,29399,29736,29766,30043,30145,30202,30396,30472,30663,31008,31368,31379,32296,33436,33478,33549,33575,33784,34580,34668,34698,34911,35031,35338,35379,35622,35997,36037,36328,36440,36482,36694,37619,37723,38157,38275,38744,38905,39210,39418,39509,39635,39757,39789,40796,40901,41301,41469,41586,41694,41748,41812,42044,42162,42353,42796,43128,43145,43222,43592,43765,43969,44377,44433,44875,45144,45273,45448,45619,46520,47190,48123,48938,49175,49281,49320,49569,49638,49770,49843,50155,50170,50372,50440,51174,51985,52126,52192,52320,52640,53094,53293,54250,54666,54712,55571,55975,56186,57849,57932,58139,58361,58704,58756,59630,59824,59928,60610,60642,60822,61179,61545,61951,61967,62014,62829,63744,64236,64342,64747,65230,65254,65869,65937,66790,67212,67289,67339,67517,67537,67729,67769,68090,68265,68281,68434,68541,68686,68860,69069,69380,69484,69885,69996,70165,70211,70386,70630,70755,70774,70810,70916,70963,71045,71164,71191,71216,71289,71306,71447,71464,71491,71601,71637,71795,71813,72048,72092,72137,72282,72296,72364,72377,72489,72757,72877,73393,73658,73897,74049,74548,74762,74928,75153,75443,75614,76295],"system32":[70166],"gles20":[770],"initnobake":[36666],"couldn't":[3640,25957,53475,75984],"won’t":[4614,12680,13266,25541,26460,27786,30564,33456,34897,34915,54513,58414,66859,71738,73877,74850],"typetree":[29157],"toggleexample":[30609,56483],"tvos":[2764,3045,6451,8441,9058,11694,11841,12153,14297,14308,17045,20448,21060,21952,23146,25320,25738,27136,29450,29455,34274,34371,34486,34600,36170,43944,50192,52681,52693,52698,52705,52714,52730,52748,66526,67431,67737,68054,72700,74197,74920],"expressing":[40535,41026],"isstatic":[49715],"singlepassrendering":[75470],"maxdelay":[11210],"transparentswapchain":[12475,66879],"listpackageexample":[69552],"accelerators":[66641],"quantization":[4956,37678],"insertion":[4848,25410,39628,52672],"processreports":[35748],"450f":[53900],"drawer":[20923,22637,54963,58754,59586,64528,74233],"unity":[66959],"cubemaparrayshaderexample":[8713],"dontdestroyonload":[19401,41742],"#646464":[63279],"declaration":[988,4713,9490,12008,20334,23796,27828,28278,28494,29915,32933,43996,45062,49374,54798,57329,58071,59558,61658,64182,65864,70290,74602],"#64":[66770],"pip":[12222],"reception":[4883],"searchprovider":[2521,2548,2634,2694,35170],"unityglobalillumination":[46524],"enumflagsfieldsnippet":[64603],"road":[10081,13220,13995,14967,30142,34820,51699,51788,74169],"yesonly":[37802],"approximating":[10272,26935,27063,32298,32739],"interfere":[18377,29317,35736,73324],"‘sliced’":[13754],"onpostgenerategradleandroidproject":[23524,24608],"#708090":[63639],"month":[4062,4355,4418,4438,25062,30433],"sky":[6765,13545,23599,26858,26927,27065,37639,37684,37882,42691,42715,42749,42770,42818,43483,43505,43514,43553,47142,47519,49431,68825,69058,71882],"registers":[4970,9785,19471,20154,27953,40453,44293,50495,55286,55610,55818,56066,56220,57417,57860,62114,65088,65368,69657,70692,75882,75978],"xrmeshsubsystem":[75747],"checkmark":[40076,41567,65745,65931],"getshaderpassenabled":[44603],"chips":[33521],"borderline":[43181],"practices":[1465,1489,2063,5820,5987,6211,8435,14002,18400,18608,26353,33085,35893,35965,38679,40526,43542,49402,53713,54845,54869,54892,55622,56718,57946,58423,59891,61795,61958,63217,63856,63874,63887,63910,63932,63953,64009,64022,64040,64316,64381,65696,66459,67993,71019],"eventually":[1903,7307,14713,29906,33444,34190,43195,52584,65999,66230,73917,74314],"reconstructed":[52247],"qmht1i8b5qz7dsvfpx":[69942],"sv_vertexid":[45808],"11_overlay":[19851],"unity_camerainvprojection":[47092],"networktransform":[11090,11266,22975,66056],"tangentialpressure":[60804],"toning":[34877,38100],"separatespecular":[44427,45300],"rootspaceofslot":[56947],"unity_v2022":[28686,28724],"specialists":[4062],"sampler2d_float":[32991,44287],"generationdesktop":[23550],"authority":[4230,10793,10811,11010,11069,11263,11292,22962,66187,66365,69885],"basics":[2065,12970,23776,25502,25970,40529,47176,49641,52221,65979,72946,75284],"unitysetup64":[25461],"specificity":[63810],"kinematic":[3013,7014,7215,11604,13246,15852,22301,26567,29736,31707,33573,33693,35293,36303,37622,38467,38482,38537,38547,38573,38630],"queues":[104,3770,3789,6487,13597,26482,45967],"lollipop_mr1":[755],"secondjob":[26379],"risks":[31013,71016,71738,73608],"_fogcolor":[46422],"mouseoutevent":[60372],"resharper":[33304,40671,52478],"uv0":[316,20423,49687,51070],"–64k":[14389],"probe":[245,5330,5350,5972,6798,7905,8647,9099,9455,9939,10053,10106,10302,10662,13119,13514,14260,14637,20265,22121,22817,23273,23411,23637,26706,26807,26841,27214,27322,27333,27341,27478,27760,30357,32306,35129,36123,36593,37664,37685,37691,37721,37866,42405,46794,47145,47375,49726,50396,50444,51069,68825,68851,69058,71591,71854,74302],"arraysegment":[69015,69267],"collectively":[4964,21640,23209,26058,30321,31661,42317,71871],"++childindex":[55132],"why":[220,899,1378,1511,4400,4434,5043,20277,21739,21865,21988,23817,24338,24728,24751,25043,26095,26460,27056,29097,30361,34956,36432,36530,47805,49381,49526,50945,52461,52548,65998,68786,71034,71166,71772,75444,75549],"patcher":[3450],"altered":[22168,25859,40706,71541],"“services”":[66690],"#44":[62011],"installers":[25449,74408],"opendraganddropwindows":[57530],"bleeds":[10096,43185],"clamps":[18980,34805,43160,48652,50128],"modules’":[36435],"artist":[1866,4549,6895,17126,21629,37689,38661,48335,49540,54120,68527,74200,74348,74907],"ideas":[5829,17169],"customdetailsviewcontroller":[35510],"__donut__":[32549],"permutations":[42974,43016],"m_layer":[21652,76428],"adbv2":[48557],"hole":[30242,50379,50513,58557],"placement":[2397,3004,10089,24774,26846,33674,35153,37588,39505,43374,50366,50587,51328,51787,52114,52194,53290,54262,54549,54771,58354,61201,61915],"blendtwo":[6244],"runtimeanimatorcontroller":[15101,33979],"parsing":[3287,6033,13962,14749,62028,67823,68498,68918,69159,75976],"movestart":[51546],"framestarttimestamp":[21907],"examplerenderpipeline":[49052,49294],"unitydl":[19332,19344,19358,19371,19409],"classes":[387,1010,1260,1406,2699,4969,5901,6052,6068,6133,10475,10719,10826,11303,12666,15042,19970,20044,20096,20893,20923,22189,24632,25855,26077,26762,28464,29907,30063,33242,34163,34611,35189,37351,38464,39856,40173,40527,43326,45104,49756,49817,50651,51562,51705,51806,51812,51862,52245,52624,54297,54475,54636,54817,54885,55562,56090,56674,57637,58878,59395,59589,59734,60215,61771,62648,63196,63858,63954,64026,64322,65891,66029,66464,67685,68197,68630,68733,68815,69047,71662,72013,72291,73024,73031,73393,73667,74311],"drawrect":[59624],"“vase”":[34910],"barebone":[47186],"forcelimit":[69300,69406],"redraws":[36504],"depends":[104,350,510,855,1000,1514,2990,3770,3799,4543,4737,5160,5350,6502,6817,7368,8575,10079,11406,11717,12185,12372,12560,13247,13938,14289,14323,14679,14976,19133,19225,20179,20340,20440,21085,22858,23420,23481,23633,26060,26374,26448,26485,26708,26961,27066,27155,27296,27567,28412,28989,29058,29133,29717,32078,34042,34311,34397,34516,35210,35727,36680,37662,37704,38287,38503,39552,40208,40555,41885,41918,42133,42347,42358,42432,43027,43077,43321,43728,43801,44533,44933,44989,45184,45576,45734,46057,47335,48526,48538,49356,49621,50005,50141,50520,50601,51182,51830,53756,54601,55866,57827,57924,61546,63808,64355,64755,65976,66000,66910,68936,69180,69696,70290,70538,70831,70948,71138,71418,71658,71672,71917,72802,72808,72815,72920,73338,73690],"earned":[4086],"breakaction":[26577],"statuses":[5294,53471,74244],"did":[2179,18090,24030,24669,26095,34928,35714,36100,40564,41845,45290,45726,49557,50610,62685,68992,69239,71109,71584,72400,75980,76256],"scaletofit":[52420,59156,68904,69144],"denied":[1512],"elementname":[63942],"circumscribedcircleradius":[27362],"fixeditemheight":[59463],"currententity":[13338],"scopedregistries":[70878,70978],"allocators’":[29183],"pencil":[30410,52979,53575,65999],"examplelod":[45536],"maxjumpacrossdistance":[76405],"pressure":[3570,5985,14976,18316,58912,60761],"field1":[68396],"alloc_default_thread":[29231],"omitted":[7127,15042,18105,22093,24060,31997,33782,36235,36924,46576,52327,70823],"emphasizes":[19312],"dlc":[3462,3570,4561],"maps":[317,1704,8444,8825,9115,9456,9883,9955,10536,11815,12669,13207,13710,14255,14956,18088,19691,20288,21401,21565,22122,22657,25228,25250,26799,27039,27119,27468,29435,32090,32731,34281,34877,35008,36179,36630,36678,37665,38025,38306,38345,38410,40841,41765,43118,43149,43376,43689,43972,45082,46295,47419,48289,49446,49465,49472,49495,49511,49515,49563,49604,49623,49630,50032,50435,50969,52761,53069,58155,68671,68697,70875,71597,71856,72440,72982,73557,75576,75750],"texcoord2andblend":[31953],"completion":[5284,16364,18255,21124,23007,26360,66465,68130,76037],"segmentation":[17092,31221],"importpackage":[21033],"respectively":[179,316,633,1111,1407,1608,1734,1883,2701,2842,3318,3397,4671,5764,6125,6310,6966,7284,8182,9782,13970,14672,20460,24774,29915,30164,39796,40662,43224,44695,45251,46732,47609,47940,48511,51138,58160,58320,59630,63922,66380,68789,68880,69116,71969,74426],"happy":[34828,35785],"zclip":[21745,42678,47950],"automatically":[80,131,205,269,401,405,487,495,509,532,560,634,719,935,1003,1091,1230,1259,1333,1359,1373,1662,1900,2069,2268,2284,2375,2392,2441,2704,2839,3247,3307,3430,3496,3602,3692,3758,3858,4556,4751,4960,5316,5350,5768,6063,6144,6318,6369,6426,6474,6988,7172,7180,7265,7366,7489,7800,7833,7965,8031,8104,8204,8232,8347,8487,8503,8587,8615,8826,9003,9135,9168,9200,9247,9298,9498,9536,9688,9728,9843,9915,10003,10060,10378,10691,10742,10796,10832,11071,11134,11178,11466,11555,11614,11842,12154,12400,12666,12728,13167,13208,13357,13423,13556,13626,13653,13674,13744,13826,13862,13899,14470,14541,14713,14833,14984,15818,16470,17206,17968,18079,18112,18191,18516,18978,19133,19466,20129,20233,20265,20415,20571,20611,20699,21402,21520,22121,22142,22985,23270,23413,23559,23726,24371,24517,24535,24707,24732,24741,24806,24929,24962,25140,25164,25225,25258,25679,25816,26005,26115,26170,26248,26566,26597,26674,26708,26799,26832,26974,27048,27109,27290,27332,27523,27554,27638,27696,27928,28114,28167,28433,28950,28992,29062,29678,29790,30424,30443,30718,30906,31627,31816,32169,32312,33290,33410,33420,33448,33565,33673,33788,34091,34171,34372,34499,34572,34673,34924,34983,35338,35379,35424,35493,35523,35637,35837,36488,36629,36689,36754,37019,37664,37723,38281,38289,38472,38483,38551,38661,38842,38909,38953,39120,39196,39310,39375,39493,39614,39778,40091,40163,40217,40468,40971,41359,41677,41756,42025,42148,42650,42938,43046,43244,43376,43914,44020,44079,44565,44941,45009,45427,45452,45521,46829,47154,47377,48067,48225,48332,48350,48364,48510,48535,48562,48583,48628,48650,48697,48868,49558,49565,49698,49725,49734,49778,49905,50007,50147,50346,50431,50656,50660,50688,50712,50955,50997,51129,51262,51361,51788,51842,51851,52993,53330,53693,53869,54018,54209,54224,54471,54513,54727,54758,54883,55579,56022,56049,56097,56449,56812,57828,58358,58410,58448,58856,59047,59533,59852,60157,60644,61323,61493,61523,62114,62213,62651,62859,63768,64642,65025,65287,65875,65934,66015,66228,66361,66393,66696,67089,67625,67648,67903,68070,68544,68576,68696,68825,68851,69058,69303,69380,69409,69852,69868,70059,70093,70126,70177,70340,70394,70732,70875,71019,71158,71341,71442,71591,71855,71999,72037,72065,72229,72283,72399,72678,72832,72931,73030,73175,73238,73249,73268,73328,73413,73555,73622,73924,74172,74337,74458,74537,74630,74790,74832,74859,74893,75017,75157,75765],"dithering":[10360,37838,46802],"monodevelop":[18386,23176,34643,47193],"nullreferenceexception":[24983,30096,52556,74553],"filenames":[18624],"mylibrary":[1239,1735],"search":[472,2462,2517,2556,2625,2691,3723,3954,3982,4026,4206,4219,4404,10584,11376,12801,13054,17945,18137,18195,18464,18819,19494,19627,21401,21605,21691,25056,25225,26954,28467,29420,33101,33383,34672,34963,35207,35381,35629,35811,36338,36696,39063,39092,40691,40758,40767,40774,40793,40819,40838,41159,41293,41314,41347,41356,41406,41415,41435,41446,41461,41479,41488,41531,41540,41588,41672,41958,43244,48258,49905,52090,52579,53291,53751,55489,57598,57843,58111,58341,61944,62855,63476,65458,65476,66772,67886,68036,70514,70834,70983,71191,71207,71218,71264,71320,71445,71525,71610,71897,74136,75666,76136],"kept":[989,2275,4773,4997,5944,8554,12009,25064,30063,35268,40916,43165,45779,52218,52494,57001],"–20":[1785],"0vulkanmetal":[45478],"bti":[11887],"setinteger":[2013,28871],"'base64'":[70047],"campaign":[19645],"allocates":[1784,5189,5642,20450,23443,27858,29267,33092,33395,33409,33428,33446,35994,36093,36525,39644,44293,50003,57994,58466,68131,73601,74581],"method’s":[36069,72024],"visualized":[1943,2327,6293,6542,8231,14730,22484,26841,33643,51105,56636],"datetime":[38697,62364,67729],"creative":[17169,24215,50343,74907],"conversions":[6080,8824,9542,45170,55495,62283,62980],"sources’":[22186],"aimed":[75251],"tone":[34862,46667,64282],"tlevel":[27405],"jspre":[6705,34554],"ft":[48275],"controllable":[14808,72331],"renderer’s":[122,208,10231,13601,13768,13797,14833,35059,50455],"valueproperty":[55019],"opened":[3262,15861,18366,20594,24812,25350,27600,30632,34953,35627,38281,40307,54419,56582,56977,68668,71915,74389],"startdraghandler":[2581],"docs":[2755,3232,12028,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17215,17232,17249,17263,17277,17291,17306,17321,17336,17351,17364,17379,17393,17407,17419,17431,17446,17465,17483,17499,17517,17533,17542,17556,17571,17586,17601,17619,17637,17654,17672,17688,17703,17718,17735,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,18903,22284,23774,24594,25492,25865,26781,27669,28783,30951,30997,31294,31374,31488,32326,32889,33569,37746,43333,49640,66808,69376,69480,71377,74074],"dll”":[71686],"rotationrate":[52763,73492],"reparenting":[35347],"unity_initialize_vertex_output_stereo":[1685,32979,43357],"newfolder":[3636],"searchable":[40741,41382],"#3a72b0":[63306],"extrinsic":[37286],"m_shadowmatrix":[44972],"cartoon":[26784,37320],"singular":[24400],"subscenes":[9982,26908,50136],"outfits":[28947],"energy":[7256,7594,7603,7611,7634,7643,7653,8251,11510,11604,11648,18235,32701,33677,42811,44290,53769],"meshgenerationresult":[75867],"although":[73,698,1463,2415,4250,4738,4881,6057,6803,7469,8146,9368,10696,11570,12319,13089,13268,13574,13939,14825,15844,18357,19637,20050,20222,20420,20538,20810,21168,21659,24051,25096,25225,25292,25311,25438,25465,25881,26249,28378,28476,28677,28762,30048,30112,30145,30867,33006,33618,33946,34190,34670,35344,36782,37710,37743,38297,40098,40526,41801,42598,43185,45521,49626,49849,50945,52038,52730,54886,61420,61925,62886,63069,63748,64200,65135,65719,65912,66975,67853,68543,69816,69864,69946,70937,71105,71869,71970,72300,72891,73661,74978,75187,75224],"translational":[8561],"endcontextrendering":[40166],"forcemaxcount":[23270],"location":[237,422,511,608,935,1122,1140,1190,1263,1388,1509,1611,2260,3564,3854,4164,4174,4222,5351,6333,7139,7316,7838,8003,8083,9003,9168,9298,9728,9773,10503,11678,11898,12222,12652,12745,13103,13159,13556,13629,13674,13823,13931,14538,14700,14984,15908,15941,15956,15973,15988,16011,16026,16049,16060,16081,16097,16112,16126,16143,16157,16174,16189,16218,16233,16247,16262,16281,16336,16351,16370,16384,16398,16412,16429,16444,16459,16476,16493,16516,16533,16548,16570,16585,16856,16875,16889,16925,16939,16975,16990,17006,17021,17036,17051,17068,17083,17098,17139,17158,17175,17191,17212,17226,17246,17260,17274,17288,17302,17318,17332,17348,17360,17376,17390,17404,17416,17428,17443,17458,17480,17494,17512,17530,17552,17567,17582,17597,17612,17633,17648,17667,17684,17699,17714,17729,17765,17779,17794,17809,17824,17841,17856,17871,17886,17901,17918,17978,18312,18670,18713,18743,18763,18827,18961,18995,19316,19336,19351,19364,19376,19448,19621,20425,20758,21024,21393,22100,22125,22203,22307,23478,23668,24004,25221,25449,25672,25939,26590,26922,27621,27770,28339,28618,28676,28720,29583,31725,32878,33666,34214,34758,34797,34854,35127,35200,36789,37272,39192,41368,41580,41968,43149,43984,45503,48060,48179,48242,48373,48526,48667,49150,49737,50291,50352,50881,50965,50998,51146,51301,51371,51632,51735,51761,51785,51802,51820,51869,52151,52647,53580,53731,54584,57190,57589,57918,58105,58824,60157,60813,65867,66085,66116,66627,67009,67116,69333,69439,69695,69755,69791,69946,70111,70185,70259,70432,70648,70830,70917,70940,71190,71702,71860,72297,72879,73408,73715,74034,74176,74533,75042,75588,76298],"misc":[12626],"pastes":[71631],"r16g16b16a16_unorm":[8454],"shadowmap":[37821,42395,43983,44961,47083,47751],"verticalandhorizontal":[59182,65168],"clipplayable1":[33945],"wishes":[5065],"stabilize":[8242,9152,9709,13663],"monster":[41468],"navigationbarheight":[19683],"pointerupevents":[56881],"reimported":[3668,3770,19555],"maintained":[6125,14826,15851,24299,53074,68789],"preinit":[75871],"appattr":[53935],"startingin":[62535],"keystrokes":[18508],"r16":[8459],"chromeos":[439,560,603,619,632,648,654,660,669,692,697,716,842,919,1087,1210,1667,11689,11902,28432,35867,50192],"unity_display_orientation_0":[73007],"atomicsafetyhandle":[26108,26135,26247],"min12int4":[8469],"visualeffectsubgraphoperator":[14941,15328],"debts":[53730],"xr_msft_holographic_windown_attachment":[74399],"produces":[567,1245,2898,3731,5186,6376,6395,6480,7304,8555,8590,9878,9966,10572,11570,11613,11871,12917,13065,13247,19197,19314,20692,21931,22740,23488,24468,24487,24960,27090,27131,27762,28174,28189,28480,30326,30840,31760,31795,32248,32408,34192,36569,37679,38503,40835,49757,49839,52222,54733,55863,58394,58447,59531,62071,66840,68900,69138,70224,72733,74184,74602,74637,74784],"telling":[3252,24244,38660,49035,72370],"sysroots":[27654],"m_string":[54523],"overrideexample":[746,800],"maintainability":[6105,30327],"resources":[76,101,241,383,402,420,425,489,494,518,533,542,892,953,1001,1092,1105,1115,1132,1147,1176,1188,1233,1241,1289,1297,1309,1368,1391,1400,1485,1509,1653,1812,1829,1844,1853,1860,2056,2596,2767,2951,3311,3443,3768,4566,4652,4733,4811,5169,5260,5339,5494,5853,5915,6053,6141,6390,6929,7817,8438,9020,9192,9323,9515,9755,10082,10440,11590,11812,12434,12637,13189,13269,13477,13581,13698,13883,13965,14466,14491,14528,14714,14915,15016,15737,15829,17045,18341,18360,18391,18411,18428,18660,18820,19125,19131,19171,19267,19272,19282,19349,19362,19452,19660,20112,21152,21930,22981,23420,23439,23524,23540,24605,24623,25206,25715,25736,25754,25761,25812,25817,25824,25918,26240,26261,26372,26470,26492,26578,26595,26620,26625,26643,26649,26660,26691,26702,26748,26949,27635,27668,27676,27677,27709,27932,28117,28146,28253,28279,28315,28319,28347,28368,28668,28758,28981,29016,29087,29367,29445,29480,29563,29718,29888,30165,30244,30276,30321,30377,30835,30917,31209,31608,31622,31642,33379,33475,33633,33770,33875,33881,33883,34278,34492,34600,34645,34765,34838,34994,35795,35901,35941,36290,36334,36432,36465,36596,36747,36787,36818,36971,37219,37262,37300,37310,37668,38254,38270,38283,38377,38529,38539,38560,38574,38649,39244,39344,40433,41750,41843,43041,43095,43535,44301,48180,48498,48785,48907,49699,49741,49772,50011,50319,50344,50516,50534,50643,50925,50996,51865,51999,52524,52736,52744,53307,54206,54394,54493,54502,54541,54572,54597,54606,54630,54668,54685,54707,54751,54790,54843,54867,54878,54904,54958,55011,55156,55228,55304,55364,55409,55493,55540,55543,55555,55636,55892,56038,56094,56207,56268,56322,56387,56471,56517,56665,56731,56794,56978,57119,57284,57301,57332,57553,57694,57806,57850,57967,57992,58016,58108,58111,58187,58272,58367,58421,58460,58575,58649,58659,59385,59535,59717,59809,59898,60134,60151,60198,60346,60538,60612,60667,60759,60876,60976,61177,61186,61297,61327,61440,61482,61517,61560,61579,61744,61899,61918,61921,61962,61974,61983,62000,62045,62054,62328,62486,62579,62638,62736,62834,63062,63103,63120,63129,63224,63503,63656,63694,63766,63839,63855,63873,63888,63909,63931,63952,63985,64008,64021,64039,64202,64308,64371,64383,64395,64406,64421,64441,64461,64481,64504,64519,64556,64579,64603,64624,64687,64714,64726,64738,64770,64791,64805,64816,64834,64851,64869,64903,64923,64948,64965,64984,64996,65016,65027,65045,65053,65073,65095,65110,65125,65143,65157,65216,65236,65260,65279,65291,65308,65349,65378,65404,65429,65440,65455,65470,65486,65498,65509,65528,65545,65560,65577,65597,65617,65638,65658,65679,65685,65721,65731,65749,65845,65894,65896,65967,66552,66833,66879,66898,67691,67886,68284,68895,69133,69691,69858,70092,70124,70172,70180,70286,70299,70351,70737,70865,70934,70938,71117,71173,71286,71362,71414,71510,71556,71659,71833,72009,72061,72075,72095,72108,72117,72124,72134,72146,72170,72205,72483,72497,72663,72715,72784,72847,72909,73018,73154,73372,73415,73466,73497,73608,73663,73669,73919,74119,74616,74751,74754,74797,74812,74881,74890,74974,75217,75378,75803],"openssl":[52894,53831],"siblingderived":[15301],"inputdevices_deviceconnected":[76238],"spritepackerpaddingpower":[48777],"ctrl+shift+v":[24563],"locationinformation":[53733],"extras":[16017,31395,37384,37506],"catalina":[28288,50209],"mydropdown":[64543],"unity_audiodsp_err_unsupported":[4988],"bracketed":[29915,63729],"indistinguishable":[5049,15831,23053],"monopinvokecallbackattribute":[52651],"stereopan":[5210],"intersect":[11609,12833,13619,37453,37601,38641,40839,42798,44728,71565],"git+file":[70654],"0x2fffdd34":[52563],"bc4":[14385,50672],"multi_compile_lightpass":[44581],"build":[64,78,223,409,422,441,478,493,517,531,543,569,578,619,642,662,673,693,717,745,850,875,889,904,944,962,1100,1202,1230,1240,1251,1284,1351,1371,1560,1595,1724,1758,1810,1812,1843,1967,2762,2768,2906,2977,3243,3292,3306,3340,3466,3491,3521,3804,4427,4515,4521,4663,4959,5838,6040,6054,6324,6345,6391,6460,6782,6833,7215,7366,7485,7673,9256,9488,10658,10937,11669,11810,12156,12348,12475,12958,13309,13363,13705,13898,13972,14278,14314,16212,16330,16564,17000,17062,17130,17251,17296,17342,17561,17678,17693,17708,17865,17880,17980,18105,18127,18454,19028,19053,19085,19097,19122,19128,19133,19197,19269,19278,19302,19322,19635,20116,21006,21026,21142,21856,21962,22093,22128,22189,22355,23475,23561,23615,24244,24477,24601,24621,24916,24947,25308,25600,25688,25723,25733,25739,25832,25841,25845,25899,25928,26034,26046,26070,26106,26567,26597,26682,27156,27171,27527,27637,27671,27682,27698,28081,28118,28129,28147,28186,28263,28281,28416,28463,28835,29192,29365,29566,29731,29817,30008,30354,30839,30859,30916,31047,31408,31616,32738,32861,33395,33575,33782,34277,34373,34491,34600,34663,34684,35089,35461,35496,35507,35794,35948,35958,36172,36543,36736,36826,36979,37268,37345,37504,37554,37666,38064,38277,38324,38486,38711,38929,39124,39169,39947,40195,40521,40589,40760,41835,41894,41928,41935,41944,42038,42132,42211,42934,42946,43013,43021,43995,44058,44307,44510,45016,45419,46143,48201,48535,48541,48570,48575,48677,48855,48977,49285,49346,49395,49677,49750,49752,50011,50040,50064,50136,50142,50150,50189,50534,50660,51009,52248,52530,52570,52682,52707,52721,52771,52822,52877,53082,53303,53703,53782,53992,54002,54388,54471,54548,55602,57796,58027,58375,58484,58673,58732,60136,60204,60637,62072,62742,65902,66234,66336,66355,66414,66456,66461,66598,66814,66838,66874,66893,67043,67235,67401,67857,67947,67989,68069,68073,68721,68823,68893,69055,69364,69468,70481,71042,71176,71614,71684,71849,71994,72005,72089,72119,72126,72201,72282,72474,72616,72786,72843,72951,73024,73146,73155,73207,73290,73312,73382,73418,73428,73442,73561,73619,73654,73774,73894,73908,74049,74127,74190,74353,74535,74588,74617,74756,74808,74814,74832,74850,74883,74895,74934,74990,75033,75132,75191,75314,75375,75687,75876,75918],"generations":[25885],"cylinder":[8149,9427,25667,27013,32408,35244,49525,74458],"sysroot":[17558,17573,27637,31143,31459],"onexecutecommand":[55957],"produce":[935,2131,3489,4797,5856,5939,6999,7296,8380,8492,9792,10011,10573,10633,11553,11624,12730,12993,13058,13239,13499,18091,20194,20419,21870,22107,22596,23615,24751,24786,24923,24970,25099,25849,26646,27142,27759,28467,29192,29511,29714,29825,31661,31795,32220,32314,32650,32683,33524,33889,34215,35269,35920,36463,42704,42725,42747,42772,42952,44637,45294,46040,49497,49540,49627,50352,50947,51427,54132,58394,58459,66159,68493,69813,71672,71811,72204,72532,72724,73396,73705,74328],"serializer":[39899,66408],"sdks":[263,5015,12034,52885,53713,72880,74777,75409,76217],"supportsmultisampleautoresolve":[19757],"maximumlod":[12958,45533],"vector4":[2340,5438,5582,55539,65648,72291],"normal's":[6597],"unetencryption":[66114],"planetstreeview":[60067],"shortcutattribute":[43326],"sorting":[102,2663,3951,3982,4042,5655,6501,9440,11570,11622,13133,13584,13725,13759,13793,13843,14539,24584,29858,32273,33267,34993,37365,38022,48902,51084,51165,51198,51252,51368,52348,61497,66548,71216,71458,74179],"behaviours":[3017,4862,6778,26551,37610,38523,49649,51224,51610,59829],"scrollview":[23222,23982,54557,54694,55070,59176,59602,59735,64884,65162,65163,65709,65785],"process":[146,214,405,468,572,579,631,658,783,841,951,989,1031,1104,1202,1230,1251,1270,1353,1498,1655,1706,1842,1931,2360,2690,2716,2764,3253,3320,3344,3381,3508,3521,3580,3675,3729,3784,3839,4029,4170,4204,4313,4387,4433,4530,4573,4665,4753,4776,4792,4825,5037,5351,6038,6339,6384,6393,6807,6942,7116,7474,8111,8582,9102,9386,10015,10573,11221,11632,11735,12472,12912,13601,14527,14789,14928,17152,17370,18093,18436,18575,19057,19096,19141,19366,19378,19478,20240,20393,20427,20452,21031,21345,21400,21841,21956,21967,22151,22510,23444,24041,24505,24601,24621,24640,24792,24960,25044,25142,25162,25263,25328,25465,25832,25900,25921,26477,26510,26597,26690,26700,26709,26809,27015,27058,27080,27171,27175,27512,27538,27638,27674,27786,28079,28109,28124,28129,28182,28185,28281,28412,28463,28753,28778,29187,29721,29759,29824,30166,30204,30237,30264,30370,30839,30861,31624,33064,33086,33383,33398,33421,33498,33781,35126,35315,35720,35798,36093,36181,36303,36553,36569,37227,37271,37373,37563,37647,37695,37728,38212,38297,38330,38374,38406,38683,39160,39852,40020,40118,40613,41374,41843,42364,43031,44085,44165,44723,48215,48288,48551,48676,49064,49376,49554,50057,50499,51074,51842,51961,52104,52189,52224,52530,52590,52766,52812,52888,53093,53856,57443,57564,57809,57854,58069,60212,61322,62597,62796,65031,66038,66043,66364,66458,66461,66688,66824,66859,66895,66910,66964,67018,67063,67070,67229,67294,67336,67351,67537,67549,67626,67651,67840,68573,68777,68916,69157,69387,69491,69713,69961,69990,70466,70921,71281,71289,71662,71791,71813,71869,72103,72787,72832,72844,72957,73338,73626,73924,74417,74535,74645,75876,76335],"m_pvsdata":[76345],"spherecollider":[8368,13646,15129],"modelimporter":[5932,15253],"lightprobe_sh":[44577],"m_touchcountlabel":[20014],"compiled":[462,1227,1273,3466,3571,3766,3829,4573,6101,7368,8487,12428,13355,18624,19033,19129,19242,19511,20224,30885,33494,33782,34428,34526,34596,34640,39947,40173,40442,40589,41791,41840,41962,42180,42946,43013,43017,43956,46829,47804,48179,49373,49395,49758,52550,66114,66518,67708,69508,71049,71662,72132,73412,73562,73640,74337],"mdi2dsze3tyoou9q+yhyumhfnydxh+kx2f4yznisw1":[69933],"triplet":[73934],"unwilling":[26689,28608],"“gaps”":[33437,37838],"terribly":[47313],"milkytracker":[52101],"renewed":[67729],"darkturquoise":[63546],"#absoutput":[35120],"toast":[53700],"assets":[69,78,165,167,379,427,454,474,493,510,541,567,790,998,1229,1238,1281,1292,1311,1336,1812,1825,1835,2077,2214,2224,2244,2251,2347,2364,2516,2543,2690,2768,2915,3009,3020,3243,3311,3346,3377,3454,3492,3513,3569,3582,3674,3721,3774,3839,3870,3879,3898,3905,3949,3998,4025,4061,4168,4186,4204,4217,4254,4353,4359,4392,4403,4428,4448,4463,4484,4500,4519,4663,4772,4865,4876,5022,5128,5164,5768,5832,5919,6034,6056,6141,6334,6351,6419,6477,6718,6807,6948,7146,7395,7468,7767,7816,7869,7875,7878,8410,8626,8648,9075,9135,9198,9245,9554,9974,9986,10424,10489,10732,11307,11505,11645,11681,12044,12598,12769,12833,13193,13308,13350,13382,13626,13702,13747,13897,13944,14006,14117,14218,14469,14930,16423,17045,17312,17759,18107,18335,18362,18432,18454,18514,18720,18756,18916,19033,19060,19129,19149,19322,19453,19963,20191,20393,20420,20594,20652,21122,21250,21385,21445,22095,22555,23521,24100,24696,24989,25043,25100,25152,25194,25237,25328,25361,25396,25466,25543,25927,26086,26908,27110,27167,27600,27678,28171,28509,28851,28880,29092,29371,29402,29413,29561,29782,30035,30100,30211,30666,31587,31623,33467,33472,33883,34539,34677,34735,34918,34930,35036,35187,35366,35764,35958,36242,36465,36693,37273,37322,37376,37498,37546,37667,38377,38713,38840,38930,38953,39017,39097,39192,39905,40172,40431,40474,40523,40711,40787,40793,40911,41202,41331,41359,41417,41470,41560,41676,41757,41868,42263,42319,42468,42549,42877,42897,43102,43518,44210,48173,48223,48239,48264,48536,48565,48581,48605,48864,48940,48989,49176,49553,49736,49770,49905,50372,50521,50613,50665,50881,50933,51018,51088,51129,51206,51231,51361,51452,51612,51697,51817,51820,51843,51849,52184,52587,52739,52902,53730,54408,54515,54738,54956,55152,55226,55362,55672,55751,55860,56553,56810,57137,58106,58112,58265,58300,58368,58651,58757,59023,59384,59533,60148,60155,60472,60573,60839,61188,61309,61334,61487,61599,61907,61920,62047,62132,62349,63069,63763,64262,64406,64421,64461,64481,64504,64556,64579,64603,64624,64687,64738,64745,64816,64834,64851,64869,64903,64923,64948,64965,65016,65073,65095,65110,65125,65157,65236,65260,65279,65349,65378,65528,65545,65560,65577,65597,65617,65638,65658,65687,65758,65834,65880,65910,66116,66252,66555,67143,67691,68045,68157,68534,68607,68778,68894,69132,69330,69386,69436,69662,69740,69780,70258,70346,70360,70833,70959,71016,71193,71204,71215,71262,71315,71338,71361,71389,71422,71455,71465,71502,71534,71617,71662,71865,71903,71906,72278,72385,72464,72500,72615,72786,72867,72974,73022,73398,73501,73613,73919,74083,74137,74362,74634,74793,74838,74903,74907,75055,75083,75233,75909,75978],"draft":[3881,4061,4185,4193,4209,4220,4245,4361,4405,4413,4423,4452,4464,53093],"rigidly":[9184,26587],"interopservices":[18543,26132,30015,52656,73529],"quotes":[21039,25462,41218,63722,69969],"lossless":[4782,21676],"entitytospawn":[13327],"debuggers":[633,653,6476,28403,34988,40653],"norenderpipelinemanager":[38199],"anchoring":[13107,24787,39444,39506,54724,62800],"batchfiltersettings":[5677],"controller'":[2222],"81e94844d19a16919208533e08183531":[66683],"religious":[53737],"any":[14,65,214,253,322,466,474,499,518,556,680,720,938,993,1038,1192,1352,1378,1416,1516,1599,1679,1762,1840,1888,1900,1916,1961,1997,2067,2184,2194,2227,2272,2284,2324,2363,2395,2708,2894,2973,3057,3229,3243,3306,3363,3453,3455,3485,3538,3571,3581,3682,3738,3788,3843,3886,3904,3909,3951,3982,4034,4064,4178,4206,4255,4357,4361,4400,4427,4479,4506,4519,4636,4654,4768,4776,4793,4822,4874,5029,5158,5176,5269,5350,5608,5721,5761,5765,5872,5920,5984,6139,6317,6344,6351,6429,6538,6723,6818,7004,7198,7219,7369,7469,7567,7574,7615,7767,7771,7829,7900,7941,8012,8117,8163,8205,8251,8302,8373,8564,8642,8765,8839,8981,9024,9138,9154,9207,9250,9322,9333,9515,9579,9636,9762,9767,9937,10012,10055,10115,10354,10491,10575,10633,10720,10742,10826,10995,11040,11072,11310,11320,11388,11407,11510,11539,11664,11684,11763,12114,12293,12426,12442,12712,12721,12804,12898,13024,13231,13252,13266,13346,13379,13456,13657,13712,13734,13762,13790,13817,13837,13934,14006,14520,14547,14679,14721,14838,15022,15832,15967,16060,16542,17000,17169,17296,17956,17980,18090,18125,18229,18255,18354,18357,18432,18454,18508,18567,18665,18722,18730,18756,18822,18896,18928,18982,19033,19091,19302,19332,19345,19372,19448,19466,19636,19667,20078,20190,20211,20228,20261,20583,20640,20660,20790,20863,21029,21168,21302,21385,21445,21571,21711,21862,21896,21986,22032,22128,22189,22224,22329,23275,23398,23525,23543,23718,23797,24029,24094,24213,24392,24456,24472,24565,24619,24624,24664,24733,24754,24792,24912,24930,24963,25083,25099,25164,25187,25247,25331,25355,25417,25490,25499,25623,25686,25695,25741,25835,26041,26078,26119,26170,26263,26291,26375,26459,26561,26571,26690,26712,26783,26925,26970,27059,27094,27098,27141,27262,27310,27314,27334,27341,27491,27637,27678,27729,27762,27930,27986,28114,28170,28185,28310,28323,28362,28403,28464,28639,28753,28764,28874,28885,28961,28992,29046,29104,29237,29348,29437,29470,29488,29728,29741,29784,29858,29893,30039,30096,30173,30185,30260,30345,30413,30443,30490,30520,30872,30918,30988,31366,31389,31603,31610,31634,31650,31707,31853,32066,32107,32168,32260,32393,32727,32767,32923,33064,33074,33134,33381,33401,33420,33454,33476,33506,33555,33655,33768,33873,34100,34201,34372,34503,34572,34638,34668,34735,34770,34896,34915,34925,34944,34985,35188,35240,35269,35366,35427,35544,35604,35622,35690,35779,35826,36034,36488,36570,36674,36679,36695,36737,36956,36998,37294,37322,37356,37489,37554,37642,37670,37689,37712,37733,38277,38292,38396,38458,38482,38505,38531,38550,38584,38609,38633,38648,38715,38827,38869,38930,38953,39040,39098,39137,39170,39190,39253,39340,39346,39529,39553,39591,39613,39662,39714,39885,40078,40177,40500,40555,40689,40701,40759,40819,40872,41173,41309,41320,41349,41362,41436,41451,41466,41520,41583,41671,41689,41727,41792,41830,41872,41912,42025,42105,42150,42187,42262,42366,42391,42447,42547,42615,42669,42688,42756,42804,42991,43172,43209,43506,43587,43757,43800,43920,44063,44114,44298,44428,44583,44683,44811,44835,44990,45062,45182,45192,45459,45659,45725,46000,46369,46721,46826,47067,47185,48068,48163,48170,48225,48258,48276,48337,48373,48511,48528,48599,48654,48674,48858,49150,49194,49289,49318,49394,49428,49468,49509,49526,49571,49594,49642,49686,49718,49738,49762,49992,50150,50200,50288,50342,50351,50366,50512,50522,50563,50615,50673,50901,51018,51155,51184,51202,51301,51389,51545,51579,51601,51772,51785,51812,51835,52010,52186,52224,52242,52532,52691,52973,53086,53280,53702,53714,53840,54016,54119,54219,54239,54305,54440,54514,54547,54611,54646,54674,54725,54771,54809,54876,54921,54968,55073,55171,55245,55318,55404,55547,55571,55731,55923,55996,56121,56222,56281,56327,56481,56531,56601,56676,56745,56799,56987,57135,57329,57342,57581,57637,57840,57907,57972,58090,58336,58378,58559,58599,58766,59276,59557,59781,59837,59915,60196,60424,60637,60681,60891,60991,61184,61202,61381,61490,61598,61759,61907,62017,62066,62150,62348,62504,62590,62652,62784,62836,63098,63106,63214,63726,63912,63982,63989,64011,64032,64141,64269,64310,65024,65031,65208,65386,65788,65867,65926,65999,66016,66119,66225,66352,66450,66465,66584,66816,66877,66895,66928,66951,67047,67070,67151,67188,67325,67351,67541,67550,67558,67569,67581,67592,67624,67708,67773,67856,67974,68160,68245,68410,68477,68532,68551,68566,68689,68811,68849,69040,69295,69372,69476,69506,69514,69733,69851,69946,70042,70070,70108,70137,70184,70211,70235,70260,70312,70328,70373,70594,70747,70756,70769,70871,70940,71026,71127,71175,71190,71205,71230,71263,71288,71316,71338,71371,71392,71417,71446,71482,71503,71529,71570,71605,71651,71664,71850,71858,71910,71969,72090,72201,72225,72229,72331,72403,72493,72609,72735,72773,72788,72839,72851,72880,72928,72939,73022,73197,73393,73424,73448,73553,73613,73667,73693,73919,74157,74564,74602,74633,74883,74933,74990,75067,75092,75134,75191,75271,75294,75414,75508,75739,75893,75925,76038,76096],"_projectionparams":[44858,47087],"pane's":[54483],"hu":[53630],"freeform":[48,6286,6322,9024,12721,15824,22353,32254,54223],"previewanimationclip":[15266],"rgba8":[8456],"initializeonload":[3764,18034,38820,68956,69203,69654,75712],"filter's":[7444,7461,7594,7603,7611,7634,7643,7653],"rigidbody2d":[11248,13174,13270,13573,13684,14999,15073,25772,35273,37622,38547,38575,38629,74332],"#cd853f":[63621],"printfloatarray":[73509],"terrainphysics":[16721,30935],"leftmousebuttonpressed":[60459],"getallboneweights":[332],"“domain":[17986],"averaged":[6111,10009,11512,18166,49610],"initializeonenterplaymode":[20177],"togglegroupscope":[59703],"report":[1039,2748,4070,7113,7976,8180,8277,8395,8780,9045,11921,12185,12372,12560,12739,14515,19225,21175,21946,22697,24480,25847,25892,27793,29174,29663,29918,30092,34311,34397,34516,34640,35000,38737,39440,39927,41579,51958,52478,60801,67953,70917,75477],"legitimate":[59872,66436],"p_freq":[4886],"packed":[5425,5569,7506,10079,13712,22296,26603,27025,43895,44061,48354,48528,48570,48595,48677,48857],"deformations":[10525,21711,29894,47752],"concatenated":[5986,28618,44965],"cfbundleidentifier":[12154,28208,34372,67053,67526],"actors":[3340,11631],"tearing":[12884,22713],"eighth":[12895],"motortorque":[14959,74445],"rejecting":[34379,54016],"registermaterial":[5409,5553,5764],"stoppropagation":[55962,57958,60262,61805,62155,65340],"toolbartoggle":[30522,55427,65388,65500],"mp4":[6715,10733,14786,22942,53292,72600,72626,72713,73224],"powervr":[553,14345,33520,44914,45593],"myelement3":[61580],"200f":[62313,63021],"premerged":[48057],"secrets":[67779],"crossfade":[2073,20289,48319],"orphaned":[3859],"box":[11,88,205,246,1129,1886,2263,2387,3884,3919,3954,4013,4034,4078,4160,4180,4201,4214,4239,4282,4396,4455,4473,4488,4823,6761,7162,7184,7838,7946,7958,8001,8030,8169,8328,8373,9451,9560,9890,10124,10337,10503,10579,11328,11382,11405,11564,11623,11810,12206,12348,12491,12727,12821,12874,13105,13135,13207,13387,13561,13697,13705,13751,13793,13882,13935,14544,14712,14729,15823,15832,15892,16933,17945,18229,18441,19009,19072,20752,21605,22016,23038,23786,24064,24307,24518,25345,27323,28835,29695,32365,32430,32728,33301,33433,33697,34277,34408,34963,35256,35807,36338,36454,36710,37447,37687,37788,39135,39355,39599,41686,43244,48322,48524,49490,49513,49621,50431,50534,50597,51142,51280,51347,51514,51533,51567,51825,51910,52756,53006,53338,54263,54682,55642,56447,56533,56661,58683,59607,59994,60335,60837,61196,61946,62122,62225,62655,62858,63263,64043,64254,64427,65680,65736,65790,66052,66258,66357,67257,68561,70497,71196,71218,71254,71283,71386,71445,71525,71610,71871,72372,72861,75734],"product_name_app":[49787],"closures":[33263,63222],"toggle_on_focus":[63488],"mymanagedassembly":[71682],"curve's":[1883,14968],"ripples":[8872,50470],"ienumerable":[2464,2632,41174,51459,58060,59130,59466],"checkconsistency":[35694],"adapts":[52040],"symbolmap":[74615],"unitymaintargetguidmethod":[49807],"passfront":[45863],"demangle":[73188],"“lightmap":[26789],"pwd":[28681,66615],"tailor":[6843,26448,31239],"mrts":[45481],"recieved":[11011],"conjunction":[1966,3496,7619,9069,13850,15818,22715,29144,33449,39444,49449,49495,49539,52094,72375,72941,75624],"executeineditmode":[15731,18030,20777,32785,36647,39170,55256,56408],"removelanguage":[73786],"eta":[36624],"grayed":[526,1113,7749,8138,21715,38552,38889,50398,51875],"provisioning_profile_app":[49788],"applesimulateasktobuy":[67393],"stacks":[24923,25849,33396,33524,35695,35896,36042,36188,36497,50044,73630,74207,74615],"pupils":[76176],"textures":[7,65,167,317,554,1557,1703,2769,3318,3431,3459,3499,3569,3608,3731,3791,3889,4025,4501,4519,4663,4772,5942,6378,6439,6691,6802,8427,8607,8785,9102,9139,9207,9258,9970,10003,10109,10520,10729,11707,12044,12891,13196,13357,13371,13706,13770,13799,13826,13897,14006,14009,14072,14232,14318,16795,18513,18670,18756,18916,19129,19150,19454,20393,20420,21240,21384,21711,22192,22296,23596,24688,25177,25187,25235,25843,26086,26784,26873,27114,27129,27329,27490,27503,27513,27544,27582,27722,28176,28846,28868,29766,29775,29809,30296,30320,30367,31590,31993,32704,32731,33477,33883,34362,34486,35008,35719,35924,36204,36391,36454,37369,37549,37668,38014,38349,38840,39929,40714,40935,41177,41474,41773,42352,42691,42715,42737,42756,43149,43376,43494,43521,43897,43968,44050,44234,44370,44428,44839,45077,45139,45202,45205,45266,45509,45582,45615,45643,45810,46122,47110,47240,48161,48225,48353,48503,48529,48556,48593,48613,48616,48630,48674,48857,48894,49038,49446,49473,49533,49618,50006,50018,50053,50063,50094,50140,50145,50356,50387,50435,50519,50571,50579,50629,50669,50698,50726,50928,50956,50997,51131,51204,51231,51371,52184,52589,54604,55082,58111,58310,58393,59501,60640,61306,61533,61920,63764,64262,68130,68347,68940,69184,71021,71765,72275,72510,72747,73016,73384,73443,73524,74044,74146,74639,74907,75187,75411],"showwindow":[20886,52341,60146],"canyon":[7549,7561],"device's":[644,858,881,1029,1509,1770,10771,11729,12883,19992,25672,25890,34404,53757,66910,67039,67343,67609,72986,75446,75478],"minresolutionwidthscale":[20471],"unlabeled":[3957,71205,71217],"texcoord7":[316],"readonlymodelpostprocessor":[5930],"unity_access_dots_instanced_prop_with_default":[20277],"m_pvsobjectsarray":[76347],"pools":[33097,35994,36224,52589,54900],"cluster":[9997,17118,22144,31071,32702,37792,38261,73474],"offset":[2348,2927,2966,5444,5588,6962,7079,7966,8003,8037,8168,8196,8268,8378,8770,9031,9163,9211,9268,9307,9645,10247,10403,11051,11164,11442,11546,11605,11678,12729,12754,12896,13137,13159,13266,13275,13292,13811,13826,13931,13983,14150,14476,14506,14731,18174,20237,20435,21750,22307,24772,26587,27820,30147,30268,32397,32905,35669,37821,38292,38661,39721,39973,41774,42382,42676,43195,43881,43970,44076,44623,45098,45152,46014,46492,47264,48373,50538,50960,51156,51169,51186,51879,54724,56100,58291,59855,61196,62034,62182,62194,66333,71860,72297,74256,75223],"ispoweroftwo":[10463],"scenesaved":[39020],"\\programdata\\unity\\note":[239],"joy":[22682],"deinitialization":[4966],"onstatemachineexit":[21334],"stained":[29556],"imagery":[4357],"seemingly":[42704,42725,42747,42772],"compareandwrite":[61154],"appearance":[889,1553,9196,9620,9843,10214,10439,10507,11712,12047,12323,12446,12881,13219,13247,14576,14679,17591,18239,20089,20608,20937,22886,23378,23590,23673,24051,25733,26807,27089,28838,28864,29001,29360,29385,29484,29714,29774,32776,34248,34331,34455,34840,34893,35772,36678,37428,37556,37685,37715,37733,38500,39666,40039,42318,42703,42724,42746,42766,44215,49444,49526,49621,50550,50648,52058,54769,54795,54848,57479,58318,61933,62194,64143,64341,64450,64756,65737,65994,68867,69100,71873,72836,73908],"currentselectedgameobject":[24833,61497],"remaining":[494,1980,3782,4567,4903,5288,8020,10633,11684,12111,13499,17045,18101,26115,26245,26509,29060,29249,31727,32728,33409,35934,37713,38876,40448,41967,50697,51031,53702,66465,67693,75624],"a9+":[50270],"preempting":[20438],"static’":[26789],"boils":[13032],"standardparticleshaders":[42807],"referring":[2134,69666],"unwrapping":[68694],"profiled":[6111,36085,36449,36485],"“random":[8427,30296,45509],"appromixation":[42814],"obscured":[8120,11890,22224,22848,25887,65999],"monetization":[17370,22375,30414,66802],"weapon":[5965,8078,9826,56129],"completeassets":[25937],"10+opengl":[45480],"numberofassettype2":[40972],"texturebundle":[2815],"asyncuploadtimeslice":[27743],"saw":[9752],"rendertarget":[21722,38370],"hmd":[32284,72956,75027,75092,75210,75439,76302],"getinstance":[66847],"myloadedassetbundle":[3371,3545],"downside":[3248,10585,29331,30048,35944,36690,38347],"maximumdeltatime":[51958,73702],"performbuild":[21120],"ottawacontent":[57155],"unityxrpreinitprovider":[75874],"unitydata":[72867],"shooter":[6838,8065,13182,18165,22662,66442],"plural":[9769],"blanchedalmond":[63516],"biglittle":[9466,12885],"likelihood":[23445,28475,29906,32322,36690,42059],"_index":[26073],"pointertype":[60792],"texture":[7,290,553,1555,1672,2348,3308,3502,3569,3580,3729,3807,3855,4273,4520,4704,5350,5920,6378,6439,6514,7979,8058,8412,8615,8647,8786,9111,9207,9252,9460,9889,9963,10010,10136,10215,10460,10520,10732,11309,11497,11676,11789,12044,12285,12350,12830,12895,13134,13192,13431,13534,13706,13747,13826,13901,13966,14001,14008,14073,14217,14303,14577,14831,15062,16470,16791,17000,17591,18240,18343,18773,18977,19150,19454,19936,20265,20393,20452,21042,21239,21410,21557,21711,22165,22296,23415,24652,25171,25236,25842,26874,27080,27114,27131,27214,27523,27554,27583,27688,27693,28176,28836,28872,28894,29418,29488,29809,29995,30944,31629,31907,32307,32360,32391,32664,32731,32776,32920,34280,34362,34496,34682,35039,35262,35372,35926,36204,36454,37369,37499,37558,37670,37703,37959,38369,38425,39050,39591,39714,39927,40711,40897,41170,41467,41765,41876,42243,42255,42264,42369,42395,42467,42548,42684,42691,42724,42731,42793,42809,42878,42896,43145,43149,43175,43359,43459,43521,43553,43594,43690,43897,43928,43969,44051,44234,44371,44376,44500,44831,45078,45126,45192,45206,45260,45477,45565,45613,45642,45668,46040,46157,46535,46760,46835,47088,47185,47909,48162,48353,48364,48397,48501,48528,48542,48556,48588,48619,48636,48641,48676,48856,48868,48901,49447,49468,49474,49495,49510,49515,49563,49569,49607,49629,49852,50001,50019,50054,50064,50093,50140,50145,50369,50409,50483,50512,50518,50558,50571,50629,50648,50658,50683,50703,50712,50743,50756,50770,50783,50796,50809,50822,50835,50860,50929,50959,50998,51088,51131,51231,51722,52184,52419,54163,54468,54773,54929,55152,56736,58300,58370,58435,58681,59502,59592,60638,61524,61575,61905,61928,63764,64180,64998,65992,68129,68343,68939,69183,69678,71835,71928,71959,72278,72494,72609,72755,72995,73122,73163,73371,73384,73443,73523,74041,74257,74639,75407],"inefficiency":[23420],"unsafe":[2900,5359,5503,5720,5741,5779,7365,18540,26127,26133,26460,70761,71078,71737],"gentle":[49555],"submitcurrentframe":[75431],"bicycle":[9018],"dangling":[7167],"clusters":[9999,22144,22808,48287],"building":[32,46,434,568,580,631,661,966,1670,1745,1810,1931,2243,2998,3240,3293,3466,3494,3539,4033,4539,4959,5978,6051,6325,6386,6451,6833,6999,9136,9329,10651,11075,12007,12154,12320,12584,13805,13961,14277,16106,16933,18403,18564,19085,19120,19129,21056,21629,22526,24949,25258,25524,25687,26071,26106,27331,27536,28082,28162,28262,29816,30180,31621,33533,33584,33825,34654,34683,36351,36562,37274,37334,37562,37670,37756,40191,41874,48570,49425,49725,49784,52171,52251,52630,52681,52713,53868,53997,54543,64376,65733,65973,66185,66336,66403,66878,67052,67525,68720,70362,71176,71774,71850,72073,73147,73310,73426,73499,73654,74014,74127,74136,74587,74647,74777,74906,75025,75154,75202,75280,75917],"#x2d":[66781],"regulates":[5179,22594],"red":[1886,2206,2284,2710,4334,4996,6267,6294,6542,7327,7860,7989,8412,11921,12185,12372,12560,12747,14103,14321,14672,18098,18236,18436,19225,22157,22216,24251,24489,27210,27331,27475,27819,28424,28890,30627,31745,32781,34311,34397,34516,34781,35218,36070,36501,36679,40473,42963,43416,44110,44459,44521,45077,47364,49299,49511,49531,49630,49850,50062,50854,51057,51150,53452,54860,54873,56176,56212,56786,57050,58522,58704,60341,60837,60919,61454,61967,62014,62592,63627,63662,63748,64191,64570,64681,64831,65304,66016,70240,71811,72752,75017],"#464646":[63299],"ldrgraphicsformat":[19932],"quarterly":[4230],"bearer":[70015],"closure":[21373,33266],"interactable":[3004,8132,17835,23216,37547,39388,39475,39606,39743,39806,39980,40072,72963,74403],"enumeratefiles":[19496],"linker’s":[28493,74592],"#b7b7b7":[63315],"quads":[9258,14006,21203,21524,25206,27719,35258,38375,46828,50361],"8uihjkyiqqb1e12dn":[69913],"scriptmapper":[15102],"darkred":[63540,63949],"renderscale":[68804,75418],"fonts":[5838,9247,14003,52512,58111,58319,58369,58441,58663,62071,63068,63250,63764,63985,65758,73452],"prices":[26695,52985,53330],"sensitivity":[9786,39775,41463],"q":[2755,4964,7601,7641,9773,12028,18903,22284,23774,24594,26073,26781,32326,32889,33569,39269,41481,43224,52451,55013,55103,55207,56379,56555,56623,56684,56938,57020,57268,57438,57653,58185,58635,58927,59407,59795,60014,60869,61740,61787,62385,62530,63135],"entire":[511,1966,3247,3292,3468,3569,3718,3879,4025,5023,5119,6797,7003,7186,7390,7937,7991,9553,10268,10375,12279,12428,12643,12942,13456,13752,13933,14605,15032,17926,18104,18119,19057,19626,19692,20056,20948,21832,22043,22281,23067,23443,23797,24195,24782,25597,26108,26245,26991,28537,30047,30443,30857,32166,32390,32731,33401,33498,34040,34609,34891,36034,36493,36690,36703,38915,39378,39545,39887,40515,42255,42715,42751,43113,49678,50630,51137,51238,52250,53977,54304,54553,54690,55578,58411,58799,59176,59837,61471,62827,64333,65941,65987,66524,68563,69732,70191,70389,71424,73274,74548],"isdeprecated":[74307],"toggle's":[55792,56057,65368],"bundleobject":[3395],"inefficiently":[26479],"getalltabs":[57229],"send":[1378,1500,3558,4792,4825,5032,5122,6944,7973,8177,8274,8392,8777,9042,9399,10844,10984,11001,11154,11244,11274,12202,12736,14512,15864,16345,17342,21009,21054,21180,23169,25147,25348,25676,25896,27786,27938,29435,30358,31689,31996,32923,33883,34713,35088,35424,35842,36542,39517,39634,39754,39785,39992,40018,40081,40112,42364,53101,53392,54033,56065,57889,57993,58024,58173,61484,66035,66110,66379,66409,66750,67434,67896,68487,73569,73670,74333,74537,75097,75601,76319],"pushoff":[10013],"smoothnesstexture_albedo_channel_a":[28932],"mono_jit_runtime_invoke":[52563,74557],"spritepackingtag":[48781],"masterwithltcg":[72877,74847],"snap":[7243,8547,9787,11253,18976,19449,20548,20605,23669,34808,39253,48648,54727],"toggle_on":[63487],"libiphone":[49774],"articulations":[3011,7215,26567,33571,33757],"curvefieldsnippet":[64504],"pre":[1900,1936,2065,2939,2997,3587,3770,3828,5763,6083,6834,7128,7495,7873,8323,9179,9260,9309,9589,11358,12630,12866,13475,14257,14445,14915,15910,16051,16159,16191,16264,16283,16353,16414,16461,16478,16495,16853,16891,16941,17133,17160,17177,17194,17362,17418,17430,17440,17455,17516,17614,17650,17733,17826,19241,20587,22018,22502,23555,24276,24660,24969,25446,27080,27314,30354,31008,31363,31379,31613,32847,33378,33616,34427,34525,35090,35753,35908,37321,37851,38247,39096,39917,49332,50909,51080,51962,54894,57628,58375,58791,66390,66478,66974,68209,68651,70756,70912,71017,71164,71226,71293,71320,71366,71540,71634,71662,72477,72488,72830,72901,72974,72986,73716,73924,74372,74776,75215],"bloom":[22739,24496,34863,37954,38244,74277,75164],"prominent":[36549],"networkservers":[11001,66036],"plug":[262,377,493,785,875,970,1044,1226,1247,1269,1283,1290,1298,1312,1376,1392,1401,1729,1811,1819,1830,1845,1855,2571,2977,4510,4738,4868,17865,17912,18038,18915,20223,22594,23483,24605,24623,24707,25194,25726,27671,27912,27936,28050,28061,28110,28259,28261,28374,28510,29923,29999,33467,33515,33828,34379,34535,34636,34644,34654,34683,35838,35959,36234,40218,40509,43462,49394,49479,49762,52735,66106,66812,66840,66883,66913,66985,68750,68895,69133,71660,72083,72109,72122,72131,72135,72147,72880,72943,73366,73638,73687,74355,74603,74977,74979,75037,75077,75114,75125,75204,75265,75280,75290,75388,75409,75909,75970,76086],"impersonating":[66436],"aid":[10424,11166,25066,39547,43922,66343,66368,66396],"imageconversion":[16649,30926],"cancellation":[60515],"kunityxrinputfeaturetypebinary":[75491],"someveryrarecondition":[6131],"iterating":[2668,6116,6432,13075,19197,31642,33498,34609],"kunityxrinputfeatureusageprimary2daxistouch":[75661],"execute":[1795,2490,6129,10711,10875,11548,18257,20777,21031,21345,23625,23892,25452,26049,26271,26292,26402,26446,26472,26496,29420,30312,30913,31652,33494,33796,35135,38696,39059,40160,40766,41450,41796,42107,42156,43239,44808,49219,49281,49650,51962,55913,57854,59736,60212,61496,62534,63220,66584,73561,74219,74739],"texcoord1":[316,6554,14179,27039,31953,32931,43699,45727,47433,47940],"precomputations":[22124,49712],"bullets":[32712,70821],"shouldsimulateasktobuy":[67394],"wake":[15861,38474,75440],"breakage":[35744],"icons":[994,1195,2470,2533,4286,5138,7498,11681,11704,12043,12319,22192,22224,23221,25415,30583,34892,35171,36696,38896,39591,39714,49760,50628,52226,52415,52718,63438,64230,66817,71304,72404,72783,74246,75150],"tonemaplight":[46683],"androidassetpackinfo":[521],"#b8860b":[63531],"__name__":[39618],"comment":[21940,41995,43386,45073,55927,62149,67901,68897,69135,72037],"recordobject":[20857],"idispatch":[72197],"productname":[12154,27800,72227,74031,74115],"rigidbodies":[2174,8203,8550,9154,9682,13648,15852,25526,26557,33692,36321,37532,38643,74893],"usage":[234,1556,3304,3338,4537,4776,4811,5153,6080,6798,7484,7568,7575,9466,9883,9964,9998,11808,12419,12885,13021,13156,13306,13417,14320,16060,16527,18318,19130,19151,20322,20391,20415,21154,21514,21877,22145,22413,23583,23891,24499,25096,25675,25926,26244,27058,27299,27923,27955,28457,29162,29332,30175,30354,30431,30887,33074,33391,33506,34221,34403,34486,35139,35285,35397,35679,35694,35876,35901,35974,36019,36154,36197,36335,36454,36464,36615,37662,37728,38621,40879,41274,41588,41795,41911,41944,42148,42219,42351,42946,43013,43023,43457,43659,43733,43805,44101,44138,44170,44231,44377,44631,45856,47161,47956,47989,48027,48068,48163,48539,48579,49679,50007,50064,50140,50397,50659,52584,53309,53761,55749,56727,58113,60619,61501,61982,62865,63702,64319,64755,66606,67036,67659,68110,68891,69128,70230,70307,70698,70759,73203,73450,73609,73704,74346,75500,75998,76294],"fulfil":[897,938,8242,9152,9709,13663,67587],"mycompany":[18636,18858,23502,69011,69263,70036,70478,70601,70945],"sometext":[68978,69225],"transcutspecular":[42852],"zipped":[26094],"“error”":[11177],"getlatesttimings":[20523],"clang":[52672],"tris":[21222,25987,38333],"invocation":[5016,18312,45194,52672,66941,67339,74216],"minmaxgradient":[31764],"acceptsattributebag":[57318],"signing":[612,1656,11970,12157,23481,25309,28075,28109,28124,28136,28185,52829,52887,53128,53369,54056,66770,67061,67148,75034],"surfaceoutput":[46152,46514,46546,46721,46863],"xrsdk":[75677],"punchouts":[19667],"overheads":[7870,21896,30327,68498],"asteroids":[41472],"uimode":[825],"cryptography":[52614],"ecpm":[22370],"vpandrtarrayindexfromanyshaderfeedingrasterizer":[43476],"cookie’s":[9898],"k_negativewarningtext":[56158],"override":[573,737,786,1003,1079,1202,1252,1954,2237,2617,3073,4228,4814,5211,6378,6439,6499,7368,7492,7910,7969,8069,8134,8173,8270,8388,8773,9038,9225,9648,9675,10118,10835,11018,11609,11676,11841,12105,12732,12768,12896,13155,13264,13400,13713,13989,14279,14508,14857,16020,19569,20007,20452,20608,20632,20803,20946,21164,21988,22481,23279,23482,23555,23617,24060,24436,24592,24763,25173,25841,26260,26722,27323,28176,28407,28897,28955,28987,29037,29101,29858,30042,30534,30838,30901,31175,32051,32308,32400,34100,34178,34218,34245,34328,34452,34651,34860,34883,34908,34927,34941,35042,35507,36845,36998,37244,38076,38288,38570,38600,38634,38772,39643,40212,40463,41226,42140,42224,43489,43557,44214,45720,46024,48260,48326,48693,48926,49054,49182,49296,49938,50503,50950,51022,51224,51438,51529,51554,51579,51601,51632,51763,51787,51812,52250,52766,54242,54513,54635,54684,54705,54789,54944,55000,55101,55205,55296,55359,55579,56018,56049,56165,56438,56577,56610,56692,56895,57300,57303,57440,57834,57933,58060,58777,60230,60907,61007,61353,61826,62026,62111,63039,63832,64547,64896,65187,65335,65692,66239,66394,66614,66825,66859,67086,67196,67573,68197,68533,68541,68906,69146,69703,69756,69792,70185,71079,71283,71934,73210,73250,74172,74298,74639,75698],"15px":[59312,63237],"originalvalue":[7030],"treetransparentcutout":[45638],"programatically":[52094],"cast":[67,6837,7841,7895,9882,9957,9999,10090,12933,18334,22758,26647,27187,27266,27306,27330,32114,32293,33744,34161,35311,36397,37653,38337,41342,43127,43172,43205,47750,48231,48295,50437,52485,67558,67568,71564,72054],"captureallkeyboardinput":[73485],"shoot":[2067,6784],"passes":[2327,2720,3242,4749,5123,5352,7025,7365,7588,7597,7606,7628,7637,7648,8843,10385,13154,13939,18525,19382,20237,21154,21349,21938,22586,23288,25346,26027,26508,27048,27337,29551,30555,31365,31650,32760,35087,36360,37684,37792,38309,38336,38382,38478,40151,42142,42183,42325,42364,42669,43038,43456,43651,43660,43734,43806,43955,44066,44102,44139,44171,44376,44590,44632,44671,44755,44785,45181,45184,45387,45629,45851,45930,45960,46722,47249,47957,47984,48028,51956,52233,54054,61070,66110,66467,67871,68285,69961,70756,71809,71879,74734,75451,75829],"m_lasttouchevent":[20015],"numjobs":[26383],"pops":[27998],"ambient":[29,257,4801,5350,6834,7752,9515,9939,10013,10108,13920,22121,22723,23447,26782,26861,26929,26933,34860,36597,37664,37892,38396,42364,42392,42699,42742,43484,43528,43556,43615,43905,44073,44445,45194,45300,45589,46786,47121,47666,49428,49562,50602,68825,68851,69058,71591,71827,71855,74275,74977],"#d32222":[63294],"kformatr16_sfloat":[50114],"much":[328,2164,2183,2334,2726,3248,3669,4852,4876,5910,6028,6068,7053,7444,7461,7487,7594,7603,7611,7634,7643,7653,7788,8086,8291,9288,9311,9354,9704,9793,9905,9970,10080,10496,10614,11546,11607,12888,13242,13454,13985,14351,14967,15839,18118,18235,18379,18504,18675,20239,20419,21007,21181,21219,21997,22012,22165,22598,23441,23672,24002,24121,24490,24519,25597,26004,26058,26935,27114,27575,27853,28477,28975,29269,29365,29662,29973,30858,31619,32226,33081,33166,33394,33424,33547,33672,35276,35692,35926,36026,36118,36211,36432,36513,36569,37622,37728,38355,38384,41375,41813,41915,41948,42182,43115,43173,43484,43603,44377,44874,45564,46248,46718,46979,47246,49407,49473,49519,49562,49607,50006,50376,50692,50905,50941,51976,52220,52558,52739,52854,60881,60982,61470,65230,65254,66570,67143,67735,67764,71775,71808,72322,72393,72877,72941,73385,73487,73606,74216,74261,74421,74847,74903,75446,75793],"appx":[72188],"west":[52647],"accelerate":[5820,6792,8402,8598,9699,13808,23093,31838,33762,38494],"collapsing":[30052],"endcamerarendering":[38199,68594],"brotli":[12398,73025,73144,73190,73319,73714,73937],"watson":[74537],"lmci3zt1":[69934],"newstaticsafetyid":[26151,26259],"builtgame":[6336],"pic":[6713],"screensize":[825],"navmeshsettings":[15169,76397],"onintegerfieldchange":[57909],"scrollersnippet":[65157],"vietnamese":[53654],"analyse":[25044,43094,49541],"bundle’s":[2776],"mali":[14345,17027,25273,31042,31461,33519,74160],"slows":[9294,11493,13239,26588,29766,31852,32136,35878,51975],"referenceresolution":[39438],"exampletagkey":[44780],"settexturescale":[10269,14606],"syntaxes":[45613],"excluding":[9343,12808,19151,25881,27624,30305,36091,43192,45418,46090,53839,65874,71581,74257],"hasvertexattribute":[292],"iunityshadercompileraccess":[28063],"mypackage":[18765,18858,18950,70478,70621,70755],"flexiblespace":[49982,59646],"cocoa":[52641],"toolbarsearchfield":[65389,65458,65475],"serviced":[76037],"relied":[68915,69156],"interchangeable":[27678,71018],"isexpired":[67731],"unfiltered":[7548,7560],"circles":[6294,7833,7981,9231,13023,34781,43190],"saving":[219,5891,5951,6129,7835,10489,13314,18449,18456,18901,20612,21439,22464,24213,24711,26049,35040,35190,38908,39171,39397,39904,41400,41624,41708,46484,48512,52057,67153,67247,67599,68081,70098,71284,74141],"++clipindex":[34114],"visualeffectgraph":[17750,30996,31338,49155],"fmt":[48725],"launchcontrol":[66692],"subshadertags":[42712,42728,42753],"inverts":[7991,71578],"factories":[67581],"rt1":[38360],"rhalf":[8453],"disablepaneldeleyed":[24865],"psi":[58912],"sideways":[6310,8579,9713,13580,14957,20072,39266,72337],"domemoryoperations":[27905],"bounciness":[8251,8513,9704,11510,11648,15844,33681,40744],"reuse":[167,812,1812,1822,1832,3466,6211,7836,9138,11554,13897,20746,24520,26259,28321,33098,34924,35196,37376,38451,40180,41624,45220,48903,54124,54581,54672,57802,61192,61327,61330,61955,61965,64310,65292,65692,67237,74034,74171,75395],"standardassets":[12849,25481],"suspect":[71412,73404],"kunityxrinputfeatureusageprimary2daxis":[75646],"compose":[12475,14502,31078],"associates":[38980],"reassign":[43293],"observed":[38767],"heaviest":[6034],"returnobjecttopool":[33128],"car_inspector_uxml":[58808],"macs":[52675,72697],"fully":[680,2047,3365,4327,4435,4545,4813,5210,6111,6318,6833,6944,8131,9281,9517,9965,10097,10633,11040,11370,12105,13448,13499,14135,14395,14711,14956,15825,15859,17045,17326,18611,20222,20426,20725,21434,22136,22375,23420,25035,25904,27172,27263,27299,28262,28875,29182,29699,31008,31366,31380,33078,35876,36048,38354,38384,38841,39159,39508,39663,40442,40589,41289,42150,42876,42896,43414,45588,47850,49471,50058,50956,53414,54208,54898,59628,62882,65871,66184,68073,68157,69012,69264,69337,69443,70111,70143,70755,71162,72723,72796,72926,74214,74741,74786,75579],"‘playableoutput’":[34162],"resolveallstreamhandles":[68588],"d_in_foldout":[63451],"pushes":[8551,10013,11508,27997,33408,72331],"singularities":[36593],"r16g16_unorm":[8457],"examplelightmode":[44824],"vcxproj":[12630],"splitview":[59068],"too":[222,501,919,1007,3489,3696,5810,6837,7508,7767,8209,8286,8387,10012,10100,11546,11605,11791,13112,13412,13667,14006,14976,18235,18675,19559,20260,21509,22183,23747,24750,26015,26044,27003,27322,27575,28890,29167,30367,31011,31646,31985,33081,33166,33415,33457,34917,35037,35320,35711,35944,36224,36512,36678,37740,38411,39494,39740,40055,41915,42528,43175,44068,44857,45705,46979,47352,48162,49387,49470,49540,49626,49849,49912,50007,51025,52042,52190,52216,52601,55554,57750,59176,60635,62412,66006,66255,68215,70404,71442,72931,73208,73450,73622,74184,74421,75446],"librarymanager":[73502],"“0":[67739],"xinreality":[72930],"withinterface":[75720],"abandoning":[4567],"royalblue":[63629],"egp":[53673],"range":[51,1556,1785,2047,2192,2357,2439,3109,4511,5152,5645,5726,6268,6542,6723,6760,7412,7504,7514,7591,7600,7609,7631,7640,7651,7688,7696,7706,7789,7981,8060,8563,8690,9171,9458,9769,9870,10093,10398,10477,10548,10923,11187,11482,11537,11796,12135,12340,12527,12810,13021,13133,13341,13657,13679,13725,13864,14041,14319,14988,16933,17126,17912,18486,18596,19047,19182,20457,20967,21391,21497,22174,22235,22746,23296,23531,23590,24486,24519,24943,26057,26789,26798,26919,27077,27129,27215,27509,27567,28836,28893,29364,29493,29890,30164,30439,30853,31592,31654,31742,31880,32090,32108,32193,32224,32341,32367,32606,32681,32866,32916,33776,34267,34446,34475,34878,35882,36231,36596,36632,38249,38265,38369,38674,39721,39749,39977,40298,42699,42742,42793,42809,43188,43576,43762,43884,43979,44053,44237,44487,44637,44692,44930,45076,45138,45294,45728,45866,45932,46202,46728,46837,47132,47363,48333,48341,49457,49609,49850,50541,50592,50945,51014,52151,52212,52645,53528,55854,58081,58454,59596,64468,64955,65220,65244,65537,65552,68072,68527,69011,69263,70211,70831,70909,71350,71806,72063,72286,72321,72901,72942,74388,75579,76217],"lightingstandard":[46654],"emissive":[6798,10002,21429,22162,23638,26738,26786,36592,38001,38396,46196,49440,49484,71838,72760],"extrude":[14502,22771,50904],"scenename":[19410,38996],"pressed'":[75649],"touchscreens":[717],"tame":[66678],"totalitems":[26368],"d_in_foldout_focus":[63455],"suspense":[4865],"drop":[177,643,851,1139,2227,2240,2612,2775,3517,3926,3950,4054,4196,4306,4408,4416,4423,4455,4510,4834,4876,6263,6283,6315,6405,6468,6981,7837,8029,8843,9098,9203,9260,9537,9851,9892,10035,10362,10406,10527,11177,11312,11403,11454,12477,12783,13284,13387,13596,13751,13793,13901,13945,14544,14851,18094,18131,18902,18971,20061,20627,20663,21388,21998,22128,22275,23473,23617,23692,24538,24774,24895,25221,25326,25410,26804,27020,27205,27253,27286,27752,28852,28878,30043,30190,30251,30411,30755,31668,32362,32414,32760,33544,34911,34956,35032,35202,35266,35369,35625,35772,35903,35969,36023,36120,36174,36435,36470,36638,37667,37704,38453,39366,40034,40124,40279,40501,40625,40764,41321,41579,41627,41678,41758,43128,43215,43519,48526,48583,48608,48618,48643,49461,49712,50289,50349,50510,50527,50536,50557,51055,51142,51180,51345,51886,52086,52106,52184,52978,53399,53865,56795,57333,57554,57919,57979,58392,60348,61985,64982,65370,65906,65996,66137,67097,67920,68551,68713,70306,71178,71186,71289,71427,71628,71956,72247,72468,72516,72871,74057],"executes":[1791,2549,3537,3696,6179,6372,6429,10699,10724,10890,11547,18267,20808,21124,21294,21296,21904,23626,26460,26477,28417,31652,33264,33477,34201,34632,40768,41349,41409,41487,41822,41877,42044,42162,42948,43222,44248,44808,45179,54272,55610,55910,55990,57808,57868,61496,62616,69632,72877,72917,74602,74633,74799,74847],"constantcolor":[45271],"findcontent":[57254],"igps6ed1snurmbhnzyw":[69934],"relocates":[26119],"delegates":[6134,21423,34710,39513,52651,66929],"things":[2064,2345,3432,3573,3824,6486,8436,10410,10911,11221,18376,18616,18822,20540,22538,23377,24737,24794,24973,27176,29434,29663,30048,31619,33006,35894,35958,36182,36687,37599,37668,38541,39906,40524,41876,42009,42122,42358,42876,43002,43957,44165,45176,45735,45858,46346,47067,47191,49038,49454,49642,50150,50651,50695,50932,52673,61490,61958,62020,65925,66038,66178,66223,66755,66923,67675,72926,72941,74583,76016],"appropriately":[6798,67054,68382],"'like":[4810],"'uv'":[46370],"moved":[3644,3676,3859,6194,8221,9793,13552,14596,15861,19554,20571,21164,21325,23775,23883,29595,31789,32849,36696,37600,37744,38604,38616,38640,39395,39673,40001,49781,54720,59076,60402,65999,68546,68630,68827,68875,69072,70380,74182,74304,75603],"represent":[258,1244,1416,2001,2211,2356,2996,3457,3981,4511,4519,5350,5968,6285,6999,7163,7326,8306,8607,8648,8765,9136,9196,9773,10122,10725,11704,12993,13100,14086,14248,15042,15836,18091,18501,20237,20717,21202,21673,22012,22673,23932,25163,25205,26110,26926,29466,30262,31720,32311,32343,32360,32631,33433,33709,33776,34192,34953,36201,37280,37344,37525,37689,38485,38896,39167,39757,39883,41681,42727,42749,43102,43190,43494,44210,44234,48615,49449,49468,49518,49643,50401,50937,52233,54558,54635,55509,56042,61790,62201,64468,65288,66183,67019,67230,67549,67841,69333,69439,70238,71194,71782,71809,71959,72063,72299,75485,76173],"cursorlockmode":[73267],"beforeassemblyreload":[18002],"comments":[5901,8420,42379,47265,54644,68510,72036],"flushonendofframe":[35423],"such":[11,65,78,144,167,219,258,317,478,629,652,661,680,725,845,867,962,1027,1039,1091,1218,1243,1386,1406,1487,1668,1809,1812,1840,1866,1901,1920,1924,1966,1982,2117,2188,2292,2356,2415,2665,2769,2958,3247,3311,3431,3451,3457,3491,3569,3580,3718,3729,3779,3839,3870,3954,3981,4034,4071,4217,4254,4435,4506,4519,4663,4737,4776,4865,4908,5037,5158,5350,5608,5725,5866,5921,6037,6125,6216,6285,6318,6378,6397,6495,6691,6807,6880,6999,7155,7215,7487,7663,7763,7879,7955,7961,7979,7998,8117,8165,8222,8260,8265,8375,8436,8573,8767,9018,9028,9137,9184,9337,9440,9532,9767,9875,10071,10214,10460,10491,10579,10614,10687,10692,10780,10795,10803,11069,11176,11221,11292,11309,11333,11403,11459,11520,11551,11606,11653,11681,11807,12367,12555,12724,12769,12826,13166,13202,13264,13454,13709,13823,13854,13881,13899,14073,14261,14319,14469,14501,14576,14711,14778,14821,14928,15012,15825,16470,17312,17370,17488,17968,17970,17972,18039,18083,18112,18234,18258,18354,18404,18448,18671,18760,18918,18981,19129,19150,19197,19316,19336,19351,19376,19637,19651,19935,19992,20177,20237,20391,20402,20811,21031,21150,21302,21391,21447,21694,21846,21936,21964,22057,22203,22224,22290,23284,23378,23462,23485,23559,23625,24492,24523,24634,24670,24749,24774,24901,24930,25031,25106,25177,25187,25236,25309,25333,25347,25416,25587,25672,25717,25751,25816,25841,26049,26105,26115,26244,26276,26359,26374,26479,26510,26569,26689,26787,26856,26923,27083,27125,27176,27215,27268,27303,27549,27613,27938,28176,28189,28358,28378,28475,28606,28686,28724,28846,28875,29269,29398,29434,29439,29561,29695,29774,29827,29995,30000,30042,30056,30174,30180,30291,30320,30363,30443,30886,31587,31621,31646,31662,31745,31823,31856,31996,32182,32311,32343,32360,32372,32631,32703,32712,32767,32873,32917,33098,33404,33454,33475,33583,33866,33883,34222,34274,34392,34484,34594,34785,34955,35011,35261,35270,35622,35744,35795,35901,35926,35958,35968,36020,36182,36288,36309,36454,36465,36593,36678,36736,37098,37270,37390,37541,37609,37619,37639,37838,38405,38444,38459,38487,38519,38541,38606,38622,38643,38735,38840,39138,39160,39381,39430,39466,39494,39551,39591,39681,39714,39796,39885,39969,40063,40208,40569,40681,40775,41174,41459,41528,41678,41838,41876,42328,42785,42809,43019,43133,43200,43234,43484,43654,43998,44133,44178,44231,44602,44625,44893,45016,45048,45194,45582,45618,45727,45852,46505,47985,48067,48227,48333,48364,48501,48557,48617,48653,48874,49288,49423,49476,49484,49515,49569,49630,49720,49760,49908,50005,50011,50144,50197,50321,50344,50361,50409,50435,50509,50519,50537,50558,50599,50626,50647,50653,50659,50687,50941,51075,51124,51211,51245,51306,51384,51621,51846,51849,51988,52247,52478,52549,52691,52749,53041,53295,53706,53713,53777,53989,54031,54224,54569,54626,54738,54757,54814,54878,55060,55509,55557,55740,55973,56592,56713,57625,57630,57845,57864,58001,58115,58173,58191,58369,58456,58463,58727,59047,59719,59743,59833,60157,60212,60495,60635,60761,61184,61361,61490,61557,61920,62020,62112,62194,62771,62838,63139,63690,63764,64228,64333,64444,64731,64745,64955,64998,65025,65031,65220,65244,65368,65687,65700,65736,65755,65903,65922,65966,65996,66034,66075,66194,66256,66330,66383,66437,66450,66470,66572,66811,66836,66868,66887,66901,67041,67147,67195,67295,67378,67541,67553,67605,67652,67708,67756,68317,68410,68458,68602,68916,69157,69294,69508,69785,69845,69962,70135,70224,70241,70424,70734,70746,70801,70945,71021,71215,71256,71293,71359,71374,71422,71551,71653,71661,71764,71864,72246,72289,72428,72464,72510,72663,72713,72724,72800,72867,72879,72996,73205,73260,73292,73397,73478,73681,73908,74126,74169,74513,74581,74628,74838,74883,74991,75034,75087,75109,75226,75311,75454,75485,75793,75909,75980,76068,76096],"legs":[7,5266,21572,71783],"leans":[2131],"formed":[35340,71772],"caustics":[8786,18239,38010,42981],"registerlifecyclehandler":[76086],"percentageoferror":[7030],"simplespaceship":[10855],"×":[1566,25272,72671],"hasuserauthorizedpermission":[1504],"duplicated":[3310,3439,3486,6208,9129,13307,39493,39879,41872],"convincing":[7549,7561,13267,15864,26920,29891,31716,37685,49497,50941],"unityevent":[39393,39487,39634,39754,39785,39992,40081,65926,66928,76218],"alloc_temp_tls":[29250],"removesprite":[48455],"mime":[12621,67920,73347,73730],"playing":[266,1563,1908,1995,2068,2257,4773,4814,7483,7657,7776,8565,9588,10080,10739,11075,11149,11296,14731,14850,20116,22058,22323,29128,29732,31791,32889,33908,34169,34192,34984,35907,35972,38339,40085,51953,53285,64444,66335,66374,72539,72724,73052,73263],"aab'":[53112],"shaderdata":[44602],"m_lightprobeanchor":[76519],"frees":[33381,34278,73555,73630],"countused":[36391],"d_winbtn_win_restore":[63501],"jobhandle":[2922,5484,5629,5736,5795,26293,26376,26537,35736,36106,36497],"r32_uint":[8482],"mycustomtool":[48402],"unallocated":[12428],"futher":[4527],"mintcream":[63604],"typewithnullchecksdisabled":[24999],"transient":[3440,6024],"buildosxuniversalplayer":[21059],"alljoyn":[12654],"runtimeinitializeonloadmethod":[10726,20140,28601,66487],"hasroadtile":[51636],"differs":[841,3666,19281,22985,25215,26479,27214,27299,27571,33473,36069,37227,38533,43585,44873,45890,59729,60417,62822,67196,73117,73413],"twig":[52224],"studio's":[44318],"mouseupevent":[57940,60364,65368],"0x18b63bc":[52563],"organizer":[26073,27799,52600],"shrinks":[12012,17956,39800],"firstpersoncamera":[29866],"refence":[9676],"others":[2133,2983,3814,7951,8153,8438,9229,9462,9604,9772,10088,10576,11589,13036,13641,13890,16212,19133,22882,24763,26482,26509,26572,27506,28084,29759,29794,30328,31591,33152,33580,34927,35216,35691,35887,36034,37227,38404,40091,41892,42811,42896,44097,44298,45858,45932,48874,49481,49837,53292,55886,62009,64182,65081,65934,66197,69333,69439,69759,69795,70606,71611,72954,73354,73486,74171,75264,75305],"shaderutil":[4597,68575],"readability":[3287,37318,61555,73985],"stylepropertyname":[62972],"nullreferenceexceptions":[52566],"tset":[37141],"distinction":[25177,31008,31368,37056,40555,68110],"assemblydefinitionimporter":[6694,7425,15349],"vector’s":[8535],"gl3":[25269],"inputsystem":[16414,31339,31428,72795,73470,75718],"scalablebuffermanager":[20456],"toolbar3":[23948],"lateupdate":[2173,6125,14498,18320,21164,21325,26346,26387,33485,33866,35707],"'distance":[18568],"unregistereventcallback":[28020],"clutter":[3963,30446,51342],"original":[199,715,1842,1895,1962,2055,2179,2243,2278,2412,2745,3419,3580,3729,3870,3895,4217,4448,4853,6317,7015,7437,7454,7493,7545,7558,7582,7804,8518,9129,10230,12401,13089,13758,14669,14802,15839,18436,18987,19043,20129,20450,20636,21405,21453,21615,21743,22482,23713,24527,24776,24920,25162,25526,25662,25847,26110,26295,26617,26622,26971,27060,27468,29247,29364,33496,34949,35178,36069,37286,38452,38483,38661,39069,39120,39192,39343,39599,39917,41083,41675,41753,41918,42793,43191,46122,48201,48262,48370,48556,48599,48659,48706,48856,49395,49520,49737,50673,50684,51138,51189,51239,52095,52542,54450,54588,54680,55653,56934,57861,58284,58369,59177,59896,61935,62015,62903,64104,65211,65989,66774,67236,68601,68697,68825,69058,69771,69812,70332,70414,71037,72296],"colored":[2325,5123,7352,8081,9231,10336,12290,22186,22226,25434,27022,33907,34781,35266,35369,35625,35903,35969,36023,36120,36174,36207,36298,36435,36549,37838,48322,51150,55824,59347,59852,62025],"flipbooks":[32920],"unregistercallbacksontarget":[56881],"asking":[4239,4434,12400,21134,36224,41554,52584],"ingredientunit":[20927],"builder":[2192,36859,53968,54121,54290,54396,54495,54508,54545,54589,54604,54609,54631,54671,54688,54737,54778,54840,54848,55312,55595,56595,56667,56739,56802,57131,57295,57414,57651,58032,58413,58588,58652,58732,59269,59501,59552,59841,59991,60621,60884,60985,61480,61563,61594,61752,62206,62637,62641,62785,62851,63077,63112,63805,64174,64385,64400,64415,64446,64470,64491,64514,64530,64566,64613,64676,64720,64761,64811,64825,64844,64862,64881,64917,64938,64957,65000,65033,65063,65083,65104,65119,65148,65166,65222,65246,65270,65315,65372,65395,65415,65434,65446,65460,65478,65492,65503,65514,65540,65555,65570,65590,65610,65630,65651,65670,65704,65762,65784,65876,65917,67004,67202,67303,67344,67747,67826,69330,69436,74245],"backends":[1304,6810,9975,23179,24946,28379,29814,30854,33382,36573,40512,66456,68671,72857,75252],"s_staticsafetyid":[26151],"titlecontent":[52344,55389,55684,55764,55837,56007,56238,56296,56364,56460,56823,57539,58243,59037,60448,60584,60736,60863,61216,61699,62144,62375,62521,62699],"multiartifacttestimporter":[15339],"panelraycaster":[58144],"registry":[11361,14470,18812,21996,22981,29925,30917,31010,31601,35092,39881,50917,52528,57929,68795,69514,69693,69728,69766,69792,69884,69986,70184,70217,70236,70288,70332,70370,70746,70810,70868,70936,70940,71127,71190,71215,71287,71302,71332,71363,71395,71422,71446,71462,71469,71480,71540,74179,74307,74538],"pouch":[56841],"uncheck":[1898,3890,4343,4590,6977,11447,11462,12759,13280,13297,18201,23617,27596,30424,31707,37618,37643,40251,50534,50592,66577],"human":[933,1706,1936,1975,3287,3731,5184,5920,6758,7835,8208,9758,12653,18054,21052,22066,22501,24490,27506,27576,29114,49778,53724,71762,72795,73299],"playerloop":[19144,21326,33480,35690,35884,52641],"mail":[52584,69904],"shooting":[1944,1950,2089,22470,25786],"top":[17,94,179,532,1121,1406,1579,1771,1951,1966,2008,2133,2229,2362,2392,2441,2663,2774,3233,3930,3968,3995,4215,4467,4489,4808,4955,5031,5081,5181,6266,6293,6495,6723,6756,7116,8041,8118,8306,8761,8863,9098,9332,9980,10019,10222,10561,10633,10724,11165,11678,11723,12219,12586,12799,12865,13105,13133,13499,13901,14215,14295,14695,14787,14869,15022,15857,16869,16933,17955,18104,18362,18409,18447,18471,18898,19060,20061,20594,20754,21217,21692,22002,22224,22532,23616,23816,24244,24299,24526,24774,25051,25872,26613,26953,27082,27752,28051,28062,29101,29614,29695,29851,29880,29916,30050,30164,30196,30228,30456,30630,32147,32255,32849,33407,33482,33534,33659,34379,34757,34993,35198,35252,35379,35463,35636,35696,35895,35977,36037,36184,36205,36338,36366,36454,36470,36694,36736,36997,37225,37373,37478,37667,37731,38324,38455,38876,39043,39124,39231,39253,39382,39507,39748,39796,39906,39985,40128,40152,40256,40446,40698,41375,41420,41597,41694,41775,42256,42379,42547,43310,43971,44430,44625,44833,46667,47063,47093,48375,48510,48605,48618,48681,49431,49473,49509,49550,49665,49714,50061,50094,50170,50351,50557,50574,50647,50676,51085,51155,51271,51425,52082,52155,52223,52722,52766,52992,53344,54225,54307,54418,54563,54648,54724,54762,54779,55894,56108,56865,57158,57365,57598,58147,58286,59021,59318,59624,59836,60267,61243,61313,61526,61836,61915,62194,62609,62803,63123,63433,64056,64285,65907,65998,66334,66479,66879,67143,68512,69141,70306,71216,71301,71446,71517,71622,71797,72007,72357,73025,73283,73477,74837,74903,75265],"vertically":[172,2397,8036,9651,14254,14800,14868,20564,24392,27090,30525,33532,33659,39418,39562,39685,39756,39765,39815,39994,50034,50126,50422,52388,54735,59830,60649,61545,64083,64878,65952],"audioclipplayable":[34012],"swapping":[13067,33842],"armv7":[628,11844,50195,52672],"org":[27159,34362,44914,54097,58603,61275,61635,62428,62547,66798,69790,69857,70096,73741],"reactivate":[222,19043,30454],"_can":[73573],"git#my":[70681],"eye’s":[27065,72521],"shader_feature_fragment":[44556],"original_purchase_date_pst":[67463],"0x1000":[20297],"androidjni":[1404,16601,30920],"networkscenename":[66253],"downloadassetpackasync":[519],"direct":[128,3493,3553,5168,5182,6288,6319,6815,7807,9099,9875,9955,10009,10072,14348,14879,16060,18885,19364,19473,20556,21035,21144,22497,23452,26452,26798,27035,27064,27081,27178,27193,27214,27266,27293,27307,27330,27749,27756,29128,29791,31606,32280,33632,34208,35806,36591,36785,37227,37457,37622,37635,38505,40753,41491,43959,48514,49281,49423,49455,49626,50610,50726,51366,54558,55581,60611,62775,63850,66521,67863,68872,69107,70235,70289,70875,71416,71837,72474,73285,73667,73901,74804,75101,75641],"scrollviewexample":[65790],"originated":[29043,32078,71157],"template":[80,532,997,1252,1357,1936,2998,7835,9758,10691,11308,11995,12329,14470,17488,18050,18062,18466,18933,22501,23475,24601,30840,34850,34923,37486,37518,38946,38984,39024,39073,39096,39176,39478,43386,47241,53032,54305,54430,54514,54574,54921,54968,55073,55171,55245,55305,55996,56131,56223,56281,56337,56481,56531,56601,56745,56809,56987,57135,57342,57620,57641,58599,59276,59781,59915,60681,60891,60991,61179,61202,61331,61598,61759,62348,62504,62652,62789,65289,65788,65872,67113,67212,68629,69141,69372,69476,72229,72973,73214,73251,73408,73433,73563,73908,74172,75029],"internet":[217,1260,3342,11039,12641,19617,20087,22104,22983,26688,28310,28607,28753,28762,66230,66341,66365,66375,66420,67318,67439,67696,68133,69901,70424,73297,73667,74858],"nobody":[66363],"beginning":[1692,1883,2089,2448,4861,5011,6194,8049,8430,11412,14910,20256,21900,22518,23261,26356,31758,32869,35888,36077,36710,37312,37512,40075,40099,40621,41173,43354,46370,49822,50322,61471,62611,63864,71448,72269],"exampleproviderstats":[76047],"showcolormenu":[30632],"delivery":[432,478,491,510,523,540,577,894,938,967,1336,2764,3292,3569,4545,11685,17092,17240,28125,28127,31086,33882,66832,67123],"access_network_state":[1262,1387],"trying":[3377,4327,6138,7307,8437,9261,11044,11518,11603,12990,14582,22036,25597,26569,29714,30096,30362,33457,42191,59837,60495,66359,70418,70983,71086,71418,73024,73397,73627,73671,73705],"unity_get_interface_guid":[75996],"r1":[25810,60511],"kilograms":[7230,13238],"infoicon":[63445],"glossy":[8623,14259,37695],"qualities":[9112,13897],"jfrog's":[69990],"originallayermask":[26619,26624],"hijacking":[28108,66436],"x+y+z":[47642],"classb":[63043],"#b0e0e6":[63624],"backend":[890,919,1044,1299,1745,6430,7391,11879,17282,17296,19189,20212,22106,22125,23175,23428,24607,24943,25311,25734,26042,26076,26840,27644,27897,28473,29813,30291,30858,33804,34598,34657,35723,35865,36573,40544,50209,66462,68926,69169,69350,69454,72072,72083,72118,72133,72145,72149,72858,73903,74214,74504,74586,74747],"mymaterialnew":[3630],"gears":[18494],"builders":[49778],"lasersearches":[40712],"wayland":[34236],"examplefallback":[44331],"game’s":[19005,19133,22713,52847,52921,53004,53214,53283,53882],"setpixels":[8699,13709,14027,14113,61555],"expr":[41259],"lowpasskernelwidthinseconds":[29650],"unpickable":[39141],"compressionquality":[48751],"spread__":[32412],"failfront":[45863],"custommanager":[66265],"texture2dms":[45512],"fetchcompleted":[53936],"crashreporter":[66857],"isdynamic":[42093],"hastilemapchanges":[14527],"0x5d10cb0":[52563],"sourcevalue":[43741],"expired":[50286,67731],"devicesimulator":[20020],"details":[79,124,192,223,2211,2217,2761,3501,3539,3611,4003,4055,4191,4199,4244,4356,4363,4772,5165,5966,6105,6689,7120,7445,7462,7509,7527,7535,7547,7559,7593,7602,7610,7618,7633,7642,7652,7662,7699,7768,7771,7841,7944,7954,8059,8113,8135,8145,8158,8169,8202,8243,8301,8426,8557,8588,9153,9219,9288,9542,9587,9652,9710,9897,10014,10578,10693,10741,10792,11129,11149,11173,11361,11403,11517,11682,11700,12038,12357,12883,13018,13114,13131,13246,13393,13644,13664,13765,13815,13846,13893,13960,13994,14133,14288,14343,14561,14787,14958,15039,15844,17945,17991,18359,18466,18623,18676,18734,18757,18934,19026,19078,19201,20342,20558,20679,21002,21027,21142,21154,21346,21456,21694,21846,21870,21975,21999,22017,23005,23482,23795,24051,24509,25047,25106,25284,25457,25970,25980,26038,26065,26672,26947,27156,27260,28124,28794,28829,28885,29680,30284,30430,31380,31386,31715,31744,31759,31796,31817,31837,31855,31870,32113,32135,32187,32229,32258,32342,32359,32382,32608,32630,32649,32700,32908,33084,33391,33553,34202,34241,34324,34448,34963,35221,35248,35266,35366,35470,35497,35608,35632,35696,35896,35910,35936,35976,36036,36132,36183,36205,36298,36364,36431,36473,36593,36713,37050,37351,37542,37694,37722,37899,38294,38343,38383,38432,38490,38585,38909,38953,39030,39182,39388,39432,39488,39636,39722,39755,39786,39828,39888,39993,40012,40062,40082,40108,40485,40526,40676,41424,42233,42238,42243,42250,42255,42293,42298,42303,42308,42362,42405,42436,42442,42451,42458,42463,42511,42517,42523,42528,42533,42538,42543,42578,42583,42588,42593,42692,42716,42732,42757,42823,42829,42834,42840,42845,42851,42856,42861,42866,42872,42926,42931,43215,43590,43708,43978,44300,44871,45194,45292,45580,45664,46484,46782,47254,48165,48188,48302,48612,49441,49517,49780,50342,50360,50451,50528,50626,50939,51004,51174,51182,51257,51790,51806,51965,52483,52516,52594,52697,52758,52798,52872,53012,53175,53341,53778,54142,54265,54302,55544,56699,58466,58911,59275,63866,64079,65929,66350,66405,66448,66636,67060,67247,67523,67607,67801,68282,68304,68310,68322,68349,68381,68438,68545,69337,69443,70167,70266,70376,70821,70878,70982,71046,71121,71123,71179,71221,71265,71292,71301,71359,71371,71428,71489,71505,71524,71871,72375,72839,72929,73034,73118,74244,74503,74510,75159,75445],"wty2p5g0i6qncz4":[69934],"breadcrumbs":[65420],"phonepad":[29691],"#f5deb3":[63651],"emscripten’s":[73557],"avc":[10778,14819],"absorption":[22768],"runtimeinvoker_void":[33495],"scrolled":[39768],"clockwise":[361,18236,21221,51332,51572,58467,62030,62201,71970,72357,76303],"neq":[40853],"afterassemblyreload":[18035],"#6b6b6b":[63261],"name's":[71370],"decoration":[23215],"interactive":[3471,6782,11244,11274,16438,21425,21629,22189,22234,22604,23814,23882,24193,33482,34935,36569,38541,39591,39714,40042,40542,41751,45550,56042,70496,74121,74907],"spacebar":[2215,7178,59734],"audiosampleprovider":[14880],"textelement":[54626,55479,64365,64839,65293,65335,65755],"caustic":[18354,74292],"stylistic":[73],"rogsearches":[40747],"_maxcapacity":[72043],"type's":[5634,14516,51831,65002],"internal_data":[46295,46813],"transparencysortaxis":[48891],"truesearches":[40745],"board":[3472,53285,67961],"locked":[1589,4855,7281,8506,12515,18179,20575,20588,25400,25881,26000,29076,33607,33659,50593,70211,70246,70556,70587,71258,71304,71431,71490,72457,73263],"retrieves":[1420,21219,22993,27983,58845,59404,67063,74738,76202],"typical":[1768,2241,2959,4522,5351,6750,8136,8183,9463,12975,14319,14786,22538,23796,23890,25096,29374,30062,39117,39396,39758,39995,40084,43071,43618,43710,46485,49475,49498,49540,49642,50939,52548,53989,63707,63717,65369,69990,70212,70760,71110,72941,73238,73616,74976],"accessibility":[39263,59733],"preview_overlay":[63349],"itself":[73,1232,1941,2184,2231,2631,3338,3415,3571,3723,3865,4070,4387,4663,4766,4865,5774,5910,6383,6445,6718,6794,7152,7899,7970,8174,8271,8343,8373,8774,8828,8975,9039,9155,9253,9348,9553,9723,10493,10706,11177,12515,12733,12866,13109,13359,13732,14272,14509,14753,14833,14962,15020,17488,18448,19936,20587,20777,20866,21052,21181,21715,22203,22528,23816,23984,24465,25307,25396,25465,25669,26150,26473,26807,28181,28834,30043,30320,30896,31607,32114,32297,34797,34914,34953,35337,35892,36091,36203,36554,36694,36736,37173,37227,38515,38719,39472,39549,39603,39793,39879,40681,42328,42353,42456,42597,42793,43038,43205,43484,43603,43728,45144,45608,45703,46755,47422,48510,48915,49426,49491,49570,49630,49986,50441,51117,51271,51631,51788,52042,52132,52236,52246,54213,54246,56310,57962,59594,59872,60163,60518,60610,62034,63981,64752,65220,65244,66115,66261,66363,66696,67561,67886,68050,68131,68264,68532,68543,70837,71082,71215,71418,71872,72706,72776,72880,73248,73631,73897,74644,74900,75262,75409,75793],"reflects":[254,302,3012,5721,7549,7561,7566,7573,12288,18091,24517,33572,33842,36597,41935,47419,49442,49509,49519,49609,49636,56664,71782],"yesspeedtree":[38045],"panning":[5179,20566,34994,36008,73042],"getassetbundle":[3379,3557,25943,68167,68279,73026],"unloading":[3431,4566,19231,26714,27689,34417,39160,39928,51047,66903,68641],"architectures":[628,673,706,916,1273,1331,8402,28084,28161,33796,34597,34663,52678,66433,72181,72209,74768],"unityobject":[73393],"physicsshape2d":[8765,11564,35020],"'pop'":[18565],"paints":[50466],"refreshes":[3772,13130,20125,49770,51631,51762,54883],"__password":[39620],"spri":[41528],"canvasinjectionindex":[36454],"finds":[2717,3571,3847,8582,18232,19550,24845,25194,28251,28885,30224,34677,35827,38404,40858,41177,41840,45531,47163,57251,57828,58110,58998,61381,63162,66858,68070,70875,70985,73630,73924,74473,75913,76156],"briefly":[71548],"customrendertexture":[8884,15097],"pulse":[15027,73061],"trunks":[52152],"sanctioned":[70955],"newly":[2039,2426,3437,4015,4457,4481,6222,7816,9286,11236,13771,16075,18436,24631,26226,26712,27858,30658,31857,32106,32141,32659,34164,35558,35765,39208,40270,48369,50592,51369,52178,54500,54651,55363,55828,58068,58234,66222,67030,67074,67522,69395,69499,69519,70348,70399,70839,71027,71867,72470,74036,75518,76194],"dxt":[553,1557,12350,13709,14295,14446,21042,25842,50676,73167,73443,74046],"unity_dotsinstancedata":[5352,20264],"#b0c4de":[63587],"tapcount":[29594],"flagging":[17092,31110,53370],"validated":[31008,31366,71164],"quest":[17880,31200,50234,68753,72953,74394,75033,75209,75304],"cleared":[4680,8019,11574,13143,13879,20155,22279,25064,30050,53702,58254,67521],"hand":[2120,2252,2297,2777,2967,3517,6007,6154,6679,6901,7830,7854,8090,8206,11439,13851,14128,14678,14776,17818,18187,22506,23559,24276,25031,25072,25635,26784,26909,27013,27022,27341,29631,30198,31125,31758,32196,35604,36097,36189,36286,36457,36696,37565,39201,39819,41799,42028,42136,42956,43037,47757,49371,49539,50321,50699,52231,57869,59134,60518,67023,67234,67850,67940,70292,71784,72342,72940,75094,75109,75221,75321,75393,75485,76140],"bilinearly":[13219],"malware":[24974],"some_define":[8422],"patches":[442,4561,5811,11612,24668,29764,37646,39927,53703,70326,70582],"dropdowns":[24743,39504,71616],"prerequisite":[4870,42697,42737,43521,73426],"++idx":[8697],"preparestartdrag":[57460],"accessible":[399,10816,16470,17062,17412,18570,19151,28867,32882,34640,36368,43359,53485,68814,69046,69759,69795,70628,70770,71057,71664,74137],"elapses":[11544,32184,51955,62598],"k_autoenabledcategorynames":[35442,35596],"zones":[271,5174,7751,7771,8799,10358,15019,31802,43118,50610,52166,52216,71871],"c0":[18233,20299],"rag":[2063,33583],"ogre":[2239],"extents":[40054],"submits":[4065,20435,21908,53189,53424,59719,69860,72417,72918,75444],"asyncreadmanagersummarymetrics":[4685],"deals":[10547,21384,22868,44839,48239],"__linear__":[26886],"glyphs":[9251,14006,58119,58284,58411,61912,62068],"keyserver":[66772],"m_treeelements":[52364],"clicked":[20031,20708,23797,23883,30601,39472,40081,40620,52390,55687,55794,55811,56059,56556,57235,58586,59562,61490,61688,62766,64245,64448,65400,65438,65451,65928,71268],"myinspector":[58783],"graphicsformats":[8444],"encapsulates":[11001,27993,57628,60211,66036],"objectmodel":[67286],"handvisualizer":[72984],"21px":[63242],"framework":[3084,4766,8787,10692,11875,12232,15902,16431,16435,16747,16933,17603,17835,18624,18852,19296,19651,20181,20215,21139,23179,25694,28463,29420,30879,31248,31463,33494,34569,34660,37471,40263,41292,41935,49756,50653,52591,52735,66455,66478,66802,66840,70879,73184,73619,73946,74167,74982,75280,75294,75388],"gift":[13040],"lime":[49867,55944,63589],"inappropriate":[3346],"roundtripping":[4552],"smoothen":[38526,38565,38595],"linestart":[51437],"dockable":[20891,51424],"requestuserauthorization":[25682,73095],"assets\\ui":[58662],"allowed":[332,691,5965,6381,6443,7017,7203,7329,7973,8002,8177,8274,8386,8777,9042,9467,9737,11123,11588,11658,11763,12222,12489,12703,12736,13834,13939,14171,14512,14558,15013,20256,25881,26057,26110,26138,28179,28887,31727,33598,36334,38772,39751,39951,40009,40094,40225,52035,52628,55806,59165,61556,66521,69888,71053,74642],"bat":[19623,25451,70928],"minification":[935,987,1328,12007,23504],"pdb":[28452,74513,74613,74627,74788],"radically":[6846],"assembly's":[71040],"specfiy":[21568],"textureimporteroverride":[14467],"gyroscope":[18507,19996,20072,52754,73491],"spritename":[48455,61937,62035],"strings":[395,1509,1717,3039,5914,5983,6079,6208,13976,16470,17966,18851,29140,33134,33424,34740,36789,37098,63798,65518,67053,67526,67673,70834,70879,70984,73554,75617],"incorrectly":[13619,14006,14261,27536,29922,38850,51616],"deallocate":[27859,27928],"fillcharacterlist":[59437],"scriptssearches":[40713],"killing":[52584],"patch":[405,422,434,526,561,1315,1759,5350,11628,21991,25491,33893,40337,44691,47026,50479,53095,53308,60635,68902,69140,69719,70225,70246,70755,70814,71011],"propel":[11489,32910],"inconsistency":[25138],"pollutes":[4634],"consistently":[8437,20457,51204,69244,70228],"channel":[258,316,554,701,1557,4751,4776,4845,4911,5222,5980,7472,7804,7989,8615,9460,9898,10137,10527,10949,11153,12840,13432,13768,13797,13902,14241,14322,14794,18344,21558,21698,23638,24517,25280,26962,27039,27130,27263,27467,27509,29338,29555,32392,32874,34287,34361,34500,34864,36454,37802,39836,42243,42264,42440,42467,42515,42521,42547,42673,42793,42827,42838,42849,42870,42878,42896,42924,43594,43683,43968,44071,44096,45198,45286,46772,49471,49479,49511,49570,49616,49630,50194,50672,50834,51070,53773,53907,61557,63758,64468,66431,67897,72717,72753,75607,76327],"unitypackages":[19632],"oldpackage":[69644],"subtitles":[72706],"conversely":[4566,7660,11546,26049,72242],"pem":[53831,66612,69904],"unityxrvector3":[75495],"m_meshesbeinggenerated":[75853],"broadest":[14338],"pow":[10457,41099,45582,46220,46628],"extracted":[418,1282,3827,4776,21405,38743,41245,48254],"unsubscribe":[6128,35548],"vectorgraphics":[54740,61570],"overload":[30902,36098,40594,68379,68945,69189],"prebuilt":[17110,17126,23559,24597,37976,38258,41831,43091,48223,48977,49169,68527],"#112":[66781],"channels":[314,1566,3500,4751,4911,5037,5968,7468,7544,7709,7804,7989,9461,10543,10992,11212,13431,13920,14372,14860,21557,21698,22578,24517,24702,27130,27263,29337,32692,35973,38358,44071,44096,45595,49511,49630,72675,72728,75607],"fetchlabel":[2568,2644],"tanksize":[55259,56411],"pollute":[4639],"republish":[28789,67873],"optimizations":[11,4874,5916,6058,6104,9971,14707,19085,19124,19130,19132,19248,19278,19637,22142,26037,26062,26076,27119,29121,29447,29479,29727,30337,33624,36463,37469,37761,40572,43729,45037,45721,50579,51048,62866,72875,73172,74140,74845],"mainly":[104,5201,8192,8225,14464,18330,23049,24051,24456,25926,27495,27702,29314,30062,30325,49621,50421,52094],"userpropertymetadata":[20259],"logins":[223],"getinterface":[75885,75996],"useraccountinformation":[12660],"timescale":[7153,51956],"etcpack":[9112],"screencapture":[16705,30933],"clipstoplay":[34101],"reversedhotkeysxml":[61402],"r32f":[8452],"imultipartformsection":[68377],"vcsmode":[21045],"micro":[22387,26079,37833,70302],"getworldpose":[74481],"repeatbutton":[23900,24403,55477,59690,65131],"oauth":[53805],"workhorse":[21324],"unitygetaudioeffectdefinitions":[4908],"stores":[277,463,554,1010,1128,1903,3297,3579,3733,3808,3839,3870,4217,4515,4531,5498,8072,9135,9759,9908,9989,10493,10725,11149,12585,13306,13476,13626,14469,14661,17045,17062,18513,19382,22127,22567,23543,24004,25178,26119,26247,26456,26908,27039,27114,27127,27167,27536,27764,27919,27943,28104,29327,29338,29402,29412,29449,29663,30437,30896,31587,33433,33467,37281,37381,37667,39107,39881,40156,42054,42218,43264,45046,45851,47416,48556,48940,49762,50673,50946,51094,51849,52812,52871,52921,52966,53081,53264,53686,53713,53777,54002,54210,56911,57427,58403,58824,62048,66960,66967,67086,67146,67177,67272,67340,67541,67560,67582,67624,67644,67706,67760,68090,68441,69568,69693,69729,69756,69792,69865,70211,70258,70807,70867,71662,72050,72439,72615,72856,73214,74513],"modifications":[532,5774,7767,23251,23525,25329,28952,29793,31007,34883,37227,38244,38911,39921,48261,48691,51612,52629,54720,70447,70937,71165,73011,74218],"spontaneously":[7484],"ijobparticlesystem":[31652],"finalgbuffer":[46778],"achieved":[2134,2839,7506,25597,26928,31838,32114,32705,39507,44389,49560,52369,74219],"border_":[64287],"glsl":[8445,21716,41849,43945,44358,44873,45841],"d_toggle_mixed_bg_hover":[63497],"len":[6165],"again":[1488,1842,2295,2373,3437,3921,3952,4665,5772,5939,6839,7194,7495,7956,8221,9216,10223,12748,13024,13482,14968,16345,18317,18621,18894,18989,20163,20239,20450,20551,20608,20880,21042,24540,24664,25162,25550,26719,26789,28455,29077,29267,30047,30900,32153,32702,33083,33098,33415,34238,35883,36058,36492,38665,38811,38866,39329,39472,41629,42186,42374,46576,48624,48925,49534,52178,52465,52574,53176,53303,55740,56221,58186,59825,60570,62042,62485,62630,65999,66711,66852,66910,67136,67590,68544,68672,68852,69061,70230,70299,70380,70734,71284,71385,71412,71491,71593,71634,71969,72841,73270,73412,73982,74181,74389,74524,75433,75687],"decalreflective":[45556],"overridetransform":[51639],"onenable":[2594,6127,18031,20801,21307,21921,24818,26766,32792,36262,36410,36649,39160,49970,52331,54285,56462,56678,57008,57277,57543,58622,59489,59791,60524,60660,61291,61326,76234],"#00bfff":[63549],"unity_lightcolor":[47113],"takedamagedelegate":[10943],"14rad":[62271],"interact":[86,556,881,919,1397,1402,1802,1820,2937,3577,5040,6684,6943,6991,7203,8002,8367,11244,11274,11636,11658,12654,12703,13263,13762,13790,13834,14086,14343,14539,15842,16675,17282,17326,18322,20215,21630,22657,24466,25756,26247,26615,26651,27156,30033,31601,31619,31716,32287,32656,32754,33468,34189,34650,34994,36061,37278,37351,37532,38345,38550,38584,38633,38646,38890,41720,42062,45585,45845,46138,46712,47253,51211,51235,51554,51611,51845,54463,56704,57682,58622,60357,60497,61326,61956,62829,63966,65742,66450,66572,66822,66964,67018,67229,67840,67952,68458,69512,70629,70948,71982,72788,72941,73091,73558,74036,75090,75366,75405,75617],"fifteen":[26050],"pull":[2399,8508,11487,11603,13665,14238,26564,38858,45351,47752,50796,62015],"margintop":[57043],"etc2_rgb":[48738],"newbehaviourscript":[18370,52658,73530],"m_mesh":[76528],"options":[78,126,235,261,430,450,553,667,673,839,1127,1253,1968,2462,2796,3245,3397,3466,3501,3609,3989,4116,4343,4773,4842,5165,5273,5974,6311,6347,6397,6831,7003,7282,7470,7765,7995,8039,8107,8546,9218,9248,9426,9515,9640,9974,10114,10434,10569,11106,11463,11556,11796,12083,12280,12340,12457,12866,13105,13131,13215,13247,13632,13751,13789,13909,14225,14343,14477,14787,17986,18047,18114,18467,18525,18813,18900,19079,19090,19174,19450,20066,20121,20652,21029,21393,21559,21711,22047,22101,22634,23256,24436,24629,24918,24968,25055,25170,25189,25396,25454,25597,25911,26566,27492,27673,27682,28104,28133,28180,28201,28417,28754,29061,29683,29768,30147,30349,31816,32137,32243,32361,32659,32760,32863,33569,33696,33776,33879,34221,34248,34334,34455,34593,34760,35000,35395,35424,35677,36065,36457,36588,37268,37411,37712,37735,37840,38248,38264,38502,38531,38886,39031,39164,39228,39291,39309,39389,39471,39591,39608,39714,39744,39807,39810,39821,39872,39981,40039,40048,40073,40097,40209,41325,41375,41425,41605,41781,42750,42766,42788,43286,43468,44430,45016,45300,45583,46717,48055,48232,48244,48268,48366,48510,48568,48685,48876,49158,49169,49397,49491,49619,49642,50359,50372,50417,50555,50565,50622,50909,50939,51119,51144,51158,51264,51347,51556,51886,52106,52234,52594,53420,54437,54588,54638,54729,56587,57798,57957,58318,59552,59838,60650,61928,63465,63724,64528,64600,64696,64756,64936,65085,65178,65370,65945,65982,66018,66228,66390,66584,66902,67242,67680,67912,68304,68310,69372,69476,70303,70730,71187,71204,71217,71253,71327,71382,71460,71472,71681,71795,71880,71932,71991,72063,72375,72520,72616,72730,72740,72870,72942,73024,73086,73157,73616,73675,73912,74153,74316,74512,74643,74841,75003,75069,75111,75137,75198,75225,75918],"wouldn’t":[67136],"findproperty":[20802,40496,55001,55106,55400,56249],"r11f_g11g_b10f":[8451],"colorfunction":[46777],"0x00000000":[5465,5610],"nvidiamodule":[16678,30961],"customized":[7734,8065,13962,22161,31765,35613,40154,40760,45142,48329,50194,51117,52616,53921,53997,54141,58903,66461],"whereas":[3466,3580,6139,9466,10393,12885,19151,20340,25205,27137,32660,34640,36054,36781,39931,46766,52039,54430,54632,58147,59554,61496,71662,72327],"getspriterects":[48427],"isreadable":[5934,10505,10587,13417,19162,21514,61555],"desiredtexturememory":[51033],"percentages":[54725,60707,61464,62020,62215,62838,63737],"mygameinstance":[73564],"absorb":[42769,63112],"“encyclopædia”":[5993],"iconcontent":[49959,61585],"onpointerout":[62713],"forum":[2954,4039,4070,4379,40648,41861,66439,67655,70561,72912,75384],"probepositions":[27388],"updateunitycommandlinearguments":[737],"audioplugin":[4960],"spectacular":[2349,42365],"anystate":[14740],"reflect":[248,2209,2459,3585,7495,7721,8746,21862,23215,24489,24518,25162,26248,28782,35692,37684,37728,39591,39714,40271,42811,46811,47399,49609,49636,50359,50425,50507,50555,50565,51387,52057,52390,54885,74172,75223],"knowledge":[220,2186,4735,5879,6928,8402,18665,30433,40647,52239,53569,54227,65897,68037,68074,70952,72401,73907],"major":[220,2699,2765,4254,4372,4448,5985,9187,11045,11417,12596,13465,18377,20653,21592,21991,22504,26243,27927,33817,36223,40327,44691,47070,52494,52584,54136,69719,70225,70246,70755,70814,70909,71011,71808],"know":[64,251,517,649,975,1679,2173,2353,3431,3766,4381,4437,4480,4635,4909,5238,5770,7562,8439,8872,9187,9368,10768,12314,13364,18612,18670,18935,19044,21345,21854,23584,24276,24777,25047,25215,25329,26460,26479,26507,26793,27004,27613,28441,28609,28676,28734,29594,29904,31765,33067,33456,33842,33880,34646,36710,38862,40180,40584,41320,44001,44283,46783,47415,49549,49713,49837,50956,51788,52699,54699,57592,58129,58766,64381,66225,66451,66645,67921,68546,70325,71219,71364,71391,72136,72148,72492,74034,74498,74508,75617,75765],"converged":[36619],"blittable":[26434,26488],"keypad":[25031],"collectionsnamespace":[33463],"implementation":[813,5180,5497,5732,5999,6135,12409,16075,16275,18501,18617,19133,21540,26291,26496,26725,27260,27468,27885,27999,28457,28917,30557,30877,33103,33769,34177,34235,34706,36855,37227,37429,38356,38383,39674,40526,42814,44231,49914,52251,52566,52739,52920,52953,53083,53323,53691,53958,53988,54015,55544,55807,57330,58778,65746,66135,66239,66405,66966,67161,67293,67353,67558,67568,67572,67582,67628,67707,69337,69443,72736,73029,75264,75674,75751,75987],"spriterects":[48369,48427],"toyota":[58761],"onlycpu":[34575],"vcperforceserver":[21045],"maxcomputebufferinputscompute":[19768],"310x310":[12465],"overridemaxtexturesize":[6385,6440,28183,74646],"occluder":[7924,11320,11336,30171,30179,30241,49721],"diagonal":[48884,55889],"preloaded":[9516,28052,41900,42209],"uwr":[3296,68120,72586],"speedtreewindasset":[15191],"thumb":[7508,9568,45572,52550,58407,63369,63779,64263,65220,65244,72342,75645],"hockey":[8565],"#eee8aa":[63615],"organization’s":[4386,30401,30442,30478],"etcpak":[9112],"returnlicense":[21099,28645],"d_scrolldown":[63472],"btnclose":[55820],"100_gold_coins":[67203,67304,67412],"perp":[72360],"reflectivefamily":[42507],"#8e8e8e":[63370],"collide":[8299,8553,10564,11573,11642,11654,13266,15839,18220,22305,26605,31668,32654,38468,38479,38541,38576,38624,71578,74329],"suit":[75,2041,6836,11307,17488,19123,26611,37385,37564,40001,43302,49638,51078,54497,66249,67143,71619,73614],"ball":[8225,9322,14256,15844,23049,26560],"desktopbuildname":[74079],"attenuated":[4831,5064,7804],"motor":[8573,9188,9309,9695,9723,13175,13552,14979,74435,75607],"identifies":[2700,3814,5266,11082,11842,12602,22651,23583,27088,28189,28464,42148,43074,54012,60223,60375,60780,66151,66479,67208,71283,73190,75501],"37ad974993dbaa77485dd2a0c38f347a":[3271],"plugins":[1353,4826,17045,19322,19972,20003,20089,20098,21078,23480,28453,28463,30018,34576,34657,34735,40217,40435,41374,49762,52674,66114,66437,66478,67055,67143,67528,67691,68894,69132,73015,73184,73501,74204,74589],"workstation123":[72392],"focuseventbase":[57971,58195],"modulesmaterials":[3320],"initiator":[74581],"processor":[706,9250,15832,19992,21424,26042,26931,31717,34738,37683,37692,38559,38589,38609,50170,72697,73605,73978],"traveling":[11498],"eventsystems":[24802,29423],"accelerometerupdateinterval":[29649],"paintbrush":[13901,50567,50629,51279],"boundsintfield":[55453,55518,59606,64411,64412,69329,69435],"deployed":[13309,23128,27536,34698,73917],"lerpangle":[10467],"folder's":[33476,49771],"lobby":[11097,11145,17381,31432,66087],"bundlewithidentifier":[49781],"unsignedlongfield":[65551],"resolutions":[1566,1592,4286,4559,6039,8125,12444,12895,15967,19285,20460,24767,37496,37700,39444,49618,50127,50414,50484,54131,58447,58651,70230,72497],"assumptions":[2178,40570,52566,75467],"createpipeline":[40156,48910],"bindings":[5260,32881,43689,52769,55557,55726,56390,75090,75673],"skeletal":[15935,23095,25599,26561,29391,37398,37495],"rumbled":[75607],"elapsing":[51952],"balances":[17326,19311,31642,34880],"noshadow":[46785],"sv_target0":[45718],"artifact":[988,3596,3729,3837,12008,12888,22740,25064,50072,66684,73662],"technique":[69,167,366,6051,8640,10359,13065,17925,22061,22730,24487,24897,24944,25526,26663,27056,29340,29392,29813,30855,32232,33103,33533,37316,37376,37684,37702,37792,38828,40513,41788,43018,43147,43188,43459,44133,45119,45521,45718,46040,47372,49495,49522,50391,52040,54773,67800],"edited":[208,1869,1943,3611,13620,19013,20543,22484,23912,24521,25381,30050,34893,35054,45055,48617,48638,51877,52228,53446,54211,54262],"objects3d":[12658],"shaderimporter":[6708,15241],"gettag":[45982],"waking":[38472,75445],"patching":[433,561,583,1759,3445],"intelligent":[16542],"display's":[29856],"solid":[67,5904,6493,6836,7833,8075,8163,8381,11335,11766,12109,13142,15847,22016,24976,26059,30180,30270,31662,31681,32311,32343,32360,35258,44433,45319,45627,45852,49568,50386,50465,50579,50730,50941,54468,54564,54635,65998,66569,72723],"leaked":[26253],"irretrievable":[39794],"skipping":[18564,20525,39161,72369],"performing":[2625,4628,5919,6139,7383,10245,11584,19494,20457,21031,27309,30264,31627,34781,35344,35645,36439,41348,41674,41812,44133,44242,50686,52597,68131,68460,69896],"adb":[423,639,695,778,845,1570,1654,23123,26036,28433,35847,36558,50197,66979],"rigidbody’s":[8593,11604,13239,38502],"hz":[4893,7442,7459,7585,7696,7726,7745,12216,72935],"expandwidth":[59645],"trackballs":[34872],"runspeed":[40623],"legion":[53918],"tankeffectsprofilermodule":[35435,35478,35566],"registerhandler":[61729],"since":[434,561,1227,1668,1903,1973,2097,2358,3619,3768,3793,3963,4680,4773,4865,6398,6754,6831,7390,7566,7573,7663,7870,7931,8120,9154,9839,11519,12865,13894,14003,14031,14332,14898,14969,15842,17642,18083,19702,20242,20395,20991,21154,21550,21575,22071,22106,23525,23798,24776,24794,25270,25309,25904,25928,26042,26932,27688,27930,28771,29095,29592,30043,30168,30288,30331,31676,31739,31755,31773,31785,31810,31831,31848,32086,32101,32125,32149,32212,32336,32354,32380,32602,32625,32645,32673,32720,32765,32849,32899,34915,36149,36329,38425,38435,38624,39508,39672,39723,40502,40719,40923,41467,44091,44248,45149,45200,45735,46874,47098,47416,48683,49465,49468,50656,51953,52094,52542,52597,53497,54262,54560,54736,58172,58861,59193,59398,60155,60788,62618,62772,66499,68085,68533,68611,68805,70236,70326,70714,70954,71027,71806,71882,71969,72296,73412,74134,74226,74414,75762,76195],"cloudcode":[17290,31412],"playbackengines":[1608,73559,73920],"neutral":[8570,9784,12671,20196,25285,38093,42288,68644],"inspectortitlebar":[59662],"turquoise":[63649],"representations":[2042,14962,33637,37280,37351,37547,42204,42944,73556],"reversed":[21967,39508,39533,44928,61399,72342],"git#v1":[70895],"requisite":[6122],"rolling":[14957,14979,26594,50529,50947],"__original__":[14804],"reviewing":[4387],"textures'":[3502],"alleviate":[6834],"repository's":[70482],"r32g32b32a32_uint":[8476],"isgame":[1200],"myfunc":[21370],"ktogglewidth":[52380],"put":[2095,3952,4866,7836,8086,9135,9397,9591,11072,13626,13965,18292,18376,18759,18823,20808,23264,23575,24014,24297,24758,24912,24939,25164,26212,26387,26489,26961,27685,28445,29663,30738,34751,38449,38953,40226,40616,41997,42256,42596,43990,44797,44981,45058,45531,45975,46806,47364,49021,50534,52187,52674,53941,54957,58044,61645,62009,65865,66230,66356,66660,67654,68429,68458,68807,69748,70228,70346,73398],"ancestors":[28995,54885,57822,64330],"righthand":[2970,25658,29111,76183],"sceneindex":[41287],"vulkanenablepretransform":[72989],"output_log":[34215],"popupwindow":[34217,55473,56521,58910,65023],"ontriggerexit2d":[35271],"logo’s":[12303],"uv_detail":[46237],"b10g11r11_ufloatpack32":[8451],"lastevent":[62364],"texturepackasset":[55075],"gridbrushhas":[51597],"+3override":[12896],"compareto":[33273],"trashcan":[12871],"vp8":[1568,6715,14821,50184,72630,72717,72731],"vector3control":[75693],"commas":[4214,53039,58454,63893,64532,65085],"means":[4,165,356,401,427,442,480,499,509,526,556,617,620,810,889,1000,1094,1130,1192,1343,1468,1601,1771,1843,1895,1961,2004,2085,2303,2324,2602,3247,3292,3311,3571,3588,3724,3827,3865,4065,4506,4773,4820,5330,5350,5496,5763,6041,6224,6761,6794,6944,7017,7396,7429,7878,8059,8163,8318,8514,8765,8892,9127,9337,9515,9772,10010,10080,10560,10580,10705,10740,11177,11303,11376,12310,12415,12586,12799,12895,13115,13266,13307,13417,13826,13915,14296,14318,14559,14700,14728,14823,14833,17926,17956,18081,18255,18344,18516,18611,19028,19072,19944,20050,20116,20208,20239,20393,20418,20606,20632,20947,21168,21203,21514,21565,21715,21988,22155,22419,23525,23583,24492,24634,24772,24951,25034,25097,25099,25177,25329,25540,25733,25743,25826,25904,25960,26108,26460,26479,26646,26712,26788,27005,27056,27124,27167,27320,27522,27569,27589,27742,28115,28129,28278,28439,28467,28874,28963,29153,29338,29551,29759,29922,29973,30098,30141,30292,30367,30912,31992,32219,32264,32651,33094,33394,33399,33421,33457,33502,33537,33883,34194,34623,34638,34857,34896,34914,35462,35718,35799,36172,36334,36636,36928,37283,37571,37642,37671,37724,38242,38275,38345,38410,38437,38471,38605,38621,38639,38659,38736,38841,39159,39190,39309,39382,39467,39662,39678,39774,39819,39880,40099,40219,40616,41090,41795,41911,41990,42016,42027,42044,42141,42222,42405,42973,43022,43113,43165,43307,43414,43591,44133,44166,44297,44386,44638,44875,45093,45459,45629,45851,47422,47952,48353,48590,49030,49387,49481,49491,49496,49511,49614,49650,49678,49710,50008,50057,50067,50579,50669,50692,51067,51989,52146,52326,52488,52528,52673,52691,52735,54483,54552,54657,54769,55497,55547,55561,56609,58825,59193,59866,60515,61326,64275,65720,65874,65925,66207,66336,66354,66393,66405,66782,66938,67732,68546,68611,68797,68852,69061,69333,69372,69439,69864,69901,70340,70654,70746,70756,70821,71054,71175,71191,71664,71873,71921,72092,72149,72204,72229,72403,72715,72723,72800,72995,73433,73622,74050,74199,74238,74496,74602,75068,75109,75622,75805,75980],"balance":[1962,7305,7667,19311,29153,29714,30237,34864,38094,50677,52080],"presume":[67776],"cors":[72475,73410,73671],"terrainbuiltinpaintmaterialpasses":[68886,69122],"thanks":[6846],"party":[234,1021,1255,1867,1994,2812,4071,4218,4274,4552,4738,6036,6801,9112,11859,12180,12367,12555,17759,18692,18730,18937,19220,21961,22615,27938,28140,30033,30875,33514,34306,34392,34511,34603,34639,34645,35103,35959,37460,37593,48053,49394,49563,50344,50491,52100,52550,53183,53713,53878,66026,66437,66830,66864,67056,67528,67756,68778,68951,69196,70763,70952,71029,71667,72880,73388,74204,74362,74990,75075,75134],"yessimple":[41830],"2newin20172":[32139],"yesevery":[37825],"acknowledge":[50344],"quitting":[20155,21375,38861],"getcontext":[74094],"markers":[4713,7321,14730,21331,22203,23018,27724,27937,33468,35366,35610,35637,35683,35885,36075,36444,36531,39353,42226,74364],"synctransforms":[35344,38505],"internally":[149,291,1893,2353,3259,3847,4130,5038,6061,6125,9997,11078,11222,13606,18093,18328,20264,24060,25162,26041,27470,27690,30893,32232,35747,35994,37281,38638,41174,41792,42121,42323,42424,43917,44599,44835,45200,45447,45579,45643,47376,50317,50512,50600,55726,56730,59177,63137,66450,68263,68926,69169,70763,75508,76023],"filipino":[53623],"receivers":[22152,72759],"occasions":[24390,50355,50432,67195],"websocket":[73687],"atc":[21042],"digit":[18748,40331,53350,72364],"productbuild":[67058,67530],"save":[606,1122,2310,2364,2707,3580,3723,3830,3888,3920,4016,4123,4165,4179,4258,4444,4462,4501,4530,4962,5262,5336,5948,6962,7674,7836,8702,9075,9260,9482,9920,9986,10092,10477,11380,11407,11442,11964,12754,13275,13292,13306,13417,13618,13628,14026,14116,14790,17077,17110,17293,18062,18450,18514,18902,18927,18982,19324,20101,20344,20610,20709,21052,21251,21514,22081,24164,24276,24520,24696,24832,25153,25194,25242,25515,25911,25935,26040,26465,28321,28356,29259,29467,30175,30212,30268,30411,30825,31414,32879,33367,34749,35040,35187,35785,36499,36697,37272,37716,38277,38559,38589,38753,38904,38972,39172,39365,39905,40537,41395,41425,41571,41623,41724,41955,45180,46781,47415,48076,48224,48254,48654,49710,50141,50289,50491,50996,51095,51146,51369,51454,51619,51699,51817,52058,52092,52840,52909,52958,53153,53391,53836,54298,54402,54584,54639,55030,57190,58457,58685,58808,59194,59999,60159,61623,61894,61947,62351,62508,62671,62794,67116,67253,67598,67966,69713,69758,69794,69946,70011,70384,71173,71323,72403,72608,72711,72851,74453,74764,74827,74896,74928,75042,75079],"“channel":[10527],"rim":[46195,46807],"bypasses":[5121,6322,23394,59872,60653,72476],"in_foldout_on":[63452],"prop":[92,5350,34924,40496,50290,55108],"4xx":[14345],"binding":[1932,4877,20599,22536,26596,36736,43289,48533,48578,54205,54946,55030,55072,55159,55231,55307,55365,55497,55541,55544,55556,56042,56145,56217,56269,56325,56388,56598,56699,58732,59601,61420,61981,64389,65051,65904,66941,75090],"#b0b0b0":[63335],"spawnpoints":[13077,13322],"existence":[21373,32725,64335,75765],"playhead":[10338,21501,39351,48318,54214],"layermasks":[18420,26644,26656],"findpropertyrelative":[20960,55019,58912],"arrowhead":[22204],"obj":[154,6699,23369,25668,31170,33120,40470,48405,50604,52563,66853,74557],"setfloat":[2013,45048],"savefilepanelinproject":[51454,51699],"stretching":[8284,12472,14969,22061,24733,32251,33549,37619,65987],"setgradient":[57009],"global":[30,255,3807,4223,5006,5066,5120,5272,5719,6083,6128,6798,7202,7385,7659,7763,7777,8001,8232,8503,8592,8948,9055,9261,9341,9430,9532,9559,9688,9875,9908,9993,10089,10439,10649,11525,11596,11657,12702,12885,13477,13833,13993,14699,14860,19036,19399,19494,21453,21766,22105,22124,22140,22764,23406,23462,23685,26127,26787,26807,26867,26938,27017,27033,27071,27113,27157,27169,27184,27300,27307,27468,27749,27755,28895,29484,29695,32141,33666,33813,34803,35124,36032,36117,36532,36570,36640,37633,37790,38372,38463,41784,41965,42047,42124,42400,42713,42729,42754,42995,43219,43915,44083,44349,44543,44626,45144,46789,47067,47810,48267,49350,49439,49486,49720,49731,50440,50597,50698,52993,53343,54148,58119,58333,60652,61907,62062,63082,63747,63986,65719,66393,66600,68686,68996,69247,69349,69453,69692,69740,69766,69791,69876,69903,70070,70137,70185,70349,70433,70720,71423,71637,71814,72724,72759,73439,73563,75170,76300],"released":[6120,7519,8570,11368,11843,15904,15937,15952,15969,15984,16007,16022,16045,16062,16077,16093,16108,16122,16139,16153,16170,16185,16214,16229,16243,16258,16277,16332,16347,16366,16380,16394,16408,16425,16440,16455,16472,16489,16512,16529,16544,16566,16581,16852,16871,16885,16921,16935,16971,16986,17002,17017,17032,17047,17064,17079,17094,17135,17154,17171,17187,17208,17222,17242,17256,17270,17284,17298,17314,17328,17344,17372,17386,17400,17476,17490,17508,17526,17548,17563,17578,17593,17608,17629,17644,17663,17680,17695,17710,17725,17761,17775,17790,17805,17820,17837,17852,17867,17882,17897,17914,23427,23890,26095,27690,30985,31015,31369,31379,31383,31613,31797,33083,33436,35462,39395,39773,49890,53142,53370,55705,59766,60763,66910,67756,68828,69073,70316,70755,71148,71366,72364,74314,74408],"ascenders":[58288],"notches":[1220,19667],"drastically":[20608],"pointerdownhandler":[56897],"findrows":[52468],"bar__progress":[65038],"bdvkcaweaaanqme4whqydvr0obbyefdfw8vdkgmne":[69915],"0db":[7517],"ex":[30133,40725,41472,41504],"probs":[13043],"collides":[8205,25570,31685,38478,38585,38624,71567],"otherselectors":[41082],"i++":[4948,6161,9394,11020,13048,13336,14206,18296,25559,27408,29844,32799,33143,36658,55688,55840,57013,60451,61218,65840,69643,73510,73635],"clickeventexamplewindow":[55826],"tessellations”":[27478],"m_texturecompression":[76394],"rectintfieldsnippet":[65125],"topdirectoryonly":[19496],"rightmost":[12871,20594],"graphics":[1,46,71,132,255,740,873,890,1022,1219,1519,1799,2179,3506,3580,3807,4357,4574,5718,5730,5849,6139,6751,6758,6829,8117,8404,9060,9225,9429,9675,10200,11803,12221,12346,12885,13208,13363,13850,14011,16253,16675,17110,17126,17970,18249,18564,19151,19284,19636,19719,19983,20400,20419,20811,21030,21319,21778,21938,22051,22111,22234,22701,23275,23394,23458,23532,23541,23589,23610,23626,24597,24782,25177,25266,25734,25838,27159,27533,27579,29385,29438,29442,29446,29473,29721,29932,30001,30284,30320,30342,31101,31422,31589,32314,32702,33467,33475,34204,34273,34343,34469,34631,35714,35953,36026,36156,36237,36334,36440,36523,37319,37336,37583,37746,38249,38265,38272,38288,38324,38349,38926,39529,39708,40001,40151,41835,41953,42010,42054,42134,42183,42311,42364,42431,42810,42938,42950,43027,43101,43142,43414,43591,43655,43689,43728,43801,43987,44054,44240,44318,44371,44503,44829,45004,45211,45293,45416,45564,45840,46829,47368,48188,48353,48603,48676,48874,49042,49148,49182,49282,49364,49519,50001,50011,50088,50169,50483,50932,51075,51167,51219,51364,51964,52479,58463,63123,65907,66010,66910,68049,68527,68765,68923,69166,69352,69456,71746,72290,72722,72917,72986,73118,73240,73369,73430,73689,73902,73941,74121,74162,74250,74710,74923,75066,75376,75409,75872,75938,76023],"alloc_default":[29219],"idles":[34995,38672],"disablebatching":[45969,49686],"showbrushgui":[68887,69123],"can’t":[410,509,634,695,845,2751,8893,10003,10071,12103,12276,13309,13465,15817,19636,20181,21052,21870,23420,23443,24946,26117,26264,26450,26486,28433,28464,28757,28952,29814,29997,30899,33134,33421,34638,37671,39309,41917,43239,48258,49678,50019,50960,51031,52739,52766,53097,53781,58156,58653,66882,68786,68929,69172,71392,71664,71873,72402,74172,74581],"accelerates":[8586,38492,39240],"guarantee":[2179,4584,10014,10572,11521,21930,22993,31009,42106,70593,70755,73208,73662],"darkmagenta":[63536],"byes":[20242],"pacing":[11725],"pausing":[12473,73041],"0x":[21676],"shader_stage_hull":[43957],"my_point_clamp_sampler":[45241],"makegenericmethod":[40567],"exampleplugin":[72165],"cancel":[3920,4201,4436,5286,7305,11380,13379,20556,25223,29064,39385,39517,40002,43294,49903,50967,52850,52958,54571,55715,57949,60497,63209,63947,66359,71268],"myalternativegoogleplayimplementation":[67577],"rbg":[24517],"unity_dots_instanced_prop_override_disabled_by_default":[20338],"chipsets":[28084,50276],"sur":[50167],"familiar":[3,655,3463,5888,5994,6928,9258,22203,27921,30346,33426,39385,39740,39977,54120,54300,54511,57128,58736,59001,65897,66225,66450,66902,71961],"systraceframecallback":[28024],"renaming":[29907,43314,52348,70410,71016],"focussed":[20075],"‘sprites":[13799],"read":[14,152,332,395,422,726,1160,2063,2184,2199,2751,2930,3292,3523,4021,4148,4170,4374,4507,4651,4722,4970,5258,5938,6063,6321,6798,6885,6935,7484,7765,7941,8124,8226,8437,8771,8824,9033,9288,9339,9557,9621,9774,9933,10061,10505,10591,11092,12655,12740,12970,13389,13709,13961,16043,18376,19033,19150,19944,21474,21639,21913,22995,24030,24096,24454,24639,24977,25153,25206,25295,26129,26249,26440,27134,27478,27540,27708,28233,29343,30346,30415,31992,32312,32477,32924,33775,34486,34863,35344,35366,35622,35754,35934,35992,36204,36760,37565,39934,40086,40169,40456,40681,41251,42352,43985,44513,44874,45100,45474,45779,45866,45982,47370,48245,48270,48528,49151,49170,49688,49748,50002,50056,50415,50596,50669,50934,50961,51951,53902,54263,54555,54579,54636,54871,56705,61558,62765,65368,65718,66706,67155,67343,67978,68489,68566,68689,68811,68849,69040,69294,69506,70174,70359,70773,70972,71249,72428,72477,72735,73674,74132,74224,74412,75076,75249,75419,76198],"ikactive":[25642],"unity_particle_instance_data_no_anim_frame":[32013],"it'll":[30096],"share":[142,239,556,3256,3317,3488,3879,4226,5330,5727,9223,9334,9909,10435,11670,12618,13854,16220,17296,18621,18813,18907,20264,20393,20709,21525,21831,22125,22567,23397,24520,26005,27036,28115,28321,29214,30332,30898,31227,31484,31591,31620,32114,32705,32730,34940,35124,36235,38332,40563,41990,42109,42346,42620,43224,44002,45046,45142,48254,50351,51155,52494,54220,54425,54560,63722,63891,64036,67255,67890,70337,70707,70914,72292,73607,74171,75426,75503],"lamps":[10096,26920],"supplemental":[42243],"multiline":[59700,65319],"float4":[1682,6524,8418,8730,8921,10168,14054,14174,20254,23339,28935,29509,31943,32927,43341,43875,43975,44273,44404,44853,45082,45130,45681,46150,46808,46847,47087,47209,47921,49006],"example_waitforseconds_coroutine":[15769],"avatartarget":[50337],"pole":[35252],"aep+":[43850],"sliders":[2441,4964,20673,20967,23984,24169,29900,39819,40063,42354,49449,49511,52348],"projectpath":[15717,21018,74962],"unity_cameraworldclipplanes":[47093],"precisely":[3463,23668,27544,28596,33619,34820,50945,66006,67136],"restore":[3718,4602,18902,19443,40689,51087,52236,52526,53232,53260,58311,59193,62072,67126,67149,67517,68544,68825,69058,71433],"retargeting":[1929,1987,5267,7113,22486,38436,38652],"hundreds":[4559,4573,5291,6128,10083,29009,33403,35727,70243],"corners":[100,170,7968,8162,9032,10262,14524,14599,15825,21221,24769,34748,46975,48514,51236,54465,54712,55865,56839,60640,64140,65986,66002,71872,71970],"alt+left":[39300],"yesgpu":[38116],"visualelement":[20008,23243,30520,35512,54309,54445,54513,54557,54601,54903,54944,55000,55101,55205,55296,55359,55610,55805,55978,56105,56165,56222,56438,56656,56670,56752,56825,56986,57225,57319,57436,57567,57650,57831,57874,58036,58778,59048,59406,59579,59832,60020,60149,60325,60465,60571,60611,60627,60674,60869,60900,61000,61219,61566,61666,61777,62112,62361,62523,62586,62701,62759,62867,63116,63167,63704,63936,64366,64396,64442,64754,64792,64806,65021,65211,65490,65521,65667,65736,65778,65885],"m_gpuframetimeid":[76001],"instanced0":[32065],"initializations":[21168],"grant":[219,1507,12649,17282,25672,73288],"subscriptionexpirationdate":[67820],"striped":[29036],"invocations":[6142,18315,20891,33079,36507,41813,44134],"degrees":[1937,2047,2180,2356,2439,5209,6273,6298,7022,7281,7439,7456,7805,7930,8007,8029,8195,8245,8877,9694,9733,9871,10400,10454,10656,12857,12990,13110,14668,14993,22211,22548,23712,25229,26557,26985,29634,29895,32227,32340,32358,33600,33671,37285,37617,51880,62030,62307,62728,72487],"nvidia":[11520,11613,14332,16671,19284,26054,30288,30929,33739,33749,36168,36599,37919,38475,44915,50169],"skews":[35876],"yesshader":[38058],"overriding":[1256,2173,7492,14289,21041,21989,24079,28896,34886,34914,38467,43166,62157,66225,69766,69806],"gunshots":[5059],"quicksearch":[35178,41674],"customconfig":[66320],"object_field":[63333,64260],"mode":[3,13,64,115,182,270,480,499,510,647,688,711,717,1027,1087,1215,1578,1668,1704,1884,1899,2069,2262,2282,2324,2386,2419,2433,2601,2724,2997,3731,3833,3853,3908,3953,4663,4737,4774,4865,5028,5688,6322,6383,6445,6507,6653,6813,6977,7133,7153,7187,7662,7763,7795,7824,7956,7965,8024,8107,8322,8431,8528,8709,8782,8827,8972,9027,9069,9251,9440,9873,9953,10012,10077,10124,10211,10362,10403,10518,10738,11050,11094,11160,11245,11447,11516,11547,11616,11682,11715,12051,12300,12359,12472,12715,12728,12759,12837,12931,13112,13130,13210,13280,13297,13406,13712,13751,14120,14272,14537,14574,14730,14822,14844,15023,15699,15813,15967,16659,16747,17077,17606,17936,17956,17979,17993,18087,18126,18931,18981,19029,19281,19310,19451,19634,19651,19980,20074,20116,20237,20571,20582,20627,20727,20777,21041,21255,21388,21483,21609,21711,22031,22133,22627,23448,23645,23718,23777,24275,24455,24517,24535,24624,24781,24903,25212,25354,25429,25519,25670,25871,25912,26253,26602,26689,26795,26847,27112,27173,27185,27212,27264,27291,27301,27312,27330,27538,27555,28181,28395,28607,28877,29148,29731,29784,29834,30037,30154,30205,30252,30315,30363,30867,31668,31797,31851,31863,32090,32115,32168,32248,32367,32412,32674,32723,32767,32872,33078,33386,33399,33509,33528,33842,34203,34251,34333,34458,34594,34781,34862,34913,34948,34988,35195,35276,35496,35690,35791,35941,36034,36188,36205,36342,36480,36684,37589,37707,37927,38324,38351,38384,38559,38589,38731,38837,38908,39137,39159,39241,39252,39357,39373,39405,39771,39812,39936,40284,41530,41741,41764,41974,42366,42670,42766,42792,43144,43224,43456,43533,43653,44058,44348,44389,45096,45244,46081,46802,47148,47951,48055,48317,48362,48503,48556,48653,48677,48852,48874,49212,49348,49470,49504,49566,49593,49624,49732,49763,50033,50061,50125,50148,50175,50349,50363,50466,50612,50653,50730,50872,51046,51080,51103,51135,51166,51198,51234,51251,51342,51363,51427,51586,51716,52127,52206,52239,52489,52501,52676,52848,52958,53297,53693,54106,54209,54375,54444,54689,54713,54765,55214,55861,56169,57283,57830,58230,58304,58382,58446,58604,58680,58732,59123,59345,59516,59548,59808,59854,60355,60475,60758,61277,61527,61898,61930,62044,62429,62550,62747,63112,63342,64114,64246,64452,64748,64793,65178,65370,65700,65887,65900,65965,66100,66228,66341,66344,66369,66457,66543,66587,67296,68535,68626,68740,68860,69069,70908,71175,71634,71871,71897,72163,72224,72243,72383,72503,72742,72916,72942,73169,73259,73377,73486,74038,74140,74229,74453,74644,74816,74902,75027,75133,75186,75203,75593,76304],"bpp":[14318,27147,50669],"assetbundlename":[3383,3484,3555],"prolongs":[30376],"library\\sourceassetdb":[3599],"severe":[35344],"guideline":[1488,41174],"scripts":[392,464,861,1259,1312,1397,1401,1713,1791,1820,1852,1873,2006,2334,2700,2769,3466,3721,3829,3890,4274,4510,4534,4594,4652,4776,4874,5128,5257,5959,6344,6684,6935,6989,7369,7427,7766,8146,8219,8635,8782,9119,9261,9332,9653,9769,10691,10722,10803,11177,11612,11955,12912,12971,13064,13306,13417,14025,14086,14676,15042,15727,15847,16020,17045,17984,18030,18356,18387,18414,18623,18913,19021,19113,19258,19628,19657,20051,20117,20715,20777,20918,21253,21308,21514,22020,22060,22113,22228,22626,23553,24477,24607,24625,24928,24943,25310,25396,25595,25928,25992,26077,26651,26814,27341,28058,28067,28263,28463,28847,28866,28970,29019,29091,29415,29785,29887,29906,29973,30001,31601,31689,31764,32177,32747,32922,33420,33494,33506,33728,33776,34189,34440,34594,34637,34645,34984,35377,35407,35583,35748,36020,36496,36584,37351,37506,37536,37668,38443,38542,38575,38751,38841,38932,38975,39003,39169,39447,39912,40151,40168,40172,40441,40524,40526,40643,40666,40677,40713,41723,41808,41985,42043,42121,42996,43011,43326,43372,44601,44803,45055,45144,45619,48165,48170,48570,48886,49156,49211,49282,49394,49650,49735,49905,50290,50651,50709,51710,52247,52591,54842,54870,55317,55672,55751,56039,56722,57808,58191,58734,59022,59373,59552,60135,60154,60472,60573,60839,61956,62132,62769,63227,65694,65751,65973,66033,66057,66182,66416,66459,67217,67692,68324,68576,68704,68902,69140,69398,69502,69512,69748,70960,71040,71605,71662,71921,72063,72084,72110,72119,72243,72645,72830,72917,72988,73198,73321,73397,73500,73640,73694,74194,74588,74740,74777,74862,75226,75259,75909,76195],"passwords":[223,617,11964,29707,39640],"stones":[22544,49550,50321],"elliptical":[14711,64140],"collapse":[6149,11462,18129,24540,28363,30048,32141,34760,35696,36059,36695,41717,51917,52240,55227,64640,70829],"builtassetbundleinfoset":[15318],"despite":[9339,52011,74569],"spatializer":[4740,5009,5177,7671,7777,22593,72880,74978],"non":[234,505,715,1415,1592,1901,1977,2170,2277,2411,3013,3432,3484,3569,3766,3782,4819,5122,5960,6065,6116,6388,6458,6806,7167,7199,7378,8138,8353,8489,9137,9265,9502,9774,9970,10795,11079,11244,11274,11469,11604,11717,12699,13408,13604,13816,13830,14146,14709,15836,17169,18055,19072,19096,20007,20624,21031,21200,21565,22042,22063,22189,22910,23263,23727,23814,23883,24593,24619,24634,24669,24734,25034,25215,25262,25322,25747,25887,25904,25993,26060,26079,26294,26789,27113,27329,27539,27591,28510,28885,29732,29743,30365,30912,32189,32261,32614,32634,33368,33401,33425,33573,33842,34164,34485,34627,34893,34924,34985,35766,35988,36346,36371,36568,37857,38362,38467,38482,38505,38840,39169,39438,39591,39714,40042,40204,40699,41289,41812,42405,42812,44053,44691,44848,45149,45200,46737,47111,47761,48164,48833,49318,49507,49636,50055,50288,50388,50495,52511,52581,52691,53077,53093,53339,54025,54898,55557,58288,58389,59506,62884,63722,64337,65537,65552,66074,66208,66523,66855,66877,66965,67019,67087,67169,67230,67424,67624,67677,67708,67730,67841,67893,68624,68875,69111,69295,70230,70731,70756,70839,71016,71431,71692,71751,71760,72178,72522,72881,72916,73417,73440,73695,74172,74649,75029,75242,75660,75820],"darksalmon":[63541],"_mycolor":[45123],"unloadscene":[40685],"advanced":[245,1996,4628,4911,5181,5819,6750,6880,10434,11357,12414,12802,14220,14463,14778,14819,17000,17642,18666,20322,22055,22856,23452,25264,30299,30416,32196,32849,33072,33579,34229,35178,36600,37416,37505,37694,38252,40759,41370,41674,41783,42810,43460,43758,43832,44376,48101,49338,50179,50499,50599,50647,51008,52890,53163,53417,53828,54089,54560,58463,58651,60980,62830,65970,66225,66403,66635,67086,67172,67993,68212,68305,68461,68950,69195,69769,69810,70766,70973,71227,71468,71524,71971,73133,73296,73597,73616,73893,74198,74888,75570],"joysticks":[9065,9790,25336,72971,73470,75092,75645,76095],"etc":[553,1556,2239,3468,3718,4773,4997,5038,6287,6322,6383,6445,6816,7510,8066,9111,9463,9682,11814,13645,13995,14295,14337,14915,15852,16378,16392,16542,20891,21042,21175,21308,22018,22765,24030,24060,25843,26079,27154,27621,28181,34280,35270,37838,38345,39863,39996,40064,40097,42262,42378,42467,42876,43200,45574,45718,46721,47240,48163,48515,49451,49642,50170,50676,50933,52169,52182,52206,52488,52549,54724,65757,65992,66611,67472,68614,68781,69747,69953,70199,70223,70605,70822,70875,71217,71969,72766,73562,74644,75169,75444,75855,75897,76060],"asteroidsearches":[40791],"unity_input_system":[75707],"eventsystem's":[58172],"prolong":[34994],"gradual":[13899,37685,71879,72771],"recalculated":[26710],"getmountpath":[2923],"pinyin":[25032],"matrix":[5204,5417,5561,6070,6804,7202,8001,11586,11636,11657,12702,12865,13833,15865,20343,21609,21808,26606,30145,44271,44956,45290,47073,47292,51516,51740,51802,72920,72995,74332],"value'":[41254],"meshgameobject":[75845],"apptutti":[53911],"restores":[3834,25356,38842,39913,54454,63748,67625,71626],"amp":[456,749,1060,1606,1937,2252,3441,4213,4260,4426,4656,4890,5820,6011,6064,6123,6259,6597,6849,7167,7690,7829,8528,8693,9626,9700,12970,13770,13799,14247,14392,14664,16005,17092,17642,18061,19482,21641,22548,23819,24850,25171,25567,25706,26073,26624,27975,28095,28211,29510,29889,29984,30393,30443,30484,34660,34698,35843,36237,37899,38309,38425,39678,41849,42084,42364,42398,42475,42566,43822,43905,43917,44071,44428,45152,45295,45861,46722,47110,48225,48244,48269,48373,48465,48726,49140,49472,49535,49596,49809,51646,52778,53007,53120,53838,54327,55960,56774,56921,57241,58312,58421,58663,60459,60665,61457,61914,63727,65342,66125,66486,67340,67765,67894,68396,68754,68902,69140,69596,69982,70952,71094,71752,73980,74096,74184,74575,74681,74816,74858,75272,75853,75892,75926,76206,76342],"tostring":[20023,24995,33165,36278,36426,36843,36996,38697,56628,57748,59477,70047,76129],"greeting":[13037],"ax":[58366],"mycustomcolor":[47896],"close":[180,248,1901,2606,2717,3895,3944,4479,5284,6760,7505,7619,7796,8078,8831,9269,9966,10586,10651,11520,11605,12650,12742,12937,14581,17925,18226,18566,18900,18927,20397,21964,22130,22183,22746,23457,24521,24792,25356,25967,26664,26848,26932,26934,27003,27088,28771,29162,30142,33095,33401,35209,35250,35652,35692,36294,36337,36458,36522,36678,37818,38412,38866,39157,39329,40765,41400,41775,42255,42798,43113,48147,49474,49823,50636,52530,53276,54454,58527,59133,61476,61623,61894,62412,62671,69787,69854,70970,71230,71284,71491,71872,72755,73639,73689,74238,74957],"texcoord":[6525,8946,10171,31905,32966,36395,43698,46850,47348],"maximal":[33608,50592,75439],"unity_qnx":[33795],"grow":[4876,12414,17412,26025,29248,39382,39663,43070,50579,52224,54312,57170,57359,59300,59837,61544,62465,62567,64086],"travel":[8309,13566,14581,14951,32217,32400,32726,32907,43150,54450,70752],"captured":[1865,2000,2192,7975,8179,8394,8779,9044,12738,13120,14514,22165,22744,25890,33480,35266,35366,36343,37728,38275,55642,56918,71874,74327],"cert":[66612,69953],"notified":[2180,7766,35541,67339,72372],"librarymanifest":[12002],"furthermore":[6302,6816,7506,7615,12912,20565,27678,29915,30063,37685,38355,52046,68602,75444],"magnifying":[41420,41597,41678,65458],"emphasized":[14567],"address__":[39619],"unity_matrix_v":[47075],"hundred":[29248,51964],"_malloc":[73519],"characterportrait":[54373],"optix™":[37919],"chipset":[5952,28084],"filterid":[2523,2563],"gl_arb_depth_texture":[38425],"tspace2":[47474],"resoluton":[20446],"left_bottom":[64288],"kunityxrinputfeatureusageprimary2daxisclick":[75661],"crease":[52164],"visualeffectsubgraph":[15327],"cellsize":[76400],"rounding":[66159],"pointer’s":[58145],"unity_near_clip_value":[43974,44867],"__speed__":[32414],"foldout's":[64642],"flexedpane":[59143],"hip":[26560],"delayedtextfield":[59619],"loaddotsinstanceddata_lodfade":[20289],"​":[17744,24916,64906,65257,65531],"getintroductorypriceperiodcycles":[67738],"api":[122,332,441,509,687,726,740,920,1234,1388,1402,1491,1518,1657,1740,1799,1947,2550,2630,2692,2698,3241,3300,3342,3365,3446,3493,3512,3582,3726,3789,4448,4574,4716,4858,4979,5087,5153,5168,5257,5730,5807,6037,6080,6151,6507,6890,6935,7662,7763,7817,7875,7970,8174,8271,8385,8404,8648,8765,8882,9039,9334,9513,9920,10014,10200,10651,10803,10984,11001,11066,11199,11221,11316,11667,11707,12161,12282,12346,12443,12733,13267,13363,13417,13475,13826,14011,14123,14509,14687,14858,15042,16043,16075,16675,17012,17030,17045,17773,17803,17818,18392,18481,18561,19024,19219,19296,19722,19983,20050,20179,20208,20216,20419,20459,20811,21029,21326,21865,22014,22061,22113,22472,23394,23498,23545,23610,23626,24513,24728,24929,24959,25683,25696,25731,25756,25823,25838,25876,25920,26091,26129,26545,26597,26627,26645,26657,27041,27095,27533,27739,27825,27912,27936,28055,28065,28406,28589,28780,28971,29019,29173,29439,29442,29473,29566,29823,29852,29926,30055,30280,30284,30320,30379,30853,30987,31036,31475,31589,31632,31675,31738,31754,31772,31784,31809,31830,31847,32085,32100,32124,32148,32211,32244,32335,32353,32379,32601,32624,32644,32672,32719,32764,32898,33084,33104,33388,33463,33515,33618,33829,33902,34187,34212,34273,34343,34469,35280,35376,35403,35612,35719,35768,35937,35959,36159,36227,36327,36367,36498,36736,37225,37681,37825,38252,38275,38459,38490,38511,38736,39230,39388,39905,40151,40452,40544,40682,40766,41290,41835,41924,42042,42183,42431,42942,43027,43801,44140,44240,44371,44558,44804,44879,45018,45103,45255,45419,45848,45982,48174,48354,48378,48639,49042,49183,49281,49407,49573,49677,49715,50169,50455,50575,50709,50949,50993,51785,51985,52241,52607,52761,52770,53092,53377,53724,53838,54119,57972,58030,58203,58462,60194,60394,60672,60807,60877,60977,61982,63125,65002,65720,65971,66034,66225,66394,66402,66763,66820,66867,66964,67018,67131,67209,67229,67261,67651,67733,67840,67924,68160,68304,68309,68460,68592,68743,68823,68875,69055,69337,69357,69443,69511,70036,70307,70710,70758,70839,70910,70960,71011,71174,71194,71469,71497,71565,71636,71672,71746,71971,72084,72133,72716,72868,72981,72986,73026,73029,73095,73118,73205,73369,73416,73431,73470,73592,73622,73669,73689,73899,73941,74162,74279,74740,74753,74862,74923,75076,75459,75528,75901,76124],"forwarded":[66733,68205],"fileid":[21644,48127,48465,57190,76359],"supportslocationservice":[19715],"childindex":[55115],"graphic":[7,8115,8133,14963,15838,21197,22790,25183,25333,31688,32248,32665,33592,37359,37628,39528,39627,39669,39681,39746,39831,39969,39983,40077,43618,48162,48502,48611,48676,49777,50873,50937,52500,64362,65984,68732,71749,71879],"attackbadge":[57654],"lightsalmon":[63582],"testobjectwithserializedarray":[15308],"d3d11":[21085,28064,34206,34343,34469,38285,43959,44315,45435],"inputfeatureusage":[76096],"review":[218,698,2746,4062,4346,4387,4405,4413,4421,4445,18734,30888,50342,52599,52730,67039,67720,68926,69169,71506,75349],"debugconnection":[11016],"misuse":[18938],"standardshader":[42819],"'soft'":[26897],"noenginereferences":[3060,18658],"ignoreprojector":[8721,10149,32941,46089],"pair":[3696,8368,9753,11616,12234,13251,23817,25679,26589,27090,33733,35322,36352,39740,43997,49819,52697,58361,58403,62257,63735,70098,70499,70630,75557],"mojoshader":[41853],"completely":[257,2089,2360,3248,3475,4387,4846,5773,6965,7160,7929,8003,8078,8506,9024,10205,11445,12757,13175,13278,13295,14965,16933,18098,18172,18354,18617,20116,20263,21325,21964,22303,24377,25285,25597,26360,26709,26888,27310,27679,29103,29973,30050,30164,30264,30869,32401,32921,37715,37738,39740,41322,42187,42689,43198,43566,43684,44097,44338,44422,45261,45569,46417,50376,52046,54596,54735,66859,68086,68250,68536,69957,71068,71396,71877,72918,74903],"animationstate":[2118],"mortem":[74547],"invincibleshader":[29787],"loadscene":[19422,40685,52605],"methodwithnullchecksenabled":[25005],"haze":[42800],"resume":[3681,7194,13482,18315,32849,52054],"200kb":[7484],"value2":[1797,44802,45980,52441],"undergone":[31385],"texturepackeditor":[55090],"unlike":[505,717,3249,4874,5201,6793,8122,8373,8566,8765,9024,9258,10079,13308,13855,15015,15861,18362,18720,23047,23325,24517,24912,26359,30555,35868,36054,36586,36781,37285,39549,39727,39914,40098,45074,49703,49852,50397,51987,52229,54210,54488,54611,58393,67460,69750,71062,71392,73300],"isselectable":[59693],"impeding":[33583],"zero’s":[6202],"truth":[38089,52951,54043],"prompts":[730,2364,4157,10354,11394,28192,35087,38900,38973,39192,41400,41443,54422,66584,67482,67965,69860,70060,70120,70127,70359,72188,72862],"propertyfields":[65051],"ringing":[10060,50453],"drives":[1886,8577,12646,24977,37684,50002,50156,68626],"endarea":[24378,59631,64782],"numeral":[63860],"discretion":[701,29568],"unitypermaterial":[49328],"audiodistortioneffect":[7529],"dstcolor":[43769],"inheritable":[51579],"unity_pass_forwardbase":[44015],"engine":[1011,1711,1795,1902,2176,2209,2665,3061,3580,4206,4652,4776,5006,5162,6068,7204,7231,7367,7788,7950,8152,8546,8599,8648,9127,9260,10568,10863,11520,11534,11606,12119,12279,12428,13234,13640,13894,14259,14702,14960,15847,15902,16527,16715,17398,18139,18226,20211,20239,21160,22604,25035,25997,26054,26087,26491,28781,33450,33579,33677,33749,33762,33866,35277,35744,35975,36028,36528,37434,37596,38461,38478,38652,40213,40526,44963,45637,49327,49394,50534,50600,51958,52587,56049,56097,57980,58603,59827,61275,61636,62329,62428,62548,62801,63098,63709,64082,65873,65905,66413,66450,66461,66574,66802,66879,68072,68351,68682,69377,69481,71176,72880,73387,73499,73606,73694,74184,74653,74665,75252,75311,75390,75421,75474,75874],"assemblydefinitionreferenceasset":[15317],"endlessly":[8575,13665],"supportsaccelerometer":[19712],"timezone":[12674],"bvrs":[67467],"standardshadermaterialparametermetallic":[41766],"pan":[2254,5220,7787,9396,10511,20567,36058,39256,51378,54454,64179,72512],"unityevents":[24738,66921],"workflows":[1095,1807,2994,4055,5838,6996,9141,16345,16850,16869,17126,17152,17591,17939,18413,18666,21054,25827,26103,27544,33088,34214,35228,49638,50648,51846,54120,58997,60155,68527,71852,72939,74143],"noambient":[45589,46786],"basefield's":[61786],"rebuilds":[6398,25309,41359],"evaluated":[7018,7391,14728,21346,22657,29101,38345,38532,41091,41174,41791,47122,49661,73964],"getvulkaninstanceextensions":[75890],"unpredictability":[33458],"thinning":[2763,25692],"scp":[69862,70643],"evolving":[23605],"renames":[3858,25169],"audiooutput":[34027],"_vertex":[38304,44550],"usable":[10028,21000,24215,38865,51094,69337,69443,74903],"explosions":[5872,15025,25567],"persisted":[65719,66620,66922,67600],"writearrayelement":[26199],"decreases":[1556,5772,6293,7796,10651,20457,21870,28278,32609,33074,36636,43457,46928,50498,53370,64325,65233,65257,71608,72204,73203,74602],"uvdir":[8683],"ijobfor":[26269],"march":[4461,25853],"disappear":[3433,3971,7964,8118,8397,12727,23807,24724,27820,30202,32253,37653,41684,42767,49511,49630,50381,67130],"examplesourcegenerated":[38701],"ispasswordfield":[59681],"fake":[8555,42800,43175,58320,67707],"photography":[33533],"#a5a5a5":[63283],"astrella":[2002],"asyncload":[15736,68597],"minmax_slider_thumb":[63331],"finishes":[448,4015,5287,5498,10739,12513,18314,21357,21725,21910,22001,24864,25465,26295,29036,33415,34237,34994,35738,38940,39635,49895,57809,67596,69975,71181,71272,71296,71432,71495,71509,74713],"granting":[30443,52501,67170],"collabproxy":[3101],"uniformly":[8024,12310,14712,24909,26917,50593],"coords":[47625],"integral":[18506,49435],"scrollposition_x":[76567],"blueprint":[13112,18375],"structs":[1679,2343,5764,8442,26092,34160,39867,40173,47335,49102,52613,72191,75569],"privilege":[28718],"cc":[1302,6705,34546,50343,54527,58062,60907,61007,62011],"breadcrumb":[2260,20594,30050,36712,54593,65413],"solely":[14764,53981],"spritemask":[13741,15232,72757],"rendermode":[14902,72567],"psd_textures":[40716],"performance":[144,275,690,890,1209,1347,1467,1483,1762,1979,2063,2699,3229,4651,4811,5011,5137,5176,5260,5490,5684,5736,5801,5807,5876,5911,5948,5984,6059,6105,6384,6431,6816,6913,7017,7482,7664,8068,8303,8514,8894,9060,9223,9462,9892,9970,9999,10138,10572,10633,11520,11527,11598,11729,12122,12349,12881,13235,13266,13364,13418,13464,13709,13904,14356,14498,14538,14560,14582,14707,15839,16040,16927,16933,17030,17092,17642,18226,18239,18312,18401,18510,18611,19047,19193,19284,19635,19647,19992,20047,20089,20239,20403,20438,21000,21515,21584,21632,21865,22051,22760,23273,23419,23434,23532,23560,23601,24511,24923,24947,25262,25605,25725,25734,25849,25885,25978,26040,26053,26061,26081,26145,26271,26441,26472,26510,26664,26714,26799,26908,27058,27083,27117,27206,27215,27268,27296,27495,27745,27931,27937,28182,28278,28402,29120,29150,29330,29417,29447,29479,29573,29712,29904,30175,30267,30327,30342,30400,30511,30872,31026,31396,31642,31863,32115,32180,32220,32705,33081,33088,33400,33421,33446,33470,33506,33646,33772,33866,34279,34343,34469,34857,34988,35264,35404,35465,35498,35603,35697,35793,35957,35968,36096,36296,36432,36463,36621,36742,36754,36797,37236,37469,37639,37691,37740,37798,38258,38287,38324,38346,38400,38532,38541,39160,39727,39853,40571,41792,41894,42101,42178,42204,42232,42237,42244,42249,42257,42292,42297,42302,42307,42349,42351,42435,42441,42449,42457,42462,42510,42516,42522,42527,42532,42537,42542,42577,42582,42587,42592,42822,42828,42833,42839,42844,42850,42855,42860,42865,42871,42925,42930,42944,43021,43094,43131,43171,43460,44231,44307,44384,44669,45037,45523,45563,45740,46484,47026,47308,48227,48306,48353,48579,48642,48676,48905,49048,49158,49309,49495,49621,49669,49710,50164,50361,50520,50579,50671,51080,51215,51965,52190,52483,52529,53167,53484,53769,54177,54281,55512,55633,57750,57929,58378,59085,59892,60617,61958,61997,62748,62867,63132,63887,64322,64457,64756,65963,66364,66457,66570,66918,67551,68051,68130,68498,68716,68919,69141,70230,70698,71760,71973,72673,72986,73171,73302,73378,73443,73688,73792,73900,74141,74275,74602,74645,74774,74849,74918,75017,75445],"cacheserverenabledownload":[21070],"depicts":[35737],"insertaction":[55989],"isexternalinit":[18536],"‘+’":[34523],"quadrangulation":[29764],"unload":[3430,5330,5768,18011,26706,27690,29949,34594,35141,41727,41871,50007,54589,66811,66836,66867,66892,66910,73022,73620],"troughs":[49610],"preferred":[3292,4761,6080,6839,8636,11951,14332,18952,19254,24743,33879,34436,36762,37297,38498,39381,39460,39549,39574,39643,40128,49750,53293,54231,68825,69058,73660,74549,74907],"bachrenderergroup":[5345],"ltv":[22390],"fraction":[12954,13041,13107,14729,30369,31683,32131,32274,39756,49852,65941],"wall5":[41506],"rebuild":[3321,3346,4960,10595,12586,14501,25329,35881,49413,52580,52903,52973,53997,54278,74658,75397],"#20b2aa":[63583],"stopping":[7764,7810,18308,31719,33399,61490,66234,66687],"neighbors’":[10012],"satisfaction":[33608],"minus":[10723,12227,12303,13032,13847,18206,20647,32064,34892,38347,39509,41404,44935,48587,50637,59837,63463,64179],"codebase":[20047],"relay":[11039,17471,31453,66425,66820,75624],"idisposable":[18581,26137],"px":[12116,25261,61196,62213,63737],"customlabel":[60589,62168],"decorations":[18454,22534,39591,39714],"mypluginmethod":[27966],"offsetsample":[73083],"fp16":[9459,14389,29338],"standardise":[44839],"windbg":[74516],"portray":[13267],"p_mix":[4887],"t1":[18230],"lineareyedepth":[32995,44024,44943],"”red”":[61454],"integrated":[4545,6142,10698,19647,21632,22557,24506,25035,26242,34858,38087,38272,38425,40652,40656,45564,53183,53414,53713,66414,68072,76301],"checksums":[3343,3451],"uranus":[59968],"unbounded":[4566],"numerals":[18138],"_myvector":[45124],"queryhapticcapabilities":[75605],"replicate":[10014,12838,28951,37596,50411,66205],"adid":[74873],"#x23":[23523],"getpixels":[14027],"scripter's":[2069],"lift":[24098,34872,38098],"#ffff00ff":[49878],"participating":[53280],"unity_2020_2_or_newer":[4654],"dims":[36060,71809],"containing":[1894,2240,2437,2842,3497,3738,3985,4245,4465,4773,5022,6222,7001,8965,9207,10109,11843,12598,13392,13816,14727,18054,18670,18757,19466,21465,21980,22066,22565,23779,23910,24103,24371,24524,25258,25469,25500,25633,32884,33252,34600,36717,37624,39138,40208,40725,41025,41190,41360,41467,41504,47375,48197,49536,50551,51101,52247,53190,53416,57503,57680,57828,58778,59077,60837,67603,68683,69848,69999,71108,71762,72053,72893,73949,74408,74611,74834,75607],"“sleep”":[38471],"inclined":[18233],"r2":[25811,70582],"morphological":[37957],"rendermeshinstanced":[23270,23394,49364],"animation's":[12296,62193],"setdirty":[38935,72438],"hfratio":[7740],"bolding":[58320],"avoids":[2131,2356,26113,27055,27554,33155,39160,44876,62189,70728,71879,72339,74214],"multicolumn":[60045],"yeslegacy":[37799],"prohibit":[67195],"retval":[59975],"thousands":[4573,5497,6128,6941,32115,33093,50579,58410,64328],"viewport's":[54690],"point16":[29338],"caneditmultipleobjects":[20798],"#revolute":[7252],"round":[5477,5622,6785,6950,8162,11708,16345,24407,29161,44695,47063,56840,58504,60932,61035,66248,74907],"filtersettings":[5677],"spline":[48,13784,14968,16005,31232,71644,74167],"xrinputsubystem":[76311],"toolbarmenu":[55426,65391,65443,65458],"4th":[23550,47940,50197],"400f":[62376],"customstyleproperty":[56704,56757,60916,61016],"rendertextureformat":[8444,43986],"movie's":[10760],"checkwriteandthrow":[26115,26196,26249],"blade":[8573],"unity_display_orientation_pretransform_270":[73006],"absent":[36588],"centimeters":[25205,48278],"cohesive":[17312],"object_t":[72019],"wobbly":[52143],"unaligned":[50376],"directing":[72315],"scenehierarchywindow":[2624],"crouching":[1966],"windowatitle":[57526],"amorphous":[22852],"adjusts":[1962,7265,11504,12310,20571,30755,30886,33409,33945,34862,42704,42725,42747,42772,51390,52114,52194,58356,58799,59852,62032,72996],"mixes":[7448,7465],"“called":[39358],"au":[5017],"toggled":[22283,30781,41320],"chomping":[68509],"shurikentogglenormalmixed":[63486],"targetelement":[60465],"continuum":[75368],"copypasteexample":[55937],"granularity":[29186,67186,75653],"gridbrushbase":[51224,51496,51526,51559,51563,51601],"ago":[4456,25062],"setallindices":[61089],"physics2dmodule":[16702,30964],"potentially":[3812,4831,6841,11624,14802,23041,30886,35322,36105,37706,44918,45166,49710,50150,50390,50489,50996,54281,62415,66081,70211,70243,70449,71058,71221],"hyperlink":[62008,71374],"suspension's":[14956],"geticon2index":[52424],"toolkit’s":[58173],"tag":[2518,2776,3320,3537,4206,4300,5152,6498,7140,9345,10003,10826,11368,13846,13991,21177,21742,23184,28509,30558,36706,36754,41507,41619,42387,44093,44603,44758,44784,45623,45966,47104,47666,48678,48987,49686,49822,50288,53396,54430,55606,55870,57300,57302,61356,61449,61909,61922,61965,62006,63989,65268,66500,68512,70613,74000,76040,76334],"synthesis":[5006],"m_mytoggle":[55760,56055],"suspended":[3707,4866,8004,22413,36011],"billboarded":[10272,32739,45639],"material":[40,118,1872,2334,3308,3434,3569,3625,3731,4286,4635,5365,5497,5763,5910,6061,6499,7163,7951,7961,8057,8153,8165,8265,8375,8767,8788,9028,9139,9258,9507,10214,10408,10540,10576,10742,11309,11503,11533,11601,11641,12724,12833,13193,13357,13384,13549,13629,13641,13750,13798,13890,13897,14001,14503,14576,14833,14960,15015,15059,15844,15898,18263,19062,20263,20393,20420,21240,21385,21711,22161,22304,23264,23377,25221,25244,25597,26858,27081,27103,27688,28845,28867,28876,28945,28982,29008,29017,29091,29488,29724,29784,30321,31866,32265,32458,32731,33629,34860,35008,35946,36152,36213,36454,36696,37559,37653,37688,37898,38332,38549,38583,38632,39596,39719,39736,40060,40456,40881,41184,41586,41753,41808,41864,41892,41921,41982,42022,42063,42132,42352,42692,42716,42732,42756,42783,42809,42947,43012,43489,43498,43508,43613,44199,44427,44602,44821,45043,45121,45180,45326,45396,45568,45982,46158,46529,46923,47182,48229,48245,48267,49022,49328,49423,49454,49463,49470,49474,49483,49500,49509,49536,49567,49592,49607,49629,49635,49686,49851,50003,50017,50132,50149,50388,50442,50512,50656,50934,50981,51064,52128,52182,52207,52354,54055,58312,61906,64998,65984,66682,68859,69068,71600,71865,72495,72551,72762,74170,74286],"deallocates":[5259,26113,27870],"tagfieldsnippet":[65279],"instancesortingpositions":[5655],"22px":[63243],"unpacked":[3870,4217,13916,14338,48857,68533],"#9932cc":[63539],"ui’s":[33489],"overdraw_":[30205],"audiosource":[1917,5020,5192,7493,7531,7562,7597,7637,7673,7806,10760,15094,22235,22586,25525,34018,34943,36012,72246,72546,72879,73034],"3dsp":[72888],"makeitem":[55208,55949,57018,59096,59446,60017,65521],"foley":[5052],"extremum":[14971],"sift":[76068],"gpu's":[47951,50696],"appendaction":[55983,65451,65466],"spriteimage":[59155],"2x2":[9234,10010],"playstation®":[23134],"md5cryptoserviceprovider":[52625],"international":[9261,50343,73452],"#b22222":[63553],"geometry+1":[46035,46490],"encompasses":[55633],"guests":[30416],"articulated":[21592],"uninstallation":[66697,67151],"deciding":[3397,4773,7971,8175,8272,8390,8775,9040,9275,12734,14510,38287,38571,38601,38635],"resists":[9301,26588],"understanding":[1483,1893,2326,5909,6394,6723,6762,6769,6811,9528,22234,23533,25097,27745,27937,29150,35727,36093,36332,37469,42349,43090,43139,48315,49549,54226,58736,59001,65997,71590,72294,72705],"slidermaxvalue":[24175],"searchcontextattribute":[40760],"protected":[766,801,1079,19159,19569,25641,26138,26734,34486,35512,37001,37244,48714,48926,49054,49296,50329,51581,52273,56895,57440,59927,60238,62177,68201,68594,69862,70060,70107,70127,70173,70424,73486,75698],"suitability":[4445,53324],"s_isdevelopmentbuild":[27962],"fixed4":[1693,6583,8750,10165,14198,23313,29508,31897,32929,42036,43379,43883,45129,45690,46395,46862,47108,47225,47922],"spectrum":[4994,8318],"addclipanimation":[35763],"s_progresscolor":[60917,61017],"dangerous":[5921],"onpointerclick":[49891],"getforcurrentview":[74676],"kwd":[53669],"graphicstier":[23547],"pxs":[36339],"deprecation":[48673,70761,71108,73118],"authoritative":[6152,10804,11069],"successful":[1955,4480,18081,30073,52108,52828,53093,53496,53693,53999,54044,66360,67136,67339,67372,67592,70211,75145],"shareit":[53916],"downloads":[401,487,499,511,1331,2815,3237,3300,3977,4090,4376,4548,10733,12222,14295,19628,25487,28707,49461,50201,52639,53547,65031,66635,68133,69028,69281,69693,69746,70780,70944,71268,73025,73325,73393,73620,73680,73806,74158,75354],"sdf32":[58398],"dmp":[74548],"usedimplicitly":[2543],"instancenumber++":[13343],"dx":[30302,43849,44142,51481],"outlook":[5010,67041],"lightwave":[24699],"enablerandomwrite":[8427],"“boost”":[67186],"finishsetup":[75697],"uv’s":[32066],"“auto”":[68935],"csharp":[2466,2519,2551,2627,2899,5202,9818,18261,18541,19087,19109,19241,19386,20011,20195,21915,24457,25128,26362,27887,27957,28503,30908,33105,34427,34525,34688,35417,35479,35509,36253,36401,36764,36832,36985,37238,38689,38978,38991,39206,40174,40441,40574,51458,54516,54874,54971,55588,55676,55733,55819,55930,55977,56046,56104,56285,56338,56406,56484,56542,56990,57311,57870,58003,58038,58161,58235,58468,58624,58758,59024,59375,59754,60139,60166,60233,60439,60521,60576,60626,60684,60854,61208,61574,61691,62123,62353,62510,62816,63163,64392,64401,64416,64436,64447,64471,64492,64516,64536,64568,64591,64614,64656,64677,64700,64721,64734,64778,64798,64812,64826,64845,64863,64919,64939,64958,65008,65035,65064,65089,65105,65120,65136,65149,65167,65223,65247,65271,65297,65316,65396,65416,65435,65447,65461,65479,65493,65504,65541,65556,65571,65591,65611,65631,65652,65671,65821,66474,69520,69668,75243,75748,75877,75947,76041],"setspriterects":[48430],"profilermarker":[23018,27937,35612,36105,36508],"commit":[4123,7836,20556,33069,54570,70613,72439],"motherduck":[18168],"yesaffects":[37954],"verticalscope":[59712],"x\\":[50206],"webgleditorscript":[73420],"ethnic":[53737],"physx's":[33491],"scaling__":[14815],"constant":[2360,5949,6125,6762,7128,7172,7506,7685,8289,8441,8573,8585,8597,9839,10108,10454,11484,12116,12716,13250,13602,20237,20581,21825,23060,23258,24772,28909,29131,29471,31797,32090,32362,32853,33275,33631,33721,36015,37821,38458,38489,38516,38525,38659,39240,39406,40867,41796,43989,44638,44875,45042,45278,46923,49327,49525,49631,50397,51984,59555,61539,70838,72331,73002,73448,74251],"laserbeamsearches":[40712],"myrepository2#revision":[70676],"aligned":[3248,3294,7092,7931,7959,8188,10128,11564,13987,18229,27090,32318,39724,39800,40620,50376,52213,62009,65051,71871,74422],"doens't":[5655],"subset":[1557,7025,9465,11866,13378,19173,21639,23619,26091,26438,26495,33830,37681,38301,42788,44684,47659,52607,52735,54831,59828,64082,65913,71755,75416],"adaptive":[197,7505,11610,11707,13757,14463,16040,20089,21869,29573,30379,31026,31396,35562,37866,51965,54154,68716,68919,69161],"uiasset":[60148],"lightsteelblue":[63587],"unity_cameraprojection":[47091],"thrusting":[10886],"chunk":[3249,3293,3365,14538,42218,51200,51252],"statemachinebehaviour":[21333,49650],"unfragmented":[73626],"largest":[5634,8260,9827,11514,11747,14582,14824,20343,27738,32275,40911,41195,58441,66162,71876,74905],"waitwhile":[15710],"runleft":[6999],"percentage":[4845,4902,5285,7023,7582,10012,10337,12115,19306,22345,24778,26986,30243,31645,31719,31856,32093,32712,35037,35285,35944,36090,36193,36242,37812,48323,50559,50693,53511,54886,60706,60881,60982,62032,62838,64141,65232],"leftfoot":[29111,50337],"redirected":[53172],"32mb":[29181],"“about":[53214],"healthkit":[53724],"rod":[65999],"depthformat":[75427],"plain":[2995,4579,5764,6049,6135,24392,48123,68498,68536],"computational":[13477,24500,36596,43535],"flushed":[75414],"darkgrey":[63534],"moveforward":[10719],"9'":[41155],"dpi":[11734,12883,19684,39425,61542,63792,73248],"directionallight":[36651],"lightingsettings":[9908,15322,22113,26814,69357,69461],"prohibitive":[37715],"ssbo":[20340],"bugs":[714,25891,26485,35138,36541,73741],"gridselection":[68634],"m_progresscolor":[60919],"testers":[17524,66919,67039,67251],"amplifies":[7514],"halfwidth":[48484,61074],"intercolliding":[11638],"traversal":[36753,75453,75576],"tank_inspector_uxml":[56417],"unity_matrix_mvp":[1701,14060,43875,47073,47293,72995],"longitude":[8618,13215,13389,14255,42738,53733,72489],"nofog":[46791],"hungry":[72318],"duringscenegui":[30635],"applied":[1904,1953,1967,2084,2217,2747,2764,3958,4796,4819,5020,5122,5239,5955,6105,6542,7199,7496,7518,7566,7573,7615,7682,7696,7756,7771,8003,8020,8239,8287,8578,8602,9149,9321,9553,9698,10009,10247,10704,11078,11477,11518,11532,11600,12698,12774,13111,13134,13552,13660,13837,13854,14604,14878,14949,15015,15034,15859,15902,17092,18070,19021,19167,19239,19473,20644,21486,22079,22149,22532,24051,24475,25692,26789,27068,27329,27538,27566,27591,27716,28999,29044,29790,29900,30043,31813,31834,31851,32250,32344,32610,32731,34425,34523,34856,34905,34956,35203,35931,36712,38088,38376,38542,38611,38655,39435,39530,40048,41693,43175,43386,44428,45184,45266,45807,46875,48245,48308,48379,48628,49444,49481,49535,49817,50461,50521,50596,50629,50726,50929,51189,52099,52124,52204,53944,54475,54553,54590,54885,56832,60801,62840,63107,63816,64017,64322,65051,65984,67738,68544,68671,71207,72273,73193,74334,74496],"ink":[43551],"itemheight":[57034],"getfloatparameterinfo":[4977],"stack’s":[50046],"unity_sample_texcube":[47403],"radiogroup":[65090],"getprocaddress":[18549],"variance":[11725,37824],"hacked":[25860],"sml":[63444],"hash128":[19527,55523,64718,68281],"centres":[51155,66002,71872],"kunityxrinputtrackingoriginmodetrackingreference":[75590],"unitychina":[69891],"highpass":[4825,7588,7600,7606],"registertabcallbacks":[57228],"onclient":[10930],"#a7a7a7":[63361],"######":[29007],"hid":[12653],"runner":[19652,23186,50653],"augment":[1890,2995,23132],"matched":[4902,18449,32795,75978],"abusive":[4070],"week":[40087,40097],"nativefunctions":[28271,74596],"packagename":[463,28447],"generator’s":[38712],"tiniest":[52181],"getmousebuttonxxx":[18503],"#6a5acd":[63638],"triples":[71970],"designate":[3065,10852,12896,22880,23463,40179,71787],"romanian":[53642],"outcomes":[13041,56728],"_blank":[15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16598,16606,16614,16622,16630,16638,16646,16654,16662,16670,16678,16686,16694,16702,16710,16718,16726,16734,16742,16750,16758,16766,16774,16782,16790,16798,16806,16814,16822,16830,16838,16846,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17056,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17215,17232,17249,17263,17277,17291,17306,17321,17336,17351,17364,17379,17393,17407,17419,17431,17446,17465,17483,17499,17517,17533,17542,17556,17571,17586,17601,17619,17637,17654,17672,17688,17703,17718,17735,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,30951,30997,31294,31374,31488],"#cc":[62011],"countindex":[36396],"extremumvalue":[14968],"television":[50197],"reapplies":[28994],"meshqueuesize":[75853],"newin20194":[70233,70255,70742,71199],"yieldinstruction":[21364],"concave":[33701,38481,43591,49562,50552],"folder2":[70610],"embers":[32230],"decides":[4064,38242,56932,70985],"yespluggable":[38013],"playanimationutilitiessample":[33936],"graphicsdeviceversion":[19732],"r8ui":[8484],"half3":[10192,43881,44231,46516,46560,46736,47349],"importers":[3667,3766,3812,4502,6690,12774,19467,25099,31633,35188,38841,40451,68614],"mocap":[38661],"rendering”":[14029],"featured":[13977,17326],"essence":[49465],"configmanager_fetchcompleted":[53936],"++i":[5681,8673,33114,52411,56777,61131,65172],"500f":[25787,62376,62992],"5th":[23550],"promotional":[4137,4286,4356,67481],"delayeddoublefield":[59616],"arial":[9264,24165],"rosetta":[50170,52676],"rivets":[49517],"a8":[14336,50195],"atlas’":[28834,51207,72285],"wl":[34672],"s_renderertype":[29939],"toggleoff":[42028],"spriterect":[48370,48421,48514],"pace":[52046],"uncompressed_":[74645],"dozens":[1996,45564],"lazily":[36753],"depths":[52261],"kunitygfxdeviceeventinitialize":[29948],"saveassets":[8704],"getsceneat":[40690],"asset’s":[3579,3729,3814,4867,7396,7429,25047,25138,25423,34900,38896,40221,51045,51407,58403,72525],"visualizes":[6513,10236,10522,19653,21711,35616,36201,45672],"subsequent":[466,1468,1692,2384,3300,4614,12400,13933,20743,22124,22228,24640,26710,27699,31725,33382,37728,39638,41326,42684,44376,45096,45911,57836,66173,66616,67047,70224,70245,71013,74197,75607],"memorylessmode":[29451],"setcustomerrormessage":[26260],"glesxy":[21090,30316],"disbled":[35030,36481],"motionbuilder":[7071],"boundingsphere":[6152,18575],"resolution":[554,681,714,1566,2839,4994,6378,6443,6810,8039,8117,8386,8894,9062,9883,9948,9996,10079,10109,10651,11176,11682,11711,12046,12288,12322,12468,12883,13139,13209,13713,14075,14277,14811,15967,19177,19310,19981,20058,20437,21868,22042,22116,22144,22761,23450,23816,24770,24905,26086,26871,26947,26972,27055,27099,27261,28176,29856,30366,31599,33524,33544,34219,34247,34330,34454,35809,35924,36570,36680,37639,37675,37699,37826,38335,39408,42255,43115,43152,43177,44085,48510,48529,48601,49449,49518,50006,50034,50065,50140,50420,50436,50515,50683,50703,50972,51010,52721,53733,54139,54264,54767,58410,58447,59531,60942,61048,61296,61304,61541,61921,66897,66910,70211,70234,70287,70877,71121,71288,71417,72276,72497,72671,72717,72755,73240,73911,74516,74639],"ferns":[52169],"semitransparent":[9454,43639,45633,46766,47752,62014],"personal":[1163,4040,4145,12119,12275,21011,22347,26690,28604,30384,30470,30502,41624,49638,63233,67903,70042,72789],"playableoutputs":[33928],"boehm–demers–weiser":[33399],"joint2d":[13160,15193,26576,35272,74335],"myconstantbuffer":[44885],"shadows_split_spheres":[44583],"'a'":[43969],"discuss":[3309,4354,5911,9594],"shattered":[25597],"_speccolor":[44485,45364,46839],"sig":[1052,66775],"target_":[74581],"unity_apiupdater_log_threshold":[2726],"reevaluate":[33842,38612],"amd":[14332,28159,30288,37950,50169,74625],"exceptions":[11,84,3719,4184,4581,12397,19481,20538,21592,24923,24983,26041,26088,30095,30871,40606,49404,51070,54093,65926,66450,68917,69158,71563,72056,73194,73302,73386,74552,74615],"quadcreator":[21250],"maxresolutionheightscale":[20470],"ext":[40718],"fitted":[10003],"'real'":[7025],"raymarching":[14154],"deobfuscate":[936,1748],"getemissives":[26760],"flowmap":[38069],"exclusively":[1200,29317,35277,43505,43514,43563,64765,65355,72402],"managedreferenceutility":[74358],"onupdateselected":[49898],"particle's":[31683,31747,32090,32131,32606,32629,32637,32776,32864],"allocated":[1655,5474,5619,12426,18315,24512,26022,26126,26245,26351,26431,26540,27858,27924,29179,33215,33382,33420,33454,34740,35765,35945,35994,36041,36201,39655,52591,54236,68209,72934,73614,74581,75409,75755],"brings":[1886,9180,14502,22413,54729,57469,68072,73458,74186],"retained":[6985,16747,59553,65900,65965],"cleanest":[3500],"horizontal":[307,2024,2166,2434,2995,5179,6291,7096,8027,8172,8617,9277,9567,9752,9823,11164,12115,13062,13215,14799,17773,17803,17968,18488,20562,21158,23962,24169,24297,24554,24743,25763,27814,28354,30164,30555,30832,32256,32677,33535,33659,34759,35218,36057,39457,39545,39573,39740,39769,39814,40005,40053,45252,46322,52214,52761,54224,54627,54729,55863,56673,58289,59068,59660,59895,62009,62199,64179,64879,65166,65228,65252,65386,65937,65982,66000,66333,72526,74439],"gradientcolorkey":[56999,64680],"#fa8072":[63631],"b04d":[66769],"parentboneindex":[75573],"mountains":[43484,50528],"minify":[1351,12011,23503,53997,73168,73299],"npmignore":[70726],"m_label":[60921,61022,62764],"overwritten":[12680,71283,72007,74839],"getmethods":[30894],"adipiscing":[65174],"stylerotate's":[62307],"brushtools":[51618],"hosting":[2768,5016,18681,18818,66335,66350,66562,67148,70606,73321,73410,73772,74034],"application’s":[509,687,983,1243,1448,1584,5921,12003,12282,17240,19047,20438,24963,25877,26452,28114,28169,28185,28463,29150,33399,33429,33478,33527,34237,35622,35690,35794,35941,35958,36023,36285,36509,37269,38341,38501,49419,49770,53779,67550,67754,72845,74792],"unitygfxrenderer":[29939],"yesboth":[38058],"distorting":[71772],"route":[4796,5026,5080,5183,6042,11011,75617],"getfloat":[1888,40639,45103],"generatemipmaps":[48772],"expandheight":[59644],"registerpurchasedeferredlistener":[67386],"mount":[2896,8574,50411,66588],"beziercurveto":[58542],"voxel":[22943,31708],"myrepository2":[70602],"exponent":[14391,27159],"unity_ambientequator":[47143],"picker":[9872,10353,10527,10609,11303,13747,13788,13912,20659,23744,24514,25436,26884,40758,41765,45082,48586,48622,49490,51281,51825,58336,62066,63466,64468,69311,69417,70833,71617,74295],"rows":[12866,14021,14081,14262,23951,35380,39547,48373,51156,51328,51886,52243,56839],"childname":[62778],"gave":[61735],"thirdtex":[45228],"unityobjecttoworlddir":[47488],"argb32":[8456,8668,38359,73551],"keywordspace":[42054],"addrange":[2528,59443,59977],"dying":[48335],"svg":[21302,54773,59527,61569],"yeswith":[38049],"abruptly":[8569,14713,37714],"unitytextalign":[64830,65303],"hellofromsourcegenerator":[38723],"transactions":[17045,22387,53364,53693,54016,66704,67149,67350,67539,67550,67601,67623,67758],"isnetworkerror":[72588],"baseboolfield":[55435],"outcome":[7413,13041,13247,27549,38503,40306,53009,54720],"confirmation":[21134,48511,71274],"consistencychecker":[25124],"uquery":[56723,57330,57680,58923,60137,61419,63131,65696,65846,65891],"typeloadexception":[68644,71053],"bindconfiguration":[67557],"spritenamefileidpair":[48435],"nextvisible":[55114],"supportstessellationshaders":[19748],"characters":[49,67,478,1924,1985,2063,2191,2243,3457,3735,3830,4207,4281,4608,5265,5989,6150,6780,6996,7155,7391,7620,7944,8496,9079,9257,9774,10794,11842,12154,12804,16453,18138,18217,18454,18563,18749,21555,21565,21627,22011,22460,25031,26789,27304,29122,29699,29714,29774,33753,34372,34931,37321,37344,37480,37497,37525,37622,39611,40325,40643,41309,43175,44698,47237,49540,49821,50288,51964,54561,56982,58110,58285,58369,58441,58673,59386,61456,62015,62100,64909,65767,66384,68498,71982,72240,73417,73452,73985,74895],"authored":[2177,5826,7015,12918,15902,21575,22530,27520,27544,27590,38661,68052],"myintegerfield":[57903],"utils":[2477,71730,74372,75115],"#00ff00ff":[49867],"hierarchies":[2183,4722,5084,6149,14690,21460,24526,28969,29736,34926,40734,54894,55547,61302],"fieldoffset":[40607],"styled":[9261,9614,9663,14005,64640],"cones":[22186],"augments":[15902],"\\projects\\myproject\\builds\\myproject":[15724],"movespeed":[9831],"arrows":[7940,10561,18899,20717,34950,36059,39819,49528,49643,52385,71351],"modifiers":[43235,45283,58005,59745,60388,60790,63729,65342],"taxes":[4386],"adobe":[15982],"instantiating":[4904,6034,6126,9417,14707,18445,24729,25495,26449,29809,33287,33477,57633,73996],"aims":[1761,6958,7297,8535,17412,17488,17912,29420,73639],"usability":[2699,28474,52757,62788,74275],"afrikaans":[53609],"confined":[8256,9157],"screenuv":[46267],"iunityxrstats":[75994],"lot":[1406,2004,2131,3013,3949,4515,4997,5193,8244,8558,9279,9588,10120,10614,11508,13454,14133,15844,18300,18513,18676,20340,22019,23452,24167,25597,26381,26478,26494,28056,28066,29153,29568,29720,30894,31011,32115,33088,33475,33573,34163,34996,35714,35924,36091,36337,36511,39138,39764,41844,41979,43618,44013,44451,45142,47026,47752,52597,53012,54223,64325,65951,66225,69337,69443,70563,71121,76095],"climb":[8195],"info'":[66685],"joint":[11,1900,2120,7217,8224,8495,8998,9144,9162,9293,9681,9722,11583,13158,13551,13647,13669,13857,14978,15078,22302,24661,25622,26547,26557,26569,26580,29391,33575,35744,36330,37614,37615,38469,38550,38584,38609,38633,38648,42814,71627,71766,74335],"groupbox":[55466,55607,64695,65061],"lines'":[33496],"“amethod”":[40566],"overscan":[8043,33564],"currentpipeline":[49217],"avatarikgoal":[25658],"context":[404,491,573,1378,2332,2471,2524,2584,2628,3808,4671,4879,7215,7567,7574,7935,9913,10340,11376,12770,13353,13815,13903,16075,18022,18540,19129,19447,19492,20545,20586,20642,20706,21088,21640,23415,24769,25048,25105,25364,25411,25633,26248,26567,28851,29996,30043,30049,30564,30906,31010,31635,34210,34911,34956,35696,36500,36593,36872,37154,38404,38696,38897,38961,39199,40476,40769,40778,40797,40821,41298,41350,41410,41439,41483,41493,41535,41647,43040,43223,48936,49054,49288,49420,49468,49720,49959,51415,54434,54591,56725,60960,61051,61323,68545,70263,70360,70943,71091,71185,71215,71302,71354,71403,71418,71446,71459,71486,71521,71620,71637,71943,73557,73964,74231,75501,75898,76304],"tabnamesuffix":[57222],"getinput":[34126],"paddingpower":[48775],"unityexception":[30909],"endvertical":[24391,59641],"’a’":[59756],"vision":[72786],"playground":[55155],"duckling2":[18168],"depth+stencil":[38363],"ellipsemesh":[61019],"game_switches_editor":[55338],"point_cookie":[44575],"impending":[71108],"sigma":[36611],"#6b8e23":[63611],"1500kg":[74421],"insidedata":[32825],"depend":[1574,3806,4960,5679,6035,7217,7485,8122,8873,10435,13911,14517,19381,19480,20419,21009,22146,22538,23475,25867,26263,26359,26374,26852,33581,34845,39297,40180,40604,41644,41872,42360,43486,43520,44816,45071,46976,49449,49642,53922,54277,59838,64330,66465,67972,70243,70960,71412,71627,71681,72344,72755,72916,73013,73417,75111],"expanding":[10780,18902,53399,73697],"audiomixergroup":[15223],"without":[78,167,389,488,511,680,1433,1501,1758,1789,2120,2399,2990,3078,3441,3488,3680,3847,3889,4357,4372,4392,4768,5049,5158,5464,5496,5770,5980,5994,6264,6317,6758,6792,7307,7364,7429,7476,7810,8078,8108,8128,8251,8437,9127,9145,9347,9665,9673,10214,10703,11252,11276,11412,11466,11510,11559,11895,12397,12643,12819,12975,13074,13246,13268,13412,13613,13934,14351,14475,14576,14661,14816,14847,15000,15842,17092,17282,17488,17997,18307,18440,18481,18565,18734,18850,19306,19616,19636,20078,20279,20394,20419,20605,20937,21029,21385,21460,22048,22104,22464,23444,23672,24051,24578,24984,25307,25390,25499,25723,25863,26118,26479,26562,26689,26784,26909,26926,27209,27637,27678,28310,28607,28963,29104,29360,29449,29484,29594,29790,29858,30042,30327,30375,30443,30493,31013,32107,32704,32911,33067,33239,33467,33535,33842,34195,34217,34842,34900,34925,35138,35604,35828,36049,36508,36570,36723,36736,37099,37227,37376,37675,37740,38222,38277,38355,38465,38638,38810,38820,38850,39083,39177,39308,39884,40271,40718,41295,41375,41566,41663,41718,41810,41915,41993,42019,42024,42666,42688,42703,42724,42746,42798,42811,43021,43080,43092,43131,43224,43618,44000,44097,44583,44759,44811,45481,45721,45846,46550,46826,47185,48068,48163,48350,48628,49275,49305,49474,49607,49644,50171,50342,50356,50589,50673,51826,52034,52099,52576,53025,53207,53921,54591,54736,54759,54796,55058,55365,55602,55727,57952,58133,58300,58401,59189,59852,60136,62497,63914,64453,64757,64900,65191,66137,66194,66336,66355,66405,66584,66922,67070,67237,67755,68601,68872,69107,69337,69443,69713,69819,69957,70060,70120,70127,70175,70236,70499,70594,70761,70839,70910,70955,71016,71284,71634,71668,71772,71876,71921,72243,72281,72319,72401,72474,72794,73093,73199,73225,73414,73482,73553,73777,74178,74564,74883,74929,74978,75617,75739,76068,76088],"m_isdirty":[61114],"index":[336,493,1700,1778,4983,5258,5354,5607,5727,6184,6490,8953,9210,9268,11225,12598,13032,13341,13427,14009,15921,15945,15961,15977,15992,16001,16015,16030,16039,16054,16070,16085,16101,16115,16131,16146,16162,16178,16200,16222,16236,16251,16268,16305,16340,16357,16373,16387,16401,16417,16433,16448,16464,16481,16501,16521,16537,16555,16574,16589,16862,16878,16903,16928,16954,16979,16994,17010,17025,17040,17072,17087,17103,17113,17121,17129,17145,17163,17179,17198,17321,17379,17542,17556,17571,17586,17601,17619,17637,17654,17672,17688,17703,17718,17747,17755,17768,17783,17798,17813,17829,17845,17860,17875,17890,17906,17922,18589,19528,20242,21104,21221,21526,23263,25206,26185,26267,26370,26465,26496,27717,28046,29590,29842,30997,31294,31488,31653,32458,32686,32754,33475,33682,34207,35181,35383,35541,35649,36394,36804,37053,39483,40716,40911,41316,41355,41520,41609,43451,43762,44009,44108,44272,45515,46021,48458,49668,49851,51645,59097,59459,60020,60635,61072,61455,61908,61937,62075,64533,65525,65888,68872,69107,71377,71575,71973,72887,73215,73251,73408,73435,73563,73919,74090,75576,76097],"pieces":[1998,2375,3249,3461,3667,6169,13058,17976,22534,23810,25526,26360,30555,32360,32609,40657,49821,52226,72344],"scoreboardtitle":[33201],"cubemapped":[25289,46274],"xiaomistore":[53912],"registermesh":[5408,5552,5764],"discoverability":[4204,4367,4419],"transcode":[1568,14789,72641,72730],"artists":[1994,5820,5968,14285,17759,28946,29009,30135,42024,45046,49520,49565,54120],"has":[11,71,78,156,204,239,275,291,493,509,634,670,897,1243,1393,1411,1497,1561,1729,1770,1886,1900,1916,1934,1958,1975,1979,2079,2204,2227,2235,2239,2252,2278,2308,2327,2372,2412,2426,2499,2550,2626,2722,2757,2780,3107,3247,3379,3450,3565,3595,3723,3787,3867,3923,4070,4182,4219,4264,4366,4391,4437,4448,4550,4580,4752,4776,4818,4959,5129,5160,5181,5265,5300,5338,5351,5730,5911,5938,6037,6083,6128,6224,6266,6293,6318,6361,6408,6489,6542,6793,6826,6892,6965,7034,7179,7250,7366,7483,7617,7644,7788,7910,7965,7989,8040,8104,8144,8162,8281,8431,8550,8883,8989,9014,9127,9138,9181,9258,9317,9382,9464,9553,9622,9745,9773,9856,9932,10028,10100,10108,10352,10398,10491,10587,10614,10742,10794,10809,11010,11069,11134,11191,11202,11221,11291,11303,11333,11445,11461,11516,11533,11601,11669,11844,12102,12278,12332,12685,12728,12757,12809,12975,13175,13249,13278,13295,13306,13454,13574,13609,13693,13734,13826,13877,13906,13977,14076,14241,14596,14661,14726,14786,14833,14943,15009,15022,15842,16091,16227,17045,17994,18112,18167,18225,18450,18585,18673,18736,18898,18926,18981,19565,19669,20000,20050,20105,20130,20216,20238,20381,20423,20569,20606,20626,20725,21029,21154,21230,21325,21385,21460,21566,21711,21913,22014,22132,22273,22317,23288,23443,23543,23879,24018,24275,24466,24471,24576,24640,24733,24743,24784,24898,24908,24923,24930,24969,25051,25100,25170,25292,25384,25419,25496,25632,25849,25901,26050,26091,26110,26181,26249,26267,26292,26381,26441,26473,26669,26807,26908,26922,26947,27007,27015,27072,27098,27118,27142,27170,27215,27320,27491,27544,27648,27715,27757,27927,27996,28075,28082,28119,28127,28165,28255,28281,28352,28401,28560,28772,28856,28879,29007,29036,29098,29128,29153,29363,29398,29593,29721,29766,29863,29891,29919,29973,30042,30168,30215,30229,30275,30286,30325,30423,30478,30540,30855,31385,31646,31650,31659,31717,31745,31760,31856,31920,32106,32174,32255,32366,32401,32725,32860,33065,33078,33093,33385,33401,33421,33457,33486,33508,33543,33581,33662,33776,34192,34212,34375,34491,34611,34671,34712,34884,34908,35037,35252,35264,35416,35484,35633,35692,35771,35795,35944,36007,36093,36163,36210,36296,36397,36439,36465,36599,36694,36760,37347,37480,37528,37690,37712,38281,38297,38346,38403,38434,38437,38462,38478,38508,38546,38574,38624,38820,38839,39029,39137,39192,39246,39347,39396,39412,39487,39659,39727,39756,39788,39819,39827,39858,39992,40016,40084,40154,40175,40509,40513,40526,40618,40647,40682,40731,41187,41330,41447,41554,41646,41677,41794,41906,42058,42132,42320,42364,42424,42810,43017,43127,43154,43224,43521,43571,43870,43981,44067,44272,44330,44442,44600,44704,44797,44851,45085,45266,45390,45455,45591,45613,45625,45697,45970,46272,46760,47751,48055,48229,48239,48266,48335,48374,48502,48541,48556,48653,48683,48967,49217,49428,49453,49470,49479,49510,49517,49569,49610,49629,49644,49660,49681,49712,49752,49823,50003,50025,50058,50131,50177,50351,50363,50442,50582,50632,50671,50698,50835,50881,50934,50973,51055,51137,51224,51238,51400,51613,51721,51867,51952,52094,52222,52239,52528,52610,52706,52727,53148,53271,53689,53750,53788,53999,54032,54227,54398,54532,54557,54716,54765,54800,54885,55170,55244,55509,55582,55638,55813,55912,55976,56090,56099,56159,56523,56681,56918,56982,57124,57293,57305,57457,57811,58072,58110,58144,58200,58333,58732,59122,59562,59752,59829,60064,60220,60518,60788,61312,61334,61475,61662,61759,61907,61921,62063,62588,62800,62839,63183,63269,63723,63850,63865,63967,64191,64224,64340,64619,64638,64760,65024,65230,65254,65368,65413,65444,65719,65736,65776,65885,65928,65981,66038,66135,66193,66224,66341,66361,66405,66450,66465,66572,66815,66839,66938,66957,67048,67113,67149,67195,67265,67296,67384,67538,67550,67569,67587,67731,67784,67862,67960,68088,68266,68284,68513,68532,68553,68601,68704,68827,68856,69065,69300,69413,69660,69710,69862,69884,70236,70278,70288,70302,70332,70358,70801,70936,70940,71068,71162,71175,71311,71442,71773,71806,71873,71898,71925,71966,72063,72258,72275,72303,72377,72520,72609,72663,72732,72769,72934,73089,73181,73208,73302,73340,73410,73448,73482,73811,73912,74049,74187,74334,74418,74535,74581,74645,74679,74776,74893,75095,75121,75144,75223,75262,75321,75431,75485,75743,75984,76138],"revalidates":[73214],"writeproperties":[21341],"radialprogress":[56727,60890,60990],"situated":[49425],"updateallrenderers":[19146],"light":[24,67,302,1872,2346,2710,5330,5350,5972,6201,6798,6910,7562,7841,7895,9099,9199,9455,9669,9843,9862,9947,9997,10053,10106,10272,10439,10510,10662,12083,12290,12451,12833,12880,13514,14237,14609,14711,15108,18166,18239,18346,18455,20265,20427,21230,21490,21699,22013,22116,22147,22200,22234,22723,23273,23408,23428,23626,23747,24489,24519,25525,26705,26715,26782,26787,26792,26800,26807,26841,26911,26934,26951,26998,27041,27063,27081,27104,27114,27129,27169,27173,27190,27214,27266,27291,27301,27311,27319,27328,27340,27466,27481,27490,27506,27569,27747,27758,28895,29485,30129,31886,32104,32293,32739,33022,34865,34990,36123,36397,36459,36568,36632,36679,37413,37585,37639,37795,38306,38346,38384,38435,38660,39096,39996,40620,41343,41753,42262,42364,42392,42547,42713,42729,42754,42769,42792,42810,43113,43126,43145,43149,43177,43528,43893,43968,44447,44576,44627,45194,45588,46196,46515,46550,46717,47067,47666,48231,48290,49423,49483,49505,49515,49562,49609,49626,49636,49720,50396,50452,50712,51312,52485,54180,55872,62018,65220,66006,68671,68825,69058,70238,71592,71657,71805,71823,71856,72246,72440,72751,72800,73933,74272,74421,75662],"advertise":[4356,66423],"loader_filename":[73944,74100],"execution":[564,3508,6133,6344,6370,6427,6475,10697,10718,18130,18254,18620,19028,19657,21052,21295,21937,22860,23626,24969,26359,26375,28168,28394,28464,30364,30912,33399,33782,35383,35649,35701,36055,37261,38738,38944,40606,44293,47250,49285,51965,57809,57943,61496,66465,66616,67592,72916,73176,73639,74218,74337,74631,74791],"pool":[4566,5260,6121,8568,29267,33103,33428,36233,54896,57995,59085],"parent's":[9386,14700,24325,29062,59837,65719],"recompressed":[3247],"deserialization":[39899,40561],"broom":[65999],"512x512":[5955,14577,58407],"discovered":[6110,29907],"mau":[22358,53500],"beforerowsgui":[52464],"recognise":[2776,8302],"keyframe's":[2429],"setclientready":[66275],"noupm":[21036],"matworld":[44886],"getdirectoryname":[19483],"limitations":[206,253,509,890,909,1516,1599,5261,5729,6037,10588,12102,12275,13374,14261,18665,19989,20205,20421,21476,22107,23453,24638,25246,25734,25741,25835,27091,27180,27294,27308,27926,28945,29012,29341,30290,30903,32705,34712,34890,34955,37280,38297,38491,39509,39727,44987,45565,46827,48227,48529,50154,50173,50367,50618,51072,52012,52485,52610,52730,59189,61417,66826,66860,66880,66906,66929,72090,72116,72200,72287,72725,72997,73447,73902,76036],"settle":[8570],"setuitookiteventsystemoverride":[58173],"transport":[11011,11214,11228,16869,17720,20232,22958,29550,31476,36547,66428,71823,74780],"faithfully":[10092],"editortool":[71636],"indexes":[40734,40767,41356,41529],"arc":[8563,9737,11661,22204,32411,58515,60680,60969],"greatly":[2439,3470,6810,21294,27329,34840,41911,42946,43457,43484,72927],"networktransport":[10992,11004,66114,66403,68682],"devicedefinition_addfeaturewithusage":[75533],"packetsize":[66157],"gl4":[25270,30293],"unityeditor":[1734,2784,2906,3105,3493,3526,3604,3701,3742,4718,6327,7367,8655,14089,19460,20050,20796,20871,20940,21118,22205,25931,26729,30521,35525,38822,38992,40372,40458,43326,44212,48385,48690,49928,51433,51626,52323,54936,54994,55092,55195,55289,55351,55379,55412,55677,55756,55830,55934,56000,56151,56228,56286,56353,56431,56486,56521,56648,56815,56993,57335,57610,58236,58603,58769,59027,59922,60140,60176,60440,60577,60729,60855,61209,61637,62137,62355,62511,62689,64472,64493,64799,64940,65009,65025,65272,65397,65417,65436,65448,65462,65480,65494,65505,65822,65869,68630,68837,68877,69082,69330,69436,69522,69679,70460,73419,74069,74307],"webglsupport":[73559,73920],"selecteditem":[59468],"scscene":[36340],"getusermedia":[73115],"usesloadstoreactions":[19780],"gchandle":[26160],"backgroundimage":[54601,57659,59474,61572,64754],"checkreadandthrow":[26115,26182,26249],"#808000":[63610],"multi_compile_particles":[10158,32951,44586],"tracked":[3493,9386,9519,18760,23942,27929,33660,36232,40002,41954,52590,68611,68782,70734,75092,75109,75587,75744,76141],"rpcs":[66411],"spatialize":[269,5191,7777],"getvulkandeviceextensions":[75891],"sek":[53668],"ada":[40748],"androidcreatesymbols":[1740],"nausea":[19286],"'m_shadowcamera":[44962],"filldevicedefinition":[75509],"unitymain":[1792,66896],"‑ignorecompilererrors":[21053],"hdroutputsettings":[24509,37936],"ceiltoint":[27393],"bumper":[76105],"appdelegate":[49762],"lightprobegroup":[10105,15183,27341],"requestsubshadowmaprendering":[37825],"params":[21051,26153,52563,74557],"onstartclient":[10839,66307],"waitforsignal":[35737],"'custom":[51166],"does":[164,190,502,890,1107,1230,1961,2286,2363,2459,2643,2990,3249,3306,3344,3430,3453,3500,3553,3580,3690,3723,3812,3859,3890,3923,4130,4286,4357,4392,4584,4663,4956,5019,5239,5286,5939,6061,6146,6318,6718,6754,6815,7128,7284,7366,7673,7816,7865,7897,8080,8120,8133,8192,8302,8373,8407,8569,8587,8888,9013,9103,9224,9261,9321,9329,9518,9589,9859,9905,9936,9999,10080,10206,10439,10513,10606,10726,10769,10796,11039,11075,11150,11175,11193,11247,11284,11299,11306,11329,11332,11376,11435,11520,12785,12881,12993,13127,13203,13238,13363,13400,13456,13545,13601,13749,13790,13811,13824,13869,14123,14520,14547,14560,14597,14694,14764,14794,15711,15831,18058,18178,18229,18354,18377,18575,18665,18749,18905,19027,19302,19513,19979,20124,20240,20403,20450,20574,20702,20787,21054,21181,21230,21302,21433,21453,22090,22122,22128,22144,22244,22327,23402,23435,23543,24098,24573,24660,24728,24744,24969,25113,25162,25263,25734,25847,25920,26263,26710,26807,26908,26947,26987,27089,27214,27314,27986,28390,28476,28950,28995,29097,29131,29186,29348,29663,29880,30043,30145,30173,30260,30265,30292,30375,30424,30562,30917,31869,32168,32273,32755,32872,33297,33660,34042,34165,34184,34599,34849,34897,34927,35277,35518,35612,35691,35834,35988,36034,36188,36480,36630,36637,37322,37665,37670,37709,38169,38289,38368,38435,38458,38478,38498,38505,38576,38638,38956,39070,39120,39141,39169,39191,39320,39381,39395,39723,39734,39813,40098,40441,40573,40616,40733,40814,41308,41459,41577,41753,41791,41836,42391,42425,42447,42623,42689,42756,42802,42959,43173,43302,43376,43498,43515,43564,43566,43684,43985,44066,44140,44166,44338,44371,44422,44533,44669,44688,44808,44874,44993,45145,45195,45261,45455,45521,45624,45698,46063,46248,46520,46529,46792,46831,47163,47232,48225,48536,48546,49289,49491,49497,49530,49686,49709,49843,49905,50027,50054,50094,50438,50550,50600,50673,51057,51169,51194,51719,51772,51835,52010,52244,52553,52749,52793,52926,53071,53309,53760,53881,54106,54254,54885,55552,58070,58855,63309,65211,65986,66111,66205,66225,66363,66605,66941,67098,67258,67265,67358,67560,67633,67706,67733,67756,68086,68352,68492,68544,68622,68809,69898,70014,70477,70755,70830,70871,71077,71128,71190,71570,71597,71681,71806,71856,72275,72302,72384,72737,72880,72916,73292,73405,73480,73692,73876,74159,74452,75001,75115,75134,75249,75311,75427,75585],"m_istrigger":[76536],"unregisterthread":[27954],"holding":[8359,20551,25635,34811,43238,50511,50527,60161,60382,60795,62749,65999],"tuned":[6798,11520,45585],"\\unity":[25459,52504,70928],"couple":[3397,21988,39168,42372,46511,49534],"6x6":[14362],"gmail":[4156,67041],"midtones":[34876,38099],"newin20201":[4046,8762,9549,9983,11398,14301,14550,18252,19014,22187,24513,26910,36566,48670,51125,51152,51838,51948,70766,71200,71210],"quad":[339,4766,9427,12596,21201,22865,32264,35246,43175,45284,45807,48481,49852,50369,50897,58467,75460],"moveposition":[36303,37622,38575],"androidlogprint":[1053],"experiment":[8558,26049,31106,33610,37678,41979,52754,54388,65998,71634,74453],"font":[9245,9559,9638,10431,13989,15125,17642,23213,24150,24728,25036,34992,39402,40047,45633,49817,52520,54153,54383,54579,54612,54718,57166,57381,58109,58265,58273,58368,58434,58651,58799,59315,61466,61969,62015,62054,62451,62566,62674,63237,63697,63982,64160,64452,64825,65757,65808,65981,73451],"ray":[6723,6880,9966,10012,14149,14959,18334,19285,22116,22870,23627,26647,29601,33498,33743,34860,35310,37892,42012,58559,71564,74287,75088],"arguably":[5922],"xrsdkmyproviderlibraryname":[75879],"j":[7141,56779,71528,73295],"sends":[434,1383,3810,4819,5039,6725,9401,10794,10832,11075,11261,11283,21052,26486,26919,27984,30331,35088,40001,40103,40151,43319,44535,49282,55816,55909,55987,57808,57891,57994,59753,60791,61488,67383,68202,68272,70936,72364,72521,72917,73674,74039,75503],"fine’s":[6042],"filterstoapply":[60662],"desk":[4418],"snaps":[8546,11253,11277],"panini":[34874,38110],"unreliable":[33444,35364,36343,52597,73687],"mytreeasset":[52363],"overlapcollider":[35312],"ivybridge":[30288],"gfxdeviceworker":[1800],"#faf0e6":[63591],"reverberation":[7615,7718,7739,7771],"meshcompression":[27720],"drawers":[17925,20916,21382,54186,55512,58734,74139],"releasemesh":[75795],"getparameterautosend":[10797],"population":[22406,58304,58372,58680],"plugs":[75901],"contexts":[12268,12578,20608,20733,29995,33612,33760,34318,35760,43223,66203,71090,71644,73115,73496,75242],"#e8e8e8":[63289],"gripbutton":[76112],"uploadonly":[74159],"#bc8f8f":[63628],"tranasaction":[67538],"gametime":[33919],"unitywebrequestmultimedia":[68188,72586],"adaptation":[38090],"changeeventtestwindow":[55751],"center":[140,2382,4155,7092,7211,7243,7696,7952,8036,8154,8199,8501,8875,9211,9754,9870,10135,10503,11328,11353,11487,11791,12111,12698,12785,13096,13137,13241,13642,13765,13881,13987,14681,14952,15031,18611,22070,22496,24300,24747,24772,25751,26919,27054,27389,30141,32402,32905,32917,33532,33640,34778,38652,39249,39382,39468,43592,46418,48515,48880,50612,52233,52388,52744,54304,54723,57362,58517,59301,59890,62009,62211,62463,62577,64090,65986,67025,67850,71787,72178,73263,73959,75106,75576,76138],"1024x1024":[5955,14372,26991],"authorities":[4386,69901,70191],"batcher":[5698,5807,6915,20240,20394,21739,23362,23381,30334,38221,41830,45058,48984,49308],"aircraft":[49517],"encourages":[57628],"sentence":[4141],"adaptiveperformance":[16051,31300,31396],"surround":[257,4737,31716,44363,47258,49852],"custom2":[32921,62170],"explaining":[4313,6689,67049,75157],"bodyposition":[25630],"confusing":[3865,25492,39255,42014,44876,66200],"webglcontextattributes":[73433],"instance’s":[39922],"indexing":[13378,20340,35180,40722,41322,41370,41459,73448],"setscheduledendtime":[73069],"combine":[234,282,2917,3246,3331,3371,3546,6135,11511,14321,17925,18501,18612,20393,20692,21525,27072,27209,27214,27267,27293,27760,28596,28916,29906,30330,32396,36817,37373,37556,38403,40083,40204,41167,41335,41451,42352,42691,43602,44500,45202,45271,48894,49702,49723,50146,53933,55604,61610,63205,63922,64026,65719,65747,66842,68121,74081],"3cmbymurc":[69939],"convenience":[7,4884,5378,5522,6201,8319,11461,18182,22904,33088,33462,36753,53713,64757,68383],"iphone11":[19859],"ungrabbing":[25670],"codegen":[30894],"tones":[34877],"would":[1957,2088,2709,3247,3306,3411,3468,3750,3830,3861,3881,4459,4573,4997,5061,5158,5184,5491,5640,5758,5802,5810,5945,6046,6102,6128,6281,6287,6439,6841,7167,7199,7217,7794,7866,8065,8510,9225,9260,9354,9488,9675,9712,9772,10082,10456,10586,10794,11086,11314,11520,11624,12699,12809,13042,13830,13873,13962,14332,14763,14951,15006,17980,17998,18256,18797,19006,19030,19480,20047,20154,20636,20880,21134,21325,22032,22128,22193,22615,23275,23573,24031,24461,24776,24794,24909,25096,25345,25598,26081,26448,26711,26784,27506,27536,27691,27814,28426,28875,29060,29182,29434,29485,30038,30179,31857,32073,32180,32230,32609,32632,32776,32923,33409,33583,34184,34221,34639,34645,34884,34919,34956,35794,36107,36203,37685,37742,38393,38660,39277,39438,39508,39798,39947,40000,40288,40966,41202,43022,43121,43260,43997,44165,44646,45055,45128,45195,45215,45620,45705,45852,46417,47262,47971,48009,48693,49425,49465,49473,49510,49517,49562,49629,49655,49830,50542,50696,51545,51601,51760,51812,52010,52099,52566,52721,52860,52877,53148,53782,54262,54430,57843,59670,59872,60544,61557,62016,65694,65999,66159,66245,66365,66395,66617,67708,68607,69333,69439,71022,71872,72344,73405,73577,73717,73984,74898,75092,75587],"opaque":[104,6492,8078,8131,10633,12908,13499,13724,13797,14135,14395,18354,19936,20395,20725,21434,23101,23299,23635,23676,29525,29710,30182,31883,32303,36177,37982,41764,42262,42798,42876,43200,43422,43592,44032,44069,44392,45627,45721,46014,46146,46539,46772,46841,47199,48022,49470,49568,52182,52488,72723],"navigators":[52577],"trackpad":[20561,39241,39258,54499,66948,76103],"minmaxcurve":[31764],"auto_convert_prices":[53604],"what's":[2952,11916,12180,12367,12555,19220,26007,29090,34306,34392,36286,39492,39966,46772,47306,49543,53306,59868,67982,70340,70806,71543,74225,74413,75451],"newpreviouslyselected":[24833],"replay":[25889],"liberationsans":[58421],"meshtype":[48821],"index++":[19528],"tetrahedron":[9515,10097,27322,27336],"anchormin":[24733],"spriteguid":[48494],"unity_interface_api":[27829,27970,29930,75267,75753,75921],"billboardassets":[7879],"assetpath":[19477,40465,48756,57435,68967,69214],"dropdownclicked":[30633],"resolveallscenehandles":[68589],"pointerpressed":[74733],"listentrytemplate":[59421],"shadowcustomresolution":[43167],"rt0":[38358],"reordering":[13622,25412,52348],"activecolorspace":[27532],"discrepancies":[35264,36296,72957],"redistributing":[25859],"onunitsphere":[13026],"phase":[3769,3818,4744,5189,7439,7456,10575,11621,18229,20023,21168,21938,23040,26077,29595,31366,33414,35719,36340,40441,50965,57812,57854,60497,62115,62604,65335,70174,71012],"copyasset":[3619,3677],"lowresolution":[9974],"3s":[62461,62564,62681,62901],"contentcontainer":[54557,65203],"spherical":[7253,8582,8620,9890,10083,10108,13120,13645,14711,14832,15023,22235,22876,27467,32319,32402,33606,35252,36015,38384,42405,42749,45588,47121,47711,50612],"videoclip":[14829,15230,72470,72561,72615],"console_entry_error_small":[63444],"1newin20171":[32744],"calll":[34698],"headless":[19030,19129,19174,19281,19634,26689,28607,66583],"treats":[3433,11536,13062,13604,18389,24517,28509,34541,36204,38297,38751,40358,44560,50357,50368,50877,63064,64470,68901,69139,69740,69901,71070],"webhook":[67897],"window_button_max":[63500],"lighting":[27,250,5328,5350,5832,6796,6907,7883,8074,8647,8913,9462,9892,9907,9986,10072,10107,10252,10617,12829,12885,13469,13771,13799,13914,14587,17118,18239,19140,19450,20615,21534,22107,22124,22131,22734,23289,23405,23443,23595,24497,24598,25229,26784,26787,26793,26795,26805,26811,26923,26936,26992,27015,27055,27061,27076,27081,27098,27114,27127,27166,27175,27185,27212,27264,27293,27303,27314,27324,27331,27467,27483,27498,27508,27522,27567,27748,27756,29484,29750,30354,30512,31886,32114,32264,32738,32944,34361,34860,35129,36032,36125,36180,36532,36569,36632,36678,37412,37559,37635,37704,37723,37752,38243,38287,38346,38396,38433,38941,39309,41745,42363,42391,42548,42699,42742,42775,42804,42810,43144,43202,43484,43524,43556,43603,43895,43917,43969,44051,44344,44421,44809,45002,45184,45266,45585,45629,45845,46137,46504,46527,46712,47102,47185,48267,49421,49468,49491,49496,49524,49562,49570,49609,49720,49734,50387,50452,50514,50615,50932,68006,68670,68712,68824,68851,69057,69354,69458,71591,71805,71812,71855,71991,72515,72741,72806,74280],"800ms":[62900],"initializers":[18530,30910],"instantiateprefab":[40687],"_bumpmap":[46179,47461],"atop":[46773],"prior":[457,1569,6105,6688,6984,9100,14882,18245,21540,27692,28115,31368,42356,45403,50362,68651,68697,70539,73907],"customfoldoutyoffset":[52379],"addforce":[9363,21163,25778,38464],"assetmetadata":[15245],"stadia":[5714,37774,43943],"animations":[370,1865,1894,1924,1960,1966,1982,2040,2059,2063,2183,2189,2211,2213,2234,2238,2257,2334,2373,2422,3460,4025,4313,4511,5265,6226,6265,6290,6318,6320,6989,7014,7154,7178,7927,9134,12279,12769,13457,13816,14474,14728,16330,16453,17077,17118,18051,21156,21322,21435,21505,21570,22063,22460,24670,26012,27813,29094,29130,29732,29742,29769,29903,31590,32701,32882,33912,34194,37403,37568,37668,37683,38436,39827,40615,42796,48319,48336,49644,52046,54169,54210,60637,62194,62495,62669,62853,68579,71760],"drawicon":[48188],"materialpropertyblockexample":[23364],"satisfactory":[32400,59531,71790],"b+":[45291],"rote":[75083],"d_scrollup":[63475],"fence":[14965,35738],"window":[12,27,122,177,250,265,445,544,626,643,652,682,851,902,1027,1107,1117,1148,1184,1210,1339,1493,1536,1591,1645,1729,1837,1862,1889,1914,1943,1952,1980,2008,2044,2060,2197,2214,2220,2250,2263,2282,2357,2362,2387,2421,2592,2772,2971,3020,3233,3494,3724,3773,3852,3897,3906,3963,3998,4026,4219,4245,4474,4513,4730,4747,4791,4805,5024,5078,5176,5191,5268,5328,6222,6351,6393,6461,6821,6995,7002,7180,7358,7483,7624,7815,7826,7843,7934,7984,8074,8137,8281,8615,8706,8814,8972,9091,9133,9225,9267,9566,9675,9758,9765,9903,9915,9989,10211,10409,10491,10659,10691,10723,10796,11041,11176,11293,11323,11339,11358,11401,11434,11463,11529,11649,11667,11715,12274,12316,12472,12744,12768,12850,12931,13064,13148,13368,13477,13587,13625,13713,13747,13799,13805,13902,14125,14218,14471,14573,14675,14720,14781,14788,14975,15998,16564,17045,17312,17944,17977,18072,18111,18171,18221,18246,18325,18384,18389,18432,18476,18757,18896,18927,18970,19036,19039,19061,19164,19241,19323,19369,19455,19650,19944,20062,20095,20539,20591,20627,20652,20864,20918,21052,21328,21445,21684,21694,21836,21890,21975,21998,22036,22071,22112,22127,22158,22245,22483,23444,23489,23538,23562,23668,24018,24521,24522,24644,24960,25041,25106,25161,25188,25240,25310,25350,25396,25518,25633,25916,25979,26056,26073,26606,26680,26716,26785,26811,26940,26951,27015,27098,27121,27127,27168,27288,27296,27318,27555,27594,27608,27739,27752,27759,27763,27924,27956,28090,28149,28328,28404,28685,28848,28867,29026,29090,29343,29556,29744,29824,29898,30038,30049,30135,30190,30227,30274,30341,30453,30507,30515,30845,30987,31010,31234,31386,31592,31638,32141,32233,32243,32847,33417,33636,33846,33905,34217,34258,34339,34465,34536,34675,34692,34891,34911,34949,34962,35191,35247,35266,35367,35404,35465,35498,35607,35623,35729,35768,35800,35903,35926,35960,35999,36045,36189,36199,36333,36355,36433,36461,36581,36685,36692,37268,37573,37620,37641,37667,37704,37723,37924,38288,38323,38404,38533,38549,38583,38632,38714,38880,38913,38961,39024,39074,39126,39177,39311,39352,39818,39906,40002,40230,40506,40683,40759,40795,40966,41163,41300,41393,41417,41442,41486,41496,41534,41543,41595,41676,41699,41711,41891,41965,42031,42134,42209,42740,42775,42985,43032,43155,43182,43281,43489,43524,44344,44449,44587,44688,45091,47374,48174,48233,48366,48510,48560,48585,48618,48643,48680,48865,49335,49414,49558,49647,49660,49730,49778,49849,49910,50061,50372,50534,50567,50584,50620,50657,50757,51004,51078,51099,51131,51179,51207,51231,51258,51344,51529,51552,51579,51609,51825,51843,51851,51867,51992,52082,52176,52325,52484,52599,52745,52769,53139,53341,53695,53848,54010,54211,54306,54397,54499,54539,54545,54592,54625,54634,54676,54701,54922,55074,55172,55246,55319,55369,55508,55578,55674,55753,55828,55861,55922,55995,56113,56132,56212,56273,56327,56394,56475,56519,56590,56703,56792,56795,56982,57122,57337,57919,58155,58234,58274,58410,58435,58586,58662,58793,58996,59277,59577,59806,59904,60138,60348,60367,60570,60610,60650,60733,60837,61201,61310,61480,61515,61570,61594,61891,61928,61979,62051,62134,62338,62505,62637,62639,62743,63085,63106,63221,63344,64017,64271,64444,64512,64548,64564,64587,64611,64795,64809,64842,64860,64909,64915,65024,65050,65092,65178,65268,65313,65538,65553,65568,65588,65608,65628,65649,65701,65775,65902,66012,66105,66894,66986,67079,67161,67663,67764,67963,68545,68600,68712,68814,68857,69046,69354,69458,69529,69753,69768,69808,69956,70104,70262,70288,70305,70342,70356,70595,70762,70771,70807,70867,70917,70937,70943,71115,71120,71124,71175,71186,71203,71212,71261,71288,71300,71326,71354,71371,71402,71427,71446,71471,71487,71501,71516,71562,71598,71605,71658,71724,71848,71869,71898,71905,72048,72258,72416,72468,72501,72795,72834,72895,72992,73137,73164,73263,73299,73317,73386,73504,73701,73979,74049,74153,74229,74418,74564,74655,74678,74757,74859,74935,74984,75057,75140,75196,75359,75440,76267],"throughout":[2781,3457,3839,4130,4357,6806,13115,13854,21294,24121,26452,27333,32365,32729,32853,34897,37647,40358,42548,53142,66421,74907],"frombase64string":[67829],"getblendshapeweight":[6233],"event's":[32760,61490,62608],"blunderbuss":[32702],"editorgui":[20698,20854,20893,20949,49985,52432,59596],"select":[17,59,82,137,177,229,260,380,446,545,593,623,643,688,740,851,901,947,1091,1113,1121,1134,1150,1282,1293,1338,1393,1492,1536,1659,1729,1826,1837,1954,1972,2034,2060,2192,2244,2254,2263,2332,2362,2387,2419,2423,2470,2530,2611,2775,3005,3503,3515,3774,3855,3885,3902,3912,3950,3979,4033,4054,4169,4195,4219,4320,4408,4416,4423,4455,4472,4497,4738,4822,5080,5190,5271,5329,5718,6222,6263,6283,6346,6393,6462,6737,6802,7000,7152,7181,7203,7246,7504,7567,7574,7624,7657,7682,7734,7814,7826,7849,7935,7961,7985,8002,8165,8265,8281,8375,8615,8706,8767,9002,9027,9055,9167,9267,9297,9430,9537,9554,9727,9765,9918,10012,10063,10210,10339,10424,10491,10695,10721,11176,11245,11341,11380,11403,11466,11481,11505,11547,11596,11657,11785,12087,12288,12317,12505,12703,12723,12776,12865,13127,13163,13203,13252,13355,13382,13555,13587,13626,13673,13712,13720,13747,13793,13805,13834,13843,13901,13998,14020,14080,14219,14343,14475,14503,14538,14572,14664,14787,14842,14983,15818,17370,17946,17977,18071,18119,18194,18221,18325,18348,18366,18469,18954,18970,19021,19061,19102,19201,19369,19384,19443,19522,19621,19636,19669,20078,20105,20211,20459,20545,20592,20626,20666,20807,21010,21060,21253,21405,21445,21566,21685,21734,21851,21890,21975,21998,22035,22080,22114,22133,22227,22640,23404,23450,23490,23611,23695,24100,24533,24669,24794,24903,24929,24950,25048,25105,25170,25188,25240,25326,25350,25411,25447,25546,25766,25816,25907,25939,26030,26613,26629,26802,26859,26952,26976,27018,27098,27121,27203,27251,27284,27318,27550,27583,27664,27752,27759,27767,27920,27943,28088,28150,28205,28327,28361,28400,28677,28768,28851,28878,28967,29027,29249,29353,29413,29820,29849,30189,30233,30284,30382,30450,30483,30503,30825,30846,30859,31014,31679,32243,32434,32648,32676,32754,32872,33072,33550,33581,33643,34264,34346,34472,34582,34660,34755,34771,34935,34948,34992,35193,35247,35266,35367,35498,35623,35696,35770,35797,35911,35926,35977,36037,36133,36184,36221,36335,36366,36446,36473,36598,36685,36694,37270,37518,37587,37620,37642,37667,38545,38579,38628,38711,38858,38931,38958,39024,39092,39125,39185,39231,39253,39308,39351,39508,39825,39977,40242,40619,40662,40759,40800,40842,41236,41297,41325,41372,41413,41425,41482,41491,41544,41605,41677,41701,41711,41955,42190,42740,42783,42940,42967,43040,43128,43211,43466,43539,44315,47179,48055,48225,48244,48269,48341,48364,48506,48526,48562,48574,48605,48618,48643,48680,48852,48865,49196,49335,49410,49462,49558,49616,49655,49696,49763,49914,50061,50148,50304,50347,50366,50413,50448,50510,50519,50527,50536,50549,50557,50582,50620,50712,50909,51008,51082,51120,51131,51159,51180,51231,51262,51345,51540,51564,51825,51866,52105,52124,52174,52198,52222,52465,52516,52577,52682,52746,52769,52838,52909,52948,52958,53084,53266,53789,54212,54306,54398,54500,54538,54551,54583,54635,54676,54700,54729,54819,54953,55053,55149,55222,55298,55362,55407,55674,55753,55860,56037,56202,56265,56320,56382,56441,56516,56532,56636,56716,56792,56810,57118,57182,57317,57551,57560,57972,58106,58274,58404,58435,58586,58662,58777,59021,59387,59782,59993,60161,60506,60575,60650,60740,60843,61203,61309,61480,61498,61556,61568,61599,61890,61928,62050,62134,62349,62506,62654,62831,62853,63073,63106,63199,64035,64174,64468,64489,64528,64563,64586,64841,64859,64936,64955,64998,65061,65178,65220,65244,65268,65789,65875,66015,66116,66391,66593,66875,66933,66953,66991,67044,67073,67214,67242,67525,67680,67868,67907,68536,68550,68713,68830,69033,69075,69383,69487,69778,69825,70104,70263,70290,70306,70344,70406,70932,70943,71178,71186,71203,71217,71254,71262,71290,71300,71328,71344,71371,71403,71427,71473,71483,71502,71540,71562,71608,71645,71679,71749,71848,71902,71909,71982,72178,72225,72379,72470,72501,72836,72853,72896,72962,72991,73156,73317,73392,73960,74054,74187,74326,74418,74531,74591,74619,74759,74819,74856,74893,74925,74986,75040,75085,75136,75252,75342],"acquire":[4028,4384,5637,19644,75434,75786,75992],"office":[66720],"cmds":[2928],"winning":[15902],"webhooks":[67896],"finishtransaction":[67290,67540],"tendencies":[53760],"avi":[6715,10733,72622,72713],"3dtexture":[14092],"succinct":[75520],"unity_initalize_output":[43360],"m_negativewarning":[56164],"meshgenerationcontext":[58466,60678,60888,60988],"blasting":[9718],"marshaling":[40608,72192],"likely":[75,1378,3299,3474,4355,4628,6199,8080,8213,8514,9588,10082,11319,12988,13036,16151,23138,23454,24737,24983,25083,26714,27490,27520,27823,28474,28916,29181,29360,30185,30243,30267,30878,31795,32262,33307,33457,36338,36691,37667,38293,38474,41795,41830,41894,43022,44839,45565,46771,50002,52597,54120,54736,61328,66115,70496,71469,72866,73011,73693,75980,76086],"mpv":[10764],"#dda0dd":[63623],"requireimplementorsattribute":[28589],"commonusages":[76096],"philosophical":[53737],"synchronize":[10788,10825,11246,11271,11576,12884,16453,17045,22976,26478,55557,56695,58066,61976,67153,70965,74203,75440],"essential":[2067,8065,18929,21202,26452,27490,29759,40643],"unity_2019_3_or_newer":[7381],"resubmit":[4064],"presence":[72717,73417,75211,76118],"pcss":[37823],"reachable":[28448,48225,66520],"dropdownbutton":[49985,59628],"realize":[74907],"unitycg":[6521,8728,10162,14051,14168,23337,27134,27469,31940,32953,43429,43871,43910,44022,44072,44365,44402,44848,45166,47122,47207,47907],"transform_tex":[1690,10188,32986,47222],"recognizable":[75520],"functionality":[506,725,1404,1497,2200,2990,3862,4313,4450,4510,4809,5118,6211,6483,6691,8496,9197,9243,9670,9845,9939,10600,10614,11221,11303,11462,11522,11916,12157,12367,12555,12831,13454,13780,13977,15701,16707,16843,17092,17312,17424,17437,17974,18388,18409,18439,19220,20003,20098,20459,20561,21181,21624,22012,22203,22673,23439,23625,23900,24370,24468,25923,26716,28378,28862,28971,29164,29614,29934,31012,31649,31729,32074,32589,32708,33009,34306,34392,34511,34637,34708,34828,35178,36108,36189,36241,36554,36633,37227,37346,37505,37527,38428,38842,39435,39764,40155,41673,41876,42109,42346,42356,42614,42686,42687,42802,43566,43684,43728,43917,43955,44338,44384,44422,44581,44915,45085,45261,45403,45846,47985,48177,48618,48984,50087,50604,50647,50709,50993,51556,51774,51948,52348,53756,54547,54739,57556,58036,58856,60506,64757,65025,65738,65924,65965,65979,66037,66194,66225,66543,66990,66994,67061,67107,67183,67341,67560,67706,67862,69716,70756,70959,71017,71173,71417,71495,72730,73029,73431,73499,73902,74204,74232,75187,75518],"indestru":[40746],"highlight":[9248,13926,14567,17945,18149,18476,20106,21688,22900,26848,28885,34963,35723,36109,36430,36449,36684,39127,39292,41629,41949,42373,42817,44450,46196,49643,62025,63305,64244,75148],"160x160":[4298],"deeplink":[19399],"selectable":[2008,9014,22165,24794,37444,38889,39803,39822,59085,60397,60810,65925],"regarding":[234,21476,51155,51245,55631,66800],"combines":[5726,6819,9956,10574,14348,20378,21249,22910,26798,27214,27288,29166,33135,34785,36763,43727,46418,49354,49668,49737,50367,63918,64335,72344,74077,75366,75534],"prewarming":[9513,42101,42203,42943,43023,74141],"cginc":[1704,6521,6708,8728,8905,10162,14051,14168,23337,27134,27469,29506,31893,32953,43376,43871,43910,43959,44072,44402,45166,45599,46510,46651,46944,47108,47207,47907],"unityaudiospatializerdata":[4749,5189],"dropped":[11303,14797,32727,35920,51088,51760,66153,68953,69199,72258,75354],"m_finalgathercontrastthreshold":[76388],"alphatomask":[42670,43652],"sdk’s":[72916],"customdependency":[19471],"i'm":[24065],"mercury":[59960],"hostfxr":[70362],"darkgray":[63532],"saying":[3242,72722],"0”":[10527],"trilinear":[8669,8833,13219,50129,50693],"onstateik":[21340],"unityplayer":[1071,1384,1438,33842,66820,66895,72868,74611,74654],"onscroll":[49897],"stateless":[16933],"“cacheserver”":[25113],"conveniently":[1886],"sh":[10109,19623,25451,27468,37801,38384,42366,42392,44015,45194,46524,46793,47122,66588],"viewer's":[6754],"happen":[3719,3785,4911,6102,7350,7476,7970,8174,8271,8389,8774,9039,9723,10010,10584,10793,10911,12733,12888,14509,14726,18255,19944,21937,25113,25631,27992,28051,28062,28278,29212,29434,29784,29924,30001,32760,32864,33308,33396,33457,34379,35126,35735,35885,35920,35958,36086,37354,37632,37724,38501,39167,39879,40643,41845,52033,52548,53996,54281,55554,55731,66261,67136,68683,68955,69201,72402,72926,74583],"overlay'":[39433],"comparisonoperationback":[45863],"serializefield":[20017,26629,36757,39858,49920,52325,54942,55099,55201,55294,55357,55591,56139,56359,56436,56643,57516,59197,59487,59926,60179,61645,62359,62515,62694,72242],"shaderwarmup":[34212,42206],"spent":[6034,6133,11813,12349,13939,18257,20243,21896,22369,25998,26056,27520,34279,34493,35357,35645,35687,35969,36020,36120,36184,36380,36439],"play’s":[53071],"#afeeee":[63617],"strength":[4715,6965,7979,8256,8569,9157,9217,9882,10398,11445,11486,12757,13278,13295,13655,13916,15026,25523,26894,31710,32215,36610,49613,49628,49637,50511,50521,50528,50629,72331],"f":[172,2440,4043,7137,7184,18280,20559,21981,22770,25491,29898,36060,36717,39305,40335,41429,45829,50642,52023,53107,55021,57843,67056,67528,68914,69155,71133,71315,71524,71902,73278],"comprises":[9137,43037,49714],"radeonpro":[23452,36608],"buildoptions":[450,567,6336,6375,6435,6479,28173,74085,74636,74795],"authentication":[4239,11887,12647,17217,18819,31407,31605,33065,52796,53100,53445,54091,66434,67919,69986,70070,70094,70137,70175,70184,70491,70629,70967,74825],"applysettings":[49924],"gradientfieldsnippet":[64687],"aka":[53441,54046],"progress__label":[60914,61014],"tethers":[8286],"assetbundle's":[3493,68279],"controller":[845,1887,1938,1951,1967,1995,2006,2064,2209,2212,2219,2234,2238,2251,2366,2970,3277,4520,6703,6774,6793,6999,7144,7177,7810,7930,8159,8191,9768,11093,11250,12105,13805,13820,14717,17972,18105,21332,22093,22472,24745,24792,25234,25347,25633,25694,25755,25762,25823,29104,29126,29906,30049,32883,33979,35500,37576,37834,38441,39381,39466,39644,39827,40000,40624,49647,50710,50965,51040,52727,52742,52754,54209,54235,57276,59449,65922,66998,67064,67300,67338,67355,67630,67712,72940,73472,74405,74429,75076,75109,75226,75320,75403,75646,76100],"setapplepromotionalpurchaseinterceptor":[67483],"dataurl":[73409,74020,74102],"yesy":[37998],"dynamiccolor":[60632],"appendcommandlineargument":[759],"loadfrommemoryasync":[3350],"inputsubsystem_settrackingboundary":[75602],"absolute\\npos\\n25":[61241],"laying":[11509,36432,39587,40141],"manufacturer’s":[75520],"landforms":[18404],"nails":[32702],"commonupdate":[33483],"approximations":[11510,38487,45565],"datatype":[26736,67019,67230,67841],"planeteditor":[54992],"bammcwxvy2fsag9zddaefw0xotazmtiwmtixmzrafw0yotazmdkwmtixmzrambqx":[69908],"m_colorshift":[40496],"continuing":[38864,40027,40117,59872,67507],"mpg":[6715,10733,72627],"upm_enable_git_lfs_cache":[69819,70731],"scanners":[12671],"#my":[64363],"summarized":[4678],"outside":[881,1131,1227,1370,1396,1569,3833,3858,4520,5012,5946,6194,6542,7061,7368,7765,7793,8085,8401,11661,11724,12180,12358,12555,13456,13763,13791,14549,14871,18235,18317,18394,18958,19220,19316,19336,19364,19591,19984,20224,21029,22032,22553,24794,25153,26011,26485,26926,27654,27681,28281,28794,28877,29241,29780,30054,30164,30260,30352,30492,31743,32289,32341,32607,32757,32866,33125,33548,34292,34392,34511,34637,34645,36016,36553,36855,37563,38242,38888,39508,39672,40271,41865,42011,42818,43303,43374,44799,45977,47026,47951,48624,48642,49305,49527,50491,53172,53721,54492,54557,55642,56125,58101,58559,60417,62216,62829,64151,66003,66395,66455,68916,69157,70315,70650,71323,71661,71874,72110,72132,72201,74661,74978,75034,75582],"firework":[32136],"preference":[12044,20079,22353,27550,31646,34964,36477,37564,40764,47335,49406,49627,49638,51078,53293,67584,68826,69071,69768,69808,74324],"roads":[50537,51621],"people":[812,1822,1832,2353,2958,18563,22421,27813,28135,28796,34375,42014,53581,66200,66335,66374,68807,72942,75466],"weak":[9313],"countmaterial":[36245],"archiveandcompress":[2898],"istyle":[62276,62799,62970],"blinnphong":[46510,46620,46761,46844],"linux":[239,1723,2730,4226,5705,6345,6434,7511,8098,8406,11692,13435,14013,14357,16330,17558,17675,17690,17705,19067,19091,19128,19271,19302,19649,21019,21947,24471,25314,25451,27136,27528,27597,27636,27670,27769,28095,28151,28669,29829,30282,31092,31460,33793,33878,34236,34240,34328,34452,34576,34655,35870,36165,36558,37769,38417,40665,43211,43943,44055,49740,50086,50165,50639,66565,66953,69702,69839,69864,69951,70199,70422,70776,71349,71748,72620,72887,73084,73125,73689,74635,75343],"usr":[34672],"linestrip":[341],"crate":[20420],"modifies":[2014,3719,14756,18186,20632,22596,25329,31802,34101,38244,39120,43654,47028,49496,50512,51889,55557,57958,58844,71095,72995,73249],"soon":[1471,1510,2297,2668,4431,7482,10368,10768,12119,15814,18357,21031,22151,23890,24983,26354,29614,35933,36627,38820,47454,49178,50652,54644,61327,70756,73030],"antialiased":[4979,58388],"damper":[8253,8510,9693,13656,14955],"recycle":[20880,32183,54901,59085,64890,75817],"xyz":[6617,8592,9542,9838,10186,11256,11279,11815,14190,14476,32065,32914,34281,43876,44902,46361,46856,47362,47927,51137,51166,51238,51368],"chip":[1771,14336,23152,72699],"loadedassets":[3410],"builtinpaintmaterialpasses":[68886,69122],"unity_hdr_on":[44584],"pointermovehandler":[56898],"keyword":[3954,3983,7365,9490,10385,12358,17955,20247,21764,23257,23547,28071,28266,31020,31618,34292,34578,40609,40879,41289,41898,42024,42044,42109,42346,42941,42948,43047,44510,45134,62258,62855,63506,63720,64155,68995,69246,71232,72201,74592,75687],"fidelity":[6843,6874,9229,9464,9883,17118,23606,24597,26798,27215,27296,29714,38250,38266,38289,47454,72728,74978],"behavior":[18,183,721,787,889,1035,1576,1894,1960,2115,2220,3013,3348,3675,3799,4527,4865,5774,6150,6431,6502,6683,6817,6942,7494,7620,7673,8203,8232,8353,8436,9080,9500,9688,9951,10014,10369,11609,11653,11903,12105,12397,12666,12931,13166,13267,13400,13755,13837,14517,14956,15014,15022,15862,17932,17976,17998,18357,19653,20049,20074,20096,20179,20271,20880,21150,21156,21545,21913,22044,22139,22301,23399,23554,23673,23940,24535,24733,24740,24983,25733,25869,26567,26569,26594,26646,26797,27174,27186,27213,27265,27292,27302,28457,28474,29556,30893,32223,32254,32412,32922,33398,33573,33655,33754,34961,35210,35696,35876,36846,37236,37346,37498,37527,38459,38531,38545,38579,38625,38643,38888,39088,39885,39994,40091,41786,41861,41876,42044,42109,43002,43016,44526,44682,45182,45206,45300,45449,46039,48361,48535,48591,48852,48868,49038,49713,50642,50955,51078,51588,51613,51832,52458,52766,55649,56018,56720,56881,57330,57555,57810,57864,58017,58177,58585,59828,60212,60540,60837,61685,62100,62130,62607,62798,63704,64341,64450,65333,65737,67095,68725,68905,69145,69334,69398,69440,69975,70571,71093,72462,72996,73195,73204,73270,73368,73433,73480,73899,74153,74280,76300],"bid":[67477],"“health":[67178],"'western'":[25031],"examplesourcegenerator":[38693],"atmosphere":[9196,9669,9898,22812,42769,72806],"unityxrinputupdatetype":[75543],"warmup":[42207,74262],"rendertextureformats":[8444],"detailsampledistance":[76413],"d_linked":[63458],"creations":[4879,70952],"radio":[4883,7528,7536,22580,25448,64697,65063,65081],"paddingleft":[35537,57086],"plurals":[16470],"multiply":[5221,10454,11494,11515,12833,13024,13808,14149,21323,31710,32133,32394,33722,37291,37987,42793,43832,45291,47292,49549,50559,61540,74208],"cancelpermissionrequest":[74389],"logmsg":[6099],"loudspeakers":[4956],"webgl_mobile":[74077],"updatedevicestate":[75543],"combobuild":[74073],"codecoveragemenuitem":[68833,69078],"suite":[2952,12808,16850,17000,17268,17370,17398,23202,28485,37505,48223,66916,70096,72910],"programmatically":[3538,12664,26658,43320,67197,74139],"reflection_type2":[44506],"s3":[14464],"usemockbillingsystem":[67748],"myworkerthreadstat":[76056],"preserved":[14868,18282,18449,19156,28509,28874,73398],"preloadmanager":[6145],"launchertemplate":[12005,23481],"sample’s":[35896,36054],"collidersearches":[40738],"risk":[3492,26113,28476,30380,30864,33087,37287,39961,50344,67598,70225,71016],"player’s":[9894,17326,18165,34933,53882,66234,66364],"screenpos":[45769,46250,46809],"conceptual":[64209],"9999f":[56138],"manifest's":[70386],"pitfall":[71809],"algorithms":[3569,6322,8402,10581,36340,36753,37225],"breakforce":[26576],"appsvirtualprotectfromappcreatefilemappingfromappopenfilemappingfromappmapviewoffilefromapp":[12657],"cpu":[1295,1331,1731,1761,3580,4811,5193,5944,6059,6139,6683,6802,7483,7568,7575,7674,7870,9466,9976,9998,11534,11808,12349,12885,13417,14295,16919,18224,18257,18510,18616,19128,19138,19635,20380,20403,20457,21110,21514,21604,21896,22687,23433,23568,25980,26056,26271,26472,26495,26714,27073,27469,27741,27993,28158,29292,29367,29440,29471,29663,30175,30225,30265,30321,30345,30868,31863,33074,33086,33391,33399,33421,33482,33506,34278,34486,34578,34675,34994,35397,35612,35679,35691,35876,35901,35945,35958,35974,36019,36118,36204,36335,36354,36473,36572,37639,37846,38330,38406,38558,38588,41843,41962,42060,42181,42364,43173,43457,44297,44377,48023,48329,49309,49669,50002,50056,50067,50168,50397,50676,50996,51975,66651,68212,68708,68953,69199,69351,69455,72143,72209,72318,72715,72917,73690,74283,74624,74768],"struggles":[18519],"primary":[1087,6198,9856,14673,15034,21182,22100,25194,26218,26688,27486,28605,29289,29617,29842,33472,38464,38889,39545,41780,43617,43690,44084,44500,45278,47611,49479,52128,52218,52496,53039,66796,68376,68458,69732,75588,75901,76108],"automating":[25447],"newpackage":[69645],"garbage":[1470,6028,9420,18516,25064,25980,26252,27929,27992,30866,33073,33085,33380,33397,33420,33448,34160,35695,36030,36236,36522,36785,39929,40165,51999,63221,66929,68130,72869,73629,74847],"#absright":[35118],"weapons":[4773,7487,21173,34194,67169],"rider":[7369,16361,19649,28376,31430,35087,38680,40660],"withholding":[4230,67154],"grantcredits":[67103],"visitset":[37141],"d_toggle_mixed_bg_focus":[63495],"colocated":[10574],"reparented":[13614],"wreck":[25596],"combinations":[2117,2547,4773,15866,22013,22770,23677,24055,27210,39553,41911,42809,42941,42949,43223,44510,50153,70243,71627,73454,74214],"validators":[57329,70384],"maincamera":[50314,76449],"idea":[1483,3468,4811,4881,6833,18364,21154,24792,24906,25292,26005,30664,35711,36204,42811,43188,45740,47611,49518,49642,49819,52597,54713,66187,66337],"maximizes":[13706],"equipped":[64350],"holes":[12827,26934,38051,49569,50481,50508,50570,58556,71774],"sometimes":[69,158,1960,2034,2172,2197,2439,3739,4387,4719,6034,6325,6648,6723,7841,8618,8975,9137,9368,10003,10357,11916,12180,12367,12555,12937,13036,18129,18481,19220,20577,21164,21743,21964,22850,24741,25096,25399,25928,26084,26510,27060,27088,27552,27691,28781,29731,30375,31701,33215,33453,33785,34306,34392,34511,34918,35344,35837,36337,36454,38820,39254,39899,40616,41876,41917,43002,43016,43118,43177,44891,45419,45852,46057,46511,47371,49468,49516,49564,50687,52042,52530,52583,54223,58288,63681,64355,66193,66374,67400,70246,70424,70693,71873,72323,72930,73172,73571,74977,75146],"keywords":[3508,4204,4267,8489,9488,15920,15944,15960,15976,15991,16014,16029,16053,16069,16100,16130,16161,16177,16199,16221,16250,16267,16304,16339,16356,16416,16432,16447,16463,16480,16500,16520,16536,16573,16588,16861,16953,16978,17009,17024,17039,17055,17071,17086,17102,17144,17162,17197,17555,17570,17585,17600,17618,17636,17653,17671,17687,17702,17717,17782,17797,17812,17828,17844,17859,17874,17889,17905,17921,17945,18114,21760,22888,23246,23569,31017,31618,34963,40731,40794,41316,41382,41808,41896,41986,42022,42043,42108,42347,42432,42951,43001,43017,43105,44362,44501,44991,45210,45284,45459,45599,47258,49381,53291,62230,62872,63504,63715,63717,64155,68996,69247,70310,70834,71103],"offsets":[6318,8036,9178,12896,13186,33532,34811,37821,44234,58365,59855,61914,74206],"believe":[3881],"visualizing":[4980,6509,10518,27014,30199,35580,47949],"toe":[71786],"serializable":[3834,20918,21659,22638,34985,35433,35569,39867,52247,52551,54977,55252,55621,57113,58863,59193,66942,74447,76224],"cacti":[52137],"capitalizes":[39618],"#005500":[62014],"recycles":[32185,54900],"cginc_":[46524],"strip's":[13041],"ripple":[2269,2410,8786,48309],"smpmirroroncepoint":[45252],"findindex":[48458],"aftertemplateinstantiation":[38989],"recompress":[3247,3301,5978],"my_symbol":[3116],"macosstandalone":[3044],"punctuation":[29686],"_tess":[46881],"trackmeshwritedata":[61087],"renderpipeline":[38204,40155,45966,48911,49029,49183,49294,68593],"getcontenttabs":[26722],"pollution":[4641],"graphicraycaster":[39536],"regional":[16470,66393],"3f":[8691,57083],"mapped":[1997,9139,9769,9970,10557,14256,18087,21534,21604,25763,29633,31743,32341,32607,32918,42372,42444,42453,42530,42535,43709,43900,46320,47517,49471,49473,49520,51052,58156,65885,68925,69168,75208,76120],"asyncreadmanagermetricsfilters":[4707],"thb":[53670],"heightscalefactor":[20485],"rgb10_a2":[8455],"stripped":[6096,26072,28484,38283,42133,42190,42934,48180,52570,70572,73395,74785,75682],"moon":[26926,43543],"library’s":[6024,33153],"commonly":[137,314,3481,4504,5952,8616,9220,9260,9368,10443,12691,12990,13017,13369,14073,14220,15859,16330,18681,20767,22292,24462,26953,27039,28868,34785,34901,36242,36597,37683,39662,40528,42007,43915,44788,46484,46780,47906,49522,50685,51951,57827,64973,64986,65268,65512,66193,66570,72616,72799,73270,74168,75654,76138],"initialmodule":[48139],"exportassetpath1":[21032],"removeat":[48461,55136],"secret":[27678,53437,67774,67919],"_screenparams":[47088],"stylesheet":[54358,54635,54676,54701,54842,54854,54876,56102,56705,56831,57159,58710,60155,64017],"b3qgq0ewhhcnmdyxmtewmdawmdawwhcnmzexmtewmdawmdawwjblmqswcqydvqqg":[69928],"reimporting":[3665,19035,25104,31635,66556],"'somettype":[52609],"++face":[8676],"removefromclasslist":[57255,57488,62540],"maintaining":[3441,6213,6807,11570,13573,26594,28797,32219,60213,66802,72942,73270],"eligibility":[27706,30502],"editortoolbardropdown":[30523,55486],"fog_exp2":[44587],"might":[158,177,214,564,840,890,1107,1131,1352,1570,1653,1761,1822,1832,1886,1912,1996,2088,2190,2275,2699,2985,3247,3311,3585,3719,3729,3785,3852,3879,3949,4016,4091,4155,4223,4286,4357,4370,4390,4448,4503,4520,4639,4719,4801,4960,5050,5162,5193,5911,6057,6291,6325,6360,6427,6475,6737,6758,6831,6858,7167,7316,7391,7492,7841,7944,8065,8206,8317,8437,8563,9258,9368,9998,10080,10261,10342,10572,10609,10768,11078,11376,11510,11600,11895,12154,12279,12349,12903,13001,13063,13417,13457,13621,13899,14006,14224,14342,14598,14712,14718,14849,14962,15711,15850,18055,18267,18376,18414,18454,18485,18609,18670,18752,18756,18828,19005,19028,19045,19129,19454,19637,20130,20181,20222,20339,20577,20594,21029,21327,21514,21930,21988,22067,22139,22468,23427,24169,24276,24466,24471,24521,24669,24727,24906,24916,24983,25096,25178,25187,25262,25492,25597,25734,25845,25887,26109,26294,26374,26482,26689,26703,26712,26932,27025,27309,27322,27333,27554,27639,27678,27813,28052,28110,28168,28249,28443,28568,28606,28797,28856,28897,29182,29331,29663,29714,29759,29784,29835,29863,29973,30010,30135,30174,30184,30345,30500,30525,30864,31009,31642,31720,31745,31760,31838,32650,32701,33081,33088,33394,33401,33421,33458,33470,33506,33535,33583,33782,33877,34293,34361,34503,34596,34640,34653,34908,34932,34939,34985,35261,35695,35795,35920,35944,36007,36094,36172,36234,36303,36360,36454,36463,36593,37272,37281,37365,37501,37526,37624,37668,37688,37702,38298,38336,38462,38498,38515,38844,38966,39097,39170,39311,39723,39899,40180,40557,41529,41691,41830,41863,41876,42185,42792,43031,43139,43165,43172,43205,43281,43335,43618,43972,44079,44097,44269,44660,44758,44848,45213,45294,45419,45618,46250,46511,47253,48335,48529,48642,48703,48875,48940,49179,49363,49424,49481,49517,49629,49651,49706,49837,50016,50058,50065,50153,50164,50288,50355,50361,50432,50513,50522,50604,50672,50684,50941,51052,51214,51966,52493,52548,52735,52746,52754,53172,53307,54120,54556,54885,54895,55060,55554,56674,57190,57589,57845,57918,58015,58066,58253,58285,58425,58446,58823,59021,59541,59556,59872,60497,61967,62030,62193,62841,63729,63921,64328,66006,66158,66183,66225,66337,66365,66383,66450,66598,66812,66861,66881,66907,67055,67639,67864,68041,68505,68546,68567,68690,68812,68850,69041,69296,69372,69402,69512,69757,69793,70077,70109,70143,70230,70259,70313,70363,70734,70756,70839,70904,71016,71127,71191,71215,71282,71293,71366,71391,71423,71459,71497,71547,71665,71763,71811,71871,72323,72402,72497,72643,72755,72861,72890,72926,73015,73024,73030,73121,73176,73208,73288,73299,73324,73360,73388,73445,73478,73499,73633,73661,73683,73704,73811,74045,74224,74412,74498,74535,74583,74627,74788,74827,74978,75002,75034,75076,75114,75264,75310,75446,75766,75874,76141],"grandchild":[60544],"profilercounterdescriptor":[35436,35486,35572],"#4f4f4f":[63386],"20px":[56876,57177,57404,62245,62566,62674,63245,64198,65041,65808],"reports":[1570,3819,5297,17627,18503,18927,21938,22355,24920,25898,26252,29162,29616,30440,35142,36098,36203,49817,50652,52038,52478,52599,66648,66918,69861,70175,70582,75215,75474,76148],"correspondance":[8318],"unregisters":[5768,27954],"planes’":[31718],"webgl_compressed_texture_astc":[14455],"operational":[25526,52768],"describs":[55495],"#overlay":[59890],"owns":[10794,11069,34164,54104,60610,67351,67625],"go":[82,132,223,250,470,477,1129,1314,1512,1535,1615,2004,2260,2421,2771,3254,3411,3697,3916,3979,4032,4058,4156,4169,4215,4235,4256,4462,4466,4589,5334,6346,6393,6841,7797,7827,8353,9702,9765,9989,10209,10721,11525,11604,11645,12316,12437,13587,13702,13818,14571,14965,15022,17944,17989,18116,18339,18357,19020,19060,19323,19341,19355,19368,19650,20120,20211,20220,20340,20413,20624,20631,21010,21874,22036,22112,22128,22227,23281,23489,24797,24929,24954,25046,25147,25765,25953,26253,26614,26695,27099,27136,27550,27638,27824,28133,28191,28383,28469,28773,29154,29819,30108,30284,30845,30859,31009,31625,32243,33638,34962,35230,35398,35680,35797,35960,36462,36581,36685,36768,37269,37667,38711,38906,39127,39163,39828,40359,40617,40666,40762,41953,42631,43142,44312,44781,45252,45409,45952,47170,47233,48070,48511,48562,48581,48865,49384,49459,49642,49694,50010,50094,51003,51078,51123,51141,51163,51206,51259,51773,51793,52682,52891,52939,53035,53085,53452,53695,53786,54408,54496,54540,54593,54897,58150,61496,62042,63089,64552,66160,66382,66706,67039,67484,67764,67963,68535,69294,69382,69486,70044,70268,70472,70761,71116,71225,71675,71747,71970,72177,72379,72500,72834,72852,73156,73296,73352,73624,73910,74420,74530,74618,74818,74855,74902,74940,75047,75140,75388],"receivegi":[22153,27041,27756,35059,49720],"trygetinputdevices":[76301],"group’s":[13590],"vector3field":[55459,55537,59709,64728,65583,65603,65606,65645,65665,69324,69430],"navigationmoveevent":[58164,60500],"mathf_sqrt_m289":[72030],"compares":[362,1770,5994,7029,24784,25113,45866,50561,53481,55552,61497,61542,70985,72426,73449],"differentiate":[4206,7314,36235,59868],"playfullscreenmovie":[10762,48201],"stopclient":[66256],"circleformation":[25553],"metal1v2":[12232],"assetbundledirectory":[3531],"placed":[94,248,2001,2332,3006,3488,3719,3827,4713,5443,5587,5810,6806,8110,9712,10081,11333,13100,14469,15835,17942,18599,20545,20876,20923,21170,22200,22675,23797,24048,24371,25588,26925,27785,29695,34884,34933,38358,39382,39509,39610,39796,41370,45267,46754,48178,48318,49423,49536,49643,49738,49852,51146,51166,51371,51710,51785,51826,51849,54769,57703,57849,58074,59033,64083,66159,71806,72259,72482],"unityxrinputfeaturedefinition":[75568],"delta":[7031,9793,32167,35718,38659,47101,51958,72256],"setactivetool":[59630],"txtobj":[68969,69216],"dir_z":[5230],"rootnamespace":[9110],"gameobject’s":[9334,10337,13589,14692,14831,18389,21673,22239,26668,27023,32453,35058,35411,36691,37453,38462,38490,38532,39150,39322,40534,41784,49697,50454,71874],"iapdemo":[67720],"vscrollbarvalue":[23999],"structured":[1995,6948,8427,45508,52777,54223,64337,64973,64986],"trackselectionhandler":[2583],"character's":[1932,1996,2037,2249,6792,7152,7927,8065,8201,13696,15864,21164,22492,25634,29891,49476,49510,49542,49629,51966,54333,58344,59275,71775],"monobehavior":[39015,40760,66495,74219],"platforms'":[6384,28182,74645],"prohibitively":[43174],"boot":[21034,29327],"crimson":[63527],"gameplayerprefab":[11126],"shadevertexlights":[43905],"2darray":[14031,45078,45480],"subdivided":[47028],"collider’s":[9024,18969,22277,32781,38483],"#number":[72016],"'_cameramotionvectorstexture'":[44086],"userdatatasks":[12675],"jumpforce":[25773],"mirroronce":[45254],"kerning":[17642,58358,58459],"powers":[10455,23179,25261,25826,62528],"precompile":[6032],"item’s":[25353,36060],"“project":[68801],"miic+zccaeogawibagijao0u6hvjnbvjma0gcsqgsib3dqebbquambqxejaqbgnv":[69907],"disable":[229,255,269,556,602,680,722,1501,1537,1582,1649,1899,2103,4588,4803,5328,5719,5943,7015,7238,7366,7661,7924,8058,8503,8861,9347,10058,10329,10399,10569,10838,11176,11417,11462,11553,11717,12098,12276,12346,12819,12898,13241,13417,13482,13706,13810,13913,14851,14973,15857,17092,17986,17998,18309,20079,20119,20336,20608,21009,21029,21392,21455,21840,22122,22127,22165,22985,23445,23558,24535,24759,24864,24981,25115,25292,25696,25860,26139,27060,27184,27300,27321,27519,27583,27638,28224,28445,29148,29353,29695,29769,29868,30174,30284,30341,30426,30867,31616,31816,32175,32251,32777,33074,33387,33401,33651,34204,34258,34465,34607,34983,35381,35641,35696,35809,36086,36231,36543,36594,37642,37798,38452,38497,38615,38715,38860,39087,39160,39256,41326,41375,41460,41899,41995,42023,42044,42133,42786,42989,43128,44019,44079,44097,44184,44343,44502,45807,48320,48531,48553,48590,48852,49345,49621,50147,50355,50432,50534,50593,50689,50965,51038,51389,52104,53294,53997,54501,55916,56079,57822,58173,59021,60650,61477,61553,62073,62799,66598,67749,67921,68257,68836,68857,69066,69747,70230,71026,71150,71173,71517,71597,71748,71850,71856,71991,72283,72372,72403,72475,72741,72840,73030,73138,73228,73253,73334,73442,73480,73716,74335,74787,75023],"brightest":[9463,26859,38384,43203,47125],"‘unsafe’":[3024,5720,7365,19241,34427,34525],"lato":[58674],"testobjectwithserializedanimationcurve":[15309],"setinputcount":[34110],"line__":[39624],"keyup":[59803],"foam":[38055],"nunit":[3084,18852,66489],"gizmos":[7134,11556,21360,22052,22188,22221,22790,23707,25420,31681,33665,34791,39128,40434,40542,48187,51404,51552,51889,71806,71992,72782,74325],"died":[229,32174],"membervariable":[26468],"scaled":[4902,6649,7314,8003,8117,8632,10593,12706,13093,13112,13645,14712,20438,22224,24781,24909,31718,32167,32219,39405,39724,43114,47095,50593,50687,52034,72276],"ps5":[37903,45444],"ignored":[720,3078,3538,7950,8152,9262,13614,13640,13940,31706,35323,40343,43128,44140,44248,49511,52761,53071,59855,62856,68264,68869,69103,71567,75017,75155],"intense":[38404,50453,71811],"management”":[6142],"curation":[4387],"hex":[21676,49549,49856,58341,58455,61467,63505,63685,73934],"c1":[18233,20299],"incur":[35888],"one":[7,82,122,183,229,251,261,343,478,500,518,631,810,979,1031,1113,1124,1156,1254,1331,1356,1407,1514,1556,1582,1672,1744,1812,1862,1888,1919,1924,1960,1970,1987,2044,2069,2192,2204,2240,2325,2372,2459,2643,2699,2842,2898,2984,3247,3306,3352,3446,3466,3501,3569,3591,3682,3738,3823,3859,3870,3879,3908,3953,3976,4062,4169,4217,4303,4370,4418,4459,4477,4493,4515,4534,4636,4660,4792,4841,4879,5026,5080,5181,5267,5270,5353,5499,5711,5727,5775,5920,5989,6076,6113,6263,6283,6320,6382,6409,6488,6750,6811,6858,7121,7184,7217,7364,7579,7623,7752,7771,7859,7907,7929,8057,8104,8128,8188,8212,8237,8296,8419,8577,8598,8892,9079,9137,9218,9364,9466,9594,9621,9827,9908,10003,10068,10116,10204,10392,10501,10580,10633,10722,10764,10808,11001,11088,11109,11150,11193,11221,11264,11272,11299,11382,11434,11461,11519,11604,11653,11740,12098,12586,12779,12851,12885,12968,13032,13113,13131,13247,13306,13392,13477,13693,13735,13751,13826,13855,13877,13962,14162,14241,14347,14560,14578,14680,14717,14795,14916,15020,15835,16579,17045,17925,17978,17980,18050,18076,18188,18225,18339,18440,18454,18504,18575,18759,18818,18896,18922,19036,19045,19239,19430,19545,19620,19675,19987,20060,20237,20380,20432,20460,20569,20595,20631,20675,20905,21029,21150,21175,21192,21319,21475,21676,21832,21843,21883,22005,22029,22071,22130,22178,22228,22343,23264,23393,23431,23483,23583,23615,23707,23798,23940,24079,24244,24275,24471,24505,24574,24609,24676,24774,24792,24901,24923,24952,25096,25101,25225,25307,25316,25345,25365,25399,25490,25497,25633,25696,25849,25868,25904,26117,26206,26263,26292,26374,26449,26472,26494,26569,26690,26800,26878,26916,27114,27262,27266,27337,27490,27604,27648,27685,27820,28058,28067,28135,28180,28351,28427,28501,28753,28874,28952,28987,29022,29102,29150,29473,29614,29724,29817,29834,29860,29906,30054,30097,30141,30207,30270,30332,30399,30443,30493,30501,30520,30839,30868,31621,31624,31650,31721,31858,31992,32170,32264,32344,32388,32610,32729,32747,32847,32923,33070,33092,33399,33537,33581,33659,33760,33820,34040,34238,34379,34523,34539,34708,34758,34788,34845,34918,34994,35236,35250,35269,35398,35429,35466,35640,35718,35778,35888,35943,35997,36054,36346,36393,36490,36678,36694,37376,37623,37689,37728,37770,38247,38262,38292,38330,38355,38382,38433,38437,38478,38503,38549,38583,38632,38719,38846,38932,38946,39051,39090,39126,39217,39254,39310,39347,39412,39487,39603,39659,39765,39837,39888,40083,40091,40176,40442,40453,40616,41182,41336,41370,41458,41653,41681,41710,41753,41786,41843,41884,41988,42025,42106,42110,42264,42329,42372,42393,42440,42469,42515,42521,42550,42691,42827,42838,42849,42870,42878,42898,42924,43006,43016,43194,43222,43477,43493,43578,43694,43752,43857,43928,44013,44061,44097,44205,44328,44507,44600,44638,44663,44682,44839,45077,45194,45220,45276,45397,45439,45531,45588,45627,45693,45858,45932,46009,46513,46550,46781,46922,47114,47163,47244,47906,48124,48185,48335,48370,48547,48683,48863,48982,49150,49201,49381,49412,49449,49453,49470,49479,49517,49635,49643,49655,49666,49668,49771,49828,49907,50001,50018,50064,50094,50145,50200,50288,50338,50355,50367,50432,50534,50601,50651,50672,50693,50835,50889,50945,50965,51009,51137,51158,51235,51616,51650,51869,51960,52103,52243,52584,52727,52754,52922,52952,53093,53496,53824,54219,54243,54296,54446,54548,54588,54638,54723,54762,54800,55125,55550,55630,55859,55976,56119,56222,56619,56799,57134,57288,57320,57337,57592,57840,58036,58149,58310,58369,58456,58497,58822,59064,59275,59630,59872,60064,60209,60369,60556,60664,60771,60990,61196,61300,61381,61443,61488,61523,62009,62054,62111,62210,62610,62783,62866,63071,63107,63244,63667,63723,63807,63865,63922,64182,64205,64350,64403,64418,64457,64528,64859,64936,65081,65178,65368,65776,65923,66007,66036,66112,66189,66224,66349,66382,66467,66564,66829,66842,66882,66912,66936,67036,67082,67148,67166,67772,67903,68070,68110,68263,68325,68352,68559,68622,68741,68829,68853,69062,69377,69481,69568,69735,69776,69823,69877,69904,69987,70236,70278,70297,70400,70686,70773,70829,71011,71139,71175,71205,71221,71278,71297,71324,71345,71434,71459,71468,71498,71511,71598,71766,71808,71847,71863,71908,72179,72247,72296,72445,72521,72609,72677,72706,72737,72754,72789,72841,72921,73002,73086,73157,73234,73413,73561,73662,73670,73702,73751,74077,74335,74496,74583,74643,74927,75006,75037,75076,75218,75237,75264,75309,75393,75444,75501,75740,75909,76090,76192],"unloadasync":[3432,27690],"propertyvisitor":[36745,36821,36824,36976,37234],"#bcbcbc":[63267],"100mb":[912,1315,51031],"extraneous":[10725,71541],"endfoldoutheadergroup":[59635],"toggle__input":[61774],"correction":[4792,11521,11537,13166,13391,27507,27538,27553,27591],"sheets":[16470,24054,48630,51141,54296,54590,54632,54703,54877,58652,61964,62054,63091,63681,63774,63808,64337,64373,64552,65761,65913],"lifecycle_start":[75273,75927],"walk":[1912,1924,1957,2063,2191,2211,2215,6281,6285,6314,6774,6792,7178,7931,8203,18104,22460,27814,38660,48344,52172,55088,66722,72788],"stating":[25678,72037],"csharp_7_3_or_newer":[33825],"pike":[27468],"coverage":[889,17624,19647,21077,25733,31091,31365,31415,42670,43653,44133,50380,50466,53001,68739,68826,69071],"gaseous":[50941],"setdelegate":[36671],"toggle3":[61676],"apex":[6762,35256],"matchmaking":[66219,66422,68043],"poly":[21524,47028,49519,52595],"maxcomputebufferinputsvertex":[19763],"sight":[51245],"blockrgb":[14362],"skinned":[285,2063,8280,9603,10107,10498,10606,10613,12392,13450,17964,20392,21609,22822,24110,24718,26004,29148,29344,29391,29726,32454,35755,36029,38142,38338,49320,71764,74342,74895],"counter’s":[35449,35692],"indicates":[555,1649,1785,1958,3432,5127,5199,5284,6267,6294,6473,7390,7594,7603,7611,7634,7643,7653,7833,8771,9859,10001,10347,11588,11648,11718,12153,12356,12450,12908,13133,15851,17999,19240,19674,20073,20225,20812,21007,21659,21749,22161,23503,26357,26456,28170,28448,28886,29918,30042,30164,31758,32065,32254,32777,32849,33500,33666,33781,33907,34290,34371,34779,35714,36077,36223,36336,36493,37019,37723,38876,39756,41559,42053,43978,44078,44851,45093,45519,45784,48132,50489,50913,52009,52249,52517,52566,53271,54419,58072,60778,63697,64205,65890,66667,68208,70384,70607,70814,70875,71310,71490,72299,72752,74524,74790],"backed":[25960,26127,45074,74199,75623],"tire's":[14967],"unselecttab":[57242],"removed":[2834,3430,3865,3895,4046,4404,4850,6125,8386,9397,11075,12033,15042,19153,19471,20634,22403,25465,26077,26710,27172,27559,27589,28994,31686,32171,33197,34157,34892,34955,35321,36328,37671,40234,40918,45289,46272,46800,47268,48194,48628,51194,52649,54644,56317,56378,56681,62532,67853,68545,68593,68805,68888,69124,69367,69471,69639,70283,70332,71433,74217,74315,74663,75744],"disables":[466,1539,2202,4065,6383,6445,7777,7912,9482,9953,10010,10514,10570,11075,14133,19144,20000,20075,21036,21333,21711,21840,21881,22045,22848,23264,26883,27089,28181,30341,31670,31733,31749,31767,31804,31825,31842,32080,32095,32119,32206,32295,32330,32348,32596,32619,32639,32667,32714,32749,32893,33078,34204,35030,36481,37715,38841,42025,42413,42674,42766,43653,43729,44120,44132,45037,45589,45970,46785,48030,48591,50391,50443,66224,67903,69737,71884,72430,72776,72874,72983,73321,73812,74644,74749,74844],"graphicssettings":[6508,9530,15065,38926,49183,49351],"alphablend":[59625],"getassets":[1234],"printfloat":[39349],"multi_compile_fwdadd":[44573],"predictively":[11546],"robin":[29161,66248],"disadvantages":[24498,33458,41792,41884,43020],"hideinput":[29695],"secondarybutton":[76110],"copying":[1843,2196,3675,5496,6472,9794,26107,26278,29128,34924,51770,52647,70224,70245,70339,74787],"scenesaving":[39019],"onstateenter":[21336],"our":[234,2004,2069,2954,5645,6931,9599,10196,14903,16151,17062,17092,18360,24769,24792,26788,27083,27506,30634,32067,34161,34919,35441,42811,46158,46874,47234,49640,49945,52066,52179,52542,56610,58782,59890,59957,60587,66439,66623,67245,68049,68073,68777,72787,72912],"kminheight":[27354],"circlecast":[35311],"demonstrating":[2425,73916],"ipostgenerategradleandroidproject":[23524,24608],"xrsdkpreinit":[75874],"singlelineheight":[49984,52379,59696,63244],"screen’s":[12047,23028],"brands":[701,4130,50341],"renderingstarted":[74705],"vram":[23428,24499,36573],"1920x720":[52722],"npotsupport":[19760],"blockedchatmessages":[12655],"numerous":[1997,37668],"unitylibrary":[993,1746,23481,66816],"allobjects":[59061],"scenetemplatepath":[38979],"lowpassfilterfactor":[29651],"simplecarcontroller":[74433],"disguise":[43133],"turret":[2415,8563],"powerful":[1766,1890,2937,3724,5044,6024,10937,13175,17642,25521,27083,31659,32917,35959,37639,38402,38437,52558,54208,56097,64745,65512,68050,72247,73121,74136],"interpolators10":[45479],"m_hdr":[76503],"suffixed":[49785],"compare":[3450,13042,19653,20636,20937,24769,30901,33512,35092,35250,35404,35786,36199,36465,38262,40991,41541,43984,45249,45851,48147,53481,66777,68945,69189,71773,72319,72690],"nolightmap":[23274,31888,46788,46844,47826],"hairs":[49476],"converter":[6924,74278],"actionable":[16527,36068],"chain":[149,1031,3436,4792,4820,4883,5122,8897,9715,12475,22500,25622,26375,34287,34343,34469,41194,42876,58118,58484,63973,64182,66721,68626,75412],"beginchangecheck":[20854,49993,59596],"instances":[1407,3436,3729,5067,5350,5563,5725,5734,5805,6068,6944,9427,10705,11044,11176,11314,13306,13620,18432,20242,20424,20583,20625,21026,21327,22036,22130,22333,23256,23378,25418,25529,26004,26113,26256,26450,27025,27035,27654,28421,28947,29216,30035,30897,34254,34335,34461,34882,34912,34923,36061,36213,36753,40563,41892,42311,48192,48381,48921,49908,50367,50454,51607,51815,53009,54573,54747,55309,57801,57926,59388,59580,60161,60588,61354,61486,62189,64367,64756,66193,66355,66375,67144,67570,68197,68530,68555,71952,74311,75262,76071],"a13":[14455],"you'd":[4740,4881,8065,46825,53939,56315,66600,67948],"dirt":[18354,31797],"hpalphakey":[57000],"d_dropdown_toggle":[63450],"dark":[29,2253,9875,10096,10651,12290,12451,23747,24489,26784,27024,27303,28890,34865,34991,36459,38405,43191,49437,49465,49484,49535,55872,56212,57050,62014,70239,73933],"playablegraph":[22522,33901,34154,34180,34188],"groklaw":[41309],"myscheduledjob":[26321],"revalidate":[73211],"assemblycopyright":[40367],"wireless":[634,836,1754,25696,52697,52757],"isolated":[3502,6999,10651,48514],"intent":[19318,39553,45662,66820,69334,69440,74907,75368],"xcodeproj":[49783,68720],"unconstrained":[39458,39559],"smprepeatpoint":[45252],"twopanesplitview":[59008],"drifting":[8554,38672],"restrict":[73,239,7841,8558,12217,13854,23219,26547,26557,26580,34261,34342,34468,37480,44547,45911,57300,57303,65001,73600],"editortools":[30589],"directtextureloadbegin":[27726],"pipelne":[9197,9243,9670,12831,46138],"cullinggroup’s":[6152],"constructed":[5019,8303,18571,22018,24897,26127,36792,52247,55582],"ve":[54527,58062,60907,61007],"updatezones1":[8884],"initializeunity":[74674],"hashes":[3265,3795,6063,12399,19512,29140,35129,68700,70677,73192,74156],"localspace":[51732],"7f":[8691],"customguistyle":[9656],"rasterizes":[44133],"website's":[4174,40646],"hulls":[38485],"limitation":[910,7045,8118,29919,32130,33599,42884,42904],"list":[5,260,418,446,546,594,624,905,948,1000,1160,1243,1355,1385,1537,1704,2037,2247,2297,2323,2424,2525,2586,2630,2871,2940,3086,3252,3448,3508,3538,3597,3726,3793,3846,3906,3949,3989,4033,4196,4203,4219,4256,4396,4417,4437,4475,4502,4703,4774,4799,4960,5024,5080,5273,5965,5987,6125,6266,6297,6317,6321,6346,6400,6463,6965,6989,7004,7385,7662,7682,7815,8032,8865,9002,9109,9167,9257,9297,9333,9488,9727,9795,9927,10398,10485,10561,10711,10723,10780,10994,11060,11092,11203,11360,11406,11439,11803,12206,12301,12599,12757,12781,13066,13163,13278,13295,13374,13555,13596,13673,13714,13747,13814,13846,13956,14289,14489,14693,14983,17933,17945,17977,18001,18118,18164,18430,18465,18673,18718,18852,18918,19021,19077,19239,19551,19675,20179,20634,20753,21029,21154,21402,21605,21740,21956,21975,21999,22258,23009,23401,23497,23588,23616,23625,23743,24454,24634,24895,25051,25359,25695,25887,25908,26129,26439,26763,26900,27145,27382,28095,28151,28197,28430,28493,28798,29284,29801,30284,30407,30446,31014,31367,31380,31386,31601,31615,31659,31680,31814,32065,32261,32648,32705,32754,32872,33069,33245,33515,33880,34274,34408,34484,34625,34963,35427,35469,35763,35772,35826,36041,36187,36285,36449,36470,36683,36695,36792,37053,37243,37668,38750,39043,39074,39169,39185,39253,39471,39871,40270,40563,40689,40731,41181,41317,41426,41454,41616,41679,41701,41900,41945,42056,42134,42934,42950,43030,43217,43467,43521,44995,45103,45417,45447,47936,48171,48254,48337,48426,48574,48620,48746,49285,49385,49593,49779,49845,50249,50368,50519,50549,50567,51080,51099,51142,51207,51338,51345,51554,51611,52105,52240,52551,52682,52767,52892,52992,53261,53740,54081,54204,54302,54439,54655,54672,54705,54817,55058,55157,55656,55723,55813,55914,56077,56724,56957,56979,57579,57598,57815,58110,58149,58203,58332,58414,58448,58682,58870,58998,59267,59545,59727,59747,59892,59903,60165,60220,60393,60503,60561,60650,60806,61907,61960,61987,62062,62125,62612,62663,62866,63077,63139,63230,63714,63891,63924,64036,64042,64242,64325,64528,64841,64859,64878,64936,64981,64994,64998,65090,65171,65268,65518,65698,65891,65903,65945,66183,66236,66337,66379,66424,66467,66648,66981,67097,67155,67161,67666,67787,67868,67917,68069,68379,68614,68879,69115,69513,69720,69888,70104,70297,70310,70374,70746,70756,70813,70867,70937,70943,71077,71185,71202,71215,71256,71263,71292,71299,71331,71344,71387,71413,71418,71446,71458,71477,71489,71504,71521,71749,71950,71970,72180,72275,72864,72881,72903,73138,73156,73596,73650,74056,74180,74228,74434,74615,74619,74760,74810,74819,74986,75134,75189,75344,75501,75749,75905,75958,76062,76071,76125],"field_":[39609],"crossing":[27564,43193],"indigo":[63567],"blendshapecount":[6234],"culled":[7674,50460],"surfaceoutputstandardspecular":[46742],"methodname":[21031,34719,36048,72023,73572,74039],"verbosity":[27984,63137],"accordance":[68852,69061],"rectmask2d":[39726],"c3z":[5392,5536,20363],"multiway":[33867],"#99":[66793],"optimisation":[22061,37705,52649],"polygon's":[48524,49525],"regardless":[65,688,1584,1665,1883,2050,2232,2261,2442,3472,3566,4877,5676,6761,6810,7156,8078,8552,9773,10722,11631,12588,12895,13209,13818,18951,18981,19998,21465,21607,22234,22790,23585,24646,25877,28599,30426,31718,31798,32182,32262,32396,33265,34041,35030,36481,37676,38346,38458,39296,39406,39659,39992,42548,43221,44133,45740,45869,48001,48653,49706,51388,51976,52095,54438,55633,55731,57918,58394,61539,64234,66572,68110,69244,69333,69439,69771,69812,70332,71067,71190,71215,71341,71563,71652,71913,73270,73433,73482,74137,74257,75145,76097],"action":[69,229,1056,2131,2461,2594,2697,2745,4326,7135,8326,9009,9048,9173,9303,9739,9799,11824,12359,13170,13569,13681,13866,14995,15865,18065,18255,18376,19407,21170,22005,22080,22345,23768,24030,24895,25588,25764,26577,28984,29784,30047,30345,30661,32174,32771,34293,34503,36998,37478,38816,38820,39137,39298,39385,39614,40598,40768,40777,40796,40820,41297,41349,41409,41438,41482,41492,41534,41646,43209,44836,49642,51374,51529,52046,52754,53285,53858,54249,54661,55671,55825,55923,55983,57032,57814,57923,58132,58231,59163,59583,60435,60515,60572,60776,62762,64444,64752,65132,65466,66016,66492,66951,67272,68853,69062,70872,71136,71183,71278,71297,71343,71391,71423,71498,71511,71538,73486,74182,74304,75080,75116,75144,75783,76097],"certainty":[44133],"cs0649":[19240,34426,34524],"cyclic":[3262,40225,52043],"angles":[253,1893,2047,2353,7344,12970,22292,25622,26863,26971,30149,31710,32366,37280,37321,37617,39253,42811,46597,49453,49524,49609,50691,51174,58517,72334],"requester's":[4485],"age":[22326,32174,32631,32723,32869,40719],"gph":[66798],"velocity":[6273,6298,7298,7620,8291,8527,8590,8598,9318,9697,11262,11495,11534,11602,13239,14955,18224,22598,25571,31839,32078,32116,32170,32252,32340,32358,32371,32609,32659,32890,32917,33670,37621,38027,38491,38510,38542,38576,72337,75635],"dynamicsmanager":[38923],"fk":[29736],"#else":[41800,44539,47895,73963],"selector3":[64331],"interactively":[27082],"cuts":[7588,7597,7606,22586,33547,50956],"billingmode":[17045,67691],"6f86":[70032],"mixer's":[5092,5239],"bezier":[58542],"hasmipmaxlevel":[19778],"remind":[36205],"self":[4544,5154,6807,7594,7603,7611,7634,7643,7653,8341,9884,10013,12690,22567,24195,26263,26790,29891,31635,36091,36450,39960,42530,42535,42540,42545,42575,42580,42585,42590,45318,45632,49852,56764,57286,64090,74247,74901,75365],"propertytype":[20262,20994,55122],"iscenetemplatepipeline":[38989],"royalty":[17912],"extraspacebeforeiconandlabel":[52380],"arrayindex":[44888],"jumbles":[67764],"starting":[65,685,973,1197,2379,2937,3009,3690,4026,4879,5659,7810,8245,8598,8863,11134,11518,12105,13178,13448,14187,14337,17370,18948,19085,19486,21422,23551,24906,26510,29785,29855,31008,31368,32870,33877,34933,35022,35670,36040,38349,39121,39239,39397,39610,40529,41961,44693,45744,47125,47377,48375,51514,51535,52162,52500,52676,54681,56911,57522,58517,64533,65086,65137,66117,66190,66222,66903,67076,68807,70236,70542,70752,70788,70837,72126,72899,72974,75037,75079,75967],"socialexample":[30067],"ottawatab":[57152],"x++":[14109,51486],"resolve":[526,936,988,1721,1843,2054,2702,4391,6105,11534,12008,14501,17045,18909,20197,26357,28252,31600,33503,35092,35264,36296,36792,38851,41462,43298,48058,53783,53992,54808,63683,67147,67688,68070,68644,69009,69244,69307,69413,70382,70734,71037,71541,72201,72423,74182,74592,75414],"kunityxrrendertextureflagsautoresolve":[75422],"componennt":[51064],"kformatr8g8b8_srgb":[50110],"ascii":[9268,25034,58341,58410,58447,73417],"interoperability":[17152,53876,74907],"eventsubscribingexample_registeredpackages":[69653],"setparameterautosend":[10797],"w":[308,2353,4946,6618,8051,9767,19856,20344,21668,25491,25543,34772,39284,39724,43224,43897,43985,44272,44752,44861,45157,46267,47087,47480,47928,48160,58352,60147,61913,76460],"deltatime":[6747,9837,12996,21158,21323,24404,26501,29593,34121,40639,51954,60788,72257,76289],"gamut":[11807,12233,34274,34484],"tn2008":[52599],"unity_standalone_linux":[33798],"stereo_cubemap_render_on":[42170],"m_cpuframetime":[20481],"y++":[14107],"resolves":[1717,11541,23067,23636,28278,36098,36792,38851,44838,48538,55512,64141,69739,70224,70299,71288,72423,74389,74602,75413],"\\library\\scriptassemblies":[71680],"twopanesplitvieworientation":[59068],"git_ssh_command":[70110,70166],"shudder":[32701],"privacypolicy":[53438],"numparams":[4891],"touchinputmodule":[40102],"offering":[2717,3975,6834,13040,17220,32137,72942],"popupcontentexample":[56556],"diedelegate":[10944],"dxf":[153,6699,29754],"100f":[6254,25773,62282],"anchors":[7235,8550,9190,12515,13103,13187,17773,17803,22624,24734,24771,34900,39377,39800,54721,59842,62796],"gameview":[36355],"multibox":[11623],"assemblyb":[3102],"uvw":[45248],"compfront":[45863],"mouseeventbase":[60360],"inputdevicecharacteristics":[76136],"helpdesk":[18665],"reusability":[40179,54175,74173],"mathematics":[16507,31270,31436,37293],"memorysetup":[29285],"mitigate":[20209,72942],"07t11":[66676],"#4c7eff":[63310],"logicalequiv":[43827],"maxsize":[59165],"unity_4lightposy0":[47111],"convex":[6807,7968,9032,10564,15825,15839,25605,33700,35766,38481,50552],"examplecolor":[48951],"registeringpackages":[69621],"wave_hand":[2123],"#ffefd5":[63619],"standardshadermaterialparameteremission":[41772],"padding":[9635,9962,13105,13708,24749,27000,27054,35070,36568,39541,39583,40137,48373,48601,50379,54224,54327,54735,54886,57367,58307,58406,58443,59320,62200,62480,63432,63675,64069,64229,66160,74187],"textfield":[20909,23228,23910,29680,52447,55374,55448,55532,55557,56212,56280,56327,57845,58229,58594,58691,58846,59619,59720,59736,60518,61446,64439,64522,64630,64930,65055,65310,65311,65474,65476,65674,65756],"exporter":[16342,24670,29759,31032,31423],"soundscape":[5044],"gotoroot":[65421],"displaying":[4489,4994,7134,7828,8065,10768,12286,12401,13977,18089,18131,19693,21043,21173,23883,24060,25401,27924,30446,34157,34237,35492,36033,36549,36695,36937,52478,64745,65294,70830,71446,74244],"hierarchical":[2260,2427,33579,36037,36184,36695,40534,40674,52240,63142,64335,65512,71898,75573],"fantastical":[31760],"permissive":[74212],"addtorque":[38464],"showbanner":[74117],"hassle":[15967],"saveandreimport":[3828,5936,48416],"depressed":[23890],"“dumptype”":[74577],"sizeof":[4920,5372,5516,20271,26157],"fileoperationsexample":[3621],"nearby":[5193,6294,9893,13216,18293,37685,43185,43205,43592,49491,50444,50550],"bounds":[8437,10332,10503,11468,11564,11625,13412,13456,14207,14540,20271,21509,24984,31690,32756,32855,35020,36772,38515,39508,39771,40749,41510,51075,51533,51731,55517,56919,57483,64102,64398,65211,73202,73302,74251],"valvesoftware":[72887],"‘physx":[36339],"sidebyside":[76079],"react":[1032,1212,8204,8302,8573,9184,9466,12885,13036,13153,13579,13695,13771,13799,15012,15859,19366,19378,21173,26572,26587,37599,37650,37728,38479,38989,43320,47708,49451,50611,55725,55824,57869,58190,59128,60497,61299,61490,61994,75459,75582],"t0":[18230,59684],"final":[495,785,998,1103,1107,1202,1230,1240,1266,1366,1376,1701,2068,3319,3696,3823,4482,4964,5287,5353,5688,5968,5995,6199,6378,6439,6845,6950,7930,8578,9662,9967,9996,10134,11667,11738,12314,12437,13054,14348,17759,18617,19210,21248,22029,22116,22634,23480,23640,24436,24601,24621,24786,24895,24947,25747,25970,26072,26145,27003,27089,27132,27538,27673,28176,28463,29365,29511,29566,29599,30265,30841,30861,30917,31761,31993,32107,32220,32633,32874,33152,33842,34600,34866,36593,36678,37268,37548,37710,38244,39705,40522,42364,42792,43571,43897,44165,44307,45037,45724,46394,46775,46977,48287,49028,49423,49502,50427,50561,51582,51802,54871,56110,56159,58445,58542,58733,59211,60204,62596,63055,66590,67890,70409,71843,71899,72866,73417,74639,74846,74903],"autoplay":[73030],"cheating":[66110,66365],"video":[712,1563,4137,4261,4468,5116,8096,9970,10730,12358,12649,14785,14830,16815,18513,19081,20076,22046,22292,23428,25890,27118,27211,27510,30947,31280,33772,34190,34292,35900,35933,36239,36527,36571,37433,42467,43165,48201,48676,48905,50184,52057,52475,53292,53763,57122,68038,68085,68923,69166,71149,72463,72485,72561,72607,72614,72705,72720,73030,73444,74198,74320],"ayou":[20608],"exampleperinstance":[20300],"datastructures":[6024],"#311a11":[54329],"transmitting":[9059],"queued":[3790,4665,14738,35949,36055,36152,67483],"_unusedmethod":[52611],"drift":[14851,31857,32909],"showexplosion":[10865],"figured":[68610],"getforcurrentthread":[74715],"repeatpersegment":[10271,14608],"vbr":[14323],"dlight":[36651],"“x":[11844],"never":[715,2356,3619,3697,3957,4608,7212,9010,9174,9304,9699,9740,10014,11588,11740,12714,13009,13171,13266,13570,13682,13867,14965,14996,15856,17045,18267,21566,22396,25178,26041,26113,27055,27814,29808,30175,30243,30331,30900,31703,33074,33415,33420,34487,34900,34996,35888,37622,38560,38590,38841,39418,39774,39919,42811,43587,44723,45885,49497,49642,50945,51030,52011,54277,54564,55133,55653,67424,67708,69337,69443,70756,70912,71170,71205,71877,75612],"s_unityprofilercallbacks":[28003],"uids":[2614],"newin2018x":[18903],"lichen":[49477],"thermal":[11895,16043],"remains":[134,1588,5001,6192,7053,9010,9174,9304,9740,10097,13171,13570,13602,13682,13867,14680,14996,15857,15967,18132,20000,20239,20572,20588,22540,23890,25881,27210,27575,28836,29277,33367,34594,36303,37496,38458,38668,48204,48599,49442,49650,50019,51138,51239,51882,52009,58824,59064,60515,66023,67735,70211,70337,73271,76130],"chaining":[8802],"bright":[9196,9856,10068,22740,24489,25285,26784,27575,28891,34863,36109,36593,36632,41923,45284,49484,49550,49626,71811],"eventtakedamage":[10950],"hardware":[222,263,389,729,1024,1217,1243,1483,1541,3580,5116,5977,6837,6880,8068,9448,9970,10199,12647,12865,14819,14879,16933,17030,18481,18672,19289,19667,20340,20403,22882,23429,23542,23627,24501,24598,25177,25347,25863,26000,26054,26665,26798,27083,27131,27215,27268,27309,27509,27552,27705,29456,29618,29721,30853,32115,34361,34861,35496,36621,37901,38287,38333,38368,38414,38434,41783,41811,41876,42189,42333,43002,43168,43689,43728,43801,44054,44140,44289,44562,45182,45301,45446,45523,45572,45643,45740,45932,46764,48164,48529,48940,49177,49519,50170,50397,52095,52483,52528,52558,66667,72287,72531,72610,72662,72714,72924,72986,73689,74160,75076,75377,76178],"'uploadfile":[53107],"serializablemanagedhost":[15362],"crosses":[10368,58559,62036,71879],"sampler2d_half":[44284],"bindable":[55410,55494,55614,56077,56588,56670],"scrollbar_button":[63359],"indirection":[50055],"ssao":[34860,37960,74275],"kb":[3318,29253],"queries":[2689,6024,8222,8441,10572,11551,11608,30275,31703,32866,33644,35270,36309,36697,38575,38622,41160,41335,41462,41479,41490,41560,41609,56931,57750,63142,67720,72401,74136,75480,75743],"_colorfront":[45788],"kunityprofilermarkereventtypebegin":[28006],"requested":[3293,4400,4671,4994,9261,21029,21988,27679,29177,31606,32657,33440,35371,35718,44079,50007,50058,50973,51067,55652,58533,66280,67034,67450,67568,70175,70236,70295,70908,70936,71128,73211,75816],"font_big_size":[63237],"synced":[1961,12665,36320,52973,53284],"analysers":[38841],"slipping":[14967,23073],"physicsupdatebehaviour2d":[15207],"ongraphicsdeviceevent":[29945],"springs":[8567,32702],"fuchsia":[49863],"element's":[9211,13042,39587,40141,54436,54546,54634,55268,55585,58801,59592,59868,61421,61567,62592,62797,63737,63940,64052,64280,65705],"singlethreaded":[34206],"illustrated":[28947,33438,49453,67101],"giant":[2190,6046],"poorly":[5919,52601],"torus":[32549],"inverseresolution":[14104],"ieventsystemhandler":[29424],"workers’":[35738],"hoists":[18315],"start":[14,64,513,631,655,665,698,779,951,1031,1111,1454,1510,1771,2020,2080,2297,2441,2690,2726,2822,2940,3330,3370,3544,3696,3729,3826,3995,4158,4194,4218,4433,4534,4628,4861,4875,5129,5162,5406,5550,5747,5789,5879,6250,6342,6393,6730,6798,6859,7073,7508,7782,7933,8045,8339,8888,8985,9024,9268,9352,9516,9635,10075,10687,10692,11075,11103,11482,11518,11552,11842,12287,12599,12925,13115,13332,13725,14199,14891,15733,16241,17092,18050,18313,18372,18551,18748,19031,19073,19397,19627,19657,20158,20457,20556,21053,21154,21260,21306,21897,22349,23258,24391,24797,24901,24936,24960,25035,25105,25197,25504,25632,25774,26477,26641,26887,27814,29284,29653,29824,29840,29891,29973,30068,30100,30308,30911,31642,31761,31838,32078,32155,32371,32633,32690,32867,33082,33100,33472,33852,33917,34631,34928,35392,35676,35719,35798,36045,36471,36693,37606,37669,37709,38561,38591,38609,38648,38660,38726,38947,39096,39167,39544,39951,41289,41697,41975,42072,44294,44615,44981,45574,45645,45988,46143,46643,46776,47148,47422,48217,48608,48702,49227,50298,50332,50463,50582,51427,51547,51774,51782,51794,51987,52147,52235,52261,52499,52546,52710,53350,53874,54213,54300,54511,54649,54886,56181,56808,57128,57467,57700,58133,58378,58560,58659,59360,59838,60481,60752,62611,62838,64090,65999,66085,66228,66335,66349,66377,66402,66678,67289,67294,67336,67978,68096,68291,68331,68358,68392,68447,68868,69102,69381,69485,69968,70102,70153,70514,71012,71166,71208,71729,71965,72161,72237,72475,72545,72787,72903,73091,73103,73360,73543,74418,74508,74810,74899,75029,75133,75433,75508,75946,76035,76114,76332],"alternately":[19091,40251,68281,75361],"attributeoverrides":[61390],"2017searches":[40790],"confirm":[1123,1158,4016,4180,4201,4351,4434,11394,18441,26123,26249,27617,28667,30453,33865,36463,38900,39385,40086,41405,48512,53181,53702,54042,56534,56812,58676,61206,61602,65791,66979,67257,67887,71408,72660],"takedamage":[10858],"movment":[40028,40118],"multiband":[4964],"denies":[1488],"ssh":[69862,70059,70093,70126,70173,70496,70602],"24h":[53522],"cross":[308,385,5262,6672,8433,8617,10329,11871,14254,17370,17693,17708,17818,18082,18425,18480,20221,21964,24471,25173,25855,27003,27549,27636,30878,31092,33494,34675,38375,40521,41160,41346,43914,44360,45729,46802,47489,48319,49758,50348,59838,66966,67146,67163,67560,67706,72340,72510,72635,73410,73474,73639,73669,74271,75319,75501,76120],"rejects":[10028,69901],"audiounits":[4909],"seamless":[17296,17326,22514,27813,30385,42691,70963],"stuttered":[36504],"shear":[15836],"gyro":[52763],"nok":[53677],"uxmldoubleattributedescription":[56612,58082],"unregistercallback":[56903,57450,57888,58641,60250,62396,62732],"retest":[53692],"frequency":[4893,7446,7463,7491,7565,7572,7588,7597,7606,7628,7637,7648,7693,7717,7737,7806,8297,8787,9172,12216,13680,13865,14989,15027,21160,22582,24497,26043,27055,29645,30374,32217,36333,36590,38411,43990,45569,49560,50551,52117,52197,52227,72367,75740],"translucence":[37988],"kunityxrinputfeatureusagesecondary2daxis":[75647],"appropriate":[666,1822,1832,1899,3502,5976,6064,6126,6819,9368,11996,13267,14022,14082,18509,20200,22035,22353,23615,24004,24787,25148,26449,26668,27595,29249,30354,30660,32157,34161,34374,34677,35837,36689,36772,42044,42162,43374,45455,49438,49653,50660,50726,50929,52008,52644,54106,54259,55506,57576,57808,58036,58854,65898,66501,66571,67009,67025,67161,67242,67798,68309,68948,69192,69389,69493,70756,70955,71355,71873,72143,72678,73020,73286,73337,74090,74244,74591,74901,75017,75133,75224,75618,75816,76315],"subfolder3":[70697],"playmoviemt":[72542],"instructions":[579,620,693,985,2984,3880,3979,4161,4220,4240,4246,4426,4498,4595,4729,6416,11338,12005,12334,13364,18665,18945,19049,19633,20190,20292,21024,21889,22886,23433,23481,24668,25900,26478,27143,27257,28082,28390,28480,28773,29018,29162,29772,33482,35195,35804,37559,39478,40042,40151,40263,41348,41942,42317,42372,42424,44269,44317,44757,45477,45941,48068,48989,49148,49282,49336,49575,49824,52527,52576,54393,58376,58653,61593,61971,64511,64549,64610,64808,64914,65312,65537,65552,65773,66788,68789,69871,69956,70013,70336,70473,70771,71311,71375,71433,72945,74570,74991,75239,75287,75295],"portuguese":[53640],"unitypluginunload":[27900,27976,29926],"partners":[72955,74990,75134,75306],"buildwindows64player":[21063],"40b":[29192],"interpretation":[18503],"frametimingmanage":[21873],"constrained":[2668,3012,6959,8203,8565,9019,10401,10460,11439,12754,13275,13292,18155,20208,22303,26922,33572,35156,35944,39794,39988,40091,51965,52524,65934],"offer":[2432,4370,8436,9999,11598,15844,25247,29360,31649,33453,49158,49169,49557,50670,52756,54739,61186,67090,67560,67706,67756,70775,70818,73620,73694,73896,74546],"#006400":[63533],"shield":[22204],"forests":[14775,50579],"uses":[73,79,149,291,405,491,517,532,535,553,579,919,962,1032,1103,1107,1178,1202,1240,1248,1274,1331,1359,1383,1430,1509,1539,1598,1717,1770,1916,1950,1980,2034,2044,2211,2608,2782,2898,2972,3247,3293,3506,3580,3696,3766,3847,3895,4639,4652,4866,5222,5352,5497,5698,5725,5805,5809,5969,6056,6145,6284,6317,6353,6398,6477,6572,6802,6871,6942,6968,7022,7167,7364,7481,7663,7816,7849,7907,7970,7979,8014,8114,8136,8174,8271,8358,8373,8528,8648,8774,8842,8973,9039,9075,9179,9200,9268,9309,9434,9543,9589,9766,9843,9862,9908,10010,10116,10206,10381,10425,10444,10496,10572,10623,10698,10732,11066,11222,11304,11459,11474,11605,11673,11717,12180,12308,12367,12555,12733,12880,12968,13018,13122,13164,13216,13252,13311,13427,13456,13590,13685,13870,13897,14086,14317,14509,14568,14720,14786,14844,14979,15039,17152,17206,17642,17744,17759,18093,18166,18224,18315,18330,18458,18521,18581,18634,18728,18747,19036,19057,19220,19284,19376,19455,20056,20095,20179,20233,20237,20394,20411,20440,20539,20622,20694,20919,21002,21087,21154,21205,21365,21385,21445,21592,21639,21739,22117,22124,22139,22229,22665,23256,23392,23428,23483,23611,23633,24060,24526,24598,24601,24621,24665,24943,25205,25263,25309,25814,25900,26004,26121,26251,26295,26374,26459,26472,26495,26573,26582,26629,26654,26664,26707,26809,26840,26960,27034,27063,27175,27186,27213,27265,27468,27485,27553,27661,27695,28110,28304,28439,28464,28797,29128,29153,29339,29405,29420,29439,29443,29555,29766,29813,29997,30139,30143,30166,30184,30273,30334,30355,30478,30540,30840,30853,31624,31725,31760,31861,32090,32167,32232,32259,32686,32775,32847,32934,33254,33381,33399,33420,33446,33489,33579,33767,33883,34209,34306,34374,34501,34611,34640,34646,35087,35248,35415,35520,35714,35795,35924,35986,36068,36118,36198,36465,36573,36678,36736,36753,36824,36977,37237,37280,37422,37551,37634,37675,37688,37924,38288,38335,38463,38514,38549,38583,38632,38664,38740,38871,39030,39120,39241,39625,39659,39886,40001,40104,40208,40513,40526,40604,40662,40722,40810,41174,41314,41490,41748,41769,41791,41840,41882,41918,41945,42038,42048,42123,42179,42243,42329,42353,42692,42716,42732,42757,42793,42814,42938,42981,43017,43106,43118,43132,43147,43374,43486,43493,43508,43557,43721,43895,44207,44229,44369,44525,44600,44671,44787,44887,45062,45175,45305,45446,45578,45599,45618,45807,45867,45962,46143,46520,46534,46756,46873,47171,47189,47912,48275,48353,48515,48528,48557,48685,48852,48874,48927,49176,49322,49437,49475,49490,49516,49567,49668,49741,49756,49905,50001,50033,50064,50142,50145,50291,50374,50412,50436,50512,50534,50579,50642,50669,50692,50851,50901,50960,51011,51120,51156,51995,52347,52585,52691,52736,52769,52794,52871,52936,53048,53207,53310,53793,54713,54760,54883,54911,55335,55512,55621,55807,55929,56097,56146,56473,56736,56986,57149,57694,57995,58068,58110,58147,58519,58651,58799,59047,59269,59828,60635,60680,60950,61018,61186,61196,61484,61526,61658,61824,61906,62048,62586,62788,62838,63064,63165,63683,63697,63846,63956,64078,64211,64749,65973,66010,66112,66245,66349,66455,66461,66587,66903,66932,67209,67240,67261,67293,67483,67543,67579,67924,68492,68573,68710,68863,69096,69333,69398,69439,69570,69705,69740,69761,69797,69865,69990,70076,70109,70142,70174,70195,70246,70332,70389,70608,70772,70801,70868,70978,71093,71370,71397,71557,71664,71773,71924,71959,72057,72136,72148,72293,72660,72717,72730,72813,72830,72858,72923,72986,73026,73029,73164,73248,73300,73325,73393,73424,73607,73639,73669,73689,73940,74156,74404,74650,74793,74867,74925,75022,75090,75394,75483,75901,75969,76204],"gradient's":[20724,55861,58393],"aimconstraint":[6982,15325],"window\\general\\services":[67663],"headline":[4141],"contributorgi":[35059],"unneeded":[23584,41795,42946,43024,44549,73450],"qualified":[36048,58088,70111,70143],"tempting":[6135],"add":[8,86,236,478,644,814,858,891,989,1032,1106,1124,1162,1186,1234,1239,1260,1362,1384,1531,1601,1692,1771,1880,1912,1955,2118,2256,2265,2299,2325,2384,2389,2518,2635,2696,2775,2941,2971,3233,3520,3725,3865,3895,3909,3998,4121,4178,4191,4204,4238,4261,4368,4419,4441,4464,4485,4615,4713,4827,4879,5095,5162,5350,5919,6038,6126,6229,6265,6290,6321,6325,6351,6401,6928,6958,7059,7367,7562,7645,7682,7938,8009,8146,8280,8419,8568,8587,8692,9109,9196,9247,9347,9491,9621,9669,9715,9795,9848,9898,9913,10054,10110,10211,10340,10404,10439,10704,10723,10742,10805,11291,11306,11322,11337,11359,11424,11439,11510,11807,12206,12303,12444,12742,12768,12866,13042,13453,13587,13744,13822,13846,13898,14004,14498,14597,14700,14742,14860,15020,15701,15832,16470,17356,17384,17591,18039,18068,18134,18165,18268,18323,18388,18485,18575,18671,18756,18822,18896,18909,18995,19021,19239,19324,19340,19354,19367,19455,19636,19665,20035,20089,20124,20196,20336,20459,20545,20721,20777,20863,21031,21181,21230,21635,21892,22013,22077,22103,22466,23246,23378,23525,23554,24523,24743,24894,24950,25176,25401,25492,25517,25678,25735,25743,25888,25893,25938,26117,26200,26613,26616,26658,26926,26936,27341,27491,27763,27939,28096,28194,28265,28493,28625,28676,28769,28781,28856,28920,29037,29098,29396,29421,29486,29895,30038,30054,30193,30327,30389,30493,30528,31670,31733,31749,31765,31779,31804,31825,31842,31917,32080,32093,32119,32144,32204,32242,32330,32348,32374,32596,32619,32639,32667,32712,32749,32884,32893,32919,33510,33581,33631,34273,34408,34481,34600,34640,34672,34691,34826,34891,34949,35090,35188,35247,35280,35407,35536,35604,35768,35895,35937,35959,36105,36199,36367,36465,36688,36702,36736,36828,36981,37227,37369,37498,37549,38013,38402,38430,38464,38477,38490,38639,38661,38683,38912,39057,39090,39136,39351,39519,39526,39672,40039,40175,40452,40571,40622,40760,40825,41160,41337,41356,41547,41618,41690,41707,41784,41870,41892,41997,42134,42209,42366,42467,42547,42596,42950,43070,43181,43205,43227,43338,43540,43603,43736,43801,43961,44544,44769,44903,45018,45091,45170,45178,45291,45455,45941,46158,46667,46773,46874,47265,47933,48067,48177,48287,48340,48379,48514,48583,48620,48639,48667,48784,48938,48984,49374,49429,49515,49655,49663,49915,50145,50289,50366,50519,50560,50582,50620,50648,50660,51039,51094,51123,51207,51244,51405,51602,51802,52174,52222,52247,52494,52580,52838,52891,52953,53164,53292,53804,54050,54249,54294,54427,54508,54544,54601,54638,54841,54847,54876,55109,55216,55301,55392,55632,55687,55768,55843,55856,55958,55987,56043,56112,56170,56241,56301,56445,56510,56547,56663,56692,56768,56830,57016,57136,57295,57415,57576,57680,57879,58031,58097,58138,58249,58336,58425,58560,58584,58673,58766,59014,59275,59575,59787,59987,60150,60199,60227,60450,60542,60649,60725,60802,60936,61039,61191,61194,61317,61471,61486,61555,61593,61789,61907,61938,61955,62014,62066,62147,62383,62525,62590,62662,62786,62853,63069,63127,63684,64325,64438,64450,64511,64532,64610,64642,64697,64745,64808,64914,64978,64991,65051,65069,65085,65164,65312,65386,65420,65458,65537,65552,65673,65691,65720,65748,65758,65793,66016,66045,66115,66222,66338,66464,66700,66842,66933,66991,67026,67071,67175,67243,67653,67872,67894,68352,68396,68590,68733,68815,68994,69047,69330,69398,69436,69517,69729,69835,69888,69987,70070,70105,70137,70235,70285,70290,70333,70357,70598,70970,71028,71175,71247,71283,71327,71364,71472,71520,71605,71662,71809,71858,71901,71910,72092,72143,72163,72188,72247,72399,72608,72791,72806,72841,72846,72899,72951,73136,73251,73354,73398,73427,73435,73501,73674,73712,73918,74181,74259,74420,74518,74590,74950,74991,75033,75080,75111,75132,75220,75280,75294,75374,75405,75528,75865,75946,76136],"ignoreprojectors":[46099],"“or”":[12811],"onvalidatecommand":[55956],"ppc":[33796],"materials’":[28880],"manifestfileversion":[3263],"navmeshlink":[69398,69502],"partner":[24169,53166,53384,72178],"xmlns":[61635,65873],"selectables":[24848,65925],"19px":[63242],"handlehapticbuffer":[75606],"arb_sparse_texture":[48164],"codecs":[72633,72730],"assetimporter":[3484,5933,15237,19507,31048,48392],"detailmulx2":[28933,29523],"medium":[1772,7488,9230,9450,9974,11335,12450,12909,13415,14374,14822,21512,28476,29374,30180,31703,32233,37678,37822,40097,43158,44235],"animatabilty":[62879],"theread":[5958],"handleevent":[75584],"text":[729,1005,1113,1129,1424,1886,2539,2556,2649,2781,2898,3262,3677,3731,3830,3919,4149,4155,4214,4275,4356,4396,4488,4509,4519,4816,5914,5983,7836,8420,9075,9258,9564,9625,9760,9774,10431,11382,11405,12234,12451,13351,13439,13855,13944,13975,14882,17642,17966,17970,18119,18364,18436,18485,18718,18952,19033,19075,19666,20023,20467,20655,20909,20999,21302,21638,22919,23796,23910,24095,24174,24518,24727,24742,24782,25095,28105,28219,29694,30390,30518,31251,31588,33153,34990,35381,35517,35776,36061,36254,36402,36710,37013,38034,38684,39063,39254,39430,39466,39479,39603,39681,39708,39740,39969,40041,40819,40854,41330,41447,41681,42321,44707,45065,48079,48990,49417,49536,49734,49816,50655,52355,52477,53338,53743,53902,54151,54224,54383,54406,54552,54608,54644,54673,54794,55013,55363,55407,55642,55793,55856,55950,56058,56157,56212,56320,56384,56508,56628,56703,57068,57341,57660,57864,57982,58106,58110,58190,58294,58375,58447,58586,58650,58801,59090,59413,59552,59719,59732,59832,60021,60452,60589,60932,61035,61382,61442,61523,61608,61762,61907,61919,61965,62004,62047,62122,62215,62419,62565,62686,62756,62858,63244,64159,64213,64365,64373,64435,64448,64511,64576,64610,64658,64723,64731,64808,64823,64846,64864,64914,65024,65036,65065,65139,65174,65220,65244,65294,65312,65400,65438,65450,65460,65478,65507,65537,65552,65572,65592,65612,65633,65653,65668,65687,65741,65753,65776,65881,65945,65970,65980,66354,66381,66706,67175,68090,68313,68450,69834,69903,70014,70821,71196,71254,71383,71446,71616,71898,72039,72241,73255,73480,73983,74249,75185],"achievement01":[30088],"assetbundles":[2768,3235,3240,3291,3306,3340,3347,3445,3454,3481,3511,3568,4652,6042,6056,6138,7141,9075,9488,16619,19084,19280,25926,29564,31047,37671,39905,41862,48570,49737,50135,60207,68083,73021,73205,73310,73395,73620,73899],"devicedefinition":[75516],"screenshotfolder":[52068],"confirms":[4004,67262,67862],"gamma":[11802,12345,13711,14301,21392,23530,27130,27500,27513,27543,27583,28881,32291,34272,34360,34480,34872,37941,45093,45170],"panelsettings":[58142,60652,62748],"spotlight":[36653],"\\unity\\config\\serviceaccounts\\":[70207],"m_ambientlight":[76358],"#9a9a9a":[63308],"swapchain":[12475,34225,73015],"island":[11576,35339,52672],"outery":[61135],"compacting":[33401],"assume":[3434,3770,9422,20268,20457,21024,23271,29630,38393,39425,41211,48174,50344,52640,58015,58178,64567,64590,64777,69660],"reacting":[21175,57864,58997],"we're":[14898,24769,29510,30637,47246],"staticeventexamplefixed":[20166],"smpmirrorpoint":[45252],"phong":[38044,45201,46826],"mypluginworkmethod":[27963],"models":[69,1024,1942,2190,2769,3460,3569,3791,3889,3985,4025,4506,4519,5940,6219,6691,6908,9134,10363,12954,13375,13627,14707,14965,18052,18394,18670,18916,19937,21477,21592,22064,22480,24523,25150,25190,25276,26985,27063,27331,27573,27747,29397,29712,29737,29765,29773,30372,31642,35240,37547,37678,38005,38430,38437,38840,42430,42811,43918,44051,44561,45009,45445,46137,46504,46528,46732,48268,49450,49520,50583,50931,52595,66903,67837,71021,71758,72690,75226],"bluetooth":[12222,12650,34403],"outlives":[63221],"unregistered":[5773],"videorendermode":[14902,72567],"audiotype":[68188],"summon":[60010],"#424242":[63259],"float3x4":[5447,5591,32015],"reclaim":[33083,33381,66879],"产品描述3":[53684],"srv":[74519],"networkproximitychecker":[11194],"c#’s":[6035,6135,33087],"alien":[8987],"#00fa9a":[63600],"setblendshapeweight":[6233],"pays":[4386],"_authtoken":[69996],"rhandle":[2930],"r16g16_snorm":[8463],"80x80":[4298],"skeleton":[285,1926,7836,7867,9137,13484,18054,21565,22066,22500,25210,25622,29391,29901,37407,71762,72982,74419,75485],"lightyellow":[63588],"_illumincol":[45340],"a1945cd7aab67441ba89015f97494624":[25124],"unityedgelengthbasedtesscull":[47026],"hexagon":[95,9539,30049,48605,51160,51356],"163px":[59334],"encodefloatrgba":[43884],"rt2":[38361],"maskfield":[55423,59672,64935,65284],"continue":[1664,2120,6798,9643,10077,10708,11612,12328,12666,13379,18254,21366,24641,25307,25401,25894,26117,28395,32178,34985,37733,38612,39340,39773,41322,41459,44079,48570,48674,50974,52558,52936,53205,54393,55123,65194,66184,67295,67483,68602,68739,69023,69276,69312,69352,69418,71271,71593,71813,71862,73050,75354],"proguard":[989,1347,11994,23504,53997],"sustain":[33404],"hevag":[7496],"selecting":[259,1975,2222,2332,4805,6265,6397,6798,7815,7845,7939,8623,11589,12516,12748,12780,13392,13714,13815,18362,20554,20605,20880,25604,26047,26790,27502,27517,27562,27586,28667,28703,28742,28778,30049,30228,31717,32705,33905,35181,35837,36056,39138,39740,39818,39977,40097,40842,41605,43128,43235,47182,48365,48506,48582,48622,49557,50696,51089,51121,51144,51261,51347,51541,51910,52206,54214,58801,58998,63119,65003,65081,65934,65990,66563,67180,68532,68601,70149,70342,71121,72946,73198,75023,75085],"reach":[198,2954,5772,7297,7645,9079,9690,9734,11298,11521,13166,13564,14912,14953,14993,23524,25667,26809,31760,32180,33678,43149,43320,49159,55118,65999,66761,70372,70761,70830,72912,75660],"underlines":[58291],"near":[1570,5216,6152,6723,6760,7789,8046,9332,9886,9980,10081,12663,12855,12912,13146,14855,15844,18666,21486,22746,25669,26998,32272,37685,38375,39234,41997,42799,43110,43183,43974,44637,44865,47087,47951,49426,49496,66003,72522,72724,75079,75466,76492],"neighbor":[50345,50628],"gapped":[26690],"inputsubsystem_devicedisconnected":[75510],"timers":[40604],"windowing":[661,690,50170],"faults":[52558],"accounts":[4485,12665,13457,17433,22100,30500,31445,42713,42729,42754,53176,53695,67047],"leading":[2989,4354,33877,61966,62100,66802],"reflective":[250,13120,22876,26877,36753,37683,37700,37728,41782,42433,42438,42444,42453,42460,42465,42508,42513,42519,42525,42811,45632,46274,49426,49453,49623,71863],"darwin":[17693,31096,70472],"leftmouse":[60228,60459],"++m_instancecounter":[60597],"biased":[6649,12954,13096],"m_heightscale":[20476],"combinatorial":[43070],"exampleposition":[75679],"failed":[223,2750,2831,3334,3373,3548,3825,4665,5277,18087,21757,22130,22439,25119,29198,30080,52478,52672,53475,53995,67136,67361,67636,67717,68640,68929,69172,70380,70629,72402,75154,75980],"came":[7496,25207,27855,63221,69743],"appgallery":[53432,53901],"arm_l":[71783],"grabpassinvert":[44390],"cloneanimation":[35763],"hideineditor":[70833],"jniexport":[1062],"genuine":[25860,67800],"shadervariants":[6703],"net":[4078,4719,11859,12180,12367,12555,16137,17152,18359,18536,18581,18623,18748,19220,20179,20206,20214,22613,24929,24963,25343,25961,26078,28463,30852,31199,33804,34306,34392,34511,34638,36736,36751,37680,38686,40173,40604,40671,42698,42750,49766,52591,62935,66450,66470,66928,68667,69002,69254,69864,71661,72057,72132,72193,73416,73640,73667,73806,74514,74866],"myrenderer":[45989],"0xf":[1781],"vfxrenderer":[15291],"processloadedachievements":[30078],"extensive":[4775,6079,22019,28477,37236,49158,49169,66701,74163],"contrary":[49549],"altitudeangle":[60778],"overlaypath":[19698],"mno":[52580],"getunityinterfaceguid":[75885],"revsub":[43737,43813],"cheetah3d":[24683],"reaches":[3695,4354,7783,8513,9518,9641,12296,12902,14850,22506,27602,31366,31379,35994,38492,39771,50544,62156],"sales":[3981,4077,4355,4370],"propertyeditor":[25389],"numerical":[2357,15042,36298,40819,50542,60054,64511,64610,64808,64914,64955],"quoted":[68498],"ghs":[53676],"#808080":[63278,63559],"intermittently":[21154,32188],"bomb":[5160],"fills":[4903,8169,8412,8904,10337,11716,12111,12310,13934,24631,33215,34682,36472,39662,46721,50007,50520,51306,51543,51770,57038,58556,65988,72527,75455,75606],"colliders":[50,203,2174,5964,6685,6793,7316,7955,8004,8159,8162,8197,8299,8373,8765,9224,10564,11519,11546,11605,11654,12699,13242,13263,13423,13829,13892,14502,14960,15817,15831,15884,21144,21520,23045,25208,25605,26058,31701,32747,33632,33673,33755,35015,35315,36305,37453,37533,37609,38466,38476,38524,38605,50514,50605,71567,74183,74325,74415,74893],"data_filename":[73945,74092],"regard":[5994],"mobility":[18508],"than’":[14734],"setikrotationweight":[25626],"emitter":[31851,32077,32170,32372,32652,32730],"fulfills":[21863],"controllers":[2233,2237,2967,6778,6795,7869,9828,25337,25693,25759,25763,29125,52702,52728,52752,54210,54227,59394,68806,72923,72940,74329,75077,75115,75221,76100],"#x7c":[12811],"isometric":[84,137,8093,9540,22292,37349,37480,37500,39235,39254,48374,48605,51120,51137,51162,51177,51217,51229,51230,51243,51257,51357,51846,51861],"preferences":[1129,1615,3773,9091,10698,11560,11673,12437,12769,14493,14664,17296,17957,18366,19650,20760,21010,21068,21142,22125,22158,22227,23742,24586,26253,28392,28667,28703,28742,28767,31644,34960,35817,36464,37676,38738,38860,39127,40662,40759,41323,41427,41460,41531,41656,41674,43303,48056,48511,49342,50179,51077,51597,51858,52633,66600,68827,69072,69768,69808,69975,70270,71542,71906,72410,72834,73296,74176],"receives":[722,1031,1770,2086,2958,4445,4819,5196,5352,5733,5924,6152,7615,7905,8112,9515,9769,10108,12627,14875,21023,22165,23011,23524,25345,26263,27040,27335,28829,30488,32106,32726,38471,38483,39513,39522,45587,45868,48941,50056,50495,52556,55641,55989,56706,57578,57819,57918,59123,59408,59541,59573,60165,60397,60810,64335,65525,66635,66853,67136,67185,67918,68086,68852,69061,72275,72495,73312,73482,74036],"editorid":[28447],"512mb":[14076,43162],"s_meshinfos":[75833],"otherobj":[9419,21176],"happening":[3338,4801,5041,10711,12180,13837,26007,35732,49894,52640,68626],"accurately":[10651,14712,18977,24489,27267,37621,38524,39167,39591,39714,42214,44234,48649,72706],"variation":[6543,7198,8009,10081,12705,13836,15026,23284,23378,23900,31275,31760,32702,32852,33715,34927,34956,39929,42243,43458,47868,48268,50381,50596,52013,61747,72276],"rotation":[258,690,714,1589,1871,1893,1937,1994,2039,2040,2180,2292,2334,2439,5231,6962,7022,7152,7211,7238,8237,8502,8877,9013,9302,9702,9723,10394,10513,10719,11236,11242,11271,11439,11477,11540,11763,12489,12968,13029,13110,13149,13165,13242,13263,13271,13293,13695,13706,14486,14661,14994,17978,18155,18422,19975,20072,20606,20785,21325,22219,22500,23712,24528,24650,25511,25622,25792,26588,27462,27814,29130,29612,32160,32227,32255,32327,32345,32398,32659,32910,33605,33667,34781,34900,37279,37347,37528,38503,38532,38542,38599,38657,39256,40534,40674,42705,42726,42748,42774,47470,48688,50301,50337,50595,51572,51639,51878,52114,52182,52194,54712,56112,60805,62030,62198,68728,68865,69098,72986,74169,74457,75109,75573,76204],"updatebodies":[35754],"hasbecomevisible":[18588],"cancacheinspectorgui":[59611],"else":[165,494,751,2074,3457,3633,3895,4647,4801,4840,6257,6495,7749,10755,10973,11300,11312,13051,18055,18112,18497,19400,20042,20996,21550,22067,23576,24046,24333,24737,25350,25663,25709,25956,26356,26858,27363,28031,29720,29986,30022,30079,30120,30618,31973,32833,33124,33428,33782,34134,34703,35691,35887,36954,37108,37526,38653,39336,39382,39467,39472,42087,42964,43951,45337,45574,46474,48776,49237,49812,49942,50651,51444,51654,53969,55026,55128,55403,55699,55963,56256,56312,56375,57465,57940,59563,61497,62421,64666,66197,66823,67360,67635,67716,68104,68298,68338,68365,68402,68455,68973,69220,69538,71585,71763,72555,72655,73113,73969,74704,74878,75247,76191],"kunityinvalidxrinputfeatureindex":[75573],"dataprovider":[48392],"linecasts":[11551],"3offset":[12896],"mycustomcontrol":[9609],"meshinfo":[75767],"getdeviceswithrole":[76167],"meshvertexattributes":[75782],"errors":[223,962,1570,1655,2702,2829,5764,5920,7018,8420,8974,10871,12397,13363,17045,18112,18533,18948,19669,21029,22626,24984,27763,28278,28639,30509,30880,33087,34615,34673,35001,36007,36568,38770,38839,39885,40647,44294,44671,44876,45448,49179,50022,52501,52549,53041,53452,55512,61184,63106,66657,67092,67552,67688,68639,68781,69004,69256,69398,69502,69514,70362,70773,71016,71174,71314,71412,71533,72103,72395,72839,73195,73395,73485,74214,75146,75976],"axf":[37898],"elbow":[22506,29112],"specialization":[3729,37136,40573,57319,73008],"getintroductorypriceperiod":[67737],"property's":[2434,9732,14987,23744,32853,52058,62839,64155],"outputsamplerate":[7765],"receive":[223,680,1031,1611,2089,4012,4230,4836,5122,6806,6896,7900,7974,8178,8275,8393,8778,9043,9337,9957,10093,10649,10984,11617,11907,12631,12737,14513,15862,17342,20086,21200,23194,24018,27041,27183,27192,27225,27273,27330,27751,27756,28051,28062,29434,29806,29924,30440,32105,32303,33728,35058,37539,37662,38347,38468,39170,39813,42811,42998,43127,43172,43414,45743,47750,48232,48296,49212,49562,50495,50615,52108,52469,52486,52746,53303,54021,55609,55728,55991,56065,56121,56208,56676,57817,57865,58854,59541,59749,59825,60408,60541,60822,61485,62813,66035,66276,66409,66635,66852,66934,67041,67149,67460,67947,68197,68749,69634,72393,73485,74333,75226,75511],"'ask":[67449],"tagged":[2464,2810,3498,6807,9409,30676,36757,37237,50317],"descent":[58285],"undergo":[19086,37695,63831],"decompressonload":[73089],"#ok":[63850,63943],"object’s":[6032,18233,18260,26118,27081,27336,30896,32165,32433,33504,36454,39887,50498,71876,73614],"navmeshagents":[69396,69500],"nurbs":[346,22836,24668,29764],"registermonomodules":[49774],"bitangent":[6648,47472],"#bebebe":[63269],"meaningless":[10012],"“fatal”":[11177],"twice":[199,5944,9229,9970,11520,12219,13918,14351,17997,20154,20689,23713,24519,24970,25285,25894,29247,29825,32262,37623,38870,43618,44734,50073,52046,57865,70249,71338,72920,73811,74077,75068,75543],"payout":[4115,4230,4366,67185],"esc":[43234,54571,73268,73486],"'screen":[39433],"#9acd32":[63655],"turn":[336,456,1895,1998,2055,2069,3675,3729,6287,6427,6834,7674,7779,8590,9745,12747,12838,13175,13412,13574,14962,20117,21325,21509,22997,23458,23671,25066,25440,26928,28407,30255,30377,32705,32781,34216,35030,36108,36481,37291,37653,38966,39331,40221,43235,44775,45792,45947,48268,50008,50147,52224,54264,59135,62026,62201,68384,68929,69172,71194,72520,72917,75209,75249,75445],"affected":[729,2120,3799,6792,8134,8206,9634,9896,10124,11521,12401,13267,13733,14846,15034,15862,18233,19026,21534,22301,23289,23414,25998,26793,27332,29364,30255,31838,32133,32615,32692,33866,34914,35192,35345,36683,37599,37961,38392,38541,38574,39170,42369,42456,43057,43121,44427,46090,46295,47126,50374,50452,51137,51235,51262,51964,52135,53429,60543,62796,68532,68555,68671,68867,69100,72299,73089,74132,74224,74412],"squish":[59838],"unityedgelengthbasedtess":[47005],"stylesheets":[54424,54590,54646,54674,54738,54879,61893,62662,65737,65900,73919],"samplercomparisonstate":[45249],"myelement5":[61584],"refunds":[4084,4390],"fulfill":[18819,20415,32767,33439,39918,49698,71017],"min16float4":[8448],"emitters":[2349,32078,32636,38130],"automate":[1406,5325,6271,6949,17152,22906,25444,27341,29759,48676,74163],"pointerenterevent":[60771],"newscenetemplateinstantiated":[39214],"ievel":[74583],"eventdispatcher":[57808],"recall":[47608],"id_ed25519":[70077,70143],"files\\putty\\pageant":[70118],"d04":[52077],"buckles":[49510,49540,49630],"finalcolor":[46395,46777],"particlesystemforcefield":[11502,15231],"editorusersettings":[15147,25066,38928],"unityapicompatibilityversionattribute":[68675],"“light”":[73933],"intelligently":[2937],"durability":[66965,67019,67230,67841],"days":[4438,4461,22317,40097,40719,45293,52094,53497,62043],"interpolators32":[45487],"excludelayers":[7972,8176,8273,8391,8776,9041,12735,14511,38572,38602,38636],"grew":[33394],"pasted":[24559],"win":[17705,21060,27659,31092,31468,36722,37540,38417,66690],"hslsaturation":[43844],"safearea":[19692,20073],"designs":[4294,7981,8115,17488,33583,64456],"64px":[51138],"silent":[21043,25458],"wished":[52526],"annotates":[28489],"implications":[6846,23419,29469,31633,33088,38867,44384,49449,49669],"boxcolliders":[33697],"wounded":[1960],"searchoption":[19496],"registeredpackageseventhandler":[69658],"radians":[6273,6298,10446,20693,60778,61133,62307,75573],"firewall":[218,12645,28436,35836,66571,69884,70183,70423],"frames":[1886,1896,2053,2177,2303,4639,5176,6045,7007,9138,9518,10501,11613,11725,12889,13131,14254,14849,16919,18254,19047,19653,20457,21113,21156,21318,21865,21955,21964,22508,25980,26049,26451,27699,27813,27993,29153,30868,31703,31925,32665,33092,33386,33398,34999,35379,35622,35714,35908,35949,36108,36464,37647,37712,37724,38275,38329,38565,38595,38668,42796,48339,50002,50881,50937,51954,52601,54302,55554,59561,68215,72489,72931,74558,74920,75429,75793,76130],"git+":[70606],"capitalize":[72267],"mytexture":[40726,68366],"side1":[72354],"udpclientid":[53897],"signscale":[8678],"arms":[7,1934,2211,3013,5266,7215,7841,18104,21572,22542,33573,39253,71783],"gpg":[66771],"unitymetafragment":[28942,29518],"cacheroot":[69809],"uprightdownsubdiv":[27422],"unitrect":[20957],"parented":[8065,51851],"photos":[12649,23148,53744],"scenesearches":[41470],"account":[219,498,3508,3916,3963,3976,4036,4051,4154,4167,4210,4240,4360,4398,4441,4482,4484,4493,5774,8514,10095,11263,12154,12673,12940,14539,18613,18987,20574,21013,21431,24764,25753,26712,26878,27653,27790,28210,29551,29809,30407,30443,30467,30501,32296,33681,33866,36637,38403,38515,39381,41784,43690,47710,48146,48659,51991,52086,52498,53170,53365,53697,53728,54254,56100,66964,67039,67239,67266,67516,67925,69696,69816,69880,70049,70192,70373,71455,71552,71897,72179,72388,73357,75034],"views":[2432,4152,4591,4802,5024,5136,8066,10018,10510,18896,19969,20075,20834,22035,22189,23685,26116,26129,27109,29827,29861,30292,35258,35633,35977,36037,36184,36218,36731,38280,39495,41429,47190,51050,52092,52240,53763,59903,61987,63253,64244,64908,64981,64994,65533,65775,65903,66850],"shuffled":[13067],"launcher":[983,1102,1189,1246,9718,12003,23481,24609,25525,49760,66817,66841,74753],"response'":[70360],"tessellated":[18233,46979],"loadaudiodata":[7495],"redeem":[4040,4493],"appleinapppurchasereceipt":[67802],"shader_feature_local":[44546,69000,69251],"editoronly":[35695,36086,50313],"yesby":[37927],"oversized":[14540],"nodes":[2001,2037,2254,7939,13392,17759,21460,21604,22494,24650,29736,33902,34157,34192,35235,41935,49387,49643,49665,52120,52176,52200,59914,65736,65902,68513,70238,76173],"beginbuildtargetselectiongrouping":[59595],"testdel":[36650],"penetration_":[8316],"restrictive":[73447],"c2":[20299],"appliction":[30370],"attract":[4137,12698,21149],"gbuffer":[46484],"tiles":[94,173,9532,12446,13211,13756,13897,14469,14498,14533,16020,22932,23443,32677,33719,35926,37382,37500,37565,40039,48162,48364,50002,50053,50067,50140,50147,50346,50431,50543,50623,50647,50734,50881,51119,51128,51155,51166,51186,51204,51231,51257,51344,51427,51638,51708,51785,51810,51820,51842,51849,51869,54444,65987,74566],"srgb":[8824,11807,12233,13711,14446,21392,27132,27511,27519,27555,27583,28893,34274,34362,34484,45093,45168,61557,73443,75178,75423],"\\program":[15717,21022,25459,28632,28715,48061,66700,69968,70111,71675,73656],"members":[1406,3591,4025,4112,4484,4563,18585,20047,20921,22407,26144,28594,29800,29909,30393,30443,30500,35228,36785,36924,36998,46370,51951,54066,58074,66487,66556,67894,68379],"getinputcount":[34114],"appendname":[36811],"usernotificationlistener":[12676],"apiupdater":[21051],"cutout":[11724,25886,37398,37838,41764,42831,42836,42842,42847,42853,42874,43200,45549,45634,46766,47752,49569,52488],"code’s":[28390],"reaching":[2149,7306,7531,7637,22580,26919],"'alt+6'":[16564],"timelines":[25184],"colorfieldsnippet":[64481],"offsetmin":[24735],"general":[104,258,1096,1646,2243,2257,4121,4287,4513,4825,5271,5911,5949,6041,6058,7362,7506,7882,8084,8442,10026,11527,11668,11700,12038,12314,12437,13206,14233,15866,18056,18116,18384,18632,18910,19085,19173,19652,20062,21010,21326,22036,22068,22180,22647,23420,23588,25058,25189,25263,25328,25828,25995,27673,27767,28405,28480,29089,29150,29421,29731,30241,30451,32917,33264,33482,33517,33618,34241,34324,34448,34586,34965,35756,35990,36693,37667,37697,38248,38264,38291,40173,41152,41174,41699,41788,42367,42387,42425,43018,43193,43336,44166,44229,45585,45598,45734,46528,48359,49177,49642,49677,50627,50666,50952,51236,51841,51859,52106,52491,52940,54108,54802,55581,57424,57631,58114,58441,61490,63864,64330,64451,64758,66390,66408,66467,66877,67045,67890,68309,68535,68827,68916,69072,70342,70356,70986,71021,71669,71760,71909,72515,73689,74510,75240,75518,76158],"m_fogmode":[76354],"0searches":[40744],"floats’":[48150],"allocators":[26447,27935,29150],"num":[22682],"it’s":[273,517,936,2776,3247,3351,3719,3736,6028,6145,7396,7429,8534,9190,10055,11312,11606,12013,12586,13187,13249,17591,18137,18257,20608,21029,21509,25262,25597,25694,26123,26354,26452,26472,26574,27488,27930,28063,28586,28916,30308,30886,33006,33083,33099,33382,33426,33446,33620,34237,34915,35769,35958,36539,38541,39827,41935,44893,49409,50366,50412,51027,52735,53446,55740,58176,60540,66261,71408,72201,72778,72931,74049,74153,74573,74583],"unitygfxdeviceeventtype":[29954],"oscillation":[9171,13665,13679,13864,14988,23069,32865],"weld":[10574,21525,25206,52154,71774],"kformatr32_sfloat":[50120],"myslider":[24172],"band":[4964,18603],"unregister":[5768,20154,28020,55740,57449,59825,60209,62730,66854,76030],"immersiveness":[74976],"investment":[6047],"'usegoogleservice":[53107],"generategradient":[56775],"explores":[62739],"stone_hammer":[41471],"field":[729,1107,1123,1141,1409,2308,2382,3065,4155,4400,4745,4816,4955,5026,5187,6265,6290,6762,7364,7787,7938,8026,9012,9109,9261,9374,9564,9795,9891,9927,10791,11178,11272,11303,11472,12607,12774,12857,13345,13771,13799,13823,13855,13912,14122,14685,14719,14812,14833,18008,18240,18464,18585,19086,19371,20130,20336,20663,20810,20909,21484,22755,23543,23910,25056,25386,25503,26148,26247,26450,26601,26954,27323,28498,28921,29034,29559,29594,30390,30498,30910,31869,32218,32238,32261,32414,33528,34600,34869,35088,35776,35817,36719,36760,36828,36981,37914,38244,39091,39233,39602,39650,39856,40291,40606,40819,41097,41315,41424,41447,41552,41603,41777,43259,44314,48055,48521,48611,48621,49197,49626,49753,50374,50540,52247,52579,52792,52908,53066,53284,53825,54360,54564,54635,54677,54769,54911,55055,55401,55512,55596,55713,55866,56212,56320,56382,56619,57208,57958,58190,58385,58586,58651,58847,59393,59596,59719,59833,60022,60228,61154,61616,61798,61908,62051,62483,63090,63244,64435,64616,64697,65049,65085,65220,65244,65326,65458,65476,65668,65705,65947,65984,66002,66198,66354,66390,66521,67063,67101,67176,68542,68724,68862,69095,70116,70821,71366,72031,72231,72470,73449,73487,73982,74206,74247,75167,75424,75763,75983,76494],"editorsettings":[15146,48777,68602],"boundsintfieldsnippet":[64421],"msg":[11019,66747,66858],"findpasstagvalue":[44804],"serving":[67090,69705,69792],"socialplatforms":[30063],"deobfuscation":[934],"mask":[1926,1953,1965,5676,6703,7107,7202,7841,7843,7986,8001,8021,9858,9889,10245,11466,11473,11657,12702,13144,13485,13718,13761,13789,13833,13902,14546,18063,18239,19944,21728,22073,22487,26647,27214,29101,29136,31152,31814,32287,37416,37589,37701,37731,37836,38347,39535,39665,39704,39727,39765,41771,42673,43145,43654,44096,45594,45851,48904,49472,49604,50500,50512,50647,50672,51641,54167,64945,65941,65993,71561,72757],"mybool":[20900],"profilermoduleviewcontroller":[35504],"varying":[7930,8555,8787,11484,20732,25279,32137,32705,32851,44368,49471,49511,49630,51964,64894,72334],"mist":[22776,34868],"m_appcallbacks":[74671,74801],"treatment":[40358],"accel":[18489],"_invfade":[32939],"so":[11,67,167,223,249,316,399,415,475,517,556,585,693,729,739,890,1006,1124,1169,1300,1352,1378,1393,1566,1592,1729,1846,1886,2007,2053,2089,2216,2235,2295,2358,2409,2459,2666,2958,3302,3466,3490,3666,3696,3721,3826,3847,3885,3904,3937,3952,3975,4066,4230,4286,4354,4366,4450,4484,4493,4526,4654,4713,4875,5221,5265,5330,5346,5353,5498,5756,5800,5970,6066,6179,6281,6291,6314,6427,6475,6488,6597,6705,6723,6774,6792,6841,6857,7073,7187,7199,7321,7482,7573,7645,7767,7931,8131,8203,8358,8429,8562,8692,8782,8899,9163,9260,9309,9376,9713,9792,9875,10058,10260,10369,10428,10579,10633,10720,10772,10825,11192,11221,11263,11275,11308,11323,11346,11521,11598,11654,11735,12105,12310,12334,12699,12842,12865,12988,13034,13239,13263,13465,13597,13666,13830,13854,13898,13956,14103,14233,14347,14560,14593,14728,14794,14833,15836,17045,17296,17312,17488,18058,18229,18292,18339,18379,18501,18615,18681,18935,19026,19397,19473,19783,20096,20155,20210,20215,20242,20378,20452,20604,20636,20655,20785,20880,20959,21042,21170,21240,21344,21433,21445,21565,21684,21870,21964,22125,22139,22244,22303,23616,23626,23798,24060,24169,24307,24461,24505,24601,24621,24668,24747,24781,24813,24946,25035,25115,25194,25261,25353,25435,25569,25622,25734,25747,25756,25888,25970,26000,26040,26058,26077,26113,26145,26244,26269,26271,26302,26376,26442,26472,26510,26587,26607,26627,26716,26925,26934,26987,27025,27089,27141,27263,27332,27488,27495,27520,27654,27786,27979,28168,28455,28782,28881,29022,29118,29213,29440,29443,29568,29614,29695,29733,29759,29790,29814,29842,29863,29924,30019,30050,30063,30110,30219,30265,30345,30634,30877,31013,31602,31688,31760,31869,32184,32297,32343,32724,32775,32847,32933,33178,33416,33419,33620,34042,34337,34491,34559,34640,34670,34698,34791,34901,34919,34956,35129,35205,35250,35280,35541,35763,35794,35937,35958,36040,36227,36331,36367,36513,36678,36712,36855,37261,37365,37622,37647,37670,37715,37724,38273,38332,38346,38393,38426,38485,38498,38508,38524,38734,38839,39017,39097,39157,39329,39418,39472,39666,39794,39819,39856,40064,40091,40164,40563,41322,41725,41791,41843,41906,42121,42354,42449,42456,42615,42738,42811,42958,43031,43128,43200,43297,43359,43456,43553,44063,44097,44270,44363,44383,44442,44502,44645,44659,44691,44839,45002,45050,45180,45200,45531,45577,45627,45721,46158,46576,46722,47028,47067,47179,48516,48536,48556,48597,48615,48677,48913,49481,49513,49520,49562,49567,49610,49627,49638,49642,49665,49824,49908,50002,50011,50058,50128,50289,50339,50356,50368,50562,50593,50712,50743,50770,50783,50796,50809,50822,50835,50860,50969,51035,51119,51137,51240,51244,51344,51788,51850,51875,51966,52095,52126,52174,52224,52329,52590,52737,53203,53310,53785,54374,54545,54581,54720,54762,55060,55398,55558,55927,55986,56172,56247,56307,56372,56530,56933,57427,57584,57964,58001,58075,58173,58338,58375,58673,58844,59033,59481,59868,60209,60813,61545,61570,61624,61812,62032,62774,63922,63955,64219,64322,64699,65194,65934,65986,66006,66038,66110,66194,66225,66335,66357,66388,66521,66555,66827,66861,66881,66907,67060,67110,67187,67266,67351,67568,67579,67592,67626,67644,67763,67867,67921,68110,68513,68602,68700,68900,69138,69294,69710,69746,69813,69884,70060,70127,70175,70227,70292,70302,70332,70384,70586,70774,70867,70940,71012,71129,71221,71277,71392,71534,71573,71623,71644,71672,71751,71765,71809,71871,71898,71969,72048,72292,72500,72665,72731,72800,72942,73082,73203,73238,73253,73292,73312,73382,73501,73621,73642,73704,73904,73908,74172,74311,74422,74791,74799,74827,74942,75006,75076,75397,75508,75741,75905,76097],"tankmovement":[35456],"timespan":[62365,67735],"supports32bitsindexbuffer":[19751],"inputdevices_devicedisconnected":[76240],"schedules":[26508,36040,49289,75445],"purchased":[229,3897,3950,4015,4026,4065,4394,4404,4449,28135,53953,54032,67074,67155,67169,67722,67752,69736,71146,71193,71216,71263],"use_webgl_1_0":[73941],"startcolor":[32801],"drawskybox":[49141],"installbuilder":[66588],"pointerreleased":[74733],"cn":[53602,69891],"deselect":[3904,7849,11557,13401,20551,24535,36060,39134,48624,52992,53344,59469],"neon":[50195],"varyings":[45725,47371,49008],"billing":[30413,52929,67117,67153,67261,67732,67749,67845],"_alpha":[8739,14158],"quadratic":[26789,36638,47132,58543],"s_xrdisplay":[75269,75923],"got":[30086,35883,52451,60601,76257],"kcubexremap":[8660],"capsule's":[8157],"workload":[20438,22651,26495,29439,30359,33399,44166,74661],"alongside":[495,1746,4562,6337,11046,20281,25065,30986,32263,33515,35998,36040,36632,38477,50673,52240,67582,74187,75090],"showdebugmenu":[55327],"8x8":[14268,14362,37798],"interdependencies":[26079],"_maintex":[1690,8715,10146,14157,23295,29492,31879,32938,43378,43597,44279,44374,44488,45096,45158,45207,45297,45749,46161,46537,46834,47197,51076,72569],"drawbacks":[29476,40175],"unity_assertions":[33808],"dude":[40618],"operator":[6184,7379,14937,18571,21052,26617,26622,26635,40971,41257,41337,41467,45315,69631,71578],"prefabutility":[40687],"anisotropy":[25292,38007],"importviamaterialdescription":[21423],"notably":[20381,38426,44371,44914,45726],"checkwriteandbumpsecondaryversion":[26122,26204],"explore":[5184,10507,23796,24790,35677,36285,65916,70280,71284,71408,74178],"dx10+":[45615],"#7baefa":[63275],"pinpoint":[35958],"redrawing":[52642],"expand":[627,1881,1913,1968,2036,4510,7105,7969,8173,8270,8388,8773,9033,9258,9732,9777,11462,11565,12225,12444,12731,13562,14150,14220,14488,14508,14540,14987,18149,18201,19321,19342,20327,20565,23450,24747,28200,28352,29082,29895,30501,32141,32632,33094,33440,33497,35380,35696,36059,36695,38570,38600,38634,39418,39468,39588,39778,40142,40971,41257,41691,43465,48258,49385,51323,51382,52186,52240,52745,53451,53865,54579,54692,55107,61545,64640,66225,67682,70312,71136,71236,71406,71493,71690,71809,73137,73317,73386,73614,74531,74899,75187],"depending":[174,469,498,535,554,603,1071,1351,1359,1383,1584,2985,3259,3484,3520,3569,3975,4054,4223,4527,4574,5952,6356,6816,7292,7506,7752,8014,8115,8868,9284,9862,10385,12408,12942,13022,13122,13428,13538,13909,14128,14224,14350,14730,15854,18241,18435,18851,19168,19385,19481,19986,20335,20706,21393,21527,22013,22058,22776,23439,23611,24297,24624,24727,24754,24776,24916,24967,25170,25258,25311,25358,25845,25877,26706,26784,27127,27299,27495,27550,28022,28488,28897,29340,29403,29973,30207,30282,30871,32090,32371,32609,32747,32849,33299,33403,33565,33865,34596,34857,35388,36330,36550,36593,37270,37617,38382,38532,38639,38657,39807,39822,40358,41395,42044,42162,42354,42788,43452,43883,43981,44053,44269,44558,44879,45166,45294,45479,45643,45721,45848,45866,47103,48250,48335,48376,48601,48703,48874,49506,49518,49593,49617,49770,50164,50361,50796,50998,51954,54049,54474,54733,55554,56197,57319,57723,58190,58394,58730,59868,61092,61528,62822,66206,67609,67912,68609,68922,69165,69512,69997,70176,70243,70413,70756,71044,71372,71446,71459,71900,72413,72491,72666,72756,72836,72858,72926,72986,73117,73486,73602,73937,74548,75237,75368,75424,75474],"harder":[12012,18509,20117,45577,52080,67764],"\\users\\username\\documents\\myproject":[21126],"fire1":[2026,2113,20496,25579,25782,50336],"binaural":[4766,7672],"sunflower":[40343],"longest":[4699,25077,32270],"unitysynchronizationcontext":[30904],"\\users\\":[239,19628,52506,70135],"dsptick":[5006],"authenticity":[32311,66635,67771],"vertexfunction":[46776],"7s":[63054],"selector's":[54652,63955],"supportsgraphicsfence":[19774],"inequality":[30901],"widest":[1556,38434,43456,51137],"wysiwyg":[54146],"embeds":[28248,32144,34237,73908],"fewest":[18319,50671],"checkshaderkeywordstate":[42073],"brush’s":[51617],"canmakepayments":[67349],"offmesh":[49725],"collecting":[4117,4229,21006,21111,35692,36538,70236,74163],"gameswitches":[55324],"abstraction":[18485,49659],"whom":[17092,22437,67948],"serializedpropertychangeevent":[59596],"unicorn":[66678],"worklfows":[37966],"stepping":[22544,28378,50321],"storea":[53198],"qualify":[36781],"ismatch":[6024],"corrections":[28789],"playable":[6703,22519,33902,34155,34175,34191],"str++":[28275,72155,74599],"invariant":[5948,6032,44876],"spriteassetfile":[61578],"dimetric":[22291,51174],"ado":[47337],"plist":[12155,24634,25675,25970,28103,28207,34372,49760,52691,67053,67526],"unityappcontroller":[49762,66848],"here’s":[3352,3553,8412,25551,33267,45251,52744],"shadow_caster_fragment":[47800],"practically":[2178,6750,7323,9588],"acts":[1031,1995,7615,9322,10345,11303,13665,13915,15000,22569,25044,26564,30173,34165,34828,34923,36916,40159,41682,43101,45839,48912,49285,51851,52043,52099,52177,54015,65061,65286,66363,67193,72776,75516],"drawranges":[5649],"“lobby”":[66193],"lodgroup":[10352,12958,15173,46081,47153,48226,50600],"expandable":[7110,31680,35380,41259],"popmatrix":[51524],"color's":[55866,62014],"carousel":[53290],"overlayattribute":[30535],"\\n":[20486,70821,73583],"“headless”":[34203],"flare":[6703,9195,9241,9479,9841,9891,15119,18333,22811,26895,38156,45636,52145,72808,72827,74301],"attracts":[7294,11487,12709],"immutable":[5984,22989,33134,36798,69740,70340,70746,73227],"backfaces_":[8317],"siri":[52754]}}